From 5f3a205955ce7fdb9ae1a4dc60d4ef25c300e901 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Thu, 6 Oct 2016 14:21:30 +0300 Subject: [PATCH] initial import --- .gitignore | 2 + boards.txt | 42 + cores/esp32/Arduino.h | 63 + cores/esp32/Client.h | 48 + cores/esp32/Esp.cpp | 223 + cores/esp32/Esp.h | 85 + cores/esp32/HardwareSerial.cpp | 117 + cores/esp32/HardwareSerial.h | 78 + cores/esp32/IPAddress.cpp | 81 + cores/esp32/IPAddress.h | 93 + cores/esp32/MD5Builder.cpp | 117 + cores/esp32/MD5Builder.h | 63 + cores/esp32/Print.cpp | 293 + cores/esp32/Print.h | 101 + cores/esp32/Printable.h | 41 + cores/esp32/Server.h | 31 + cores/esp32/Stream.cpp | 291 + cores/esp32/Stream.h | 128 + cores/esp32/StreamString.cpp | 71 + cores/esp32/StreamString.h | 39 + cores/esp32/Udp.h | 92 + cores/esp32/WCharacter.h | 155 + cores/esp32/WMath.cpp | 67 + cores/esp32/WString.cpp | 894 ++ cores/esp32/WString.h | 327 + cores/esp32/base64.cpp | 65 + cores/esp32/base64.h | 13 + cores/esp32/binary.h | 534 ++ cores/esp32/cbuf.cpp | 196 + cores/esp32/cbuf.h | 79 + cores/esp32/esp32-hal-gpio.c | 217 + cores/esp32/esp32-hal-gpio.h | 69 + cores/esp32/esp32-hal-i2c.c | 247 + cores/esp32/esp32-hal-i2c.h | 50 + cores/esp32/esp32-hal-log.h | 105 + cores/esp32/esp32-hal-matrix.c | 47 + cores/esp32/esp32-hal-matrix.h | 35 + cores/esp32/esp32-hal-misc.c | 50 + cores/esp32/esp32-hal-spi.c | 700 ++ cores/esp32/esp32-hal-spi.h | 118 + cores/esp32/esp32-hal-uart.c | 270 + cores/esp32/esp32-hal-uart.h | 84 + cores/esp32/esp32-hal.h | 54 + cores/esp32/libb64/AUTHORS | 7 + cores/esp32/libb64/LICENSE | 29 + cores/esp32/libb64/cdecode.c | 94 + cores/esp32/libb64/cdecode.h | 38 + cores/esp32/libb64/cencode.c | 111 + cores/esp32/libb64/cencode.h | 41 + cores/esp32/main.cpp | 35 + cores/esp32/pgmspace.h | 42 + cores/esp32/stdlib_noniso.h | 49 + cores/esp32/wiring_private.h | 45 + libraries/SPI/keywords.txt | 36 + libraries/SPI/library.properties | 9 + libraries/SPI/src/SPI.cpp | 232 + libraries/SPI/src/SPI.h | 81 + .../examples/HTTPSRequest/HTTPSRequest.ino | 90 + .../WiFi/examples/NTPClient/NTPClient.ino | 152 + .../WiFiAccessPoint/WiFiAccessPoint.ino | 71 + .../WiFi/examples/WiFiClient/WiFiClient.ino | 94 + .../WiFiClientBasic/WiFiClientBasic.ino | 70 + .../WiFiClientEvents/WiFiClientEvents.ino | 51 + .../WiFi/examples/WiFiMulti/WiFiMulti.ino | 35 + libraries/WiFi/examples/WiFiScan/WiFiScan.ino | 48 + .../WiFiTelnetToSerial/WiFiTelnetToSerial.ino | 103 + .../examples/WiFiWebServer/WiFiWebServer.ino | 100 + libraries/WiFi/keywords.txt | 68 + libraries/WiFi/library.properties | 9 + libraries/WiFi/src/WiFi.cpp | 96 + libraries/WiFi/src/WiFi.h | 62 + libraries/WiFi/src/WiFiAP.cpp | 234 + libraries/WiFi/src/WiFiAP.h | 55 + libraries/WiFi/src/WiFiClient.cpp | 250 + libraries/WiFi/src/WiFiClient.h | 92 + libraries/WiFi/src/WiFiGeneric.cpp | 333 + libraries/WiFi/src/WiFiGeneric.h | 73 + libraries/WiFi/src/WiFiMulti.cpp | 218 + libraries/WiFi/src/WiFiMulti.h | 66 + libraries/WiFi/src/WiFiSTA.cpp | 455 + libraries/WiFi/src/WiFiSTA.h | 85 + libraries/WiFi/src/WiFiScan.cpp | 268 + libraries/WiFi/src/WiFiScan.h | 64 + libraries/WiFi/src/WiFiType.h | 48 + libraries/Wire/keywords.txt | 33 + libraries/Wire/library.properties | 9 + libraries/Wire/src/Wire.cpp | 211 + libraries/Wire/src/Wire.h | 97 + package/package_esp32_index.template.json | 76 + platform.txt | 97 + programmers.txt | 0 tools/esptool.py | 1816 ++++ tools/get.py | 116 + tools/sdk/bin/bootloader.bin | Bin 0 -> 4016 bytes tools/sdk/bin/partitions_singleapp.bin | Bin 0 -> 96 bytes tools/sdk/include/bt/bt.h | 69 + tools/sdk/include/config/sdkconfig.h | 49 + tools/sdk/include/driver/driver/gpio.h | 462 + tools/sdk/include/driver/driver/ledc.h | 406 + tools/sdk/include/driver/driver/periph_ctrl.h | 70 + tools/sdk/include/esp32/esp_attr.h | 41 + tools/sdk/include/esp32/esp_deepsleep.h | 137 + tools/sdk/include/esp32/esp_err.h | 46 + tools/sdk/include/esp32/esp_event.h | 141 + tools/sdk/include/esp32/esp_event_loop.h | 81 + tools/sdk/include/esp32/esp_intr.h | 209 + tools/sdk/include/esp32/esp_ipc.h | 88 + tools/sdk/include/esp32/esp_smartconfig.h | 143 + tools/sdk/include/esp32/esp_ssc.h | 119 + tools/sdk/include/esp32/esp_system.h | 187 + tools/sdk/include/esp32/esp_task.h | 59 + tools/sdk/include/esp32/esp_types.h | 73 + tools/sdk/include/esp32/esp_wifi.h | 586 ++ tools/sdk/include/esp32/esp_wifi_types.h | 190 + tools/sdk/include/esp32/hwcrypto/aes.h | 281 + tools/sdk/include/esp32/hwcrypto/sha.h | 250 + tools/sdk/include/esp32/rom/aes.h | 57 + tools/sdk/include/esp32/rom/bigint.h | 62 + tools/sdk/include/esp32/rom/cache.h | 146 + tools/sdk/include/esp32/rom/crc.h | 127 + tools/sdk/include/esp32/rom/efuse.h | 112 + tools/sdk/include/esp32/rom/ets_sys.h | 616 ++ tools/sdk/include/esp32/rom/gpio.h | 300 + tools/sdk/include/esp32/rom/libc_stubs.h | 89 + tools/sdk/include/esp32/rom/lldesc.h | 176 + tools/sdk/include/esp32/rom/md5_hash.h | 38 + tools/sdk/include/esp32/rom/miniz.h | 777 ++ tools/sdk/include/esp32/rom/queue.h | 645 ++ tools/sdk/include/esp32/rom/rtc.h | 206 + tools/sdk/include/esp32/rom/secure_boot.h | 46 + tools/sdk/include/esp32/rom/sha.h | 58 + tools/sdk/include/esp32/rom/spi_flash.h | 514 + tools/sdk/include/esp32/rom/tbconsole.h | 27 + tools/sdk/include/esp32/rom/tjpgd.h | 99 + tools/sdk/include/esp32/rom/uart.h | 411 + tools/sdk/include/esp32/soc/bb_reg.h | 102 + tools/sdk/include/esp32/soc/boot_mode.h | 104 + tools/sdk/include/esp32/soc/cpu.h | 81 + tools/sdk/include/esp32/soc/dport_reg.h | 3838 ++++++++ tools/sdk/include/esp32/soc/efuse_reg.h | 986 ++ tools/sdk/include/esp32/soc/gpio_reg.h | 8239 +++++++++++++++++ tools/sdk/include/esp32/soc/gpio_sd_reg.h | 160 + tools/sdk/include/esp32/soc/gpio_sd_struct.h | 48 + tools/sdk/include/esp32/soc/gpio_sig_map.h | 422 + tools/sdk/include/esp32/soc/gpio_struct.h | 204 + tools/sdk/include/esp32/soc/i2c_reg.h | 949 ++ tools/sdk/include/esp32/soc/i2c_struct.h | 289 + tools/sdk/include/esp32/soc/i2s_reg.h | 1527 +++ tools/sdk/include/esp32/soc/i2s_struct.h | 461 + tools/sdk/include/esp32/soc/io_mux_reg.h | 267 + tools/sdk/include/esp32/soc/ledc_reg.h | 2423 +++++ tools/sdk/include/esp32/soc/ledc_struct.h | 240 + tools/sdk/include/esp32/soc/pcnt_reg.h | 1496 +++ tools/sdk/include/esp32/soc/pcnt_struct.h | 161 + tools/sdk/include/esp32/soc/pid.h | 65 + tools/sdk/include/esp32/soc/rmt_reg.h | 2171 +++++ tools/sdk/include/esp32/soc/rmt_struct.h | 228 + tools/sdk/include/esp32/soc/rtc_cntl_reg.h | 1988 ++++ tools/sdk/include/esp32/soc/rtc_io_reg.h | 1951 ++++ tools/sdk/include/esp32/soc/saradc_reg.h | 1047 +++ tools/sdk/include/esp32/soc/soc.h | 312 + tools/sdk/include/esp32/soc/spi_reg.h | 1717 ++++ tools/sdk/include/esp32/soc/spi_struct.h | 677 ++ tools/sdk/include/esp32/soc/timer_group_reg.h | 658 ++ .../include/esp32/soc/timer_group_struct.h | 195 + tools/sdk/include/esp32/soc/uart_reg.h | 1165 +++ tools/sdk/include/esp32/soc/uart_struct.h | 365 + tools/sdk/include/esp32/soc/uhci_reg.h | 1260 +++ tools/sdk/include/esp32/soc/uhci_struct.h | 337 + tools/sdk/include/esp32/xtensa/board.h | 28 + tools/sdk/include/esp32/xtensa/c6x-compat.h | 1758 ++++ tools/sdk/include/esp32/xtensa/cacheasm.h | 962 ++ tools/sdk/include/esp32/xtensa/cacheattrasm.h | 436 + .../include/esp32/xtensa/config/core-isa.h | 655 ++ .../include/esp32/xtensa/config/core-matmap.h | 318 + tools/sdk/include/esp32/xtensa/config/core.h | 1405 +++ tools/sdk/include/esp32/xtensa/config/defs.h | 38 + .../sdk/include/esp32/xtensa/config/specreg.h | 117 + .../sdk/include/esp32/xtensa/config/system.h | 274 + .../sdk/include/esp32/xtensa/config/tie-asm.h | 323 + tools/sdk/include/esp32/xtensa/config/tie.h | 182 + tools/sdk/include/esp32/xtensa/core-macros.h | 456 + tools/sdk/include/esp32/xtensa/coreasm.h | 939 ++ tools/sdk/include/esp32/xtensa/corebits.h | 185 + tools/sdk/include/esp32/xtensa/debugfs.h | 93 + tools/sdk/include/esp32/xtensa/feedback.h | 45 + tools/sdk/include/esp32/xtensa/gdbio.h | 80 + tools/sdk/include/esp32/xtensa/hal.h | 1024 ++ tools/sdk/include/esp32/xtensa/jtag-xtensa.h | 99 + .../xtensa/lcd-splc780d-4bitmode-board.h | 62 + .../esp32/xtensa/lcd-splc780d-4bitmode.h | 105 + tools/sdk/include/esp32/xtensa/lcd-splc780d.h | 151 + tools/sdk/include/esp32/xtensa/overlay.h | 184 + .../sdk/include/esp32/xtensa/overlay_os_asm.h | 140 + tools/sdk/include/esp32/xtensa/sim.h | 60 + tools/sdk/include/esp32/xtensa/simboard.h | 71 + .../sdk/include/esp32/xtensa/simcall-errno.h | 139 + .../sdk/include/esp32/xtensa/simcall-fcntl.h | 21 + tools/sdk/include/esp32/xtensa/simcall.h | 189 + tools/sdk/include/esp32/xtensa/specreg.h | 143 + .../include/esp32/xtensa/tie/xt_DFP_assist.h | 96 + tools/sdk/include/esp32/xtensa/tie/xt_FP.h | 197 + tools/sdk/include/esp32/xtensa/tie/xt_MAC16.h | 239 + tools/sdk/include/esp32/xtensa/tie/xt_MUL32.h | 24 + .../include/esp32/xtensa/tie/xt_booleans.h | 69 + .../esp32/xtensa/tie/xt_coprocessors.h | 48 + tools/sdk/include/esp32/xtensa/tie/xt_core.h | 395 + tools/sdk/include/esp32/xtensa/tie/xt_debug.h | 116 + .../sdk/include/esp32/xtensa/tie/xt_density.h | 58 + .../include/esp32/xtensa/tie/xt_exceptions.h | 45 + .../esp32/xtensa/tie/xt_externalregisters.h | 46 + .../esp32/xtensa/tie/xt_integerdivide.h | 50 + .../include/esp32/xtensa/tie/xt_interrupt.h | 56 + .../sdk/include/esp32/xtensa/tie/xt_ioports.h | 66 + tools/sdk/include/esp32/xtensa/tie/xt_misc.h | 58 + tools/sdk/include/esp32/xtensa/tie/xt_mmu.h | 62 + tools/sdk/include/esp32/xtensa/tie/xt_mul.h | 52 + .../sdk/include/esp32/xtensa/tie/xt_regwin.h | 64 + tools/sdk/include/esp32/xtensa/tie/xt_scmpr.h | 22 + tools/sdk/include/esp32/xtensa/tie/xt_sync.h | 60 + tools/sdk/include/esp32/xtensa/tie/xt_timer.h | 66 + tools/sdk/include/esp32/xtensa/tie/xt_trace.h | 44 + tools/sdk/include/esp32/xtensa/trax-api.h | 93 + .../include/esp32/xtensa/trax-core-config.h | 144 + tools/sdk/include/esp32/xtensa/trax-proto.h | 91 + tools/sdk/include/esp32/xtensa/trax-util.h | 63 + tools/sdk/include/esp32/xtensa/trax.h | 409 + tools/sdk/include/esp32/xtensa/traxfile.h | 62 + tools/sdk/include/esp32/xtensa/traxreg.h | 199 + .../include/esp32/xtensa/uart-16550-board.h | 69 + tools/sdk/include/esp32/xtensa/uart-16550.h | 152 + tools/sdk/include/esp32/xtensa/udma.h | 276 + tools/sdk/include/esp32/xtensa/xdm-regs.h | 530 ++ tools/sdk/include/esp32/xtensa/xmon.h | 97 + tools/sdk/include/esp32/xtensa/xmp-library.h | 789 ++ tools/sdk/include/esp32/xtensa/xos.h | 524 ++ tools/sdk/include/esp32/xtensa/xos_common.h | 362 + tools/sdk/include/esp32/xtensa/xos_cond.h | 145 + tools/sdk/include/esp32/xtensa/xos_errors.h | 107 + tools/sdk/include/esp32/xtensa/xos_event.h | 281 + tools/sdk/include/esp32/xtensa/xos_internal.h | 120 + tools/sdk/include/esp32/xtensa/xos_msgq.h | 278 + tools/sdk/include/esp32/xtensa/xos_mutex.h | 205 + tools/sdk/include/esp32/xtensa/xos_params.h | 276 + .../sdk/include/esp32/xtensa/xos_regaccess.h | 201 + .../sdk/include/esp32/xtensa/xos_semaphore.h | 190 + .../sdk/include/esp32/xtensa/xos_stopwatch.h | 175 + tools/sdk/include/esp32/xtensa/xos_syslog.h | 330 + tools/sdk/include/esp32/xtensa/xos_thread.h | 1086 +++ tools/sdk/include/esp32/xtensa/xos_timer.h | 592 ++ tools/sdk/include/esp32/xtensa/xos_types.h | 75 + .../sdk/include/esp32/xtensa/xt_perf_consts.h | 283 + tools/sdk/include/esp32/xtensa/xt_perfmon.h | 183 + tools/sdk/include/esp32/xtensa/xt_profiling.h | 233 + tools/sdk/include/esp32/xtensa/xt_reftb.h | 86 + tools/sdk/include/esp32/xtensa/xtav110.h | 313 + .../esp32/xtensa/xtav110/xtensa/board.h | 13 + tools/sdk/include/esp32/xtensa/xtav200.h | 280 + .../esp32/xtensa/xtav200/xtensa/board.h | 13 + tools/sdk/include/esp32/xtensa/xtav60.h | 241 + .../esp32/xtensa/xtav60/xtensa/board.h | 13 + .../xtensa/xtav60/xtensa/lcd-splc780d-board.h | 60 + tools/sdk/include/esp32/xtensa/xtbsp.h | 269 + .../esp32/xtensa/xtensa-libdb-macros.h | 161 + .../include/esp32/xtensa/xtensa-versions.h | 347 + tools/sdk/include/esp32/xtensa/xtensa-xer.h | 149 + tools/sdk/include/esp32/xtensa/xtkc705.h | 14 + .../esp32/xtensa/xtkc705/xtensa/board.h | 13 + tools/sdk/include/esp32/xtensa/xtload-api.h | 77 + tools/sdk/include/esp32/xtensa/xtml605.h | 338 + .../esp32/xtensa/xtml605/xtensa/board.h | 13 + .../esp32/xtensa/xtruntime-core-state.h | 212 + .../include/esp32/xtensa/xtruntime-frames.h | 162 + tools/sdk/include/esp32/xtensa/xtruntime.h | 221 + tools/sdk/include/esp32/xtensa/xtutil.h | 61 + tools/sdk/include/expat/ascii.h | 92 + tools/sdk/include/expat/asciitab.h | 36 + tools/sdk/include/expat/chardata.h | 40 + tools/sdk/include/expat/expat.h | 1048 +++ tools/sdk/include/expat/expat_config.h | 103 + tools/sdk/include/expat/expat_external.h | 129 + tools/sdk/include/expat/iasciitab.h | 37 + tools/sdk/include/expat/internal.h | 95 + tools/sdk/include/expat/latin1tab.h | 36 + tools/sdk/include/expat/minicheck.h | 95 + tools/sdk/include/expat/nametab.h | 150 + tools/sdk/include/expat/utf8tab.h | 37 + tools/sdk/include/expat/xmlrole.h | 114 + tools/sdk/include/expat/xmltok.h | 322 + tools/sdk/include/expat/xmltok_impl.h | 46 + .../sdk/include/freertos/freertos/FreeRTOS.h | 799 ++ .../freertos/freertos/FreeRTOSConfig.h | 279 + .../include/freertos/freertos/StackMacros.h | 184 + .../sdk/include/freertos/freertos/croutine.h | 762 ++ .../freertos/deprecated_definitions.h | 321 + .../include/freertos/freertos/event_groups.h | 730 ++ .../include/freertos/freertos/heap_regions.h | 34 + .../freertos/freertos/heap_regions_debug.h | 78 + tools/sdk/include/freertos/freertos/list.h | 453 + .../include/freertos/freertos/mpu_wrappers.h | 157 + tools/sdk/include/freertos/freertos/panic.h | 7 + .../sdk/include/freertos/freertos/portable.h | 203 + .../include/freertos/freertos/portbenchmark.h | 46 + .../sdk/include/freertos/freertos/portmacro.h | 302 + .../sdk/include/freertos/freertos/porttrace.h | 42 + .../sdk/include/freertos/freertos/projdefs.h | 109 + tools/sdk/include/freertos/freertos/queue.h | 1693 ++++ tools/sdk/include/freertos/freertos/ringbuf.h | 206 + tools/sdk/include/freertos/freertos/semphr.h | 844 ++ tools/sdk/include/freertos/freertos/task.h | 2032 ++++ tools/sdk/include/freertos/freertos/timers.h | 1125 +++ .../include/freertos/freertos/xtensa_api.h | 118 + .../include/freertos/freertos/xtensa_config.h | 146 + .../freertos/freertos/xtensa_context.h | 383 + .../include/freertos/freertos/xtensa_rtos.h | 233 + .../include/freertos/freertos/xtensa_timer.h | 159 + tools/sdk/include/json/cJSON.h | 149 + tools/sdk/include/json/cJSON_Utils.h | 30 + tools/sdk/include/log/esp_log.h | 209 + tools/sdk/include/lwip/apps/dhcpserver.h | 200 + tools/sdk/include/lwip/apps/sntp/sntp.h | 71 + tools/sdk/include/lwip/apps/sntp/sntp_opts.h | 159 + tools/sdk/include/lwip/arch/cc.h | 76 + tools/sdk/include/lwip/arch/perf.h | 40 + tools/sdk/include/lwip/arch/sys_arch.h | 82 + tools/sdk/include/lwip/lwip/api.h | 368 + tools/sdk/include/lwip/lwip/arch.h | 233 + tools/sdk/include/lwip/lwip/autoip.h | 124 + tools/sdk/include/lwip/lwip/debug.h | 117 + tools/sdk/include/lwip/lwip/def.h | 132 + tools/sdk/include/lwip/lwip/dhcp.h | 306 + tools/sdk/include/lwip/lwip/dhcp6.h | 58 + tools/sdk/include/lwip/lwip/dns.h | 118 + tools/sdk/include/lwip/lwip/err.h | 95 + tools/sdk/include/lwip/lwip/ethip6.h | 68 + tools/sdk/include/lwip/lwip/icmp.h | 137 + tools/sdk/include/lwip/lwip/icmp6.h | 152 + tools/sdk/include/lwip/lwip/igmp.h | 108 + tools/sdk/include/lwip/lwip/inet.h | 172 + tools/sdk/include/lwip/lwip/inet_chksum.h | 106 + tools/sdk/include/lwip/lwip/init.h | 72 + tools/sdk/include/lwip/lwip/ip.h | 304 + tools/sdk/include/lwip/lwip/ip4.h | 161 + tools/sdk/include/lwip/lwip/ip4_addr.h | 253 + tools/sdk/include/lwip/lwip/ip6.h | 197 + tools/sdk/include/lwip/lwip/ip6_addr.h | 301 + tools/sdk/include/lwip/lwip/ip6_frag.h | 120 + tools/sdk/include/lwip/lwip/ip_addr.h | 291 + tools/sdk/include/lwip/lwip/ip_frag.h | 95 + tools/sdk/include/lwip/lwip/lwip_debug.h | 24 + tools/sdk/include/lwip/lwip/mem.h | 162 + tools/sdk/include/lwip/lwip/memp.h | 133 + tools/sdk/include/lwip/lwip/mld6.h | 119 + tools/sdk/include/lwip/lwip/nd6.h | 361 + tools/sdk/include/lwip/lwip/netbuf.h | 112 + tools/sdk/include/lwip/lwip/netdb.h | 142 + tools/sdk/include/lwip/lwip/netif.h | 447 + tools/sdk/include/lwip/lwip/netifapi.h | 108 + tools/sdk/include/lwip/lwip/opt.h | 3015 ++++++ tools/sdk/include/lwip/lwip/pbuf.h | 231 + tools/sdk/include/lwip/lwip/pppapi.h | 148 + tools/sdk/include/lwip/lwip/priv/api_msg.h | 260 + tools/sdk/include/lwip/lwip/priv/memp_priv.h | 163 + tools/sdk/include/lwip/lwip/priv/memp_std.h | 151 + tools/sdk/include/lwip/lwip/priv/tcp_priv.h | 545 ++ tools/sdk/include/lwip/lwip/priv/tcpip_priv.h | 163 + tools/sdk/include/lwip/lwip/raw.h | 109 + tools/sdk/include/lwip/lwip/sio.h | 141 + tools/sdk/include/lwip/lwip/snmp.h | 195 + tools/sdk/include/lwip/lwip/sockets.h | 624 ++ tools/sdk/include/lwip/lwip/stats.h | 462 + tools/sdk/include/lwip/lwip/sys.h | 362 + tools/sdk/include/lwip/lwip/tcp.h | 411 + tools/sdk/include/lwip/lwip/tcpip.h | 85 + tools/sdk/include/lwip/lwip/timers.h | 101 + tools/sdk/include/lwip/lwip/udp.h | 194 + tools/sdk/include/lwip/lwipopts.h | 531 ++ tools/sdk/include/lwip/netdb.h | 33 + tools/sdk/include/lwip/netif/etharp.h | 143 + tools/sdk/include/lwip/netif/ethernet.h | 171 + tools/sdk/include/lwip/netif/lowpan6.h | 84 + tools/sdk/include/lwip/netif/lowpan6_opts.h | 65 + tools/sdk/include/lwip/netif/ppp/ccp.h | 156 + tools/sdk/include/lwip/netif/ppp/chap-md5.h | 36 + tools/sdk/include/lwip/netif/ppp/chap-new.h | 192 + tools/sdk/include/lwip/netif/ppp/chap_ms.h | 44 + tools/sdk/include/lwip/netif/ppp/eap.h | 169 + tools/sdk/include/lwip/netif/ppp/ecp.h | 50 + tools/sdk/include/lwip/netif/ppp/eui64.h | 94 + tools/sdk/include/lwip/netif/ppp/fsm.h | 175 + tools/sdk/include/lwip/netif/ppp/ipcp.h | 126 + tools/sdk/include/lwip/netif/ppp/ipv6cp.h | 183 + tools/sdk/include/lwip/netif/ppp/lcp.h | 169 + tools/sdk/include/lwip/netif/ppp/magic.h | 122 + tools/sdk/include/lwip/netif/ppp/mppe.h | 177 + .../include/lwip/netif/ppp/polarssl/arc4.h | 81 + .../sdk/include/lwip/netif/ppp/polarssl/des.h | 92 + .../sdk/include/lwip/netif/ppp/polarssl/md4.h | 97 + .../sdk/include/lwip/netif/ppp/polarssl/md5.h | 96 + .../include/lwip/netif/ppp/polarssl/sha1.h | 96 + tools/sdk/include/lwip/netif/ppp/ppp.h | 573 ++ tools/sdk/include/lwip/netif/ppp/ppp_impl.h | 632 ++ tools/sdk/include/lwip/netif/ppp/pppcrypt.h | 43 + tools/sdk/include/lwip/netif/ppp/pppdebug.h | 80 + tools/sdk/include/lwip/netif/ppp/pppoe.h | 179 + tools/sdk/include/lwip/netif/ppp/pppol2tp.h | 201 + tools/sdk/include/lwip/netif/ppp/pppos.h | 119 + tools/sdk/include/lwip/netif/ppp/upap.h | 123 + tools/sdk/include/lwip/netif/ppp/vj.h | 161 + tools/sdk/include/lwip/netif/slipif.h | 81 + tools/sdk/include/lwip/netif/wlanif.h | 31 + tools/sdk/include/lwip/port/arch/cc.h | 76 + tools/sdk/include/lwip/port/arch/perf.h | 40 + tools/sdk/include/lwip/port/arch/sys_arch.h | 82 + tools/sdk/include/lwip/port/lwipopts.h | 531 ++ tools/sdk/include/lwip/port/netif/wlanif.h | 31 + tools/sdk/include/lwip/posix/netdb.h | 33 + tools/sdk/include/lwip/posix/sys/socket.h | 33 + tools/sdk/include/lwip/sys/socket.h | 33 + tools/sdk/include/mbedtls/.gitignore | 4 + tools/sdk/include/mbedtls/aes_alt.h | 59 + tools/sdk/include/mbedtls/mbedtls/aes.h | 297 + tools/sdk/include/mbedtls/mbedtls/aesni.h | 111 + tools/sdk/include/mbedtls/mbedtls/arc4.h | 113 + tools/sdk/include/mbedtls/mbedtls/asn1.h | 342 + tools/sdk/include/mbedtls/mbedtls/asn1write.h | 239 + tools/sdk/include/mbedtls/mbedtls/base64.h | 88 + tools/sdk/include/mbedtls/mbedtls/bignum.h | 722 ++ tools/sdk/include/mbedtls/mbedtls/blowfish.h | 203 + tools/sdk/include/mbedtls/mbedtls/bn_mul.h | 885 ++ tools/sdk/include/mbedtls/mbedtls/camellia.h | 235 + tools/sdk/include/mbedtls/mbedtls/ccm.h | 141 + tools/sdk/include/mbedtls/mbedtls/certs.h | 99 + .../include/mbedtls/mbedtls/check_config.h | 587 ++ tools/sdk/include/mbedtls/mbedtls/cipher.h | 699 ++ .../include/mbedtls/mbedtls/cipher_internal.h | 109 + .../sdk/include/mbedtls/mbedtls/compat-1.3.h | 2634 ++++++ tools/sdk/include/mbedtls/mbedtls/config.h | 2587 ++++++ tools/sdk/include/mbedtls/mbedtls/ctr_drbg.h | 290 + tools/sdk/include/mbedtls/mbedtls/debug.h | 228 + tools/sdk/include/mbedtls/mbedtls/des.h | 306 + tools/sdk/include/mbedtls/mbedtls/dhm.h | 305 + tools/sdk/include/mbedtls/mbedtls/ecdh.h | 214 + tools/sdk/include/mbedtls/mbedtls/ecdsa.h | 248 + tools/sdk/include/mbedtls/mbedtls/ecjpake.h | 238 + tools/sdk/include/mbedtls/mbedtls/ecp.h | 669 ++ tools/sdk/include/mbedtls/mbedtls/entropy.h | 267 + .../include/mbedtls/mbedtls/entropy_poll.h | 107 + tools/sdk/include/mbedtls/mbedtls/error.h | 107 + .../sdk/include/mbedtls/mbedtls/esp_config.h | 2531 +++++ tools/sdk/include/mbedtls/mbedtls/gcm.h | 220 + tools/sdk/include/mbedtls/mbedtls/havege.h | 74 + tools/sdk/include/mbedtls/mbedtls/hmac_drbg.h | 299 + tools/sdk/include/mbedtls/mbedtls/md.h | 353 + tools/sdk/include/mbedtls/mbedtls/md2.h | 136 + tools/sdk/include/mbedtls/mbedtls/md4.h | 136 + tools/sdk/include/mbedtls/mbedtls/md5.h | 136 + .../sdk/include/mbedtls/mbedtls/md_internal.h | 114 + .../mbedtls/mbedtls/memory_buffer_alloc.h | 150 + tools/sdk/include/mbedtls/mbedtls/net.h | 225 + tools/sdk/include/mbedtls/mbedtls/oid.h | 570 ++ tools/sdk/include/mbedtls/mbedtls/padlock.h | 107 + tools/sdk/include/mbedtls/mbedtls/pem.h | 129 + tools/sdk/include/mbedtls/mbedtls/pk.h | 616 ++ .../sdk/include/mbedtls/mbedtls/pk_internal.h | 114 + tools/sdk/include/mbedtls/mbedtls/pkcs11.h | 173 + tools/sdk/include/mbedtls/mbedtls/pkcs12.h | 119 + tools/sdk/include/mbedtls/mbedtls/pkcs5.h | 94 + tools/sdk/include/mbedtls/mbedtls/platform.h | 324 + tools/sdk/include/mbedtls/mbedtls/ripemd160.h | 138 + tools/sdk/include/mbedtls/mbedtls/rsa.h | 652 ++ tools/sdk/include/mbedtls/mbedtls/sha1.h | 136 + tools/sdk/include/mbedtls/mbedtls/sha256.h | 141 + tools/sdk/include/mbedtls/mbedtls/sha512.h | 141 + tools/sdk/include/mbedtls/mbedtls/ssl.h | 2549 +++++ tools/sdk/include/mbedtls/mbedtls/ssl_cache.h | 143 + .../mbedtls/mbedtls/ssl_ciphersuites.h | 321 + .../sdk/include/mbedtls/mbedtls/ssl_cookie.h | 108 + .../include/mbedtls/mbedtls/ssl_internal.h | 494 + .../sdk/include/mbedtls/mbedtls/ssl_ticket.h | 135 + tools/sdk/include/mbedtls/mbedtls/threading.h | 106 + tools/sdk/include/mbedtls/mbedtls/timing.h | 141 + tools/sdk/include/mbedtls/mbedtls/version.h | 111 + tools/sdk/include/mbedtls/mbedtls/x509.h | 331 + tools/sdk/include/mbedtls/mbedtls/x509_crl.h | 173 + tools/sdk/include/mbedtls/mbedtls/x509_crt.h | 650 ++ tools/sdk/include/mbedtls/mbedtls/x509_csr.h | 298 + tools/sdk/include/mbedtls/mbedtls/xtea.h | 139 + tools/sdk/include/mbedtls/sha1_alt.h | 33 + tools/sdk/include/mbedtls/sha256_alt.h | 33 + tools/sdk/include/mbedtls/sha512_alt.h | 33 + tools/sdk/include/newlib/_ansi.h | 140 + tools/sdk/include/newlib/_syslist.h | 40 + tools/sdk/include/newlib/alloca.h | 21 + tools/sdk/include/newlib/ar.h | 69 + tools/sdk/include/newlib/argz.h | 33 + tools/sdk/include/newlib/assert.h | 50 + tools/sdk/include/newlib/complex.h | 124 + tools/sdk/include/newlib/config.h | 28 + tools/sdk/include/newlib/ctype.h | 113 + tools/sdk/include/newlib/dirent.h | 15 + tools/sdk/include/newlib/envlock.h | 15 + tools/sdk/include/newlib/envz.h | 16 + tools/sdk/include/newlib/errno.h | 11 + tools/sdk/include/newlib/fastmath.h | 13 + tools/sdk/include/newlib/fcntl.h | 1 + tools/sdk/include/newlib/fenv.h | 88 + tools/sdk/include/newlib/fnmatch.h | 55 + tools/sdk/include/newlib/getopt.h | 190 + tools/sdk/include/newlib/glob.h | 90 + tools/sdk/include/newlib/grp.h | 95 + tools/sdk/include/newlib/iconv.h | 63 + tools/sdk/include/newlib/ieeefp.h | 256 + tools/sdk/include/newlib/inttypes.h | 319 + tools/sdk/include/newlib/langinfo.h | 316 + tools/sdk/include/newlib/libgen.h | 23 + tools/sdk/include/newlib/limits.h | 146 + tools/sdk/include/newlib/locale.h | 64 + .../include/newlib/machine/_default_types.h | 56 + tools/sdk/include/newlib/machine/_types.h | 8 + tools/sdk/include/newlib/machine/ansi.h | 1 + tools/sdk/include/newlib/machine/endian.h | 20 + tools/sdk/include/newlib/machine/fastmath.h | 100 + tools/sdk/include/newlib/machine/ieeefp.h | 434 + tools/sdk/include/newlib/machine/malloc.h | 8 + tools/sdk/include/newlib/machine/param.h | 1 + tools/sdk/include/newlib/machine/setjmp-dj.h | 43 + tools/sdk/include/newlib/machine/setjmp.h | 453 + tools/sdk/include/newlib/machine/stdlib.h | 8 + tools/sdk/include/newlib/machine/termios.h | 1 + tools/sdk/include/newlib/machine/time.h | 19 + tools/sdk/include/newlib/machine/types.h | 30 + tools/sdk/include/newlib/malloc.h | 169 + tools/sdk/include/newlib/math.h | 615 ++ tools/sdk/include/newlib/newlib.h | 201 + tools/sdk/include/newlib/paths.h | 9 + tools/sdk/include/newlib/pthread.h | 431 + tools/sdk/include/newlib/pwd.h | 87 + tools/sdk/include/newlib/reent.h | 189 + tools/sdk/include/newlib/regdef.h | 7 + tools/sdk/include/newlib/regex.h | 103 + tools/sdk/include/newlib/sched.h | 97 + tools/sdk/include/newlib/search.h | 64 + tools/sdk/include/newlib/setjmp.h | 27 + tools/sdk/include/newlib/signal.h | 32 + tools/sdk/include/newlib/spawn.h | 119 + tools/sdk/include/newlib/stdatomic.h | 413 + tools/sdk/include/newlib/stdint.h | 511 + tools/sdk/include/newlib/stdio.h | 727 ++ tools/sdk/include/newlib/stdio_ext.h | 79 + tools/sdk/include/newlib/stdlib.h | 297 + tools/sdk/include/newlib/string.h | 167 + tools/sdk/include/newlib/strings.h | 35 + tools/sdk/include/newlib/sys/_default_fcntl.h | 213 + tools/sdk/include/newlib/sys/_intsup.h | 20 + tools/sdk/include/newlib/sys/_types.h | 91 + tools/sdk/include/newlib/sys/cdefs.h | 710 ++ tools/sdk/include/newlib/sys/config.h | 300 + tools/sdk/include/newlib/sys/custom_file.h | 2 + tools/sdk/include/newlib/sys/dir.h | 10 + tools/sdk/include/newlib/sys/dirent.h | 13 + tools/sdk/include/newlib/sys/errno.h | 192 + tools/sdk/include/newlib/sys/fcntl.h | 4 + tools/sdk/include/newlib/sys/features.h | 235 + tools/sdk/include/newlib/sys/file.h | 33 + tools/sdk/include/newlib/sys/iconvnls.h | 77 + tools/sdk/include/newlib/sys/lock.h | 50 + tools/sdk/include/newlib/sys/param.h | 28 + tools/sdk/include/newlib/sys/queue.h | 691 ++ tools/sdk/include/newlib/sys/reent.h | 793 ++ tools/sdk/include/newlib/sys/resource.h | 17 + tools/sdk/include/newlib/sys/sched.h | 67 + tools/sdk/include/newlib/sys/signal.h | 357 + tools/sdk/include/newlib/sys/stat.h | 192 + tools/sdk/include/newlib/sys/stdio.h | 27 + tools/sdk/include/newlib/sys/string.h | 2 + tools/sdk/include/newlib/sys/syslimits.h | 65 + tools/sdk/include/newlib/sys/time.h | 91 + tools/sdk/include/newlib/sys/timeb.h | 39 + tools/sdk/include/newlib/sys/times.h | 31 + tools/sdk/include/newlib/sys/types.h | 521 ++ tools/sdk/include/newlib/sys/unistd.h | 516 ++ tools/sdk/include/newlib/sys/utime.h | 22 + tools/sdk/include/newlib/sys/wait.h | 44 + tools/sdk/include/newlib/tar.h | 39 + tools/sdk/include/newlib/termios.h | 7 + tools/sdk/include/newlib/tgmath.h | 184 + tools/sdk/include/newlib/time.h | 291 + tools/sdk/include/newlib/unctrl.h | 46 + tools/sdk/include/newlib/unistd.h | 13 + tools/sdk/include/newlib/utime.h | 12 + tools/sdk/include/newlib/utmp.h | 8 + tools/sdk/include/newlib/wchar.h | 254 + tools/sdk/include/newlib/wctype.h | 47 + tools/sdk/include/newlib/wordexp.h | 53 + .../include/newlib/xtensa/config/core-isa.h | 655 ++ tools/sdk/include/nghttp/config.h | 36 + tools/sdk/include/nghttp/http_parser.h | 362 + tools/sdk/include/nghttp/nghttp2/nghttp2.h | 5030 ++++++++++ tools/sdk/include/nghttp/nghttp2/nghttp2ver.h | 42 + tools/sdk/include/nghttp/nghttp2_buf.h | 388 + tools/sdk/include/nghttp/nghttp2_callbacks.h | 117 + tools/sdk/include/nghttp/nghttp2_frame.h | 581 ++ tools/sdk/include/nghttp/nghttp2_hd.h | 430 + tools/sdk/include/nghttp/nghttp2_hd_huffman.h | 77 + tools/sdk/include/nghttp/nghttp2_helper.h | 122 + tools/sdk/include/nghttp/nghttp2_http.h | 97 + tools/sdk/include/nghttp/nghttp2_int.h | 58 + tools/sdk/include/nghttp/nghttp2_map.h | 144 + tools/sdk/include/nghttp/nghttp2_mem.h | 45 + tools/sdk/include/nghttp/nghttp2_net.h | 91 + tools/sdk/include/nghttp/nghttp2_npn.h | 34 + tools/sdk/include/nghttp/nghttp2_option.h | 116 + .../include/nghttp/nghttp2_outbound_item.h | 166 + tools/sdk/include/nghttp/nghttp2_pq.h | 128 + .../include/nghttp/nghttp2_priority_spec.h | 42 + tools/sdk/include/nghttp/nghttp2_queue.h | 49 + tools/sdk/include/nghttp/nghttp2_rcbuf.h | 80 + tools/sdk/include/nghttp/nghttp2_session.h | 878 ++ tools/sdk/include/nghttp/nghttp2_stream.h | 436 + tools/sdk/include/nghttp/nghttp2_submit.h | 34 + tools/sdk/include/nvs_flash/nvs.h | 251 + tools/sdk/include/nvs_flash/nvs_flash.h | 46 + tools/sdk/include/spi_flash/esp_spi_flash.h | 116 + .../sdk/include/tcpip_adapter/tcpip_adapter.h | 388 + tools/sdk/ld/esp32.common.ld | 168 + tools/sdk/ld/esp32.ld | 55 + tools/sdk/ld/esp32.peripherals.ld | 20 + tools/sdk/ld/esp32.rom.ld | 1841 ++++ tools/sdk/ld/esp32_out.ld | 52 + tools/sdk/lib/libbt.a | Bin 0 -> 198132 bytes tools/sdk/lib/libbtdm_app.a | Bin 0 -> 62124 bytes tools/sdk/lib/libc.a | Bin 0 -> 3699654 bytes tools/sdk/lib/libcore.a | Bin 0 -> 44656 bytes tools/sdk/lib/libcrypto.a | Bin 0 -> 129180 bytes tools/sdk/lib/libdriver.a | Bin 0 -> 1722190 bytes tools/sdk/lib/libesp32.a | Bin 0 -> 2286592 bytes tools/sdk/lib/libexpat.a | Bin 0 -> 1605832 bytes tools/sdk/lib/libfreertos.a | Bin 0 -> 3529244 bytes tools/sdk/lib/libg.a | Bin 0 -> 4921612 bytes tools/sdk/lib/libhal.a | Bin 0 -> 462242 bytes tools/sdk/lib/libjson.a | Bin 0 -> 345568 bytes tools/sdk/lib/liblog.a | Bin 0 -> 211222 bytes tools/sdk/lib/liblwip.a | Bin 0 -> 14550218 bytes tools/sdk/lib/libm.a | Bin 0 -> 2227074 bytes tools/sdk/lib/libmbedtls.a | Bin 0 -> 9356882 bytes tools/sdk/lib/libnet80211.a | Bin 0 -> 548138 bytes tools/sdk/lib/libnghttp.a | Bin 0 -> 3222398 bytes tools/sdk/lib/libnvs_flash.a | Bin 0 -> 1378540 bytes tools/sdk/lib/libphy.a | Bin 0 -> 85192 bytes tools/sdk/lib/libpp.a | Bin 0 -> 274616 bytes tools/sdk/lib/librtc.a | Bin 0 -> 108990 bytes tools/sdk/lib/libsmartconfig.a | Bin 0 -> 122816 bytes tools/sdk/lib/libspi_flash.a | Bin 0 -> 425406 bytes tools/sdk/lib/libtcpip_adapter.a | Bin 0 -> 338842 bytes tools/sdk/lib/libwpa.a | Bin 0 -> 137394 bytes variants/esp32/pins_arduino.h | 33 + 657 files changed, 170176 insertions(+) create mode 100644 .gitignore create mode 100644 boards.txt create mode 100644 cores/esp32/Arduino.h create mode 100644 cores/esp32/Client.h create mode 100644 cores/esp32/Esp.cpp create mode 100644 cores/esp32/Esp.h create mode 100644 cores/esp32/HardwareSerial.cpp create mode 100644 cores/esp32/HardwareSerial.h create mode 100644 cores/esp32/IPAddress.cpp create mode 100644 cores/esp32/IPAddress.h create mode 100644 cores/esp32/MD5Builder.cpp create mode 100644 cores/esp32/MD5Builder.h create mode 100644 cores/esp32/Print.cpp create mode 100644 cores/esp32/Print.h create mode 100644 cores/esp32/Printable.h create mode 100644 cores/esp32/Server.h create mode 100644 cores/esp32/Stream.cpp create mode 100644 cores/esp32/Stream.h create mode 100644 cores/esp32/StreamString.cpp create mode 100644 cores/esp32/StreamString.h create mode 100644 cores/esp32/Udp.h create mode 100644 cores/esp32/WCharacter.h create mode 100644 cores/esp32/WMath.cpp create mode 100644 cores/esp32/WString.cpp create mode 100644 cores/esp32/WString.h create mode 100644 cores/esp32/base64.cpp create mode 100644 cores/esp32/base64.h create mode 100644 cores/esp32/binary.h create mode 100644 cores/esp32/cbuf.cpp create mode 100644 cores/esp32/cbuf.h create mode 100644 cores/esp32/esp32-hal-gpio.c create mode 100644 cores/esp32/esp32-hal-gpio.h create mode 100644 cores/esp32/esp32-hal-i2c.c create mode 100644 cores/esp32/esp32-hal-i2c.h create mode 100644 cores/esp32/esp32-hal-log.h create mode 100644 cores/esp32/esp32-hal-matrix.c create mode 100644 cores/esp32/esp32-hal-matrix.h create mode 100644 cores/esp32/esp32-hal-misc.c create mode 100644 cores/esp32/esp32-hal-spi.c create mode 100644 cores/esp32/esp32-hal-spi.h create mode 100644 cores/esp32/esp32-hal-uart.c create mode 100644 cores/esp32/esp32-hal-uart.h create mode 100644 cores/esp32/esp32-hal.h create mode 100755 cores/esp32/libb64/AUTHORS create mode 100755 cores/esp32/libb64/LICENSE create mode 100755 cores/esp32/libb64/cdecode.c create mode 100755 cores/esp32/libb64/cdecode.h create mode 100755 cores/esp32/libb64/cencode.c create mode 100755 cores/esp32/libb64/cencode.h create mode 100644 cores/esp32/main.cpp create mode 100644 cores/esp32/pgmspace.h create mode 100644 cores/esp32/stdlib_noniso.h create mode 100644 cores/esp32/wiring_private.h create mode 100644 libraries/SPI/keywords.txt create mode 100644 libraries/SPI/library.properties create mode 100644 libraries/SPI/src/SPI.cpp create mode 100644 libraries/SPI/src/SPI.h create mode 100644 libraries/WiFi/examples/HTTPSRequest/HTTPSRequest.ino create mode 100644 libraries/WiFi/examples/NTPClient/NTPClient.ino create mode 100644 libraries/WiFi/examples/WiFiAccessPoint/WiFiAccessPoint.ino create mode 100644 libraries/WiFi/examples/WiFiClient/WiFiClient.ino create mode 100644 libraries/WiFi/examples/WiFiClientBasic/WiFiClientBasic.ino create mode 100644 libraries/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino create mode 100644 libraries/WiFi/examples/WiFiMulti/WiFiMulti.ino create mode 100644 libraries/WiFi/examples/WiFiScan/WiFiScan.ino create mode 100644 libraries/WiFi/examples/WiFiTelnetToSerial/WiFiTelnetToSerial.ino create mode 100644 libraries/WiFi/examples/WiFiWebServer/WiFiWebServer.ino create mode 100644 libraries/WiFi/keywords.txt create mode 100644 libraries/WiFi/library.properties create mode 100644 libraries/WiFi/src/WiFi.cpp create mode 100644 libraries/WiFi/src/WiFi.h create mode 100644 libraries/WiFi/src/WiFiAP.cpp create mode 100644 libraries/WiFi/src/WiFiAP.h create mode 100644 libraries/WiFi/src/WiFiClient.cpp create mode 100644 libraries/WiFi/src/WiFiClient.h create mode 100644 libraries/WiFi/src/WiFiGeneric.cpp create mode 100644 libraries/WiFi/src/WiFiGeneric.h create mode 100644 libraries/WiFi/src/WiFiMulti.cpp create mode 100644 libraries/WiFi/src/WiFiMulti.h create mode 100644 libraries/WiFi/src/WiFiSTA.cpp create mode 100644 libraries/WiFi/src/WiFiSTA.h create mode 100644 libraries/WiFi/src/WiFiScan.cpp create mode 100644 libraries/WiFi/src/WiFiScan.h create mode 100644 libraries/WiFi/src/WiFiType.h create mode 100644 libraries/Wire/keywords.txt create mode 100644 libraries/Wire/library.properties create mode 100644 libraries/Wire/src/Wire.cpp create mode 100644 libraries/Wire/src/Wire.h create mode 100644 package/package_esp32_index.template.json create mode 100644 platform.txt create mode 100644 programmers.txt create mode 100755 tools/esptool.py create mode 100755 tools/get.py create mode 100644 tools/sdk/bin/bootloader.bin create mode 100644 tools/sdk/bin/partitions_singleapp.bin create mode 100644 tools/sdk/include/bt/bt.h create mode 100644 tools/sdk/include/config/sdkconfig.h create mode 100644 tools/sdk/include/driver/driver/gpio.h create mode 100644 tools/sdk/include/driver/driver/ledc.h create mode 100644 tools/sdk/include/driver/driver/periph_ctrl.h create mode 100644 tools/sdk/include/esp32/esp_attr.h create mode 100644 tools/sdk/include/esp32/esp_deepsleep.h create mode 100644 tools/sdk/include/esp32/esp_err.h create mode 100644 tools/sdk/include/esp32/esp_event.h create mode 100644 tools/sdk/include/esp32/esp_event_loop.h create mode 100644 tools/sdk/include/esp32/esp_intr.h create mode 100644 tools/sdk/include/esp32/esp_ipc.h create mode 100644 tools/sdk/include/esp32/esp_smartconfig.h create mode 100644 tools/sdk/include/esp32/esp_ssc.h create mode 100644 tools/sdk/include/esp32/esp_system.h create mode 100644 tools/sdk/include/esp32/esp_task.h create mode 100755 tools/sdk/include/esp32/esp_types.h create mode 100644 tools/sdk/include/esp32/esp_wifi.h create mode 100644 tools/sdk/include/esp32/esp_wifi_types.h create mode 100644 tools/sdk/include/esp32/hwcrypto/aes.h create mode 100644 tools/sdk/include/esp32/hwcrypto/sha.h create mode 100644 tools/sdk/include/esp32/rom/aes.h create mode 100644 tools/sdk/include/esp32/rom/bigint.h create mode 100644 tools/sdk/include/esp32/rom/cache.h create mode 100644 tools/sdk/include/esp32/rom/crc.h create mode 100644 tools/sdk/include/esp32/rom/efuse.h create mode 100644 tools/sdk/include/esp32/rom/ets_sys.h create mode 100644 tools/sdk/include/esp32/rom/gpio.h create mode 100644 tools/sdk/include/esp32/rom/libc_stubs.h create mode 100644 tools/sdk/include/esp32/rom/lldesc.h create mode 100755 tools/sdk/include/esp32/rom/md5_hash.h create mode 100644 tools/sdk/include/esp32/rom/miniz.h create mode 100755 tools/sdk/include/esp32/rom/queue.h create mode 100644 tools/sdk/include/esp32/rom/rtc.h create mode 100644 tools/sdk/include/esp32/rom/secure_boot.h create mode 100644 tools/sdk/include/esp32/rom/sha.h create mode 100644 tools/sdk/include/esp32/rom/spi_flash.h create mode 100644 tools/sdk/include/esp32/rom/tbconsole.h create mode 100644 tools/sdk/include/esp32/rom/tjpgd.h create mode 100644 tools/sdk/include/esp32/rom/uart.h create mode 100755 tools/sdk/include/esp32/soc/bb_reg.h create mode 100755 tools/sdk/include/esp32/soc/boot_mode.h create mode 100644 tools/sdk/include/esp32/soc/cpu.h create mode 100644 tools/sdk/include/esp32/soc/dport_reg.h create mode 100644 tools/sdk/include/esp32/soc/efuse_reg.h create mode 100644 tools/sdk/include/esp32/soc/gpio_reg.h create mode 100644 tools/sdk/include/esp32/soc/gpio_sd_reg.h create mode 100644 tools/sdk/include/esp32/soc/gpio_sd_struct.h create mode 100644 tools/sdk/include/esp32/soc/gpio_sig_map.h create mode 100644 tools/sdk/include/esp32/soc/gpio_struct.h create mode 100644 tools/sdk/include/esp32/soc/i2c_reg.h create mode 100644 tools/sdk/include/esp32/soc/i2c_struct.h create mode 100644 tools/sdk/include/esp32/soc/i2s_reg.h create mode 100644 tools/sdk/include/esp32/soc/i2s_struct.h create mode 100644 tools/sdk/include/esp32/soc/io_mux_reg.h create mode 100644 tools/sdk/include/esp32/soc/ledc_reg.h create mode 100644 tools/sdk/include/esp32/soc/ledc_struct.h create mode 100644 tools/sdk/include/esp32/soc/pcnt_reg.h create mode 100644 tools/sdk/include/esp32/soc/pcnt_struct.h create mode 100644 tools/sdk/include/esp32/soc/pid.h create mode 100644 tools/sdk/include/esp32/soc/rmt_reg.h create mode 100644 tools/sdk/include/esp32/soc/rmt_struct.h create mode 100644 tools/sdk/include/esp32/soc/rtc_cntl_reg.h create mode 100644 tools/sdk/include/esp32/soc/rtc_io_reg.h create mode 100644 tools/sdk/include/esp32/soc/saradc_reg.h create mode 100755 tools/sdk/include/esp32/soc/soc.h create mode 100644 tools/sdk/include/esp32/soc/spi_reg.h create mode 100644 tools/sdk/include/esp32/soc/spi_struct.h create mode 100644 tools/sdk/include/esp32/soc/timer_group_reg.h create mode 100644 tools/sdk/include/esp32/soc/timer_group_struct.h create mode 100644 tools/sdk/include/esp32/soc/uart_reg.h create mode 100644 tools/sdk/include/esp32/soc/uart_struct.h create mode 100644 tools/sdk/include/esp32/soc/uhci_reg.h create mode 100644 tools/sdk/include/esp32/soc/uhci_struct.h create mode 100755 tools/sdk/include/esp32/xtensa/board.h create mode 100755 tools/sdk/include/esp32/xtensa/c6x-compat.h create mode 100755 tools/sdk/include/esp32/xtensa/cacheasm.h create mode 100755 tools/sdk/include/esp32/xtensa/cacheattrasm.h create mode 100644 tools/sdk/include/esp32/xtensa/config/core-isa.h create mode 100644 tools/sdk/include/esp32/xtensa/config/core-matmap.h create mode 100644 tools/sdk/include/esp32/xtensa/config/core.h create mode 100644 tools/sdk/include/esp32/xtensa/config/defs.h create mode 100644 tools/sdk/include/esp32/xtensa/config/specreg.h create mode 100644 tools/sdk/include/esp32/xtensa/config/system.h create mode 100644 tools/sdk/include/esp32/xtensa/config/tie-asm.h create mode 100644 tools/sdk/include/esp32/xtensa/config/tie.h create mode 100755 tools/sdk/include/esp32/xtensa/core-macros.h create mode 100755 tools/sdk/include/esp32/xtensa/coreasm.h create mode 100755 tools/sdk/include/esp32/xtensa/corebits.h create mode 100755 tools/sdk/include/esp32/xtensa/debugfs.h create mode 100755 tools/sdk/include/esp32/xtensa/feedback.h create mode 100755 tools/sdk/include/esp32/xtensa/gdbio.h create mode 100755 tools/sdk/include/esp32/xtensa/hal.h create mode 100755 tools/sdk/include/esp32/xtensa/jtag-xtensa.h create mode 100755 tools/sdk/include/esp32/xtensa/lcd-splc780d-4bitmode-board.h create mode 100755 tools/sdk/include/esp32/xtensa/lcd-splc780d-4bitmode.h create mode 100755 tools/sdk/include/esp32/xtensa/lcd-splc780d.h create mode 100755 tools/sdk/include/esp32/xtensa/overlay.h create mode 100755 tools/sdk/include/esp32/xtensa/overlay_os_asm.h create mode 100755 tools/sdk/include/esp32/xtensa/sim.h create mode 100755 tools/sdk/include/esp32/xtensa/simboard.h create mode 100755 tools/sdk/include/esp32/xtensa/simcall-errno.h create mode 100755 tools/sdk/include/esp32/xtensa/simcall-fcntl.h create mode 100755 tools/sdk/include/esp32/xtensa/simcall.h create mode 100755 tools/sdk/include/esp32/xtensa/specreg.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_DFP_assist.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_FP.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_MAC16.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_MUL32.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_booleans.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_coprocessors.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_core.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_debug.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_density.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_exceptions.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_externalregisters.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_integerdivide.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_interrupt.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_ioports.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_misc.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_mmu.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_mul.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_regwin.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_scmpr.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_sync.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_timer.h create mode 100644 tools/sdk/include/esp32/xtensa/tie/xt_trace.h create mode 100755 tools/sdk/include/esp32/xtensa/trax-api.h create mode 100755 tools/sdk/include/esp32/xtensa/trax-core-config.h create mode 100755 tools/sdk/include/esp32/xtensa/trax-proto.h create mode 100755 tools/sdk/include/esp32/xtensa/trax-util.h create mode 100755 tools/sdk/include/esp32/xtensa/trax.h create mode 100755 tools/sdk/include/esp32/xtensa/traxfile.h create mode 100755 tools/sdk/include/esp32/xtensa/traxreg.h create mode 100755 tools/sdk/include/esp32/xtensa/uart-16550-board.h create mode 100755 tools/sdk/include/esp32/xtensa/uart-16550.h create mode 100755 tools/sdk/include/esp32/xtensa/udma.h create mode 100755 tools/sdk/include/esp32/xtensa/xdm-regs.h create mode 100755 tools/sdk/include/esp32/xtensa/xmon.h create mode 100755 tools/sdk/include/esp32/xtensa/xmp-library.h create mode 100755 tools/sdk/include/esp32/xtensa/xos.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_common.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_cond.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_errors.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_event.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_internal.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_msgq.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_mutex.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_params.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_regaccess.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_semaphore.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_stopwatch.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_syslog.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_thread.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_timer.h create mode 100755 tools/sdk/include/esp32/xtensa/xos_types.h create mode 100755 tools/sdk/include/esp32/xtensa/xt_perf_consts.h create mode 100755 tools/sdk/include/esp32/xtensa/xt_perfmon.h create mode 100755 tools/sdk/include/esp32/xtensa/xt_profiling.h create mode 100755 tools/sdk/include/esp32/xtensa/xt_reftb.h create mode 100755 tools/sdk/include/esp32/xtensa/xtav110.h create mode 100755 tools/sdk/include/esp32/xtensa/xtav110/xtensa/board.h create mode 100755 tools/sdk/include/esp32/xtensa/xtav200.h create mode 100755 tools/sdk/include/esp32/xtensa/xtav200/xtensa/board.h create mode 100755 tools/sdk/include/esp32/xtensa/xtav60.h create mode 100755 tools/sdk/include/esp32/xtensa/xtav60/xtensa/board.h create mode 100755 tools/sdk/include/esp32/xtensa/xtav60/xtensa/lcd-splc780d-board.h create mode 100755 tools/sdk/include/esp32/xtensa/xtbsp.h create mode 100755 tools/sdk/include/esp32/xtensa/xtensa-libdb-macros.h create mode 100755 tools/sdk/include/esp32/xtensa/xtensa-versions.h create mode 100755 tools/sdk/include/esp32/xtensa/xtensa-xer.h create mode 100755 tools/sdk/include/esp32/xtensa/xtkc705.h create mode 100755 tools/sdk/include/esp32/xtensa/xtkc705/xtensa/board.h create mode 100755 tools/sdk/include/esp32/xtensa/xtload-api.h create mode 100755 tools/sdk/include/esp32/xtensa/xtml605.h create mode 100755 tools/sdk/include/esp32/xtensa/xtml605/xtensa/board.h create mode 100755 tools/sdk/include/esp32/xtensa/xtruntime-core-state.h create mode 100755 tools/sdk/include/esp32/xtensa/xtruntime-frames.h create mode 100755 tools/sdk/include/esp32/xtensa/xtruntime.h create mode 100755 tools/sdk/include/esp32/xtensa/xtutil.h create mode 100644 tools/sdk/include/expat/ascii.h create mode 100644 tools/sdk/include/expat/asciitab.h create mode 100644 tools/sdk/include/expat/chardata.h create mode 100644 tools/sdk/include/expat/expat.h create mode 100644 tools/sdk/include/expat/expat_config.h create mode 100644 tools/sdk/include/expat/expat_external.h create mode 100644 tools/sdk/include/expat/iasciitab.h create mode 100644 tools/sdk/include/expat/internal.h create mode 100644 tools/sdk/include/expat/latin1tab.h create mode 100644 tools/sdk/include/expat/minicheck.h create mode 100644 tools/sdk/include/expat/nametab.h create mode 100644 tools/sdk/include/expat/utf8tab.h create mode 100644 tools/sdk/include/expat/xmlrole.h create mode 100644 tools/sdk/include/expat/xmltok.h create mode 100644 tools/sdk/include/expat/xmltok_impl.h create mode 100644 tools/sdk/include/freertos/freertos/FreeRTOS.h create mode 100644 tools/sdk/include/freertos/freertos/FreeRTOSConfig.h create mode 100644 tools/sdk/include/freertos/freertos/StackMacros.h create mode 100644 tools/sdk/include/freertos/freertos/croutine.h create mode 100644 tools/sdk/include/freertos/freertos/deprecated_definitions.h create mode 100644 tools/sdk/include/freertos/freertos/event_groups.h create mode 100644 tools/sdk/include/freertos/freertos/heap_regions.h create mode 100644 tools/sdk/include/freertos/freertos/heap_regions_debug.h create mode 100644 tools/sdk/include/freertos/freertos/list.h create mode 100644 tools/sdk/include/freertos/freertos/mpu_wrappers.h create mode 100644 tools/sdk/include/freertos/freertos/panic.h create mode 100644 tools/sdk/include/freertos/freertos/portable.h create mode 100644 tools/sdk/include/freertos/freertos/portbenchmark.h create mode 100644 tools/sdk/include/freertos/freertos/portmacro.h create mode 100644 tools/sdk/include/freertos/freertos/porttrace.h create mode 100644 tools/sdk/include/freertos/freertos/projdefs.h create mode 100644 tools/sdk/include/freertos/freertos/queue.h create mode 100644 tools/sdk/include/freertos/freertos/ringbuf.h create mode 100644 tools/sdk/include/freertos/freertos/semphr.h create mode 100644 tools/sdk/include/freertos/freertos/task.h create mode 100644 tools/sdk/include/freertos/freertos/timers.h create mode 100644 tools/sdk/include/freertos/freertos/xtensa_api.h create mode 100644 tools/sdk/include/freertos/freertos/xtensa_config.h create mode 100644 tools/sdk/include/freertos/freertos/xtensa_context.h create mode 100644 tools/sdk/include/freertos/freertos/xtensa_rtos.h create mode 100644 tools/sdk/include/freertos/freertos/xtensa_timer.h create mode 100644 tools/sdk/include/json/cJSON.h create mode 100644 tools/sdk/include/json/cJSON_Utils.h create mode 100644 tools/sdk/include/log/esp_log.h create mode 100644 tools/sdk/include/lwip/apps/dhcpserver.h create mode 100644 tools/sdk/include/lwip/apps/sntp/sntp.h create mode 100644 tools/sdk/include/lwip/apps/sntp/sntp_opts.h create mode 100644 tools/sdk/include/lwip/arch/cc.h create mode 100644 tools/sdk/include/lwip/arch/perf.h create mode 100644 tools/sdk/include/lwip/arch/sys_arch.h create mode 100755 tools/sdk/include/lwip/lwip/api.h create mode 100755 tools/sdk/include/lwip/lwip/arch.h create mode 100755 tools/sdk/include/lwip/lwip/autoip.h create mode 100755 tools/sdk/include/lwip/lwip/debug.h create mode 100755 tools/sdk/include/lwip/lwip/def.h create mode 100755 tools/sdk/include/lwip/lwip/dhcp.h create mode 100755 tools/sdk/include/lwip/lwip/dhcp6.h create mode 100755 tools/sdk/include/lwip/lwip/dns.h create mode 100755 tools/sdk/include/lwip/lwip/err.h create mode 100755 tools/sdk/include/lwip/lwip/ethip6.h create mode 100755 tools/sdk/include/lwip/lwip/icmp.h create mode 100755 tools/sdk/include/lwip/lwip/icmp6.h create mode 100755 tools/sdk/include/lwip/lwip/igmp.h create mode 100755 tools/sdk/include/lwip/lwip/inet.h create mode 100755 tools/sdk/include/lwip/lwip/inet_chksum.h create mode 100755 tools/sdk/include/lwip/lwip/init.h create mode 100755 tools/sdk/include/lwip/lwip/ip.h create mode 100755 tools/sdk/include/lwip/lwip/ip4.h create mode 100755 tools/sdk/include/lwip/lwip/ip4_addr.h create mode 100755 tools/sdk/include/lwip/lwip/ip6.h create mode 100755 tools/sdk/include/lwip/lwip/ip6_addr.h create mode 100755 tools/sdk/include/lwip/lwip/ip6_frag.h create mode 100755 tools/sdk/include/lwip/lwip/ip_addr.h create mode 100755 tools/sdk/include/lwip/lwip/ip_frag.h create mode 100644 tools/sdk/include/lwip/lwip/lwip_debug.h create mode 100755 tools/sdk/include/lwip/lwip/mem.h create mode 100755 tools/sdk/include/lwip/lwip/memp.h create mode 100755 tools/sdk/include/lwip/lwip/mld6.h create mode 100755 tools/sdk/include/lwip/lwip/nd6.h create mode 100755 tools/sdk/include/lwip/lwip/netbuf.h create mode 100755 tools/sdk/include/lwip/lwip/netdb.h create mode 100755 tools/sdk/include/lwip/lwip/netif.h create mode 100755 tools/sdk/include/lwip/lwip/netifapi.h create mode 100755 tools/sdk/include/lwip/lwip/opt.h create mode 100755 tools/sdk/include/lwip/lwip/pbuf.h create mode 100755 tools/sdk/include/lwip/lwip/pppapi.h create mode 100755 tools/sdk/include/lwip/lwip/priv/api_msg.h create mode 100755 tools/sdk/include/lwip/lwip/priv/memp_priv.h create mode 100755 tools/sdk/include/lwip/lwip/priv/memp_std.h create mode 100755 tools/sdk/include/lwip/lwip/priv/tcp_priv.h create mode 100755 tools/sdk/include/lwip/lwip/priv/tcpip_priv.h create mode 100755 tools/sdk/include/lwip/lwip/raw.h create mode 100755 tools/sdk/include/lwip/lwip/sio.h create mode 100755 tools/sdk/include/lwip/lwip/snmp.h create mode 100755 tools/sdk/include/lwip/lwip/sockets.h create mode 100755 tools/sdk/include/lwip/lwip/stats.h create mode 100755 tools/sdk/include/lwip/lwip/sys.h create mode 100755 tools/sdk/include/lwip/lwip/tcp.h create mode 100755 tools/sdk/include/lwip/lwip/tcpip.h create mode 100755 tools/sdk/include/lwip/lwip/timers.h create mode 100755 tools/sdk/include/lwip/lwip/udp.h create mode 100755 tools/sdk/include/lwip/lwipopts.h create mode 100755 tools/sdk/include/lwip/netdb.h create mode 100755 tools/sdk/include/lwip/netif/etharp.h create mode 100755 tools/sdk/include/lwip/netif/ethernet.h create mode 100755 tools/sdk/include/lwip/netif/lowpan6.h create mode 100755 tools/sdk/include/lwip/netif/lowpan6_opts.h create mode 100755 tools/sdk/include/lwip/netif/ppp/ccp.h create mode 100755 tools/sdk/include/lwip/netif/ppp/chap-md5.h create mode 100755 tools/sdk/include/lwip/netif/ppp/chap-new.h create mode 100755 tools/sdk/include/lwip/netif/ppp/chap_ms.h create mode 100755 tools/sdk/include/lwip/netif/ppp/eap.h create mode 100755 tools/sdk/include/lwip/netif/ppp/ecp.h create mode 100755 tools/sdk/include/lwip/netif/ppp/eui64.h create mode 100755 tools/sdk/include/lwip/netif/ppp/fsm.h create mode 100755 tools/sdk/include/lwip/netif/ppp/ipcp.h create mode 100755 tools/sdk/include/lwip/netif/ppp/ipv6cp.h create mode 100755 tools/sdk/include/lwip/netif/ppp/lcp.h create mode 100755 tools/sdk/include/lwip/netif/ppp/magic.h create mode 100755 tools/sdk/include/lwip/netif/ppp/mppe.h create mode 100755 tools/sdk/include/lwip/netif/ppp/polarssl/arc4.h create mode 100755 tools/sdk/include/lwip/netif/ppp/polarssl/des.h create mode 100755 tools/sdk/include/lwip/netif/ppp/polarssl/md4.h create mode 100755 tools/sdk/include/lwip/netif/ppp/polarssl/md5.h create mode 100755 tools/sdk/include/lwip/netif/ppp/polarssl/sha1.h create mode 100755 tools/sdk/include/lwip/netif/ppp/ppp.h create mode 100755 tools/sdk/include/lwip/netif/ppp/ppp_impl.h create mode 100755 tools/sdk/include/lwip/netif/ppp/pppcrypt.h create mode 100755 tools/sdk/include/lwip/netif/ppp/pppdebug.h create mode 100755 tools/sdk/include/lwip/netif/ppp/pppoe.h create mode 100755 tools/sdk/include/lwip/netif/ppp/pppol2tp.h create mode 100755 tools/sdk/include/lwip/netif/ppp/pppos.h create mode 100755 tools/sdk/include/lwip/netif/ppp/upap.h create mode 100755 tools/sdk/include/lwip/netif/ppp/vj.h create mode 100755 tools/sdk/include/lwip/netif/slipif.h create mode 100755 tools/sdk/include/lwip/netif/wlanif.h create mode 100644 tools/sdk/include/lwip/port/arch/cc.h create mode 100644 tools/sdk/include/lwip/port/arch/perf.h create mode 100644 tools/sdk/include/lwip/port/arch/sys_arch.h create mode 100755 tools/sdk/include/lwip/port/lwipopts.h create mode 100755 tools/sdk/include/lwip/port/netif/wlanif.h create mode 100755 tools/sdk/include/lwip/posix/netdb.h create mode 100755 tools/sdk/include/lwip/posix/sys/socket.h create mode 100755 tools/sdk/include/lwip/sys/socket.h create mode 100644 tools/sdk/include/mbedtls/.gitignore create mode 100644 tools/sdk/include/mbedtls/aes_alt.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/aes.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/aesni.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/arc4.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/asn1.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/asn1write.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/base64.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/bignum.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/blowfish.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/bn_mul.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/camellia.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ccm.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/certs.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/check_config.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/cipher.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/cipher_internal.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/compat-1.3.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/config.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ctr_drbg.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/debug.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/des.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/dhm.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ecdh.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ecdsa.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ecjpake.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ecp.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/entropy.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/entropy_poll.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/error.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/esp_config.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/gcm.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/havege.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/hmac_drbg.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/md.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/md2.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/md4.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/md5.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/md_internal.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/memory_buffer_alloc.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/net.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/oid.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/padlock.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/pem.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/pk.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/pk_internal.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/pkcs11.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/pkcs12.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/pkcs5.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/platform.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ripemd160.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/rsa.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/sha1.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/sha256.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/sha512.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ssl.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ssl_cache.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ssl_ciphersuites.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ssl_cookie.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ssl_internal.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ssl_ticket.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/threading.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/timing.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/version.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/x509.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/x509_crl.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/x509_crt.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/x509_csr.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/xtea.h create mode 100644 tools/sdk/include/mbedtls/sha1_alt.h create mode 100644 tools/sdk/include/mbedtls/sha256_alt.h create mode 100644 tools/sdk/include/mbedtls/sha512_alt.h create mode 100644 tools/sdk/include/newlib/_ansi.h create mode 100644 tools/sdk/include/newlib/_syslist.h create mode 100644 tools/sdk/include/newlib/alloca.h create mode 100644 tools/sdk/include/newlib/ar.h create mode 100644 tools/sdk/include/newlib/argz.h create mode 100644 tools/sdk/include/newlib/assert.h create mode 100644 tools/sdk/include/newlib/complex.h create mode 100644 tools/sdk/include/newlib/config.h create mode 100644 tools/sdk/include/newlib/ctype.h create mode 100644 tools/sdk/include/newlib/dirent.h create mode 100644 tools/sdk/include/newlib/envlock.h create mode 100644 tools/sdk/include/newlib/envz.h create mode 100644 tools/sdk/include/newlib/errno.h create mode 100644 tools/sdk/include/newlib/fastmath.h create mode 100644 tools/sdk/include/newlib/fcntl.h create mode 100644 tools/sdk/include/newlib/fenv.h create mode 100644 tools/sdk/include/newlib/fnmatch.h create mode 100644 tools/sdk/include/newlib/getopt.h create mode 100644 tools/sdk/include/newlib/glob.h create mode 100644 tools/sdk/include/newlib/grp.h create mode 100644 tools/sdk/include/newlib/iconv.h create mode 100644 tools/sdk/include/newlib/ieeefp.h create mode 100644 tools/sdk/include/newlib/inttypes.h create mode 100644 tools/sdk/include/newlib/langinfo.h create mode 100644 tools/sdk/include/newlib/libgen.h create mode 100644 tools/sdk/include/newlib/limits.h create mode 100644 tools/sdk/include/newlib/locale.h create mode 100644 tools/sdk/include/newlib/machine/_default_types.h create mode 100644 tools/sdk/include/newlib/machine/_types.h create mode 100644 tools/sdk/include/newlib/machine/ansi.h create mode 100644 tools/sdk/include/newlib/machine/endian.h create mode 100644 tools/sdk/include/newlib/machine/fastmath.h create mode 100644 tools/sdk/include/newlib/machine/ieeefp.h create mode 100644 tools/sdk/include/newlib/machine/malloc.h create mode 100644 tools/sdk/include/newlib/machine/param.h create mode 100644 tools/sdk/include/newlib/machine/setjmp-dj.h create mode 100644 tools/sdk/include/newlib/machine/setjmp.h create mode 100644 tools/sdk/include/newlib/machine/stdlib.h create mode 100644 tools/sdk/include/newlib/machine/termios.h create mode 100644 tools/sdk/include/newlib/machine/time.h create mode 100644 tools/sdk/include/newlib/machine/types.h create mode 100644 tools/sdk/include/newlib/malloc.h create mode 100644 tools/sdk/include/newlib/math.h create mode 100644 tools/sdk/include/newlib/newlib.h create mode 100644 tools/sdk/include/newlib/paths.h create mode 100644 tools/sdk/include/newlib/pthread.h create mode 100644 tools/sdk/include/newlib/pwd.h create mode 100644 tools/sdk/include/newlib/reent.h create mode 100644 tools/sdk/include/newlib/regdef.h create mode 100644 tools/sdk/include/newlib/regex.h create mode 100644 tools/sdk/include/newlib/sched.h create mode 100644 tools/sdk/include/newlib/search.h create mode 100644 tools/sdk/include/newlib/setjmp.h create mode 100644 tools/sdk/include/newlib/signal.h create mode 100644 tools/sdk/include/newlib/spawn.h create mode 100644 tools/sdk/include/newlib/stdatomic.h create mode 100644 tools/sdk/include/newlib/stdint.h create mode 100644 tools/sdk/include/newlib/stdio.h create mode 100644 tools/sdk/include/newlib/stdio_ext.h create mode 100644 tools/sdk/include/newlib/stdlib.h create mode 100644 tools/sdk/include/newlib/string.h create mode 100644 tools/sdk/include/newlib/strings.h create mode 100644 tools/sdk/include/newlib/sys/_default_fcntl.h create mode 100644 tools/sdk/include/newlib/sys/_intsup.h create mode 100644 tools/sdk/include/newlib/sys/_types.h create mode 100644 tools/sdk/include/newlib/sys/cdefs.h create mode 100644 tools/sdk/include/newlib/sys/config.h create mode 100644 tools/sdk/include/newlib/sys/custom_file.h create mode 100644 tools/sdk/include/newlib/sys/dir.h create mode 100644 tools/sdk/include/newlib/sys/dirent.h create mode 100644 tools/sdk/include/newlib/sys/errno.h create mode 100644 tools/sdk/include/newlib/sys/fcntl.h create mode 100644 tools/sdk/include/newlib/sys/features.h create mode 100644 tools/sdk/include/newlib/sys/file.h create mode 100644 tools/sdk/include/newlib/sys/iconvnls.h create mode 100644 tools/sdk/include/newlib/sys/lock.h create mode 100644 tools/sdk/include/newlib/sys/param.h create mode 100644 tools/sdk/include/newlib/sys/queue.h create mode 100644 tools/sdk/include/newlib/sys/reent.h create mode 100644 tools/sdk/include/newlib/sys/resource.h create mode 100644 tools/sdk/include/newlib/sys/sched.h create mode 100644 tools/sdk/include/newlib/sys/signal.h create mode 100644 tools/sdk/include/newlib/sys/stat.h create mode 100644 tools/sdk/include/newlib/sys/stdio.h create mode 100644 tools/sdk/include/newlib/sys/string.h create mode 100644 tools/sdk/include/newlib/sys/syslimits.h create mode 100644 tools/sdk/include/newlib/sys/time.h create mode 100644 tools/sdk/include/newlib/sys/timeb.h create mode 100644 tools/sdk/include/newlib/sys/times.h create mode 100644 tools/sdk/include/newlib/sys/types.h create mode 100644 tools/sdk/include/newlib/sys/unistd.h create mode 100644 tools/sdk/include/newlib/sys/utime.h create mode 100644 tools/sdk/include/newlib/sys/wait.h create mode 100644 tools/sdk/include/newlib/tar.h create mode 100644 tools/sdk/include/newlib/termios.h create mode 100644 tools/sdk/include/newlib/tgmath.h create mode 100644 tools/sdk/include/newlib/time.h create mode 100644 tools/sdk/include/newlib/unctrl.h create mode 100644 tools/sdk/include/newlib/unistd.h create mode 100644 tools/sdk/include/newlib/utime.h create mode 100644 tools/sdk/include/newlib/utmp.h create mode 100644 tools/sdk/include/newlib/wchar.h create mode 100644 tools/sdk/include/newlib/wctype.h create mode 100644 tools/sdk/include/newlib/wordexp.h create mode 100644 tools/sdk/include/newlib/xtensa/config/core-isa.h create mode 100644 tools/sdk/include/nghttp/config.h create mode 100644 tools/sdk/include/nghttp/http_parser.h create mode 100644 tools/sdk/include/nghttp/nghttp2/nghttp2.h create mode 100644 tools/sdk/include/nghttp/nghttp2/nghttp2ver.h create mode 100644 tools/sdk/include/nghttp/nghttp2_buf.h create mode 100644 tools/sdk/include/nghttp/nghttp2_callbacks.h create mode 100644 tools/sdk/include/nghttp/nghttp2_frame.h create mode 100644 tools/sdk/include/nghttp/nghttp2_hd.h create mode 100644 tools/sdk/include/nghttp/nghttp2_hd_huffman.h create mode 100644 tools/sdk/include/nghttp/nghttp2_helper.h create mode 100644 tools/sdk/include/nghttp/nghttp2_http.h create mode 100644 tools/sdk/include/nghttp/nghttp2_int.h create mode 100644 tools/sdk/include/nghttp/nghttp2_map.h create mode 100644 tools/sdk/include/nghttp/nghttp2_mem.h create mode 100644 tools/sdk/include/nghttp/nghttp2_net.h create mode 100644 tools/sdk/include/nghttp/nghttp2_npn.h create mode 100644 tools/sdk/include/nghttp/nghttp2_option.h create mode 100644 tools/sdk/include/nghttp/nghttp2_outbound_item.h create mode 100644 tools/sdk/include/nghttp/nghttp2_pq.h create mode 100644 tools/sdk/include/nghttp/nghttp2_priority_spec.h create mode 100644 tools/sdk/include/nghttp/nghttp2_queue.h create mode 100644 tools/sdk/include/nghttp/nghttp2_rcbuf.h create mode 100644 tools/sdk/include/nghttp/nghttp2_session.h create mode 100644 tools/sdk/include/nghttp/nghttp2_stream.h create mode 100644 tools/sdk/include/nghttp/nghttp2_submit.h create mode 100644 tools/sdk/include/nvs_flash/nvs.h create mode 100644 tools/sdk/include/nvs_flash/nvs_flash.h create mode 100644 tools/sdk/include/spi_flash/esp_spi_flash.h create mode 100644 tools/sdk/include/tcpip_adapter/tcpip_adapter.h create mode 100644 tools/sdk/ld/esp32.common.ld create mode 100644 tools/sdk/ld/esp32.ld create mode 100644 tools/sdk/ld/esp32.peripherals.ld create mode 100644 tools/sdk/ld/esp32.rom.ld create mode 100644 tools/sdk/ld/esp32_out.ld create mode 100644 tools/sdk/lib/libbt.a create mode 100644 tools/sdk/lib/libbtdm_app.a create mode 100644 tools/sdk/lib/libc.a create mode 100644 tools/sdk/lib/libcore.a create mode 100644 tools/sdk/lib/libcrypto.a create mode 100644 tools/sdk/lib/libdriver.a create mode 100644 tools/sdk/lib/libesp32.a create mode 100644 tools/sdk/lib/libexpat.a create mode 100644 tools/sdk/lib/libfreertos.a create mode 100644 tools/sdk/lib/libg.a create mode 100644 tools/sdk/lib/libhal.a create mode 100644 tools/sdk/lib/libjson.a create mode 100644 tools/sdk/lib/liblog.a create mode 100644 tools/sdk/lib/liblwip.a create mode 100644 tools/sdk/lib/libm.a create mode 100644 tools/sdk/lib/libmbedtls.a create mode 100644 tools/sdk/lib/libnet80211.a create mode 100644 tools/sdk/lib/libnghttp.a create mode 100644 tools/sdk/lib/libnvs_flash.a create mode 100755 tools/sdk/lib/libphy.a create mode 100644 tools/sdk/lib/libpp.a create mode 100644 tools/sdk/lib/librtc.a create mode 100644 tools/sdk/lib/libsmartconfig.a create mode 100644 tools/sdk/lib/libspi_flash.a create mode 100644 tools/sdk/lib/libtcpip_adapter.a create mode 100644 tools/sdk/lib/libwpa.a create mode 100644 variants/esp32/pins_arduino.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..21d2fdcd --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +tools/xtensa-esp32-elf diff --git a/boards.txt b/boards.txt new file mode 100644 index 00000000..3835d5c3 --- /dev/null +++ b/boards.txt @@ -0,0 +1,42 @@ +menu.UploadSpeed=Upload Speed +menu.FlashFreq=Flash Frequency + +############################################################## +esp32.name=ESP32 Dev Module + +esp32.upload.tool=esptool +esp32.upload.maximum_size=1044464 +esp32.upload.maximum_data_size=114688 +esp32.upload.wait_for_upload_port=true + +esp32.serial.disableDTR=true +esp32.serial.disableRTS=true + +esp32.build.mcu=esp32 +esp32.build.core=esp32 +esp32.build.variant=esp32 +esp32.build.board=ESP32_DEV + +esp32.build.f_cpu=160000000L +esp32.build.flash_mode=dio +esp32.build.flash_size=4MB + +esp32.menu.FlashFreq.80=80MHz +esp32.menu.FlashFreq.80.build.flash_freq=80m +esp32.menu.FlashFreq.40=40MHz +esp32.menu.FlashFreq.40.build.flash_freq=40m + +esp32.menu.UploadSpeed.921600=921600 +esp32.menu.UploadSpeed.921600.upload.speed=921600 +esp32.menu.UploadSpeed.115200=115200 +esp32.menu.UploadSpeed.115200.upload.speed=115200 +esp32.menu.UploadSpeed.256000.windows=256000 +esp32.menu.UploadSpeed.256000.upload.speed=256000 +esp32.menu.UploadSpeed.230400.windows.upload.speed=256000 +esp32.menu.UploadSpeed.230400=230400 +esp32.menu.UploadSpeed.230400.upload.speed=230400 +esp32.menu.UploadSpeed.460800.linux=460800 +esp32.menu.UploadSpeed.460800.macosx=460800 +esp32.menu.UploadSpeed.460800.upload.speed=460800 +esp32.menu.UploadSpeed.512000.windows=512000 +esp32.menu.UploadSpeed.512000.upload.speed=512000 diff --git a/cores/esp32/Arduino.h b/cores/esp32/Arduino.h new file mode 100644 index 00000000..372e70ec --- /dev/null +++ b/cores/esp32/Arduino.h @@ -0,0 +1,63 @@ +/* + Arduino.h - Main include file for the Arduino SDK + Copyright (c) 2005-2013 Arduino Team. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef Arduino_h +#define Arduino_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/semphr.h" +#include "esp32-hal.h" +#include "pins_arduino.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef bool boolean; +typedef uint8_t byte; + +#include "binary.h" + +#ifdef __cplusplus +} +#endif + +#include "WCharacter.h" +#include "WString.h" +#include "Stream.h" +#include "Printable.h" +#include "Print.h" +#include "IPAddress.h" +#include "Client.h" +#include "Server.h" +#include "Udp.h" +#include "HardwareSerial.h" +#include "Esp.h" + +#endif /* _ESP32_CORE_ARDUINO_H_ */ diff --git a/cores/esp32/Client.h b/cores/esp32/Client.h new file mode 100644 index 00000000..962cacc5 --- /dev/null +++ b/cores/esp32/Client.h @@ -0,0 +1,48 @@ +/* + Client.h - Base class that provides Client + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef client_h +#define client_h +#include "Print.h" +#include "Stream.h" +#include "IPAddress.h" + +class Client: public Stream +{ +public: + virtual int connect(IPAddress ip, uint16_t port) =0; + virtual int connect(const char *host, uint16_t port) =0; + virtual size_t write(uint8_t) =0; + virtual size_t write(const uint8_t *buf, size_t size) =0; + virtual int available() = 0; + virtual int read() = 0; + virtual int read(uint8_t *buf, size_t size) = 0; + virtual int peek() = 0; + virtual void flush() = 0; + virtual void stop() = 0; + virtual uint8_t connected() = 0; + virtual operator bool() = 0; +protected: + uint8_t* rawIPAddress(IPAddress& addr) + { + return addr.raw_address(); + } +}; + +#endif diff --git a/cores/esp32/Esp.cpp b/cores/esp32/Esp.cpp new file mode 100644 index 00000000..82713624 --- /dev/null +++ b/cores/esp32/Esp.cpp @@ -0,0 +1,223 @@ +/* + Esp.cpp - ESP31B-specific APIs + Copyright (c) 2015 Ivan Grokhotkov. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "Arduino.h" +#include "Esp.h" +#include "rom/spi_flash.h" +#include + +//#define DEBUG_SERIAL Serial + + +/** + * User-defined Literals + * usage: + * + * uint32_t = test = 10_MHz; // --> 10000000 + */ + +unsigned long long operator"" _kHz(unsigned long long x) +{ + return x * 1000; +} + +unsigned long long operator"" _MHz(unsigned long long x) +{ + return x * 1000 * 1000; +} + +unsigned long long operator"" _GHz(unsigned long long x) +{ + return x * 1000 * 1000 * 1000; +} + +unsigned long long operator"" _kBit(unsigned long long x) +{ + return x * 1024; +} + +unsigned long long operator"" _MBit(unsigned long long x) +{ + return x * 1024 * 1024; +} + +unsigned long long operator"" _GBit(unsigned long long x) +{ + return x * 1024 * 1024 * 1024; +} + +unsigned long long operator"" _kB(unsigned long long x) +{ + return x * 1024; +} + +unsigned long long operator"" _MB(unsigned long long x) +{ + return x * 1024 * 1024; +} + +unsigned long long operator"" _GB(unsigned long long x) +{ + return x * 1024 * 1024 * 1024; +} + + +EspClass ESP; + +uint32_t EspClass::getCycleCount() +{ + uint32_t ccount; + __asm__ __volatile__("esync; rsr %0,ccount":"=a" (ccount)); + return ccount; +} + +void EspClass::restart(void) +{ + system_restart(); +} + +uint32_t EspClass::getFreeHeap(void) +{ + return system_get_free_heap_size(); +} + +const char * EspClass::getSdkVersion(void) +{ + return system_get_sdk_version(); +} + +uint32_t EspClass::getFlashChipSize(void) +{ + uint32_t data; + uint8_t * bytes = (uint8_t *) &data; + // read first 4 byte (magic byte + flash config) + if(SPIRead(0x0000, &data, 4) == SPI_FLASH_RESULT_OK) { + return magicFlashChipSize((bytes[3] & 0xf0) >> 4); + } + return 0; +} + +uint32_t EspClass::getFlashChipSpeed(void) +{ + uint32_t data; + uint8_t * bytes = (uint8_t *) &data; + // read first 4 byte (magic byte + flash config) + if(SPIRead(0x0000, &data, 4) == SPI_FLASH_RESULT_OK) { + return magicFlashChipSpeed(bytes[3] & 0x0F); + } + return 0; +} + +FlashMode_t EspClass::getFlashChipMode(void) +{ + FlashMode_t mode = FM_UNKNOWN; + uint32_t data; + uint8_t * bytes = (uint8_t *) &data; + // read first 4 byte (magic byte + flash config) + if(SPIRead(0x0000, &data, 4) == SPI_FLASH_RESULT_OK) { + mode = magicFlashChipMode(bytes[2]); + } + return mode; +} + +uint32_t EspClass::magicFlashChipSize(uint8_t byte) +{ + switch(byte & 0x0F) { + case 0x0: // 4 Mbit (512KB) + return (512_kB); + case 0x1: // 2 MBit (256KB) + return (256_kB); + case 0x2: // 8 MBit (1MB) + return (1_MB); + case 0x3: // 16 MBit (2MB) + return (2_MB); + case 0x4: // 32 MBit (4MB) + return (4_MB); + case 0x5: // 64 MBit (8MB) + return (8_MB); + case 0x6: // 128 MBit (16MB) + return (16_MB); + case 0x7: // 256 MBit (32MB) + return (32_MB); + default: // fail? + return 0; + } +} + +uint32_t EspClass::magicFlashChipSpeed(uint8_t byte) +{ + switch(byte & 0x0F) { + case 0x0: // 40 MHz + return (40_MHz); + case 0x1: // 26 MHz + return (26_MHz); + case 0x2: // 20 MHz + return (20_MHz); + case 0xf: // 80 MHz + return (80_MHz); + default: // fail? + return 0; + } +} + +FlashMode_t EspClass::magicFlashChipMode(uint8_t byte) +{ + FlashMode_t mode = (FlashMode_t) byte; + if(mode > FM_DOUT) { + mode = FM_UNKNOWN; + } + return mode; +} + +bool EspClass::eraseConfig(void) +{ + bool ret = true; + size_t cfgAddr = (getFlashChipSize() - 0x4000); + size_t cfgSize = (8*1024); + + while(cfgSize) { + + if(SPIEraseSector((cfgAddr / 4096)) != SPI_FLASH_RESULT_OK) { + ret = false; + } + + cfgSize -= 4096; + cfgAddr += 4096; + } + + return ret; +} + +bool EspClass::flashEraseSector(uint32_t sector) +{ + int rc = SPIEraseSector(sector); + return rc == 0; +} + +bool EspClass::flashWrite(uint32_t offset, uint32_t *data, size_t size) +{ + int rc = SPIWrite(offset, (uint32_t*) data, size); + return rc == 0; +} + +bool EspClass::flashRead(uint32_t offset, uint32_t *data, size_t size) +{ + int rc = SPIRead(offset, (uint32_t*) data, size); + return rc == 0; +} diff --git a/cores/esp32/Esp.h b/cores/esp32/Esp.h new file mode 100644 index 00000000..db90709a --- /dev/null +++ b/cores/esp32/Esp.h @@ -0,0 +1,85 @@ +/* + Esp.h - ESP31B-specific APIs + Copyright (c) 2015 Ivan Grokhotkov. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef ESP_H +#define ESP_H + +#include + +/** + * AVR macros for WDT managment + */ +typedef enum { + WDTO_0MS = 0, //!< WDTO_0MS + WDTO_15MS = 15, //!< WDTO_15MS + WDTO_30MS = 30, //!< WDTO_30MS + WDTO_60MS = 60, //!< WDTO_60MS + WDTO_120MS = 120, //!< WDTO_120MS + WDTO_250MS = 250, //!< WDTO_250MS + WDTO_500MS = 500, //!< WDTO_500MS + WDTO_1S = 1000,//!< WDTO_1S + WDTO_2S = 2000,//!< WDTO_2S + WDTO_4S = 4000,//!< WDTO_4S + WDTO_8S = 8000 //!< WDTO_8S +} WDTO_t; + + +typedef enum { + FM_QIO = 0x00, + FM_QOUT = 0x01, + FM_DIO = 0x02, + FM_DOUT = 0x03, + FM_UNKNOWN = 0xff +} FlashMode_t; + +class EspClass +{ +public: + EspClass() {} + ~EspClass() {} + void restart(); + uint32_t getFreeHeap(); + + uint32_t getChipId(); + + const char * getSdkVersion(); + + + uint8_t getCpuFreqMHz(); + + uint32_t getFlashChipSize(); + uint32_t getFlashChipSpeed(); + FlashMode_t getFlashChipMode(); + + uint32_t magicFlashChipSize(uint8_t byte); + uint32_t magicFlashChipSpeed(uint8_t byte); + FlashMode_t magicFlashChipMode(uint8_t byte); + + bool flashEraseSector(uint32_t sector); + bool flashWrite(uint32_t offset, uint32_t *data, size_t size); + bool flashRead(uint32_t offset, uint32_t *data, size_t size); + + bool eraseConfig(); + + uint32_t getCycleCount(); +}; + +extern EspClass ESP; + +#endif //ESP_H diff --git a/cores/esp32/HardwareSerial.cpp b/cores/esp32/HardwareSerial.cpp new file mode 100644 index 00000000..423c512a --- /dev/null +++ b/cores/esp32/HardwareSerial.cpp @@ -0,0 +1,117 @@ +#include +#include +#include +#include + +#include "HardwareSerial.h" + +HardwareSerial Serial(0); + +HardwareSerial::HardwareSerial(int uart_nr) : _uart_nr(uart_nr), _uart(NULL) {} + +void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin) +{ + if(_uart_nr == 0 && rxPin < 0 && txPin < 0) { + rxPin = 3; + txPin = 1; + } + _uart = uartBegin(_uart_nr, baud, config, rxPin, txPin, 256, false); +} + +void HardwareSerial::end() +{ + if(uartGetDebug() == _uart_nr) { + uartSetDebug(0); + } + uartEnd(_uart); + _uart = 0; +} + +void HardwareSerial::setDebugOutput(bool en) +{ + if(_uart == 0) { + return; + } + if(en) { + if(_uart->txEnabled) { + uartSetDebug(_uart); + } else { + uartSetDebug(0); + } + } else { + if(uartGetDebug() == _uart_nr) { + uartSetDebug(0); + } + } +} + +bool HardwareSerial::isTxEnabled(void) +{ + if(_uart == 0) { + return false; + } + return _uart->txEnabled; +} + +bool HardwareSerial::isRxEnabled(void) +{ + if(_uart == 0) { + return false; + } + return _uart->rxEnabled; +} + +int HardwareSerial::available(void) +{ + if (_uart && _uart->rxEnabled) { + return uartAvailable(_uart); + } + return 0; +} + +int HardwareSerial::peek(void) +{ + if (_uart && _uart->rxEnabled) { + return uartPeek(_uart); + } + return -1; +} + +int HardwareSerial::read(void) +{ + if(_uart && _uart->rxEnabled) { + return uartRead(_uart); + } + return -1; +} + +void HardwareSerial::flush() +{ + if(_uart == 0 || !_uart->txEnabled) { + return; + } + uartFlush(_uart); +} + +size_t HardwareSerial::write(uint8_t c) +{ + if(_uart == 0 || !_uart->txEnabled) { + return 0; + } + uartWrite(_uart, c); + return 1; +} + +size_t HardwareSerial::write(const uint8_t *buffer, size_t size) +{ + if(_uart == 0 || !_uart->txEnabled) { + return 0; + } + uartWriteBuf(_uart, buffer, size); + return size; +} + +HardwareSerial::operator bool() const +{ + return _uart != 0; +} diff --git a/cores/esp32/HardwareSerial.h b/cores/esp32/HardwareSerial.h new file mode 100644 index 00000000..924b1408 --- /dev/null +++ b/cores/esp32/HardwareSerial.h @@ -0,0 +1,78 @@ +/* + HardwareSerial.h - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 28 September 2010 by Mark Sproul + Modified 14 August 2012 by Alarus + Modified 3 December 2013 by Matthijs Kooijman + Modified 18 December 2014 by Ivan Grokhotkov (esp8266 platform support) + Modified 31 March 2015 by Markus Sattler (rewrite the code for UART0 + UART1 support in ESP8266) + Modified 25 April 2015 by Thomas Flayols (add configuration different from 8N1 in ESP8266) + */ + +#ifndef HardwareSerial_h +#define HardwareSerial_h + +#include + +#include "Stream.h" +#include "esp32-hal.h" + +class HardwareSerial: public Stream +{ +public: + HardwareSerial(int uart_nr); + + void begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1); + void end(); + int available(void); + int peek(void); + int read(void); + void flush(void); + size_t write(uint8_t); + size_t write(const uint8_t *buffer, size_t size); + + inline size_t write(unsigned long n) + { + return write((uint8_t) n); + } + inline size_t write(long n) + { + return write((uint8_t) n); + } + inline size_t write(unsigned int n) + { + return write((uint8_t) n); + } + inline size_t write(int n) + { + return write((uint8_t) n); + } + operator bool() const; + + void setDebugOutput(bool); + bool isTxEnabled(void); + bool isRxEnabled(void); + +protected: + int _uart_nr; + uart_t* _uart; +}; + +extern HardwareSerial Serial; + +#endif diff --git a/cores/esp32/IPAddress.cpp b/cores/esp32/IPAddress.cpp new file mode 100644 index 00000000..c2c0811b --- /dev/null +++ b/cores/esp32/IPAddress.cpp @@ -0,0 +1,81 @@ +/* + IPAddress.cpp - Base class that provides IPAddress + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include + +IPAddress::IPAddress() +{ + _address.dword = 0; +} + +IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) +{ + _address.bytes[0] = first_octet; + _address.bytes[1] = second_octet; + _address.bytes[2] = third_octet; + _address.bytes[3] = fourth_octet; +} + +IPAddress::IPAddress(uint32_t address) +{ + _address.dword = address; +} + +IPAddress::IPAddress(const uint8_t *address) +{ + memcpy(_address.bytes, address, sizeof(_address.bytes)); +} + +IPAddress& IPAddress::operator=(const uint8_t *address) +{ + memcpy(_address.bytes, address, sizeof(_address.bytes)); + return *this; +} + +IPAddress& IPAddress::operator=(uint32_t address) +{ + _address.dword = address; + return *this; +} + +bool IPAddress::operator==(const uint8_t* addr) const +{ + return memcmp(addr, _address.bytes, sizeof(_address.bytes)) == 0; +} + +size_t IPAddress::printTo(Print& p) const +{ + size_t n = 0; + for(int i = 0; i < 3; i++) { + n += p.print(_address.bytes[i], DEC); + n += p.print('.'); + } + n += p.print(_address.bytes[3], DEC); + return n; +} + +String IPAddress::toString() +{ + char szRet[16]; + sprintf(szRet,"%u.%u.%u.%u", _address.bytes[0], _address.bytes[1], _address.bytes[2], _address.bytes[3]); + return String(szRet); +} + diff --git a/cores/esp32/IPAddress.h b/cores/esp32/IPAddress.h new file mode 100644 index 00000000..980be00f --- /dev/null +++ b/cores/esp32/IPAddress.h @@ -0,0 +1,93 @@ +/* + IPAddress.h - Base class that provides IPAddress + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef IPAddress_h +#define IPAddress_h + +#include +#include +#include + +// A class to make it easier to handle and pass around IP addresses + +class IPAddress: public Printable +{ +private: + union { + uint8_t bytes[4]; // IPv4 address + uint32_t dword; + } _address; + + // Access the raw byte array containing the address. Because this returns a pointer + // to the internal structure rather than a copy of the address this function should only + // be used when you know that the usage of the returned uint8_t* will be transient and not + // stored. + uint8_t* raw_address() + { + return _address.bytes; + } + +public: + // Constructors + IPAddress(); + IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet); + IPAddress(uint32_t address); + IPAddress(const uint8_t *address); + virtual ~IPAddress() {} + + // Overloaded cast operator to allow IPAddress objects to be used where a pointer + // to a four-byte uint8_t array is expected + operator uint32_t() const + { + return _address.dword; + } + bool operator==(const IPAddress& addr) const + { + return _address.dword == addr._address.dword; + } + bool operator==(const uint8_t* addr) const; + + // Overloaded index operator to allow getting and setting individual octets of the address + uint8_t operator[](int index) const + { + return _address.bytes[index]; + } + uint8_t& operator[](int index) + { + return _address.bytes[index]; + } + + // Overloaded copy operators to allow initialisation of IPAddress objects from other types + IPAddress& operator=(const uint8_t *address); + IPAddress& operator=(uint32_t address); + + virtual size_t printTo(Print& p) const; + String toString(); + + friend class EthernetClass; + friend class UDP; + friend class Client; + friend class Server; + friend class DhcpClass; + friend class DNSClient; +}; + +const IPAddress INADDR_NONE(0, 0, 0, 0); + +#endif diff --git a/cores/esp32/MD5Builder.cpp b/cores/esp32/MD5Builder.cpp new file mode 100644 index 00000000..f2168f4e --- /dev/null +++ b/cores/esp32/MD5Builder.cpp @@ -0,0 +1,117 @@ +/* + Copyright (c) 2015 Hristo Gochkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#include +#include + +uint8_t hex_char_to_byte(uint8_t c) +{ + return (c >= 'a' && c <= 'f') ? (c - ((uint8_t)'a' - 0xa)) : + (c >= 'A' && c <= 'F') ? (c - ((uint8_t)'A' - 0xA)) : + (c >= '0' && c<= '9') ? (c - (uint8_t)'0') : 0; +} + +void MD5Builder::begin(void) +{ + memset(_buf, 0x00, 16); + MD5Init(&_ctx); +} + +void MD5Builder::add(uint8_t * data, uint16_t len) +{ + MD5Update(&_ctx, data, len); +} + +void MD5Builder::addHexString(const char * data) +{ + uint16_t i, len = strlen(data); + uint8_t * tmp = (uint8_t*)malloc(len/2); + if(tmp == NULL) { + return; + } + for(i=0; i 0) && (maxLengthLeft > 0)) { + + // determine number of bytes to read + int readBytes = bytesAvailable; + if(readBytes > maxLengthLeft) { + readBytes = maxLengthLeft ; // read only until max_len + } + if(readBytes > buf_size) { + readBytes = buf_size; // not read more the buffer can handle + } + + // read data and check if we got something + int numBytesRead = stream.readBytes(buf, readBytes); + if(numBytesRead< 1) { + return false; + } + + // Update MD5 with buffer payload + MD5Update(&_ctx, buf, numBytesRead); + + // update available number of bytes + maxLengthLeft -= numBytesRead; + bytesAvailable = stream.available(); + } + free(buf); + return true; +} + +void MD5Builder::calculate(void) +{ + MD5Final(_buf, &_ctx); +} + +void MD5Builder::getBytes(uint8_t * output) +{ + memcpy(output, _buf, 16); +} + +void MD5Builder::getChars(char * output) +{ + for(uint8_t i = 0; i < 16; i++) { + sprintf(output + (i * 2), "%02x", _buf[i]); + } +} + +String MD5Builder::toString(void) +{ + char out[33]; + getChars(out); + return String(out); +} diff --git a/cores/esp32/MD5Builder.h b/cores/esp32/MD5Builder.h new file mode 100644 index 00000000..5429d9ae --- /dev/null +++ b/cores/esp32/MD5Builder.h @@ -0,0 +1,63 @@ +/* + Copyright (c) 2015 Hristo Gochkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#ifndef __ESP8266_MD5_BUILDER__ +#define __ESP8266_MD5_BUILDER__ + +#include +#include +#include "rom/md5_hash.h" + +class MD5Builder +{ +private: + struct MD5Context _ctx; + uint8_t _buf[16]; +public: + void begin(void); + void add(uint8_t * data, uint16_t len); + void add(const char * data) + { + add((uint8_t*)data, strlen(data)); + } + void add(char * data) + { + add((const char*)data); + } + void add(String data) + { + add(data.c_str()); + } + void addHexString(const char * data); + void addHexString(char * data) + { + addHexString((const char*)data); + } + void addHexString(String data) + { + addHexString(data.c_str()); + } + bool addStream(Stream & stream, const size_t maxLen); + void calculate(void); + void getBytes(uint8_t * output); + void getChars(char * output); + String toString(void); +}; + + +#endif diff --git a/cores/esp32/Print.cpp b/cores/esp32/Print.cpp new file mode 100644 index 00000000..e01304ff --- /dev/null +++ b/cores/esp32/Print.cpp @@ -0,0 +1,293 @@ +/* + Print.cpp - Base class that provides print() and println() + Copyright (c) 2008 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 23 November 2006 by David A. Mellis + Modified December 2014 by Ivan Grokhotkov + Modified May 2015 by Michael C. Miller - ESP31B progmem support + */ + +#include +#include +#include +#include +#include "Wiring.h" + +#include "Print.h" +extern "C" { +//#include "esp_common.h" +} + +// Public Methods ////////////////////////////////////////////////////////////// + +/* default implementation: may be overridden */ +size_t Print::write(const uint8_t *buffer, size_t size) +{ + size_t n = 0; + while(size--) { + n += write(*buffer++); + } + return n; +} + +size_t Print::printf(const char *format, ...) +{ + va_list arg; + va_start(arg, format); + size_t len = vsnprintf(NULL, 0, format, arg); + char temp[len+1]; + uint8_t * stemp = (uint8_t*)temp; + len = vsnprintf(temp, len+1, format, arg); + write(stemp, len); + va_end(arg); + return len; +} +/* +size_t Print::print(const __FlashStringHelper *ifsh) { + PGM_P p = reinterpret_cast(ifsh); + + size_t n = 0; + while (1) { + uint8_t c = pgm_read_byte(p++); + if (c == 0) break; + n += write(c); + } + return n; +} +*/ +size_t Print::print(const String &s) +{ + return write(s.c_str(), s.length()); +} + +size_t Print::print(const char str[]) +{ + return write(str); +} + +size_t Print::print(char c) +{ + return write(c); +} + +size_t Print::print(unsigned char b, int base) +{ + return print((unsigned long) b, base); +} + +size_t Print::print(int n, int base) +{ + return print((long) n, base); +} + +size_t Print::print(unsigned int n, int base) +{ + return print((unsigned long) n, base); +} + +size_t Print::print(long n, int base) +{ + if(base == 0) { + return write(n); + } else if(base == 10) { + if(n < 0) { + int t = print('-'); + n = -n; + return printNumber(n, 10) + t; + } + return printNumber(n, 10); + } else { + return printNumber(n, base); + } +} + +size_t Print::print(unsigned long n, int base) +{ + if(base == 0) { + return write(n); + } else { + return printNumber(n, base); + } +} + +size_t Print::print(double n, int digits) +{ + return printFloat(n, digits); +} + +size_t Print::println(const __FlashStringHelper *ifsh) +{ + size_t n = print(ifsh); + n += println(); + return n; +} + +size_t Print::print(const Printable& x) +{ + return x.printTo(*this); +} + +size_t Print::println(void) +{ + return print("\r\n"); +} + +size_t Print::println(const String &s) +{ + size_t n = print(s); + n += println(); + return n; +} + +size_t Print::println(const char c[]) +{ + size_t n = print(c); + n += println(); + return n; +} + +size_t Print::println(char c) +{ + size_t n = print(c); + n += println(); + return n; +} + +size_t Print::println(unsigned char b, int base) +{ + size_t n = print(b, base); + n += println(); + return n; +} + +size_t Print::println(int num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; +} + +size_t Print::println(unsigned int num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; +} + +size_t Print::println(long num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; +} + +size_t Print::println(unsigned long num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; +} + +size_t Print::println(double num, int digits) +{ + size_t n = print(num, digits); + n += println(); + return n; +} + +size_t Print::println(const Printable& x) +{ + size_t n = print(x); + n += println(); + return n; +} + +// Private Methods ///////////////////////////////////////////////////////////// + +size_t Print::printNumber(unsigned long n, uint8_t base) +{ + char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte. + char *str = &buf[sizeof(buf) - 1]; + + *str = '\0'; + + // prevent crash if called with base == 1 + if(base < 2) { + base = 10; + } + + do { + unsigned long m = n; + n /= base; + char c = m - base * n; + *--str = c < 10 ? c + '0' : c + 'A' - 10; + } while(n); + + return write(str); +} + +size_t Print::printFloat(double number, uint8_t digits) +{ + size_t n = 0; + + if(isnan(number)) { + return print("nan"); + } + if(isinf(number)) { + return print("inf"); + } + if(number > 4294967040.0) { + return print("ovf"); // constant determined empirically + } + if(number < -4294967040.0) { + return print("ovf"); // constant determined empirically + } + + // Handle negative numbers + if(number < 0.0) { + n += print('-'); + number = -number; + } + + // Round correctly so that print(1.999, 2) prints as "2.00" + double rounding = 0.5; + for(uint8_t i = 0; i < digits; ++i) { + rounding /= 10.0; + } + + number += rounding; + + // Extract the integer part of the number and print it + unsigned long int_part = (unsigned long) number; + double remainder = number - (double) int_part; + n += print(int_part); + + // Print the decimal point, but only if there are digits beyond + if(digits > 0) { + n += print("."); + } + + // Extract digits from the remainder one at a time + while(digits-- > 0) { + remainder *= 10.0; + int toPrint = int(remainder); + n += print(toPrint); + remainder -= toPrint; + } + + return n; +} diff --git a/cores/esp32/Print.h b/cores/esp32/Print.h new file mode 100644 index 00000000..49867289 --- /dev/null +++ b/cores/esp32/Print.h @@ -0,0 +1,101 @@ +/* + Print.h - Base class that provides print() and println() + Copyright (c) 2008 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef Print_h +#define Print_h + +#include +#include + +#include "WString.h" +#include "Printable.h" + +#define DEC 10 +#define HEX 16 +#define OCT 8 +#define BIN 2 + +class Print +{ +private: + int write_error; + size_t printNumber(unsigned long, uint8_t); + size_t printFloat(double, uint8_t); +protected: + void setWriteError(int err = 1) + { + write_error = err; + } +public: + Print() : + write_error(0) + { + } + virtual ~Print() {} + int getWriteError() + { + return write_error; + } + void clearWriteError() + { + setWriteError(0); + } + + virtual size_t write(uint8_t) = 0; + size_t write(const char *str) + { + if(str == NULL) { + return 0; + } + return write((const uint8_t *) str, strlen(str)); + } + virtual size_t write(const uint8_t *buffer, size_t size); + size_t write(const char *buffer, size_t size) + { + return write((const uint8_t *) buffer, size); + } + + size_t printf(const char * format, ...) __attribute__ ((format (printf, 2, 3))); + size_t print(const __FlashStringHelper *); + size_t print(const String &); + size_t print(const char[]); + size_t print(char); + size_t print(unsigned char, int = DEC); + size_t print(int, int = DEC); + size_t print(unsigned int, int = DEC); + size_t print(long, int = DEC); + size_t print(unsigned long, int = DEC); + size_t print(double, int = 2); + size_t print(const Printable&); + + size_t println(const __FlashStringHelper *); + size_t println(const String &s); + size_t println(const char[]); + size_t println(char); + size_t println(unsigned char, int = DEC); + size_t println(int, int = DEC); + size_t println(unsigned int, int = DEC); + size_t println(long, int = DEC); + size_t println(unsigned long, int = DEC); + size_t println(double, int = 2); + size_t println(const Printable&); + size_t println(void); +}; + +#endif diff --git a/cores/esp32/Printable.h b/cores/esp32/Printable.h new file mode 100644 index 00000000..aa4e62f8 --- /dev/null +++ b/cores/esp32/Printable.h @@ -0,0 +1,41 @@ +/* + Printable.h - Interface class that allows printing of complex types + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef Printable_h +#define Printable_h + +#include + +class Print; + +/** The Printable class provides a way for new classes to allow themselves to be printed. + By deriving from Printable and implementing the printTo method, it will then be possible + for users to print out instances of this class by passing them into the usual + Print::print and Print::println methods. + */ + +class Printable +{ +public: + virtual ~Printable() {} + virtual size_t printTo(Print& p) const = 0; +}; + +#endif + diff --git a/cores/esp32/Server.h b/cores/esp32/Server.h new file mode 100644 index 00000000..1be91873 --- /dev/null +++ b/cores/esp32/Server.h @@ -0,0 +1,31 @@ +/* + Server.h - Base class that provides Server + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef server_h +#define server_h + +#include "Print.h" + +class Server: public Print +{ +public: + virtual void begin() =0; +}; + +#endif diff --git a/cores/esp32/Stream.cpp b/cores/esp32/Stream.cpp new file mode 100644 index 00000000..6d1b1fc8 --- /dev/null +++ b/cores/esp32/Stream.cpp @@ -0,0 +1,291 @@ +/* + Stream.cpp - adds parsing methods to Stream class + Copyright (c) 2008 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Created July 2011 + parsing functions based on TextFinder library by Michael Margolis + */ + +#include "Wiring.h" +#include "Stream.h" +#include "esp32-hal.h" + +#define PARSE_TIMEOUT 1000 // default number of milli-seconds to wait +#define NO_SKIP_CHAR 1 // a magic char not found in a valid ASCII numeric field + +// private method to read stream with timeout +int Stream::timedRead() +{ + int c; + _startMillis = millis(); + do { + c = read(); + if(c >= 0) { + return c; + } + } while(millis() - _startMillis < _timeout); + return -1; // -1 indicates timeout +} + +// private method to peek stream with timeout +int Stream::timedPeek() +{ + int c; + _startMillis = millis(); + do { + c = peek(); + if(c >= 0) { + return c; + } + } while(millis() - _startMillis < _timeout); + return -1; // -1 indicates timeout +} + +// returns peek of the next digit in the stream or -1 if timeout +// discards non-numeric characters +int Stream::peekNextDigit() +{ + int c; + while(1) { + c = timedPeek(); + if(c < 0) { + return c; // timeout + } + if(c == '-') { + return c; + } + if(c >= '0' && c <= '9') { + return c; + } + read(); // discard non-numeric + } +} + +// Public Methods +////////////////////////////////////////////////////////////// + +void Stream::setTimeout(unsigned long timeout) // sets the maximum number of milliseconds to wait +{ + _timeout = timeout; +} + +// find returns true if the target string is found +bool Stream::find(const char *target) +{ + return findUntil(target, (char*) ""); +} + +// reads data from the stream until the target string of given length is found +// returns true if target string is found, false if timed out +bool Stream::find(const char *target, size_t length) +{ + return findUntil(target, length, NULL, 0); +} + +// as find but search ends if the terminator string is found +bool Stream::findUntil(const char *target, const char *terminator) +{ + return findUntil(target, strlen(target), terminator, strlen(terminator)); +} + +// reads data from the stream until the target string of the given length is found +// search terminated if the terminator string is found +// returns true if target string is found, false if terminated or timed out +bool Stream::findUntil(const char *target, size_t targetLen, const char *terminator, size_t termLen) +{ + size_t index = 0; // maximum target string length is 64k bytes! + size_t termIndex = 0; + int c; + + if(*target == 0) { + return true; // return true if target is a null string + } + while((c = timedRead()) > 0) { + + if(c != target[index]) { + index = 0; // reset index if any char does not match + } + + if(c == target[index]) { + //////Serial.print("found "); Serial.write(c); Serial.print("index now"); Serial.println(index+1); + if(++index >= targetLen) { // return true if all chars in the target match + return true; + } + } + + if(termLen > 0 && c == terminator[termIndex]) { + if(++termIndex >= termLen) { + return false; // return false if terminate string found before target string + } + } else { + termIndex = 0; + } + } + return false; +} + +// returns the first valid (long) integer value from the current position. +// initial characters that are not digits (or the minus sign) are skipped +// function is terminated by the first character that is not a digit. +long Stream::parseInt() +{ + return parseInt(NO_SKIP_CHAR); // terminate on first non-digit character (or timeout) +} + +// as above but a given skipChar is ignored +// this allows format characters (typically commas) in values to be ignored +long Stream::parseInt(char skipChar) +{ + boolean isNegative = false; + long value = 0; + int c; + + c = peekNextDigit(); + // ignore non numeric leading characters + if(c < 0) { + return 0; // zero returned if timeout + } + + do { + if(c == skipChar) { + } // ignore this charactor + else if(c == '-') { + isNegative = true; + } else if(c >= '0' && c <= '9') { // is c a digit? + value = value * 10 + c - '0'; + } + read(); // consume the character we got with peek + c = timedPeek(); + } while((c >= '0' && c <= '9') || c == skipChar); + + if(isNegative) { + value = -value; + } + return value; +} + +// as parseInt but returns a floating point value +float Stream::parseFloat() +{ + return parseFloat(NO_SKIP_CHAR); +} + +// as above but the given skipChar is ignored +// this allows format characters (typically commas) in values to be ignored +float Stream::parseFloat(char skipChar) +{ + boolean isNegative = false; + boolean isFraction = false; + long value = 0; + int c; + float fraction = 1.0; + + c = peekNextDigit(); + // ignore non numeric leading characters + if(c < 0) { + return 0; // zero returned if timeout + } + + do { + if(c == skipChar) { + } // ignore + else if(c == '-') { + isNegative = true; + } else if(c == '.') { + isFraction = true; + } else if(c >= '0' && c <= '9') { // is c a digit? + value = value * 10 + c - '0'; + if(isFraction) { + fraction *= 0.1; + } + } + read(); // consume the character we got with peek + c = timedPeek(); + } while((c >= '0' && c <= '9') || c == '.' || c == skipChar); + + if(isNegative) { + value = -value; + } + if(isFraction) { + return value * fraction; + } else { + return value; + } +} + +// read characters from stream into buffer +// terminates if length characters have been read, or timeout (see setTimeout) +// returns the number of characters placed in the buffer +// the buffer is NOT null terminated. +// +size_t Stream::readBytes(char *buffer, size_t length) +{ + size_t count = 0; + while(count < length) { + int c = timedRead(); + if(c < 0) { + break; + } + *buffer++ = (char) c; + count++; + } + return count; +} + +// as readBytes with terminator character +// terminates if length characters have been read, timeout, or if the terminator character detected +// returns the number of characters placed in the buffer (0 means no valid data found) + +size_t Stream::readBytesUntil(char terminator, char *buffer, size_t length) +{ + if(length < 1) { + return 0; + } + size_t index = 0; + while(index < length) { + int c = timedRead(); + if(c < 0 || c == terminator) { + break; + } + *buffer++ = (char) c; + index++; + } + return index; // return number of characters, not including null terminator +} + +String Stream::readString() +{ + String ret; + int c = timedRead(); + while(c >= 0) { + ret += (char) c; + c = timedRead(); + } + return ret; +} + +String Stream::readStringUntil(char terminator) +{ + String ret; + int c = timedRead(); + while(c >= 0 && c != terminator) { + ret += (char) c; + c = timedRead(); + } + return ret; +} + diff --git a/cores/esp32/Stream.h b/cores/esp32/Stream.h new file mode 100644 index 00000000..e5f4f6cc --- /dev/null +++ b/cores/esp32/Stream.h @@ -0,0 +1,128 @@ +/* + Stream.h - base class for character-based streams. + Copyright (c) 2010 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + parsing functions based on TextFinder library by Michael Margolis + */ + +#ifndef Stream_h +#define Stream_h + +#include +#include "Print.h" + +// compatability macros for testing +/* + #define getInt() parseInt() + #define getInt(skipChar) parseInt(skipchar) + #define getFloat() parseFloat() + #define getFloat(skipChar) parseFloat(skipChar) + #define getString( pre_string, post_string, buffer, length) + readBytesBetween( pre_string, terminator, buffer, length) + */ + +class Stream: public Print +{ +protected: + unsigned long _timeout; // number of milliseconds to wait for the next char before aborting timed read + unsigned long _startMillis; // used for timeout measurement + int timedRead(); // private method to read stream with timeout + int timedPeek(); // private method to peek stream with timeout + int peekNextDigit(); // returns the next numeric digit in the stream or -1 if timeout + +public: + virtual int available() = 0; + virtual int read() = 0; + virtual int peek() = 0; + virtual void flush() = 0; + + Stream():_startMillis(0) + { + _timeout = 1000; + } + virtual ~Stream() {} + +// parsing methods + + void setTimeout(unsigned long timeout); // sets maximum milliseconds to wait for stream data, default is 1 second + + bool find(const char *target); // reads data from the stream until the target string is found + bool find(uint8_t *target) + { + return find((char *) target); + } + // returns true if target string is found, false if timed out (see setTimeout) + + bool find(const char *target, size_t length); // reads data from the stream until the target string of given length is found + bool find(const uint8_t *target, size_t length) + { + return find((char *) target, length); + } + // returns true if target string is found, false if timed out + + bool find(char target) + { + return find (&target, 1); + } + + bool findUntil(const char *target, const char *terminator); // as find but search ends if the terminator string is found + bool findUntil(const uint8_t *target, const char *terminator) + { + return findUntil((char *) target, terminator); + } + + bool findUntil(const char *target, size_t targetLen, const char *terminate, size_t termLen); // as above but search ends if the terminate string is found + bool findUntil(const uint8_t *target, size_t targetLen, const char *terminate, size_t termLen) + { + return findUntil((char *) target, targetLen, terminate, termLen); + } + + long parseInt(); // returns the first valid (long) integer value from the current position. + // initial characters that are not digits (or the minus sign) are skipped + // integer is terminated by the first character that is not a digit. + + float parseFloat(); // float version of parseInt + + size_t readBytes(char *buffer, size_t length); // read chars from stream into buffer + size_t readBytes(uint8_t *buffer, size_t length) + { + return readBytes((char *) buffer, length); + } + // terminates if length characters have been read or timeout (see setTimeout) + // returns the number of characters placed in the buffer (0 means no valid data found) + + size_t readBytesUntil(char terminator, char *buffer, size_t length); // as readBytes with terminator character + size_t readBytesUntil(char terminator, uint8_t *buffer, size_t length) + { + return readBytesUntil(terminator, (char *) buffer, length); + } + // terminates if length characters have been read, timeout, or if the terminator character detected + // returns the number of characters placed in the buffer (0 means no valid data found) + + // Arduino String functions to be added here + String readString(); + String readStringUntil(char terminator); + +protected: + long parseInt(char skipChar); // as above but the given skipChar is ignored + // as above but the given skipChar is ignored + // this allows format characters (typically commas) in values to be ignored + + float parseFloat(char skipChar); // as above but the given skipChar is ignored +}; + +#endif diff --git a/cores/esp32/StreamString.cpp b/cores/esp32/StreamString.cpp new file mode 100644 index 00000000..80b2aff0 --- /dev/null +++ b/cores/esp32/StreamString.cpp @@ -0,0 +1,71 @@ +/** + StreamString.cpp + + Copyright (c) 2015 Markus Sattler. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + */ + +#include +#include "StreamString.h" + +size_t StreamString::write(const uint8_t *data, size_t size) +{ + if(size && data) { + if(reserve(length() + size + 1)) { + memcpy((void *) (buffer + len), (const void *) data, size); + len += size; + *(buffer + len) = 0x00; // add null for string end + return size; + } + } + return 0; +} + +size_t StreamString::write(uint8_t data) +{ + return concat((char) data); +} + +int StreamString::available() +{ + return length(); +} + +int StreamString::read() +{ + if(length()) { + char c = charAt(0); + remove(0, 1); + return c; + + } + return -1; +} + +int StreamString::peek() +{ + if(length()) { + char c = charAt(0); + return c; + } + return -1; +} + +void StreamString::flush() +{ +} + diff --git a/cores/esp32/StreamString.h b/cores/esp32/StreamString.h new file mode 100644 index 00000000..a1983d88 --- /dev/null +++ b/cores/esp32/StreamString.h @@ -0,0 +1,39 @@ +/** + StreamString.h + + Copyright (c) 2015 Markus Sattler. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef STREAMSTRING_H_ +#define STREAMSTRING_H_ + + +class StreamString: public Stream, public String +{ +public: + size_t write(const uint8_t *buffer, size_t size) override; + size_t write(uint8_t data) override; + + int available() override; + int read() override; + int peek() override; + void flush() override; +}; + + +#endif /* STREAMSTRING_H_ */ diff --git a/cores/esp32/Udp.h b/cores/esp32/Udp.h new file mode 100644 index 00000000..f47f83cc --- /dev/null +++ b/cores/esp32/Udp.h @@ -0,0 +1,92 @@ +/* + * Udp.cpp: Library to send/receive UDP packets. + * + * NOTE: UDP is fast, but has some important limitations (thanks to Warren Gray for mentioning these) + * 1) UDP does not guarantee the order in which assembled UDP packets are received. This + * might not happen often in practice, but in larger network topologies, a UDP + * packet can be received out of sequence. + * 2) UDP does not guard against lost packets - so packets *can* disappear without the sender being + * aware of it. Again, this may not be a concern in practice on small local networks. + * For more information, see http://www.cafeaulait.org/course/week12/35.html + * + * MIT License: + * Copyright (c) 2008 Bjoern Hartmann + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * bjoern@cs.stanford.edu 12/30/2008 + */ + +#ifndef udp_h +#define udp_h + +#include +#include + +class UDP: public Stream +{ + +public: + virtual uint8_t begin(uint16_t) =0; // initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use + virtual void stop() =0; // Finish with the UDP socket + + // Sending UDP packets + + // Start building up a packet to send to the remote host specific in ip and port + // Returns 1 if successful, 0 if there was a problem with the supplied IP address or port + virtual int beginPacket(IPAddress ip, uint16_t port) =0; + // Start building up a packet to send to the remote host specific in host and port + // Returns 1 if successful, 0 if there was a problem resolving the hostname or port + virtual int beginPacket(const char *host, uint16_t port) =0; + // Finish off this packet and send it + // Returns 1 if the packet was sent successfully, 0 if there was an error + virtual int endPacket() =0; + // Write a single byte into the packet + virtual size_t write(uint8_t) =0; + // Write size bytes from buffer into the packet + virtual size_t write(const uint8_t *buffer, size_t size) =0; + + // Start processing the next available incoming packet + // Returns the size of the packet in bytes, or 0 if no packets are available + virtual int parsePacket() =0; + // Number of bytes remaining in the current packet + virtual int available() =0; + // Read a single byte from the current packet + virtual int read() =0; + // Read up to len bytes from the current packet and place them into buffer + // Returns the number of bytes read, or 0 if none are available + virtual int read(unsigned char* buffer, size_t len) =0; + // Read up to len characters from the current packet and place them into buffer + // Returns the number of characters read, or 0 if none are available + virtual int read(char* buffer, size_t len) =0; + // Return the next byte from the current packet without moving on to the next byte + virtual int peek() =0; + virtual void flush() =0; // Finish reading the current packet + + // Return the IP address of the host who sent the current incoming packet + virtual IPAddress remoteIP() =0; + // Return the port of the host who sent the current incoming packet + virtual uint16_t remotePort() =0; +protected: + uint8_t* rawIPAddress(IPAddress& addr) + { + return addr.raw_address(); + } +}; + +#endif diff --git a/cores/esp32/WCharacter.h b/cores/esp32/WCharacter.h new file mode 100644 index 00000000..93e5dda4 --- /dev/null +++ b/cores/esp32/WCharacter.h @@ -0,0 +1,155 @@ +/* + WCharacter.h - Character utility functions for Wiring & Arduino + Copyright (c) 2010 Hernando Barragan. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef Character_h +#define Character_h + +#include +#include "WTypes.h" +#define isascii(__c) ((unsigned)(__c)<=0177) +#define toascii(__c) ((__c)&0177) + +// WCharacter.h prototypes +inline boolean isAlphaNumeric(int c) __attribute__((always_inline)); +inline boolean isAlpha(int c) __attribute__((always_inline)); +inline boolean isAscii(int c) __attribute__((always_inline)); +inline boolean isWhitespace(int c) __attribute__((always_inline)); +inline boolean isControl(int c) __attribute__((always_inline)); +inline boolean isDigit(int c) __attribute__((always_inline)); +inline boolean isGraph(int c) __attribute__((always_inline)); +inline boolean isLowerCase(int c) __attribute__((always_inline)); +inline boolean isPrintable(int c) __attribute__((always_inline)); +inline boolean isPunct(int c) __attribute__((always_inline)); +inline boolean isSpace(int c) __attribute__((always_inline)); +inline boolean isUpperCase(int c) __attribute__((always_inline)); +inline boolean isHexadecimalDigit(int c) __attribute__((always_inline)); +inline int toAscii(int c) __attribute__((always_inline)); +inline int toLowerCase(int c) __attribute__((always_inline)); +inline int toUpperCase(int c) __attribute__((always_inline)); + +// Checks for an alphanumeric character. +// It is equivalent to (isalpha(c) || isdigit(c)). +inline boolean isAlphaNumeric(int c) +{ + return (isalnum(c) == 0 ? false : true); +} + +// Checks for an alphabetic character. +// It is equivalent to (isupper(c) || islower(c)). +inline boolean isAlpha(int c) +{ + return (isalpha(c) == 0 ? false : true); +} + +// Checks whether c is a 7-bit unsigned char value +// that fits into the ASCII character set. +inline boolean isAscii(int c) +{ + return ( isascii (c) == 0 ? false : true); +} + +// Checks for a blank character, that is, a space or a tab. +inline boolean isWhitespace(int c) +{ + return (isblank(c) == 0 ? false : true); +} + +// Checks for a control character. +inline boolean isControl(int c) +{ + return (iscntrl(c) == 0 ? false : true); +} + +// Checks for a digit (0 through 9). +inline boolean isDigit(int c) +{ + return (isdigit(c) == 0 ? false : true); +} + +// Checks for any printable character except space. +inline boolean isGraph(int c) +{ + return (isgraph(c) == 0 ? false : true); +} + +// Checks for a lower-case character. +inline boolean isLowerCase(int c) +{ + return (islower(c) == 0 ? false : true); +} + +// Checks for any printable character including space. +inline boolean isPrintable(int c) +{ + return (isprint(c) == 0 ? false : true); +} + +// Checks for any printable character which is not a space +// or an alphanumeric character. +inline boolean isPunct(int c) +{ + return (ispunct(c) == 0 ? false : true); +} + +// Checks for white-space characters. For the avr-libc library, +// these are: space, formfeed ('\f'), newline ('\n'), carriage +// return ('\r'), horizontal tab ('\t'), and vertical tab ('\v'). +inline boolean isSpace(int c) +{ + return (isspace(c) == 0 ? false : true); +} + +// Checks for an uppercase letter. +inline boolean isUpperCase(int c) +{ + return (isupper(c) == 0 ? false : true); +} + +// Checks for a hexadecimal digits, i.e. one of 0 1 2 3 4 5 6 7 +// 8 9 a b c d e f A B C D E F. +inline boolean isHexadecimalDigit(int c) +{ + return (isxdigit(c) == 0 ? false : true); +} + +// Converts c to a 7-bit unsigned char value that fits into the +// ASCII character set, by clearing the high-order bits. +inline int toAscii(int c) +{ + return toascii(c); +} + +// Warning: +// Many people will be unhappy if you use this function. +// This function will convert accented letters into random +// characters. + +// Converts the letter c to lower case, if possible. +inline int toLowerCase(int c) +{ + return tolower(c); +} + +// Converts the letter c to upper case, if possible. +inline int toUpperCase(int c) +{ + return toupper(c); +} + +#endif diff --git a/cores/esp32/WMath.cpp b/cores/esp32/WMath.cpp new file mode 100644 index 00000000..fef0e94b --- /dev/null +++ b/cores/esp32/WMath.cpp @@ -0,0 +1,67 @@ +/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Wiring project - http://wiring.org.co + Copyright (c) 2004-06 Hernando Barragan + Modified 13 August 2006, David A. Mellis for Arduino - http://www.arduino.cc/ + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id$ + */ + +extern "C" { +#include +} + +void randomSeed(unsigned long seed) +{ + if(seed != 0) { + srand(seed); + } +} + +long random(long howbig) +{ + if(howbig == 0) { + return 0; + } + return rand() % howbig; +} + +long random(long howsmall, long howbig) +{ + if(howsmall >= howbig) { + return howsmall; + } + long diff = howbig - howsmall; + return random(diff) + howsmall; +} + +long map(long x, long in_min, long in_max, long out_min, long out_max) +{ + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; +} + +unsigned int makeWord(unsigned int w) +{ + return w; +} + +unsigned int makeWord(unsigned char h, unsigned char l) +{ + return (h << 8) | l; +} diff --git a/cores/esp32/WString.cpp b/cores/esp32/WString.cpp new file mode 100644 index 00000000..e67eb7f9 --- /dev/null +++ b/cores/esp32/WString.cpp @@ -0,0 +1,894 @@ +/* + WString.cpp - String library for Wiring & Arduino + ...mostly rewritten by Paul Stoffregen... + Copyright (c) 2009-10 Hernando Barragan. All rights reserved. + Copyright 2011, Paul Stoffregen, paul@pjrc.com + Modified by Ivan Grokhotkov, 2014 - ESP31B support + Modified by Michael C. Miller, 2015 - ESP31B progmem support + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "WString.h" +#include "stdlib_noniso.h" +//extern "C" { +//#include "esp_common.h" +//} + +/*********************************************/ +/* Constructors */ +/*********************************************/ + +String::String(const char *cstr) +{ + init(); + if(cstr) { + copy(cstr, strlen(cstr)); + } +} + +String::String(const String &value) +{ + init(); + *this = value; +} +/* +String::String(const __FlashStringHelper *pstr) { + init(); + *this = pstr; // see operator = +} +*/ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ +String::String(String &&rval) +{ + init(); + move(rval); +} + +String::String(StringSumHelper &&rval) +{ + init(); + move(rval); +} +#endif + +String::String(char c) +{ + init(); + char buf[2]; + buf[0] = c; + buf[1] = 0; + *this = buf; +} + +String::String(unsigned char value, unsigned char base) +{ + init(); + char buf[1 + 8 * sizeof(unsigned char)]; + utoa(value, buf, base); + *this = buf; +} + +String::String(int value, unsigned char base) +{ + init(); + char buf[2 + 8 * sizeof(int)]; + itoa(value, buf, base); + *this = buf; +} + +String::String(unsigned int value, unsigned char base) +{ + init(); + char buf[1 + 8 * sizeof(unsigned int)]; + utoa(value, buf, base); + *this = buf; +} + +String::String(long value, unsigned char base) +{ + init(); + char buf[2 + 8 * sizeof(long)]; + ltoa(value, buf, base); + *this = buf; +} + +String::String(unsigned long value, unsigned char base) +{ + init(); + char buf[1 + 8 * sizeof(unsigned long)]; + ultoa(value, buf, base); + *this = buf; +} + +String::String(float value, unsigned char decimalPlaces) +{ + init(); + char buf[33]; + *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf); +} + +String::String(double value, unsigned char decimalPlaces) +{ + init(); + char buf[33]; + *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf); +} + +String::~String() +{ + if(buffer) { + free(buffer); + } + init(); +} + +// /*********************************************/ +// /* Memory Management */ +// /*********************************************/ + +inline void String::init(void) +{ + buffer = NULL; + capacity = 0; + len = 0; +} + +void String::invalidate(void) +{ + if(buffer) { + free(buffer); + } + init(); +} + +unsigned char String::reserve(unsigned int size) +{ + if(buffer && capacity >= size) { + return 1; + } + if(changeBuffer(size)) { + if(len == 0) { + buffer[0] = 0; + } + return 1; + } + return 0; +} + +unsigned char String::changeBuffer(unsigned int maxStrLen) +{ + size_t newSize = (maxStrLen + 16) & (~0xf); + char *newbuffer = (char *) malloc(newSize); + if(newbuffer) { + memset(newbuffer, 0, newSize); + memcpy(newbuffer, buffer, len); + if (buffer) { + free(buffer); + } + capacity = newSize - 1; + buffer = newbuffer; + return 1; + } + buffer = newbuffer; + return 0; +} + +// /*********************************************/ +// /* Copy and Move */ +// /*********************************************/ + +String & String::copy(const char *cstr, unsigned int length) +{ + if(!reserve(length)) { + invalidate(); + return *this; + } + len = length; + strcpy(buffer, cstr); + return *this; +} +/* +String & String::copy(const __FlashStringHelper *pstr, unsigned int length) { + if (!reserve(length)) { + invalidate(); + return *this; + } + len = length; + strcpy_P(buffer, (PGM_P)pstr); + return *this; +} +*/ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ +void String::move(String &rhs) +{ + if(buffer) { + if(capacity >= rhs.len) { + strcpy(buffer, rhs.buffer); + len = rhs.len; + rhs.len = 0; + return; + } else { + free(buffer); + } + } + buffer = rhs.buffer; + capacity = rhs.capacity; + len = rhs.len; + rhs.buffer = NULL; + rhs.capacity = 0; + rhs.len = 0; +} +#endif + +String & String::operator =(const String &rhs) +{ + if(this == &rhs) { + return *this; + } + + if(rhs.buffer) { + copy(rhs.buffer, rhs.len); + } else { + invalidate(); + } + + return *this; +} + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ +String & String::operator =(String &&rval) +{ + if(this != &rval) { + move(rval); + } + return *this; +} + +String & String::operator =(StringSumHelper &&rval) +{ + if(this != &rval) { + move(rval); + } + return *this; +} +#endif + +String & String::operator =(const char *cstr) +{ + if(cstr) { + copy(cstr, strlen(cstr)); + } else { + invalidate(); + } + + return *this; +} +/* +String & String::operator = (const __FlashStringHelper *pstr) +{ + if (pstr) copy(pstr, strlen_P((PGM_P)pstr)); + else invalidate(); + + return *this; +} +*/ +// /*********************************************/ +// /* concat */ +// /*********************************************/ + +unsigned char String::concat(const String &s) +{ + return concat(s.buffer, s.len); +} + +unsigned char String::concat(const char *cstr, unsigned int length) +{ + unsigned int newlen = len + length; + if(!cstr) { + return 0; + } + if(length == 0) { + return 1; + } + if(!reserve(newlen)) { + return 0; + } + strcpy(buffer + len, cstr); + len = newlen; + return 1; +} + +unsigned char String::concat(const char *cstr) +{ + if(!cstr) { + return 0; + } + return concat(cstr, strlen(cstr)); +} + +unsigned char String::concat(char c) +{ + char buf[2]; + buf[0] = c; + buf[1] = 0; + return concat(buf, 1); +} + +unsigned char String::concat(unsigned char num) +{ + char buf[1 + 3 * sizeof(unsigned char)]; + itoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(int num) +{ + char buf[2 + 3 * sizeof(int)]; + itoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(unsigned int num) +{ + char buf[1 + 3 * sizeof(unsigned int)]; + utoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(long num) +{ + char buf[2 + 3 * sizeof(long)]; + ltoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(unsigned long num) +{ + char buf[1 + 3 * sizeof(unsigned long)]; + ultoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(float num) +{ + char buf[20]; + char* string = dtostrf(num, 4, 2, buf); + return concat(string, strlen(string)); +} + +unsigned char String::concat(double num) +{ + char buf[20]; + char* string = dtostrf(num, 4, 2, buf); + return concat(string, strlen(string)); +} +/* +unsigned char String::concat(const __FlashStringHelper * str) { + if (!str) return 0; + int length = strlen_P((PGM_P)str); + if (length == 0) return 1; + unsigned int newlen = len + length; + if (!reserve(newlen)) return 0; + strcpy_P(buffer + len, (PGM_P)str); + len = newlen; + return 1; +} +*/ +/*********************************************/ +/* Concatenate */ +/*********************************************/ + +StringSumHelper & operator +(const StringSumHelper &lhs, const String &rhs) +{ + StringSumHelper &a = const_cast(lhs); + if(!a.concat(rhs.buffer, rhs.len)) { + a.invalidate(); + } + return a; +} + +StringSumHelper & operator +(const StringSumHelper &lhs, const char *cstr) +{ + StringSumHelper &a = const_cast(lhs); + if(!cstr || !a.concat(cstr, strlen(cstr))) { + a.invalidate(); + } + return a; +} + +StringSumHelper & operator +(const StringSumHelper &lhs, char c) +{ + StringSumHelper &a = const_cast(lhs); + if(!a.concat(c)) { + a.invalidate(); + } + return a; +} + +StringSumHelper & operator +(const StringSumHelper &lhs, unsigned char num) +{ + StringSumHelper &a = const_cast(lhs); + if(!a.concat(num)) { + a.invalidate(); + } + return a; +} + +StringSumHelper & operator +(const StringSumHelper &lhs, int num) +{ + StringSumHelper &a = const_cast(lhs); + if(!a.concat(num)) { + a.invalidate(); + } + return a; +} + +StringSumHelper & operator +(const StringSumHelper &lhs, unsigned int num) +{ + StringSumHelper &a = const_cast(lhs); + if(!a.concat(num)) { + a.invalidate(); + } + return a; +} + +StringSumHelper & operator +(const StringSumHelper &lhs, long num) +{ + StringSumHelper &a = const_cast(lhs); + if(!a.concat(num)) { + a.invalidate(); + } + return a; +} + +StringSumHelper & operator +(const StringSumHelper &lhs, unsigned long num) +{ + StringSumHelper &a = const_cast(lhs); + if(!a.concat(num)) { + a.invalidate(); + } + return a; +} + +StringSumHelper & operator +(const StringSumHelper &lhs, float num) +{ + StringSumHelper &a = const_cast(lhs); + if(!a.concat(num)) { + a.invalidate(); + } + return a; +} + +StringSumHelper & operator +(const StringSumHelper &lhs, double num) +{ + StringSumHelper &a = const_cast(lhs); + if(!a.concat(num)) { + a.invalidate(); + } + return a; +} +/* +StringSumHelper & operator + (const StringSumHelper &lhs, const __FlashStringHelper *rhs) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(rhs)) a.invalidate(); + return a; +} +*/ +// /*********************************************/ +// /* Comparison */ +// /*********************************************/ + +int String::compareTo(const String &s) const +{ + if(!buffer || !s.buffer) { + if(s.buffer && s.len > 0) { + return 0 - *(unsigned char *) s.buffer; + } + if(buffer && len > 0) { + return *(unsigned char *) buffer; + } + return 0; + } + return strcmp(buffer, s.buffer); +} + +unsigned char String::equals(const String &s2) const +{ + return (len == s2.len && compareTo(s2) == 0); +} + +unsigned char String::equals(const char *cstr) const +{ + if(len == 0) { + return (cstr == NULL || *cstr == 0); + } + if(cstr == NULL) { + return buffer[0] == 0; + } + return strcmp(buffer, cstr) == 0; +} + +unsigned char String::operator<(const String &rhs) const +{ + return compareTo(rhs) < 0; +} + +unsigned char String::operator>(const String &rhs) const +{ + return compareTo(rhs) > 0; +} + +unsigned char String::operator<=(const String &rhs) const +{ + return compareTo(rhs) <= 0; +} + +unsigned char String::operator>=(const String &rhs) const +{ + return compareTo(rhs) >= 0; +} + +unsigned char String::equalsIgnoreCase(const String &s2) const +{ + if(this == &s2) { + return 1; + } + if(len != s2.len) { + return 0; + } + if(len == 0) { + return 1; + } + const char *p1 = buffer; + const char *p2 = s2.buffer; + while(*p1) { + if(tolower(*p1++) != tolower(*p2++)) { + return 0; + } + } + return 1; +} + +unsigned char String::startsWith(const String &s2) const +{ + if(len < s2.len) { + return 0; + } + return startsWith(s2, 0); +} + +unsigned char String::startsWith(const String &s2, unsigned int offset) const +{ + if(offset > len - s2.len || !buffer || !s2.buffer) { + return 0; + } + return strncmp(&buffer[offset], s2.buffer, s2.len) == 0; +} + +unsigned char String::endsWith(const String &s2) const +{ + if(len < s2.len || !buffer || !s2.buffer) { + return 0; + } + return strcmp(&buffer[len - s2.len], s2.buffer) == 0; +} + +// /*********************************************/ +// /* Character Access */ +// /*********************************************/ + +char String::charAt(unsigned int loc) const +{ + return operator[](loc); +} + +void String::setCharAt(unsigned int loc, char c) +{ + if(loc < len) { + buffer[loc] = c; + } +} + +char & String::operator[](unsigned int index) +{ + static char dummy_writable_char; + if(index >= len || !buffer) { + dummy_writable_char = 0; + return dummy_writable_char; + } + return buffer[index]; +} + +char String::operator[](unsigned int index) const +{ + if(index >= len || !buffer) { + return 0; + } + return buffer[index]; +} + +void String::getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index) const +{ + if(!bufsize || !buf) { + return; + } + if(index >= len) { + buf[0] = 0; + return; + } + unsigned int n = bufsize - 1; + if(n > len - index) { + n = len - index; + } + strncpy((char *) buf, buffer + index, n); + buf[n] = 0; +} + +// /*********************************************/ +// /* Search */ +// /*********************************************/ + +int String::indexOf(char c) const +{ + return indexOf(c, 0); +} + +int String::indexOf(char ch, unsigned int fromIndex) const +{ + if(fromIndex >= len) { + return -1; + } + const char* temp = strchr(buffer + fromIndex, ch); + if(temp == NULL) { + return -1; + } + return temp - buffer; +} + +int String::indexOf(const String &s2) const +{ + return indexOf(s2, 0); +} + +int String::indexOf(const String &s2, unsigned int fromIndex) const +{ + if(fromIndex >= len) { + return -1; + } + const char *found = strstr(buffer + fromIndex, s2.buffer); + if(found == NULL) { + return -1; + } + return found - buffer; +} + +int String::lastIndexOf(char theChar) const +{ + return lastIndexOf(theChar, len - 1); +} + +int String::lastIndexOf(char ch, unsigned int fromIndex) const +{ + if(fromIndex >= len) { + return -1; + } + char tempchar = buffer[fromIndex + 1]; + buffer[fromIndex + 1] = '\0'; + char* temp = strrchr(buffer, ch); + buffer[fromIndex + 1] = tempchar; + if(temp == NULL) { + return -1; + } + return temp - buffer; +} + +int String::lastIndexOf(const String &s2) const +{ + return lastIndexOf(s2, len - s2.len); +} + +int String::lastIndexOf(const String &s2, unsigned int fromIndex) const +{ + if(s2.len == 0 || len == 0 || s2.len > len) { + return -1; + } + if(fromIndex >= len) { + fromIndex = len - 1; + } + int found = -1; + for(char *p = buffer; p <= buffer + fromIndex; p++) { + p = strstr(p, s2.buffer); + if(!p) { + break; + } + if((unsigned int) (p - buffer) <= fromIndex) { + found = p - buffer; + } + } + return found; +} + +String String::substring(unsigned int left, unsigned int right) const +{ + if(left > right) { + unsigned int temp = right; + right = left; + left = temp; + } + String out; + if(left >= len) { + return out; + } + if(right > len) { + right = len; + } + char temp = buffer[right]; // save the replaced character + buffer[right] = '\0'; + out = buffer + left; // pointer arithmetic + buffer[right] = temp; //restore character + return out; +} + +// /*********************************************/ +// /* Modification */ +// /*********************************************/ + +void String::replace(char find, char replace) +{ + if(!buffer) { + return; + } + for(char *p = buffer; *p; p++) { + if(*p == find) { + *p = replace; + } + } +} + +void String::replace(const String& find, const String& replace) +{ + if(len == 0 || find.len == 0) { + return; + } + int diff = replace.len - find.len; + char *readFrom = buffer; + char *foundAt; + if(diff == 0) { + while((foundAt = strstr(readFrom, find.buffer)) != NULL) { + memcpy(foundAt, replace.buffer, replace.len); + readFrom = foundAt + replace.len; + } + } else if(diff < 0) { + char *writeTo = buffer; + while((foundAt = strstr(readFrom, find.buffer)) != NULL) { + unsigned int n = foundAt - readFrom; + memcpy(writeTo, readFrom, n); + writeTo += n; + memcpy(writeTo, replace.buffer, replace.len); + writeTo += replace.len; + readFrom = foundAt + find.len; + len += diff; + } + strcpy(writeTo, readFrom); + } else { + unsigned int size = len; // compute size needed for result + while((foundAt = strstr(readFrom, find.buffer)) != NULL) { + readFrom = foundAt + find.len; + size += diff; + } + if(size == len) { + return; + } + if(size > capacity && !changeBuffer(size)) { + return; // XXX: tell user! + } + int index = len - 1; + while(index >= 0 && (index = lastIndexOf(find, index)) >= 0) { + readFrom = buffer + index + find.len; + memmove(readFrom + diff, readFrom, len - (readFrom - buffer)); + len += diff; + buffer[len] = 0; + memcpy(buffer + index, replace.buffer, replace.len); + index--; + } + } +} + +void String::remove(unsigned int index) +{ + // Pass the biggest integer as the count. The remove method + // below will take care of truncating it at the end of the + // string. + remove(index, (unsigned int) -1); +} + +void String::remove(unsigned int index, unsigned int count) +{ + if(index >= len) { + return; + } + if(count <= 0) { + return; + } + if(count > len - index) { + count = len - index; + } + char *writeTo = buffer + index; + len = len - count; + strncpy(writeTo, buffer + index + count, len - index); + buffer[len] = 0; +} + +void String::toLowerCase(void) +{ + if(!buffer) { + return; + } + for(char *p = buffer; *p; p++) { + *p = tolower(*p); + } +} + +void String::toUpperCase(void) +{ + if(!buffer) { + return; + } + for(char *p = buffer; *p; p++) { + *p = toupper(*p); + } +} + +void String::trim(void) +{ + if(!buffer || len == 0) { + return; + } + char *begin = buffer; + while(isspace(*begin)) { + begin++; + } + char *end = buffer + len - 1; + while(isspace(*end) && end >= begin) { + end--; + } + len = end + 1 - begin; + if(begin > buffer) { + memcpy(buffer, begin, len); + } + buffer[len] = 0; +} + +// /*********************************************/ +// /* Parsing / Conversion */ +// /*********************************************/ + +long String::toInt(void) const +{ + if(buffer) { + return atol(buffer); + } + return 0; +} + +float String::toFloat(void) const +{ + if(buffer) { + return atof(buffer); + } + return 0; +} diff --git a/cores/esp32/WString.h b/cores/esp32/WString.h new file mode 100644 index 00000000..604763aa --- /dev/null +++ b/cores/esp32/WString.h @@ -0,0 +1,327 @@ +/* + WString.h - String library for Wiring & Arduino + ...mostly rewritten by Paul Stoffregen... + Copyright (c) 2009-10 Hernando Barragan. All right reserved. + Copyright 2011, Paul Stoffregen, paul@pjrc.com + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef String_class_h +#define String_class_h +#ifdef __cplusplus + +#include +#include +#include +//#include + +// An inherited class for holding the result of a concatenation. These +// result objects are assumed to be writable by subsequent concatenations. +class StringSumHelper; + +// an abstract class used as a means to proide a unique pointer type +// but really has no body +class __FlashStringHelper; +#define FPSTR(pstr_pointer) (reinterpret_cast(pstr_pointer)) +#define F(string_literal) (FPSTR(PSTR(string_literal))) + +// The string class +class String +{ + // use a function pointer to allow for "if (s)" without the + // complications of an operator bool(). for more information, see: + // http://www.artima.com/cppsource/safebool.html + typedef void (String::*StringIfHelperType)() const; + void StringIfHelper() const + { + } + +public: + // constructors + // creates a copy of the initial value. + // if the initial value is null or invalid, or if memory allocation + // fails, the string will be marked as invalid (i.e. "if (s)" will + // be false). + String(const char *cstr = ""); + String(const String &str); + //String(const __FlashStringHelper *str); +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + String(String &&rval); + String(StringSumHelper &&rval); +#endif + explicit String(char c); + explicit String(unsigned char, unsigned char base = 10); + explicit String(int, unsigned char base = 10); + explicit String(unsigned int, unsigned char base = 10); + explicit String(long, unsigned char base = 10); + explicit String(unsigned long, unsigned char base = 10); + explicit String(float, unsigned char decimalPlaces = 2); + explicit String(double, unsigned char decimalPlaces = 2); + ~String(void); + + // memory management + // return true on success, false on failure (in which case, the string + // is left unchanged). reserve(0), if successful, will validate an + // invalid string (i.e., "if (s)" will be true afterwards) + unsigned char reserve(unsigned int size); + inline unsigned int length(void) const + { + if(buffer) { + return len; + } else { + return 0; + } + } + + // creates a copy of the assigned value. if the value is null or + // invalid, or if the memory allocation fails, the string will be + // marked as invalid ("if (s)" will be false). + String & operator =(const String &rhs); + String & operator =(const char *cstr); + //String & operator = (const __FlashStringHelper *str); +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + String & operator =(String &&rval); + String & operator =(StringSumHelper &&rval); +#endif + + // concatenate (works w/ built-in types) + + // returns true on success, false on failure (in which case, the string + // is left unchanged). if the argument is null or invalid, the + // concatenation is considered unsucessful. + unsigned char concat(const String &str); + unsigned char concat(const char *cstr); + unsigned char concat(char c); + unsigned char concat(unsigned char c); + unsigned char concat(int num); + unsigned char concat(unsigned int num); + unsigned char concat(long num); + unsigned char concat(unsigned long num); + unsigned char concat(float num); + unsigned char concat(double num); + //unsigned char concat(const __FlashStringHelper * str); + + // if there's not enough memory for the concatenated value, the string + // will be left unchanged (but this isn't signalled in any way) + String & operator +=(const String &rhs) + { + concat(rhs); + return (*this); + } + String & operator +=(const char *cstr) + { + concat(cstr); + return (*this); + } + String & operator +=(char c) + { + concat(c); + return (*this); + } + String & operator +=(unsigned char num) + { + concat(num); + return (*this); + } + String & operator +=(int num) + { + concat(num); + return (*this); + } + String & operator +=(unsigned int num) + { + concat(num); + return (*this); + } + String & operator +=(long num) + { + concat(num); + return (*this); + } + String & operator +=(unsigned long num) + { + concat(num); + return (*this); + } + String & operator +=(float num) + { + concat(num); + return (*this); + } + String & operator +=(double num) + { + concat(num); + return (*this); + } + //String & operator += (const __FlashStringHelper *str){ + // concat(str); + // return (*this); + //} + + friend StringSumHelper & operator +(const StringSumHelper &lhs, const String &rhs); + friend StringSumHelper & operator +(const StringSumHelper &lhs, const char *cstr); + friend StringSumHelper & operator +(const StringSumHelper &lhs, char c); + friend StringSumHelper & operator +(const StringSumHelper &lhs, unsigned char num); + friend StringSumHelper & operator +(const StringSumHelper &lhs, int num); + friend StringSumHelper & operator +(const StringSumHelper &lhs, unsigned int num); + friend StringSumHelper & operator +(const StringSumHelper &lhs, long num); + friend StringSumHelper & operator +(const StringSumHelper &lhs, unsigned long num); + friend StringSumHelper & operator +(const StringSumHelper &lhs, float num); + friend StringSumHelper & operator +(const StringSumHelper &lhs, double num); + //friend StringSumHelper & operator +(const StringSumHelper &lhs, const __FlashStringHelper *rhs); + + // comparison (only works w/ Strings and "strings") + operator StringIfHelperType() const + { + return buffer ? &String::StringIfHelper : 0; + } + int compareTo(const String &s) const; + unsigned char equals(const String &s) const; + unsigned char equals(const char *cstr) const; + unsigned char operator ==(const String &rhs) const + { + return equals(rhs); + } + unsigned char operator ==(const char *cstr) const + { + return equals(cstr); + } + unsigned char operator !=(const String &rhs) const + { + return !equals(rhs); + } + unsigned char operator !=(const char *cstr) const + { + return !equals(cstr); + } + unsigned char operator <(const String &rhs) const; + unsigned char operator >(const String &rhs) const; + unsigned char operator <=(const String &rhs) const; + unsigned char operator >=(const String &rhs) const; + unsigned char equalsIgnoreCase(const String &s) const; + unsigned char startsWith(const String &prefix) const; + unsigned char startsWith(const String &prefix, unsigned int offset) const; + unsigned char endsWith(const String &suffix) const; + + // character acccess + char charAt(unsigned int index) const; + void setCharAt(unsigned int index, char c); + char operator [](unsigned int index) const; + char& operator [](unsigned int index); + void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index = 0) const; + void toCharArray(char *buf, unsigned int bufsize, unsigned int index = 0) const + { + getBytes((unsigned char *) buf, bufsize, index); + } + const char * c_str() const + { + return buffer; + } + + // search + int indexOf(char ch) const; + int indexOf(char ch, unsigned int fromIndex) const; + int indexOf(const String &str) const; + int indexOf(const String &str, unsigned int fromIndex) const; + int lastIndexOf(char ch) const; + int lastIndexOf(char ch, unsigned int fromIndex) const; + int lastIndexOf(const String &str) const; + int lastIndexOf(const String &str, unsigned int fromIndex) const; + String substring(unsigned int beginIndex) const + { + return substring(beginIndex, len); + } + ; + String substring(unsigned int beginIndex, unsigned int endIndex) const; + + // modification + void replace(char find, char replace); + void replace(const String& find, const String& replace); + void remove(unsigned int index); + void remove(unsigned int index, unsigned int count); + void toLowerCase(void); + void toUpperCase(void); + void trim(void); + + // parsing/conversion + long toInt(void) const; + float toFloat(void) const; + +protected: + char *buffer; // the actual char array + unsigned int capacity; // the array length minus one (for the '\0') + unsigned int len; // the String length (not counting the '\0') +protected: + void init(void); + void invalidate(void); + unsigned char changeBuffer(unsigned int maxStrLen); + unsigned char concat(const char *cstr, unsigned int length); + + // copy and move + String & copy(const char *cstr, unsigned int length); + //String & copy(const __FlashStringHelper *pstr, unsigned int length); +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void move(String &rhs); +#endif +}; + +class StringSumHelper: public String +{ +public: + StringSumHelper(const String &s) : + String(s) + { + } + StringSumHelper(const char *p) : + String(p) + { + } + StringSumHelper(char c) : + String(c) + { + } + StringSumHelper(unsigned char num) : + String(num) + { + } + StringSumHelper(int num) : + String(num) + { + } + StringSumHelper(unsigned int num) : + String(num) + { + } + StringSumHelper(long num) : + String(num) + { + } + StringSumHelper(unsigned long num) : + String(num) + { + } + StringSumHelper(float num) : + String(num) + { + } + StringSumHelper(double num) : + String(num) + { + } +}; + +#endif // __cplusplus +#endif // String_class_h diff --git a/cores/esp32/base64.cpp b/cores/esp32/base64.cpp new file mode 100644 index 00000000..b95064ae --- /dev/null +++ b/cores/esp32/base64.cpp @@ -0,0 +1,65 @@ +/** + * base64.cpp + * + * Created on: 09.12.2015 + * + * Copyright (c) 2015 Markus Sattler. All rights reserved. + * This file is part of the ESP31B core for Arduino. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "Arduino.h" +extern "C" { +#include "libb64/cdecode.h" +#include "libb64/cencode.h" +} +#include "base64.h" + +/** + * convert input data to base64 + * @param data uint8_t * + * @param length size_t + * @return String + */ +String base64::encode(uint8_t * data, size_t length) +{ + // base64 needs more size then the source data + size_t size = ((length * 1.6f) + 1); + char * buffer = (char *) malloc(size); + if(buffer) { + base64_encodestate _state; + base64_init_encodestate(&_state); + int len = base64_encode_block((const char *) &data[0], length, &buffer[0], &_state); + len = base64_encode_blockend((buffer + len), &_state); + + String base64 = String(buffer); + free(buffer); + return base64; + } + return String("-FAIL-"); +} + +/** + * convert input data to base64 + * @param text String + * @return String + */ +String base64::encode(String text) +{ + return base64::encode((uint8_t *) text.c_str(), text.length()); +} + diff --git a/cores/esp32/base64.h b/cores/esp32/base64.h new file mode 100644 index 00000000..f2466521 --- /dev/null +++ b/cores/esp32/base64.h @@ -0,0 +1,13 @@ +#ifndef CORE_BASE64_H_ +#define CORE_BASE64_H_ + +class base64 +{ +public: + static String encode(uint8_t * data, size_t length); + static String encode(String text); +private: +}; + + +#endif /* CORE_BASE64_H_ */ diff --git a/cores/esp32/binary.h b/cores/esp32/binary.h new file mode 100644 index 00000000..c2f189da --- /dev/null +++ b/cores/esp32/binary.h @@ -0,0 +1,534 @@ +/* + binary.h - Definitions for binary constants + Copyright (c) 2006 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef Binary_h +#define Binary_h + +#define B0 0 +#define B00 0 +#define B000 0 +#define B0000 0 +#define B00000 0 +#define B000000 0 +#define B0000000 0 +#define B00000000 0 +#define B1 1 +#define B01 1 +#define B001 1 +#define B0001 1 +#define B00001 1 +#define B000001 1 +#define B0000001 1 +#define B00000001 1 +#define B10 2 +#define B010 2 +#define B0010 2 +#define B00010 2 +#define B000010 2 +#define B0000010 2 +#define B00000010 2 +#define B11 3 +#define B011 3 +#define B0011 3 +#define B00011 3 +#define B000011 3 +#define B0000011 3 +#define B00000011 3 +#define B100 4 +#define B0100 4 +#define B00100 4 +#define B000100 4 +#define B0000100 4 +#define B00000100 4 +#define B101 5 +#define B0101 5 +#define B00101 5 +#define B000101 5 +#define B0000101 5 +#define B00000101 5 +#define B110 6 +#define B0110 6 +#define B00110 6 +#define B000110 6 +#define B0000110 6 +#define B00000110 6 +#define B111 7 +#define B0111 7 +#define B00111 7 +#define B000111 7 +#define B0000111 7 +#define B00000111 7 +#define B1000 8 +#define B01000 8 +#define B001000 8 +#define B0001000 8 +#define B00001000 8 +#define B1001 9 +#define B01001 9 +#define B001001 9 +#define B0001001 9 +#define B00001001 9 +#define B1010 10 +#define B01010 10 +#define B001010 10 +#define B0001010 10 +#define B00001010 10 +#define B1011 11 +#define B01011 11 +#define B001011 11 +#define B0001011 11 +#define B00001011 11 +#define B1100 12 +#define B01100 12 +#define B001100 12 +#define B0001100 12 +#define B00001100 12 +#define B1101 13 +#define B01101 13 +#define B001101 13 +#define B0001101 13 +#define B00001101 13 +#define B1110 14 +#define B01110 14 +#define B001110 14 +#define B0001110 14 +#define B00001110 14 +#define B1111 15 +#define B01111 15 +#define B001111 15 +#define B0001111 15 +#define B00001111 15 +#define B10000 16 +#define B010000 16 +#define B0010000 16 +#define B00010000 16 +#define B10001 17 +#define B010001 17 +#define B0010001 17 +#define B00010001 17 +#define B10010 18 +#define B010010 18 +#define B0010010 18 +#define B00010010 18 +#define B10011 19 +#define B010011 19 +#define B0010011 19 +#define B00010011 19 +#define B10100 20 +#define B010100 20 +#define B0010100 20 +#define B00010100 20 +#define B10101 21 +#define B010101 21 +#define B0010101 21 +#define B00010101 21 +#define B10110 22 +#define B010110 22 +#define B0010110 22 +#define B00010110 22 +#define B10111 23 +#define B010111 23 +#define B0010111 23 +#define B00010111 23 +#define B11000 24 +#define B011000 24 +#define B0011000 24 +#define B00011000 24 +#define B11001 25 +#define B011001 25 +#define B0011001 25 +#define B00011001 25 +#define B11010 26 +#define B011010 26 +#define B0011010 26 +#define B00011010 26 +#define B11011 27 +#define B011011 27 +#define B0011011 27 +#define B00011011 27 +#define B11100 28 +#define B011100 28 +#define B0011100 28 +#define B00011100 28 +#define B11101 29 +#define B011101 29 +#define B0011101 29 +#define B00011101 29 +#define B11110 30 +#define B011110 30 +#define B0011110 30 +#define B00011110 30 +#define B11111 31 +#define B011111 31 +#define B0011111 31 +#define B00011111 31 +#define B100000 32 +#define B0100000 32 +#define B00100000 32 +#define B100001 33 +#define B0100001 33 +#define B00100001 33 +#define B100010 34 +#define B0100010 34 +#define B00100010 34 +#define B100011 35 +#define B0100011 35 +#define B00100011 35 +#define B100100 36 +#define B0100100 36 +#define B00100100 36 +#define B100101 37 +#define B0100101 37 +#define B00100101 37 +#define B100110 38 +#define B0100110 38 +#define B00100110 38 +#define B100111 39 +#define B0100111 39 +#define B00100111 39 +#define B101000 40 +#define B0101000 40 +#define B00101000 40 +#define B101001 41 +#define B0101001 41 +#define B00101001 41 +#define B101010 42 +#define B0101010 42 +#define B00101010 42 +#define B101011 43 +#define B0101011 43 +#define B00101011 43 +#define B101100 44 +#define B0101100 44 +#define B00101100 44 +#define B101101 45 +#define B0101101 45 +#define B00101101 45 +#define B101110 46 +#define B0101110 46 +#define B00101110 46 +#define B101111 47 +#define B0101111 47 +#define B00101111 47 +#define B110000 48 +#define B0110000 48 +#define B00110000 48 +#define B110001 49 +#define B0110001 49 +#define B00110001 49 +#define B110010 50 +#define B0110010 50 +#define B00110010 50 +#define B110011 51 +#define B0110011 51 +#define B00110011 51 +#define B110100 52 +#define B0110100 52 +#define B00110100 52 +#define B110101 53 +#define B0110101 53 +#define B00110101 53 +#define B110110 54 +#define B0110110 54 +#define B00110110 54 +#define B110111 55 +#define B0110111 55 +#define B00110111 55 +#define B111000 56 +#define B0111000 56 +#define B00111000 56 +#define B111001 57 +#define B0111001 57 +#define B00111001 57 +#define B111010 58 +#define B0111010 58 +#define B00111010 58 +#define B111011 59 +#define B0111011 59 +#define B00111011 59 +#define B111100 60 +#define B0111100 60 +#define B00111100 60 +#define B111101 61 +#define B0111101 61 +#define B00111101 61 +#define B111110 62 +#define B0111110 62 +#define B00111110 62 +#define B111111 63 +#define B0111111 63 +#define B00111111 63 +#define B1000000 64 +#define B01000000 64 +#define B1000001 65 +#define B01000001 65 +#define B1000010 66 +#define B01000010 66 +#define B1000011 67 +#define B01000011 67 +#define B1000100 68 +#define B01000100 68 +#define B1000101 69 +#define B01000101 69 +#define B1000110 70 +#define B01000110 70 +#define B1000111 71 +#define B01000111 71 +#define B1001000 72 +#define B01001000 72 +#define B1001001 73 +#define B01001001 73 +#define B1001010 74 +#define B01001010 74 +#define B1001011 75 +#define B01001011 75 +#define B1001100 76 +#define B01001100 76 +#define B1001101 77 +#define B01001101 77 +#define B1001110 78 +#define B01001110 78 +#define B1001111 79 +#define B01001111 79 +#define B1010000 80 +#define B01010000 80 +#define B1010001 81 +#define B01010001 81 +#define B1010010 82 +#define B01010010 82 +#define B1010011 83 +#define B01010011 83 +#define B1010100 84 +#define B01010100 84 +#define B1010101 85 +#define B01010101 85 +#define B1010110 86 +#define B01010110 86 +#define B1010111 87 +#define B01010111 87 +#define B1011000 88 +#define B01011000 88 +#define B1011001 89 +#define B01011001 89 +#define B1011010 90 +#define B01011010 90 +#define B1011011 91 +#define B01011011 91 +#define B1011100 92 +#define B01011100 92 +#define B1011101 93 +#define B01011101 93 +#define B1011110 94 +#define B01011110 94 +#define B1011111 95 +#define B01011111 95 +#define B1100000 96 +#define B01100000 96 +#define B1100001 97 +#define B01100001 97 +#define B1100010 98 +#define B01100010 98 +#define B1100011 99 +#define B01100011 99 +#define B1100100 100 +#define B01100100 100 +#define B1100101 101 +#define B01100101 101 +#define B1100110 102 +#define B01100110 102 +#define B1100111 103 +#define B01100111 103 +#define B1101000 104 +#define B01101000 104 +#define B1101001 105 +#define B01101001 105 +#define B1101010 106 +#define B01101010 106 +#define B1101011 107 +#define B01101011 107 +#define B1101100 108 +#define B01101100 108 +#define B1101101 109 +#define B01101101 109 +#define B1101110 110 +#define B01101110 110 +#define B1101111 111 +#define B01101111 111 +#define B1110000 112 +#define B01110000 112 +#define B1110001 113 +#define B01110001 113 +#define B1110010 114 +#define B01110010 114 +#define B1110011 115 +#define B01110011 115 +#define B1110100 116 +#define B01110100 116 +#define B1110101 117 +#define B01110101 117 +#define B1110110 118 +#define B01110110 118 +#define B1110111 119 +#define B01110111 119 +#define B1111000 120 +#define B01111000 120 +#define B1111001 121 +#define B01111001 121 +#define B1111010 122 +#define B01111010 122 +#define B1111011 123 +#define B01111011 123 +#define B1111100 124 +#define B01111100 124 +#define B1111101 125 +#define B01111101 125 +#define B1111110 126 +#define B01111110 126 +#define B1111111 127 +#define B01111111 127 +#define B10000000 128 +#define B10000001 129 +#define B10000010 130 +#define B10000011 131 +#define B10000100 132 +#define B10000101 133 +#define B10000110 134 +#define B10000111 135 +#define B10001000 136 +#define B10001001 137 +#define B10001010 138 +#define B10001011 139 +#define B10001100 140 +#define B10001101 141 +#define B10001110 142 +#define B10001111 143 +#define B10010000 144 +#define B10010001 145 +#define B10010010 146 +#define B10010011 147 +#define B10010100 148 +#define B10010101 149 +#define B10010110 150 +#define B10010111 151 +#define B10011000 152 +#define B10011001 153 +#define B10011010 154 +#define B10011011 155 +#define B10011100 156 +#define B10011101 157 +#define B10011110 158 +#define B10011111 159 +#define B10100000 160 +#define B10100001 161 +#define B10100010 162 +#define B10100011 163 +#define B10100100 164 +#define B10100101 165 +#define B10100110 166 +#define B10100111 167 +#define B10101000 168 +#define B10101001 169 +#define B10101010 170 +#define B10101011 171 +#define B10101100 172 +#define B10101101 173 +#define B10101110 174 +#define B10101111 175 +#define B10110000 176 +#define B10110001 177 +#define B10110010 178 +#define B10110011 179 +#define B10110100 180 +#define B10110101 181 +#define B10110110 182 +#define B10110111 183 +#define B10111000 184 +#define B10111001 185 +#define B10111010 186 +#define B10111011 187 +#define B10111100 188 +#define B10111101 189 +#define B10111110 190 +#define B10111111 191 +#define B11000000 192 +#define B11000001 193 +#define B11000010 194 +#define B11000011 195 +#define B11000100 196 +#define B11000101 197 +#define B11000110 198 +#define B11000111 199 +#define B11001000 200 +#define B11001001 201 +#define B11001010 202 +#define B11001011 203 +#define B11001100 204 +#define B11001101 205 +#define B11001110 206 +#define B11001111 207 +#define B11010000 208 +#define B11010001 209 +#define B11010010 210 +#define B11010011 211 +#define B11010100 212 +#define B11010101 213 +#define B11010110 214 +#define B11010111 215 +#define B11011000 216 +#define B11011001 217 +#define B11011010 218 +#define B11011011 219 +#define B11011100 220 +#define B11011101 221 +#define B11011110 222 +#define B11011111 223 +#define B11100000 224 +#define B11100001 225 +#define B11100010 226 +#define B11100011 227 +#define B11100100 228 +#define B11100101 229 +#define B11100110 230 +#define B11100111 231 +#define B11101000 232 +#define B11101001 233 +#define B11101010 234 +#define B11101011 235 +#define B11101100 236 +#define B11101101 237 +#define B11101110 238 +#define B11101111 239 +#define B11110000 240 +#define B11110001 241 +#define B11110010 242 +#define B11110011 243 +#define B11110100 244 +#define B11110101 245 +#define B11110110 246 +#define B11110111 247 +#define B11111000 248 +#define B11111001 249 +#define B11111010 250 +#define B11111011 251 +#define B11111100 252 +#define B11111101 253 +#define B11111110 254 +#define B11111111 255 + +#endif diff --git a/cores/esp32/cbuf.cpp b/cores/esp32/cbuf.cpp new file mode 100644 index 00000000..7175a5f5 --- /dev/null +++ b/cores/esp32/cbuf.cpp @@ -0,0 +1,196 @@ +/* + cbuf.cpp - Circular buffer implementation + Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "cbuf.h" + +cbuf::cbuf(size_t size) : + next(NULL), _size(size), _buf(new char[size]), _bufend(_buf + size), _begin(_buf), _end(_begin) +{ +} + +cbuf::~cbuf() +{ + delete[] _buf; +} + +size_t cbuf::resizeAdd(size_t addSize) +{ + return resize(_size + addSize); +} + +size_t cbuf::resize(size_t newSize) +{ + + size_t bytes_available = available(); + + // not lose any data + // if data can be lost use remove or flush before resize + if((newSize < bytes_available) || (newSize == _size)) { + return _size; + } + + char *newbuf = new char[newSize]; + char *oldbuf = _buf; + + if(!newbuf) { + return _size; + } + + if(_buf) { + read(newbuf, bytes_available); + memset((newbuf + bytes_available), 0x00, (newSize - bytes_available)); + } + + _begin = newbuf; + _end = newbuf + bytes_available; + _bufend = newbuf + newSize; + _size = newSize; + + _buf = newbuf; + delete[] oldbuf; + + return _size; +} + +size_t cbuf::available() const +{ + if(_end >= _begin) { + return _end - _begin; + } + return _size - (_begin - _end); +} + +size_t cbuf::size() +{ + return _size; +} + +size_t cbuf::room() const +{ + if(_end >= _begin) { + return _size - (_end - _begin) - 1; + } + return _begin - _end - 1; +} + +int cbuf::peek() +{ + if(empty()) { + return -1; + } + + return static_cast(*_begin); +} + +size_t cbuf::peek(char *dst, size_t size) +{ + size_t bytes_available = available(); + size_t size_to_read = (size < bytes_available) ? size : bytes_available; + size_t size_read = size_to_read; + char * begin = _begin; + if(_end < _begin && size_to_read > (size_t) (_bufend - _begin)) { + size_t top_size = _bufend - _begin; + memcpy(dst, _begin, top_size); + begin = _buf; + size_to_read -= top_size; + dst += top_size; + } + memcpy(dst, begin, size_to_read); + return size_read; +} + +int cbuf::read() +{ + if(empty()) { + return -1; + } + + char result = *_begin; + _begin = wrap_if_bufend(_begin + 1); + return static_cast(result); +} + +size_t cbuf::read(char* dst, size_t size) +{ + size_t bytes_available = available(); + size_t size_to_read = (size < bytes_available) ? size : bytes_available; + size_t size_read = size_to_read; + if(_end < _begin && size_to_read > (size_t) (_bufend - _begin)) { + size_t top_size = _bufend - _begin; + memcpy(dst, _begin, top_size); + _begin = _buf; + size_to_read -= top_size; + dst += top_size; + } + memcpy(dst, _begin, size_to_read); + _begin = wrap_if_bufend(_begin + size_to_read); + return size_read; +} + +size_t cbuf::write(char c) +{ + if(full()) { + return 0; + } + + *_end = c; + _end = wrap_if_bufend(_end + 1); + return 1; +} + +size_t cbuf::write(const char* src, size_t size) +{ + size_t bytes_available = room(); + size_t size_to_write = (size < bytes_available) ? size : bytes_available; + size_t size_written = size_to_write; + if(_end >= _begin && size_to_write > (size_t) (_bufend - _end)) { + size_t top_size = _bufend - _end; + memcpy(_end, src, top_size); + _end = _buf; + size_to_write -= top_size; + src += top_size; + } + memcpy(_end, src, size_to_write); + _end = wrap_if_bufend(_end + size_to_write); + return size_written; +} + +void cbuf::flush() +{ + _begin = _buf; + _end = _buf; +} + +size_t cbuf::remove(size_t size) +{ + size_t bytes_available = available(); + if(size >= bytes_available) { + flush(); + return 0; + } + size_t size_to_remove = (size < bytes_available) ? size : bytes_available; + if(_end < _begin && size_to_remove > (size_t) (_bufend - _begin)) { + size_t top_size = _bufend - _begin; + _begin = _buf; + size_to_remove -= top_size; + } + _begin = wrap_if_bufend(_begin + size_to_remove); + return available(); +} diff --git a/cores/esp32/cbuf.h b/cores/esp32/cbuf.h new file mode 100644 index 00000000..ca65affc --- /dev/null +++ b/cores/esp32/cbuf.h @@ -0,0 +1,79 @@ +/* + cbuf.h - Circular buffer implementation + Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __cbuf_h +#define __cbuf_h + +#include +#include +#include + +class cbuf +{ +public: + cbuf(size_t size); + ~cbuf(); + + size_t resizeAdd(size_t addSize); + size_t resize(size_t newSize); + size_t available() const; + size_t size(); + + size_t room() const; + + inline bool empty() const + { + return _begin == _end; + } + + inline bool full() const + { + return wrap_if_bufend(_end + 1) == _begin; + } + + int peek(); + size_t peek(char *dst, size_t size); + + int read(); + size_t read(char* dst, size_t size); + + size_t write(char c); + size_t write(const char* src, size_t size); + + void flush(); + size_t remove(size_t size); + + cbuf *next; + +private: + inline char* wrap_if_bufend(char* ptr) const + { + return (ptr == _bufend) ? _buf : ptr; + } + + size_t _size; + char* _buf; + const char* _bufend; + char* _begin; + char* _end; + +}; + +#endif//__cbuf_h diff --git a/cores/esp32/esp32-hal-gpio.c b/cores/esp32/esp32-hal-gpio.c new file mode 100644 index 00000000..729b56f3 --- /dev/null +++ b/cores/esp32/esp32-hal-gpio.c @@ -0,0 +1,217 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#include "esp32-hal-gpio.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "rom/ets_sys.h" +#include "esp_attr.h" +#include "esp_intr.h" +#include "rom/gpio.h" +#include "soc/gpio_reg.h" +#include "soc/io_mux_reg.h" +#include "soc/gpio_struct.h" + +#define ETS_GPIO_INUM 4 + +const uint8_t esp32_gpioToFn[40] = { + 0x44,//0 + 0x88,//1 + 0x40,//2 + 0x84,//3 + 0x48,//4 + 0x6c,//5 + 0x60,//6 + 0x64,//7 + 0x68,//8 + 0x54,//9 + 0x58,//10 + 0x5c,//11 + 0x34,//12 + 0x38,//13 + 0x30,//14 + 0x3c,//15 + 0x4c,//16 + 0x50,//17 + 0x70,//18 + 0x74,//19 + 0x78,//20 + 0x7c,//21 + 0x80,//22 + 0x8c,//23 + 0xFF,//N/A + 0x24,//25 + 0x28,//26 + 0x2c,//27 + 0xFF,//N/A + 0xFF,//N/A + 0xFF,//N/A + 0xFF,//N/A + 0x1c,//32 + 0x20,//33 + 0x14,//34 + 0x18,//35 + 0x04,//36 + 0x08,//37 + 0x0c,//38 + 0x10 //39 +}; + +typedef void (*voidFuncPtr)(void); +static voidFuncPtr __pinInterruptHandlers[GPIO_PIN_COUNT] = {0,}; + +extern void IRAM_ATTR __pinMode(uint8_t pin, uint8_t mode) +{ + uint32_t pinFunction = 0, pinControl = 0; + + if(pin > 39 || esp32_gpioToFn[pin] == 0xFF) { + return; + } + + if(mode & INPUT) { + if(pin < 32) { + GPIO.enable_w1tc = ((uint32_t)1 << pin); + } else { + GPIO.enable1_w1tc.val = ((uint32_t)1 << (pin - 32)); + } + + if(mode & PULLUP) { + pinFunction |= FUN_PU; + } else if(mode & PULLDOWN) { + pinFunction |= FUN_PD; + } + + } else if(mode & OUTPUT) { + if(pin < 32) { + GPIO.enable_w1ts = ((uint32_t)1 << pin); + } else { + GPIO.enable1_w1ts.val = ((uint32_t)1 << (pin - 32)); + } + } + + pinFunction |= ((uint32_t)2 << FUN_DRV_S);//what are the drivers? + pinFunction |= FUN_IE;//input enable but required for output as well? + + if(mode & (INPUT | OUTPUT)) { + pinFunction |= ((uint32_t)2 << MCU_SEL_S); + } else if(mode == SPECIAL) { + pinFunction |= ((uint32_t)(((pin)==1||(pin)==3)?0:1) << MCU_SEL_S); + } else { + pinFunction |= ((uint32_t)(mode >> 5) << MCU_SEL_S); + } + + if(mode & OPEN_DRAIN) { + pinControl = (1 << GPIO_PIN0_PAD_DRIVER_S); + } + + ESP_REG(DR_REG_IO_MUX_BASE + esp32_gpioToFn[pin]) = pinFunction; + GPIO.pin[pin].val = pinControl; +} + +extern void IRAM_ATTR __digitalWrite(uint8_t pin, uint8_t val) +{ + if(pin > 39) { + return; + } + if(val) { + if(pin < 32) { + GPIO.out_w1ts = ((uint32_t)1 << pin); + } else { + GPIO.out1_w1ts.val = ((uint32_t)1 << (pin - 32)); + } + } else { + if(pin < 32) { + GPIO.out_w1tc = ((uint32_t)1 << pin); + } else { + GPIO.out1_w1tc.val = ((uint32_t)1 << (pin - 32)); + } + } +} + +extern int IRAM_ATTR __digitalRead(uint8_t pin) +{ + if(pin > 39) { + return 0; + } + if(pin < 32) { + return (GPIO.in >> pin) & 0x1; + } else { + return (GPIO.in1.val >> (pin - 32)) & 0x1; + } +} + + +static void IRAM_ATTR __onPinInterrupt(void *arg) +{ + uint32_t gpio_intr_status_l=0; + uint32_t gpio_intr_status_h=0; + + gpio_intr_status_l = GPIO.status; + gpio_intr_status_h = GPIO.status1.val; + GPIO.status_w1tc = gpio_intr_status_l;//Clear intr for gpio0-gpio31 + GPIO.status1_w1tc.val = gpio_intr_status_h;//Clear intr for gpio32-39 + + uint8_t pin=0; + if(gpio_intr_status_l) { + do { + if(gpio_intr_status_l & ((uint32_t)1 << pin)) { + if(__pinInterruptHandlers[pin]) { + __pinInterruptHandlers[pin](); + } + } + } while(++pin<32); + } + if(gpio_intr_status_h) { + pin=32; + do { + if(gpio_intr_status_h & ((uint32_t)1 << (pin - 32))) { + if(__pinInterruptHandlers[pin]) { + __pinInterruptHandlers[pin](); + } + } + } while(++pinnum), false, false); + pinMatrixInAttach(scl, I2C_SCL_IDX(i2c->num), false); +} + +void i2cDetachSCL(i2c_t * i2c, int8_t scl) +{ + pinMatrixOutDetach(scl, false, false); + pinMatrixInDetach(I2C_SCL_IDX(i2c->num), false, false); + pinMode(scl, INPUT); +} + +void i2cAttachSDA(i2c_t * i2c, int8_t sda) +{ + pinMode(sda, INPUT); + pinMatrixOutAttach(sda, I2C_SDA_IDX(i2c->num), false, false); + pinMatrixInAttach(sda, I2C_SDA_IDX(i2c->num), false); +} + +void i2cDetachSDA(i2c_t * i2c, int8_t sda) +{ + pinMatrixOutDetach(sda, false, false); + pinMatrixInDetach(I2C_SDA_IDX(i2c->num), false, false); + pinMode(sda, INPUT); +} + +enum { + I2C_CMD_RSTART, + I2C_CMD_WRITE, + I2C_CMD_READ, + I2C_CMD_STOP, + I2C_CMD_END +}; + +/* + * index - command index (0 to 15) + * op_code - is the command + * ack_val - Each data byte is terminated by an ACK bit used to set the bit level. + * ack_exp - This bit is to set an expected ACK value for the transmitter. + * ack_check - This bit is to decide whether the transmitter checks ACK bit. 1 means yes and 0 means no. + * byte_num - This register is to store the amounts of data that is read and written. byte_num in RSTART, STOP, END is null. + * */ +void i2cSetCmd(i2c_t * i2c, uint8_t index, uint8_t op_code, uint8_t byte_num, bool ack_val, bool ack_exp, bool ack_check) +{ + i2c->dev->command[index].val = 0; + i2c->dev->command[index].ack_en = ack_check; + i2c->dev->command[index].ack_exp = ack_exp; + i2c->dev->command[index].ack_val = ack_val; + i2c->dev->command[index].byte_num = byte_num; + i2c->dev->command[index].op_code = op_code; +} + +int i2cWrite(i2c_t * i2c, uint16_t address, bool addr_10bit, uint8_t * data, uint8_t len, bool sendStop) +{ + uint8_t index = 0; + uint8_t dataLen = len + (addr_10bit?2:1); + address = (address << 1); + + while(dataLen) { + uint8_t willSend = (dataLen > 32)?32:dataLen; + uint8_t dataSend = willSend; + i2cSetCmd(i2c, 0, I2C_CMD_RSTART, 0, false, false, false);//START + i2cSetCmd(i2c, 1, I2C_CMD_WRITE, willSend, false, false, true); + if(!index) { + i2c->dev->fifo_data.data = address & 0xFF; + dataSend--; + if(addr_10bit) { + i2c->dev->fifo_data.data = (address >> 8) & 0xFF; + dataSend--; + } + } + int i = 0; + while(idev->fifo_data.data = data[index++]; + } + dataLen -= willSend; + if(dataLen) { + i2cSetCmd(i2c, 2, I2C_CMD_END, 0, false, false, false); + } else if(sendStop) { + i2cSetCmd(i2c, 2, I2C_CMD_STOP, 0, false, false, true); + } + i2c->dev->ctr.trans_start = 1; + while(i2c->dev->ctr.trans_start || i2c->dev->status_reg.bus_busy || (!i2c->dev->int_raw.ack_err && !i2c->dev->command[2].done)); + if(!i2c->dev->command[2].done) { + log_e("Ack Error"); + return -1; + } + if(i2c->dev->status_reg.arb_lost || i2c->dev->status_reg.time_out) { + log_e("Bus Fail"); + return -1; + } + } + return 0; +} + +int i2cRead(i2c_t * i2c, uint16_t address, bool addr_10bit, uint8_t * data, uint8_t len, bool sendStop) +{ + address = (address << 1) | 1; + uint8_t addrLen = (addr_10bit?2:1); + uint8_t index = 0; + uint8_t cmdIdx; + uint8_t willRead; + + i2cSetCmd(i2c, 0, I2C_CMD_RSTART, 0, false, false, false);//START + i2cSetCmd(i2c, 1, I2C_CMD_WRITE, addrLen, false, false, true); + i2c->dev->fifo_data.data = address & 0xFF; + if(addr_10bit) { + i2c->dev->fifo_data.data = (address >> 8) & 0xFF; + } + while(len) { + cmdIdx = (index)?0:2; + willRead = (len > 32)?32:(len-1); + i2cSetCmd(i2c, cmdIdx++, I2C_CMD_READ, willRead, false, false, false); + if((len - willRead) > 1) { + i2cSetCmd(i2c, cmdIdx++, I2C_CMD_END, 0, false, false, false); + } else { + willRead++; + i2cSetCmd(i2c, cmdIdx++, I2C_CMD_READ, 1, true, false, false); + if(sendStop) { + i2cSetCmd(i2c, cmdIdx++, I2C_CMD_STOP, 0, false, false, false); + } + } + + i2c->dev->ctr.trans_start = 1; + while(i2c->dev->ctr.trans_start || i2c->dev->status_reg.bus_busy || (!i2c->dev->int_raw.ack_err && !i2c->dev->command[cmdIdx-1].done)); + if(!i2c->dev->command[cmdIdx-1].done) { + log_e("Ack Error"); + return -1; + } + if(i2c->dev->status_reg.arb_lost || i2c->dev->status_reg.time_out) { + log_e("Bus Fail"); + return -1; + } + int i = 0; + while(idev->fifo_data.data; + } + len -= willRead; + } + return 0; +} + +void i2cResetFiFo(i2c_t * i2c) +{ + //TX FIFO + i2c->dev->fifo_conf.tx_fifo_rst = 1; + i2c->dev->fifo_conf.tx_fifo_rst = 0; + //RX FIFO + i2c->dev->fifo_conf.rx_fifo_rst = 1; + i2c->dev->fifo_conf.rx_fifo_rst = 0; +} + +void i2cSetFrequency(i2c_t * i2c, uint32_t clk_speed) +{ + uint32_t period = (APB_CLK_FREQ/clk_speed) / 2; + i2c->dev->scl_low_period.scl_low_period = period; + i2c->dev->scl_high_period.period = period; + + i2c->dev->scl_start_hold.time = 50; + i2c->dev->scl_rstart_setup.time = 50; + + i2c->dev->scl_stop_hold.time = 50; + i2c->dev->scl_stop_setup.time = 50; + + i2c->dev->sda_hold.time = 40; + i2c->dev->sda_sample.time = 40; +} + +uint32_t i2cGetFrequency(i2c_t * i2c) +{ + return APB_CLK_FREQ/(i2c->dev->scl_low_period.scl_low_period+i2c->dev->scl_high_period.period); +} + +/* + * mode - 0 = Slave, 1 = Master + * slave_addr - I2C Address + * addr_10bit_en - enable slave 10bit address mode. + * clk_speed - SCL Frequency + * */ + +i2c_t * i2cInit(uint8_t i2c_num, uint16_t slave_addr, bool addr_10bit_en) +{ + i2c_t* i2c = (i2c_t*) malloc(sizeof(i2c_t)); + if(i2c == 0) { + return NULL; + } + + i2c->num = i2c_num; + i2c->dev = I2C_DEV(i2c_num); + + if(i2c->num == 0) { + SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG,DPORT_I2C_EXT0_CLK_EN); + CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG,DPORT_I2C_EXT0_RST); + } else if(i2c->num == 1) { + SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG,DPORT_I2C_EXT1_CLK_EN); + CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG,DPORT_I2C_EXT1_RST); + } + + i2c->dev->ctr.rx_lsb_first = 0 ; + i2c->dev->ctr.tx_lsb_first = 0 ; + i2c->dev->ctr.ms_mode = (slave_addr == 0); + i2c->dev->ctr.sda_force_out = 1 ; + i2c->dev->ctr.scl_force_out = 1 ; + i2c->dev->ctr.sample_scl_level = 0 ; + + i2c->dev->timeout.tout = 2000; + i2c->dev->fifo_conf.nonfifo_en = 0; + + if (slave_addr) { + i2c->dev->slave_addr.addr = slave_addr; + i2c->dev->slave_addr.en_10bit = addr_10bit_en; + } + + return i2c; +} + + diff --git a/cores/esp32/esp32-hal-i2c.h b/cores/esp32/esp32-hal-i2c.h new file mode 100644 index 00000000..d543ee95 --- /dev/null +++ b/cores/esp32/esp32-hal-i2c.h @@ -0,0 +1,50 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ESP32_HAL_I2C_H_ +#define _ESP32_HAL_I2C_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "esp32-hal.h" +#include "soc/i2c_struct.h" + +typedef struct { + i2c_dev_t * dev; + uint8_t num; +} i2c_t; + +i2c_t * i2cInit(uint8_t i2c_num, uint16_t slave_addr, bool addr_10bit_en); + +void i2cSetFrequency(i2c_t * i2c, uint32_t clk_speed); +uint32_t i2cGetFrequency(i2c_t * i2c); + +void i2cResetFiFo(i2c_t * i2c); + +void i2cAttachSCL(i2c_t * i2c, int8_t scl); +void i2cDetachSCL(i2c_t * i2c, int8_t scl); +void i2cAttachSDA(i2c_t * i2c, int8_t sda); +void i2cDetachSDA(i2c_t * i2c, int8_t sda); + +int i2cWrite(i2c_t * i2c, uint16_t address, bool addr_10bit, uint8_t * data, uint8_t len, bool sendStop); +int i2cRead(i2c_t * i2c, uint16_t address, bool addr_10bit, uint8_t * data, uint8_t len, bool sendStop); + + +#ifdef __cplusplus +} +#endif + +#endif /* _ESP32_HAL_I2C_H_ */ diff --git a/cores/esp32/esp32-hal-log.h b/cores/esp32/esp32-hal-log.h new file mode 100644 index 00000000..cedf1625 --- /dev/null +++ b/cores/esp32/esp32-hal-log.h @@ -0,0 +1,105 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef __ARDUHAL_LOG_H__ +#define __ARDUHAL_LOG_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "sdkconfig.h" + +#define ARDUHAL_LOG_LEVEL_NONE (0) +#define ARDUHAL_LOG_LEVEL_ERROR (1) +#define ARDUHAL_LOG_LEVEL_WARN (2) +#define ARDUHAL_LOG_LEVEL_INFO (3) +#define ARDUHAL_LOG_LEVEL_DEBUG (4) +#define ARDUHAL_LOG_LEVEL_VERBOSE (5) + +#ifndef CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL +#define CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL ARDUHAL_LOG_LEVEL_NONE +#endif + +#ifndef CONFIG_ARDUHAL_LOG_COLORS +#define CONFIG_ARDUHAL_LOG_COLORS 0 +#endif + +#if CONFIG_ARDUHAL_LOG_COLORS +#define ARDUHAL_LOG_COLOR_BLACK "30" +#define ARDUHAL_LOG_COLOR_RED "31" //ERROR +#define ARDUHAL_LOG_COLOR_GREEN "32" //INFO +#define ARDUHAL_LOG_COLOR_YELLOW "33" //WARNING +#define ARDUHAL_LOG_COLOR_BLUE "34" +#define ARDUHAL_LOG_COLOR_MAGENTA "35" +#define ARDUHAL_LOG_COLOR_CYAN "36" //DEBUG +#define ARDUHAL_LOG_COLOR_GRAY "37" //VERBOSE +#define ARDUHAL_LOG_COLOR_WHITE "38" + +#define ARDUHAL_LOG_COLOR(COLOR) "\033[0;" COLOR "m" +#define ARDUHAL_LOG_BOLD(COLOR) "\033[1;" COLOR "m" +#define ARDUHAL_LOG_RESET_COLOR "\033[0m" + +#define ARDUHAL_LOG_COLOR_E ARDUHAL_LOG_COLOR(ARDUHAL_LOG_COLOR_RED) +#define ARDUHAL_LOG_COLOR_W ARDUHAL_LOG_COLOR(ARDUHAL_LOG_COLOR_YELLOW) +#define ARDUHAL_LOG_COLOR_I ARDUHAL_LOG_COLOR(ARDUHAL_LOG_COLOR_GREEN) +#define ARDUHAL_LOG_COLOR_D ARDUHAL_LOG_COLOR(ARDUHAL_LOG_COLOR_CYAN) +#define ARDUHAL_LOG_COLOR_V ARDUHAL_LOG_COLOR(ARDUHAL_LOG_COLOR_GRAY) +#else +#define ARDUHAL_LOG_COLOR_E +#define ARDUHAL_LOG_COLOR_W +#define ARDUHAL_LOG_COLOR_I +#define ARDUHAL_LOG_COLOR_D +#define ARDUHAL_LOG_COLOR_V +#define ARDUHAL_LOG_RESET_COLOR +#endif + +#define ARDUHAL_SHORT_LOG_FORMAT(letter, format) ARDUHAL_LOG_COLOR_ ## letter format ARDUHAL_LOG_RESET_COLOR "\r\n" +#define ARDUHAL_LOG_FORMAT(letter, format) ARDUHAL_LOG_COLOR_ ## letter "[" #letter "][%s():%d] " format ARDUHAL_LOG_RESET_COLOR "\r\n", __FUNCTION__, __LINE__ + +#if CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL >= ARDUHAL_LOG_LEVEL_VERBOSE +#define log_v(format, ...) ets_printf(ARDUHAL_SHORT_LOG_FORMAT(V, format), ##__VA_ARGS__) +#else +#define log_v(format, ...) +#endif + +#if CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG +#define log_d(format, ...) ets_printf(ARDUHAL_SHORT_LOG_FORMAT(D, format), ##__VA_ARGS__) +#else +#define log_d(format, ...) +#endif + +#if CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL >= ARDUHAL_LOG_LEVEL_INFO +#define log_i(format, ...) ets_printf(ARDUHAL_SHORT_LOG_FORMAT(I, format), ##__VA_ARGS__) +#else +#define log_i(format, ...) +#endif + +#if CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL >= ARDUHAL_LOG_LEVEL_WARN +#define log_w(format, ...) ets_printf(ARDUHAL_LOG_FORMAT(W, format), ##__VA_ARGS__) +#else +#define log_w(format, ...) +#endif + +#if CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL >= ARDUHAL_LOG_LEVEL_ERROR +#define log_e(format, ...) ets_printf(ARDUHAL_LOG_FORMAT(E, format), ##__VA_ARGS__) +#else +#define log_e(format, ...) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __ESP_LOGGING_H__ */ diff --git a/cores/esp32/esp32-hal-matrix.c b/cores/esp32/esp32-hal-matrix.c new file mode 100644 index 00000000..fb1b498c --- /dev/null +++ b/cores/esp32/esp32-hal-matrix.c @@ -0,0 +1,47 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#include "esp32-hal-matrix.h" +#include "esp_attr.h" +#include "rom/gpio.h" + +#define MATRIX_DETACH_OUT_SIG 0x100 +#define MATRIX_DETACH_IN_LOW_PIN 0x30 +#define MATRIX_DETACH_IN_LOW_HIGH 0x38 + +void IRAM_ATTR pinMatrixOutAttach(uint8_t pin, uint8_t function, bool invertOut, bool invertEnable) +{ + gpio_matrix_out(pin, function, invertOut, invertEnable); +} + +void IRAM_ATTR pinMatrixOutDetach(uint8_t pin, bool invertOut, bool invertEnable) +{ + gpio_matrix_out(pin, MATRIX_DETACH_OUT_SIG, invertOut, invertEnable); +} + +void IRAM_ATTR pinMatrixInAttach(uint8_t pin, uint8_t signal, bool inverted) +{ + gpio_matrix_in(pin, signal, inverted); +} + +void IRAM_ATTR pinMatrixInDetach(uint8_t signal, bool high, bool inverted) +{ + gpio_matrix_in(high?MATRIX_DETACH_IN_LOW_HIGH:MATRIX_DETACH_IN_LOW_PIN, signal, inverted); +} +/* +void IRAM_ATTR intrMatrixAttach(uint32_t source, uint32_t inum){ + intr_matrix_set(PRO_CPU_NUM, source, inum); +} +*/ + diff --git a/cores/esp32/esp32-hal-matrix.h b/cores/esp32/esp32-hal-matrix.h new file mode 100644 index 00000000..3bc90498 --- /dev/null +++ b/cores/esp32/esp32-hal-matrix.h @@ -0,0 +1,35 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ESP32_HAL_MATRIX_H_ +#define _ESP32_HAL_MATRIX_H_ + + +#ifdef __cplusplus +extern "C" { +#endif + +#include "esp32-hal.h" +#include "soc/gpio_sig_map.h" + +void pinMatrixOutAttach(uint8_t pin, uint8_t function, bool invertOut, bool invertEnable); +void pinMatrixOutDetach(uint8_t pin, bool invertOut, bool invertEnable); +void pinMatrixInAttach(uint8_t pin, uint8_t signal, bool inverted); +void pinMatrixInDetach(uint8_t signal, bool high, bool inverted); + +#ifdef __cplusplus +} +#endif + +#endif /* COMPONENTS_ARDUHAL_INCLUDE_ESP32_HAL_MATRIX_H_ */ diff --git a/cores/esp32/esp32-hal-misc.c b/cores/esp32/esp32-hal-misc.c new file mode 100644 index 00000000..092a36a5 --- /dev/null +++ b/cores/esp32/esp32-hal-misc.c @@ -0,0 +1,50 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#include "esp32-hal.h" +#include "sdkconfig.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "esp_attr.h" + +uint32_t IRAM_ATTR micros() +{ + uint32_t ccount; + __asm__ __volatile__ ( "rsr %0, ccount" : "=a" (ccount) ); + return ccount / CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ; + //return system_get_time(); +} + +uint32_t IRAM_ATTR millis() +{ + return xTaskGetTickCount() * portTICK_PERIOD_MS; +} + +void delay(uint32_t ms) +{ + vTaskDelay(ms / portTICK_PERIOD_MS); +} + +void delayMicroseconds(uint32_t us) +{ + if(us) { + unsigned long endat = micros(); + endat += us; + while(micros() < endat) { + NOP(); + } + } +} + + diff --git a/cores/esp32/esp32-hal-spi.c b/cores/esp32/esp32-hal-spi.c new file mode 100644 index 00000000..9e0f0c59 --- /dev/null +++ b/cores/esp32/esp32-hal-spi.c @@ -0,0 +1,700 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#include "esp32-hal-spi.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "rom/ets_sys.h" +#include "esp_attr.h" +#include "esp_intr.h" +#include "rom/gpio.h" +#include "soc/spi_reg.h" +#include "soc/io_mux_reg.h" +#include "soc/gpio_sig_map.h" +#include "soc/dport_reg.h" + +#define SPI_REG_BASE(p) ((p==0)?DR_REG_SPI0_BASE:((p==1)?DR_REG_SPI1_BASE:((p==2)?DR_REG_SPI2_BASE:((p==3)?DR_REG_SPI3_BASE:0)))) +#define SPI_DEV(i) ((spi_dev_t *)(SPI_REG_BASE(i))) + +#define SPI_CLK_IDX(p) ((p==0)?SPICLK_OUT_IDX:((p==1)?SPICLK_OUT_IDX:((p==2)?HSPICLK_OUT_IDX:((p==3)?VSPICLK_OUT_MUX_IDX:0)))) +#define SPI_MISO_IDX(p) ((p==0)?SPIQ_OUT_IDX:((p==1)?SPIQ_OUT_IDX:((p==2)?HSPIQ_OUT_IDX:((p==3)?VSPIQ_OUT_IDX:0)))) +#define SPI_MOSI_IDX(p) ((p==0)?SPID_IN_IDX:((p==1)?SPID_IN_IDX:((p==2)?HSPID_IN_IDX:((p==3)?VSPID_IN_IDX:0)))) + +#define SPI_SPI_SS_IDX(n) ((n==0)?SPICS0_OUT_IDX:((n==1)?SPICS1_OUT_IDX:((n==2)?SPICS2_OUT_IDX:SPICS0_OUT_IDX))) +#define SPI_HSPI_SS_IDX(n) ((n==0)?HSPICS0_OUT_IDX:((n==1)?HSPICS1_OUT_IDX:((n==2)?HSPICS2_OUT_IDX:HSPICS0_OUT_IDX))) +#define SPI_VSPI_SS_IDX(n) ((n==0)?VSPICS0_OUT_IDX:((n==1)?VSPICS1_OUT_IDX:((n==2)?VSPICS2_OUT_IDX:VSPICS0_OUT_IDX))) +#define SPI_SS_IDX(p, n) ((p==0)?SPI_SPI_SS_IDX(n):((p==1)?SPI_SPI_SS_IDX(n):((p==2)?SPI_HSPI_SS_IDX(n):((p==3)?SPI_VSPI_SS_IDX(n):0)))) + +#define SPI_INUM(u) (2) +#define SPI_INTR_SOURCE(u) ((u==0)?ETS_SPI0_INTR_SOURCE:((u==1)?ETS_SPI1_INTR_SOURCE:((u==2)?ETS_SPI2_INTR_SOURCE:((p==3)?ETS_SPI3_INTR_SOURCE:0)))) + +void spiAttachSCK(spi_t * spi, int8_t sck) +{ + if(!spi) { + return; + } + if(sck < 0) { + if(spi->num == HSPI) { + sck = 14; + } else if(spi->num == VSPI) { + sck = 18; + } else { + sck = 6; + } + } + pinMode(sck, OUTPUT); + pinMatrixOutAttach(sck, SPI_CLK_IDX(spi->num), false, false); +} + +void spiAttachMISO(spi_t * spi, int8_t miso) +{ + if(!spi) { + return; + } + if(miso < 0) { + if(spi->num == HSPI) { + miso = 12; + } else if(spi->num == VSPI) { + miso = 19; + } else { + miso = 7; + } + } + pinMode(miso, INPUT); + pinMatrixInAttach(miso, SPI_MISO_IDX(spi->num), false); +} + +void spiAttachMOSI(spi_t * spi, int8_t mosi) +{ + if(!spi) { + return; + } + if(mosi < 0) { + if(spi->num == HSPI) { + mosi = 13; + } else if(spi->num == VSPI) { + mosi = 23; + } else { + mosi = 8; + } + } + pinMode(mosi, OUTPUT); + pinMatrixOutAttach(mosi, SPI_MOSI_IDX(spi->num), false, false); +} + +void spiDetachSCK(spi_t * spi, int8_t sck) +{ + if(!spi) { + return; + } + if(sck < 0) { + if(spi->num == HSPI) { + sck = 14; + } else if(spi->num == VSPI) { + sck = 18; + } else { + sck = 6; + } + } + pinMatrixOutDetach(sck, false, false); + pinMode(sck, INPUT); +} + +void spiDetachMISO(spi_t * spi, int8_t miso) +{ + if(!spi) { + return; + } + if(miso < 0) { + if(spi->num == HSPI) { + miso = 12; + } else if(spi->num == VSPI) { + miso = 19; + } else { + miso = 7; + } + } + pinMatrixInDetach(SPI_MISO_IDX(spi->num), false, false); + pinMode(miso, INPUT); +} + +void spiDetachMOSI(spi_t * spi, int8_t mosi) +{ + if(!spi) { + return; + } + if(mosi < 0) { + if(spi->num == HSPI) { + mosi = 13; + } else if(spi->num == VSPI) { + mosi = 23; + } else { + mosi = 8; + } + } + pinMatrixOutDetach(mosi, false, false); + pinMode(mosi, INPUT); +} + +void spiAttachSS(spi_t * spi, uint8_t cs_num, int8_t ss) +{ + if(!spi) { + return; + } + if(cs_num > 2) { + return; + } + if(ss < 0) { + cs_num = 0; + if(spi->num == HSPI) { + ss = 15; + } else if(spi->num == VSPI) { + ss = 5; + } else { + ss = 11; + } + } + pinMode(ss, OUTPUT); + pinMatrixOutAttach(ss, SPI_SS_IDX(spi->num, cs_num), false, false); + spiEnableSSPins(spi, (1 << cs_num)); +} + +void spiDetachSS(spi_t * spi, int8_t ss) +{ + if(!spi) { + return; + } + if(ss < 0) { + if(spi->num == HSPI) { + ss = 15; + } else if(spi->num == VSPI) { + ss = 5; + } else { + ss = 11; + } + } + pinMatrixOutDetach(ss, false, false); + pinMode(ss, INPUT); +} + +void spiEnableSSPins(spi_t * spi, uint8_t cs_mask) +{ + if(!spi) { + return; + } + spi->dev->pin.val &= ~(cs_mask & SPI_CS_MASK_ALL); +} + +void spiDisableSSPins(spi_t * spi, uint8_t cs_mask) +{ + if(!spi) { + return; + } + spi->dev->pin.val |= (cs_mask & SPI_CS_MASK_ALL); +} + +void spiSSEnable(spi_t * spi) +{ + if(!spi) { + return; + } + spi->dev->user.cs_setup = 1; + spi->dev->user.cs_hold = 1; +} + +void spiSSDisable(spi_t * spi) +{ + if(!spi) { + return; + } + spi->dev->user.cs_setup = 0; + spi->dev->user.cs_hold = 0; +} + +void spiSSSet(spi_t * spi) +{ + if(!spi) { + return; + } + spi->dev->pin.cs_keep_active = 1; +} + +void spiSSClear(spi_t * spi) +{ + if(!spi) { + return; + } + spi->dev->pin.cs_keep_active = 0; +} + +uint32_t spiGetClockDiv(spi_t * spi) +{ + if(!spi) { + return 0; + } + return spi->dev->clock.val; +} + +void spiSetClockDiv(spi_t * spi, uint32_t clockDiv) +{ + if(!spi) { + return; + } + spi->dev->clock.val = clockDiv; +} + +uint8_t spiGetDataMode(spi_t * spi) +{ + if(!spi) { + return 0; + } + bool idleEdge = spi->dev->pin.ck_idle_edge; + bool outEdge = spi->dev->user.ck_out_edge; + if(idleEdge) { + if(outEdge) { + return SPI_MODE3; + } + return SPI_MODE2; + } + if(outEdge) { + return SPI_MODE1; + } + return SPI_MODE0; +} + +void spiSetDataMode(spi_t * spi, uint8_t dataMode) +{ + if(!spi) { + return; + } + switch (dataMode) { + case SPI_MODE1: + spi->dev->pin.ck_idle_edge = 0; + spi->dev->user.ck_out_edge = 1; + break; + case SPI_MODE2: + spi->dev->pin.ck_idle_edge = 1; + spi->dev->user.ck_out_edge = 0; + break; + case SPI_MODE3: + spi->dev->pin.ck_idle_edge = 1; + spi->dev->user.ck_out_edge = 1; + break; + case SPI_MODE0: + default: + spi->dev->pin.ck_idle_edge = 0; + spi->dev->user.ck_out_edge = 0; + break; + } +} + +uint8_t spiGetBitOrder(spi_t * spi) +{ + if(!spi) { + return 0; + } + return (spi->dev->ctrl.wr_bit_order | spi->dev->ctrl.rd_bit_order) == 0; +} + +void spiSetBitOrder(spi_t * spi, uint8_t bitOrder) +{ + if(!spi) { + return; + } + if (SPI_MSBFIRST == bitOrder) { + spi->dev->ctrl.wr_bit_order = 0; + spi->dev->ctrl.rd_bit_order = 0; + } else if (SPI_LSBFIRST == bitOrder) { + spi->dev->ctrl.wr_bit_order = 1; + spi->dev->ctrl.rd_bit_order = 1; + } +} + +void spiStopBus(spi_t * spi) +{ + if(!spi) { + return; + } + spi->dev->slave.trans_done = 0; + spi->dev->slave.slave_mode = 0; + spi->dev->pin.val = 0; + spi->dev->user.val = 0; + spi->dev->user1.val = 0; + spi->dev->ctrl.val = 0; + spi->dev->ctrl1.val = 0; + spi->dev->ctrl2.val = 0; + spi->dev->clock.val = 0; +} + +spi_t * spiStartBus(uint8_t spi_num, uint32_t clockDiv, uint8_t dataMode, uint8_t bitOrder) +{ + + spi_t* spi = (spi_t*) malloc(sizeof(spi_t)); + if(spi == 0) { + return NULL; + } + + spi->num = spi_num; + spi->dev = (spi_dev_t *)SPI_DEV(spi_num); + + if(spi_num == HSPI) { + SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI_CLK_EN_1); + CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_RST_1); + } else if(spi_num == VSPI) { + SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI_CLK_EN_2); + CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_RST_2); + } else { + SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI_CLK_EN); + CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_RST); + } + + spiStopBus(spi); + spiSetDataMode(spi, dataMode); + spiSetBitOrder(spi, bitOrder); + spiSetClockDiv(spi, clockDiv); + + spi->dev->user.usr_mosi = 1; + spi->dev->user.usr_miso = 1; + spi->dev->user.doutdin = 1; + + int i; + for(i=0; i<16; i++) { + spi->dev->data_buf[i] = 0x00000000; + } + + return spi; +} + +void spiWaitReady(spi_t * spi) +{ + if(!spi) { + return; + } + while(spi->dev->cmd.usr); +} + +void spiWrite(spi_t * spi, uint32_t *data, uint8_t len) +{ + if(!spi) { + return; + } + int i; + if(len > 16) { + len = 16; + } + while(spi->dev->cmd.usr); + spi->dev->mosi_dlen.usr_mosi_dbitlen = (len * 32) - 1; + spi->dev->miso_dlen.usr_miso_dbitlen = (len * 32) - 1; + for(i=0; idev->data_buf[i] = data[i]; + } + spi->dev->cmd.usr = 1; +} + +void spiRead(spi_t * spi, uint32_t *data, uint8_t len) +{ + if(!spi) { + return; + } + int i; + if(len > 16) { + len = 16; + } + while(spi->dev->cmd.usr); + for(i=0; idev->data_buf[i]; + } +} + +void spiWriteByte(spi_t * spi, uint8_t data) +{ + if(!spi) { + return; + } + while(spi->dev->cmd.usr); + spi->dev->mosi_dlen.usr_mosi_dbitlen = 7; + spi->dev->miso_dlen.usr_miso_dbitlen = 7; + spi->dev->data_buf[0] = data; + spi->dev->cmd.usr = 1; +} + +uint8_t spiReadByte(spi_t * spi) +{ + if(!spi) { + return 0; + } + while(spi->dev->cmd.usr); + return spi->dev->data_buf[0] & 0xFF; +} + +uint32_t __spiTranslate16(uint16_t data, bool msb) +{ + if(msb) { + return (data >> 8) | (data << 8); + } else { + return data; + } +} + +uint32_t __spiTranslate24(uint32_t data, bool msb) +{ + if(msb) { + union { + uint32_t l; + uint8_t b[4]; + } out; + out.l = data; + return out.b[2] | (out.b[1] << 8) | (out.b[0] << 16); + } else { + return data; + } +} + +uint32_t __spiTranslate32(uint32_t data, bool msb) +{ + if(msb) { + union { + uint32_t l; + uint8_t b[4]; + } out; + out.l = data; + return out.b[3] | (out.b[2] << 8) | (out.b[1] << 16) | (out.b[0] << 24); + } else { + return data; + } +} + +void spiWriteWord(spi_t * spi, uint16_t data) +{ + if(!spi) { + return; + } + while(spi->dev->cmd.usr); + spi->dev->mosi_dlen.usr_mosi_dbitlen = 15; + spi->dev->miso_dlen.usr_miso_dbitlen = 15; + spi->dev->data_buf[0] = __spiTranslate16(data, !spi->dev->ctrl.wr_bit_order); + spi->dev->cmd.usr = 1; +} + +uint16_t spiReadWord(spi_t * spi) +{ + if(!spi) { + return 0; + } + while(spi->dev->cmd.usr); + return __spiTranslate16(spi->dev->data_buf[0] & 0xFFFF, !spi->dev->ctrl.rd_bit_order); +} + +void spiWriteLong(spi_t * spi, uint32_t data) +{ + if(!spi) { + return; + } + while(spi->dev->cmd.usr); + spi->dev->mosi_dlen.usr_mosi_dbitlen = 31; + spi->dev->miso_dlen.usr_miso_dbitlen = 31; + spi->dev->data_buf[0] = __spiTranslate32(data, !spi->dev->ctrl.wr_bit_order); + spi->dev->cmd.usr = 1; +} + +uint32_t spiReadLong(spi_t * spi) +{ + if(!spi) { + return 0; + } + while(spi->dev->cmd.usr); + return __spiTranslate32(spi->dev->data_buf[0], !spi->dev->ctrl.rd_bit_order); +} + +void spiTransferBits(spi_t * spi, uint32_t data, uint32_t * out, uint8_t bits) +{ + if(!spi) { + return; + } + + if(bits > 32) { + bits = 32; + } + uint32_t bytes = (bits + 7) / 8;//64 max + uint32_t mask = (((uint64_t)1 << bits) - 1) & 0xFFFFFFFF; + + while(spi->dev->cmd.usr); + spi->dev->mosi_dlen.usr_mosi_dbitlen = (bits - 1); + spi->dev->miso_dlen.usr_miso_dbitlen = (bits - 1); + if(bytes == 1) { + spi->dev->data_buf[0] = data & mask; + } else if(bytes == 2) { + spi->dev->data_buf[0] = __spiTranslate16(data & mask, !spi->dev->ctrl.wr_bit_order); + } else if(bytes == 3) { + spi->dev->data_buf[0] = __spiTranslate24(data & mask, !spi->dev->ctrl.wr_bit_order); + } else { + spi->dev->data_buf[0] = __spiTranslate32(data & mask, !spi->dev->ctrl.wr_bit_order); + } + spi->dev->cmd.usr = 1; + + if(out) { + while(spi->dev->cmd.usr); + if(bytes == 1) { + *out = spi->dev->data_buf[0] & mask; + } else if(bytes == 2) { + *out = __spiTranslate16(spi->dev->data_buf[0] & mask, !spi->dev->ctrl.wr_bit_order); + } else if(bytes == 3) { + *out = __spiTranslate24(spi->dev->data_buf[0] & mask, !spi->dev->ctrl.wr_bit_order); + } else { + *out = __spiTranslate32(spi->dev->data_buf[0] & mask, !spi->dev->ctrl.wr_bit_order); + } + } +} + +void __spiTransferBytes(spi_t * spi, uint8_t * data, uint8_t * out, uint32_t bytes) +{ + if(!spi) { + return; + } + int i; + + if(bytes > 64) { + bytes = 64; + } + + uint32_t words = (bytes + 3) / 4;//16 max + + uint32_t wordsBuf[16] = {0,}; + uint8_t * bytesBuf = (uint8_t *) wordsBuf; + + if(data) { + for(i=0; idev->cmd.usr); + spi->dev->mosi_dlen.usr_mosi_dbitlen = ((bytes * 8) - 1); + spi->dev->miso_dlen.usr_miso_dbitlen = ((bytes * 8) - 1); + + for(i=0; idev->data_buf[i] = wordsBuf[i]; //copy buffer to spi fifo + } + + spi->dev->cmd.usr = 1; + + if(out) { + while(spi->dev->cmd.usr); + for(i=0; idev->data_buf[i];//copy spi fifo to buffer + } + for(i=0; i 64) { + __spiTransferBytes(spi, data, out, 64); + size -= 64; + if(data) { + data += 64; + } + if(out) { + out += 64; + } + } else { + __spiTransferBytes(spi, data, out, size); + size = 0; + } + } +} + + +typedef union { + uint32_t regValue; + struct { + unsigned regL :6; + unsigned regH :6; + unsigned regN :6; + unsigned regPre :13; + unsigned regEQU :1; + }; +} spiClk_t; + +#define ClkRegToFreq(reg) (CPU_CLK_FREQ / (((reg)->regPre + 1) * ((reg)->regN + 1))) + +uint32_t spiClockDivToFrequency(uint32_t clockDiv) +{ + spiClk_t reg = { clockDiv }; + return ClkRegToFreq(®); +} + +uint32_t spiFrequencyToClockDiv(uint32_t freq) +{ + + if(freq >= CPU_CLK_FREQ) { + return SPI_CLK_EQU_SYSCLK; + } + + const spiClk_t minFreqReg = { 0x7FFFF000 }; + uint32_t minFreq = ClkRegToFreq((spiClk_t*) &minFreqReg); + if(freq < minFreq) { + return minFreqReg.regValue; + } + + uint8_t calN = 1; + spiClk_t bestReg = { 0 }; + int32_t bestFreq = 0; + + while(calN <= 0x3F) { + spiClk_t reg = { 0 }; + int32_t calFreq; + int32_t calPre; + int8_t calPreVari = -2; + + reg.regN = calN; + + while(calPreVari++ <= 1) { + calPre = (((CPU_CLK_FREQ / (reg.regN + 1)) / freq) - 1) + calPreVari; + if(calPre > 0x1FFF) { + reg.regPre = 0x1FFF; + } else if(calPre <= 0) { + reg.regPre = 0; + } else { + reg.regPre = calPre; + } + reg.regL = ((reg.regN + 1) / 2); + calFreq = ClkRegToFreq(®); + if(calFreq == (int32_t) freq) { + memcpy(&bestReg, ®, sizeof(bestReg)); + break; + } else if(calFreq < (int32_t) freq) { + if(abs(freq - calFreq) < abs(freq - bestFreq)) { + bestFreq = calFreq; + memcpy(&bestReg, ®, sizeof(bestReg)); + } + } + } + if(calFreq == (int32_t) freq) { + break; + } + calN++; + } + return bestReg.regValue; +} + + + diff --git a/cores/esp32/esp32-hal-spi.h b/cores/esp32/esp32-hal-spi.h new file mode 100644 index 00000000..1ff5e822 --- /dev/null +++ b/cores/esp32/esp32-hal-spi.h @@ -0,0 +1,118 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef MAIN_ESP32_HAL_SPI_H_ +#define MAIN_ESP32_HAL_SPI_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "esp32-hal.h" +#include "soc/spi_struct.h" + +#define SPI_HAS_TRANSACTION + +#define FSPI 1 //SPI bus attached to the flash (can use the same data lines but different SS) +#define HSPI 2 //SPI bus normally mapped to pins 12 - 15, but can be matrixed to any pins +#define VSPI 3 //SPI bus normally attached to pins 5, 18, 19 and 23, but can be matrixed to any pins + +// This defines are not representing the real Divider of the ESP32 +// the Defines match to an AVR Arduino on 16MHz for better compatibility +#define SPI_CLOCK_DIV2 0x00101001 //8 MHz +#define SPI_CLOCK_DIV4 0x00241001 //4 MHz +#define SPI_CLOCK_DIV8 0x004c1001 //2 MHz +#define SPI_CLOCK_DIV16 0x009c1001 //1 MHz +#define SPI_CLOCK_DIV32 0x013c1001 //500 KHz +#define SPI_CLOCK_DIV64 0x027c1001 //250 KHz +#define SPI_CLOCK_DIV128 0x04fc1001 //125 KHz + +#define SPI_MODE0 0 +#define SPI_MODE1 1 +#define SPI_MODE2 2 +#define SPI_MODE3 3 + +#define SPI_CS0 0 +#define SPI_CS1 1 +#define SPI_CS2 2 +#define SPI_CS_MASK_ALL 0x7 + +#define SPI_LSBFIRST 0 +#define SPI_MSBFIRST 1 + +typedef struct { + spi_dev_t * dev; + uint8_t num; +} spi_t; + +spi_t * spiStartBus(uint8_t spi_num, uint32_t freq, uint8_t dataMode, uint8_t bitOrder); +void spiStopBus(spi_t * spi); + +//Attach/Detach Signal Pins +void spiAttachSCK(spi_t * spi, int8_t sck); +void spiAttachMISO(spi_t * spi, int8_t miso); +void spiAttachMOSI(spi_t * spi, int8_t mosi); +void spiDetachSCK(spi_t * spi, int8_t sck); +void spiDetachMISO(spi_t * spi, int8_t miso); +void spiDetachMOSI(spi_t * spi, int8_t mosi); + +//Attach/Detach SS pin to SPI_CSx signal +void spiAttachSS(spi_t * spi, uint8_t cs_num, int8_t ss); +void spiDetachSS(spi_t * spi, int8_t ss); + +//Enable/Disable SPI_CSx pins +void spiEnableSSPins(spi_t * spi, uint8_t cs_mask); +void spiDisableSSPins(spi_t * spi, uint8_t cs_mask); + +//Enable/Disable hardware control of SPI_CSx pins +void spiSSEnable(spi_t * spi); +void spiSSDisable(spi_t * spi); + +//Activate enabled SPI_CSx pins +void spiSSSet(spi_t * spi); +//Deactivate enabled SPI_CSx pins +void spiSSClear(spi_t * spi); + +void spiWaitReady(spi_t * spi); + +uint32_t spiGetClockDiv(spi_t * spi); +void spiSetClockDiv(spi_t * spi, uint32_t clockDiv); + +uint8_t spiGetDataMode(spi_t * spi); +void spiSetDataMode(spi_t * spi, uint8_t dataMode); + +uint8_t spiGetBitOrder(spi_t * spi); +void spiSetBitOrder(spi_t * spi, uint8_t bitOrder); + +void spiWrite(spi_t * spi, uint32_t *data, uint8_t len); +void spiWriteByte(spi_t * spi, uint8_t data); +void spiWriteWord(spi_t * spi, uint16_t data); +void spiWriteLong(spi_t * spi, uint32_t data); + +void spiRead(spi_t * spi, uint32_t *out, uint8_t len); +uint8_t spiReadByte(spi_t * spi); +uint16_t spiReadWord(spi_t * spi); +uint32_t spiReadLong(spi_t * spi); + +void spiTransferBits(spi_t * spi, uint32_t data, uint32_t * out, uint8_t bits); +void spiTransferBytes(spi_t * spi, uint8_t * data, uint8_t * out, uint32_t size); + +uint32_t spiFrequencyToClockDiv(uint32_t freq); +uint32_t spiClockDivToFrequency(uint32_t freq); + +#ifdef __cplusplus +} +#endif + +#endif /* MAIN_ESP32_HAL_SPI_H_ */ diff --git a/cores/esp32/esp32-hal-uart.c b/cores/esp32/esp32-hal-uart.c new file mode 100644 index 00000000..6739dd2a --- /dev/null +++ b/cores/esp32/esp32-hal-uart.c @@ -0,0 +1,270 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#include "esp32-hal-uart.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/semphr.h" +#include "rom/ets_sys.h" +#include "esp_attr.h" +#include "esp_intr.h" +#include "rom/uart.h" +#include "soc/uart_reg.h" +#include "soc/io_mux_reg.h" +#include "soc/gpio_sig_map.h" + +#define ETS_UART2_INUM 5 + +#define UART_REG_BASE(u) ((u==0)?DR_REG_UART_BASE:( (u==1)?DR_REG_UART1_BASE:( (u==2)?DR_REG_UART2_BASE:0))) +#define UART_RXD_IDX(u) ((u==0)?U0RXD_IN_IDX:( (u==1)?U1RXD_IN_IDX:( (u==2)?U2RXD_IN_IDX:0))) +#define UART_TXD_IDX(u) ((u==0)?U0TXD_OUT_IDX:( (u==1)?U1TXD_OUT_IDX:( (u==2)?U2TXD_OUT_IDX:0))) +#define UART_INUM(u) ((u==0)?ETS_UART0_INUM:( (u==1)?ETS_UART1_INUM:( (u==2)?ETS_UART2_INUM:0))) +#define UART_INTR_SOURCE(u) ((u==0)?ETS_UART0_INTR_SOURCE:( (u==1)?ETS_UART1_INTR_SOURCE:((u==2)?ETS_UART2_INTR_SOURCE:0))) + +static int s_uart_debug_nr = 0; + +static void IRAM_ATTR _uart_isr(void *arg) +{ + uint8_t c; + BaseType_t xHigherPriorityTaskWoken; + uart_t* uart = (uart_t*)arg; + + uart->dev->int_clr.val = UART_RXFIFO_FULL_INT_ENA | UART_FRM_ERR_INT_ENA | UART_RXFIFO_TOUT_INT_ENA; //Acknowledge the interrupt + while(uart->dev->status.rxfifo_cnt) { + c = uart->dev->fifo.rw_byte; + if(!xQueueIsQueueFullFromISR(uart->queue)) { + xQueueSendFromISR(uart->queue, &c, &xHigherPriorityTaskWoken); + } + } + + if (xHigherPriorityTaskWoken) { + portYIELD_FROM_ISR(); + } +} + +uart_t* uartBegin(uint8_t uart_nr, uint32_t baudrate, uint32_t config, int8_t rxPin, int8_t txPin, uint16_t queueLen, bool inverted) +{ + uint32_t conf1 = 0; + + if(uart_nr > 2) { + return NULL; + } + + if(rxPin == -1 && txPin == -1) { + return NULL; + } + + uart_t* uart = (uart_t*) malloc(sizeof(uart_t)); + if(uart == 0) { + return NULL; + } + + uart->dev = (uart_dev_t *)UART_REG_BASE(uart_nr); + uart->num = uart_nr; + uart->inverted = inverted; + + uart->rxPin = rxPin; + uart->txPin = txPin; + uart->rxEnabled = (uart->rxPin != -1); + uart->txEnabled = (uart->txPin != -1); + + uartFlush(uart); + + if(uart->rxEnabled) { + uart->queue = xQueueCreate(queueLen, sizeof(uint8_t)); //initialize the queue + if(uart->queue == NULL) { + free(uart); + return NULL; + } + + pinMode(uart->rxPin, INPUT); + pinMatrixInAttach(uart->rxPin, UART_RXD_IDX(uart->num), uart->inverted); + intr_matrix_set(PRO_CPU_NUM, UART_INTR_SOURCE(uart->num), UART_INUM(uart->num)); + xt_set_interrupt_handler(UART_INUM(uart->num), _uart_isr, uart); + ESP_INTR_ENABLE(UART_INUM(uart->num)); + conf1 = (112 << UART_RXFIFO_FULL_THRHD_S) | (0x02 << UART_RX_TOUT_THRHD_S) | UART_RX_TOUT_EN; + uart->dev->int_ena.val = UART_RXFIFO_FULL_INT_ENA | UART_FRM_ERR_INT_ENA | UART_RXFIFO_TOUT_INT_ENA; + uart->dev->int_clr.val = 0xffff; + } + if(uart->txEnabled) { + pinMode(uart->txPin, OUTPUT); + pinMatrixOutAttach(uart->txPin, UART_TXD_IDX(uart->num), uart->inverted, false); + } + + uartSetBaudRate(uart, baudrate); + uart->dev->conf0.val = config; + uart->dev->conf1.val = conf1; + return uart; +} + +void uartEnd(uart_t* uart) +{ + if(uart == 0) { + return; + } + + if(uart->rxEnabled) { + pinMode(uart->rxPin, INPUT); + if(uart->num || uart->rxPin != 3) { + pinMatrixInDetach(UART_RXD_IDX(uart->num), uart->inverted, false); + } + + ESP_INTR_DISABLE(UART_INUM(uart->num)); + xt_set_interrupt_handler(UART_INUM(uart->num), NULL, NULL); + vQueueDelete(uart->queue); + } + if(uart->txEnabled) { + pinMode(uart->txPin, INPUT); + if(uart->num || uart->txPin != 1) { + pinMatrixInDetach(UART_TXD_IDX(uart->num), !uart->inverted, uart->inverted); + } + } + + uart->dev->conf0.val = 0; + uart->dev->conf1.val = 0; + uart->dev->int_ena.val = 0; + uart->dev->int_clr.val = 0xffff; + + free(uart); +} + +uint32_t uartAvailable(uart_t* uart) +{ + return uxQueueMessagesWaiting(uart->queue); +} + +uint8_t uartRead(uart_t* uart) +{ + uint8_t c; + if(xQueueReceive(uart->queue, &c, 0)) { + return c; + } + return 0; +} + +uint8_t uartPeek(uart_t* uart) +{ + uint8_t c; + if(xQueuePeek(uart->queue, &c, 0)) { + return c; + } + return 0; +} + +void uartWrite(uart_t* uart, uint8_t c) +{ + while(uart->dev->status.rxfifo_cnt == 0x7F); + uart->dev->fifo.rw_byte = c; +} + +void uartWriteBuf(uart_t* uart, const uint8_t * data, size_t len) +{ + while(len && uart->dev->status.rxfifo_cnt < 0x7F) { + uart->dev->fifo.rw_byte = *data++; + len--; + } +} + +void uartFlush(uart_t* uart) +{ + uint32_t tmp = 0x00000000; + + if(uart == 0) { + return; + } + + if(uart->rxEnabled) { + tmp |= UART_RXFIFO_RST; + } + + if(uart->txEnabled) { + tmp |= UART_TXFIFO_RST; + while(uart->dev->status.txfifo_cnt); + } + + uart->dev->conf0.val |= (tmp); + uart->dev->conf0.val &= ~(tmp); +} + +void uartSetBaudRate(uart_t* uart, uint32_t baud_rate) +{ + if(uart == 0) { + return; + } + uart->baud_rate = baud_rate; + uint32_t clk_div = ((UART_CLK_FREQ<<4)/baud_rate); + uart->dev->clk_div.div_int = clk_div>>4 ; + uart->dev->clk_div.div_frag = clk_div & 0xf; +} + +uint32_t uartGetBaudRate(uart_t* uart) +{ + if(uart == 0) { + return 0; + } + return uart->baud_rate; +} + +static void IRAM_ATTR uart0_write_char(char c) +{ + while(((ESP_REG(0x01C+DR_REG_UART_BASE) >> UART_TXFIFO_CNT_S) & 0x7F) == 0x7F); + ESP_REG(DR_REG_UART_BASE) = c; +} + +static void IRAM_ATTR uart1_write_char(char c) +{ + while(((ESP_REG(0x01C+DR_REG_UART1_BASE) >> UART_TXFIFO_CNT_S) & 0x7F) == 0x7F); + ESP_REG(DR_REG_UART1_BASE) = c; +} + +static void IRAM_ATTR uart2_write_char(char c) +{ + while(((ESP_REG(0x01C+DR_REG_UART2_BASE) >> UART_TXFIFO_CNT_S) & 0x7F) == 0x7F); + ESP_REG(DR_REG_UART2_BASE) = c; +} + +void uartSetDebug(uart_t* uart) +{ + if(uart == NULL || uart->num > 2) { + s_uart_debug_nr = -1; + ets_install_putc1(NULL); + return; + } + if(s_uart_debug_nr == uart->num) { + return; + } + s_uart_debug_nr = uart->num; + switch(s_uart_debug_nr) { + case 0: + ets_install_putc1((void (*)(char)) &uart0_write_char); + break; + case 1: + ets_install_putc1((void (*)(char)) &uart1_write_char); + break; + case 2: + ets_install_putc1((void (*)(char)) &uart2_write_char); + break; + default: + ets_install_putc1(NULL); + break; + } +} + +int uartGetDebug() +{ + return s_uart_debug_nr; +} + + + diff --git a/cores/esp32/esp32-hal-uart.h b/cores/esp32/esp32-hal-uart.h new file mode 100644 index 00000000..d3669f83 --- /dev/null +++ b/cores/esp32/esp32-hal-uart.h @@ -0,0 +1,84 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef MAIN_ESP32_HAL_UART_H_ +#define MAIN_ESP32_HAL_UART_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "esp32-hal.h" +#include "soc/uart_struct.h" +#include "freertos/FreeRTOS.h" +#include "freertos/queue.h" + +#define SERIAL_5N1 0x8000010 +#define SERIAL_6N1 0x8000014 +#define SERIAL_7N1 0x8000018 +#define SERIAL_8N1 0x800001c +#define SERIAL_5N2 0x8000030 +#define SERIAL_6N2 0x8000034 +#define SERIAL_7N2 0x8000038 +#define SERIAL_8N2 0x800003c +#define SERIAL_5E1 0x8000012 +#define SERIAL_6E1 0x8000016 +#define SERIAL_7E1 0x800001a +#define SERIAL_8E1 0x800001e +#define SERIAL_5E2 0x8000032 +#define SERIAL_6E2 0x8000036 +#define SERIAL_7E2 0x800003a +#define SERIAL_8E2 0x800003e +#define SERIAL_5O1 0x8000013 +#define SERIAL_6O1 0x8000017 +#define SERIAL_7O1 0x800001b +#define SERIAL_8O1 0x800001f +#define SERIAL_5O2 0x8000033 +#define SERIAL_6O2 0x8000037 +#define SERIAL_7O2 0x800003b +#define SERIAL_8O2 0x800003f + +typedef struct { + uart_dev_t * dev; + xQueueHandle queue; + uint32_t baud_rate; + uint8_t num; + int8_t rxPin; + int8_t txPin; + bool rxEnabled; + bool txEnabled; + bool inverted; +} uart_t; + +uart_t* uartBegin(uint8_t uart_nr, uint32_t baudrate, uint32_t config, int8_t rxPin, int8_t txPin, uint16_t queueLen, bool inverted); +void uartEnd(uart_t* uart); + +uint32_t uartAvailable(uart_t* uart); +uint8_t uartRead(uart_t* uart); +uint8_t uartPeek(uart_t* uart); +void uartWrite(uart_t* uart, uint8_t c); +void uartWriteBuf(uart_t* uart, const uint8_t * data, size_t len); +void uartFlush(uart_t* uart); + +void uartSetBaudRate(uart_t* uart, uint32_t baud_rate); +uint32_t uartGetBaudRate(uart_t* uart); + +void uartSetDebug(uart_t* uart); +int uartGetDebug(); + +#ifdef __cplusplus +} +#endif + +#endif /* MAIN_ESP32_HAL_UART_H_ */ diff --git a/cores/esp32/esp32-hal.h b/cores/esp32/esp32-hal.h new file mode 100644 index 00000000..826fa62b --- /dev/null +++ b/cores/esp32/esp32-hal.h @@ -0,0 +1,54 @@ +/* + Arduino.h - Main include file for the Arduino SDK + Copyright (c) 2005-2013 Arduino Team. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef HAL_ESP32_HAL_H_ +#define HAL_ESP32_HAL_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include + +#define ESP_REG(addr) *((volatile uint32_t *)(addr)) +#define NOP() asm volatile ("nop") + +#include "esp32-hal-log.h" +#include "esp32-hal-matrix.h" +#include "esp32-hal-uart.h" +#include "esp32-hal-gpio.h" +#include "esp32-hal-spi.h" +#include "esp32-hal-i2c.h" +#include "esp_system.h" + +uint32_t micros(); +uint32_t millis(); +void delay(uint32_t); +void delayMicroseconds(uint32_t us); + +#ifdef __cplusplus +} +#endif + +#endif /* HAL_ESP32_HAL_H_ */ diff --git a/cores/esp32/libb64/AUTHORS b/cores/esp32/libb64/AUTHORS new file mode 100755 index 00000000..af687375 --- /dev/null +++ b/cores/esp32/libb64/AUTHORS @@ -0,0 +1,7 @@ +libb64: Base64 Encoding/Decoding Routines +====================================== + +Authors: +------- + +Chris Venter chris.venter@gmail.com http://rocketpod.blogspot.com diff --git a/cores/esp32/libb64/LICENSE b/cores/esp32/libb64/LICENSE new file mode 100755 index 00000000..a6b56069 --- /dev/null +++ b/cores/esp32/libb64/LICENSE @@ -0,0 +1,29 @@ +Copyright-Only Dedication (based on United States law) +or Public Domain Certification + +The person or persons who have associated work with this document (the +"Dedicator" or "Certifier") hereby either (a) certifies that, to the best of +his knowledge, the work of authorship identified is in the public domain of the +country from which the work is published, or (b) hereby dedicates whatever +copyright the dedicators holds in the work of authorship identified below (the +"Work") to the public domain. A certifier, moreover, dedicates any copyright +interest he may have in the associated work, and for these purposes, is +described as a "dedicator" below. + +A certifier has taken reasonable steps to verify the copyright status of this +work. Certifier recognizes that his good faith efforts may not shield him from +liability if in fact the work certified is not in the public domain. + +Dedicator makes this dedication for the benefit of the public at large and to +the detriment of the Dedicator's heirs and successors. Dedicator intends this +dedication to be an overt act of relinquishment in perpetuity of all present +and future rights under copyright law, whether vested or contingent, in the +Work. Dedicator understands that such relinquishment of all rights includes +the relinquishment of all rights to enforce (by lawsuit or otherwise) those +copyrights in the Work. + +Dedicator recognizes that, once placed in the public domain, the Work may be +freely reproduced, distributed, transmitted, used, modified, built upon, or +otherwise exploited by anyone for any purpose, commercial or non-commercial, +and in any way, including by methods that have not yet been invented or +conceived. \ No newline at end of file diff --git a/cores/esp32/libb64/cdecode.c b/cores/esp32/libb64/cdecode.c new file mode 100755 index 00000000..2963d5f7 --- /dev/null +++ b/cores/esp32/libb64/cdecode.c @@ -0,0 +1,94 @@ +/* +cdecoder.c - c source to a base64 decoding algorithm implementation + +This is part of the libb64 project, and has been placed in the public domain. +For details, see http://sourceforge.net/projects/libb64 +*/ + +#include "cdecode.h" + +int base64_decode_value(char value_in) +{ + static const char decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51}; + static const char decoding_size = sizeof(decoding); + value_in -= 43; + if (value_in < 0 || value_in > decoding_size) { + return -1; + } + return decoding[(int)value_in]; +} + +void base64_init_decodestate(base64_decodestate* state_in) +{ + state_in->step = step_a; + state_in->plainchar = 0; +} + +int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in) +{ + const char* codechar = code_in; + char* plainchar = plaintext_out; + char fragment; + + *plainchar = state_in->plainchar; + + switch (state_in->step) { + while (1) { + case step_a: + do { + if (codechar == code_in+length_in) { + state_in->step = step_a; + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } + fragment = (char)base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar = (fragment & 0x03f) << 2; + case step_b: + do { + if (codechar == code_in+length_in) { + state_in->step = step_b; + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } + fragment = (char)base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (fragment & 0x030) >> 4; + *plainchar = (fragment & 0x00f) << 4; + case step_c: + do { + if (codechar == code_in+length_in) { + state_in->step = step_c; + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } + fragment = (char)base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (fragment & 0x03c) >> 2; + *plainchar = (fragment & 0x003) << 6; + case step_d: + do { + if (codechar == code_in+length_in) { + state_in->step = step_d; + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } + fragment = (char)base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (fragment & 0x03f); + } + } + /* control should not reach here */ + return plainchar - plaintext_out; +} + +int base64_decode_chars(const char* code_in, const int length_in, char* plaintext_out) +{ + base64_decodestate _state; + base64_init_decodestate(&_state); + int len = base64_decode_block(code_in, length_in, plaintext_out, &_state); + if(len > 0) { + plaintext_out[len] = 0; + } + return len; +} diff --git a/cores/esp32/libb64/cdecode.h b/cores/esp32/libb64/cdecode.h new file mode 100755 index 00000000..44f114f6 --- /dev/null +++ b/cores/esp32/libb64/cdecode.h @@ -0,0 +1,38 @@ +/* +cdecode.h - c header for a base64 decoding algorithm + +This is part of the libb64 project, and has been placed in the public domain. +For details, see http://sourceforge.net/projects/libb64 +*/ + +#ifndef BASE64_CDECODE_H +#define BASE64_CDECODE_H + +#define base64_decode_expected_len(n) ((n * 3) / 4) + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + step_a, step_b, step_c, step_d +} base64_decodestep; + +typedef struct { + base64_decodestep step; + char plainchar; +} base64_decodestate; + +void base64_init_decodestate(base64_decodestate* state_in); + +int base64_decode_value(char value_in); + +int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in); + +int base64_decode_chars(const char* code_in, const int length_in, char* plaintext_out); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* BASE64_CDECODE_H */ diff --git a/cores/esp32/libb64/cencode.c b/cores/esp32/libb64/cencode.c new file mode 100755 index 00000000..ee9a18f0 --- /dev/null +++ b/cores/esp32/libb64/cencode.c @@ -0,0 +1,111 @@ +/* +cencoder.c - c source to a base64 encoding algorithm implementation + +This is part of the libb64 project, and has been placed in the public domain. +For details, see http://sourceforge.net/projects/libb64 +*/ + +#include "cencode.h" + +const int CHARS_PER_LINE = 72; + +void base64_init_encodestate(base64_encodestate* state_in) +{ + state_in->step = step_A; + state_in->result = 0; + state_in->stepcount = 0; +} + +char base64_encode_value(char value_in) +{ + static const char* encoding = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + if (value_in > 63) { + return '='; + } + return encoding[(int)value_in]; +} + +int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in) +{ + const char* plainchar = plaintext_in; + const char* const plaintextend = plaintext_in + length_in; + char* codechar = code_out; + char result; + char fragment; + + result = state_in->result; + + switch (state_in->step) { + while (1) { + case step_A: + if (plainchar == plaintextend) { + state_in->result = result; + state_in->step = step_A; + return codechar - code_out; + } + fragment = *plainchar++; + result = (fragment & 0x0fc) >> 2; + *codechar++ = base64_encode_value(result); + result = (fragment & 0x003) << 4; + case step_B: + if (plainchar == plaintextend) { + state_in->result = result; + state_in->step = step_B; + return codechar - code_out; + } + fragment = *plainchar++; + result |= (fragment & 0x0f0) >> 4; + *codechar++ = base64_encode_value(result); + result = (fragment & 0x00f) << 2; + case step_C: + if (plainchar == plaintextend) { + state_in->result = result; + state_in->step = step_C; + return codechar - code_out; + } + fragment = *plainchar++; + result |= (fragment & 0x0c0) >> 6; + *codechar++ = base64_encode_value(result); + result = (fragment & 0x03f) >> 0; + *codechar++ = base64_encode_value(result); + + ++(state_in->stepcount); + if (state_in->stepcount == CHARS_PER_LINE/4) { + *codechar++ = '\n'; + state_in->stepcount = 0; + } + } + } + /* control should not reach here */ + return codechar - code_out; +} + +int base64_encode_blockend(char* code_out, base64_encodestate* state_in) +{ + char* codechar = code_out; + + switch (state_in->step) { + case step_B: + *codechar++ = base64_encode_value(state_in->result); + *codechar++ = '='; + *codechar++ = '='; + break; + case step_C: + *codechar++ = base64_encode_value(state_in->result); + *codechar++ = '='; + break; + case step_A: + break; + } + *codechar = 0x00; + + return codechar - code_out; +} + +int base64_encode_chars(const char* plaintext_in, int length_in, char* code_out) +{ + base64_encodestate _state; + base64_init_encodestate(&_state); + int len = base64_encode_block(plaintext_in, length_in, code_out, &_state); + return len + base64_encode_blockend((code_out + len), &_state); +} diff --git a/cores/esp32/libb64/cencode.h b/cores/esp32/libb64/cencode.h new file mode 100755 index 00000000..51bb3f3d --- /dev/null +++ b/cores/esp32/libb64/cencode.h @@ -0,0 +1,41 @@ +/* +cencode.h - c header for a base64 encoding algorithm + +This is part of the libb64 project, and has been placed in the public domain. +For details, see http://sourceforge.net/projects/libb64 +*/ + +#ifndef BASE64_CENCODE_H +#define BASE64_CENCODE_H + +#define base64_encode_expected_len(n) ((((4 * n) / 3) + 3) & ~3) + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + step_A, step_B, step_C +} base64_encodestep; + +typedef struct { + base64_encodestep step; + char result; + int stepcount; +} base64_encodestate; + +void base64_init_encodestate(base64_encodestate* state_in); + +char base64_encode_value(char value_in); + +int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in); + +int base64_encode_blockend(char* code_out, base64_encodestate* state_in); + +int base64_encode_chars(const char* plaintext_in, int length_in, char* code_out); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* BASE64_CENCODE_H */ diff --git a/cores/esp32/main.cpp b/cores/esp32/main.cpp new file mode 100644 index 00000000..48a3ef76 --- /dev/null +++ b/cores/esp32/main.cpp @@ -0,0 +1,35 @@ +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" + +void initVariant() __attribute__((weak)); +void initVariant() {} + +void init() __attribute__((weak)); +void init() {} + +void bootWiFi() __attribute__((weak)); +void bootWiFi() {} + +extern void loop(); +extern void setup(); + +void loopTask(void *pvParameters) +{ + bool setup_done = false; + for(;;) { + if(!setup_done) { + bootWiFi(); + setup(); + setup_done = true; + } + loop(); + } +} + +extern "C" void app_main() +{ + init(); + initVariant(); + xTaskCreatePinnedToCore(loopTask, "loopTask", 4096, NULL, 1, NULL, 0); +} + diff --git a/cores/esp32/pgmspace.h b/cores/esp32/pgmspace.h new file mode 100644 index 00000000..ce155391 --- /dev/null +++ b/cores/esp32/pgmspace.h @@ -0,0 +1,42 @@ +/* + Copyright (c) 2015 Hristo Gochkov. All rights reserved. + This file is part of the RaspberryPi core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#ifndef PGMSPACE_INCLUDE +#define PGMSPACE_INCLUDE + +typedef char __FlashStringHelper; +#define PROGMEM +#define PSTR(s) (s) +#define F(string_literal) (reinterpret_cast(PSTR(string_literal))) + +#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) +#define pgm_read_word(addr) (*(const unsigned short *)(addr)) +#define pgm_read_dword(addr) (*(const unsigned long *)(addr)) +#define pgm_read_float(addr) (*(const float *)(addr)) + +#define pgm_read_byte_near(addr) pgm_read_byte(addr) +#define pgm_read_word_near(addr) pgm_read_word(addr) +#define pgm_read_dword_near(addr) pgm_read_dword(addr) +#define pgm_read_float_near(addr) pgm_read_float(addr) +#define pgm_read_byte_far(addr) pgm_read_byte(addr) +#define pgm_read_word_far(addr) pgm_read_word(addr) +#define pgm_read_dword_far(addr) pgm_read_dword(addr) +#define pgm_read_float_far(addr) pgm_read_float(addr) + +#define memcpy_P(to,from,len) memcpy(to,from,len) +#endif diff --git a/cores/esp32/stdlib_noniso.h b/cores/esp32/stdlib_noniso.h new file mode 100644 index 00000000..3df2cc2a --- /dev/null +++ b/cores/esp32/stdlib_noniso.h @@ -0,0 +1,49 @@ +/* + stdlib_noniso.h - nonstandard (but usefull) conversion functions + + Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef STDLIB_NONISO_H +#define STDLIB_NONISO_H + +#ifdef __cplusplus +extern "C" { +#endif + +int atoi(const char *s); + +long atol(const char* s); + +double atof(const char* s); + +char* itoa (int val, char *s, int radix); + +char* ltoa (long val, char *s, int radix); + +char* utoa (unsigned int val, char *s, int radix); + +char* ultoa (unsigned long val, char *s, int radix); + +char* dtostrf (double val, signed char width, unsigned char prec, char *s); + +#ifdef __cplusplus +} // extern "C" +#endif + + +#endif diff --git a/cores/esp32/wiring_private.h b/cores/esp32/wiring_private.h new file mode 100644 index 00000000..f58089ed --- /dev/null +++ b/cores/esp32/wiring_private.h @@ -0,0 +1,45 @@ +/* + wiring_private.h - Internal header file. + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2005-2006 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 239 2007-01-12 17:58:39Z mellis $ + */ + +#ifndef WiringPrivate_h +#define WiringPrivate_h + +#include +#include + +#include "arducore.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*voidFuncPtr)(void); + +void initPins(); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/libraries/SPI/keywords.txt b/libraries/SPI/keywords.txt new file mode 100644 index 00000000..fa761658 --- /dev/null +++ b/libraries/SPI/keywords.txt @@ -0,0 +1,36 @@ +####################################### +# Syntax Coloring Map SPI +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +SPI KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +begin KEYWORD2 +end KEYWORD2 +transfer KEYWORD2 +setBitOrder KEYWORD2 +setDataMode KEYWORD2 +setClockDivider KEYWORD2 + + +####################################### +# Constants (LITERAL1) +####################################### +SPI_CLOCK_DIV4 LITERAL1 +SPI_CLOCK_DIV16 LITERAL1 +SPI_CLOCK_DIV64 LITERAL1 +SPI_CLOCK_DIV128 LITERAL1 +SPI_CLOCK_DIV2 LITERAL1 +SPI_CLOCK_DIV8 LITERAL1 +SPI_CLOCK_DIV32 LITERAL1 +SPI_CLOCK_DIV64 LITERAL1 +SPI_MODE0 LITERAL1 +SPI_MODE1 LITERAL1 +SPI_MODE2 LITERAL1 +SPI_MODE3 LITERAL1 \ No newline at end of file diff --git a/libraries/SPI/library.properties b/libraries/SPI/library.properties new file mode 100644 index 00000000..9e8f805d --- /dev/null +++ b/libraries/SPI/library.properties @@ -0,0 +1,9 @@ +name=SPI +version=1.0 +author=Hristo Gochkov +maintainer=Hristo Gochkov +sentence=Enables the communication with devices that use the Serial Peripheral Interface (SPI) Bus. For all Arduino boards, BUT Arduino DUE. +paragraph= +category=Signal Input/Output +url=http://arduino.cc/en/Reference/SPI +architectures=esp32 diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp new file mode 100644 index 00000000..4dee46fb --- /dev/null +++ b/libraries/SPI/src/SPI.cpp @@ -0,0 +1,232 @@ +/* + SPI.cpp - SPI library for esp8266 + + Copyright (c) 2015 Hristo Gochkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "SPI.h" + +SPIClass::SPIClass(uint8_t spi_bus) + :_spi_num(spi_bus) + ,_spi(NULL) + ,_use_hw_ss(false) + ,_sck(-1) + ,_miso(-1) + ,_mosi(-1) + ,_ss(-1) + ,_div(0) + ,_freq(1000000) +{} + +void SPIClass::begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss) +{ + if(_spi) { + return; + } + + if(!_div) { + _div = spiFrequencyToClockDiv(_freq); + } + + _spi = spiStartBus(_spi_num, _div, SPI_MODE0, SPI_MSBFIRST); + if(!_spi) { + return; + } + + _sck = sck; + _miso = miso; + _mosi = mosi; + _ss = ss; + + spiAttachSCK(_spi, _sck); + spiAttachMISO(_spi, _miso); + spiAttachMOSI(_spi, _mosi); + +} + +void SPIClass::end() +{ + if(!_spi) { + return; + } + spiDetachSCK(_spi, _sck); + spiDetachMISO(_spi, _miso); + spiDetachMOSI(_spi, _mosi); + setHwCs(false); + spiStopBus(_spi); + _spi = NULL; +} + +void SPIClass::setHwCs(bool use) +{ + if(use && !_use_hw_ss) { + spiAttachSS(_spi, 0, _ss); + spiSSEnable(_spi); + } else if(_use_hw_ss) { + spiSSDisable(_spi); + spiDetachSS(_spi, _ss); + } + _use_hw_ss = use; +} + +void SPIClass::beginTransaction(SPISettings settings) +{ + spiWaitReady(_spi); + setFrequency(settings._clock); + setBitOrder(settings._bitOrder); + setDataMode(settings._dataMode); +} + +void SPIClass::endTransaction() {} + +void SPIClass::setFrequency(uint32_t freq) +{ + //check if last freq changed + uint32_t cdiv = spiGetClockDiv(_spi); + if(_freq != freq || _div != cdiv) { + _freq = freq; + _div = spiFrequencyToClockDiv(_freq); + spiSetClockDiv(_spi, _div); + } +} + +void SPIClass::setClockDivider(uint32_t clockDiv) +{ + _div = clockDiv; + spiSetClockDiv(_spi, _div); +} + +void SPIClass::setDataMode(uint8_t dataMode) +{ + spiSetDataMode(_spi, dataMode); +} + +void SPIClass::setBitOrder(uint8_t bitOrder) +{ + spiSetBitOrder(_spi, bitOrder); +} + +void SPIClass::write(uint8_t data) +{ + spiWriteByte(_spi, data); +} + +uint8_t SPIClass::transfer(uint8_t data) +{ + spiWriteByte(_spi, data); + return spiReadByte(_spi); +} + +void SPIClass::write16(uint16_t data) +{ + spiWriteWord(_spi, data); +} + +uint16_t SPIClass::transfer16(uint16_t data) +{ + spiWriteWord(_spi, data); + return spiReadWord(_spi); +} + +void SPIClass::write32(uint32_t data) +{ + spiWriteLong(_spi, data); +} + +uint32_t SPIClass::transfer32(uint32_t data) +{ + spiWriteLong(_spi, data); + return spiReadLong(_spi); +} + +void SPIClass::transferBits(uint32_t data, uint32_t * out, uint8_t bits) +{ + spiTransferBits(_spi, data, out, bits); +} + +/** + * Note: + * data need to be aligned to 32Bit + * or you get an Fatal exception (9) + * @param data uint8_t * + * @param size uint32_t + */ +void SPIClass::writeBytes(uint8_t * data, uint32_t size) +{ + spiTransferBytes(_spi, data, 0, size); +} + +/** + * @param data uint8_t * data buffer. can be NULL for Read Only operation + * @param out uint8_t * output buffer. can be NULL for Write Only operation + * @param size uint32_t + */ +void SPIClass::transferBytes(uint8_t * data, uint8_t * out, uint32_t size) +{ + spiTransferBytes(_spi, data, out, size); +} + +/** + * Note: + * data need to be aligned to 32Bit + * or you get an Fatal exception (9) + * @param data uint8_t * + * @param size uint8_t max for size is 64Byte + * @param repeat uint32_t + */ +void SPIClass::writePattern(uint8_t * data, uint8_t size, uint32_t repeat) +{ + if(size > 64) { + return; //max Hardware FIFO + } + + uint32_t byte = (size * repeat); + uint8_t r = (64 / size); + + while(byte) { + if(byte > 64) { + writePattern_(data, size, r); + byte -= 64; + } else { + writePattern_(data, size, (byte / size)); + byte = 0; + } + } +} + +void SPIClass::writePattern_(uint8_t * data, uint8_t size, uint8_t repeat) +{ + uint8_t bytes = (size * repeat); + uint8_t buffer[64]; + uint8_t * bufferPtr = &buffer[0]; + uint8_t * dataPtr; + uint8_t dataSize = bytes; + for(uint8_t i = 0; i < repeat; i++) { + dataSize = size; + dataPtr = data; + while(dataSize--) { + *bufferPtr = *dataPtr; + dataPtr++; + bufferPtr++; + } + } + + writeBytes(&buffer[0], bytes); +} + +SPIClass SPI(VSPI); diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h new file mode 100644 index 00000000..fbb56935 --- /dev/null +++ b/libraries/SPI/src/SPI.h @@ -0,0 +1,81 @@ +/* + SPI.h - SPI library for esp8266 + + Copyright (c) 2015 Hristo Gochkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#ifndef _SPI_H_INCLUDED +#define _SPI_H_INCLUDED + +#include +#include "esp32-hal-spi.h" + +class SPISettings +{ +public: + SPISettings() :_clock(1000000), _bitOrder(SPI_MSBFIRST), _dataMode(SPI_MODE0) {} + SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode) :_clock(clock), _bitOrder(bitOrder), _dataMode(dataMode) {} + uint32_t _clock; + uint8_t _bitOrder; + uint8_t _dataMode; +}; + +class SPIClass +{ +public: + SPIClass(uint8_t spi_bus=HSPI); + void begin(int8_t sck=-1, int8_t miso=-1, int8_t mosi=-1, int8_t ss=-1); + void end(); + + void setHwCs(bool use); + void setBitOrder(uint8_t bitOrder); + void setDataMode(uint8_t dataMode); + void setFrequency(uint32_t freq); + void setClockDivider(uint32_t clockDiv); + + void beginTransaction(SPISettings settings); + void endTransaction(void); + + uint8_t transfer(uint8_t data); + uint16_t transfer16(uint16_t data); + uint32_t transfer32(uint32_t data); + void transferBytes(uint8_t * data, uint8_t * out, uint32_t size); + void transferBits(uint32_t data, uint32_t * out, uint8_t bits); + + void write(uint8_t data); + void write16(uint16_t data); + void write16(uint16_t data, bool msb); + void write32(uint32_t data); + void write32(uint32_t data, bool msb); + void writeBytes(uint8_t * data, uint32_t size); + void writePattern(uint8_t * data, uint8_t size, uint32_t repeat); +private: + int8_t _spi_num; + spi_t * _spi; + bool _use_hw_ss; + int8_t _sck; + int8_t _miso; + int8_t _mosi; + int8_t _ss; + uint32_t _div; + uint32_t _freq; + void writePattern_(uint8_t * data, uint8_t size, uint8_t repeat); +}; + +extern SPIClass SPI; + +#endif diff --git a/libraries/WiFi/examples/HTTPSRequest/HTTPSRequest.ino b/libraries/WiFi/examples/HTTPSRequest/HTTPSRequest.ino new file mode 100644 index 00000000..56294d08 --- /dev/null +++ b/libraries/WiFi/examples/HTTPSRequest/HTTPSRequest.ino @@ -0,0 +1,90 @@ +/* + * HTTP over TLS (HTTPS) example sketch + * + * This example demonstrates how to use + * WiFiClientSecure class to access HTTPS API. + * We fetch and display the status of + * esp8266/Arduino project continuous integration + * build. + * + * Created by Ivan Grokhotkov, 2015. + * This example is in public domain. + */ + +#include +#include + +const char* ssid = "........"; +const char* password = "........"; + +const char* host = "api.github.com"; +const int httpsPort = 443; + +// Use web browser to view and copy +// SHA1 fingerprint of the certificate +const char* fingerprint = "CF 05 98 89 CA FF 8E D8 5E 5C E0 C2 E4 F7 E6 C3 C7 50 DD 5C"; + +void setup() +{ + Serial.begin(115200); + Serial.println(); + Serial.print("connecting to "); + Serial.println(ssid); + WiFi.begin(ssid, password); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(""); + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + + // Use WiFiClientSecure class to create TLS connection + WiFiClientSecure client; + Serial.print("connecting to "); + Serial.println(host); + if (!client.connect(host, httpsPort)) { + Serial.println("connection failed"); + return; + } + + if (client.verify(fingerprint, host)) { + Serial.println("certificate matches"); + } else { + Serial.println("certificate doesn't match"); + } + + String url = "/repos/esp8266/Arduino/commits/master/status"; + Serial.print("requesting URL: "); + Serial.println(url); + + client.print(String("GET ") + url + " HTTP/1.1\r\n" + + "Host: " + host + "\r\n" + + "User-Agent: BuildFailureDetectorESP8266\r\n" + + "Connection: close\r\n\r\n"); + + Serial.println("request sent"); + while (client.connected()) { + String line = client.readStringUntil('\n'); + if (line == "\r") { + Serial.println("headers received"); + break; + } + } + String line = client.readStringUntil('\n'); + if (line.startsWith("{\"state\":\"success\"")) { + Serial.println("esp8266/Arduino CI successfull!"); + } else { + Serial.println("esp8266/Arduino CI has failed"); + } + Serial.println("reply was:"); + Serial.println("=========="); + Serial.println(line); + Serial.println("=========="); + Serial.println("closing connection"); +} + +void loop() +{ +} diff --git a/libraries/WiFi/examples/NTPClient/NTPClient.ino b/libraries/WiFi/examples/NTPClient/NTPClient.ino new file mode 100644 index 00000000..004d4566 --- /dev/null +++ b/libraries/WiFi/examples/NTPClient/NTPClient.ino @@ -0,0 +1,152 @@ +/* + + Udp NTP Client + + Get the time from a Network Time Protocol (NTP) time server + Demonstrates use of UDP sendPacket and ReceivePacket + For more on NTP time servers and the messages needed to communicate with them, + see http://en.wikipedia.org/wiki/Network_Time_Protocol + + created 4 Sep 2010 + by Michael Margolis + modified 9 Apr 2012 + by Tom Igoe + updated for the ESP8266 12 Apr 2015 + by Ivan Grokhotkov + + This code is in the public domain. + + */ + +#include +#include + +char ssid[] = "*************"; // your network SSID (name) +char pass[] = "********"; // your network password + + +unsigned int localPort = 2390; // local port to listen for UDP packets + +/* Don't hardwire the IP address or we won't get the benefits of the pool. + * Lookup the IP address for the host name instead */ +//IPAddress timeServer(129, 6, 15, 28); // time.nist.gov NTP server +IPAddress timeServerIP; // time.nist.gov NTP server address +const char* ntpServerName = "time.nist.gov"; + +const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message + +byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets + +// A UDP instance to let us send and receive packets over UDP +WiFiUDP udp; + +void setup() +{ + Serial.begin(115200); + Serial.println(); + Serial.println(); + + // We start by connecting to a WiFi network + Serial.print("Connecting to "); + Serial.println(ssid); + WiFi.begin(ssid, pass); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(""); + + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + + Serial.println("Starting UDP"); + udp.begin(localPort); + Serial.print("Local port: "); + Serial.println(udp.localPort()); +} + +void loop() +{ + //get a random server from the pool + WiFi.hostByName(ntpServerName, timeServerIP); + + sendNTPpacket(timeServerIP); // send an NTP packet to a time server + // wait to see if a reply is available + delay(1000); + + int cb = udp.parsePacket(); + if (!cb) { + Serial.println("no packet yet"); + } else { + Serial.print("packet received, length="); + Serial.println(cb); + // We've received a packet, read the data from it + udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer + + //the timestamp starts at byte 40 of the received packet and is four bytes, + // or two words, long. First, esxtract the two words: + + unsigned long highWord = word(packetBuffer[40], packetBuffer[41]); + unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]); + // combine the four bytes (two words) into a long integer + // this is NTP time (seconds since Jan 1 1900): + unsigned long secsSince1900 = highWord << 16 | lowWord; + Serial.print("Seconds since Jan 1 1900 = " ); + Serial.println(secsSince1900); + + // now convert NTP time into everyday time: + Serial.print("Unix time = "); + // Unix time starts on Jan 1 1970. In seconds, that's 2208988800: + const unsigned long seventyYears = 2208988800UL; + // subtract seventy years: + unsigned long epoch = secsSince1900 - seventyYears; + // print Unix time: + Serial.println(epoch); + + + // print the hour, minute and second: + Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT) + Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day) + Serial.print(':'); + if ( ((epoch % 3600) / 60) < 10 ) { + // In the first 10 minutes of each hour, we'll want a leading '0' + Serial.print('0'); + } + Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute) + Serial.print(':'); + if ( (epoch % 60) < 10 ) { + // In the first 10 seconds of each minute, we'll want a leading '0' + Serial.print('0'); + } + Serial.println(epoch % 60); // print the second + } + // wait ten seconds before asking for the time again + delay(10000); +} + +// send an NTP request to the time server at the given address +unsigned long sendNTPpacket(IPAddress& address) +{ + Serial.println("sending NTP packet..."); + // set all bytes in the buffer to 0 + memset(packetBuffer, 0, NTP_PACKET_SIZE); + // Initialize values needed to form NTP request + // (see URL above for details on the packets) + packetBuffer[0] = 0b11100011; // LI, Version, Mode + packetBuffer[1] = 0; // Stratum, or type of clock + packetBuffer[2] = 6; // Polling Interval + packetBuffer[3] = 0xEC; // Peer Clock Precision + // 8 bytes of zero for Root Delay & Root Dispersion + packetBuffer[12] = 49; + packetBuffer[13] = 0x4E; + packetBuffer[14] = 49; + packetBuffer[15] = 52; + + // all NTP fields have been given values, now + // you can send a packet requesting a timestamp: + udp.beginPacket(address, 123); //NTP requests are to port 123 + udp.write(packetBuffer, NTP_PACKET_SIZE); + udp.endPacket(); +} diff --git a/libraries/WiFi/examples/WiFiAccessPoint/WiFiAccessPoint.ino b/libraries/WiFi/examples/WiFiAccessPoint/WiFiAccessPoint.ino new file mode 100644 index 00000000..9fa6c91f --- /dev/null +++ b/libraries/WiFi/examples/WiFiAccessPoint/WiFiAccessPoint.ino @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2015, Majenko Technologies + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * 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. + * + * * Neither the name of Majenko Technologies 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. + */ + +/* Create a WiFi access point and provide a web server on it. */ + +#include +#include +#include + +/* Set these to your desired credentials. */ +const char *ssid = "ESPap"; +const char *password = "thereisnospoon"; + +ESP8266WebServer server(80); + +/* Just a little test message. Go to http://192.168.4.1 in a web browser + * connected to this access point to see it. + */ +void handleRoot() +{ + server.send(200, "text/html", "

You are connected

"); +} + +void setup() +{ + delay(1000); + Serial.begin(115200); + Serial.println(); + Serial.print("Configuring access point..."); + /* You can remove the password parameter if you want the AP to be open. */ + WiFi.softAP(ssid, password); + + IPAddress myIP = WiFi.softAPIP(); + Serial.print("AP IP address: "); + Serial.println(myIP); + server.on("/", handleRoot); + server.begin(); + Serial.println("HTTP server started"); +} + +void loop() +{ + server.handleClient(); +} diff --git a/libraries/WiFi/examples/WiFiClient/WiFiClient.ino b/libraries/WiFi/examples/WiFiClient/WiFiClient.ino new file mode 100644 index 00000000..7dd9c8d0 --- /dev/null +++ b/libraries/WiFi/examples/WiFiClient/WiFiClient.ino @@ -0,0 +1,94 @@ +/* + * This sketch sends data via HTTP GET requests to data.sparkfun.com service. + * + * You need to get streamId and privateKey at data.sparkfun.com and paste them + * below. Or just customize this script to talk to other HTTP servers. + * + */ + +#include + +const char* ssid = "your-ssid"; +const char* password = "your-password"; + +const char* host = "data.sparkfun.com"; +const char* streamId = "...................."; +const char* privateKey = "...................."; + +void setup() +{ + Serial.begin(115200); + delay(10); + + // We start by connecting to a WiFi network + + Serial.println(); + Serial.println(); + Serial.print("Connecting to "); + Serial.println(ssid); + + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + + Serial.println(""); + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); +} + +int value = 0; + +void loop() +{ + delay(5000); + ++value; + + Serial.print("connecting to "); + Serial.println(host); + + // Use WiFiClient class to create TCP connections + WiFiClient client; + const int httpPort = 80; + if (!client.connect(host, httpPort)) { + Serial.println("connection failed"); + return; + } + + // We now create a URI for the request + String url = "/input/"; + url += streamId; + url += "?private_key="; + url += privateKey; + url += "&value="; + url += value; + + Serial.print("Requesting URL: "); + Serial.println(url); + + // This will send the request to the server + client.print(String("GET ") + url + " HTTP/1.1\r\n" + + "Host: " + host + "\r\n" + + "Connection: close\r\n\r\n"); + unsigned long timeout = millis(); + while (client.available() == 0) { + if (millis() - timeout > 5000) { + Serial.println(">>> Client Timeout !"); + client.stop(); + return; + } + } + + // Read all the lines of the reply from server and print them to Serial + while(client.available()) { + String line = client.readStringUntil('\r'); + Serial.print(line); + } + + Serial.println(); + Serial.println("closing connection"); +} + diff --git a/libraries/WiFi/examples/WiFiClientBasic/WiFiClientBasic.ino b/libraries/WiFi/examples/WiFiClientBasic/WiFiClientBasic.ino new file mode 100644 index 00000000..27901521 --- /dev/null +++ b/libraries/WiFi/examples/WiFiClientBasic/WiFiClientBasic.ino @@ -0,0 +1,70 @@ +/* + * This sketch sends a message to a TCP server + * + */ + +#include +#include + +WiFiMulti WiFiMulti; + +void setup() +{ + Serial.begin(115200); + delay(10); + + // We start by connecting to a WiFi network + WiFiMulti.addAP("SSID", "passpasspass"); + + Serial.println(); + Serial.println(); + Serial.print("Wait for WiFi... "); + + while(WiFiMulti.run() != WL_CONNECTED) { + Serial.print("."); + delay(500); + } + + Serial.println(""); + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + + delay(500); +} + + +void loop() +{ + const uint16_t port = 80; + const char * host = "192.168.1.1"; // ip or dns + + + + Serial.print("connecting to "); + Serial.println(host); + + // Use WiFiClient class to create TCP connections + WiFiClient client; + + if (!client.connect(host, port)) { + Serial.println("connection failed"); + Serial.println("wait 5 sec..."); + delay(5000); + return; + } + + // This will send the request to the server + client.print("Send this data to server"); + + //read back one line from server + String line = client.readStringUntil('\r'); + client.println(line); + + Serial.println("closing connection"); + client.stop(); + + Serial.println("wait 5 sec..."); + delay(5000); +} + diff --git a/libraries/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino b/libraries/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino new file mode 100644 index 00000000..b6842cd4 --- /dev/null +++ b/libraries/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino @@ -0,0 +1,51 @@ +/* + * This sketch shows the WiFi event usage + * + */ + +#include + +const char* ssid = "your-ssid"; +const char* password = "your-password"; + + +void WiFiEvent(WiFiEvent_t event) +{ + Serial.printf("[WiFi-event] event: %d\n", event); + + switch(event) { + case WIFI_EVENT_STAMODE_GOT_IP: + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + break; + case WIFI_EVENT_STAMODE_DISCONNECTED: + Serial.println("WiFi lost connection"); + break; + } +} + +void setup() +{ + Serial.begin(115200); + + // delete old config + WiFi.disconnect(true); + + delay(1000); + + WiFi.onEvent(WiFiEvent); + + WiFi.begin(ssid, password); + + Serial.println(); + Serial.println(); + Serial.println("Wait for WiFi... "); +} + + +void loop() +{ + delay(1000); +} + diff --git a/libraries/WiFi/examples/WiFiMulti/WiFiMulti.ino b/libraries/WiFi/examples/WiFiMulti/WiFiMulti.ino new file mode 100644 index 00000000..2e490d06 --- /dev/null +++ b/libraries/WiFi/examples/WiFiMulti/WiFiMulti.ino @@ -0,0 +1,35 @@ +/* + * This sketch trys to Connect to the best AP based on a given list + * + */ + +#include +#include + +WiFiMulti wifiMulti; + +void setup() +{ + Serial.begin(115200); + delay(10); + + wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1"); + wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2"); + wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); + + Serial.println("Connecting Wifi..."); + if(wifiMulti.run() == WL_CONNECTED) { + Serial.println(""); + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + } +} + +void loop() +{ + if(wifiMulti.run() != WL_CONNECTED) { + Serial.println("WiFi not connected!"); + delay(1000); + } +} \ No newline at end of file diff --git a/libraries/WiFi/examples/WiFiScan/WiFiScan.ino b/libraries/WiFi/examples/WiFiScan/WiFiScan.ino new file mode 100644 index 00000000..975a1fe6 --- /dev/null +++ b/libraries/WiFi/examples/WiFiScan/WiFiScan.ino @@ -0,0 +1,48 @@ +/* + * This sketch demonstrates how to scan WiFi networks. + * The API is almost the same as with the WiFi Shield library, + * the most obvious difference being the different file you need to include: + */ +#include "WiFi.h" + +void setup() +{ + Serial.begin(115200); + + // Set WiFi to station mode and disconnect from an AP if it was previously connected + WiFi.mode(WIFI_STA); + WiFi.disconnect(); + delay(100); + + Serial.println("Setup done"); +} + +void loop() +{ + Serial.println("scan start"); + + // WiFi.scanNetworks will return the number of networks found + int n = WiFi.scanNetworks(); + Serial.println("scan done"); + if (n == 0) { + Serial.println("no networks found"); + } else { + Serial.print(n); + Serial.println(" networks found"); + for (int i = 0; i < n; ++i) { + // Print SSID and RSSI for each network found + Serial.print(i + 1); + Serial.print(": "); + Serial.print(WiFi.SSID(i)); + Serial.print(" ("); + Serial.print(WiFi.RSSI(i)); + Serial.print(")"); + Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*"); + delay(10); + } + } + Serial.println(""); + + // Wait a bit before scanning again + delay(5000); +} diff --git a/libraries/WiFi/examples/WiFiTelnetToSerial/WiFiTelnetToSerial.ino b/libraries/WiFi/examples/WiFiTelnetToSerial/WiFiTelnetToSerial.ino new file mode 100644 index 00000000..4099928e --- /dev/null +++ b/libraries/WiFi/examples/WiFiTelnetToSerial/WiFiTelnetToSerial.ino @@ -0,0 +1,103 @@ +/* + WiFiTelnetToSerial - Example Transparent UART to Telnet Server for esp8266 + + Copyright (c) 2015 Hristo Gochkov. All rights reserved. + This file is part of the WiFi library for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#include + +//how many clients should be able to telnet to this ESP8266 +#define MAX_SRV_CLIENTS 1 +const char* ssid = "**********"; +const char* password = "**********"; + +WiFiServer server(23); +WiFiClient serverClients[MAX_SRV_CLIENTS]; + +void setup() +{ + Serial1.begin(115200); + WiFi.begin(ssid, password); + Serial1.print("\nConnecting to "); + Serial1.println(ssid); + uint8_t i = 0; + while (WiFi.status() != WL_CONNECTED && i++ < 20) { + delay(500); + } + if(i == 21) { + Serial1.print("Could not connect to"); + Serial1.println(ssid); + while(1) { + delay(500); + } + } + //start UART and the server + Serial.begin(115200); + server.begin(); + server.setNoDelay(true); + + Serial1.print("Ready! Use 'telnet "); + Serial1.print(WiFi.localIP()); + Serial1.println(" 23' to connect"); +} + +void loop() +{ + uint8_t i; + //check if there are any new clients + if (server.hasClient()) { + for(i = 0; i < MAX_SRV_CLIENTS; i++) { + //find free/disconnected spot + if (!serverClients[i] || !serverClients[i].connected()) { + if(serverClients[i]) { + serverClients[i].stop(); + } + serverClients[i] = server.available(); + Serial1.print("New client: "); + Serial1.print(i); + continue; + } + } + //no free/disconnected spot so reject + WiFiClient serverClient = server.available(); + serverClient.stop(); + } + //check clients for data + for(i = 0; i < MAX_SRV_CLIENTS; i++) { + if (serverClients[i] && serverClients[i].connected()) { + if(serverClients[i].available()) { + //get data from the telnet client and push it to the UART + while(serverClients[i].available()) { + Serial.write(serverClients[i].read()); + } + } + } + } + //check UART for data + if(Serial.available()) { + size_t len = Serial.available(); + uint8_t sbuf[len]; + Serial.readBytes(sbuf, len); + //push UART data to all connected telnet clients + for(i = 0; i < MAX_SRV_CLIENTS; i++) { + if (serverClients[i] && serverClients[i].connected()) { + serverClients[i].write(sbuf, len); + delay(1); + } + } + } +} diff --git a/libraries/WiFi/examples/WiFiWebServer/WiFiWebServer.ino b/libraries/WiFi/examples/WiFiWebServer/WiFiWebServer.ino new file mode 100644 index 00000000..91e85b3d --- /dev/null +++ b/libraries/WiFi/examples/WiFiWebServer/WiFiWebServer.ino @@ -0,0 +1,100 @@ +/* + * This sketch demonstrates how to set up a simple HTTP-like server. + * The server will set a GPIO pin depending on the request + * http://server_ip/gpio/0 will set the GPIO2 low, + * http://server_ip/gpio/1 will set the GPIO2 high + * server_ip is the IP address of the ESP8266 module, will be + * printed to Serial when the module is connected. + */ + +#include + +const char* ssid = "your-ssid"; +const char* password = "your-password"; + +// Create an instance of the server +// specify the port to listen on as an argument +WiFiServer server(80); + +void setup() +{ + Serial.begin(115200); + delay(10); + + // prepare GPIO2 + pinMode(2, OUTPUT); + digitalWrite(2, 0); + + // Connect to WiFi network + Serial.println(); + Serial.println(); + Serial.print("Connecting to "); + Serial.println(ssid); + + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(""); + Serial.println("WiFi connected"); + + // Start the server + server.begin(); + Serial.println("Server started"); + + // Print the IP address + Serial.println(WiFi.localIP()); +} + +void loop() +{ + // Check if a client has connected + WiFiClient client = server.available(); + if (!client) { + return; + } + + // Wait until the client sends some data + Serial.println("new client"); + while(!client.available()) { + delay(1); + } + + // Read the first line of the request + String req = client.readStringUntil('\r'); + Serial.println(req); + client.flush(); + + // Match the request + int val; + if (req.indexOf("/gpio/0") != -1) { + val = 0; + } else if (req.indexOf("/gpio/1") != -1) { + val = 1; + } else { + Serial.println("invalid request"); + client.stop(); + return; + } + + // Set GPIO2 according to the request + digitalWrite(2, val); + + client.flush(); + + // Prepare the response + String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n\r\nGPIO is now "; + s += (val)?"high":"low"; + s += "\n"; + + // Send the response to the client + client.print(s); + delay(1); + Serial.println("Client disonnected"); + + // The client will actually be disconnected + // when the function returns and 'client' object is detroyed +} + diff --git a/libraries/WiFi/keywords.txt b/libraries/WiFi/keywords.txt new file mode 100644 index 00000000..5720aaac --- /dev/null +++ b/libraries/WiFi/keywords.txt @@ -0,0 +1,68 @@ +####################################### +# Syntax Coloring Map For WiFi +####################################### + +####################################### +# Library (KEYWORD3) +####################################### + +WiFi KEYWORD3 + +####################################### +# Datatypes (KEYWORD1) +####################################### + +WiFi KEYWORD1 +WiFiClient KEYWORD1 +WiFiServer KEYWORD1 +WiFiUDP KEYWORD1 +WiFiClientSecure KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +status KEYWORD2 +mode KEYWORD2 +connect KEYWORD2 +write KEYWORD2 +available KEYWORD2 +config KEYWORD2 +setDNS KEYWORD2 +read KEYWORD2 +flush KEYWORD2 +stop KEYWORD2 +connected KEYWORD2 +begin KEYWORD2 +beginMulticast KEYWORD2 +disconnect KEYWORD2 +macAddress KEYWORD2 +localIP KEYWORD2 +subnetMask KEYWORD2 +gatewayIP KEYWORD2 +SSID KEYWORD2 +psk KEYWORD2 +BSSID KEYWORD2 +RSSI KEYWORD2 +encryptionType KEYWORD2 +beginPacket KEYWORD2 +beginPacketMulticast KEYWORD2 +endPacket KEYWORD2 +parsePacket KEYWORD2 +destinationIP KEYWORD2 +remoteIP KEYWORD2 +remotePort KEYWORD2 +softAP KEYWORD2 +softAPIP KEYWORD2 +softAPmacAddress KEYWORD2 +softAPConfig KEYWORD2 +printDiag KEYWORD2 +hostByName KEYWORD2 +scanNetworks KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### +WIFI_AP LITERAL1 +WIFI_STA LITERAL1 +WIFI_AP_STA LITERAL1 diff --git a/libraries/WiFi/library.properties b/libraries/WiFi/library.properties new file mode 100644 index 00000000..c98691df --- /dev/null +++ b/libraries/WiFi/library.properties @@ -0,0 +1,9 @@ +name=WiFi +version=1.0 +author=Hristo Gochkov +maintainer=Hristo Gochkov +sentence=Enables network connection (local and Internet) using the ESP32 built-in WiFi. +paragraph=With this library you can instantiate Servers, Clients and send/receive UDP packets through WiFi. The shield can connect either to open or encrypted networks (WEP, WPA). The IP address can be assigned statically or through a DHCP. The library can also manage DNS. +category=Communication +url= +architectures=esp32 diff --git a/libraries/WiFi/src/WiFi.cpp b/libraries/WiFi/src/WiFi.cpp new file mode 100644 index 00000000..87dc2a2f --- /dev/null +++ b/libraries/WiFi/src/WiFi.cpp @@ -0,0 +1,96 @@ +/* + ESP8266WiFi.cpp - WiFi library for esp8266 + + Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Reworked on 28 Dec 2015 by Markus Sattler + + */ +#include "WiFi.h" + +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +} + + +// ----------------------------------------------------------------------------------------------------------------------- +// ---------------------------------------------------------- Debug ------------------------------------------------------ +// ----------------------------------------------------------------------------------------------------------------------- + + +/** + * Output WiFi settings to an object derived from Print interface (like Serial). + * @param p Print interface + */ +void WiFiClass::printDiag(Print& p) +{ + const char* modes[] = { "NULL", "STA", "AP", "STA+AP" }; + + wifi_mode_t mode; + esp_wifi_get_mode(&mode); + + uint8_t primaryChan; + wifi_second_chan_t secondChan; + esp_wifi_get_channel(&primaryChan, &secondChan); + + bool autoConnect; + esp_wifi_get_auto_connect(&autoConnect); + + p.print("Mode: "); + p.println(modes[mode]); + + p.print("Channel: "); + p.println(primaryChan); + /* + p.print("AP id: "); + p.println(wifi_station_get_current_ap_id()); + + p.print("Status: "); + p.println(wifi_station_get_connect_status()); + */ + p.print("Auto connect: "); + p.println(autoConnect); + + wifi_config_t conf; + esp_wifi_get_config(WIFI_IF_STA, &conf); + + const char* ssid = reinterpret_cast(conf.sta.ssid); + p.print("SSID ("); + p.print(strlen(ssid)); + p.print("): "); + p.println(ssid); + + const char* passphrase = reinterpret_cast(conf.sta.password); + p.print("Passphrase ("); + p.print(strlen(passphrase)); + p.print("): "); + p.println(passphrase); + + p.print("BSSID set: "); + p.println(conf.sta.bssid_set); +} + +WiFiClass WiFi; diff --git a/libraries/WiFi/src/WiFi.h b/libraries/WiFi/src/WiFi.h new file mode 100644 index 00000000..d56d2b7e --- /dev/null +++ b/libraries/WiFi/src/WiFi.h @@ -0,0 +1,62 @@ +/* + ESP8266WiFi.h - esp8266 Wifi support. + Based on WiFi.h from Arduino WiFi shield library. + Copyright (c) 2011-2014 Arduino. All right reserved. + Modified by Ivan Grokhotkov, December 2014 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef WiFi_h +#define WiFi_h + +#include + +#include "Print.h" +#include "IPAddress.h" + +#include "WiFiType.h" +#include "WiFiSTA.h" +#include "WiFiAP.h" +#include "WiFiScan.h" +#include "WiFiGeneric.h" + +#include "WiFiClient.h" + +class WiFiClass : public WiFiGenericClass, public WiFiSTAClass, public WiFiScanClass, public WiFiAPClass +{ +public: + using WiFiGenericClass::channel; + + using WiFiSTAClass::SSID; + using WiFiSTAClass::RSSI; + using WiFiSTAClass::BSSID; + using WiFiSTAClass::BSSIDstr; + + using WiFiScanClass::SSID; + using WiFiScanClass::encryptionType; + using WiFiScanClass::RSSI; + using WiFiScanClass::BSSID; + using WiFiScanClass::BSSIDstr; + using WiFiScanClass::channel; + +public: + void printDiag(Print& dest); + friend class WiFiClient; +}; + +extern WiFiClass WiFi; + +#endif diff --git a/libraries/WiFi/src/WiFiAP.cpp b/libraries/WiFi/src/WiFiAP.cpp new file mode 100644 index 00000000..d824c104 --- /dev/null +++ b/libraries/WiFi/src/WiFiAP.cpp @@ -0,0 +1,234 @@ +/* + ESP8266WiFiSTA.cpp - WiFi library for esp8266 + + Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Reworked on 28 Dec 2015 by Markus Sattler + + */ + +#include "WiFi.h" +#include "WiFiGeneric.h" +#include "WiFiAP.h" + +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +} + + + +// ----------------------------------------------------------------------------------------------------------------------- +// ---------------------------------------------------- Private functions ------------------------------------------------ +// ----------------------------------------------------------------------------------------------------------------------- + +static bool softap_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs); + + + +/** + * compare two AP configurations + * @param lhs softap_config + * @param rhs softap_config + * @return equal + */ +static bool softap_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs) +{ + if(strcmp(reinterpret_cast(lhs.ap.ssid), reinterpret_cast(rhs.ap.ssid)) != 0) { + return false; + } + if(strcmp(reinterpret_cast(lhs.ap.password), reinterpret_cast(rhs.ap.password)) != 0) { + return false; + } + if(lhs.ap.channel != rhs.ap.channel) { + return false; + } + if(lhs.ap.ssid_hidden != rhs.ap.ssid_hidden) { + return false; + } + return true; +} + +// ----------------------------------------------------------------------------------------------------------------------- +// ----------------------------------------------------- AP function ----------------------------------------------------- +// ----------------------------------------------------------------------------------------------------------------------- + + +/** + * Set up an access point + * @param ssid Pointer to the SSID (max 63 char). + * @param passphrase (for WPA2 min 8 char, for open use NULL) + * @param channel WiFi channel number, 1 - 13. + * @param ssid_hidden Network cloaking (0 = broadcast SSID, 1 = hide SSID) + */ +bool WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel, int ssid_hidden) +{ + + if(!WiFi.enableAP(true)) { + // enable AP failed + return false; + } + + if(!ssid || *ssid == 0 || strlen(ssid) > 31) { + // fail SSID too long or missing! + return false; + } + + if(passphrase && (strlen(passphrase) > 63 || strlen(passphrase) < 8)) { + // fail passphrase to long or short! + return false; + } + + esp_wifi_start(); + + wifi_config_t conf; + strcpy(reinterpret_cast(conf.ap.ssid), ssid); + conf.ap.channel = channel; + conf.ap.ssid_len = strlen(ssid); + conf.ap.ssid_hidden = ssid_hidden; + conf.ap.max_connection = 4; + conf.ap.beacon_interval = 100; + + if(!passphrase || strlen(passphrase) == 0) { + conf.ap.authmode = WIFI_AUTH_OPEN; + *conf.ap.password = 0; + } else { + conf.ap.authmode = WIFI_AUTH_WPA2_PSK; + strcpy(reinterpret_cast(conf.ap.password), passphrase); + } + + wifi_config_t conf_current; + esp_wifi_get_config(WIFI_IF_AP, &conf_current); + if(softap_config_equal(conf, conf_current)) { + //DEBUGV("softap config unchanged"); + return true; + } + + bool ret; + + ret = esp_wifi_set_config(WIFI_IF_AP, &conf) == ESP_OK; + + return ret; +} + + +/** + * Configure access point + * @param local_ip access point IP + * @param gateway gateway IP + * @param subnet subnet mask + */ +bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet) +{ + + if(!WiFi.enableAP(true)) { + // enable AP failed + return false; + } + + tcpip_adapter_ip_info_t info; + info.ip.addr = static_cast(local_ip); + info.gw.addr = static_cast(gateway); + info.netmask.addr = static_cast(subnet); + tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP); + if(tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_AP, &info)) { + return tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP); + } + return false; +} + + + +/** + * Disconnect from the network (close AP) + * @param wifioff disable mode? + * @return one value of wl_status_t enum + */ +bool WiFiAPClass::softAPdisconnect(bool wifioff) +{ + bool ret; + wifi_config_t conf; + *conf.ap.ssid = 0; + *conf.ap.password = 0; + ret = esp_wifi_set_config(WIFI_IF_AP, &conf) == ESP_OK; + + if(wifioff) { + ret = WiFi.enableAP(false) == ESP_OK; + } + + return ret; +} + + +/** + * Get the count of the Station / client that are connected to the softAP interface + * @return Stations count + */ +uint8_t WiFiAPClass::softAPgetStationNum() +{ + uint16_t number; + if(esp_wifi_get_ap_num(&number) == ESP_OK) { + return number; + } + return 0; +} + +/** + * Get the softAP interface IP address. + * @return IPAddress softAP IP + */ +IPAddress WiFiAPClass::softAPIP() +{ + tcpip_adapter_ip_info_t ip; + tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip); + return IPAddress(ip.ip.addr); +} + + +/** + * Get the softAP interface MAC address. + * @param mac pointer to uint8_t array with length WL_MAC_ADDR_LENGTH + * @return pointer to uint8_t* + */ +uint8_t* WiFiAPClass::softAPmacAddress(uint8_t* mac) +{ + esp_wifi_get_mac(WIFI_IF_AP, mac); + return mac; +} + +/** + * Get the softAP interface MAC address. + * @return String mac + */ +String WiFiAPClass::softAPmacAddress(void) +{ + uint8_t mac[6]; + char macStr[18] = { 0 }; + esp_wifi_get_mac(WIFI_IF_AP, mac); + + sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + return String(macStr); +} diff --git a/libraries/WiFi/src/WiFiAP.h b/libraries/WiFi/src/WiFiAP.h new file mode 100644 index 00000000..c7124a0b --- /dev/null +++ b/libraries/WiFi/src/WiFiAP.h @@ -0,0 +1,55 @@ +/* + ESP8266WiFiAP.h - esp8266 Wifi support. + Based on WiFi.h from Arduino WiFi shield library. + Copyright (c) 2011-2014 Arduino. All right reserved. + Modified by Ivan Grokhotkov, December 2014 + Reworked by Markus Sattler, December 2015 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef ESP32WIFIAP_H_ +#define ESP32WIFIAP_H_ + + +#include "WiFiType.h" +#include "WiFiGeneric.h" + + +class WiFiAPClass +{ + + // ---------------------------------------------------------------------------------------------- + // ----------------------------------------- AP function ---------------------------------------- + // ---------------------------------------------------------------------------------------------- + +public: + + bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0); + bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet); + bool softAPdisconnect(bool wifioff = false); + + uint8_t softAPgetStationNum(); + + IPAddress softAPIP(); + + uint8_t* softAPmacAddress(uint8_t* mac); + String softAPmacAddress(void); + +protected: + +}; + +#endif /* ESP32WIFIAP_H_*/ diff --git a/libraries/WiFi/src/WiFiClient.cpp b/libraries/WiFi/src/WiFiClient.cpp new file mode 100644 index 00000000..e59a3ddc --- /dev/null +++ b/libraries/WiFi/src/WiFiClient.cpp @@ -0,0 +1,250 @@ +/* + Client.h - Client class for Raspberry Pi + Copyright (c) 2016 Hristo Gochkov All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "WiFiClient.h" +#include +#include +#include + +#undef connect +#undef write +#undef read + +WiFiClient::WiFiClient():sockfd(-1),_connected(false),next(NULL) +{ + //ets_printf("WiFiClient(%d)\n", sockfd); +} + +WiFiClient::WiFiClient(int fd):sockfd(fd),_connected(true),next(NULL) +{ + ets_printf("WiFiClient(%d)\n", sockfd); +} + +WiFiClient::~WiFiClient() +{ + if(sockfd >= 0) { + ets_printf("~WiFiClient(%d)\n", sockfd); + } + //stop(); +} + +WiFiClient & WiFiClient::operator=(const WiFiClient &other) +{ + ets_printf("WiFiClient(%d) = (%d)\n", sockfd, other.sockfd); + stop(); + sockfd = other.sockfd; + _connected = other._connected; + return *this; +} + +void WiFiClient::stop() +{ + if(_connected && sockfd >= 0) { + close(sockfd); + sockfd = -1; + _connected = false; + } +} + +int WiFiClient::connect(IPAddress ip, uint16_t port) +{ + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd < 0) { + log_e("error: %d", errno); + return 0; + } + uint32_t ip_addr = ip; + struct sockaddr_in serveraddr; + bzero((char *) &serveraddr, sizeof(serveraddr)); + serveraddr.sin_family = AF_INET; + bcopy((const void *)(&ip_addr), (void *)&serveraddr.sin_addr.s_addr, 4); + serveraddr.sin_port = htons(port); + int res = lwip_connect_r(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr)); + if (res < 0) { + log_e("error: %d", errno); + close(sockfd); + sockfd = -1; + return 0; + } + _connected = true; + return 1; +} + +int WiFiClient::connect(const char *host, uint16_t port) +{ + struct hostent *server; + server = gethostbyname(host); + if (server == NULL) { + return 0; + } + IPAddress srv((const uint8_t *)(server->h_addr)); + return connect(srv, port); +} + +int WiFiClient::setSocketOption(int option, char* value, size_t len) +{ + int res = setsockopt(sockfd, SOL_SOCKET, option, value, len); + if(res < 0) { + log_e("error: %d", errno); + } + return res; +} + +int WiFiClient::setTimeout(uint32_t seconds) +{ + struct timeval tv; + tv.tv_sec = seconds; + tv.tv_usec = 0; + if(setSocketOption(SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval)) < 0) { + return -1; + } + return setSocketOption(SO_SNDTIMEO, (char *)&tv, sizeof(struct timeval)); +} + +int WiFiClient::setOption(int option, int *value) +{ + int res = setsockopt(sockfd, IPPROTO_TCP, option, (char *)value, sizeof(int)); + if(res < 0) { + log_e("error: %d", errno); + } + return res; +} + +int WiFiClient::getOption(int option, int *value) +{ + size_t size = sizeof(int); + int res = getsockopt(sockfd, IPPROTO_TCP, option, (char *)value, &size); + if(res < 0) { + log_e("error: %d", errno); + } + return res; +} + +int WiFiClient::setNoDelay(bool nodelay) +{ + int flag = nodelay; + return setOption(TCP_NODELAY, &flag); +} + +bool WiFiClient::getNoDelay() +{ + int flag = 0; + getOption(TCP_NODELAY, &flag); + return flag; +} + +size_t WiFiClient::write(uint8_t data) +{ + return write(&data, 1); +} + +int WiFiClient::read() +{ + uint8_t data = 0; + int res = read(&data, 1); + if(res < 0) { + return res; + } + return data; +} + +size_t WiFiClient::write(const uint8_t *buf, size_t size) +{ + if(!_connected) { + return 0; + } + int res = send(sockfd, (void*)buf, size, MSG_DONTWAIT); + if(res < 0) { + log_e("error: %d", errno); + _connected = false; + sockfd = -1; + res = 0; + } + return res; +} + +int WiFiClient::read(uint8_t *buf, size_t size) +{ + if(!available()) { + return -1; + } + int res = recv(sockfd, buf, size, MSG_DONTWAIT); + if(res < 0 && errno != EWOULDBLOCK) { + log_e("error: %d", errno); + _connected = false; + sockfd = -1; + } + return res; +} + +int WiFiClient::available() +{ + if(!_connected) { + return 0; + } + int count; + int res = ioctl(sockfd, FIONREAD, &count); + if(res < 0) { + log_e("error: %d", errno); + _connected = false; + sockfd = -1; + return 0; + } + return count; +} + +uint8_t WiFiClient::connected() +{ + uint8_t dummy = 0; + read(&dummy, 0); + return _connected; +} + +IPAddress WiFiClient::remoteIP(int fd) +{ + struct sockaddr_storage addr; + socklen_t len = sizeof addr; + getpeername(fd, (struct sockaddr*)&addr, &len); + struct sockaddr_in *s = (struct sockaddr_in *)&addr; + return IPAddress((uint32_t)(s->sin_addr.s_addr)); +} + +uint16_t WiFiClient::remotePort(int fd) +{ + struct sockaddr_storage addr; + socklen_t len = sizeof addr; + getpeername(fd, (struct sockaddr*)&addr, &len); + struct sockaddr_in *s = (struct sockaddr_in *)&addr; + return ntohs(s->sin_port); +} + +IPAddress WiFiClient::remoteIP() +{ + return remoteIP(sockfd); +} + +uint16_t WiFiClient::remotePort() +{ + return remotePort(sockfd); +} + +bool WiFiClient::operator==(const WiFiClient& rhs) +{ + return sockfd == rhs.sockfd && remotePort(sockfd) == remotePort(rhs.sockfd) && remoteIP(sockfd) == remoteIP(rhs.sockfd); +} diff --git a/libraries/WiFi/src/WiFiClient.h b/libraries/WiFi/src/WiFiClient.h new file mode 100644 index 00000000..b2e3e450 --- /dev/null +++ b/libraries/WiFi/src/WiFiClient.h @@ -0,0 +1,92 @@ +/* + Client.h - Base class that provides Client + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _WIFICLIENT_H_ +#define _WIFICLIENT_H_ + + +#include "Arduino.h" +#include "Client.h" + +class WiFiClient : public Client +{ +protected: + int sockfd; + bool _connected; + +public: + WiFiClient *next; + WiFiClient(); + WiFiClient(int fd); + ~WiFiClient(); + int connect(IPAddress ip, uint16_t port); + int connect(const char *host, uint16_t port); + size_t write(uint8_t data); + size_t write(const uint8_t *buf, size_t size); + int available(); + int read(); + int read(uint8_t *buf, size_t size); + int peek() + { + return 0; + } + void flush() {} + void stop(); + uint8_t connected(); + + operator bool() + { + return connected(); + } + WiFiClient & operator=(const WiFiClient &other); + bool operator==(const bool value) + { + return bool() == value; + } + bool operator!=(const bool value) + { + return bool() != value; + } + bool operator==(const WiFiClient&); + bool operator!=(const WiFiClient& rhs) + { + return !this->operator==(rhs); + }; + + int fd() + { + return sockfd; + } + IPAddress remoteIP(); + uint16_t remotePort(); + int setSocketOption(int option, char* value, size_t len); + int setOption(int option, int *value); + int getOption(int option, int *value); + int setTimeout(uint32_t seconds); + int setNoDelay(bool nodelay); + bool getNoDelay(); + + IPAddress remoteIP(int fd); + uint16_t remotePort(int fd); + + //friend class WiFiServer; + using Print::write; +}; + +#endif /* _WIFICLIENT_H_ */ diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp new file mode 100644 index 00000000..5b5b426f --- /dev/null +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -0,0 +1,333 @@ +/* + ESP8266WiFiGeneric.cpp - WiFi library for esp8266 + + Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Reworked on 28 Dec 2015 by Markus Sattler + + */ + +#include "WiFi.h" +#include "WiFiGeneric.h" + +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lwip/opt.h" +#include "lwip/err.h" +#include "lwip/dns.h" + +#include "esp32-hal-log.h" +} + +//#include "WiFiClient.h" +//#include "WiFiUdp.h" + +#undef min +#undef max +#include + +// ----------------------------------------------------------------------------------------------------------------------- +// ------------------------------------------------- Generic WiFi function ----------------------------------------------- +// ----------------------------------------------------------------------------------------------------------------------- + +// arduino dont like std::vectors move static here +static std::vector cbEventList; + +bool WiFiGenericClass::_persistent = true; +wifi_mode_t WiFiGenericClass::_forceSleepLastMode = WIFI_MODE_NULL; + +WiFiGenericClass::WiFiGenericClass() +{ + +} + +/** + * set callback function + * @param cbEvent WiFiEventCb + * @param event optional filter (WIFI_EVENT_MAX is all events) + */ +void WiFiGenericClass::onEvent(WiFiEventCb cbEvent, system_event_id_t event) +{ + if(!cbEvent) { + return; + } + WiFiEventCbList_t newEventHandler; + newEventHandler.cb = cbEvent; + newEventHandler.event = event; + cbEventList.push_back(newEventHandler); +} + +/** + * removes a callback form event handler + * @param cbEvent WiFiEventCb + * @param event optional filter (WIFI_EVENT_MAX is all events) + */ +void WiFiGenericClass::removeEvent(WiFiEventCb cbEvent, system_event_id_t event) +{ + if(!cbEvent) { + return; + } + + for(uint32_t i = 0; i < cbEventList.size(); i++) { + WiFiEventCbList_t entry = cbEventList[i]; + if(entry.cb == cbEvent && entry.event == event) { + cbEventList.erase(cbEventList.begin() + i); + } + } +} + +/** + * callback for WiFi events + * @param arg + */ +esp_err_t WiFiGenericClass::_eventCallback(void *arg, system_event_t *event) +{ + log_d("wifi evt: %d", event->event_id); + + if(event->event_id == SYSTEM_EVENT_SCAN_DONE) { + WiFiScanClass::_scanDone(); + } else if(event->event_id == SYSTEM_EVENT_STA_DISCONNECTED) { + uint8_t reason = event->event_info.disconnected.reason; + if(reason == WIFI_REASON_NO_AP_FOUND) { + WiFiSTAClass::_setStatus(WL_NO_SSID_AVAIL); + } else if(reason == WIFI_REASON_AUTH_FAIL || reason == WIFI_REASON_ASSOC_FAIL) { + WiFiSTAClass::_setStatus(WL_CONNECT_FAILED); + } else if(reason == WIFI_REASON_BEACON_TIMEOUT || reason == WIFI_REASON_HANDSHAKE_TIMEOUT) { + WiFiSTAClass::_setStatus(WL_CONNECTION_LOST); + } else { + WiFiSTAClass::_setStatus(WL_DISCONNECTED); + } + log_d("wifi reason: %d", reason); + } else if(event->event_id == SYSTEM_EVENT_STA_START) { + WiFiSTAClass::_setStatus(WL_DISCONNECTED); + } else if(event->event_id == SYSTEM_EVENT_STA_STOP) { + WiFiSTAClass::_setStatus(WL_NO_SHIELD); + } else if(event->event_id == SYSTEM_EVENT_STA_GOT_IP) { + WiFiSTAClass::_setStatus(WL_CONNECTED); + } + + for(uint32_t i = 0; i < cbEventList.size(); i++) { + WiFiEventCbList_t entry = cbEventList[i]; + if(entry.cb) { + if(entry.event == (system_event_id_t) event->event_id || entry.event == SYSTEM_EVENT_MAX) { + entry.cb((system_event_id_t) event->event_id); + } + } + } + return ESP_OK; +} + +/** + * Return the current channel associated with the network + * @return channel (1-13) + */ +int32_t WiFiGenericClass::channel(void) +{ + uint8_t primaryChan; + wifi_second_chan_t secondChan; + esp_wifi_get_channel(&primaryChan, &secondChan); + return primaryChan; +} + + +/** + * store WiFi config in SDK flash area + * @param persistent + */ +void WiFiGenericClass::persistent(bool persistent) +{ + _persistent = persistent; +} + + +/** + * set new mode + * @param m WiFiMode_t + */ +bool WiFiGenericClass::mode(wifi_mode_t m) +{ + if(getMode() == m) { + return true; + } + return esp_wifi_set_mode(m) == ESP_OK; +} + +/** + * get WiFi mode + * @return WiFiMode + */ +wifi_mode_t WiFiGenericClass::getMode() +{ + uint8_t mode; + esp_wifi_get_mode((wifi_mode_t*)&mode); + return (wifi_mode_t)mode; +} + +/** + * control STA mode + * @param enable bool + * @return ok + */ +bool WiFiGenericClass::enableSTA(bool enable) +{ + + wifi_mode_t currentMode = getMode(); + bool isEnabled = ((currentMode & WIFI_MODE_STA) != 0); + + if(isEnabled != enable) { + if(enable) { + return mode((wifi_mode_t)(currentMode | WIFI_MODE_STA)); + } else { + return mode((wifi_mode_t)(currentMode & (~WIFI_MODE_STA))); + } + } else { + return true; + } +} + +/** + * control AP mode + * @param enable bool + * @return ok + */ +bool WiFiGenericClass::enableAP(bool enable) +{ + + wifi_mode_t currentMode = getMode(); + bool isEnabled = ((currentMode & WIFI_MODE_AP) != 0); + + if(isEnabled != enable) { + if(enable) { + return mode((wifi_mode_t)(currentMode | WIFI_MODE_AP)); + } else { + return mode((wifi_mode_t)(currentMode & (~WIFI_MODE_AP))); + } + } else { + return true; + } +} + + +// ----------------------------------------------------------------------------------------------------------------------- +// ------------------------------------------------ Generic Network function --------------------------------------------- +// ----------------------------------------------------------------------------------------------------------------------- + +void wifi_dns_found_callback(const char *name, const ip_addr_t *ipaddr, void *callback_arg); + +/** + * Resolve the given hostname to an IP address. + * @param aHostname Name to be resolved + * @param aResult IPAddress structure to store the returned IP address + * @return 1 if aIPAddrString was successfully converted to an IP address, + * else error code + */ +static bool _dns_busy = false; + +int WiFiGenericClass::hostByName(const char* aHostname, IPAddress& aResult) +{ + ip_addr_t addr; + aResult = static_cast(0); + err_t err = dns_gethostbyname(aHostname, &addr, &wifi_dns_found_callback, &aResult); + _dns_busy = err == ERR_INPROGRESS; + while(_dns_busy); + if(err == ERR_INPROGRESS && aResult) { + //found by search + } else if(err == ERR_OK && addr.u_addr.ip4.addr) { + aResult = addr.u_addr.ip4.addr; + } else { + return 0; + } + return 1; +} + +/** + * DNS callback + * @param name + * @param ipaddr + * @param callback_arg + */ +void wifi_dns_found_callback(const char *name, const ip_addr_t *ipaddr, void *callback_arg) +{ + if(ipaddr) { + (*reinterpret_cast(callback_arg)) = ipaddr->u_addr.ip4.addr; + } + _dns_busy = false; +} + +/** + * Boot and start WiFi + * This method get's called on boot if you use any of the WiFi methods. + * If you do not link to this library, WiFi will not be started. + * */ +#include "nvs_flash.h" + +void bootWiFi() +{ + esp_err_t err; + wifi_init_config_t cfg; + wifi_mode_t mode = WIFI_MODE_NULL; + bool auto_connect = false; + + err = nvs_flash_init(); + if (err != ESP_OK) { + log_e("nvs_flash_init fail %d", err); + return; + } + + system_init(); + tcpip_adapter_init(); + esp_event_loop_init(WiFiGenericClass::_eventCallback, NULL); + + cfg.event_handler = &esp_event_send; + err = esp_wifi_init(&cfg); + if (err != ESP_OK) { + log_e("esp_wifi_init fail %d\n", err); + return; + } + + err = esp_wifi_start(); + if (err != ESP_OK) { + log_e("esp_wifi_start fail %d\n", err); + return; + } + + err = esp_wifi_get_mode(&mode); + if (err != ESP_OK) { + log_e("esp_wifi_get_mode fail %d\n", err); + return; + } + + err = esp_wifi_get_auto_connect(&auto_connect); + if ((mode == WIFI_MODE_STA || mode == WIFI_MODE_APSTA) && auto_connect) { + err = esp_wifi_connect(); + if (err != ESP_OK) { + log_e("esp_wifi_connect fail %d\n", err); + } + } +} + diff --git a/libraries/WiFi/src/WiFiGeneric.h b/libraries/WiFi/src/WiFiGeneric.h new file mode 100644 index 00000000..95b85b16 --- /dev/null +++ b/libraries/WiFi/src/WiFiGeneric.h @@ -0,0 +1,73 @@ +/* + ESP8266WiFiGeneric.h - esp8266 Wifi support. + Based on WiFi.h from Ardiono WiFi shield library. + Copyright (c) 2011-2014 Arduino. All right reserved. + Modified by Ivan Grokhotkov, December 2014 + Reworked by Markus Sattler, December 2015 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef ESP32WIFIGENERIC_H_ +#define ESP32WIFIGENERIC_H_ + +#include "WiFiType.h" +#include +#include + +typedef void (*WiFiEventCb)(system_event_id_t event); + +typedef struct { + WiFiEventCb cb; + system_event_id_t event; +} WiFiEventCbList_t; + +class WiFiGenericClass +{ +public: + + WiFiGenericClass(); + + void onEvent(WiFiEventCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX); + void removeEvent(WiFiEventCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX); + + int32_t channel(void); + + void persistent(bool persistent); + + static bool mode(wifi_mode_t); + static wifi_mode_t getMode(); + + bool enableSTA(bool enable); + bool enableAP(bool enable); + + static esp_err_t _eventCallback(void *arg, system_event_t *event); + +protected: + static bool _persistent; + static wifi_mode_t _forceSleepLastMode; + +public: + + int hostByName(const char* aHostname, IPAddress& aResult); + +protected: + + friend class WiFiSTAClass; + friend class WiFiScanClass; + friend class WiFiAPClass; +}; + +#endif /* ESP32WIFIGENERIC_H_ */ diff --git a/libraries/WiFi/src/WiFiMulti.cpp b/libraries/WiFi/src/WiFiMulti.cpp new file mode 100644 index 00000000..ef7fdd4e --- /dev/null +++ b/libraries/WiFi/src/WiFiMulti.cpp @@ -0,0 +1,218 @@ +/** + * + * @file ESP8266WiFiMulti.cpp + * @date 16.05.2015 + * @author Markus Sattler + * + * Copyright (c) 2015 Markus Sattler. All rights reserved. + * This file is part of the esp8266 core for Arduino environment. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "WiFiMulti.h" +#include +#include +#include + +WiFiMulti::WiFiMulti() +{ +} + +WiFiMulti::~WiFiMulti() +{ + APlistClean(); +} + +bool WiFiMulti::addAP(const char* ssid, const char *passphrase) +{ + return APlistAdd(ssid, passphrase); +} + +uint8_t WiFiMulti::run(void) +{ + + int8_t scanResult; + uint8_t status = WiFi.status(); + if(status == WL_DISCONNECTED || status == WL_NO_SSID_AVAIL || status == WL_IDLE_STATUS || status == WL_CONNECT_FAILED) { + + scanResult = WiFi.scanComplete(); + if(scanResult == WIFI_SCAN_RUNNING) { + // scan is running + return WL_NO_SSID_AVAIL; + } else if(scanResult > 0) { + // scan done analyze + WifiAPlist_t bestNetwork { NULL, NULL }; + int bestNetworkDb = INT_MIN; + uint8_t bestBSSID[6]; + int32_t bestChannel = 0; + + DEBUG_WIFI_MULTI("[WIFI] scan done\n"); + delay(0); + + if(scanResult <= 0) { + DEBUG_WIFI_MULTI("[WIFI] no networks found\n"); + } else { + DEBUG_WIFI_MULTI("[WIFI] %d networks found\n", scanResult); + for(int8_t i = 0; i < scanResult; ++i) { + + String ssid_scan; + int32_t rssi_scan; + uint8_t sec_scan; + uint8_t* BSSID_scan; + int32_t chan_scan; + + WiFi.getNetworkInfo(i, ssid_scan, sec_scan, rssi_scan, BSSID_scan, chan_scan); + + bool known = false; + for(uint32_t x = 0; x < APlist.size(); x++) { + WifiAPlist_t entry = APlist[x]; + + if(ssid_scan == entry.ssid) { // SSID match + known = true; + if(rssi_scan > bestNetworkDb) { // best network + if(sec_scan == WIFI_AUTH_OPEN || entry.passphrase) { // check for passphrase if not open wlan + bestNetworkDb = rssi_scan; + bestChannel = chan_scan; + memcpy((void*) &bestNetwork, (void*) &entry, sizeof(bestNetwork)); + memcpy((void*) &bestBSSID, (void*) BSSID_scan, sizeof(bestBSSID)); + } + } + break; + } + } + + if(known) { + DEBUG_WIFI_MULTI(" ---> "); + } else { + DEBUG_WIFI_MULTI(" "); + } + + DEBUG_WIFI_MULTI(" %d: [%d][%02X:%02X:%02X:%02X:%02X:%02X] %s (%d) %c\n", i, chan_scan, BSSID_scan[0], BSSID_scan[1], BSSID_scan[2], BSSID_scan[3], BSSID_scan[4], BSSID_scan[5], ssid_scan.c_str(), rssi_scan, (sec_scan == WIFI_AUTH_OPEN) ? ' ' : '*'); + delay(0); + } + } + + // clean up ram + WiFi.scanDelete(); + + DEBUG_WIFI_MULTI("\n\n"); + delay(0); + + if(bestNetwork.ssid) { + DEBUG_WIFI_MULTI("[WIFI] Connecting BSSID: %02X:%02X:%02X:%02X:%02X:%02X SSID: %s Channal: %d (%d)\n", bestBSSID[0], bestBSSID[1], bestBSSID[2], bestBSSID[3], bestBSSID[4], bestBSSID[5], bestNetwork.ssid, bestChannel, bestNetworkDb); + + WiFi.begin(bestNetwork.ssid, bestNetwork.passphrase, bestChannel, bestBSSID); + status = WiFi.status(); + + // wait for connection or fail + while(status != WL_CONNECTED && status != WL_NO_SSID_AVAIL && status != WL_CONNECT_FAILED) { + delay(10); + status = WiFi.status(); + } + + IPAddress ip; + uint8_t * mac; + switch(status) { + case 3: + ip = WiFi.localIP(); + mac = WiFi.BSSID(); + DEBUG_WIFI_MULTI("[WIFI] Connecting done.\n"); + DEBUG_WIFI_MULTI("[WIFI] SSID: %s\n", WiFi.SSID()); + DEBUG_WIFI_MULTI("[WIFI] IP: %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]); + DEBUG_WIFI_MULTI("[WIFI] MAC: %02X:%02X:%02X:%02X:%02X:%02X\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + DEBUG_WIFI_MULTI("[WIFI] Channel: %d\n", WiFi.channel()); + break; + case 1: + DEBUG_WIFI_MULTI("[WIFI] Connecting Failed AP not found.\n"); + break; + case 4: + DEBUG_WIFI_MULTI("[WIFI] Connecting Failed.\n"); + break; + default: + DEBUG_WIFI_MULTI("[WIFI] Connecting Failed (%d).\n", status); + break; + } + } else { + DEBUG_WIFI_MULTI("[WIFI] no matching wifi found!\n"); + } + } else { + // start scan + DEBUG_WIFI_MULTI("[WIFI] delete old wifi config...\n"); + WiFi.disconnect(); + + DEBUG_WIFI_MULTI("[WIFI] start scan\n"); + // scan wifi async mode + WiFi.scanNetworks(true); + } + } + return status; +} + +// ################################################################################## + +bool WiFiMulti::APlistAdd(const char* ssid, const char *passphrase) +{ + + WifiAPlist_t newAP; + + if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { + // fail SSID to long or missing! + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] no ssid or ssid to long\n"); + return false; + } + + if(passphrase && strlen(passphrase) > 63) { + // fail passphrase to long! + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] passphrase to long\n"); + return false; + } + + newAP.ssid = strdup(ssid); + + if(!newAP.ssid) { + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] fail newAP.ssid == 0\n"); + return false; + } + + if(passphrase && *passphrase != 0x00) { + newAP.passphrase = strdup(passphrase); + if(!newAP.passphrase) { + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] fail newAP.passphrase == 0\n"); + free(newAP.ssid); + return false; + } + } + + APlist.push_back(newAP); + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] add SSID: %s\n", newAP.ssid); + return true; +} + +void WiFiMulti::APlistClean(void) +{ + for(uint32_t i = 0; i < APlist.size(); i++) { + WifiAPlist_t entry = APlist[i]; + if(entry.ssid) { + free(entry.ssid); + } + if(entry.passphrase) { + free(entry.passphrase); + } + } + APlist.clear(); +} + diff --git a/libraries/WiFi/src/WiFiMulti.h b/libraries/WiFi/src/WiFiMulti.h new file mode 100644 index 00000000..500aada1 --- /dev/null +++ b/libraries/WiFi/src/WiFiMulti.h @@ -0,0 +1,66 @@ +/** + * + * @file ESP8266WiFiMulti.h + * @date 16.05.2015 + * @author Markus Sattler + * + * Copyright (c) 2015 Markus Sattler. All rights reserved. + * This file is part of the esp8266 core for Arduino environment. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef WIFICLIENTMULTI_H_ +#define WIFICLIENTMULTI_H_ + +#include "WiFi.h" +#undef min +#undef max +#include + +#ifdef DEBUG_ESP_WIFI +#ifdef DEBUG_ESP_PORT +#define DEBUG_WIFI_MULTI(...) DEBUG_ESP_PORT.printf( __VA_ARGS__ ) +#endif +#endif + +#ifndef DEBUG_WIFI_MULTI +#define DEBUG_WIFI_MULTI(...) +#endif + +typedef struct { + char * ssid; + char * passphrase; +} WifiAPlist_t; + +class WiFiMulti +{ +public: + WiFiMulti(); + ~WiFiMulti(); + + bool addAP(const char* ssid, const char *passphrase = NULL); + + uint8_t run(void); + +private: + std::vector APlist; + bool APlistAdd(const char* ssid, const char *passphrase = NULL); + void APlistClean(void); + +}; + +#endif /* WIFICLIENTMULTI_H_ */ diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp new file mode 100644 index 00000000..fd4c90d0 --- /dev/null +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -0,0 +1,455 @@ +/* + ESP8266WiFiSTA.cpp - WiFi library for esp8266 + + Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Reworked on 28 Dec 2015 by Markus Sattler + + */ + +#include "WiFi.h" +#include "WiFiGeneric.h" +#include "WiFiSTA.h" + +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "lwip/err.h" +#include "lwip/dns.h" +} + +extern "C" void esp_schedule(); +extern "C" void esp_yield(); + +// ----------------------------------------------------------------------------------------------------------------------- +// ---------------------------------------------------- Private functions ------------------------------------------------ +// ----------------------------------------------------------------------------------------------------------------------- + +static bool sta_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs); + + +/** + * compare two STA configurations + * @param lhs station_config + * @param rhs station_config + * @return equal + */ +static bool sta_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs) +{ + if(strcmp(reinterpret_cast(lhs.sta.ssid), reinterpret_cast(rhs.sta.ssid)) != 0) { + return false; + } + + if(strcmp(reinterpret_cast(lhs.sta.password), reinterpret_cast(rhs.sta.password)) != 0) { + return false; + } + + if(lhs.sta.bssid_set != rhs.sta.bssid_set) { + return false; + } + + if(lhs.sta.bssid_set) { + if(memcmp(lhs.sta.bssid, rhs.sta.bssid, 6) != 0) { + return false; + } + } + + return true; +} + +// ----------------------------------------------------------------------------------------------------------------------- +// ---------------------------------------------------- STA function ----------------------------------------------------- +// ----------------------------------------------------------------------------------------------------------------------- + +bool WiFiSTAClass::_useStaticIp = false; +wl_status_t WiFiSTAClass::_status = WL_NO_SHIELD; +/** + * Start Wifi connection + * if passphrase is set the most secure supported mode will be automatically selected + * @param ssid const char* Pointer to the SSID string. + * @param passphrase const char * Optional. Passphrase. Valid characters in a passphrase must be between ASCII 32-126 (decimal). + * @param bssid uint8_t[6] Optional. BSSID / MAC of AP + * @param channel Optional. Channel of AP + * @param connect Optional. call connect + * @return + */ +wl_status_t WiFiSTAClass::begin(const char* ssid, const char *passphrase, int32_t channel, const uint8_t* bssid, bool connect) +{ + + if(!WiFi.enableSTA(true)) { + // enable STA failed + return WL_CONNECT_FAILED; + } + + if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { + // fail SSID too long or missing! + return WL_CONNECT_FAILED; + } + + if(passphrase && strlen(passphrase) > 63) { + // fail passphrase too long! + return WL_CONNECT_FAILED; + } + + wifi_config_t conf; + strcpy(reinterpret_cast(conf.sta.ssid), ssid); + + if(passphrase) { + strcpy(reinterpret_cast(conf.sta.password), passphrase); + } else { + *conf.sta.password = 0; + } + + if(bssid) { + conf.sta.bssid_set = 1; + memcpy((void *) &conf.sta.bssid[0], (void *) bssid, 6); + } else { + conf.sta.bssid_set = 0; + } + + wifi_config_t current_conf; + esp_wifi_get_config(WIFI_IF_STA, ¤t_conf); + if(!sta_config_equal(current_conf, conf)) { + esp_wifi_set_config(WIFI_IF_STA, &conf); + } + + + + if(channel > 0 && channel <= 13) { + esp_wifi_set_channel(channel, WIFI_SECOND_CHAN_NONE); + } + + if(!_useStaticIp) { + tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); + } + + if(connect) { + esp_wifi_connect(); + } + + return status(); +} + +wl_status_t WiFiSTAClass::begin(char* ssid, char *passphrase, int32_t channel, const uint8_t* bssid, bool connect) +{ + return begin((const char*) ssid, (const char*) passphrase, channel, bssid, connect); +} + +/** + * Use to connect to SDK config. + * @return wl_status_t + */ +wl_status_t WiFiSTAClass::begin() +{ + + if(!WiFi.enableSTA(true)) { + // enable STA failed + return WL_CONNECT_FAILED; + } + esp_wifi_start(); + esp_wifi_connect(); + + if(!_useStaticIp) { + tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); + } + return status(); +} + +void WiFiSTAClass::_setStatus(wl_status_t status) +{ + _status = status; + //log_i("wifi status: %d", status); +} + +/** + * Change IP configuration settings disabling the dhcp client + * @param local_ip Static ip configuration + * @param gateway Static gateway configuration + * @param subnet Static Subnet mask + * @param dns1 Static DNS server 1 + * @param dns2 Static DNS server 2 + */ +bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1, IPAddress dns2) +{ + + if(!WiFi.enableSTA(true)) { + return false; + } + + tcpip_adapter_ip_info_t info; + info.ip.addr = static_cast(local_ip); + info.gw.addr = static_cast(gateway); + info.netmask.addr = static_cast(subnet); + + tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA); + if(tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &info)) { + _useStaticIp = true; + } else { + return false; + } + ip_addr_t d; + + if(dns1 != (uint32_t)0x00000000) { + // Set DNS1-Server + d.u_addr.ip4.addr = static_cast(dns1); + dns_setserver(0, &d); + } + + if(dns2 != (uint32_t)0x00000000) { + // Set DNS2-Server + d.u_addr.ip4.addr = static_cast(dns2); + dns_setserver(1, &d); + } + + return true; +} + +/** + * will force a disconnect an then start reconnecting to AP + * @return ok + */ +bool WiFiSTAClass::reconnect() +{ + if((WiFi.getMode() & WIFI_MODE_STA) != 0) { + if(esp_wifi_disconnect() == ESP_OK) { + return esp_wifi_connect() == ESP_OK; + } + } + return false; +} + +/** + * Disconnect from the network + * @param wifioff + * @return one value of wl_status_t enum + */ +bool WiFiSTAClass::disconnect(bool wifioff) +{ + bool ret; + wifi_config_t conf; + *conf.sta.ssid = 0; + *conf.sta.password = 0; + + esp_wifi_set_config(WIFI_IF_STA, &conf); + ret = esp_wifi_set_config(WIFI_IF_STA, &conf) == ESP_OK; + + if(wifioff) { + WiFi.enableSTA(false); + } + + return ret; +} + +/** + * is STA interface connected? + * @return true if STA is connected to an AD + */ +bool WiFiSTAClass::isConnected() +{ + return (status() == WL_CONNECTED); +} + + +/** + * Setting the ESP32 station to connect to the AP (which is recorded) + * automatically or not when powered on. Enable auto-connect by default. + * @param autoConnect bool + * @return if saved + */ +bool WiFiSTAClass::setAutoConnect(bool autoConnect) +{ + bool ret; + ret = esp_wifi_set_auto_connect(autoConnect); + return ret; +} + +/** + * Checks if ESP32 station mode will connect to AP + * automatically or not when it is powered on. + * @return auto connect + */ +bool WiFiSTAClass::getAutoConnect() +{ + bool autoConnect; + esp_wifi_get_auto_connect(&autoConnect); + return autoConnect; +} + +/** + * Wait for WiFi connection to reach a result + * returns the status reached or disconnect if STA is off + * @return wl_status_t + */ +uint8_t WiFiSTAClass::waitForConnectResult() +{ + //1 and 3 have STA enabled + if((WiFiGenericClass::getMode() & WIFI_MODE_STA) == 0) { + return WL_DISCONNECTED; + } + int i = 0; + while(status() >= WL_DISCONNECTED && i++ < 100) { + delay(100); + } + return status(); +} + +/** + * Get the station interface IP address. + * @return IPAddress station IP + */ +IPAddress WiFiSTAClass::localIP() +{ + tcpip_adapter_ip_info_t ip; + tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); + return IPAddress(ip.ip.addr); +} + + +/** + * Get the station interface MAC address. + * @param mac pointer to uint8_t array with length WL_MAC_ADDR_LENGTH + * @return pointer to uint8_t * + */ +uint8_t* WiFiSTAClass::macAddress(uint8_t* mac) +{ + esp_wifi_get_mac(WIFI_IF_STA, mac); + return mac; +} + +/** + * Get the station interface MAC address. + * @return String mac + */ +String WiFiSTAClass::macAddress(void) +{ + uint8_t mac[6]; + char macStr[18] = { 0 }; + esp_wifi_get_mac(WIFI_IF_STA, mac); + + sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + return String(macStr); +} + +/** + * Get the interface subnet mask address. + * @return IPAddress subnetMask + */ +IPAddress WiFiSTAClass::subnetMask() +{ + tcpip_adapter_ip_info_t ip; + tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); + return IPAddress(ip.netmask.addr); +} + +/** + * Get the gateway ip address. + * @return IPAddress gatewayIP + */ +IPAddress WiFiSTAClass::gatewayIP() +{ + tcpip_adapter_ip_info_t ip; + tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); + return IPAddress(ip.gw.addr); +} + +/** + * Get the DNS ip address. + * @param dns_no + * @return IPAddress DNS Server IP + */ +IPAddress WiFiSTAClass::dnsIP(uint8_t dns_no) +{ + ip_addr_t dns_ip = dns_getserver(dns_no); + return IPAddress(dns_ip.u_addr.ip4.addr); +} + +/** + * Return Connection status. + * @return one of the value defined in wl_status_t + * + */ +wl_status_t WiFiSTAClass::status() +{ + return WiFiSTAClass::_status; +} + +/** + * Return the current SSID associated with the network + * @return SSID + */ +String WiFiSTAClass::SSID() const +{ + wifi_config_t conf; + esp_wifi_get_config(WIFI_IF_STA, &conf); + return String(reinterpret_cast(conf.sta.ssid)); +} + +/** + * Return the current pre shared key associated with the network + * @return psk string + */ +String WiFiSTAClass::psk() const +{ + wifi_config_t conf; + esp_wifi_get_config(WIFI_IF_STA, &conf); + return String(reinterpret_cast(conf.sta.password)); +} + +/** + * Return the current bssid / mac associated with the network if configured + * @return bssid uint8_t * + */ +uint8_t* WiFiSTAClass::BSSID(void) +{ + static uint8_t bssid[6]; + wifi_config_t conf; + esp_wifi_get_config(WIFI_IF_STA, &conf); + memcpy(bssid, conf.sta.bssid, 6); + return reinterpret_cast(bssid); +} + +/** + * Return the current bssid / mac associated with the network if configured + * @return String bssid mac + */ +String WiFiSTAClass::BSSIDstr(void) +{ + char mac[18] = { 0 }; + wifi_config_t conf; + esp_wifi_get_config(WIFI_IF_STA, &conf); + sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X", conf.sta.bssid[0], conf.sta.bssid[1], conf.sta.bssid[2], conf.sta.bssid[3], conf.sta.bssid[4], conf.sta.bssid[5]); + return String(mac); +} + +/** + * Return the current network RSSI. + * @return RSSI value + */ +int32_t WiFiSTAClass::RSSI(void) +{ + return 0;//wifi_station_get_rssi(); +} diff --git a/libraries/WiFi/src/WiFiSTA.h b/libraries/WiFi/src/WiFiSTA.h new file mode 100644 index 00000000..587eaefb --- /dev/null +++ b/libraries/WiFi/src/WiFiSTA.h @@ -0,0 +1,85 @@ +/* + ESP8266WiFiSTA.h - esp8266 Wifi support. + Based on WiFi.h from Ardiono WiFi shield library. + Copyright (c) 2011-2014 Arduino. All right reserved. + Modified by Ivan Grokhotkov, December 2014 + Reworked by Markus Sattler, December 2015 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef ESP32WIFISTA_H_ +#define ESP32WIFISTA_H_ + + +#include "WiFiType.h" +#include "WiFiGeneric.h" + + +class WiFiSTAClass +{ + // ---------------------------------------------------------------------------------------------- + // ---------------------------------------- STA function ---------------------------------------- + // ---------------------------------------------------------------------------------------------- + +public: + + wl_status_t begin(const char* ssid, const char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true); + wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true); + wl_status_t begin(); + + bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000); + + bool reconnect(); + bool disconnect(bool wifioff = false); + + bool isConnected(); + + bool setAutoConnect(bool autoConnect); + bool getAutoConnect(); + + bool setAutoReconnect(bool autoReconnect); + + uint8_t waitForConnectResult(); + + // STA network info + IPAddress localIP(); + + uint8_t * macAddress(uint8_t* mac); + String macAddress(); + + IPAddress subnetMask(); + IPAddress gatewayIP(); + IPAddress dnsIP(uint8_t dns_no = 0); + + // STA WiFi info + wl_status_t status(); + String SSID() const; + String psk() const; + + uint8_t * BSSID(); + String BSSIDstr(); + + int32_t RSSI(); + + static void _setStatus(wl_status_t status); +protected: + static wl_status_t _status; + static bool _useStaticIp; + +}; + + +#endif /* ESP32WIFISTA_H_ */ diff --git a/libraries/WiFi/src/WiFiScan.cpp b/libraries/WiFi/src/WiFiScan.cpp new file mode 100644 index 00000000..2e96bf91 --- /dev/null +++ b/libraries/WiFi/src/WiFiScan.cpp @@ -0,0 +1,268 @@ +/* + ESP8266WiFiScan.cpp - WiFi library for esp8266 + + Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Reworked on 28 Dec 2015 by Markus Sattler + + */ + +#include "WiFi.h" +#include "WiFiGeneric.h" +#include "WiFiScan.h" + +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "lwip/err.h" +} + +bool WiFiScanClass::_scanAsync = false; +bool WiFiScanClass::_scanStarted = false; +bool WiFiScanClass::_scanComplete = false; + +uint16_t WiFiScanClass::_scanCount = 0; +void* WiFiScanClass::_scanResult = 0; + +/** + * Start scan WiFi networks available + * @param async run in async mode + * @param show_hidden show hidden networks + * @return Number of discovered networks + */ +int8_t WiFiScanClass::scanNetworks(bool async, bool show_hidden) +{ + if(WiFiScanClass::_scanStarted) { + return WIFI_SCAN_RUNNING; + } + + WiFiScanClass::_scanAsync = async; + + WiFi.enableSTA(true); + + scanDelete(); + + wifi_scan_config_t config; + config.ssid = 0; + config.bssid = 0; + config.channel = 0; + config.show_hidden = show_hidden; + if(esp_wifi_scan_start(&config, WiFiScanClass::_scanAsync) == ESP_OK) { + WiFiScanClass::_scanComplete = false; + WiFiScanClass::_scanStarted = true; + + if(WiFiScanClass::_scanAsync) { + return WIFI_SCAN_RUNNING; + } + while(!(WiFiScanClass::_scanComplete)) { + delay(10); + } + return WiFiScanClass::_scanCount; + } else { + return WIFI_SCAN_FAILED; + } + +} + + +/** + * private + * scan callback + * @param result void *arg + * @param status STATUS + */ +void WiFiScanClass::_scanDone() +{ + WiFiScanClass::_scanComplete = true; + WiFiScanClass::_scanStarted = false; + esp_wifi_get_ap_num(&(WiFiScanClass::_scanCount)); + if(WiFiScanClass::_scanCount) { + WiFiScanClass::_scanResult = new wifi_ap_list_t[WiFiScanClass::_scanCount]; + if(WiFiScanClass::_scanResult) { + esp_wifi_get_ap_list(&(WiFiScanClass::_scanCount), (wifi_ap_list_t*)_scanResult); + } else { + //no memory + WiFiScanClass::_scanCount = 0; + } + } +} + +/** + * + * @param i specify from which network item want to get the information + * @return bss_info * + */ +void * WiFiScanClass::_getScanInfoByIndex(int i) +{ + if(!WiFiScanClass::_scanResult || (size_t) i > WiFiScanClass::_scanCount) { + return 0; + } + return reinterpret_cast(WiFiScanClass::_scanResult) + i; +} + +/** + * called to get the scan state in Async mode + * @return scan result or status + * -1 if scan not fin + * -2 if scan not triggered + */ +int8_t WiFiScanClass::scanComplete() +{ + + if(_scanStarted) { + return WIFI_SCAN_RUNNING; + } + + if(_scanComplete) { + return WiFiScanClass::_scanCount; + } + + return WIFI_SCAN_FAILED; +} + +/** + * delete last scan result from RAM + */ +void WiFiScanClass::scanDelete() +{ + if(WiFiScanClass::_scanResult) { + delete[] reinterpret_cast(WiFiScanClass::_scanResult); + WiFiScanClass::_scanResult = 0; + WiFiScanClass::_scanCount = 0; + } + _scanComplete = false; +} + + +/** + * loads all infos from a scanned wifi in to the ptr parameters + * @param networkItem uint8_t + * @param ssid const char** + * @param encryptionType uint8_t * + * @param RSSI int32_t * + * @param BSSID uint8_t ** + * @param channel int32_t * + * @return (true if ok) + */ +bool WiFiScanClass::getNetworkInfo(uint8_t i, String &ssid, uint8_t &encType, int32_t &rssi, uint8_t* &bssid, int32_t &channel) +{ + wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + if(!it) { + return 0; + } + ssid = (const char*) it->ssid; + encType = it->authmode; + rssi = it->rssi; + bssid = it->bssid; + channel = it->primary; + return true; +} + + +/** + * Return the SSID discovered during the network scan. + * @param i specify from which network item want to get the information + * @return ssid string of the specified item on the networks scanned list + */ +String WiFiScanClass::SSID(uint8_t i) +{ + wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + if(!it) { + return 0; + } + return String(reinterpret_cast(it->ssid)); +} + + +/** + * Return the encryption type of the networks discovered during the scanNetworks + * @param i specify from which network item want to get the information + * @return encryption type (enum wl_enc_type) of the specified item on the networks scanned list + */ +wifi_auth_mode_t WiFiScanClass::encryptionType(uint8_t i) +{ + wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + if(!it) { + return WIFI_AUTH_OPEN; + } + return it->authmode; +} + +/** + * Return the RSSI of the networks discovered during the scanNetworks + * @param i specify from which network item want to get the information + * @return signed value of RSSI of the specified item on the networks scanned list + */ +int32_t WiFiScanClass::RSSI(uint8_t i) +{ + wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + if(!it) { + return 0; + } + return it->rssi; +} + + +/** + * return MAC / BSSID of scanned wifi + * @param i specify from which network item want to get the information + * @return uint8_t * MAC / BSSID of scanned wifi + */ +uint8_t * WiFiScanClass::BSSID(uint8_t i) +{ + wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + if(!it) { + return 0; + } + return it->bssid; +} + +/** + * return MAC / BSSID of scanned wifi + * @param i specify from which network item want to get the information + * @return String MAC / BSSID of scanned wifi + */ +String WiFiScanClass::BSSIDstr(uint8_t i) +{ + char mac[18] = { 0 }; + wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + if(!it) { + return String(""); + } + sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X", it->bssid[0], it->bssid[1], it->bssid[2], it->bssid[3], it->bssid[4], it->bssid[5]); + return String(mac); +} + +int32_t WiFiScanClass::channel(uint8_t i) +{ + wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + if(!it) { + return 0; + } + return it->primary; +} + diff --git a/libraries/WiFi/src/WiFiScan.h b/libraries/WiFi/src/WiFiScan.h new file mode 100644 index 00000000..ec89f0c9 --- /dev/null +++ b/libraries/WiFi/src/WiFiScan.h @@ -0,0 +1,64 @@ +/* + ESP8266WiFiScan.h - esp8266 Wifi support. + Based on WiFi.h from Ardiono WiFi shield library. + Copyright (c) 2011-2014 Arduino. All right reserved. + Modified by Ivan Grokhotkov, December 2014 + Reworked by Markus Sattler, December 2015 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef ESP32WIFISCAN_H_ +#define ESP32WIFISCAN_H_ + +#include "WiFiType.h" +#include "WiFiGeneric.h" + +class WiFiScanClass +{ + +public: + + int8_t scanNetworks(bool async = false, bool show_hidden = false); + + int8_t scanComplete(); + void scanDelete(); + + // scan result + bool getNetworkInfo(uint8_t networkItem, String &ssid, uint8_t &encryptionType, int32_t &RSSI, uint8_t* &BSSID, int32_t &channel); + + String SSID(uint8_t networkItem); + wifi_auth_mode_t encryptionType(uint8_t networkItem); + int32_t RSSI(uint8_t networkItem); + uint8_t * BSSID(uint8_t networkItem); + String BSSIDstr(uint8_t networkItem); + int32_t channel(uint8_t networkItem); + + static void _scanDone(); +protected: + + static bool _scanAsync; + static bool _scanStarted; + static bool _scanComplete; + + static uint16_t _scanCount; + static void* _scanResult; + + static void * _getScanInfoByIndex(int i); + +}; + + +#endif /* ESP32WIFISCAN_H_ */ diff --git a/libraries/WiFi/src/WiFiType.h b/libraries/WiFi/src/WiFiType.h new file mode 100644 index 00000000..c4b09106 --- /dev/null +++ b/libraries/WiFi/src/WiFiType.h @@ -0,0 +1,48 @@ +/* + ESP8266WiFiType.h - esp8266 Wifi support. + Copyright (c) 2011-2014 Arduino. All right reserved. + Modified by Ivan Grokhotkov, December 2014 + Reworked by Markus Sattler, December 2015 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#ifndef ESP32WIFITYPE_H_ +#define ESP32WIFITYPE_H_ + +#define WIFI_SCAN_RUNNING (-1) +#define WIFI_SCAN_FAILED (-2) + +#define WiFiMode_t wifi_mode_t +#define WIFI_OFF WIFI_MODE_NULL +#define WIFI_STA WIFI_MODE_STA +#define WIFI_AP WIFI_MODE_AP +#define WIFI_AP_STA WIFI_MODE_APSTA + +#define WiFiEvent_t system_event_id_t + +typedef enum { + WL_NO_SHIELD = 255, // for compatibility with WiFi Shield library + WL_IDLE_STATUS = 0, + WL_NO_SSID_AVAIL = 1, + WL_SCAN_COMPLETED = 2, + WL_CONNECTED = 3, + WL_CONNECT_FAILED = 4, + WL_CONNECTION_LOST = 5, + WL_DISCONNECTED = 6 +} wl_status_t; + +#endif /* ESP32WIFITYPE_H_ */ diff --git a/libraries/Wire/keywords.txt b/libraries/Wire/keywords.txt new file mode 100644 index 00000000..3344011d --- /dev/null +++ b/libraries/Wire/keywords.txt @@ -0,0 +1,33 @@ +####################################### +# Syntax Coloring Map For Wire +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +begin KEYWORD2 +setClock KEYWORD2 +setClockStretchLimit KEYWORD2 +beginTransmission KEYWORD2 +endTransmission KEYWORD2 +requestFrom KEYWORD2 +send KEYWORD2 +receive KEYWORD2 +onReceive KEYWORD2 +onRequest KEYWORD2 + +####################################### +# Instances (KEYWORD2) +####################################### + +Wire KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/libraries/Wire/library.properties b/libraries/Wire/library.properties new file mode 100644 index 00000000..ef29154c --- /dev/null +++ b/libraries/Wire/library.properties @@ -0,0 +1,9 @@ +name=Wire +version=1.0 +author=Hristo Gochkov +maintainer=Hristo Gochkov +sentence=Allows the communication between devices or sensors connected via Two Wire Interface Bus. For esp8266 boards. +paragraph= +category=Signal Input/Output +url=http://arduino.cc/en/Reference/Wire +architectures=esp32 diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp new file mode 100644 index 00000000..37b09c58 --- /dev/null +++ b/libraries/Wire/src/Wire.cpp @@ -0,0 +1,211 @@ +/* + TwoWire.cpp - TWI/I2C library for Arduino & Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 2012 by Todd Krein (todd@krein.org) to implement repeated starts + Modified December 2014 by Ivan Grokhotkov (ivan@esp8266.com) - esp8266 support + Modified April 2015 by Hrsto Gochkov (ficeto@ficeto.com) - alternative esp8266 support +*/ + +extern "C" { +#include +#include +#include +} + +#include "esp32-hal-i2c.h" +#include "Wire.h" + +TwoWire::TwoWire(uint8_t bus_num) + :num(bus_num & 1) + ,sda(-1) + ,scl(-1) + ,i2c(NULL) + ,rxIndex(0) + ,rxLength(0) + ,txIndex(0) + ,txLength(0) + ,txAddress(0) + ,transmitting(0) +{} + +void TwoWire::begin(int sdaPin, int sclPin, uint32_t frequency) +{ + if(sdaPin < 0) { + if(num == 0) { + sdaPin = I2C0_DEFAULT_SDA_PIN; + } else { + return; + } + } + + if(sclPin < 0) { + if(num == 0) { + sclPin = I2C0_DEFAULT_SCL_PIN; + } else { + return; + } + } + + if(i2c == NULL) { + i2c = i2cInit(num, 0, false); + if(i2c == NULL) { + return; + } + } + + i2cSetFrequency(i2c, frequency); + + if(sda >= 0 && sda != sdaPin) { + i2cDetachSDA(i2c, sda); + } + + if(scl >= 0 && scl != sclPin) { + i2cDetachSCL(i2c, scl); + } + + sda = sdaPin; + scl = sclPin; + + i2cAttachSDA(i2c, sda); + i2cAttachSCL(i2c, scl); + + flush(); +} + +void TwoWire::setClock(uint32_t frequency) +{ + i2cSetFrequency(i2c, frequency); +} + +size_t TwoWire::requestFrom(uint8_t address, size_t size, bool sendStop) +{ + if(size > I2C_BUFFER_LENGTH) { + size = I2C_BUFFER_LENGTH; + } + size_t read = (i2cRead(i2c, address, false, rxBuffer, size, sendStop) == 0)?size:0; + rxIndex = 0; + rxLength = read; + return read; +} + +uint8_t TwoWire::endTransmission(uint8_t sendStop) +{ + int8_t ret = i2cWrite(i2c, txAddress, false, txBuffer, txLength, sendStop); + txIndex = 0; + txLength = 0; + transmitting = 0; + return ret; +} + +uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) +{ + return requestFrom(address, static_cast(quantity), static_cast(sendStop)); +} + +uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity) +{ + return requestFrom(address, static_cast(quantity), true); +} + +uint8_t TwoWire::requestFrom(int address, int quantity) +{ + return requestFrom(static_cast(address), static_cast(quantity), true); +} + +uint8_t TwoWire::requestFrom(int address, int quantity, int sendStop) +{ + return requestFrom(static_cast(address), static_cast(quantity), static_cast(sendStop)); +} + +void TwoWire::beginTransmission(uint8_t address) +{ + transmitting = 1; + txAddress = address; + txIndex = 0; + txLength = 0; +} + +void TwoWire::beginTransmission(int address) +{ + beginTransmission((uint8_t)address); +} + +uint8_t TwoWire::endTransmission(void) +{ + return endTransmission(true); +} + +size_t TwoWire::write(uint8_t data) +{ + if(transmitting) { + if(txLength >= I2C_BUFFER_LENGTH) { + return 0; + } + txBuffer[txIndex] = data; + ++txIndex; + txLength = txIndex; + } + return 1; +} + +size_t TwoWire::write(const uint8_t *data, size_t quantity) +{ + if(transmitting) { + for(size_t i = 0; i < quantity; ++i) { + if(!write(data[i])) { + return i; + } + } + } + return quantity; +} + +int TwoWire::available(void) +{ + int result = rxLength - rxIndex; + return result; +} + +int TwoWire::read(void) +{ + int value = -1; + if(rxIndex < rxLength) { + value = rxBuffer[rxIndex]; + ++rxIndex; + } + return value; +} + +int TwoWire::peek(void) +{ + int value = -1; + if(rxIndex < rxLength) { + value = rxBuffer[rxIndex]; + } + return value; +} + +void TwoWire::flush(void) +{ + rxIndex = 0; + rxLength = 0; + txIndex = 0; + txLength = 0; +} + +TwoWire Wire = TwoWire(0); diff --git a/libraries/Wire/src/Wire.h b/libraries/Wire/src/Wire.h new file mode 100644 index 00000000..f54ac965 --- /dev/null +++ b/libraries/Wire/src/Wire.h @@ -0,0 +1,97 @@ +/* + TwoWire.h - TWI/I2C library for Arduino & Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 2012 by Todd Krein (todd@krein.org) to implement repeated starts + Modified December 2014 by Ivan Grokhotkov (ivan@esp8266.com) - esp8266 support + Modified April 2015 by Hrsto Gochkov (ficeto@ficeto.com) - alternative esp8266 support +*/ + +#ifndef TwoWire_h +#define TwoWire_h + +#include +#include "freertos/FreeRTOS.h" +#include "freertos/queue.h" + +#define I2C_BUFFER_LENGTH 128 +#define I2C0_DEFAULT_SDA_PIN 21 +#define I2C0_DEFAULT_SCL_PIN 22 + +class TwoWire +{ +protected: + uint8_t num; + int8_t sda; + int8_t scl; + i2c_t * i2c; + + uint8_t rxBuffer[I2C_BUFFER_LENGTH]; + uint16_t rxIndex; + uint16_t rxLength; + + uint8_t txBuffer[I2C_BUFFER_LENGTH]; + uint16_t txIndex; + uint16_t txLength; + uint8_t txAddress; + + uint8_t transmitting; + +public: + TwoWire(uint8_t bus_num); + void begin(int sda=-1, int scl=-1, uint32_t frequency=100000); + void setClock(uint32_t); + void beginTransmission(uint8_t); + void beginTransmission(int); + uint8_t endTransmission(void); + uint8_t endTransmission(uint8_t); + size_t requestFrom(uint8_t address, size_t size, bool sendStop); + + uint8_t requestFrom(uint8_t, uint8_t); + uint8_t requestFrom(uint8_t, uint8_t, uint8_t); + uint8_t requestFrom(int, int); + uint8_t requestFrom(int, int, int); + + size_t write(uint8_t); + size_t write(const uint8_t *, size_t); + int available(void); + int read(void); + int peek(void); + void flush(void); + + inline size_t write(unsigned long n) + { + return write((uint8_t)n); + } + inline size_t write(long n) + { + return write((uint8_t)n); + } + inline size_t write(unsigned int n) + { + return write((uint8_t)n); + } + inline size_t write(int n) + { + return write((uint8_t)n); + } +}; + +extern TwoWire Wire; + +#endif + diff --git a/package/package_esp32_index.template.json b/package/package_esp32_index.template.json new file mode 100644 index 00000000..bc9f4057 --- /dev/null +++ b/package/package_esp32_index.template.json @@ -0,0 +1,76 @@ +{ + "packages": [ + { + "name": "esp32", + "maintainer": "Espressif Systems", + "websiteURL": "https://github.com/espressif/esp32-arduino", + "email": "hristo@espressif.com", + "help": { + "online": "http://esp32.com" + }, + "platforms": [ + { + "name": "esp32", + "architecture": "esp32", + "version": "", + "category": "ESP32", + "url": "", + "archiveFileName": "", + "checksum": "", + "size": "", + "help": { + "online": "" + }, + "boards": [ + { + "name": "ESP32 Dev Module" + } + ], + "toolsDependencies": [ + { + "packager": "esp32", + "name": "xtensa-esp32-elf-gcc", + "version": "1.22.0-59" + } + ] + } + ], + "tools": [ + { + "name": "xtensa-esp32-elf-gcc", + "version": "1.22.0-59", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://dl.espressif.com/dl/xtensa-esp32-elf-win32-1.22.0-59.zip", + "archiveFileName": "xtensa-esp32-elf-win32-1.22.0-59.zip", + "checksum": "SHA-256:10476b9c11a7a90f40883413ddfb409f505b20692e316c4e597c4c175b4be09c", + "size": "153527527" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-59.tar.gz", + "archiveFileName": "xtensa-esp32-elf-osx-1.22.0-59.tar.gz", + "checksum": "SHA-256:0cf150193997bd1355e0f49d3d49711730035257bc1aee1eaaad619e56b9e4e6", + "size": "35385382" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-59.tar.gz", + "archiveFileName": "xtensa-esp32-elf-linux64-1.22.0-59.tar.gz", + "checksum": "SHA-256:46f057fbd8b320889a26167daf325038912096d09940b2a95489db92431473b7", + "size": "30262903" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://dl.espressif.com/dl/xtensa-esp32-elf-linux32-1.22.0-59.tar.gz", + "archiveFileName": "xtensa-esp32-elf-linux32-1.22.0-59.tar.gz", + "checksum": "SHA-256:b24817819f0078fb05895a640e806e0aca9aa96b47b80d2390ac8e2d9ddc955a", + "size": "32734156" + } + ] + } + ] + } + ] +} diff --git a/platform.txt b/platform.txt new file mode 100644 index 00000000..96415179 --- /dev/null +++ b/platform.txt @@ -0,0 +1,97 @@ + +name=ESP32 Arduino +version=0.0.1 + +runtime.tools.xtensa-esp32-elf-gcc.path={runtime.platform.path}/tools/xtensa-esp32-elf +runtime.tools.esptool.path={runtime.platform.path}/tools/esptool.py + +compiler.warning_flags=-w +compiler.warning_flags.none=-w +compiler.warning_flags.default= +compiler.warning_flags.more=-Wall +compiler.warning_flags.all=-Wall -Wextra + +compiler.path={runtime.tools.xtensa-esp32-elf-gcc.path}/bin/ +compiler.sdk.path={runtime.platform.path}/tools/sdk +compiler.cpreprocessor.flags=-DESP_PLATFORM -DMBEDTLS_CONFIG_FILE='"mbedtls/esp_config.h"' -DHAVE_CONFIG_H "-I{compiler.sdk.path}/include/config" "-I{compiler.sdk.path}/include/bt" "-I{compiler.sdk.path}/include/driver" "-I{compiler.sdk.path}/include/esp32" "-I{compiler.sdk.path}/include/freertos" "-I{compiler.sdk.path}/include/log" "-I{compiler.sdk.path}/include/newlib" "-I{compiler.sdk.path}/include/nvs_flash" "-I{compiler.sdk.path}/include/spi_flash" "-I{compiler.sdk.path}/include/tcpip_adapter" "-I{compiler.sdk.path}/include/expat" "-I{compiler.sdk.path}/include/json" "-I{compiler.sdk.path}/include/mbedtls" "-I{compiler.sdk.path}/include/nghttp" "-I{compiler.sdk.path}/include/lwip" + +compiler.c.cmd=xtensa-esp32-elf-gcc +compiler.c.flags=-c {compiler.warning_flags} -Os -g3 -Wpointer-arith -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -ffunction-sections -fdata-sections -mlongcalls -nostdlib -MMD -std=gnu99 -fstrict-volatile-bitfields + +compiler.cpp.cmd=xtensa-esp32-elf-g++ +compiler.cpp.flags=-c {compiler.warning_flags} -Os -g3 -Wpointer-arith -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -fno-rtti -ffunction-sections -fdata-sections -mlongcalls -nostdlib -MMD -std=gnu++11 -fno-exceptions -fstrict-volatile-bitfields + +compiler.S.cmd=xtensa-esp32-elf-gcc +compiler.S.flags=-c -g3 -x assembler-with-cpp -MMD -mlongcalls + +compiler.c.elf.cmd=xtensa-esp32-elf-gcc +compiler.c.elf.flags="-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" -nostdlib -T esp32_out.ld -T esp32.common.ld -T esp32.rom.ld -T esp32.peripherals.ld -u call_user_start_cpu0 -Wl,--gc-sections -Wl,-static -Wl,--undefined=uxTopUsedPriority +compiler.c.elf.libs=-lgcc -lc -lm -lhal -lcore -lnet80211 -lphy -lrtc -lpp -lwpa -lsmartconfig -lbtdm_app -lbt -ldriver -lesp32 -lcrypto -lexpat -lfreertos -ljson -llog -llwip -lmbedtls -lnghttp -lnvs_flash -lspi_flash -ltcpip_adapter + +compiler.as.cmd=xtensa-esp32-elf-as + +compiler.ar.cmd=xtensa-esp32-elf-ar +compiler.ar.flags=cru + +compiler.elf2hex.cmd=esptool.py +compiler.elf2hex.flags= + +compiler.size.cmd=xtensa-esp32-elf-size + +compiler.python.cmd=python +compiler.python.cmd.windows=python.exe + +# This can be overriden in boards.txt +build.extra_flags=-DESP32 + +# These can be overridden in platform.local.txt +compiler.c.extra_flags= +compiler.c.elf.extra_flags= +compiler.S.extra_flags= +compiler.cpp.extra_flags= +compiler.ar.extra_flags= +compiler.objcopy.eep.extra_flags= +compiler.elf2hex.extra_flags= + +## Compile c files +recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.c.flags} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" + +## Compile c++ files +recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpreprocessor.flags} {compiler.cpp.flags} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" + +## Compile S files +recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.S.flags} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" + +## Create archives +recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{build.path}/arduino.ar" "{object_file}" + +## Combine gc-sections, archives, and objects +recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -Wl,--start-group {object_files} "{build.path}/arduino.ar" {compiler.c.elf.libs} -Wl,--end-group -o "{build.path}/{build.project_name}.elf" + +## Create eeprom +recipe.objcopy.eep.pattern= + +## Create hex +recipe.objcopy.hex.pattern="{compiler.python.cmd}" "{runtime.platform.path}/tools/esptool.py" --chip esp32 elf2image --flash_mode "{build.flash_mode}" --flash_freq "{build.flash_freq}" -o "{build.path}/{build.project_name}.bin" "{build.path}/{build.project_name}.elf" + +## Save hex +recipe.output.tmp_file={build.project_name}.bin +recipe.output.save_file={build.project_name}.{build.variant}.bin + +## Compute size +recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf" +recipe.size.regex=^(?:\.iram0\.text|\.dram0\.text|\.flash\.text|\.dram0\.data|\.flash\.rodata|)\s+([0-9]+).* +recipe.size.regex.data=^(?:\.dram0\.data|\.flash\.rodata|\.dram0\.bss)\s+([0-9]+).* + +# ------------------------------ + +tools.esptool.cmd=python +tools.esptool.cmd.windows=python.exe +tools.esptool.path={runtime.platform.path}/tools/esptool.py +tools.esptool.network_cmd=python +tools.esptool.network_cmd.windows=python.exe + +tools.esptool.upload.protocol=esp32 +tools.esptool.upload.params.verbose= +tools.esptool.upload.params.quiet= +tools.esptool.upload.pattern="{cmd}" "{path}" --chip esp32 --port "{serial.port}" --baud {upload.speed} write_flash -z --flash_freq {build.flash_freq} --flash_mode {build.flash_mode} 0x1000 "{runtime.platform.path}/tools/sdk/bin/bootloader.bin" 0x4000 "{runtime.platform.path}/tools/sdk/bin/partitions_singleapp.bin" 0x10000 "{build.path}/{build.project_name}.bin" diff --git a/programmers.txt b/programmers.txt new file mode 100644 index 00000000..e69de29b diff --git a/tools/esptool.py b/tools/esptool.py new file mode 100755 index 00000000..42033cee --- /dev/null +++ b/tools/esptool.py @@ -0,0 +1,1816 @@ +#!/usr/bin/env python +# NB: Before sending a PR to change the above line to '#!/usr/bin/env python2', please read https://github.com/themadinventor/esptool/issues/21 +# +# ESP8266 & ESP32 ROM Bootloader Utility +# https://github.com/themadinventor/esptool +# +# Copyright (C) 2014-2016 Fredrik Ahlberg, Angus Gratton, Espressif Systems (Shanghai) PTE LTD, other contributors as noted. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 51 Franklin +# Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import argparse +import hashlib +import inspect +import os +import serial +import struct +import sys +import time +import base64 +import zlib + +__version__ = "2.0-dev" + + +MAX_UINT32 = 0xffffffff +MAX_UINT24 = 0xffffff + + +def check_supported_function(func, check_func): + """ + Decorator implementation that wraps a check around an ESPLoader + bootloader function to check if it's supported. + + This is used to capture the multidimensional differences in + functionality between the ESP8266 & ESP32 ROM loaders, and the + software stub that runs on both. Not possible to do this cleanly + via inheritance alone. + """ + def inner(*args, **kwargs): + obj = args[0] + if check_func(obj): + return func(*args, **kwargs) + else: + raise NotImplementedInROMError(obj) + return inner + + +def stub_function_only(func): + """ Attribute for a function only supported in the software stub loader """ + return check_supported_function(func, lambda o: o.IS_STUB) + + +def stub_and_esp32_function_only(func): + """ Attribute for a function only supported by software stubs or ESP32 ROM """ + return check_supported_function(func, lambda o: o.IS_STUB or o.CHIP_NAME == "ESP32") + + +def esp8266_function_only(func): + """ Attribute for a function only supported on ESP8266 """ + return check_supported_function(func, lambda o: o.CHIP_NAME == "ESP8266") + + +class ESPLoader(object): + """ Base class providing access to ESP ROM & softtware stub bootloaders. + Subclasses provide ESP8266 & ESP32 specific functionality. + + Don't instantiate this base class directly, either instantiate a subclass or + call ESPLoader.detect_chip() which will interrogate the chip and return the + appropriate subclass instance. + + """ + CHIP_NAME = "Espressif device" + IS_STUB = False + + DEFAULT_PORT = "/dev/ttyUSB0" + + # Commands supported by ESP8266 ROM bootloader + ESP_FLASH_BEGIN = 0x02 + ESP_FLASH_DATA = 0x03 + ESP_FLASH_END = 0x04 + ESP_MEM_BEGIN = 0x05 + ESP_MEM_END = 0x06 + ESP_MEM_DATA = 0x07 + ESP_SYNC = 0x08 + ESP_WRITE_REG = 0x09 + ESP_READ_REG = 0x0a + + # Some comands supported by ESP32 ROM bootloader (or -8266 w/ stub) + ESP_SPI_SET_PARAMS = 0x0B + ESP_SPI_ATTACH = 0x0D + + ESP_CHANGE_BAUDRATE = 0x0F + ESP_FLASH_DEFL_BEGIN = 0x10 + ESP_FLASH_DEFL_DATA = 0x11 + ESP_FLASH_DEFL_END = 0x12 + ESP_SPI_FLASH_MD5 = 0x13 + + # Some commands supported by stub only + ESP_ERASE_FLASH = 0xD0 + ESP_ERASE_REGION = 0xD1 + ESP_READ_FLASH = 0xD2 + ESP_GET_FLASH_ID = 0xD3 + + # Maximum block sized for RAM and Flash writes, respectively. + ESP_RAM_BLOCK = 0x1800 + ESP_FLASH_BLOCK = 0x400 + + FLASH_WRITE_SIZE = ESP_FLASH_BLOCK + + # Default baudrate. The ROM auto-bauds, so we can use more or less whatever we want. + ESP_ROM_BAUD = 115200 + + # First byte of the application image + ESP_IMAGE_MAGIC = 0xe9 + + # Initial state for the checksum routine + ESP_CHECKSUM_MAGIC = 0xef + + # Flash sector size, minimum unit of erase. + ESP_FLASH_SECTOR = 0x1000 + + UART_DATA_REG_ADDR = 0x60000078 + + # SPI peripheral "command" bitmasks + SPI_CMD_READ_ID = 0x10000000 + + # Memory addresses + IROM_MAP_START = 0x40200000 + IROM_MAP_END = 0x40300000 + + # The number of bytes in the response that signify command status + STATUS_BYTES_LENGTH = 2 + + def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, do_connect=True): + """Base constructor for ESPLoader bootloader interaction + + Don't call this constructor, either instantiate ESP8266ROM + or ESP32ROM, or use ESPLoader.detect_chip(). + + This base class has all of the instance methods for bootloader + functionality supported across various chips & stub + loaders. Subclasses replace the functions they don't support + with ones which throw NotImplementedInROMError(). + + """ + if isinstance(port, serial.Serial): + self._port = port + else: + self._port = serial.Serial(port) + self._slip_reader = slip_reader(self._port) + # setting baud rate in a separate step is a workaround for + # CH341 driver on some Linux versions (this opens at 9600 then + # sets), shouldn't matter for other platforms/drivers. See + # https://github.com/themadinventor/esptool/issues/44#issuecomment-107094446 + self._port.baudrate = baud + if do_connect: + self.connect() + + @staticmethod + def detect_chip(port=DEFAULT_PORT, baud=ESP_ROM_BAUD): + """Use serial access to detect the chip type. + + We use the UART's datecode register for this, it's mapped at + the same address on ESP8266 & ESP32 so we can use one + memory read and compare to the datecode register for each chip + type. + + """ + detect_port = ESPLoader(port, baud, True) + sys.stdout.write('Detecting chip type... ') + date_reg = detect_port.read_reg(ESPLoader.UART_DATA_REG_ADDR) + + for cls in [ESP8266ROM, ESP32ROM]: + if date_reg == cls.DATE_REG_VALUE: + # don't connect a second time + inst = cls(detect_port._port, baud, False) + print '%s' % inst.CHIP_NAME + return inst + print '' + raise FatalError("Unexpected UART datecode value 0x%08x. Failed to autodetect chip type." % date_reg) + + """ Read a SLIP packet from the serial port """ + def read(self): + r = self._slip_reader.next() + return r + + """ Write bytes to the serial port while performing SLIP escaping """ + def write(self, packet): + buf = '\xc0' \ + + (packet.replace('\xdb','\xdb\xdd').replace('\xc0','\xdb\xdc')) \ + + '\xc0' + self._port.write(buf) + + """ Calculate checksum of a blob, as it is defined by the ROM """ + @staticmethod + def checksum(data, state=ESP_CHECKSUM_MAGIC): + for b in data: + state ^= ord(b) + return state + + """ Send a request and read the response """ + def command(self, op=None, data="", chk=0): + if op is not None: + pkt = struct.pack(' self.STATUS_BYTES_LENGTH: + return data[:-self.STATUS_BYTES_LENGTH] + else: # otherwise, just return the 'val' field which comes from the reply header (this is used by read_reg) + return val + + def flush_input(self): + self._port.flushInput() + self._slip_reader = slip_reader(self._port) + + def sync(self): + """ Perform a connection test """ + self.command(self.ESP_SYNC, '\x07\x07\x12\x20' + 32 * '\x55') + for i in xrange(7): + self.command() + + def connect(self): + """ Try connecting repeatedly until successful, or giving up """ + print 'Connecting...' + + for _ in xrange(4): + # issue reset-to-bootloader: + # RTS = either CH_PD or nRESET (both active low = chip in reset) + # DTR = GPIO0 (active low = boot to flasher) + self._port.setDTR(False) + self._port.setRTS(True) + time.sleep(0.05) + self._port.setDTR(True) + self._port.setRTS(False) + time.sleep(0.05) + self._port.setDTR(False) + + # worst-case latency timer should be 255ms (probably <20ms) + self._port.timeout = 0.3 + last_exception = None + for _ in xrange(4): + try: + self.flush_input() + self._port.flushOutput() + self.sync() + self._port.timeout = 5 + return + except FatalError as e: + last_exception = e + time.sleep(0.05) + raise FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_exception)) + + """ Read memory address in target """ + def read_reg(self, addr): + # we don't call check_command here because read_reg() function is called + # when detecting chip type, and the way we check for success (STATUS_BYTES_LENGTH) is different + # for different chip types (!) + val, data = self.command(self.ESP_READ_REG, struct.pack(' length: + raise FatalError('Read more than expected') + digest_frame = self.read() + if len(digest_frame) != 16: + raise FatalError('Expected digest, got: %s' % hexify(digest_frame)) + expected_digest = hexify(digest_frame).upper() + digest = hashlib.md5(data).hexdigest().upper() + if digest != expected_digest: + raise FatalError('Digest mismatch: expected %s, got %s' % (expected_digest, digest)) + return data + + def flash_spi_attach(self,is_hspi,is_legacy): + """Send SPI attach command to enable the SPI flash pins + + ESP8266 ROM does this when you send flash_begin, ESP32 ROM + has it as a SPI command. + """ + # last 3 bytes in ESP_SPI_ATTACH argument are reserved values + arg = struct.pack('> 24) | ((id1 & MAX_UINT24) << 8) + + def read_mac(self): + """ Read MAC from OTP ROM """ + mac0 = self.read_reg(self.ESP_OTP_MAC0) + mac1 = self.read_reg(self.ESP_OTP_MAC1) + mac3 = self.read_reg(self.ESP_OTP_MAC3) + if (mac3 != 0): + oui = ((mac3 >> 16) & 0xff, (mac3 >> 8) & 0xff, mac3 & 0xff) + elif ((mac1 >> 16) & 0xff) == 0: + oui = (0x18, 0xfe, 0x34) + elif ((mac1 >> 16) & 0xff) == 1: + oui = (0xac, 0xd0, 0x74) + else: + raise FatalError("Unknown OUI") + return oui + ((mac1 >> 8) & 0xff, mac1 & 0xff, (mac0 >> 24) & 0xff) + + def get_erase_size(self, offset, size): + """ Calculate an erase size given a specific size in bytes. + + Provides a workaround for the bootloader erase bug.""" + + sectors_per_block = 16 + sector_size = self.ESP_FLASH_SECTOR + num_sectors = (size + sector_size - 1) / sector_size + start_sector = offset / sector_size + + head_sectors = sectors_per_block - (start_sector % sectors_per_block) + if num_sectors < head_sectors: + head_sectors = num_sectors + + if num_sectors < 2 * head_sectors: + return (num_sectors + 1) / 2 * sector_size + else: + return (num_sectors - head_sectors) * sector_size + + +class ESP8266StubLoader(ESP8266ROM): + """ Access class for ESP8266 stub loader, runs on top of ROM. + """ + FLASH_WRITE_SIZE = 8192 # matches MAX_WRITE_BLOCK in stub_loader.c + IS_STUB = True + + def __init__(self, rom_loader): + self._port = rom_loader._port + self.flush_input() # resets _slip_reader + +ESP8266ROM.STUB_CLASS = ESP8266StubLoader + + +class ESP32ROM(ESPLoader): + """Access class for ESP32 ROM bootloader + + """ + CHIP_NAME = "ESP32" + IS_STUB = False + + DATE_REG_VALUE = 0x15122500 + + IROM_MAP_START = 0x400d0000 + IROM_MAP_END = 0x40400000 + DROM_MAP_START = 0x3F400000 + DROM_MAP_END = 0x3F700000 + + # ESP32 uses a 4 byte status reply + STATUS_BYTES_LENGTH = 4 + + SPI_CMD_REG_ADDR = 0x60003000 + SPI_W0_REG_ADDR = 0x60003040 + + EFUSE_BASE = 0x6001a000 + + FLASH_SIZES = { + '1MB':0x00, + '2MB':0x10, + '4MB':0x20, + '8MB':0x30, + '16MB':0x40 + } + + def read_efuse(self, n): + """ Read the nth word of the ESP3x EFUSE region. """ + return self.read_reg(self.EFUSE_BASE + (4 * n)) + + def chip_id(self): + word16 = self.read_efuse(16) + word17 = self.read_efuse(17) + return ((word17 & MAX_UINT24) << 24) | (word16 >> 8) & MAX_UINT24 + + def read_mac(self): + """ Read MAC from EFUSE region """ + word16 = self.read_efuse(16) + word17 = self.read_efuse(17) + word18 = self.read_efuse(18) + word19 = self.read_efuse(19) + wifi_mac = (((word17 >> 16) & 0xff), ((word17 >> 8) & 0xff), ((word17 >> 0) & 0xff), + ((word16 >> 24) & 0xff), ((word16 >> 16) & 0xff), ((word16 >> 8) & 0xff)) + bt_mac = (((word19 >> 16) & 0xff), ((word19 >> 8) & 0xff), ((word19 >> 0) & 0xff), + ((word18 >> 24) & 0xff), ((word18 >> 16) & 0xff), ((word18 >> 8) & 0xff)) + return (wifi_mac,bt_mac) + + def get_erase_size(self, offset, size): + return size + + +class ESP32StubLoader(ESP32ROM): + """ Access class for ESP32 stub loader, runs on top of ROM. + """ + FLASH_WRITE_SIZE = 8192 # matches MAX_WRITE_BLOCK in stub_loader.c + STATUS_BYTES_LENGTH = 2 # same as ESP8266, different to ESP32 ROM + IS_STUB = True + + def __init__(self, rom_loader): + self._port = rom_loader._port + self.flush_input() # resets _slip_reader + +ESP32ROM.STUB_CLASS = ESP32StubLoader + + +class ESPBOOTLOADER(object): + """ These are constants related to software ESP bootloader, working with 'v2' image files """ + + # First byte of the "v2" application image + IMAGE_V2_MAGIC = 0xea + + # First 'segment' value in a "v2" application image, appears to be a constant version value? + IMAGE_V2_SEGMENT = 4 + + +def LoadFirmwareImage(chip, filename): + """ Load a firmware image. Can be for ESP8266 or ESP32. ESP8266 images will be examined to determine if they are + original ROM firmware images (ESPFirmwareImage) or "v2" OTA bootloader images. + + Returns a BaseFirmwareImage subclass, either ESPFirmwareImage (v1) or OTAFirmwareImage (v2). + """ + with open(filename, 'rb') as f: + if chip == 'esp32': + return ESP32FirmwareImage(f) + else: # Otherwise, ESP8266 so look at magic to determine the image type + magic = ord(f.read(1)) + f.seek(0) + if magic == ESPLoader.ESP_IMAGE_MAGIC: + return ESPFirmwareImage(f) + elif magic == ESPBOOTLOADER.IMAGE_V2_MAGIC: + return OTAFirmwareImage(f) + else: + raise FatalError("Invalid image magic number: %d" % magic) + + +class ImageSegment(object): + """ Wrapper class for a segment in an ESP image + (very similar to a section in an ELFImage also) """ + def __init__(self, addr, data, file_offs=None): + self.addr = addr + # pad all ImageSegments to at least 4 bytes length + pad_mod = len(data) % 4 + if pad_mod != 0: + data += "\x00" * (4 - pad_mod) + self.data = data + self.file_offs = file_offs + + def copy_with_new_addr(self, new_addr): + """ Return a new ImageSegment with same data, but mapped at + a new address. """ + return ImageSegment(new_addr, self.data, 0) + + def __repr__(self): + r = "len 0x%05x load 0x%08x" % (len(self.data), self.addr) + if self.file_offs is not None: + r += " file_offs 0x%08x" % (self.file_offs) + return r + + +class ELFSection(ImageSegment): + """ Wrapper class for a section in an ELF image, has a section + name as well as the common properties of an ImageSegment. """ + def __init__(self, name, addr, data): + super(ELFSection, self).__init__(addr, data) + self.name = name + + def __repr__(self): + return "%s %s" % (self.name, super(ELFSection, self).__repr__()) + + +class BaseFirmwareImage(object): + SEG_HEADER_LEN = 8 + + """ Base class with common firmware image functions """ + def __init__(self): + self.segments = [] + self.entrypoint = 0 + + def load_common_header(self, load_file, expected_magic): + (magic, segments, self.flash_mode, self.flash_size_freq, self.entrypoint) = struct.unpack(' 16: + raise FatalError('Invalid firmware image magic=%d segments=%d' % (magic, segments)) + return segments + + def load_segment(self, f, is_irom_segment=False): + """ Load the next segment from the image file """ + file_offs = f.tell() + (offset, size) = struct.unpack(' 0x40200000 or offset < 0x3ffe0000 or size > 65536: + print('WARNING: Suspicious segment 0x%x, length %d' % (offset, size)) + segment_data = f.read(size) + if len(segment_data) < size: + raise FatalError('End of file reading segment 0x%x, length %d (actual length %d)' % (offset, size, len(segment_data))) + segment = ImageSegment(offset, segment_data, file_offs) + self.segments.append(segment) + return segment + + def save_segment(self, f, segment, checksum=None): + """ Save the next segment to the image file, return next checksum value if provided """ + f.write(struct.pack(' 0: + if len(irom_segments) != 1: + raise FatalError('Found %d segments that could be irom0. Bad ELF file?' % len(irom_segments)) + return irom_segments[0] + return None + + def get_non_irom_segments(self): + irom_segment = self.get_irom_segment() + return [s for s in self.segments if s != irom_segment] + + +class ESPFirmwareImage(BaseFirmwareImage): + """ 'Version 1' firmware image, segments loaded directly by the ROM bootloader. """ + def __init__(self, load_file=None): + super(ESPFirmwareImage, self).__init__() + self.flash_mode = 0 + self.flash_size_freq = 0 + self.version = 1 + + if load_file is not None: + segments = self.load_common_header(load_file, ESPLoader.ESP_IMAGE_MAGIC) + + for _ in xrange(segments): + self.load_segment(load_file) + self.checksum = self.read_checksum(load_file) + + def default_output_name(self, input_file): + """ Derive a default output name from the ELF name. """ + return input_file + '-' + + def save(self, basename): + """ Save a set of V1 images for flashing. Parameter is a base filename. """ + # IROM data goes in its own plain binary file + irom_segment = self.get_irom_segment() + if irom_segment is not None: + with open("%s0x%05x.bin" % (basename, irom_segment.addr), "wb") as f: + f.write(irom_segment.data) + + # everything but IROM goes at 0x00000 in an image file + normal_segments = self.get_non_irom_segments() + with open("%s0x00000.bin" % basename, 'wb') as f: + self.write_common_header(f, normal_segments) + checksum = ESPLoader.ESP_CHECKSUM_MAGIC + for segment in self.segments: + checksum = self.save_segment(f, segment, checksum) + self.append_checksum(f, checksum) + + +class OTAFirmwareImage(BaseFirmwareImage): + """ 'Version 2' firmware image, segments loaded by software bootloader stub + (ie Espressif bootloader or rboot) + """ + def __init__(self, load_file=None): + super(OTAFirmwareImage, self).__init__() + self.version = 2 + if load_file is not None: + segments = self.load_common_header(load_file, ESPBOOTLOADER.IMAGE_V2_MAGIC) + if segments != ESPBOOTLOADER.IMAGE_V2_SEGMENT: + # segment count is not really segment count here, but we expect to see '4' + print 'Warning: V2 header has unexpected "segment" count %d (usually 4)' % segments + + # irom segment comes before the second header + # + # the file is saved in the image with a zero load address + # in the header, so we need to calculate a load address + irom_offs = load_file.tell() + irom_segment = self.load_segment(load_file, True) + irom_segment.addr = irom_offs + self.IROM_MAP_START + + first_flash_mode = self.flash_mode + first_flash_size_freq = self.flash_size_freq + first_entrypoint = self.entrypoint + # load the second header + self.load_common_header(load_file, ESPLoader.ESP_IMAGE_MAGIC) + (magic, segments, self.flash_mode, self.flash_size_freq, self.entrypoint) = struct.unpack(' 0: + null = ImageSegment(0, '\x00' * pad_len, f.tell()) + checksum = self.save_segment(f, null, checksum) + padding_segments += 1 + # verify that after the 8 byte header is added, were are at the correct offset relative to the segment's vaddr + assert (f.tell() + 8) % IROM_ALIGN == segment.addr % IROM_ALIGN + checksum = self.save_segment(f, segment, checksum) + self.append_checksum(f, checksum) + # kinda hacky: go back to the initial header and write the new segment count + # that includes padding segments. Luckily(?) this header is not checksummed + f.seek(1) + f.write(chr(len(self.segments) + padding_segments)) + + +class ELFFile(object): + SEC_TYPE_PROGBITS = 0x01 + SEC_TYPE_STRTAB = 0x03 + + def __init__(self, name): + # Load sections from the ELF file + self.name = name + with open(self.name, 'rb') as f: + self._read_elf_file(f) + + def get_section(self, section_name): + for s in self.sections: + if s.name == section_name: + return s + raise ValueError("No section %s in ELF file" % section_name) + + def _read_elf_file(self, f): + # read the ELF file header + LEN_FILE_HEADER = 0x34 + try: + (ident,_type,machine,_version, + self.entrypoint,_phoff,shoff,_flags, + _ehsize, _phentsize,_phnum,_shentsize, + _shnum,shstrndx) = struct.unpack("<16sHHLLLLLHHHHHH", f.read(LEN_FILE_HEADER)) + except struct.error as e: + raise FatalError("Failed to read a valid ELF header from %s: %s" % (self.name, e)) + + if ident[0] != '\x7f' or ident[1:4] != 'ELF': + raise FatalError("%s has invalid ELF magic header" % self.name) + if machine != 0x5e: + raise FatalError("%s does not appear to be an Xtensa ELF file. e_machine=%04x" % (self.name, machine)) + self._read_sections(f, shoff, shstrndx) + + def _read_sections(self, f, section_header_offs, shstrndx): + f.seek(section_header_offs) + section_header = f.read() + LEN_SEC_HEADER = 0x28 + if len(section_header) == 0: + raise FatalError("No section header found at offset %04x in ELF file." % section_header_offs) + if len(section_header) % LEN_SEC_HEADER != 0: + print 'WARNING: Unexpected ELF section header length %04x is not mod-%02x' % (len(section_header),LEN_SEC_HEADER) + + # walk through the section header and extract all sections + section_header_offsets = range(0, len(section_header), LEN_SEC_HEADER) + + def read_section_header(offs): + name_offs,sec_type,_flags,lma,sec_offs,size = struct.unpack_from(", ) or a single +# argument. + + +def load_ram(esp, args): + image = LoadFirmwareImage(esp, args.filename) + + print 'RAM boot...' + for (offset, size, data) in image.segments: + print 'Downloading %d bytes at %08x...' % (size, offset), + sys.stdout.flush() + esp.mem_begin(size, div_roundup(size, esp.ESP_RAM_BLOCK), esp.ESP_RAM_BLOCK, offset) + + seq = 0 + while len(data) > 0: + esp.mem_block(data[0:esp.ESP_RAM_BLOCK], seq) + data = data[esp.ESP_RAM_BLOCK:] + seq += 1 + print 'done!' + + print 'All segments done, executing at %08x' % image.entrypoint + esp.mem_finish(image.entrypoint) + + +def read_mem(esp, args): + print '0x%08x = 0x%08x' % (args.address, esp.read_reg(args.address)) + + +def write_mem(esp, args): + esp.write_reg(args.address, args.value, args.mask, 0) + print 'Wrote %08x, mask %08x to %08x' % (args.value, args.mask, args.address) + + +def dump_mem(esp, args): + f = file(args.filename, 'wb') + for i in xrange(args.size / 4): + d = esp.read_reg(args.address + (i * 4)) + f.write(struct.pack(' flash_end: + raise FatalError("File %s (length %d) at offset %d will not fit in %d bytes of flash." + + "Use --flash-size argument, or change flashing address." + % (argfile.name, argfile.tell(), address, flash_end)) + argfile.seek(0) + + for address, argfile in args.addr_filename: + print 'Erasing flash...' + if args.compress: + uncimage = argfile.read() + calcmd5 = hashlib.md5(uncimage).hexdigest() + uncsize = len(uncimage) + image = zlib.compress(uncimage, 9) + blocks = div_roundup(len(image), esp.FLASH_WRITE_SIZE) + esp.flash_defl_begin(len(uncimage),len(image), address) + else: + image = argfile.read() + calcmd5 = hashlib.md5(image).hexdigest() + uncsize = len(image) + blocks = div_roundup(len(image), esp.FLASH_WRITE_SIZE) + esp.flash_begin(blocks * esp.FLASH_WRITE_SIZE, address) + argfile.seek(0) # in case we need it again + seq = 0 + written = 0 + t = time.time() + header_block = None + while len(image) > 0: + print '\rWriting at 0x%08x... (%d %%)' % (address + seq * esp.FLASH_WRITE_SIZE, 100 * (seq + 1) / blocks), + sys.stdout.flush() + block = image[0:esp.FLASH_WRITE_SIZE] + if args.compress: + esp.flash_defl_block(block, seq) + else: + # Pad the last block + block = block + '\xff' * (esp.FLASH_WRITE_SIZE - len(block)) + # Fix sflash config data + if address == 0 and seq == 0 and block[0] == '\xe9': + block = block[0:2] + flash_info + block[4:] + header_block = block + esp.flash_block(block, seq) + image = image[esp.FLASH_WRITE_SIZE:] + seq += 1 + written += len(block) + t = time.time() - t + print '\rWrote %d bytes at 0x%08x in %.1f seconds (%.1f kbit/s)...' % (written, address, t, written / t * 8 / 1000) + res = esp.flash_md5sum(address, uncsize) + if res != calcmd5: + print 'File md5: %s' % calcmd5 + print 'Flash md5: %s' % res + raise FatalError("MD5 of file does not match data in flash!") + else: + print 'Hash of data verified.' + print '\nLeaving...' + if args.flash_mode == 'dio' and esp.CHIP_NAME == "ESP8266": + esp.flash_unlock_dio() + else: + esp.flash_begin(0, 0) + if args.compress: + esp.flash_defl_finish(False) + else: + esp.flash_finish(False) + if args.verify: + print 'Verifying just-written flash...' + verify_flash(esp, args, header_block) + + +def image_info(args): + image = LoadFirmwareImage(args.chip, args.filename) + print('Image version: %d' % image.version) + print('Entry point: %08x' % image.entrypoint) if image.entrypoint != 0 else 'Entry point not set' + print '%d segments' % len(image.segments) + print + checksum = ESPLoader.ESP_CHECKSUM_MAGIC + idx = 0 + for seg in image.segments: + idx += 1 + print 'Segment %d: %r' % (idx, seg) + checksum = ESPLoader.checksum(seg.data, checksum) + print + print 'Checksum: %02x (%s)' % (image.checksum, 'valid' if image.checksum == checksum else 'invalid!') + + +def make_image(args): + image = ESPFirmwareImage() + if len(args.segfile) == 0: + raise FatalError('No segments specified') + if len(args.segfile) != len(args.segaddr): + raise FatalError('Number of specified files does not match number of specified addresses') + for (seg, addr) in zip(args.segfile, args.segaddr): + data = file(seg, 'rb').read() + image.segments.append(ImageSegment(addr, data)) + image.entrypoint = args.entrypoint + image.save(args.output) + + +def elf2image(args): + e = ELFFile(args.input) + if args.chip == 'auto': # Default to ESP8266 for backwards compatibility + print "Creating image for ESP8266..." + args.chip == 'esp8266' + + if args.chip == 'esp32': + image = ESP32FirmwareImage() + elif args.version == '1': # ESP8266 + image = ESPFirmwareImage() + else: + image = OTAFirmwareImage() + image.entrypoint = e.entrypoint + image.segments = e.sections # ELFSection is a subclass of ImageSegment + image.flash_mode = {'qio':0, 'qout':1, 'dio':2, 'dout': 3}[args.flash_mode] + image.flash_size_freq = ESP8266ROM.FLASH_SIZES[args.flash_size] + image.flash_size_freq += {'40m':0, '26m':1, '20m':2, '80m': 0xf}[args.flash_freq] + + if args.output is None: + args.output = image.default_output_name(args.input) + image.save(args.output) + + +def read_mac(esp, args): + mac = esp.read_mac() + print 'MAC: %s' % ':'.join(map(lambda x: '%02x' % x, mac)) + + +def chip_id(esp, args): + chipid = esp.chip_id() + print 'Chip ID: 0x%08x' % chipid + + +def erase_flash(esp, args): + print 'Erasing flash (this may take a while)...' + t = time.time() + esp.erase_flash() + print 'Chip erase completed successfully in %.1fs' % (time.time() - t) + + +def erase_region(esp, args): + print 'Erasing region (may be slow depending on size)...' + esp.erase_region(args.address, args.size) + print 'Erase completed successfully.' + + +def run(esp, args): + esp.run() + + +def flash_id(esp, args): + flash_id = esp.flash_id() + print 'Manufacturer: %02x' % (flash_id & 0xff) + print 'Device: %02x%02x' % ((flash_id >> 8) & 0xff, (flash_id >> 16) & 0xff) + + +def read_flash(esp, args): + if args.no_progress: + flash_progress = None + else: + def flash_progress(progress, length): + msg = '%d (%d %%)' % (progress, progress * 100.0 / length) + padding = '\b' * len(msg) + if progress == length: + padding = '\n' + sys.stdout.write(msg + padding) + sys.stdout.flush() + t = time.time() + data = esp.read_flash(args.address, args.size, flash_progress) + t = time.time() - t + print ('\rRead %d bytes at 0x%x in %.1f seconds (%.1f kbit/s)...' + % (len(data), args.address, t, len(data) / t * 8 / 1000)) + file(args.filename, 'wb').write(data) + + +def verify_flash(esp, args, flash_params=None): + differences = False + for address, argfile in args.addr_filename: + image = argfile.read() + argfile.seek(0) # rewind in case we need it again + if address == 0 and image[0] == '\xe9' and flash_params is not None: + image = image[0:2] + flash_params + image[4:] + image_size = len(image) + print 'Verifying 0x%x (%d) bytes @ 0x%08x in flash against %s...' % (image_size, image_size, address, argfile.name) + # Try digest first, only read if there are differences. + digest = esp.flash_md5sum(address, image_size) + expected_digest = hashlib.md5(image).hexdigest() + if digest == expected_digest: + print '-- verify OK (digest matched)' + continue + else: + differences = True + if getattr(args, 'diff', 'no') != 'yes': + print '-- verify FAILED (digest mismatch)' + continue + + flash = esp.read_flash(address, image_size) + assert flash != image + diff = [i for i in xrange(image_size) if flash[i] != image[i]] + print '-- verify FAILED: %d differences, first @ 0x%08x' % (len(diff), address + diff[0]) + for d in diff: + print ' %08x %02x %02x' % (address + d, ord(flash[d]), ord(image[d])) + if differences: + raise FatalError("Verify failed.") + + +def version(args): + print __version__ + +# +# End of operations functions +# + + +def main(): + parser = argparse.ArgumentParser(description='esptool.py v%s - ESP8266 ROM Bootloader Utility' % __version__, prog='esptool') + + parser.add_argument('--chip', '-c', + help='Target chip type', + choices=['auto', 'esp8266', 'esp31', 'esp32'], + default=os.environ.get('ESPTOOL_CHIP', 'auto')) + + parser.add_argument( + '--port', '-p', + help='Serial port device', + default=os.environ.get('ESPTOOL_PORT', ESPLoader.DEFAULT_PORT)) + + parser.add_argument( + '--baud', '-b', + help='Serial port baud rate used when flashing/reading', + type=arg_auto_int, + default=os.environ.get('ESPTOOL_BAUD', ESPLoader.ESP_ROM_BAUD)) + + parser.add_argument( + '--no-stub', + help="Disable launching the flasher stub, only talk to ROM bootloader. Some features will not be available.", + action='store_true') + + subparsers = parser.add_subparsers( + dest='operation', + help='Run esptool {command} -h for additional help') + + parser_load_ram = subparsers.add_parser( + 'load_ram', + help='Download an image to RAM and execute') + parser_load_ram.add_argument('filename', help='Firmware image') + + parser_dump_mem = subparsers.add_parser( + 'dump_mem', + help='Dump arbitrary memory to disk') + parser_dump_mem.add_argument('address', help='Base address', type=arg_auto_int) + parser_dump_mem.add_argument('size', help='Size of region to dump', type=arg_auto_int) + parser_dump_mem.add_argument('filename', help='Name of binary dump') + + parser_read_mem = subparsers.add_parser( + 'read_mem', + help='Read arbitrary memory location') + parser_read_mem.add_argument('address', help='Address to read', type=arg_auto_int) + + parser_write_mem = subparsers.add_parser( + 'write_mem', + help='Read-modify-write to arbitrary memory location') + parser_write_mem.add_argument('address', help='Address to write', type=arg_auto_int) + parser_write_mem.add_argument('value', help='Value', type=arg_auto_int) + parser_write_mem.add_argument('mask', help='Mask of bits to write', type=arg_auto_int) + + def add_spi_flash_subparsers(parent): + """ Add common parser arguments for SPI flash properties """ + parent.add_argument('--flash_freq', '-ff', help='SPI Flash frequency', + choices=['40m', '26m', '20m', '80m'], + default=os.environ.get('ESPTOOL_FF', '40m')) + parent.add_argument('--flash_mode', '-fm', help='SPI Flash mode', + choices=['qio', 'qout', 'dio', 'dout'], + default=os.environ.get('ESPTOOL_FM', 'qio')) + parent.add_argument('--flash_size', '-fs', help='SPI Flash size in MegaBytes (1MB, 2MB, 4MB, 8MB, 16M)' + ' plus ESP8266-only (256KB, 512KB, 2MB-c1, 4MB-c1, 4MB-2)', + action=FlashSizeAction, + default=os.environ.get('ESPTOOL_FS', '1MB')) + parent.add_argument('--ucIsHspi', '-ih', help='Config SPI PORT/PINS (Espressif internal feature)',action='store_true') + parent.add_argument('--ucIsLegacy', '-il', help='Config SPI LEGACY (Espressif internal feature)',action='store_true') + + parser_write_flash = subparsers.add_parser( + 'write_flash', + help='Write a binary blob to flash') + parser_write_flash.add_argument('addr_filename', metavar='
', help='Address followed by binary filename, separated by space', + action=AddrFilenamePairAction) + add_spi_flash_subparsers(parser_write_flash) + parser_write_flash.add_argument('--no-progress', '-p', help='Suppress progress output', action="store_true") + parser_write_flash.add_argument('--verify', help='Verify just-written data (only necessary if very cautious, data is already CRCed', action='store_true') + parser_write_flash.add_argument('--compress', '-z', help='Compress data in transfer',action="store_true") + + subparsers.add_parser( + 'run', + help='Run application code in flash') + + parser_image_info = subparsers.add_parser( + 'image_info', + help='Dump headers from an application image') + parser_image_info.add_argument('filename', help='Image file to parse') + + parser_make_image = subparsers.add_parser( + 'make_image', + help='Create an application image from binary files') + parser_make_image.add_argument('output', help='Output image file') + parser_make_image.add_argument('--segfile', '-f', action='append', help='Segment input file') + parser_make_image.add_argument('--segaddr', '-a', action='append', help='Segment base address', type=arg_auto_int) + parser_make_image.add_argument('--entrypoint', '-e', help='Address of entry point', type=arg_auto_int, default=0) + + parser_elf2image = subparsers.add_parser( + 'elf2image', + help='Create an application image from ELF file') + parser_elf2image.add_argument('input', help='Input ELF file') + parser_elf2image.add_argument('--output', '-o', help='Output filename prefix (for version 1 image), or filename (for version 2 single image)', type=str) + parser_elf2image.add_argument('--version', '-e', help='Output image version', choices=['1','2'], default='1') + add_spi_flash_subparsers(parser_elf2image) + + subparsers.add_parser( + 'read_mac', + help='Read MAC address from OTP ROM') + + subparsers.add_parser( + 'chip_id', + help='Read Chip ID from OTP ROM') + + subparsers.add_parser( + 'flash_id', + help='Read SPI flash manufacturer and device ID') + + parser_read_flash = subparsers.add_parser( + 'read_flash', + help='Read SPI flash content') + parser_read_flash.add_argument('address', help='Start address', type=arg_auto_int) + parser_read_flash.add_argument('size', help='Size of region to dump', type=arg_auto_int) + parser_read_flash.add_argument('filename', help='Name of binary dump') + parser_read_flash.add_argument('--no-progress', '-p', help='Suppress progress output', action="store_true") + + parser_verify_flash = subparsers.add_parser( + 'verify_flash', + help='Verify a binary blob against flash') + parser_verify_flash.add_argument('addr_filename', help='Address and binary file to verify there, separated by space', + action=AddrFilenamePairAction) + parser_verify_flash.add_argument('--diff', '-d', help='Show differences', + choices=['no', 'yes'], default='no') + + subparsers.add_parser( + 'erase_flash', + help='Perform Chip Erase on SPI flash') + + parser_erase_region = subparsers.add_parser( + 'erase_region', + help='Erase a region of the flash') + parser_erase_region.add_argument('address', help='Start address (must be multiple of 4096)', type=arg_auto_int) + parser_erase_region.add_argument('size', help='Size of region to erase (must be multiple of 4096)', type=arg_auto_int) + + subparsers.add_parser( + 'version', help='Print esptool version') + + # internal sanity check - every operation matches a module function of the same name + for operation in subparsers.choices.keys(): + assert operation in globals(), "%s should be a module function" % operation + + args = parser.parse_args() + + print 'esptool.py v%s' % __version__ + + # operation function can take 1 arg (args), 2 args (esp, arg) + # or be a member function of the ESPLoader class. + + operation_func = globals()[args.operation] + operation_args,_,_,_ = inspect.getargspec(operation_func) + if operation_args[0] == 'esp': # operation function takes an ESPLoader connection object + initial_baud = min(ESPLoader.ESP_ROM_BAUD, args.baud) # don't sync faster than the default baud rate + chip_constructor_fun = { + 'auto': ESPLoader.detect_chip, + 'esp8266': ESP8266ROM, + 'esp32': ESP32ROM, + }[args.chip] + esp = chip_constructor_fun(args.port, initial_baud) + + if not args.no_stub: + esp = esp.run_stub() + + if args.baud > initial_baud: + esp.change_baud(args.baud) + # TODO: handle a NotImplementedInROMError + + # override common SPI flash parameter stuff as required + if hasattr(args, "ucIsHspi"): + print "Attaching SPI flash..." + esp.flash_spi_attach(args.ucIsHspi,args.ucIsLegacy) + if hasattr(args, "flash_size"): + print "Configuring flash size..." + esp.flash_set_parameters(flash_size_bytes(args.flash_size)) + + operation_func(esp, args) + else: + operation_func(args) + + +class FlashSizeAction(argparse.Action): + """ Custom flash size parser class to support backwards compatibility with megabit size arguments. + + (At next major relase, remove deprecated sizes and this can become a 'normal' choices= argument again.) + """ + def __init__(self, option_strings, dest, nargs=1, **kwargs): + super(FlashSizeAction, self).__init__(option_strings, dest, nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + try: + value = { + '2m': '256KB', + '4m': '512KB', + '8m': '1MB', + '16m': '2MB', + '32m': '4MB', + '16m-c1': '2MB-c1', + '32m-c1': '4MB-c1', + '32m-c2': '4MB-c2' + }[values[0]] + print("WARNING: Flash size arguments in megabits like '%s' are deprecated." % (values[0])) + print("Please use the equivalent size '%s'." % (value)) + print("Megabit arguments may be removed in a future release.") + except KeyError: + value = values[0] + + known_sizes = dict(ESP8266ROM.FLASH_SIZES) + known_sizes.update(ESP32ROM.FLASH_SIZES) + if value not in known_sizes: + raise argparse.ArgumentError(self, '%s is not a known flash size. Known sizes: %s' % (value, ", ".join(known_sizes.keys()))) + setattr(namespace, self.dest, value) + + +class AddrFilenamePairAction(argparse.Action): + """ Custom parser class for the address/filename pairs passed as arguments """ + def __init__(self, option_strings, dest, nargs='+', **kwargs): + super(AddrFilenamePairAction, self).__init__(option_strings, dest, nargs, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + # validate pair arguments + pairs = [] + for i in range(0,len(values),2): + try: + address = int(values[i],0) + except ValueError as e: + raise argparse.ArgumentError(self,'Address "%s" must be a number' % values[i]) + try: + argfile = open(values[i + 1], 'rb') + except IOError as e: + raise argparse.ArgumentError(self, e) + except IndexError: + raise argparse.ArgumentError(self,'Must be pairs of an address and the binary filename to write there') + pairs.append((address, argfile)) + setattr(namespace, self.dest, pairs) + +# Binary stub code (see flasher_stub dir for source & details) +ESP8266ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" +eNrFPHl/1MbZX0VaG18YmJG00shAsl7McgR+NRAc0nfTWBpJIRSovXELobSf/dVzaUbaXRxy9Y+1NdJojue+Rv/evqjfX2wfBNvz942Zv1dR+1On8/daeQ211JCf0e17tv018/dWBXB3p/0TB8HmyRRuw/McLg7b\ +P0Wv4y50DNtbWe/2A5qLW/ehdXLR6wHrjNtfO6+OcBlJsKHmi7aTGqxPu2uj+tdN/aXfeUJTyI+G9QECa9I0hc1DbtCOLvTOo7ZH+rTtm7a/sdurbtsNjDFuX6kTAUl/y3lvy4iGk5+gx86j9nYBS2nm2xvtv0y2\ +3YKzrnipKcND7ewHQXJCEzY1dCl5FRbGfLHfTl0jtibP25tawV+AkfTjFXwLA7a3q2QJM3EPMzFhxjwK8H7+yOwfjHb3mTCsCR3c9DKCjFyf8grVEom1jTz5O8wByLJX8WoSyONHX/Ej7b8hU9bKo64qf9L+cThr\ +yVJ3e3HEb/NifnHevpu34LPtjaqahAzRxutfc/8artUFIPoL2BJguREsqyXGiIKg7WvGcBPI82PbvQVdnjKlxR2G2o4wezzp3n+6EbQspePpBGi1RY0uq9NTuuQu5bPpw7tda3QEfyN8B9aFe8DNJvOW3/PYASDa\ +D9oeFRN/lcFToJC2Q+qYott9Fb3ecNO8Dqgb8Yp3f6P/SkDE65H6aD5vt6Ra6qvrE/gD+Jq1nZEeYUUx07g595ElDGNaXFbmCaAD5AsQHSE/IGJTN5m1HfeOiKHaGS40CYimkt0JDUkfyx2KYQcm8PW07UmLC808\ +bIF7c5QFd92sIjAQUbQy6WZ4er1ufRV1qJvPXt9gjSTRqhxRDnCxMHR0AGibOcTizIo5FZjDMoSAoJvSIx4gYRBJUcgyAy+AoA2R1eWgqxVxI69lJEBs2TMqnHiv7HDzCLZrtFC3MPc+vWZWweycaapHRK4D4kuU\ +g3p/H4nr8J8sY32UI0QBnIm6dZhvdlpwNzkQEPJPj4N9EDX510+RXXePGOvjlUi97cMiUa2oNfHlklZA212/8BtnfqO9bkGTG2Ec+xVeJd496JTn3AApKqhfQh1KURC0IFJRAueKxYoiBYabqWjVhOl4/f4bnxvS\ ++QVLloogaVvCKxtGL9xrgAhqgJh+DCBRPZnsDYsatVvHbR5CPQ6Yv6rld6qCxFWliAusOnkETA1yFlceuW3pYsQDLRFdJ5ZZA8bcG+iWphVCTnvMbwnwVU3vAqwBqo6CPyUVfaJ46eP+wm+89xsf+yRiVL+dD9tG\ +GGVSiQgu3D2mGjukGmB23tEvIB9dNGBCpqFHFH2oo5rokL5PEkgXMenzgheLZJg8ZbHWRK+hzzrJGhKNwc0a6C2iQU36CJ4ysuDVcuWrJZvCNWrVvScw1dG3ZGra9JZ0LYiHEDpF85K0BOyiSmlEELJl7dF6DVMi\ +4T1xerzd6o4Q1fOfQc/0maGMhmssiLJ54vc0sbEl7yuZviaTFtS9Rpuz3Uw1FkLVuB+YKbkNk1ggY92RcX/2Yokb2qUXbHK6VTx/QQqyKmp4rrv7P8J9IJnBgkNntLQ0gFYXmDuAkBJetzjF2Q2hohj9iR4yHWfB\ +SHXOcLVu8mntVJBdBcay6lZlnJY3SB1PhBJYBRCC7lOXMgUNEHUE+hFkYfBcHX8PYM3YWqhhim45zcN0dIeld3lEOyDaRQOTDYoy3zoKQ9IYTXObJxfhZNIVBGvUCuEEWK0yj6UQmyuEpMjoxT68KTvS71hOuz0e\ +OsSSe4N0NN2EZ/cyT+UpFWywqMlKD1uI0pkT1SBf8l8lHB89HJiMzg5hu6ipPcnESowcCG3DrztvYw+uDsg/PGcujVkW2UMmCe3L4rvCkTv7YAePyHkBaBfWeZM5dSGc1OqLwFdVq9SbsZ3BEO/O5/xmC429a7tw\ +vXOLgVGhmc4CJr/F0HEQW6FE2JH+y/3DB2D1dZ4ac4ZGc2Gla6edSdX526hFgmW7ZdiJOk764Ypt/3lrk+mcAO6tql1IUbLnX/QW64IDwa43b4tTgxj/8oUXNCiUvJqrt3IFRhON/VHuoZYs3XAFGmZqpQsciDWj\ +1DGwt9fQkTdE5wwXRq500y25xVmRd6GNbh3JG29FyluRck+S13xVwqrHA6PLB34PcB08sSFzG1/Xl7ZrvMCOk/1HnSUp3FYmD/jK2uud7UnWETYqQxbny+7efVJ0ZE8oUjRt49EW3zM8ZEimIYqCiASNVr4pMSog\ +tBIVd0CUF1NgggJ0dFSAox0VX3ZKny0PkVOktQU0GLj6apShMGCOM3YvFCmXEC+XBfu24PQ3qLcLz3qJJn3HWuZR9imr+5WGhdicBTu1fvhMJUE/1NSJ7esrfAzrZHqVrXi+8r7+P444IT2ArsS4S30ud2Tgkpco\ +Iy2pTu0UuoBhA0R+OozA2Ajud2ig21O7ISpkdAgkIN6Wnj65g3fGnSM4Fc1HZLvCwTaJ6EdLWhPM8oLVCkb1UC2OHNQ6fdmKSQjiCJobAgiId53dFduHp6nZkMubNesQpzWvhh3YQBHs01bB0EHne/acZSWuLouS\ +5o7ozO+YudNnwJzNhtx/DPfJdQcV9YTFY9r0KaSKKIIk/Qr3qOk9sqn3VomPNK3tVIZ+MQxrKOo1ziKyxLUd+UPyItGmo6HE9LGDVR0IiE58sSvTRP1BWYFsg5WTSZ94VZ/ZsduSrsj/083sOpt45ArIrwWcaeR9\ +7DJ70OemIlrGKph3YFnkbA3Z9G6nKSBcgAZbPeSdExpMsx4HkwOdBnWdehn7OMDw38kzmhKtbIhi6u+8aFTirz8IyBdfbSKelKSsavbD0XRQN8RJ+YJ2gs5ytHJ02sx/1+yESW24kxM2N4FvhL5qz6OruojbloO+\ +TW94Eq4WvwmGuC7TbrGgT7xekceD6VWP8RDr7Jk3gvsrvRAovL5B6h2n0+rkNkr/WU+YgX2GYhx1bUUm7qjjqTvXXJQtzxyiKGbeiDXNugg9hBnbP0tPDfsP8Ho2oFPqOOO94xiJBCliilgSVCIXEuzAMyaHWMfH\ +oKufogkLkzZslCpu+zKt4QHyeOYH1nhODAJX/hTevIW9YyLvWUaRwCqOprww85RxM3ZC0BDPd/uM+THjWhjadHTqca/ywccd6cWZM2dXUSH6Ayq4uEvuH4YOFKQBAGZmOTh5ZSgOTsgKrcpOmXVZoYydpQblliq3\ +ovm8mTrHyIr1kL50jpyO8TWJgVQRNsHRT6uhoR2SOMGbekntm/2QENc06vBwD/w1nQw7YcjyGnn90apQdszplJXmCKgHt6QRmi5owMRT+Ju8mM/viq83eyZ9V+tmTGkEcQB0GHMyANnYsGk2FuZ6zFihQSJ/kBFm\ +zkbBiB1/IWwcZ1RcZeoAqsAgaeKBEoOaNfujMFNJrE9RK1xTtWDcxqMtnjIKry6KK2SZs5DdNmIVEqPnEXaICiDOcSODh0Bhkt+ry/AqbOArls7FETkDeQKNfy+KXRxnf/It4PxVu4yGKBa8AZue0Ywmo+AFscQ5\ +3AST3KKPDzoGkKPHO6/LYmtRbMKNYu/WM2BIiEXgU3ijsZ4CZ1mWaFZJNUkJit0QOJDvw/92YujCxU7ynCx7+G+iHCg6J/1RZF/eREV6gVvbfMMXWwjIi0UI4tpugMzUKvwnDQ46N5f8cvKg/I7AhMFpkvcLAkXB\ +Aec6iUR8hf+gMcDtsw2uh8VJytY33JChbE8fRp4MZIHUG6bGDZC6lS1gq8hu7c08xSQLjWh7V44Nbq9021Pxt7ItI9qv203qdvPdYDd51M/0uYWjKgr/6vW32D98wbcwIwRedPSSxjHqCvDBq9G0UE+LpCxuAM5A\ +GDAZa4pIDE0jwvo0VE/DpAzxpTAWYreWaUxFQcNJBfuv4yARbjUByLn4+GvwBcrn4iycO+sbdcUYnVN0Vn7IPLyMJ5NTii4BCZ7yTmL1YwCAZdWp0yVshBBNqfbv5AT2GQVNKWsvP0ZIk96eIE53feeyR4RMt6MA\ +DWVFOLWIhjhEEyIvhX5pEIzgxh6SI8HqSHbHM7iwlJfrI4TydTURwQ1OTl0HpMWQGlMXM1fqHJYHyG/V3Wa7mzILwsNdUtaYN48POeAEaqc6ebqBinITBQPkDVogbKwFgiPwUbDDMUH77IQUYlPMHGt1mzZ/yKZt\ +b9MszmEbXDczkSoBIJyPsOzOGuTJwBhDpwbUA9AnZGIv2XzebX5XRrJS+pH8eZs3qQQdQ85pW/0NMNKrEWQ6azDHQL12aDYMDXMoG++HxNptH/5Swte8X8sZZ+SAxa6l90v2j5yYDrnEwEK0sqk7Ofdq9HAk0KEF\ +d8KRDWp1eISbih/GEGjXpoOwJPzs4UTGtDKmbF6AqdG5SGfOoJT4h9Ffo4YGEzMHNEAEzSiKJDQB3rmJNQEHvg2id0hZojOcs5oxnWvQg93+T5wX8GQ3EdsthPqVX05st2L2z+p0qMSGuuQPEzMS6UarW51dLEAj\ +dpTlyK1XvnDrzkxKfZZlyS4bN2MavN0zGGAlbv+uLPC5y1Ao6+rQAACVQlfmdBNjRdscMcoYIXVfg6HLQ7mDAYXvvnNr6HwOP5wvuNhHC0pJ4VL6s8tYrUAiVwrAiKVZoXYEEIg6S3DOEShWfYA/x3j5jtNk+j8w\ +LbRSaaXXJMNoQZZlpNQXaIcN9DpaAz29vggj0eekyUGrw7z2w/Ozhp1+mAuwhxIXYdey/GI2zKMMdoRhf946un7g5usu1xc6Mhv9AHyFbkXI2fpqCve6TNX4E5tS2YpNSYjP7L2T2G3lb7HdcbtvgFw25TnMtEvl\ +xe/IFG0gFGajM3IEhejyZDqVniPO8WHaiCKsEusGbNsLJowOUNP73avEeMbIEOBnQ5SzRmFjOPyZyXjN3v3FkXuZrXiMEaVvvSmsJGPBoq9ejUYdJ6J+v0zqLBk5GEGMT1hG/I/ETl2L2AmJkSQqomNvh4dMq5WU\ +NOGgYH/pyYzRDECr0SWV6FBHOH2T4T7S4zHomIdxsAWvQxgdq6gwqZ2CFNchpwklLBFPcQ9PIaM+JFWwzZtqReA/bYmxb1H7kaLWNM1/jVUGpt4JCQ4b/Y9skxxEanUIlGp9WmyBrDb3Ng+Z9ivfInUavDNXW4iH\ +ENrCnKqOs5TcTm1jxAmKGUjH6dajMIWPjrMFwAaZfHL2HrQ4FEhkL8Az0UfiAbXesvbxtShQyEt2YICzVkDPtw857VAREPZ2vRgUvlgMXww/YqAhxKFxcXvz7SkVXxh5a7w8XYta7UIhkPK0BgkGXoL8HCZNoh0i\ +ztbPvoYbur7spnlxOeWJy/n2XhY5v4hkE/KNmm4IyR9NLV22y7lOGhZQVycSF8hzXkBOlYAXj/1oAaDSYCRogZAnPEFctd3QBbUMgm3EISKaNt7l0rjiiBMstUQCQQykm0yplnRyrh/4woHQkHuRpFxtkHA3ih5o\ +LPWAi/RHV3u7SpVj1TygvMzZSIVFOzOHMJsDexkfnBAERJsSFlhQBTcvKJsWaQfcdoTCnGUQ+aeYWVRkUZhOw4ySxoswjYqdSRxMQ3N2jlxxtCjSaWHuEVlAmRKqXVhBlumz+4wRdYQB7yNoTiZ6Wuw4P5VqD7m+\ +EFJvhZYYrZq2O5r8BANMwx3Ybjz9BloLUu0NJtcyCnSZtCshgNegvDFPJu/wZUY0hlRxyhEOE0y7cF6toLSDYMLyByEStZvHENjZETDFgsJjTTO5h+CGuzh+lcwv2m1NKa6mOVFQJO26R1+jsPfmagEJwHvXAq+9\ +VPqwBTTIBtupu4xWXBaLMAPyMGeIAUp5KqOYa3NcxASp6Sym5HYePXPykmJjwi86dyHi0kpuPLy2tevuF5kk6NjqEFEecflZZ0HFkvPYo5UX6Uge7ZKmvJA4ACwrOeecV7m3cTaCtY48g5oYLkARlHIgTgcccWm7\ +ZVRapTxB1BEQIg2qGHO0vxGB6GhdcVvpyh8srYK2suuVJNqP7CM4VYwVi8A0VkHxvUoeIkPHBOrIxQuB8Gu2NXU5vdqaR2AQo4GXsEZKxS29tTmsArpMlVIZFqvS/E908x3iI895zTyPI1uKBk5dMaQpr/XmiF0V\ +ANtGmzjrRkATX6VViSbWmA4yhB8hojOfgiKfglBkqUAoCMWiyjWMjUyfzt96KlTCjFyPXSSMfl2KdZk4GgBEdDQwQiXRkbAI9wrPAanHXPmeujMoLXDBS2XPUiIWGOzvWXxeMjXHJHiMkVWo94NFgQFzgBNOOaFT\ +IhZu9pXplrBMxAUwymknUJSKo9Px6W7HMYbzSchJb+bkVa819SiZNPsrm1joBmCWDeY2xahLkXTm1qjg6N6XwgC/PMCl7caJBFyX7f+OAbLVDDBbQf3uCMMi3FxmAkeAyhBdvrsNk4RsjFlBZbvhTQZ2xoaDp8ze\ +wVjLoIBFvQOMv4Pt7b0LyYRq7OE1pOythyMpEusRBxkMRB88qpbzBDFYJjmePyBx9uro4CgiQOlLvfKCJaAz+VrDjRzzD41vwM2GXsM5qZSmnKKzptEr1NEeIRsTBjOsNPuB2UQyItFKqnoG6MUCGoiXNjaEd+1y\ +kgB3gfLFDlfeLjvEUB+VnOgpryj+EGMixHIOUPsnWGzf3B166SF7QeD2YbS9jHO6wmOQMB3YMxYNoBFFcQwW2OiBhqzTqTvMB/oCtVAstR5j2sHucSYKdUOk7l8kLeqOJam+yt2h0DtFRrGQHHITSU/Tlr+HpjVs\ +pjnR0WL5ck3L4hVL8RJKav5aTdv8Yk175fMEzU+c+OR0F1or1Sptm/6J2tb8/tqW5Uq0rHD59KNHQJN1BHTKBERHVIJdDYcSDeHgwiOB+CNpQuNhXpcbPQ2IEu70BzRuUfUegBlUNBPAEyarU0H/rKstGCrZpQhK\ +4MlLqsj4QezXrhjLy2pq61QMepVqbYi29APDxgv5IAohFZ2BM9r5fdqjBqlH2AjWUcQSVtizL1WHlUNOfRQHo8l6W7pFCnFMVxtnCQe63PxIjDK0dFTq8+DCoSwX5VJ8QJ5cZsw7Yv4IZrCs4o2X71yDHnJOVDww\ +23vsoIvpSliiSxlsBuu5q9P2kQ/S6RJIz6HIoHjIht3Uhyf5rXCb4huty/WAIStnUsXtxdAMAPjeR8/Oy3DjZwxF1N/qDN3KDzAbhCSaogP2h860dPblCANCFSoQBWF38AIaLLoZtTNGd/3q7h6YJwMwRyI8n7/x\ +CsQicnZ5JH31+ewH4Svi64bpBQJ5ZSFQxrDoHphGkGqGA4E1Za9e0Qmc1vALOe5YvirhVlqC0aRTMFNT4MfqiNchKQiFPG7WRYa5bIMYoGBdjnkV3XiMuNI2jAbi2sXGo6G47oyda5xeiwa2IotXEt5KRHl2m8CT\ +O9tQwjB5Typ7cWDy271Q8EUPgXJ01DcYCG+J2BcHA4PBpntoDtwUUY6+U6dM4Xi1wpBT3HeeJizTgQ6VVg/EKIjvsVEQ+UFGy2lc9Bom/wIsZM79NohiLlXuGQXdPvaYIZB0fPebtAKWXEC9v0UaVMmrI4zDdUGX\ +PBHZc0Tz6tJejQEFlJBK+waBUkuU5uvVNV74BnpHTG+G6a3APF5BxmNHZ/nvQGdDClOrjASEYOzYtxp/0kgofSPh8VojIcE7M0xXxIFarYvOMaqzlqimPlGR3BRLE/OQqpWcEuhzhkKu35L0QPpIO1dcgJM6eiAj\ +kelhrZF4R7CdrLAS1sjHQysSDJnh4AgzMNNi87CgB8DTBwkeG8RCLAzYYnoRbebpL6euVaJMSKuUdG3yB1DX50gxe5kUKylT7gTZQbNCfPnSrSy2zq8SMCFacPZPjnZE4f7hDt9X7P3kNGZrhBR76k7wjQi+47tB\ +Ge7uHd2D2ng8kBpxXg48sCbff5YjTPCgwa1nIdV4op62m3k5+/4Tll1N4dI98vAXkPLJFcZ+NNVDNuUZ5ib2NjyHntKoo7uSLSn2UL0KQ5elVCe1vkR3EmwqdlHJJnc1vevf19jU0oxuxngjuvkcOCQVn0dEHNN3\ +waU1Gv0PHJ/W1QCqxnJT40396jmb5dpJ6qJw9XAI1QKtnB22nDOuJEEr4u9Eoa546wv0utAv/IwA5z6tilyv2Y8cTVoX6Bn/cdVctRMSv6KSi/eXSH3N7c91Qfc5MURwgMog+yc6n4PiGsqRQr36ihqumdPon5PM\ +3yfl73zsw99zj6hDUEg293ki1kAIX0wYoWnJCZ5KTqj11xy+RCmykZeuxsesp2bQVUloaWoQaj+S3Q+iswRJUuUL4JmSQigQ66vxMdxQUFKtxx85jMQfn7HsmFj+XhDYr3ki2v6QP+RRRZLRL475uwEoEewx1AyM\ +qby2V1XLjr2Ldf2HLTVJVtufqb6Ww307gzILL6eIB5UK757+699IdgATdXchP1s8X/EgXvcgWfdgvO5Buu5BNniADYNWZxG/Q5P5bANKNoCUSoZ5oU57pWORL+ZHB91IewdiEb+DvTTyYYMCPz7SAh+DlJTWbz3G\ +G4SIp2RYcxKxh4sW7JrDFIWUOV3jdLnm45TFINQpqXnA1hnV7LA6vXFOGdmmaDH6HaMZpKq5TcRbql3qbDl11T//gd8Jg48GAFW32/2WyKdmAYdUmlDaSQ5sKSnvRar9SGReQ8YUhBq+mflfLXPfwrHp8tlvZK6x\ +mLwf6csMhi2Vhhysqzs7lMSBLCcdQRvJIQc+f6NfQe/dHTNfhD8yBOEXB7eg51MyW40alPclx5tsTZZ/O/5bgN9gGCMiwR6O3uAR7VFwD195C/UE3wt69gM+4SOHNvP5Ak9gwHcEUDnkbJhB+MDgGdAu3w1n8nU6\ +9XR5Lc7UKZlHtosAy+GhdHc+ZxjG7oiarWEs60czMXgzcgenTK+iH7qz5uFzNV1f084wk4ATfXDO7wurKcJ7/FC/GRIqJlqWb8Ka8rG8dTbsEFDZnAFHC78OA1xh9iEgCh8uUNcCSOyBkSzqxHDJUsPFEaizvBOq\ +KtP8ZTETQrfi596Zafwu4Yy/w1bs7MM0Zgxgr2fLNWeKjlMneDIphqN7hs4nAerH37INZTtvaBHQ3DmJLPChyhEbPnRyIaHXAxIxJgIg2/E3fFic1u0yeSbHY+PxVTBaN5hPjEw5k+gbbOP+oxfz+cvX7z96B9ig\ +/mUJS1hFQ5InoM+CIfSb0oMjYvPLlS8vZFbs+1TOtmG5yTccxyodo+X2QjIMCHqSGPiRiS1ON4y3NrnkpwshTOVraVByEu2hdSGY65fMSk+LPbtSIJqMJGvvs0jSv1rV330+rnuH4nvY3N4Ptqviovj+p4tiAZ/V\ +1CqLMxWbOOUn9KnN3pcoULKPPcry9BYFQfhX0mHAt/zxi5bc5bIlCrnMuSc2QDHhCWpogJrmJ7d4T/hC5DV6LxgEDH1ow/CBJPxCQ+Y1em94jVMpNerf5g+r4G3NFXNt41l3tX5ELh1OVj7hj1ZgA4xHaSxIFBCU\ +Gq8BSTyszf/0lOsbNdfRLD8prA9EDhq1je86+N/wXm0tAIEyMoygorUQ6P6BP1ry+Qv9jY0NXsa3/P+ut/Z+3fXwXNjwgNMK4TmsAewdSXafRMHf4NspejA3nXf2/FXlf1PCNQ79RjGorR+MafWK78nqQX89eB4N\ +2vGgnQza6aBtBm3bb+vBenSvv//1nH7Pid84XTa0/rCfvqQdfSYNXUZTl9HYsJ1e0s4uaZtPti8+0Xr7iVb/Oz2r2vaT7cWneOfS3+fybfpZMLr4jH0PV95cIgUGK9eDlegBFHVvvA2/cdVv9IbtFVrd8RvP/EYP\ +IT8NJM1gncWgbQftOl7BJfpP5OI/Wgr8VinxW6XIb5Uyv1UKXdb+zJ9W7ju7HQdmyHlU/jhmTku6g2wLhhp/jajjtFU6bu1OwQKGT8r7FnCS5SpRrUO8Xb+9WPzc3YxUHP3n/wHA2KlZ\ +"""))) +ESP32ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" +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\ +"""))) + +if __name__ == '__main__': + try: + main() + except FatalError as e: + print '\nA fatal error occurred: %s' % e + sys.exit(2) diff --git a/tools/get.py b/tools/get.py new file mode 100755 index 00000000..80bcb227 --- /dev/null +++ b/tools/get.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python +# This script will download and extract required tools into the current directory. +# Tools list is obtained from package/package_esp8266com_index.template.json file. +# Written by Ivan Grokhotkov, 2015. +# +from __future__ import print_function +import os +import shutil +import errno +import os.path +import hashlib +import json +import platform +import sys +import tarfile +import zipfile +import re +if sys.version_info[0] == 3: + from urllib.request import urlretrieve +else: + # Not Python 3 - today, it is most likely to be Python 2 + from urllib import urlretrieve + +dist_dir = 'dist/' + +def sha256sum(filename, blocksize=65536): + hash = hashlib.sha256() + with open(filename, "rb") as f: + for block in iter(lambda: f.read(blocksize), b""): + hash.update(block) + return hash.hexdigest() + +def mkdir_p(path): + try: + os.makedirs(path) + except OSError as exc: + if exc.errno != errno.EEXIST or not os.path.isdir(path): + raise + +def report_progress(count, blockSize, totalSize): + percent = int(count*blockSize*100/totalSize) + percent = min(100, percent) + sys.stdout.write("\r%d%%" % percent) + sys.stdout.flush() + +def unpack(filename, destination): + dirname = '' + print('Extracting {0}'.format(filename)) + if filename.endswith('tar.gz'): + tfile = tarfile.open(filename, 'r:gz') + tfile.extractall(destination) + dirname= tfile.getnames()[0] + elif filename.endswith('zip'): + zfile = zipfile.ZipFile(filename) + zfile.extractall(destination) + dirname = zfile.namelist()[0] + else: + raise NotImplementedError('Unsupported archive type') + + # a little trick to rename tool directories so they don't contain version number + rename_to = re.match(r'^([a-z][^\-]*\-*)+', dirname).group(0).strip('-') + if rename_to != dirname: + print('Renaming {0} to {1}'.format(dirname, rename_to)) + if os.path.isdir(rename_to): + shutil.rmtree(rename_to) + shutil.move(dirname, rename_to) + +def get_tool(tool): + archive_name = tool['archiveFileName'] + local_path = dist_dir + archive_name + url = tool['url'] + #real_hash = tool['checksum'].split(':')[1] + if not os.path.isfile(local_path): + print('Downloading ' + archive_name); + urlretrieve(url, local_path, report_progress) + sys.stdout.write("\rDone\n") + sys.stdout.flush() + else: + print('Tool {0} already downloaded'.format(archive_name)) + #local_hash = sha256sum(local_path) + #if local_hash != real_hash: + # print('Hash mismatch for {0}, delete the file and try again'.format(local_path)) + # raise RuntimeError() + unpack(local_path, '.') + +def load_tools_list(filename, platform): + tools_info = json.load(open(filename))['packages'][0]['tools'] + tools_to_download = [] + for t in tools_info: + tool_platform = [p for p in t['systems'] if p['host'] == platform] + if len(tool_platform) == 0: + continue + tools_to_download.append(tool_platform[0]) + return tools_to_download + +def identify_platform(): + arduino_platform_names = {'Darwin' : {32 : 'i386-apple-darwin', 64 : 'x86_64-apple-darwin'}, + 'Linux' : {32 : 'i686-pc-linux-gnu', 64 : 'x86_64-pc-linux-gnu'}, + 'LinuxARM': {32 : 'arm-linux-gnueabihf', 64 : 'aarch64-linux-gnu'}, + 'Windows' : {32 : 'i686-mingw32', 64 : 'i686-mingw32'}} + bits = 32 + if sys.maxsize > 2**32: + bits = 64 + sys_name = platform.system() + if 'Linux' in sys_name and platform.platform().find('arm') > 0: + sys_name = 'LinuxARM' + if 'CYGWIN_NT' in sys_name: + sys_name = 'Windows' + return arduino_platform_names[sys_name][bits] + +if __name__ == '__main__': + print('Platform: {0}'.format(identify_platform())) + tools_to_download = load_tools_list('../package/package_esp32_index.template.json', identify_platform()) + mkdir_p(dist_dir) + for tool in tools_to_download: + get_tool(tool) diff --git a/tools/sdk/bin/bootloader.bin b/tools/sdk/bin/bootloader.bin new file mode 100644 index 0000000000000000000000000000000000000000..d62d91ab5143caaa60d4dbcc8a2662eeb2d13c60 GIT binary patch literal 4016 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 +#include "esp_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @brief Initialize BT controller + * + * This function should be called only once, before any other BT functions are called. + */ +void bt_controller_init(); + +/** @brief: vhci_host_callback + * used for vhci call host function to notify what host need to do + * + * notify_host_send_available: notify host can send packet to controller + * notify_host_recv: notify host that controller has packet send to host + */ +typedef struct vhci_host_callback { + + void (*notify_host_send_available)(void); + int (*notify_host_recv)(uint8_t *data, uint16_t len); +} vhci_host_callback_t; + +/** @brief: API_vhci_host_check_send_available + * used for check actively if the host can send packet to controller or not. + * return true for ready to send, false means cannot send packet + */ +bool API_vhci_host_check_send_available(void); + +/** @brief: API_vhci_host_send_packet + * host send packet to controller + * param data is the packet point, the param len is the packet length + * return void + */ +void API_vhci_host_send_packet(uint8_t *data, uint16_t len); + +/** @brief: API_vhci_host_register_callback + * register the vhci referece callback, the call back + * struct defined by vhci_host_callback structure. + * param is the vhci_host_callback type variable + */ +void API_vhci_host_register_callback(const vhci_host_callback_t *callback); + +#ifdef __cplusplus +} +#endif + +#endif /* __BT_H__ */ diff --git a/tools/sdk/include/config/sdkconfig.h b/tools/sdk/include/config/sdkconfig.h new file mode 100644 index 00000000..8c5fb802 --- /dev/null +++ b/tools/sdk/include/config/sdkconfig.h @@ -0,0 +1,49 @@ +/* + * + * Automatically generated file; DO NOT EDIT. + * Espressif IoT Development Framework Configuration + * + */ +#define CONFIG_TRACEMEM_RESERVE_DRAM 0x0 +#define CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE 1 +#define CONFIG_ESPTOOLPY_FLASHFREQ "80m" +#define CONFIG_NEWLIB_STDOUT_ADDCR 1 +#define CONFIG_FREERTOS_PANIC_PRINT_REBOOT 1 +#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 +#define CONFIG_BT_RESERVE_DRAM 0x0 +#define CONFIG_LWIP_MAX_SOCKETS 4 +#define CONFIG_ESP32_DEFAULT_CPU_FREQ_160 1 +#define CONFIG_ULP_COPROC_RESERVE_MEM 0 +#define CONFIG_ESPTOOLPY_BAUD 921600 +#define CONFIG_LOG_DEFAULT_LEVEL_WARN 1 +#define CONFIG_TOOLPREFIX "xtensa-esp32-elf-" +#define CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX 0 +#define CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN 16384 +#define CONFIG_ESP32_ENABLE_STACK_WIFI 1 +#define CONFIG_LOG_BOOTLOADER_LEVEL_WARN 1 +#define CONFIG_MAIN_TASK_STACK_SIZE 4096 +#define CONFIG_ESPTOOLPY_FLASHMODE "dio" +#define CONFIG_LOG_DEFAULT_LEVEL 2 +#define CONFIG_ESPTOOLPY_FLASHMODE_DIO 1 +#define CONFIG_PYTHON "python" +#define CONFIG_ESPTOOLPY_COMPRESSED 1 +#define CONFIG_PARTITION_TABLE_FILENAME "partitions_singleapp.csv" +#define CONFIG_PARTITION_TABLE_SINGLE_APP 1 +#define CONFIG_WIFI_ENABLED 1 +#define CONFIG_ESPTOOLPY_FLASHFREQ_80M 1 +#define CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE 2048 +#define CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET 0x10000 +#define CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ 160 +#define CONFIG_FREERTOS_HZ 1000 +#define CONFIG_FREERTOS_ASSERT_FAIL_ABORT 1 +#define CONFIG_LOG_BOOTLOADER_LEVEL 2 +#define CONFIG_ESPTOOLPY_BAUD_OTHER_VAL 115200 +#define CONFIG_LWIP_SO_REUSE 1 +#define CONFIG_FREERTOS_CORETIMER_0 1 +#define CONFIG_PARTITION_TABLE_CUSTOM_FILENAME "partitions.csv" +#define CONFIG_FREERTOS_DEBUG_OCDAWARE 1 +#define CONFIG_SYSTEM_EVENT_QUEUE_SIZE 32 +#define CONFIG_ESPTOOLPY_BAUD_921600B 1 +#define CONFIG_APP_OFFSET 0x10000 +#define CONFIG_MEMMAP_SMP 1 +#define CONFIG_ESPTOOLPY_PORT "/dev/tty.SLAB_USBtoUART" diff --git a/tools/sdk/include/driver/driver/gpio.h b/tools/sdk/include/driver/driver/gpio.h new file mode 100644 index 00000000..9b47c88e --- /dev/null +++ b/tools/sdk/include/driver/driver/gpio.h @@ -0,0 +1,462 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _DRIVER_GPIO_H_ +#define _DRIVER_GPIO_H_ +#include "esp_err.h" +#include +#include "soc/gpio_reg.h" +#include "soc/gpio_struct.h" +#include "soc/rtc_io_reg.h" +#include "soc/io_mux_reg.h" +#include "rom/gpio.h" +#include "esp_attr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define GPIO_SEL_0 (BIT(0)) /* Pin 0 selected */ +#define GPIO_SEL_1 (BIT(1)) /* Pin 1 selected */ +#define GPIO_SEL_2 (BIT(2)) /* Pin 2 selected */ +#define GPIO_SEL_3 (BIT(3)) /* Pin 3 selected */ +#define GPIO_SEL_4 (BIT(4)) /* Pin 4 selected */ +#define GPIO_SEL_5 (BIT(5)) /* Pin 5 selected */ +#define GPIO_SEL_6 (BIT(6)) /* Pin 6 selected */ +#define GPIO_SEL_7 (BIT(7)) /* Pin 7 selected */ +#define GPIO_SEL_8 (BIT(8)) /* Pin 8 selected */ +#define GPIO_SEL_9 (BIT(9)) /* Pin 9 selected */ +#define GPIO_SEL_10 (BIT(10)) /* Pin 10 selected */ +#define GPIO_SEL_11 (BIT(11)) /* Pin 11 selected */ +#define GPIO_SEL_12 (BIT(12)) /* Pin 12 selected */ +#define GPIO_SEL_13 (BIT(13)) /* Pin 13 selected */ +#define GPIO_SEL_14 (BIT(14)) /* Pin 14 selected */ +#define GPIO_SEL_15 (BIT(15)) /* Pin 15 selected */ +#define GPIO_SEL_16 (BIT(16)) /* Pin 16 selected */ +#define GPIO_SEL_17 (BIT(17)) /* Pin 17 selected */ +#define GPIO_SEL_18 (BIT(18)) /* Pin 18 selected */ +#define GPIO_SEL_19 (BIT(19)) /* Pin 19 selected */ + +#define GPIO_SEL_21 (BIT(21)) /* Pin 21 selected */ +#define GPIO_SEL_22 (BIT(22)) /* Pin 22 selected */ +#define GPIO_SEL_23 (BIT(23)) /* Pin 23 selected */ + +#define GPIO_SEL_25 (BIT(25)) /* Pin 25 selected */ +#define GPIO_SEL_26 (BIT(26)) /* Pin 26 selected */ +#define GPIO_SEL_27 (BIT(27)) /* Pin 27 selected */ + +#define GPIO_SEL_32 ((uint64_t)(((uint64_t)1)<<32)) /* Pin 32 selected */ +#define GPIO_SEL_33 ((uint64_t)(((uint64_t)1)<<33)) /* Pin 33 selected */ +#define GPIO_SEL_34 ((uint64_t)(((uint64_t)1)<<34)) /* Pin 34 selected */ +#define GPIO_SEL_35 ((uint64_t)(((uint64_t)1)<<35)) /* Pin 35 selected */ +#define GPIO_SEL_36 ((uint64_t)(((uint64_t)1)<<36)) /* Pin 36 selected */ +#define GPIO_SEL_37 ((uint64_t)(((uint64_t)1)<<37)) /* Pin 37 selected */ +#define GPIO_SEL_38 ((uint64_t)(((uint64_t)1)<<38)) /* Pin 38 selected */ +#define GPIO_SEL_39 ((uint64_t)(((uint64_t)1)<<39)) /* Pin 39 selected */ + +#define GPIO_PIN_REG_0 PERIPHS_IO_MUX_GPIO0_U +#define GPIO_PIN_REG_1 PERIPHS_IO_MUX_U0TXD_U +#define GPIO_PIN_REG_2 PERIPHS_IO_MUX_GPIO2_U +#define GPIO_PIN_REG_3 PERIPHS_IO_MUX_U0RXD_U +#define GPIO_PIN_REG_4 PERIPHS_IO_MUX_GPIO4_U +#define GPIO_PIN_REG_5 PERIPHS_IO_MUX_GPIO5_U +#define GPIO_PIN_REG_6 PERIPHS_IO_MUX_SD_CLK_U +#define GPIO_PIN_REG_7 PERIPHS_IO_MUX_SD_DATA0_U +#define GPIO_PIN_REG_8 PERIPHS_IO_MUX_SD_DATA1_U +#define GPIO_PIN_REG_9 PERIPHS_IO_MUX_SD_DATA2_U +#define GPIO_PIN_REG_10 PERIPHS_IO_MUX_SD_DATA3_U +#define GPIO_PIN_REG_11 PERIPHS_IO_MUX_SD_CMD_U +#define GPIO_PIN_REG_12 PERIPHS_IO_MUX_MTDI_U +#define GPIO_PIN_REG_13 PERIPHS_IO_MUX_MTCK_U +#define GPIO_PIN_REG_14 PERIPHS_IO_MUX_MTMS_U +#define GPIO_PIN_REG_15 PERIPHS_IO_MUX_MTDO_U +#define GPIO_PIN_REG_16 PERIPHS_IO_MUX_GPIO16_U +#define GPIO_PIN_REG_17 PERIPHS_IO_MUX_GPIO17_U +#define GPIO_PIN_REG_18 PERIPHS_IO_MUX_GPIO18_U +#define GPIO_PIN_REG_19 PERIPHS_IO_MUX_GPIO19_U +#define GPIO_PIN_REG_20 PERIPHS_IO_MUX_GPIO20_U +#define GPIO_PIN_REG_21 PERIPHS_IO_MUX_GPIO21_U +#define GPIO_PIN_REG_22 PERIPHS_IO_MUX_GPIO22_U +#define GPIO_PIN_REG_23 PERIPHS_IO_MUX_GPIO23_U +#define GPIO_PIN_REG_25 PERIPHS_IO_MUX_GPIO25_U +#define GPIO_PIN_REG_26 PERIPHS_IO_MUX_GPIO26_U +#define GPIO_PIN_REG_27 PERIPHS_IO_MUX_GPIO27_U +#define GPIO_PIN_REG_32 PERIPHS_IO_MUX_GPIO32_U +#define GPIO_PIN_REG_33 PERIPHS_IO_MUX_GPIO33_U +#define GPIO_PIN_REG_34 PERIPHS_IO_MUX_GPIO34_U +#define GPIO_PIN_REG_35 PERIPHS_IO_MUX_GPIO35_U +#define GPIO_PIN_REG_36 PERIPHS_IO_MUX_GPIO36_U +#define GPIO_PIN_REG_37 PERIPHS_IO_MUX_GPIO37_U +#define GPIO_PIN_REG_38 PERIPHS_IO_MUX_GPIO38_U +#define GPIO_PIN_REG_39 PERIPHS_IO_MUX_GPIO39_U + +#define GPIO_APP_CPU_INTR_ENA (BIT(0)) +#define GPIO_APP_CPU_NMI_INTR_ENA (BIT(1)) +#define GPIO_PRO_CPU_INTR_ENA (BIT(2)) +#define GPIO_PRO_CPU_NMI_INTR_ENA (BIT(3)) +#define GPIO_SDIO_EXT_INTR_ENA (BIT(4)) + +#define GPIO_MODE_DEF_INPUT (BIT0) +#define GPIO_MODE_DEF_OUTPUT (BIT1) +#define GPIO_MODE_DEF_OD (BIT2) + +#define GPIO_PIN_COUNT 40 +extern const uint32_t GPIO_PIN_MUX_REG[GPIO_PIN_COUNT]; +#define GPIO_IS_VALID_GPIO(gpio_num) ((gpio_num < GPIO_PIN_COUNT && GPIO_PIN_MUX_REG[gpio_num] != 0)) //to decide whether it is a valid GPIO number +#define GPIO_IS_VALID_OUTPUT_GPIO(gpio_num) ((GPIO_IS_VALID_GPIO(gpio_num)) && (gpio_num < 34)) //to decide whether it can be a valid GPIO number of output mode + +typedef enum { + GPIO_NUM_0 = 0, + GPIO_NUM_1 = 1, + GPIO_NUM_2 = 2, + GPIO_NUM_3 = 3, + GPIO_NUM_4 = 4, + GPIO_NUM_5 = 5, + GPIO_NUM_6 = 6, + GPIO_NUM_7 = 7, + GPIO_NUM_8 = 8, + GPIO_NUM_9 = 9, + GPIO_NUM_10 = 10, + GPIO_NUM_11 = 11, + GPIO_NUM_12 = 12, + GPIO_NUM_13 = 13, + GPIO_NUM_14 = 14, + GPIO_NUM_15 = 15, + GPIO_NUM_16 = 16, + GPIO_NUM_17 = 17, + GPIO_NUM_18 = 18, + GPIO_NUM_19 = 19, + + GPIO_NUM_21 = 21, + GPIO_NUM_22 = 22, + GPIO_NUM_23 = 23, + + GPIO_NUM_25 = 25, + GPIO_NUM_26 = 26, + GPIO_NUM_27 = 27, + + GPIO_NUM_32 = 32, + GPIO_NUM_33 = 33, + GPIO_NUM_34 = 34, /*input mode only */ + GPIO_NUM_35 = 35, /*input mode only */ + GPIO_NUM_36 = 36, /*input mode only */ + GPIO_NUM_37 = 37, /*input mode only */ + GPIO_NUM_38 = 38, /*input mode only */ + GPIO_NUM_39 = 39, /*input mode only */ +} gpio_num_t; + +typedef enum { + GPIO_INTR_DISABLE = 0, /* disable GPIO interrupt */ + GPIO_INTR_POSEDGE = 1, /* GPIO interrupt type : rising edge */ + GPIO_INTR_NEGEDGE = 2, /* GPIO interrupt type : falling edge */ + GPIO_INTR_ANYEDGE = 3, /* GPIO interrupt type : both rising and falling edge */ + GPIO_INTR_LOW_LEVEL = 4, /* GPIO interrupt type : input low level trigger */ + GPIO_INTR_HIGH_LEVEL = 5, /* GPIO interrupt type : input high level trigger */ + GPIO_INTR_MAX, +} gpio_int_type_t; + +typedef enum { + GPIO_MODE_INPUT = GPIO_MODE_DEF_INPUT, /* GPIO mode : input only */ + GPIO_MODE_OUTPUT = GPIO_MODE_DEF_OUTPUT, /* GPIO mode : output only mode */ + GPIO_MODE_OUTPUT_OD = ((GPIO_MODE_DEF_OUTPUT)|(GPIO_MODE_DEF_OD)), /* GPIO mode : output only with open-drain mode */ + GPIO_MODE_INPUT_OUTPUT_OD = ((GPIO_MODE_DEF_INPUT)|(GPIO_MODE_DEF_OUTPUT)|(GPIO_MODE_DEF_OD)), /* GPIO mode : output and input with open-drain mode*/ + GPIO_MODE_INPUT_OUTPUT = ((GPIO_MODE_DEF_INPUT)|(GPIO_MODE_DEF_OUTPUT)), /* GPIO mode : output and input mode */ +} gpio_mode_t; + +typedef enum { + GPIO_PULLUP_DISABLE = 0x0, /* disable GPIO pull-up resistor */ + GPIO_PULLUP_ENABLE = 0x1, /* enable GPIO pull-up resistor */ +} gpio_pullup_t; + +typedef enum { + GPIO_PULLDOWN_DISABLE = 0x0, /* disable GPIO pull-down resistor */ + GPIO_PULLDOWN_ENABLE = 0x1, /* enable GPIO pull-down resistor */ +} gpio_pulldown_t; + +typedef struct { + uint64_t pin_bit_mask; /* GPIO pin: set with bit mask, each bit maps to a GPIO */ + gpio_mode_t mode; /* GPIO mode: set input/output mode */ + gpio_pullup_t pull_up_en; /* GPIO pull-up */ + gpio_pulldown_t pull_down_en; /* GPIO pull-down */ + gpio_int_type_t intr_type; /* GPIO interrupt type */ +} gpio_config_t; + +typedef enum { + GPIO_LOW_LEVEL = 0, + GPIO_HIGH_LEVEL = 1, + GPIO_LEVEL_ERR, +} gpio_level_t; + +typedef enum { + GPIO_PULLUP_ONLY, /* Pad pull up */ + GPIO_PULLDOWN_ONLY, /* Pad pull down */ + GPIO_PULLUP_PULLDOWN, /* Pad pull up + pull down*/ + GPIO_FLOATING, /* Pad floating */ +} gpio_pull_mode_t; + +typedef void (*gpio_event_callback)(gpio_num_t gpio_intr_num); + +/** \defgroup Driver_APIs Driver APIs + * @brief Driver APIs + */ + +/** @addtogroup Driver_APIs + * @{ + */ + +/** \defgroup GPIO_Driver_APIs GPIO Driver APIs + * @brief GPIO APIs + */ + +/** @addtogroup GPIO_Driver_APIs + * @{ + */ + +/** + * @brief GPIO common configuration + * + * Use this Function ,Configure GPIO's Mode,pull-up,PullDown,IntrType + * + * @parameter[in] pGPIOConfig + * pGPIOConfig.pin_bit_mask : Configure GPIO pins bits,set this parameter with bit mask. + * If you want to configure GPIO34 and GPIO16, pin_bit_mask=GPIO_Pin_16|GPIO_Pin_34; + * pGPIOConfig.mode : Configure GPIO mode,such as output ,input... + * pGPIOConfig.pull_up_en : Enable or Disable pull-up + * pGPIOConfig.pull_down_en : Enable or Disable pull-down + * pGPIOConfig.intr_type : Configure GPIO interrupt trigger type + * @return ESP_OK: success ; + * ESP_ERR_INVALID_ARG: parameter error + * ESP_FAIL : GPIO error + * + */ +esp_err_t gpio_config(gpio_config_t *pGPIOConfig); + + +/** + * @brief GPIO set interrupt trigger type + * + * @parameter[in] gpio_num : GPIO number. + * If you want to set output level of GPIO16, gpio_num should be GPIO_NUM_16 (16); + * @parameter[in] intr_type: interrupt type, select from gpio_int_type_t + * + * @return ESP_OK : success + * ESP_ERR_INVALID_ARG: parameter error + * + */ +esp_err_t gpio_set_intr_type(gpio_num_t gpio_num, gpio_int_type_t intr_type); + +/** + * @brief enable GPIO module interrupt signal + * + * @parameter[in] gpio_num : GPIO number. + * If you want to set output level of GPIO16, gpio_num should be GPIO_NUM_16 (16); + * + * @return ESP_OK : success + * ESP_ERR_INVALID_ARG: parameter error + * + */ +esp_err_t gpio_intr_enable(gpio_num_t gpio_num); + +/** + * @brief disable GPIO module interrupt signal + * + * @parameter[in] gpio_num : GPIO number. + * If you want to set output level of GPIO16, gpio_num should be GPIO_NUM_16 (16); + * + * @return ESP_OK : success + * ESP_ERR_INVALID_ARG: parameter error + * + */ +esp_err_t gpio_intr_disable(gpio_num_t gpio_num); + +/** + * @brief GPIO set output level + * + * @parameter[in] gpio_num : GPIO number. + * If you want to set output level of GPIO16, gpio_num should be GPIO_NUM_16 (16); + * @parameter[in] level : Output level. 0: low ; 1: high + * + * @return ESP_OK : success + * ESP_FAIL : GPIO error + * + */ +esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level); + +/** + * @brief GPIO get input level + * + * @parameter[in] gpio_num : GPIO number. + * If you want to get level of pin GPIO16, gpio_num should be GPIO_NUM_16 (16); + * + * @return 0 : the GPIO input level is 0 + * 1 : the GPIO input level is 1 + * + */ +int gpio_get_level(gpio_num_t gpio_num); + +/** + * @brief GPIO set direction + * + * Configure GPIO direction,such as output_only,input_only,output_and_input + * + * @parameter[in] gpio_num : Configure GPIO pins number,it should be GPIO number. + * If you want to set direction of GPIO16, gpio_num should be GPIO_NUM_16 (16); + * @parameter[in] mode : Configure GPIO direction,such as output_only,input_only,... + * + * @return ESP_OK : success + * ESP_ERR_INVALID_ARG : fail + * ESP_FAIL : GPIO error + * + */ +esp_err_t gpio_set_direction(gpio_num_t gpio_num, gpio_mode_t mode); + +/** + * @brief GPIO set pull + * + * User this Function,configure GPIO pull mode,such as pull-up,pull-down + * + * @parameter[in] gpio_num : Configure GPIO pins number,it should be GPIO number. + * If you want to set pull up or down mode for GPIO16,gpio_num should be GPIO_NUM_16 (16); + * @parameter[in] pull : Configure GPIO pull up/down mode,such as pullup_only,pulldown_only,pullup_and_pulldown,... + * + * @return ESP_OK : success + * ESP_ERR_INVALID_ARG : fail + * ESP_FAIL : GPIO error + * + */ +esp_err_t gpio_set_pull_mode(gpio_num_t gpio_num, gpio_pull_mode_t pull); + +/** + * @brief enable GPIO wake-up function. + * + * @param gpio_num_t gpio_num : GPIO number. + * + * @param gpio_int_type_t intr_type : only GPIO_INTR_LOLEVEL\GPIO_INTR_HILEVEL can be used + * + * @return ESP_OK: success + * ESP_ERR_INVALID_ARG: parameter error + */ +esp_err_t gpio_wakeup_enable(gpio_num_t gpio_num, gpio_int_type_t intr_type); + +/** + * @brief disable GPIO wake-up function. + * + * @param gpio_num_t gpio_num: GPIO number + * + * @return ESP_OK: success + * ESP_ERR_INVALID_ARG: parameter error + */ +esp_err_t gpio_wakeup_disable(gpio_num_t gpio_num); + +/** + * @brief register GPIO interrupt handler, the handler is an ISR. + * The handler will be attached to the same CPU core that this function is running on. + * Users should know that which CPU is running and then pick a INUM that is not used by system. + * We can find the information of INUM and interrupt level in soc.h. + * TODO: to move INUM options to menu_config + * @parameter uint32_t gpio_intr_num : GPIO interrupt number,check the info in soc.h, and please see the core-isa.h for more details + * @parameter void (* fn)(void* ) : interrupt handler function. + * Note that the handler function MUST be defined with attribution of "IRAM_ATTR". + * @parameter void * arg : parameter for handler function + * + * @return ESP_OK : success ; + * ESP_FAIL: gpio error + */ +esp_err_t gpio_isr_register(uint32_t gpio_intr_num, void (*fn)(void*), void * arg); + +/** + * *************** ATTENTION ********************/ +/** + * + * Each GPIO has its own separate configuration register, so we do not use + * a lock to serialize access to them. This works under the assumption that + * no situation will occur where two tasks try to configure the same GPIO + * pin simultaneously. It is up to the application developer to guarantee this. + */ + + +/*----------EXAMPLE TO CONIFGURE GPIO AS OUTPUT ------------ */ +/* gpio_config_t io_conf; + * io_conf.intr_type = GPIO_INTR_DISABLE; //disable interrupt + * io_conf.mode = GPIO_MODE_OUTPUT; //set as output mode + * io_conf.pin_bit_mask = GPIO_SEL_18 | GPIO_SEL_19; //bit mask of the pins that you want to set,e.g.GPIO18/19 + * io_conf.pull_down_en = 0; //disable pull-down mode + * io_conf.pull_up_en = 0; //disable pull-up mode + * gpio_config(&io_conf); //configure GPIO with the given settings + **/ +/*----------EXAMPLE TO CONIFGURE GPIO AS OUTPUT ------------ */ +/* io_conf.intr_type = GPIO_INTR_POSEDGE; //set posedge interrupt + * io_conf.mode = GPIO_MODE_INPUT; //set as input + * io_conf.pin_bit_mask = GPIO_SEL_4 | GPIO_SEL_5; //bit mask of the pins that you want to set, e.g.,GPIO4/5 + * io_conf.pull_down_en = 0; //disable pull-down mode + * io_conf.pull_up_en = 1; //enable pull-up mode + * gpio_config(&io_conf); //configure GPIO with the given settings + *----------EXAMPLE TO SET ISR HANDLER ----------------------*/ +/* gpio_isr_register(18,gpio_intr_test,NULL); //hook the isr handler for GPIO interrupt + * //the first parameter is INUM, you can pick one form interrupt level 1/2 which is not used by the system. + * //NOTE1:user should arrange the INUMs that used, better not to use a same INUM for different interrupt. + * //NOTE2:do not pick the INUM that already occupied by the system. + * //NOTE3:refer to soc.h to check which INUMs that can be used. + *-------------EXAMPLE OF HANDLER FUNCTION-------------------*/ +/*#include "esp_attr.h" + * void IRAM_ATTR gpio_intr_test(void* arg) + *{ + * //GPIO intr process + * ets_printf("in gpio_intr\n"); + * uint32_t gpio_num = 0; + * uint32_t gpio_intr_status = READ_PERI_REG(GPIO_STATUS_REG); //read status to get interrupt status for GPIO0-31 + * uint32_t gpio_intr_status_h = READ_PERI_REG(GPIO_STATUS1_REG);//read status1 to get interrupt status for GPIO32-39 + * SET_PERI_REG_MASK(GPIO_STATUS_W1TC_REG, gpio_intr_status); //Clear intr for gpio0-gpio31 + * SET_PERI_REG_MASK(GPIO_STATUS1_W1TC_REG, gpio_intr_status_h); //Clear intr for gpio32-39 + * do { + * if(gpio_num < 32) { + * if(gpio_intr_status & BIT(gpio_num)) { //gpio0-gpio31 + * ets_printf("Intr GPIO%d ,val: %d\n",gpio_num,gpio_get_level(gpio_num)); + * //This is an isr handler, you should post an event to process it in RTOS queue. + * } + * } else { + * if(gpio_intr_status_h & BIT(gpio_num - 32)) { + * ets_printf("Intr GPIO%d, val : %d\n",gpio_num,gpio_get_level(gpio_num)); + * //This is an isr handler, you should post an event to process it in RTOS queue. + * } + * } + * } while(++gpio_num < GPIO_PIN_COUNT); + *} + *----EXAMPLE OF I2C CONFIG AND PICK SIGNAL FOR IO MATRIX---*/ +/* gpio_config_t io_conf; + * io_conf.intr_type = GPIO_INTR_DISABLE; //disable interrupt + * io_conf.mode = GPIO_MODE_INPUT_OUTPUT_OD; //set as output mode + * io_conf.pin_bit_mask = GPIO_SEL_21 | GPIO_SEL_22; //bit mask of the pins that you want to set,e.g.GPIO21/22 + * io_conf.pull_down_en = 0; //disable pull-down mode + * io_conf.pull_up_en = 1; //enable pull-up mode + * gpio_config(&io_conf); //configure GPIO with the given settings + * gpio_matrix_out(21, EXT_I2C_SCL_O_IDX, 0, 0); //set output signal for io_matrix + * gpio_matrix_out(22, EXT_I2C_SDA_O_IDX, 0, 0); //set output signal for io_matrix + * gpio_matrix_in( 22, EXT_I2C_SDA_I_IDX, 0); //set input signal for io_matrix + * + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* _DRIVER_GPIO_H_ */ diff --git a/tools/sdk/include/driver/driver/ledc.h b/tools/sdk/include/driver/driver/ledc.h new file mode 100644 index 00000000..79a6c7f9 --- /dev/null +++ b/tools/sdk/include/driver/driver/ledc.h @@ -0,0 +1,406 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _DRIVER_LEDC_H_ +#define _DRIVER_LEDC_H_ +#include "esp_err.h" +#include "soc/soc.h" +#include "soc/ledc_reg.h" +#include "soc/ledc_reg.h" +#include "soc/ledc_struct.h" +#include "driver/gpio.h" +#include "driver/periph_ctrl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define LEDC_APB_CLK_HZ (APB_CLK_FREQ) +#define LEDC_REF_CLK_HZ (1*1000000) + +typedef enum { + LEDC_HIGH_SPEED_MODE = 0, /*LEDC high speed speed_mode */ + //in this version, we only support high speed speed_mode. We will access low speed speed_mode later + //LEDC_LOW_SPEED_MODE, /*LEDC low speed speed_mode */ + LEDC_SPEED_MODE_MAX, +} ledc_mode_t; + +typedef enum { + LEDC_INTR_DISABLE = 0, /*Disable LEDC interrupt */ + LEDC_INTR_FADE_END, /*Enable LEDC interrupt */ +} ledc_intr_type_t; + +typedef enum { + LEDC_DUTY_DIR_DECREASE = 0, /*LEDC duty decrease direction */ + LEDC_DUTY_DIR_INCREASE = 1, /*LEDC duty increase direction */ +} ledc_duty_direction_t; + +typedef enum { + LEDC_REF_TICK = 0, /*LEDC timer clock divided from reference tick(1Mhz) */ + LEDC_APB_CLK, /*LEDC timer clock divided from APB clock(80Mhz)*/ +} ledc_clk_src_t; + +typedef enum { + LEDC_TIMER_0 = 0, /*LEDC source timer TIMER0 */ + LEDC_TIMER_1, /*LEDC source timer TIMER1 */ + LEDC_TIMER_2, /*LEDC source timer TIMER2 */ + LEDC_TIMER_3, /*LEDC source timer TIMER3 */ +} ledc_timer_t; + +typedef enum { + LEDC_CHANNEL_0 = 0, /*LEDC channel 0 */ + LEDC_CHANNEL_1, /*LEDC channel 1 */ + LEDC_CHANNEL_2, /*LEDC channel 2 */ + LEDC_CHANNEL_3, /*LEDC channel 3 */ + LEDC_CHANNEL_4, /*LEDC channel 4 */ + LEDC_CHANNEL_5, /*LEDC channel 5 */ + LEDC_CHANNEL_6, /*LEDC channel 6 */ + LEDC_CHANNEL_7, /*LEDC channel 7 */ +} ledc_channel_t; + +typedef enum { + LEDC_TIMER_10_BIT = 10, /*LEDC PWM depth 10Bit */ + LEDC_TIMER_11_BIT = 11, /*LEDC PWM depth 11Bit */ + LEDC_TIMER_12_BIT = 12, /*LEDC PWM depth 12Bit */ + LEDC_TIMER_13_BIT = 13, /*LEDC PWM depth 13Bit */ + LEDC_TIMER_14_BIT = 14, /*LEDC PWM depth 14Bit */ + LEDC_TIMER_15_BIT = 15, /*LEDC PWM depth 15Bit */ +} ledc_timer_bit_t; + +typedef struct { + int gpio_num; /*the LEDC output gpio_num, if you want to use gpio16, gpio_num = 16*/ + ledc_mode_t speed_mode; /*LEDC speed speed_mode, high-speed mode or low-speed mode*/ + ledc_channel_t channel; /*LEDC channel(0 - 7)*/ + ledc_intr_type_t intr_type; /*configure interrupt, Fade interrupt enable or Fade interrupt disable*/ + ledc_timer_t timer_sel; /*Select the timer source of channel (0 - 3)*/ + uint32_t duty; /*LEDC channel duty, the duty range is [0, (2**bit_num) - 1], */ +} ledc_channel_config_t; + +typedef struct { + ledc_mode_t speed_mode; /*LEDC speed speed_mode, high-speed mode or low-speed mode*/ + ledc_timer_bit_t bit_num; /*LEDC channel duty depth*/ + ledc_timer_t timer_num; /*The timer source of channel (0 - 3)*/ + uint32_t freq_hz; /*LEDC timer frequency(Hz)*/ +} ledc_timer_config_t; + + +/** + * @brief LEDC channel configuration + * + * User this Function, configure LEDC channel with the given channel/output gpio_num/interrupt/source timer/frequency(Hz)/LEDC depth + * + * @param[in] ledc_channel_config_t + * ledc_channel_config_t.speed_mode : LEDC speed speed_mode + * ledc_channel_config_t.gpio_num : LEDC output gpio_num, if you want to use gpio16, ledc_channel_config_t.gpio_num = 16 + * ledc_channel_config_t.channel : LEDC channel(0 - 7) + * ledc_channel_config_t.intr_type : configure interrupt, Fade interrupt enable or Fade interrupt disable + * ledc_channel_config_t.timer_sel : Select the timer source of channel (0 - 3), high speed channel must bind with high speed timer. + * ledc_channel_config_t.duty : LEDC channel duty, the duty range is [0, (2**timer_bit_num) - 1], + * @return ESP_OK: success + * ESP_ERR_INVALID_ARG: parameter error + * + */ +esp_err_t ledc_channel_config(ledc_channel_config_t* ledc_conf); + +/** + * @brief LEDC timer configuration + * + * User this Function, configure LEDC timer with the given source timer/frequency(Hz)/bit_num + * + * @param[in] ledc_timer_config_t + * ledc_timer_config_t.speed_mode : LEDC speed speed_mode + * ledc_timer_config_t.timer_num : Select the timer source of channel (0 - 3) + * ledc_timer_config_t.freq_hz : LEDC channel frequency(Hz), + * ledc_timer_config_t.bit_num : LEDC channel duty depth + * @return ESP_OK: success + * ESP_ERR_INVALID_ARG: parameter error + * ESP_FAIL: Can not find a proper pre-divider number base on the given frequency and the current bit_num. + * + */ +esp_err_t ledc_timer_config(ledc_timer_config_t* timer_conf); + +/** + * @brief LEDC update channel parameters + * + * Call this function to activate the LEDC updated parameters. + * After ledc_set_duty, ledc_set_fade, we need to call this function to update the settings. + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] channel : LEDC channel(0-7), select from ledc_channel_t + * + * @return ESP_OK: success + * ESP_ERR_INVALID_ARG: parameter error + * + */ +esp_err_t ledc_update_duty(ledc_mode_t speed_mode, ledc_channel_t channel); + +/** + * @brief LEDC stop + * + * Disable LEDC output, and set idle level + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] channel : LEDC channel(0-7), select from ledc_channel_t + * + * @return ESP_OK: success + * ESP_ERR_INVALID_ARG: parameter error + */ +esp_err_t ledc_stop(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t idle_level); + +/** + * @brief LEDC set channel frequency(Hz) + * + * Set LEDC frequency(Hz) + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] timer_num : LEDC timer index(0-3), select from ledc_timer_t + * + * @param[in] freq_hz : set the LEDC frequency + * + * @return ESP_OK: success + * ESP_ERR_INVALID_ARG: parameter error + * ESP_FAIL: Can not find a proper pre-divider number base on the given frequency and the current bit_num. + */ +esp_err_t ledc_set_freq(ledc_mode_t speed_mode, ledc_timer_t timer_num, uint32_t freq_hz); + +/** + * @brief LEDC get channel frequency(Hz) + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] timer_num : LEDC timer index(0-3), select from ledc_timer_t + * + * @return 0 : error + * others : current LEDC frequency + * + */ +uint32_t ledc_get_freq(ledc_mode_t speed_mode, ledc_timer_t timer_num); + +/** + * @brief LEDC set duty + * + * Set LEDC duty, After the function calls the ledc_update_duty function, the function can take effect. + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] channel : LEDC channel(0-7), select from ledc_channel_t + * + * @param[in] duty : set the LEDC duty, the duty range is [0, (2**bit_num) - 1] + * + * @return ESP_OK: success + * ESP_ERR_INVALID_ARG: parameter error + */ +esp_err_t ledc_set_duty(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t duty); + +/** + * @brief LEDC get duty + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] channel : LEDC channel(0-7), select from ledc_channel_t + * + * + * @return -1: parameter error + * other value: current LEDC duty + * + */ +int ledc_get_duty(ledc_mode_t speed_mode, ledc_channel_t channel); + +/** + * @brief LEDC set gradient + * + * Set LEDC gradient, After the function calls the ledc_update_duty function, the function can take effect. + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] channel : LEDC channel(0-7), select from ledc_channel_t + * + * @param[in] duty : set the start of the gradient duty, the duty range is [0, (2**bit_num) - 1] + * + * @param[in] gradule_direction : set the direction of the gradient + * + * @param[in] step_num : set the number of the gradient + * + * @param[in] duty_cyle_num : set how many LEDC tick each time the gradient lasts + * + * @param[in] duty_scale : set gradient change amplitude + * + * @return ESP_OK : success + * ESP_ERR_INVALID_ARG : parameter error + */ +esp_err_t ledc_set_fade(ledc_mode_t speed_mode, uint32_t channel, uint32_t duty, ledc_duty_direction_t gradule_direction, + uint32_t step_num, uint32_t duty_cyle_num, uint32_t duty_scale); + +/** + * @brief register LEDC interrupt handler, the handler is an ISR. + * The handler will be attached to the same CPU core that this function is running on. + * Users should know that which CPU is running and then pick a INUM that is not used by system. + * We can find the information of INUM and interrupt level in soc.h. + * TODO: to move INUM options to menu_config + * @param[in] uint32_t ledc_intr_num : LEDC interrupt number, check the info in soc.h, and please see the core-isa.h for more details + * @param[in] void (* fn)(void* ) : interrupt handler function. + * Note that the handler function MUST be defined with attribution of "IRAM_ATTR". + * @param[in] void * arg : parameter for handler function + * + * @return ESP_OK : success ; + * ESP_ERR_INVALID_ARG : function ptr error. + */ +esp_err_t ledc_isr_register(uint32_t ledc_intr_num, void (*fn)(void*), void * arg); + +/** + * @brief configure LEDC settings + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] timer_sel : timer index(0-3), there are 4 timers in LEDC module + * + * @param[in] div_num : timer clock divide number, the timer clock is divided from the selected clock source + * + * @param[in] bit_num : the count number of one period, counter range is 0 ~ ((2 ** bit_num) - 1) + * + * @param[in] clk_src : select LEDC source clock. + * + * @return -1: parameter error + * other value: current LEDC duty + * + */ +esp_err_t ledc_timer_set(ledc_mode_t speed_mode, ledc_timer_t timer_sel, uint32_t div_num, uint32_t bit_num, ledc_clk_src_t clk_src); + +/** + * @brief reset LEDC timer + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] timer_sel : LEDC timer index(0-3), select from ledc_timer_t + * + * + * @return ESP_ERR_INVALID_ARG: parameter error + * ESP_OK: success + * + */ +esp_err_t ledc_timer_rst(ledc_mode_t speed_mode, uint32_t timer_sel); + +/** + * @brief pause LEDC timer counter + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] timer_sel : LEDC timer index(0-3), select from ledc_timer_t + * + * + * @return ESP_ERR_INVALID_ARG: parameter error + * ESP_OK: success + * + */ +esp_err_t ledc_timer_pause(ledc_mode_t speed_mode, uint32_t timer_sel); + +/** + * @brief pause LEDC timer resume + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] timer_sel : LEDC timer index(0-3), select from ledc_timer_t + * + * + * @return ESP_ERR_INVALID_ARG: parameter error + * ESP_OK: success + * + */ +esp_err_t ledc_timer_resume(ledc_mode_t speed_mode, uint32_t timer_sel); + +/** + * @brief bind LEDC channel with the selected timer + * + * @param[in] speed_mode : select the LEDC speed_mode, high-speed mode and low-speed mode, now we only support high-speed mode. We will access low-speed mode in next version + * + * @param[in] channel : LEDC channel index(0-7), select from ledc_channel_t + * + * @param[in] timer_idx : LEDC timer index(0-3), select from ledc_timer_t + * + * + * @return ESP_ERR_INVALID_ARG: parameter error + * ESP_OK: success + * + */ +esp_err_t ledc_bind_channel_timer(ledc_mode_t speed_mode, uint32_t channel, uint32_t timer_idx); + +/***************************EXAMPLE********************************** + * + * + * ----------------EXAMPLE OF LEDC SETTING --------------------- + * //1. enable LEDC + * periph_module_enable(PERIPH_LEDC_MODULE); //enable LEDC module, or you can not set any register of it. + * + * //2. set LEDC timer + * ledc_timer_config_t timer_conf = { + * .bit_num = LEDC_TIMER_12_BIT, //set timer counter bit number + * .freq_hz = 1000, //set frequency of pwm, here, 1000Hz + * .speed_mode = LEDC_HIGH_SPEED_MODE //timer mode, + * .timer_num = LEDC_TIMER_0, //timer number + * }; + * ledc_timer_config(&timer_conf); //setup timer. + * + * //3. set LEDC channel + * ledc_channel_config_t ledc_conf = { + * .channel = LEDC_CHANNEL_0; //set LEDC channel 0 + * .duty = 1000; //set the duty for initialization.(duty range is 0 ~ ((2**bit_num)-1) + * .gpio_num = 16; //GPIO number + * .intr_type = LEDC_INTR_FADE_END; //GPIO INTR TYPE, as an example, we enable fade_end interrupt here. + * .speed_mode = LEDC_HIGH_SPEED_MODE; //set LEDC mode, from ledc_mode_t + * .timer_sel = LEDC_TIMER_0; //set LEDC timer source, if different channel use one timer, the frequency and bit_num of these channels should be the same + * } + * ledc_channel_config(&ledc_conf); //setup the configuration + * + * ----------------EXAMPLE OF SETTING DUTY --- ----------------- + * uint32_t ledc_channel = LEDC_CHANNEL_0; //LEDC channel(0-73) + * uint32_t duty = 2000; //duty range is 0 ~ ((2**bit_num)-1) + * LEDC_set_duty(LEDC_HIGH_SPEED_MODE, ledc_channel, duty); //set speed mode, channel, and duty. + * ledc_update_duty(LEDC_HIGH_SPEED_MODE, ledc_channel); //after set duty, we need to call ledc_update_duty to update the settings. + * + * + * ----------------EXAMPLE OF LEDC INTERRUPT ------------------ + * //we have fade_end interrupt and counter overflow interrupt. we just give an example of fade_end interrupt here. + * ledc_isr_register(18, ledc_isr_handler, NULL); //hook the isr handler for LEDC interrupt + * //the first parameter is INUM, you can pick one form interrupt level 1/2 which is not used by the system. + * //NOTE1:user should arrange the INUMs that used, better not to use a same INUM for different interrupt source. + * //NOTE2:do not pick the INUM that already occupied by the system. + * //NOTE3:refer to soc.h to check which INUMs that can be used. + * ----------------EXAMPLE OF INTERRUPT HANDLER --------------- + * #include "esp_attr.h" + * void IRAM_ATTR ledc_isr_handler(void* arg) //we should add 'IRAM_ATTR' attribution when we declare the isr function + * { + * uint32_t intr_st = LEDC.int_st.val; //read LEDC interrupt status. + * + * //you will find which channels have triggered fade_end interrupt here, + * //then, you can post some event to RTOS queue to process the event. + * //later we will add a queue in the driver code. + * + * LEDC.int_clr.val = intr_st; //clear LEDC interrupt status. + * } + * + * + *--------------------------END OF EXAMPLE -------------------------- + */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* _DRIVER_LEDC_H_ */ diff --git a/tools/sdk/include/driver/driver/periph_ctrl.h b/tools/sdk/include/driver/driver/periph_ctrl.h new file mode 100644 index 00000000..3faa347b --- /dev/null +++ b/tools/sdk/include/driver/driver/periph_ctrl.h @@ -0,0 +1,70 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _DRIVER_PERIPH_CTRL_H_ +#define _DRIVER_PERIPH_CTRL_H_ +#include "esp_err.h" +#include "soc/soc.h" +#include "soc/dport_reg.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PERIPH_LEDC_MODULE = 0, + PERIPH_UART0_MODULE, + PERIPH_UART1_MODULE, + PERIPH_UART2_MODULE, + PERIPH_I2C0_MODULE, + PERIPH_I2C1_MODULE, + PERIPH_I2S0_MODULE, + PERIPH_I2S1_MODULE, + PERIPH_TIMG0_MODULE, + PERIPH_TIMG1_MODULE, + PERIPH_PWM0_MODULE, + PERIPH_PWM1_MODULE, + PERIPH_PWM2_MODULE, + PERIPH_PWM3_MODULE, + PERIPH_UHCI0_MODULE, + PERIPH_UHCI1_MODULE, +} periph_module_t; + +/** + * @brief enable peripheral module + * + * @param[in] periph : Peripheral module name + * + * + * @return NULL + * + */ +void periph_module_enable(periph_module_t periph); + +/** + * @brief disable peripheral module + * + * @param[in] periph : Peripheral module name + * + * + * @return NULL + * + */ +void periph_module_disable(periph_module_t periph); + +#ifdef __cplusplus +} +#endif + +#endif /* _DRIVER_PERIPH_CTRL_H_ */ diff --git a/tools/sdk/include/esp32/esp_attr.h b/tools/sdk/include/esp32/esp_attr.h new file mode 100644 index 00000000..156d2957 --- /dev/null +++ b/tools/sdk/include/esp32/esp_attr.h @@ -0,0 +1,41 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef __ESP_ATTR_H__ +#define __ESP_ATTR_H__ + +#define ROMFN_ATTR + +//Normally, the linker script will put all code and rodata in flash, +//and all variables in shared RAM. These macros can be used to redirect +//particular functions/variables to other memory regions. + +// Forces code into IRAM instead of flash +#define IRAM_ATTR __attribute__((section(".iram1"))) + +// Forces data into DRAM instead of flash +#define DRAM_ATTR __attribute__((section(".dram1"))) + +// Forces code into RTC fast memory +#define RTC_IRAM_ATTR __attribute__((section(".rtc.text"))) + +// Forces data into RTC slow memory +// Any variable marked with this attribute will keep its value +// during a deep sleep / wake cycle. +#define RTC_DATA_ATTR __attribute__((section(".rtc.data"))) + +// Forces read-only data into RTC slow memory +// Makes constant data available to RTC wake stubs (see esp_deepsleep.h) +#define RTC_RODATA_ATTR __attribute__((section(".rtc.rodata"))) + +#endif /* __ESP_ATTR_H__ */ diff --git a/tools/sdk/include/esp32/esp_deepsleep.h b/tools/sdk/include/esp32/esp_deepsleep.h new file mode 100644 index 00000000..3683a8ee --- /dev/null +++ b/tools/sdk/include/esp32/esp_deepsleep.h @@ -0,0 +1,137 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef __ESP_DEEPSLEEP_H__ +#define __ESP_DEEPSLEEP_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup Deep_Sleep_API Deep Sleep API + * @brief API for putting device into deep sleep + */ + +/** @addtogroup Deep_Sleep_API + * @{ + */ + +/** + * @brief Set the chip to deep-sleep mode. + * + * The device will automatically wake up after the deep-sleep time set + * by the users. Upon waking up, the device boots up from user_init. + * + * @attention The parameter time_in_us to be "uint64" is for further development. + * Only the low 32 bits of parameter time_in_us are avalable now. + * + * @param uint64 time_in_us : deep-sleep time, only the low 32bits are avalable now. unit: microsecond + * + * @return null + */ +void system_deep_sleep(uint64_t time_in_us); + +/** + * @brief Default stub to run on wake from deep sleep. + * + * Allows for executing code immediately on wake from sleep, before + * the software bootloader or esp-idf app has started up. + * + * This function is weak-linked, so you can implement your own version + * to run code immediately when the chip wakes from + * sleep. + * + * For example: + * @code + * void RTC_IRAM_ATTR esp_wake_deep_sleep(void) { + * esp_default_wake_deep_sleep(); + * // Add additional functionality here + * } + * + * (Implementing this function is not required for normal operation, + * in the usual case your app will start normally when waking from + * deep sleep.) + * + * esp_wake_deep_sleep() functionality is limited: + * + * - Runs immediately on wake, so most of the SoC is freshly reset - + * flash is unmapped and hardware is otherwise uninitialised. + * + * - Can only call functions implemented in ROM, or marked RTC_IRAM_ATTR. + * + * - Static variables marked RTC_DATA_ATTR will have initial values on + * cold boot, and maintain these values between sleep/wake cycles. + * + * - Read-only data should be marked RTC_RODATA_ATTR. Strings must be + * declared as variables also using RTC_RODATA_ATTR, like this: + * RTC_RODATA_ATTR const char message[] = "Hello from very early boot!\n"; + * + * - Any other static memory will not be initialised (either to zero, + * or to any predefined value). + * + * + * - If you implement your own stub, the first call the stub makes + should be to esp_default_wake_deep_sleep(). + */ +void esp_wake_deep_sleep(void); + +/** + * @brief Function type for stub to run on wake from sleep. + * + */ +typedef void (*esp_deep_sleep_wake_stub_fn_t)(void); + +/** + * @brief Install a new stub at runtime to run on wake from deep sleep + * + * If implementing esp_wake_deep_sleep() then it is not necessary to + * call this function. + * + * However, it is possible to call this function to substitute a + * different deep sleep stub. Any function used as a deep sleep stub + * must be marked RTC_IRAM_ATTR, and must obey the same rules given + * for esp_wake_deep_sleep(). + */ +void esp_set_deep_sleep_wake_stub(esp_deep_sleep_wake_stub_fn_t new_stub); + +/** + * @brief Return current wake from deep sleep stub, or NULL if + * no stub is installed. + */ +esp_deep_sleep_wake_stub_fn_t esp_get_deep_sleep_wake_stub(void); + +/* The default esp-idf-provided esp_wake_deep_sleep() stub. + + If you replace esp_wake_deep_sleep() in your program, or use + esp_set_deep_sleep_wake_stub(), then it is recommended you call + esp_default_wake_deep_sleep() as the first function in your stub. +*/ +void esp_default_wake_deep_sleep(void); + +/** + * @} + */ + + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __ESP_SYSTEM_H__ */ diff --git a/tools/sdk/include/esp32/esp_err.h b/tools/sdk/include/esp32/esp_err.h new file mode 100644 index 00000000..4f013f91 --- /dev/null +++ b/tools/sdk/include/esp32/esp_err.h @@ -0,0 +1,46 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef __ESP_ERR_H__ +#define __ESP_ERR_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int32_t esp_err_t; + +/* Definitions for error constants. */ + +#define ESP_OK 0 +#define ESP_FAIL -1 + +#define ESP_ERR_NO_MEM 0x101 +#define ESP_ERR_INVALID_ARG 0x102 +#define ESP_ERR_INVALID_STATE 0x103 + +/** + * Macro which can be used to check the error code, + * and terminate the program in case the code is not ESP_OK. + * Prints the failed statement to serial output. + */ +#define ESP_ERROR_CHECK(x) do { esp_err_t rc = (x); if (rc != ESP_OK) { assert(0 && #x);} } while(0); + +#ifdef __cplusplus +} +#endif + +#endif /* __ESP_ERR_H__ */ diff --git a/tools/sdk/include/esp32/esp_event.h b/tools/sdk/include/esp32/esp_event.h new file mode 100644 index 00000000..0ca4ca90 --- /dev/null +++ b/tools/sdk/include/esp32/esp_event.h @@ -0,0 +1,141 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef __ESP_EVENT_H__ +#define __ESP_EVENT_H__ + +#include +#include + +#include "esp_err.h" +#include "esp_wifi_types.h" +#include "tcpip_adapter.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + SYSTEM_EVENT_WIFI_READY = 0, /**< ESP32 WiFi ready */ + SYSTEM_EVENT_SCAN_DONE, /**< ESP32 finish scanning AP */ + SYSTEM_EVENT_STA_START, /**< ESP32 station start */ + SYSTEM_EVENT_STA_STOP, /**< ESP32 station stop */ + SYSTEM_EVENT_STA_CONNECTED, /**< ESP32 station connected to AP */ + SYSTEM_EVENT_STA_DISCONNECTED, /**< ESP32 station disconnected from AP */ + SYSTEM_EVENT_STA_AUTHMODE_CHANGE, /**< the auth mode of AP connected by ESP32 station changed */ + SYSTEM_EVENT_STA_GOT_IP, /**< ESP32 station got IP from connected AP */ + SYSTEM_EVENT_AP_START, /**< ESP32 soft-AP start */ + SYSTEM_EVENT_AP_STOP, /**< ESP32 soft-AP stop */ + SYSTEM_EVENT_AP_STACONNECTED, /**< a station connected to ESP32 soft-AP */ + SYSTEM_EVENT_AP_STADISCONNECTED, /**< a station disconnected from ESP32 soft-AP */ + SYSTEM_EVENT_AP_PROBEREQRECVED, /**< Receive probe request packet in soft-AP interface */ + SYSTEM_EVENT_MAX +} system_event_id_t; + +typedef struct { + uint32_t status; /**< status of scanning APs */ + uint8_t number; + uint8_t scan_id; +} system_event_sta_scan_done_t; + +typedef struct { + uint8_t ssid[32]; /**< SSID of connected AP */ + uint8_t ssid_len; /**< SSID length of connected AP */ + uint8_t bssid[6]; /**< BSSID of connected AP*/ + uint8_t channel; /**< channel of connected AP*/ + wifi_auth_mode_t authmode; +} system_event_sta_connected_t; + +typedef struct { + uint8_t ssid[32]; /**< SSID of disconnected AP */ + uint8_t ssid_len; /**< SSID length of disconnected AP */ + uint8_t bssid[6]; /**< BSSID of disconnected AP */ + uint8_t reason; /**< reason of disconnection */ +} system_event_sta_disconnected_t; + +typedef struct { + wifi_auth_mode_t old_mode; /**< the old auth mode of AP */ + wifi_auth_mode_t new_mode; /**< the new auth mode of AP */ +} system_event_sta_authmode_change_t; + +typedef struct { + tcpip_adapter_ip_info_t ip_info; +} system_event_sta_got_ip_t; + +typedef struct { + uint8_t mac[6]; /**< MAC address of the station connected to ESP32 soft-AP */ + uint8_t aid; /**< the aid that ESP32 soft-AP gives to the station connected to */ +} system_event_ap_staconnected_t; + +typedef struct { + uint8_t mac[6]; /**< MAC address of the station disconnects to ESP32 soft-AP */ + uint8_t aid; /**< the aid that ESP32 soft-AP gave to the station disconnects to */ +} system_event_ap_stadisconnected_t; + +typedef struct { + int rssi; /**< Received probe request signal strength */ + uint8_t mac[6]; /**< MAC address of the station which send probe request */ +} system_event_ap_probe_req_rx_t; + +typedef union { + system_event_sta_connected_t connected; /**< ESP32 station connected to AP */ + system_event_sta_disconnected_t disconnected; /**< ESP32 station disconnected to AP */ + system_event_sta_scan_done_t scan_done; /**< ESP32 station scan (APs) done */ + system_event_sta_authmode_change_t auth_change; /**< the auth mode of AP ESP32 station connected to changed */ + system_event_sta_got_ip_t got_ip; /**< ESP32 station got IP */ + system_event_ap_staconnected_t sta_connected; /**< a station connected to ESP32 soft-AP */ + system_event_ap_stadisconnected_t sta_disconnected; /**< a station disconnected to ESP32 soft-AP */ + system_event_ap_probe_req_rx_t ap_probereqrecved; /**< ESP32 soft-AP receive probe request packet */ +} system_event_info_t; + +typedef struct { + system_event_id_t event_id; /**< event ID */ + system_event_info_t event_info; /**< event information */ +} system_event_t; + +typedef esp_err_t (*system_event_handler_t)(system_event_t *event); + +/** + * @brief Send a event to event task + * + * @attention 1. Other task/modules, such as the TCPIP module, can call this API to send an event to event task + * + * @param system_event_t * event : event + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_event_send(system_event_t *event); + +/** + * @brief Default event handler for system events + * + * This function performs default handling of system events. + * When using esp_event_loop APIs, it is called automatically before invoking the user-provided + * callback function. + * + * Applications which implement a custom event loop must call this function + * as part of event processing. + * + * @param event pointer to event to be handled + * @return ESP_OK if an event was handled successfully + */ +esp_err_t esp_event_process_default(system_event_t *event); + + +#ifdef __cplusplus +} +#endif + +#endif /* __ESP_EVENT_H__ */ diff --git a/tools/sdk/include/esp32/esp_event_loop.h b/tools/sdk/include/esp32/esp_event_loop.h new file mode 100644 index 00000000..97672aed --- /dev/null +++ b/tools/sdk/include/esp32/esp_event_loop.h @@ -0,0 +1,81 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef __ESP_EVENT_LOOP_H__ +#define __ESP_EVENT_LOOP_H__ + +#include +#include + +#include "esp_err.h" +#include "esp_event.h" +#include "freertos/FreeRTOS.h" +#include "freertos/queue.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Application specified event callback function + * + * @param void *ctx : reserved for user + * @param system_event_t *event : event type defined in this file + * + * @return ESP_OK : succeed + * @return others : fail + */ +typedef esp_err_t (*system_event_cb_t)(void *ctx, system_event_t *event); + +/** + * @brief Initialize event loop + * Create the event handler and task + * + * @param system_event_cb_t cb : application specified event callback, it can be modified by call esp_event_set_cb + * @param void *ctx : reserved for user + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx); + +/** + * @brief Set application specified event callback function + * + * @attention 1. If cb is NULL, means application don't need to handle + * If cb is not NULL, it will be call when an event is received, after the default event callback is completed + * + * @param system_event_cb_t cb : callback + * @param void *ctx : reserved for user + * + * @return system_event_cb_t : old callback + */ +system_event_cb_t esp_event_loop_set_cb(system_event_cb_t cb, void *ctx); + +/** + * @brief Get the queue used by event loop + * + * @attention : currently this API is used to initialize "q" parameter + * of wifi_init structure. + * + * @return QueueHandle_t : event queue handle + */ +QueueHandle_t esp_event_loop_get_queue(void); + + +#ifdef __cplusplus +} +#endif + +#endif /* __ESP_EVENT_LOOP_H__ */ diff --git a/tools/sdk/include/esp32/esp_intr.h b/tools/sdk/include/esp32/esp_intr.h new file mode 100644 index 00000000..e138133f --- /dev/null +++ b/tools/sdk/include/esp32/esp_intr.h @@ -0,0 +1,209 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef __ESP_INTR_H__ +#define __ESP_INTR_H__ + +#include "rom/ets_sys.h" +#include "freertos/xtensa_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ESP_CCOMPARE_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_CCOMPARE_INUM, (func), (void *)(arg)) + +#define ESP_EPWM_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_EPWM_INUM, (func), (void *)(arg)) + +#define ESP_MPWM_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_MPWM_INUM, (func), (void *)(arg)) + +#define ESP_SPI1_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_SPI1_INUM, (func), (void *)(arg)) + +#define ESP_SPI2_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_SPI2_INUM, (func), (void *)(arg)) + +#define ESP_SPI3_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_SPI3_INUM, (func), (void *)(arg)) + +#define ESP_I2S0_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_I2S0_INUM, (func), (void *)(arg)) + +#define ESP_PCNT_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_PCNT_INUM, (func), (void *)(arg)) + +#define ESP_LEDC_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_LEDC_INUM, (func), (void *)(arg)) + +#define ESP_WMAC_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_WMAC_INUM, (func), (void *)(arg)) + +#define ESP_FRC_TIMER1_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_FRC_TIMER1_INUM, (func), (void *)(arg)) + +#define ESP_FRC_TIMER2_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_FRC_TIMER2_INUM, (func), (void *)(arg)) + +#define ESP_GPIO_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_GPIO_INUM, (func), (void *)(arg)) + +#define ESP_UART0_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_UART0_INUM, (func), (void *)(arg)) + +#define ESP_WDT_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_WDT_INUM, (func), (void *)(arg)) + +#define ESP_RTC_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_RTC_INUM, (func), (void *)(arg)) + +#define ESP_SLC_INTR_ATTACH(func, arg) \ + xt_set_interrupt_handler(ETS_SLC_INUM, (func), (void *)(arg)) + +#define ESP_RMT_CTRL_INTRL(func,arg)\ + xt_set_interrupt_handler(ETS_RMT_CTRL_INUM, (func), (void *)(arg)) + +#define ESP_INTR_ENABLE(inum) \ + xt_ints_on((1< + +typedef void (*esp_ipc_func_t)(void* arg); + +/** + * @brief Inter-processor call APIs + * + * FreeRTOS provides several APIs which can be used to communicate between + * different tasks, including tasks running on different CPUs. + * This module provides additional APIs to run some code on the other CPU. + * + * These APIs can only be used when FreeRTOS scheduler is running. + */ + + +/** + * @brief Initialize inter-processor call module. + * + * This function start two tasks, one on each CPU. These tasks are started + * with high priority. These tasks are normally inactive, waiting until one of + * the esp_ipc_call_* functions to be used. One of these tasks will be + * woken up to execute the callback provided to esp_ipc_call_nonblocking or + * esp_ipc_call_blocking. + */ +void esp_ipc_init(); + + +/** + * @brief Execute function on the given CPU + * + * This will wake a high-priority task on CPU indicated by cpu_id argument, + * and run func(arg) in the context of that task. + * This function returns as soon as the high-priority task is woken up. + * If another IPC call is already being executed, this function will also wait + * for it to complete. + * + * In single-core mode, returns ESP_ERR_INVALID_ARG for cpu_id 1. + * + * @param cpu_id CPU where function should be executed (0 or 1) + * @param func pointer to a function which should be executed + * @param arg arbitrary argument to be passed into function + * + * @return ESP_ERR_INVALID_ARG if cpu_id is invalid + * ESP_ERR_INVALID_STATE if FreeRTOS scheduler is not running + * ESP_OK otherwise + */ +esp_err_t esp_ipc_call(uint32_t cpu_id, esp_ipc_func_t func, void* arg); + + +/** + * @brief Execute function on the given CPU and wait for it to finish + * + * This will wake a high-priority task on CPU indicated by cpu_id argument, + * and run func(arg) in the context of that task. + * This function waits for func to return. + * + * In single-core mode, returns ESP_ERR_INVALID_ARG for cpu_id 1. + * + * @param cpu_id CPU where function should be executed (0 or 1) + * @param func pointer to a function which should be executed + * @param arg arbitrary argument to be passed into function + * + * @return ESP_ERR_INVALID_ARG if cpu_id is invalid + * ESP_ERR_INVALID_STATE if FreeRTOS scheduler is not running + * ESP_OK otherwise + */ +esp_err_t esp_ipc_call_blocking(uint32_t cpu_id, esp_ipc_func_t func, void* arg); + + + +#endif /* __ESP_IPC_H__ */ diff --git a/tools/sdk/include/esp32/esp_smartconfig.h b/tools/sdk/include/esp32/esp_smartconfig.h new file mode 100644 index 00000000..b30ce1a1 --- /dev/null +++ b/tools/sdk/include/esp32/esp_smartconfig.h @@ -0,0 +1,143 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef __ESP_SMARTCONFIG_H__ +#define __ESP_SMARTCONFIG_H__ +#include +#include +#include "esp_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + SC_STATUS_WAIT = 0, /**< waiting, do not start connection in this phase */ + SC_STATUS_FIND_CHANNEL, /**< find target channel, start connection by APP in this phase */ + SC_STATUS_GETTING_SSID_PSWD, /**< getting SSID and password of target AP */ + SC_STATUS_LINK, /**< connecting to target AP */ + SC_STATUS_LINK_OVER, /**< got IP, connect to AP successfully */ +} smartconfig_status_t; + +typedef enum { + SC_TYPE_ESPTOUCH = 0, /**< protocol: ESPTouch */ + SC_TYPE_AIRKISS, /**< protocol: AirKiss */ + SC_TYPE_ESPTOUCH_AIRKISS, /**< protocol: ESPTouch and AirKiss */ +} smartconfig_type_t; + +/** + * @brief The callback of SmartConfig, executed when smart-config status changed. + * + * @param smartconfig_status_t status : status of SmartConfig: + * - if status == SC_STATUS_GETTING_SSID_PSWD, parameter void *pdata is a pointer + of smartconfig_type_t, means SmartConfig type: AirKiss or ESP-TOUCH. + * - if status == SC_STATUS_LINK, parameter void *pdata is a pointer of struct station_config; + * - if status == SC_STATUS_LINK_OVER, parameter void *pdata is a pointer of mobile + * phone's IP address, 4 bytes. This is only available in ESPTOUCH, otherwise, + * it is NULL. + * - otherwise, parameter void *pdata is NULL. + * @param void *pdata : data of SmartConfig + * + * @return null + */ +typedef void (*sc_callback_t)(smartconfig_status_t status, void *pdata); + +/** + * @brief Get the version of SmartConfig. + * + * @param null + * + * @return SmartConfig version + */ +const char *esp_smartconfig_get_version(void); + +/** + * @brief Start SmartConfig mode. + * + * Start SmartConfig mode, to connect ESP32 station to AP, by sniffing + * for special packets from the air, containing SSID and password of desired AP. + * You need to broadcast the SSID and password (e.g. from mobile device or computer) + * with the SSID and password encoded. + * + * @attention 1. This API can only be called in station mode. + * @attention 2. During SmartConfig, ESP32 station and soft-AP are disabled. + * @attention 3. Can not call esp_smartconfig_start twice before it finish, please call + * esp_smartconfig_stop first. + * @attention 4. Don't call any other APIs during SmartConfig, please call esp_smartconfig_stop first. + * + * @param sc_callback_t cb : SmartConfig callback; executed when SmartConfig status changed; + * @param uint8 log : 1, UART output logs; otherwise, UART only outputs the result. + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_smartconfig_start(sc_callback_t cb, ...); + +/** + * @brief Stop SmartConfig, free the buffer taken by esp_smartconfig_start. + * + * @attention Whether connect to AP succeed or not, this API should be called to free + * memory taken by smartconfig_start. + * + * @param null + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_smartconfig_stop(void); + +/** + * @brief Set timeout of SmartConfig. + * + * @attention SmartConfig timeout start at SC_STATUS_FIND_CHANNEL, SmartConfig will + * restart if timeout. + * + * @param uint8 time_s : range 15s~255s, offset:45s. + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_esptouch_set_timeout(uint8_t time_s); + +/** + * @brief Set protocol type of SmartConfig. + * + * @attention If users need to set the SmartConfig type, please set it before calling + * esp_smartconfig_start. + * + * @param smartconfig_type_t type : AirKiss, ESP-TOUCH or both. + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_smartconfig_set_type(smartconfig_type_t type); + +/** + * @brief Set mode of SmartConfig. default normal mode. + * + * @attention If users need to set the SmartConfig mode, please set it before calling + * esp_smartconfig_start. Different mode should match different APP(phone). + * + * @param bool enable : false-disable(default); true-enable; + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_smartconfig_fast_mode(bool enable); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/esp32/esp_ssc.h b/tools/sdk/include/esp32/esp_ssc.h new file mode 100644 index 00000000..02893ff4 --- /dev/null +++ b/tools/sdk/include/esp32/esp_ssc.h @@ -0,0 +1,119 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef __ESP_SSC_H__ +#define __ESP_SSC_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define CMD_T_ASYNC 0x01 +#define CMD_T_SYNC 0x02 + +typedef struct cmd_s { + char *cmd_str; + uint8_t flag; + uint8_t id; + void (* cmd_func)(void); + void (* cmd_callback)(void *arg); +} ssc_cmd_t; + +#define MAX_LINE_N 127 + +typedef enum { + SSC_BR_9600 = 9600, + SSC_BR_19200 = 19200, + SSC_BR_38400 = 38400, + SSC_BR_57600 = 57600, + SSC_BR_74880 = 74880, + SSC_BR_115200 = 115200, + SSC_BR_230400 = 230400, + SSC_BR_460800 = 460800, + SSC_BR_921600 = 921600 +} SscBaudRate; + +/** \defgroup SSC_APIs SSC APIs + * @brief SSC APIs + * + * SSC means simple serial command. + * SSC APIs allows users to define their own command, users can refer to spiffs_test/test_main.c. + * + */ + +/** @addtogroup SSC_APIs + * @{ + */ + +/** + * @brief Initial the ssc function. + * + * @attention param is no use, just compatible with ESP8266, default bandrate is 115200 + * + * @param SscBaudRate bandrate : baud rate + * + * @return null + */ +void ssc_attach(SscBaudRate bandrate); + +/** + * @brief Get the length of the simple serial command. + * + * @param null + * + * @return length of the command. + */ +int ssc_param_len(void); + +/** + * @brief Get the simple serial command string. + * + * @param null + * + * @return the command. + */ +char *ssc_param_str(void); + +/** + * @brief Parse the simple serial command (ssc). + * + * @param char *pLine : [input] the ssc string + * @param char *argv[] : [output] parameters of the ssc + * + * @return the number of parameters. + */ +int ssc_parse_param(char *pLine, char *argv[]); + +/** + * @brief Register the user-defined simple serial command (ssc) set. + * + * @param ssc_cmd_t *cmdset : the ssc set + * @param uint8 cmdnum : number of commands + * @param void (* help)(void) : callback of user-guide + * + * @return null + */ +void ssc_register(ssc_cmd_t *cmdset, uint8_t cmdnum, void (* help)(void)); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __ESP_SSC_H__ */ diff --git a/tools/sdk/include/esp32/esp_system.h b/tools/sdk/include/esp32/esp_system.h new file mode 100644 index 00000000..84133366 --- /dev/null +++ b/tools/sdk/include/esp32/esp_system.h @@ -0,0 +1,187 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef __ESP_SYSTEM_H__ +#define __ESP_SYSTEM_H__ + +#include + +#include "esp_err.h" +#include "esp_deepsleep.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup System_APIs System APIs + * @brief System APIs + */ + +/** @addtogroup System_APIs + * @{ + */ + +/** + * @brief Get information of the SDK version. + * + * @param null + * + * @return Information of the SDK version. + */ +const char *system_get_sdk_version(void); + +/** + * @brief Reset to default settings. + * + * Reset to default settings of the following APIs : wifi_station_set_auto_connect, + * wifi_set_phy_mode, wifi_softap_set_config related, wifi_station_set_config + * related, and wifi_set_opmode. + * + * @param null + * + * @return null + */ +void system_restore(void); + +/** + * @brief Restart system. + * + * @param null + * + * @return null + */ +void system_restart(void); + +/** + * @brief Get system time, unit: microsecond. + * + * @param null + * + * @return System time, unit: microsecond. + */ +uint32_t system_get_time(void); + +/** + * @brief Get the size of available heap. + * + * @param null + * + * @return Available heap size. + */ +uint32_t system_get_free_heap_size(void); + +/** + * @brief Get RTC time, unit: RTC clock cycle. + * + * @param null + * + * @return RTC time. + */ +uint64_t system_get_rtc_time(void); + +/** + * @brief Read user data from the RTC memory. + * + * The user data segment (1024 bytes, as shown below) is used to store user data. + * + * |<---- system data(512 bytes) ---->|<----------- user data(1024 bytes) --------->| + * + * @attention Read and write unit for data stored in the RTC memory is 4 bytes. + * @attention src_addr is the block number (4 bytes per block). So when reading data + * at the beginning of the user data segment, src_addr will be 512/4 = 128, + * n will be data length. + * + * @param uint16 src : source address of rtc memory, src_addr >= 128 + * @param void *dst : data pointer + * @param uint16 n : data length, unit: byte + * + * @return true : succeed + * @return false : fail + */ +bool system_rtc_mem_read(uint16_t src, void *dst, uint16_t n); + +/** + * @brief Write user data to the RTC memory. + * + * During deep-sleep, only RTC is working. So users can store their data + * in RTC memory if it is needed. The user data segment below (1024 bytes) + * is used to store the user data. + * + * |<---- system data(512 bytes) ---->|<----------- user data(1024 bytes) --------->| + * + * @attention Read and write unit for data stored in the RTC memory is 4 bytes. + * @attention src_addr is the block number (4 bytes per block). So when storing data + * at the beginning of the user data segment, src_addr will be 512/4 = 128, + * n will be data length. + * + * @param uint16 src : source address of rtc memory, src_addr >= 128 + * @param void *dst : data pointer + * @param uint16 n : data length, unit: byte + * + * @return true : succeed + * @return false : fail + */ +bool system_rtc_mem_write(uint16_t dst, const void *src, uint16_t n); + +/** \defgroup System_boot_APIs Boot APIs + * @brief boot APIs + */ + +/** @addtogroup System_boot_APIs + * @{ + */ + +/** + * @} + */ + +/** \defgroup Hardware_MAC_APIs Hardware MAC APIs + * @brief Hardware MAC address APIs + * + * In WiFi MAC, only ESP32 station MAC is the hardware MAC, ESP32 softAP MAC is a software MAC + * calculated from ESP32 station MAC. + * So users need to call wifi_get_macaddr to query the ESP32 softAP MAC if ESP32 station MAC changed. + * + */ + +/** @addtogroup Hardware_MAC_APIs + * @{ + */ + +/** + * @brief Read hardware MAC address. + * + * @param uint8 mac[6] : the hardware MAC address, length: 6 bytes. + * + * @return esp_err_t + */ +esp_err_t system_efuse_read_mac(uint8_t mac[6]); + + +void system_init(void); + +/** + * @} + */ + + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __ESP_SYSTEM_H__ */ diff --git a/tools/sdk/include/esp32/esp_task.h b/tools/sdk/include/esp32/esp_task.h new file mode 100644 index 00000000..bb028bf4 --- /dev/null +++ b/tools/sdk/include/esp32/esp_task.h @@ -0,0 +1,59 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +/* Notes: + * 1. Put all task priority and stack size definition in this file + * 2. If the task priority is less than 10, use ESP_TASK_PRIO_MIN + X style, + * otherwise use ESP_TASK_PRIO_MAX - X style + * 3. If this is a daemon task, the macro prefix is ESP_TASKD_, otherwise + * it's ESP_TASK_ + * 4. If the configMAX_PRIORITIES is modified, please make all priority are + * greater than 0 + * 5. Make sure esp_task.h is consistent between wifi lib and idf + */ + +#ifndef _ESP_TASK_H_ +#define _ESP_TASK_H_ + +#include "sdkconfig.h" + +#define ESP_TASK_PRIO_MAX (configMAX_PRIORITIES) +#define ESP_TASK_PRIO_MIN (0) + +/* Wifi library task */ +#define ESP_TASKD_WATCHDOG_PRIO (ESP_TASK_PRIO_MAX - 1) +#define ESP_TASKD_WATCHDOG_STACK 2048 +#define ESP_TASK_WPA2_PRIO (ESP_TASK_PRIO_MAX - 1) +#define ESP_TASK_WPA2_STACK 2048 +#define ESP_TASKD_WIFI_PRIO (ESP_TASK_PRIO_MAX - 2) +#define ESP_TASKD_WIFI_STACK 8196 +#define ESP_TASKD_WIFI_TIMER_PRIO (ESP_TASK_PRIO_MAX - 3) +#define ESP_TASKD_WIFI_TIMER_STACK 2048 +#define ESP_TASK_WPS_PRIO (ESP_TASK_PRIO_MIN + 2) +#define ESP_TASK_WPS_STACK 2048 + +/* Bt contoller Task */ +/* controller */ +#define ESP_TASK_BT_CONTROLLER_PRIO (ESP_TASK_PRIO_MAX - 1) +#define ESP_TASK_BT_CONTROLLER_STACK 4096 + +/* idf task */ +#define ESP_TASKD_EVENT_PRIO (ESP_TASK_PRIO_MAX - 5) +#define ESP_TASKD_EVENT_STACK CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE +#define ESP_TASK_TCPIP_PRIO (ESP_TASK_PRIO_MAX - 7) +#define ESP_TASK_TCPIP_STACK 2048 +#define ESP_TASK_MAIN_PRIO (ESP_TASK_PRIO_MIN + 1) +#define ESP_TASK_MAIN_STACK CONFIG_MAIN_TASK_STACK_SIZE + +#endif diff --git a/tools/sdk/include/esp32/esp_types.h b/tools/sdk/include/esp32/esp_types.h new file mode 100755 index 00000000..c142aee6 --- /dev/null +++ b/tools/sdk/include/esp32/esp_types.h @@ -0,0 +1,73 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef __ESP_TYPES_H__ +#define __ESP_TYPES_H__ + +#ifdef __GNUC__ +#include +#endif /*__GNUC__*/ +#include +#include +#include + +#define __ATTRIB_PACK __attribute__ ((packed)) +#define __ATTRIB_PRINTF __attribute__ ((format (printf, 1, 2))) +#define __ATTRIB_NORETURN __attribute__ ((noreturn)) +#define __ATTRIB_ALIGN(x) __attribute__ ((aligned((x)))) +#define INLINE __inline__ + +#define LOCAL static + +/* probably should not put STATUS here */ +typedef enum { + OK = 0, + FAIL, + PENDING, + BUSY, + CANCEL, +} STATUS; + +//#define _LITTLE_ENDIAN 1234 +//#define _BYTE_ORDER == _LITTLE_ENDIAN + +#define ASSERT( x ) do { \ + if (!(x)) { \ + printf("%s %u\n", __FILE__, __LINE__); \ + while (1) { \ + asm volatile("nop"); \ + }; \ + } \ +} while (0) + +/* #if __GNUC_PREREQ__(4, 1) */ +#ifndef __GNUC__ +#if 1 +#define __offsetof(type, field) __builtin_offsetof(type, field) +#else +#define __offsetof(type, field) ((size_t)(&((type *)0)->field)) +#endif +#endif /* __GNUC__ */ + + +/* Macros for counting and rounding. */ +#ifndef howmany +#define howmany(x, y) (((x)+((y)-1))/(y)) +#endif + +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - __offsetof(type,member) );}) + +#endif /* __ESP_TYPES_H__ */ diff --git a/tools/sdk/include/esp32/esp_wifi.h b/tools/sdk/include/esp32/esp_wifi.h new file mode 100644 index 00000000..12378f33 --- /dev/null +++ b/tools/sdk/include/esp32/esp_wifi.h @@ -0,0 +1,586 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + + +/* Notes about WiFi Programming + * + * The esp32 WiFi programming model can be depicted as following picture: + * + * + * default handler user handler + * ------------- --------------- --------------- + * | | event | | callback or | | + * | tcpip | ---------> | event | ----------> | application | + * | stack | | task | event | task | + * |-----------| |-------------| |-------------| + * /|\ | + * | | + * event | | + * | | + * | | + * --------------- | + * | | | + * | WiFi Driver |/__________________| + * | |\ API call + * | | + * |-------------| + * + * The WiFi driver can be consider as black box, it knows nothing about the high layer code, such as + * TCPIP stack, application task, event task etc, all it can do is to receive API call from high layer + * or post event queue to a specified Queue, which is initialized by API esp_wifi_init(). + * + * The event task is a daemon task, which receives events from WiFi driver or from other subsystem, such + * as TCPIP stack, event task will call the default callback function on receiving the event. For example, + * on receiving event SYSTEM_EVENT_STA_CONNECTED, it will call tcpip_adapter_start() to start the DHCP + * client in it's default handler. + * + * Application can register it's own event callback function by API esp_event_init, then the application callback + * function will be called after the default callback. Also, if application doesn't want to execute the callback + * in the event task, what it needs to do is to post the related event to application task in the application callback function. + * + * The application task (code) generally mixes all these thing together, it calls APIs to init the system/WiFi and + * handle the events when necessary. + * + */ + +#ifndef __ESP_WIFI_H__ +#define __ESP_WIFI_H__ + +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/queue.h" +#include "rom/queue.h" +#include "esp_err.h" +#include "esp_wifi_types.h" +#include "esp_event.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + system_event_handler_t event_handler; /**< WiFi event handler */ +} wifi_init_config_t; + + +#define WIFI_INIT_CONFIG_DEFAULT() { \ + .event_handler = &esp_event_send, \ +}; + +/** + * @brief Init WiFi + * Alloc resource for WiFi driver, such as WiFi control structure, RX/TX buffer, + * WiFi NVS structure etc, this WiFi also start WiFi task + * + * @attention 1. This API must be called before all other WiFi API can be called + * @attention 2. Generally we should init event_q in *config, WiFi driver will post the event + * to this queue when event happens, such as, when station connects to WiFi, WiFi driver + * will post station connected event to this queue. If the queue is not initialized, WiFi + * will not post any events + * + * @param wifi_init_config_t *config : provide WiFi init configuration + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_init(wifi_init_config_t *config); + +/** + * @brief Deinit WiFi + * Free all resource allocated in esp_wifi_init and stop WiFi task + * + * @attention 1. This API should be called if you want to remove WiFi driver from the system + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_deinit(void); + +/** + * @brief Set the WiFi operating mode + * + * Set the WiFi operating mode as station, soft-AP or station+soft-AP, + * The default mode is soft-AP mode. + * + * @param wifi_mode_t mode : WiFi operating modes: + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_mode(wifi_mode_t mode); + +/** + * @brief Get current operating mode of WiFi + * + * @param wifi_mode_t *mode : store current WiFi mode + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_mode(wifi_mode_t *mode); + +/** + * @brief Start WiFi according to current configuration + * If mode is WIFI_MODE_STA, it create station control block and start station + * If mode is WIFI_MODE_AP, it create soft-AP control block and start soft-AP + * If mode is WIFI_MODE_APSTA, it create soft-AP and station control block and start soft-AP and station + * + * @param null + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_start(void); + +/** + * @brief Stop WiFi + If mode is WIFI_MODE_STA, it stop station and free station control block + * If mode is WIFI_MODE_AP, it stop soft-AP and free soft-AP control block + * If mode is WIFI_MODE_APSTA, it stop station/soft-AP and free station/soft-AP control block + * + * @param null + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_stop(void); + +/** + * @brief Connect the ESP32 WiFi station to the AP. + * + * @attention 1. This API only impact WIFI_MODE_STA or WIFI_MODE_APSTA mode + * @attention 2. If the ESP32 is connected to an AP, call esp_wifi_disconnect to disconnect. + * + * @param null + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_connect(void); + +/** + * @brief Disconnect the ESP32 WiFi station from the AP. + * + * @param null + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_disconnect(void); + +/** + * @brief Currently this API is just an stub API + * + * @param null + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_clear_fast_connect(void); + +/** + * @brief Kick the all station or associated id equals to aid + * + * @param uint16_t aid : when aid is 0, kick all stations, otherwise kick station whose associated id is aid + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_kick_station(uint16_t aid); + +/** + * @brief Scan all available APs. + * + * @attention If this API is called, the found APs are stored in WiFi driver dynamic allocated memory and the + * will be freed in esp_wifi_get_ap_list, so generally, call esp_wifi_get_ap_list to cause + * the memory to be freed once the scan is done + * + * @param struct scan_config *config : configuration of scanning + * @param bool block : if block is true, this API will block the caller until the scan is done, otherwise + * it will return immediately + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_scan_start(wifi_scan_config_t *conf, bool block); + +/** + * @brief Stop the scan in process + * + * @param null + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_scan_stop(void); + +/** + * @brief Get number of APs found in last scan + * + * @param uint16_t *number : store number of APIs found in last scan + * + * @attention This API can only be called when the scan is completed, otherwise it may get wrong value + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_ap_num(uint16_t *number); + +/** + * @brief Get AP list found in last scan + * + * @param uint16_t *number : as input param, it stores max AP number ap_list can hold, as output param, it store + the actual AP number this API returns + * @param wifi_ap_list_t *ap_list : a list to hold the found APs + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_ap_list(uint16_t *number, wifi_ap_list_t *ap_list); + +/** + * @brief Set current power save type + * + * @param wifi_ps_type_t type : power save type + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_ps(wifi_ps_type_t type); + +/** + * @brief Get current power save type + * + * @param wifi_ps_type_t *type : store current power save type + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_ps(wifi_ps_type_t *type); + +/** + * @brief Set protocol type of specified interface + * The default protocol is (WIFI_PROTOCOL_11B|WIFI_PROTOCOL_11G|WIFI_PROTOCOL_11N) + * + * @attention Currently we only support 802.11b or 802.11bg or 802.11bgn mode + * + * @param wifi_interface_t ifx : interfaces + * @param uint8_t protocol : WiFi protocol bitmap + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_protocol(wifi_interface_t ifx, uint8_t protocol_bitmap); + +/** + * @brief Get the current protocol bitmap of specified ifx + * + * @param wifi_interface_t ifx : interfaces + * @param uint8_t protocol : store current WiFi protocol bitmap of interface ifx + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_protocol(wifi_interface_t ifx, uint8_t *protocol_bitmap); + +/** + * @brief Set the bandwidth of ESP32 specified interface + * + * @attention 1. API return false if try to configure a interface that is not enable + * @attention 2. WIFI_BW_HT40 is supported only when the interface support 11N + * + * @param wifi_interface_t ifx : interface to be configured + * @param wifi_bandwidth_t bw : bandwidth + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_bandwidth(wifi_interface_t ifx, wifi_bandwidth_t bw); + +/** + * @brief Get the bandwidth of ESP32 specified interface + * + * @attention 1. API return false if try to get a interface that is not enable + * + * @param wifi_interface_t ifx : interface to be configured + * @param wifi_bandwidth_t *bw : store bandwidth of interface ifx + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_bandwidth(wifi_interface_t ifx, wifi_bandwidth_t *bw); + +/** + * @brief Set primary/second channel of ESP32 + * + * @attention 1. This is a special API for sniffer + * + * @param uint8_t primary : for HT20, primary is the channel number, for HT40, primary is the primary channel + * @param wifi_second_chan_t second : for HT20, second is ignored, for HT40, second is the second channel + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_channel(uint8_t primary, wifi_second_chan_t second); + +/** + * @brief Get the primary/second channel of ESP32 + * + * @attention 1. API return false if try to get a interface that is not enable + * + * @param uint8_t *primary : store current primary channel + * @param wifi_second_chan_t *second : store current second channel + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_channel(uint8_t *primary, wifi_second_chan_t *second); + +/** + * @brief Set country code + * The default value is WIFI_COUNTRY_CN + * + * @param wifi_country_t country : country type + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_country(wifi_country_t country); + +/** + * @brief Get country code + * + * @param wifi_country_t country : store current country + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_country(wifi_country_t *country); + +/** + * @brief Set MAC address of the ESP32 WiFi station or the soft-AP interface. + * + * @attention 1. This API can only be called when the interface is disabled + * @attention 2. ESP32 soft-AP and station have different MAC addresses, do not set them to be the same. + * - The bit0 of the first byte of ESP32 MAC address can not be 1. For example, the MAC address + * can set to be "1a:XX:XX:XX:XX:XX", but can not be "15:XX:XX:XX:XX:XX". + * + * @param wifi_interface_t ifx : interface + * @param uint8 mac[6]: the MAC address. + * + * @return true : succeed + * @return false : fail + */ +esp_err_t esp_wifi_set_mac(wifi_interface_t ifx, uint8_t mac[6]); + +/** + * @brief Get mac of specified interface + * + * @param uint8_t mac[6] : store mac of this interface ifx + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_mac(wifi_interface_t ifx, uint8_t mac[6]); + +/** + * @brief The RX callback function in the promiscuous mode. + * + * Each time a packet is received, the callback function will be called. + * + * @param void *buf : the data received + * @param uint16_t len : data length + * + * @return ESP_OK : succeed + * @return others : fail + */ +typedef void (* wifi_promiscuous_cb_t)(void *buf, uint16_t len); + +/** + * @brief Register the RX callback function in the promiscuous mode. + * + * Each time a packet is received, the registered callback function will be called. + * + * @param wifi_promiscuous_cb_t cb : callback + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_promiscuous_rx_cb(wifi_promiscuous_cb_t cb); + +/** + * @brief Enable the promiscuous mode. + * + * @param bool promiscuous : false - disable / true - enable + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_promiscuous(bool en); + +/** + * @brief Get the promiscuous mode. + * + * @param bool *enable : store the current status of promiscuous mode + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_promiscuous(bool *en); + +/** + * @brief Set the configuration of the ESP32 STA or AP + * + * @attention 1. This API can be called only when specified interface is enabled, otherwise, API fail + * @attention 2. For station configuration, bssid_set needs to be 0; and it needs to be 1 only when users need to check the MAC address of the AP. + * @attention 3. ESP32 is limited to only one channel, so when in the soft-AP+station mode, the soft-AP will adjust its channel automatically to be the same as + * the channel of the ESP32 station. + * + * @param wifi_interface_t ifx : interface + * @param wifi_config_t *conf : station or soft-AP configuration + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_config(wifi_interface_t ifx, wifi_config_t *conf); + +/** + * @brief Get configuration of specified interface + * + * @param wifi_interface_t ifx : interface + * @param wifi_config_t *conf : station or soft-AP configuration + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_config(wifi_interface_t ifx, wifi_config_t *conf); + +/** + * @brief Get STAs associated with soft-AP + * + * @attention SSC only API + * + * @param struct station_info **station : station list + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_station_list(struct station_info **station); + +esp_err_t esp_wifi_free_station_list(void); + +/** + * @brief Set the WiFi API configuration storage type + * + * @attention 1. The default value is WIFI_STORAGE_FLASH + * + * @param wifi_storage_t storage : storage type + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_storage(wifi_storage_t storage); + +/** + * @brief The WiFi RX callback function + * + * Each time the WiFi need to forward the packets to high layer, the callback function will be called + * + */ +typedef esp_err_t (*wifi_rxcb_t)(void *buffer, uint16_t len, void *eb); + +/** + * @brief Set the WiFi RX callback + * + * @attention 1. Currently we support only one RX callback for each interface + * + * @param wifi_interface_t ifx : interface + * @param wifi_rxcb_t fn : WiFi RX callback + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_reg_rxcb(wifi_interface_t ifx, wifi_rxcb_t fn); + +/** + * @brief Set auto connect + * The default value is true + * + * @attention 1. + * + * @param bool en : true - enable auto connect / false - disable auto connect + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_auto_connect(bool en); + +/** + * @brief Get the auto connect flag + * + * @param bool *en : store current auto connect configuration + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_get_auto_connect(bool *en); + +/** + * @brief Set vendor specific element + * + * @param bool enable : enable or not + * @param wifi_vendor_ie_type_t type : 0 - WIFI_VND_IE_TYPE_BEACON + * 1 - WIFI_VND_IE_TYPE_PROBE_REQ + * 2 - WIFI_VND_IE_TYPE_PROBE_RESP + * 3 - WIFI_VND_IE_TYPE_ASSOC_REQ + * 4 - WIFI_VND_IE_TYPE_ASSOC_RESP + * @param wifi_vendor_ie_id_t idx : 0 - WIFI_VND_IE_ID_0 + 1 - WIFI_VND_IE_ID_1 + * @param uint8_t *vnd_ie : pointer to a vendor specific element + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_vendor_ie(bool enable, wifi_vendor_ie_type_t type, wifi_vendor_ie_id_t idx, uint8_t *vnd_ie); + +/** + * @brief Define function pointer for vendor specific element callback + * @param void *ctx : reserved + * @param wifi_vendor_ie_type_t type : 0 - WIFI_VND_IE_TYPE_BEACON + * 1 - WIFI_VND_IE_TYPE_PROBE_REQ + * 2 - WIFI_VND_IE_TYPE_PROBE_RESP + * 3 - WIFI_VND_IE_TYPE_ASSOC_REQ + * 4 - WIFI_VND_IE_TYPE_ASSOC_RESP + * @param const uint8_t sa[6] : source address + * @param const uint8_t *vnd_ie : pointer to a vendor specific element + * @param int rssi : received signal strength indication + */ +typedef void (*esp_vendor_ie_cb_t) (void *ctx, wifi_vendor_ie_type_t type, const uint8_t sa[6], const uint8_t *vnd_ie, int rssi); + +/** + * @brief Set vendor specific element callback + * + * @param esp_vendor_ie_cb_t cb : callback function + * @param void *ctx : reserved + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_set_vendor_ie_cb(esp_vendor_ie_cb_t cb, void *ctx); + +#ifdef __cplusplus +} +#endif + +#endif /* __ESP_WIFI_H__ */ diff --git a/tools/sdk/include/esp32/esp_wifi_types.h b/tools/sdk/include/esp32/esp_wifi_types.h new file mode 100644 index 00000000..b3474769 --- /dev/null +++ b/tools/sdk/include/esp32/esp_wifi_types.h @@ -0,0 +1,190 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + + +#ifndef __ESP_WIFI_TYPES_H__ +#define __ESP_WIFI_TYPES_H__ + +#include +#include +#include "rom/queue.h" +#include "esp_err.h" +#include "esp_wifi_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + WIFI_MODE_NULL = 0, /**< null mode */ + WIFI_MODE_STA, /**< WiFi station mode */ + WIFI_MODE_AP, /**< WiFi soft-AP mode */ + WIFI_MODE_APSTA, /**< WiFi station + soft-AP mode */ + WIFI_MODE_MAX +} wifi_mode_t; + +typedef enum { + WIFI_IF_STA = 0, /**< ESP32 station interface */ + WIFI_IF_AP, /**< ESP32 soft-AP interface */ + WIFI_IF_MAX +} wifi_interface_t; + +typedef enum { + WIFI_COUNTRY_CN = 0, /**< country China, channel range [1, 14] */ + WIFI_COUNTRY_JP, /**< country Japan, channel range [1, 14] */ + WIFI_COUNTRY_US, /**< country USA, channel range [1, 11] */ + WIFI_COUNTRY_EU, /**< country Europe, channel range [1, 13] */ + WIFI_COUNTRY_MAX +} wifi_country_t; + +typedef enum { + WIFI_AUTH_OPEN = 0, /**< authenticate mode : open */ + WIFI_AUTH_WEP, /**< authenticate mode : WEP */ + WIFI_AUTH_WPA_PSK, /**< authenticate mode : WPA_PSK */ + WIFI_AUTH_WPA2_PSK, /**< authenticate mode : WPA2_PSK */ + WIFI_AUTH_WPA_WPA2_PSK, /**< authenticate mode : WPA_WPA2_PSK */ + WIFI_AUTH_MAX +} wifi_auth_mode_t; + +enum { + WIFI_REASON_UNSPECIFIED = 1, + WIFI_REASON_AUTH_EXPIRE = 2, + WIFI_REASON_AUTH_LEAVE = 3, + WIFI_REASON_ASSOC_EXPIRE = 4, + WIFI_REASON_ASSOC_TOOMANY = 5, + WIFI_REASON_NOT_AUTHED = 6, + WIFI_REASON_NOT_ASSOCED = 7, + WIFI_REASON_ASSOC_LEAVE = 8, + WIFI_REASON_ASSOC_NOT_AUTHED = 9, + WIFI_REASON_DISASSOC_PWRCAP_BAD = 10, + WIFI_REASON_DISASSOC_SUPCHAN_BAD = 11, + WIFI_REASON_IE_INVALID = 13, + WIFI_REASON_MIC_FAILURE = 14, + WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT = 15, + WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT = 16, + WIFI_REASON_IE_IN_4WAY_DIFFERS = 17, + WIFI_REASON_GROUP_CIPHER_INVALID = 18, + WIFI_REASON_PAIRWISE_CIPHER_INVALID = 19, + WIFI_REASON_AKMP_INVALID = 20, + WIFI_REASON_UNSUPP_RSN_IE_VERSION = 21, + WIFI_REASON_INVALID_RSN_IE_CAP = 22, + WIFI_REASON_802_1X_AUTH_FAILED = 23, + WIFI_REASON_CIPHER_SUITE_REJECTED = 24, + + WIFI_REASON_BEACON_TIMEOUT = 200, + WIFI_REASON_NO_AP_FOUND = 201, + WIFI_REASON_AUTH_FAIL = 202, + WIFI_REASON_ASSOC_FAIL = 203, + WIFI_REASON_HANDSHAKE_TIMEOUT = 204, +}; + +typedef enum { + WIFI_SECOND_CHAN_NONE = 0, /**< the channel width is HT20 */ + WIFI_SECOND_CHAN_ABOVE, /**< the channel width is HT40 and the second channel is above the primary channel */ + WIFI_SECOND_CHAN_BELOW, /**< the channel width is HT40 and the second channel is below the primary channel */ +} wifi_second_chan_t; + +typedef struct { + char *ssid; /**< SSID of AP */ + uint8_t *bssid; /**< MAC address of AP */ + uint8_t channel; /**< channel, scan the specific channel */ + bool show_hidden; /**< enable to scan AP whose SSID is hidden */ +} wifi_scan_config_t; + +typedef struct { + uint8_t bssid[6]; /**< MAC address of AP */ + uint8_t ssid[32]; /**< SSID of AP */ + uint8_t primary; /**< channel of AP */ + wifi_second_chan_t second; /**< second channel of AP */ + int8_t rssi; /**< signal strength of AP */ + wifi_auth_mode_t authmode; /**< authmode of AP */ +} wifi_ap_list_t; + +typedef enum { + WIFI_PS_NONE, /**< No power save */ + WIFI_PS_MODEM, /**< Modem power save */ + WIFI_PS_LIGHT, /**< Light power save */ + WIFI_PS_MAC, /**< MAC power save */ +} wifi_ps_type_t; + +#define WIFI_PROTOCOL_11B 1 +#define WIFI_PROTOCOL_11G 2 +#define WIFI_PROTOCOL_11N 4 + +typedef enum { + WIFI_BW_HT20 = 0, /* Bandwidth is HT20 */ + WIFI_BW_HT40, /* Bandwidth is HT40 */ +} wifi_bandwidth_t; + +typedef struct { + char ssid[32]; /**< SSID of ESP32 soft-AP */ + char password[64]; /**< Password of ESP32 soft-AP */ + uint8_t ssid_len; /**< Length of SSID. If softap_config.ssid_len==0, check the SSID until there is a termination character; otherwise, set the SSID length according to softap_config.ssid_len. */ + uint8_t channel; /**< Channel of ESP32 soft-AP */ + wifi_auth_mode_t authmode; /**< Auth mode of ESP32 soft-AP. Do not support AUTH_WEP in soft-AP mode */ + uint8_t ssid_hidden; /**< Broadcast SSID or not, default 0, broadcast the SSID */ + uint8_t max_connection; /**< Max number of stations allowed to connect in, default 4, max 4 */ + uint16_t beacon_interval; /**< Beacon interval, 100 ~ 60000 ms, default 100 ms */ +} wifi_ap_config_t; + +typedef struct { + char ssid[32]; /**< SSID of target AP*/ + char password[64]; /**< password of target AP*/ + bool bssid_set; /**< whether set MAC address of target AP or not. Generally, station_config.bssid_set needs to be 0; and it needs to be 1 only when users need to check the MAC address of the AP.*/ + uint8_t bssid[6]; /**< MAC address of target AP*/ +} wifi_sta_config_t; + +typedef union { + wifi_ap_config_t ap; /**< configuration of AP */ + wifi_sta_config_t sta; /**< configuration of STA */ +} wifi_config_t; + +struct station_info { + STAILQ_ENTRY(station_info) next; + uint8_t bssid[6]; +}; + +typedef enum { + WIFI_STORAGE_FLASH, /**< all configuration will strore in both memory and flash */ + WIFI_STORAGE_RAM, /**< all configuration will only store in the memory */ +} wifi_storage_t; + +/** + * @brief Vendor IE type + * + */ +typedef enum { + WIFI_VND_IE_TYPE_BEACON, + WIFI_VND_IE_TYPE_PROBE_REQ, + WIFI_VND_IE_TYPE_PROBE_RESP, + WIFI_VND_IE_TYPE_ASSOC_REQ, + WIFI_VND_IE_TYPE_ASSOC_RESP, +} wifi_vendor_ie_type_t; + +/** + * @brief Vendor IE index + * + */ +typedef enum { + WIFI_VND_IE_ID_0, + WIFI_VND_IE_ID_1, +} wifi_vendor_ie_id_t; + + +#ifdef __cplusplus +} +#endif + + +#endif /* __ESP_WIFI_TYPES_H__ */ diff --git a/tools/sdk/include/esp32/hwcrypto/aes.h b/tools/sdk/include/esp32/hwcrypto/aes.h new file mode 100644 index 00000000..b6a632af --- /dev/null +++ b/tools/sdk/include/esp32/hwcrypto/aes.h @@ -0,0 +1,281 @@ +/** + * \brief AES block cipher, ESP32 hardware accelerated version + * Based on mbedTLS FIPS-197 compliant version. + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * Additions Copyright (C) 2016, Espressif Systems (Shanghai) PTE Ltd + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * + */ + +#ifndef ESP_AES_H +#define ESP_AES_H + +#include "esp_types.h" +#include "rom/aes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* padlock.c and aesni.c rely on these values! */ +#define ESP_AES_ENCRYPT 1 +#define ESP_AES_DECRYPT 0 + +#define ERR_ESP_AES_INVALID_KEY_LENGTH -0x0020 /**< Invalid key length. */ +#define ERR_ESP_AES_INVALID_INPUT_LENGTH -0x0022 /**< Invalid data input length. */ + +typedef struct { + enum AES_BITS aesbits; + uint8_t key[32]; +} key_context, KEY_CTX; + +/** + * \brief AES context structure + * + * \note buf is able to hold 32 extra bytes, which can be used: + * - for alignment purposes if VIA padlock is used, and/or + * - to simplify key expansion in the 256-bit case by + * generating an extra round key + */ +typedef struct { + int nr; /*!< number of rounds */ + uint32_t *rk; /*!< AES round keys */ + KEY_CTX enc; + KEY_CTX dec; +} esp_aes_context; + +/** + * \brief Lock access to AES hardware unit + * + * AES hardware unit can only be used by one + * consumer at a time. + * + * esp_aes_xxx API calls automatically manage locking & unlocking of + * hardware, this function is only needed if you want to call + * ets_aes_xxx functions directly. + */ +void esp_aes_acquire_hardware( void ); + +/** + * \brief Unlock access to AES hardware unit + * + * esp_aes_xxx API calls automatically manage locking & unlocking of + * hardware, this function is only needed if you want to call + * ets_aes_xxx functions directly. + */ +void esp_aes_release_hardware( void ); + +/** + * \brief Initialize AES context + * + * \param ctx AES context to be initialized + */ +void esp_aes_init( esp_aes_context *ctx ); + +/** + * \brief Clear AES context + * + * \param ctx AES context to be cleared + */ +void esp_aes_free( esp_aes_context *ctx ); + +/** + * \brief AES key schedule (encryption) + * + * \param ctx AES context to be initialized + * \param key encryption key + * \param keybits must be 128, 192 or 256 + * + * \return 0 if successful, or ERR_AES_INVALID_KEY_LENGTH + */ +int esp_aes_setkey_enc( esp_aes_context *ctx, const unsigned char *key, unsigned int keybits ); + +/** + * \brief AES key schedule (decryption) + * + * \param ctx AES context to be initialized + * \param key decryption key + * \param keybits must be 128, 192 or 256 + * + * \return 0 if successful, or ERR_AES_INVALID_KEY_LENGTH + */ +int esp_aes_setkey_dec( esp_aes_context *ctx, const unsigned char *key, unsigned int keybits ); + +/** + * \brief AES-ECB block encryption/decryption + * + * \param ctx AES context + * \param mode AES_ENCRYPT or AES_DECRYPT + * \param input 16-byte input block + * \param output 16-byte output block + * + * \return 0 if successful + */ +int esp_aes_crypt_ecb( esp_aes_context *ctx, int mode, const unsigned char input[16], unsigned char output[16] ); + +/** + * \brief AES-CBC buffer encryption/decryption + * Length should be a multiple of the block + * size (16 bytes) + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx AES context + * \param mode AES_ENCRYPT or AES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful, or ERR_AES_INVALID_INPUT_LENGTH + */ +int esp_aes_crypt_cbc( esp_aes_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); + + +/** + * \brief AES-CFB128 buffer encryption/decryption. + * + * Note: Due to the nature of CFB you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * esp_aes_setkey_enc() for both AES_ENCRYPT and AES_DECRYPT. + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx AES context + * \param mode AES_ENCRYPT or AES_DECRYPT + * \param length length of the input data + * \param iv_off offset in IV (updated after use) + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful + */ +int esp_aes_crypt_cfb128( esp_aes_context *ctx, + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); + +/** + * \brief AES-CFB8 buffer encryption/decryption. + * + * Note: Due to the nature of CFB you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * esp_aes_setkey_enc() for both AES_ENCRYPT and AES_DECRYPT. + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx AES context + * \param mode AES_ENCRYPT or AES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful + */ +int esp_aes_crypt_cfb8( esp_aes_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); + +/** + * \brief AES-CTR buffer encryption/decryption + * + * Warning: You have to keep the maximum use of your counter in mind! + * + * Note: Due to the nature of CTR you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * esp_aes_setkey_enc() for both AES_ENCRYPT and AES_DECRYPT. + * + * \param ctx AES context + * \param length The length of the data + * \param nc_off The offset in the current stream_block (for resuming + * within current cipher stream). The offset pointer to + * should be 0 at the start of a stream. + * \param nonce_counter The 128-bit nonce and counter. + * \param stream_block The saved stream-block for resuming. Is overwritten + * by the function. + * \param input The input data stream + * \param output The output data stream + * + * \return 0 if successful + */ +int esp_aes_crypt_ctr( esp_aes_context *ctx, + size_t length, + size_t *nc_off, + unsigned char nonce_counter[16], + unsigned char stream_block[16], + const unsigned char *input, + unsigned char *output ); + + +/** + * \brief Internal AES block encryption function + * (Only exposed to allow overriding it, + * see AES_ENCRYPT_ALT) + * + * \param ctx AES context + * \param input Plaintext block + * \param output Output (ciphertext) block + */ +void esp_aes_encrypt( esp_aes_context *ctx, const unsigned char input[16], unsigned char output[16] ); + +/** + * \brief Internal AES block decryption function + * (Only exposed to allow overriding it, + * see AES_DECRYPT_ALT) + * + * \param ctx AES context + * \param input Ciphertext block + * \param output Output (plaintext) block + */ +void esp_aes_decrypt( esp_aes_context *ctx, const unsigned char input[16], unsigned char output[16] ); + +#ifdef __cplusplus +} +#endif + +#endif /* aes.h */ diff --git a/tools/sdk/include/esp32/hwcrypto/sha.h b/tools/sdk/include/esp32/hwcrypto/sha.h new file mode 100644 index 00000000..a165c46c --- /dev/null +++ b/tools/sdk/include/esp32/hwcrypto/sha.h @@ -0,0 +1,250 @@ +/* + * ESP32 hardware accelerated SHA1/256/512 implementation + * based on mbedTLS FIPS-197 compliant version. + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * Additions Copyright (C) 2016, Espressif Systems (Shanghai) PTE Ltd + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + */ + +#ifndef _ESP_SHA_H_ +#define _ESP_SHA_H_ + +#include "rom/sha.h" + +#include "esp_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief SHA-1 context structure + */ +typedef struct { + /* both types defined in rom/sha.h */ + SHA_CTX context; + enum SHA_TYPE context_type; +} esp_sha_context; + +/** + * \brief Lock access to SHA hardware unit + * + * SHA hardware unit can only be used by one + * consumer at a time. + * + * esp_sha_xxx API calls automatically manage locking & unlocking of + * hardware, this function is only needed if you want to call + * ets_sha_xxx functions directly. + */ +void esp_sha_acquire_hardware( void ); + +/** + * \brief Unlock access to SHA hardware unit + * + * esp_sha_xxx API calls automatically manage locking & unlocking of + * hardware, this function is only needed if you want to call + * ets_sha_xxx functions directly. + */ +void esp_sha_release_hardware( void ); + +/** + * \brief Initialize SHA-1 context + * + * \param ctx SHA-1 context to be initialized + */ +void esp_sha1_init( esp_sha_context *ctx ); + +/** + * \brief Clear SHA-1 context + * + * \param ctx SHA-1 context to be cleared + */ +void esp_sha1_free( esp_sha_context *ctx ); + +/** + * \brief Clone (the state of) a SHA-1 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void esp_sha1_clone( esp_sha_context *dst, const esp_sha_context *src ); + +/** + * \brief SHA-1 context setup + * + * \param ctx context to be initialized + */ +void esp_sha1_start( esp_sha_context *ctx ); + +/** + * \brief SHA-1 process buffer + * + * \param ctx SHA-1 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void esp_sha1_update( esp_sha_context *ctx, const unsigned char *input, size_t ilen ); + +/** + * \brief SHA-1 final digest + * + * \param ctx SHA-1 context + * \param output SHA-1 checksum result + */ +void esp_sha1_finish( esp_sha_context *ctx, unsigned char output[20] ); + +/** + * \brief Calculate SHA-1 of input buffer + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output SHA-1 checksum result + */ +void esp_sha1( const unsigned char *input, size_t ilen, unsigned char output[20] ); + +/** + * \brief SHA-256 context structure + */ + +/** + * \brief Initialize SHA-256 context + * + * \param ctx SHA-256 context to be initialized + */ +void esp_sha256_init( esp_sha_context *ctx ); + +/** + * \brief Clear SHA-256 context + * + * \param ctx SHA-256 context to be cleared + */ +void esp_sha256_free( esp_sha_context *ctx ); + +/** + * \brief Clone (the state of) a SHA-256 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void esp_sha256_clone( esp_sha_context *dst, const esp_sha_context *src ); + +/** + * \brief SHA-256 context setup + * + * \param ctx context to be initialized + * \param is224 0 = use SHA256, 1 = use SHA224 + */ +void esp_sha256_start( esp_sha_context *ctx, int is224 ); + +/** + * \brief SHA-256 process buffer + * + * \param ctx SHA-256 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void esp_sha256_update( esp_sha_context *ctx, const unsigned char *input, size_t ilen ); + +/** + * \brief SHA-256 final digest + * + * \param ctx SHA-256 context + * \param output SHA-224/256 checksum result + */ +void esp_sha256_finish( esp_sha_context *ctx, unsigned char output[32] ); + +/** + * \brief Calculate SHA-256 of input buffer + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output SHA-224/256 checksum result + * \param is224 0 = use SHA256, 1 = use SHA224 + */ +void esp_sha256( const unsigned char *input, size_t ilen, unsigned char output[32], int is224 ); + +// + +/** + * \brief SHA-512 context structure + */ + +/** + * \brief Initialize SHA-512 context + * + * \param ctx SHA-512 context to be initialized + */ +void esp_sha512_init( esp_sha_context *ctx ); + +/** + * \brief Clear SHA-512 context + * + * \param ctx SHA-512 context to be cleared + */ +void esp_sha512_free( esp_sha_context *ctx ); + +/** + * \brief Clone (the state of) a SHA-512 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void esp_sha512_clone( esp_sha_context *dst, const esp_sha_context *src ); + +/** + * \brief SHA-512 context setup + * + * \param ctx context to be initialized + * \param is384 0 = use SHA512, 1 = use SHA384 + */ +void esp_sha512_start( esp_sha_context *ctx, int is384 ); + +/** + * \brief SHA-512 process buffer + * + * \param ctx SHA-512 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void esp_sha512_update( esp_sha_context *ctx, const unsigned char *input, size_t ilen ); + +/** + * \brief SHA-512 final digest + * + * \param ctx SHA-512 context + * \param output SHA-384/512 checksum result + */ +void esp_sha512_finish( esp_sha_context *ctx, unsigned char output[64] ); + +/** + * \brief Calculate SHA-512 of input buffer. + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output SHA-384/512 checksum result + * \param is384 0 = use SHA512, 1 = use SHA384 + */ +void esp_sha512( const unsigned char *input, size_t ilen, unsigned char output[64], int is384 ); + +// + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/tools/sdk/include/esp32/rom/aes.h b/tools/sdk/include/esp32/rom/aes.h new file mode 100644 index 00000000..80eca973 --- /dev/null +++ b/tools/sdk/include/esp32/rom/aes.h @@ -0,0 +1,57 @@ +/* + ROM functions for hardware AES support. + + It is not recommended to use these functions directly, + use the wrapper functions in hwcrypto/aes.h instead. + + */ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ROM_AES_H_ +#define _ROM_AES_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +//TODO, add comment for aes apis +enum AES_BITS { + AES128, + AES192, + AES256 +}; + +void ets_aes_enable(void); + +void ets_aes_disable(void); + +void ets_aes_set_endian(bool key_word_swap, bool key_byte_swap, + bool in_word_swap, bool in_byte_swap, + bool out_word_swap, bool out_byte_swap); + +bool ets_aes_setkey_enc(const uint8_t *key, enum AES_BITS bits); + +bool ets_aes_setkey_dec(const uint8_t *key, enum AES_BITS bits); + +void ets_aes_crypt(const uint8_t input[16], uint8_t output[16]); + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_AES_H_ */ diff --git a/tools/sdk/include/esp32/rom/bigint.h b/tools/sdk/include/esp32/rom/bigint.h new file mode 100644 index 00000000..97ad7220 --- /dev/null +++ b/tools/sdk/include/esp32/rom/bigint.h @@ -0,0 +1,62 @@ +/* + ROM functions for hardware bigint support. + + It is not recommended to use these functions directly, + use the wrapper functions in hwcrypto/mpi.h instead. + + */ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ROM_BIGINT_H_ +#define _ROM_BIGINT_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +//TODO: add comment here +void ets_bigint_enable(void); + +void ets_bigint_disable(void); + +void ets_bigint_wait_finish(void); + +bool ets_bigint_mod_power_prepare(uint32_t *x, uint32_t *y, uint32_t *m, + uint32_t m_dash, uint32_t *rb, uint32_t len, bool again); + +bool ets_bigint_mod_power_getz(uint32_t *z, uint32_t len); + +bool ets_bigint_mult_prepare(uint32_t *x, uint32_t *y, uint32_t len); + +bool ets_bigint_mult_getz(uint32_t *z, uint32_t len); + +bool ets_bigint_montgomery_mult_prepare(uint32_t *x, uint32_t *y, uint32_t *m, + uint32_t m_dash, uint32_t len, bool again); + +bool ets_bigint_montgomery_mult_getz(uint32_t *z, uint32_t len); + +bool ets_bigint_mod_mult_prepare(uint32_t *x, uint32_t *y, uint32_t *m, + uint32_t m_dash, uint32_t *rb, uint32_t len, bool again); + +bool ets_bigint_mod_mult_getz(uint32_t *m, uint32_t *z, uint32_t len); + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_BIGINT_H_ */ diff --git a/tools/sdk/include/esp32/rom/cache.h b/tools/sdk/include/esp32/rom/cache.h new file mode 100644 index 00000000..fb84bca0 --- /dev/null +++ b/tools/sdk/include/esp32/rom/cache.h @@ -0,0 +1,146 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ROM_CACHE_H_ +#define _ROM_CACHE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup uart_apis, uart configuration and communication related apis + * @brief uart apis + */ + +/** @addtogroup uart_apis + * @{ + */ + +/** + * @brief Initialise cache mmu, mark all entries as invalid. + * Please do not call this function in your SDK application. + * + * @param int cpu_no : 0 for PRO cpu, 1 for APP cpu. + * + * @return None + */ +void mmu_init(int cpu_no); + +/** + * @brief Set Flash-Cache mmu mapping. + * Please do not call this function in your SDK application. + * + * @param int cpu_no : CPU number, 0 for PRO cpu, 1 for APP cpu. + * + * @param int pod : process identifier. Range 0~7. + * + * @param unsigned int vaddr : virtual address in CPU address space. + * Can be IRam0, IRam1, IRom0 and DRom0 memory address. + * Should be aligned by psize. + * + * @param unsigned int paddr : physical address in Flash. + * Should be aligned by psize. + * + * @param int psize : page size of flash, in kilobytes. Should be 64 here. + * + * @param int num : pages to be set. + * + * @return unsigned int: error status + * 0 : mmu set success + * 1 : vaddr or paddr is not aligned + * 2 : pid error + * 3 : psize error + * 4 : mmu table to be written is out of range + * 5 : vaddr is out of range + */ +unsigned int cache_flash_mmu_set(int cpu_no, int pid, unsigned int vaddr, unsigned int paddr, int psize, int num); + +/** + * @brief Set Ext-SRAM-Cache mmu mapping. + * Please do not call this function in your SDK application. + * + * @param int cpu_no : CPU number, 0 for PRO cpu, 1 for APP cpu. + * + * @param int pod : process identifier. Range 0~7. + * + * @param unsigned int vaddr : virtual address in CPU address space. + * Can be IRam0, IRam1, IRom0 and DRom0 memory address. + * Should be aligned by psize. + * + * @param unsigned int paddr : physical address in Ext-SRAM. + * Should be aligned by psize. + * + * @param int psize : page size of flash, in kilobytes. Should be 32 here. + * + * @param int num : pages to be set. + * + * @return unsigned int: error status + * 0 : mmu set success + * 1 : vaddr or paddr is not aligned + * 2 : pid error + * 3 : psize error + * 4 : mmu table to be written is out of range + * 5 : vaddr is out of range + */ +unsigned int cache_sram_mmu_set(int cpu_no, int pid, unsigned int vaddr, unsigned int paddr, int psize, int num); + +/** + * @brief Initialise cache access for the cpu. + * Please do not call this function in your SDK application. + * + * @param int cpu_no : 0 for PRO cpu, 1 for APP cpu. + * + * @return None + */ +void Cache_Read_Init(int cpu_no); + +/** + * @brief Flush the cache value for the cpu. + * Please do not call this function in your SDK application. + * + * @param int cpu_no : 0 for PRO cpu, 1 for APP cpu. + * + * @return None + */ +void Cache_Flush(int cpu_no); + +/** + * @brief Disable Cache access for the cpu. + * Please do not call this function in your SDK application. + * + * @param int cpu_no : 0 for PRO cpu, 1 for APP cpu. + * + * @return None + */ +void Cache_Read_Disable(int cpu_no); + +/** + * @brief Enable Cache access for the cpu. + * Please do not call this function in your SDK application. + * + * @param int cpu_no : 0 for PRO cpu, 1 for APP cpu. + * + * @return None + */ +void Cache_Read_Enable(int cpu_no); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_CACHE_H_ */ diff --git a/tools/sdk/include/esp32/rom/crc.h b/tools/sdk/include/esp32/rom/crc.h new file mode 100644 index 00000000..84e17882 --- /dev/null +++ b/tools/sdk/include/esp32/rom/crc.h @@ -0,0 +1,127 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef ROM_CRC_H +#define ROM_CRC_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup uart_apis, uart configuration and communication related apis + * @brief uart apis + */ + +/** @addtogroup uart_apis + * @{ + */ + + +/* Standard CRC8/16/32 algorithms. */ +// CRC-8 x8+x2+x1+1 0x07 +// CRC16-CCITT x16+x12+x5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS +// CRC32: +//G(x) = x32 +x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + 1 +//If your buf is not continuous, you can use the first result to be the second parameter. + +/** + * @brief Crc32 value that is in little endian. + * + * @param uint32_t crc : init crc value, use 0 at the first use. + * + * @param uint8_t const *buf : buffer to start calculate crc. + * + * @param uint32_t len : buffer length in byte. + * + * @return None + */ +uint32_t crc32_le(uint32_t crc, uint8_t const *buf, uint32_t len); + +/** + * @brief Crc32 value that is in big endian. + * + * @param uint32_t crc : init crc value, use 0 at the first use. + * + * @param uint8_t const *buf : buffer to start calculate crc. + * + * @param uint32_t len : buffer length in byte. + * + * @return None + */ +uint32_t crc32_be(uint32_t crc, uint8_t const *buf, uint32_t len); + +/** + * @brief Crc16 value that is in little endian. + * + * @param uint16_t crc : init crc value, use 0 at the first use. + * + * @param uint8_t const *buf : buffer to start calculate crc. + * + * @param uint32_t len : buffer length in byte. + * + * @return None + */ +uint16_t crc16_le(uint16_t crc, uint8_t const *buf, uint32_t len); + +/** + * @brief Crc16 value that is in big endian. + * + * @param uint16_t crc : init crc value, use 0 at the first use. + * + * @param uint8_t const *buf : buffer to start calculate crc. + * + * @param uint32_t len : buffer length in byte. + * + * @return None + */ +uint16_t crc16_be(uint16_t crc, uint8_t const *buf, uint32_t len); + +/** + * @brief Crc8 value that is in little endian. + * + * @param uint8_t crc : init crc value, use 0 at the first use. + * + * @param uint8_t const *buf : buffer to start calculate crc. + * + * @param uint32_t len : buffer length in byte. + * + * @return None + */ +uint8_t crc8_le(uint8_t crc, uint8_t const *buf, uint32_t len); + +/** + * @brief Crc8 value that is in big endian. + * + * @param uint32_t crc : init crc value, use 0 at the first use. + * + * @param uint8_t const *buf : buffer to start calculate crc. + * + * @param uint32_t len : buffer length in byte. + * + * @return None + */ +uint8_t crc8_be(uint8_t crc, uint8_t const *buf, uint32_t len); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/tools/sdk/include/esp32/rom/efuse.h b/tools/sdk/include/esp32/rom/efuse.h new file mode 100644 index 00000000..58cfdb20 --- /dev/null +++ b/tools/sdk/include/esp32/rom/efuse.h @@ -0,0 +1,112 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ROM_EFUSE_H_ +#define _ROM_EFUSE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup efuse_APIs efuse APIs + * @brief ESP32 efuse read/write APIs + * @attention + * + */ + +/** @addtogroup efuse_APIs + * @{ + */ + +/** + * @brief Do a efuse read operation, to update the efuse value to efuse read registers. + * + * @param null + * + * @return null + */ +void ets_efuse_read_op(void); + +/** + * @brief Do a efuse write operation, to update efuse write registers to efuse, then you need call ets_efuse_read_op again. + * + * @param null + * + * @return null + */ +void ets_efuse_program_op(void); + +/** + * @brief Read 8M Analog Clock value(8 bit) in efuse, the analog clock will not change with temperature. + * It can be used to test the external xtal frequency, do not touch this efuse field. + * + * @param null + * + * @return u32: 1 for 100KHZ, range is 0 to 255. + */ +uint32_t ets_efuse_get_8M_clock(void); + +/** + * @brief Read spi pad configuration, show gpio number of flash pad, includes 5 pads. + * + * @param null + * + * @return uint32_t: 0, invalid, flash pad decided by strapping + * else, bit[5:0] spiclk, bit[11:6] spiq, bit[17:12] spid, bit[23:18] spics0, bit[29:24] spihd + */ +uint32_t ets_efuse_get_spiconfig(void); + +#define EFUSE_SPICONFIG_RET_SPICLK_MASK 0x3f +#define EFUSE_SPICONFIG_RET_SPICLK_SHIFT 0 +#define EFUSE_SPICONFIG_RET_SPICLK(ret) (((ret) >> EFUSE_SPICONFIG_RET_SPICLK_SHIFT) & EFUSE_SPICONFIG_RET_SPICLK_MASK) + +#define EFUSE_SPICONFIG_RET_SPIQ_MASK 0x3f +#define EFUSE_SPICONFIG_RET_SPIQ_SHIFT 6 +#define EFUSE_SPICONFIG_RET_SPIQ(ret) (((ret) >> EFUSE_SPICONFIG_RET_SPIQ_SHIFT) & EFUSE_SPICONFIG_RET_SPIQ_MASK) + +#define EFUSE_SPICONFIG_RET_SPID_MASK 0x3f +#define EFUSE_SPICONFIG_RET_SPID_SHIFT 12 +#define EFUSE_SPICONFIG_RET_SPID(ret) (((ret) >> EFUSE_SPICONFIG_RET_SPID_SHIFT) & EFUSE_SPICONFIG_RET_SPID_MASK) + +#define EFUSE_SPICONFIG_RET_SPICS0_MASK 0x3f +#define EFUSE_SPICONFIG_RET_SPICS0_SHIFT 18 +#define EFUSE_SPICONFIG_RET_SPICS0(ret) (((ret) >> EFUSE_SPICONFIG_RET_SPICS0_SHIFT) & EFUSE_SPICONFIG_RET_SPICS0_MASK) + + +#define EFUSE_SPICONFIG_RET_SPIHD_MASK 0x3f +#define EFUSE_SPICONFIG_RET_SPIHD_SHIFT 24 +#define EFUSE_SPICONFIG_RET_SPIHD(ret) (((ret) >> EFUSE_SPICONFIG_RET_SPIHD_SHIFT) & EFUSE_SPICONFIG_RET_SPIHD_MASK) + +/** + * @brief A crc8 algorithm used in efuse check. + * + * @param unsigned char const *p : Pointer to original data. + * + * @param unsigned int len : Data length in byte. + * + * @return unsigned char: Crc value. + */ +unsigned char esp_crc8(unsigned char const *p, unsigned int len); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_EFUSE_H_ */ diff --git a/tools/sdk/include/esp32/rom/ets_sys.h b/tools/sdk/include/esp32/rom/ets_sys.h new file mode 100644 index 00000000..c412c9b4 --- /dev/null +++ b/tools/sdk/include/esp32/rom/ets_sys.h @@ -0,0 +1,616 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ROM_ETS_SYS_H_ +#define _ROM_ETS_SYS_H_ + +#include +#include + +#include "soc/soc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup ets_sys_apis, ets system related apis + * @brief ets system apis + */ + +/** @addtogroup ets_sys_apis + * @{ + */ + +/************************************************************************ + * NOTE + * Many functions in this header files can't be run in FreeRTOS. + * Please see the comment of the Functions. + * There are also some functions that doesn't work on FreeRTOS + * without listed in the header, such as: + * xtos functions start with "_xtos_" in ld file. + * + *********************************************************************** + */ + +/** \defgroup ets_apis, Espressif Task Scheduler related apis + * @brief ets apis + */ + +/** @addtogroup ets_apis + * @{ + */ + +typedef enum { + ETS_OK = 0, /**< return successful in ets*/ + ETS_FAILED = 1 /**< return failed in ets*/ +} ETS_STATUS; + +typedef uint32_t ETSSignal; +typedef uint32_t ETSParam; + +typedef struct ETSEventTag ETSEvent; /**< Event transmit/receive in ets*/ + +struct ETSEventTag { + ETSSignal sig; /**< Event signal, in same task, different Event with different signal*/ + ETSParam par; /**< Event parameter, sometimes without usage, then will be set as 0*/ +}; + +typedef void (*ETSTask)(ETSEvent *e); /**< Type of the Task processer*/ +typedef void (* ets_idle_cb_t)(void *arg); /**< Type of the system idle callback*/ + +/** + * @brief Start the Espressif Task Scheduler, which is an infinit loop. Please do not add code after it. + * + * @param none + * + * @return none + */ +void ets_run(void); + +/** + * @brief Set the Idle callback, when Tasks are processed, will call the callback before CPU goto sleep. + * + * @param ets_idle_cb_t func : The callback function. + * + * @param void *arg : Argument of the callback. + * + * @return None + */ +void ets_set_idle_cb(ets_idle_cb_t func, void *arg); + +/** + * @brief Init a task with processer, priority, queue to receive Event, queue length. + * + * @param ETSTask task : The task processer. + * + * @param uint8_t prio : Task priority, 0-31, bigger num with high priority, one priority with one task. + * + * @param ETSEvent *queue : Queue belongs to the task, task always receives Events, Queue is circular used. + * + * @param uint8_t qlen : Queue length. + * + * @return None + */ +void ets_task(ETSTask task, uint8_t prio, ETSEvent *queue, uint8_t qlen); + +/** + * @brief Post an event to an Task. + * + * @param uint8_t prio : Priority of the Task. + * + * @param ETSSignal sig : Event signal. + * + * @param ETSParam par : Event parameter + * + * @return ETS_OK : post successful + * @return ETS_FAILED : post failed + */ +ETS_STATUS ets_post(uint8_t prio, ETSSignal sig, ETSParam par); + +/** + * @} + */ + +/** \defgroup ets_boot_apis, Boot routing related apis + * @brief ets boot apis + */ + +/** @addtogroup ets_apis + * @{ + */ + +extern const char *const exc_cause_table[40]; ///**< excption cause that defined by the core.*/ + +/** + * @brief Set Pro cpu Entry code, code can be called in PRO CPU when booting is not completed. + * When Pro CPU booting is completed, Pro CPU will call the Entry code if not NULL. + * + * @param uint32_t start : the PRO Entry code address value in uint32_t + * + * @return None + */ +void ets_set_user_start(uint32_t start); + +/** + * @brief Set Pro cpu Startup code, code can be called when booting is not completed, or in Entry code. + * When Entry code completed, CPU will call the Startup code if not NULL, else call ets_run. + * + * @param uint32_t callback : the Startup code address value in uint32_t + * + * @return None : post successful + */ +void ets_set_startup_callback(uint32_t callback); + +/** + * @brief Set App cpu Entry code, code can be called in PRO CPU. + * When APP booting is completed, APP CPU will call the Entry code if not NULL. + * + * @param uint32_t start : the APP Entry code address value in uint32_t, stored in register APPCPU_CTRL_REG_D. + * + * @return None + */ +void ets_set_appcpu_boot_addr(uint32_t start); + +/** + * @brief unpack the image in flash to iram and dram, no using cache. + * + * @param uint32_t pos : Flash physical address. + * + * @param uint32_t *entry_addr: the pointer of an variable that can store Entry code address. + * + * @param bool jump : Jump into the code in the function or not. + * + * @param bool config : Config the flash when unpacking the image, config should be done only once. + * + * @return ETS_OK : unpack successful + * @return ETS_FAILED : unpack failed + */ +ETS_STATUS ets_unpack_flash_code_legacy(uint32_t pos, uint32_t *entry_addr, bool jump, bool config); + +/** + * @brief unpack the image in flash to iram and dram, using cache, maybe decrypting. + * + * @param uint32_t pos : Flash physical address. + * + * @param uint32_t *entry_addr: the pointer of an variable that can store Entry code address. + * + * @param bool jump : Jump into the code in the function or not. + * + * @param bool sb_need_check : Do security boot check or not. + * + * @param bool config : Config the flash when unpacking the image, config should be done only once. + * + * @return ETS_OK : unpack successful + * @return ETS_FAILED : unpack failed + */ +ETS_STATUS ets_unpack_flash_code(uint32_t pos, uint32_t *entry_addr, bool jump, bool sb_need_check, bool config); + +/** + * @} + */ + +/** \defgroup ets_printf_apis, ets_printf related apis used in ets + * @brief ets printf apis + */ + +/** @addtogroup ets_printf_apis + * @{ + */ + +/** + * @brief Printf the strings to uart or other devices, similar with printf, simple than printf. + * Can not print float point data format, or longlong data format. + * So we maybe only use this in ROM. + * + * @param const char *fmt : See printf. + * + * @param ... : See printf. + * + * @return int : the length printed to the output device. + */ +int ets_printf(const char *fmt, ...); + +/** + * @brief Output a char to uart, which uart to output(which is in uart module in ROM) is not in scope of the function. + * Can not print float point data format, or longlong data format + * + * @param char c : char to output. + * + * @return None + */ +void ets_write_char_uart(char c); + +/** + * @brief Ets_printf have two output functions: putc1 and putc2, both of which will be called if need ouput. + * To install putc1, which is defaulted installed as ets_write_char_uart in none silent boot mode, as NULL in silent mode. + * + * @param void (*)(char) p: Output function to install. + * + * @return None + */ +void ets_install_putc1(void (*p)(char c)); + +/** + * @brief Ets_printf have two output functions: putc1 and putc2, both of which will be called if need ouput. + * To install putc2, which is defaulted installed as NULL. + * + * @param void (*)(char) p: Output function to install. + * + * @return None + */ +void ets_install_putc2(void (*p)(char c)); + +/** + * @brief Install putc1 as ets_write_char_uart. + * In silent boot mode(to void interfere the UART attached MCU), we can call this function, after booting ok. + * + * @param None + * + * @return None + */ +void ets_install_uart_printf(void); + +#define ETS_PRINTF(...) ets_printf(...) + +#define ETS_ASSERT(v) do { \ + if (!(v)) { \ + ets_printf("%s %u \n", __FILE__, __LINE__); \ + while (1) {}; \ + } \ +} while (0); + +/** + * @} + */ + +/** \defgroup ets_timer_apis, ets_timer related apis used in ets + * @brief ets timer apis + */ + +/** @addtogroup ets_timer_apis + * @{ + */ +typedef void ETSTimerFunc(void *timer_arg);/**< timer handler*/ + +typedef struct _ETSTIMER_ { + struct _ETSTIMER_ *timer_next; /**< timer linker*/ + uint32_t timer_expire; /**< abstruct time when timer expire*/ + uint32_t timer_period; /**< timer period, 0 means timer is not periodic repeated*/ + ETSTimerFunc *timer_func; /**< timer handler*/ + void *timer_arg; /**< timer handler argument*/ +} ETSTimer; + +/** + * @brief Init ets timer, this timer range is 640 us to 429496 ms + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param None + * + * @return None + */ +void ets_timer_init(void); + +/** + * @brief Arm an ets timer, this timer range is 640 us to 429496 ms. + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param ETSTimer *timer : Timer struct pointer. + * + * @param uint32_t tmout : Timer value in ms, range is 1 to 429496. + * + * @param bool repeat : Timer is periodic repeated. + * + * @return None + */ +void ets_timer_arm(ETSTimer *timer, uint32_t tmout, bool repeat); + +/** + * @brief Arm an ets timer, this timer range is 640 us to 429496 ms. + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param ETSTimer *timer : Timer struct pointer. + * + * @param uint32_t tmout : Timer value in us, range is 1 to 429496729. + * + * @param bool repeat : Timer is periodic repeated. + * + * @return None + */ +void ets_timer_arm_us(ETSTimer *ptimer, uint32_t us, bool repeat); + +/** + * @brief Disarm an ets timer. + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param ETSTimer *timer : Timer struct pointer. + * + * @return None + */ +void ets_timer_disarm(ETSTimer *timer); + +/** + * @brief Set timer callback and argument. + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param ETSTimer *timer : Timer struct pointer. + * + * @param ETSTimerFunc *pfunction : Timer callback. + * + * @param void *parg : Timer callback argument. + * + * @return None + */ +void ets_timer_setfn(ETSTimer *ptimer, ETSTimerFunc *pfunction, void *parg); + +/** + * @brief Unset timer callback and argument to NULL. + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param ETSTimer *timer : Timer struct pointer. + * + * @return None + */ +void ets_timer_done(ETSTimer *ptimer); + +/** + * @brief CPU do while loop for some time. + * In FreeRTOS task, please call FreeRTOS apis. + * + * @param uint32_t us : Delay time in us. + * + * @return None + */ +void ets_delay_us(uint32_t us); + +/** + * @brief Set the real CPU ticks per us to the ets, so that ets_delay_us will be accurate. + * Call this function when CPU frequency is changed. + * + * @param uint32_t ticks_per_us : CPU ticks per us. + * + * @return None + */ +void ets_update_cpu_frequency(uint32_t ticks_per_us); + +/** + * @brief Get the real CPU ticks per us to the ets. + * This function do not return real CPU ticks per us, just the record in ets. It can be used to check with the real CPU frequency. + * + * @param None + * + * @return uint32_t : CPU ticks per us record in ets. + */ +uint32_t ets_get_cpu_frequency(void); + +/** + * @brief Get xtal_freq/analog_8M*256 value calibrated in rtc module. + * + * @param None + * + * @return uint32_t : xtal_freq/analog_8M*256. + */ +uint32_t ets_get_xtal_scale(void); + +/** + * @brief Get xtal_freq value, If value not stored in RTC_STORE5, than store. + * + * @param None + * + * @return uint32_t : if rtc store the value (RTC_STORE5 high 16 bits and low 16 bits with same value), read from rtc register. + * clock = (REG_READ(RTC_STORE5) & 0xffff) << 12; + * else if analog_8M in efuse + * clock = ets_get_xtal_scale() * 15625 * ets_efuse_get_8M_clock() / 40; + * else clock = 26M. + */ +uint32_t ets_get_detected_xtal_freq(void); + +/** + * @} + */ + +/** \defgroup ets_intr_apis, ets interrupt configure related apis + * @brief ets intr apis + */ + +/** @addtogroup ets_intr_apis + * @{ + */ + +typedef void (* ets_isr_t)(void *);/**< interrupt handler type*/ + +/** + * @brief Attach a interrupt handler to a CPU interrupt number. + * This function equals to _xtos_set_interrupt_handler_arg(i, func, arg). + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param int i : CPU interrupt number. + * + * @param ets_isr_t func : Interrupt handler. + * + * @param void *arg : argument of the handler. + * + * @return None + */ +void ets_isr_attach(int i, ets_isr_t func, void *arg); + +/** + * @brief Mask the interrupts which show in mask bits. + * This function equals to _xtos_ints_off(mask). + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param uint32_t mask : BIT(i) means mask CPU interrupt number i. + * + * @return None + */ +void ets_isr_mask(uint32_t mask); + +/** + * @brief Unmask the interrupts which show in mask bits. + * This function equals to _xtos_ints_on(mask). + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param uint32_t mask : BIT(i) means mask CPU interrupt number i. + * + * @return None + */ +void ets_isr_unmask(uint32_t unmask); + +/** + * @brief Lock the interrupt to level 2. + * This function direct set the CPU registers. + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param None + * + * @return None + */ +void ets_intr_lock(void); + +/** + * @brief Unlock the interrupt to level 0. + * This function direct set the CPU registers. + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param None + * + * @return None + */ +void ets_intr_unlock(void); + +/** + * @brief Unlock the interrupt to level 0, and CPU will go into power save mode(wait interrupt). + * This function direct set the CPU registers. + * In FreeRTOS, please call FreeRTOS apis, never call this api. + * + * @param None + * + * @return None + */ +void ets_waiti0(void); + +/** + * @brief Attach an CPU interrupt to a hardware source. + * We have 4 steps to use an interrupt: + * 1.Attach hardware interrupt source to CPU. intr_matrix_set(0, ETS_WIFI_MAC_INTR_SOURCE, ETS_WMAC_INUM); + * 2.Set interrupt handler. xt_set_interrupt_handler(ETS_WMAC_INUM, func, NULL); + * 3.Enable interrupt for CPU. xt_ints_on(1 << ETS_WMAC_INUM); + * 4.Enable interrupt in the module. + * + * @param int cpu_no : The CPU which the interrupt number belongs. + * + * @param uint32_t model_num : The interrupt hardware source number, please see the interrupt hardware source table. + * + * @param uint32_t intr_num : The interrupt number CPU, please see the interrupt cpu using table. + * + * @return None + */ +void intr_matrix_set(int cpu_no, uint32_t model_num, uint32_t intr_num); + +#define _ETSTR(v) # v +#define _ETS_SET_INTLEVEL(intlevel) ({ unsigned __tmp; \ + __asm__ __volatile__( "rsil %0, " _ETSTR(intlevel) "\n" \ + : "=a" (__tmp) : : "memory" ); \ + }) + +#ifdef CONFIG_NONE_OS +#define ETS_INTR_LOCK() \ + ets_intr_lock() + +#define ETS_INTR_UNLOCK() \ + ets_intr_unlock() + +#define ETS_ISR_ATTACH \ + ets_isr_attach + +#define ETS_INTR_ENABLE(inum) \ + ets_isr_unmask((1< +#include + +#include "esp_attr.h" +#include "soc/gpio_reg.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup gpio_apis, uart configuration and communication related apis + * @brief gpio apis + */ + +/** @addtogroup gpio_apis + * @{ + */ + +#define GPIO_REG_READ(reg) READ_PERI_REG(reg) +#define GPIO_REG_WRITE(reg, val) WRITE_PERI_REG(reg, val) +#define GPIO_PIN_COUNT 40 +#define GPIO_ID_PIN0 0 +#define GPIO_ID_PIN(n) (GPIO_ID_PIN0+(n)) +#define GPIO_PIN_ADDR(i) (GPIO_PIN0_REG + i*4) + +#define GPIO_ID_IS_PIN_REGISTER(reg_id) \ + ((reg_id >= GPIO_ID_PIN0) && (reg_id <= GPIO_ID_PIN(GPIO_PIN_COUNT-1))) + +#define GPIO_REGID_TO_PINIDX(reg_id) ((reg_id) - GPIO_ID_PIN0) + +typedef enum { + GPIO_PIN_INTR_DISABLE = 0, + GPIO_PIN_INTR_POSEDGE = 1, + GPIO_PIN_INTR_NEGEDGE = 2, + GPIO_PIN_INTR_ANYEGDE = 3, + GPIO_PIN_INTR_LOLEVEL = 4, + GPIO_PIN_INTR_HILEVEL = 5 +} GPIO_INT_TYPE; + +#define GPIO_OUTPUT_SET(gpio_no, bit_value) \ + ((gpio_no < 32) ? gpio_output_set(bit_value<>gpio_no)&BIT0) : ((gpio_input_get_high()>>(gpio_no - 32))&BIT0)) + +/* GPIO interrupt handler, registered through gpio_intr_handler_register */ +typedef void (* gpio_intr_handler_fn_t)(uint32_t intr_mask, bool high, void *arg); + +/** + * @brief Initialize GPIO. This includes reading the GPIO Configuration DataSet + * to initialize "output enables" and pin configurations for each gpio pin. + * Please do not call this function in SDK. + * + * @param None + * + * @return None + */ +void gpio_init(void); + +/** + * @brief Change GPIO(0-31) pin output by setting, clearing, or disabling pins, GPIO0<->BIT(0). + * There is no particular ordering guaranteed; so if the order of writes is significant, + * calling code should divide a single call into multiple calls. + * + * @param uint32_t set_mask : the gpios that need high level. + * + * @param uint32_t clear_mask : the gpios that need low level. + * + * @param uint32_t enable_mask : the gpios that need be changed. + * + * @param uint32_t disable_mask : the gpios that need diable output. + * + * @return None + */ +void gpio_output_set(uint32_t set_mask, uint32_t clear_mask, uint32_t enable_mask, uint32_t disable_mask); + +/** + * @brief Change GPIO(32-39) pin output by setting, clearing, or disabling pins, GPIO32<->BIT(0). + * There is no particular ordering guaranteed; so if the order of writes is significant, + * calling code should divide a single call into multiple calls. + * + * @param uint32_t set_mask : the gpios that need high level. + * + * @param uint32_t clear_mask : the gpios that need low level. + * + * @param uint32_t enable_mask : the gpios that need be changed. + * + * @param uint32_t disable_mask : the gpios that need diable output. + * + * @return None + */ +void gpio_output_set_high(uint32_t set_mask, uint32_t clear_mask, uint32_t enable_mask, uint32_t disable_mask); + +/** + * @brief Sample the value of GPIO input pins(0-31) and returns a bitmask. + * + * @param None + * + * @return uint32_t : bitmask for GPIO input pins, BIT(0) for GPIO0. + */ +uint32_t gpio_input_get(void); + +/** + * @brief Sample the value of GPIO input pins(32-39) and returns a bitmask. + * + * @param None + * + * @return uint32_t : bitmask for GPIO input pins, BIT(0) for GPIO32. + */ +uint32_t gpio_input_get_high(void); + +/** + * @brief Register an application-specific interrupt handler for GPIO pin interrupts. + * Once the interrupt handler is called, it will not be called again until after a call to gpio_intr_ack. + * Please do not call this function in SDK. + * + * @param gpio_intr_handler_fn_t fn : gpio application-specific interrupt handler + * + * @param void *arg : gpio application-specific interrupt handler argument. + * + * @return None + */ +void gpio_intr_handler_register(gpio_intr_handler_fn_t fn, void *arg); + +/** + * @brief Get gpio interrupts which happens but not processed. + * Please do not call this function in SDK. + * + * @param None + * + * @return uint32_t : bitmask for GPIO pending interrupts, BIT(0) for GPIO0. + */ +uint32_t gpio_intr_pending(void); + +/** + * @brief Get gpio interrupts which happens but not processed. + * Please do not call this function in SDK. + * + * @param None + * + * @return uint32_t : bitmask for GPIO pending interrupts, BIT(0) for GPIO32. + */ +uint32_t gpio_intr_pending_high(void); + +/** + * @brief Ack gpio interrupts to process pending interrupts. + * Please do not call this function in SDK. + * + * @param uint32_t ack_mask: bitmask for GPIO ack interrupts, BIT(0) for GPIO0. + * + * @return None + */ +void gpio_intr_ack(uint32_t ack_mask); + +/** + * @brief Ack gpio interrupts to process pending interrupts. + * Please do not call this function in SDK. + * + * @param uint32_t ack_mask: bitmask for GPIO ack interrupts, BIT(0) for GPIO32. + * + * @return None + */ +void gpio_intr_ack_high(uint32_t ack_mask); + +/** + * @brief Set GPIO to wakeup the ESP32. + * Please do not call this function in SDK. + * + * @param uint32_t i: gpio number. + * + * @param GPIO_INT_TYPE intr_state : only GPIO_PIN_INTR_LOLEVEL\GPIO_PIN_INTR_HILEVEL can be used + * + * @return None + */ +void gpio_pin_wakeup_enable(uint32_t i, GPIO_INT_TYPE intr_state); + +/** + * @brief disable GPIOs to wakeup the ESP32. + * Please do not call this function in SDK. + * + * @param None + * + * @return None + */ +void gpio_pin_wakeup_disable(void); + +/** + * @brief set gpio input to a signal, one gpio can input to several signals. + * + * @param uint32_t gpio : gpio number, 0~0x27 + * gpio == 0x30, input 0 to signal + * gpio == 0x34, ??? + * gpio == 0x38, input 1 to signal + * + * @param uint32_t signal_idx : signal index. + * + * @param bool inv : the signal is inv or not + * + * @return None + */ +void gpio_matrix_in(uint32_t gpio, uint32_t signal_idx, bool inv); + +/** + * @brief set signal output to gpio, one signal can output to several gpios. + * + * @param uint32_t gpio : gpio number, 0~0x27 + * + * @param uint32_t signal_idx : signal index. + * signal_idx == 0x100, cancel output put to the gpio + * + * @param bool out_inv : the signal output is inv or not + * + * @param bool oen_inv : the signal output enable is inv or not + * + * @return None + */ +void gpio_matrix_out(uint32_t gpio, uint32_t signal_idx, bool out_inv, bool oen_inv); + +/** + * @brief Select pad as a gpio function from IOMUX. + * + * @param uint32_t gpio_num : gpio number, 0~0x27 + * + * @return None + */ +void gpio_pad_select_gpio(uint8_t gpio_num); + +/** + * @brief Set pad driver capability. + * + * @param uint32_t gpio_num : gpio number, 0~0x27 + * + * @param uint8_t drv : 0-3 + * + * @return None + */ +void gpio_pad_set_drv(uint8_t gpio_num, uint8_t drv); + +/** + * @brief Pull up the pad from gpio number. + * + * @param uint32_t gpio_num : gpio number, 0~0x27 + * + * @return None + */ +void gpio_pad_pullup(uint8_t gpio_num); + +/** + * @brief Pull down the pad from gpio number. + * + * @param uint32_t gpio_num : gpio number, 0~0x27 + * + * @return None + */ +void gpio_pad_pulldown(uint8_t gpio_num); + +/** + * @brief Unhold the pad from gpio number. + * + * @param uint32_t gpio_num : gpio number, 0~0x27 + * + * @return None + */ +void gpio_pad_unhold(uint8_t gpio_num); + +/** + * @brief Hold the pad from gpio number. + * + * @param uint32_t gpio_num : gpio number, 0~0x27 + * + * @return None + */ +void gpio_pad_hold(uint8_t gpio_num); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_GPIO_H_ */ diff --git a/tools/sdk/include/esp32/rom/libc_stubs.h b/tools/sdk/include/esp32/rom/libc_stubs.h new file mode 100644 index 00000000..0c1876e5 --- /dev/null +++ b/tools/sdk/include/esp32/rom/libc_stubs.h @@ -0,0 +1,89 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _ROM_LIBC_STUBS_H_ +#define _ROM_LIBC_STUBS_H_ + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* +ESP32 ROM code contains implementations of some of C library functions. +Whenever a function in ROM needs to use a syscall, it calls a pointer to the corresponding syscall +implementation defined in the following struct. + +The table itself, by default, is not allocated in RAM. There are two pointers, `syscall_table_ptr_pro` and +`syscall_table_ptr_app`, which can be set to point to the locations of syscall tables of CPU 0 (aka PRO CPU) +and CPU 1 (aka APP CPU). Location of these pointers in .bss segment of ROM code is defined in linker script. + +So, before using any of the C library functions (except for pure functions and memcpy/memset functions), +application must allocate syscall table structure for each CPU being used, and populate it with pointers +to actual implementations of corresponding syscalls. +*/ + +struct syscall_stub_table +{ + struct _reent* (*__getreent)(void); + void* (*_malloc_r)(struct _reent *r, size_t); + void (*_free_r)(struct _reent *r, void*); + void* (*_realloc_r)(struct _reent *r, void*, size_t); + void* (*_calloc_r)(struct _reent *r, size_t, size_t); + void (*_abort)(void); + int (*_system_r)(struct _reent *r, const char*); + int (*_rename_r)(struct _reent *r, const char*, const char*); + clock_t (*_times_r)(struct _reent *r, struct tms *); + int (*_gettimeofday_r) (struct _reent *r, struct timeval *, void *); + void (*_raise_r)(struct _reent *r); + int (*_unlink_r)(struct _reent *r, const char*); + int (*_link_r)(struct _reent *r, const char*, const char*); + int (*_stat_r)(struct _reent *r, const char*, struct stat *); + int (*_fstat_r)(struct _reent *r, int, struct stat *); + void* (*_sbrk_r)(struct _reent *r, ptrdiff_t); + int (*_getpid_r)(struct _reent *r); + int (*_kill_r)(struct _reent *r, int, int); + void (*_exit_r)(struct _reent *r, int); + int (*_close_r)(struct _reent *r, int); + int (*_open_r)(struct _reent *r, const char *, int, int); + int (*_write_r)(struct _reent *r, int, const void *, int); + int (*_lseek_r)(struct _reent *r, int, int, int); + int (*_read_r)(struct _reent *r, int, void *, int); + void (*_lock_init)(_lock_t *lock); + void (*_lock_init_recursive)(_lock_t *lock); + void (*_lock_close)(_lock_t *lock); + void (*_lock_close_recursive)(_lock_t *lock); + void (*_lock_acquire)(_lock_t *lock); + void (*_lock_acquire_recursive)(_lock_t *lock); + int (*_lock_try_acquire)(_lock_t *lock); + int (*_lock_try_acquire_recursive)(_lock_t *lock); + void (*_lock_release)(_lock_t *lock); + void (*_lock_release_recursive)(_lock_t *lock); + int (*_printf_float)(struct _reent *data, void *pdata, FILE * fp, int (*pfunc) (struct _reent *, FILE *, _CONST char *, size_t len), va_list * ap); + int (*_scanf_float) (struct _reent *rptr, void *pdata, FILE *fp, va_list *ap); +}; + +extern struct syscall_stub_table* syscall_table_ptr_pro; +extern struct syscall_stub_table* syscall_table_ptr_app; + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* _ROM_LIBC_STUBS_H_ */ diff --git a/tools/sdk/include/esp32/rom/lldesc.h b/tools/sdk/include/esp32/rom/lldesc.h new file mode 100644 index 00000000..d027362a --- /dev/null +++ b/tools/sdk/include/esp32/rom/lldesc.h @@ -0,0 +1,176 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ROM_LLDESC_H_ +#define _ROM_LLDESC_H_ + +#include + +#include "queue.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define LLDESC_TX_MBLK_SIZE 268 /* */ +#define LLDESC_RX_SMBLK_SIZE 64 /* small block size, for small mgmt frame */ +#define LLDESC_RX_MBLK_SIZE 524 /* rx is large sinec we want to contain mgmt frame in one block*/ +#define LLDESC_RX_AMPDU_ENTRY_MBLK_SIZE 64 /* it is a small buffer which is a cycle link*/ +#define LLDESC_RX_AMPDU_LEN_MBLK_SIZE 256 /*for ampdu entry*/ +#ifdef ESP_MAC_5 +#define LLDESC_TX_MBLK_NUM 116 /* 64K / 256 */ +#define LLDESC_RX_MBLK_NUM 82 /* 64K / 512 MAX 172*/ +#define LLDESC_RX_AMPDU_ENTRY_MBLK_NUM 4 +#define LLDESC_RX_AMPDU_LEN_MLBK_NUM 12 +#else +#ifdef SBUF_RXTX +#define LLDESC_TX_MBLK_NUM_MAX (2 * 48) /* 23K / 260 - 8 */ +#define LLDESC_RX_MBLK_NUM_MAX (2 * 48) /* 23K / 524 */ +#define LLDESC_TX_MBLK_NUM_MIN (2 * 16) /* 23K / 260 - 8 */ +#define LLDESC_RX_MBLK_NUM_MIN (2 * 16) /* 23K / 524 */ +#endif +#define LLDESC_TX_MBLK_NUM 10 //(2 * 32) /* 23K / 260 - 8 */ + +#ifdef IEEE80211_RX_AMPDU +#define LLDESC_RX_MBLK_NUM 30 +#else +#define LLDESC_RX_MBLK_NUM 10 +#endif /*IEEE80211_RX_AMPDU*/ + +#define LLDESC_RX_AMPDU_ENTRY_MBLK_NUM 4 +#define LLDESC_RX_AMPDU_LEN_MLBK_NUM 8 +#endif /* !ESP_MAC_5 */ +/* + * SLC2 DMA Desc struct, aka lldesc_t + * + * -------------------------------------------------------------- + * | own | EoF | sub_sof | 5'b0 | length [11:0] | size [11:0] | + * -------------------------------------------------------------- + * | buf_ptr [31:0] | + * -------------------------------------------------------------- + * | next_desc_ptr [31:0] | + * -------------------------------------------------------------- + */ + +/* this bitfield is start from the LSB!!! */ +typedef struct lldesc_s { + volatile uint32_t size :12, + length:12, + offset: 5, /* h/w reserved 5bit, s/w use it as offset in buffer */ + sosf : 1, /* start of sub-frame */ + eof : 1, /* end of frame */ + owner : 1; /* hw or sw */ + volatile uint8_t *buf; /* point to buffer data */ + union{ + volatile uint32_t empty; + STAILQ_ENTRY(lldesc_s) qe; /* pointing to the next desc */ + }; +} lldesc_t; + +typedef struct tx_ampdu_entry_s{ + uint32_t sub_len :12, + dili_num : 7, + : 1, + null_byte: 2, + data : 1, + enc : 1, + seq : 8; +} tx_ampdu_entry_t; + +typedef struct lldesc_chain_s { + lldesc_t *head; + lldesc_t *tail; +} lldesc_chain_t; + +#ifdef SBUF_RXTX +enum sbuf_mask_s { + SBUF_MOVE_NO = 0, + SBUF_MOVE_TX2RX, + SBUF_MOVE_RX2TX, +} ; + +#define SBUF_MOVE_STEP 8 +#endif +#define LLDESC_SIZE sizeof(struct lldesc_s) + +/* SLC Descriptor */ +#define LLDESC_OWNER_MASK 0x80000000 +#define LLDESC_OWNER_SHIFT 31 +#define LLDESC_SW_OWNED 0 +#define LLDESC_HW_OWNED 1 + +#define LLDESC_EOF_MASK 0x40000000 +#define LLDESC_EOF_SHIFT 30 + +#define LLDESC_SOSF_MASK 0x20000000 +#define LLDESC_SOSF_SHIFT 29 + +#define LLDESC_LENGTH_MASK 0x00fff000 +#define LLDESC_LENGTH_SHIFT 12 + +#define LLDESC_SIZE_MASK 0x00000fff +#define LLDESC_SIZE_SHIFT 0 + +#define LLDESC_ADDR_MASK 0x000fffff + +void lldesc_build_chain(uint8_t *descptr, uint32_t desclen, uint8_t * mblkptr, uint32_t buflen, uint32_t blksz, uint8_t owner, + lldesc_t **head, +#ifdef TO_HOST_RESTART + lldesc_t ** one_before_tail, +#endif + lldesc_t **tail); + +lldesc_t *lldesc_num2link(lldesc_t * head, uint16_t nblks); + +lldesc_t *lldesc_set_owner(lldesc_t * head, uint16_t nblks, uint8_t owner); + +static inline uint32_t lldesc_get_chain_length(lldesc_t *head) +{ + lldesc_t *ds = head; + uint32_t len = 0; + + while (ds) { + len += ds->length; + ds = STAILQ_NEXT(ds, qe); + } + + return len; +} + +static inline void lldesc_config(lldesc_t *ds, uint8_t owner, uint8_t eof, uint8_t sosf, uint16_t len) +{ + ds->owner = owner; + ds->eof = eof; + ds->sosf = sosf; + ds->length = len; +} + +#define LLDESC_CONFIG(_desc, _owner, _eof, _sosf, _len) do { \ + (_desc)->owner = (_owner); \ + (_desc)->eof = (_eof); \ + (_desc)->sosf = (_sosf); \ + (_desc)->length = (_len); \ +} while(0) + +#define LLDESC_FROM_HOST_CLEANUP(ds) LLDESC_CONFIG((ds), LLDESC_HW_OWNED, 0, 0, 0) + +#define LLDESC_MAC_RX_CLEANUP(ds) LLDESC_CONFIG((ds), LLDESC_HW_OWNED, 0, 0, (ds)->size) + +#define LLDESC_TO_HOST_CLEANUP(ds) LLDESC_CONFIG((ds), LLDESC_HW_OWNED, 0, 0, 0) + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_LLDESC_H_ */ diff --git a/tools/sdk/include/esp32/rom/md5_hash.h b/tools/sdk/include/esp32/rom/md5_hash.h new file mode 100755 index 00000000..f116f1e6 --- /dev/null +++ b/tools/sdk/include/esp32/rom/md5_hash.h @@ -0,0 +1,38 @@ +/* + * MD5 internal definitions + * Copyright (c) 2003-2005, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef _ROM_MD5_HASH_H_ +#define _ROM_MD5_HASH_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct MD5Context { + uint32_t buf[4]; + uint32_t bits[2]; + uint8_t in[64]; +}; + +void MD5Init(struct MD5Context *context); +void MD5Update(struct MD5Context *context, unsigned char const *buf, unsigned len); +void MD5Final(unsigned char digest[16], struct MD5Context *context); + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_MD5_HASH_H_ */ diff --git a/tools/sdk/include/esp32/rom/miniz.h b/tools/sdk/include/esp32/rom/miniz.h new file mode 100644 index 00000000..ed79beb2 --- /dev/null +++ b/tools/sdk/include/esp32/rom/miniz.h @@ -0,0 +1,777 @@ +#ifndef MINIZ_HEADER_INCLUDED +#define MINIZ_HEADER_INCLUDED + +#include + +// Defines to completely disable specific portions of miniz.c: +// If all macros here are defined the only functionality remaining will be CRC-32, adler-32, tinfl, and tdefl. + +// Define MINIZ_NO_STDIO to disable all usage and any functions which rely on stdio for file I/O. +#define MINIZ_NO_STDIO + +// If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able to get the current time, or +// get/set file times, and the C run-time funcs that get/set times won't be called. +// The current downside is the times written to your archives will be from 1979. +#define MINIZ_NO_TIME + +// Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. +#define MINIZ_NO_ARCHIVE_APIS + +// Define MINIZ_NO_ARCHIVE_APIS to disable all writing related ZIP archive API's. +#define MINIZ_NO_ARCHIVE_WRITING_APIS + +// Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression API's. +#define MINIZ_NO_ZLIB_APIS + +// Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent conflicts against stock zlib. +#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES + +// Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc. +// Note if MINIZ_NO_MALLOC is defined then the user must always provide custom user alloc/free/realloc +// callbacks to the zlib and archive API's, and a few stand-alone helper API's which don't provide custom user +// functions (such as tdefl_compress_mem_to_heap() and tinfl_decompress_mem_to_heap()) won't work. +#define MINIZ_NO_MALLOC + +#if defined(__TINYC__) && (defined(__linux) || defined(__linux__)) + // TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc on Linux + #define MINIZ_NO_TIME +#endif + +#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS) + #include +#endif + +//Hardcoded options for Xtensa - JD +#define MINIZ_X86_OR_X64_CPU 0 +#define MINIZ_LITTLE_ENDIAN 1 +#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0 +#define MINIZ_HAS_64BIT_REGISTERS 0 +#define TINFL_USE_64BIT_BITBUF 0 + + +#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i486) || defined(i386) || defined(__ia64__) || defined(__x86_64__) +// MINIZ_X86_OR_X64_CPU is only used to help set the below macros. +#define MINIZ_X86_OR_X64_CPU 1 +#endif + +#if (__BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU +// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. +#define MINIZ_LITTLE_ENDIAN 1 +#endif + +#if MINIZ_X86_OR_X64_CPU +// Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. +#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 +#endif + +#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || defined(_LP64) || defined(__LP64__) || defined(__ia64__) || defined(__x86_64__) +// Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are reasonably fast (and don't involve compiler generated calls to helper functions). +#define MINIZ_HAS_64BIT_REGISTERS 1 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// ------------------- zlib-style API Definitions. + +// For more compatibility with zlib, miniz.c uses unsigned long for some parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits! +typedef unsigned long mz_ulong; + +// mz_free() internally uses the MZ_FREE() macro (which by default calls free() unless you've modified the MZ_MALLOC macro) to release a block allocated from the heap. +void mz_free(void *p); + +#define MZ_ADLER32_INIT (1) +// mz_adler32() returns the initial adler-32 value to use when called with ptr==NULL. +mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len); + +#define MZ_CRC32_INIT (0) +// mz_crc32() returns the initial CRC-32 value to use when called with ptr==NULL. +mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len); + +// Compression strategies. +enum { MZ_DEFAULT_STRATEGY = 0, MZ_FILTERED = 1, MZ_HUFFMAN_ONLY = 2, MZ_RLE = 3, MZ_FIXED = 4 }; + +// Method +#define MZ_DEFLATED 8 + +#ifndef MINIZ_NO_ZLIB_APIS + +// Heap allocation callbacks. +// Note that mz_alloc_func parameter types purpsosely differ from zlib's: items/size is size_t, not unsigned long. +typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size); +typedef void (*mz_free_func)(void *opaque, void *address); +typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items, size_t size); + +#define MZ_VERSION "9.1.15" +#define MZ_VERNUM 0x91F0 +#define MZ_VER_MAJOR 9 +#define MZ_VER_MINOR 1 +#define MZ_VER_REVISION 15 +#define MZ_VER_SUBREVISION 0 + +// Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The other values are for advanced use (refer to the zlib docs). +enum { MZ_NO_FLUSH = 0, MZ_PARTIAL_FLUSH = 1, MZ_SYNC_FLUSH = 2, MZ_FULL_FLUSH = 3, MZ_FINISH = 4, MZ_BLOCK = 5 }; + +// Return status codes. MZ_PARAM_ERROR is non-standard. +enum { MZ_OK = 0, MZ_STREAM_END = 1, MZ_NEED_DICT = 2, MZ_ERRNO = -1, MZ_STREAM_ERROR = -2, MZ_DATA_ERROR = -3, MZ_MEM_ERROR = -4, MZ_BUF_ERROR = -5, MZ_VERSION_ERROR = -6, MZ_PARAM_ERROR = -10000 }; + +// Compression levels: 0-9 are the standard zlib-style levels, 10 is best possible compression (not zlib compatible, and may be very slow), MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL. +enum { MZ_NO_COMPRESSION = 0, MZ_BEST_SPEED = 1, MZ_BEST_COMPRESSION = 9, MZ_UBER_COMPRESSION = 10, MZ_DEFAULT_LEVEL = 6, MZ_DEFAULT_COMPRESSION = -1 }; + +// Window bits +#define MZ_DEFAULT_WINDOW_BITS 15 + +struct mz_internal_state; + +// Compression/decompression stream struct. +typedef struct mz_stream_s +{ + const unsigned char *next_in; // pointer to next byte to read + unsigned int avail_in; // number of bytes available at next_in + mz_ulong total_in; // total number of bytes consumed so far + + unsigned char *next_out; // pointer to next byte to write + unsigned int avail_out; // number of bytes that can be written to next_out + mz_ulong total_out; // total number of bytes produced so far + + char *msg; // error msg (unused) + struct mz_internal_state *state; // internal state, allocated by zalloc/zfree + + mz_alloc_func zalloc; // optional heap allocation function (defaults to malloc) + mz_free_func zfree; // optional heap free function (defaults to free) + void *opaque; // heap alloc function user pointer + + int data_type; // data_type (unused) + mz_ulong adler; // adler32 of the source or uncompressed data + mz_ulong reserved; // not used +} mz_stream; + +typedef mz_stream *mz_streamp; + +// Returns the version string of miniz.c. +const char *mz_version(void); + +// mz_deflateInit() initializes a compressor with default options: +// Parameters: +// pStream must point to an initialized mz_stream struct. +// level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION]. +// level 1 enables a specially optimized compression function that's been optimized purely for performance, not ratio. +// (This special func. is currently only enabled when MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.) +// Return values: +// MZ_OK on success. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_PARAM_ERROR if the input parameters are bogus. +// MZ_MEM_ERROR on out of memory. +int mz_deflateInit(mz_streamp pStream, int level); + +// mz_deflateInit2() is like mz_deflate(), except with more control: +// Additional parameters: +// method must be MZ_DEFLATED +// window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no header or footer) +// mem_level must be between [1, 9] (it's checked but ignored by miniz.c) +int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy); + +// Quickly resets a compressor without having to reallocate anything. Same as calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2(). +int mz_deflateReset(mz_streamp pStream); + +// mz_deflate() compresses the input to output, consuming as much of the input and producing as much output as possible. +// Parameters: +// pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. +// flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or MZ_FINISH. +// Return values: +// MZ_OK on success (when flushing, or if more input is needed but not available, and/or there's more output to be written but the output buffer is full). +// MZ_STREAM_END if all input has been consumed and all output bytes have been written. Don't call mz_deflate() on the stream anymore. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_PARAM_ERROR if one of the parameters is invalid. +// MZ_BUF_ERROR if no forward progress is possible because the input and/or output buffers are empty. (Fill up the input buffer or free up some output space and try again.) +int mz_deflate(mz_streamp pStream, int flush); + +// mz_deflateEnd() deinitializes a compressor: +// Return values: +// MZ_OK on success. +// MZ_STREAM_ERROR if the stream is bogus. +int mz_deflateEnd(mz_streamp pStream); + +// mz_deflateBound() returns a (very) conservative upper bound on the amount of data that could be generated by deflate(), assuming flush is set to only MZ_NO_FLUSH or MZ_FINISH. +mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len); + +// Single-call compression functions mz_compress() and mz_compress2(): +// Returns MZ_OK on success, or one of the error codes from mz_deflate() on failure. +int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); +int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level); + +// mz_compressBound() returns a (very) conservative upper bound on the amount of data that could be generated by calling mz_compress(). +mz_ulong mz_compressBound(mz_ulong source_len); + +// Initializes a decompressor. +int mz_inflateInit(mz_streamp pStream); + +// mz_inflateInit2() is like mz_inflateInit() with an additional option that controls the window size and whether or not the stream has been wrapped with a zlib header/footer: +// window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate). +int mz_inflateInit2(mz_streamp pStream, int window_bits); + +// Decompresses the input stream to the output, consuming only as much of the input as needed, and writing as much to the output as possible. +// Parameters: +// pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. +// flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH. +// On the first call, if flush is MZ_FINISH it's assumed the input and output buffers are both sized large enough to decompress the entire stream in a single call (this is slightly faster). +// MZ_FINISH implies that there are no more source bytes available beside what's already in the input buffer, and that the output buffer is large enough to hold the rest of the decompressed data. +// Return values: +// MZ_OK on success. Either more input is needed but not available, and/or there's more output to be written but the output buffer is full. +// MZ_STREAM_END if all needed input has been consumed and all output bytes have been written. For zlib streams, the adler-32 of the decompressed data has also been verified. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_DATA_ERROR if the deflate stream is invalid. +// MZ_PARAM_ERROR if one of the parameters is invalid. +// MZ_BUF_ERROR if no forward progress is possible because the input buffer is empty but the inflater needs more input to continue, or if the output buffer is not large enough. Call mz_inflate() again +// with more input data, or with more room in the output buffer (except when using single call decompression, described above). +int mz_inflate(mz_streamp pStream, int flush); + +// Deinitializes a decompressor. +int mz_inflateEnd(mz_streamp pStream); + +// Single-call decompression. +// Returns MZ_OK on success, or one of the error codes from mz_inflate() on failure. +int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); + +// Returns a string description of the specified error code, or NULL if the error code is invalid. +const char *mz_error(int err); + +// Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used as a drop-in replacement for the subset of zlib that miniz.c supports. +// Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you use zlib in the same project. +#ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES + typedef unsigned char Byte; + typedef unsigned int uInt; + typedef mz_ulong uLong; + typedef Byte Bytef; + typedef uInt uIntf; + typedef char charf; + typedef int intf; + typedef void *voidpf; + typedef uLong uLongf; + typedef void *voidp; + typedef void *const voidpc; + #define Z_NULL 0 + #define Z_NO_FLUSH MZ_NO_FLUSH + #define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH + #define Z_SYNC_FLUSH MZ_SYNC_FLUSH + #define Z_FULL_FLUSH MZ_FULL_FLUSH + #define Z_FINISH MZ_FINISH + #define Z_BLOCK MZ_BLOCK + #define Z_OK MZ_OK + #define Z_STREAM_END MZ_STREAM_END + #define Z_NEED_DICT MZ_NEED_DICT + #define Z_ERRNO MZ_ERRNO + #define Z_STREAM_ERROR MZ_STREAM_ERROR + #define Z_DATA_ERROR MZ_DATA_ERROR + #define Z_MEM_ERROR MZ_MEM_ERROR + #define Z_BUF_ERROR MZ_BUF_ERROR + #define Z_VERSION_ERROR MZ_VERSION_ERROR + #define Z_PARAM_ERROR MZ_PARAM_ERROR + #define Z_NO_COMPRESSION MZ_NO_COMPRESSION + #define Z_BEST_SPEED MZ_BEST_SPEED + #define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION + #define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION + #define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY + #define Z_FILTERED MZ_FILTERED + #define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY + #define Z_RLE MZ_RLE + #define Z_FIXED MZ_FIXED + #define Z_DEFLATED MZ_DEFLATED + #define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS + #define alloc_func mz_alloc_func + #define free_func mz_free_func + #define internal_state mz_internal_state + #define z_stream mz_stream + #define deflateInit mz_deflateInit + #define deflateInit2 mz_deflateInit2 + #define deflateReset mz_deflateReset + #define deflate mz_deflate + #define deflateEnd mz_deflateEnd + #define deflateBound mz_deflateBound + #define compress mz_compress + #define compress2 mz_compress2 + #define compressBound mz_compressBound + #define inflateInit mz_inflateInit + #define inflateInit2 mz_inflateInit2 + #define inflate mz_inflate + #define inflateEnd mz_inflateEnd + #define uncompress mz_uncompress + #define crc32 mz_crc32 + #define adler32 mz_adler32 + #define MAX_WBITS 15 + #define MAX_MEM_LEVEL 9 + #define zError mz_error + #define ZLIB_VERSION MZ_VERSION + #define ZLIB_VERNUM MZ_VERNUM + #define ZLIB_VER_MAJOR MZ_VER_MAJOR + #define ZLIB_VER_MINOR MZ_VER_MINOR + #define ZLIB_VER_REVISION MZ_VER_REVISION + #define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION + #define zlibVersion mz_version + #define zlib_version mz_version() +#endif // #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES + +#endif // MINIZ_NO_ZLIB_APIS + +// ------------------- Types and macros + +typedef unsigned char mz_uint8; +typedef signed short mz_int16; +typedef unsigned short mz_uint16; +typedef unsigned int mz_uint32; +typedef unsigned int mz_uint; +typedef long long mz_int64; +typedef unsigned long long mz_uint64; +typedef int mz_bool; + +#define MZ_FALSE (0) +#define MZ_TRUE (1) + +// An attempt to work around MSVC's spammy "warning C4127: conditional expression is constant" message. +#ifdef _MSC_VER + #define MZ_MACRO_END while (0, 0) +#else + #define MZ_MACRO_END while (0) +#endif + +// ------------------- ZIP archive reading/writing + +#ifndef MINIZ_NO_ARCHIVE_APIS + +enum +{ + MZ_ZIP_MAX_IO_BUF_SIZE = 64*1024, + MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 260, + MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 256 +}; + +typedef struct +{ + mz_uint32 m_file_index; + mz_uint32 m_central_dir_ofs; + mz_uint16 m_version_made_by; + mz_uint16 m_version_needed; + mz_uint16 m_bit_flag; + mz_uint16 m_method; +#ifndef MINIZ_NO_TIME + time_t m_time; +#endif + mz_uint32 m_crc32; + mz_uint64 m_comp_size; + mz_uint64 m_uncomp_size; + mz_uint16 m_internal_attr; + mz_uint32 m_external_attr; + mz_uint64 m_local_header_ofs; + mz_uint32 m_comment_size; + char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE]; + char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE]; +} mz_zip_archive_file_stat; + +typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n); +typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n); + +struct mz_zip_internal_state_tag; +typedef struct mz_zip_internal_state_tag mz_zip_internal_state; + +typedef enum +{ + MZ_ZIP_MODE_INVALID = 0, + MZ_ZIP_MODE_READING = 1, + MZ_ZIP_MODE_WRITING = 2, + MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 +} mz_zip_mode; + +typedef struct mz_zip_archive_tag +{ + mz_uint64 m_archive_size; + mz_uint64 m_central_directory_file_ofs; + mz_uint m_total_files; + mz_zip_mode m_zip_mode; + + mz_uint m_file_offset_alignment; + + mz_alloc_func m_pAlloc; + mz_free_func m_pFree; + mz_realloc_func m_pRealloc; + void *m_pAlloc_opaque; + + mz_file_read_func m_pRead; + mz_file_write_func m_pWrite; + void *m_pIO_opaque; + + mz_zip_internal_state *m_pState; + +} mz_zip_archive; + +typedef enum +{ + MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100, + MZ_ZIP_FLAG_IGNORE_PATH = 0x0200, + MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400, + MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800 +} mz_zip_flags; + +// ZIP archive reading + +// Inits a ZIP archive reader. +// These functions read and validate the archive's central directory. +mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint32 flags); +mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint32 flags); + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags); +#endif + +// Returns the total number of files in the archive. +mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip); + +// Returns detailed information about an archive file entry. +mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat); + +// Determines if an archive file entry is a directory entry. +mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index); +mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index); + +// Retrieves the filename of an archive file entry. +// Returns the number of bytes written to pFilename, or if filename_buf_size is 0 this function returns the number of bytes needed to fully store the filename. +mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size); + +// Attempts to locates a file in the archive's central directory. +// Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH +// Returns -1 if the file cannot be found. +int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); + +// Extracts a archive file to a memory buffer using no memory allocation. +mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); +mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); + +// Extracts a archive file to a memory buffer. +mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags); +mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags); + +// Extracts a archive file to a dynamically allocated heap buffer. +void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags); +void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags); + +// Extracts a archive file using a callback function to output the file's data. +mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); +mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); + +#ifndef MINIZ_NO_STDIO +// Extracts a archive file to a disk file and sets its last accessed and modified times. +// This function only extracts files, not archive directory records. +mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags); +mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags); +#endif + +// Ends archive reading, freeing all allocations, and closing the input archive file if mz_zip_reader_init_file() was used. +mz_bool mz_zip_reader_end(mz_zip_archive *pZip); + +// ZIP archive writing + +#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS + +// Inits a ZIP archive writer. +mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size); +mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size); + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning); +#endif + +// Converts a ZIP archive reader object into a writer object, to allow efficient in-place file appends to occur on an existing archive. +// For archives opened using mz_zip_reader_init_file, pFilename must be the archive's filename so it can be reopened for writing. If the file can't be reopened, mz_zip_reader_end() will be called. +// For archives opened using mz_zip_reader_init_mem, the memory block must be growable using the realloc callback (which defaults to realloc unless you've overridden it). +// Finally, for archives opened using mz_zip_reader_init, the mz_zip_archive's user provided m_pWrite function cannot be NULL. +// Note: In-place archive modification is not recommended unless you know what you're doing, because if execution stops or something goes wrong before +// the archive is finalized the file's central directory will be hosed. +mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename); + +// Adds the contents of a memory buffer to an archive. These functions record the current local time into the archive. +// To add a directory entry, call this method with an archive name ending in a forwardslash with empty buffer. +// level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. +mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, mz_uint level_and_flags); +mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32); + +#ifndef MINIZ_NO_STDIO +// Adds the contents of a disk file to an archive. This function also records the disk file's modified time into the archive. +// level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. +mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, const char *pSrc_filename, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); +#endif + +// Adds a file to an archive by fully cloning the data from another archive. +// This function fully clones the source file's compressed data (no recompression), along with its full filename, extra data, and comment fields. +mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint file_index); + +// Finalizes the archive by writing the central directory records followed by the end of central directory record. +// After an archive is finalized, the only valid call on the mz_zip_archive struct is mz_zip_writer_end(). +// An archive must be manually finalized by calling this function for it to be valid. +mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip); +mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf, size_t *pSize); + +// Ends archive writing, freeing all allocations, and closing the output file if mz_zip_writer_init_file() was used. +// Note for the archive to be valid, it must have been finalized before ending. +mz_bool mz_zip_writer_end(mz_zip_archive *pZip); + +// Misc. high-level helper functions: + +// mz_zip_add_mem_to_archive_file_in_place() efficiently (but not atomically) appends a memory blob to a ZIP archive. +// level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. +mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); + +// Reads a single file from an archive into a heap block. +// Returns NULL on failure. +void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint zip_flags); + +#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS + +#endif // #ifndef MINIZ_NO_ARCHIVE_APIS + +// ------------------- Low-level Decompression API Definitions + +// Decompression flags used by tinfl_decompress(). +// TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the input is a raw deflate stream. +// TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available beyond the end of the supplied input buffer. If clear, the input buffer contains all remaining input. +// TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large enough to hold the entire decompressed stream. If clear, the output buffer is at least the size of the dictionary (typically 32KB). +// TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the decompressed bytes. +enum +{ + TINFL_FLAG_PARSE_ZLIB_HEADER = 1, + TINFL_FLAG_HAS_MORE_INPUT = 2, + TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4, + TINFL_FLAG_COMPUTE_ADLER32 = 8 +}; + +// High level decompression functions: +// tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block allocated via malloc(). +// On entry: +// pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data to decompress. +// On return: +// Function returns a pointer to the decompressed data, or NULL on failure. +// *pOut_len will be set to the decompressed data's size, which could be larger than src_buf_len on uncompressible data. +// The caller must call mz_free() on the returned block when it's no longer needed. +void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); + +// tinfl_decompress_mem_to_mem() decompresses a block in memory to another block in memory. +// Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes written on success. +#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1)) +size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); + +// tinfl_decompress_mem_to_callback() decompresses a block in memory to an internal 32KB buffer, and a user provided callback function will be called to flush the buffer. +// Returns 1 on success or 0 on failure. +typedef int (*tinfl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser); +int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +struct tinfl_decompressor_tag; typedef struct tinfl_decompressor_tag tinfl_decompressor; + +// Max size of LZ dictionary. +#define TINFL_LZ_DICT_SIZE 32768 + +// Return status. +typedef enum +{ + TINFL_STATUS_BAD_PARAM = -3, + TINFL_STATUS_ADLER32_MISMATCH = -2, + TINFL_STATUS_FAILED = -1, + TINFL_STATUS_DONE = 0, + TINFL_STATUS_NEEDS_MORE_INPUT = 1, + TINFL_STATUS_HAS_MORE_OUTPUT = 2 +} tinfl_status; + +// Initializes the decompressor to its initial state. +#define tinfl_init(r) do { (r)->m_state = 0; } MZ_MACRO_END +#define tinfl_get_adler32(r) (r)->m_check_adler32 + +// Main low-level decompressor coroutine function. This is the only function actually needed for decompression. All the other functions are just high-level helpers for improved usability. +// This is a universal API, i.e. it can be used as a building block to build any desired higher level decompression API. In the limit case, it can be called once per every byte input or output. +tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags); + +// Internal/private bits follow. +enum +{ + TINFL_MAX_HUFF_TABLES = 3, TINFL_MAX_HUFF_SYMBOLS_0 = 288, TINFL_MAX_HUFF_SYMBOLS_1 = 32, TINFL_MAX_HUFF_SYMBOLS_2 = 19, + TINFL_FAST_LOOKUP_BITS = 10, TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS +}; + +typedef struct +{ + mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0]; + mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE], m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2]; +} tinfl_huff_table; + +#if MINIZ_HAS_64BIT_REGISTERS + #define TINFL_USE_64BIT_BITBUF 1 +#endif + +#if TINFL_USE_64BIT_BITBUF + typedef mz_uint64 tinfl_bit_buf_t; + #define TINFL_BITBUF_SIZE (64) +#else + typedef mz_uint32 tinfl_bit_buf_t; + #define TINFL_BITBUF_SIZE (32) +#endif + +struct tinfl_decompressor_tag +{ + mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, m_check_adler32, m_dist, m_counter, m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES]; + tinfl_bit_buf_t m_bit_buf; + size_t m_dist_from_out_buf_start; + tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES]; + mz_uint8 m_raw_header[4], m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137]; +}; + +// ------------------- Low-level Compression API Definitions + +// Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly slower, and raw/dynamic blocks will be output more frequently). +#define TDEFL_LESS_MEMORY 1 + +// tdefl_init() compression flags logically OR'd together (low 12 bits contain the max. number of probes per dictionary search): +// TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap compression), 4095=Huffman+LZ (slowest/best compression). +enum +{ + TDEFL_HUFFMAN_ONLY = 0, TDEFL_DEFAULT_MAX_PROBES = 128, TDEFL_MAX_PROBES_MASK = 0xFFF +}; + +// TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before the deflate data, and the Adler-32 of the source data at the end. Otherwise, you'll get raw deflate data. +// TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even when not writing zlib headers). +// TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more efficient lazy parsing. +// TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's initialization time to the minimum, but the output may vary from run to run given the same input (depending on the contents of memory). +// TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1) +// TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled. +// TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables. +// TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks. +// The low 12 bits are reserved to control the max # of hash probes per dictionary lookup (see TDEFL_MAX_PROBES_MASK). +enum +{ + TDEFL_WRITE_ZLIB_HEADER = 0x01000, + TDEFL_COMPUTE_ADLER32 = 0x02000, + TDEFL_GREEDY_PARSING_FLAG = 0x04000, + TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000, + TDEFL_RLE_MATCHES = 0x10000, + TDEFL_FILTER_MATCHES = 0x20000, + TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000, + TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000 +}; + +// High level compression functions: +// tdefl_compress_mem_to_heap() compresses a block in memory to a heap block allocated via malloc(). +// On entry: +// pSrc_buf, src_buf_len: Pointer and size of source block to compress. +// flags: The max match finder probes (default is 128) logically OR'd against the above flags. Higher probes are slower but improve compression. +// On return: +// Function returns a pointer to the compressed data, or NULL on failure. +// *pOut_len will be set to the compressed data's size, which could be larger than src_buf_len on uncompressible data. +// The caller must free() the returned block when it's no longer needed. +void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); + +// tdefl_compress_mem_to_mem() compresses a block in memory to another block in memory. +// Returns 0 on failure. +size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); + +// Compresses an image to a compressed PNG file in memory. +// On entry: +// pImage, w, h, and num_chans describe the image to compress. num_chans may be 1, 2, 3, or 4. +// The image pitch in bytes per scanline will be w*num_chans. The leftmost pixel on the top scanline is stored first in memory. +// level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL +// If flip is true, the image will be flipped on the Y axis (useful for OpenGL apps). +// On return: +// Function returns a pointer to the compressed data, or NULL on failure. +// *pLen_out will be set to the size of the PNG image file. +// The caller must mz_free() the returned heap block (which will typically be larger than *pLen_out) when it's no longer needed. +void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip); +void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out); + +// Output stream interface. The compressor uses this interface to write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time. +typedef mz_bool (*tdefl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser); + +// tdefl_compress_mem_to_output() compresses a block to an output stream. The above helpers use this function internally. +mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +enum { TDEFL_MAX_HUFF_TABLES = 3, TDEFL_MAX_HUFF_SYMBOLS_0 = 288, TDEFL_MAX_HUFF_SYMBOLS_1 = 32, TDEFL_MAX_HUFF_SYMBOLS_2 = 19, TDEFL_LZ_DICT_SIZE = 32768, TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1, TDEFL_MIN_MATCH_LEN = 3, TDEFL_MAX_MATCH_LEN = 258 }; + +// TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed output block (using static/fixed Huffman codes). +#if TDEFL_LESS_MEMORY +enum { TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 12, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; +#else +enum { TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 15, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; +#endif + +// The low-level tdefl functions below may be used directly if the above helper functions aren't flexible enough. The low-level functions don't make any heap allocations, unlike the above helper functions. +typedef enum +{ + TDEFL_STATUS_BAD_PARAM = -2, + TDEFL_STATUS_PUT_BUF_FAILED = -1, + TDEFL_STATUS_OKAY = 0, + TDEFL_STATUS_DONE = 1, +} tdefl_status; + +// Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums +typedef enum +{ + TDEFL_NO_FLUSH = 0, + TDEFL_SYNC_FLUSH = 2, + TDEFL_FULL_FLUSH = 3, + TDEFL_FINISH = 4 +} tdefl_flush; + +// tdefl's compression state structure. +typedef struct +{ + tdefl_put_buf_func_ptr m_pPut_buf_func; + void *m_pPut_buf_user; + mz_uint m_flags, m_max_probes[2]; + int m_greedy_parsing; + mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size; + mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end; + mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, m_bit_buffer; + mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, m_wants_to_finish; + tdefl_status m_prev_return_status; + const void *m_pIn_buf; + void *m_pOut_buf; + size_t *m_pIn_buf_size, *m_pOut_buf_size; + tdefl_flush m_flush; + const mz_uint8 *m_pSrc; + size_t m_src_buf_left, m_out_buf_ofs; + mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1]; + mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE]; + mz_uint16 m_next[TDEFL_LZ_DICT_SIZE]; + mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE]; + mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE]; +} tdefl_compressor; + +// Initializes the compressor. +// There is no corresponding deinit() function because the tdefl API's do not dynamically allocate memory. +// pBut_buf_func: If NULL, output data will be supplied to the specified callback. In this case, the user should call the tdefl_compress_buffer() API for compression. +// If pBut_buf_func is NULL the user should always call the tdefl_compress() API. +// flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER, etc.) +tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +// Compresses a block of data, consuming as much of the specified input buffer as possible, and writing as much compressed data to the specified output buffer as possible. +tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush); + +// tdefl_compress_buffer() is only usable when the tdefl_init() is called with a non-NULL tdefl_put_buf_func_ptr. +// tdefl_compress_buffer() always consumes the entire input buffer. +tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush); + +tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d); +mz_uint32 tdefl_get_adler32(tdefl_compressor *d); + +// Can't use tdefl_create_comp_flags_from_zip_params if MINIZ_NO_ZLIB_APIS isn't defined, because it uses some of its macros. +#ifndef MINIZ_NO_ZLIB_APIS +// Create tdefl_compress() flags given zlib-style compression parameters. +// level may range from [0,10] (where 10 is absolute max compression, but may be much slower on some files) +// window_bits may be -15 (raw deflate) or 15 (zlib) +// strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY, MZ_RLE, or MZ_FIXED +mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy); +#endif // #ifndef MINIZ_NO_ZLIB_APIS + +#ifdef __cplusplus +} +#endif + +#endif // MINIZ_HEADER_INCLUDED + diff --git a/tools/sdk/include/esp32/rom/queue.h b/tools/sdk/include/esp32/rom/queue.h new file mode 100755 index 00000000..29ee6706 --- /dev/null +++ b/tools/sdk/include/esp32/rom/queue.h @@ -0,0 +1,645 @@ +/*- + * Copyright (c) 1991, 1993 + * The Regents of the University of California. 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. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + * + * @(#)queue.h 8.5 (Berkeley) 8/20/94 + * $FreeBSD$ + */ + +#ifndef _SYS_QUEUE_H_ +#define _SYS_QUEUE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This file defines four types of data structures: singly-linked lists, + * singly-linked tail queues, lists and tail queues. + * + * A singly-linked list is headed by a single forward pointer. The elements + * are singly linked for minimum space and pointer manipulation overhead at + * the expense of O(n) removal for arbitrary elements. New elements can be + * added to the list after an existing element or at the head of the list. + * Elements being removed from the head of the list should use the explicit + * macro for this purpose for optimum efficiency. A singly-linked list may + * only be traversed in the forward direction. Singly-linked lists are ideal + * for applications with large datasets and few or no removals or for + * implementing a LIFO queue. + * + * A singly-linked tail queue is headed by a pair of pointers, one to the + * head of the list and the other to the tail of the list. The elements are + * singly linked for minimum space and pointer manipulation overhead at the + * expense of O(n) removal for arbitrary elements. New elements can be added + * to the list after an existing element, at the head of the list, or at the + * end of the list. Elements being removed from the head of the tail queue + * should use the explicit macro for this purpose for optimum efficiency. + * A singly-linked tail queue may only be traversed in the forward direction. + * Singly-linked tail queues are ideal for applications with large datasets + * and few or no removals or for implementing a FIFO queue. + * + * A list is headed by a single forward pointer (or an array of forward + * pointers for a hash table header). The elements are doubly linked + * so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before + * or after an existing element or at the head of the list. A list + * may only be traversed in the forward direction. + * + * A tail queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or + * after an existing element, at the head of the list, or at the end of + * the list. A tail queue may be traversed in either direction. + * + * For details on the use of these macros, see the queue(3) manual page. + * + * + * SLIST LIST STAILQ TAILQ + * _HEAD + + + + + * _HEAD_INITIALIZER + + + + + * _ENTRY + + + + + * _INIT + + + + + * _EMPTY + + + + + * _FIRST + + + + + * _NEXT + + + + + * _PREV - - - + + * _LAST - - + + + * _FOREACH + + + + + * _FOREACH_SAFE + + + + + * _FOREACH_REVERSE - - - + + * _FOREACH_REVERSE_SAFE - - - + + * _INSERT_HEAD + + + + + * _INSERT_BEFORE - + - + + * _INSERT_AFTER + + + + + * _INSERT_TAIL - - + + + * _CONCAT - - + + + * _REMOVE_AFTER + - + - + * _REMOVE_HEAD + - + - + * _REMOVE + + + + + * + */ +#ifdef QUEUE_MACRO_DEBUG +/* Store the last 2 places the queue element or head was altered */ +struct qm_trace { + char * lastfile; + int lastline; + char * prevfile; + int prevline; +}; + +#define TRACEBUF struct qm_trace trace; +#define TRASHIT(x) do {(x) = (void *)-1;} while (0) +#define QMD_SAVELINK(name, link) void **name = (void *)&(link) + +#define QMD_TRACE_HEAD(head) do { \ + (head)->trace.prevline = (head)->trace.lastline; \ + (head)->trace.prevfile = (head)->trace.lastfile; \ + (head)->trace.lastline = __LINE__; \ + (head)->trace.lastfile = __FILE__; \ +} while (0) + +#define QMD_TRACE_ELEM(elem) do { \ + (elem)->trace.prevline = (elem)->trace.lastline; \ + (elem)->trace.prevfile = (elem)->trace.lastfile; \ + (elem)->trace.lastline = __LINE__; \ + (elem)->trace.lastfile = __FILE__; \ +} while (0) + +#else +#define QMD_TRACE_ELEM(elem) +#define QMD_TRACE_HEAD(head) +#define QMD_SAVELINK(name, link) +#define TRACEBUF +#define TRASHIT(x) +#endif /* QUEUE_MACRO_DEBUG */ + +/* + * Singly-linked List declarations. + */ +#define SLIST_HEAD(name, type) \ +struct name { \ + struct type *slh_first; /* first element */ \ +} + +#define SLIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define SLIST_ENTRY(type) \ +struct { \ + struct type *sle_next; /* next element */ \ +} + +/* + * Singly-linked List functions. + */ +#define SLIST_EMPTY(head) ((head)->slh_first == NULL) + +#define SLIST_FIRST(head) ((head)->slh_first) + +#define SLIST_FOREACH(var, head, field) \ + for ((var) = SLIST_FIRST((head)); \ + (var); \ + (var) = SLIST_NEXT((var), field)) + +#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = SLIST_FIRST((head)); \ + (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ + for ((varp) = &SLIST_FIRST((head)); \ + ((var) = *(varp)) != NULL; \ + (varp) = &SLIST_NEXT((var), field)) + +#define SLIST_INIT(head) do { \ + SLIST_FIRST((head)) = NULL; \ +} while (0) + +#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ + SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \ + SLIST_NEXT((slistelm), field) = (elm); \ +} while (0) + +#define SLIST_INSERT_HEAD(head, elm, field) do { \ + SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \ + SLIST_FIRST((head)) = (elm); \ +} while (0) + +#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) + +#define SLIST_REMOVE(head, elm, type, field) do { \ + QMD_SAVELINK(oldnext, (elm)->field.sle_next); \ + if (SLIST_FIRST((head)) == (elm)) { \ + SLIST_REMOVE_HEAD((head), field); \ + } \ + else { \ + struct type *curelm = SLIST_FIRST((head)); \ + while (SLIST_NEXT(curelm, field) != (elm)) \ + curelm = SLIST_NEXT(curelm, field); \ + SLIST_REMOVE_AFTER(curelm, field); \ + } \ + TRASHIT(*oldnext); \ +} while (0) + +#define SLIST_REMOVE_AFTER(elm, field) do { \ + SLIST_NEXT(elm, field) = \ + SLIST_NEXT(SLIST_NEXT(elm, field), field); \ +} while (0) + +#define SLIST_REMOVE_HEAD(head, field) do { \ + SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \ +} while (0) + +/* + * Singly-linked Tail queue declarations. + */ +#define STAILQ_HEAD(name, type) \ +struct name { \ + struct type *stqh_first;/* first element */ \ + struct type **stqh_last;/* addr of last next element */ \ +} + +#define STAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).stqh_first } + +#define STAILQ_ENTRY(type) \ +struct { \ + struct type *stqe_next; /* next element */ \ +} + +/* + * Singly-linked Tail queue functions. + */ +#define STAILQ_CONCAT(head1, head2) do { \ + if (!STAILQ_EMPTY((head2))) { \ + *(head1)->stqh_last = (head2)->stqh_first; \ + (head1)->stqh_last = (head2)->stqh_last; \ + STAILQ_INIT((head2)); \ + } \ +} while (0) + +#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) + +#define STAILQ_FIRST(head) ((head)->stqh_first) + +#define STAILQ_FOREACH(var, head, field) \ + for((var) = STAILQ_FIRST((head)); \ + (var); \ + (var) = STAILQ_NEXT((var), field)) + + +#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = STAILQ_FIRST((head)); \ + (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define STAILQ_INIT(head) do { \ + STAILQ_FIRST((head)) = NULL; \ + (head)->stqh_last = &STAILQ_FIRST((head)); \ +} while (0) + +#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \ + if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ + STAILQ_NEXT((tqelm), field) = (elm); \ +} while (0) + +#define STAILQ_INSERT_HEAD(head, elm, field) do { \ + if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ + STAILQ_FIRST((head)) = (elm); \ +} while (0) + +#define STAILQ_INSERT_TAIL(head, elm, field) do { \ + STAILQ_NEXT((elm), field) = NULL; \ + *(head)->stqh_last = (elm); \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ +} while (0) + +#define STAILQ_LAST(head, type, field) \ + (STAILQ_EMPTY((head)) ? \ + NULL : \ + ((struct type *)(void *) \ + ((char *)((head)->stqh_last) - __offsetof(struct type, field)))) + +#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) + +#define STAILQ_REMOVE(head, elm, type, field) do { \ + QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \ + if (STAILQ_FIRST((head)) == (elm)) { \ + STAILQ_REMOVE_HEAD((head), field); \ + } \ + else { \ + struct type *curelm = STAILQ_FIRST((head)); \ + while (STAILQ_NEXT(curelm, field) != (elm)) \ + curelm = STAILQ_NEXT(curelm, field); \ + STAILQ_REMOVE_AFTER(head, curelm, field); \ + } \ + TRASHIT(*oldnext); \ +} while (0) + +#define STAILQ_REMOVE_HEAD(head, field) do { \ + if ((STAILQ_FIRST((head)) = \ + STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \ + (head)->stqh_last = &STAILQ_FIRST((head)); \ +} while (0) + +#define STAILQ_REMOVE_AFTER(head, elm, field) do { \ + if ((STAILQ_NEXT(elm, field) = \ + STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ +} while (0) + +#define STAILQ_SWAP(head1, head2, type) do { \ + struct type *swap_first = STAILQ_FIRST(head1); \ + struct type **swap_last = (head1)->stqh_last; \ + STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \ + (head1)->stqh_last = (head2)->stqh_last; \ + STAILQ_FIRST(head2) = swap_first; \ + (head2)->stqh_last = swap_last; \ + if (STAILQ_EMPTY(head1)) \ + (head1)->stqh_last = &STAILQ_FIRST(head1); \ + if (STAILQ_EMPTY(head2)) \ + (head2)->stqh_last = &STAILQ_FIRST(head2); \ +} while (0) + +#define STAILQ_INSERT_CHAIN_HEAD(head, elm_chead, elm_ctail, field) do { \ + if ((STAILQ_NEXT(elm_ctail, field) = STAILQ_FIRST(head)) == NULL ) { \ + (head)->stqh_last = &STAILQ_NEXT(elm_ctail, field); \ + } \ + STAILQ_FIRST(head) = (elm_chead); \ +} while (0) + + +/* + * List declarations. + */ +#define LIST_HEAD(name, type) \ +struct name { \ + struct type *lh_first; /* first element */ \ +} + +#define LIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define LIST_ENTRY(type) \ +struct { \ + struct type *le_next; /* next element */ \ + struct type **le_prev; /* address of previous next element */ \ +} + +/* + * List functions. + */ + +#if (defined(_KERNEL) && defined(INVARIANTS)) +#define QMD_LIST_CHECK_HEAD(head, field) do { \ + if (LIST_FIRST((head)) != NULL && \ + LIST_FIRST((head))->field.le_prev != \ + &LIST_FIRST((head))) \ + panic("Bad list head %p first->prev != head", (head)); \ +} while (0) + +#define QMD_LIST_CHECK_NEXT(elm, field) do { \ + if (LIST_NEXT((elm), field) != NULL && \ + LIST_NEXT((elm), field)->field.le_prev != \ + &((elm)->field.le_next)) \ + panic("Bad link elm %p next->prev != elm", (elm)); \ +} while (0) + +#define QMD_LIST_CHECK_PREV(elm, field) do { \ + if (*(elm)->field.le_prev != (elm)) \ + panic("Bad link elm %p prev->next != elm", (elm)); \ +} while (0) +#else +#define QMD_LIST_CHECK_HEAD(head, field) +#define QMD_LIST_CHECK_NEXT(elm, field) +#define QMD_LIST_CHECK_PREV(elm, field) +#endif /* (_KERNEL && INVARIANTS) */ + +#define LIST_EMPTY(head) ((head)->lh_first == NULL) + +#define LIST_FIRST(head) ((head)->lh_first) + +#define LIST_FOREACH(var, head, field) \ + for ((var) = LIST_FIRST((head)); \ + (var); \ + (var) = LIST_NEXT((var), field)) + +#define LIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = LIST_FIRST((head)); \ + (var) && ((tvar) = LIST_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define LIST_INIT(head) do { \ + LIST_FIRST((head)) = NULL; \ +} while (0) + +#define LIST_INSERT_AFTER(listelm, elm, field) do { \ + QMD_LIST_CHECK_NEXT(listelm, field); \ + if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\ + LIST_NEXT((listelm), field)->field.le_prev = \ + &LIST_NEXT((elm), field); \ + LIST_NEXT((listelm), field) = (elm); \ + (elm)->field.le_prev = &LIST_NEXT((listelm), field); \ +} while (0) + +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ + QMD_LIST_CHECK_PREV(listelm, field); \ + (elm)->field.le_prev = (listelm)->field.le_prev; \ + LIST_NEXT((elm), field) = (listelm); \ + *(listelm)->field.le_prev = (elm); \ + (listelm)->field.le_prev = &LIST_NEXT((elm), field); \ +} while (0) + +#define LIST_INSERT_HEAD(head, elm, field) do { \ + QMD_LIST_CHECK_HEAD((head), field); \ + if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \ + LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\ + LIST_FIRST((head)) = (elm); \ + (elm)->field.le_prev = &LIST_FIRST((head)); \ +} while (0) + +#define LIST_NEXT(elm, field) ((elm)->field.le_next) + +#define LIST_REMOVE(elm, field) do { \ + QMD_SAVELINK(oldnext, (elm)->field.le_next); \ + QMD_SAVELINK(oldprev, (elm)->field.le_prev); \ + QMD_LIST_CHECK_NEXT(elm, field); \ + QMD_LIST_CHECK_PREV(elm, field); \ + if (LIST_NEXT((elm), field) != NULL) \ + LIST_NEXT((elm), field)->field.le_prev = \ + (elm)->field.le_prev; \ + *(elm)->field.le_prev = LIST_NEXT((elm), field); \ + TRASHIT(*oldnext); \ + TRASHIT(*oldprev); \ +} while (0) + +#define LIST_SWAP(head1, head2, type, field) do { \ + struct type *swap_tmp = LIST_FIRST((head1)); \ + LIST_FIRST((head1)) = LIST_FIRST((head2)); \ + LIST_FIRST((head2)) = swap_tmp; \ + if ((swap_tmp = LIST_FIRST((head1))) != NULL) \ + swap_tmp->field.le_prev = &LIST_FIRST((head1)); \ + if ((swap_tmp = LIST_FIRST((head2))) != NULL) \ + swap_tmp->field.le_prev = &LIST_FIRST((head2)); \ +} while (0) + +/* + * Tail queue declarations. + */ +#define TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ + TRACEBUF \ +} + +#define TAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).tqh_first } + +#define TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ + TRACEBUF \ +} + +/* + * Tail queue functions. + */ +#if (defined(_KERNEL) && defined(INVARIANTS)) +#define QMD_TAILQ_CHECK_HEAD(head, field) do { \ + if (!TAILQ_EMPTY(head) && \ + TAILQ_FIRST((head))->field.tqe_prev != \ + &TAILQ_FIRST((head))) \ + panic("Bad tailq head %p first->prev != head", (head)); \ +} while (0) + +#define QMD_TAILQ_CHECK_TAIL(head, field) do { \ + if (*(head)->tqh_last != NULL) \ + panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \ +} while (0) + +#define QMD_TAILQ_CHECK_NEXT(elm, field) do { \ + if (TAILQ_NEXT((elm), field) != NULL && \ + TAILQ_NEXT((elm), field)->field.tqe_prev != \ + &((elm)->field.tqe_next)) \ + panic("Bad link elm %p next->prev != elm", (elm)); \ +} while (0) + +#define QMD_TAILQ_CHECK_PREV(elm, field) do { \ + if (*(elm)->field.tqe_prev != (elm)) \ + panic("Bad link elm %p prev->next != elm", (elm)); \ +} while (0) +#else +#define QMD_TAILQ_CHECK_HEAD(head, field) +#define QMD_TAILQ_CHECK_TAIL(head, headname) +#define QMD_TAILQ_CHECK_NEXT(elm, field) +#define QMD_TAILQ_CHECK_PREV(elm, field) +#endif /* (_KERNEL && INVARIANTS) */ + +#define TAILQ_CONCAT(head1, head2, field) do { \ + if (!TAILQ_EMPTY(head2)) { \ + *(head1)->tqh_last = (head2)->tqh_first; \ + (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ + (head1)->tqh_last = (head2)->tqh_last; \ + TAILQ_INIT((head2)); \ + QMD_TRACE_HEAD(head1); \ + QMD_TRACE_HEAD(head2); \ + } \ +} while (0) + +#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) + +#define TAILQ_FIRST(head) ((head)->tqh_first) + +#define TAILQ_FOREACH(var, head, field) \ + for ((var) = TAILQ_FIRST((head)); \ + (var); \ + (var) = TAILQ_NEXT((var), field)) + +#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ + for ((var) = TAILQ_LAST((head), headname); \ + (var); \ + (var) = TAILQ_PREV((var), headname, field)) + +#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ + for ((var) = TAILQ_LAST((head), headname); \ + (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ + (var) = (tvar)) + +#define TAILQ_INIT(head) do { \ + TAILQ_FIRST((head)) = NULL; \ + (head)->tqh_last = &TAILQ_FIRST((head)); \ + QMD_TRACE_HEAD(head); \ +} while (0) + +#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + QMD_TAILQ_CHECK_NEXT(listelm, field); \ + if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\ + TAILQ_NEXT((elm), field)->field.tqe_prev = \ + &TAILQ_NEXT((elm), field); \ + else { \ + (head)->tqh_last = &TAILQ_NEXT((elm), field); \ + QMD_TRACE_HEAD(head); \ + } \ + TAILQ_NEXT((listelm), field) = (elm); \ + (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \ + QMD_TRACE_ELEM(&(elm)->field); \ + QMD_TRACE_ELEM(&listelm->field); \ +} while (0) + +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ + QMD_TAILQ_CHECK_PREV(listelm, field); \ + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ + TAILQ_NEXT((elm), field) = (listelm); \ + *(listelm)->field.tqe_prev = (elm); \ + (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \ + QMD_TRACE_ELEM(&(elm)->field); \ + QMD_TRACE_ELEM(&listelm->field); \ +} while (0) + +#define TAILQ_INSERT_HEAD(head, elm, field) do { \ + QMD_TAILQ_CHECK_HEAD(head, field); \ + if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \ + TAILQ_FIRST((head))->field.tqe_prev = \ + &TAILQ_NEXT((elm), field); \ + else \ + (head)->tqh_last = &TAILQ_NEXT((elm), field); \ + TAILQ_FIRST((head)) = (elm); \ + (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \ + QMD_TRACE_HEAD(head); \ + QMD_TRACE_ELEM(&(elm)->field); \ +} while (0) + +#define TAILQ_INSERT_TAIL(head, elm, field) do { \ + QMD_TAILQ_CHECK_TAIL(head, field); \ + TAILQ_NEXT((elm), field) = NULL; \ + (elm)->field.tqe_prev = (head)->tqh_last; \ + *(head)->tqh_last = (elm); \ + (head)->tqh_last = &TAILQ_NEXT((elm), field); \ + QMD_TRACE_HEAD(head); \ + QMD_TRACE_ELEM(&(elm)->field); \ +} while (0) + +#define TAILQ_LAST(head, headname) \ + (*(((struct headname *)((head)->tqh_last))->tqh_last)) + +#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) + +#define TAILQ_PREV(elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) + +#define TAILQ_REMOVE(head, elm, field) do { \ + QMD_SAVELINK(oldnext, (elm)->field.tqe_next); \ + QMD_SAVELINK(oldprev, (elm)->field.tqe_prev); \ + QMD_TAILQ_CHECK_NEXT(elm, field); \ + QMD_TAILQ_CHECK_PREV(elm, field); \ + if ((TAILQ_NEXT((elm), field)) != NULL) \ + TAILQ_NEXT((elm), field)->field.tqe_prev = \ + (elm)->field.tqe_prev; \ + else { \ + (head)->tqh_last = (elm)->field.tqe_prev; \ + QMD_TRACE_HEAD(head); \ + } \ + *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \ + TRASHIT(*oldnext); \ + TRASHIT(*oldprev); \ + QMD_TRACE_ELEM(&(elm)->field); \ +} while (0) + +#define TAILQ_SWAP(head1, head2, type, field) do { \ + struct type *swap_first = (head1)->tqh_first; \ + struct type **swap_last = (head1)->tqh_last; \ + (head1)->tqh_first = (head2)->tqh_first; \ + (head1)->tqh_last = (head2)->tqh_last; \ + (head2)->tqh_first = swap_first; \ + (head2)->tqh_last = swap_last; \ + if ((swap_first = (head1)->tqh_first) != NULL) \ + swap_first->field.tqe_prev = &(head1)->tqh_first; \ + else \ + (head1)->tqh_last = &(head1)->tqh_first; \ + if ((swap_first = (head2)->tqh_first) != NULL) \ + swap_first->field.tqe_prev = &(head2)->tqh_first; \ + else \ + (head2)->tqh_last = &(head2)->tqh_first; \ +} while (0) + +#ifdef __cplusplus +} +#endif + +#endif /* !_SYS_QUEUE_H_ */ diff --git a/tools/sdk/include/esp32/rom/rtc.h b/tools/sdk/include/esp32/rom/rtc.h new file mode 100644 index 00000000..1ff7f033 --- /dev/null +++ b/tools/sdk/include/esp32/rom/rtc.h @@ -0,0 +1,206 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ROM_RTC_H_ +#define _ROM_RTC_H_ + +#include "ets_sys.h" + +#include +#include + +#include "soc/soc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup rtc_apis, rtc registers and memory related apis + * @brief rtc apis + */ + +/** @addtogroup rtc_apis + * @{ + */ + +/************************************************************************************** + * Note: * + * Some Rtc memory and registers are used, in ROM or in internal library. * + * Please do not use reserved or used rtc memory or registers. * + * * + ************************************************************************************* + * RTC Memory & Store Register usage + ************************************************************************************* + * rtc memory addr type size usage + * 0x3ff61000(0x50000000) Slow SIZE_CP Co-Processor code/Reset Entry + * 0x3ff61000+SIZE_CP Slow 4096-SIZE_CP + * 0x3ff62800 Slow 4096 Reserved + * + * 0x3ff80000(0x400c0000) Fast 8192 deep sleep entry code + * + ************************************************************************************* + * Rtc store registers usage + * RTC_CNTL_STORE0_REG + * RTC_CNTL_STORE1_REG + * RTC_CNTL_STORE2_REG + * RTC_CNTL_STORE3_REG + * RTC_CNTL_STORE4_REG Reserved + * RTC_CNTL_STORE5_REG External Xtal Frequency + * RTC_CNTL_STORE6_REG FAST_RTC_MEMORY_ENTRY + * RTC_CNTL_STORE7_REG FAST_RTC_MEMORY_CRC + ************************************************************************************* + */ +#define RTC_ENTRY_ADDR_REG RTC_CNTL_STORE6_REG +#define RTC_MEMORY_CRC_REG RTC_CNTL_STORE7_REG + + +typedef enum { + AWAKE = 0, // + +#ifdef __cplusplus +extern "C" { +#endif + +void ets_secure_boot_start(void); + +void ets_secure_boot_finish(void); + +void ets_secure_boot_hash(uint32_t *buf); + +void ets_secure_boot_obtain(void); + +int ets_secure_boot_check(uint32_t *buf); + +void ets_secure_boot_rd_iv(uint32_t *buf); + +void ets_secure_boot_rd_abstract(uint32_t *buf); + +bool ets_secure_boot_check_start(uint8_t abs_index, uint32_t iv_addr); + +int ets_secure_boot_check_finish(uint32_t *abstract); + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_SECURE_BOOT_H_ */ diff --git a/tools/sdk/include/esp32/rom/sha.h b/tools/sdk/include/esp32/rom/sha.h new file mode 100644 index 00000000..8082a394 --- /dev/null +++ b/tools/sdk/include/esp32/rom/sha.h @@ -0,0 +1,58 @@ +/* + ROM functions for hardware SHA support. + + It is not recommended to use these functions directly, + use the wrapper functions in hwcrypto/sha.h instead. + + */ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _ROM_SHA_H_ +#define _ROM_SHA_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct SHAContext { + bool start; + uint32_t total_input_bits[4]; +} SHA_CTX; + +enum SHA_TYPE { + SHA1 = 0, + SHA2_256, + SHA2_384, + SHA2_512, + SHA_INVALID = -1, +}; + +void ets_sha_init(SHA_CTX *ctx); + +void ets_sha_enable(void); + +void ets_sha_disable(void); + +void ets_sha_update(SHA_CTX *ctx, enum SHA_TYPE type, const uint8_t *input, size_t input_bits); + +void ets_sha_finish(SHA_CTX *ctx, enum SHA_TYPE type, uint8_t *output); + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_SHA_H_ */ diff --git a/tools/sdk/include/esp32/rom/spi_flash.h b/tools/sdk/include/esp32/rom/spi_flash.h new file mode 100644 index 00000000..ba8eebc2 --- /dev/null +++ b/tools/sdk/include/esp32/rom/spi_flash.h @@ -0,0 +1,514 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ROM_SPI_FLASH_H_ +#define _ROM_SPI_FLASH_H_ + +#include +#include + +#include "esp_attr.h" + +#include "soc/spi_reg.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup spi_flash_apis, spi flash operation related apis + * @brief spi_flash apis + */ + +/** @addtogroup spi_flash_apis + * @{ + */ + +/************************************************************* + * Note + ************************************************************* + * 1. ESP32 chip have 4 SPI slave/master, however, SPI0 is + * used as an SPI master to access Flash and ext-SRAM by + * Cache module. It will support Decryto read for Flash, + * read/write for ext-SRAM. And SPI1 is also used as an + * SPI master for Flash read/write and ext-SRAM read/write. + * It will support Encrypto write for Flash. + * 2. As an SPI master, SPI support Highest clock to 80M, + * however, Flash with 80M Clock should be configured + * for different Flash chips. If you want to use 80M + * clock We should use the SPI that is certified by + * Espressif. However, the certification is not started + * at the time, so please use 40M clock at the moment. + * 3. SPI Flash can use 2 lines or 4 lines mode. If you + * use 2 lines mode, you can save two pad SPIHD and + * SPIWP for gpio. ESP32 support configured SPI pad for + * Flash, the configuration is stored in efuse and flash. + * However, the configurations of pads should be certified + * by Espressif. If you use this function, please use 40M + * clock at the moment. + * 4. ESP32 support to use Common SPI command to configure + * Flash to QIO mode, if you failed to configure with fix + * command. With Common SPI Command, ESP32 can also provide + * a way to use same Common SPI command groups on different + * Flash chips. + * 5. This functions are not protected by packeting, Please use the + ************************************************************* + */ + +#define PERIPHS_SPI_FLASH_CMD SPI_CMD(1) +#define PERIPHS_SPI_FLASH_ADDR SPI_ADDR(1) +#define PERIPHS_SPI_FLASH_CTRL SPI_CTRL(1) +#define PERIPHS_SPI_FLASH_CTRL1 SPI_CTRL1(1) +#define PERIPHS_SPI_FLASH_STATUS SPI_RD_STATUS(1) +#define PERIPHS_SPI_FLASH_USRREG SPI_USER(1) +#define PERIPHS_SPI_FLASH_USRREG1 SPI_USER1(1) +#define PERIPHS_SPI_FLASH_USRREG2 SPI_USER2(1) +#define PERIPHS_SPI_FLASH_C0 SPI_W0(1) +#define PERIPHS_SPI_FLASH_C1 SPI_W1(1) +#define PERIPHS_SPI_FLASH_C2 SPI_W2(1) +#define PERIPHS_SPI_FLASH_C3 SPI_W3(1) +#define PERIPHS_SPI_FLASH_C4 SPI_W4(1) +#define PERIPHS_SPI_FLASH_C5 SPI_W5(1) +#define PERIPHS_SPI_FLASH_C6 SPI_W6(1) +#define PERIPHS_SPI_FLASH_C7 SPI_W7(1) +#define PERIPHS_SPI_FLASH_TX_CRC SPI_TX_CRC(1) + +#define SPI0_R_QIO_DUMMY_CYCLELEN 3 +#define SPI0_R_QIO_ADDR_BITSLEN 31 +#define SPI0_R_FAST_DUMMY_CYCLELEN 7 +#define SPI0_R_DIO_DUMMY_CYCLELEN 3 +#define SPI0_R_FAST_ADDR_BITSLEN 23 +#define SPI0_R_SIO_ADDR_BITSLEN 23 + +#define SPI1_R_QIO_DUMMY_CYCLELEN 3 +#define SPI1_R_QIO_ADDR_BITSLEN 31 +#define SPI1_R_FAST_DUMMY_CYCLELEN 7 +#define SPI1_R_DIO_DUMMY_CYCLELEN 3 +#define SPI1_R_DIO_ADDR_BITSLEN 31 +#define SPI1_R_FAST_ADDR_BITSLEN 23 +#define SPI1_R_SIO_ADDR_BITSLEN 23 + +#define SPI_W_SIO_ADDR_BITSLEN 23 + +#define TWO_BYTE_STATUS_EN SPI_WRSR_2B + +//SPI address register +#define SPI_FLASH_BYTES_LEN 24 +#define SPI_BUFF_BYTE_WRITE_NUM 32 +#define SPI_BUFF_BYTE_READ_NUM 64 +#define SPI_BUFF_BYTE_READ_BITS 0x3f + +//SPI status register +#define SPI_FLASH_BUSY_FLAG BIT0 +#define SPI_FLASH_WRENABLE_FLAG BIT1 +#define SPI_FLASH_BP0 BIT2 +#define SPI_FLASH_BP1 BIT3 +#define SPI_FLASH_BP2 BIT4 +#define FLASH_WR_PROTECT (SPI_FLASH_BP0|SPI_FLASH_BP1|SPI_FLASH_BP2) +#define SPI_FLASH_QE BIT9 + +typedef enum { + SPI_FLASH_QIO_MODE = 0, + SPI_FLASH_QOUT_MODE, + SPI_FLASH_DIO_MODE, + SPI_FLASH_DOUT_MODE, + SPI_FLASH_FASTRD_MODE, + SPI_FLASH_SLOWRD_MODE +} SpiFlashRdMode; + +typedef enum { + SPI_FLASH_RESULT_OK, + SPI_FLASH_RESULT_ERR, + SPI_FLASH_RESULT_TIMEOUT +} SpiFlashOpResult; + +typedef struct { + uint32_t deviceId; + uint32_t chip_size; // chip size in bytes + uint32_t block_size; + uint32_t sector_size; + uint32_t page_size; + uint32_t status_mask; +} SpiFlashChip; + +typedef struct { + uint8_t data_length; + uint8_t read_cmd0; + uint8_t read_cmd1; + uint8_t write_cmd; + uint16_t data_mask; + uint16_t data; +} SpiCommonCmd; + +/** + * @brief Fix the bug in SPI hardware communication with Flash/Ext-SRAM in High Speed. + * Please do not call this function in SDK. + * + * @param uint8_t spi: 0 for SPI0(Cache Access), 1 for SPI1(Flash read/write). + * + * @param uint8_t freqdiv: Pll is 80M, 4 for 20M, 3 for 26.7M, 2 for 40M, 1 for 80M. + * + * @return None + */ +void spi_dummy_len_fix(uint8_t spi, uint8_t freqdiv); + +/** + * @brief Select SPI Flash to QIO mode when WP pad is read from Flash. + * Please do not call this function in SDK. + * + * @param uint8_t wp_gpio_num: WP gpio number. + * + * @param uint32_t ishspi: 0 for spi, 1 for hspi, flash pad decided by strapping + * else, bit[5:0] spiclk, bit[11:6] spiq, bit[17:12] spid, bit[23:18] spics0, bit[29:24] spihd + * + * @return None + */ +void SelectSpiQIO(uint8_t wp_gpio_num, uint32_t ishspi); + +/** + * @brief Set SPI Flash pad drivers. + * Please do not call this function in SDK. + * + * @param uint8_t wp_gpio_num: WP gpio number. + * + * @param uint32_t ishspi: 0 for spi, 1 for hspi, flash pad decided by strapping + * else, bit[5:0] spiclk, bit[11:6] spiq, bit[17:12] spid, bit[23:18] spics0, bit[29:24] spihd + * + * @param uint8_t *drvs: drvs[0]-bit[3:0] for cpiclk, bit[7:4] for spiq, drvs[1]-bit[3:0] for spid, drvs[1]-bit[7:4] for spid + * drvs[2]-bit[3:0] for spihd, drvs[2]-bit[7:4] for spiwp. + * Values usually read from falsh by rom code, function usually callde by rom code. + * if value with bit(3) set, the value is valid, bit[2:0] is the real value. + * + * @return None + */ +void SetSpiDrvs(uint8_t wp_gpio_num, uint32_t ishspi, uint8_t *drvs); + +/** + * @brief Select SPI Flash function for pads. + * Please do not call this function in SDK. + * + * @param uint32_t ishspi: 0 for spi, 1 for hspi, flash pad decided by strapping + * else, bit[5:0] spiclk, bit[11:6] spiq, bit[17:12] spid, bit[23:18] spics0, bit[29:24] spihd + * + * @return None + */ +void SelectSpiFunction(uint32_t ishspi); + +/** + * @brief SPI Flash init, clock divisor is 4, use 1 line Slow read mode. + * Please do not call this function in SDK. + * + * @param uint32_t ishspi: 0 for spi, 1 for hspi, flash pad decided by strapping + * else, bit[5:0] spiclk, bit[11:6] spiq, bit[17:12] spid, bit[23:18] spics0, bit[29:24] spihd + * + * @param uint8_t legacy: In legacy mode, more SPI command is used in line. + * + * @return None + */ +void spi_flash_attach(uint32_t ishspi, bool legacy); + +/** + * @brief SPI Read Flash status register. We use CMD 0x05. + * Please do not call this function in SDK. + * + * @param SpiFlashChip *spi : The information for Flash, which is exported from ld file. + * + * @param uint32_t *status : The pointer to which to return the Flash status value. + * + * @return SPI_FLASH_RESULT_OK : read OK. + * SPI_FLASH_RESULT_ERR : read error. + * SPI_FLASH_RESULT_TIMEOUT : read timeout. + */ +SpiFlashOpResult SPI_read_status(SpiFlashChip *spi, uint32_t *status); + +/** + * @brief SPI Read Flash status register high 16 bit. We use CMD 0x35. + * Please do not call this function in SDK. + * + * @param SpiFlashChip *spi : The information for Flash, which is exported from ld file. + * + * @param uint32_t *status : The pointer to which to return the Flash status value. + * + * @return SPI_FLASH_RESULT_OK : read OK. + * SPI_FLASH_RESULT_ERR : read error. + * SPI_FLASH_RESULT_TIMEOUT : read timeout. + */ +SpiFlashOpResult SPI_read_status_high(SpiFlashChip *spi, uint32_t *status); + +/** + * @brief Write status to Falsh status register. + * Please do not call this function in SDK. + * + * @param SpiFlashChip *spi : The information for Flash, which is exported from ld file. + * + * @param uint32_t status_value : Value to . + * + * @return SPI_FLASH_RESULT_OK : write OK. + * SPI_FLASH_RESULT_ERR : write error. + * SPI_FLASH_RESULT_TIMEOUT : write timeout. + */ +SpiFlashOpResult SPI_write_status(SpiFlashChip *spi, uint32_t status_value); + +/** + * @brief Use a command to Read Flash status register. + * Please do not call this function in SDK. + * + * @param SpiFlashChip *spi : The information for Flash, which is exported from ld file. + * + * @param uint32_t*status : The pointer to which to return the Flash status value. + * + * @return SPI_FLASH_RESULT_OK : read OK. + * SPI_FLASH_RESULT_ERR : read error. + * SPI_FLASH_RESULT_TIMEOUT : read timeout. + */ +SpiFlashOpResult SPI_user_command_read(uint32_t *status, uint8_t cmd); + +/** + * @brief Config SPI Flash read mode when init. + * Please do not call this function in SDK. + * + * @param SpiFlashRdMode mode : QIO/QOUT/DIO/DOUT/FastRD/SlowRD. + * + * @param uint8_t legacy: In legacy mode, more SPI command is used in line. + * + * @return SPI_FLASH_RESULT_OK : config OK. + * SPI_FLASH_RESULT_ERR : config error. + * SPI_FLASH_RESULT_TIMEOUT : config timeout. + */ +SpiFlashOpResult SPIReadModeCnfig(SpiFlashRdMode mode, bool legacy); + +/** + * @brief Config SPI Flash read mode when Flash is running in some mode. + * Please do not call this function in SDK. + * + * @param SpiFlashRdMode mode : QIO/QOUT/DIO/DOUT/FastRD/SlowRD. + * + * @return SPI_FLASH_RESULT_OK : config OK. + * SPI_FLASH_RESULT_ERR : config error. + * SPI_FLASH_RESULT_TIMEOUT : config timeout. + */ +SpiFlashOpResult SPIMasterReadModeCnfig(SpiFlashRdMode mode); + +/** + * @brief Config SPI Flash clock divisor. + * Please do not call this function in SDK. + * + * @param uint8_t freqdiv: clock divisor. + * + * @param uint8_t spi: 0 for SPI0, 1 for SPI1. + * + * @return SPI_FLASH_RESULT_OK : config OK. + * SPI_FLASH_RESULT_ERR : config error. + * SPI_FLASH_RESULT_TIMEOUT : config timeout. + */ +SpiFlashOpResult SPIClkConfig(uint8_t freqdiv, uint8_t spi); + +/** + * @brief Send CommonCmd to Flash so that is can go into QIO mode, some Flash use different CMD. + * Please do not call this function in SDK. + * + * @param SpiCommonCmd *cmd : A struct to show the action of a command. + * + * @return uint16_t 0 : do not send command any more. + * 1 : go to the next command. + * n > 1 : skip (n - 1) commands. + */ +uint16_t SPI_Common_Command(SpiCommonCmd *cmd); + +/** + * @brief Unlock SPI write protect. + * Please do not call this function in SDK. + * + * @param None. + * + * @return SPI_FLASH_RESULT_OK : Unlock OK. + * SPI_FLASH_RESULT_ERR : Unlock error. + * SPI_FLASH_RESULT_TIMEOUT : Unlock timeout. + */ +SpiFlashOpResult SPIUnlock(void); + +/** + * @brief SPI write protect. + * Please do not call this function in SDK. + * + * @param None. + * + * @return SPI_FLASH_RESULT_OK : Lock OK. + * SPI_FLASH_RESULT_ERR : Lock error. + * SPI_FLASH_RESULT_TIMEOUT : Lock timeout. + */ +SpiFlashOpResult SPILock(void); + +/** + * @brief Update SPI Flash parameter. + * Please do not call this function in SDK. + * + * @param uint32_t deviceId : Device ID read from SPI, the low 32 bit. + * + * @param uint32_t chip_size : The Flash size. + * + * @param uint32_t block_size : The Flash block size. + * + * @param uint32_t sector_size : The Flash sector size. + * + * @param uint32_t page_size : The Flash page size. + * + * @param uint32_t status_mask : The Mask used when read status from Flash(use single CMD). + * + * @return SPI_FLASH_RESULT_OK : Update OK. + * SPI_FLASH_RESULT_ERR : Update error. + * SPI_FLASH_RESULT_TIMEOUT : Update timeout. + */ +SpiFlashOpResult SPIParamCfg(uint32_t deviceId, uint32_t chip_size, uint32_t block_size, uint32_t sector_size, uint32_t page_size, uint32_t status_mask); + +/** + * @brief Erase whole flash chip. + * Please do not call this function in SDK. + * + * @param None + * + * @return SPI_FLASH_RESULT_OK : Erase OK. + * SPI_FLASH_RESULT_ERR : Erase error. + * SPI_FLASH_RESULT_TIMEOUT : Erase timeout. + */ +SpiFlashOpResult SPIEraseChip(void); + +/** + * @brief Erase a block of flash. + * Please do not call this function in SDK. + * + * @param uint32_t block_num : Which block to erase. + * + * @return SPI_FLASH_RESULT_OK : Erase OK. + * SPI_FLASH_RESULT_ERR : Erase error. + * SPI_FLASH_RESULT_TIMEOUT : Erase timeout. + */ +SpiFlashOpResult SPIEraseBlock(uint32_t block_num); + +/** + * @brief Erase a sector of flash. + * Please do not call this function in SDK. + * + * @param uint32_t sector_num : Which sector to erase. + * + * @return SPI_FLASH_RESULT_OK : Erase OK. + * SPI_FLASH_RESULT_ERR : Erase error. + * SPI_FLASH_RESULT_TIMEOUT : Erase timeout. + */ +SpiFlashOpResult SPIEraseSector(uint32_t sector_num); + +/** + * @brief Erase some sectors. + * Please do not call this function in SDK. + * + * @param uint32_t start_addr : Start addr to erase, should be sector aligned. + * + * @param uint32_t area_len : Length to erase, should be sector aligned. + * + * @return SPI_FLASH_RESULT_OK : Erase OK. + * SPI_FLASH_RESULT_ERR : Erase error. + * SPI_FLASH_RESULT_TIMEOUT : Erase timeout. + */ +SpiFlashOpResult SPIEraseArea(uint32_t start_addr, uint32_t area_len); + +/** + * @brief Write Data to Flash, you should Erase it yourself if need. + * Please do not call this function in SDK. + * + * @param uint32_t dest_addr : Address to write, should be 4 bytes aligned. + * + * @param const uint32_t *src : The pointer to data which is to write. + * + * @param uint32_t len : Length to write, should be 4 bytes aligned. + * + * @return SPI_FLASH_RESULT_OK : Write OK. + * SPI_FLASH_RESULT_ERR : Write error. + * SPI_FLASH_RESULT_TIMEOUT : Write timeout. + */ +SpiFlashOpResult SPIWrite(uint32_t dest_addr, const uint32_t *src, int32_t len); + +/** + * @brief Read Data from Flash, you should Erase it yourself if need. + * Please do not call this function in SDK. + * + * @param uint32_t src_addr : Address to read, should be 4 bytes aligned. + * + * @param uint32_t *dest : The buf to read the data. + * + * @param uint32_t len : Length to read, should be 4 bytes aligned. + * + * @return SPI_FLASH_RESULT_OK : Read OK. + * SPI_FLASH_RESULT_ERR : Read error. + * SPI_FLASH_RESULT_TIMEOUT : Read timeout. + */ +SpiFlashOpResult SPIRead(uint32_t src_addr, uint32_t *dest, int32_t len); + +/** + * @brief SPI1 go into encrypto mode. + * Please do not call this function in SDK. + * + * @param None + * + * @return None + */ +void SPI_Write_Encrypt_Enable(void); + +/** + * @brief Prepare 32 Bytes data to encrpto writing, you should Erase it yourself if need. + * Please do not call this function in SDK. + * + * @param uint32_t flash_addr : Address to write, should be 32 bytes aligned. + * + * @param uint32_t *data : The pointer to data which is to write. + * + * @return SPI_FLASH_RESULT_OK : Prepare OK. + * SPI_FLASH_RESULT_ERR : Prepare error. + * SPI_FLASH_RESULT_TIMEOUT : Prepare timeout. + */ +SpiFlashOpResult SPI_Prepare_Encrypt_Data(uint32_t flash_addr, uint32_t *data); + +/** + * @brief SPI1 go out of encrypto mode. + * Please do not call this function in SDK. + * + * @param None + * + * @return None + */ +void SPI_Write_Encrypt_Disable(void); + +/** + * @brief Encrpto writing data to flash, you should Erase it yourself if need. + * Please do not call this function in SDK. + * + * @param uint32_t flash_addr : Address to write, should be 32 bytes aligned. + * + * @param uint32_t *data : The pointer to data which is to write. + * + * @param uint32_t len : Length to write, should be 32 bytes aligned. + * + * @return SPI_FLASH_RESULT_OK : Encrypto write OK. + * SPI_FLASH_RESULT_ERR : Encrypto write error. + * SPI_FLASH_RESULT_TIMEOUT : Encrypto write timeout. + */ +SpiFlashOpResult SPI_Encrypt_Write(uint32_t flash_addr, uint32_t *data, uint32_t len); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_SPI_FLASH_H_ */ diff --git a/tools/sdk/include/esp32/rom/tbconsole.h b/tools/sdk/include/esp32/rom/tbconsole.h new file mode 100644 index 00000000..891c2732 --- /dev/null +++ b/tools/sdk/include/esp32/rom/tbconsole.h @@ -0,0 +1,27 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _ROM_TBCONSOLE_H_ +#define _ROM_TBCONSOLE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +void start_tb_console(); + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_TBCONSOLE_H_ */ diff --git a/tools/sdk/include/esp32/rom/tjpgd.h b/tools/sdk/include/esp32/rom/tjpgd.h new file mode 100644 index 00000000..31fbc97c --- /dev/null +++ b/tools/sdk/include/esp32/rom/tjpgd.h @@ -0,0 +1,99 @@ +/*----------------------------------------------------------------------------/ +/ TJpgDec - Tiny JPEG Decompressor include file (C)ChaN, 2012 +/----------------------------------------------------------------------------*/ +#ifndef _TJPGDEC +#define _TJPGDEC +/*---------------------------------------------------------------------------*/ +/* System Configurations */ + +#define JD_SZBUF 512 /* Size of stream input buffer */ +#define JD_FORMAT 0 /* Output pixel format 0:RGB888 (3 BYTE/pix), 1:RGB565 (1 WORD/pix) */ +#define JD_USE_SCALE 1 /* Use descaling feature for output */ +#define JD_TBLCLIP 1 /* Use table for saturation (might be a bit faster but increases 1K bytes of code size) */ + +/*---------------------------------------------------------------------------*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/* These types must be 16-bit, 32-bit or larger integer */ +typedef int INT; +typedef unsigned int UINT; + +/* These types must be 8-bit integer */ +typedef char CHAR; +typedef unsigned char UCHAR; +typedef unsigned char BYTE; + +/* These types must be 16-bit integer */ +typedef short SHORT; +typedef unsigned short USHORT; +typedef unsigned short WORD; +typedef unsigned short WCHAR; + +/* These types must be 32-bit integer */ +typedef long LONG; +typedef unsigned long ULONG; +typedef unsigned long DWORD; + + +/* Error code */ +typedef enum { + JDR_OK = 0, /* 0: Succeeded */ + JDR_INTR, /* 1: Interrupted by output function */ + JDR_INP, /* 2: Device error or wrong termination of input stream */ + JDR_MEM1, /* 3: Insufficient memory pool for the image */ + JDR_MEM2, /* 4: Insufficient stream input buffer */ + JDR_PAR, /* 5: Parameter error */ + JDR_FMT1, /* 6: Data format error (may be damaged data) */ + JDR_FMT2, /* 7: Right format but not supported */ + JDR_FMT3 /* 8: Not supported JPEG standard */ +} JRESULT; + + + +/* Rectangular structure */ +typedef struct { + WORD left, right, top, bottom; +} JRECT; + + + +/* Decompressor object structure */ +typedef struct JDEC JDEC; +struct JDEC { + UINT dctr; /* Number of bytes available in the input buffer */ + BYTE* dptr; /* Current data read ptr */ + BYTE* inbuf; /* Bit stream input buffer */ + BYTE dmsk; /* Current bit in the current read byte */ + BYTE scale; /* Output scaling ratio */ + BYTE msx, msy; /* MCU size in unit of block (width, height) */ + BYTE qtid[3]; /* Quantization table ID of each component */ + SHORT dcv[3]; /* Previous DC element of each component */ + WORD nrst; /* Restart inverval */ + UINT width, height; /* Size of the input image (pixel) */ + BYTE* huffbits[2][2]; /* Huffman bit distribution tables [id][dcac] */ + WORD* huffcode[2][2]; /* Huffman code word tables [id][dcac] */ + BYTE* huffdata[2][2]; /* Huffman decoded data tables [id][dcac] */ + LONG* qttbl[4]; /* Dequaitizer tables [id] */ + void* workbuf; /* Working buffer for IDCT and RGB output */ + BYTE* mcubuf; /* Working buffer for the MCU */ + void* pool; /* Pointer to available memory pool */ + UINT sz_pool; /* Size of momory pool (bytes available) */ + UINT (*infunc)(JDEC*, BYTE*, UINT);/* Pointer to jpeg stream input function */ + void* device; /* Pointer to I/O device identifiler for the session */ +}; + + + +/* TJpgDec API functions */ +JRESULT jd_prepare (JDEC*, UINT(*)(JDEC*,BYTE*,UINT), void*, UINT, void*); +JRESULT jd_decomp (JDEC*, UINT(*)(JDEC*,void*,JRECT*), BYTE); + + +#ifdef __cplusplus +} +#endif + +#endif /* _TJPGDEC */ diff --git a/tools/sdk/include/esp32/rom/uart.h b/tools/sdk/include/esp32/rom/uart.h new file mode 100644 index 00000000..8e312513 --- /dev/null +++ b/tools/sdk/include/esp32/rom/uart.h @@ -0,0 +1,411 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ROM_UART_H_ +#define _ROM_UART_H_ + +#include "esp_types.h" +#include "esp_attr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup uart_apis, uart configuration and communication related apis + * @brief uart apis + */ + +/** @addtogroup uart_apis + * @{ + */ + +#define RX_BUFF_SIZE 0x100 +#define TX_BUFF_SIZE 100 + +//uart int enalbe register ctrl bits +#define UART_RCV_INTEN BIT0 +#define UART_TRX_INTEN BIT1 +#define UART_LINE_STATUS_INTEN BIT2 + +//uart int identification ctrl bits +#define UART_INT_FLAG_MASK 0x0E + +//uart fifo ctrl bits +#define UART_CLR_RCV_FIFO BIT1 +#define UART_CLR_TRX_FIFO BIT2 +#define UART_RCVFIFO_TRG_LVL_BITS BIT6 + +//uart line control bits +#define UART_DIV_LATCH_ACCESS_BIT BIT7 + +//uart line status bits +#define UART_RCV_DATA_RDY_FLAG BIT0 +#define UART_RCV_OVER_FLOW_FLAG BIT1 +#define UART_RCV_PARITY_ERR_FLAG BIT2 +#define UART_RCV_FRAME_ERR_FLAG BIT3 +#define UART_BRK_INT_FLAG BIT4 +#define UART_TRX_FIFO_EMPTY_FLAG BIT5 +#define UART_TRX_ALL_EMPTY_FLAG BIT6 // include fifo and shift reg +#define UART_RCV_ERR_FLAG BIT7 + +//send and receive message frame head +#define FRAME_FLAG 0x7E + +typedef enum { + UART_LINE_STATUS_INT_FLAG = 0x06, + UART_RCV_FIFO_INT_FLAG = 0x04, + UART_RCV_TMOUT_INT_FLAG = 0x0C, + UART_TXBUFF_EMPTY_INT_FLAG = 0x02 +} UartIntType; //consider bit0 for int_flag + +typedef enum { + RCV_ONE_BYTE = 0x0, + RCV_FOUR_BYTE = 0x1, + RCV_EIGHT_BYTE = 0x2, + RCV_FOURTEEN_BYTE = 0x3 +} UartRcvFifoTrgLvl; + +typedef enum { + FIVE_BITS = 0x0, + SIX_BITS = 0x1, + SEVEN_BITS = 0x2, + EIGHT_BITS = 0x3 +} UartBitsNum4Char; + +typedef enum { + ONE_STOP_BIT = 1, + ONE_HALF_STOP_BIT = 2, + TWO_STOP_BIT = 3 +} UartStopBitsNum; + +typedef enum { + NONE_BITS = 0, + ODD_BITS = 2, + EVEN_BITS = 3 + +} UartParityMode; + +typedef enum { + STICK_PARITY_DIS = 0, + STICK_PARITY_EN = 2 +} UartExistParity; + +typedef enum { + BIT_RATE_9600 = 9600, + BIT_RATE_19200 = 19200, + BIT_RATE_38400 = 38400, + BIT_RATE_57600 = 57600, + BIT_RATE_115200 = 115200, + BIT_RATE_230400 = 230400, + BIT_RATE_460800 = 460800, + BIT_RATE_921600 = 921600 +} UartBautRate; + +typedef enum { + NONE_CTRL, + HARDWARE_CTRL, + XON_XOFF_CTRL +} UartFlowCtrl; + +typedef enum { + EMPTY, + UNDER_WRITE, + WRITE_OVER +} RcvMsgBuffState; + +typedef struct { +// uint32_t RcvBuffSize; + uint8_t *pRcvMsgBuff; + uint8_t *pWritePos; + uint8_t *pReadPos; + uint8_t TrigLvl; + RcvMsgBuffState BuffState; +} RcvMsgBuff; + +typedef struct { + uint32_t TrxBuffSize; + uint8_t *pTrxBuff; +} TrxMsgBuff; + +typedef enum { + BAUD_RATE_DET, + WAIT_SYNC_FRM, + SRCH_MSG_HEAD, + RCV_MSG_BODY, + RCV_ESC_CHAR, +} RcvMsgState; + +typedef struct { + UartBautRate baut_rate; + UartBitsNum4Char data_bits; + UartExistParity exist_parity; + UartParityMode parity; // chip size in byte + UartStopBitsNum stop_bits; + UartFlowCtrl flow_ctrl; + uint8_t buff_uart_no; //indicate which uart use tx/rx buffer + uint8_t tx_uart_no; + RcvMsgBuff rcv_buff; +// TrxMsgBuff trx_buff; + RcvMsgState rcv_state; + int received; +} UartDevice; + +/** + * @brief Init uart device struct value and reset uart0/uart1 rx. + * Please do not call this function in SDK. + * + * @param None + * + * @return None + */ +void uartAttach(void); + +/** + * @brief Init uart0 or uart1 for UART download booting mode. + * Please do not call this function in SDK. + * + * @param uint8_t uart_no : 0 for UART0, else for UART1. + * + * @param uint32_t clock : clock used by uart module, to adjust baudrate. + * + * @return None + */ +void Uart_Init(uint8_t uart_no, uint32_t clock); + +/** + * @brief Modify uart baudrate. + * This function will reset RX/TX fifo for uart. + * + * @param uint8_t uart_no : 0 for UART0, 1 for UART1. + * + * @param uint32_t DivLatchValue : (clock << 4)/baudrate. + * + * @return None + */ +void uart_div_modify(uint8_t uart_no, uint32_t DivLatchValue); + +/** + * @brief Init uart0 or uart1 for UART download booting mode. + * Please do not call this function in SDK. + * + * @param uint8_t uart_no : 0 for UART0, 1 for UART1. + * + * @param uint8_t is_sync : 0, only one UART module, easy to detect, wait until detected; + * 1, two UART modules, hard to detect, detect and return. + * + * @return None + */ +int uart_baudrate_detect(uint8_t uart_no, uint8_t is_sync); + +/** + * @brief Switch printf channel of uart_tx_one_char. + * Please do not call this function when printf. + * + * @param uint8_t uart_no : 0 for UART0, 1 for UART1. + * + * @return None + */ +void uart_tx_switch(uint8_t uart_no); + +/** + * @brief Switch message exchange channel for UART download booting. + * Please do not call this function in SDK. + * + * @param uint8_t uart_no : 0 for UART0, 1 for UART1. + * + * @return None + */ +void uart_buff_switch(uint8_t uart_no); + +/** + * @brief Output a char to printf channel, wait until fifo not full. + * + * @param None + * + * @return OK. + */ +STATUS uart_tx_one_char(uint8_t TxChar); + +/** + * @brief Output a char to message exchange channel, wait until fifo not full. + * Please do not call this function in SDK. + * + * @param None + * + * @return OK. + */ +STATUS uart_tx_one_char2(uint8_t TxChar);//for send message + +/** + * @brief Wait until uart tx full empty. + * + * @param uint8_t uart_no : 0 for UART0, 1 for UART1. + * + * @return None. + */ +void uart_tx_flush(uint8_t uart_no); + +/** + * @brief Wait until uart tx full empty and the last char send ok. + * + * @param uint8_t uart_no : 0 for UART0, 1 for UART1. + * + * @return None. + */ +void uart_tx_wait_idle(uint8_t uart_no); + +/** + * @brief Get an input char from message channel. + * Please do not call this function in SDK. + * + * @param uint8_t *pRxChar : the pointer to store the char. + * + * @return OK for successful. + * FAIL for failed. + */ +STATUS uart_rx_one_char(uint8_t *pRxChar); + +/** + * @brief Get an input char to message channel, wait until successful. + * Please do not call this function in SDK. + * + * @param None + * + * @return char : input char value. + */ +char uart_rx_one_char_block(void); + +/** + * @brief Get an input string line from message channel. + * Please do not call this function in SDK. + * + * @param uint8_t *pString : the pointer to store the string. + * + * @param uint8_t MaxStrlen : the max string length, incude '\0'. + * + * @return OK. + */ +STATUS UartRxString(uint8_t *pString, uint8_t MaxStrlen); + +/** + * @brief Process uart recevied information in the interrupt handler. + * Please do not call this function in SDK. + * + * @param void *para : the message receive buffer. + * + * @return None + */ +void uart_rx_intr_handler(void *para); + +/** + * @brief Get an char from receive buffer. + * Please do not call this function in SDK. + * + * @param RcvMsgBuff *pRxBuff : the pointer to the struct that include receive buffer. + * + * @param uint8_t *pRxByte : the pointer to store the char. + * + * @return OK for successful. + * FAIL for failed. + */ +STATUS uart_rx_readbuff( RcvMsgBuff *pRxBuff, uint8_t *pRxByte); + +/** + * @brief Get all chars from receive buffer. + * Please do not call this function in SDK. + * + * @param uint8_t *pCmdLn : the pointer to store the string. + * + * @return OK for successful. + * FAIL for failed. + */ +STATUS UartGetCmdLn(uint8_t *pCmdLn); + +/** + * @brief Get uart configuration struct. + * Please do not call this function in SDK. + * + * @param None + * + * @return UartDevice * : uart configuration struct pointer. + */ +UartDevice *GetUartDevice(void); + +/** + * @brief Send an packet to download tool, with SLIP escaping. + * Please do not call this function in SDK. + * + * @param uint8_t *p : the pointer to output string. + * + * @param int len : the string length. + * + * @return None. + */ +void send_packet(uint8_t *p, int len); + +/** + * @brief Receive an packet from download tool, with SLIP escaping. + * Please do not call this function in SDK. + * + * @param uint8_t *p : the pointer to input string. + * + * @param int len : If string length > len, the string will be truncated. + * + * @param uint8_t is_sync : 0, only one UART module; + * 1, two UART modules. + * + * @return int : the length of the string. + */ +int recv_packet(uint8_t *p, int len, uint8_t is_sync); + +/** + * @brief Send an packet to download tool, with SLIP escaping. + * Please do not call this function in SDK. + * + * @param uint8_t *pData : the pointer to input string. + * + * @param uint16_t DataLen : the string length. + * + * @return OK for successful. + * FAIL for failed. + */ +STATUS SendMsg(uint8_t *pData, uint16_t DataLen); + +/** + * @brief Receive an packet from download tool, with SLIP escaping. + * Please do not call this function in SDK. + * + * @param uint8_t *pData : the pointer to input string. + * + * @param uint16_t MaxDataLen : If string length > MaxDataLen, the string will be truncated. + * + * @param uint8_t is_sync : 0, only one UART module; + * 1, two UART modules. + * + * @return OK for successful. + * FAIL for failed. + */ +STATUS RcvMsg(uint8_t *pData, uint16_t MaxDataLen, uint8_t is_sync); + +extern UartDevice UartDev; + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* _ROM_UART_H_ */ diff --git a/tools/sdk/include/esp32/soc/bb_reg.h b/tools/sdk/include/esp32/soc/bb_reg.h new file mode 100755 index 00000000..0b52f66a --- /dev/null +++ b/tools/sdk/include/esp32/soc/bb_reg.h @@ -0,0 +1,102 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _SOC_BB_REG_H_ +#define _SOC_BB_REG_H_ + +#define apb_bb_offset 0x6001c000 + +#define BB_DLY apb_bb_offset + 0x00009b00 // reg 00 +#define BB_TEST apb_bb_offset + 0x00009b08 // reg 02 +#define BB_TM1 apb_bb_offset + 0x00009b0c // reg 03 +#define BB_TM_CNTL apb_bb_offset + 0x00009b14 // reg 05 +#define BB_DEL_CNTL apb_bb_offset + 0x00009b28 // reg 10 +#define BB_PARAL_CNTL apb_bb_offset + 0x00009b2c // reg 11 +#define BB_FSM1 apb_bb_offset + 0x00009b44 // reg 17 +#define BB_MXG apb_bb_offset + 0x00009b48 // reg 18 +#define BB_MNOF apb_bb_offset + 0x00009b4c // reg 19 +#define BB_SIZE apb_bb_offset + 0x00009b50 // reg 20 +#define BB_TM3a apb_bb_offset + 0x00009b54 // reg 21 +#define BB_TM4a apb_bb_offset + 0x00009b58 // reg 22 +#define BB_GAIN apb_bb_offset + 0x00009b5c // reg 23 +#define BB_CNTL apb_bb_offset + 0x00009b60 // reg 24 +#define BB_CAD apb_bb_offset + 0x00009b64 // reg 25 +#define BB_DET apb_bb_offset + 0x00009b68 // reg 26 +#define BB_DETL apb_bb_offset + 0x00009b6c // reg 27 + +#define BB_MASK_PCLL apb_bb_offset + 0x00009d08 // reg 66 +#define BB_MASK_PCLH apb_bb_offset + 0x00009d0c // reg 67 +#define BB_RX_CTRL4 apb_bb_offset + 0x00009d10 // reg 68 +#define BB_RX_CTRL apb_bb_offset + 0x00009d1c // reg 71 +#define BB_RX_CTRL2 apb_bb_offset + 0x00009d20 // reg 72 +#define BB_RX_CTRL3 apb_bb_offset + 0x00009d24 // reg 73 +#define BB_DEL4 apb_bb_offset + 0x00009d40 // reg 80 +#define BB_TM5 apb_bb_offset + 0x00009d44 // reg 81 +#define BB_TM6 apb_bb_offset + 0x00009d48 // reg 82 +#define BB_PMCTRL apb_bb_offset + 0x00009d4c // reg 83 +#define BB_PWR apb_bb_offset + 0x00009d68 // reg 90 +#define BB_BCTRL2 apb_bb_offset + 0x00009d70 // reg 92 + +#define BB_MASK_PL apb_bb_offset + 0x00009884 // reg 97 +#define BB_MASK_PCHL apb_bb_offset + 0x00009888 // reg 98 +#define BB_MASK_PCHH apb_bb_offset + 0x0000988c // reg 99 + +#define BB_MASK_CL apb_bb_offset + 0x0000989c // reg 103 +#define BB_TONE apb_bb_offset + 0x000098a0 // reg 104 +#define BB_MASK_CH apb_bb_offset + 0x000098d4 // reg 117 +#define BB_SER apb_bb_offset + 0x000098ec // reg 123 +#define BB_GN_TB apb_bb_offset + 0x00009e00 // reg 128 + +#define BB_MODE apb_bb_offset + 0x00009c00 // reg 640 +#define BB_TXCTRL apb_bb_offset + 0x00009c04 // reg 641 +#define BB_BCTRL3 apb_bb_offset + 0x00009c08 // reg 642 +#define BB_BCTRL apb_bb_offset + 0x00009c28 // reg 650 +#define BB_SMCTRL apb_bb_offset + 0x00009c48 // reg 658 +#define BB_SMCTRL2 apb_bb_offset + 0x00009c4C // reg 659 +#define BB_TXCNT apb_bb_offset + 0x00009c58 // reg 662 +#define BB_RXCTRL apb_bb_offset + 0x00009c68 // reg 666 + +#define BB_TXGAIN apb_bb_offset + 0x00009900 // reg 704 + +#define BB_RXS_CNTL apb_bb_offset + 0x00009988 // reg 738 +#define BB_MASK2_PCLL apb_bb_offset + 0x000099a8 // reg 746 +#define BB_MASK2_PCLH apb_bb_offset + 0x000099ac // reg 747 +#define BB_MASK_PH apb_bb_offset + 0x000099b0 // reg 748 +#define BB_MASK2_PCHL apb_bb_offset + 0x000099b8 // reg 750 +#define BB_MASK2_PCHH apb_bb_offset + 0x000099bc // reg 751 +// +#define BB_TX_TONE_CNTL apb_bb_offset + 0x000099f0 // reg 764 +#define BB_ADD_CNTL0 apb_bb_offset + 0x00009a28 // reg 778 +#define BB_ADD_CNTL2 apb_bb_offset + 0x00009a2c // reg 779 +#define BB_GAIN_CNTL0 apb_bb_offset + 0x00009a34 // reg 781 +#define BB_GAIN_CNTL1 apb_bb_offset + 0x00009a38 // reg 782 +#define BB_GAIN_CNTL2 apb_bb_offset + 0x00009a3c // reg 783 +#define BB_AGCMEM_CTRL apb_bb_offset + 0x00009a68 // reg 794 + +#define BB_11B_RECORD apb_bb_offset + 0x00009808 // reg 802 +#define BB_FILTER_CNTL apb_bb_offset + 0x0000980c // reg 803 +#define BB_ANALOG_CTRL1 apb_bb_offset + 0x00009838 +#define BB_ANALOG_CTRL2 apb_bb_offset + 0x0000983c //reg 815 +#define BB_ANALOG_CTRL3 apb_bb_offset + 0x00009840 //reg 816 +#define BB_RFCFG_CTRL0 apb_bb_offset + 0x00009844 //reg 817 +#define BB_RFCFG_CTRL1 apb_bb_offset + 0x00009848 //reg 818 + +#define BB_ADD_CNTL1 apb_bb_offset + 0x00009860 //reg824 +#define BB_PA_CNTL apb_bb_offset + 0x00009864 //reg825 +#define BB_RFCFG_CTRL2 apb_bb_offset + 0x0000986c //reg827 +#define BB_RXDEL_CTRL apb_bb_offset + 0x00009d18 +#define BB_RXLENGTH_CTRL apb_bb_offset + 0x00009d1c + +#endif /* _SOC_BB_REG_H_ */ + diff --git a/tools/sdk/include/esp32/soc/boot_mode.h b/tools/sdk/include/esp32/soc/boot_mode.h new file mode 100755 index 00000000..5106e10c --- /dev/null +++ b/tools/sdk/include/esp32/soc/boot_mode.h @@ -0,0 +1,104 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _SOC_BOOT_MODE_H_ +#define _SOC_BOOT_MODE_H_ + +#include "soc.h" + +/*SPI Boot*/ +#define IS_1XXXX(v) (((v)&0x10)==0x10) + +/*HSPI Boot*/ +#define IS_010XX(v) (((v)&0x1c)==0x08) + +/*Download Boot, SDIO/UART0/UART1*/ +#define IS_00XXX(v) (((v)&0x18)==0x00) + +/*Download Boot, SDIO/UART0/UART1,FEI_FEO V2*/ +#define IS_00X00(v) (((v)&0x1b)==0x00) + +/*Download Boot, SDIO/UART0/UART1,FEI_REO V2*/ +#define IS_00X01(v) (((v)&0x1b)==0x01) + +/*Download Boot, SDIO/UART0/UART1,REI_FEO V2*/ +#define IS_00X10(v) (((v)&0x1b)==0x02) + +/*Download Boot, SDIO/UART0/UART1,REI_FEO V2*/ +#define IS_00X11(v) (((v)&0x1b)==0x03) + +/*ATE/ANALOG Mode*/ +#define IS_01110(v) (((v)&0x1f)==0x0e) + +/*Diagnostic Mode+UART0 download Mode*/ +#define IS_01111(v) (((v)&0x1f)==0x0f) + +/*legacy SPI Boot*/ +#define IS_01100(v) (((v)&0x1f)==0x0c) + +/*SDIO_Slave download Mode V1.1*/ +#define IS_01101(v) (((v)&0x1f)==0x0d) + + + +#define BOOT_MODE_GET() (GPIO_REG_READ(GPIO_STRAP)) + +/*do not include download mode*/ +#define ETS_IS_UART_BOOT() IS_01111(BOOT_MODE_GET()) + +/*all spi boot including spi/hspi/legacy*/ +#define ETS_IS_FLASH_BOOT() (IS_1XXXX(BOOT_MODE_GET()) || IS_010XX(BOOT_MODE_GET()) || IS_01100(BOOT_MODE_GET())) + +/*all faster spi boot including spi/hspi*/ +#define ETS_IS_FAST_FLASH_BOOT() (IS_1XXXX(BOOT_MODE_GET()) || IS_010XX(BOOT_MODE_GET())) + +/*all spi boot including spi/legacy*/ +#define ETS_IS_SPI_FLASH_BOOT() (IS_1XXXX(BOOT_MODE_GET()) || IS_01100(BOOT_MODE_GET())) + +/*all spi boot including hspi/legacy*/ +#define ETS_IS_HSPI_FLASH_BOOT() IS_010XX(BOOT_MODE_GET()) + +/*all sdio V2 of failing edge input, failing edge output*/ +#define ETS_IS_SDIO_FEI_FEO_V2_BOOT() IS_00X00(BOOT_MODE_GET()) + +/*all sdio V2 of failing edge input, raising edge output*/ +#define ETS_IS_SDIO_FEI_REO_V2_BOOT() IS_00X01(BOOT_MODE_GET()) + +/*all sdio V2 of raising edge input, failing edge output*/ +#define ETS_IS_SDIO_REI_FEO_V2_BOOT() IS_00X10(BOOT_MODE_GET()) + +/*all sdio V2 of raising edge input, raising edge output*/ +#define ETS_IS_SDIO_REI_REO_V2_BOOT() IS_00X11(BOOT_MODE_GET()) + +/*all sdio V1 of raising edge input, failing edge output*/ +#define ETS_IS_SDIO_REI_FEO_V1_BOOT() IS_01101(BOOT_MODE_GET()) + +/*do not include download mode*/ +#define ETS_IS_SDIO_BOOT() IS_01101(BOOT_MODE_GET()) + +/*joint download boot*/ +#define ETS_IS_SDIO_UART_BOOT() IS_00XXX(BOOT_MODE_GET()) + +/*ATE mode*/ +#define ETS_IS_ATE_BOOT() IS_01110(BOOT_MODE_GET()) + +/*A bit to control flash boot print*/ +#define ETS_IS_PRINT_BOOT() (BOOT_MODE_GET() & 0x2) + +/*used by ETS_IS_SDIO_UART_BOOT*/ +#define SEL_NO_BOOT 0 +#define SEL_SDIO_BOOT BIT0 +#define SEL_UART_BOOT BIT1 + +#endif /* _SOC_BOOT_MODE_H_ */ diff --git a/tools/sdk/include/esp32/soc/cpu.h b/tools/sdk/include/esp32/soc/cpu.h new file mode 100644 index 00000000..c74ba317 --- /dev/null +++ b/tools/sdk/include/esp32/soc/cpu.h @@ -0,0 +1,81 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _SOC_CPU_H +#define _SOC_CPU_H + +#include "xtensa/corebits.h" + +/* C macros for xtensa special register read/write/exchange */ + +#define RSR(reg, curval) asm volatile ("rsr %0, " #reg : "=r" (curval)); +#define WSR(reg, newval) asm volatile ("wsr %0, " #reg : : "r" (newval)); +#define XSR(reg, swapval) asm volatile ("xsr %0, " #reg : "+r" (swapval)); + +/* Return true if the CPU is in an interrupt context + (PS.UM == 0) +*/ +static inline bool cpu_in_interrupt_context(void) +{ + uint32_t ps; + RSR(PS, ps); + return (ps & PS_UM) == 0; +} + +/* Functions to set page attributes for Region Protection option in the CPU. + * See Xtensa ISA Reference manual for explanation of arguments (section 4.6.3.2). + */ + +static inline void cpu_write_dtlb(uint32_t vpn, unsigned attr) +{ + asm volatile ("wdtlb %1, %0; dsync\n" :: "r" (vpn), "r" (attr)); +} + + +static inline void cpu_write_itlb(unsigned vpn, unsigned attr) +{ + asm volatile ("witlb %1, %0; isync\n" :: "r" (vpn), "r" (attr)); +} + +/* Make page 0 access raise an exception. + * Also protect some other unused pages so we can catch weirdness. + * Useful attribute values: + * 0 — cached, RW + * 2 — bypass cache, RWX (default value after CPU reset) + * 15 — no access, raise exception + */ + +static inline void cpu_configure_region_protection() +{ + const uint32_t pages_to_protect[] = {0x00000000, 0x80000000, 0xa0000000, 0xc0000000, 0xe0000000}; + for (int i = 0; i < sizeof(pages_to_protect)/sizeof(pages_to_protect[0]); ++i) { + cpu_write_dtlb(pages_to_protect[i], 0xf); + cpu_write_itlb(pages_to_protect[i], 0xf); + } + cpu_write_dtlb(0x20000000, 0); + cpu_write_itlb(0x20000000, 0); +} + + + +/* + * @brief Set CPU frequency to the value defined in menuconfig + * + * Called from cpu_start.c, not intended to be called from other places. + * This is a temporary function which will be replaced once dynamic + * CPU frequency changing is implemented. + */ +void esp_set_cpu_freq(void); + +#endif diff --git a/tools/sdk/include/esp32/soc/dport_reg.h b/tools/sdk/include/esp32/soc/dport_reg.h new file mode 100644 index 00000000..d65d9edb --- /dev/null +++ b/tools/sdk/include/esp32/soc/dport_reg.h @@ -0,0 +1,3838 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_DPORT_REG_H_ +#define _SOC_DPORT_REG_H_ + +#include "soc.h" + +#define DPORT_PRO_BOOT_REMAP_CTRL_REG (DR_REG_DPORT_BASE + 0x000) +/* DPORT_PRO_BOOT_REMAP : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_BOOT_REMAP (BIT(0)) +#define DPORT_PRO_BOOT_REMAP_M (BIT(0)) +#define DPORT_PRO_BOOT_REMAP_V 0x1 +#define DPORT_PRO_BOOT_REMAP_S 0 + +#define DPORT_APP_BOOT_REMAP_CTRL_REG (DR_REG_DPORT_BASE + 0x004) +/* DPORT_APP_BOOT_REMAP : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_BOOT_REMAP (BIT(0)) +#define DPORT_APP_BOOT_REMAP_M (BIT(0)) +#define DPORT_APP_BOOT_REMAP_V 0x1 +#define DPORT_APP_BOOT_REMAP_S 0 + +#define DPORT_ACCESS_CHECK_REG (DR_REG_DPORT_BASE + 0x008) +/* DPORT_ACCESS_CHECK_APP : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_ACCESS_CHECK_APP (BIT(8)) +#define DPORT_ACCESS_CHECK_APP_M (BIT(8)) +#define DPORT_ACCESS_CHECK_APP_V 0x1 +#define DPORT_ACCESS_CHECK_APP_S 8 +/* DPORT_ACCESS_CHECK_PRO : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_ACCESS_CHECK_PRO (BIT(0)) +#define DPORT_ACCESS_CHECK_PRO_M (BIT(0)) +#define DPORT_ACCESS_CHECK_PRO_V 0x1 +#define DPORT_ACCESS_CHECK_PRO_S 0 + +#define DPORT_PRO_DPORT_APB_MASK0_REG (DR_REG_DPORT_BASE + 0x00C) +/* DPORT_PRODPORT_APB_MASK0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_PRODPORT_APB_MASK0 0xFFFFFFFF +#define DPORT_PRODPORT_APB_MASK0_M ((DPORT_PRODPORT_APB_MASK0_V)<<(DPORT_PRODPORT_APB_MASK0_S)) +#define DPORT_PRODPORT_APB_MASK0_V 0xFFFFFFFF +#define DPORT_PRODPORT_APB_MASK0_S 0 + +#define DPORT_PRO_DPORT_APB_MASK1_REG (DR_REG_DPORT_BASE + 0x010) +/* DPORT_PRODPORT_APB_MASK1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_PRODPORT_APB_MASK1 0xFFFFFFFF +#define DPORT_PRODPORT_APB_MASK1_M ((DPORT_PRODPORT_APB_MASK1_V)<<(DPORT_PRODPORT_APB_MASK1_S)) +#define DPORT_PRODPORT_APB_MASK1_V 0xFFFFFFFF +#define DPORT_PRODPORT_APB_MASK1_S 0 + +#define DPORT_APP_DPORT_APB_MASK0_REG (DR_REG_DPORT_BASE + 0x014) +/* DPORT_APPDPORT_APB_MASK0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_APPDPORT_APB_MASK0 0xFFFFFFFF +#define DPORT_APPDPORT_APB_MASK0_M ((DPORT_APPDPORT_APB_MASK0_V)<<(DPORT_APPDPORT_APB_MASK0_S)) +#define DPORT_APPDPORT_APB_MASK0_V 0xFFFFFFFF +#define DPORT_APPDPORT_APB_MASK0_S 0 + +#define DPORT_APP_DPORT_APB_MASK1_REG (DR_REG_DPORT_BASE + 0x018) +/* DPORT_APPDPORT_APB_MASK1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_APPDPORT_APB_MASK1 0xFFFFFFFF +#define DPORT_APPDPORT_APB_MASK1_M ((DPORT_APPDPORT_APB_MASK1_V)<<(DPORT_APPDPORT_APB_MASK1_S)) +#define DPORT_APPDPORT_APB_MASK1_V 0xFFFFFFFF +#define DPORT_APPDPORT_APB_MASK1_S 0 + +#define DPORT_PERI_CLK_EN_REG (DR_REG_DPORT_BASE + 0x01C) +/* DPORT_PERI_CLK_EN : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_PERI_CLK_EN 0xFFFFFFFF +#define DPORT_PERI_CLK_EN_M ((DPORT_PERI_CLK_EN_V)<<(DPORT_PERI_CLK_EN_S)) +#define DPORT_PERI_CLK_EN_V 0xFFFFFFFF +#define DPORT_PERI_CLK_EN_S 0 + +#define DPORT_PERI_RST_EN_REG (DR_REG_DPORT_BASE + 0x020) +/* DPORT_PERI_RST_EN : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_PERI_RST_EN 0xFFFFFFFF +#define DPORT_PERI_RST_EN_M ((DPORT_PERI_RST_EN_V)<<(DPORT_PERI_RST_EN_S)) +#define DPORT_PERI_RST_EN_V 0xFFFFFFFF +#define DPORT_PERI_RST_EN_S 0 + +#define DPORT_WIFI_BB_CFG_REG (DR_REG_DPORT_BASE + 0x024) +/* DPORT_WIFI_BB_CFG : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_WIFI_BB_CFG 0xFFFFFFFF +#define DPORT_WIFI_BB_CFG_M ((DPORT_WIFI_BB_CFG_V)<<(DPORT_WIFI_BB_CFG_S)) +#define DPORT_WIFI_BB_CFG_V 0xFFFFFFFF +#define DPORT_WIFI_BB_CFG_S 0 + +#define DPORT_WIFI_BB_CFG_2_REG (DR_REG_DPORT_BASE + 0x028) +/* DPORT_WIFI_BB_CFG_2 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_WIFI_BB_CFG_2 0xFFFFFFFF +#define DPORT_WIFI_BB_CFG_2_M ((DPORT_WIFI_BB_CFG_2_V)<<(DPORT_WIFI_BB_CFG_2_S)) +#define DPORT_WIFI_BB_CFG_2_V 0xFFFFFFFF +#define DPORT_WIFI_BB_CFG_2_S 0 + +#define DPORT_APPCPU_CTRL_A_REG (DR_REG_DPORT_BASE + 0x02C) +/* DPORT_APPCPU_RESETTING : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APPCPU_RESETTING (BIT(0)) +#define DPORT_APPCPU_RESETTING_M (BIT(0)) +#define DPORT_APPCPU_RESETTING_V 0x1 +#define DPORT_APPCPU_RESETTING_S 0 + +#define DPORT_APPCPU_CTRL_B_REG (DR_REG_DPORT_BASE + 0x030) +/* DPORT_APPCPU_CLKGATE_EN : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APPCPU_CLKGATE_EN (BIT(0)) +#define DPORT_APPCPU_CLKGATE_EN_M (BIT(0)) +#define DPORT_APPCPU_CLKGATE_EN_V 0x1 +#define DPORT_APPCPU_CLKGATE_EN_S 0 + +#define DPORT_APPCPU_CTRL_C_REG (DR_REG_DPORT_BASE + 0x034) +/* DPORT_APPCPU_RUNSTALL : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APPCPU_RUNSTALL (BIT(0)) +#define DPORT_APPCPU_RUNSTALL_M (BIT(0)) +#define DPORT_APPCPU_RUNSTALL_V 0x1 +#define DPORT_APPCPU_RUNSTALL_S 0 + +#define DPORT_APPCPU_CTRL_D_REG (DR_REG_DPORT_BASE + 0x038) +/* DPORT_APPCPU_BOOT_ADDR : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_APPCPU_BOOT_ADDR 0xFFFFFFFF +#define DPORT_APPCPU_BOOT_ADDR_M ((DPORT_APPCPU_BOOT_ADDR_V)<<(DPORT_APPCPU_BOOT_ADDR_S)) +#define DPORT_APPCPU_BOOT_ADDR_V 0xFFFFFFFF +#define DPORT_APPCPU_BOOT_ADDR_S 0 + +#define DPORT_CPU_PER_CONF_REG (DR_REG_DPORT_BASE + 0x03C) +/* DPORT_FAST_CLK_RTC_SEL : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_FAST_CLK_RTC_SEL (BIT(3)) +#define DPORT_FAST_CLK_RTC_SEL_M (BIT(3)) +#define DPORT_FAST_CLK_RTC_SEL_V 0x1 +#define DPORT_FAST_CLK_RTC_SEL_S 3 +/* DPORT_LOWSPEED_CLK_SEL : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_LOWSPEED_CLK_SEL (BIT(2)) +#define DPORT_LOWSPEED_CLK_SEL_M (BIT(2)) +#define DPORT_LOWSPEED_CLK_SEL_V 0x1 +#define DPORT_LOWSPEED_CLK_SEL_S 2 +/* DPORT_CPUPERIOD_SEL : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_CPUPERIOD_SEL 0x00000003 +#define DPORT_CPUPERIOD_SEL_M ((DPORT_CPUPERIOD_SEL_V)<<(DPORT_CPUPERIOD_SEL_S)) +#define DPORT_CPUPERIOD_SEL_V 0x3 +#define DPORT_CPUPERIOD_SEL_S 0 + +#define DPORT_PRO_CACHE_CTRL_REG (DR_REG_DPORT_BASE + 0x040) +/* DPORT_PRO_DRAM_HL : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_DRAM_HL (BIT(16)) +#define DPORT_PRO_DRAM_HL_M (BIT(16)) +#define DPORT_PRO_DRAM_HL_V 0x1 +#define DPORT_PRO_DRAM_HL_S 16 +/* DPORT_SLAVE_REQ : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_SLAVE_REQ (BIT(15)) +#define DPORT_SLAVE_REQ_M (BIT(15)) +#define DPORT_SLAVE_REQ_V 0x1 +#define DPORT_SLAVE_REQ_S 15 +/* DPORT_AHB_SPI_REQ : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_AHB_SPI_REQ (BIT(14)) +#define DPORT_AHB_SPI_REQ_M (BIT(14)) +#define DPORT_AHB_SPI_REQ_V 0x1 +#define DPORT_AHB_SPI_REQ_S 14 +/* DPORT_PRO_SLAVE_REQ : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_SLAVE_REQ (BIT(13)) +#define DPORT_PRO_SLAVE_REQ_M (BIT(13)) +#define DPORT_PRO_SLAVE_REQ_V 0x1 +#define DPORT_PRO_SLAVE_REQ_S 13 +/* DPORT_PRO_AHB_SPI_REQ : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_AHB_SPI_REQ (BIT(12)) +#define DPORT_PRO_AHB_SPI_REQ_M (BIT(12)) +#define DPORT_PRO_AHB_SPI_REQ_V 0x1 +#define DPORT_PRO_AHB_SPI_REQ_S 12 +/* DPORT_PRO_DRAM_SPLIT : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_DRAM_SPLIT (BIT(11)) +#define DPORT_PRO_DRAM_SPLIT_M (BIT(11)) +#define DPORT_PRO_DRAM_SPLIT_V 0x1 +#define DPORT_PRO_DRAM_SPLIT_S 11 +/* DPORT_PRO_SINGLE_IRAM_ENA : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_SINGLE_IRAM_ENA (BIT(10)) +#define DPORT_PRO_SINGLE_IRAM_ENA_M (BIT(10)) +#define DPORT_PRO_SINGLE_IRAM_ENA_V 0x1 +#define DPORT_PRO_SINGLE_IRAM_ENA_S 10 +/* DPORT_PRO_CACHE_LOCK_3_EN : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_3_EN (BIT(9)) +#define DPORT_PRO_CACHE_LOCK_3_EN_M (BIT(9)) +#define DPORT_PRO_CACHE_LOCK_3_EN_V 0x1 +#define DPORT_PRO_CACHE_LOCK_3_EN_S 9 +/* DPORT_PRO_CACHE_LOCK_2_EN : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_2_EN (BIT(8)) +#define DPORT_PRO_CACHE_LOCK_2_EN_M (BIT(8)) +#define DPORT_PRO_CACHE_LOCK_2_EN_V 0x1 +#define DPORT_PRO_CACHE_LOCK_2_EN_S 8 +/* DPORT_PRO_CACHE_LOCK_1_EN : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_1_EN (BIT(7)) +#define DPORT_PRO_CACHE_LOCK_1_EN_M (BIT(7)) +#define DPORT_PRO_CACHE_LOCK_1_EN_V 0x1 +#define DPORT_PRO_CACHE_LOCK_1_EN_S 7 +/* DPORT_PRO_CACHE_LOCK_0_EN : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_0_EN (BIT(6)) +#define DPORT_PRO_CACHE_LOCK_0_EN_M (BIT(6)) +#define DPORT_PRO_CACHE_LOCK_0_EN_V 0x1 +#define DPORT_PRO_CACHE_LOCK_0_EN_S 6 +/* DPORT_PRO_CACHE_FLUSH_DONE : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_FLUSH_DONE (BIT(5)) +#define DPORT_PRO_CACHE_FLUSH_DONE_M (BIT(5)) +#define DPORT_PRO_CACHE_FLUSH_DONE_V 0x1 +#define DPORT_PRO_CACHE_FLUSH_DONE_S 5 +/* DPORT_PRO_CACHE_FLUSH_ENA : R/W ;bitpos:[4] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_CACHE_FLUSH_ENA (BIT(4)) +#define DPORT_PRO_CACHE_FLUSH_ENA_M (BIT(4)) +#define DPORT_PRO_CACHE_FLUSH_ENA_V 0x1 +#define DPORT_PRO_CACHE_FLUSH_ENA_S 4 +/* DPORT_PRO_CACHE_ENABLE : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_ENABLE (BIT(3)) +#define DPORT_PRO_CACHE_ENABLE_M (BIT(3)) +#define DPORT_PRO_CACHE_ENABLE_V 0x1 +#define DPORT_PRO_CACHE_ENABLE_S 3 +/* DPORT_PRO_CACHE_MODE : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_MODE (BIT(2)) +#define DPORT_PRO_CACHE_MODE_M (BIT(2)) +#define DPORT_PRO_CACHE_MODE_V 0x1 +#define DPORT_PRO_CACHE_MODE_S 2 + +#define DPORT_PRO_CACHE_CTRL1_REG (DR_REG_DPORT_BASE + 0x044) +/* DPORT_PRO_CACHE_MMU_IA_CLR : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_MMU_IA_CLR (BIT(13)) +#define DPORT_PRO_CACHE_MMU_IA_CLR_M (BIT(13)) +#define DPORT_PRO_CACHE_MMU_IA_CLR_V 0x1 +#define DPORT_PRO_CACHE_MMU_IA_CLR_S 13 +/* DPORT_PRO_CMMU_PD : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CMMU_PD (BIT(12)) +#define DPORT_PRO_CMMU_PD_M (BIT(12)) +#define DPORT_PRO_CMMU_PD_V 0x1 +#define DPORT_PRO_CMMU_PD_S 12 +/* DPORT_PRO_CMMU_FORCE_ON : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_CMMU_FORCE_ON (BIT(11)) +#define DPORT_PRO_CMMU_FORCE_ON_M (BIT(11)) +#define DPORT_PRO_CMMU_FORCE_ON_V 0x1 +#define DPORT_PRO_CMMU_FORCE_ON_S 11 +/* DPORT_PRO_CMMU_FLASH_PAGE_MODE : R/W ;bitpos:[10:9] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_PRO_CMMU_FLASH_PAGE_MODE 0x00000003 +#define DPORT_PRO_CMMU_FLASH_PAGE_MODE_M ((DPORT_PRO_CMMU_FLASH_PAGE_MODE_V)<<(DPORT_PRO_CMMU_FLASH_PAGE_MODE_S)) +#define DPORT_PRO_CMMU_FLASH_PAGE_MODE_V 0x3 +#define DPORT_PRO_CMMU_FLASH_PAGE_MODE_S 9 +/* DPORT_PRO_CMMU_SRAM_PAGE_MODE : R/W ;bitpos:[8:6] ;default: 3'd3 ; */ +/*description: */ +#define DPORT_PRO_CMMU_SRAM_PAGE_MODE 0x00000007 +#define DPORT_PRO_CMMU_SRAM_PAGE_MODE_M ((DPORT_PRO_CMMU_SRAM_PAGE_MODE_V)<<(DPORT_PRO_CMMU_SRAM_PAGE_MODE_S)) +#define DPORT_PRO_CMMU_SRAM_PAGE_MODE_V 0x7 +#define DPORT_PRO_CMMU_SRAM_PAGE_MODE_S 6 +/* DPORT_PRO_CACHE_MASK_OPSDRAM : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_CACHE_MASK_OPSDRAM (BIT(5)) +#define DPORT_PRO_CACHE_MASK_OPSDRAM_M (BIT(5)) +#define DPORT_PRO_CACHE_MASK_OPSDRAM_V 0x1 +#define DPORT_PRO_CACHE_MASK_OPSDRAM_S 5 +/* DPORT_PRO_CACHE_MASK_DROM0 : R/W ;bitpos:[4] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_CACHE_MASK_DROM0 (BIT(4)) +#define DPORT_PRO_CACHE_MASK_DROM0_M (BIT(4)) +#define DPORT_PRO_CACHE_MASK_DROM0_V 0x1 +#define DPORT_PRO_CACHE_MASK_DROM0_S 4 +/* DPORT_PRO_CACHE_MASK_DRAM1 : R/W ;bitpos:[3] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_CACHE_MASK_DRAM1 (BIT(3)) +#define DPORT_PRO_CACHE_MASK_DRAM1_M (BIT(3)) +#define DPORT_PRO_CACHE_MASK_DRAM1_V 0x1 +#define DPORT_PRO_CACHE_MASK_DRAM1_S 3 +/* DPORT_PRO_CACHE_MASK_IROM0 : R/W ;bitpos:[2] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_CACHE_MASK_IROM0 (BIT(2)) +#define DPORT_PRO_CACHE_MASK_IROM0_M (BIT(2)) +#define DPORT_PRO_CACHE_MASK_IROM0_V 0x1 +#define DPORT_PRO_CACHE_MASK_IROM0_S 2 +/* DPORT_PRO_CACHE_MASK_IRAM1 : R/W ;bitpos:[1] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_CACHE_MASK_IRAM1 (BIT(1)) +#define DPORT_PRO_CACHE_MASK_IRAM1_M (BIT(1)) +#define DPORT_PRO_CACHE_MASK_IRAM1_V 0x1 +#define DPORT_PRO_CACHE_MASK_IRAM1_S 1 +/* DPORT_PRO_CACHE_MASK_IRAM0 : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_CACHE_MASK_IRAM0 (BIT(0)) +#define DPORT_PRO_CACHE_MASK_IRAM0_M (BIT(0)) +#define DPORT_PRO_CACHE_MASK_IRAM0_V 0x1 +#define DPORT_PRO_CACHE_MASK_IRAM0_S 0 + +#define DPORT_PRO_CACHE_LOCK_0_ADDR_REG (DR_REG_DPORT_BASE + 0x048) +/* DPORT_PRO_CACHE_LOCK_0_ADDR_MAX : R/W ;bitpos:[21:18] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_0_ADDR_MAX 0x0000000F +#define DPORT_PRO_CACHE_LOCK_0_ADDR_MAX_M ((DPORT_PRO_CACHE_LOCK_0_ADDR_MAX_V)<<(DPORT_PRO_CACHE_LOCK_0_ADDR_MAX_S)) +#define DPORT_PRO_CACHE_LOCK_0_ADDR_MAX_V 0xF +#define DPORT_PRO_CACHE_LOCK_0_ADDR_MAX_S 18 +/* DPORT_PRO_CACHE_LOCK_0_ADDR_MIN : R/W ;bitpos:[17:14] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_0_ADDR_MIN 0x0000000F +#define DPORT_PRO_CACHE_LOCK_0_ADDR_MIN_M ((DPORT_PRO_CACHE_LOCK_0_ADDR_MIN_V)<<(DPORT_PRO_CACHE_LOCK_0_ADDR_MIN_S)) +#define DPORT_PRO_CACHE_LOCK_0_ADDR_MIN_V 0xF +#define DPORT_PRO_CACHE_LOCK_0_ADDR_MIN_S 14 +/* DPORT_PRO_CACHE_LOCK_0_ADDR_PRE : R/W ;bitpos:[13:0] ;default: 14'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_0_ADDR_PRE 0x00003FFF +#define DPORT_PRO_CACHE_LOCK_0_ADDR_PRE_M ((DPORT_PRO_CACHE_LOCK_0_ADDR_PRE_V)<<(DPORT_PRO_CACHE_LOCK_0_ADDR_PRE_S)) +#define DPORT_PRO_CACHE_LOCK_0_ADDR_PRE_V 0x3FFF +#define DPORT_PRO_CACHE_LOCK_0_ADDR_PRE_S 0 + +#define DPORT_PRO_CACHE_LOCK_1_ADDR_REG (DR_REG_DPORT_BASE + 0x04C) +/* DPORT_PRO_CACHE_LOCK_1_ADDR_MAX : R/W ;bitpos:[21:18] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_1_ADDR_MAX 0x0000000F +#define DPORT_PRO_CACHE_LOCK_1_ADDR_MAX_M ((DPORT_PRO_CACHE_LOCK_1_ADDR_MAX_V)<<(DPORT_PRO_CACHE_LOCK_1_ADDR_MAX_S)) +#define DPORT_PRO_CACHE_LOCK_1_ADDR_MAX_V 0xF +#define DPORT_PRO_CACHE_LOCK_1_ADDR_MAX_S 18 +/* DPORT_PRO_CACHE_LOCK_1_ADDR_MIN : R/W ;bitpos:[17:14] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_1_ADDR_MIN 0x0000000F +#define DPORT_PRO_CACHE_LOCK_1_ADDR_MIN_M ((DPORT_PRO_CACHE_LOCK_1_ADDR_MIN_V)<<(DPORT_PRO_CACHE_LOCK_1_ADDR_MIN_S)) +#define DPORT_PRO_CACHE_LOCK_1_ADDR_MIN_V 0xF +#define DPORT_PRO_CACHE_LOCK_1_ADDR_MIN_S 14 +/* DPORT_PRO_CACHE_LOCK_1_ADDR_PRE : R/W ;bitpos:[13:0] ;default: 14'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_1_ADDR_PRE 0x00003FFF +#define DPORT_PRO_CACHE_LOCK_1_ADDR_PRE_M ((DPORT_PRO_CACHE_LOCK_1_ADDR_PRE_V)<<(DPORT_PRO_CACHE_LOCK_1_ADDR_PRE_S)) +#define DPORT_PRO_CACHE_LOCK_1_ADDR_PRE_V 0x3FFF +#define DPORT_PRO_CACHE_LOCK_1_ADDR_PRE_S 0 + +#define DPORT_PRO_CACHE_LOCK_2_ADDR_REG (DR_REG_DPORT_BASE + 0x050) +/* DPORT_PRO_CACHE_LOCK_2_ADDR_MAX : R/W ;bitpos:[21:18] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_2_ADDR_MAX 0x0000000F +#define DPORT_PRO_CACHE_LOCK_2_ADDR_MAX_M ((DPORT_PRO_CACHE_LOCK_2_ADDR_MAX_V)<<(DPORT_PRO_CACHE_LOCK_2_ADDR_MAX_S)) +#define DPORT_PRO_CACHE_LOCK_2_ADDR_MAX_V 0xF +#define DPORT_PRO_CACHE_LOCK_2_ADDR_MAX_S 18 +/* DPORT_PRO_CACHE_LOCK_2_ADDR_MIN : R/W ;bitpos:[17:14] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_2_ADDR_MIN 0x0000000F +#define DPORT_PRO_CACHE_LOCK_2_ADDR_MIN_M ((DPORT_PRO_CACHE_LOCK_2_ADDR_MIN_V)<<(DPORT_PRO_CACHE_LOCK_2_ADDR_MIN_S)) +#define DPORT_PRO_CACHE_LOCK_2_ADDR_MIN_V 0xF +#define DPORT_PRO_CACHE_LOCK_2_ADDR_MIN_S 14 +/* DPORT_PRO_CACHE_LOCK_2_ADDR_PRE : R/W ;bitpos:[13:0] ;default: 14'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_2_ADDR_PRE 0x00003FFF +#define DPORT_PRO_CACHE_LOCK_2_ADDR_PRE_M ((DPORT_PRO_CACHE_LOCK_2_ADDR_PRE_V)<<(DPORT_PRO_CACHE_LOCK_2_ADDR_PRE_S)) +#define DPORT_PRO_CACHE_LOCK_2_ADDR_PRE_V 0x3FFF +#define DPORT_PRO_CACHE_LOCK_2_ADDR_PRE_S 0 + +#define DPORT_PRO_CACHE_LOCK_3_ADDR_REG (DR_REG_DPORT_BASE + 0x054) +/* DPORT_PRO_CACHE_LOCK_3_ADDR_MAX : R/W ;bitpos:[21:18] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_3_ADDR_MAX 0x0000000F +#define DPORT_PRO_CACHE_LOCK_3_ADDR_MAX_M ((DPORT_PRO_CACHE_LOCK_3_ADDR_MAX_V)<<(DPORT_PRO_CACHE_LOCK_3_ADDR_MAX_S)) +#define DPORT_PRO_CACHE_LOCK_3_ADDR_MAX_V 0xF +#define DPORT_PRO_CACHE_LOCK_3_ADDR_MAX_S 18 +/* DPORT_PRO_CACHE_LOCK_3_ADDR_MIN : R/W ;bitpos:[17:14] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_3_ADDR_MIN 0x0000000F +#define DPORT_PRO_CACHE_LOCK_3_ADDR_MIN_M ((DPORT_PRO_CACHE_LOCK_3_ADDR_MIN_V)<<(DPORT_PRO_CACHE_LOCK_3_ADDR_MIN_S)) +#define DPORT_PRO_CACHE_LOCK_3_ADDR_MIN_V 0xF +#define DPORT_PRO_CACHE_LOCK_3_ADDR_MIN_S 14 +/* DPORT_PRO_CACHE_LOCK_3_ADDR_PRE : R/W ;bitpos:[13:0] ;default: 14'h0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_LOCK_3_ADDR_PRE 0x00003FFF +#define DPORT_PRO_CACHE_LOCK_3_ADDR_PRE_M ((DPORT_PRO_CACHE_LOCK_3_ADDR_PRE_V)<<(DPORT_PRO_CACHE_LOCK_3_ADDR_PRE_S)) +#define DPORT_PRO_CACHE_LOCK_3_ADDR_PRE_V 0x3FFF +#define DPORT_PRO_CACHE_LOCK_3_ADDR_PRE_S 0 + +#define DPORT_APP_CACHE_CTRL_REG (DR_REG_DPORT_BASE + 0x058) +/* DPORT_APP_DRAM_HL : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_DRAM_HL (BIT(14)) +#define DPORT_APP_DRAM_HL_M (BIT(14)) +#define DPORT_APP_DRAM_HL_V 0x1 +#define DPORT_APP_DRAM_HL_S 14 +/* DPORT_APP_SLAVE_REQ : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_SLAVE_REQ (BIT(13)) +#define DPORT_APP_SLAVE_REQ_M (BIT(13)) +#define DPORT_APP_SLAVE_REQ_V 0x1 +#define DPORT_APP_SLAVE_REQ_S 13 +/* DPORT_APP_AHB_SPI_REQ : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_AHB_SPI_REQ (BIT(12)) +#define DPORT_APP_AHB_SPI_REQ_M (BIT(12)) +#define DPORT_APP_AHB_SPI_REQ_V 0x1 +#define DPORT_APP_AHB_SPI_REQ_S 12 +/* DPORT_APP_DRAM_SPLIT : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_DRAM_SPLIT (BIT(11)) +#define DPORT_APP_DRAM_SPLIT_M (BIT(11)) +#define DPORT_APP_DRAM_SPLIT_V 0x1 +#define DPORT_APP_DRAM_SPLIT_S 11 +/* DPORT_APP_SINGLE_IRAM_ENA : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_SINGLE_IRAM_ENA (BIT(10)) +#define DPORT_APP_SINGLE_IRAM_ENA_M (BIT(10)) +#define DPORT_APP_SINGLE_IRAM_ENA_V 0x1 +#define DPORT_APP_SINGLE_IRAM_ENA_S 10 +/* DPORT_APP_CACHE_LOCK_3_EN : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_3_EN (BIT(9)) +#define DPORT_APP_CACHE_LOCK_3_EN_M (BIT(9)) +#define DPORT_APP_CACHE_LOCK_3_EN_V 0x1 +#define DPORT_APP_CACHE_LOCK_3_EN_S 9 +/* DPORT_APP_CACHE_LOCK_2_EN : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_2_EN (BIT(8)) +#define DPORT_APP_CACHE_LOCK_2_EN_M (BIT(8)) +#define DPORT_APP_CACHE_LOCK_2_EN_V 0x1 +#define DPORT_APP_CACHE_LOCK_2_EN_S 8 +/* DPORT_APP_CACHE_LOCK_1_EN : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_1_EN (BIT(7)) +#define DPORT_APP_CACHE_LOCK_1_EN_M (BIT(7)) +#define DPORT_APP_CACHE_LOCK_1_EN_V 0x1 +#define DPORT_APP_CACHE_LOCK_1_EN_S 7 +/* DPORT_APP_CACHE_LOCK_0_EN : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_0_EN (BIT(6)) +#define DPORT_APP_CACHE_LOCK_0_EN_M (BIT(6)) +#define DPORT_APP_CACHE_LOCK_0_EN_V 0x1 +#define DPORT_APP_CACHE_LOCK_0_EN_S 6 +/* DPORT_APP_CACHE_FLUSH_DONE : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_FLUSH_DONE (BIT(5)) +#define DPORT_APP_CACHE_FLUSH_DONE_M (BIT(5)) +#define DPORT_APP_CACHE_FLUSH_DONE_V 0x1 +#define DPORT_APP_CACHE_FLUSH_DONE_S 5 +/* DPORT_APP_CACHE_FLUSH_ENA : R/W ;bitpos:[4] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_CACHE_FLUSH_ENA (BIT(4)) +#define DPORT_APP_CACHE_FLUSH_ENA_M (BIT(4)) +#define DPORT_APP_CACHE_FLUSH_ENA_V 0x1 +#define DPORT_APP_CACHE_FLUSH_ENA_S 4 +/* DPORT_APP_CACHE_ENABLE : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_ENABLE (BIT(3)) +#define DPORT_APP_CACHE_ENABLE_M (BIT(3)) +#define DPORT_APP_CACHE_ENABLE_V 0x1 +#define DPORT_APP_CACHE_ENABLE_S 3 +/* DPORT_APP_CACHE_MODE : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_MODE (BIT(2)) +#define DPORT_APP_CACHE_MODE_M (BIT(2)) +#define DPORT_APP_CACHE_MODE_V 0x1 +#define DPORT_APP_CACHE_MODE_S 2 + +#define DPORT_APP_CACHE_CTRL1_REG (DR_REG_DPORT_BASE + 0x05C) +/* DPORT_APP_CACHE_MMU_IA_CLR : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_MMU_IA_CLR (BIT(13)) +#define DPORT_APP_CACHE_MMU_IA_CLR_M (BIT(13)) +#define DPORT_APP_CACHE_MMU_IA_CLR_V 0x1 +#define DPORT_APP_CACHE_MMU_IA_CLR_S 13 +/* DPORT_APP_CMMU_PD : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CMMU_PD (BIT(12)) +#define DPORT_APP_CMMU_PD_M (BIT(12)) +#define DPORT_APP_CMMU_PD_V 0x1 +#define DPORT_APP_CMMU_PD_S 12 +/* DPORT_APP_CMMU_FORCE_ON : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_CMMU_FORCE_ON (BIT(11)) +#define DPORT_APP_CMMU_FORCE_ON_M (BIT(11)) +#define DPORT_APP_CMMU_FORCE_ON_V 0x1 +#define DPORT_APP_CMMU_FORCE_ON_S 11 +/* DPORT_APP_CMMU_FLASH_PAGE_MODE : R/W ;bitpos:[10:9] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_APP_CMMU_FLASH_PAGE_MODE 0x00000003 +#define DPORT_APP_CMMU_FLASH_PAGE_MODE_M ((DPORT_APP_CMMU_FLASH_PAGE_MODE_V)<<(DPORT_APP_CMMU_FLASH_PAGE_MODE_S)) +#define DPORT_APP_CMMU_FLASH_PAGE_MODE_V 0x3 +#define DPORT_APP_CMMU_FLASH_PAGE_MODE_S 9 +/* DPORT_APP_CMMU_SRAM_PAGE_MODE : R/W ;bitpos:[8:6] ;default: 3'd3 ; */ +/*description: */ +#define DPORT_APP_CMMU_SRAM_PAGE_MODE 0x00000007 +#define DPORT_APP_CMMU_SRAM_PAGE_MODE_M ((DPORT_APP_CMMU_SRAM_PAGE_MODE_V)<<(DPORT_APP_CMMU_SRAM_PAGE_MODE_S)) +#define DPORT_APP_CMMU_SRAM_PAGE_MODE_V 0x7 +#define DPORT_APP_CMMU_SRAM_PAGE_MODE_S 6 +/* DPORT_APP_CACHE_MASK_OPSDRAM : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_CACHE_MASK_OPSDRAM (BIT(5)) +#define DPORT_APP_CACHE_MASK_OPSDRAM_M (BIT(5)) +#define DPORT_APP_CACHE_MASK_OPSDRAM_V 0x1 +#define DPORT_APP_CACHE_MASK_OPSDRAM_S 5 +/* DPORT_APP_CACHE_MASK_DROM0 : R/W ;bitpos:[4] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_CACHE_MASK_DROM0 (BIT(4)) +#define DPORT_APP_CACHE_MASK_DROM0_M (BIT(4)) +#define DPORT_APP_CACHE_MASK_DROM0_V 0x1 +#define DPORT_APP_CACHE_MASK_DROM0_S 4 +/* DPORT_APP_CACHE_MASK_DRAM1 : R/W ;bitpos:[3] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_CACHE_MASK_DRAM1 (BIT(3)) +#define DPORT_APP_CACHE_MASK_DRAM1_M (BIT(3)) +#define DPORT_APP_CACHE_MASK_DRAM1_V 0x1 +#define DPORT_APP_CACHE_MASK_DRAM1_S 3 +/* DPORT_APP_CACHE_MASK_IROM0 : R/W ;bitpos:[2] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_CACHE_MASK_IROM0 (BIT(2)) +#define DPORT_APP_CACHE_MASK_IROM0_M (BIT(2)) +#define DPORT_APP_CACHE_MASK_IROM0_V 0x1 +#define DPORT_APP_CACHE_MASK_IROM0_S 2 +/* DPORT_APP_CACHE_MASK_IRAM1 : R/W ;bitpos:[1] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_CACHE_MASK_IRAM1 (BIT(1)) +#define DPORT_APP_CACHE_MASK_IRAM1_M (BIT(1)) +#define DPORT_APP_CACHE_MASK_IRAM1_V 0x1 +#define DPORT_APP_CACHE_MASK_IRAM1_S 1 +/* DPORT_APP_CACHE_MASK_IRAM0 : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_CACHE_MASK_IRAM0 (BIT(0)) +#define DPORT_APP_CACHE_MASK_IRAM0_M (BIT(0)) +#define DPORT_APP_CACHE_MASK_IRAM0_V 0x1 +#define DPORT_APP_CACHE_MASK_IRAM0_S 0 + +#define DPORT_APP_CACHE_LOCK_0_ADDR_REG (DR_REG_DPORT_BASE + 0x060) +/* DPORT_APP_CACHE_LOCK_0_ADDR_MAX : R/W ;bitpos:[21:18] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_0_ADDR_MAX 0x0000000F +#define DPORT_APP_CACHE_LOCK_0_ADDR_MAX_M ((DPORT_APP_CACHE_LOCK_0_ADDR_MAX_V)<<(DPORT_APP_CACHE_LOCK_0_ADDR_MAX_S)) +#define DPORT_APP_CACHE_LOCK_0_ADDR_MAX_V 0xF +#define DPORT_APP_CACHE_LOCK_0_ADDR_MAX_S 18 +/* DPORT_APP_CACHE_LOCK_0_ADDR_MIN : R/W ;bitpos:[17:14] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_0_ADDR_MIN 0x0000000F +#define DPORT_APP_CACHE_LOCK_0_ADDR_MIN_M ((DPORT_APP_CACHE_LOCK_0_ADDR_MIN_V)<<(DPORT_APP_CACHE_LOCK_0_ADDR_MIN_S)) +#define DPORT_APP_CACHE_LOCK_0_ADDR_MIN_V 0xF +#define DPORT_APP_CACHE_LOCK_0_ADDR_MIN_S 14 +/* DPORT_APP_CACHE_LOCK_0_ADDR_PRE : R/W ;bitpos:[13:0] ;default: 14'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_0_ADDR_PRE 0x00003FFF +#define DPORT_APP_CACHE_LOCK_0_ADDR_PRE_M ((DPORT_APP_CACHE_LOCK_0_ADDR_PRE_V)<<(DPORT_APP_CACHE_LOCK_0_ADDR_PRE_S)) +#define DPORT_APP_CACHE_LOCK_0_ADDR_PRE_V 0x3FFF +#define DPORT_APP_CACHE_LOCK_0_ADDR_PRE_S 0 + +#define DPORT_APP_CACHE_LOCK_1_ADDR_REG (DR_REG_DPORT_BASE + 0x064) +/* DPORT_APP_CACHE_LOCK_1_ADDR_MAX : R/W ;bitpos:[21:18] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_1_ADDR_MAX 0x0000000F +#define DPORT_APP_CACHE_LOCK_1_ADDR_MAX_M ((DPORT_APP_CACHE_LOCK_1_ADDR_MAX_V)<<(DPORT_APP_CACHE_LOCK_1_ADDR_MAX_S)) +#define DPORT_APP_CACHE_LOCK_1_ADDR_MAX_V 0xF +#define DPORT_APP_CACHE_LOCK_1_ADDR_MAX_S 18 +/* DPORT_APP_CACHE_LOCK_1_ADDR_MIN : R/W ;bitpos:[17:14] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_1_ADDR_MIN 0x0000000F +#define DPORT_APP_CACHE_LOCK_1_ADDR_MIN_M ((DPORT_APP_CACHE_LOCK_1_ADDR_MIN_V)<<(DPORT_APP_CACHE_LOCK_1_ADDR_MIN_S)) +#define DPORT_APP_CACHE_LOCK_1_ADDR_MIN_V 0xF +#define DPORT_APP_CACHE_LOCK_1_ADDR_MIN_S 14 +/* DPORT_APP_CACHE_LOCK_1_ADDR_PRE : R/W ;bitpos:[13:0] ;default: 14'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_1_ADDR_PRE 0x00003FFF +#define DPORT_APP_CACHE_LOCK_1_ADDR_PRE_M ((DPORT_APP_CACHE_LOCK_1_ADDR_PRE_V)<<(DPORT_APP_CACHE_LOCK_1_ADDR_PRE_S)) +#define DPORT_APP_CACHE_LOCK_1_ADDR_PRE_V 0x3FFF +#define DPORT_APP_CACHE_LOCK_1_ADDR_PRE_S 0 + +#define DPORT_APP_CACHE_LOCK_2_ADDR_REG (DR_REG_DPORT_BASE + 0x068) +/* DPORT_APP_CACHE_LOCK_2_ADDR_MAX : R/W ;bitpos:[21:18] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_2_ADDR_MAX 0x0000000F +#define DPORT_APP_CACHE_LOCK_2_ADDR_MAX_M ((DPORT_APP_CACHE_LOCK_2_ADDR_MAX_V)<<(DPORT_APP_CACHE_LOCK_2_ADDR_MAX_S)) +#define DPORT_APP_CACHE_LOCK_2_ADDR_MAX_V 0xF +#define DPORT_APP_CACHE_LOCK_2_ADDR_MAX_S 18 +/* DPORT_APP_CACHE_LOCK_2_ADDR_MIN : R/W ;bitpos:[17:14] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_2_ADDR_MIN 0x0000000F +#define DPORT_APP_CACHE_LOCK_2_ADDR_MIN_M ((DPORT_APP_CACHE_LOCK_2_ADDR_MIN_V)<<(DPORT_APP_CACHE_LOCK_2_ADDR_MIN_S)) +#define DPORT_APP_CACHE_LOCK_2_ADDR_MIN_V 0xF +#define DPORT_APP_CACHE_LOCK_2_ADDR_MIN_S 14 +/* DPORT_APP_CACHE_LOCK_2_ADDR_PRE : R/W ;bitpos:[13:0] ;default: 14'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_2_ADDR_PRE 0x00003FFF +#define DPORT_APP_CACHE_LOCK_2_ADDR_PRE_M ((DPORT_APP_CACHE_LOCK_2_ADDR_PRE_V)<<(DPORT_APP_CACHE_LOCK_2_ADDR_PRE_S)) +#define DPORT_APP_CACHE_LOCK_2_ADDR_PRE_V 0x3FFF +#define DPORT_APP_CACHE_LOCK_2_ADDR_PRE_S 0 + +#define DPORT_APP_CACHE_LOCK_3_ADDR_REG (DR_REG_DPORT_BASE + 0x06C) +/* DPORT_APP_CACHE_LOCK_3_ADDR_MAX : R/W ;bitpos:[21:18] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_3_ADDR_MAX 0x0000000F +#define DPORT_APP_CACHE_LOCK_3_ADDR_MAX_M ((DPORT_APP_CACHE_LOCK_3_ADDR_MAX_V)<<(DPORT_APP_CACHE_LOCK_3_ADDR_MAX_S)) +#define DPORT_APP_CACHE_LOCK_3_ADDR_MAX_V 0xF +#define DPORT_APP_CACHE_LOCK_3_ADDR_MAX_S 18 +/* DPORT_APP_CACHE_LOCK_3_ADDR_MIN : R/W ;bitpos:[17:14] ;default: 4'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_3_ADDR_MIN 0x0000000F +#define DPORT_APP_CACHE_LOCK_3_ADDR_MIN_M ((DPORT_APP_CACHE_LOCK_3_ADDR_MIN_V)<<(DPORT_APP_CACHE_LOCK_3_ADDR_MIN_S)) +#define DPORT_APP_CACHE_LOCK_3_ADDR_MIN_V 0xF +#define DPORT_APP_CACHE_LOCK_3_ADDR_MIN_S 14 +/* DPORT_APP_CACHE_LOCK_3_ADDR_PRE : R/W ;bitpos:[13:0] ;default: 14'h0 ; */ +/*description: */ +#define DPORT_APP_CACHE_LOCK_3_ADDR_PRE 0x00003FFF +#define DPORT_APP_CACHE_LOCK_3_ADDR_PRE_M ((DPORT_APP_CACHE_LOCK_3_ADDR_PRE_V)<<(DPORT_APP_CACHE_LOCK_3_ADDR_PRE_S)) +#define DPORT_APP_CACHE_LOCK_3_ADDR_PRE_V 0x3FFF +#define DPORT_APP_CACHE_LOCK_3_ADDR_PRE_S 0 + +#define DPORT_TRACEMEM_MUX_MODE_REG (DR_REG_DPORT_BASE + 0x070) +/* DPORT_TRACEMEM_MUX_MODE : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_TRACEMEM_MUX_MODE 0x00000003 +#define DPORT_TRACEMEM_MUX_MODE_M ((DPORT_TRACEMEM_MUX_MODE_V)<<(DPORT_TRACEMEM_MUX_MODE_S)) +#define DPORT_TRACEMEM_MUX_MODE_V 0x3 +#define DPORT_TRACEMEM_MUX_MODE_S 0 + +#define DPORT_PRO_TRACEMEM_ENA_REG (DR_REG_DPORT_BASE + 0x074) +/* DPORT_PRO_TRACEMEM_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_TRACEMEM_ENA (BIT(0)) +#define DPORT_PRO_TRACEMEM_ENA_M (BIT(0)) +#define DPORT_PRO_TRACEMEM_ENA_V 0x1 +#define DPORT_PRO_TRACEMEM_ENA_S 0 + +#define DPORT_APP_TRACEMEM_ENA_REG (DR_REG_DPORT_BASE + 0x078) +/* DPORT_APP_TRACEMEM_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_TRACEMEM_ENA (BIT(0)) +#define DPORT_APP_TRACEMEM_ENA_M (BIT(0)) +#define DPORT_APP_TRACEMEM_ENA_V 0x1 +#define DPORT_APP_TRACEMEM_ENA_S 0 + +#define DPORT_CACHE_MUX_MODE_REG (DR_REG_DPORT_BASE + 0x07C) +/* DPORT_CACHE_MUX_MODE : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_CACHE_MUX_MODE 0x00000003 +#define DPORT_CACHE_MUX_MODE_M ((DPORT_CACHE_MUX_MODE_V)<<(DPORT_CACHE_MUX_MODE_S)) +#define DPORT_CACHE_MUX_MODE_V 0x3 +#define DPORT_CACHE_MUX_MODE_S 0 + +#define DPORT_IMMU_PAGE_MODE_REG (DR_REG_DPORT_BASE + 0x080) +/* DPORT_IMMU_PAGE_MODE : R/W ;bitpos:[2:1] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_IMMU_PAGE_MODE 0x00000003 +#define DPORT_IMMU_PAGE_MODE_M ((DPORT_IMMU_PAGE_MODE_V)<<(DPORT_IMMU_PAGE_MODE_S)) +#define DPORT_IMMU_PAGE_MODE_V 0x3 +#define DPORT_IMMU_PAGE_MODE_S 1 +/* DPORT_INTERNAL_SRAM_IMMU_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_INTERNAL_SRAM_IMMU_ENA (BIT(0)) +#define DPORT_INTERNAL_SRAM_IMMU_ENA_M (BIT(0)) +#define DPORT_INTERNAL_SRAM_IMMU_ENA_V 0x1 +#define DPORT_INTERNAL_SRAM_IMMU_ENA_S 0 + +#define DPORT_DMMU_PAGE_MODE_REG (DR_REG_DPORT_BASE + 0x084) +/* DPORT_DMMU_PAGE_MODE : R/W ;bitpos:[2:1] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_DMMU_PAGE_MODE 0x00000003 +#define DPORT_DMMU_PAGE_MODE_M ((DPORT_DMMU_PAGE_MODE_V)<<(DPORT_DMMU_PAGE_MODE_S)) +#define DPORT_DMMU_PAGE_MODE_V 0x3 +#define DPORT_DMMU_PAGE_MODE_S 1 +/* DPORT_INTERNAL_SRAM_DMMU_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_INTERNAL_SRAM_DMMU_ENA (BIT(0)) +#define DPORT_INTERNAL_SRAM_DMMU_ENA_M (BIT(0)) +#define DPORT_INTERNAL_SRAM_DMMU_ENA_V 0x1 +#define DPORT_INTERNAL_SRAM_DMMU_ENA_S 0 + +#define DPORT_ROM_MPU_ENA_REG (DR_REG_DPORT_BASE + 0x088) +/* DPORT_APP_ROM_MPU_ENA : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_ROM_MPU_ENA (BIT(2)) +#define DPORT_APP_ROM_MPU_ENA_M (BIT(2)) +#define DPORT_APP_ROM_MPU_ENA_V 0x1 +#define DPORT_APP_ROM_MPU_ENA_S 2 +/* DPORT_PRO_ROM_MPU_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_ROM_MPU_ENA (BIT(1)) +#define DPORT_PRO_ROM_MPU_ENA_M (BIT(1)) +#define DPORT_PRO_ROM_MPU_ENA_V 0x1 +#define DPORT_PRO_ROM_MPU_ENA_S 1 +/* DPORT_SHARE_ROM_MPU_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_SHARE_ROM_MPU_ENA (BIT(0)) +#define DPORT_SHARE_ROM_MPU_ENA_M (BIT(0)) +#define DPORT_SHARE_ROM_MPU_ENA_V 0x1 +#define DPORT_SHARE_ROM_MPU_ENA_S 0 + +#define DPORT_MEM_PD_MASK_REG (DR_REG_DPORT_BASE + 0x08C) +/* DPORT_LSLP_MEM_PD_MASK : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_LSLP_MEM_PD_MASK (BIT(0)) +#define DPORT_LSLP_MEM_PD_MASK_M (BIT(0)) +#define DPORT_LSLP_MEM_PD_MASK_V 0x1 +#define DPORT_LSLP_MEM_PD_MASK_S 0 + +#define DPORT_ROM_PD_CTRL_REG (DR_REG_DPORT_BASE + 0x090) +/* DPORT_SHARE_ROM_PD : R/W ;bitpos:[7:2] ;default: 6'h0 ; */ +/*description: */ +#define DPORT_SHARE_ROM_PD 0x0000003F +#define DPORT_SHARE_ROM_PD_M ((DPORT_SHARE_ROM_PD_V)<<(DPORT_SHARE_ROM_PD_S)) +#define DPORT_SHARE_ROM_PD_V 0x3F +#define DPORT_SHARE_ROM_PD_S 2 +/* DPORT_APP_ROM_PD : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: */ +#define DPORT_APP_ROM_PD (BIT(1)) +#define DPORT_APP_ROM_PD_M (BIT(1)) +#define DPORT_APP_ROM_PD_V 0x1 +#define DPORT_APP_ROM_PD_S 1 +/* DPORT_PRO_ROM_PD : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: */ +#define DPORT_PRO_ROM_PD (BIT(0)) +#define DPORT_PRO_ROM_PD_M (BIT(0)) +#define DPORT_PRO_ROM_PD_V 0x1 +#define DPORT_PRO_ROM_PD_S 0 + +#define DPORT_ROM_FO_CTRL_REG (DR_REG_DPORT_BASE + 0x094) +/* DPORT_SHARE_ROM_FO : R/W ;bitpos:[7:2] ;default: 6'h0 ; */ +/*description: */ +#define DPORT_SHARE_ROM_FO 0x0000003F +#define DPORT_SHARE_ROM_FO_M ((DPORT_SHARE_ROM_FO_V)<<(DPORT_SHARE_ROM_FO_S)) +#define DPORT_SHARE_ROM_FO_V 0x3F +#define DPORT_SHARE_ROM_FO_S 2 +/* DPORT_APP_ROM_FO : R/W ;bitpos:[1] ;default: 1'h1 ; */ +/*description: */ +#define DPORT_APP_ROM_FO (BIT(1)) +#define DPORT_APP_ROM_FO_M (BIT(1)) +#define DPORT_APP_ROM_FO_V 0x1 +#define DPORT_APP_ROM_FO_S 1 +/* DPORT_PRO_ROM_FO : R/W ;bitpos:[0] ;default: 1'h1 ; */ +/*description: */ +#define DPORT_PRO_ROM_FO (BIT(0)) +#define DPORT_PRO_ROM_FO_M (BIT(0)) +#define DPORT_PRO_ROM_FO_V 0x1 +#define DPORT_PRO_ROM_FO_S 0 + +#define DPORT_SRAM_PD_CTRL_0_REG (DR_REG_DPORT_BASE + 0x098) +/* DPORT_SRAM_PD_0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_SRAM_PD_0 0xFFFFFFFF +#define DPORT_SRAM_PD_0_M ((DPORT_SRAM_PD_0_V)<<(DPORT_SRAM_PD_0_S)) +#define DPORT_SRAM_PD_0_V 0xFFFFFFFF +#define DPORT_SRAM_PD_0_S 0 + +#define DPORT_SRAM_PD_CTRL_1_REG (DR_REG_DPORT_BASE + 0x09C) +/* DPORT_SRAM_PD_1 : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: */ +#define DPORT_SRAM_PD_1 (BIT(0)) +#define DPORT_SRAM_PD_1_M (BIT(0)) +#define DPORT_SRAM_PD_1_V 0x1 +#define DPORT_SRAM_PD_1_S 0 + +#define DPORT_SRAM_FO_CTRL_0_REG (DR_REG_DPORT_BASE + 0x0A0) +/* DPORT_SRAM_FO_0 : R/W ;bitpos:[31:0] ;default: 32'hffffffff ; */ +/*description: */ +#define DPORT_SRAM_FO_0 0xFFFFFFFF +#define DPORT_SRAM_FO_0_M ((DPORT_SRAM_FO_0_V)<<(DPORT_SRAM_FO_0_S)) +#define DPORT_SRAM_FO_0_V 0xFFFFFFFF +#define DPORT_SRAM_FO_0_S 0 + +#define DPORT_SRAM_FO_CTRL_1_REG (DR_REG_DPORT_BASE + 0x0A4) +/* DPORT_SRAM_FO_1 : R/W ;bitpos:[0] ;default: 1'h1 ; */ +/*description: */ +#define DPORT_SRAM_FO_1 (BIT(0)) +#define DPORT_SRAM_FO_1_M (BIT(0)) +#define DPORT_SRAM_FO_1_V 0x1 +#define DPORT_SRAM_FO_1_S 0 + +#define DPORT_IRAM_DRAM_AHB_SEL_REG (DR_REG_DPORT_BASE + 0x0A8) +/* DPORT_MAC_DUMP_MODE : R/W ;bitpos:[6:5] ;default: 2'h0 ; */ +/*description: */ +#define DPORT_MAC_DUMP_MODE 0x00000003 +#define DPORT_MAC_DUMP_MODE_M ((DPORT_MAC_DUMP_MODE_V)<<(DPORT_MAC_DUMP_MODE_S)) +#define DPORT_MAC_DUMP_MODE_V 0x3 +#define DPORT_MAC_DUMP_MODE_S 5 +/* DPORT_MASK_AHB : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_MASK_AHB (BIT(4)) +#define DPORT_MASK_AHB_M (BIT(4)) +#define DPORT_MASK_AHB_V 0x1 +#define DPORT_MASK_AHB_S 4 +/* DPORT_MASK_APP_DRAM : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_MASK_APP_DRAM (BIT(3)) +#define DPORT_MASK_APP_DRAM_M (BIT(3)) +#define DPORT_MASK_APP_DRAM_V 0x1 +#define DPORT_MASK_APP_DRAM_S 3 +/* DPORT_MASK_PRO_DRAM : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_MASK_PRO_DRAM (BIT(2)) +#define DPORT_MASK_PRO_DRAM_M (BIT(2)) +#define DPORT_MASK_PRO_DRAM_V 0x1 +#define DPORT_MASK_PRO_DRAM_S 2 +/* DPORT_MASK_APP_IRAM : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_MASK_APP_IRAM (BIT(1)) +#define DPORT_MASK_APP_IRAM_M (BIT(1)) +#define DPORT_MASK_APP_IRAM_V 0x1 +#define DPORT_MASK_APP_IRAM_S 1 +/* DPORT_MASK_PRO_IRAM : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_MASK_PRO_IRAM (BIT(0)) +#define DPORT_MASK_PRO_IRAM_M (BIT(0)) +#define DPORT_MASK_PRO_IRAM_V 0x1 +#define DPORT_MASK_PRO_IRAM_S 0 + +#define DPORT_TAG_FO_CTRL_REG (DR_REG_DPORT_BASE + 0x0AC) +/* DPORT_APP_CACHE_TAG_PD : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_TAG_PD (BIT(9)) +#define DPORT_APP_CACHE_TAG_PD_M (BIT(9)) +#define DPORT_APP_CACHE_TAG_PD_V 0x1 +#define DPORT_APP_CACHE_TAG_PD_S 9 +/* DPORT_APP_CACHE_TAG_FORCE_ON : R/W ;bitpos:[8] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_CACHE_TAG_FORCE_ON (BIT(8)) +#define DPORT_APP_CACHE_TAG_FORCE_ON_M (BIT(8)) +#define DPORT_APP_CACHE_TAG_FORCE_ON_V 0x1 +#define DPORT_APP_CACHE_TAG_FORCE_ON_S 8 +/* DPORT_PRO_CACHE_TAG_PD : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_TAG_PD (BIT(1)) +#define DPORT_PRO_CACHE_TAG_PD_M (BIT(1)) +#define DPORT_PRO_CACHE_TAG_PD_V 0x1 +#define DPORT_PRO_CACHE_TAG_PD_S 1 +/* DPORT_PRO_CACHE_TAG_FORCE_ON : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_CACHE_TAG_FORCE_ON (BIT(0)) +#define DPORT_PRO_CACHE_TAG_FORCE_ON_M (BIT(0)) +#define DPORT_PRO_CACHE_TAG_FORCE_ON_V 0x1 +#define DPORT_PRO_CACHE_TAG_FORCE_ON_S 0 + +#define DPORT_AHB_LITE_MASK_REG (DR_REG_DPORT_BASE + 0x0B0) +/* DPORT_AHB_LITE_SDHOST_PID_REG : R/W ;bitpos:[13:11] ;default: 3'b0 ; */ +/*description: */ +#define DPORT_AHB_LITE_SDHOST_PID_REG 0x00000007 +#define DPORT_AHB_LITE_SDHOST_PID_REG_M ((DPORT_AHB_LITE_SDHOST_PID_REG_V)<<(DPORT_AHB_LITE_SDHOST_PID_REG_S)) +#define DPORT_AHB_LITE_SDHOST_PID_REG_V 0x7 +#define DPORT_AHB_LITE_SDHOST_PID_REG_S 11 +/* DPORT_AHB_LITE_MASK_APPDPORT : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_AHB_LITE_MASK_APPDPORT (BIT(10)) +#define DPORT_AHB_LITE_MASK_APPDPORT_M (BIT(10)) +#define DPORT_AHB_LITE_MASK_APPDPORT_V 0x1 +#define DPORT_AHB_LITE_MASK_APPDPORT_S 10 +/* DPORT_AHB_LITE_MASK_PRODPORT : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_AHB_LITE_MASK_PRODPORT (BIT(9)) +#define DPORT_AHB_LITE_MASK_PRODPORT_M (BIT(9)) +#define DPORT_AHB_LITE_MASK_PRODPORT_V 0x1 +#define DPORT_AHB_LITE_MASK_PRODPORT_S 9 +/* DPORT_AHB_LITE_MASK_SDIO : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_AHB_LITE_MASK_SDIO (BIT(8)) +#define DPORT_AHB_LITE_MASK_SDIO_M (BIT(8)) +#define DPORT_AHB_LITE_MASK_SDIO_V 0x1 +#define DPORT_AHB_LITE_MASK_SDIO_S 8 +/* DPORT_AHB_LITE_MASK_APP : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_AHB_LITE_MASK_APP (BIT(4)) +#define DPORT_AHB_LITE_MASK_APP_M (BIT(4)) +#define DPORT_AHB_LITE_MASK_APP_V 0x1 +#define DPORT_AHB_LITE_MASK_APP_S 4 +/* DPORT_AHB_LITE_MASK_PRO : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_AHB_LITE_MASK_PRO (BIT(0)) +#define DPORT_AHB_LITE_MASK_PRO_M (BIT(0)) +#define DPORT_AHB_LITE_MASK_PRO_V 0x1 +#define DPORT_AHB_LITE_MASK_PRO_S 0 + +#define DPORT_AHB_MPU_TABLE_0_REG (DR_REG_DPORT_BASE + 0x0B4) +/* DPORT_AHB_ACCESS_GRANT_0 : R/W ;bitpos:[31:0] ;default: 32'hffffffff ; */ +/*description: */ +#define DPORT_AHB_ACCESS_GRANT_0 0xFFFFFFFF +#define DPORT_AHB_ACCESS_GRANT_0_M ((DPORT_AHB_ACCESS_GRANT_0_V)<<(DPORT_AHB_ACCESS_GRANT_0_S)) +#define DPORT_AHB_ACCESS_GRANT_0_V 0xFFFFFFFF +#define DPORT_AHB_ACCESS_GRANT_0_S 0 + +#define DPORT_AHB_MPU_TABLE_1_REG (DR_REG_DPORT_BASE + 0x0B8) +/* DPORT_AHB_ACCESS_GRANT_1 : R/W ;bitpos:[8:0] ;default: 9'h1ff ; */ +/*description: */ +#define DPORT_AHB_ACCESS_GRANT_1 0x000001FF +#define DPORT_AHB_ACCESS_GRANT_1_M ((DPORT_AHB_ACCESS_GRANT_1_V)<<(DPORT_AHB_ACCESS_GRANT_1_S)) +#define DPORT_AHB_ACCESS_GRANT_1_V 0x1FF +#define DPORT_AHB_ACCESS_GRANT_1_S 0 + +#define DPORT_HOST_INF_SEL_REG (DR_REG_DPORT_BASE + 0x0BC) +/* DPORT_LINK_DEVICE_SEL : R/W ;bitpos:[15:8] ;default: 8'h0 ; */ +/*description: */ +#define DPORT_LINK_DEVICE_SEL 0x000000FF +#define DPORT_LINK_DEVICE_SEL_M ((DPORT_LINK_DEVICE_SEL_V)<<(DPORT_LINK_DEVICE_SEL_S)) +#define DPORT_LINK_DEVICE_SEL_V 0xFF +#define DPORT_LINK_DEVICE_SEL_S 8 +/* DPORT_PERI_IO_SWAP : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: */ +#define DPORT_PERI_IO_SWAP 0x000000FF +#define DPORT_PERI_IO_SWAP_M ((DPORT_PERI_IO_SWAP_V)<<(DPORT_PERI_IO_SWAP_S)) +#define DPORT_PERI_IO_SWAP_V 0xFF +#define DPORT_PERI_IO_SWAP_S 0 + +#define DPORT_PERIP_CLK_EN_REG (DR_REG_DPORT_BASE + 0x0C0) +/* DPORT_PERIP_CLK_EN : R/W ;bitpos:[31:0] ;default: 32'hf9c1e06f ; */ +/*description: */ +#define DPORT_PERIP_CLK_EN 0xFFFFFFFF +#define DPORT_PERIP_CLK_EN_M ((DPORT_PERIP_CLK_EN_V)<<(DPORT_PERIP_CLK_EN_S)) +#define DPORT_PERIP_CLK_EN_V 0xFFFFFFFF +#define DPORT_PERIP_CLK_EN_S 0 + +#define DPORT_PWM3_CLK_EN (BIT(26)) +#define DPORT_PWM2_CLK_EN (BIT(25)) +#define DPORT_UART_MEM_CLK_EN (BIT(24)) +#define DPORT_UART2_CLK_EN (BIT(23)) +#define DPORT_SPI_DMA_CLK_EN (BIT(22)) +#define DPORT_I2S1_CLK_EN (BIT(21)) +#define DPORT_PWM1_CLK_EN (BIT(20)) +#define DPORT_CAN_CLK_EN (BIT(19)) +#define DPORT_I2C_EXT1_CLK_EN (BIT(18)) +#define DPORT_PWM0_CLK_EN (BIT(17)) +#define DPORT_SPI_CLK_EN (BIT(16)) +#define DPORT_TIMERGROUP1_CLK_EN (BIT(15)) +#define DPORT_EFUSE_CLK_EN (BIT(14)) +#define DPORT_TIMERGROUP_CLK_EN (BIT(13)) +#define DPORT_UHCI1_CLK_EN (BIT(12)) +#define DPORT_LEDC_CLK_EN (BIT(11)) +#define DPORT_PCNT_CLK_EN (BIT(10)) +#define DPORT_RMT_CLK_EN (BIT(9)) +#define DPORT_UHCI0_CLK_EN (BIT(8)) +#define DPORT_I2C_EXT0_CLK_EN (BIT(7)) +#define DPORT_SPI_CLK_EN_2 (BIT(6)) +#define DPORT_UART1_CLK_EN (BIT(5)) +#define DPORT_I2S0_CLK_EN (BIT(4)) +#define DPORT_WDG_CLK_EN (BIT(3)) +#define DPORT_UART_CLK_EN (BIT(2)) +#define DPORT_SPI_CLK_EN_1 (BIT(1)) +#define DPORT_TIMERS_CLK_EN (BIT(0)) +#define DPORT_PERIP_RST_EN_REG (DR_REG_DPORT_BASE + 0x0C4) +/* DPORT_PERIP_RST : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_PERIP_RST 0xFFFFFFFF +#define DPORT_PERIP_RST_M ((DPORT_PERIP_RST_V)<<(DPORT_PERIP_RST_S)) +#define DPORT_PERIP_RST_V 0xFFFFFFFF +#define DPORT_PERIP_RST_S 0 +#define DPORT_PWM3_RST (BIT(26)) +#define DPORT_PWM2_RST (BIT(25)) +#define DPORT_UART_MEM_RST (BIT(24)) +#define DPORT_UART2_RST (BIT(23)) +#define DPORT_SPI_DMA_RST (BIT(22)) +#define DPORT_I2S1_RST (BIT(21)) +#define DPORT_PWM1_RST (BIT(20)) +#define DPORT_CAN_RST (BIT(19)) +#define DPORT_I2C_EXT1_RST (BIT(18)) +#define DPORT_PWM0_RST (BIT(17)) +#define DPORT_SPI_RST (BIT(16)) +#define DPORT_TIMERGROUP1_RST (BIT(15)) +#define DPORT_EFUSE_RST (BIT(14)) +#define DPORT_TIMERGROUP_RST (BIT(13)) +#define DPORT_UHCI1_RST (BIT(12)) +#define DPORT_LEDC_RST (BIT(11)) +#define DPORT_PCNT_RST (BIT(10)) +#define DPORT_RMT_RST (BIT(9)) +#define DPORT_UHCI0_RST (BIT(8)) +#define DPORT_I2C_EXT0_RST (BIT(7)) +#define DPORT_SPI_RST_2 (BIT(6)) +#define DPORT_UART1_RST (BIT(5)) +#define DPORT_I2S0_RST (BIT(4)) +#define DPORT_WDG_RST (BIT(3)) +#define DPORT_UART_RST (BIT(2)) +#define DPORT_SPI_RST_1 (BIT(1)) +#define DPORT_TIMERS_RST (BIT(0)) +#define DPORT_SLAVE_SPI_CONFIG_REG (DR_REG_DPORT_BASE + 0x0C8) +/* DPORT_SPI_DECRYPT_ENABLE : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_SPI_DECRYPT_ENABLE (BIT(12)) +#define DPORT_SPI_DECRYPT_ENABLE_M (BIT(12)) +#define DPORT_SPI_DECRYPT_ENABLE_V 0x1 +#define DPORT_SPI_DECRYPT_ENABLE_S 12 +/* DPORT_SPI_ENCRYPT_ENABLE : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_SPI_ENCRYPT_ENABLE (BIT(8)) +#define DPORT_SPI_ENCRYPT_ENABLE_M (BIT(8)) +#define DPORT_SPI_ENCRYPT_ENABLE_V 0x1 +#define DPORT_SPI_ENCRYPT_ENABLE_S 8 +/* DPORT_SLAVE_SPI_MASK_APP : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_SLAVE_SPI_MASK_APP (BIT(4)) +#define DPORT_SLAVE_SPI_MASK_APP_M (BIT(4)) +#define DPORT_SLAVE_SPI_MASK_APP_V 0x1 +#define DPORT_SLAVE_SPI_MASK_APP_S 4 +/* DPORT_SLAVE_SPI_MASK_PRO : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_SLAVE_SPI_MASK_PRO (BIT(0)) +#define DPORT_SLAVE_SPI_MASK_PRO_M (BIT(0)) +#define DPORT_SLAVE_SPI_MASK_PRO_V 0x1 +#define DPORT_SLAVE_SPI_MASK_PRO_S 0 + +#define DPORT_WIFI_CLK_EN_REG (DR_REG_DPORT_BASE + 0x0CC) +/* DPORT_WIFI_CLK_EN : R/W ;bitpos:[31:0] ;default: 32'hfffce030 ; */ +/*description: */ +#define DPORT_WIFI_CLK_EN 0xFFFFFFFF +#define DPORT_WIFI_CLK_EN_M ((DPORT_WIFI_CLK_EN_V)<<(DPORT_WIFI_CLK_EN_S)) +#define DPORT_WIFI_CLK_EN_V 0xFFFFFFFF +#define DPORT_WIFI_CLK_EN_S 0 + +#define DPORT_WIFI_RST_EN_REG (DR_REG_DPORT_BASE + 0x0D0) +/* DPORT_WIFI_RST : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_WIFI_RST 0xFFFFFFFF +#define DPORT_WIFI_RST_M ((DPORT_WIFI_RST_V)<<(DPORT_WIFI_RST_S)) +#define DPORT_WIFI_RST_V 0xFFFFFFFF +#define DPORT_WIFI_RST_S 0 + +#define DPORT_BT_LPCK_DIV_INT_REG (DR_REG_DPORT_BASE + 0x0D4) +/* DPORT_BTEXTWAKEUP_REQ : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_BTEXTWAKEUP_REQ (BIT(12)) +#define DPORT_BTEXTWAKEUP_REQ_M (BIT(12)) +#define DPORT_BTEXTWAKEUP_REQ_V 0x1 +#define DPORT_BTEXTWAKEUP_REQ_S 12 +/* DPORT_BT_LPCK_DIV_NUM : R/W ;bitpos:[11:0] ;default: 12'd255 ; */ +/*description: */ +#define DPORT_BT_LPCK_DIV_NUM 0x00000FFF +#define DPORT_BT_LPCK_DIV_NUM_M ((DPORT_BT_LPCK_DIV_NUM_V)<<(DPORT_BT_LPCK_DIV_NUM_S)) +#define DPORT_BT_LPCK_DIV_NUM_V 0xFFF +#define DPORT_BT_LPCK_DIV_NUM_S 0 + +#define DPORT_BT_LPCK_DIV_FRAC_REG (DR_REG_DPORT_BASE + 0x0D8) +/* DPORT_LPCLK_SEL_XTAL32K : R/W ;bitpos:[27] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_LPCLK_SEL_XTAL32K (BIT(27)) +#define DPORT_LPCLK_SEL_XTAL32K_M (BIT(27)) +#define DPORT_LPCLK_SEL_XTAL32K_V 0x1 +#define DPORT_LPCLK_SEL_XTAL32K_S 27 +/* DPORT_LPCLK_SEL_XTAL : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_LPCLK_SEL_XTAL (BIT(26)) +#define DPORT_LPCLK_SEL_XTAL_M (BIT(26)) +#define DPORT_LPCLK_SEL_XTAL_V 0x1 +#define DPORT_LPCLK_SEL_XTAL_S 26 +/* DPORT_LPCLK_SEL_8M : R/W ;bitpos:[25] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_LPCLK_SEL_8M (BIT(25)) +#define DPORT_LPCLK_SEL_8M_M (BIT(25)) +#define DPORT_LPCLK_SEL_8M_V 0x1 +#define DPORT_LPCLK_SEL_8M_S 25 +/* DPORT_LPCLK_SEL_RTC_SLOW : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_LPCLK_SEL_RTC_SLOW (BIT(24)) +#define DPORT_LPCLK_SEL_RTC_SLOW_M (BIT(24)) +#define DPORT_LPCLK_SEL_RTC_SLOW_V 0x1 +#define DPORT_LPCLK_SEL_RTC_SLOW_S 24 +/* DPORT_BT_LPCK_DIV_A : R/W ;bitpos:[23:12] ;default: 12'd1 ; */ +/*description: */ +#define DPORT_BT_LPCK_DIV_A 0x00000FFF +#define DPORT_BT_LPCK_DIV_A_M ((DPORT_BT_LPCK_DIV_A_V)<<(DPORT_BT_LPCK_DIV_A_S)) +#define DPORT_BT_LPCK_DIV_A_V 0xFFF +#define DPORT_BT_LPCK_DIV_A_S 12 +/* DPORT_BT_LPCK_DIV_B : R/W ;bitpos:[11:0] ;default: 12'd1 ; */ +/*description: */ +#define DPORT_BT_LPCK_DIV_B 0x00000FFF +#define DPORT_BT_LPCK_DIV_B_M ((DPORT_BT_LPCK_DIV_B_V)<<(DPORT_BT_LPCK_DIV_B_S)) +#define DPORT_BT_LPCK_DIV_B_V 0xFFF +#define DPORT_BT_LPCK_DIV_B_S 0 + +#define DPORT_CPU_INTR_FROM_CPU_0_REG (DR_REG_DPORT_BASE + 0x0DC) +/* DPORT_CPU_INTR_FROM_CPU_0 : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_CPU_INTR_FROM_CPU_0 (BIT(0)) +#define DPORT_CPU_INTR_FROM_CPU_0_M (BIT(0)) +#define DPORT_CPU_INTR_FROM_CPU_0_V 0x1 +#define DPORT_CPU_INTR_FROM_CPU_0_S 0 + +#define DPORT_CPU_INTR_FROM_CPU_1_REG (DR_REG_DPORT_BASE + 0x0E0) +/* DPORT_CPU_INTR_FROM_CPU_1 : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_CPU_INTR_FROM_CPU_1 (BIT(0)) +#define DPORT_CPU_INTR_FROM_CPU_1_M (BIT(0)) +#define DPORT_CPU_INTR_FROM_CPU_1_V 0x1 +#define DPORT_CPU_INTR_FROM_CPU_1_S 0 + +#define DPORT_CPU_INTR_FROM_CPU_2_REG (DR_REG_DPORT_BASE + 0x0E4) +/* DPORT_CPU_INTR_FROM_CPU_2 : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_CPU_INTR_FROM_CPU_2 (BIT(0)) +#define DPORT_CPU_INTR_FROM_CPU_2_M (BIT(0)) +#define DPORT_CPU_INTR_FROM_CPU_2_V 0x1 +#define DPORT_CPU_INTR_FROM_CPU_2_S 0 + +#define DPORT_CPU_INTR_FROM_CPU_3_REG (DR_REG_DPORT_BASE + 0x0E8) +/* DPORT_CPU_INTR_FROM_CPU_3 : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_CPU_INTR_FROM_CPU_3 (BIT(0)) +#define DPORT_CPU_INTR_FROM_CPU_3_M (BIT(0)) +#define DPORT_CPU_INTR_FROM_CPU_3_V 0x1 +#define DPORT_CPU_INTR_FROM_CPU_3_S 0 + +#define DPORT_PRO_INTR_STATUS_0_REG (DR_REG_DPORT_BASE + 0x0EC) +/* DPORT_PRO_INTR_STATUS_0 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_PRO_INTR_STATUS_0 0xFFFFFFFF +#define DPORT_PRO_INTR_STATUS_0_M ((DPORT_PRO_INTR_STATUS_0_V)<<(DPORT_PRO_INTR_STATUS_0_S)) +#define DPORT_PRO_INTR_STATUS_0_V 0xFFFFFFFF +#define DPORT_PRO_INTR_STATUS_0_S 0 + +#define DPORT_PRO_INTR_STATUS_1_REG (DR_REG_DPORT_BASE + 0x0F0) +/* DPORT_PRO_INTR_STATUS_1 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_PRO_INTR_STATUS_1 0xFFFFFFFF +#define DPORT_PRO_INTR_STATUS_1_M ((DPORT_PRO_INTR_STATUS_1_V)<<(DPORT_PRO_INTR_STATUS_1_S)) +#define DPORT_PRO_INTR_STATUS_1_V 0xFFFFFFFF +#define DPORT_PRO_INTR_STATUS_1_S 0 + +#define DPORT_PRO_INTR_STATUS_2_REG (DR_REG_DPORT_BASE + 0x0F4) +/* DPORT_PRO_INTR_STATUS_2 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_PRO_INTR_STATUS_2 0xFFFFFFFF +#define DPORT_PRO_INTR_STATUS_2_M ((DPORT_PRO_INTR_STATUS_2_V)<<(DPORT_PRO_INTR_STATUS_2_S)) +#define DPORT_PRO_INTR_STATUS_2_V 0xFFFFFFFF +#define DPORT_PRO_INTR_STATUS_2_S 0 + +#define DPORT_APP_INTR_STATUS_0_REG (DR_REG_DPORT_BASE + 0x0F8) +/* DPORT_APP_INTR_STATUS_0 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_APP_INTR_STATUS_0 0xFFFFFFFF +#define DPORT_APP_INTR_STATUS_0_M ((DPORT_APP_INTR_STATUS_0_V)<<(DPORT_APP_INTR_STATUS_0_S)) +#define DPORT_APP_INTR_STATUS_0_V 0xFFFFFFFF +#define DPORT_APP_INTR_STATUS_0_S 0 + +#define DPORT_APP_INTR_STATUS_1_REG (DR_REG_DPORT_BASE + 0x0FC) +/* DPORT_APP_INTR_STATUS_1 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_APP_INTR_STATUS_1 0xFFFFFFFF +#define DPORT_APP_INTR_STATUS_1_M ((DPORT_APP_INTR_STATUS_1_V)<<(DPORT_APP_INTR_STATUS_1_S)) +#define DPORT_APP_INTR_STATUS_1_V 0xFFFFFFFF +#define DPORT_APP_INTR_STATUS_1_S 0 + +#define DPORT_APP_INTR_STATUS_2_REG (DR_REG_DPORT_BASE + 0x100) +/* DPORT_APP_INTR_STATUS_2 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define DPORT_APP_INTR_STATUS_2 0xFFFFFFFF +#define DPORT_APP_INTR_STATUS_2_M ((DPORT_APP_INTR_STATUS_2_V)<<(DPORT_APP_INTR_STATUS_2_S)) +#define DPORT_APP_INTR_STATUS_2_V 0xFFFFFFFF +#define DPORT_APP_INTR_STATUS_2_S 0 + +#define DPORT_PRO_MAC_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x104) +/* DPORT_PRO_MAC_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_MAC_INTR_MAP 0x0000001F +#define DPORT_PRO_MAC_INTR_MAP_M ((DPORT_PRO_MAC_INTR_MAP_V)<<(DPORT_PRO_MAC_INTR_MAP_S)) +#define DPORT_PRO_MAC_INTR_MAP_V 0x1F +#define DPORT_PRO_MAC_INTR_MAP_S 0 + +#define DPORT_PRO_MAC_NMI_MAP_REG (DR_REG_DPORT_BASE + 0x108) +/* DPORT_PRO_MAC_NMI_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_MAC_NMI_MAP 0x0000001F +#define DPORT_PRO_MAC_NMI_MAP_M ((DPORT_PRO_MAC_NMI_MAP_V)<<(DPORT_PRO_MAC_NMI_MAP_S)) +#define DPORT_PRO_MAC_NMI_MAP_V 0x1F +#define DPORT_PRO_MAC_NMI_MAP_S 0 + +#define DPORT_PRO_BB_INT_MAP_REG (DR_REG_DPORT_BASE + 0x10C) +/* DPORT_PRO_BB_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_BB_INT_MAP 0x0000001F +#define DPORT_PRO_BB_INT_MAP_M ((DPORT_PRO_BB_INT_MAP_V)<<(DPORT_PRO_BB_INT_MAP_S)) +#define DPORT_PRO_BB_INT_MAP_V 0x1F +#define DPORT_PRO_BB_INT_MAP_S 0 + +#define DPORT_PRO_BT_MAC_INT_MAP_REG (DR_REG_DPORT_BASE + 0x110) +/* DPORT_PRO_BT_MAC_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_BT_MAC_INT_MAP 0x0000001F +#define DPORT_PRO_BT_MAC_INT_MAP_M ((DPORT_PRO_BT_MAC_INT_MAP_V)<<(DPORT_PRO_BT_MAC_INT_MAP_S)) +#define DPORT_PRO_BT_MAC_INT_MAP_V 0x1F +#define DPORT_PRO_BT_MAC_INT_MAP_S 0 + +#define DPORT_PRO_BT_BB_INT_MAP_REG (DR_REG_DPORT_BASE + 0x114) +/* DPORT_PRO_BT_BB_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_BT_BB_INT_MAP 0x0000001F +#define DPORT_PRO_BT_BB_INT_MAP_M ((DPORT_PRO_BT_BB_INT_MAP_V)<<(DPORT_PRO_BT_BB_INT_MAP_S)) +#define DPORT_PRO_BT_BB_INT_MAP_V 0x1F +#define DPORT_PRO_BT_BB_INT_MAP_S 0 + +#define DPORT_PRO_BT_BB_NMI_MAP_REG (DR_REG_DPORT_BASE + 0x118) +/* DPORT_PRO_BT_BB_NMI_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_BT_BB_NMI_MAP 0x0000001F +#define DPORT_PRO_BT_BB_NMI_MAP_M ((DPORT_PRO_BT_BB_NMI_MAP_V)<<(DPORT_PRO_BT_BB_NMI_MAP_S)) +#define DPORT_PRO_BT_BB_NMI_MAP_V 0x1F +#define DPORT_PRO_BT_BB_NMI_MAP_S 0 + +#define DPORT_PRO_RWBT_IRQ_MAP_REG (DR_REG_DPORT_BASE + 0x11C) +/* DPORT_PRO_RWBT_IRQ_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_RWBT_IRQ_MAP 0x0000001F +#define DPORT_PRO_RWBT_IRQ_MAP_M ((DPORT_PRO_RWBT_IRQ_MAP_V)<<(DPORT_PRO_RWBT_IRQ_MAP_S)) +#define DPORT_PRO_RWBT_IRQ_MAP_V 0x1F +#define DPORT_PRO_RWBT_IRQ_MAP_S 0 + +#define DPORT_PRO_RWBLE_IRQ_MAP_REG (DR_REG_DPORT_BASE + 0x120) +/* DPORT_PRO_RWBLE_IRQ_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_RWBLE_IRQ_MAP 0x0000001F +#define DPORT_PRO_RWBLE_IRQ_MAP_M ((DPORT_PRO_RWBLE_IRQ_MAP_V)<<(DPORT_PRO_RWBLE_IRQ_MAP_S)) +#define DPORT_PRO_RWBLE_IRQ_MAP_V 0x1F +#define DPORT_PRO_RWBLE_IRQ_MAP_S 0 + +#define DPORT_PRO_RWBT_NMI_MAP_REG (DR_REG_DPORT_BASE + 0x124) +/* DPORT_PRO_RWBT_NMI_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_RWBT_NMI_MAP 0x0000001F +#define DPORT_PRO_RWBT_NMI_MAP_M ((DPORT_PRO_RWBT_NMI_MAP_V)<<(DPORT_PRO_RWBT_NMI_MAP_S)) +#define DPORT_PRO_RWBT_NMI_MAP_V 0x1F +#define DPORT_PRO_RWBT_NMI_MAP_S 0 + +#define DPORT_PRO_RWBLE_NMI_MAP_REG (DR_REG_DPORT_BASE + 0x128) +/* DPORT_PRO_RWBLE_NMI_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_RWBLE_NMI_MAP 0x0000001F +#define DPORT_PRO_RWBLE_NMI_MAP_M ((DPORT_PRO_RWBLE_NMI_MAP_V)<<(DPORT_PRO_RWBLE_NMI_MAP_S)) +#define DPORT_PRO_RWBLE_NMI_MAP_V 0x1F +#define DPORT_PRO_RWBLE_NMI_MAP_S 0 + +#define DPORT_PRO_SLC0_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x12C) +/* DPORT_PRO_SLC0_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_SLC0_INTR_MAP 0x0000001F +#define DPORT_PRO_SLC0_INTR_MAP_M ((DPORT_PRO_SLC0_INTR_MAP_V)<<(DPORT_PRO_SLC0_INTR_MAP_S)) +#define DPORT_PRO_SLC0_INTR_MAP_V 0x1F +#define DPORT_PRO_SLC0_INTR_MAP_S 0 + +#define DPORT_PRO_SLC1_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x130) +/* DPORT_PRO_SLC1_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_SLC1_INTR_MAP 0x0000001F +#define DPORT_PRO_SLC1_INTR_MAP_M ((DPORT_PRO_SLC1_INTR_MAP_V)<<(DPORT_PRO_SLC1_INTR_MAP_S)) +#define DPORT_PRO_SLC1_INTR_MAP_V 0x1F +#define DPORT_PRO_SLC1_INTR_MAP_S 0 + +#define DPORT_PRO_UHCI0_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x134) +/* DPORT_PRO_UHCI0_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_UHCI0_INTR_MAP 0x0000001F +#define DPORT_PRO_UHCI0_INTR_MAP_M ((DPORT_PRO_UHCI0_INTR_MAP_V)<<(DPORT_PRO_UHCI0_INTR_MAP_S)) +#define DPORT_PRO_UHCI0_INTR_MAP_V 0x1F +#define DPORT_PRO_UHCI0_INTR_MAP_S 0 + +#define DPORT_PRO_UHCI1_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x138) +/* DPORT_PRO_UHCI1_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_UHCI1_INTR_MAP 0x0000001F +#define DPORT_PRO_UHCI1_INTR_MAP_M ((DPORT_PRO_UHCI1_INTR_MAP_V)<<(DPORT_PRO_UHCI1_INTR_MAP_S)) +#define DPORT_PRO_UHCI1_INTR_MAP_V 0x1F +#define DPORT_PRO_UHCI1_INTR_MAP_S 0 + +#define DPORT_PRO_TG_T0_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x13C) +/* DPORT_PRO_TG_T0_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG_T0_LEVEL_INT_MAP 0x0000001F +#define DPORT_PRO_TG_T0_LEVEL_INT_MAP_M ((DPORT_PRO_TG_T0_LEVEL_INT_MAP_V)<<(DPORT_PRO_TG_T0_LEVEL_INT_MAP_S)) +#define DPORT_PRO_TG_T0_LEVEL_INT_MAP_V 0x1F +#define DPORT_PRO_TG_T0_LEVEL_INT_MAP_S 0 + +#define DPORT_PRO_TG_T1_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x140) +/* DPORT_PRO_TG_T1_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG_T1_LEVEL_INT_MAP 0x0000001F +#define DPORT_PRO_TG_T1_LEVEL_INT_MAP_M ((DPORT_PRO_TG_T1_LEVEL_INT_MAP_V)<<(DPORT_PRO_TG_T1_LEVEL_INT_MAP_S)) +#define DPORT_PRO_TG_T1_LEVEL_INT_MAP_V 0x1F +#define DPORT_PRO_TG_T1_LEVEL_INT_MAP_S 0 + +#define DPORT_PRO_TG_WDT_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x144) +/* DPORT_PRO_TG_WDT_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG_WDT_LEVEL_INT_MAP 0x0000001F +#define DPORT_PRO_TG_WDT_LEVEL_INT_MAP_M ((DPORT_PRO_TG_WDT_LEVEL_INT_MAP_V)<<(DPORT_PRO_TG_WDT_LEVEL_INT_MAP_S)) +#define DPORT_PRO_TG_WDT_LEVEL_INT_MAP_V 0x1F +#define DPORT_PRO_TG_WDT_LEVEL_INT_MAP_S 0 + +#define DPORT_PRO_TG_LACT_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x148) +/* DPORT_PRO_TG_LACT_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG_LACT_LEVEL_INT_MAP 0x0000001F +#define DPORT_PRO_TG_LACT_LEVEL_INT_MAP_M ((DPORT_PRO_TG_LACT_LEVEL_INT_MAP_V)<<(DPORT_PRO_TG_LACT_LEVEL_INT_MAP_S)) +#define DPORT_PRO_TG_LACT_LEVEL_INT_MAP_V 0x1F +#define DPORT_PRO_TG_LACT_LEVEL_INT_MAP_S 0 + +#define DPORT_PRO_TG1_T0_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x14C) +/* DPORT_PRO_TG1_T0_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG1_T0_LEVEL_INT_MAP 0x0000001F +#define DPORT_PRO_TG1_T0_LEVEL_INT_MAP_M ((DPORT_PRO_TG1_T0_LEVEL_INT_MAP_V)<<(DPORT_PRO_TG1_T0_LEVEL_INT_MAP_S)) +#define DPORT_PRO_TG1_T0_LEVEL_INT_MAP_V 0x1F +#define DPORT_PRO_TG1_T0_LEVEL_INT_MAP_S 0 + +#define DPORT_PRO_TG1_T1_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x150) +/* DPORT_PRO_TG1_T1_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG1_T1_LEVEL_INT_MAP 0x0000001F +#define DPORT_PRO_TG1_T1_LEVEL_INT_MAP_M ((DPORT_PRO_TG1_T1_LEVEL_INT_MAP_V)<<(DPORT_PRO_TG1_T1_LEVEL_INT_MAP_S)) +#define DPORT_PRO_TG1_T1_LEVEL_INT_MAP_V 0x1F +#define DPORT_PRO_TG1_T1_LEVEL_INT_MAP_S 0 + +#define DPORT_PRO_TG1_WDT_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x154) +/* DPORT_PRO_TG1_WDT_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG1_WDT_LEVEL_INT_MAP 0x0000001F +#define DPORT_PRO_TG1_WDT_LEVEL_INT_MAP_M ((DPORT_PRO_TG1_WDT_LEVEL_INT_MAP_V)<<(DPORT_PRO_TG1_WDT_LEVEL_INT_MAP_S)) +#define DPORT_PRO_TG1_WDT_LEVEL_INT_MAP_V 0x1F +#define DPORT_PRO_TG1_WDT_LEVEL_INT_MAP_S 0 + +#define DPORT_PRO_TG1_LACT_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x158) +/* DPORT_PRO_TG1_LACT_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG1_LACT_LEVEL_INT_MAP 0x0000001F +#define DPORT_PRO_TG1_LACT_LEVEL_INT_MAP_M ((DPORT_PRO_TG1_LACT_LEVEL_INT_MAP_V)<<(DPORT_PRO_TG1_LACT_LEVEL_INT_MAP_S)) +#define DPORT_PRO_TG1_LACT_LEVEL_INT_MAP_V 0x1F +#define DPORT_PRO_TG1_LACT_LEVEL_INT_MAP_S 0 + +#define DPORT_PRO_GPIO_INTERRUPT_MAP_REG (DR_REG_DPORT_BASE + 0x15C) +/* DPORT_PRO_GPIO_INTERRUPT_PRO_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_GPIO_INTERRUPT_PRO_MAP 0x0000001F +#define DPORT_PRO_GPIO_INTERRUPT_PRO_MAP_M ((DPORT_PRO_GPIO_INTERRUPT_PRO_MAP_V)<<(DPORT_PRO_GPIO_INTERRUPT_PRO_MAP_S)) +#define DPORT_PRO_GPIO_INTERRUPT_PRO_MAP_V 0x1F +#define DPORT_PRO_GPIO_INTERRUPT_PRO_MAP_S 0 + +#define DPORT_PRO_GPIO_INTERRUPT_NMI_MAP_REG (DR_REG_DPORT_BASE + 0x160) +/* DPORT_PRO_GPIO_INTERRUPT_PRO_NMI_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_GPIO_INTERRUPT_PRO_NMI_MAP 0x0000001F +#define DPORT_PRO_GPIO_INTERRUPT_PRO_NMI_MAP_M ((DPORT_PRO_GPIO_INTERRUPT_PRO_NMI_MAP_V)<<(DPORT_PRO_GPIO_INTERRUPT_PRO_NMI_MAP_S)) +#define DPORT_PRO_GPIO_INTERRUPT_PRO_NMI_MAP_V 0x1F +#define DPORT_PRO_GPIO_INTERRUPT_PRO_NMI_MAP_S 0 + +#define DPORT_PRO_CPU_INTR_FROM_CPU_0_MAP_REG (DR_REG_DPORT_BASE + 0x164) +/* DPORT_PRO_CPU_INTR_FROM_CPU_0_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_CPU_INTR_FROM_CPU_0_MAP 0x0000001F +#define DPORT_PRO_CPU_INTR_FROM_CPU_0_MAP_M ((DPORT_PRO_CPU_INTR_FROM_CPU_0_MAP_V)<<(DPORT_PRO_CPU_INTR_FROM_CPU_0_MAP_S)) +#define DPORT_PRO_CPU_INTR_FROM_CPU_0_MAP_V 0x1F +#define DPORT_PRO_CPU_INTR_FROM_CPU_0_MAP_S 0 + +#define DPORT_PRO_CPU_INTR_FROM_CPU_1_MAP_REG (DR_REG_DPORT_BASE + 0x168) +/* DPORT_PRO_CPU_INTR_FROM_CPU_1_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_CPU_INTR_FROM_CPU_1_MAP 0x0000001F +#define DPORT_PRO_CPU_INTR_FROM_CPU_1_MAP_M ((DPORT_PRO_CPU_INTR_FROM_CPU_1_MAP_V)<<(DPORT_PRO_CPU_INTR_FROM_CPU_1_MAP_S)) +#define DPORT_PRO_CPU_INTR_FROM_CPU_1_MAP_V 0x1F +#define DPORT_PRO_CPU_INTR_FROM_CPU_1_MAP_S 0 + +#define DPORT_PRO_CPU_INTR_FROM_CPU_2_MAP_REG (DR_REG_DPORT_BASE + 0x16C) +/* DPORT_PRO_CPU_INTR_FROM_CPU_2_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_CPU_INTR_FROM_CPU_2_MAP 0x0000001F +#define DPORT_PRO_CPU_INTR_FROM_CPU_2_MAP_M ((DPORT_PRO_CPU_INTR_FROM_CPU_2_MAP_V)<<(DPORT_PRO_CPU_INTR_FROM_CPU_2_MAP_S)) +#define DPORT_PRO_CPU_INTR_FROM_CPU_2_MAP_V 0x1F +#define DPORT_PRO_CPU_INTR_FROM_CPU_2_MAP_S 0 + +#define DPORT_PRO_CPU_INTR_FROM_CPU_3_MAP_REG (DR_REG_DPORT_BASE + 0x170) +/* DPORT_PRO_CPU_INTR_FROM_CPU_3_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_CPU_INTR_FROM_CPU_3_MAP 0x0000001F +#define DPORT_PRO_CPU_INTR_FROM_CPU_3_MAP_M ((DPORT_PRO_CPU_INTR_FROM_CPU_3_MAP_V)<<(DPORT_PRO_CPU_INTR_FROM_CPU_3_MAP_S)) +#define DPORT_PRO_CPU_INTR_FROM_CPU_3_MAP_V 0x1F +#define DPORT_PRO_CPU_INTR_FROM_CPU_3_MAP_S 0 + +#define DPORT_PRO_SPI_INTR_0_MAP_REG (DR_REG_DPORT_BASE + 0x174) +/* DPORT_PRO_SPI_INTR_0_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_SPI_INTR_0_MAP 0x0000001F +#define DPORT_PRO_SPI_INTR_0_MAP_M ((DPORT_PRO_SPI_INTR_0_MAP_V)<<(DPORT_PRO_SPI_INTR_0_MAP_S)) +#define DPORT_PRO_SPI_INTR_0_MAP_V 0x1F +#define DPORT_PRO_SPI_INTR_0_MAP_S 0 + +#define DPORT_PRO_SPI_INTR_1_MAP_REG (DR_REG_DPORT_BASE + 0x178) +/* DPORT_PRO_SPI_INTR_1_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_SPI_INTR_1_MAP 0x0000001F +#define DPORT_PRO_SPI_INTR_1_MAP_M ((DPORT_PRO_SPI_INTR_1_MAP_V)<<(DPORT_PRO_SPI_INTR_1_MAP_S)) +#define DPORT_PRO_SPI_INTR_1_MAP_V 0x1F +#define DPORT_PRO_SPI_INTR_1_MAP_S 0 + +#define DPORT_PRO_SPI_INTR_2_MAP_REG (DR_REG_DPORT_BASE + 0x17C) +/* DPORT_PRO_SPI_INTR_2_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_SPI_INTR_2_MAP 0x0000001F +#define DPORT_PRO_SPI_INTR_2_MAP_M ((DPORT_PRO_SPI_INTR_2_MAP_V)<<(DPORT_PRO_SPI_INTR_2_MAP_S)) +#define DPORT_PRO_SPI_INTR_2_MAP_V 0x1F +#define DPORT_PRO_SPI_INTR_2_MAP_S 0 + +#define DPORT_PRO_SPI_INTR_3_MAP_REG (DR_REG_DPORT_BASE + 0x180) +/* DPORT_PRO_SPI_INTR_3_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_SPI_INTR_3_MAP 0x0000001F +#define DPORT_PRO_SPI_INTR_3_MAP_M ((DPORT_PRO_SPI_INTR_3_MAP_V)<<(DPORT_PRO_SPI_INTR_3_MAP_S)) +#define DPORT_PRO_SPI_INTR_3_MAP_V 0x1F +#define DPORT_PRO_SPI_INTR_3_MAP_S 0 + +#define DPORT_PRO_I2S0_INT_MAP_REG (DR_REG_DPORT_BASE + 0x184) +/* DPORT_PRO_I2S0_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_I2S0_INT_MAP 0x0000001F +#define DPORT_PRO_I2S0_INT_MAP_M ((DPORT_PRO_I2S0_INT_MAP_V)<<(DPORT_PRO_I2S0_INT_MAP_S)) +#define DPORT_PRO_I2S0_INT_MAP_V 0x1F +#define DPORT_PRO_I2S0_INT_MAP_S 0 + +#define DPORT_PRO_I2S1_INT_MAP_REG (DR_REG_DPORT_BASE + 0x188) +/* DPORT_PRO_I2S1_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_I2S1_INT_MAP 0x0000001F +#define DPORT_PRO_I2S1_INT_MAP_M ((DPORT_PRO_I2S1_INT_MAP_V)<<(DPORT_PRO_I2S1_INT_MAP_S)) +#define DPORT_PRO_I2S1_INT_MAP_V 0x1F +#define DPORT_PRO_I2S1_INT_MAP_S 0 + +#define DPORT_PRO_UART_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x18C) +/* DPORT_PRO_UART_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_UART_INTR_MAP 0x0000001F +#define DPORT_PRO_UART_INTR_MAP_M ((DPORT_PRO_UART_INTR_MAP_V)<<(DPORT_PRO_UART_INTR_MAP_S)) +#define DPORT_PRO_UART_INTR_MAP_V 0x1F +#define DPORT_PRO_UART_INTR_MAP_S 0 + +#define DPORT_PRO_UART1_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x190) +/* DPORT_PRO_UART1_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_UART1_INTR_MAP 0x0000001F +#define DPORT_PRO_UART1_INTR_MAP_M ((DPORT_PRO_UART1_INTR_MAP_V)<<(DPORT_PRO_UART1_INTR_MAP_S)) +#define DPORT_PRO_UART1_INTR_MAP_V 0x1F +#define DPORT_PRO_UART1_INTR_MAP_S 0 + +#define DPORT_PRO_UART2_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x194) +/* DPORT_PRO_UART2_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_UART2_INTR_MAP 0x0000001F +#define DPORT_PRO_UART2_INTR_MAP_M ((DPORT_PRO_UART2_INTR_MAP_V)<<(DPORT_PRO_UART2_INTR_MAP_S)) +#define DPORT_PRO_UART2_INTR_MAP_V 0x1F +#define DPORT_PRO_UART2_INTR_MAP_S 0 + +#define DPORT_PRO_SDIO_HOST_INTERRUPT_MAP_REG (DR_REG_DPORT_BASE + 0x198) +/* DPORT_PRO_SDIO_HOST_INTERRUPT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_SDIO_HOST_INTERRUPT_MAP 0x0000001F +#define DPORT_PRO_SDIO_HOST_INTERRUPT_MAP_M ((DPORT_PRO_SDIO_HOST_INTERRUPT_MAP_V)<<(DPORT_PRO_SDIO_HOST_INTERRUPT_MAP_S)) +#define DPORT_PRO_SDIO_HOST_INTERRUPT_MAP_V 0x1F +#define DPORT_PRO_SDIO_HOST_INTERRUPT_MAP_S 0 + +#define DPORT_PRO_EMAC_INT_MAP_REG (DR_REG_DPORT_BASE + 0x19C) +/* DPORT_PRO_EMAC_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_EMAC_INT_MAP 0x0000001F +#define DPORT_PRO_EMAC_INT_MAP_M ((DPORT_PRO_EMAC_INT_MAP_V)<<(DPORT_PRO_EMAC_INT_MAP_S)) +#define DPORT_PRO_EMAC_INT_MAP_V 0x1F +#define DPORT_PRO_EMAC_INT_MAP_S 0 + +#define DPORT_PRO_PWM0_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x1A0) +/* DPORT_PRO_PWM0_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_PWM0_INTR_MAP 0x0000001F +#define DPORT_PRO_PWM0_INTR_MAP_M ((DPORT_PRO_PWM0_INTR_MAP_V)<<(DPORT_PRO_PWM0_INTR_MAP_S)) +#define DPORT_PRO_PWM0_INTR_MAP_V 0x1F +#define DPORT_PRO_PWM0_INTR_MAP_S 0 + +#define DPORT_PRO_PWM1_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x1A4) +/* DPORT_PRO_PWM1_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_PWM1_INTR_MAP 0x0000001F +#define DPORT_PRO_PWM1_INTR_MAP_M ((DPORT_PRO_PWM1_INTR_MAP_V)<<(DPORT_PRO_PWM1_INTR_MAP_S)) +#define DPORT_PRO_PWM1_INTR_MAP_V 0x1F +#define DPORT_PRO_PWM1_INTR_MAP_S 0 + +#define DPORT_PRO_PWM2_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x1A8) +/* DPORT_PRO_PWM2_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_PWM2_INTR_MAP 0x0000001F +#define DPORT_PRO_PWM2_INTR_MAP_M ((DPORT_PRO_PWM2_INTR_MAP_V)<<(DPORT_PRO_PWM2_INTR_MAP_S)) +#define DPORT_PRO_PWM2_INTR_MAP_V 0x1F +#define DPORT_PRO_PWM2_INTR_MAP_S 0 + +#define DPORT_PRO_PWM3_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x1AC) +/* DPORT_PRO_PWM3_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_PWM3_INTR_MAP 0x0000001F +#define DPORT_PRO_PWM3_INTR_MAP_M ((DPORT_PRO_PWM3_INTR_MAP_V)<<(DPORT_PRO_PWM3_INTR_MAP_S)) +#define DPORT_PRO_PWM3_INTR_MAP_V 0x1F +#define DPORT_PRO_PWM3_INTR_MAP_S 0 + +#define DPORT_PRO_LEDC_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1B0) +/* DPORT_PRO_LEDC_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_LEDC_INT_MAP 0x0000001F +#define DPORT_PRO_LEDC_INT_MAP_M ((DPORT_PRO_LEDC_INT_MAP_V)<<(DPORT_PRO_LEDC_INT_MAP_S)) +#define DPORT_PRO_LEDC_INT_MAP_V 0x1F +#define DPORT_PRO_LEDC_INT_MAP_S 0 + +#define DPORT_PRO_EFUSE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1B4) +/* DPORT_PRO_EFUSE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_EFUSE_INT_MAP 0x0000001F +#define DPORT_PRO_EFUSE_INT_MAP_M ((DPORT_PRO_EFUSE_INT_MAP_V)<<(DPORT_PRO_EFUSE_INT_MAP_S)) +#define DPORT_PRO_EFUSE_INT_MAP_V 0x1F +#define DPORT_PRO_EFUSE_INT_MAP_S 0 + +#define DPORT_PRO_CAN_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1B8) +/* DPORT_PRO_CAN_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_CAN_INT_MAP 0x0000001F +#define DPORT_PRO_CAN_INT_MAP_M ((DPORT_PRO_CAN_INT_MAP_V)<<(DPORT_PRO_CAN_INT_MAP_S)) +#define DPORT_PRO_CAN_INT_MAP_V 0x1F +#define DPORT_PRO_CAN_INT_MAP_S 0 + +#define DPORT_PRO_RTC_CORE_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x1BC) +/* DPORT_PRO_RTC_CORE_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_RTC_CORE_INTR_MAP 0x0000001F +#define DPORT_PRO_RTC_CORE_INTR_MAP_M ((DPORT_PRO_RTC_CORE_INTR_MAP_V)<<(DPORT_PRO_RTC_CORE_INTR_MAP_S)) +#define DPORT_PRO_RTC_CORE_INTR_MAP_V 0x1F +#define DPORT_PRO_RTC_CORE_INTR_MAP_S 0 + +#define DPORT_PRO_RMT_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x1C0) +/* DPORT_PRO_RMT_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_RMT_INTR_MAP 0x0000001F +#define DPORT_PRO_RMT_INTR_MAP_M ((DPORT_PRO_RMT_INTR_MAP_V)<<(DPORT_PRO_RMT_INTR_MAP_S)) +#define DPORT_PRO_RMT_INTR_MAP_V 0x1F +#define DPORT_PRO_RMT_INTR_MAP_S 0 + +#define DPORT_PRO_PCNT_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x1C4) +/* DPORT_PRO_PCNT_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_PCNT_INTR_MAP 0x0000001F +#define DPORT_PRO_PCNT_INTR_MAP_M ((DPORT_PRO_PCNT_INTR_MAP_V)<<(DPORT_PRO_PCNT_INTR_MAP_S)) +#define DPORT_PRO_PCNT_INTR_MAP_V 0x1F +#define DPORT_PRO_PCNT_INTR_MAP_S 0 + +#define DPORT_PRO_I2C_EXT0_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x1C8) +/* DPORT_PRO_I2C_EXT0_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_I2C_EXT0_INTR_MAP 0x0000001F +#define DPORT_PRO_I2C_EXT0_INTR_MAP_M ((DPORT_PRO_I2C_EXT0_INTR_MAP_V)<<(DPORT_PRO_I2C_EXT0_INTR_MAP_S)) +#define DPORT_PRO_I2C_EXT0_INTR_MAP_V 0x1F +#define DPORT_PRO_I2C_EXT0_INTR_MAP_S 0 + +#define DPORT_PRO_I2C_EXT1_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x1CC) +/* DPORT_PRO_I2C_EXT1_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_I2C_EXT1_INTR_MAP 0x0000001F +#define DPORT_PRO_I2C_EXT1_INTR_MAP_M ((DPORT_PRO_I2C_EXT1_INTR_MAP_V)<<(DPORT_PRO_I2C_EXT1_INTR_MAP_S)) +#define DPORT_PRO_I2C_EXT1_INTR_MAP_V 0x1F +#define DPORT_PRO_I2C_EXT1_INTR_MAP_S 0 + +#define DPORT_PRO_RSA_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x1D0) +/* DPORT_PRO_RSA_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_RSA_INTR_MAP 0x0000001F +#define DPORT_PRO_RSA_INTR_MAP_M ((DPORT_PRO_RSA_INTR_MAP_V)<<(DPORT_PRO_RSA_INTR_MAP_S)) +#define DPORT_PRO_RSA_INTR_MAP_V 0x1F +#define DPORT_PRO_RSA_INTR_MAP_S 0 + +#define DPORT_PRO_SPI1_DMA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1D4) +/* DPORT_PRO_SPI1_DMA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_SPI1_DMA_INT_MAP 0x0000001F +#define DPORT_PRO_SPI1_DMA_INT_MAP_M ((DPORT_PRO_SPI1_DMA_INT_MAP_V)<<(DPORT_PRO_SPI1_DMA_INT_MAP_S)) +#define DPORT_PRO_SPI1_DMA_INT_MAP_V 0x1F +#define DPORT_PRO_SPI1_DMA_INT_MAP_S 0 + +#define DPORT_PRO_SPI2_DMA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1D8) +/* DPORT_PRO_SPI2_DMA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_SPI2_DMA_INT_MAP 0x0000001F +#define DPORT_PRO_SPI2_DMA_INT_MAP_M ((DPORT_PRO_SPI2_DMA_INT_MAP_V)<<(DPORT_PRO_SPI2_DMA_INT_MAP_S)) +#define DPORT_PRO_SPI2_DMA_INT_MAP_V 0x1F +#define DPORT_PRO_SPI2_DMA_INT_MAP_S 0 + +#define DPORT_PRO_SPI3_DMA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1DC) +/* DPORT_PRO_SPI3_DMA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_SPI3_DMA_INT_MAP 0x0000001F +#define DPORT_PRO_SPI3_DMA_INT_MAP_M ((DPORT_PRO_SPI3_DMA_INT_MAP_V)<<(DPORT_PRO_SPI3_DMA_INT_MAP_S)) +#define DPORT_PRO_SPI3_DMA_INT_MAP_V 0x1F +#define DPORT_PRO_SPI3_DMA_INT_MAP_S 0 + +#define DPORT_PRO_WDG_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1E0) +/* DPORT_PRO_WDG_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_WDG_INT_MAP 0x0000001F +#define DPORT_PRO_WDG_INT_MAP_M ((DPORT_PRO_WDG_INT_MAP_V)<<(DPORT_PRO_WDG_INT_MAP_S)) +#define DPORT_PRO_WDG_INT_MAP_V 0x1F +#define DPORT_PRO_WDG_INT_MAP_S 0 + +#define DPORT_PRO_TIMER_INT1_MAP_REG (DR_REG_DPORT_BASE + 0x1E4) +/* DPORT_PRO_TIMER_INT1_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TIMER_INT1_MAP 0x0000001F +#define DPORT_PRO_TIMER_INT1_MAP_M ((DPORT_PRO_TIMER_INT1_MAP_V)<<(DPORT_PRO_TIMER_INT1_MAP_S)) +#define DPORT_PRO_TIMER_INT1_MAP_V 0x1F +#define DPORT_PRO_TIMER_INT1_MAP_S 0 + +#define DPORT_PRO_TIMER_INT2_MAP_REG (DR_REG_DPORT_BASE + 0x1E8) +/* DPORT_PRO_TIMER_INT2_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TIMER_INT2_MAP 0x0000001F +#define DPORT_PRO_TIMER_INT2_MAP_M ((DPORT_PRO_TIMER_INT2_MAP_V)<<(DPORT_PRO_TIMER_INT2_MAP_S)) +#define DPORT_PRO_TIMER_INT2_MAP_V 0x1F +#define DPORT_PRO_TIMER_INT2_MAP_S 0 + +#define DPORT_PRO_TG_T0_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1EC) +/* DPORT_PRO_TG_T0_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG_T0_EDGE_INT_MAP 0x0000001F +#define DPORT_PRO_TG_T0_EDGE_INT_MAP_M ((DPORT_PRO_TG_T0_EDGE_INT_MAP_V)<<(DPORT_PRO_TG_T0_EDGE_INT_MAP_S)) +#define DPORT_PRO_TG_T0_EDGE_INT_MAP_V 0x1F +#define DPORT_PRO_TG_T0_EDGE_INT_MAP_S 0 + +#define DPORT_PRO_TG_T1_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1F0) +/* DPORT_PRO_TG_T1_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG_T1_EDGE_INT_MAP 0x0000001F +#define DPORT_PRO_TG_T1_EDGE_INT_MAP_M ((DPORT_PRO_TG_T1_EDGE_INT_MAP_V)<<(DPORT_PRO_TG_T1_EDGE_INT_MAP_S)) +#define DPORT_PRO_TG_T1_EDGE_INT_MAP_V 0x1F +#define DPORT_PRO_TG_T1_EDGE_INT_MAP_S 0 + +#define DPORT_PRO_TG_WDT_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1F4) +/* DPORT_PRO_TG_WDT_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG_WDT_EDGE_INT_MAP 0x0000001F +#define DPORT_PRO_TG_WDT_EDGE_INT_MAP_M ((DPORT_PRO_TG_WDT_EDGE_INT_MAP_V)<<(DPORT_PRO_TG_WDT_EDGE_INT_MAP_S)) +#define DPORT_PRO_TG_WDT_EDGE_INT_MAP_V 0x1F +#define DPORT_PRO_TG_WDT_EDGE_INT_MAP_S 0 + +#define DPORT_PRO_TG_LACT_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1F8) +/* DPORT_PRO_TG_LACT_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG_LACT_EDGE_INT_MAP 0x0000001F +#define DPORT_PRO_TG_LACT_EDGE_INT_MAP_M ((DPORT_PRO_TG_LACT_EDGE_INT_MAP_V)<<(DPORT_PRO_TG_LACT_EDGE_INT_MAP_S)) +#define DPORT_PRO_TG_LACT_EDGE_INT_MAP_V 0x1F +#define DPORT_PRO_TG_LACT_EDGE_INT_MAP_S 0 + +#define DPORT_PRO_TG1_T0_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x1FC) +/* DPORT_PRO_TG1_T0_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG1_T0_EDGE_INT_MAP 0x0000001F +#define DPORT_PRO_TG1_T0_EDGE_INT_MAP_M ((DPORT_PRO_TG1_T0_EDGE_INT_MAP_V)<<(DPORT_PRO_TG1_T0_EDGE_INT_MAP_S)) +#define DPORT_PRO_TG1_T0_EDGE_INT_MAP_V 0x1F +#define DPORT_PRO_TG1_T0_EDGE_INT_MAP_S 0 + +#define DPORT_PRO_TG1_T1_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x200) +/* DPORT_PRO_TG1_T1_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG1_T1_EDGE_INT_MAP 0x0000001F +#define DPORT_PRO_TG1_T1_EDGE_INT_MAP_M ((DPORT_PRO_TG1_T1_EDGE_INT_MAP_V)<<(DPORT_PRO_TG1_T1_EDGE_INT_MAP_S)) +#define DPORT_PRO_TG1_T1_EDGE_INT_MAP_V 0x1F +#define DPORT_PRO_TG1_T1_EDGE_INT_MAP_S 0 + +#define DPORT_PRO_TG1_WDT_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x204) +/* DPORT_PRO_TG1_WDT_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG1_WDT_EDGE_INT_MAP 0x0000001F +#define DPORT_PRO_TG1_WDT_EDGE_INT_MAP_M ((DPORT_PRO_TG1_WDT_EDGE_INT_MAP_V)<<(DPORT_PRO_TG1_WDT_EDGE_INT_MAP_S)) +#define DPORT_PRO_TG1_WDT_EDGE_INT_MAP_V 0x1F +#define DPORT_PRO_TG1_WDT_EDGE_INT_MAP_S 0 + +#define DPORT_PRO_TG1_LACT_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x208) +/* DPORT_PRO_TG1_LACT_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_TG1_LACT_EDGE_INT_MAP 0x0000001F +#define DPORT_PRO_TG1_LACT_EDGE_INT_MAP_M ((DPORT_PRO_TG1_LACT_EDGE_INT_MAP_V)<<(DPORT_PRO_TG1_LACT_EDGE_INT_MAP_S)) +#define DPORT_PRO_TG1_LACT_EDGE_INT_MAP_V 0x1F +#define DPORT_PRO_TG1_LACT_EDGE_INT_MAP_S 0 + +#define DPORT_PRO_MMU_IA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x20C) +/* DPORT_PRO_MMU_IA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_MMU_IA_INT_MAP 0x0000001F +#define DPORT_PRO_MMU_IA_INT_MAP_M ((DPORT_PRO_MMU_IA_INT_MAP_V)<<(DPORT_PRO_MMU_IA_INT_MAP_S)) +#define DPORT_PRO_MMU_IA_INT_MAP_V 0x1F +#define DPORT_PRO_MMU_IA_INT_MAP_S 0 + +#define DPORT_PRO_MPU_IA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x210) +/* DPORT_PRO_MPU_IA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_MPU_IA_INT_MAP 0x0000001F +#define DPORT_PRO_MPU_IA_INT_MAP_M ((DPORT_PRO_MPU_IA_INT_MAP_V)<<(DPORT_PRO_MPU_IA_INT_MAP_S)) +#define DPORT_PRO_MPU_IA_INT_MAP_V 0x1F +#define DPORT_PRO_MPU_IA_INT_MAP_S 0 + +#define DPORT_PRO_CACHE_IA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x214) +/* DPORT_PRO_CACHE_IA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_PRO_CACHE_IA_INT_MAP 0x0000001F +#define DPORT_PRO_CACHE_IA_INT_MAP_M ((DPORT_PRO_CACHE_IA_INT_MAP_V)<<(DPORT_PRO_CACHE_IA_INT_MAP_S)) +#define DPORT_PRO_CACHE_IA_INT_MAP_V 0x1F +#define DPORT_PRO_CACHE_IA_INT_MAP_S 0 + +#define DPORT_APP_MAC_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x218) +/* DPORT_APP_MAC_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_MAC_INTR_MAP 0x0000001F +#define DPORT_APP_MAC_INTR_MAP_M ((DPORT_APP_MAC_INTR_MAP_V)<<(DPORT_APP_MAC_INTR_MAP_S)) +#define DPORT_APP_MAC_INTR_MAP_V 0x1F +#define DPORT_APP_MAC_INTR_MAP_S 0 + +#define DPORT_APP_MAC_NMI_MAP_REG (DR_REG_DPORT_BASE + 0x21C) +/* DPORT_APP_MAC_NMI_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_MAC_NMI_MAP 0x0000001F +#define DPORT_APP_MAC_NMI_MAP_M ((DPORT_APP_MAC_NMI_MAP_V)<<(DPORT_APP_MAC_NMI_MAP_S)) +#define DPORT_APP_MAC_NMI_MAP_V 0x1F +#define DPORT_APP_MAC_NMI_MAP_S 0 + +#define DPORT_APP_BB_INT_MAP_REG (DR_REG_DPORT_BASE + 0x220) +/* DPORT_APP_BB_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_BB_INT_MAP 0x0000001F +#define DPORT_APP_BB_INT_MAP_M ((DPORT_APP_BB_INT_MAP_V)<<(DPORT_APP_BB_INT_MAP_S)) +#define DPORT_APP_BB_INT_MAP_V 0x1F +#define DPORT_APP_BB_INT_MAP_S 0 + +#define DPORT_APP_BT_MAC_INT_MAP_REG (DR_REG_DPORT_BASE + 0x224) +/* DPORT_APP_BT_MAC_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_BT_MAC_INT_MAP 0x0000001F +#define DPORT_APP_BT_MAC_INT_MAP_M ((DPORT_APP_BT_MAC_INT_MAP_V)<<(DPORT_APP_BT_MAC_INT_MAP_S)) +#define DPORT_APP_BT_MAC_INT_MAP_V 0x1F +#define DPORT_APP_BT_MAC_INT_MAP_S 0 + +#define DPORT_APP_BT_BB_INT_MAP_REG (DR_REG_DPORT_BASE + 0x228) +/* DPORT_APP_BT_BB_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_BT_BB_INT_MAP 0x0000001F +#define DPORT_APP_BT_BB_INT_MAP_M ((DPORT_APP_BT_BB_INT_MAP_V)<<(DPORT_APP_BT_BB_INT_MAP_S)) +#define DPORT_APP_BT_BB_INT_MAP_V 0x1F +#define DPORT_APP_BT_BB_INT_MAP_S 0 + +#define DPORT_APP_BT_BB_NMI_MAP_REG (DR_REG_DPORT_BASE + 0x22C) +/* DPORT_APP_BT_BB_NMI_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_BT_BB_NMI_MAP 0x0000001F +#define DPORT_APP_BT_BB_NMI_MAP_M ((DPORT_APP_BT_BB_NMI_MAP_V)<<(DPORT_APP_BT_BB_NMI_MAP_S)) +#define DPORT_APP_BT_BB_NMI_MAP_V 0x1F +#define DPORT_APP_BT_BB_NMI_MAP_S 0 + +#define DPORT_APP_RWBT_IRQ_MAP_REG (DR_REG_DPORT_BASE + 0x230) +/* DPORT_APP_RWBT_IRQ_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_RWBT_IRQ_MAP 0x0000001F +#define DPORT_APP_RWBT_IRQ_MAP_M ((DPORT_APP_RWBT_IRQ_MAP_V)<<(DPORT_APP_RWBT_IRQ_MAP_S)) +#define DPORT_APP_RWBT_IRQ_MAP_V 0x1F +#define DPORT_APP_RWBT_IRQ_MAP_S 0 + +#define DPORT_APP_RWBLE_IRQ_MAP_REG (DR_REG_DPORT_BASE + 0x234) +/* DPORT_APP_RWBLE_IRQ_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_RWBLE_IRQ_MAP 0x0000001F +#define DPORT_APP_RWBLE_IRQ_MAP_M ((DPORT_APP_RWBLE_IRQ_MAP_V)<<(DPORT_APP_RWBLE_IRQ_MAP_S)) +#define DPORT_APP_RWBLE_IRQ_MAP_V 0x1F +#define DPORT_APP_RWBLE_IRQ_MAP_S 0 + +#define DPORT_APP_RWBT_NMI_MAP_REG (DR_REG_DPORT_BASE + 0x238) +/* DPORT_APP_RWBT_NMI_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_RWBT_NMI_MAP 0x0000001F +#define DPORT_APP_RWBT_NMI_MAP_M ((DPORT_APP_RWBT_NMI_MAP_V)<<(DPORT_APP_RWBT_NMI_MAP_S)) +#define DPORT_APP_RWBT_NMI_MAP_V 0x1F +#define DPORT_APP_RWBT_NMI_MAP_S 0 + +#define DPORT_APP_RWBLE_NMI_MAP_REG (DR_REG_DPORT_BASE + 0x23C) +/* DPORT_APP_RWBLE_NMI_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_RWBLE_NMI_MAP 0x0000001F +#define DPORT_APP_RWBLE_NMI_MAP_M ((DPORT_APP_RWBLE_NMI_MAP_V)<<(DPORT_APP_RWBLE_NMI_MAP_S)) +#define DPORT_APP_RWBLE_NMI_MAP_V 0x1F +#define DPORT_APP_RWBLE_NMI_MAP_S 0 + +#define DPORT_APP_SLC0_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x240) +/* DPORT_APP_SLC0_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_SLC0_INTR_MAP 0x0000001F +#define DPORT_APP_SLC0_INTR_MAP_M ((DPORT_APP_SLC0_INTR_MAP_V)<<(DPORT_APP_SLC0_INTR_MAP_S)) +#define DPORT_APP_SLC0_INTR_MAP_V 0x1F +#define DPORT_APP_SLC0_INTR_MAP_S 0 + +#define DPORT_APP_SLC1_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x244) +/* DPORT_APP_SLC1_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_SLC1_INTR_MAP 0x0000001F +#define DPORT_APP_SLC1_INTR_MAP_M ((DPORT_APP_SLC1_INTR_MAP_V)<<(DPORT_APP_SLC1_INTR_MAP_S)) +#define DPORT_APP_SLC1_INTR_MAP_V 0x1F +#define DPORT_APP_SLC1_INTR_MAP_S 0 + +#define DPORT_APP_UHCI0_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x248) +/* DPORT_APP_UHCI0_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_UHCI0_INTR_MAP 0x0000001F +#define DPORT_APP_UHCI0_INTR_MAP_M ((DPORT_APP_UHCI0_INTR_MAP_V)<<(DPORT_APP_UHCI0_INTR_MAP_S)) +#define DPORT_APP_UHCI0_INTR_MAP_V 0x1F +#define DPORT_APP_UHCI0_INTR_MAP_S 0 + +#define DPORT_APP_UHCI1_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x24C) +/* DPORT_APP_UHCI1_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_UHCI1_INTR_MAP 0x0000001F +#define DPORT_APP_UHCI1_INTR_MAP_M ((DPORT_APP_UHCI1_INTR_MAP_V)<<(DPORT_APP_UHCI1_INTR_MAP_S)) +#define DPORT_APP_UHCI1_INTR_MAP_V 0x1F +#define DPORT_APP_UHCI1_INTR_MAP_S 0 + +#define DPORT_APP_TG_T0_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x250) +/* DPORT_APP_TG_T0_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG_T0_LEVEL_INT_MAP 0x0000001F +#define DPORT_APP_TG_T0_LEVEL_INT_MAP_M ((DPORT_APP_TG_T0_LEVEL_INT_MAP_V)<<(DPORT_APP_TG_T0_LEVEL_INT_MAP_S)) +#define DPORT_APP_TG_T0_LEVEL_INT_MAP_V 0x1F +#define DPORT_APP_TG_T0_LEVEL_INT_MAP_S 0 + +#define DPORT_APP_TG_T1_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x254) +/* DPORT_APP_TG_T1_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG_T1_LEVEL_INT_MAP 0x0000001F +#define DPORT_APP_TG_T1_LEVEL_INT_MAP_M ((DPORT_APP_TG_T1_LEVEL_INT_MAP_V)<<(DPORT_APP_TG_T1_LEVEL_INT_MAP_S)) +#define DPORT_APP_TG_T1_LEVEL_INT_MAP_V 0x1F +#define DPORT_APP_TG_T1_LEVEL_INT_MAP_S 0 + +#define DPORT_APP_TG_WDT_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x258) +/* DPORT_APP_TG_WDT_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG_WDT_LEVEL_INT_MAP 0x0000001F +#define DPORT_APP_TG_WDT_LEVEL_INT_MAP_M ((DPORT_APP_TG_WDT_LEVEL_INT_MAP_V)<<(DPORT_APP_TG_WDT_LEVEL_INT_MAP_S)) +#define DPORT_APP_TG_WDT_LEVEL_INT_MAP_V 0x1F +#define DPORT_APP_TG_WDT_LEVEL_INT_MAP_S 0 + +#define DPORT_APP_TG_LACT_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x25C) +/* DPORT_APP_TG_LACT_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG_LACT_LEVEL_INT_MAP 0x0000001F +#define DPORT_APP_TG_LACT_LEVEL_INT_MAP_M ((DPORT_APP_TG_LACT_LEVEL_INT_MAP_V)<<(DPORT_APP_TG_LACT_LEVEL_INT_MAP_S)) +#define DPORT_APP_TG_LACT_LEVEL_INT_MAP_V 0x1F +#define DPORT_APP_TG_LACT_LEVEL_INT_MAP_S 0 + +#define DPORT_APP_TG1_T0_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x260) +/* DPORT_APP_TG1_T0_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG1_T0_LEVEL_INT_MAP 0x0000001F +#define DPORT_APP_TG1_T0_LEVEL_INT_MAP_M ((DPORT_APP_TG1_T0_LEVEL_INT_MAP_V)<<(DPORT_APP_TG1_T0_LEVEL_INT_MAP_S)) +#define DPORT_APP_TG1_T0_LEVEL_INT_MAP_V 0x1F +#define DPORT_APP_TG1_T0_LEVEL_INT_MAP_S 0 + +#define DPORT_APP_TG1_T1_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x264) +/* DPORT_APP_TG1_T1_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG1_T1_LEVEL_INT_MAP 0x0000001F +#define DPORT_APP_TG1_T1_LEVEL_INT_MAP_M ((DPORT_APP_TG1_T1_LEVEL_INT_MAP_V)<<(DPORT_APP_TG1_T1_LEVEL_INT_MAP_S)) +#define DPORT_APP_TG1_T1_LEVEL_INT_MAP_V 0x1F +#define DPORT_APP_TG1_T1_LEVEL_INT_MAP_S 0 + +#define DPORT_APP_TG1_WDT_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x268) +/* DPORT_APP_TG1_WDT_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG1_WDT_LEVEL_INT_MAP 0x0000001F +#define DPORT_APP_TG1_WDT_LEVEL_INT_MAP_M ((DPORT_APP_TG1_WDT_LEVEL_INT_MAP_V)<<(DPORT_APP_TG1_WDT_LEVEL_INT_MAP_S)) +#define DPORT_APP_TG1_WDT_LEVEL_INT_MAP_V 0x1F +#define DPORT_APP_TG1_WDT_LEVEL_INT_MAP_S 0 + +#define DPORT_APP_TG1_LACT_LEVEL_INT_MAP_REG (DR_REG_DPORT_BASE + 0x26C) +/* DPORT_APP_TG1_LACT_LEVEL_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG1_LACT_LEVEL_INT_MAP 0x0000001F +#define DPORT_APP_TG1_LACT_LEVEL_INT_MAP_M ((DPORT_APP_TG1_LACT_LEVEL_INT_MAP_V)<<(DPORT_APP_TG1_LACT_LEVEL_INT_MAP_S)) +#define DPORT_APP_TG1_LACT_LEVEL_INT_MAP_V 0x1F +#define DPORT_APP_TG1_LACT_LEVEL_INT_MAP_S 0 + +#define DPORT_APP_GPIO_INTERRUPT_MAP_REG (DR_REG_DPORT_BASE + 0x270) +/* DPORT_APP_GPIO_INTERRUPT_APP_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_GPIO_INTERRUPT_APP_MAP 0x0000001F +#define DPORT_APP_GPIO_INTERRUPT_APP_MAP_M ((DPORT_APP_GPIO_INTERRUPT_APP_MAP_V)<<(DPORT_APP_GPIO_INTERRUPT_APP_MAP_S)) +#define DPORT_APP_GPIO_INTERRUPT_APP_MAP_V 0x1F +#define DPORT_APP_GPIO_INTERRUPT_APP_MAP_S 0 + +#define DPORT_APP_GPIO_INTERRUPT_NMI_MAP_REG (DR_REG_DPORT_BASE + 0x274) +/* DPORT_APP_GPIO_INTERRUPT_APP_NMI_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_GPIO_INTERRUPT_APP_NMI_MAP 0x0000001F +#define DPORT_APP_GPIO_INTERRUPT_APP_NMI_MAP_M ((DPORT_APP_GPIO_INTERRUPT_APP_NMI_MAP_V)<<(DPORT_APP_GPIO_INTERRUPT_APP_NMI_MAP_S)) +#define DPORT_APP_GPIO_INTERRUPT_APP_NMI_MAP_V 0x1F +#define DPORT_APP_GPIO_INTERRUPT_APP_NMI_MAP_S 0 + +#define DPORT_APP_CPU_INTR_FROM_CPU_0_MAP_REG (DR_REG_DPORT_BASE + 0x278) +/* DPORT_APP_CPU_INTR_FROM_CPU_0_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_CPU_INTR_FROM_CPU_0_MAP 0x0000001F +#define DPORT_APP_CPU_INTR_FROM_CPU_0_MAP_M ((DPORT_APP_CPU_INTR_FROM_CPU_0_MAP_V)<<(DPORT_APP_CPU_INTR_FROM_CPU_0_MAP_S)) +#define DPORT_APP_CPU_INTR_FROM_CPU_0_MAP_V 0x1F +#define DPORT_APP_CPU_INTR_FROM_CPU_0_MAP_S 0 + +#define DPORT_APP_CPU_INTR_FROM_CPU_1_MAP_REG (DR_REG_DPORT_BASE + 0x27C) +/* DPORT_APP_CPU_INTR_FROM_CPU_1_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_CPU_INTR_FROM_CPU_1_MAP 0x0000001F +#define DPORT_APP_CPU_INTR_FROM_CPU_1_MAP_M ((DPORT_APP_CPU_INTR_FROM_CPU_1_MAP_V)<<(DPORT_APP_CPU_INTR_FROM_CPU_1_MAP_S)) +#define DPORT_APP_CPU_INTR_FROM_CPU_1_MAP_V 0x1F +#define DPORT_APP_CPU_INTR_FROM_CPU_1_MAP_S 0 + +#define DPORT_APP_CPU_INTR_FROM_CPU_2_MAP_REG (DR_REG_DPORT_BASE + 0x280) +/* DPORT_APP_CPU_INTR_FROM_CPU_2_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_CPU_INTR_FROM_CPU_2_MAP 0x0000001F +#define DPORT_APP_CPU_INTR_FROM_CPU_2_MAP_M ((DPORT_APP_CPU_INTR_FROM_CPU_2_MAP_V)<<(DPORT_APP_CPU_INTR_FROM_CPU_2_MAP_S)) +#define DPORT_APP_CPU_INTR_FROM_CPU_2_MAP_V 0x1F +#define DPORT_APP_CPU_INTR_FROM_CPU_2_MAP_S 0 + +#define DPORT_APP_CPU_INTR_FROM_CPU_3_MAP_REG (DR_REG_DPORT_BASE + 0x284) +/* DPORT_APP_CPU_INTR_FROM_CPU_3_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_CPU_INTR_FROM_CPU_3_MAP 0x0000001F +#define DPORT_APP_CPU_INTR_FROM_CPU_3_MAP_M ((DPORT_APP_CPU_INTR_FROM_CPU_3_MAP_V)<<(DPORT_APP_CPU_INTR_FROM_CPU_3_MAP_S)) +#define DPORT_APP_CPU_INTR_FROM_CPU_3_MAP_V 0x1F +#define DPORT_APP_CPU_INTR_FROM_CPU_3_MAP_S 0 + +#define DPORT_APP_SPI_INTR_0_MAP_REG (DR_REG_DPORT_BASE + 0x288) +/* DPORT_APP_SPI_INTR_0_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_SPI_INTR_0_MAP 0x0000001F +#define DPORT_APP_SPI_INTR_0_MAP_M ((DPORT_APP_SPI_INTR_0_MAP_V)<<(DPORT_APP_SPI_INTR_0_MAP_S)) +#define DPORT_APP_SPI_INTR_0_MAP_V 0x1F +#define DPORT_APP_SPI_INTR_0_MAP_S 0 + +#define DPORT_APP_SPI_INTR_1_MAP_REG (DR_REG_DPORT_BASE + 0x28C) +/* DPORT_APP_SPI_INTR_1_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_SPI_INTR_1_MAP 0x0000001F +#define DPORT_APP_SPI_INTR_1_MAP_M ((DPORT_APP_SPI_INTR_1_MAP_V)<<(DPORT_APP_SPI_INTR_1_MAP_S)) +#define DPORT_APP_SPI_INTR_1_MAP_V 0x1F +#define DPORT_APP_SPI_INTR_1_MAP_S 0 + +#define DPORT_APP_SPI_INTR_2_MAP_REG (DR_REG_DPORT_BASE + 0x290) +/* DPORT_APP_SPI_INTR_2_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_SPI_INTR_2_MAP 0x0000001F +#define DPORT_APP_SPI_INTR_2_MAP_M ((DPORT_APP_SPI_INTR_2_MAP_V)<<(DPORT_APP_SPI_INTR_2_MAP_S)) +#define DPORT_APP_SPI_INTR_2_MAP_V 0x1F +#define DPORT_APP_SPI_INTR_2_MAP_S 0 + +#define DPORT_APP_SPI_INTR_3_MAP_REG (DR_REG_DPORT_BASE + 0x294) +/* DPORT_APP_SPI_INTR_3_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_SPI_INTR_3_MAP 0x0000001F +#define DPORT_APP_SPI_INTR_3_MAP_M ((DPORT_APP_SPI_INTR_3_MAP_V)<<(DPORT_APP_SPI_INTR_3_MAP_S)) +#define DPORT_APP_SPI_INTR_3_MAP_V 0x1F +#define DPORT_APP_SPI_INTR_3_MAP_S 0 + +#define DPORT_APP_I2S0_INT_MAP_REG (DR_REG_DPORT_BASE + 0x298) +/* DPORT_APP_I2S0_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_I2S0_INT_MAP 0x0000001F +#define DPORT_APP_I2S0_INT_MAP_M ((DPORT_APP_I2S0_INT_MAP_V)<<(DPORT_APP_I2S0_INT_MAP_S)) +#define DPORT_APP_I2S0_INT_MAP_V 0x1F +#define DPORT_APP_I2S0_INT_MAP_S 0 + +#define DPORT_APP_I2S1_INT_MAP_REG (DR_REG_DPORT_BASE + 0x29C) +/* DPORT_APP_I2S1_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_I2S1_INT_MAP 0x0000001F +#define DPORT_APP_I2S1_INT_MAP_M ((DPORT_APP_I2S1_INT_MAP_V)<<(DPORT_APP_I2S1_INT_MAP_S)) +#define DPORT_APP_I2S1_INT_MAP_V 0x1F +#define DPORT_APP_I2S1_INT_MAP_S 0 + +#define DPORT_APP_UART_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2A0) +/* DPORT_APP_UART_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_UART_INTR_MAP 0x0000001F +#define DPORT_APP_UART_INTR_MAP_M ((DPORT_APP_UART_INTR_MAP_V)<<(DPORT_APP_UART_INTR_MAP_S)) +#define DPORT_APP_UART_INTR_MAP_V 0x1F +#define DPORT_APP_UART_INTR_MAP_S 0 + +#define DPORT_APP_UART1_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2A4) +/* DPORT_APP_UART1_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_UART1_INTR_MAP 0x0000001F +#define DPORT_APP_UART1_INTR_MAP_M ((DPORT_APP_UART1_INTR_MAP_V)<<(DPORT_APP_UART1_INTR_MAP_S)) +#define DPORT_APP_UART1_INTR_MAP_V 0x1F +#define DPORT_APP_UART1_INTR_MAP_S 0 + +#define DPORT_APP_UART2_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2A8) +/* DPORT_APP_UART2_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_UART2_INTR_MAP 0x0000001F +#define DPORT_APP_UART2_INTR_MAP_M ((DPORT_APP_UART2_INTR_MAP_V)<<(DPORT_APP_UART2_INTR_MAP_S)) +#define DPORT_APP_UART2_INTR_MAP_V 0x1F +#define DPORT_APP_UART2_INTR_MAP_S 0 + +#define DPORT_APP_SDIO_HOST_INTERRUPT_MAP_REG (DR_REG_DPORT_BASE + 0x2AC) +/* DPORT_APP_SDIO_HOST_INTERRUPT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_SDIO_HOST_INTERRUPT_MAP 0x0000001F +#define DPORT_APP_SDIO_HOST_INTERRUPT_MAP_M ((DPORT_APP_SDIO_HOST_INTERRUPT_MAP_V)<<(DPORT_APP_SDIO_HOST_INTERRUPT_MAP_S)) +#define DPORT_APP_SDIO_HOST_INTERRUPT_MAP_V 0x1F +#define DPORT_APP_SDIO_HOST_INTERRUPT_MAP_S 0 + +#define DPORT_APP_EMAC_INT_MAP_REG (DR_REG_DPORT_BASE + 0x2B0) +/* DPORT_APP_EMAC_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_EMAC_INT_MAP 0x0000001F +#define DPORT_APP_EMAC_INT_MAP_M ((DPORT_APP_EMAC_INT_MAP_V)<<(DPORT_APP_EMAC_INT_MAP_S)) +#define DPORT_APP_EMAC_INT_MAP_V 0x1F +#define DPORT_APP_EMAC_INT_MAP_S 0 + +#define DPORT_APP_PWM0_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2B4) +/* DPORT_APP_PWM0_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_PWM0_INTR_MAP 0x0000001F +#define DPORT_APP_PWM0_INTR_MAP_M ((DPORT_APP_PWM0_INTR_MAP_V)<<(DPORT_APP_PWM0_INTR_MAP_S)) +#define DPORT_APP_PWM0_INTR_MAP_V 0x1F +#define DPORT_APP_PWM0_INTR_MAP_S 0 + +#define DPORT_APP_PWM1_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2B8) +/* DPORT_APP_PWM1_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_PWM1_INTR_MAP 0x0000001F +#define DPORT_APP_PWM1_INTR_MAP_M ((DPORT_APP_PWM1_INTR_MAP_V)<<(DPORT_APP_PWM1_INTR_MAP_S)) +#define DPORT_APP_PWM1_INTR_MAP_V 0x1F +#define DPORT_APP_PWM1_INTR_MAP_S 0 + +#define DPORT_APP_PWM2_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2BC) +/* DPORT_APP_PWM2_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_PWM2_INTR_MAP 0x0000001F +#define DPORT_APP_PWM2_INTR_MAP_M ((DPORT_APP_PWM2_INTR_MAP_V)<<(DPORT_APP_PWM2_INTR_MAP_S)) +#define DPORT_APP_PWM2_INTR_MAP_V 0x1F +#define DPORT_APP_PWM2_INTR_MAP_S 0 + +#define DPORT_APP_PWM3_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2C0) +/* DPORT_APP_PWM3_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_PWM3_INTR_MAP 0x0000001F +#define DPORT_APP_PWM3_INTR_MAP_M ((DPORT_APP_PWM3_INTR_MAP_V)<<(DPORT_APP_PWM3_INTR_MAP_S)) +#define DPORT_APP_PWM3_INTR_MAP_V 0x1F +#define DPORT_APP_PWM3_INTR_MAP_S 0 + +#define DPORT_APP_LEDC_INT_MAP_REG (DR_REG_DPORT_BASE + 0x2C4) +/* DPORT_APP_LEDC_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_LEDC_INT_MAP 0x0000001F +#define DPORT_APP_LEDC_INT_MAP_M ((DPORT_APP_LEDC_INT_MAP_V)<<(DPORT_APP_LEDC_INT_MAP_S)) +#define DPORT_APP_LEDC_INT_MAP_V 0x1F +#define DPORT_APP_LEDC_INT_MAP_S 0 + +#define DPORT_APP_EFUSE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x2C8) +/* DPORT_APP_EFUSE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_EFUSE_INT_MAP 0x0000001F +#define DPORT_APP_EFUSE_INT_MAP_M ((DPORT_APP_EFUSE_INT_MAP_V)<<(DPORT_APP_EFUSE_INT_MAP_S)) +#define DPORT_APP_EFUSE_INT_MAP_V 0x1F +#define DPORT_APP_EFUSE_INT_MAP_S 0 + +#define DPORT_APP_CAN_INT_MAP_REG (DR_REG_DPORT_BASE + 0x2CC) +/* DPORT_APP_CAN_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_CAN_INT_MAP 0x0000001F +#define DPORT_APP_CAN_INT_MAP_M ((DPORT_APP_CAN_INT_MAP_V)<<(DPORT_APP_CAN_INT_MAP_S)) +#define DPORT_APP_CAN_INT_MAP_V 0x1F +#define DPORT_APP_CAN_INT_MAP_S 0 + +#define DPORT_APP_RTC_CORE_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2D0) +/* DPORT_APP_RTC_CORE_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_RTC_CORE_INTR_MAP 0x0000001F +#define DPORT_APP_RTC_CORE_INTR_MAP_M ((DPORT_APP_RTC_CORE_INTR_MAP_V)<<(DPORT_APP_RTC_CORE_INTR_MAP_S)) +#define DPORT_APP_RTC_CORE_INTR_MAP_V 0x1F +#define DPORT_APP_RTC_CORE_INTR_MAP_S 0 + +#define DPORT_APP_RMT_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2D4) +/* DPORT_APP_RMT_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_RMT_INTR_MAP 0x0000001F +#define DPORT_APP_RMT_INTR_MAP_M ((DPORT_APP_RMT_INTR_MAP_V)<<(DPORT_APP_RMT_INTR_MAP_S)) +#define DPORT_APP_RMT_INTR_MAP_V 0x1F +#define DPORT_APP_RMT_INTR_MAP_S 0 + +#define DPORT_APP_PCNT_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2D8) +/* DPORT_APP_PCNT_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_PCNT_INTR_MAP 0x0000001F +#define DPORT_APP_PCNT_INTR_MAP_M ((DPORT_APP_PCNT_INTR_MAP_V)<<(DPORT_APP_PCNT_INTR_MAP_S)) +#define DPORT_APP_PCNT_INTR_MAP_V 0x1F +#define DPORT_APP_PCNT_INTR_MAP_S 0 + +#define DPORT_APP_I2C_EXT0_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2DC) +/* DPORT_APP_I2C_EXT0_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_I2C_EXT0_INTR_MAP 0x0000001F +#define DPORT_APP_I2C_EXT0_INTR_MAP_M ((DPORT_APP_I2C_EXT0_INTR_MAP_V)<<(DPORT_APP_I2C_EXT0_INTR_MAP_S)) +#define DPORT_APP_I2C_EXT0_INTR_MAP_V 0x1F +#define DPORT_APP_I2C_EXT0_INTR_MAP_S 0 + +#define DPORT_APP_I2C_EXT1_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2E0) +/* DPORT_APP_I2C_EXT1_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_I2C_EXT1_INTR_MAP 0x0000001F +#define DPORT_APP_I2C_EXT1_INTR_MAP_M ((DPORT_APP_I2C_EXT1_INTR_MAP_V)<<(DPORT_APP_I2C_EXT1_INTR_MAP_S)) +#define DPORT_APP_I2C_EXT1_INTR_MAP_V 0x1F +#define DPORT_APP_I2C_EXT1_INTR_MAP_S 0 + +#define DPORT_APP_RSA_INTR_MAP_REG (DR_REG_DPORT_BASE + 0x2E4) +/* DPORT_APP_RSA_INTR_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_RSA_INTR_MAP 0x0000001F +#define DPORT_APP_RSA_INTR_MAP_M ((DPORT_APP_RSA_INTR_MAP_V)<<(DPORT_APP_RSA_INTR_MAP_S)) +#define DPORT_APP_RSA_INTR_MAP_V 0x1F +#define DPORT_APP_RSA_INTR_MAP_S 0 + +#define DPORT_APP_SPI1_DMA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x2E8) +/* DPORT_APP_SPI1_DMA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_SPI1_DMA_INT_MAP 0x0000001F +#define DPORT_APP_SPI1_DMA_INT_MAP_M ((DPORT_APP_SPI1_DMA_INT_MAP_V)<<(DPORT_APP_SPI1_DMA_INT_MAP_S)) +#define DPORT_APP_SPI1_DMA_INT_MAP_V 0x1F +#define DPORT_APP_SPI1_DMA_INT_MAP_S 0 + +#define DPORT_APP_SPI2_DMA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x2EC) +/* DPORT_APP_SPI2_DMA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_SPI2_DMA_INT_MAP 0x0000001F +#define DPORT_APP_SPI2_DMA_INT_MAP_M ((DPORT_APP_SPI2_DMA_INT_MAP_V)<<(DPORT_APP_SPI2_DMA_INT_MAP_S)) +#define DPORT_APP_SPI2_DMA_INT_MAP_V 0x1F +#define DPORT_APP_SPI2_DMA_INT_MAP_S 0 + +#define DPORT_APP_SPI3_DMA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x2F0) +/* DPORT_APP_SPI3_DMA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_SPI3_DMA_INT_MAP 0x0000001F +#define DPORT_APP_SPI3_DMA_INT_MAP_M ((DPORT_APP_SPI3_DMA_INT_MAP_V)<<(DPORT_APP_SPI3_DMA_INT_MAP_S)) +#define DPORT_APP_SPI3_DMA_INT_MAP_V 0x1F +#define DPORT_APP_SPI3_DMA_INT_MAP_S 0 + +#define DPORT_APP_WDG_INT_MAP_REG (DR_REG_DPORT_BASE + 0x2F4) +/* DPORT_APP_WDG_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_WDG_INT_MAP 0x0000001F +#define DPORT_APP_WDG_INT_MAP_M ((DPORT_APP_WDG_INT_MAP_V)<<(DPORT_APP_WDG_INT_MAP_S)) +#define DPORT_APP_WDG_INT_MAP_V 0x1F +#define DPORT_APP_WDG_INT_MAP_S 0 + +#define DPORT_APP_TIMER_INT1_MAP_REG (DR_REG_DPORT_BASE + 0x2F8) +/* DPORT_APP_TIMER_INT1_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TIMER_INT1_MAP 0x0000001F +#define DPORT_APP_TIMER_INT1_MAP_M ((DPORT_APP_TIMER_INT1_MAP_V)<<(DPORT_APP_TIMER_INT1_MAP_S)) +#define DPORT_APP_TIMER_INT1_MAP_V 0x1F +#define DPORT_APP_TIMER_INT1_MAP_S 0 + +#define DPORT_APP_TIMER_INT2_MAP_REG (DR_REG_DPORT_BASE + 0x2FC) +/* DPORT_APP_TIMER_INT2_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TIMER_INT2_MAP 0x0000001F +#define DPORT_APP_TIMER_INT2_MAP_M ((DPORT_APP_TIMER_INT2_MAP_V)<<(DPORT_APP_TIMER_INT2_MAP_S)) +#define DPORT_APP_TIMER_INT2_MAP_V 0x1F +#define DPORT_APP_TIMER_INT2_MAP_S 0 + +#define DPORT_APP_TG_T0_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x300) +/* DPORT_APP_TG_T0_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG_T0_EDGE_INT_MAP 0x0000001F +#define DPORT_APP_TG_T0_EDGE_INT_MAP_M ((DPORT_APP_TG_T0_EDGE_INT_MAP_V)<<(DPORT_APP_TG_T0_EDGE_INT_MAP_S)) +#define DPORT_APP_TG_T0_EDGE_INT_MAP_V 0x1F +#define DPORT_APP_TG_T0_EDGE_INT_MAP_S 0 + +#define DPORT_APP_TG_T1_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x304) +/* DPORT_APP_TG_T1_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG_T1_EDGE_INT_MAP 0x0000001F +#define DPORT_APP_TG_T1_EDGE_INT_MAP_M ((DPORT_APP_TG_T1_EDGE_INT_MAP_V)<<(DPORT_APP_TG_T1_EDGE_INT_MAP_S)) +#define DPORT_APP_TG_T1_EDGE_INT_MAP_V 0x1F +#define DPORT_APP_TG_T1_EDGE_INT_MAP_S 0 + +#define DPORT_APP_TG_WDT_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x308) +/* DPORT_APP_TG_WDT_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG_WDT_EDGE_INT_MAP 0x0000001F +#define DPORT_APP_TG_WDT_EDGE_INT_MAP_M ((DPORT_APP_TG_WDT_EDGE_INT_MAP_V)<<(DPORT_APP_TG_WDT_EDGE_INT_MAP_S)) +#define DPORT_APP_TG_WDT_EDGE_INT_MAP_V 0x1F +#define DPORT_APP_TG_WDT_EDGE_INT_MAP_S 0 + +#define DPORT_APP_TG_LACT_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x30C) +/* DPORT_APP_TG_LACT_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG_LACT_EDGE_INT_MAP 0x0000001F +#define DPORT_APP_TG_LACT_EDGE_INT_MAP_M ((DPORT_APP_TG_LACT_EDGE_INT_MAP_V)<<(DPORT_APP_TG_LACT_EDGE_INT_MAP_S)) +#define DPORT_APP_TG_LACT_EDGE_INT_MAP_V 0x1F +#define DPORT_APP_TG_LACT_EDGE_INT_MAP_S 0 + +#define DPORT_APP_TG1_T0_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x310) +/* DPORT_APP_TG1_T0_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG1_T0_EDGE_INT_MAP 0x0000001F +#define DPORT_APP_TG1_T0_EDGE_INT_MAP_M ((DPORT_APP_TG1_T0_EDGE_INT_MAP_V)<<(DPORT_APP_TG1_T0_EDGE_INT_MAP_S)) +#define DPORT_APP_TG1_T0_EDGE_INT_MAP_V 0x1F +#define DPORT_APP_TG1_T0_EDGE_INT_MAP_S 0 + +#define DPORT_APP_TG1_T1_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x314) +/* DPORT_APP_TG1_T1_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG1_T1_EDGE_INT_MAP 0x0000001F +#define DPORT_APP_TG1_T1_EDGE_INT_MAP_M ((DPORT_APP_TG1_T1_EDGE_INT_MAP_V)<<(DPORT_APP_TG1_T1_EDGE_INT_MAP_S)) +#define DPORT_APP_TG1_T1_EDGE_INT_MAP_V 0x1F +#define DPORT_APP_TG1_T1_EDGE_INT_MAP_S 0 + +#define DPORT_APP_TG1_WDT_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x318) +/* DPORT_APP_TG1_WDT_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG1_WDT_EDGE_INT_MAP 0x0000001F +#define DPORT_APP_TG1_WDT_EDGE_INT_MAP_M ((DPORT_APP_TG1_WDT_EDGE_INT_MAP_V)<<(DPORT_APP_TG1_WDT_EDGE_INT_MAP_S)) +#define DPORT_APP_TG1_WDT_EDGE_INT_MAP_V 0x1F +#define DPORT_APP_TG1_WDT_EDGE_INT_MAP_S 0 + +#define DPORT_APP_TG1_LACT_EDGE_INT_MAP_REG (DR_REG_DPORT_BASE + 0x31C) +/* DPORT_APP_TG1_LACT_EDGE_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_TG1_LACT_EDGE_INT_MAP 0x0000001F +#define DPORT_APP_TG1_LACT_EDGE_INT_MAP_M ((DPORT_APP_TG1_LACT_EDGE_INT_MAP_V)<<(DPORT_APP_TG1_LACT_EDGE_INT_MAP_S)) +#define DPORT_APP_TG1_LACT_EDGE_INT_MAP_V 0x1F +#define DPORT_APP_TG1_LACT_EDGE_INT_MAP_S 0 + +#define DPORT_APP_MMU_IA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x320) +/* DPORT_APP_MMU_IA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_MMU_IA_INT_MAP 0x0000001F +#define DPORT_APP_MMU_IA_INT_MAP_M ((DPORT_APP_MMU_IA_INT_MAP_V)<<(DPORT_APP_MMU_IA_INT_MAP_S)) +#define DPORT_APP_MMU_IA_INT_MAP_V 0x1F +#define DPORT_APP_MMU_IA_INT_MAP_S 0 + +#define DPORT_APP_MPU_IA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x324) +/* DPORT_APP_MPU_IA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_MPU_IA_INT_MAP 0x0000001F +#define DPORT_APP_MPU_IA_INT_MAP_M ((DPORT_APP_MPU_IA_INT_MAP_V)<<(DPORT_APP_MPU_IA_INT_MAP_S)) +#define DPORT_APP_MPU_IA_INT_MAP_V 0x1F +#define DPORT_APP_MPU_IA_INT_MAP_S 0 + +#define DPORT_APP_CACHE_IA_INT_MAP_REG (DR_REG_DPORT_BASE + 0x328) +/* DPORT_APP_CACHE_IA_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */ +/*description: */ +#define DPORT_APP_CACHE_IA_INT_MAP 0x0000001F +#define DPORT_APP_CACHE_IA_INT_MAP_M ((DPORT_APP_CACHE_IA_INT_MAP_V)<<(DPORT_APP_CACHE_IA_INT_MAP_S)) +#define DPORT_APP_CACHE_IA_INT_MAP_V 0x1F +#define DPORT_APP_CACHE_IA_INT_MAP_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_UART_REG (DR_REG_DPORT_BASE + 0x32C) +/* DPORT_UART_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_UART_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_UART_ACCESS_GRANT_CONFIG_M ((DPORT_UART_ACCESS_GRANT_CONFIG_V)<<(DPORT_UART_ACCESS_GRANT_CONFIG_S)) +#define DPORT_UART_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_UART_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_SPI1_REG (DR_REG_DPORT_BASE + 0x330) +/* DPORT_SPI1_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_SPI1_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_SPI1_ACCESS_GRANT_CONFIG_M ((DPORT_SPI1_ACCESS_GRANT_CONFIG_V)<<(DPORT_SPI1_ACCESS_GRANT_CONFIG_S)) +#define DPORT_SPI1_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_SPI1_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_SPI0_REG (DR_REG_DPORT_BASE + 0x334) +/* DPORT_SPI0_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_SPI0_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_SPI0_ACCESS_GRANT_CONFIG_M ((DPORT_SPI0_ACCESS_GRANT_CONFIG_V)<<(DPORT_SPI0_ACCESS_GRANT_CONFIG_S)) +#define DPORT_SPI0_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_SPI0_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_GPIO_REG (DR_REG_DPORT_BASE + 0x338) +/* DPORT_GPIO_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_GPIO_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_GPIO_ACCESS_GRANT_CONFIG_M ((DPORT_GPIO_ACCESS_GRANT_CONFIG_V)<<(DPORT_GPIO_ACCESS_GRANT_CONFIG_S)) +#define DPORT_GPIO_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_GPIO_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_FE2_REG (DR_REG_DPORT_BASE + 0x33C) +/* DPORT_FE2_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_FE2_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_FE2_ACCESS_GRANT_CONFIG_M ((DPORT_FE2_ACCESS_GRANT_CONFIG_V)<<(DPORT_FE2_ACCESS_GRANT_CONFIG_S)) +#define DPORT_FE2_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_FE2_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_FE_REG (DR_REG_DPORT_BASE + 0x340) +/* DPORT_FE_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_FE_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_FE_ACCESS_GRANT_CONFIG_M ((DPORT_FE_ACCESS_GRANT_CONFIG_V)<<(DPORT_FE_ACCESS_GRANT_CONFIG_S)) +#define DPORT_FE_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_FE_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_TIMER_REG (DR_REG_DPORT_BASE + 0x344) +/* DPORT_TIMER_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_TIMER_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_TIMER_ACCESS_GRANT_CONFIG_M ((DPORT_TIMER_ACCESS_GRANT_CONFIG_V)<<(DPORT_TIMER_ACCESS_GRANT_CONFIG_S)) +#define DPORT_TIMER_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_TIMER_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_RTC_REG (DR_REG_DPORT_BASE + 0x348) +/* DPORT_RTC_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_RTC_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_RTC_ACCESS_GRANT_CONFIG_M ((DPORT_RTC_ACCESS_GRANT_CONFIG_V)<<(DPORT_RTC_ACCESS_GRANT_CONFIG_S)) +#define DPORT_RTC_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_RTC_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_IO_MUX_REG (DR_REG_DPORT_BASE + 0x34C) +/* DPORT_IOMUX_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_IOMUX_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_IOMUX_ACCESS_GRANT_CONFIG_M ((DPORT_IOMUX_ACCESS_GRANT_CONFIG_V)<<(DPORT_IOMUX_ACCESS_GRANT_CONFIG_S)) +#define DPORT_IOMUX_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_IOMUX_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_WDG_REG (DR_REG_DPORT_BASE + 0x350) +/* DPORT_WDG_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_WDG_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_WDG_ACCESS_GRANT_CONFIG_M ((DPORT_WDG_ACCESS_GRANT_CONFIG_V)<<(DPORT_WDG_ACCESS_GRANT_CONFIG_S)) +#define DPORT_WDG_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_WDG_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_HINF_REG (DR_REG_DPORT_BASE + 0x354) +/* DPORT_HINF_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_HINF_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_HINF_ACCESS_GRANT_CONFIG_M ((DPORT_HINF_ACCESS_GRANT_CONFIG_V)<<(DPORT_HINF_ACCESS_GRANT_CONFIG_S)) +#define DPORT_HINF_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_HINF_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_UHCI1_REG (DR_REG_DPORT_BASE + 0x358) +/* DPORT_UHCI1_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_UHCI1_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_UHCI1_ACCESS_GRANT_CONFIG_M ((DPORT_UHCI1_ACCESS_GRANT_CONFIG_V)<<(DPORT_UHCI1_ACCESS_GRANT_CONFIG_S)) +#define DPORT_UHCI1_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_UHCI1_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_MISC_REG (DR_REG_DPORT_BASE + 0x35C) +/* DPORT_MISC_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_MISC_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_MISC_ACCESS_GRANT_CONFIG_M ((DPORT_MISC_ACCESS_GRANT_CONFIG_V)<<(DPORT_MISC_ACCESS_GRANT_CONFIG_S)) +#define DPORT_MISC_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_MISC_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_I2C_REG (DR_REG_DPORT_BASE + 0x360) +/* DPORT_I2C_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_I2C_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_I2C_ACCESS_GRANT_CONFIG_M ((DPORT_I2C_ACCESS_GRANT_CONFIG_V)<<(DPORT_I2C_ACCESS_GRANT_CONFIG_S)) +#define DPORT_I2C_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_I2C_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_I2S0_REG (DR_REG_DPORT_BASE + 0x364) +/* DPORT_I2S0_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_I2S0_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_I2S0_ACCESS_GRANT_CONFIG_M ((DPORT_I2S0_ACCESS_GRANT_CONFIG_V)<<(DPORT_I2S0_ACCESS_GRANT_CONFIG_S)) +#define DPORT_I2S0_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_I2S0_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_UART1_REG (DR_REG_DPORT_BASE + 0x368) +/* DPORT_UART1_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_UART1_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_UART1_ACCESS_GRANT_CONFIG_M ((DPORT_UART1_ACCESS_GRANT_CONFIG_V)<<(DPORT_UART1_ACCESS_GRANT_CONFIG_S)) +#define DPORT_UART1_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_UART1_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_BT_REG (DR_REG_DPORT_BASE + 0x36C) +/* DPORT_BT_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_BT_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_BT_ACCESS_GRANT_CONFIG_M ((DPORT_BT_ACCESS_GRANT_CONFIG_V)<<(DPORT_BT_ACCESS_GRANT_CONFIG_S)) +#define DPORT_BT_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_BT_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_BT_BUFFER_REG (DR_REG_DPORT_BASE + 0x370) +/* DPORT_BTBUFFER_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_BTBUFFER_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_BTBUFFER_ACCESS_GRANT_CONFIG_M ((DPORT_BTBUFFER_ACCESS_GRANT_CONFIG_V)<<(DPORT_BTBUFFER_ACCESS_GRANT_CONFIG_S)) +#define DPORT_BTBUFFER_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_BTBUFFER_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_I2C_EXT0_REG (DR_REG_DPORT_BASE + 0x374) +/* DPORT_I2CEXT0_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_I2CEXT0_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_I2CEXT0_ACCESS_GRANT_CONFIG_M ((DPORT_I2CEXT0_ACCESS_GRANT_CONFIG_V)<<(DPORT_I2CEXT0_ACCESS_GRANT_CONFIG_S)) +#define DPORT_I2CEXT0_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_I2CEXT0_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_UHCI0_REG (DR_REG_DPORT_BASE + 0x378) +/* DPORT_UHCI0_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_UHCI0_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_UHCI0_ACCESS_GRANT_CONFIG_M ((DPORT_UHCI0_ACCESS_GRANT_CONFIG_V)<<(DPORT_UHCI0_ACCESS_GRANT_CONFIG_S)) +#define DPORT_UHCI0_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_UHCI0_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_SLCHOST_REG (DR_REG_DPORT_BASE + 0x37C) +/* DPORT_SLCHOST_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_SLCHOST_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_SLCHOST_ACCESS_GRANT_CONFIG_M ((DPORT_SLCHOST_ACCESS_GRANT_CONFIG_V)<<(DPORT_SLCHOST_ACCESS_GRANT_CONFIG_S)) +#define DPORT_SLCHOST_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_SLCHOST_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_RMT_REG (DR_REG_DPORT_BASE + 0x380) +/* DPORT_RMT_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_RMT_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_RMT_ACCESS_GRANT_CONFIG_M ((DPORT_RMT_ACCESS_GRANT_CONFIG_V)<<(DPORT_RMT_ACCESS_GRANT_CONFIG_S)) +#define DPORT_RMT_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_RMT_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_PCNT_REG (DR_REG_DPORT_BASE + 0x384) +/* DPORT_PCNT_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_PCNT_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_PCNT_ACCESS_GRANT_CONFIG_M ((DPORT_PCNT_ACCESS_GRANT_CONFIG_V)<<(DPORT_PCNT_ACCESS_GRANT_CONFIG_S)) +#define DPORT_PCNT_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_PCNT_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_SLC_REG (DR_REG_DPORT_BASE + 0x388) +/* DPORT_SLC_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_SLC_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_SLC_ACCESS_GRANT_CONFIG_M ((DPORT_SLC_ACCESS_GRANT_CONFIG_V)<<(DPORT_SLC_ACCESS_GRANT_CONFIG_S)) +#define DPORT_SLC_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_SLC_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_LEDC_REG (DR_REG_DPORT_BASE + 0x38C) +/* DPORT_LEDC_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_LEDC_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_LEDC_ACCESS_GRANT_CONFIG_M ((DPORT_LEDC_ACCESS_GRANT_CONFIG_V)<<(DPORT_LEDC_ACCESS_GRANT_CONFIG_S)) +#define DPORT_LEDC_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_LEDC_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_EFUSE_REG (DR_REG_DPORT_BASE + 0x390) +/* DPORT_EFUSE_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_EFUSE_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_EFUSE_ACCESS_GRANT_CONFIG_M ((DPORT_EFUSE_ACCESS_GRANT_CONFIG_V)<<(DPORT_EFUSE_ACCESS_GRANT_CONFIG_S)) +#define DPORT_EFUSE_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_EFUSE_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_SPI_ENCRYPT_REG (DR_REG_DPORT_BASE + 0x394) +/* DPORT_SPI_ENCRYPY_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_SPI_ENCRYPY_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_SPI_ENCRYPY_ACCESS_GRANT_CONFIG_M ((DPORT_SPI_ENCRYPY_ACCESS_GRANT_CONFIG_V)<<(DPORT_SPI_ENCRYPY_ACCESS_GRANT_CONFIG_S)) +#define DPORT_SPI_ENCRYPY_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_SPI_ENCRYPY_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_BB_REG (DR_REG_DPORT_BASE + 0x398) +/* DPORT_BB_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_BB_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_BB_ACCESS_GRANT_CONFIG_M ((DPORT_BB_ACCESS_GRANT_CONFIG_V)<<(DPORT_BB_ACCESS_GRANT_CONFIG_S)) +#define DPORT_BB_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_BB_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_PWM0_REG (DR_REG_DPORT_BASE + 0x39C) +/* DPORT_PWM0_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_PWM0_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_PWM0_ACCESS_GRANT_CONFIG_M ((DPORT_PWM0_ACCESS_GRANT_CONFIG_V)<<(DPORT_PWM0_ACCESS_GRANT_CONFIG_S)) +#define DPORT_PWM0_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_PWM0_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_TIMERGROUP_REG (DR_REG_DPORT_BASE + 0x3A0) +/* DPORT_TIMERGROUP_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_TIMERGROUP_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_TIMERGROUP_ACCESS_GRANT_CONFIG_M ((DPORT_TIMERGROUP_ACCESS_GRANT_CONFIG_V)<<(DPORT_TIMERGROUP_ACCESS_GRANT_CONFIG_S)) +#define DPORT_TIMERGROUP_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_TIMERGROUP_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_TIMERGROUP1_REG (DR_REG_DPORT_BASE + 0x3A4) +/* DPORT_TIMERGROUP1_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_TIMERGROUP1_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_TIMERGROUP1_ACCESS_GRANT_CONFIG_M ((DPORT_TIMERGROUP1_ACCESS_GRANT_CONFIG_V)<<(DPORT_TIMERGROUP1_ACCESS_GRANT_CONFIG_S)) +#define DPORT_TIMERGROUP1_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_TIMERGROUP1_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_SPI2_REG (DR_REG_DPORT_BASE + 0x3A8) +/* DPORT_SPI2_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_SPI2_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_SPI2_ACCESS_GRANT_CONFIG_M ((DPORT_SPI2_ACCESS_GRANT_CONFIG_V)<<(DPORT_SPI2_ACCESS_GRANT_CONFIG_S)) +#define DPORT_SPI2_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_SPI2_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_SPI3_REG (DR_REG_DPORT_BASE + 0x3AC) +/* DPORT_SPI3_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_SPI3_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_SPI3_ACCESS_GRANT_CONFIG_M ((DPORT_SPI3_ACCESS_GRANT_CONFIG_V)<<(DPORT_SPI3_ACCESS_GRANT_CONFIG_S)) +#define DPORT_SPI3_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_SPI3_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_APB_CTRL_REG (DR_REG_DPORT_BASE + 0x3B0) +/* DPORT_APBCTRL_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_APBCTRL_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_APBCTRL_ACCESS_GRANT_CONFIG_M ((DPORT_APBCTRL_ACCESS_GRANT_CONFIG_V)<<(DPORT_APBCTRL_ACCESS_GRANT_CONFIG_S)) +#define DPORT_APBCTRL_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_APBCTRL_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_I2C_EXT1_REG (DR_REG_DPORT_BASE + 0x3B4) +/* DPORT_I2CEXT1_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_I2CEXT1_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_I2CEXT1_ACCESS_GRANT_CONFIG_M ((DPORT_I2CEXT1_ACCESS_GRANT_CONFIG_V)<<(DPORT_I2CEXT1_ACCESS_GRANT_CONFIG_S)) +#define DPORT_I2CEXT1_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_I2CEXT1_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_SDIO_HOST_REG (DR_REG_DPORT_BASE + 0x3B8) +/* DPORT_SDIOHOST_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_SDIOHOST_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_SDIOHOST_ACCESS_GRANT_CONFIG_M ((DPORT_SDIOHOST_ACCESS_GRANT_CONFIG_V)<<(DPORT_SDIOHOST_ACCESS_GRANT_CONFIG_S)) +#define DPORT_SDIOHOST_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_SDIOHOST_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_EMAC_REG (DR_REG_DPORT_BASE + 0x3BC) +/* DPORT_EMAC_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_EMAC_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_EMAC_ACCESS_GRANT_CONFIG_M ((DPORT_EMAC_ACCESS_GRANT_CONFIG_V)<<(DPORT_EMAC_ACCESS_GRANT_CONFIG_S)) +#define DPORT_EMAC_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_EMAC_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_CAN_REG (DR_REG_DPORT_BASE + 0x3C0) +/* DPORT_CAN_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_CAN_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_CAN_ACCESS_GRANT_CONFIG_M ((DPORT_CAN_ACCESS_GRANT_CONFIG_V)<<(DPORT_CAN_ACCESS_GRANT_CONFIG_S)) +#define DPORT_CAN_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_CAN_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_PWM1_REG (DR_REG_DPORT_BASE + 0x3C4) +/* DPORT_PWM1_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_PWM1_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_PWM1_ACCESS_GRANT_CONFIG_M ((DPORT_PWM1_ACCESS_GRANT_CONFIG_V)<<(DPORT_PWM1_ACCESS_GRANT_CONFIG_S)) +#define DPORT_PWM1_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_PWM1_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_I2S1_REG (DR_REG_DPORT_BASE + 0x3C8) +/* DPORT_I2S1_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_I2S1_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_I2S1_ACCESS_GRANT_CONFIG_M ((DPORT_I2S1_ACCESS_GRANT_CONFIG_V)<<(DPORT_I2S1_ACCESS_GRANT_CONFIG_S)) +#define DPORT_I2S1_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_I2S1_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_UART2_REG (DR_REG_DPORT_BASE + 0x3CC) +/* DPORT_UART2_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_UART2_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_UART2_ACCESS_GRANT_CONFIG_M ((DPORT_UART2_ACCESS_GRANT_CONFIG_V)<<(DPORT_UART2_ACCESS_GRANT_CONFIG_S)) +#define DPORT_UART2_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_UART2_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_PWM2_REG (DR_REG_DPORT_BASE + 0x3D0) +/* DPORT_PWM2_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_PWM2_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_PWM2_ACCESS_GRANT_CONFIG_M ((DPORT_PWM2_ACCESS_GRANT_CONFIG_V)<<(DPORT_PWM2_ACCESS_GRANT_CONFIG_S)) +#define DPORT_PWM2_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_PWM2_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_PWM3_REG (DR_REG_DPORT_BASE + 0x3D4) +/* DPORT_PWM3_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_PWM3_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_PWM3_ACCESS_GRANT_CONFIG_M ((DPORT_PWM3_ACCESS_GRANT_CONFIG_V)<<(DPORT_PWM3_ACCESS_GRANT_CONFIG_S)) +#define DPORT_PWM3_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_PWM3_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_RWBT_REG (DR_REG_DPORT_BASE + 0x3D8) +/* DPORT_RWBT_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_RWBT_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_RWBT_ACCESS_GRANT_CONFIG_M ((DPORT_RWBT_ACCESS_GRANT_CONFIG_V)<<(DPORT_RWBT_ACCESS_GRANT_CONFIG_S)) +#define DPORT_RWBT_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_RWBT_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_BTMAC_REG (DR_REG_DPORT_BASE + 0x3DC) +/* DPORT_BTMAC_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_BTMAC_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_BTMAC_ACCESS_GRANT_CONFIG_M ((DPORT_BTMAC_ACCESS_GRANT_CONFIG_V)<<(DPORT_BTMAC_ACCESS_GRANT_CONFIG_S)) +#define DPORT_BTMAC_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_BTMAC_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_WIFIMAC_REG (DR_REG_DPORT_BASE + 0x3E0) +/* DPORT_WIFIMAC_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_WIFIMAC_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_WIFIMAC_ACCESS_GRANT_CONFIG_M ((DPORT_WIFIMAC_ACCESS_GRANT_CONFIG_V)<<(DPORT_WIFIMAC_ACCESS_GRANT_CONFIG_S)) +#define DPORT_WIFIMAC_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_WIFIMAC_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_AHBLITE_MPU_TABLE_PWR_REG (DR_REG_DPORT_BASE + 0x3E4) +/* DPORT_PWR_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_PWR_ACCESS_GRANT_CONFIG 0x0000003F +#define DPORT_PWR_ACCESS_GRANT_CONFIG_M ((DPORT_PWR_ACCESS_GRANT_CONFIG_V)<<(DPORT_PWR_ACCESS_GRANT_CONFIG_S)) +#define DPORT_PWR_ACCESS_GRANT_CONFIG_V 0x3F +#define DPORT_PWR_ACCESS_GRANT_CONFIG_S 0 + +#define DPORT_MEM_ACCESS_DBUG0_REG (DR_REG_DPORT_BASE + 0x3E8) +/* DPORT_INTERNAL_SRAM_MMU_MULTI_HIT : RO ;bitpos:[29:26] ;default: 4'b0 ; */ +/*description: */ +#define DPORT_INTERNAL_SRAM_MMU_MULTI_HIT 0x0000000F +#define DPORT_INTERNAL_SRAM_MMU_MULTI_HIT_M ((DPORT_INTERNAL_SRAM_MMU_MULTI_HIT_V)<<(DPORT_INTERNAL_SRAM_MMU_MULTI_HIT_S)) +#define DPORT_INTERNAL_SRAM_MMU_MULTI_HIT_V 0xF +#define DPORT_INTERNAL_SRAM_MMU_MULTI_HIT_S 26 +/* DPORT_INTERNAL_SRAM_IA : RO ;bitpos:[25:14] ;default: 12'b0 ; */ +/*description: */ +#define DPORT_INTERNAL_SRAM_IA 0x00000FFF +#define DPORT_INTERNAL_SRAM_IA_M ((DPORT_INTERNAL_SRAM_IA_V)<<(DPORT_INTERNAL_SRAM_IA_S)) +#define DPORT_INTERNAL_SRAM_IA_V 0xFFF +#define DPORT_INTERNAL_SRAM_IA_S 14 +/* DPORT_INTERNAL_SRAM_MMU_AD : RO ;bitpos:[13:10] ;default: 4'b0 ; */ +/*description: */ +#define DPORT_INTERNAL_SRAM_MMU_AD 0x0000000F +#define DPORT_INTERNAL_SRAM_MMU_AD_M ((DPORT_INTERNAL_SRAM_MMU_AD_V)<<(DPORT_INTERNAL_SRAM_MMU_AD_S)) +#define DPORT_INTERNAL_SRAM_MMU_AD_V 0xF +#define DPORT_INTERNAL_SRAM_MMU_AD_S 10 +/* DPORT_SHARE_ROM_IA : RO ;bitpos:[9:6] ;default: 4'b0 ; */ +/*description: */ +#define DPORT_SHARE_ROM_IA 0x0000000F +#define DPORT_SHARE_ROM_IA_M ((DPORT_SHARE_ROM_IA_V)<<(DPORT_SHARE_ROM_IA_S)) +#define DPORT_SHARE_ROM_IA_V 0xF +#define DPORT_SHARE_ROM_IA_S 6 +/* DPORT_SHARE_ROM_MPU_AD : RO ;bitpos:[5:4] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_SHARE_ROM_MPU_AD 0x00000003 +#define DPORT_SHARE_ROM_MPU_AD_M ((DPORT_SHARE_ROM_MPU_AD_V)<<(DPORT_SHARE_ROM_MPU_AD_S)) +#define DPORT_SHARE_ROM_MPU_AD_V 0x3 +#define DPORT_SHARE_ROM_MPU_AD_S 4 +/* DPORT_APP_ROM_IA : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_ROM_IA (BIT(3)) +#define DPORT_APP_ROM_IA_M (BIT(3)) +#define DPORT_APP_ROM_IA_V 0x1 +#define DPORT_APP_ROM_IA_S 3 +/* DPORT_APP_ROM_MPU_AD : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_ROM_MPU_AD (BIT(2)) +#define DPORT_APP_ROM_MPU_AD_M (BIT(2)) +#define DPORT_APP_ROM_MPU_AD_V 0x1 +#define DPORT_APP_ROM_MPU_AD_S 2 +/* DPORT_PRO_ROM_IA : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_ROM_IA (BIT(1)) +#define DPORT_PRO_ROM_IA_M (BIT(1)) +#define DPORT_PRO_ROM_IA_V 0x1 +#define DPORT_PRO_ROM_IA_S 1 +/* DPORT_PRO_ROM_MPU_AD : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_ROM_MPU_AD (BIT(0)) +#define DPORT_PRO_ROM_MPU_AD_M (BIT(0)) +#define DPORT_PRO_ROM_MPU_AD_V 0x1 +#define DPORT_PRO_ROM_MPU_AD_S 0 + +#define DPORT_MEM_ACCESS_DBUG1_REG (DR_REG_DPORT_BASE + 0x3EC) +/* DPORT_AHBLITE_IA : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_AHBLITE_IA (BIT(10)) +#define DPORT_AHBLITE_IA_M (BIT(10)) +#define DPORT_AHBLITE_IA_V 0x1 +#define DPORT_AHBLITE_IA_S 10 +/* DPORT_AHBLITE_ACCESS_DENY : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_AHBLITE_ACCESS_DENY (BIT(9)) +#define DPORT_AHBLITE_ACCESS_DENY_M (BIT(9)) +#define DPORT_AHBLITE_ACCESS_DENY_V 0x1 +#define DPORT_AHBLITE_ACCESS_DENY_S 9 +/* DPORT_AHB_ACCESS_DENY : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_AHB_ACCESS_DENY (BIT(8)) +#define DPORT_AHB_ACCESS_DENY_M (BIT(8)) +#define DPORT_AHB_ACCESS_DENY_V 0x1 +#define DPORT_AHB_ACCESS_DENY_S 8 +/* DPORT_PIDGEN_IA : RO ;bitpos:[7:6] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_PIDGEN_IA 0x00000003 +#define DPORT_PIDGEN_IA_M ((DPORT_PIDGEN_IA_V)<<(DPORT_PIDGEN_IA_S)) +#define DPORT_PIDGEN_IA_V 0x3 +#define DPORT_PIDGEN_IA_S 6 +/* DPORT_ARB_IA : RO ;bitpos:[5:4] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_ARB_IA 0x00000003 +#define DPORT_ARB_IA_M ((DPORT_ARB_IA_V)<<(DPORT_ARB_IA_S)) +#define DPORT_ARB_IA_V 0x3 +#define DPORT_ARB_IA_S 4 +/* DPORT_INTERNAL_SRAM_MMU_MISS : RO ;bitpos:[3:0] ;default: 4'b0 ; */ +/*description: */ +#define DPORT_INTERNAL_SRAM_MMU_MISS 0x0000000F +#define DPORT_INTERNAL_SRAM_MMU_MISS_M ((DPORT_INTERNAL_SRAM_MMU_MISS_V)<<(DPORT_INTERNAL_SRAM_MMU_MISS_S)) +#define DPORT_INTERNAL_SRAM_MMU_MISS_V 0xF +#define DPORT_INTERNAL_SRAM_MMU_MISS_S 0 + +#define DPORT_PRO_DCACHE_DBUG0_REG (DR_REG_DPORT_BASE + 0x3F0) +/* DPORT_PRO_RX_END : RO ;bitpos:[23] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_RX_END (BIT(23)) +#define DPORT_PRO_RX_END_M (BIT(23)) +#define DPORT_PRO_RX_END_V 0x1 +#define DPORT_PRO_RX_END_S 23 +/* DPORT_PRO_SLAVE_WDATA_V : RO ;bitpos:[22] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_SLAVE_WDATA_V (BIT(22)) +#define DPORT_PRO_SLAVE_WDATA_V_M (BIT(22)) +#define DPORT_PRO_SLAVE_WDATA_V_V 0x1 +#define DPORT_PRO_SLAVE_WDATA_V_S 22 +/* DPORT_PRO_SLAVE_WR : RO ;bitpos:[21] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_SLAVE_WR (BIT(21)) +#define DPORT_PRO_SLAVE_WR_M (BIT(21)) +#define DPORT_PRO_SLAVE_WR_V 0x1 +#define DPORT_PRO_SLAVE_WR_S 21 +/* DPORT_PRO_TX_END : RO ;bitpos:[20] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_TX_END (BIT(20)) +#define DPORT_PRO_TX_END_M (BIT(20)) +#define DPORT_PRO_TX_END_V 0x1 +#define DPORT_PRO_TX_END_S 20 +/* DPORT_PRO_WR_BAK_TO_READ : RO ;bitpos:[19] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_WR_BAK_TO_READ (BIT(19)) +#define DPORT_PRO_WR_BAK_TO_READ_M (BIT(19)) +#define DPORT_PRO_WR_BAK_TO_READ_V 0x1 +#define DPORT_PRO_WR_BAK_TO_READ_S 19 +/* DPORT_PRO_CACHE_STATE : RO ;bitpos:[18:7] ;default: 12'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_STATE 0x00000FFF +#define DPORT_PRO_CACHE_STATE_M ((DPORT_PRO_CACHE_STATE_V)<<(DPORT_PRO_CACHE_STATE_S)) +#define DPORT_PRO_CACHE_STATE_V 0xFFF +#define DPORT_PRO_CACHE_STATE_S 7 +/* DPORT_PRO_CACHE_IA : RO ;bitpos:[6:1] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_IA 0x0000003F +#define DPORT_PRO_CACHE_IA_M ((DPORT_PRO_CACHE_IA_V)<<(DPORT_PRO_CACHE_IA_S)) +#define DPORT_PRO_CACHE_IA_V 0x3F +#define DPORT_PRO_CACHE_IA_S 1 +/* DPORT_PRO_CACHE_MMU_IA : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_MMU_IA (BIT(0)) +#define DPORT_PRO_CACHE_MMU_IA_M (BIT(0)) +#define DPORT_PRO_CACHE_MMU_IA_V 0x1 +#define DPORT_PRO_CACHE_MMU_IA_S 0 + +#define DPORT_PRO_DCACHE_DBUG1_REG (DR_REG_DPORT_BASE + 0x3F4) +/* DPORT_PRO_CTAG_RAM_RDATA : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_PRO_CTAG_RAM_RDATA 0xFFFFFFFF +#define DPORT_PRO_CTAG_RAM_RDATA_M ((DPORT_PRO_CTAG_RAM_RDATA_V)<<(DPORT_PRO_CTAG_RAM_RDATA_S)) +#define DPORT_PRO_CTAG_RAM_RDATA_V 0xFFFFFFFF +#define DPORT_PRO_CTAG_RAM_RDATA_S 0 + +#define DPORT_PRO_DCACHE_DBUG2_REG (DR_REG_DPORT_BASE + 0x3F8) +/* DPORT_PRO_CACHE_VADDR : RO ;bitpos:[26:0] ;default: 27'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_VADDR 0x07FFFFFF +#define DPORT_PRO_CACHE_VADDR_M ((DPORT_PRO_CACHE_VADDR_V)<<(DPORT_PRO_CACHE_VADDR_S)) +#define DPORT_PRO_CACHE_VADDR_V 0x7FFFFFF +#define DPORT_PRO_CACHE_VADDR_S 0 + +#define DPORT_PRO_DCACHE_DBUG3_REG (DR_REG_DPORT_BASE + 0x3FC) +/* DPORT_PRO_CACHE_IRAM0_PID_ERROR : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CACHE_IRAM0_PID_ERROR (BIT(15)) +#define DPORT_PRO_CACHE_IRAM0_PID_ERROR_M (BIT(15)) +#define DPORT_PRO_CACHE_IRAM0_PID_ERROR_V 0x1 +#define DPORT_PRO_CACHE_IRAM0_PID_ERROR_S 15 +/* DPORT_PRO_CPU_DISABLED_CACHE_IA : RO ;bitpos:[14:9] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_PRO_CPU_DISABLED_CACHE_IA 0x0000003F +#define DPORT_PRO_CPU_DISABLED_CACHE_IA_M ((DPORT_PRO_CPU_DISABLED_CACHE_IA_V)<<(DPORT_PRO_CPU_DISABLED_CACHE_IA_S)) +#define DPORT_PRO_CPU_DISABLED_CACHE_IA_V 0x3F +#define DPORT_PRO_CPU_DISABLED_CACHE_IA_S 9 +/* DPORT_PRO_MMU_RDATA : RO ;bitpos:[8:0] ;default: 9'h0 ; */ +/*description: */ +#define DPORT_PRO_MMU_RDATA 0x000001FF +#define DPORT_PRO_MMU_RDATA_M ((DPORT_PRO_MMU_RDATA_V)<<(DPORT_PRO_MMU_RDATA_S)) +#define DPORT_PRO_MMU_RDATA_V 0x1FF +#define DPORT_PRO_MMU_RDATA_S 0 + +#define DPORT_PRO_DCACHE_DBUG4_REG (DR_REG_DPORT_BASE + 0x400) +/* DPORT_PRO_DRAM1ADDR0_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_PRO_DRAM1ADDR0_IA 0x000FFFFF +#define DPORT_PRO_DRAM1ADDR0_IA_M ((DPORT_PRO_DRAM1ADDR0_IA_V)<<(DPORT_PRO_DRAM1ADDR0_IA_S)) +#define DPORT_PRO_DRAM1ADDR0_IA_V 0xFFFFF +#define DPORT_PRO_DRAM1ADDR0_IA_S 0 + +#define DPORT_PRO_DCACHE_DBUG5_REG (DR_REG_DPORT_BASE + 0x404) +/* DPORT_PRO_DROM0ADDR0_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_PRO_DROM0ADDR0_IA 0x000FFFFF +#define DPORT_PRO_DROM0ADDR0_IA_M ((DPORT_PRO_DROM0ADDR0_IA_V)<<(DPORT_PRO_DROM0ADDR0_IA_S)) +#define DPORT_PRO_DROM0ADDR0_IA_V 0xFFFFF +#define DPORT_PRO_DROM0ADDR0_IA_S 0 + +#define DPORT_PRO_DCACHE_DBUG6_REG (DR_REG_DPORT_BASE + 0x408) +/* DPORT_PRO_IRAM0ADDR_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_PRO_IRAM0ADDR_IA 0x000FFFFF +#define DPORT_PRO_IRAM0ADDR_IA_M ((DPORT_PRO_IRAM0ADDR_IA_V)<<(DPORT_PRO_IRAM0ADDR_IA_S)) +#define DPORT_PRO_IRAM0ADDR_IA_V 0xFFFFF +#define DPORT_PRO_IRAM0ADDR_IA_S 0 + +#define DPORT_PRO_DCACHE_DBUG7_REG (DR_REG_DPORT_BASE + 0x40C) +/* DPORT_PRO_IRAM1ADDR_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_PRO_IRAM1ADDR_IA 0x000FFFFF +#define DPORT_PRO_IRAM1ADDR_IA_M ((DPORT_PRO_IRAM1ADDR_IA_V)<<(DPORT_PRO_IRAM1ADDR_IA_S)) +#define DPORT_PRO_IRAM1ADDR_IA_V 0xFFFFF +#define DPORT_PRO_IRAM1ADDR_IA_S 0 + +#define DPORT_PRO_DCACHE_DBUG8_REG (DR_REG_DPORT_BASE + 0x410) +/* DPORT_PRO_IROM0ADDR_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_PRO_IROM0ADDR_IA 0x000FFFFF +#define DPORT_PRO_IROM0ADDR_IA_M ((DPORT_PRO_IROM0ADDR_IA_V)<<(DPORT_PRO_IROM0ADDR_IA_S)) +#define DPORT_PRO_IROM0ADDR_IA_V 0xFFFFF +#define DPORT_PRO_IROM0ADDR_IA_S 0 + +#define DPORT_PRO_DCACHE_DBUG9_REG (DR_REG_DPORT_BASE + 0x414) +/* DPORT_PRO_OPSDRAMADDR_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_PRO_OPSDRAMADDR_IA 0x000FFFFF +#define DPORT_PRO_OPSDRAMADDR_IA_M ((DPORT_PRO_OPSDRAMADDR_IA_V)<<(DPORT_PRO_OPSDRAMADDR_IA_S)) +#define DPORT_PRO_OPSDRAMADDR_IA_V 0xFFFFF +#define DPORT_PRO_OPSDRAMADDR_IA_S 0 + +#define DPORT_APP_DCACHE_DBUG0_REG (DR_REG_DPORT_BASE + 0x418) +/* DPORT_APP_RX_END : RO ;bitpos:[23] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_RX_END (BIT(23)) +#define DPORT_APP_RX_END_M (BIT(23)) +#define DPORT_APP_RX_END_V 0x1 +#define DPORT_APP_RX_END_S 23 +/* DPORT_APP_SLAVE_WDATA_V : RO ;bitpos:[22] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_SLAVE_WDATA_V (BIT(22)) +#define DPORT_APP_SLAVE_WDATA_V_M (BIT(22)) +#define DPORT_APP_SLAVE_WDATA_V_V 0x1 +#define DPORT_APP_SLAVE_WDATA_V_S 22 +/* DPORT_APP_SLAVE_WR : RO ;bitpos:[21] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_SLAVE_WR (BIT(21)) +#define DPORT_APP_SLAVE_WR_M (BIT(21)) +#define DPORT_APP_SLAVE_WR_V 0x1 +#define DPORT_APP_SLAVE_WR_S 21 +/* DPORT_APP_TX_END : RO ;bitpos:[20] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_TX_END (BIT(20)) +#define DPORT_APP_TX_END_M (BIT(20)) +#define DPORT_APP_TX_END_V 0x1 +#define DPORT_APP_TX_END_S 20 +/* DPORT_APP_WR_BAK_TO_READ : RO ;bitpos:[19] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_WR_BAK_TO_READ (BIT(19)) +#define DPORT_APP_WR_BAK_TO_READ_M (BIT(19)) +#define DPORT_APP_WR_BAK_TO_READ_V 0x1 +#define DPORT_APP_WR_BAK_TO_READ_S 19 +/* DPORT_APP_CACHE_STATE : RO ;bitpos:[18:7] ;default: 12'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_STATE 0x00000FFF +#define DPORT_APP_CACHE_STATE_M ((DPORT_APP_CACHE_STATE_V)<<(DPORT_APP_CACHE_STATE_S)) +#define DPORT_APP_CACHE_STATE_V 0xFFF +#define DPORT_APP_CACHE_STATE_S 7 +/* DPORT_APP_CACHE_IA : RO ;bitpos:[6:1] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_IA 0x0000003F +#define DPORT_APP_CACHE_IA_M ((DPORT_APP_CACHE_IA_V)<<(DPORT_APP_CACHE_IA_S)) +#define DPORT_APP_CACHE_IA_V 0x3F +#define DPORT_APP_CACHE_IA_S 1 +/* DPORT_APP_CACHE_MMU_IA : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_MMU_IA (BIT(0)) +#define DPORT_APP_CACHE_MMU_IA_M (BIT(0)) +#define DPORT_APP_CACHE_MMU_IA_V 0x1 +#define DPORT_APP_CACHE_MMU_IA_S 0 + +#define DPORT_APP_DCACHE_DBUG1_REG (DR_REG_DPORT_BASE + 0x41C) +/* DPORT_APP_CTAG_RAM_RDATA : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_APP_CTAG_RAM_RDATA 0xFFFFFFFF +#define DPORT_APP_CTAG_RAM_RDATA_M ((DPORT_APP_CTAG_RAM_RDATA_V)<<(DPORT_APP_CTAG_RAM_RDATA_S)) +#define DPORT_APP_CTAG_RAM_RDATA_V 0xFFFFFFFF +#define DPORT_APP_CTAG_RAM_RDATA_S 0 + +#define DPORT_APP_DCACHE_DBUG2_REG (DR_REG_DPORT_BASE + 0x420) +/* DPORT_APP_CACHE_VADDR : RO ;bitpos:[26:0] ;default: 27'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_VADDR 0x07FFFFFF +#define DPORT_APP_CACHE_VADDR_M ((DPORT_APP_CACHE_VADDR_V)<<(DPORT_APP_CACHE_VADDR_S)) +#define DPORT_APP_CACHE_VADDR_V 0x7FFFFFF +#define DPORT_APP_CACHE_VADDR_S 0 + +#define DPORT_APP_DCACHE_DBUG3_REG (DR_REG_DPORT_BASE + 0x424) +/* DPORT_APP_CACHE_IRAM0_PID_ERROR : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CACHE_IRAM0_PID_ERROR (BIT(15)) +#define DPORT_APP_CACHE_IRAM0_PID_ERROR_M (BIT(15)) +#define DPORT_APP_CACHE_IRAM0_PID_ERROR_V 0x1 +#define DPORT_APP_CACHE_IRAM0_PID_ERROR_S 15 +/* DPORT_APP_CPU_DISABLED_CACHE_IA : RO ;bitpos:[14:9] ;default: 6'b0 ; */ +/*description: */ +#define DPORT_APP_CPU_DISABLED_CACHE_IA 0x0000003F +#define DPORT_APP_CPU_DISABLED_CACHE_IA_M ((DPORT_APP_CPU_DISABLED_CACHE_IA_V)<<(DPORT_APP_CPU_DISABLED_CACHE_IA_S)) +#define DPORT_APP_CPU_DISABLED_CACHE_IA_V 0x3F +#define DPORT_APP_CPU_DISABLED_CACHE_IA_S 9 +/* DPORT_APP_MMU_RDATA : RO ;bitpos:[8:0] ;default: 9'h0 ; */ +/*description: */ +#define DPORT_APP_MMU_RDATA 0x000001FF +#define DPORT_APP_MMU_RDATA_M ((DPORT_APP_MMU_RDATA_V)<<(DPORT_APP_MMU_RDATA_S)) +#define DPORT_APP_MMU_RDATA_V 0x1FF +#define DPORT_APP_MMU_RDATA_S 0 + +#define DPORT_APP_DCACHE_DBUG4_REG (DR_REG_DPORT_BASE + 0x428) +/* DPORT_APP_DRAM1ADDR0_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_APP_DRAM1ADDR0_IA 0x000FFFFF +#define DPORT_APP_DRAM1ADDR0_IA_M ((DPORT_APP_DRAM1ADDR0_IA_V)<<(DPORT_APP_DRAM1ADDR0_IA_S)) +#define DPORT_APP_DRAM1ADDR0_IA_V 0xFFFFF +#define DPORT_APP_DRAM1ADDR0_IA_S 0 + +#define DPORT_APP_DCACHE_DBUG5_REG (DR_REG_DPORT_BASE + 0x42C) +/* DPORT_APP_DROM0ADDR0_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_APP_DROM0ADDR0_IA 0x000FFFFF +#define DPORT_APP_DROM0ADDR0_IA_M ((DPORT_APP_DROM0ADDR0_IA_V)<<(DPORT_APP_DROM0ADDR0_IA_S)) +#define DPORT_APP_DROM0ADDR0_IA_V 0xFFFFF +#define DPORT_APP_DROM0ADDR0_IA_S 0 + +#define DPORT_APP_DCACHE_DBUG6_REG (DR_REG_DPORT_BASE + 0x430) +/* DPORT_APP_IRAM0ADDR_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_APP_IRAM0ADDR_IA 0x000FFFFF +#define DPORT_APP_IRAM0ADDR_IA_M ((DPORT_APP_IRAM0ADDR_IA_V)<<(DPORT_APP_IRAM0ADDR_IA_S)) +#define DPORT_APP_IRAM0ADDR_IA_V 0xFFFFF +#define DPORT_APP_IRAM0ADDR_IA_S 0 + +#define DPORT_APP_DCACHE_DBUG7_REG (DR_REG_DPORT_BASE + 0x434) +/* DPORT_APP_IRAM1ADDR_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_APP_IRAM1ADDR_IA 0x000FFFFF +#define DPORT_APP_IRAM1ADDR_IA_M ((DPORT_APP_IRAM1ADDR_IA_V)<<(DPORT_APP_IRAM1ADDR_IA_S)) +#define DPORT_APP_IRAM1ADDR_IA_V 0xFFFFF +#define DPORT_APP_IRAM1ADDR_IA_S 0 + +#define DPORT_APP_DCACHE_DBUG8_REG (DR_REG_DPORT_BASE + 0x438) +/* DPORT_APP_IROM0ADDR_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_APP_IROM0ADDR_IA 0x000FFFFF +#define DPORT_APP_IROM0ADDR_IA_M ((DPORT_APP_IROM0ADDR_IA_V)<<(DPORT_APP_IROM0ADDR_IA_S)) +#define DPORT_APP_IROM0ADDR_IA_V 0xFFFFF +#define DPORT_APP_IROM0ADDR_IA_S 0 + +#define DPORT_APP_DCACHE_DBUG9_REG (DR_REG_DPORT_BASE + 0x43C) +/* DPORT_APP_OPSDRAMADDR_IA : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: */ +#define DPORT_APP_OPSDRAMADDR_IA 0x000FFFFF +#define DPORT_APP_OPSDRAMADDR_IA_M ((DPORT_APP_OPSDRAMADDR_IA_V)<<(DPORT_APP_OPSDRAMADDR_IA_S)) +#define DPORT_APP_OPSDRAMADDR_IA_V 0xFFFFF +#define DPORT_APP_OPSDRAMADDR_IA_S 0 + +#define DPORT_PRO_CPU_RECORD_CTRL_REG (DR_REG_DPORT_BASE + 0x440) +/* DPORT_PRO_CPU_PDEBUG_ENABLE : R/W ;bitpos:[8] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_CPU_PDEBUG_ENABLE (BIT(8)) +#define DPORT_PRO_CPU_PDEBUG_ENABLE_M (BIT(8)) +#define DPORT_PRO_CPU_PDEBUG_ENABLE_V 0x1 +#define DPORT_PRO_CPU_PDEBUG_ENABLE_S 8 +/* DPORT_PRO_CPU_RECORD_DISABLE : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CPU_RECORD_DISABLE (BIT(4)) +#define DPORT_PRO_CPU_RECORD_DISABLE_M (BIT(4)) +#define DPORT_PRO_CPU_RECORD_DISABLE_V 0x1 +#define DPORT_PRO_CPU_RECORD_DISABLE_S 4 +/* DPORT_PRO_CPU_RECORD_ENABLE : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CPU_RECORD_ENABLE (BIT(0)) +#define DPORT_PRO_CPU_RECORD_ENABLE_M (BIT(0)) +#define DPORT_PRO_CPU_RECORD_ENABLE_V 0x1 +#define DPORT_PRO_CPU_RECORD_ENABLE_S 0 + +#define DPORT_PRO_CPU_RECORD_STATUS_REG (DR_REG_DPORT_BASE + 0x444) +/* DPORT_PRO_CPU_RECORDING : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PRO_CPU_RECORDING (BIT(0)) +#define DPORT_PRO_CPU_RECORDING_M (BIT(0)) +#define DPORT_PRO_CPU_RECORDING_V 0x1 +#define DPORT_PRO_CPU_RECORDING_S 0 + +#define DPORT_PRO_CPU_RECORD_PID_REG (DR_REG_DPORT_BASE + 0x448) +/* DPORT_RECORD_PRO_PID : RO ;bitpos:[2:0] ;default: 3'd0 ; */ +/*description: */ +#define DPORT_RECORD_PRO_PID 0x00000007 +#define DPORT_RECORD_PRO_PID_M ((DPORT_RECORD_PRO_PID_V)<<(DPORT_RECORD_PRO_PID_S)) +#define DPORT_RECORD_PRO_PID_V 0x7 +#define DPORT_RECORD_PRO_PID_S 0 + +#define DPORT_PRO_CPU_RECORD_PDEBUGINST_REG (DR_REG_DPORT_BASE + 0x44C) +/* DPORT_RECORD_PRO_PDEBUGINST : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_PRO_PDEBUGINST 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGINST_M ((DPORT_RECORD_PRO_PDEBUGINST_V)<<(DPORT_RECORD_PRO_PDEBUGINST_S)) +#define DPORT_RECORD_PRO_PDEBUGINST_V 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGINST_S 0 + +#define DPORT_PRO_CPU_RECORD_PDEBUGSTATUS_REG (DR_REG_DPORT_BASE + 0x450) +/* DPORT_RECORD_PRO_PDEBUGSTATUS : RO ;bitpos:[7:0] ;default: 8'b0 ; */ +/*description: */ +#define DPORT_RECORD_PRO_PDEBUGSTATUS 0x000000FF +#define DPORT_RECORD_PRO_PDEBUGSTATUS_M ((DPORT_RECORD_PRO_PDEBUGSTATUS_V)<<(DPORT_RECORD_PRO_PDEBUGSTATUS_S)) +#define DPORT_RECORD_PRO_PDEBUGSTATUS_V 0xFF +#define DPORT_RECORD_PRO_PDEBUGSTATUS_S 0 + +#define DPORT_PRO_CPU_RECORD_PDEBUGDATA_REG (DR_REG_DPORT_BASE + 0x454) +/* DPORT_RECORD_PRO_PDEBUGDATA : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_PRO_PDEBUGDATA 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGDATA_M ((DPORT_RECORD_PRO_PDEBUGDATA_V)<<(DPORT_RECORD_PRO_PDEBUGDATA_S)) +#define DPORT_RECORD_PRO_PDEBUGDATA_V 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGDATA_S 0 + +#define DPORT_PRO_CPU_RECORD_PDEBUGPC_REG (DR_REG_DPORT_BASE + 0x458) +/* DPORT_RECORD_PRO_PDEBUGPC : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_PRO_PDEBUGPC 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGPC_M ((DPORT_RECORD_PRO_PDEBUGPC_V)<<(DPORT_RECORD_PRO_PDEBUGPC_S)) +#define DPORT_RECORD_PRO_PDEBUGPC_V 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGPC_S 0 + +#define DPORT_PRO_CPU_RECORD_PDEBUGLS0STAT_REG (DR_REG_DPORT_BASE + 0x45C) +/* DPORT_RECORD_PRO_PDEBUGLS0STAT : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_PRO_PDEBUGLS0STAT 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGLS0STAT_M ((DPORT_RECORD_PRO_PDEBUGLS0STAT_V)<<(DPORT_RECORD_PRO_PDEBUGLS0STAT_S)) +#define DPORT_RECORD_PRO_PDEBUGLS0STAT_V 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGLS0STAT_S 0 + +#define DPORT_PRO_CPU_RECORD_PDEBUGLS0ADDR_REG (DR_REG_DPORT_BASE + 0x460) +/* DPORT_RECORD_PRO_PDEBUGLS0ADDR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_PRO_PDEBUGLS0ADDR 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGLS0ADDR_M ((DPORT_RECORD_PRO_PDEBUGLS0ADDR_V)<<(DPORT_RECORD_PRO_PDEBUGLS0ADDR_S)) +#define DPORT_RECORD_PRO_PDEBUGLS0ADDR_V 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGLS0ADDR_S 0 + +#define DPORT_PRO_CPU_RECORD_PDEBUGLS0DATA_REG (DR_REG_DPORT_BASE + 0x464) +/* DPORT_RECORD_PRO_PDEBUGLS0DATA : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_PRO_PDEBUGLS0DATA 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGLS0DATA_M ((DPORT_RECORD_PRO_PDEBUGLS0DATA_V)<<(DPORT_RECORD_PRO_PDEBUGLS0DATA_S)) +#define DPORT_RECORD_PRO_PDEBUGLS0DATA_V 0xFFFFFFFF +#define DPORT_RECORD_PRO_PDEBUGLS0DATA_S 0 + +#define DPORT_APP_CPU_RECORD_CTRL_REG (DR_REG_DPORT_BASE + 0x468) +/* DPORT_APP_CPU_PDEBUG_ENABLE : R/W ;bitpos:[8] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_CPU_PDEBUG_ENABLE (BIT(8)) +#define DPORT_APP_CPU_PDEBUG_ENABLE_M (BIT(8)) +#define DPORT_APP_CPU_PDEBUG_ENABLE_V 0x1 +#define DPORT_APP_CPU_PDEBUG_ENABLE_S 8 +/* DPORT_APP_CPU_RECORD_DISABLE : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CPU_RECORD_DISABLE (BIT(4)) +#define DPORT_APP_CPU_RECORD_DISABLE_M (BIT(4)) +#define DPORT_APP_CPU_RECORD_DISABLE_V 0x1 +#define DPORT_APP_CPU_RECORD_DISABLE_S 4 +/* DPORT_APP_CPU_RECORD_ENABLE : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CPU_RECORD_ENABLE (BIT(0)) +#define DPORT_APP_CPU_RECORD_ENABLE_M (BIT(0)) +#define DPORT_APP_CPU_RECORD_ENABLE_V 0x1 +#define DPORT_APP_CPU_RECORD_ENABLE_S 0 + +#define DPORT_APP_CPU_RECORD_STATUS_REG (DR_REG_DPORT_BASE + 0x46C) +/* DPORT_APP_CPU_RECORDING : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_APP_CPU_RECORDING (BIT(0)) +#define DPORT_APP_CPU_RECORDING_M (BIT(0)) +#define DPORT_APP_CPU_RECORDING_V 0x1 +#define DPORT_APP_CPU_RECORDING_S 0 + +#define DPORT_APP_CPU_RECORD_PID_REG (DR_REG_DPORT_BASE + 0x470) +/* DPORT_RECORD_APP_PID : RO ;bitpos:[2:0] ;default: 3'd0 ; */ +/*description: */ +#define DPORT_RECORD_APP_PID 0x00000007 +#define DPORT_RECORD_APP_PID_M ((DPORT_RECORD_APP_PID_V)<<(DPORT_RECORD_APP_PID_S)) +#define DPORT_RECORD_APP_PID_V 0x7 +#define DPORT_RECORD_APP_PID_S 0 + +#define DPORT_APP_CPU_RECORD_PDEBUGINST_REG (DR_REG_DPORT_BASE + 0x474) +/* DPORT_RECORD_APP_PDEBUGINST : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_APP_PDEBUGINST 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGINST_M ((DPORT_RECORD_APP_PDEBUGINST_V)<<(DPORT_RECORD_APP_PDEBUGINST_S)) +#define DPORT_RECORD_APP_PDEBUGINST_V 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGINST_S 0 + +#define DPORT_APP_CPU_RECORD_PDEBUGSTATUS_REG (DR_REG_DPORT_BASE + 0x478) +/* DPORT_RECORD_APP_PDEBUGSTATUS : RO ;bitpos:[7:0] ;default: 8'b0 ; */ +/*description: */ +#define DPORT_RECORD_APP_PDEBUGSTATUS 0x000000FF +#define DPORT_RECORD_APP_PDEBUGSTATUS_M ((DPORT_RECORD_APP_PDEBUGSTATUS_V)<<(DPORT_RECORD_APP_PDEBUGSTATUS_S)) +#define DPORT_RECORD_APP_PDEBUGSTATUS_V 0xFF +#define DPORT_RECORD_APP_PDEBUGSTATUS_S 0 + +#define DPORT_APP_CPU_RECORD_PDEBUGDATA_REG (DR_REG_DPORT_BASE + 0x47C) +/* DPORT_RECORD_APP_PDEBUGDATA : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_APP_PDEBUGDATA 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGDATA_M ((DPORT_RECORD_APP_PDEBUGDATA_V)<<(DPORT_RECORD_APP_PDEBUGDATA_S)) +#define DPORT_RECORD_APP_PDEBUGDATA_V 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGDATA_S 0 + +#define DPORT_APP_CPU_RECORD_PDEBUGPC_REG (DR_REG_DPORT_BASE + 0x480) +/* DPORT_RECORD_APP_PDEBUGPC : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_APP_PDEBUGPC 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGPC_M ((DPORT_RECORD_APP_PDEBUGPC_V)<<(DPORT_RECORD_APP_PDEBUGPC_S)) +#define DPORT_RECORD_APP_PDEBUGPC_V 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGPC_S 0 + +#define DPORT_APP_CPU_RECORD_PDEBUGLS0STAT_REG (DR_REG_DPORT_BASE + 0x484) +/* DPORT_RECORD_APP_PDEBUGLS0STAT : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_APP_PDEBUGLS0STAT 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGLS0STAT_M ((DPORT_RECORD_APP_PDEBUGLS0STAT_V)<<(DPORT_RECORD_APP_PDEBUGLS0STAT_S)) +#define DPORT_RECORD_APP_PDEBUGLS0STAT_V 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGLS0STAT_S 0 + +#define DPORT_APP_CPU_RECORD_PDEBUGLS0ADDR_REG (DR_REG_DPORT_BASE + 0x488) +/* DPORT_RECORD_APP_PDEBUGLS0ADDR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_APP_PDEBUGLS0ADDR 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGLS0ADDR_M ((DPORT_RECORD_APP_PDEBUGLS0ADDR_V)<<(DPORT_RECORD_APP_PDEBUGLS0ADDR_S)) +#define DPORT_RECORD_APP_PDEBUGLS0ADDR_V 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGLS0ADDR_S 0 + +#define DPORT_APP_CPU_RECORD_PDEBUGLS0DATA_REG (DR_REG_DPORT_BASE + 0x48C) +/* DPORT_RECORD_APP_PDEBUGLS0DATA : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define DPORT_RECORD_APP_PDEBUGLS0DATA 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGLS0DATA_M ((DPORT_RECORD_APP_PDEBUGLS0DATA_V)<<(DPORT_RECORD_APP_PDEBUGLS0DATA_S)) +#define DPORT_RECORD_APP_PDEBUGLS0DATA_V 0xFFFFFFFF +#define DPORT_RECORD_APP_PDEBUGLS0DATA_S 0 + +#define DPORT_RSA_PD_CTRL_REG (DR_REG_DPORT_BASE + 0x490) +/* DPORT_RSA_PD : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_RSA_PD (BIT(0)) +#define DPORT_RSA_PD_M (BIT(0)) +#define DPORT_RSA_PD_V 0x1 +#define DPORT_RSA_PD_S 0 + +#define DPORT_ROM_MPU_TABLE0_REG (DR_REG_DPORT_BASE + 0x494) +/* DPORT_ROM_MPU_TABLE0 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_ROM_MPU_TABLE0 0x00000003 +#define DPORT_ROM_MPU_TABLE0_M ((DPORT_ROM_MPU_TABLE0_V)<<(DPORT_ROM_MPU_TABLE0_S)) +#define DPORT_ROM_MPU_TABLE0_V 0x3 +#define DPORT_ROM_MPU_TABLE0_S 0 + +#define DPORT_ROM_MPU_TABLE1_REG (DR_REG_DPORT_BASE + 0x498) +/* DPORT_ROM_MPU_TABLE1 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_ROM_MPU_TABLE1 0x00000003 +#define DPORT_ROM_MPU_TABLE1_M ((DPORT_ROM_MPU_TABLE1_V)<<(DPORT_ROM_MPU_TABLE1_S)) +#define DPORT_ROM_MPU_TABLE1_V 0x3 +#define DPORT_ROM_MPU_TABLE1_S 0 + +#define DPORT_ROM_MPU_TABLE2_REG (DR_REG_DPORT_BASE + 0x49C) +/* DPORT_ROM_MPU_TABLE2 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_ROM_MPU_TABLE2 0x00000003 +#define DPORT_ROM_MPU_TABLE2_M ((DPORT_ROM_MPU_TABLE2_V)<<(DPORT_ROM_MPU_TABLE2_S)) +#define DPORT_ROM_MPU_TABLE2_V 0x3 +#define DPORT_ROM_MPU_TABLE2_S 0 + +#define DPORT_ROM_MPU_TABLE3_REG (DR_REG_DPORT_BASE + 0x4A0) +/* DPORT_ROM_MPU_TABLE3 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_ROM_MPU_TABLE3 0x00000003 +#define DPORT_ROM_MPU_TABLE3_M ((DPORT_ROM_MPU_TABLE3_V)<<(DPORT_ROM_MPU_TABLE3_S)) +#define DPORT_ROM_MPU_TABLE3_V 0x3 +#define DPORT_ROM_MPU_TABLE3_S 0 + +#define DPORT_SHROM_MPU_TABLE0_REG (DR_REG_DPORT_BASE + 0x4A4) +/* DPORT_SHROM_MPU_TABLE0 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE0 0x00000003 +#define DPORT_SHROM_MPU_TABLE0_M ((DPORT_SHROM_MPU_TABLE0_V)<<(DPORT_SHROM_MPU_TABLE0_S)) +#define DPORT_SHROM_MPU_TABLE0_V 0x3 +#define DPORT_SHROM_MPU_TABLE0_S 0 + +#define DPORT_SHROM_MPU_TABLE1_REG (DR_REG_DPORT_BASE + 0x4A8) +/* DPORT_SHROM_MPU_TABLE1 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE1 0x00000003 +#define DPORT_SHROM_MPU_TABLE1_M ((DPORT_SHROM_MPU_TABLE1_V)<<(DPORT_SHROM_MPU_TABLE1_S)) +#define DPORT_SHROM_MPU_TABLE1_V 0x3 +#define DPORT_SHROM_MPU_TABLE1_S 0 + +#define DPORT_SHROM_MPU_TABLE2_REG (DR_REG_DPORT_BASE + 0x4AC) +/* DPORT_SHROM_MPU_TABLE2 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE2 0x00000003 +#define DPORT_SHROM_MPU_TABLE2_M ((DPORT_SHROM_MPU_TABLE2_V)<<(DPORT_SHROM_MPU_TABLE2_S)) +#define DPORT_SHROM_MPU_TABLE2_V 0x3 +#define DPORT_SHROM_MPU_TABLE2_S 0 + +#define DPORT_SHROM_MPU_TABLE3_REG (DR_REG_DPORT_BASE + 0x4B0) +/* DPORT_SHROM_MPU_TABLE3 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE3 0x00000003 +#define DPORT_SHROM_MPU_TABLE3_M ((DPORT_SHROM_MPU_TABLE3_V)<<(DPORT_SHROM_MPU_TABLE3_S)) +#define DPORT_SHROM_MPU_TABLE3_V 0x3 +#define DPORT_SHROM_MPU_TABLE3_S 0 + +#define DPORT_SHROM_MPU_TABLE4_REG (DR_REG_DPORT_BASE + 0x4B4) +/* DPORT_SHROM_MPU_TABLE4 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE4 0x00000003 +#define DPORT_SHROM_MPU_TABLE4_M ((DPORT_SHROM_MPU_TABLE4_V)<<(DPORT_SHROM_MPU_TABLE4_S)) +#define DPORT_SHROM_MPU_TABLE4_V 0x3 +#define DPORT_SHROM_MPU_TABLE4_S 0 + +#define DPORT_SHROM_MPU_TABLE5_REG (DR_REG_DPORT_BASE + 0x4B8) +/* DPORT_SHROM_MPU_TABLE5 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE5 0x00000003 +#define DPORT_SHROM_MPU_TABLE5_M ((DPORT_SHROM_MPU_TABLE5_V)<<(DPORT_SHROM_MPU_TABLE5_S)) +#define DPORT_SHROM_MPU_TABLE5_V 0x3 +#define DPORT_SHROM_MPU_TABLE5_S 0 + +#define DPORT_SHROM_MPU_TABLE6_REG (DR_REG_DPORT_BASE + 0x4BC) +/* DPORT_SHROM_MPU_TABLE6 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE6 0x00000003 +#define DPORT_SHROM_MPU_TABLE6_M ((DPORT_SHROM_MPU_TABLE6_V)<<(DPORT_SHROM_MPU_TABLE6_S)) +#define DPORT_SHROM_MPU_TABLE6_V 0x3 +#define DPORT_SHROM_MPU_TABLE6_S 0 + +#define DPORT_SHROM_MPU_TABLE7_REG (DR_REG_DPORT_BASE + 0x4C0) +/* DPORT_SHROM_MPU_TABLE7 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE7 0x00000003 +#define DPORT_SHROM_MPU_TABLE7_M ((DPORT_SHROM_MPU_TABLE7_V)<<(DPORT_SHROM_MPU_TABLE7_S)) +#define DPORT_SHROM_MPU_TABLE7_V 0x3 +#define DPORT_SHROM_MPU_TABLE7_S 0 + +#define DPORT_SHROM_MPU_TABLE8_REG (DR_REG_DPORT_BASE + 0x4C4) +/* DPORT_SHROM_MPU_TABLE8 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE8 0x00000003 +#define DPORT_SHROM_MPU_TABLE8_M ((DPORT_SHROM_MPU_TABLE8_V)<<(DPORT_SHROM_MPU_TABLE8_S)) +#define DPORT_SHROM_MPU_TABLE8_V 0x3 +#define DPORT_SHROM_MPU_TABLE8_S 0 + +#define DPORT_SHROM_MPU_TABLE9_REG (DR_REG_DPORT_BASE + 0x4C8) +/* DPORT_SHROM_MPU_TABLE9 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE9 0x00000003 +#define DPORT_SHROM_MPU_TABLE9_M ((DPORT_SHROM_MPU_TABLE9_V)<<(DPORT_SHROM_MPU_TABLE9_S)) +#define DPORT_SHROM_MPU_TABLE9_V 0x3 +#define DPORT_SHROM_MPU_TABLE9_S 0 + +#define DPORT_SHROM_MPU_TABLE10_REG (DR_REG_DPORT_BASE + 0x4CC) +/* DPORT_SHROM_MPU_TABLE10 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE10 0x00000003 +#define DPORT_SHROM_MPU_TABLE10_M ((DPORT_SHROM_MPU_TABLE10_V)<<(DPORT_SHROM_MPU_TABLE10_S)) +#define DPORT_SHROM_MPU_TABLE10_V 0x3 +#define DPORT_SHROM_MPU_TABLE10_S 0 + +#define DPORT_SHROM_MPU_TABLE11_REG (DR_REG_DPORT_BASE + 0x4D0) +/* DPORT_SHROM_MPU_TABLE11 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE11 0x00000003 +#define DPORT_SHROM_MPU_TABLE11_M ((DPORT_SHROM_MPU_TABLE11_V)<<(DPORT_SHROM_MPU_TABLE11_S)) +#define DPORT_SHROM_MPU_TABLE11_V 0x3 +#define DPORT_SHROM_MPU_TABLE11_S 0 + +#define DPORT_SHROM_MPU_TABLE12_REG (DR_REG_DPORT_BASE + 0x4D4) +/* DPORT_SHROM_MPU_TABLE12 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE12 0x00000003 +#define DPORT_SHROM_MPU_TABLE12_M ((DPORT_SHROM_MPU_TABLE12_V)<<(DPORT_SHROM_MPU_TABLE12_S)) +#define DPORT_SHROM_MPU_TABLE12_V 0x3 +#define DPORT_SHROM_MPU_TABLE12_S 0 + +#define DPORT_SHROM_MPU_TABLE13_REG (DR_REG_DPORT_BASE + 0x4D8) +/* DPORT_SHROM_MPU_TABLE13 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE13 0x00000003 +#define DPORT_SHROM_MPU_TABLE13_M ((DPORT_SHROM_MPU_TABLE13_V)<<(DPORT_SHROM_MPU_TABLE13_S)) +#define DPORT_SHROM_MPU_TABLE13_V 0x3 +#define DPORT_SHROM_MPU_TABLE13_S 0 + +#define DPORT_SHROM_MPU_TABLE14_REG (DR_REG_DPORT_BASE + 0x4DC) +/* DPORT_SHROM_MPU_TABLE14 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE14 0x00000003 +#define DPORT_SHROM_MPU_TABLE14_M ((DPORT_SHROM_MPU_TABLE14_V)<<(DPORT_SHROM_MPU_TABLE14_S)) +#define DPORT_SHROM_MPU_TABLE14_V 0x3 +#define DPORT_SHROM_MPU_TABLE14_S 0 + +#define DPORT_SHROM_MPU_TABLE15_REG (DR_REG_DPORT_BASE + 0x4E0) +/* DPORT_SHROM_MPU_TABLE15 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE15 0x00000003 +#define DPORT_SHROM_MPU_TABLE15_M ((DPORT_SHROM_MPU_TABLE15_V)<<(DPORT_SHROM_MPU_TABLE15_S)) +#define DPORT_SHROM_MPU_TABLE15_V 0x3 +#define DPORT_SHROM_MPU_TABLE15_S 0 + +#define DPORT_SHROM_MPU_TABLE16_REG (DR_REG_DPORT_BASE + 0x4E4) +/* DPORT_SHROM_MPU_TABLE16 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE16 0x00000003 +#define DPORT_SHROM_MPU_TABLE16_M ((DPORT_SHROM_MPU_TABLE16_V)<<(DPORT_SHROM_MPU_TABLE16_S)) +#define DPORT_SHROM_MPU_TABLE16_V 0x3 +#define DPORT_SHROM_MPU_TABLE16_S 0 + +#define DPORT_SHROM_MPU_TABLE17_REG (DR_REG_DPORT_BASE + 0x4E8) +/* DPORT_SHROM_MPU_TABLE17 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE17 0x00000003 +#define DPORT_SHROM_MPU_TABLE17_M ((DPORT_SHROM_MPU_TABLE17_V)<<(DPORT_SHROM_MPU_TABLE17_S)) +#define DPORT_SHROM_MPU_TABLE17_V 0x3 +#define DPORT_SHROM_MPU_TABLE17_S 0 + +#define DPORT_SHROM_MPU_TABLE18_REG (DR_REG_DPORT_BASE + 0x4EC) +/* DPORT_SHROM_MPU_TABLE18 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE18 0x00000003 +#define DPORT_SHROM_MPU_TABLE18_M ((DPORT_SHROM_MPU_TABLE18_V)<<(DPORT_SHROM_MPU_TABLE18_S)) +#define DPORT_SHROM_MPU_TABLE18_V 0x3 +#define DPORT_SHROM_MPU_TABLE18_S 0 + +#define DPORT_SHROM_MPU_TABLE19_REG (DR_REG_DPORT_BASE + 0x4F0) +/* DPORT_SHROM_MPU_TABLE19 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE19 0x00000003 +#define DPORT_SHROM_MPU_TABLE19_M ((DPORT_SHROM_MPU_TABLE19_V)<<(DPORT_SHROM_MPU_TABLE19_S)) +#define DPORT_SHROM_MPU_TABLE19_V 0x3 +#define DPORT_SHROM_MPU_TABLE19_S 0 + +#define DPORT_SHROM_MPU_TABLE20_REG (DR_REG_DPORT_BASE + 0x4F4) +/* DPORT_SHROM_MPU_TABLE20 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE20 0x00000003 +#define DPORT_SHROM_MPU_TABLE20_M ((DPORT_SHROM_MPU_TABLE20_V)<<(DPORT_SHROM_MPU_TABLE20_S)) +#define DPORT_SHROM_MPU_TABLE20_V 0x3 +#define DPORT_SHROM_MPU_TABLE20_S 0 + +#define DPORT_SHROM_MPU_TABLE21_REG (DR_REG_DPORT_BASE + 0x4F8) +/* DPORT_SHROM_MPU_TABLE21 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE21 0x00000003 +#define DPORT_SHROM_MPU_TABLE21_M ((DPORT_SHROM_MPU_TABLE21_V)<<(DPORT_SHROM_MPU_TABLE21_S)) +#define DPORT_SHROM_MPU_TABLE21_V 0x3 +#define DPORT_SHROM_MPU_TABLE21_S 0 + +#define DPORT_SHROM_MPU_TABLE22_REG (DR_REG_DPORT_BASE + 0x4FC) +/* DPORT_SHROM_MPU_TABLE22 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE22 0x00000003 +#define DPORT_SHROM_MPU_TABLE22_M ((DPORT_SHROM_MPU_TABLE22_V)<<(DPORT_SHROM_MPU_TABLE22_S)) +#define DPORT_SHROM_MPU_TABLE22_V 0x3 +#define DPORT_SHROM_MPU_TABLE22_S 0 + +#define DPORT_SHROM_MPU_TABLE23_REG (DR_REG_DPORT_BASE + 0x500) +/* DPORT_SHROM_MPU_TABLE23 : R/W ;bitpos:[1:0] ;default: 2'b1 ; */ +/*description: */ +#define DPORT_SHROM_MPU_TABLE23 0x00000003 +#define DPORT_SHROM_MPU_TABLE23_M ((DPORT_SHROM_MPU_TABLE23_V)<<(DPORT_SHROM_MPU_TABLE23_S)) +#define DPORT_SHROM_MPU_TABLE23_V 0x3 +#define DPORT_SHROM_MPU_TABLE23_S 0 + +#define DPORT_IMMU_TABLE0_REG (DR_REG_DPORT_BASE + 0x504) +/* DPORT_IMMU_TABLE0 : R/W ;bitpos:[6:0] ;default: 7'd0 ; */ +/*description: */ +#define DPORT_IMMU_TABLE0 0x0000007F +#define DPORT_IMMU_TABLE0_M ((DPORT_IMMU_TABLE0_V)<<(DPORT_IMMU_TABLE0_S)) +#define DPORT_IMMU_TABLE0_V 0x7F +#define DPORT_IMMU_TABLE0_S 0 + +#define DPORT_IMMU_TABLE1_REG (DR_REG_DPORT_BASE + 0x508) +/* DPORT_IMMU_TABLE1 : R/W ;bitpos:[6:0] ;default: 7'd1 ; */ +/*description: */ +#define DPORT_IMMU_TABLE1 0x0000007F +#define DPORT_IMMU_TABLE1_M ((DPORT_IMMU_TABLE1_V)<<(DPORT_IMMU_TABLE1_S)) +#define DPORT_IMMU_TABLE1_V 0x7F +#define DPORT_IMMU_TABLE1_S 0 + +#define DPORT_IMMU_TABLE2_REG (DR_REG_DPORT_BASE + 0x50C) +/* DPORT_IMMU_TABLE2 : R/W ;bitpos:[6:0] ;default: 7'd2 ; */ +/*description: */ +#define DPORT_IMMU_TABLE2 0x0000007F +#define DPORT_IMMU_TABLE2_M ((DPORT_IMMU_TABLE2_V)<<(DPORT_IMMU_TABLE2_S)) +#define DPORT_IMMU_TABLE2_V 0x7F +#define DPORT_IMMU_TABLE2_S 0 + +#define DPORT_IMMU_TABLE3_REG (DR_REG_DPORT_BASE + 0x510) +/* DPORT_IMMU_TABLE3 : R/W ;bitpos:[6:0] ;default: 7'd3 ; */ +/*description: */ +#define DPORT_IMMU_TABLE3 0x0000007F +#define DPORT_IMMU_TABLE3_M ((DPORT_IMMU_TABLE3_V)<<(DPORT_IMMU_TABLE3_S)) +#define DPORT_IMMU_TABLE3_V 0x7F +#define DPORT_IMMU_TABLE3_S 0 + +#define DPORT_IMMU_TABLE4_REG (DR_REG_DPORT_BASE + 0x514) +/* DPORT_IMMU_TABLE4 : R/W ;bitpos:[6:0] ;default: 7'd4 ; */ +/*description: */ +#define DPORT_IMMU_TABLE4 0x0000007F +#define DPORT_IMMU_TABLE4_M ((DPORT_IMMU_TABLE4_V)<<(DPORT_IMMU_TABLE4_S)) +#define DPORT_IMMU_TABLE4_V 0x7F +#define DPORT_IMMU_TABLE4_S 0 + +#define DPORT_IMMU_TABLE5_REG (DR_REG_DPORT_BASE + 0x518) +/* DPORT_IMMU_TABLE5 : R/W ;bitpos:[6:0] ;default: 7'd5 ; */ +/*description: */ +#define DPORT_IMMU_TABLE5 0x0000007F +#define DPORT_IMMU_TABLE5_M ((DPORT_IMMU_TABLE5_V)<<(DPORT_IMMU_TABLE5_S)) +#define DPORT_IMMU_TABLE5_V 0x7F +#define DPORT_IMMU_TABLE5_S 0 + +#define DPORT_IMMU_TABLE6_REG (DR_REG_DPORT_BASE + 0x51C) +/* DPORT_IMMU_TABLE6 : R/W ;bitpos:[6:0] ;default: 7'd6 ; */ +/*description: */ +#define DPORT_IMMU_TABLE6 0x0000007F +#define DPORT_IMMU_TABLE6_M ((DPORT_IMMU_TABLE6_V)<<(DPORT_IMMU_TABLE6_S)) +#define DPORT_IMMU_TABLE6_V 0x7F +#define DPORT_IMMU_TABLE6_S 0 + +#define DPORT_IMMU_TABLE7_REG (DR_REG_DPORT_BASE + 0x520) +/* DPORT_IMMU_TABLE7 : R/W ;bitpos:[6:0] ;default: 7'd7 ; */ +/*description: */ +#define DPORT_IMMU_TABLE7 0x0000007F +#define DPORT_IMMU_TABLE7_M ((DPORT_IMMU_TABLE7_V)<<(DPORT_IMMU_TABLE7_S)) +#define DPORT_IMMU_TABLE7_V 0x7F +#define DPORT_IMMU_TABLE7_S 0 + +#define DPORT_IMMU_TABLE8_REG (DR_REG_DPORT_BASE + 0x524) +/* DPORT_IMMU_TABLE8 : R/W ;bitpos:[6:0] ;default: 7'd8 ; */ +/*description: */ +#define DPORT_IMMU_TABLE8 0x0000007F +#define DPORT_IMMU_TABLE8_M ((DPORT_IMMU_TABLE8_V)<<(DPORT_IMMU_TABLE8_S)) +#define DPORT_IMMU_TABLE8_V 0x7F +#define DPORT_IMMU_TABLE8_S 0 + +#define DPORT_IMMU_TABLE9_REG (DR_REG_DPORT_BASE + 0x528) +/* DPORT_IMMU_TABLE9 : R/W ;bitpos:[6:0] ;default: 7'd9 ; */ +/*description: */ +#define DPORT_IMMU_TABLE9 0x0000007F +#define DPORT_IMMU_TABLE9_M ((DPORT_IMMU_TABLE9_V)<<(DPORT_IMMU_TABLE9_S)) +#define DPORT_IMMU_TABLE9_V 0x7F +#define DPORT_IMMU_TABLE9_S 0 + +#define DPORT_IMMU_TABLE10_REG (DR_REG_DPORT_BASE + 0x52C) +/* DPORT_IMMU_TABLE10 : R/W ;bitpos:[6:0] ;default: 7'd10 ; */ +/*description: */ +#define DPORT_IMMU_TABLE10 0x0000007F +#define DPORT_IMMU_TABLE10_M ((DPORT_IMMU_TABLE10_V)<<(DPORT_IMMU_TABLE10_S)) +#define DPORT_IMMU_TABLE10_V 0x7F +#define DPORT_IMMU_TABLE10_S 0 + +#define DPORT_IMMU_TABLE11_REG (DR_REG_DPORT_BASE + 0x530) +/* DPORT_IMMU_TABLE11 : R/W ;bitpos:[6:0] ;default: 7'd11 ; */ +/*description: */ +#define DPORT_IMMU_TABLE11 0x0000007F +#define DPORT_IMMU_TABLE11_M ((DPORT_IMMU_TABLE11_V)<<(DPORT_IMMU_TABLE11_S)) +#define DPORT_IMMU_TABLE11_V 0x7F +#define DPORT_IMMU_TABLE11_S 0 + +#define DPORT_IMMU_TABLE12_REG (DR_REG_DPORT_BASE + 0x534) +/* DPORT_IMMU_TABLE12 : R/W ;bitpos:[6:0] ;default: 7'd12 ; */ +/*description: */ +#define DPORT_IMMU_TABLE12 0x0000007F +#define DPORT_IMMU_TABLE12_M ((DPORT_IMMU_TABLE12_V)<<(DPORT_IMMU_TABLE12_S)) +#define DPORT_IMMU_TABLE12_V 0x7F +#define DPORT_IMMU_TABLE12_S 0 + +#define DPORT_IMMU_TABLE13_REG (DR_REG_DPORT_BASE + 0x538) +/* DPORT_IMMU_TABLE13 : R/W ;bitpos:[6:0] ;default: 7'd13 ; */ +/*description: */ +#define DPORT_IMMU_TABLE13 0x0000007F +#define DPORT_IMMU_TABLE13_M ((DPORT_IMMU_TABLE13_V)<<(DPORT_IMMU_TABLE13_S)) +#define DPORT_IMMU_TABLE13_V 0x7F +#define DPORT_IMMU_TABLE13_S 0 + +#define DPORT_IMMU_TABLE14_REG (DR_REG_DPORT_BASE + 0x53C) +/* DPORT_IMMU_TABLE14 : R/W ;bitpos:[6:0] ;default: 7'd14 ; */ +/*description: */ +#define DPORT_IMMU_TABLE14 0x0000007F +#define DPORT_IMMU_TABLE14_M ((DPORT_IMMU_TABLE14_V)<<(DPORT_IMMU_TABLE14_S)) +#define DPORT_IMMU_TABLE14_V 0x7F +#define DPORT_IMMU_TABLE14_S 0 + +#define DPORT_IMMU_TABLE15_REG (DR_REG_DPORT_BASE + 0x540) +/* DPORT_IMMU_TABLE15 : R/W ;bitpos:[6:0] ;default: 7'd15 ; */ +/*description: */ +#define DPORT_IMMU_TABLE15 0x0000007F +#define DPORT_IMMU_TABLE15_M ((DPORT_IMMU_TABLE15_V)<<(DPORT_IMMU_TABLE15_S)) +#define DPORT_IMMU_TABLE15_V 0x7F +#define DPORT_IMMU_TABLE15_S 0 + +#define DPORT_DMMU_TABLE0_REG (DR_REG_DPORT_BASE + 0x544) +/* DPORT_DMMU_TABLE0 : R/W ;bitpos:[6:0] ;default: 7'd0 ; */ +/*description: */ +#define DPORT_DMMU_TABLE0 0x0000007F +#define DPORT_DMMU_TABLE0_M ((DPORT_DMMU_TABLE0_V)<<(DPORT_DMMU_TABLE0_S)) +#define DPORT_DMMU_TABLE0_V 0x7F +#define DPORT_DMMU_TABLE0_S 0 + +#define DPORT_DMMU_TABLE1_REG (DR_REG_DPORT_BASE + 0x548) +/* DPORT_DMMU_TABLE1 : R/W ;bitpos:[6:0] ;default: 7'd1 ; */ +/*description: */ +#define DPORT_DMMU_TABLE1 0x0000007F +#define DPORT_DMMU_TABLE1_M ((DPORT_DMMU_TABLE1_V)<<(DPORT_DMMU_TABLE1_S)) +#define DPORT_DMMU_TABLE1_V 0x7F +#define DPORT_DMMU_TABLE1_S 0 + +#define DPORT_DMMU_TABLE2_REG (DR_REG_DPORT_BASE + 0x54C) +/* DPORT_DMMU_TABLE2 : R/W ;bitpos:[6:0] ;default: 7'd2 ; */ +/*description: */ +#define DPORT_DMMU_TABLE2 0x0000007F +#define DPORT_DMMU_TABLE2_M ((DPORT_DMMU_TABLE2_V)<<(DPORT_DMMU_TABLE2_S)) +#define DPORT_DMMU_TABLE2_V 0x7F +#define DPORT_DMMU_TABLE2_S 0 + +#define DPORT_DMMU_TABLE3_REG (DR_REG_DPORT_BASE + 0x550) +/* DPORT_DMMU_TABLE3 : R/W ;bitpos:[6:0] ;default: 7'd3 ; */ +/*description: */ +#define DPORT_DMMU_TABLE3 0x0000007F +#define DPORT_DMMU_TABLE3_M ((DPORT_DMMU_TABLE3_V)<<(DPORT_DMMU_TABLE3_S)) +#define DPORT_DMMU_TABLE3_V 0x7F +#define DPORT_DMMU_TABLE3_S 0 + +#define DPORT_DMMU_TABLE4_REG (DR_REG_DPORT_BASE + 0x554) +/* DPORT_DMMU_TABLE4 : R/W ;bitpos:[6:0] ;default: 7'd4 ; */ +/*description: */ +#define DPORT_DMMU_TABLE4 0x0000007F +#define DPORT_DMMU_TABLE4_M ((DPORT_DMMU_TABLE4_V)<<(DPORT_DMMU_TABLE4_S)) +#define DPORT_DMMU_TABLE4_V 0x7F +#define DPORT_DMMU_TABLE4_S 0 + +#define DPORT_DMMU_TABLE5_REG (DR_REG_DPORT_BASE + 0x558) +/* DPORT_DMMU_TABLE5 : R/W ;bitpos:[6:0] ;default: 7'd5 ; */ +/*description: */ +#define DPORT_DMMU_TABLE5 0x0000007F +#define DPORT_DMMU_TABLE5_M ((DPORT_DMMU_TABLE5_V)<<(DPORT_DMMU_TABLE5_S)) +#define DPORT_DMMU_TABLE5_V 0x7F +#define DPORT_DMMU_TABLE5_S 0 + +#define DPORT_DMMU_TABLE6_REG (DR_REG_DPORT_BASE + 0x55C) +/* DPORT_DMMU_TABLE6 : R/W ;bitpos:[6:0] ;default: 7'd6 ; */ +/*description: */ +#define DPORT_DMMU_TABLE6 0x0000007F +#define DPORT_DMMU_TABLE6_M ((DPORT_DMMU_TABLE6_V)<<(DPORT_DMMU_TABLE6_S)) +#define DPORT_DMMU_TABLE6_V 0x7F +#define DPORT_DMMU_TABLE6_S 0 + +#define DPORT_DMMU_TABLE7_REG (DR_REG_DPORT_BASE + 0x560) +/* DPORT_DMMU_TABLE7 : R/W ;bitpos:[6:0] ;default: 7'd7 ; */ +/*description: */ +#define DPORT_DMMU_TABLE7 0x0000007F +#define DPORT_DMMU_TABLE7_M ((DPORT_DMMU_TABLE7_V)<<(DPORT_DMMU_TABLE7_S)) +#define DPORT_DMMU_TABLE7_V 0x7F +#define DPORT_DMMU_TABLE7_S 0 + +#define DPORT_DMMU_TABLE8_REG (DR_REG_DPORT_BASE + 0x564) +/* DPORT_DMMU_TABLE8 : R/W ;bitpos:[6:0] ;default: 7'd8 ; */ +/*description: */ +#define DPORT_DMMU_TABLE8 0x0000007F +#define DPORT_DMMU_TABLE8_M ((DPORT_DMMU_TABLE8_V)<<(DPORT_DMMU_TABLE8_S)) +#define DPORT_DMMU_TABLE8_V 0x7F +#define DPORT_DMMU_TABLE8_S 0 + +#define DPORT_DMMU_TABLE9_REG (DR_REG_DPORT_BASE + 0x568) +/* DPORT_DMMU_TABLE9 : R/W ;bitpos:[6:0] ;default: 7'd9 ; */ +/*description: */ +#define DPORT_DMMU_TABLE9 0x0000007F +#define DPORT_DMMU_TABLE9_M ((DPORT_DMMU_TABLE9_V)<<(DPORT_DMMU_TABLE9_S)) +#define DPORT_DMMU_TABLE9_V 0x7F +#define DPORT_DMMU_TABLE9_S 0 + +#define DPORT_DMMU_TABLE10_REG (DR_REG_DPORT_BASE + 0x56C) +/* DPORT_DMMU_TABLE10 : R/W ;bitpos:[6:0] ;default: 7'd10 ; */ +/*description: */ +#define DPORT_DMMU_TABLE10 0x0000007F +#define DPORT_DMMU_TABLE10_M ((DPORT_DMMU_TABLE10_V)<<(DPORT_DMMU_TABLE10_S)) +#define DPORT_DMMU_TABLE10_V 0x7F +#define DPORT_DMMU_TABLE10_S 0 + +#define DPORT_DMMU_TABLE11_REG (DR_REG_DPORT_BASE + 0x570) +/* DPORT_DMMU_TABLE11 : R/W ;bitpos:[6:0] ;default: 7'd11 ; */ +/*description: */ +#define DPORT_DMMU_TABLE11 0x0000007F +#define DPORT_DMMU_TABLE11_M ((DPORT_DMMU_TABLE11_V)<<(DPORT_DMMU_TABLE11_S)) +#define DPORT_DMMU_TABLE11_V 0x7F +#define DPORT_DMMU_TABLE11_S 0 + +#define DPORT_DMMU_TABLE12_REG (DR_REG_DPORT_BASE + 0x574) +/* DPORT_DMMU_TABLE12 : R/W ;bitpos:[6:0] ;default: 7'd12 ; */ +/*description: */ +#define DPORT_DMMU_TABLE12 0x0000007F +#define DPORT_DMMU_TABLE12_M ((DPORT_DMMU_TABLE12_V)<<(DPORT_DMMU_TABLE12_S)) +#define DPORT_DMMU_TABLE12_V 0x7F +#define DPORT_DMMU_TABLE12_S 0 + +#define DPORT_DMMU_TABLE13_REG (DR_REG_DPORT_BASE + 0x578) +/* DPORT_DMMU_TABLE13 : R/W ;bitpos:[6:0] ;default: 7'd13 ; */ +/*description: */ +#define DPORT_DMMU_TABLE13 0x0000007F +#define DPORT_DMMU_TABLE13_M ((DPORT_DMMU_TABLE13_V)<<(DPORT_DMMU_TABLE13_S)) +#define DPORT_DMMU_TABLE13_V 0x7F +#define DPORT_DMMU_TABLE13_S 0 + +#define DPORT_DMMU_TABLE14_REG (DR_REG_DPORT_BASE + 0x57C) +/* DPORT_DMMU_TABLE14 : R/W ;bitpos:[6:0] ;default: 7'd14 ; */ +/*description: */ +#define DPORT_DMMU_TABLE14 0x0000007F +#define DPORT_DMMU_TABLE14_M ((DPORT_DMMU_TABLE14_V)<<(DPORT_DMMU_TABLE14_S)) +#define DPORT_DMMU_TABLE14_V 0x7F +#define DPORT_DMMU_TABLE14_S 0 + +#define DPORT_DMMU_TABLE15_REG (DR_REG_DPORT_BASE + 0x580) +/* DPORT_DMMU_TABLE15 : R/W ;bitpos:[6:0] ;default: 7'd15 ; */ +/*description: */ +#define DPORT_DMMU_TABLE15 0x0000007F +#define DPORT_DMMU_TABLE15_M ((DPORT_DMMU_TABLE15_V)<<(DPORT_DMMU_TABLE15_S)) +#define DPORT_DMMU_TABLE15_V 0x7F +#define DPORT_DMMU_TABLE15_S 0 + +#define DPORT_PRO_INTRUSION_CTRL_REG (DR_REG_DPORT_BASE + 0x584) +/* DPORT_PRO_INTRUSION_RECORD_RESET_N : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PRO_INTRUSION_RECORD_RESET_N (BIT(0)) +#define DPORT_PRO_INTRUSION_RECORD_RESET_N_M (BIT(0)) +#define DPORT_PRO_INTRUSION_RECORD_RESET_N_V 0x1 +#define DPORT_PRO_INTRUSION_RECORD_RESET_N_S 0 + +#define DPORT_PRO_INTRUSION_STATUS_REG (DR_REG_DPORT_BASE + 0x588) +/* DPORT_PRO_INTRUSION_RECORD : RO ;bitpos:[3:0] ;default: 4'b0 ; */ +/*description: */ +#define DPORT_PRO_INTRUSION_RECORD 0x0000000F +#define DPORT_PRO_INTRUSION_RECORD_M ((DPORT_PRO_INTRUSION_RECORD_V)<<(DPORT_PRO_INTRUSION_RECORD_S)) +#define DPORT_PRO_INTRUSION_RECORD_V 0xF +#define DPORT_PRO_INTRUSION_RECORD_S 0 + +#define DPORT_APP_INTRUSION_CTRL_REG (DR_REG_DPORT_BASE + 0x58C) +/* DPORT_APP_INTRUSION_RECORD_RESET_N : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_APP_INTRUSION_RECORD_RESET_N (BIT(0)) +#define DPORT_APP_INTRUSION_RECORD_RESET_N_M (BIT(0)) +#define DPORT_APP_INTRUSION_RECORD_RESET_N_V 0x1 +#define DPORT_APP_INTRUSION_RECORD_RESET_N_S 0 + +#define DPORT_APP_INTRUSION_STATUS_REG (DR_REG_DPORT_BASE + 0x590) +/* DPORT_APP_INTRUSION_RECORD : RO ;bitpos:[3:0] ;default: 4'b0 ; */ +/*description: */ +#define DPORT_APP_INTRUSION_RECORD 0x0000000F +#define DPORT_APP_INTRUSION_RECORD_M ((DPORT_APP_INTRUSION_RECORD_V)<<(DPORT_APP_INTRUSION_RECORD_S)) +#define DPORT_APP_INTRUSION_RECORD_V 0xF +#define DPORT_APP_INTRUSION_RECORD_S 0 + +#define DPORT_FRONT_END_MEM_PD_REG (DR_REG_DPORT_BASE + 0x594) +/* DPORT_PBUS_MEM_FORCE_PD : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_PBUS_MEM_FORCE_PD (BIT(3)) +#define DPORT_PBUS_MEM_FORCE_PD_M (BIT(3)) +#define DPORT_PBUS_MEM_FORCE_PD_V 0x1 +#define DPORT_PBUS_MEM_FORCE_PD_S 3 +/* DPORT_PBUS_MEM_FORCE_PU : R/W ;bitpos:[2] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_PBUS_MEM_FORCE_PU (BIT(2)) +#define DPORT_PBUS_MEM_FORCE_PU_M (BIT(2)) +#define DPORT_PBUS_MEM_FORCE_PU_V 0x1 +#define DPORT_PBUS_MEM_FORCE_PU_S 2 +/* DPORT_AGC_MEM_FORCE_PD : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_AGC_MEM_FORCE_PD (BIT(1)) +#define DPORT_AGC_MEM_FORCE_PD_M (BIT(1)) +#define DPORT_AGC_MEM_FORCE_PD_V 0x1 +#define DPORT_AGC_MEM_FORCE_PD_S 1 +/* DPORT_AGC_MEM_FORCE_PU : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: */ +#define DPORT_AGC_MEM_FORCE_PU (BIT(0)) +#define DPORT_AGC_MEM_FORCE_PU_M (BIT(0)) +#define DPORT_AGC_MEM_FORCE_PU_V 0x1 +#define DPORT_AGC_MEM_FORCE_PU_S 0 + +#define DPORT_MMU_IA_INT_EN_REG (DR_REG_DPORT_BASE + 0x598) +/* DPORT_MMU_IA_INT_EN : R/W ;bitpos:[23:0] ;default: 24'b0 ; */ +/*description: */ +#define DPORT_MMU_IA_INT_EN 0x00FFFFFF +#define DPORT_MMU_IA_INT_EN_M ((DPORT_MMU_IA_INT_EN_V)<<(DPORT_MMU_IA_INT_EN_S)) +#define DPORT_MMU_IA_INT_EN_V 0xFFFFFF +#define DPORT_MMU_IA_INT_EN_S 0 + +#define DPORT_MPU_IA_INT_EN_REG (DR_REG_DPORT_BASE + 0x59C) +/* DPORT_MPU_IA_INT_EN : R/W ;bitpos:[16:0] ;default: 17'b0 ; */ +/*description: */ +#define DPORT_MPU_IA_INT_EN 0x0001FFFF +#define DPORT_MPU_IA_INT_EN_M ((DPORT_MPU_IA_INT_EN_V)<<(DPORT_MPU_IA_INT_EN_S)) +#define DPORT_MPU_IA_INT_EN_V 0x1FFFF +#define DPORT_MPU_IA_INT_EN_S 0 + +#define DPORT_CACHE_IA_INT_EN_REG (DR_REG_DPORT_BASE + 0x5A0) +/* DPORT_CACHE_IA_INT_EN : R/W ;bitpos:[27:0] ;default: 28'b0 ; */ +/*description: */ +#define DPORT_CACHE_IA_INT_EN 0x0FFFFFFF +#define DPORT_CACHE_IA_INT_EN_M ((DPORT_CACHE_IA_INT_EN_V)<<(DPORT_CACHE_IA_INT_EN_S)) +#define DPORT_CACHE_IA_INT_EN_V 0xFFFFFFF +#define DPORT_CACHE_IA_INT_EN_S 0 + +#define DPORT_SECURE_BOOT_CTRL_REG (DR_REG_DPORT_BASE + 0x5A4) +/* DPORT_SW_BOOTLOADER_SEL : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define DPORT_SW_BOOTLOADER_SEL (BIT(0)) +#define DPORT_SW_BOOTLOADER_SEL_M (BIT(0)) +#define DPORT_SW_BOOTLOADER_SEL_V 0x1 +#define DPORT_SW_BOOTLOADER_SEL_S 0 + +#define DPORT_SPI_DMA_CHAN_SEL_REG (DR_REG_DPORT_BASE + 0x5A8) +/* DPORT_SPI3_DMA_CHAN_SEL : R/W ;bitpos:[5:4] ;default: 2'b00 ; */ +/*description: */ +#define DPORT_SPI3_DMA_CHAN_SEL 0x00000003 +#define DPORT_SPI3_DMA_CHAN_SEL_M ((DPORT_SPI3_DMA_CHAN_SEL_V)<<(DPORT_SPI3_DMA_CHAN_SEL_S)) +#define DPORT_SPI3_DMA_CHAN_SEL_V 0x3 +#define DPORT_SPI3_DMA_CHAN_SEL_S 4 +/* DPORT_SPI2_DMA_CHAN_SEL : R/W ;bitpos:[3:2] ;default: 2'b00 ; */ +/*description: */ +#define DPORT_SPI2_DMA_CHAN_SEL 0x00000003 +#define DPORT_SPI2_DMA_CHAN_SEL_M ((DPORT_SPI2_DMA_CHAN_SEL_V)<<(DPORT_SPI2_DMA_CHAN_SEL_S)) +#define DPORT_SPI2_DMA_CHAN_SEL_V 0x3 +#define DPORT_SPI2_DMA_CHAN_SEL_S 2 +/* DPORT_SPI1_DMA_CHAN_SEL : R/W ;bitpos:[1:0] ;default: 2'b00 ; */ +/*description: */ +#define DPORT_SPI1_DMA_CHAN_SEL 0x00000003 +#define DPORT_SPI1_DMA_CHAN_SEL_M ((DPORT_SPI1_DMA_CHAN_SEL_V)<<(DPORT_SPI1_DMA_CHAN_SEL_S)) +#define DPORT_SPI1_DMA_CHAN_SEL_V 0x3 +#define DPORT_SPI1_DMA_CHAN_SEL_S 0 + +#define DPORT_PRO_VECBASE_CTRL_REG (DR_REG_DPORT_BASE + 0x5AC) +/* DPORT_PRO_OUT_VECBASE_SEL : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_PRO_OUT_VECBASE_SEL 0x00000003 +#define DPORT_PRO_OUT_VECBASE_SEL_M ((DPORT_PRO_OUT_VECBASE_SEL_V)<<(DPORT_PRO_OUT_VECBASE_SEL_S)) +#define DPORT_PRO_OUT_VECBASE_SEL_V 0x3 +#define DPORT_PRO_OUT_VECBASE_SEL_S 0 + +#define DPORT_PRO_VECBASE_SET_REG (DR_REG_DPORT_BASE + 0x5B0) +/* DPORT_PRO_OUT_VECBASE_REG : R/W ;bitpos:[21:0] ;default: 22'b0 ; */ +/*description: */ +#define DPORT_PRO_OUT_VECBASE_REG 0x003FFFFF +#define DPORT_PRO_OUT_VECBASE_REG_M ((DPORT_PRO_OUT_VECBASE_REG_V)<<(DPORT_PRO_OUT_VECBASE_REG_S)) +#define DPORT_PRO_OUT_VECBASE_REG_V 0x3FFFFF +#define DPORT_PRO_OUT_VECBASE_REG_S 0 + +#define DPORT_APP_VECBASE_CTRL_REG (DR_REG_DPORT_BASE + 0x5B4) +/* DPORT_APP_OUT_VECBASE_SEL : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ +/*description: */ +#define DPORT_APP_OUT_VECBASE_SEL 0x00000003 +#define DPORT_APP_OUT_VECBASE_SEL_M ((DPORT_APP_OUT_VECBASE_SEL_V)<<(DPORT_APP_OUT_VECBASE_SEL_S)) +#define DPORT_APP_OUT_VECBASE_SEL_V 0x3 +#define DPORT_APP_OUT_VECBASE_SEL_S 0 + +#define DPORT_APP_VECBASE_SET_REG (DR_REG_DPORT_BASE + 0x5B8) +/* DPORT_APP_OUT_VECBASE_REG : R/W ;bitpos:[21:0] ;default: 22'b0 ; */ +/*description: */ +#define DPORT_APP_OUT_VECBASE_REG 0x003FFFFF +#define DPORT_APP_OUT_VECBASE_REG_M ((DPORT_APP_OUT_VECBASE_REG_V)<<(DPORT_APP_OUT_VECBASE_REG_S)) +#define DPORT_APP_OUT_VECBASE_REG_V 0x3FFFFF +#define DPORT_APP_OUT_VECBASE_REG_S 0 + +#define DPORT_DATE_REG (DR_REG_DPORT_BASE + 0xFFC) +/* DPORT_DATE : R/W ;bitpos:[27:0] ;default: 28'h1605190 ; */ +/*description: */ +#define DPORT_DATE 0x0FFFFFFF +#define DPORT_DATE_M ((DPORT_DATE_V)<<(DPORT_DATE_S)) +#define DPORT_DATE_V 0xFFFFFFF +#define DPORT_DATE_S 0 +#define DPORT_DPORT_DATE_VERSION 0x1605190 + + + + +#endif /*_SOC_DPORT_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/efuse_reg.h b/tools/sdk/include/esp32/soc/efuse_reg.h new file mode 100644 index 00000000..a0f0a07d --- /dev/null +++ b/tools/sdk/include/esp32/soc/efuse_reg.h @@ -0,0 +1,986 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_EFUSE_REG_H_ +#define _SOC_EFUSE_REG_H_ + + +#include "soc.h" +#define EFUSE_BLK0_RDATA0_REG (DR_REG_EFUSE_BASE + 0x000) +/* EFUSE_RD_FLASH_CRYPT_CNT : RO ;bitpos:[27:20] ;default: 8'b0 ; */ +/*description: read for flash_crypt_cnt*/ +#define EFUSE_RD_FLASH_CRYPT_CNT 0x000000FF +#define EFUSE_RD_FLASH_CRYPT_CNT_M ((EFUSE_RD_FLASH_CRYPT_CNT_V)<<(EFUSE_RD_FLASH_CRYPT_CNT_S)) +#define EFUSE_RD_FLASH_CRYPT_CNT_V 0xFF +#define EFUSE_RD_FLASH_CRYPT_CNT_S 20 +/* EFUSE_RD_EFUSE_RD_DIS : RO ;bitpos:[19:16] ;default: 4'b0 ; */ +/*description: read for efuse_rd_disable*/ +#define EFUSE_RD_EFUSE_RD_DIS 0x0000000F +#define EFUSE_RD_EFUSE_RD_DIS_M ((EFUSE_RD_EFUSE_RD_DIS_V)<<(EFUSE_RD_EFUSE_RD_DIS_S)) +#define EFUSE_RD_EFUSE_RD_DIS_V 0xF +#define EFUSE_RD_EFUSE_RD_DIS_S 16 +/* EFUSE_RD_EFUSE_WR_DIS : RO ;bitpos:[15:0] ;default: 16'b0 ; */ +/*description: read for efuse_wr_disable*/ +#define EFUSE_RD_EFUSE_WR_DIS 0x0000FFFF +#define EFUSE_RD_EFUSE_WR_DIS_M ((EFUSE_RD_EFUSE_WR_DIS_V)<<(EFUSE_RD_EFUSE_WR_DIS_S)) +#define EFUSE_RD_EFUSE_WR_DIS_V 0xFFFF +#define EFUSE_RD_EFUSE_WR_DIS_S 0 + +#define EFUSE_BLK0_RDATA1_REG (DR_REG_EFUSE_BASE + 0x004) +/* EFUSE_RD_WIFI_MAC_CRC_LOW : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: read for low 32bit WIFI_MAC_Address*/ +#define EFUSE_RD_WIFI_MAC_CRC_LOW 0xFFFFFFFF +#define EFUSE_RD_WIFI_MAC_CRC_LOW_M ((EFUSE_RD_WIFI_MAC_CRC_LOW_V)<<(EFUSE_RD_WIFI_MAC_CRC_LOW_S)) +#define EFUSE_RD_WIFI_MAC_CRC_LOW_V 0xFFFFFFFF +#define EFUSE_RD_WIFI_MAC_CRC_LOW_S 0 + +#define EFUSE_BLK0_RDATA2_REG (DR_REG_EFUSE_BASE + 0x008) +/* EFUSE_RD_WIFI_MAC_CRC_HIGH : RO ;bitpos:[23:0] ;default: 24'b0 ; */ +/*description: read for high 24bit WIFI_MAC_Address*/ +#define EFUSE_RD_WIFI_MAC_CRC_HIGH 0x00FFFFFF +#define EFUSE_RD_WIFI_MAC_CRC_HIGH_M ((EFUSE_RD_WIFI_MAC_CRC_HIGH_V)<<(EFUSE_RD_WIFI_MAC_CRC_HIGH_S)) +#define EFUSE_RD_WIFI_MAC_CRC_HIGH_V 0xFFFFFF +#define EFUSE_RD_WIFI_MAC_CRC_HIGH_S 0 + +#define EFUSE_BLK0_RDATA3_REG (DR_REG_EFUSE_BASE + 0x00c) +/* EFUSE_RD_CHIP_VER_RESERVE : RO ;bitpos:[16:9] ;default: 8'b0 ; */ +/*description: */ +#define EFUSE_RD_CHIP_VER_RESERVE 0x000000FF +#define EFUSE_RD_CHIP_VER_RESERVE_M ((EFUSE_RD_CHIP_VER_RESERVE_V)<<(EFUSE_RD_CHIP_VER_RESERVE_S)) +#define EFUSE_RD_CHIP_VER_RESERVE_V 0xFF +#define EFUSE_RD_CHIP_VER_RESERVE_S 9 +/* EFUSE_RD_SPI_PAD_CONFIG_HD : RO ;bitpos:[8:4] ;default: 5'b0 ; */ +/*description: read for SPI_pad_config_hd*/ +#define EFUSE_RD_SPI_PAD_CONFIG_HD 0x0000001F +#define EFUSE_RD_SPI_PAD_CONFIG_HD_M ((EFUSE_RD_SPI_PAD_CONFIG_HD_V)<<(EFUSE_RD_SPI_PAD_CONFIG_HD_S)) +#define EFUSE_RD_SPI_PAD_CONFIG_HD_V 0x1F +#define EFUSE_RD_SPI_PAD_CONFIG_HD_S 4 +/* EFUSE_RD_CHIP_VER_DIS_CACHE : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_RD_CHIP_VER_DIS_CACHE (BIT(3)) +#define EFUSE_RD_CHIP_VER_DIS_CACHE_M (BIT(3)) +#define EFUSE_RD_CHIP_VER_DIS_CACHE_V 0x1 +#define EFUSE_RD_CHIP_VER_DIS_CACHE_S 3 +/* EFUSE_RD_CHIP_VER_32PAD : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_RD_CHIP_VER_32PAD (BIT(2)) +#define EFUSE_RD_CHIP_VER_32PAD_M (BIT(2)) +#define EFUSE_RD_CHIP_VER_32PAD_V 0x1 +#define EFUSE_RD_CHIP_VER_32PAD_S 2 +/* EFUSE_RD_CHIP_VER_DIS_BT : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_RD_CHIP_VER_DIS_BT (BIT(1)) +#define EFUSE_RD_CHIP_VER_DIS_BT_M (BIT(1)) +#define EFUSE_RD_CHIP_VER_DIS_BT_V 0x1 +#define EFUSE_RD_CHIP_VER_DIS_BT_S 1 +/* EFUSE_RD_CHIP_VER_DIS_APP_CPU : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_RD_CHIP_VER_DIS_APP_CPU (BIT(0)) +#define EFUSE_RD_CHIP_VER_DIS_APP_CPU_M (BIT(0)) +#define EFUSE_RD_CHIP_VER_DIS_APP_CPU_V 0x1 +#define EFUSE_RD_CHIP_VER_DIS_APP_CPU_S 0 + +#define EFUSE_BLK0_RDATA4_REG (DR_REG_EFUSE_BASE + 0x010) +/* EFUSE_RD_SDIO_FORCE : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: read for sdio_force*/ +#define EFUSE_RD_SDIO_FORCE (BIT(16)) +#define EFUSE_RD_SDIO_FORCE_M (BIT(16)) +#define EFUSE_RD_SDIO_FORCE_V 0x1 +#define EFUSE_RD_SDIO_FORCE_S 16 +/* EFUSE_RD_SDIO_TIEH : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: read for SDIO_TIEH*/ +#define EFUSE_RD_SDIO_TIEH (BIT(15)) +#define EFUSE_RD_SDIO_TIEH_M (BIT(15)) +#define EFUSE_RD_SDIO_TIEH_V 0x1 +#define EFUSE_RD_SDIO_TIEH_S 15 +/* EFUSE_RD_XPD_SDIO_REG : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: read for XPD_SDIO_REG*/ +#define EFUSE_RD_XPD_SDIO_REG (BIT(14)) +#define EFUSE_RD_XPD_SDIO_REG_M (BIT(14)) +#define EFUSE_RD_XPD_SDIO_REG_V 0x1 +#define EFUSE_RD_XPD_SDIO_REG_S 14 +/* EFUSE_RD_SDIO_DREFL : RO ;bitpos:[13:12] ;default: 2'b0 ; */ +/*description: */ +#define EFUSE_RD_SDIO_DREFL 0x00000003 +#define EFUSE_RD_SDIO_DREFL_M ((EFUSE_RD_SDIO_DREFL_V)<<(EFUSE_RD_SDIO_DREFL_S)) +#define EFUSE_RD_SDIO_DREFL_V 0x3 +#define EFUSE_RD_SDIO_DREFL_S 12 +/* EFUSE_RD_SDIO_DREFM : RO ;bitpos:[11:10] ;default: 2'b0 ; */ +/*description: */ +#define EFUSE_RD_SDIO_DREFM 0x00000003 +#define EFUSE_RD_SDIO_DREFM_M ((EFUSE_RD_SDIO_DREFM_V)<<(EFUSE_RD_SDIO_DREFM_S)) +#define EFUSE_RD_SDIO_DREFM_V 0x3 +#define EFUSE_RD_SDIO_DREFM_S 10 +/* EFUSE_RD_SDIO_DREFH : RO ;bitpos:[9:8] ;default: 2'b0 ; */ +/*description: */ +#define EFUSE_RD_SDIO_DREFH 0x00000003 +#define EFUSE_RD_SDIO_DREFH_M ((EFUSE_RD_SDIO_DREFH_V)<<(EFUSE_RD_SDIO_DREFH_S)) +#define EFUSE_RD_SDIO_DREFH_V 0x3 +#define EFUSE_RD_SDIO_DREFH_S 8 +/* EFUSE_RD_CK8M_FREQ : RO ;bitpos:[7:0] ;default: 8'b0 ; */ +/*description: */ +#define EFUSE_RD_CK8M_FREQ 0x000000FF +#define EFUSE_RD_CK8M_FREQ_M ((EFUSE_RD_CK8M_FREQ_V)<<(EFUSE_RD_CK8M_FREQ_S)) +#define EFUSE_RD_CK8M_FREQ_V 0xFF +#define EFUSE_RD_CK8M_FREQ_S 0 + +#define EFUSE_BLK0_RDATA5_REG (DR_REG_EFUSE_BASE + 0x014) +/* EFUSE_RD_FLASH_CRYPT_CONFIG : RO ;bitpos:[31:28] ;default: 4'b0 ; */ +/*description: read for flash_crypt_config*/ +#define EFUSE_RD_FLASH_CRYPT_CONFIG 0x0000000F +#define EFUSE_RD_FLASH_CRYPT_CONFIG_M ((EFUSE_RD_FLASH_CRYPT_CONFIG_V)<<(EFUSE_RD_FLASH_CRYPT_CONFIG_S)) +#define EFUSE_RD_FLASH_CRYPT_CONFIG_V 0xF +#define EFUSE_RD_FLASH_CRYPT_CONFIG_S 28 +/* EFUSE_RD_INST_CONFIG : RO ;bitpos:[27:20] ;default: 8'b0 ; */ +/*description: */ +#define EFUSE_RD_INST_CONFIG 0x000000FF +#define EFUSE_RD_INST_CONFIG_M ((EFUSE_RD_INST_CONFIG_V)<<(EFUSE_RD_INST_CONFIG_S)) +#define EFUSE_RD_INST_CONFIG_V 0xFF +#define EFUSE_RD_INST_CONFIG_S 20 +/* EFUSE_RD_SPI_PAD_CONFIG_CS0 : RO ;bitpos:[19:15] ;default: 5'b0 ; */ +/*description: read for SPI_pad_config_cs0*/ +#define EFUSE_RD_SPI_PAD_CONFIG_CS0 0x0000001F +#define EFUSE_RD_SPI_PAD_CONFIG_CS0_M ((EFUSE_RD_SPI_PAD_CONFIG_CS0_V)<<(EFUSE_RD_SPI_PAD_CONFIG_CS0_S)) +#define EFUSE_RD_SPI_PAD_CONFIG_CS0_V 0x1F +#define EFUSE_RD_SPI_PAD_CONFIG_CS0_S 15 +/* EFUSE_RD_SPI_PAD_CONFIG_D : RO ;bitpos:[14:10] ;default: 5'b0 ; */ +/*description: read for SPI_pad_config_d*/ +#define EFUSE_RD_SPI_PAD_CONFIG_D 0x0000001F +#define EFUSE_RD_SPI_PAD_CONFIG_D_M ((EFUSE_RD_SPI_PAD_CONFIG_D_V)<<(EFUSE_RD_SPI_PAD_CONFIG_D_S)) +#define EFUSE_RD_SPI_PAD_CONFIG_D_V 0x1F +#define EFUSE_RD_SPI_PAD_CONFIG_D_S 10 +/* EFUSE_RD_SPI_PAD_CONFIG_Q : RO ;bitpos:[9:5] ;default: 5'b0 ; */ +/*description: read for SPI_pad_config_q*/ +#define EFUSE_RD_SPI_PAD_CONFIG_Q 0x0000001F +#define EFUSE_RD_SPI_PAD_CONFIG_Q_M ((EFUSE_RD_SPI_PAD_CONFIG_Q_V)<<(EFUSE_RD_SPI_PAD_CONFIG_Q_S)) +#define EFUSE_RD_SPI_PAD_CONFIG_Q_V 0x1F +#define EFUSE_RD_SPI_PAD_CONFIG_Q_S 5 +/* EFUSE_RD_SPI_PAD_CONFIG_CLK : RO ;bitpos:[4:0] ;default: 5'b0 ; */ +/*description: read for SPI_pad_config_clk*/ +#define EFUSE_RD_SPI_PAD_CONFIG_CLK 0x0000001F +#define EFUSE_RD_SPI_PAD_CONFIG_CLK_M ((EFUSE_RD_SPI_PAD_CONFIG_CLK_V)<<(EFUSE_RD_SPI_PAD_CONFIG_CLK_S)) +#define EFUSE_RD_SPI_PAD_CONFIG_CLK_V 0x1F +#define EFUSE_RD_SPI_PAD_CONFIG_CLK_S 0 + +#define EFUSE_BLK0_RDATA6_REG (DR_REG_EFUSE_BASE + 0x018) +/* EFUSE_RD_KEY_STATUS : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: read for key_status*/ +#define EFUSE_RD_KEY_STATUS (BIT(10)) +#define EFUSE_RD_KEY_STATUS_M (BIT(10)) +#define EFUSE_RD_KEY_STATUS_V 0x1 +#define EFUSE_RD_KEY_STATUS_S 10 +/* EFUSE_RD_DISABLE_DL_CACHE : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: read for download_dis_cache*/ +#define EFUSE_RD_DISABLE_DL_CACHE (BIT(9)) +#define EFUSE_RD_DISABLE_DL_CACHE_M (BIT(9)) +#define EFUSE_RD_DISABLE_DL_CACHE_V 0x1 +#define EFUSE_RD_DISABLE_DL_CACHE_S 9 +/* EFUSE_RD_DISABLE_DL_DECRYPT : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: read for download_dis_decrypt*/ +#define EFUSE_RD_DISABLE_DL_DECRYPT (BIT(8)) +#define EFUSE_RD_DISABLE_DL_DECRYPT_M (BIT(8)) +#define EFUSE_RD_DISABLE_DL_DECRYPT_V 0x1 +#define EFUSE_RD_DISABLE_DL_DECRYPT_S 8 +/* EFUSE_RD_DISABLE_DL_ENCRYPT : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: read for download_dis_encrypt*/ +#define EFUSE_RD_DISABLE_DL_ENCRYPT (BIT(7)) +#define EFUSE_RD_DISABLE_DL_ENCRYPT_M (BIT(7)) +#define EFUSE_RD_DISABLE_DL_ENCRYPT_V 0x1 +#define EFUSE_RD_DISABLE_DL_ENCRYPT_S 7 +/* EFUSE_RD_DISABLE_JTAG : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: read for JTAG_disable*/ +#define EFUSE_RD_DISABLE_JTAG (BIT(6)) +#define EFUSE_RD_DISABLE_JTAG_M (BIT(6)) +#define EFUSE_RD_DISABLE_JTAG_V 0x1 +#define EFUSE_RD_DISABLE_JTAG_S 6 +/* EFUSE_RD_ABS_DONE_1 : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: read for abstract_done_1*/ +#define EFUSE_RD_ABS_DONE_1 (BIT(5)) +#define EFUSE_RD_ABS_DONE_1_M (BIT(5)) +#define EFUSE_RD_ABS_DONE_1_V 0x1 +#define EFUSE_RD_ABS_DONE_1_S 5 +/* EFUSE_RD_ABS_DONE_0 : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: read for abstract_done_0*/ +#define EFUSE_RD_ABS_DONE_0 (BIT(4)) +#define EFUSE_RD_ABS_DONE_0_M (BIT(4)) +#define EFUSE_RD_ABS_DONE_0_V 0x1 +#define EFUSE_RD_ABS_DONE_0_S 4 +/* EFUSE_RD_DISABLE_SDIO_HOST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_RD_DISABLE_SDIO_HOST (BIT(3)) +#define EFUSE_RD_DISABLE_SDIO_HOST_M (BIT(3)) +#define EFUSE_RD_DISABLE_SDIO_HOST_V 0x1 +#define EFUSE_RD_DISABLE_SDIO_HOST_S 3 +/* EFUSE_RD_CONSOLE_DEBUG_DISABLE : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: read for console_debug_disable*/ +#define EFUSE_RD_CONSOLE_DEBUG_DISABLE (BIT(2)) +#define EFUSE_RD_CONSOLE_DEBUG_DISABLE_M (BIT(2)) +#define EFUSE_RD_CONSOLE_DEBUG_DISABLE_V 0x1 +#define EFUSE_RD_CONSOLE_DEBUG_DISABLE_S 2 +/* EFUSE_RD_CODING_SCHEME : RO ;bitpos:[1:0] ;default: 2'b0 ; */ +/*description: read for coding_scheme*/ +#define EFUSE_RD_CODING_SCHEME 0x00000003 +#define EFUSE_RD_CODING_SCHEME_M ((EFUSE_RD_CODING_SCHEME_V)<<(EFUSE_RD_CODING_SCHEME_S)) +#define EFUSE_RD_CODING_SCHEME_V 0x3 +#define EFUSE_RD_CODING_SCHEME_S 0 + +#define EFUSE_BLK0_WDATA0_REG (DR_REG_EFUSE_BASE + 0x01c) +/* EFUSE_FLASH_CRYPT_CNT : R/W ;bitpos:[27:20] ;default: 8'b0 ; */ +/*description: program for flash_crypt_cnt*/ +#define EFUSE_FLASH_CRYPT_CNT 0x000000FF +#define EFUSE_FLASH_CRYPT_CNT_M ((EFUSE_FLASH_CRYPT_CNT_V)<<(EFUSE_FLASH_CRYPT_CNT_S)) +#define EFUSE_FLASH_CRYPT_CNT_V 0xFF +#define EFUSE_FLASH_CRYPT_CNT_S 20 +/* EFUSE_RD_DIS : R/W ;bitpos:[19:16] ;default: 4'b0 ; */ +/*description: program for efuse_rd_disable*/ +#define EFUSE_RD_DIS 0x0000000F +#define EFUSE_RD_DIS_M ((EFUSE_RD_DIS_V)<<(EFUSE_RD_DIS_S)) +#define EFUSE_RD_DIS_V 0xF +#define EFUSE_RD_DIS_S 16 +/* EFUSE_WR_DIS : R/W ;bitpos:[15:0] ;default: 16'b0 ; */ +/*description: program for efuse_wr_disable*/ +#define EFUSE_WR_DIS 0x0000FFFF +#define EFUSE_WR_DIS_M ((EFUSE_WR_DIS_V)<<(EFUSE_WR_DIS_S)) +#define EFUSE_WR_DIS_V 0xFFFF +#define EFUSE_WR_DIS_S 0 + +#define EFUSE_BLK0_WDATA1_REG (DR_REG_EFUSE_BASE + 0x020) +/* EFUSE_WIFI_MAC_CRC_LOW : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: program for low 32bit WIFI_MAC_Address*/ +#define EFUSE_WIFI_MAC_CRC_LOW 0xFFFFFFFF +#define EFUSE_WIFI_MAC_CRC_LOW_M ((EFUSE_WIFI_MAC_CRC_LOW_V)<<(EFUSE_WIFI_MAC_CRC_LOW_S)) +#define EFUSE_WIFI_MAC_CRC_LOW_V 0xFFFFFFFF +#define EFUSE_WIFI_MAC_CRC_LOW_S 0 + +#define EFUSE_BLK0_WDATA2_REG (DR_REG_EFUSE_BASE + 0x024) +/* EFUSE_WIFI_MAC_CRC_HIGH : R/W ;bitpos:[23:0] ;default: 24'b0 ; */ +/*description: program for high 24bit WIFI_MAC_Address*/ +#define EFUSE_WIFI_MAC_CRC_HIGH 0x00FFFFFF +#define EFUSE_WIFI_MAC_CRC_HIGH_M ((EFUSE_WIFI_MAC_CRC_HIGH_V)<<(EFUSE_WIFI_MAC_CRC_HIGH_S)) +#define EFUSE_WIFI_MAC_CRC_HIGH_V 0xFFFFFF +#define EFUSE_WIFI_MAC_CRC_HIGH_S 0 + +#define EFUSE_BLK0_WDATA3_REG (DR_REG_EFUSE_BASE + 0x028) +/* EFUSE_CHIP_VER_RESERVE : R/W ;bitpos:[16:9] ;default: 8'b0 ; */ +/*description: */ +#define EFUSE_CHIP_VER_RESERVE 0x000000FF +#define EFUSE_CHIP_VER_RESERVE_M ((EFUSE_CHIP_VER_RESERVE_V)<<(EFUSE_CHIP_VER_RESERVE_S)) +#define EFUSE_CHIP_VER_RESERVE_V 0xFF +#define EFUSE_CHIP_VER_RESERVE_S 9 +/* EFUSE_SPI_PAD_CONFIG_HD : R/W ;bitpos:[8:4] ;default: 5'b0 ; */ +/*description: program for SPI_pad_config_hd*/ +#define EFUSE_SPI_PAD_CONFIG_HD 0x0000001F +#define EFUSE_SPI_PAD_CONFIG_HD_M ((EFUSE_SPI_PAD_CONFIG_HD_V)<<(EFUSE_SPI_PAD_CONFIG_HD_S)) +#define EFUSE_SPI_PAD_CONFIG_HD_V 0x1F +#define EFUSE_SPI_PAD_CONFIG_HD_S 4 +/* EFUSE_CHIP_VER_DIS_CACHE : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_CHIP_VER_DIS_CACHE (BIT(3)) +#define EFUSE_CHIP_VER_DIS_CACHE_M (BIT(3)) +#define EFUSE_CHIP_VER_DIS_CACHE_V 0x1 +#define EFUSE_CHIP_VER_DIS_CACHE_S 3 +/* EFUSE_CHIP_VER_32PAD : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_CHIP_VER_32PAD (BIT(2)) +#define EFUSE_CHIP_VER_32PAD_M (BIT(2)) +#define EFUSE_CHIP_VER_32PAD_V 0x1 +#define EFUSE_CHIP_VER_32PAD_S 2 +/* EFUSE_CHIP_VER_DIS_BT : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_CHIP_VER_DIS_BT (BIT(1)) +#define EFUSE_CHIP_VER_DIS_BT_M (BIT(1)) +#define EFUSE_CHIP_VER_DIS_BT_V 0x1 +#define EFUSE_CHIP_VER_DIS_BT_S 1 +/* EFUSE_CHIP_VER_DIS_APP_CPU : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_CHIP_VER_DIS_APP_CPU (BIT(0)) +#define EFUSE_CHIP_VER_DIS_APP_CPU_M (BIT(0)) +#define EFUSE_CHIP_VER_DIS_APP_CPU_V 0x1 +#define EFUSE_CHIP_VER_DIS_APP_CPU_S 0 + +#define EFUSE_BLK0_WDATA4_REG (DR_REG_EFUSE_BASE + 0x02c) +/* EFUSE_SDIO_FORCE : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: program for sdio_force*/ +#define EFUSE_SDIO_FORCE (BIT(16)) +#define EFUSE_SDIO_FORCE_M (BIT(16)) +#define EFUSE_SDIO_FORCE_V 0x1 +#define EFUSE_SDIO_FORCE_S 16 +/* EFUSE_SDIO_TIEH : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: program for SDIO_TIEH*/ +#define EFUSE_SDIO_TIEH (BIT(15)) +#define EFUSE_SDIO_TIEH_M (BIT(15)) +#define EFUSE_SDIO_TIEH_V 0x1 +#define EFUSE_SDIO_TIEH_S 15 +/* EFUSE_XPD_SDIO_REG : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: program for XPD_SDIO_REG*/ +#define EFUSE_XPD_SDIO_REG (BIT(14)) +#define EFUSE_XPD_SDIO_REG_M (BIT(14)) +#define EFUSE_XPD_SDIO_REG_V 0x1 +#define EFUSE_XPD_SDIO_REG_S 14 +/* EFUSE_SDIO_DREFL : R/W ;bitpos:[13:12] ;default: 2'b0 ; */ +/*description: */ +#define EFUSE_SDIO_DREFL 0x00000003 +#define EFUSE_SDIO_DREFL_M ((EFUSE_SDIO_DREFL_V)<<(EFUSE_SDIO_DREFL_S)) +#define EFUSE_SDIO_DREFL_V 0x3 +#define EFUSE_SDIO_DREFL_S 12 +/* EFUSE_SDIO_DREFM : R/W ;bitpos:[11:10] ;default: 2'b0 ; */ +/*description: */ +#define EFUSE_SDIO_DREFM 0x00000003 +#define EFUSE_SDIO_DREFM_M ((EFUSE_SDIO_DREFM_V)<<(EFUSE_SDIO_DREFM_S)) +#define EFUSE_SDIO_DREFM_V 0x3 +#define EFUSE_SDIO_DREFM_S 10 +/* EFUSE_SDIO_DREFH : R/W ;bitpos:[9:8] ;default: 2'b0 ; */ +/*description: */ +#define EFUSE_SDIO_DREFH 0x00000003 +#define EFUSE_SDIO_DREFH_M ((EFUSE_SDIO_DREFH_V)<<(EFUSE_SDIO_DREFH_S)) +#define EFUSE_SDIO_DREFH_V 0x3 +#define EFUSE_SDIO_DREFH_S 8 +/* EFUSE_CK8M_FREQ : R/W ;bitpos:[7:0] ;default: 8'b0 ; */ +/*description: */ +#define EFUSE_CK8M_FREQ 0x000000FF +#define EFUSE_CK8M_FREQ_M ((EFUSE_CK8M_FREQ_V)<<(EFUSE_CK8M_FREQ_S)) +#define EFUSE_CK8M_FREQ_V 0xFF +#define EFUSE_CK8M_FREQ_S 0 + +#define EFUSE_BLK0_WDATA5_REG (DR_REG_EFUSE_BASE + 0x030) +/* EFUSE_FLASH_CRYPT_CONFIG : R/W ;bitpos:[31:28] ;default: 4'b0 ; */ +/*description: program for flash_crypt_config*/ +#define EFUSE_FLASH_CRYPT_CONFIG 0x0000000F +#define EFUSE_FLASH_CRYPT_CONFIG_M ((EFUSE_FLASH_CRYPT_CONFIG_V)<<(EFUSE_FLASH_CRYPT_CONFIG_S)) +#define EFUSE_FLASH_CRYPT_CONFIG_V 0xF +#define EFUSE_FLASH_CRYPT_CONFIG_S 28 +/* EFUSE_INST_CONFIG : R/W ;bitpos:[27:20] ;default: 8'b0 ; */ +/*description: */ +#define EFUSE_INST_CONFIG 0x000000FF +#define EFUSE_INST_CONFIG_M ((EFUSE_INST_CONFIG_V)<<(EFUSE_INST_CONFIG_S)) +#define EFUSE_INST_CONFIG_V 0xFF +#define EFUSE_INST_CONFIG_S 20 +/* EFUSE_SPI_PAD_CONFIG_CS0 : R/W ;bitpos:[19:15] ;default: 5'b0 ; */ +/*description: program for SPI_pad_config_cs0*/ +#define EFUSE_SPI_PAD_CONFIG_CS0 0x0000001F +#define EFUSE_SPI_PAD_CONFIG_CS0_M ((EFUSE_SPI_PAD_CONFIG_CS0_V)<<(EFUSE_SPI_PAD_CONFIG_CS0_S)) +#define EFUSE_SPI_PAD_CONFIG_CS0_V 0x1F +#define EFUSE_SPI_PAD_CONFIG_CS0_S 15 +/* EFUSE_SPI_PAD_CONFIG_D : R/W ;bitpos:[14:10] ;default: 5'b0 ; */ +/*description: program for SPI_pad_config_d*/ +#define EFUSE_SPI_PAD_CONFIG_D 0x0000001F +#define EFUSE_SPI_PAD_CONFIG_D_M ((EFUSE_SPI_PAD_CONFIG_D_V)<<(EFUSE_SPI_PAD_CONFIG_D_S)) +#define EFUSE_SPI_PAD_CONFIG_D_V 0x1F +#define EFUSE_SPI_PAD_CONFIG_D_S 10 +/* EFUSE_SPI_PAD_CONFIG_Q : R/W ;bitpos:[9:5] ;default: 5'b0 ; */ +/*description: program for SPI_pad_config_q*/ +#define EFUSE_SPI_PAD_CONFIG_Q 0x0000001F +#define EFUSE_SPI_PAD_CONFIG_Q_M ((EFUSE_SPI_PAD_CONFIG_Q_V)<<(EFUSE_SPI_PAD_CONFIG_Q_S)) +#define EFUSE_SPI_PAD_CONFIG_Q_V 0x1F +#define EFUSE_SPI_PAD_CONFIG_Q_S 5 +/* EFUSE_SPI_PAD_CONFIG_CLK : R/W ;bitpos:[4:0] ;default: 5'b0 ; */ +/*description: program for SPI_pad_config_clk*/ +#define EFUSE_SPI_PAD_CONFIG_CLK 0x0000001F +#define EFUSE_SPI_PAD_CONFIG_CLK_M ((EFUSE_SPI_PAD_CONFIG_CLK_V)<<(EFUSE_SPI_PAD_CONFIG_CLK_S)) +#define EFUSE_SPI_PAD_CONFIG_CLK_V 0x1F +#define EFUSE_SPI_PAD_CONFIG_CLK_S 0 + +#define EFUSE_BLK0_WDATA6_REG (DR_REG_EFUSE_BASE + 0x034) +/* EFUSE_KEY_STATUS : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: program for key_status*/ +#define EFUSE_KEY_STATUS (BIT(10)) +#define EFUSE_KEY_STATUS_M (BIT(10)) +#define EFUSE_KEY_STATUS_V 0x1 +#define EFUSE_KEY_STATUS_S 10 +/* EFUSE_DISABLE_DL_CACHE : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: program for download_dis_cache*/ +#define EFUSE_DISABLE_DL_CACHE (BIT(9)) +#define EFUSE_DISABLE_DL_CACHE_M (BIT(9)) +#define EFUSE_DISABLE_DL_CACHE_V 0x1 +#define EFUSE_DISABLE_DL_CACHE_S 9 +/* EFUSE_DISABLE_DL_DECRYPT : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: program for download_dis_decrypt*/ +#define EFUSE_DISABLE_DL_DECRYPT (BIT(8)) +#define EFUSE_DISABLE_DL_DECRYPT_M (BIT(8)) +#define EFUSE_DISABLE_DL_DECRYPT_V 0x1 +#define EFUSE_DISABLE_DL_DECRYPT_S 8 +/* EFUSE_DISABLE_DL_ENCRYPT : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: program for download_dis_encrypt*/ +#define EFUSE_DISABLE_DL_ENCRYPT (BIT(7)) +#define EFUSE_DISABLE_DL_ENCRYPT_M (BIT(7)) +#define EFUSE_DISABLE_DL_ENCRYPT_V 0x1 +#define EFUSE_DISABLE_DL_ENCRYPT_S 7 +/* EFUSE_DISABLE_JTAG : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: program for JTAG_disable*/ +#define EFUSE_DISABLE_JTAG (BIT(6)) +#define EFUSE_DISABLE_JTAG_M (BIT(6)) +#define EFUSE_DISABLE_JTAG_V 0x1 +#define EFUSE_DISABLE_JTAG_S 6 +/* EFUSE_ABS_DONE_1 : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: program for abstract_done_1*/ +#define EFUSE_ABS_DONE_1 (BIT(5)) +#define EFUSE_ABS_DONE_1_M (BIT(5)) +#define EFUSE_ABS_DONE_1_V 0x1 +#define EFUSE_ABS_DONE_1_S 5 +/* EFUSE_ABS_DONE_0 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: program for abstract_done_0*/ +#define EFUSE_ABS_DONE_0 (BIT(4)) +#define EFUSE_ABS_DONE_0_M (BIT(4)) +#define EFUSE_ABS_DONE_0_V 0x1 +#define EFUSE_ABS_DONE_0_S 4 +/* EFUSE_DISABLE_SDIO_HOST : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_DISABLE_SDIO_HOST (BIT(3)) +#define EFUSE_DISABLE_SDIO_HOST_M (BIT(3)) +#define EFUSE_DISABLE_SDIO_HOST_V 0x1 +#define EFUSE_DISABLE_SDIO_HOST_S 3 +/* EFUSE_CONSOLE_DEBUG_DISABLE : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: program for console_debug_disable*/ +#define EFUSE_CONSOLE_DEBUG_DISABLE (BIT(2)) +#define EFUSE_CONSOLE_DEBUG_DISABLE_M (BIT(2)) +#define EFUSE_CONSOLE_DEBUG_DISABLE_V 0x1 +#define EFUSE_CONSOLE_DEBUG_DISABLE_S 2 +/* EFUSE_CODING_SCHEME : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ +/*description: program for coding_scheme*/ +#define EFUSE_CODING_SCHEME 0x00000003 +#define EFUSE_CODING_SCHEME_M ((EFUSE_CODING_SCHEME_V)<<(EFUSE_CODING_SCHEME_S)) +#define EFUSE_CODING_SCHEME_V 0x3 +#define EFUSE_CODING_SCHEME_S 0 + +#define EFUSE_BLK1_RDATA0_REG (DR_REG_EFUSE_BASE + 0x038) +/* EFUSE_BLK1_DOUT0 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK1*/ +#define EFUSE_BLK1_DOUT0 0xFFFFFFFF +#define EFUSE_BLK1_DOUT0_M ((EFUSE_BLK1_DOUT0_V)<<(EFUSE_BLK1_DOUT0_S)) +#define EFUSE_BLK1_DOUT0_V 0xFFFFFFFF +#define EFUSE_BLK1_DOUT0_S 0 + +#define EFUSE_BLK1_RDATA1_REG (DR_REG_EFUSE_BASE + 0x03c) +/* EFUSE_BLK1_DOUT1 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK1*/ +#define EFUSE_BLK1_DOUT1 0xFFFFFFFF +#define EFUSE_BLK1_DOUT1_M ((EFUSE_BLK1_DOUT1_V)<<(EFUSE_BLK1_DOUT1_S)) +#define EFUSE_BLK1_DOUT1_V 0xFFFFFFFF +#define EFUSE_BLK1_DOUT1_S 0 + +#define EFUSE_BLK1_RDATA2_REG (DR_REG_EFUSE_BASE + 0x040) +/* EFUSE_BLK1_DOUT2 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK1*/ +#define EFUSE_BLK1_DOUT2 0xFFFFFFFF +#define EFUSE_BLK1_DOUT2_M ((EFUSE_BLK1_DOUT2_V)<<(EFUSE_BLK1_DOUT2_S)) +#define EFUSE_BLK1_DOUT2_V 0xFFFFFFFF +#define EFUSE_BLK1_DOUT2_S 0 + +#define EFUSE_BLK1_RDATA3_REG (DR_REG_EFUSE_BASE + 0x044) +/* EFUSE_BLK1_DOUT3 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK1*/ +#define EFUSE_BLK1_DOUT3 0xFFFFFFFF +#define EFUSE_BLK1_DOUT3_M ((EFUSE_BLK1_DOUT3_V)<<(EFUSE_BLK1_DOUT3_S)) +#define EFUSE_BLK1_DOUT3_V 0xFFFFFFFF +#define EFUSE_BLK1_DOUT3_S 0 + +#define EFUSE_BLK1_RDATA4_REG (DR_REG_EFUSE_BASE + 0x048) +/* EFUSE_BLK1_DOUT4 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK1*/ +#define EFUSE_BLK1_DOUT4 0xFFFFFFFF +#define EFUSE_BLK1_DOUT4_M ((EFUSE_BLK1_DOUT4_V)<<(EFUSE_BLK1_DOUT4_S)) +#define EFUSE_BLK1_DOUT4_V 0xFFFFFFFF +#define EFUSE_BLK1_DOUT4_S 0 + +#define EFUSE_BLK1_RDATA5_REG (DR_REG_EFUSE_BASE + 0x04c) +/* EFUSE_BLK1_DOUT5 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK1*/ +#define EFUSE_BLK1_DOUT5 0xFFFFFFFF +#define EFUSE_BLK1_DOUT5_M ((EFUSE_BLK1_DOUT5_V)<<(EFUSE_BLK1_DOUT5_S)) +#define EFUSE_BLK1_DOUT5_V 0xFFFFFFFF +#define EFUSE_BLK1_DOUT5_S 0 + +#define EFUSE_BLK1_RDATA6_REG (DR_REG_EFUSE_BASE + 0x050) +/* EFUSE_BLK1_DOUT6 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK1*/ +#define EFUSE_BLK1_DOUT6 0xFFFFFFFF +#define EFUSE_BLK1_DOUT6_M ((EFUSE_BLK1_DOUT6_V)<<(EFUSE_BLK1_DOUT6_S)) +#define EFUSE_BLK1_DOUT6_V 0xFFFFFFFF +#define EFUSE_BLK1_DOUT6_S 0 + +#define EFUSE_BLK1_RDATA7_REG (DR_REG_EFUSE_BASE + 0x054) +/* EFUSE_BLK1_DOUT7 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK1*/ +#define EFUSE_BLK1_DOUT7 0xFFFFFFFF +#define EFUSE_BLK1_DOUT7_M ((EFUSE_BLK1_DOUT7_V)<<(EFUSE_BLK1_DOUT7_S)) +#define EFUSE_BLK1_DOUT7_V 0xFFFFFFFF +#define EFUSE_BLK1_DOUT7_S 0 + +#define EFUSE_BLK2_RDATA0_REG (DR_REG_EFUSE_BASE + 0x058) +/* EFUSE_BLK2_DOUT0 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK2*/ +#define EFUSE_BLK2_DOUT0 0xFFFFFFFF +#define EFUSE_BLK2_DOUT0_M ((EFUSE_BLK2_DOUT0_V)<<(EFUSE_BLK2_DOUT0_S)) +#define EFUSE_BLK2_DOUT0_V 0xFFFFFFFF +#define EFUSE_BLK2_DOUT0_S 0 + +#define EFUSE_BLK2_RDATA1_REG (DR_REG_EFUSE_BASE + 0x05c) +/* EFUSE_BLK2_DOUT1 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK2*/ +#define EFUSE_BLK2_DOUT1 0xFFFFFFFF +#define EFUSE_BLK2_DOUT1_M ((EFUSE_BLK2_DOUT1_V)<<(EFUSE_BLK2_DOUT1_S)) +#define EFUSE_BLK2_DOUT1_V 0xFFFFFFFF +#define EFUSE_BLK2_DOUT1_S 0 + +#define EFUSE_BLK2_RDATA2_REG (DR_REG_EFUSE_BASE + 0x060) +/* EFUSE_BLK2_DOUT2 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK2*/ +#define EFUSE_BLK2_DOUT2 0xFFFFFFFF +#define EFUSE_BLK2_DOUT2_M ((EFUSE_BLK2_DOUT2_V)<<(EFUSE_BLK2_DOUT2_S)) +#define EFUSE_BLK2_DOUT2_V 0xFFFFFFFF +#define EFUSE_BLK2_DOUT2_S 0 + +#define EFUSE_BLK2_RDATA3_REG (DR_REG_EFUSE_BASE + 0x064) +/* EFUSE_BLK2_DOUT3 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK2*/ +#define EFUSE_BLK2_DOUT3 0xFFFFFFFF +#define EFUSE_BLK2_DOUT3_M ((EFUSE_BLK2_DOUT3_V)<<(EFUSE_BLK2_DOUT3_S)) +#define EFUSE_BLK2_DOUT3_V 0xFFFFFFFF +#define EFUSE_BLK2_DOUT3_S 0 + +#define EFUSE_BLK2_RDATA4_REG (DR_REG_EFUSE_BASE + 0x068) +/* EFUSE_BLK2_DOUT4 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK2*/ +#define EFUSE_BLK2_DOUT4 0xFFFFFFFF +#define EFUSE_BLK2_DOUT4_M ((EFUSE_BLK2_DOUT4_V)<<(EFUSE_BLK2_DOUT4_S)) +#define EFUSE_BLK2_DOUT4_V 0xFFFFFFFF +#define EFUSE_BLK2_DOUT4_S 0 + +#define EFUSE_BLK2_RDATA5_REG (DR_REG_EFUSE_BASE + 0x06c) +/* EFUSE_BLK2_DOUT5 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK2*/ +#define EFUSE_BLK2_DOUT5 0xFFFFFFFF +#define EFUSE_BLK2_DOUT5_M ((EFUSE_BLK2_DOUT5_V)<<(EFUSE_BLK2_DOUT5_S)) +#define EFUSE_BLK2_DOUT5_V 0xFFFFFFFF +#define EFUSE_BLK2_DOUT5_S 0 + +#define EFUSE_BLK2_RDATA6_REG (DR_REG_EFUSE_BASE + 0x070) +/* EFUSE_BLK2_DOUT6 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK2*/ +#define EFUSE_BLK2_DOUT6 0xFFFFFFFF +#define EFUSE_BLK2_DOUT6_M ((EFUSE_BLK2_DOUT6_V)<<(EFUSE_BLK2_DOUT6_S)) +#define EFUSE_BLK2_DOUT6_V 0xFFFFFFFF +#define EFUSE_BLK2_DOUT6_S 0 + +#define EFUSE_BLK2_RDATA7_REG (DR_REG_EFUSE_BASE + 0x074) +/* EFUSE_BLK2_DOUT7 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK2*/ +#define EFUSE_BLK2_DOUT7 0xFFFFFFFF +#define EFUSE_BLK2_DOUT7_M ((EFUSE_BLK2_DOUT7_V)<<(EFUSE_BLK2_DOUT7_S)) +#define EFUSE_BLK2_DOUT7_V 0xFFFFFFFF +#define EFUSE_BLK2_DOUT7_S 0 + +#define EFUSE_BLK3_RDATA0_REG (DR_REG_EFUSE_BASE + 0x078) +/* EFUSE_BLK3_DOUT0 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK3*/ +#define EFUSE_BLK3_DOUT0 0xFFFFFFFF +#define EFUSE_BLK3_DOUT0_M ((EFUSE_BLK3_DOUT0_V)<<(EFUSE_BLK3_DOUT0_S)) +#define EFUSE_BLK3_DOUT0_V 0xFFFFFFFF +#define EFUSE_BLK3_DOUT0_S 0 + +#define EFUSE_BLK3_RDATA1_REG (DR_REG_EFUSE_BASE + 0x07c) +/* EFUSE_BLK3_DOUT1 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK3*/ +#define EFUSE_BLK3_DOUT1 0xFFFFFFFF +#define EFUSE_BLK3_DOUT1_M ((EFUSE_BLK3_DOUT1_V)<<(EFUSE_BLK3_DOUT1_S)) +#define EFUSE_BLK3_DOUT1_V 0xFFFFFFFF +#define EFUSE_BLK3_DOUT1_S 0 + +#define EFUSE_BLK3_RDATA2_REG (DR_REG_EFUSE_BASE + 0x080) +/* EFUSE_BLK3_DOUT2 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK3*/ +#define EFUSE_BLK3_DOUT2 0xFFFFFFFF +#define EFUSE_BLK3_DOUT2_M ((EFUSE_BLK3_DOUT2_V)<<(EFUSE_BLK3_DOUT2_S)) +#define EFUSE_BLK3_DOUT2_V 0xFFFFFFFF +#define EFUSE_BLK3_DOUT2_S 0 + +#define EFUSE_BLK3_RDATA3_REG (DR_REG_EFUSE_BASE + 0x084) +/* EFUSE_BLK3_DOUT3 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK3*/ +#define EFUSE_BLK3_DOUT3 0xFFFFFFFF +#define EFUSE_BLK3_DOUT3_M ((EFUSE_BLK3_DOUT3_V)<<(EFUSE_BLK3_DOUT3_S)) +#define EFUSE_BLK3_DOUT3_V 0xFFFFFFFF +#define EFUSE_BLK3_DOUT3_S 0 + +#define EFUSE_BLK3_RDATA4_REG (DR_REG_EFUSE_BASE + 0x088) +/* EFUSE_BLK3_DOUT4 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK3*/ +#define EFUSE_BLK3_DOUT4 0xFFFFFFFF +#define EFUSE_BLK3_DOUT4_M ((EFUSE_BLK3_DOUT4_V)<<(EFUSE_BLK3_DOUT4_S)) +#define EFUSE_BLK3_DOUT4_V 0xFFFFFFFF +#define EFUSE_BLK3_DOUT4_S 0 + +#define EFUSE_BLK3_RDATA5_REG (DR_REG_EFUSE_BASE + 0x08c) +/* EFUSE_BLK3_DOUT5 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK3*/ +#define EFUSE_BLK3_DOUT5 0xFFFFFFFF +#define EFUSE_BLK3_DOUT5_M ((EFUSE_BLK3_DOUT5_V)<<(EFUSE_BLK3_DOUT5_S)) +#define EFUSE_BLK3_DOUT5_V 0xFFFFFFFF +#define EFUSE_BLK3_DOUT5_S 0 + +#define EFUSE_BLK3_RDATA6_REG (DR_REG_EFUSE_BASE + 0x090) +/* EFUSE_BLK3_DOUT6 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK3*/ +#define EFUSE_BLK3_DOUT6 0xFFFFFFFF +#define EFUSE_BLK3_DOUT6_M ((EFUSE_BLK3_DOUT6_V)<<(EFUSE_BLK3_DOUT6_S)) +#define EFUSE_BLK3_DOUT6_V 0xFFFFFFFF +#define EFUSE_BLK3_DOUT6_S 0 + +#define EFUSE_BLK3_RDATA7_REG (DR_REG_EFUSE_BASE + 0x094) +/* EFUSE_BLK3_DOUT7 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: read for BLOCK3*/ +#define EFUSE_BLK3_DOUT7 0xFFFFFFFF +#define EFUSE_BLK3_DOUT7_M ((EFUSE_BLK3_DOUT7_V)<<(EFUSE_BLK3_DOUT7_S)) +#define EFUSE_BLK3_DOUT7_V 0xFFFFFFFF +#define EFUSE_BLK3_DOUT7_S 0 + +#define EFUSE_BLK1_WDATA0_REG (DR_REG_EFUSE_BASE + 0x098) +/* EFUSE_BLK1_DIN0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK1*/ +#define EFUSE_BLK1_DIN0 0xFFFFFFFF +#define EFUSE_BLK1_DIN0_M ((EFUSE_BLK1_DIN0_V)<<(EFUSE_BLK1_DIN0_S)) +#define EFUSE_BLK1_DIN0_V 0xFFFFFFFF +#define EFUSE_BLK1_DIN0_S 0 + +#define EFUSE_BLK1_WDATA1_REG (DR_REG_EFUSE_BASE + 0x09c) +/* EFUSE_BLK1_DIN1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK1*/ +#define EFUSE_BLK1_DIN1 0xFFFFFFFF +#define EFUSE_BLK1_DIN1_M ((EFUSE_BLK1_DIN1_V)<<(EFUSE_BLK1_DIN1_S)) +#define EFUSE_BLK1_DIN1_V 0xFFFFFFFF +#define EFUSE_BLK1_DIN1_S 0 + +#define EFUSE_BLK1_WDATA2_REG (DR_REG_EFUSE_BASE + 0x0a0) +/* EFUSE_BLK1_DIN2 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK1*/ +#define EFUSE_BLK1_DIN2 0xFFFFFFFF +#define EFUSE_BLK1_DIN2_M ((EFUSE_BLK1_DIN2_V)<<(EFUSE_BLK1_DIN2_S)) +#define EFUSE_BLK1_DIN2_V 0xFFFFFFFF +#define EFUSE_BLK1_DIN2_S 0 + +#define EFUSE_BLK1_WDATA3_REG (DR_REG_EFUSE_BASE + 0x0a4) +/* EFUSE_BLK1_DIN3 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK1*/ +#define EFUSE_BLK1_DIN3 0xFFFFFFFF +#define EFUSE_BLK1_DIN3_M ((EFUSE_BLK1_DIN3_V)<<(EFUSE_BLK1_DIN3_S)) +#define EFUSE_BLK1_DIN3_V 0xFFFFFFFF +#define EFUSE_BLK1_DIN3_S 0 + +#define EFUSE_BLK1_WDATA4_REG (DR_REG_EFUSE_BASE + 0x0a8) +/* EFUSE_BLK1_DIN4 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK1*/ +#define EFUSE_BLK1_DIN4 0xFFFFFFFF +#define EFUSE_BLK1_DIN4_M ((EFUSE_BLK1_DIN4_V)<<(EFUSE_BLK1_DIN4_S)) +#define EFUSE_BLK1_DIN4_V 0xFFFFFFFF +#define EFUSE_BLK1_DIN4_S 0 + +#define EFUSE_BLK1_WDATA5_REG (DR_REG_EFUSE_BASE + 0x0ac) +/* EFUSE_BLK1_DIN5 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK1*/ +#define EFUSE_BLK1_DIN5 0xFFFFFFFF +#define EFUSE_BLK1_DIN5_M ((EFUSE_BLK1_DIN5_V)<<(EFUSE_BLK1_DIN5_S)) +#define EFUSE_BLK1_DIN5_V 0xFFFFFFFF +#define EFUSE_BLK1_DIN5_S 0 + +#define EFUSE_BLK1_WDATA6_REG (DR_REG_EFUSE_BASE + 0x0b0) +/* EFUSE_BLK1_DIN6 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK1*/ +#define EFUSE_BLK1_DIN6 0xFFFFFFFF +#define EFUSE_BLK1_DIN6_M ((EFUSE_BLK1_DIN6_V)<<(EFUSE_BLK1_DIN6_S)) +#define EFUSE_BLK1_DIN6_V 0xFFFFFFFF +#define EFUSE_BLK1_DIN6_S 0 + +#define EFUSE_BLK1_WDATA7_REG (DR_REG_EFUSE_BASE + 0x0b4) +/* EFUSE_BLK1_DIN7 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK1*/ +#define EFUSE_BLK1_DIN7 0xFFFFFFFF +#define EFUSE_BLK1_DIN7_M ((EFUSE_BLK1_DIN7_V)<<(EFUSE_BLK1_DIN7_S)) +#define EFUSE_BLK1_DIN7_V 0xFFFFFFFF +#define EFUSE_BLK1_DIN7_S 0 + +#define EFUSE_BLK2_WDATA0_REG (DR_REG_EFUSE_BASE + 0x0b8) +/* EFUSE_BLK2_DIN0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK2*/ +#define EFUSE_BLK2_DIN0 0xFFFFFFFF +#define EFUSE_BLK2_DIN0_M ((EFUSE_BLK2_DIN0_V)<<(EFUSE_BLK2_DIN0_S)) +#define EFUSE_BLK2_DIN0_V 0xFFFFFFFF +#define EFUSE_BLK2_DIN0_S 0 + +#define EFUSE_BLK2_WDATA1_REG (DR_REG_EFUSE_BASE + 0x0bc) +/* EFUSE_BLK2_DIN1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK2*/ +#define EFUSE_BLK2_DIN1 0xFFFFFFFF +#define EFUSE_BLK2_DIN1_M ((EFUSE_BLK2_DIN1_V)<<(EFUSE_BLK2_DIN1_S)) +#define EFUSE_BLK2_DIN1_V 0xFFFFFFFF +#define EFUSE_BLK2_DIN1_S 0 + +#define EFUSE_BLK2_WDATA2_REG (DR_REG_EFUSE_BASE + 0x0c0) +/* EFUSE_BLK2_DIN2 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK2*/ +#define EFUSE_BLK2_DIN2 0xFFFFFFFF +#define EFUSE_BLK2_DIN2_M ((EFUSE_BLK2_DIN2_V)<<(EFUSE_BLK2_DIN2_S)) +#define EFUSE_BLK2_DIN2_V 0xFFFFFFFF +#define EFUSE_BLK2_DIN2_S 0 + +#define EFUSE_BLK2_WDATA3_REG (DR_REG_EFUSE_BASE + 0x0c4) +/* EFUSE_BLK2_DIN3 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK2*/ +#define EFUSE_BLK2_DIN3 0xFFFFFFFF +#define EFUSE_BLK2_DIN3_M ((EFUSE_BLK2_DIN3_V)<<(EFUSE_BLK2_DIN3_S)) +#define EFUSE_BLK2_DIN3_V 0xFFFFFFFF +#define EFUSE_BLK2_DIN3_S 0 + +#define EFUSE_BLK2_WDATA4_REG (DR_REG_EFUSE_BASE + 0x0c8) +/* EFUSE_BLK2_DIN4 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK2*/ +#define EFUSE_BLK2_DIN4 0xFFFFFFFF +#define EFUSE_BLK2_DIN4_M ((EFUSE_BLK2_DIN4_V)<<(EFUSE_BLK2_DIN4_S)) +#define EFUSE_BLK2_DIN4_V 0xFFFFFFFF +#define EFUSE_BLK2_DIN4_S 0 + +#define EFUSE_BLK2_WDATA5_REG (DR_REG_EFUSE_BASE + 0x0cc) +/* EFUSE_BLK2_DIN5 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK2*/ +#define EFUSE_BLK2_DIN5 0xFFFFFFFF +#define EFUSE_BLK2_DIN5_M ((EFUSE_BLK2_DIN5_V)<<(EFUSE_BLK2_DIN5_S)) +#define EFUSE_BLK2_DIN5_V 0xFFFFFFFF +#define EFUSE_BLK2_DIN5_S 0 + +#define EFUSE_BLK2_WDATA6_REG (DR_REG_EFUSE_BASE + 0x0d0) +/* EFUSE_BLK2_DIN6 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK2*/ +#define EFUSE_BLK2_DIN6 0xFFFFFFFF +#define EFUSE_BLK2_DIN6_M ((EFUSE_BLK2_DIN6_V)<<(EFUSE_BLK2_DIN6_S)) +#define EFUSE_BLK2_DIN6_V 0xFFFFFFFF +#define EFUSE_BLK2_DIN6_S 0 + +#define EFUSE_BLK2_WDATA7_REG (DR_REG_EFUSE_BASE + 0x0d4) +/* EFUSE_BLK2_DIN7 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK2*/ +#define EFUSE_BLK2_DIN7 0xFFFFFFFF +#define EFUSE_BLK2_DIN7_M ((EFUSE_BLK2_DIN7_V)<<(EFUSE_BLK2_DIN7_S)) +#define EFUSE_BLK2_DIN7_V 0xFFFFFFFF +#define EFUSE_BLK2_DIN7_S 0 + +#define EFUSE_BLK3_WDATA0_REG (DR_REG_EFUSE_BASE + 0x0d8) +/* EFUSE_BLK3_DIN0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK3*/ +#define EFUSE_BLK3_DIN0 0xFFFFFFFF +#define EFUSE_BLK3_DIN0_M ((EFUSE_BLK3_DIN0_V)<<(EFUSE_BLK3_DIN0_S)) +#define EFUSE_BLK3_DIN0_V 0xFFFFFFFF +#define EFUSE_BLK3_DIN0_S 0 + +#define EFUSE_BLK3_WDATA1_REG (DR_REG_EFUSE_BASE + 0x0dc) +/* EFUSE_BLK3_DIN1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK3*/ +#define EFUSE_BLK3_DIN1 0xFFFFFFFF +#define EFUSE_BLK3_DIN1_M ((EFUSE_BLK3_DIN1_V)<<(EFUSE_BLK3_DIN1_S)) +#define EFUSE_BLK3_DIN1_V 0xFFFFFFFF +#define EFUSE_BLK3_DIN1_S 0 + +#define EFUSE_BLK3_WDATA2_REG (DR_REG_EFUSE_BASE + 0x0e0) +/* EFUSE_BLK3_DIN2 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK3*/ +#define EFUSE_BLK3_DIN2 0xFFFFFFFF +#define EFUSE_BLK3_DIN2_M ((EFUSE_BLK3_DIN2_V)<<(EFUSE_BLK3_DIN2_S)) +#define EFUSE_BLK3_DIN2_V 0xFFFFFFFF +#define EFUSE_BLK3_DIN2_S 0 + +#define EFUSE_BLK3_WDATA3_REG (DR_REG_EFUSE_BASE + 0x0e4) +/* EFUSE_BLK3_DIN3 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK3*/ +#define EFUSE_BLK3_DIN3 0xFFFFFFFF +#define EFUSE_BLK3_DIN3_M ((EFUSE_BLK3_DIN3_V)<<(EFUSE_BLK3_DIN3_S)) +#define EFUSE_BLK3_DIN3_V 0xFFFFFFFF +#define EFUSE_BLK3_DIN3_S 0 + +#define EFUSE_BLK3_WDATA4_REG (DR_REG_EFUSE_BASE + 0x0e8) +/* EFUSE_BLK3_DIN4 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK3*/ +#define EFUSE_BLK3_DIN4 0xFFFFFFFF +#define EFUSE_BLK3_DIN4_M ((EFUSE_BLK3_DIN4_V)<<(EFUSE_BLK3_DIN4_S)) +#define EFUSE_BLK3_DIN4_V 0xFFFFFFFF +#define EFUSE_BLK3_DIN4_S 0 + +#define EFUSE_BLK3_WDATA5_REG (DR_REG_EFUSE_BASE + 0x0ec) +/* EFUSE_BLK3_DIN5 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK3*/ +#define EFUSE_BLK3_DIN5 0xFFFFFFFF +#define EFUSE_BLK3_DIN5_M ((EFUSE_BLK3_DIN5_V)<<(EFUSE_BLK3_DIN5_S)) +#define EFUSE_BLK3_DIN5_V 0xFFFFFFFF +#define EFUSE_BLK3_DIN5_S 0 + +#define EFUSE_BLK3_WDATA6_REG (DR_REG_EFUSE_BASE + 0x0f0) +/* EFUSE_BLK3_DIN6 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK3*/ +#define EFUSE_BLK3_DIN6 0xFFFFFFFF +#define EFUSE_BLK3_DIN6_M ((EFUSE_BLK3_DIN6_V)<<(EFUSE_BLK3_DIN6_S)) +#define EFUSE_BLK3_DIN6_V 0xFFFFFFFF +#define EFUSE_BLK3_DIN6_S 0 + +#define EFUSE_BLK3_WDATA7_REG (DR_REG_EFUSE_BASE + 0x0f4) +/* EFUSE_BLK3_DIN7 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: program for BLOCK3*/ +#define EFUSE_BLK3_DIN7 0xFFFFFFFF +#define EFUSE_BLK3_DIN7_M ((EFUSE_BLK3_DIN7_V)<<(EFUSE_BLK3_DIN7_S)) +#define EFUSE_BLK3_DIN7_V 0xFFFFFFFF +#define EFUSE_BLK3_DIN7_S 0 + +#define EFUSE_CLK_REG (DR_REG_EFUSE_BASE + 0x0f8) +/* EFUSE_CLK_EN : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_CLK_EN (BIT(16)) +#define EFUSE_CLK_EN_M (BIT(16)) +#define EFUSE_CLK_EN_V 0x1 +#define EFUSE_CLK_EN_S 16 +/* EFUSE_CLK_SEL1 : R/W ;bitpos:[15:8] ;default: 8'h40 ; */ +/*description: efuse timing configure*/ +#define EFUSE_CLK_SEL1 0x000000FF +#define EFUSE_CLK_SEL1_M ((EFUSE_CLK_SEL1_V)<<(EFUSE_CLK_SEL1_S)) +#define EFUSE_CLK_SEL1_V 0xFF +#define EFUSE_CLK_SEL1_S 8 +/* EFUSE_CLK_SEL0 : R/W ;bitpos:[7:0] ;default: 8'h52 ; */ +/*description: efuse timing configure*/ +#define EFUSE_CLK_SEL0 0x000000FF +#define EFUSE_CLK_SEL0_M ((EFUSE_CLK_SEL0_V)<<(EFUSE_CLK_SEL0_S)) +#define EFUSE_CLK_SEL0_V 0xFF +#define EFUSE_CLK_SEL0_S 0 + +#define EFUSE_CONF_REG (DR_REG_EFUSE_BASE + 0x0fc) +/* EFUSE_FORCE_NO_WR_RD_DIS : R/W ;bitpos:[16] ;default: 1'h1 ; */ +/*description: */ +#define EFUSE_FORCE_NO_WR_RD_DIS (BIT(16)) +#define EFUSE_FORCE_NO_WR_RD_DIS_M (BIT(16)) +#define EFUSE_FORCE_NO_WR_RD_DIS_V 0x1 +#define EFUSE_FORCE_NO_WR_RD_DIS_S 16 +/* EFUSE_OP_CODE : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: efuse operation code*/ +#define EFUSE_OP_CODE 0x0000FFFF +#define EFUSE_OP_CODE_M ((EFUSE_OP_CODE_V)<<(EFUSE_OP_CODE_S)) +#define EFUSE_OP_CODE_V 0xFFFF +#define EFUSE_OP_CODE_S 0 + +#define EFUSE_STATUS_REG (DR_REG_EFUSE_BASE + 0x100) +/* EFUSE_DEBUG : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define EFUSE_DEBUG 0xFFFFFFFF +#define EFUSE_DEBUG_M ((EFUSE_DEBUG_V)<<(EFUSE_DEBUG_S)) +#define EFUSE_DEBUG_V 0xFFFFFFFF +#define EFUSE_DEBUG_S 0 + +#define EFUSE_CMD_REG (DR_REG_EFUSE_BASE + 0x104) +/* EFUSE_PGM_CMD : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: command for program*/ +#define EFUSE_PGM_CMD (BIT(1)) +#define EFUSE_PGM_CMD_M (BIT(1)) +#define EFUSE_PGM_CMD_V 0x1 +#define EFUSE_PGM_CMD_S 1 +/* EFUSE_READ_CMD : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: command for read*/ +#define EFUSE_READ_CMD (BIT(0)) +#define EFUSE_READ_CMD_M (BIT(0)) +#define EFUSE_READ_CMD_V 0x1 +#define EFUSE_READ_CMD_S 0 + +#define EFUSE_INT_RAW_REG (DR_REG_EFUSE_BASE + 0x108) +/* EFUSE_PGM_DONE_INT_RAW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: program done interrupt raw status*/ +#define EFUSE_PGM_DONE_INT_RAW (BIT(1)) +#define EFUSE_PGM_DONE_INT_RAW_M (BIT(1)) +#define EFUSE_PGM_DONE_INT_RAW_V 0x1 +#define EFUSE_PGM_DONE_INT_RAW_S 1 +/* EFUSE_READ_DONE_INT_RAW : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: read done interrupt raw status*/ +#define EFUSE_READ_DONE_INT_RAW (BIT(0)) +#define EFUSE_READ_DONE_INT_RAW_M (BIT(0)) +#define EFUSE_READ_DONE_INT_RAW_V 0x1 +#define EFUSE_READ_DONE_INT_RAW_S 0 + +#define EFUSE_INT_ST_REG (DR_REG_EFUSE_BASE + 0x10c) +/* EFUSE_PGM_DONE_INT_ST : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: program done interrupt status*/ +#define EFUSE_PGM_DONE_INT_ST (BIT(1)) +#define EFUSE_PGM_DONE_INT_ST_M (BIT(1)) +#define EFUSE_PGM_DONE_INT_ST_V 0x1 +#define EFUSE_PGM_DONE_INT_ST_S 1 +/* EFUSE_READ_DONE_INT_ST : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: read done interrupt status*/ +#define EFUSE_READ_DONE_INT_ST (BIT(0)) +#define EFUSE_READ_DONE_INT_ST_M (BIT(0)) +#define EFUSE_READ_DONE_INT_ST_V 0x1 +#define EFUSE_READ_DONE_INT_ST_S 0 + +#define EFUSE_INT_ENA_REG (DR_REG_EFUSE_BASE + 0x110) +/* EFUSE_PGM_DONE_INT_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: program done interrupt enable*/ +#define EFUSE_PGM_DONE_INT_ENA (BIT(1)) +#define EFUSE_PGM_DONE_INT_ENA_M (BIT(1)) +#define EFUSE_PGM_DONE_INT_ENA_V 0x1 +#define EFUSE_PGM_DONE_INT_ENA_S 1 +/* EFUSE_READ_DONE_INT_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: read done interrupt enable*/ +#define EFUSE_READ_DONE_INT_ENA (BIT(0)) +#define EFUSE_READ_DONE_INT_ENA_M (BIT(0)) +#define EFUSE_READ_DONE_INT_ENA_V 0x1 +#define EFUSE_READ_DONE_INT_ENA_S 0 + +#define EFUSE_INT_CLR_REG (DR_REG_EFUSE_BASE + 0x114) +/* EFUSE_PGM_DONE_INT_CLR : WO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: program done interrupt clear*/ +#define EFUSE_PGM_DONE_INT_CLR (BIT(1)) +#define EFUSE_PGM_DONE_INT_CLR_M (BIT(1)) +#define EFUSE_PGM_DONE_INT_CLR_V 0x1 +#define EFUSE_PGM_DONE_INT_CLR_S 1 +/* EFUSE_READ_DONE_INT_CLR : WO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: read done interrupt clear*/ +#define EFUSE_READ_DONE_INT_CLR (BIT(0)) +#define EFUSE_READ_DONE_INT_CLR_M (BIT(0)) +#define EFUSE_READ_DONE_INT_CLR_V 0x1 +#define EFUSE_READ_DONE_INT_CLR_S 0 + +#define EFUSE_DAC_CONF_REG (DR_REG_EFUSE_BASE + 0x118) +/* EFUSE_DAC_CLK_PAD_SEL : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define EFUSE_DAC_CLK_PAD_SEL (BIT(8)) +#define EFUSE_DAC_CLK_PAD_SEL_M (BIT(8)) +#define EFUSE_DAC_CLK_PAD_SEL_V 0x1 +#define EFUSE_DAC_CLK_PAD_SEL_S 8 +/* EFUSE_DAC_CLK_DIV : R/W ;bitpos:[7:0] ;default: 8'd40 ; */ +/*description: efuse timing configure*/ +#define EFUSE_DAC_CLK_DIV 0x000000FF +#define EFUSE_DAC_CLK_DIV_M ((EFUSE_DAC_CLK_DIV_V)<<(EFUSE_DAC_CLK_DIV_S)) +#define EFUSE_DAC_CLK_DIV_V 0xFF +#define EFUSE_DAC_CLK_DIV_S 0 + +#define EFUSE_DEC_STATUS_REG (DR_REG_EFUSE_BASE + 0x11c) +/* EFUSE_DEC_WARNINGS : RO ;bitpos:[11:0] ;default: 12'b0 ; */ +/*description: the decode result of 3/4 coding scheme has warning*/ +#define EFUSE_DEC_WARNINGS 0x00000FFF +#define EFUSE_DEC_WARNINGS_M ((EFUSE_DEC_WARNINGS_V)<<(EFUSE_DEC_WARNINGS_S)) +#define EFUSE_DEC_WARNINGS_V 0xFFF +#define EFUSE_DEC_WARNINGS_S 0 + +#define EFUSE_DATE_REG (DR_REG_EFUSE_BASE + 0x1FC) +/* EFUSE_DATE : R/W ;bitpos:[31:0] ;default: 32'h16042600 ; */ +/*description: */ +#define EFUSE_DATE 0xFFFFFFFF +#define EFUSE_DATE_M ((EFUSE_DATE_V)<<(EFUSE_DATE_S)) +#define EFUSE_DATE_V 0xFFFFFFFF +#define EFUSE_DATE_S 0 + + + + +#endif /*_SOC_EFUSE_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/gpio_reg.h b/tools/sdk/include/esp32/soc/gpio_reg.h new file mode 100644 index 00000000..1f4b08d4 --- /dev/null +++ b/tools/sdk/include/esp32/soc/gpio_reg.h @@ -0,0 +1,8239 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_GPIO_REG_H_ +#define _SOC_GPIO_REG_H_ + +#include "soc.h" +#define GPIO_BT_SELECT_REG (DR_REG_GPIO_BASE + 0x0000) +/* GPIO_BT_SEL : R/W ;bitpos:[31:0] ;default: x ; */ +/*description: NA*/ +#define GPIO_BT_SEL 0xFFFFFFFF +#define GPIO_BT_SEL_M ((GPIO_BT_SEL_V)<<(GPIO_BT_SEL_S)) +#define GPIO_BT_SEL_V 0xFFFFFFFF +#define GPIO_BT_SEL_S 0 + +#define GPIO_OUT_REG (DR_REG_GPIO_BASE + 0x0004) +/* GPIO_OUT_DATA : R/W ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 output value*/ +#define GPIO_OUT_DATA 0xFFFFFFFF +#define GPIO_OUT_DATA_M ((GPIO_OUT_DATA_V)<<(GPIO_OUT_DATA_S)) +#define GPIO_OUT_DATA_V 0xFFFFFFFF +#define GPIO_OUT_DATA_S 0 + +#define GPIO_OUT_W1TS_REG (DR_REG_GPIO_BASE + 0x0008) +/* GPIO_OUT_DATA_W1TS : R/W ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 output value write 1 to set*/ +#define GPIO_OUT_DATA_W1TS 0xFFFFFFFF +#define GPIO_OUT_DATA_W1TS_M ((GPIO_OUT_DATA_W1TS_V)<<(GPIO_OUT_DATA_W1TS_S)) +#define GPIO_OUT_DATA_W1TS_V 0xFFFFFFFF +#define GPIO_OUT_DATA_W1TS_S 0 + +#define GPIO_OUT_W1TC_REG (DR_REG_GPIO_BASE + 0x000c) +/* GPIO_OUT_DATA_W1TC : R/W ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 output value write 1 to clear*/ +#define GPIO_OUT_DATA_W1TC 0xFFFFFFFF +#define GPIO_OUT_DATA_W1TC_M ((GPIO_OUT_DATA_W1TC_V)<<(GPIO_OUT_DATA_W1TC_S)) +#define GPIO_OUT_DATA_W1TC_V 0xFFFFFFFF +#define GPIO_OUT_DATA_W1TC_S 0 + +#define GPIO_OUT1_REG (DR_REG_GPIO_BASE + 0x0010) +/* GPIO_OUT1_DATA : R/W ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 output value*/ +#define GPIO_OUT1_DATA 0x000000FF +#define GPIO_OUT1_DATA_M ((GPIO_OUT1_DATA_V)<<(GPIO_OUT1_DATA_S)) +#define GPIO_OUT1_DATA_V 0xFF +#define GPIO_OUT1_DATA_S 0 + +#define GPIO_OUT1_W1TS_REG (DR_REG_GPIO_BASE + 0x0014) +/* GPIO_OUT1_DATA_W1TS : R/W ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 output value write 1 to set*/ +#define GPIO_OUT1_DATA_W1TS 0x000000FF +#define GPIO_OUT1_DATA_W1TS_M ((GPIO_OUT1_DATA_W1TS_V)<<(GPIO_OUT1_DATA_W1TS_S)) +#define GPIO_OUT1_DATA_W1TS_V 0xFF +#define GPIO_OUT1_DATA_W1TS_S 0 + +#define GPIO_OUT1_W1TC_REG (DR_REG_GPIO_BASE + 0x0018) +/* GPIO_OUT1_DATA_W1TC : R/W ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 output value write 1 to clear*/ +#define GPIO_OUT1_DATA_W1TC 0x000000FF +#define GPIO_OUT1_DATA_W1TC_M ((GPIO_OUT1_DATA_W1TC_V)<<(GPIO_OUT1_DATA_W1TC_S)) +#define GPIO_OUT1_DATA_W1TC_V 0xFF +#define GPIO_OUT1_DATA_W1TC_S 0 + +#define GPIO_SDIO_SELECT_REG (DR_REG_GPIO_BASE + 0x001c) +/* GPIO_SDIO_SEL : R/W ;bitpos:[7:0] ;default: x ; */ +/*description: SDIO PADS on/off control from outside*/ +#define GPIO_SDIO_SEL 0x000000FF +#define GPIO_SDIO_SEL_M ((GPIO_SDIO_SEL_V)<<(GPIO_SDIO_SEL_S)) +#define GPIO_SDIO_SEL_V 0xFF +#define GPIO_SDIO_SEL_S 0 + +#define GPIO_ENABLE_REG (DR_REG_GPIO_BASE + 0x0020) +/* GPIO_ENABLE_DATA : R/W ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 output enable*/ +#define GPIO_ENABLE_DATA 0xFFFFFFFF +#define GPIO_ENABLE_DATA_M ((GPIO_ENABLE_DATA_V)<<(GPIO_ENABLE_DATA_S)) +#define GPIO_ENABLE_DATA_V 0xFFFFFFFF +#define GPIO_ENABLE_DATA_S 0 + +#define GPIO_ENABLE_W1TS_REG (DR_REG_GPIO_BASE + 0x0024) +/* GPIO_ENABLE_DATA_W1TS : R/W ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 output enable write 1 to set*/ +#define GPIO_ENABLE_DATA_W1TS 0xFFFFFFFF +#define GPIO_ENABLE_DATA_W1TS_M ((GPIO_ENABLE_DATA_W1TS_V)<<(GPIO_ENABLE_DATA_W1TS_S)) +#define GPIO_ENABLE_DATA_W1TS_V 0xFFFFFFFF +#define GPIO_ENABLE_DATA_W1TS_S 0 + +#define GPIO_ENABLE_W1TC_REG (DR_REG_GPIO_BASE + 0x0028) +/* GPIO_ENABLE_DATA_W1TC : R/W ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 output enable write 1 to clear*/ +#define GPIO_ENABLE_DATA_W1TC 0xFFFFFFFF +#define GPIO_ENABLE_DATA_W1TC_M ((GPIO_ENABLE_DATA_W1TC_V)<<(GPIO_ENABLE_DATA_W1TC_S)) +#define GPIO_ENABLE_DATA_W1TC_V 0xFFFFFFFF +#define GPIO_ENABLE_DATA_W1TC_S 0 + +#define GPIO_ENABLE1_REG (DR_REG_GPIO_BASE + 0x002c) +/* GPIO_ENABLE1_DATA : R/W ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 output enable*/ +#define GPIO_ENABLE1_DATA 0x000000FF +#define GPIO_ENABLE1_DATA_M ((GPIO_ENABLE1_DATA_V)<<(GPIO_ENABLE1_DATA_S)) +#define GPIO_ENABLE1_DATA_V 0xFF +#define GPIO_ENABLE1_DATA_S 0 + +#define GPIO_ENABLE1_W1TS_REG (DR_REG_GPIO_BASE + 0x0030) +/* GPIO_ENABLE1_DATA_W1TS : R/W ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 output enable write 1 to set*/ +#define GPIO_ENABLE1_DATA_W1TS 0x000000FF +#define GPIO_ENABLE1_DATA_W1TS_M ((GPIO_ENABLE1_DATA_W1TS_V)<<(GPIO_ENABLE1_DATA_W1TS_S)) +#define GPIO_ENABLE1_DATA_W1TS_V 0xFF +#define GPIO_ENABLE1_DATA_W1TS_S 0 + +#define GPIO_ENABLE1_W1TC_REG (DR_REG_GPIO_BASE + 0x0034) +/* GPIO_ENABLE1_DATA_W1TC : R/W ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 output enable write 1 to clear*/ +#define GPIO_ENABLE1_DATA_W1TC 0x000000FF +#define GPIO_ENABLE1_DATA_W1TC_M ((GPIO_ENABLE1_DATA_W1TC_V)<<(GPIO_ENABLE1_DATA_W1TC_S)) +#define GPIO_ENABLE1_DATA_W1TC_V 0xFF +#define GPIO_ENABLE1_DATA_W1TC_S 0 + +#define GPIO_STRAP_REG (DR_REG_GPIO_BASE + 0x0038) +/* GPIO_STRAPPING : RO ;bitpos:[15:0] ;default: ; */ +/*description: GPIO strapping results: {2'd0 boot_sel_dig[7:1] vsdio_boot_sel + boot_sel_chip[5:0]}. Boot_sel_dig[7:1]: {U0RXD SD_CLK SD_CMD SD_DATA0 SD_DATA1 SD_DATA2 SD_DATA3}. vsdio_boot_sel: MTDI. boot_sel_chip[5:0]: {GPIO0 U0TXD GPIO2 GPIO4 MTDO GPIO5}*/ +#define GPIO_STRAPPING 0x0000FFFF +#define GPIO_STRAPPING_M ((GPIO_STRAPPING_V)<<(GPIO_STRAPPING_S)) +#define GPIO_STRAPPING_V 0xFFFF +#define GPIO_STRAPPING_S 0 + +#define GPIO_IN_REG (DR_REG_GPIO_BASE + 0x003c) +/* GPIO_IN_DATA : RO ;bitpos:[31:0] ;default: ; */ +/*description: GPIO0~31 input value*/ +#define GPIO_IN_DATA 0xFFFFFFFF +#define GPIO_IN_DATA_M ((GPIO_IN_DATA_V)<<(GPIO_IN_DATA_S)) +#define GPIO_IN_DATA_V 0xFFFFFFFF +#define GPIO_IN_DATA_S 0 + +#define GPIO_IN1_REG (DR_REG_GPIO_BASE + 0x0040) +/* GPIO_IN1_DATA : RO ;bitpos:[7:0] ;default: ; */ +/*description: GPIO32~39 input value*/ +#define GPIO_IN1_DATA 0x000000FF +#define GPIO_IN1_DATA_M ((GPIO_IN1_DATA_V)<<(GPIO_IN1_DATA_S)) +#define GPIO_IN1_DATA_V 0xFF +#define GPIO_IN1_DATA_S 0 + +#define GPIO_STATUS_REG (DR_REG_GPIO_BASE + 0x0044) +/* GPIO_STATUS_INT : R/W ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 interrupt status*/ +#define GPIO_STATUS_INT 0xFFFFFFFF +#define GPIO_STATUS_INT_M ((GPIO_STATUS_INT_V)<<(GPIO_STATUS_INT_S)) +#define GPIO_STATUS_INT_V 0xFFFFFFFF +#define GPIO_STATUS_INT_S 0 + +#define GPIO_STATUS_W1TS_REG (DR_REG_GPIO_BASE + 0x0048) +/* GPIO_STATUS_INT_W1TS : R/W ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 interrupt status write 1 to set*/ +#define GPIO_STATUS_INT_W1TS 0xFFFFFFFF +#define GPIO_STATUS_INT_W1TS_M ((GPIO_STATUS_INT_W1TS_V)<<(GPIO_STATUS_INT_W1TS_S)) +#define GPIO_STATUS_INT_W1TS_V 0xFFFFFFFF +#define GPIO_STATUS_INT_W1TS_S 0 + +#define GPIO_STATUS_W1TC_REG (DR_REG_GPIO_BASE + 0x004c) +/* GPIO_STATUS_INT_W1TC : R/W ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 interrupt status write 1 to clear*/ +#define GPIO_STATUS_INT_W1TC 0xFFFFFFFF +#define GPIO_STATUS_INT_W1TC_M ((GPIO_STATUS_INT_W1TC_V)<<(GPIO_STATUS_INT_W1TC_S)) +#define GPIO_STATUS_INT_W1TC_V 0xFFFFFFFF +#define GPIO_STATUS_INT_W1TC_S 0 + +#define GPIO_STATUS1_REG (DR_REG_GPIO_BASE + 0x0050) +/* GPIO_STATUS1_INT : R/W ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 interrupt status*/ +#define GPIO_STATUS1_INT 0x000000FF +#define GPIO_STATUS1_INT_M ((GPIO_STATUS1_INT_V)<<(GPIO_STATUS1_INT_S)) +#define GPIO_STATUS1_INT_V 0xFF +#define GPIO_STATUS1_INT_S 0 + +#define GPIO_STATUS1_W1TS_REG (DR_REG_GPIO_BASE + 0x0054) +/* GPIO_STATUS1_INT_W1TS : R/W ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 interrupt status write 1 to set*/ +#define GPIO_STATUS1_INT_W1TS 0x000000FF +#define GPIO_STATUS1_INT_W1TS_M ((GPIO_STATUS1_INT_W1TS_V)<<(GPIO_STATUS1_INT_W1TS_S)) +#define GPIO_STATUS1_INT_W1TS_V 0xFF +#define GPIO_STATUS1_INT_W1TS_S 0 + +#define GPIO_STATUS1_W1TC_REG (DR_REG_GPIO_BASE + 0x0058) +/* GPIO_STATUS1_INT_W1TC : R/W ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 interrupt status write 1 to clear*/ +#define GPIO_STATUS1_INT_W1TC 0x000000FF +#define GPIO_STATUS1_INT_W1TC_M ((GPIO_STATUS1_INT_W1TC_V)<<(GPIO_STATUS1_INT_W1TC_S)) +#define GPIO_STATUS1_INT_W1TC_V 0xFF +#define GPIO_STATUS1_INT_W1TC_S 0 + +#define GPIO_ACPU_INT_REG (DR_REG_GPIO_BASE + 0x0060) +/* GPIO_APPCPU_INT : RO ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 APP CPU interrupt status*/ +#define GPIO_APPCPU_INT 0xFFFFFFFF +#define GPIO_APPCPU_INT_M ((GPIO_APPCPU_INT_V)<<(GPIO_APPCPU_INT_S)) +#define GPIO_APPCPU_INT_V 0xFFFFFFFF +#define GPIO_APPCPU_INT_S 0 + +#define GPIO_ACPU_NMI_INT_REG (DR_REG_GPIO_BASE + 0x0064) +/* GPIO_APPCPU_NMI_INT : RO ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 APP CPU non-maskable interrupt status*/ +#define GPIO_APPCPU_NMI_INT 0xFFFFFFFF +#define GPIO_APPCPU_NMI_INT_M ((GPIO_APPCPU_NMI_INT_V)<<(GPIO_APPCPU_NMI_INT_S)) +#define GPIO_APPCPU_NMI_INT_V 0xFFFFFFFF +#define GPIO_APPCPU_NMI_INT_S 0 + +#define GPIO_PCPU_INT_REG (DR_REG_GPIO_BASE + 0x0068) +/* GPIO_PROCPU_INT : RO ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 PRO CPU interrupt status*/ +#define GPIO_PROCPU_INT 0xFFFFFFFF +#define GPIO_PROCPU_INT_M ((GPIO_PROCPU_INT_V)<<(GPIO_PROCPU_INT_S)) +#define GPIO_PROCPU_INT_V 0xFFFFFFFF +#define GPIO_PROCPU_INT_S 0 + +#define GPIO_PCPU_NMI_INT_REG (DR_REG_GPIO_BASE + 0x006c) +/* GPIO_PROCPU_NMI_INT : RO ;bitpos:[31:0] ;default: x ; */ +/*description: GPIO0~31 PRO CPU non-maskable interrupt status*/ +#define GPIO_PROCPU_NMI_INT 0xFFFFFFFF +#define GPIO_PROCPU_NMI_INT_M ((GPIO_PROCPU_NMI_INT_V)<<(GPIO_PROCPU_NMI_INT_S)) +#define GPIO_PROCPU_NMI_INT_V 0xFFFFFFFF +#define GPIO_PROCPU_NMI_INT_S 0 + +#define GPIO_CPUSDIO_INT_REG (DR_REG_GPIO_BASE + 0x0070) +/* GPIO_SDIO_INT : RO ;bitpos:[31:0] ;default: x ; */ +/*description: SDIO's extent GPIO0~31 interrupt*/ +#define GPIO_SDIO_INT 0xFFFFFFFF +#define GPIO_SDIO_INT_M ((GPIO_SDIO_INT_V)<<(GPIO_SDIO_INT_S)) +#define GPIO_SDIO_INT_V 0xFFFFFFFF +#define GPIO_SDIO_INT_S 0 + +#define GPIO_ACPU_INT1_REG (DR_REG_GPIO_BASE + 0x0074) +/* GPIO_APPCPU_INT_H : RO ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 APP CPU interrupt status*/ +#define GPIO_APPCPU_INT_H 0x000000FF +#define GPIO_APPCPU_INT_H_M ((GPIO_APPCPU_INT_H_V)<<(GPIO_APPCPU_INT_H_S)) +#define GPIO_APPCPU_INT_H_V 0xFF +#define GPIO_APPCPU_INT_H_S 0 + +#define GPIO_ACPU_NMI_INT1_REG (DR_REG_GPIO_BASE + 0x0078) +/* GPIO_APPCPU_NMI_INT_H : RO ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 APP CPU non-maskable interrupt status*/ +#define GPIO_APPCPU_NMI_INT_H 0x000000FF +#define GPIO_APPCPU_NMI_INT_H_M ((GPIO_APPCPU_NMI_INT_H_V)<<(GPIO_APPCPU_NMI_INT_H_S)) +#define GPIO_APPCPU_NMI_INT_H_V 0xFF +#define GPIO_APPCPU_NMI_INT_H_S 0 + +#define GPIO_PCPU_INT1_REG (DR_REG_GPIO_BASE + 0x007c) +/* GPIO_PROCPU_INT_H : RO ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 PRO CPU interrupt status*/ +#define GPIO_PROCPU_INT_H 0x000000FF +#define GPIO_PROCPU_INT_H_M ((GPIO_PROCPU_INT_H_V)<<(GPIO_PROCPU_INT_H_S)) +#define GPIO_PROCPU_INT_H_V 0xFF +#define GPIO_PROCPU_INT_H_S 0 + +#define GPIO_PCPU_NMI_INT1_REG (DR_REG_GPIO_BASE + 0x0080) +/* GPIO_PROCPU_NMI_INT_H : RO ;bitpos:[7:0] ;default: x ; */ +/*description: GPIO32~39 PRO CPU non-maskable interrupt status*/ +#define GPIO_PROCPU_NMI_INT_H 0x000000FF +#define GPIO_PROCPU_NMI_INT_H_M ((GPIO_PROCPU_NMI_INT_H_V)<<(GPIO_PROCPU_NMI_INT_H_S)) +#define GPIO_PROCPU_NMI_INT_H_V 0xFF +#define GPIO_PROCPU_NMI_INT_H_S 0 + +#define GPIO_CPUSDIO_INT1_REG (DR_REG_GPIO_BASE + 0x0084) +/* GPIO_SDIO_INT_H : RO ;bitpos:[7:0] ;default: x ; */ +/*description: SDIO's extent GPIO32~39 interrupt*/ +#define GPIO_SDIO_INT_H 0x000000FF +#define GPIO_SDIO_INT_H_M ((GPIO_SDIO_INT_H_V)<<(GPIO_SDIO_INT_H_S)) +#define GPIO_SDIO_INT_H_V 0xFF +#define GPIO_SDIO_INT_H_S 0 + +#define GPIO_REG(io_num) (GPIO_PIN0_REG + (io_num)*0x4) +#define GPIO_PIN_INT_ENA 0x0000001F +#define GPIO_PIN_INT_ENA_M ((GPIO_PIN_INT_ENA_V)<<(GPIO_PIN_INT_ENA_S)) +#define GPIO_PIN_INT_ENA_V 0x0000001F +#define GPIO_PIN_INT_ENA_S 13 +#define GPIO_PIN_CONFIG 0x00000003 +#define GPIO_PIN_CONFIG_M ((GPIO_PIN_CONFIG_V)<<(GPIO_PIN_CONFIG_S)) +#define GPIO_PIN_CONFIG_V 0x00000003 +#define GPIO_PIN_CONFIG_S 11 +#define GPIO_PIN_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN_WAKEUP_ENABLE_S 10 +#define GPIO_PIN_INT_TYPE 0x00000007 +#define GPIO_PIN_INT_TYPE_M ((GPIO_PIN_INT_TYPE_V)<<(GPIO_PIN_INT_TYPE_S)) +#define GPIO_PIN_INT_TYPE_V 0x00000007 +#define GPIO_PIN_INT_TYPE_S 7 +#define GPIO_PIN_PAD_DRIVER (BIT(2)) +#define GPIO_PIN_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN_PAD_DRIVER_V 0x1 +#define GPIO_PIN_PAD_DRIVER_S 2 + +#define GPIO_PIN0_REG (DR_REG_GPIO_BASE + 0x0088) +/* GPIO_PIN0_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN0_INT_ENA 0x0000001F +#define GPIO_PIN0_INT_ENA_M ((GPIO_PIN0_INT_ENA_V)<<(GPIO_PIN0_INT_ENA_S)) +#define GPIO_PIN0_INT_ENA_V 0x1F +#define GPIO_PIN0_INT_ENA_S 13 +/* GPIO_PIN0_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN0_CONFIG 0x00000003 +#define GPIO_PIN0_CONFIG_M ((GPIO_PIN0_CONFIG_V)<<(GPIO_PIN0_CONFIG_S)) +#define GPIO_PIN0_CONFIG_V 0x3 +#define GPIO_PIN0_CONFIG_S 11 +/* GPIO_PIN0_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN0_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN0_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN0_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN0_WAKEUP_ENABLE_S 10 +/* GPIO_PIN0_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN0_INT_TYPE 0x00000007 +#define GPIO_PIN0_INT_TYPE_M ((GPIO_PIN0_INT_TYPE_V)<<(GPIO_PIN0_INT_TYPE_S)) +#define GPIO_PIN0_INT_TYPE_V 0x7 +#define GPIO_PIN0_INT_TYPE_S 7 +/* GPIO_PIN0_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN0_PAD_DRIVER (BIT(2)) +#define GPIO_PIN0_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN0_PAD_DRIVER_V 0x1 +#define GPIO_PIN0_PAD_DRIVER_S 2 + +#define GPIO_PIN1_REG (DR_REG_GPIO_BASE + 0x008c) +/* GPIO_PIN1_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN1_INT_ENA 0x0000001F +#define GPIO_PIN1_INT_ENA_M ((GPIO_PIN1_INT_ENA_V)<<(GPIO_PIN1_INT_ENA_S)) +#define GPIO_PIN1_INT_ENA_V 0x1F +#define GPIO_PIN1_INT_ENA_S 13 +/* GPIO_PIN1_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN1_CONFIG 0x00000003 +#define GPIO_PIN1_CONFIG_M ((GPIO_PIN1_CONFIG_V)<<(GPIO_PIN1_CONFIG_S)) +#define GPIO_PIN1_CONFIG_V 0x3 +#define GPIO_PIN1_CONFIG_S 11 +/* GPIO_PIN1_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN1_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN1_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN1_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN1_WAKEUP_ENABLE_S 10 +/* GPIO_PIN1_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN1_INT_TYPE 0x00000007 +#define GPIO_PIN1_INT_TYPE_M ((GPIO_PIN1_INT_TYPE_V)<<(GPIO_PIN1_INT_TYPE_S)) +#define GPIO_PIN1_INT_TYPE_V 0x7 +#define GPIO_PIN1_INT_TYPE_S 7 +/* GPIO_PIN1_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN1_PAD_DRIVER (BIT(2)) +#define GPIO_PIN1_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN1_PAD_DRIVER_V 0x1 +#define GPIO_PIN1_PAD_DRIVER_S 2 + +#define GPIO_PIN2_REG (DR_REG_GPIO_BASE + 0x0090) +/* GPIO_PIN2_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN2_INT_ENA 0x0000001F +#define GPIO_PIN2_INT_ENA_M ((GPIO_PIN2_INT_ENA_V)<<(GPIO_PIN2_INT_ENA_S)) +#define GPIO_PIN2_INT_ENA_V 0x1F +#define GPIO_PIN2_INT_ENA_S 13 +/* GPIO_PIN2_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN2_CONFIG 0x00000003 +#define GPIO_PIN2_CONFIG_M ((GPIO_PIN2_CONFIG_V)<<(GPIO_PIN2_CONFIG_S)) +#define GPIO_PIN2_CONFIG_V 0x3 +#define GPIO_PIN2_CONFIG_S 11 +/* GPIO_PIN2_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN2_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN2_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN2_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN2_WAKEUP_ENABLE_S 10 +/* GPIO_PIN2_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN2_INT_TYPE 0x00000007 +#define GPIO_PIN2_INT_TYPE_M ((GPIO_PIN2_INT_TYPE_V)<<(GPIO_PIN2_INT_TYPE_S)) +#define GPIO_PIN2_INT_TYPE_V 0x7 +#define GPIO_PIN2_INT_TYPE_S 7 +/* GPIO_PIN2_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN2_PAD_DRIVER (BIT(2)) +#define GPIO_PIN2_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN2_PAD_DRIVER_V 0x1 +#define GPIO_PIN2_PAD_DRIVER_S 2 + +#define GPIO_PIN3_REG (DR_REG_GPIO_BASE + 0x0094) +/* GPIO_PIN3_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN3_INT_ENA 0x0000001F +#define GPIO_PIN3_INT_ENA_M ((GPIO_PIN3_INT_ENA_V)<<(GPIO_PIN3_INT_ENA_S)) +#define GPIO_PIN3_INT_ENA_V 0x1F +#define GPIO_PIN3_INT_ENA_S 13 +/* GPIO_PIN3_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN3_CONFIG 0x00000003 +#define GPIO_PIN3_CONFIG_M ((GPIO_PIN3_CONFIG_V)<<(GPIO_PIN3_CONFIG_S)) +#define GPIO_PIN3_CONFIG_V 0x3 +#define GPIO_PIN3_CONFIG_S 11 +/* GPIO_PIN3_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN3_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN3_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN3_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN3_WAKEUP_ENABLE_S 10 +/* GPIO_PIN3_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN3_INT_TYPE 0x00000007 +#define GPIO_PIN3_INT_TYPE_M ((GPIO_PIN3_INT_TYPE_V)<<(GPIO_PIN3_INT_TYPE_S)) +#define GPIO_PIN3_INT_TYPE_V 0x7 +#define GPIO_PIN3_INT_TYPE_S 7 +/* GPIO_PIN3_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN3_PAD_DRIVER (BIT(2)) +#define GPIO_PIN3_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN3_PAD_DRIVER_V 0x1 +#define GPIO_PIN3_PAD_DRIVER_S 2 + +#define GPIO_PIN4_REG (DR_REG_GPIO_BASE + 0x0098) +/* GPIO_PIN4_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN4_INT_ENA 0x0000001F +#define GPIO_PIN4_INT_ENA_M ((GPIO_PIN4_INT_ENA_V)<<(GPIO_PIN4_INT_ENA_S)) +#define GPIO_PIN4_INT_ENA_V 0x1F +#define GPIO_PIN4_INT_ENA_S 13 +/* GPIO_PIN4_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN4_CONFIG 0x00000003 +#define GPIO_PIN4_CONFIG_M ((GPIO_PIN4_CONFIG_V)<<(GPIO_PIN4_CONFIG_S)) +#define GPIO_PIN4_CONFIG_V 0x3 +#define GPIO_PIN4_CONFIG_S 11 +/* GPIO_PIN4_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN4_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN4_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN4_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN4_WAKEUP_ENABLE_S 10 +/* GPIO_PIN4_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN4_INT_TYPE 0x00000007 +#define GPIO_PIN4_INT_TYPE_M ((GPIO_PIN4_INT_TYPE_V)<<(GPIO_PIN4_INT_TYPE_S)) +#define GPIO_PIN4_INT_TYPE_V 0x7 +#define GPIO_PIN4_INT_TYPE_S 7 +/* GPIO_PIN4_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN4_PAD_DRIVER (BIT(2)) +#define GPIO_PIN4_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN4_PAD_DRIVER_V 0x1 +#define GPIO_PIN4_PAD_DRIVER_S 2 + +#define GPIO_PIN5_REG (DR_REG_GPIO_BASE + 0x009c) +/* GPIO_PIN5_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN5_INT_ENA 0x0000001F +#define GPIO_PIN5_INT_ENA_M ((GPIO_PIN5_INT_ENA_V)<<(GPIO_PIN5_INT_ENA_S)) +#define GPIO_PIN5_INT_ENA_V 0x1F +#define GPIO_PIN5_INT_ENA_S 13 +/* GPIO_PIN5_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN5_CONFIG 0x00000003 +#define GPIO_PIN5_CONFIG_M ((GPIO_PIN5_CONFIG_V)<<(GPIO_PIN5_CONFIG_S)) +#define GPIO_PIN5_CONFIG_V 0x3 +#define GPIO_PIN5_CONFIG_S 11 +/* GPIO_PIN5_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN5_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN5_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN5_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN5_WAKEUP_ENABLE_S 10 +/* GPIO_PIN5_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN5_INT_TYPE 0x00000007 +#define GPIO_PIN5_INT_TYPE_M ((GPIO_PIN5_INT_TYPE_V)<<(GPIO_PIN5_INT_TYPE_S)) +#define GPIO_PIN5_INT_TYPE_V 0x7 +#define GPIO_PIN5_INT_TYPE_S 7 +/* GPIO_PIN5_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN5_PAD_DRIVER (BIT(2)) +#define GPIO_PIN5_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN5_PAD_DRIVER_V 0x1 +#define GPIO_PIN5_PAD_DRIVER_S 2 + +#define GPIO_PIN6_REG (DR_REG_GPIO_BASE + 0x00a0) +/* GPIO_PIN6_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN6_INT_ENA 0x0000001F +#define GPIO_PIN6_INT_ENA_M ((GPIO_PIN6_INT_ENA_V)<<(GPIO_PIN6_INT_ENA_S)) +#define GPIO_PIN6_INT_ENA_V 0x1F +#define GPIO_PIN6_INT_ENA_S 13 +/* GPIO_PIN6_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN6_CONFIG 0x00000003 +#define GPIO_PIN6_CONFIG_M ((GPIO_PIN6_CONFIG_V)<<(GPIO_PIN6_CONFIG_S)) +#define GPIO_PIN6_CONFIG_V 0x3 +#define GPIO_PIN6_CONFIG_S 11 +/* GPIO_PIN6_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN6_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN6_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN6_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN6_WAKEUP_ENABLE_S 10 +/* GPIO_PIN6_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN6_INT_TYPE 0x00000007 +#define GPIO_PIN6_INT_TYPE_M ((GPIO_PIN6_INT_TYPE_V)<<(GPIO_PIN6_INT_TYPE_S)) +#define GPIO_PIN6_INT_TYPE_V 0x7 +#define GPIO_PIN6_INT_TYPE_S 7 +/* GPIO_PIN6_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN6_PAD_DRIVER (BIT(2)) +#define GPIO_PIN6_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN6_PAD_DRIVER_V 0x1 +#define GPIO_PIN6_PAD_DRIVER_S 2 + +#define GPIO_PIN7_REG (DR_REG_GPIO_BASE + 0x00a4) +/* GPIO_PIN7_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN7_INT_ENA 0x0000001F +#define GPIO_PIN7_INT_ENA_M ((GPIO_PIN7_INT_ENA_V)<<(GPIO_PIN7_INT_ENA_S)) +#define GPIO_PIN7_INT_ENA_V 0x1F +#define GPIO_PIN7_INT_ENA_S 13 +/* GPIO_PIN7_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN7_CONFIG 0x00000003 +#define GPIO_PIN7_CONFIG_M ((GPIO_PIN7_CONFIG_V)<<(GPIO_PIN7_CONFIG_S)) +#define GPIO_PIN7_CONFIG_V 0x3 +#define GPIO_PIN7_CONFIG_S 11 +/* GPIO_PIN7_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN7_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN7_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN7_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN7_WAKEUP_ENABLE_S 10 +/* GPIO_PIN7_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN7_INT_TYPE 0x00000007 +#define GPIO_PIN7_INT_TYPE_M ((GPIO_PIN7_INT_TYPE_V)<<(GPIO_PIN7_INT_TYPE_S)) +#define GPIO_PIN7_INT_TYPE_V 0x7 +#define GPIO_PIN7_INT_TYPE_S 7 +/* GPIO_PIN7_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN7_PAD_DRIVER (BIT(2)) +#define GPIO_PIN7_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN7_PAD_DRIVER_V 0x1 +#define GPIO_PIN7_PAD_DRIVER_S 2 + +#define GPIO_PIN8_REG (DR_REG_GPIO_BASE + 0x00a8) +/* GPIO_PIN8_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN8_INT_ENA 0x0000001F +#define GPIO_PIN8_INT_ENA_M ((GPIO_PIN8_INT_ENA_V)<<(GPIO_PIN8_INT_ENA_S)) +#define GPIO_PIN8_INT_ENA_V 0x1F +#define GPIO_PIN8_INT_ENA_S 13 +/* GPIO_PIN8_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN8_CONFIG 0x00000003 +#define GPIO_PIN8_CONFIG_M ((GPIO_PIN8_CONFIG_V)<<(GPIO_PIN8_CONFIG_S)) +#define GPIO_PIN8_CONFIG_V 0x3 +#define GPIO_PIN8_CONFIG_S 11 +/* GPIO_PIN8_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN8_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN8_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN8_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN8_WAKEUP_ENABLE_S 10 +/* GPIO_PIN8_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN8_INT_TYPE 0x00000007 +#define GPIO_PIN8_INT_TYPE_M ((GPIO_PIN8_INT_TYPE_V)<<(GPIO_PIN8_INT_TYPE_S)) +#define GPIO_PIN8_INT_TYPE_V 0x7 +#define GPIO_PIN8_INT_TYPE_S 7 +/* GPIO_PIN8_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN8_PAD_DRIVER (BIT(2)) +#define GPIO_PIN8_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN8_PAD_DRIVER_V 0x1 +#define GPIO_PIN8_PAD_DRIVER_S 2 + +#define GPIO_PIN9_REG (DR_REG_GPIO_BASE + 0x00ac) +/* GPIO_PIN9_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN9_INT_ENA 0x0000001F +#define GPIO_PIN9_INT_ENA_M ((GPIO_PIN9_INT_ENA_V)<<(GPIO_PIN9_INT_ENA_S)) +#define GPIO_PIN9_INT_ENA_V 0x1F +#define GPIO_PIN9_INT_ENA_S 13 +/* GPIO_PIN9_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN9_CONFIG 0x00000003 +#define GPIO_PIN9_CONFIG_M ((GPIO_PIN9_CONFIG_V)<<(GPIO_PIN9_CONFIG_S)) +#define GPIO_PIN9_CONFIG_V 0x3 +#define GPIO_PIN9_CONFIG_S 11 +/* GPIO_PIN9_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN9_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN9_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN9_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN9_WAKEUP_ENABLE_S 10 +/* GPIO_PIN9_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN9_INT_TYPE 0x00000007 +#define GPIO_PIN9_INT_TYPE_M ((GPIO_PIN9_INT_TYPE_V)<<(GPIO_PIN9_INT_TYPE_S)) +#define GPIO_PIN9_INT_TYPE_V 0x7 +#define GPIO_PIN9_INT_TYPE_S 7 +/* GPIO_PIN9_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN9_PAD_DRIVER (BIT(2)) +#define GPIO_PIN9_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN9_PAD_DRIVER_V 0x1 +#define GPIO_PIN9_PAD_DRIVER_S 2 + +#define GPIO_PIN10_REG (DR_REG_GPIO_BASE + 0x00b0) +/* GPIO_PIN10_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN10_INT_ENA 0x0000001F +#define GPIO_PIN10_INT_ENA_M ((GPIO_PIN10_INT_ENA_V)<<(GPIO_PIN10_INT_ENA_S)) +#define GPIO_PIN10_INT_ENA_V 0x1F +#define GPIO_PIN10_INT_ENA_S 13 +/* GPIO_PIN10_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN10_CONFIG 0x00000003 +#define GPIO_PIN10_CONFIG_M ((GPIO_PIN10_CONFIG_V)<<(GPIO_PIN10_CONFIG_S)) +#define GPIO_PIN10_CONFIG_V 0x3 +#define GPIO_PIN10_CONFIG_S 11 +/* GPIO_PIN10_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN10_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN10_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN10_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN10_WAKEUP_ENABLE_S 10 +/* GPIO_PIN10_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN10_INT_TYPE 0x00000007 +#define GPIO_PIN10_INT_TYPE_M ((GPIO_PIN10_INT_TYPE_V)<<(GPIO_PIN10_INT_TYPE_S)) +#define GPIO_PIN10_INT_TYPE_V 0x7 +#define GPIO_PIN10_INT_TYPE_S 7 +/* GPIO_PIN10_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN10_PAD_DRIVER (BIT(2)) +#define GPIO_PIN10_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN10_PAD_DRIVER_V 0x1 +#define GPIO_PIN10_PAD_DRIVER_S 2 + +#define GPIO_PIN11_REG (DR_REG_GPIO_BASE + 0x00b4) +/* GPIO_PIN11_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN11_INT_ENA 0x0000001F +#define GPIO_PIN11_INT_ENA_M ((GPIO_PIN11_INT_ENA_V)<<(GPIO_PIN11_INT_ENA_S)) +#define GPIO_PIN11_INT_ENA_V 0x1F +#define GPIO_PIN11_INT_ENA_S 13 +/* GPIO_PIN11_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN11_CONFIG 0x00000003 +#define GPIO_PIN11_CONFIG_M ((GPIO_PIN11_CONFIG_V)<<(GPIO_PIN11_CONFIG_S)) +#define GPIO_PIN11_CONFIG_V 0x3 +#define GPIO_PIN11_CONFIG_S 11 +/* GPIO_PIN11_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN11_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN11_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN11_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN11_WAKEUP_ENABLE_S 10 +/* GPIO_PIN11_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN11_INT_TYPE 0x00000007 +#define GPIO_PIN11_INT_TYPE_M ((GPIO_PIN11_INT_TYPE_V)<<(GPIO_PIN11_INT_TYPE_S)) +#define GPIO_PIN11_INT_TYPE_V 0x7 +#define GPIO_PIN11_INT_TYPE_S 7 +/* GPIO_PIN11_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN11_PAD_DRIVER (BIT(2)) +#define GPIO_PIN11_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN11_PAD_DRIVER_V 0x1 +#define GPIO_PIN11_PAD_DRIVER_S 2 + +#define GPIO_PIN12_REG (DR_REG_GPIO_BASE + 0x00b8) +/* GPIO_PIN12_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN12_INT_ENA 0x0000001F +#define GPIO_PIN12_INT_ENA_M ((GPIO_PIN12_INT_ENA_V)<<(GPIO_PIN12_INT_ENA_S)) +#define GPIO_PIN12_INT_ENA_V 0x1F +#define GPIO_PIN12_INT_ENA_S 13 +/* GPIO_PIN12_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN12_CONFIG 0x00000003 +#define GPIO_PIN12_CONFIG_M ((GPIO_PIN12_CONFIG_V)<<(GPIO_PIN12_CONFIG_S)) +#define GPIO_PIN12_CONFIG_V 0x3 +#define GPIO_PIN12_CONFIG_S 11 +/* GPIO_PIN12_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN12_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN12_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN12_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN12_WAKEUP_ENABLE_S 10 +/* GPIO_PIN12_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN12_INT_TYPE 0x00000007 +#define GPIO_PIN12_INT_TYPE_M ((GPIO_PIN12_INT_TYPE_V)<<(GPIO_PIN12_INT_TYPE_S)) +#define GPIO_PIN12_INT_TYPE_V 0x7 +#define GPIO_PIN12_INT_TYPE_S 7 +/* GPIO_PIN12_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN12_PAD_DRIVER (BIT(2)) +#define GPIO_PIN12_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN12_PAD_DRIVER_V 0x1 +#define GPIO_PIN12_PAD_DRIVER_S 2 + +#define GPIO_PIN13_REG (DR_REG_GPIO_BASE + 0x00bc) +/* GPIO_PIN13_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN13_INT_ENA 0x0000001F +#define GPIO_PIN13_INT_ENA_M ((GPIO_PIN13_INT_ENA_V)<<(GPIO_PIN13_INT_ENA_S)) +#define GPIO_PIN13_INT_ENA_V 0x1F +#define GPIO_PIN13_INT_ENA_S 13 +/* GPIO_PIN13_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN13_CONFIG 0x00000003 +#define GPIO_PIN13_CONFIG_M ((GPIO_PIN13_CONFIG_V)<<(GPIO_PIN13_CONFIG_S)) +#define GPIO_PIN13_CONFIG_V 0x3 +#define GPIO_PIN13_CONFIG_S 11 +/* GPIO_PIN13_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN13_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN13_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN13_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN13_WAKEUP_ENABLE_S 10 +/* GPIO_PIN13_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN13_INT_TYPE 0x00000007 +#define GPIO_PIN13_INT_TYPE_M ((GPIO_PIN13_INT_TYPE_V)<<(GPIO_PIN13_INT_TYPE_S)) +#define GPIO_PIN13_INT_TYPE_V 0x7 +#define GPIO_PIN13_INT_TYPE_S 7 +/* GPIO_PIN13_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN13_PAD_DRIVER (BIT(2)) +#define GPIO_PIN13_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN13_PAD_DRIVER_V 0x1 +#define GPIO_PIN13_PAD_DRIVER_S 2 + +#define GPIO_PIN14_REG (DR_REG_GPIO_BASE + 0x00c0) +/* GPIO_PIN14_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN14_INT_ENA 0x0000001F +#define GPIO_PIN14_INT_ENA_M ((GPIO_PIN14_INT_ENA_V)<<(GPIO_PIN14_INT_ENA_S)) +#define GPIO_PIN14_INT_ENA_V 0x1F +#define GPIO_PIN14_INT_ENA_S 13 +/* GPIO_PIN14_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN14_CONFIG 0x00000003 +#define GPIO_PIN14_CONFIG_M ((GPIO_PIN14_CONFIG_V)<<(GPIO_PIN14_CONFIG_S)) +#define GPIO_PIN14_CONFIG_V 0x3 +#define GPIO_PIN14_CONFIG_S 11 +/* GPIO_PIN14_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN14_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN14_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN14_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN14_WAKEUP_ENABLE_S 10 +/* GPIO_PIN14_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN14_INT_TYPE 0x00000007 +#define GPIO_PIN14_INT_TYPE_M ((GPIO_PIN14_INT_TYPE_V)<<(GPIO_PIN14_INT_TYPE_S)) +#define GPIO_PIN14_INT_TYPE_V 0x7 +#define GPIO_PIN14_INT_TYPE_S 7 +/* GPIO_PIN14_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN14_PAD_DRIVER (BIT(2)) +#define GPIO_PIN14_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN14_PAD_DRIVER_V 0x1 +#define GPIO_PIN14_PAD_DRIVER_S 2 + +#define GPIO_PIN15_REG (DR_REG_GPIO_BASE + 0x00c4) +/* GPIO_PIN15_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN15_INT_ENA 0x0000001F +#define GPIO_PIN15_INT_ENA_M ((GPIO_PIN15_INT_ENA_V)<<(GPIO_PIN15_INT_ENA_S)) +#define GPIO_PIN15_INT_ENA_V 0x1F +#define GPIO_PIN15_INT_ENA_S 13 +/* GPIO_PIN15_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN15_CONFIG 0x00000003 +#define GPIO_PIN15_CONFIG_M ((GPIO_PIN15_CONFIG_V)<<(GPIO_PIN15_CONFIG_S)) +#define GPIO_PIN15_CONFIG_V 0x3 +#define GPIO_PIN15_CONFIG_S 11 +/* GPIO_PIN15_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN15_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN15_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN15_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN15_WAKEUP_ENABLE_S 10 +/* GPIO_PIN15_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN15_INT_TYPE 0x00000007 +#define GPIO_PIN15_INT_TYPE_M ((GPIO_PIN15_INT_TYPE_V)<<(GPIO_PIN15_INT_TYPE_S)) +#define GPIO_PIN15_INT_TYPE_V 0x7 +#define GPIO_PIN15_INT_TYPE_S 7 +/* GPIO_PIN15_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN15_PAD_DRIVER (BIT(2)) +#define GPIO_PIN15_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN15_PAD_DRIVER_V 0x1 +#define GPIO_PIN15_PAD_DRIVER_S 2 + +#define GPIO_PIN16_REG (DR_REG_GPIO_BASE + 0x00c8) +/* GPIO_PIN16_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN16_INT_ENA 0x0000001F +#define GPIO_PIN16_INT_ENA_M ((GPIO_PIN16_INT_ENA_V)<<(GPIO_PIN16_INT_ENA_S)) +#define GPIO_PIN16_INT_ENA_V 0x1F +#define GPIO_PIN16_INT_ENA_S 13 +/* GPIO_PIN16_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN16_CONFIG 0x00000003 +#define GPIO_PIN16_CONFIG_M ((GPIO_PIN16_CONFIG_V)<<(GPIO_PIN16_CONFIG_S)) +#define GPIO_PIN16_CONFIG_V 0x3 +#define GPIO_PIN16_CONFIG_S 11 +/* GPIO_PIN16_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN16_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN16_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN16_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN16_WAKEUP_ENABLE_S 10 +/* GPIO_PIN16_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN16_INT_TYPE 0x00000007 +#define GPIO_PIN16_INT_TYPE_M ((GPIO_PIN16_INT_TYPE_V)<<(GPIO_PIN16_INT_TYPE_S)) +#define GPIO_PIN16_INT_TYPE_V 0x7 +#define GPIO_PIN16_INT_TYPE_S 7 +/* GPIO_PIN16_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN16_PAD_DRIVER (BIT(2)) +#define GPIO_PIN16_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN16_PAD_DRIVER_V 0x1 +#define GPIO_PIN16_PAD_DRIVER_S 2 + +#define GPIO_PIN17_REG (DR_REG_GPIO_BASE + 0x00cc) +/* GPIO_PIN17_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN17_INT_ENA 0x0000001F +#define GPIO_PIN17_INT_ENA_M ((GPIO_PIN17_INT_ENA_V)<<(GPIO_PIN17_INT_ENA_S)) +#define GPIO_PIN17_INT_ENA_V 0x1F +#define GPIO_PIN17_INT_ENA_S 13 +/* GPIO_PIN17_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN17_CONFIG 0x00000003 +#define GPIO_PIN17_CONFIG_M ((GPIO_PIN17_CONFIG_V)<<(GPIO_PIN17_CONFIG_S)) +#define GPIO_PIN17_CONFIG_V 0x3 +#define GPIO_PIN17_CONFIG_S 11 +/* GPIO_PIN17_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN17_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN17_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN17_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN17_WAKEUP_ENABLE_S 10 +/* GPIO_PIN17_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN17_INT_TYPE 0x00000007 +#define GPIO_PIN17_INT_TYPE_M ((GPIO_PIN17_INT_TYPE_V)<<(GPIO_PIN17_INT_TYPE_S)) +#define GPIO_PIN17_INT_TYPE_V 0x7 +#define GPIO_PIN17_INT_TYPE_S 7 +/* GPIO_PIN17_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN17_PAD_DRIVER (BIT(2)) +#define GPIO_PIN17_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN17_PAD_DRIVER_V 0x1 +#define GPIO_PIN17_PAD_DRIVER_S 2 + +#define GPIO_PIN18_REG (DR_REG_GPIO_BASE + 0x00d0) +/* GPIO_PIN18_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN18_INT_ENA 0x0000001F +#define GPIO_PIN18_INT_ENA_M ((GPIO_PIN18_INT_ENA_V)<<(GPIO_PIN18_INT_ENA_S)) +#define GPIO_PIN18_INT_ENA_V 0x1F +#define GPIO_PIN18_INT_ENA_S 13 +/* GPIO_PIN18_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN18_CONFIG 0x00000003 +#define GPIO_PIN18_CONFIG_M ((GPIO_PIN18_CONFIG_V)<<(GPIO_PIN18_CONFIG_S)) +#define GPIO_PIN18_CONFIG_V 0x3 +#define GPIO_PIN18_CONFIG_S 11 +/* GPIO_PIN18_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN18_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN18_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN18_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN18_WAKEUP_ENABLE_S 10 +/* GPIO_PIN18_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN18_INT_TYPE 0x00000007 +#define GPIO_PIN18_INT_TYPE_M ((GPIO_PIN18_INT_TYPE_V)<<(GPIO_PIN18_INT_TYPE_S)) +#define GPIO_PIN18_INT_TYPE_V 0x7 +#define GPIO_PIN18_INT_TYPE_S 7 +/* GPIO_PIN18_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN18_PAD_DRIVER (BIT(2)) +#define GPIO_PIN18_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN18_PAD_DRIVER_V 0x1 +#define GPIO_PIN18_PAD_DRIVER_S 2 + +#define GPIO_PIN19_REG (DR_REG_GPIO_BASE + 0x00d4) +/* GPIO_PIN19_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN19_INT_ENA 0x0000001F +#define GPIO_PIN19_INT_ENA_M ((GPIO_PIN19_INT_ENA_V)<<(GPIO_PIN19_INT_ENA_S)) +#define GPIO_PIN19_INT_ENA_V 0x1F +#define GPIO_PIN19_INT_ENA_S 13 +/* GPIO_PIN19_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN19_CONFIG 0x00000003 +#define GPIO_PIN19_CONFIG_M ((GPIO_PIN19_CONFIG_V)<<(GPIO_PIN19_CONFIG_S)) +#define GPIO_PIN19_CONFIG_V 0x3 +#define GPIO_PIN19_CONFIG_S 11 +/* GPIO_PIN19_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN19_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN19_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN19_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN19_WAKEUP_ENABLE_S 10 +/* GPIO_PIN19_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN19_INT_TYPE 0x00000007 +#define GPIO_PIN19_INT_TYPE_M ((GPIO_PIN19_INT_TYPE_V)<<(GPIO_PIN19_INT_TYPE_S)) +#define GPIO_PIN19_INT_TYPE_V 0x7 +#define GPIO_PIN19_INT_TYPE_S 7 +/* GPIO_PIN19_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN19_PAD_DRIVER (BIT(2)) +#define GPIO_PIN19_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN19_PAD_DRIVER_V 0x1 +#define GPIO_PIN19_PAD_DRIVER_S 2 + +#define GPIO_PIN20_REG (DR_REG_GPIO_BASE + 0x00d8) +/* GPIO_PIN20_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-mask interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-mask interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN20_INT_ENA 0x0000001F +#define GPIO_PIN20_INT_ENA_M ((GPIO_PIN20_INT_ENA_V)<<(GPIO_PIN20_INT_ENA_S)) +#define GPIO_PIN20_INT_ENA_V 0x1F +#define GPIO_PIN20_INT_ENA_S 13 +/* GPIO_PIN20_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN20_CONFIG 0x00000003 +#define GPIO_PIN20_CONFIG_M ((GPIO_PIN20_CONFIG_V)<<(GPIO_PIN20_CONFIG_S)) +#define GPIO_PIN20_CONFIG_V 0x3 +#define GPIO_PIN20_CONFIG_S 11 +/* GPIO_PIN20_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN20_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN20_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN20_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN20_WAKEUP_ENABLE_S 10 +/* GPIO_PIN20_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN20_INT_TYPE 0x00000007 +#define GPIO_PIN20_INT_TYPE_M ((GPIO_PIN20_INT_TYPE_V)<<(GPIO_PIN20_INT_TYPE_S)) +#define GPIO_PIN20_INT_TYPE_V 0x7 +#define GPIO_PIN20_INT_TYPE_S 7 +/* GPIO_PIN20_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN20_PAD_DRIVER (BIT(2)) +#define GPIO_PIN20_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN20_PAD_DRIVER_V 0x1 +#define GPIO_PIN20_PAD_DRIVER_S 2 + +#define GPIO_PIN21_REG (DR_REG_GPIO_BASE + 0x00dc) +/* GPIO_PIN21_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN21_INT_ENA 0x0000001F +#define GPIO_PIN21_INT_ENA_M ((GPIO_PIN21_INT_ENA_V)<<(GPIO_PIN21_INT_ENA_S)) +#define GPIO_PIN21_INT_ENA_V 0x1F +#define GPIO_PIN21_INT_ENA_S 13 +/* GPIO_PIN21_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN21_CONFIG 0x00000003 +#define GPIO_PIN21_CONFIG_M ((GPIO_PIN21_CONFIG_V)<<(GPIO_PIN21_CONFIG_S)) +#define GPIO_PIN21_CONFIG_V 0x3 +#define GPIO_PIN21_CONFIG_S 11 +/* GPIO_PIN21_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN21_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN21_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN21_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN21_WAKEUP_ENABLE_S 10 +/* GPIO_PIN21_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN21_INT_TYPE 0x00000007 +#define GPIO_PIN21_INT_TYPE_M ((GPIO_PIN21_INT_TYPE_V)<<(GPIO_PIN21_INT_TYPE_S)) +#define GPIO_PIN21_INT_TYPE_V 0x7 +#define GPIO_PIN21_INT_TYPE_S 7 +/* GPIO_PIN21_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN21_PAD_DRIVER (BIT(2)) +#define GPIO_PIN21_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN21_PAD_DRIVER_V 0x1 +#define GPIO_PIN21_PAD_DRIVER_S 2 + +#define GPIO_PIN22_REG (DR_REG_GPIO_BASE + 0x00e0) +/* GPIO_PIN22_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: */ +#define GPIO_PIN22_INT_ENA 0x0000001F +#define GPIO_PIN22_INT_ENA_M ((GPIO_PIN22_INT_ENA_V)<<(GPIO_PIN22_INT_ENA_S)) +#define GPIO_PIN22_INT_ENA_V 0x1F +#define GPIO_PIN22_INT_ENA_S 13 +/* GPIO_PIN22_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN22_CONFIG 0x00000003 +#define GPIO_PIN22_CONFIG_M ((GPIO_PIN22_CONFIG_V)<<(GPIO_PIN22_CONFIG_S)) +#define GPIO_PIN22_CONFIG_V 0x3 +#define GPIO_PIN22_CONFIG_S 11 +/* GPIO_PIN22_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN22_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN22_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN22_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN22_WAKEUP_ENABLE_S 10 +/* GPIO_PIN22_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN22_INT_TYPE 0x00000007 +#define GPIO_PIN22_INT_TYPE_M ((GPIO_PIN22_INT_TYPE_V)<<(GPIO_PIN22_INT_TYPE_S)) +#define GPIO_PIN22_INT_TYPE_V 0x7 +#define GPIO_PIN22_INT_TYPE_S 7 +/* GPIO_PIN22_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: */ +#define GPIO_PIN22_PAD_DRIVER (BIT(2)) +#define GPIO_PIN22_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN22_PAD_DRIVER_V 0x1 +#define GPIO_PIN22_PAD_DRIVER_S 2 + +#define GPIO_PIN23_REG (DR_REG_GPIO_BASE + 0x00e4) +/* GPIO_PIN23_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN23_INT_ENA 0x0000001F +#define GPIO_PIN23_INT_ENA_M ((GPIO_PIN23_INT_ENA_V)<<(GPIO_PIN23_INT_ENA_S)) +#define GPIO_PIN23_INT_ENA_V 0x1F +#define GPIO_PIN23_INT_ENA_S 13 +/* GPIO_PIN23_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN23_CONFIG 0x00000003 +#define GPIO_PIN23_CONFIG_M ((GPIO_PIN23_CONFIG_V)<<(GPIO_PIN23_CONFIG_S)) +#define GPIO_PIN23_CONFIG_V 0x3 +#define GPIO_PIN23_CONFIG_S 11 +/* GPIO_PIN23_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN23_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN23_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN23_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN23_WAKEUP_ENABLE_S 10 +/* GPIO_PIN23_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN23_INT_TYPE 0x00000007 +#define GPIO_PIN23_INT_TYPE_M ((GPIO_PIN23_INT_TYPE_V)<<(GPIO_PIN23_INT_TYPE_S)) +#define GPIO_PIN23_INT_TYPE_V 0x7 +#define GPIO_PIN23_INT_TYPE_S 7 +/* GPIO_PIN23_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN23_PAD_DRIVER (BIT(2)) +#define GPIO_PIN23_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN23_PAD_DRIVER_V 0x1 +#define GPIO_PIN23_PAD_DRIVER_S 2 + +#define GPIO_PIN24_REG (DR_REG_GPIO_BASE + 0x00e8) +/* GPIO_PIN24_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN24_INT_ENA 0x0000001F +#define GPIO_PIN24_INT_ENA_M ((GPIO_PIN24_INT_ENA_V)<<(GPIO_PIN24_INT_ENA_S)) +#define GPIO_PIN24_INT_ENA_V 0x1F +#define GPIO_PIN24_INT_ENA_S 13 +/* GPIO_PIN24_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN24_CONFIG 0x00000003 +#define GPIO_PIN24_CONFIG_M ((GPIO_PIN24_CONFIG_V)<<(GPIO_PIN24_CONFIG_S)) +#define GPIO_PIN24_CONFIG_V 0x3 +#define GPIO_PIN24_CONFIG_S 11 +/* GPIO_PIN24_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN24_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN24_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN24_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN24_WAKEUP_ENABLE_S 10 +/* GPIO_PIN24_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN24_INT_TYPE 0x00000007 +#define GPIO_PIN24_INT_TYPE_M ((GPIO_PIN24_INT_TYPE_V)<<(GPIO_PIN24_INT_TYPE_S)) +#define GPIO_PIN24_INT_TYPE_V 0x7 +#define GPIO_PIN24_INT_TYPE_S 7 +/* GPIO_PIN24_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN24_PAD_DRIVER (BIT(2)) +#define GPIO_PIN24_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN24_PAD_DRIVER_V 0x1 +#define GPIO_PIN24_PAD_DRIVER_S 2 + +#define GPIO_PIN25_REG (DR_REG_GPIO_BASE + 0x00ec) +/* GPIO_PIN25_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN25_INT_ENA 0x0000001F +#define GPIO_PIN25_INT_ENA_M ((GPIO_PIN25_INT_ENA_V)<<(GPIO_PIN25_INT_ENA_S)) +#define GPIO_PIN25_INT_ENA_V 0x1F +#define GPIO_PIN25_INT_ENA_S 13 +/* GPIO_PIN25_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN25_CONFIG 0x00000003 +#define GPIO_PIN25_CONFIG_M ((GPIO_PIN25_CONFIG_V)<<(GPIO_PIN25_CONFIG_S)) +#define GPIO_PIN25_CONFIG_V 0x3 +#define GPIO_PIN25_CONFIG_S 11 +/* GPIO_PIN25_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN25_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN25_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN25_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN25_WAKEUP_ENABLE_S 10 +/* GPIO_PIN25_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN25_INT_TYPE 0x00000007 +#define GPIO_PIN25_INT_TYPE_M ((GPIO_PIN25_INT_TYPE_V)<<(GPIO_PIN25_INT_TYPE_S)) +#define GPIO_PIN25_INT_TYPE_V 0x7 +#define GPIO_PIN25_INT_TYPE_S 7 +/* GPIO_PIN25_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN25_PAD_DRIVER (BIT(2)) +#define GPIO_PIN25_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN25_PAD_DRIVER_V 0x1 +#define GPIO_PIN25_PAD_DRIVER_S 2 + +#define GPIO_PIN26_REG (DR_REG_GPIO_BASE + 0x00f0) +/* GPIO_PIN26_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN26_INT_ENA 0x0000001F +#define GPIO_PIN26_INT_ENA_M ((GPIO_PIN26_INT_ENA_V)<<(GPIO_PIN26_INT_ENA_S)) +#define GPIO_PIN26_INT_ENA_V 0x1F +#define GPIO_PIN26_INT_ENA_S 13 +/* GPIO_PIN26_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN26_CONFIG 0x00000003 +#define GPIO_PIN26_CONFIG_M ((GPIO_PIN26_CONFIG_V)<<(GPIO_PIN26_CONFIG_S)) +#define GPIO_PIN26_CONFIG_V 0x3 +#define GPIO_PIN26_CONFIG_S 11 +/* GPIO_PIN26_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN26_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN26_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN26_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN26_WAKEUP_ENABLE_S 10 +/* GPIO_PIN26_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN26_INT_TYPE 0x00000007 +#define GPIO_PIN26_INT_TYPE_M ((GPIO_PIN26_INT_TYPE_V)<<(GPIO_PIN26_INT_TYPE_S)) +#define GPIO_PIN26_INT_TYPE_V 0x7 +#define GPIO_PIN26_INT_TYPE_S 7 +/* GPIO_PIN26_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN26_PAD_DRIVER (BIT(2)) +#define GPIO_PIN26_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN26_PAD_DRIVER_V 0x1 +#define GPIO_PIN26_PAD_DRIVER_S 2 + +#define GPIO_PIN27_REG (DR_REG_GPIO_BASE + 0x00f4) +/* GPIO_PIN27_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN27_INT_ENA 0x0000001F +#define GPIO_PIN27_INT_ENA_M ((GPIO_PIN27_INT_ENA_V)<<(GPIO_PIN27_INT_ENA_S)) +#define GPIO_PIN27_INT_ENA_V 0x1F +#define GPIO_PIN27_INT_ENA_S 13 +/* GPIO_PIN27_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN27_CONFIG 0x00000003 +#define GPIO_PIN27_CONFIG_M ((GPIO_PIN27_CONFIG_V)<<(GPIO_PIN27_CONFIG_S)) +#define GPIO_PIN27_CONFIG_V 0x3 +#define GPIO_PIN27_CONFIG_S 11 +/* GPIO_PIN27_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN27_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN27_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN27_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN27_WAKEUP_ENABLE_S 10 +/* GPIO_PIN27_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN27_INT_TYPE 0x00000007 +#define GPIO_PIN27_INT_TYPE_M ((GPIO_PIN27_INT_TYPE_V)<<(GPIO_PIN27_INT_TYPE_S)) +#define GPIO_PIN27_INT_TYPE_V 0x7 +#define GPIO_PIN27_INT_TYPE_S 7 +/* GPIO_PIN27_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN27_PAD_DRIVER (BIT(2)) +#define GPIO_PIN27_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN27_PAD_DRIVER_V 0x1 +#define GPIO_PIN27_PAD_DRIVER_S 2 + +#define GPIO_PIN28_REG (DR_REG_GPIO_BASE + 0x00f8) +/* GPIO_PIN28_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN28_INT_ENA 0x0000001F +#define GPIO_PIN28_INT_ENA_M ((GPIO_PIN28_INT_ENA_V)<<(GPIO_PIN28_INT_ENA_S)) +#define GPIO_PIN28_INT_ENA_V 0x1F +#define GPIO_PIN28_INT_ENA_S 13 +/* GPIO_PIN28_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN28_CONFIG 0x00000003 +#define GPIO_PIN28_CONFIG_M ((GPIO_PIN28_CONFIG_V)<<(GPIO_PIN28_CONFIG_S)) +#define GPIO_PIN28_CONFIG_V 0x3 +#define GPIO_PIN28_CONFIG_S 11 +/* GPIO_PIN28_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN28_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN28_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN28_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN28_WAKEUP_ENABLE_S 10 +/* GPIO_PIN28_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN28_INT_TYPE 0x00000007 +#define GPIO_PIN28_INT_TYPE_M ((GPIO_PIN28_INT_TYPE_V)<<(GPIO_PIN28_INT_TYPE_S)) +#define GPIO_PIN28_INT_TYPE_V 0x7 +#define GPIO_PIN28_INT_TYPE_S 7 +/* GPIO_PIN28_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN28_PAD_DRIVER (BIT(2)) +#define GPIO_PIN28_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN28_PAD_DRIVER_V 0x1 +#define GPIO_PIN28_PAD_DRIVER_S 2 + +#define GPIO_PIN29_REG (DR_REG_GPIO_BASE + 0x00fc) +/* GPIO_PIN29_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN29_INT_ENA 0x0000001F +#define GPIO_PIN29_INT_ENA_M ((GPIO_PIN29_INT_ENA_V)<<(GPIO_PIN29_INT_ENA_S)) +#define GPIO_PIN29_INT_ENA_V 0x1F +#define GPIO_PIN29_INT_ENA_S 13 +/* GPIO_PIN29_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN29_CONFIG 0x00000003 +#define GPIO_PIN29_CONFIG_M ((GPIO_PIN29_CONFIG_V)<<(GPIO_PIN29_CONFIG_S)) +#define GPIO_PIN29_CONFIG_V 0x3 +#define GPIO_PIN29_CONFIG_S 11 +/* GPIO_PIN29_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN29_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN29_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN29_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN29_WAKEUP_ENABLE_S 10 +/* GPIO_PIN29_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN29_INT_TYPE 0x00000007 +#define GPIO_PIN29_INT_TYPE_M ((GPIO_PIN29_INT_TYPE_V)<<(GPIO_PIN29_INT_TYPE_S)) +#define GPIO_PIN29_INT_TYPE_V 0x7 +#define GPIO_PIN29_INT_TYPE_S 7 +/* GPIO_PIN29_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN29_PAD_DRIVER (BIT(2)) +#define GPIO_PIN29_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN29_PAD_DRIVER_V 0x1 +#define GPIO_PIN29_PAD_DRIVER_S 2 + +#define GPIO_PIN30_REG (DR_REG_GPIO_BASE + 0x0100) +/* GPIO_PIN30_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN30_INT_ENA 0x0000001F +#define GPIO_PIN30_INT_ENA_M ((GPIO_PIN30_INT_ENA_V)<<(GPIO_PIN30_INT_ENA_S)) +#define GPIO_PIN30_INT_ENA_V 0x1F +#define GPIO_PIN30_INT_ENA_S 13 +/* GPIO_PIN30_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN30_CONFIG 0x00000003 +#define GPIO_PIN30_CONFIG_M ((GPIO_PIN30_CONFIG_V)<<(GPIO_PIN30_CONFIG_S)) +#define GPIO_PIN30_CONFIG_V 0x3 +#define GPIO_PIN30_CONFIG_S 11 +/* GPIO_PIN30_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN30_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN30_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN30_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN30_WAKEUP_ENABLE_S 10 +/* GPIO_PIN30_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN30_INT_TYPE 0x00000007 +#define GPIO_PIN30_INT_TYPE_M ((GPIO_PIN30_INT_TYPE_V)<<(GPIO_PIN30_INT_TYPE_S)) +#define GPIO_PIN30_INT_TYPE_V 0x7 +#define GPIO_PIN30_INT_TYPE_S 7 +/* GPIO_PIN30_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN30_PAD_DRIVER (BIT(2)) +#define GPIO_PIN30_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN30_PAD_DRIVER_V 0x1 +#define GPIO_PIN30_PAD_DRIVER_S 2 + +#define GPIO_PIN31_REG (DR_REG_GPIO_BASE + 0x0104) +/* GPIO_PIN31_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN31_INT_ENA 0x0000001F +#define GPIO_PIN31_INT_ENA_M ((GPIO_PIN31_INT_ENA_V)<<(GPIO_PIN31_INT_ENA_S)) +#define GPIO_PIN31_INT_ENA_V 0x1F +#define GPIO_PIN31_INT_ENA_S 13 +/* GPIO_PIN31_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN31_CONFIG 0x00000003 +#define GPIO_PIN31_CONFIG_M ((GPIO_PIN31_CONFIG_V)<<(GPIO_PIN31_CONFIG_S)) +#define GPIO_PIN31_CONFIG_V 0x3 +#define GPIO_PIN31_CONFIG_S 11 +/* GPIO_PIN31_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN31_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN31_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN31_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN31_WAKEUP_ENABLE_S 10 +/* GPIO_PIN31_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN31_INT_TYPE 0x00000007 +#define GPIO_PIN31_INT_TYPE_M ((GPIO_PIN31_INT_TYPE_V)<<(GPIO_PIN31_INT_TYPE_S)) +#define GPIO_PIN31_INT_TYPE_V 0x7 +#define GPIO_PIN31_INT_TYPE_S 7 +/* GPIO_PIN31_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN31_PAD_DRIVER (BIT(2)) +#define GPIO_PIN31_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN31_PAD_DRIVER_V 0x1 +#define GPIO_PIN31_PAD_DRIVER_S 2 + +#define GPIO_PIN32_REG (DR_REG_GPIO_BASE + 0x0108) +/* GPIO_PIN32_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN32_INT_ENA 0x0000001F +#define GPIO_PIN32_INT_ENA_M ((GPIO_PIN32_INT_ENA_V)<<(GPIO_PIN32_INT_ENA_S)) +#define GPIO_PIN32_INT_ENA_V 0x1F +#define GPIO_PIN32_INT_ENA_S 13 +/* GPIO_PIN32_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN32_CONFIG 0x00000003 +#define GPIO_PIN32_CONFIG_M ((GPIO_PIN32_CONFIG_V)<<(GPIO_PIN32_CONFIG_S)) +#define GPIO_PIN32_CONFIG_V 0x3 +#define GPIO_PIN32_CONFIG_S 11 +/* GPIO_PIN32_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN32_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN32_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN32_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN32_WAKEUP_ENABLE_S 10 +/* GPIO_PIN32_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN32_INT_TYPE 0x00000007 +#define GPIO_PIN32_INT_TYPE_M ((GPIO_PIN32_INT_TYPE_V)<<(GPIO_PIN32_INT_TYPE_S)) +#define GPIO_PIN32_INT_TYPE_V 0x7 +#define GPIO_PIN32_INT_TYPE_S 7 +/* GPIO_PIN32_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN32_PAD_DRIVER (BIT(2)) +#define GPIO_PIN32_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN32_PAD_DRIVER_V 0x1 +#define GPIO_PIN32_PAD_DRIVER_S 2 + +#define GPIO_PIN33_REG (DR_REG_GPIO_BASE + 0x010c) +/* GPIO_PIN33_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN33_INT_ENA 0x0000001F +#define GPIO_PIN33_INT_ENA_M ((GPIO_PIN33_INT_ENA_V)<<(GPIO_PIN33_INT_ENA_S)) +#define GPIO_PIN33_INT_ENA_V 0x1F +#define GPIO_PIN33_INT_ENA_S 13 +/* GPIO_PIN33_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN33_CONFIG 0x00000003 +#define GPIO_PIN33_CONFIG_M ((GPIO_PIN33_CONFIG_V)<<(GPIO_PIN33_CONFIG_S)) +#define GPIO_PIN33_CONFIG_V 0x3 +#define GPIO_PIN33_CONFIG_S 11 +/* GPIO_PIN33_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN33_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN33_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN33_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN33_WAKEUP_ENABLE_S 10 +/* GPIO_PIN33_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN33_INT_TYPE 0x00000007 +#define GPIO_PIN33_INT_TYPE_M ((GPIO_PIN33_INT_TYPE_V)<<(GPIO_PIN33_INT_TYPE_S)) +#define GPIO_PIN33_INT_TYPE_V 0x7 +#define GPIO_PIN33_INT_TYPE_S 7 +/* GPIO_PIN33_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN33_PAD_DRIVER (BIT(2)) +#define GPIO_PIN33_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN33_PAD_DRIVER_V 0x1 +#define GPIO_PIN33_PAD_DRIVER_S 2 + +#define GPIO_PIN34_REG (DR_REG_GPIO_BASE + 0x0110) +/* GPIO_PIN34_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN34_INT_ENA 0x0000001F +#define GPIO_PIN34_INT_ENA_M ((GPIO_PIN34_INT_ENA_V)<<(GPIO_PIN34_INT_ENA_S)) +#define GPIO_PIN34_INT_ENA_V 0x1F +#define GPIO_PIN34_INT_ENA_S 13 +/* GPIO_PIN34_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN34_CONFIG 0x00000003 +#define GPIO_PIN34_CONFIG_M ((GPIO_PIN34_CONFIG_V)<<(GPIO_PIN34_CONFIG_S)) +#define GPIO_PIN34_CONFIG_V 0x3 +#define GPIO_PIN34_CONFIG_S 11 +/* GPIO_PIN34_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN34_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN34_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN34_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN34_WAKEUP_ENABLE_S 10 +/* GPIO_PIN34_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN34_INT_TYPE 0x00000007 +#define GPIO_PIN34_INT_TYPE_M ((GPIO_PIN34_INT_TYPE_V)<<(GPIO_PIN34_INT_TYPE_S)) +#define GPIO_PIN34_INT_TYPE_V 0x7 +#define GPIO_PIN34_INT_TYPE_S 7 +/* GPIO_PIN34_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN34_PAD_DRIVER (BIT(2)) +#define GPIO_PIN34_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN34_PAD_DRIVER_V 0x1 +#define GPIO_PIN34_PAD_DRIVER_S 2 + +#define GPIO_PIN35_REG (DR_REG_GPIO_BASE + 0x0114) +/* GPIO_PIN35_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN35_INT_ENA 0x0000001F +#define GPIO_PIN35_INT_ENA_M ((GPIO_PIN35_INT_ENA_V)<<(GPIO_PIN35_INT_ENA_S)) +#define GPIO_PIN35_INT_ENA_V 0x1F +#define GPIO_PIN35_INT_ENA_S 13 +/* GPIO_PIN35_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN35_CONFIG 0x00000003 +#define GPIO_PIN35_CONFIG_M ((GPIO_PIN35_CONFIG_V)<<(GPIO_PIN35_CONFIG_S)) +#define GPIO_PIN35_CONFIG_V 0x3 +#define GPIO_PIN35_CONFIG_S 11 +/* GPIO_PIN35_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN35_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN35_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN35_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN35_WAKEUP_ENABLE_S 10 +/* GPIO_PIN35_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN35_INT_TYPE 0x00000007 +#define GPIO_PIN35_INT_TYPE_M ((GPIO_PIN35_INT_TYPE_V)<<(GPIO_PIN35_INT_TYPE_S)) +#define GPIO_PIN35_INT_TYPE_V 0x7 +#define GPIO_PIN35_INT_TYPE_S 7 +/* GPIO_PIN35_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN35_PAD_DRIVER (BIT(2)) +#define GPIO_PIN35_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN35_PAD_DRIVER_V 0x1 +#define GPIO_PIN35_PAD_DRIVER_S 2 + +#define GPIO_PIN36_REG (DR_REG_GPIO_BASE + 0x0118) +/* GPIO_PIN36_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN36_INT_ENA 0x0000001F +#define GPIO_PIN36_INT_ENA_M ((GPIO_PIN36_INT_ENA_V)<<(GPIO_PIN36_INT_ENA_S)) +#define GPIO_PIN36_INT_ENA_V 0x1F +#define GPIO_PIN36_INT_ENA_S 13 +/* GPIO_PIN36_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN36_CONFIG 0x00000003 +#define GPIO_PIN36_CONFIG_M ((GPIO_PIN36_CONFIG_V)<<(GPIO_PIN36_CONFIG_S)) +#define GPIO_PIN36_CONFIG_V 0x3 +#define GPIO_PIN36_CONFIG_S 11 +/* GPIO_PIN36_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN36_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN36_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN36_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN36_WAKEUP_ENABLE_S 10 +/* GPIO_PIN36_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN36_INT_TYPE 0x00000007 +#define GPIO_PIN36_INT_TYPE_M ((GPIO_PIN36_INT_TYPE_V)<<(GPIO_PIN36_INT_TYPE_S)) +#define GPIO_PIN36_INT_TYPE_V 0x7 +#define GPIO_PIN36_INT_TYPE_S 7 +/* GPIO_PIN36_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN36_PAD_DRIVER (BIT(2)) +#define GPIO_PIN36_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN36_PAD_DRIVER_V 0x1 +#define GPIO_PIN36_PAD_DRIVER_S 2 + +#define GPIO_PIN37_REG (DR_REG_GPIO_BASE + 0x011c) +/* GPIO_PIN37_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN37_INT_ENA 0x0000001F +#define GPIO_PIN37_INT_ENA_M ((GPIO_PIN37_INT_ENA_V)<<(GPIO_PIN37_INT_ENA_S)) +#define GPIO_PIN37_INT_ENA_V 0x1F +#define GPIO_PIN37_INT_ENA_S 13 +/* GPIO_PIN37_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN37_CONFIG 0x00000003 +#define GPIO_PIN37_CONFIG_M ((GPIO_PIN37_CONFIG_V)<<(GPIO_PIN37_CONFIG_S)) +#define GPIO_PIN37_CONFIG_V 0x3 +#define GPIO_PIN37_CONFIG_S 11 +/* GPIO_PIN37_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN37_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN37_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN37_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN37_WAKEUP_ENABLE_S 10 +/* GPIO_PIN37_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN37_INT_TYPE 0x00000007 +#define GPIO_PIN37_INT_TYPE_M ((GPIO_PIN37_INT_TYPE_V)<<(GPIO_PIN37_INT_TYPE_S)) +#define GPIO_PIN37_INT_TYPE_V 0x7 +#define GPIO_PIN37_INT_TYPE_S 7 +/* GPIO_PIN37_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN37_PAD_DRIVER (BIT(2)) +#define GPIO_PIN37_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN37_PAD_DRIVER_V 0x1 +#define GPIO_PIN37_PAD_DRIVER_S 2 + +#define GPIO_PIN38_REG (DR_REG_GPIO_BASE + 0x0120) +/* GPIO_PIN38_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN38_INT_ENA 0x0000001F +#define GPIO_PIN38_INT_ENA_M ((GPIO_PIN38_INT_ENA_V)<<(GPIO_PIN38_INT_ENA_S)) +#define GPIO_PIN38_INT_ENA_V 0x1F +#define GPIO_PIN38_INT_ENA_S 13 +/* GPIO_PIN38_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN38_CONFIG 0x00000003 +#define GPIO_PIN38_CONFIG_M ((GPIO_PIN38_CONFIG_V)<<(GPIO_PIN38_CONFIG_S)) +#define GPIO_PIN38_CONFIG_V 0x3 +#define GPIO_PIN38_CONFIG_S 11 +/* GPIO_PIN38_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN38_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN38_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN38_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN38_WAKEUP_ENABLE_S 10 +/* GPIO_PIN38_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN38_INT_TYPE 0x00000007 +#define GPIO_PIN38_INT_TYPE_M ((GPIO_PIN38_INT_TYPE_V)<<(GPIO_PIN38_INT_TYPE_S)) +#define GPIO_PIN38_INT_TYPE_V 0x7 +#define GPIO_PIN38_INT_TYPE_S 7 +/* GPIO_PIN38_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN38_PAD_DRIVER (BIT(2)) +#define GPIO_PIN38_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN38_PAD_DRIVER_V 0x1 +#define GPIO_PIN38_PAD_DRIVER_S 2 + +#define GPIO_PIN39_REG (DR_REG_GPIO_BASE + 0x0124) +/* GPIO_PIN39_INT_ENA : R/W ;bitpos:[17:13] ;default: x ; */ +/*description: bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt + enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ +#define GPIO_PIN39_INT_ENA 0x0000001F +#define GPIO_PIN39_INT_ENA_M ((GPIO_PIN39_INT_ENA_V)<<(GPIO_PIN39_INT_ENA_S)) +#define GPIO_PIN39_INT_ENA_V 0x1F +#define GPIO_PIN39_INT_ENA_S 13 +/* GPIO_PIN39_CONFIG : R/W ;bitpos:[12:11] ;default: x ; */ +/*description: NA*/ +#define GPIO_PIN39_CONFIG 0x00000003 +#define GPIO_PIN39_CONFIG_M ((GPIO_PIN39_CONFIG_V)<<(GPIO_PIN39_CONFIG_S)) +#define GPIO_PIN39_CONFIG_V 0x3 +#define GPIO_PIN39_CONFIG_S 11 +/* GPIO_PIN39_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: x ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define GPIO_PIN39_WAKEUP_ENABLE (BIT(10)) +#define GPIO_PIN39_WAKEUP_ENABLE_M (BIT(10)) +#define GPIO_PIN39_WAKEUP_ENABLE_V 0x1 +#define GPIO_PIN39_WAKEUP_ENABLE_S 10 +/* GPIO_PIN39_INT_TYPE : R/W ;bitpos:[9:7] ;default: x ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define GPIO_PIN39_INT_TYPE 0x00000007 +#define GPIO_PIN39_INT_TYPE_M ((GPIO_PIN39_INT_TYPE_V)<<(GPIO_PIN39_INT_TYPE_S)) +#define GPIO_PIN39_INT_TYPE_V 0x7 +#define GPIO_PIN39_INT_TYPE_S 7 +/* GPIO_PIN39_PAD_DRIVER : R/W ;bitpos:[2] ;default: x ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define GPIO_PIN39_PAD_DRIVER (BIT(2)) +#define GPIO_PIN39_PAD_DRIVER_M (BIT(2)) +#define GPIO_PIN39_PAD_DRIVER_V 0x1 +#define GPIO_PIN39_PAD_DRIVER_S 2 + +#define GPIO_cali_conf_REG (DR_REG_GPIO_BASE + 0x0128) +/* GPIO_CALI_START : R/W ;bitpos:[31] ;default: x ; */ +/*description: */ +#define GPIO_CALI_START (BIT(31)) +#define GPIO_CALI_START_M (BIT(31)) +#define GPIO_CALI_START_V 0x1 +#define GPIO_CALI_START_S 31 +/* GPIO_CALI_RTC_MAX : R/W ;bitpos:[9:0] ;default: x ; */ +/*description: */ +#define GPIO_CALI_RTC_MAX 0x000003FF +#define GPIO_CALI_RTC_MAX_M ((GPIO_CALI_RTC_MAX_V)<<(GPIO_CALI_RTC_MAX_S)) +#define GPIO_CALI_RTC_MAX_V 0x3FF +#define GPIO_CALI_RTC_MAX_S 0 + +#define GPIO_cali_data_REG (DR_REG_GPIO_BASE + 0x012c) +/* GPIO_CALI_RDY_SYNC2 : RO ;bitpos:[31] ;default: ; */ +/*description: */ +#define GPIO_CALI_RDY_SYNC2 (BIT(31)) +#define GPIO_CALI_RDY_SYNC2_M (BIT(31)) +#define GPIO_CALI_RDY_SYNC2_V 0x1 +#define GPIO_CALI_RDY_SYNC2_S 31 +/* GPIO_CALI_RDY_REAL : RO ;bitpos:[30] ;default: ; */ +/*description: */ +#define GPIO_CALI_RDY_REAL (BIT(30)) +#define GPIO_CALI_RDY_REAL_M (BIT(30)) +#define GPIO_CALI_RDY_REAL_V 0x1 +#define GPIO_CALI_RDY_REAL_S 30 +/* GPIO_CALI_VALUE_SYNC2 : RO ;bitpos:[19:0] ;default: ; */ +/*description: */ +#define GPIO_CALI_VALUE_SYNC2 0x000FFFFF +#define GPIO_CALI_VALUE_SYNC2_M ((GPIO_CALI_VALUE_SYNC2_V)<<(GPIO_CALI_VALUE_SYNC2_S)) +#define GPIO_CALI_VALUE_SYNC2_V 0xFFFFF +#define GPIO_CALI_VALUE_SYNC2_S 0 + +#define GPIO_FUNC0_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0130) +/* GPIO_SIG0_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG0_IN_SEL (BIT(7)) +#define GPIO_SIG0_IN_SEL_M (BIT(7)) +#define GPIO_SIG0_IN_SEL_V 0x1 +#define GPIO_SIG0_IN_SEL_S 7 +/* GPIO_FUNC0_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC0_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC0_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC0_IN_INV_SEL_V 0x1 +#define GPIO_FUNC0_IN_INV_SEL_S 6 +/* GPIO_FUNC0_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC0_IN_SEL 0x0000003F +#define GPIO_FUNC0_IN_SEL_M ((GPIO_FUNC0_IN_SEL_V)<<(GPIO_FUNC0_IN_SEL_S)) +#define GPIO_FUNC0_IN_SEL_V 0x3F +#define GPIO_FUNC0_IN_SEL_S 0 + +#define GPIO_FUNC1_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0134) +/* GPIO_SIG1_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG1_IN_SEL (BIT(7)) +#define GPIO_SIG1_IN_SEL_M (BIT(7)) +#define GPIO_SIG1_IN_SEL_V 0x1 +#define GPIO_SIG1_IN_SEL_S 7 +/* GPIO_FUNC1_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC1_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC1_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC1_IN_INV_SEL_V 0x1 +#define GPIO_FUNC1_IN_INV_SEL_S 6 +/* GPIO_FUNC1_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC1_IN_SEL 0x0000003F +#define GPIO_FUNC1_IN_SEL_M ((GPIO_FUNC1_IN_SEL_V)<<(GPIO_FUNC1_IN_SEL_S)) +#define GPIO_FUNC1_IN_SEL_V 0x3F +#define GPIO_FUNC1_IN_SEL_S 0 + +#define GPIO_FUNC2_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0138) +/* GPIO_SIG2_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG2_IN_SEL (BIT(7)) +#define GPIO_SIG2_IN_SEL_M (BIT(7)) +#define GPIO_SIG2_IN_SEL_V 0x1 +#define GPIO_SIG2_IN_SEL_S 7 +/* GPIO_FUNC2_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC2_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC2_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC2_IN_INV_SEL_V 0x1 +#define GPIO_FUNC2_IN_INV_SEL_S 6 +/* GPIO_FUNC2_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC2_IN_SEL 0x0000003F +#define GPIO_FUNC2_IN_SEL_M ((GPIO_FUNC2_IN_SEL_V)<<(GPIO_FUNC2_IN_SEL_S)) +#define GPIO_FUNC2_IN_SEL_V 0x3F +#define GPIO_FUNC2_IN_SEL_S 0 + +#define GPIO_FUNC3_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x013c) +/* GPIO_SIG3_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG3_IN_SEL (BIT(7)) +#define GPIO_SIG3_IN_SEL_M (BIT(7)) +#define GPIO_SIG3_IN_SEL_V 0x1 +#define GPIO_SIG3_IN_SEL_S 7 +/* GPIO_FUNC3_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC3_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC3_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC3_IN_INV_SEL_V 0x1 +#define GPIO_FUNC3_IN_INV_SEL_S 6 +/* GPIO_FUNC3_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC3_IN_SEL 0x0000003F +#define GPIO_FUNC3_IN_SEL_M ((GPIO_FUNC3_IN_SEL_V)<<(GPIO_FUNC3_IN_SEL_S)) +#define GPIO_FUNC3_IN_SEL_V 0x3F +#define GPIO_FUNC3_IN_SEL_S 0 + +#define GPIO_FUNC4_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0140) +/* GPIO_SIG4_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG4_IN_SEL (BIT(7)) +#define GPIO_SIG4_IN_SEL_M (BIT(7)) +#define GPIO_SIG4_IN_SEL_V 0x1 +#define GPIO_SIG4_IN_SEL_S 7 +/* GPIO_FUNC4_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC4_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC4_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC4_IN_INV_SEL_V 0x1 +#define GPIO_FUNC4_IN_INV_SEL_S 6 +/* GPIO_FUNC4_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC4_IN_SEL 0x0000003F +#define GPIO_FUNC4_IN_SEL_M ((GPIO_FUNC4_IN_SEL_V)<<(GPIO_FUNC4_IN_SEL_S)) +#define GPIO_FUNC4_IN_SEL_V 0x3F +#define GPIO_FUNC4_IN_SEL_S 0 + +#define GPIO_FUNC5_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0144) +/* GPIO_SIG5_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG5_IN_SEL (BIT(7)) +#define GPIO_SIG5_IN_SEL_M (BIT(7)) +#define GPIO_SIG5_IN_SEL_V 0x1 +#define GPIO_SIG5_IN_SEL_S 7 +/* GPIO_FUNC5_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC5_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC5_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC5_IN_INV_SEL_V 0x1 +#define GPIO_FUNC5_IN_INV_SEL_S 6 +/* GPIO_FUNC5_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC5_IN_SEL 0x0000003F +#define GPIO_FUNC5_IN_SEL_M ((GPIO_FUNC5_IN_SEL_V)<<(GPIO_FUNC5_IN_SEL_S)) +#define GPIO_FUNC5_IN_SEL_V 0x3F +#define GPIO_FUNC5_IN_SEL_S 0 + +#define GPIO_FUNC6_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0148) +/* GPIO_SIG6_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG6_IN_SEL (BIT(7)) +#define GPIO_SIG6_IN_SEL_M (BIT(7)) +#define GPIO_SIG6_IN_SEL_V 0x1 +#define GPIO_SIG6_IN_SEL_S 7 +/* GPIO_FUNC6_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC6_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC6_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC6_IN_INV_SEL_V 0x1 +#define GPIO_FUNC6_IN_INV_SEL_S 6 +/* GPIO_FUNC6_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC6_IN_SEL 0x0000003F +#define GPIO_FUNC6_IN_SEL_M ((GPIO_FUNC6_IN_SEL_V)<<(GPIO_FUNC6_IN_SEL_S)) +#define GPIO_FUNC6_IN_SEL_V 0x3F +#define GPIO_FUNC6_IN_SEL_S 0 + +#define GPIO_FUNC7_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x014c) +/* GPIO_SIG7_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG7_IN_SEL (BIT(7)) +#define GPIO_SIG7_IN_SEL_M (BIT(7)) +#define GPIO_SIG7_IN_SEL_V 0x1 +#define GPIO_SIG7_IN_SEL_S 7 +/* GPIO_FUNC7_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC7_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC7_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC7_IN_INV_SEL_V 0x1 +#define GPIO_FUNC7_IN_INV_SEL_S 6 +/* GPIO_FUNC7_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC7_IN_SEL 0x0000003F +#define GPIO_FUNC7_IN_SEL_M ((GPIO_FUNC7_IN_SEL_V)<<(GPIO_FUNC7_IN_SEL_S)) +#define GPIO_FUNC7_IN_SEL_V 0x3F +#define GPIO_FUNC7_IN_SEL_S 0 + +#define GPIO_FUNC8_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0150) +/* GPIO_SIG8_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG8_IN_SEL (BIT(7)) +#define GPIO_SIG8_IN_SEL_M (BIT(7)) +#define GPIO_SIG8_IN_SEL_V 0x1 +#define GPIO_SIG8_IN_SEL_S 7 +/* GPIO_FUNC8_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC8_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC8_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC8_IN_INV_SEL_V 0x1 +#define GPIO_FUNC8_IN_INV_SEL_S 6 +/* GPIO_FUNC8_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC8_IN_SEL 0x0000003F +#define GPIO_FUNC8_IN_SEL_M ((GPIO_FUNC8_IN_SEL_V)<<(GPIO_FUNC8_IN_SEL_S)) +#define GPIO_FUNC8_IN_SEL_V 0x3F +#define GPIO_FUNC8_IN_SEL_S 0 + +#define GPIO_FUNC9_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0154) +/* GPIO_SIG9_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG9_IN_SEL (BIT(7)) +#define GPIO_SIG9_IN_SEL_M (BIT(7)) +#define GPIO_SIG9_IN_SEL_V 0x1 +#define GPIO_SIG9_IN_SEL_S 7 +/* GPIO_FUNC9_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC9_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC9_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC9_IN_INV_SEL_V 0x1 +#define GPIO_FUNC9_IN_INV_SEL_S 6 +/* GPIO_FUNC9_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC9_IN_SEL 0x0000003F +#define GPIO_FUNC9_IN_SEL_M ((GPIO_FUNC9_IN_SEL_V)<<(GPIO_FUNC9_IN_SEL_S)) +#define GPIO_FUNC9_IN_SEL_V 0x3F +#define GPIO_FUNC9_IN_SEL_S 0 + +#define GPIO_FUNC10_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0158) +/* GPIO_SIG10_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG10_IN_SEL (BIT(7)) +#define GPIO_SIG10_IN_SEL_M (BIT(7)) +#define GPIO_SIG10_IN_SEL_V 0x1 +#define GPIO_SIG10_IN_SEL_S 7 +/* GPIO_FUNC10_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC10_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC10_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC10_IN_INV_SEL_V 0x1 +#define GPIO_FUNC10_IN_INV_SEL_S 6 +/* GPIO_FUNC10_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC10_IN_SEL 0x0000003F +#define GPIO_FUNC10_IN_SEL_M ((GPIO_FUNC10_IN_SEL_V)<<(GPIO_FUNC10_IN_SEL_S)) +#define GPIO_FUNC10_IN_SEL_V 0x3F +#define GPIO_FUNC10_IN_SEL_S 0 + +#define GPIO_FUNC11_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x015c) +/* GPIO_SIG11_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG11_IN_SEL (BIT(7)) +#define GPIO_SIG11_IN_SEL_M (BIT(7)) +#define GPIO_SIG11_IN_SEL_V 0x1 +#define GPIO_SIG11_IN_SEL_S 7 +/* GPIO_FUNC11_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC11_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC11_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC11_IN_INV_SEL_V 0x1 +#define GPIO_FUNC11_IN_INV_SEL_S 6 +/* GPIO_FUNC11_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC11_IN_SEL 0x0000003F +#define GPIO_FUNC11_IN_SEL_M ((GPIO_FUNC11_IN_SEL_V)<<(GPIO_FUNC11_IN_SEL_S)) +#define GPIO_FUNC11_IN_SEL_V 0x3F +#define GPIO_FUNC11_IN_SEL_S 0 + +#define GPIO_FUNC12_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0160) +/* GPIO_SIG12_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG12_IN_SEL (BIT(7)) +#define GPIO_SIG12_IN_SEL_M (BIT(7)) +#define GPIO_SIG12_IN_SEL_V 0x1 +#define GPIO_SIG12_IN_SEL_S 7 +/* GPIO_FUNC12_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC12_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC12_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC12_IN_INV_SEL_V 0x1 +#define GPIO_FUNC12_IN_INV_SEL_S 6 +/* GPIO_FUNC12_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC12_IN_SEL 0x0000003F +#define GPIO_FUNC12_IN_SEL_M ((GPIO_FUNC12_IN_SEL_V)<<(GPIO_FUNC12_IN_SEL_S)) +#define GPIO_FUNC12_IN_SEL_V 0x3F +#define GPIO_FUNC12_IN_SEL_S 0 + +#define GPIO_FUNC13_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0164) +/* GPIO_SIG13_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG13_IN_SEL (BIT(7)) +#define GPIO_SIG13_IN_SEL_M (BIT(7)) +#define GPIO_SIG13_IN_SEL_V 0x1 +#define GPIO_SIG13_IN_SEL_S 7 +/* GPIO_FUNC13_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC13_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC13_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC13_IN_INV_SEL_V 0x1 +#define GPIO_FUNC13_IN_INV_SEL_S 6 +/* GPIO_FUNC13_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC13_IN_SEL 0x0000003F +#define GPIO_FUNC13_IN_SEL_M ((GPIO_FUNC13_IN_SEL_V)<<(GPIO_FUNC13_IN_SEL_S)) +#define GPIO_FUNC13_IN_SEL_V 0x3F +#define GPIO_FUNC13_IN_SEL_S 0 + +#define GPIO_FUNC14_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0168) +/* GPIO_SIG14_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG14_IN_SEL (BIT(7)) +#define GPIO_SIG14_IN_SEL_M (BIT(7)) +#define GPIO_SIG14_IN_SEL_V 0x1 +#define GPIO_SIG14_IN_SEL_S 7 +/* GPIO_FUNC14_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC14_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC14_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC14_IN_INV_SEL_V 0x1 +#define GPIO_FUNC14_IN_INV_SEL_S 6 +/* GPIO_FUNC14_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC14_IN_SEL 0x0000003F +#define GPIO_FUNC14_IN_SEL_M ((GPIO_FUNC14_IN_SEL_V)<<(GPIO_FUNC14_IN_SEL_S)) +#define GPIO_FUNC14_IN_SEL_V 0x3F +#define GPIO_FUNC14_IN_SEL_S 0 + +#define GPIO_FUNC15_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x016c) +/* GPIO_SIG15_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG15_IN_SEL (BIT(7)) +#define GPIO_SIG15_IN_SEL_M (BIT(7)) +#define GPIO_SIG15_IN_SEL_V 0x1 +#define GPIO_SIG15_IN_SEL_S 7 +/* GPIO_FUNC15_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC15_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC15_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC15_IN_INV_SEL_V 0x1 +#define GPIO_FUNC15_IN_INV_SEL_S 6 +/* GPIO_FUNC15_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC15_IN_SEL 0x0000003F +#define GPIO_FUNC15_IN_SEL_M ((GPIO_FUNC15_IN_SEL_V)<<(GPIO_FUNC15_IN_SEL_S)) +#define GPIO_FUNC15_IN_SEL_V 0x3F +#define GPIO_FUNC15_IN_SEL_S 0 + +#define GPIO_FUNC16_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0170) +/* GPIO_SIG16_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG16_IN_SEL (BIT(7)) +#define GPIO_SIG16_IN_SEL_M (BIT(7)) +#define GPIO_SIG16_IN_SEL_V 0x1 +#define GPIO_SIG16_IN_SEL_S 7 +/* GPIO_FUNC16_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC16_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC16_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC16_IN_INV_SEL_V 0x1 +#define GPIO_FUNC16_IN_INV_SEL_S 6 +/* GPIO_FUNC16_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC16_IN_SEL 0x0000003F +#define GPIO_FUNC16_IN_SEL_M ((GPIO_FUNC16_IN_SEL_V)<<(GPIO_FUNC16_IN_SEL_S)) +#define GPIO_FUNC16_IN_SEL_V 0x3F +#define GPIO_FUNC16_IN_SEL_S 0 + +#define GPIO_FUNC17_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0174) +/* GPIO_SIG17_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG17_IN_SEL (BIT(7)) +#define GPIO_SIG17_IN_SEL_M (BIT(7)) +#define GPIO_SIG17_IN_SEL_V 0x1 +#define GPIO_SIG17_IN_SEL_S 7 +/* GPIO_FUNC17_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC17_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC17_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC17_IN_INV_SEL_V 0x1 +#define GPIO_FUNC17_IN_INV_SEL_S 6 +/* GPIO_FUNC17_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC17_IN_SEL 0x0000003F +#define GPIO_FUNC17_IN_SEL_M ((GPIO_FUNC17_IN_SEL_V)<<(GPIO_FUNC17_IN_SEL_S)) +#define GPIO_FUNC17_IN_SEL_V 0x3F +#define GPIO_FUNC17_IN_SEL_S 0 + +#define GPIO_FUNC18_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0178) +/* GPIO_SIG18_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG18_IN_SEL (BIT(7)) +#define GPIO_SIG18_IN_SEL_M (BIT(7)) +#define GPIO_SIG18_IN_SEL_V 0x1 +#define GPIO_SIG18_IN_SEL_S 7 +/* GPIO_FUNC18_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC18_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC18_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC18_IN_INV_SEL_V 0x1 +#define GPIO_FUNC18_IN_INV_SEL_S 6 +/* GPIO_FUNC18_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC18_IN_SEL 0x0000003F +#define GPIO_FUNC18_IN_SEL_M ((GPIO_FUNC18_IN_SEL_V)<<(GPIO_FUNC18_IN_SEL_S)) +#define GPIO_FUNC18_IN_SEL_V 0x3F +#define GPIO_FUNC18_IN_SEL_S 0 + +#define GPIO_FUNC19_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x017c) +/* GPIO_SIG19_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG19_IN_SEL (BIT(7)) +#define GPIO_SIG19_IN_SEL_M (BIT(7)) +#define GPIO_SIG19_IN_SEL_V 0x1 +#define GPIO_SIG19_IN_SEL_S 7 +/* GPIO_FUNC19_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC19_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC19_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC19_IN_INV_SEL_V 0x1 +#define GPIO_FUNC19_IN_INV_SEL_S 6 +/* GPIO_FUNC19_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC19_IN_SEL 0x0000003F +#define GPIO_FUNC19_IN_SEL_M ((GPIO_FUNC19_IN_SEL_V)<<(GPIO_FUNC19_IN_SEL_S)) +#define GPIO_FUNC19_IN_SEL_V 0x3F +#define GPIO_FUNC19_IN_SEL_S 0 + +#define GPIO_FUNC20_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0180) +/* GPIO_SIG20_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG20_IN_SEL (BIT(7)) +#define GPIO_SIG20_IN_SEL_M (BIT(7)) +#define GPIO_SIG20_IN_SEL_V 0x1 +#define GPIO_SIG20_IN_SEL_S 7 +/* GPIO_FUNC20_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC20_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC20_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC20_IN_INV_SEL_V 0x1 +#define GPIO_FUNC20_IN_INV_SEL_S 6 +/* GPIO_FUNC20_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC20_IN_SEL 0x0000003F +#define GPIO_FUNC20_IN_SEL_M ((GPIO_FUNC20_IN_SEL_V)<<(GPIO_FUNC20_IN_SEL_S)) +#define GPIO_FUNC20_IN_SEL_V 0x3F +#define GPIO_FUNC20_IN_SEL_S 0 + +#define GPIO_FUNC21_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0184) +/* GPIO_SIG21_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG21_IN_SEL (BIT(7)) +#define GPIO_SIG21_IN_SEL_M (BIT(7)) +#define GPIO_SIG21_IN_SEL_V 0x1 +#define GPIO_SIG21_IN_SEL_S 7 +/* GPIO_FUNC21_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC21_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC21_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC21_IN_INV_SEL_V 0x1 +#define GPIO_FUNC21_IN_INV_SEL_S 6 +/* GPIO_FUNC21_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC21_IN_SEL 0x0000003F +#define GPIO_FUNC21_IN_SEL_M ((GPIO_FUNC21_IN_SEL_V)<<(GPIO_FUNC21_IN_SEL_S)) +#define GPIO_FUNC21_IN_SEL_V 0x3F +#define GPIO_FUNC21_IN_SEL_S 0 + +#define GPIO_FUNC22_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0188) +/* GPIO_SIG22_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG22_IN_SEL (BIT(7)) +#define GPIO_SIG22_IN_SEL_M (BIT(7)) +#define GPIO_SIG22_IN_SEL_V 0x1 +#define GPIO_SIG22_IN_SEL_S 7 +/* GPIO_FUNC22_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC22_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC22_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC22_IN_INV_SEL_V 0x1 +#define GPIO_FUNC22_IN_INV_SEL_S 6 +/* GPIO_FUNC22_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC22_IN_SEL 0x0000003F +#define GPIO_FUNC22_IN_SEL_M ((GPIO_FUNC22_IN_SEL_V)<<(GPIO_FUNC22_IN_SEL_S)) +#define GPIO_FUNC22_IN_SEL_V 0x3F +#define GPIO_FUNC22_IN_SEL_S 0 + +#define GPIO_FUNC23_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x018c) +/* GPIO_SIG23_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG23_IN_SEL (BIT(7)) +#define GPIO_SIG23_IN_SEL_M (BIT(7)) +#define GPIO_SIG23_IN_SEL_V 0x1 +#define GPIO_SIG23_IN_SEL_S 7 +/* GPIO_FUNC23_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC23_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC23_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC23_IN_INV_SEL_V 0x1 +#define GPIO_FUNC23_IN_INV_SEL_S 6 +/* GPIO_FUNC23_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC23_IN_SEL 0x0000003F +#define GPIO_FUNC23_IN_SEL_M ((GPIO_FUNC23_IN_SEL_V)<<(GPIO_FUNC23_IN_SEL_S)) +#define GPIO_FUNC23_IN_SEL_V 0x3F +#define GPIO_FUNC23_IN_SEL_S 0 + +#define GPIO_FUNC24_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0190) +/* GPIO_SIG24_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG24_IN_SEL (BIT(7)) +#define GPIO_SIG24_IN_SEL_M (BIT(7)) +#define GPIO_SIG24_IN_SEL_V 0x1 +#define GPIO_SIG24_IN_SEL_S 7 +/* GPIO_FUNC24_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC24_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC24_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC24_IN_INV_SEL_V 0x1 +#define GPIO_FUNC24_IN_INV_SEL_S 6 +/* GPIO_FUNC24_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC24_IN_SEL 0x0000003F +#define GPIO_FUNC24_IN_SEL_M ((GPIO_FUNC24_IN_SEL_V)<<(GPIO_FUNC24_IN_SEL_S)) +#define GPIO_FUNC24_IN_SEL_V 0x3F +#define GPIO_FUNC24_IN_SEL_S 0 + +#define GPIO_FUNC25_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0194) +/* GPIO_SIG25_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG25_IN_SEL (BIT(7)) +#define GPIO_SIG25_IN_SEL_M (BIT(7)) +#define GPIO_SIG25_IN_SEL_V 0x1 +#define GPIO_SIG25_IN_SEL_S 7 +/* GPIO_FUNC25_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC25_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC25_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC25_IN_INV_SEL_V 0x1 +#define GPIO_FUNC25_IN_INV_SEL_S 6 +/* GPIO_FUNC25_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC25_IN_SEL 0x0000003F +#define GPIO_FUNC25_IN_SEL_M ((GPIO_FUNC25_IN_SEL_V)<<(GPIO_FUNC25_IN_SEL_S)) +#define GPIO_FUNC25_IN_SEL_V 0x3F +#define GPIO_FUNC25_IN_SEL_S 0 + +#define GPIO_FUNC26_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0198) +/* GPIO_SIG26_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG26_IN_SEL (BIT(7)) +#define GPIO_SIG26_IN_SEL_M (BIT(7)) +#define GPIO_SIG26_IN_SEL_V 0x1 +#define GPIO_SIG26_IN_SEL_S 7 +/* GPIO_FUNC26_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC26_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC26_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC26_IN_INV_SEL_V 0x1 +#define GPIO_FUNC26_IN_INV_SEL_S 6 +/* GPIO_FUNC26_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC26_IN_SEL 0x0000003F +#define GPIO_FUNC26_IN_SEL_M ((GPIO_FUNC26_IN_SEL_V)<<(GPIO_FUNC26_IN_SEL_S)) +#define GPIO_FUNC26_IN_SEL_V 0x3F +#define GPIO_FUNC26_IN_SEL_S 0 + +#define GPIO_FUNC27_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x019c) +/* GPIO_SIG27_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG27_IN_SEL (BIT(7)) +#define GPIO_SIG27_IN_SEL_M (BIT(7)) +#define GPIO_SIG27_IN_SEL_V 0x1 +#define GPIO_SIG27_IN_SEL_S 7 +/* GPIO_FUNC27_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC27_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC27_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC27_IN_INV_SEL_V 0x1 +#define GPIO_FUNC27_IN_INV_SEL_S 6 +/* GPIO_FUNC27_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC27_IN_SEL 0x0000003F +#define GPIO_FUNC27_IN_SEL_M ((GPIO_FUNC27_IN_SEL_V)<<(GPIO_FUNC27_IN_SEL_S)) +#define GPIO_FUNC27_IN_SEL_V 0x3F +#define GPIO_FUNC27_IN_SEL_S 0 + +#define GPIO_FUNC28_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01a0) +/* GPIO_SIG28_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG28_IN_SEL (BIT(7)) +#define GPIO_SIG28_IN_SEL_M (BIT(7)) +#define GPIO_SIG28_IN_SEL_V 0x1 +#define GPIO_SIG28_IN_SEL_S 7 +/* GPIO_FUNC28_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC28_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC28_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC28_IN_INV_SEL_V 0x1 +#define GPIO_FUNC28_IN_INV_SEL_S 6 +/* GPIO_FUNC28_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC28_IN_SEL 0x0000003F +#define GPIO_FUNC28_IN_SEL_M ((GPIO_FUNC28_IN_SEL_V)<<(GPIO_FUNC28_IN_SEL_S)) +#define GPIO_FUNC28_IN_SEL_V 0x3F +#define GPIO_FUNC28_IN_SEL_S 0 + +#define GPIO_FUNC29_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01a4) +/* GPIO_SIG29_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG29_IN_SEL (BIT(7)) +#define GPIO_SIG29_IN_SEL_M (BIT(7)) +#define GPIO_SIG29_IN_SEL_V 0x1 +#define GPIO_SIG29_IN_SEL_S 7 +/* GPIO_FUNC29_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC29_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC29_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC29_IN_INV_SEL_V 0x1 +#define GPIO_FUNC29_IN_INV_SEL_S 6 +/* GPIO_FUNC29_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC29_IN_SEL 0x0000003F +#define GPIO_FUNC29_IN_SEL_M ((GPIO_FUNC29_IN_SEL_V)<<(GPIO_FUNC29_IN_SEL_S)) +#define GPIO_FUNC29_IN_SEL_V 0x3F +#define GPIO_FUNC29_IN_SEL_S 0 + +#define GPIO_FUNC30_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01a8) +/* GPIO_SIG30_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG30_IN_SEL (BIT(7)) +#define GPIO_SIG30_IN_SEL_M (BIT(7)) +#define GPIO_SIG30_IN_SEL_V 0x1 +#define GPIO_SIG30_IN_SEL_S 7 +/* GPIO_FUNC30_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC30_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC30_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC30_IN_INV_SEL_V 0x1 +#define GPIO_FUNC30_IN_INV_SEL_S 6 +/* GPIO_FUNC30_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC30_IN_SEL 0x0000003F +#define GPIO_FUNC30_IN_SEL_M ((GPIO_FUNC30_IN_SEL_V)<<(GPIO_FUNC30_IN_SEL_S)) +#define GPIO_FUNC30_IN_SEL_V 0x3F +#define GPIO_FUNC30_IN_SEL_S 0 + +#define GPIO_FUNC31_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01ac) +/* GPIO_SIG31_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG31_IN_SEL (BIT(7)) +#define GPIO_SIG31_IN_SEL_M (BIT(7)) +#define GPIO_SIG31_IN_SEL_V 0x1 +#define GPIO_SIG31_IN_SEL_S 7 +/* GPIO_FUNC31_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC31_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC31_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC31_IN_INV_SEL_V 0x1 +#define GPIO_FUNC31_IN_INV_SEL_S 6 +/* GPIO_FUNC31_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC31_IN_SEL 0x0000003F +#define GPIO_FUNC31_IN_SEL_M ((GPIO_FUNC31_IN_SEL_V)<<(GPIO_FUNC31_IN_SEL_S)) +#define GPIO_FUNC31_IN_SEL_V 0x3F +#define GPIO_FUNC31_IN_SEL_S 0 + +#define GPIO_FUNC32_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01b0) +/* GPIO_SIG32_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG32_IN_SEL (BIT(7)) +#define GPIO_SIG32_IN_SEL_M (BIT(7)) +#define GPIO_SIG32_IN_SEL_V 0x1 +#define GPIO_SIG32_IN_SEL_S 7 +/* GPIO_FUNC32_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC32_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC32_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC32_IN_INV_SEL_V 0x1 +#define GPIO_FUNC32_IN_INV_SEL_S 6 +/* GPIO_FUNC32_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC32_IN_SEL 0x0000003F +#define GPIO_FUNC32_IN_SEL_M ((GPIO_FUNC32_IN_SEL_V)<<(GPIO_FUNC32_IN_SEL_S)) +#define GPIO_FUNC32_IN_SEL_V 0x3F +#define GPIO_FUNC32_IN_SEL_S 0 + +#define GPIO_FUNC33_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01b4) +/* GPIO_SIG33_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG33_IN_SEL (BIT(7)) +#define GPIO_SIG33_IN_SEL_M (BIT(7)) +#define GPIO_SIG33_IN_SEL_V 0x1 +#define GPIO_SIG33_IN_SEL_S 7 +/* GPIO_FUNC33_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC33_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC33_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC33_IN_INV_SEL_V 0x1 +#define GPIO_FUNC33_IN_INV_SEL_S 6 +/* GPIO_FUNC33_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC33_IN_SEL 0x0000003F +#define GPIO_FUNC33_IN_SEL_M ((GPIO_FUNC33_IN_SEL_V)<<(GPIO_FUNC33_IN_SEL_S)) +#define GPIO_FUNC33_IN_SEL_V 0x3F +#define GPIO_FUNC33_IN_SEL_S 0 + +#define GPIO_FUNC34_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01b8) +/* GPIO_SIG34_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG34_IN_SEL (BIT(7)) +#define GPIO_SIG34_IN_SEL_M (BIT(7)) +#define GPIO_SIG34_IN_SEL_V 0x1 +#define GPIO_SIG34_IN_SEL_S 7 +/* GPIO_FUNC34_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC34_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC34_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC34_IN_INV_SEL_V 0x1 +#define GPIO_FUNC34_IN_INV_SEL_S 6 +/* GPIO_FUNC34_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC34_IN_SEL 0x0000003F +#define GPIO_FUNC34_IN_SEL_M ((GPIO_FUNC34_IN_SEL_V)<<(GPIO_FUNC34_IN_SEL_S)) +#define GPIO_FUNC34_IN_SEL_V 0x3F +#define GPIO_FUNC34_IN_SEL_S 0 + +#define GPIO_FUNC35_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01bc) +/* GPIO_SIG35_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG35_IN_SEL (BIT(7)) +#define GPIO_SIG35_IN_SEL_M (BIT(7)) +#define GPIO_SIG35_IN_SEL_V 0x1 +#define GPIO_SIG35_IN_SEL_S 7 +/* GPIO_FUNC35_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC35_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC35_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC35_IN_INV_SEL_V 0x1 +#define GPIO_FUNC35_IN_INV_SEL_S 6 +/* GPIO_FUNC35_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC35_IN_SEL 0x0000003F +#define GPIO_FUNC35_IN_SEL_M ((GPIO_FUNC35_IN_SEL_V)<<(GPIO_FUNC35_IN_SEL_S)) +#define GPIO_FUNC35_IN_SEL_V 0x3F +#define GPIO_FUNC35_IN_SEL_S 0 + +#define GPIO_FUNC36_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01c0) +/* GPIO_SIG36_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG36_IN_SEL (BIT(7)) +#define GPIO_SIG36_IN_SEL_M (BIT(7)) +#define GPIO_SIG36_IN_SEL_V 0x1 +#define GPIO_SIG36_IN_SEL_S 7 +/* GPIO_FUNC36_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC36_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC36_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC36_IN_INV_SEL_V 0x1 +#define GPIO_FUNC36_IN_INV_SEL_S 6 +/* GPIO_FUNC36_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC36_IN_SEL 0x0000003F +#define GPIO_FUNC36_IN_SEL_M ((GPIO_FUNC36_IN_SEL_V)<<(GPIO_FUNC36_IN_SEL_S)) +#define GPIO_FUNC36_IN_SEL_V 0x3F +#define GPIO_FUNC36_IN_SEL_S 0 + +#define GPIO_FUNC37_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01c4) +/* GPIO_SIG37_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG37_IN_SEL (BIT(7)) +#define GPIO_SIG37_IN_SEL_M (BIT(7)) +#define GPIO_SIG37_IN_SEL_V 0x1 +#define GPIO_SIG37_IN_SEL_S 7 +/* GPIO_FUNC37_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC37_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC37_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC37_IN_INV_SEL_V 0x1 +#define GPIO_FUNC37_IN_INV_SEL_S 6 +/* GPIO_FUNC37_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC37_IN_SEL 0x0000003F +#define GPIO_FUNC37_IN_SEL_M ((GPIO_FUNC37_IN_SEL_V)<<(GPIO_FUNC37_IN_SEL_S)) +#define GPIO_FUNC37_IN_SEL_V 0x3F +#define GPIO_FUNC37_IN_SEL_S 0 + +#define GPIO_FUNC38_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01c8) +/* GPIO_SIG38_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG38_IN_SEL (BIT(7)) +#define GPIO_SIG38_IN_SEL_M (BIT(7)) +#define GPIO_SIG38_IN_SEL_V 0x1 +#define GPIO_SIG38_IN_SEL_S 7 +/* GPIO_FUNC38_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC38_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC38_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC38_IN_INV_SEL_V 0x1 +#define GPIO_FUNC38_IN_INV_SEL_S 6 +/* GPIO_FUNC38_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC38_IN_SEL 0x0000003F +#define GPIO_FUNC38_IN_SEL_M ((GPIO_FUNC38_IN_SEL_V)<<(GPIO_FUNC38_IN_SEL_S)) +#define GPIO_FUNC38_IN_SEL_V 0x3F +#define GPIO_FUNC38_IN_SEL_S 0 + +#define GPIO_FUNC39_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01cc) +/* GPIO_SIG39_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG39_IN_SEL (BIT(7)) +#define GPIO_SIG39_IN_SEL_M (BIT(7)) +#define GPIO_SIG39_IN_SEL_V 0x1 +#define GPIO_SIG39_IN_SEL_S 7 +/* GPIO_FUNC39_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC39_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC39_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC39_IN_INV_SEL_V 0x1 +#define GPIO_FUNC39_IN_INV_SEL_S 6 +/* GPIO_FUNC39_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC39_IN_SEL 0x0000003F +#define GPIO_FUNC39_IN_SEL_M ((GPIO_FUNC39_IN_SEL_V)<<(GPIO_FUNC39_IN_SEL_S)) +#define GPIO_FUNC39_IN_SEL_V 0x3F +#define GPIO_FUNC39_IN_SEL_S 0 + +#define GPIO_FUNC40_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01d0) +/* GPIO_SIG40_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG40_IN_SEL (BIT(7)) +#define GPIO_SIG40_IN_SEL_M (BIT(7)) +#define GPIO_SIG40_IN_SEL_V 0x1 +#define GPIO_SIG40_IN_SEL_S 7 +/* GPIO_FUNC40_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC40_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC40_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC40_IN_INV_SEL_V 0x1 +#define GPIO_FUNC40_IN_INV_SEL_S 6 +/* GPIO_FUNC40_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC40_IN_SEL 0x0000003F +#define GPIO_FUNC40_IN_SEL_M ((GPIO_FUNC40_IN_SEL_V)<<(GPIO_FUNC40_IN_SEL_S)) +#define GPIO_FUNC40_IN_SEL_V 0x3F +#define GPIO_FUNC40_IN_SEL_S 0 + +#define GPIO_FUNC41_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01d4) +/* GPIO_SIG41_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG41_IN_SEL (BIT(7)) +#define GPIO_SIG41_IN_SEL_M (BIT(7)) +#define GPIO_SIG41_IN_SEL_V 0x1 +#define GPIO_SIG41_IN_SEL_S 7 +/* GPIO_FUNC41_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC41_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC41_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC41_IN_INV_SEL_V 0x1 +#define GPIO_FUNC41_IN_INV_SEL_S 6 +/* GPIO_FUNC41_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC41_IN_SEL 0x0000003F +#define GPIO_FUNC41_IN_SEL_M ((GPIO_FUNC41_IN_SEL_V)<<(GPIO_FUNC41_IN_SEL_S)) +#define GPIO_FUNC41_IN_SEL_V 0x3F +#define GPIO_FUNC41_IN_SEL_S 0 + +#define GPIO_FUNC42_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01d8) +/* GPIO_SIG42_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG42_IN_SEL (BIT(7)) +#define GPIO_SIG42_IN_SEL_M (BIT(7)) +#define GPIO_SIG42_IN_SEL_V 0x1 +#define GPIO_SIG42_IN_SEL_S 7 +/* GPIO_FUNC42_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC42_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC42_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC42_IN_INV_SEL_V 0x1 +#define GPIO_FUNC42_IN_INV_SEL_S 6 +/* GPIO_FUNC42_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC42_IN_SEL 0x0000003F +#define GPIO_FUNC42_IN_SEL_M ((GPIO_FUNC42_IN_SEL_V)<<(GPIO_FUNC42_IN_SEL_S)) +#define GPIO_FUNC42_IN_SEL_V 0x3F +#define GPIO_FUNC42_IN_SEL_S 0 + +#define GPIO_FUNC43_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01dc) +/* GPIO_SIG43_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG43_IN_SEL (BIT(7)) +#define GPIO_SIG43_IN_SEL_M (BIT(7)) +#define GPIO_SIG43_IN_SEL_V 0x1 +#define GPIO_SIG43_IN_SEL_S 7 +/* GPIO_FUNC43_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC43_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC43_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC43_IN_INV_SEL_V 0x1 +#define GPIO_FUNC43_IN_INV_SEL_S 6 +/* GPIO_FUNC43_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC43_IN_SEL 0x0000003F +#define GPIO_FUNC43_IN_SEL_M ((GPIO_FUNC43_IN_SEL_V)<<(GPIO_FUNC43_IN_SEL_S)) +#define GPIO_FUNC43_IN_SEL_V 0x3F +#define GPIO_FUNC43_IN_SEL_S 0 + +#define GPIO_FUNC44_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01e0) +/* GPIO_SIG44_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG44_IN_SEL (BIT(7)) +#define GPIO_SIG44_IN_SEL_M (BIT(7)) +#define GPIO_SIG44_IN_SEL_V 0x1 +#define GPIO_SIG44_IN_SEL_S 7 +/* GPIO_FUNC44_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC44_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC44_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC44_IN_INV_SEL_V 0x1 +#define GPIO_FUNC44_IN_INV_SEL_S 6 +/* GPIO_FUNC44_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC44_IN_SEL 0x0000003F +#define GPIO_FUNC44_IN_SEL_M ((GPIO_FUNC44_IN_SEL_V)<<(GPIO_FUNC44_IN_SEL_S)) +#define GPIO_FUNC44_IN_SEL_V 0x3F +#define GPIO_FUNC44_IN_SEL_S 0 + +#define GPIO_FUNC45_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01e4) +/* GPIO_SIG45_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG45_IN_SEL (BIT(7)) +#define GPIO_SIG45_IN_SEL_M (BIT(7)) +#define GPIO_SIG45_IN_SEL_V 0x1 +#define GPIO_SIG45_IN_SEL_S 7 +/* GPIO_FUNC45_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC45_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC45_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC45_IN_INV_SEL_V 0x1 +#define GPIO_FUNC45_IN_INV_SEL_S 6 +/* GPIO_FUNC45_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC45_IN_SEL 0x0000003F +#define GPIO_FUNC45_IN_SEL_M ((GPIO_FUNC45_IN_SEL_V)<<(GPIO_FUNC45_IN_SEL_S)) +#define GPIO_FUNC45_IN_SEL_V 0x3F +#define GPIO_FUNC45_IN_SEL_S 0 + +#define GPIO_FUNC46_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01e8) +/* GPIO_SIG46_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG46_IN_SEL (BIT(7)) +#define GPIO_SIG46_IN_SEL_M (BIT(7)) +#define GPIO_SIG46_IN_SEL_V 0x1 +#define GPIO_SIG46_IN_SEL_S 7 +/* GPIO_FUNC46_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC46_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC46_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC46_IN_INV_SEL_V 0x1 +#define GPIO_FUNC46_IN_INV_SEL_S 6 +/* GPIO_FUNC46_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC46_IN_SEL 0x0000003F +#define GPIO_FUNC46_IN_SEL_M ((GPIO_FUNC46_IN_SEL_V)<<(GPIO_FUNC46_IN_SEL_S)) +#define GPIO_FUNC46_IN_SEL_V 0x3F +#define GPIO_FUNC46_IN_SEL_S 0 + +#define GPIO_FUNC47_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01ec) +/* GPIO_SIG47_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG47_IN_SEL (BIT(7)) +#define GPIO_SIG47_IN_SEL_M (BIT(7)) +#define GPIO_SIG47_IN_SEL_V 0x1 +#define GPIO_SIG47_IN_SEL_S 7 +/* GPIO_FUNC47_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC47_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC47_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC47_IN_INV_SEL_V 0x1 +#define GPIO_FUNC47_IN_INV_SEL_S 6 +/* GPIO_FUNC47_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC47_IN_SEL 0x0000003F +#define GPIO_FUNC47_IN_SEL_M ((GPIO_FUNC47_IN_SEL_V)<<(GPIO_FUNC47_IN_SEL_S)) +#define GPIO_FUNC47_IN_SEL_V 0x3F +#define GPIO_FUNC47_IN_SEL_S 0 + +#define GPIO_FUNC48_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01f0) +/* GPIO_SIG48_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG48_IN_SEL (BIT(7)) +#define GPIO_SIG48_IN_SEL_M (BIT(7)) +#define GPIO_SIG48_IN_SEL_V 0x1 +#define GPIO_SIG48_IN_SEL_S 7 +/* GPIO_FUNC48_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC48_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC48_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC48_IN_INV_SEL_V 0x1 +#define GPIO_FUNC48_IN_INV_SEL_S 6 +/* GPIO_FUNC48_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC48_IN_SEL 0x0000003F +#define GPIO_FUNC48_IN_SEL_M ((GPIO_FUNC48_IN_SEL_V)<<(GPIO_FUNC48_IN_SEL_S)) +#define GPIO_FUNC48_IN_SEL_V 0x3F +#define GPIO_FUNC48_IN_SEL_S 0 + +#define GPIO_FUNC49_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01f4) +/* GPIO_SIG49_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG49_IN_SEL (BIT(7)) +#define GPIO_SIG49_IN_SEL_M (BIT(7)) +#define GPIO_SIG49_IN_SEL_V 0x1 +#define GPIO_SIG49_IN_SEL_S 7 +/* GPIO_FUNC49_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC49_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC49_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC49_IN_INV_SEL_V 0x1 +#define GPIO_FUNC49_IN_INV_SEL_S 6 +/* GPIO_FUNC49_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC49_IN_SEL 0x0000003F +#define GPIO_FUNC49_IN_SEL_M ((GPIO_FUNC49_IN_SEL_V)<<(GPIO_FUNC49_IN_SEL_S)) +#define GPIO_FUNC49_IN_SEL_V 0x3F +#define GPIO_FUNC49_IN_SEL_S 0 + +#define GPIO_FUNC50_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01f8) +/* GPIO_SIG50_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG50_IN_SEL (BIT(7)) +#define GPIO_SIG50_IN_SEL_M (BIT(7)) +#define GPIO_SIG50_IN_SEL_V 0x1 +#define GPIO_SIG50_IN_SEL_S 7 +/* GPIO_FUNC50_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC50_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC50_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC50_IN_INV_SEL_V 0x1 +#define GPIO_FUNC50_IN_INV_SEL_S 6 +/* GPIO_FUNC50_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC50_IN_SEL 0x0000003F +#define GPIO_FUNC50_IN_SEL_M ((GPIO_FUNC50_IN_SEL_V)<<(GPIO_FUNC50_IN_SEL_S)) +#define GPIO_FUNC50_IN_SEL_V 0x3F +#define GPIO_FUNC50_IN_SEL_S 0 + +#define GPIO_FUNC51_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x01fc) +/* GPIO_SIG51_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG51_IN_SEL (BIT(7)) +#define GPIO_SIG51_IN_SEL_M (BIT(7)) +#define GPIO_SIG51_IN_SEL_V 0x1 +#define GPIO_SIG51_IN_SEL_S 7 +/* GPIO_FUNC51_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC51_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC51_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC51_IN_INV_SEL_V 0x1 +#define GPIO_FUNC51_IN_INV_SEL_S 6 +/* GPIO_FUNC51_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC51_IN_SEL 0x0000003F +#define GPIO_FUNC51_IN_SEL_M ((GPIO_FUNC51_IN_SEL_V)<<(GPIO_FUNC51_IN_SEL_S)) +#define GPIO_FUNC51_IN_SEL_V 0x3F +#define GPIO_FUNC51_IN_SEL_S 0 + +#define GPIO_FUNC52_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0200) +/* GPIO_SIG52_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG52_IN_SEL (BIT(7)) +#define GPIO_SIG52_IN_SEL_M (BIT(7)) +#define GPIO_SIG52_IN_SEL_V 0x1 +#define GPIO_SIG52_IN_SEL_S 7 +/* GPIO_FUNC52_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC52_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC52_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC52_IN_INV_SEL_V 0x1 +#define GPIO_FUNC52_IN_INV_SEL_S 6 +/* GPIO_FUNC52_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC52_IN_SEL 0x0000003F +#define GPIO_FUNC52_IN_SEL_M ((GPIO_FUNC52_IN_SEL_V)<<(GPIO_FUNC52_IN_SEL_S)) +#define GPIO_FUNC52_IN_SEL_V 0x3F +#define GPIO_FUNC52_IN_SEL_S 0 + +#define GPIO_FUNC53_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0204) +/* GPIO_SIG53_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG53_IN_SEL (BIT(7)) +#define GPIO_SIG53_IN_SEL_M (BIT(7)) +#define GPIO_SIG53_IN_SEL_V 0x1 +#define GPIO_SIG53_IN_SEL_S 7 +/* GPIO_FUNC53_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC53_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC53_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC53_IN_INV_SEL_V 0x1 +#define GPIO_FUNC53_IN_INV_SEL_S 6 +/* GPIO_FUNC53_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC53_IN_SEL 0x0000003F +#define GPIO_FUNC53_IN_SEL_M ((GPIO_FUNC53_IN_SEL_V)<<(GPIO_FUNC53_IN_SEL_S)) +#define GPIO_FUNC53_IN_SEL_V 0x3F +#define GPIO_FUNC53_IN_SEL_S 0 + +#define GPIO_FUNC54_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0208) +/* GPIO_SIG54_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG54_IN_SEL (BIT(7)) +#define GPIO_SIG54_IN_SEL_M (BIT(7)) +#define GPIO_SIG54_IN_SEL_V 0x1 +#define GPIO_SIG54_IN_SEL_S 7 +/* GPIO_FUNC54_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC54_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC54_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC54_IN_INV_SEL_V 0x1 +#define GPIO_FUNC54_IN_INV_SEL_S 6 +/* GPIO_FUNC54_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC54_IN_SEL 0x0000003F +#define GPIO_FUNC54_IN_SEL_M ((GPIO_FUNC54_IN_SEL_V)<<(GPIO_FUNC54_IN_SEL_S)) +#define GPIO_FUNC54_IN_SEL_V 0x3F +#define GPIO_FUNC54_IN_SEL_S 0 + +#define GPIO_FUNC55_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x020c) +/* GPIO_SIG55_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG55_IN_SEL (BIT(7)) +#define GPIO_SIG55_IN_SEL_M (BIT(7)) +#define GPIO_SIG55_IN_SEL_V 0x1 +#define GPIO_SIG55_IN_SEL_S 7 +/* GPIO_FUNC55_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC55_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC55_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC55_IN_INV_SEL_V 0x1 +#define GPIO_FUNC55_IN_INV_SEL_S 6 +/* GPIO_FUNC55_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC55_IN_SEL 0x0000003F +#define GPIO_FUNC55_IN_SEL_M ((GPIO_FUNC55_IN_SEL_V)<<(GPIO_FUNC55_IN_SEL_S)) +#define GPIO_FUNC55_IN_SEL_V 0x3F +#define GPIO_FUNC55_IN_SEL_S 0 + +#define GPIO_FUNC56_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0210) +/* GPIO_SIG56_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG56_IN_SEL (BIT(7)) +#define GPIO_SIG56_IN_SEL_M (BIT(7)) +#define GPIO_SIG56_IN_SEL_V 0x1 +#define GPIO_SIG56_IN_SEL_S 7 +/* GPIO_FUNC56_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC56_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC56_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC56_IN_INV_SEL_V 0x1 +#define GPIO_FUNC56_IN_INV_SEL_S 6 +/* GPIO_FUNC56_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC56_IN_SEL 0x0000003F +#define GPIO_FUNC56_IN_SEL_M ((GPIO_FUNC56_IN_SEL_V)<<(GPIO_FUNC56_IN_SEL_S)) +#define GPIO_FUNC56_IN_SEL_V 0x3F +#define GPIO_FUNC56_IN_SEL_S 0 + +#define GPIO_FUNC57_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0214) +/* GPIO_SIG57_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG57_IN_SEL (BIT(7)) +#define GPIO_SIG57_IN_SEL_M (BIT(7)) +#define GPIO_SIG57_IN_SEL_V 0x1 +#define GPIO_SIG57_IN_SEL_S 7 +/* GPIO_FUNC57_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC57_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC57_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC57_IN_INV_SEL_V 0x1 +#define GPIO_FUNC57_IN_INV_SEL_S 6 +/* GPIO_FUNC57_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC57_IN_SEL 0x0000003F +#define GPIO_FUNC57_IN_SEL_M ((GPIO_FUNC57_IN_SEL_V)<<(GPIO_FUNC57_IN_SEL_S)) +#define GPIO_FUNC57_IN_SEL_V 0x3F +#define GPIO_FUNC57_IN_SEL_S 0 + +#define GPIO_FUNC58_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0218) +/* GPIO_SIG58_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG58_IN_SEL (BIT(7)) +#define GPIO_SIG58_IN_SEL_M (BIT(7)) +#define GPIO_SIG58_IN_SEL_V 0x1 +#define GPIO_SIG58_IN_SEL_S 7 +/* GPIO_FUNC58_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC58_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC58_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC58_IN_INV_SEL_V 0x1 +#define GPIO_FUNC58_IN_INV_SEL_S 6 +/* GPIO_FUNC58_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC58_IN_SEL 0x0000003F +#define GPIO_FUNC58_IN_SEL_M ((GPIO_FUNC58_IN_SEL_V)<<(GPIO_FUNC58_IN_SEL_S)) +#define GPIO_FUNC58_IN_SEL_V 0x3F +#define GPIO_FUNC58_IN_SEL_S 0 + +#define GPIO_FUNC59_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x021c) +/* GPIO_SIG59_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG59_IN_SEL (BIT(7)) +#define GPIO_SIG59_IN_SEL_M (BIT(7)) +#define GPIO_SIG59_IN_SEL_V 0x1 +#define GPIO_SIG59_IN_SEL_S 7 +/* GPIO_FUNC59_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC59_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC59_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC59_IN_INV_SEL_V 0x1 +#define GPIO_FUNC59_IN_INV_SEL_S 6 +/* GPIO_FUNC59_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC59_IN_SEL 0x0000003F +#define GPIO_FUNC59_IN_SEL_M ((GPIO_FUNC59_IN_SEL_V)<<(GPIO_FUNC59_IN_SEL_S)) +#define GPIO_FUNC59_IN_SEL_V 0x3F +#define GPIO_FUNC59_IN_SEL_S 0 + +#define GPIO_FUNC60_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0220) +/* GPIO_SIG60_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG60_IN_SEL (BIT(7)) +#define GPIO_SIG60_IN_SEL_M (BIT(7)) +#define GPIO_SIG60_IN_SEL_V 0x1 +#define GPIO_SIG60_IN_SEL_S 7 +/* GPIO_FUNC60_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC60_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC60_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC60_IN_INV_SEL_V 0x1 +#define GPIO_FUNC60_IN_INV_SEL_S 6 +/* GPIO_FUNC60_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC60_IN_SEL 0x0000003F +#define GPIO_FUNC60_IN_SEL_M ((GPIO_FUNC60_IN_SEL_V)<<(GPIO_FUNC60_IN_SEL_S)) +#define GPIO_FUNC60_IN_SEL_V 0x3F +#define GPIO_FUNC60_IN_SEL_S 0 + +#define GPIO_FUNC61_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0224) +/* GPIO_SIG61_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG61_IN_SEL (BIT(7)) +#define GPIO_SIG61_IN_SEL_M (BIT(7)) +#define GPIO_SIG61_IN_SEL_V 0x1 +#define GPIO_SIG61_IN_SEL_S 7 +/* GPIO_FUNC61_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC61_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC61_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC61_IN_INV_SEL_V 0x1 +#define GPIO_FUNC61_IN_INV_SEL_S 6 +/* GPIO_FUNC61_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC61_IN_SEL 0x0000003F +#define GPIO_FUNC61_IN_SEL_M ((GPIO_FUNC61_IN_SEL_V)<<(GPIO_FUNC61_IN_SEL_S)) +#define GPIO_FUNC61_IN_SEL_V 0x3F +#define GPIO_FUNC61_IN_SEL_S 0 + +#define GPIO_FUNC62_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0228) +/* GPIO_SIG62_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG62_IN_SEL (BIT(7)) +#define GPIO_SIG62_IN_SEL_M (BIT(7)) +#define GPIO_SIG62_IN_SEL_V 0x1 +#define GPIO_SIG62_IN_SEL_S 7 +/* GPIO_FUNC62_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC62_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC62_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC62_IN_INV_SEL_V 0x1 +#define GPIO_FUNC62_IN_INV_SEL_S 6 +/* GPIO_FUNC62_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC62_IN_SEL 0x0000003F +#define GPIO_FUNC62_IN_SEL_M ((GPIO_FUNC62_IN_SEL_V)<<(GPIO_FUNC62_IN_SEL_S)) +#define GPIO_FUNC62_IN_SEL_V 0x3F +#define GPIO_FUNC62_IN_SEL_S 0 + +#define GPIO_FUNC63_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x022c) +/* GPIO_SIG63_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG63_IN_SEL (BIT(7)) +#define GPIO_SIG63_IN_SEL_M (BIT(7)) +#define GPIO_SIG63_IN_SEL_V 0x1 +#define GPIO_SIG63_IN_SEL_S 7 +/* GPIO_FUNC63_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC63_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC63_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC63_IN_INV_SEL_V 0x1 +#define GPIO_FUNC63_IN_INV_SEL_S 6 +/* GPIO_FUNC63_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC63_IN_SEL 0x0000003F +#define GPIO_FUNC63_IN_SEL_M ((GPIO_FUNC63_IN_SEL_V)<<(GPIO_FUNC63_IN_SEL_S)) +#define GPIO_FUNC63_IN_SEL_V 0x3F +#define GPIO_FUNC63_IN_SEL_S 0 + +#define GPIO_FUNC64_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0230) +/* GPIO_SIG64_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG64_IN_SEL (BIT(7)) +#define GPIO_SIG64_IN_SEL_M (BIT(7)) +#define GPIO_SIG64_IN_SEL_V 0x1 +#define GPIO_SIG64_IN_SEL_S 7 +/* GPIO_FUNC64_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC64_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC64_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC64_IN_INV_SEL_V 0x1 +#define GPIO_FUNC64_IN_INV_SEL_S 6 +/* GPIO_FUNC64_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC64_IN_SEL 0x0000003F +#define GPIO_FUNC64_IN_SEL_M ((GPIO_FUNC64_IN_SEL_V)<<(GPIO_FUNC64_IN_SEL_S)) +#define GPIO_FUNC64_IN_SEL_V 0x3F +#define GPIO_FUNC64_IN_SEL_S 0 + +#define GPIO_FUNC65_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0234) +/* GPIO_SIG65_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG65_IN_SEL (BIT(7)) +#define GPIO_SIG65_IN_SEL_M (BIT(7)) +#define GPIO_SIG65_IN_SEL_V 0x1 +#define GPIO_SIG65_IN_SEL_S 7 +/* GPIO_FUNC65_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC65_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC65_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC65_IN_INV_SEL_V 0x1 +#define GPIO_FUNC65_IN_INV_SEL_S 6 +/* GPIO_FUNC65_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC65_IN_SEL 0x0000003F +#define GPIO_FUNC65_IN_SEL_M ((GPIO_FUNC65_IN_SEL_V)<<(GPIO_FUNC65_IN_SEL_S)) +#define GPIO_FUNC65_IN_SEL_V 0x3F +#define GPIO_FUNC65_IN_SEL_S 0 + +#define GPIO_FUNC66_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0238) +/* GPIO_SIG66_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG66_IN_SEL (BIT(7)) +#define GPIO_SIG66_IN_SEL_M (BIT(7)) +#define GPIO_SIG66_IN_SEL_V 0x1 +#define GPIO_SIG66_IN_SEL_S 7 +/* GPIO_FUNC66_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC66_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC66_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC66_IN_INV_SEL_V 0x1 +#define GPIO_FUNC66_IN_INV_SEL_S 6 +/* GPIO_FUNC66_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC66_IN_SEL 0x0000003F +#define GPIO_FUNC66_IN_SEL_M ((GPIO_FUNC66_IN_SEL_V)<<(GPIO_FUNC66_IN_SEL_S)) +#define GPIO_FUNC66_IN_SEL_V 0x3F +#define GPIO_FUNC66_IN_SEL_S 0 + +#define GPIO_FUNC67_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x023c) +/* GPIO_SIG67_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG67_IN_SEL (BIT(7)) +#define GPIO_SIG67_IN_SEL_M (BIT(7)) +#define GPIO_SIG67_IN_SEL_V 0x1 +#define GPIO_SIG67_IN_SEL_S 7 +/* GPIO_FUNC67_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC67_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC67_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC67_IN_INV_SEL_V 0x1 +#define GPIO_FUNC67_IN_INV_SEL_S 6 +/* GPIO_FUNC67_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC67_IN_SEL 0x0000003F +#define GPIO_FUNC67_IN_SEL_M ((GPIO_FUNC67_IN_SEL_V)<<(GPIO_FUNC67_IN_SEL_S)) +#define GPIO_FUNC67_IN_SEL_V 0x3F +#define GPIO_FUNC67_IN_SEL_S 0 + +#define GPIO_FUNC68_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0240) +/* GPIO_SIG68_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG68_IN_SEL (BIT(7)) +#define GPIO_SIG68_IN_SEL_M (BIT(7)) +#define GPIO_SIG68_IN_SEL_V 0x1 +#define GPIO_SIG68_IN_SEL_S 7 +/* GPIO_FUNC68_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC68_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC68_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC68_IN_INV_SEL_V 0x1 +#define GPIO_FUNC68_IN_INV_SEL_S 6 +/* GPIO_FUNC68_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC68_IN_SEL 0x0000003F +#define GPIO_FUNC68_IN_SEL_M ((GPIO_FUNC68_IN_SEL_V)<<(GPIO_FUNC68_IN_SEL_S)) +#define GPIO_FUNC68_IN_SEL_V 0x3F +#define GPIO_FUNC68_IN_SEL_S 0 + +#define GPIO_FUNC69_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0244) +/* GPIO_SIG69_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG69_IN_SEL (BIT(7)) +#define GPIO_SIG69_IN_SEL_M (BIT(7)) +#define GPIO_SIG69_IN_SEL_V 0x1 +#define GPIO_SIG69_IN_SEL_S 7 +/* GPIO_FUNC69_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC69_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC69_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC69_IN_INV_SEL_V 0x1 +#define GPIO_FUNC69_IN_INV_SEL_S 6 +/* GPIO_FUNC69_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC69_IN_SEL 0x0000003F +#define GPIO_FUNC69_IN_SEL_M ((GPIO_FUNC69_IN_SEL_V)<<(GPIO_FUNC69_IN_SEL_S)) +#define GPIO_FUNC69_IN_SEL_V 0x3F +#define GPIO_FUNC69_IN_SEL_S 0 + +#define GPIO_FUNC70_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0248) +/* GPIO_SIG70_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG70_IN_SEL (BIT(7)) +#define GPIO_SIG70_IN_SEL_M (BIT(7)) +#define GPIO_SIG70_IN_SEL_V 0x1 +#define GPIO_SIG70_IN_SEL_S 7 +/* GPIO_FUNC70_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC70_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC70_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC70_IN_INV_SEL_V 0x1 +#define GPIO_FUNC70_IN_INV_SEL_S 6 +/* GPIO_FUNC70_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC70_IN_SEL 0x0000003F +#define GPIO_FUNC70_IN_SEL_M ((GPIO_FUNC70_IN_SEL_V)<<(GPIO_FUNC70_IN_SEL_S)) +#define GPIO_FUNC70_IN_SEL_V 0x3F +#define GPIO_FUNC70_IN_SEL_S 0 + +#define GPIO_FUNC71_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x024c) +/* GPIO_SIG71_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG71_IN_SEL (BIT(7)) +#define GPIO_SIG71_IN_SEL_M (BIT(7)) +#define GPIO_SIG71_IN_SEL_V 0x1 +#define GPIO_SIG71_IN_SEL_S 7 +/* GPIO_FUNC71_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC71_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC71_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC71_IN_INV_SEL_V 0x1 +#define GPIO_FUNC71_IN_INV_SEL_S 6 +/* GPIO_FUNC71_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC71_IN_SEL 0x0000003F +#define GPIO_FUNC71_IN_SEL_M ((GPIO_FUNC71_IN_SEL_V)<<(GPIO_FUNC71_IN_SEL_S)) +#define GPIO_FUNC71_IN_SEL_V 0x3F +#define GPIO_FUNC71_IN_SEL_S 0 + +#define GPIO_FUNC72_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0250) +/* GPIO_SIG72_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG72_IN_SEL (BIT(7)) +#define GPIO_SIG72_IN_SEL_M (BIT(7)) +#define GPIO_SIG72_IN_SEL_V 0x1 +#define GPIO_SIG72_IN_SEL_S 7 +/* GPIO_FUNC72_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC72_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC72_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC72_IN_INV_SEL_V 0x1 +#define GPIO_FUNC72_IN_INV_SEL_S 6 +/* GPIO_FUNC72_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC72_IN_SEL 0x0000003F +#define GPIO_FUNC72_IN_SEL_M ((GPIO_FUNC72_IN_SEL_V)<<(GPIO_FUNC72_IN_SEL_S)) +#define GPIO_FUNC72_IN_SEL_V 0x3F +#define GPIO_FUNC72_IN_SEL_S 0 + +#define GPIO_FUNC73_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0254) +/* GPIO_SIG73_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG73_IN_SEL (BIT(7)) +#define GPIO_SIG73_IN_SEL_M (BIT(7)) +#define GPIO_SIG73_IN_SEL_V 0x1 +#define GPIO_SIG73_IN_SEL_S 7 +/* GPIO_FUNC73_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC73_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC73_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC73_IN_INV_SEL_V 0x1 +#define GPIO_FUNC73_IN_INV_SEL_S 6 +/* GPIO_FUNC73_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC73_IN_SEL 0x0000003F +#define GPIO_FUNC73_IN_SEL_M ((GPIO_FUNC73_IN_SEL_V)<<(GPIO_FUNC73_IN_SEL_S)) +#define GPIO_FUNC73_IN_SEL_V 0x3F +#define GPIO_FUNC73_IN_SEL_S 0 + +#define GPIO_FUNC74_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0258) +/* GPIO_SIG74_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG74_IN_SEL (BIT(7)) +#define GPIO_SIG74_IN_SEL_M (BIT(7)) +#define GPIO_SIG74_IN_SEL_V 0x1 +#define GPIO_SIG74_IN_SEL_S 7 +/* GPIO_FUNC74_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC74_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC74_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC74_IN_INV_SEL_V 0x1 +#define GPIO_FUNC74_IN_INV_SEL_S 6 +/* GPIO_FUNC74_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC74_IN_SEL 0x0000003F +#define GPIO_FUNC74_IN_SEL_M ((GPIO_FUNC74_IN_SEL_V)<<(GPIO_FUNC74_IN_SEL_S)) +#define GPIO_FUNC74_IN_SEL_V 0x3F +#define GPIO_FUNC74_IN_SEL_S 0 + +#define GPIO_FUNC75_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x025c) +/* GPIO_SIG75_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG75_IN_SEL (BIT(7)) +#define GPIO_SIG75_IN_SEL_M (BIT(7)) +#define GPIO_SIG75_IN_SEL_V 0x1 +#define GPIO_SIG75_IN_SEL_S 7 +/* GPIO_FUNC75_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC75_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC75_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC75_IN_INV_SEL_V 0x1 +#define GPIO_FUNC75_IN_INV_SEL_S 6 +/* GPIO_FUNC75_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC75_IN_SEL 0x0000003F +#define GPIO_FUNC75_IN_SEL_M ((GPIO_FUNC75_IN_SEL_V)<<(GPIO_FUNC75_IN_SEL_S)) +#define GPIO_FUNC75_IN_SEL_V 0x3F +#define GPIO_FUNC75_IN_SEL_S 0 + +#define GPIO_FUNC76_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0260) +/* GPIO_SIG76_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG76_IN_SEL (BIT(7)) +#define GPIO_SIG76_IN_SEL_M (BIT(7)) +#define GPIO_SIG76_IN_SEL_V 0x1 +#define GPIO_SIG76_IN_SEL_S 7 +/* GPIO_FUNC76_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC76_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC76_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC76_IN_INV_SEL_V 0x1 +#define GPIO_FUNC76_IN_INV_SEL_S 6 +/* GPIO_FUNC76_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC76_IN_SEL 0x0000003F +#define GPIO_FUNC76_IN_SEL_M ((GPIO_FUNC76_IN_SEL_V)<<(GPIO_FUNC76_IN_SEL_S)) +#define GPIO_FUNC76_IN_SEL_V 0x3F +#define GPIO_FUNC76_IN_SEL_S 0 + +#define GPIO_FUNC77_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0264) +/* GPIO_SIG77_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG77_IN_SEL (BIT(7)) +#define GPIO_SIG77_IN_SEL_M (BIT(7)) +#define GPIO_SIG77_IN_SEL_V 0x1 +#define GPIO_SIG77_IN_SEL_S 7 +/* GPIO_FUNC77_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC77_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC77_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC77_IN_INV_SEL_V 0x1 +#define GPIO_FUNC77_IN_INV_SEL_S 6 +/* GPIO_FUNC77_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC77_IN_SEL 0x0000003F +#define GPIO_FUNC77_IN_SEL_M ((GPIO_FUNC77_IN_SEL_V)<<(GPIO_FUNC77_IN_SEL_S)) +#define GPIO_FUNC77_IN_SEL_V 0x3F +#define GPIO_FUNC77_IN_SEL_S 0 + +#define GPIO_FUNC78_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0268) +/* GPIO_SIG78_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG78_IN_SEL (BIT(7)) +#define GPIO_SIG78_IN_SEL_M (BIT(7)) +#define GPIO_SIG78_IN_SEL_V 0x1 +#define GPIO_SIG78_IN_SEL_S 7 +/* GPIO_FUNC78_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC78_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC78_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC78_IN_INV_SEL_V 0x1 +#define GPIO_FUNC78_IN_INV_SEL_S 6 +/* GPIO_FUNC78_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC78_IN_SEL 0x0000003F +#define GPIO_FUNC78_IN_SEL_M ((GPIO_FUNC78_IN_SEL_V)<<(GPIO_FUNC78_IN_SEL_S)) +#define GPIO_FUNC78_IN_SEL_V 0x3F +#define GPIO_FUNC78_IN_SEL_S 0 + +#define GPIO_FUNC79_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x026c) +/* GPIO_SIG79_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG79_IN_SEL (BIT(7)) +#define GPIO_SIG79_IN_SEL_M (BIT(7)) +#define GPIO_SIG79_IN_SEL_V 0x1 +#define GPIO_SIG79_IN_SEL_S 7 +/* GPIO_FUNC79_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC79_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC79_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC79_IN_INV_SEL_V 0x1 +#define GPIO_FUNC79_IN_INV_SEL_S 6 +/* GPIO_FUNC79_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC79_IN_SEL 0x0000003F +#define GPIO_FUNC79_IN_SEL_M ((GPIO_FUNC79_IN_SEL_V)<<(GPIO_FUNC79_IN_SEL_S)) +#define GPIO_FUNC79_IN_SEL_V 0x3F +#define GPIO_FUNC79_IN_SEL_S 0 + +#define GPIO_FUNC80_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0270) +/* GPIO_SIG80_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG80_IN_SEL (BIT(7)) +#define GPIO_SIG80_IN_SEL_M (BIT(7)) +#define GPIO_SIG80_IN_SEL_V 0x1 +#define GPIO_SIG80_IN_SEL_S 7 +/* GPIO_FUNC80_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC80_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC80_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC80_IN_INV_SEL_V 0x1 +#define GPIO_FUNC80_IN_INV_SEL_S 6 +/* GPIO_FUNC80_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC80_IN_SEL 0x0000003F +#define GPIO_FUNC80_IN_SEL_M ((GPIO_FUNC80_IN_SEL_V)<<(GPIO_FUNC80_IN_SEL_S)) +#define GPIO_FUNC80_IN_SEL_V 0x3F +#define GPIO_FUNC80_IN_SEL_S 0 + +#define GPIO_FUNC81_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0274) +/* GPIO_SIG81_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG81_IN_SEL (BIT(7)) +#define GPIO_SIG81_IN_SEL_M (BIT(7)) +#define GPIO_SIG81_IN_SEL_V 0x1 +#define GPIO_SIG81_IN_SEL_S 7 +/* GPIO_FUNC81_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC81_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC81_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC81_IN_INV_SEL_V 0x1 +#define GPIO_FUNC81_IN_INV_SEL_S 6 +/* GPIO_FUNC81_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC81_IN_SEL 0x0000003F +#define GPIO_FUNC81_IN_SEL_M ((GPIO_FUNC81_IN_SEL_V)<<(GPIO_FUNC81_IN_SEL_S)) +#define GPIO_FUNC81_IN_SEL_V 0x3F +#define GPIO_FUNC81_IN_SEL_S 0 + +#define GPIO_FUNC82_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0278) +/* GPIO_SIG82_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG82_IN_SEL (BIT(7)) +#define GPIO_SIG82_IN_SEL_M (BIT(7)) +#define GPIO_SIG82_IN_SEL_V 0x1 +#define GPIO_SIG82_IN_SEL_S 7 +/* GPIO_FUNC82_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC82_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC82_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC82_IN_INV_SEL_V 0x1 +#define GPIO_FUNC82_IN_INV_SEL_S 6 +/* GPIO_FUNC82_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC82_IN_SEL 0x0000003F +#define GPIO_FUNC82_IN_SEL_M ((GPIO_FUNC82_IN_SEL_V)<<(GPIO_FUNC82_IN_SEL_S)) +#define GPIO_FUNC82_IN_SEL_V 0x3F +#define GPIO_FUNC82_IN_SEL_S 0 + +#define GPIO_FUNC83_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x027c) +/* GPIO_SIG83_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG83_IN_SEL (BIT(7)) +#define GPIO_SIG83_IN_SEL_M (BIT(7)) +#define GPIO_SIG83_IN_SEL_V 0x1 +#define GPIO_SIG83_IN_SEL_S 7 +/* GPIO_FUNC83_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC83_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC83_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC83_IN_INV_SEL_V 0x1 +#define GPIO_FUNC83_IN_INV_SEL_S 6 +/* GPIO_FUNC83_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC83_IN_SEL 0x0000003F +#define GPIO_FUNC83_IN_SEL_M ((GPIO_FUNC83_IN_SEL_V)<<(GPIO_FUNC83_IN_SEL_S)) +#define GPIO_FUNC83_IN_SEL_V 0x3F +#define GPIO_FUNC83_IN_SEL_S 0 + +#define GPIO_FUNC84_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0280) +/* GPIO_SIG84_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG84_IN_SEL (BIT(7)) +#define GPIO_SIG84_IN_SEL_M (BIT(7)) +#define GPIO_SIG84_IN_SEL_V 0x1 +#define GPIO_SIG84_IN_SEL_S 7 +/* GPIO_FUNC84_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC84_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC84_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC84_IN_INV_SEL_V 0x1 +#define GPIO_FUNC84_IN_INV_SEL_S 6 +/* GPIO_FUNC84_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC84_IN_SEL 0x0000003F +#define GPIO_FUNC84_IN_SEL_M ((GPIO_FUNC84_IN_SEL_V)<<(GPIO_FUNC84_IN_SEL_S)) +#define GPIO_FUNC84_IN_SEL_V 0x3F +#define GPIO_FUNC84_IN_SEL_S 0 + +#define GPIO_FUNC85_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0284) +/* GPIO_SIG85_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG85_IN_SEL (BIT(7)) +#define GPIO_SIG85_IN_SEL_M (BIT(7)) +#define GPIO_SIG85_IN_SEL_V 0x1 +#define GPIO_SIG85_IN_SEL_S 7 +/* GPIO_FUNC85_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC85_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC85_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC85_IN_INV_SEL_V 0x1 +#define GPIO_FUNC85_IN_INV_SEL_S 6 +/* GPIO_FUNC85_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC85_IN_SEL 0x0000003F +#define GPIO_FUNC85_IN_SEL_M ((GPIO_FUNC85_IN_SEL_V)<<(GPIO_FUNC85_IN_SEL_S)) +#define GPIO_FUNC85_IN_SEL_V 0x3F +#define GPIO_FUNC85_IN_SEL_S 0 + +#define GPIO_FUNC86_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0288) +/* GPIO_SIG86_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG86_IN_SEL (BIT(7)) +#define GPIO_SIG86_IN_SEL_M (BIT(7)) +#define GPIO_SIG86_IN_SEL_V 0x1 +#define GPIO_SIG86_IN_SEL_S 7 +/* GPIO_FUNC86_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC86_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC86_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC86_IN_INV_SEL_V 0x1 +#define GPIO_FUNC86_IN_INV_SEL_S 6 +/* GPIO_FUNC86_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC86_IN_SEL 0x0000003F +#define GPIO_FUNC86_IN_SEL_M ((GPIO_FUNC86_IN_SEL_V)<<(GPIO_FUNC86_IN_SEL_S)) +#define GPIO_FUNC86_IN_SEL_V 0x3F +#define GPIO_FUNC86_IN_SEL_S 0 + +#define GPIO_FUNC87_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x028c) +/* GPIO_SIG87_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG87_IN_SEL (BIT(7)) +#define GPIO_SIG87_IN_SEL_M (BIT(7)) +#define GPIO_SIG87_IN_SEL_V 0x1 +#define GPIO_SIG87_IN_SEL_S 7 +/* GPIO_FUNC87_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC87_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC87_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC87_IN_INV_SEL_V 0x1 +#define GPIO_FUNC87_IN_INV_SEL_S 6 +/* GPIO_FUNC87_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC87_IN_SEL 0x0000003F +#define GPIO_FUNC87_IN_SEL_M ((GPIO_FUNC87_IN_SEL_V)<<(GPIO_FUNC87_IN_SEL_S)) +#define GPIO_FUNC87_IN_SEL_V 0x3F +#define GPIO_FUNC87_IN_SEL_S 0 + +#define GPIO_FUNC88_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0290) +/* GPIO_SIG88_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG88_IN_SEL (BIT(7)) +#define GPIO_SIG88_IN_SEL_M (BIT(7)) +#define GPIO_SIG88_IN_SEL_V 0x1 +#define GPIO_SIG88_IN_SEL_S 7 +/* GPIO_FUNC88_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC88_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC88_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC88_IN_INV_SEL_V 0x1 +#define GPIO_FUNC88_IN_INV_SEL_S 6 +/* GPIO_FUNC88_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC88_IN_SEL 0x0000003F +#define GPIO_FUNC88_IN_SEL_M ((GPIO_FUNC88_IN_SEL_V)<<(GPIO_FUNC88_IN_SEL_S)) +#define GPIO_FUNC88_IN_SEL_V 0x3F +#define GPIO_FUNC88_IN_SEL_S 0 + +#define GPIO_FUNC89_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0294) +/* GPIO_SIG89_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG89_IN_SEL (BIT(7)) +#define GPIO_SIG89_IN_SEL_M (BIT(7)) +#define GPIO_SIG89_IN_SEL_V 0x1 +#define GPIO_SIG89_IN_SEL_S 7 +/* GPIO_FUNC89_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC89_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC89_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC89_IN_INV_SEL_V 0x1 +#define GPIO_FUNC89_IN_INV_SEL_S 6 +/* GPIO_FUNC89_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC89_IN_SEL 0x0000003F +#define GPIO_FUNC89_IN_SEL_M ((GPIO_FUNC89_IN_SEL_V)<<(GPIO_FUNC89_IN_SEL_S)) +#define GPIO_FUNC89_IN_SEL_V 0x3F +#define GPIO_FUNC89_IN_SEL_S 0 + +#define GPIO_FUNC90_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0298) +/* GPIO_SIG90_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG90_IN_SEL (BIT(7)) +#define GPIO_SIG90_IN_SEL_M (BIT(7)) +#define GPIO_SIG90_IN_SEL_V 0x1 +#define GPIO_SIG90_IN_SEL_S 7 +/* GPIO_FUNC90_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC90_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC90_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC90_IN_INV_SEL_V 0x1 +#define GPIO_FUNC90_IN_INV_SEL_S 6 +/* GPIO_FUNC90_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC90_IN_SEL 0x0000003F +#define GPIO_FUNC90_IN_SEL_M ((GPIO_FUNC90_IN_SEL_V)<<(GPIO_FUNC90_IN_SEL_S)) +#define GPIO_FUNC90_IN_SEL_V 0x3F +#define GPIO_FUNC90_IN_SEL_S 0 + +#define GPIO_FUNC91_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x029c) +/* GPIO_SIG91_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG91_IN_SEL (BIT(7)) +#define GPIO_SIG91_IN_SEL_M (BIT(7)) +#define GPIO_SIG91_IN_SEL_V 0x1 +#define GPIO_SIG91_IN_SEL_S 7 +/* GPIO_FUNC91_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC91_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC91_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC91_IN_INV_SEL_V 0x1 +#define GPIO_FUNC91_IN_INV_SEL_S 6 +/* GPIO_FUNC91_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC91_IN_SEL 0x0000003F +#define GPIO_FUNC91_IN_SEL_M ((GPIO_FUNC91_IN_SEL_V)<<(GPIO_FUNC91_IN_SEL_S)) +#define GPIO_FUNC91_IN_SEL_V 0x3F +#define GPIO_FUNC91_IN_SEL_S 0 + +#define GPIO_FUNC92_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02a0) +/* GPIO_SIG92_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG92_IN_SEL (BIT(7)) +#define GPIO_SIG92_IN_SEL_M (BIT(7)) +#define GPIO_SIG92_IN_SEL_V 0x1 +#define GPIO_SIG92_IN_SEL_S 7 +/* GPIO_FUNC92_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC92_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC92_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC92_IN_INV_SEL_V 0x1 +#define GPIO_FUNC92_IN_INV_SEL_S 6 +/* GPIO_FUNC92_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC92_IN_SEL 0x0000003F +#define GPIO_FUNC92_IN_SEL_M ((GPIO_FUNC92_IN_SEL_V)<<(GPIO_FUNC92_IN_SEL_S)) +#define GPIO_FUNC92_IN_SEL_V 0x3F +#define GPIO_FUNC92_IN_SEL_S 0 + +#define GPIO_FUNC93_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02a4) +/* GPIO_SIG93_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG93_IN_SEL (BIT(7)) +#define GPIO_SIG93_IN_SEL_M (BIT(7)) +#define GPIO_SIG93_IN_SEL_V 0x1 +#define GPIO_SIG93_IN_SEL_S 7 +/* GPIO_FUNC93_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC93_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC93_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC93_IN_INV_SEL_V 0x1 +#define GPIO_FUNC93_IN_INV_SEL_S 6 +/* GPIO_FUNC93_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC93_IN_SEL 0x0000003F +#define GPIO_FUNC93_IN_SEL_M ((GPIO_FUNC93_IN_SEL_V)<<(GPIO_FUNC93_IN_SEL_S)) +#define GPIO_FUNC93_IN_SEL_V 0x3F +#define GPIO_FUNC93_IN_SEL_S 0 + +#define GPIO_FUNC94_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02a8) +/* GPIO_SIG94_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG94_IN_SEL (BIT(7)) +#define GPIO_SIG94_IN_SEL_M (BIT(7)) +#define GPIO_SIG94_IN_SEL_V 0x1 +#define GPIO_SIG94_IN_SEL_S 7 +/* GPIO_FUNC94_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC94_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC94_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC94_IN_INV_SEL_V 0x1 +#define GPIO_FUNC94_IN_INV_SEL_S 6 +/* GPIO_FUNC94_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC94_IN_SEL 0x0000003F +#define GPIO_FUNC94_IN_SEL_M ((GPIO_FUNC94_IN_SEL_V)<<(GPIO_FUNC94_IN_SEL_S)) +#define GPIO_FUNC94_IN_SEL_V 0x3F +#define GPIO_FUNC94_IN_SEL_S 0 + +#define GPIO_FUNC95_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02ac) +/* GPIO_SIG95_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG95_IN_SEL (BIT(7)) +#define GPIO_SIG95_IN_SEL_M (BIT(7)) +#define GPIO_SIG95_IN_SEL_V 0x1 +#define GPIO_SIG95_IN_SEL_S 7 +/* GPIO_FUNC95_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC95_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC95_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC95_IN_INV_SEL_V 0x1 +#define GPIO_FUNC95_IN_INV_SEL_S 6 +/* GPIO_FUNC95_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC95_IN_SEL 0x0000003F +#define GPIO_FUNC95_IN_SEL_M ((GPIO_FUNC95_IN_SEL_V)<<(GPIO_FUNC95_IN_SEL_S)) +#define GPIO_FUNC95_IN_SEL_V 0x3F +#define GPIO_FUNC95_IN_SEL_S 0 + +#define GPIO_FUNC96_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02b0) +/* GPIO_SIG96_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG96_IN_SEL (BIT(7)) +#define GPIO_SIG96_IN_SEL_M (BIT(7)) +#define GPIO_SIG96_IN_SEL_V 0x1 +#define GPIO_SIG96_IN_SEL_S 7 +/* GPIO_FUNC96_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC96_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC96_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC96_IN_INV_SEL_V 0x1 +#define GPIO_FUNC96_IN_INV_SEL_S 6 +/* GPIO_FUNC96_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC96_IN_SEL 0x0000003F +#define GPIO_FUNC96_IN_SEL_M ((GPIO_FUNC96_IN_SEL_V)<<(GPIO_FUNC96_IN_SEL_S)) +#define GPIO_FUNC96_IN_SEL_V 0x3F +#define GPIO_FUNC96_IN_SEL_S 0 + +#define GPIO_FUNC97_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02b4) +/* GPIO_SIG97_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG97_IN_SEL (BIT(7)) +#define GPIO_SIG97_IN_SEL_M (BIT(7)) +#define GPIO_SIG97_IN_SEL_V 0x1 +#define GPIO_SIG97_IN_SEL_S 7 +/* GPIO_FUNC97_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC97_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC97_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC97_IN_INV_SEL_V 0x1 +#define GPIO_FUNC97_IN_INV_SEL_S 6 +/* GPIO_FUNC97_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC97_IN_SEL 0x0000003F +#define GPIO_FUNC97_IN_SEL_M ((GPIO_FUNC97_IN_SEL_V)<<(GPIO_FUNC97_IN_SEL_S)) +#define GPIO_FUNC97_IN_SEL_V 0x3F +#define GPIO_FUNC97_IN_SEL_S 0 + +#define GPIO_FUNC98_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02b8) +/* GPIO_SIG98_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG98_IN_SEL (BIT(7)) +#define GPIO_SIG98_IN_SEL_M (BIT(7)) +#define GPIO_SIG98_IN_SEL_V 0x1 +#define GPIO_SIG98_IN_SEL_S 7 +/* GPIO_FUNC98_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC98_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC98_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC98_IN_INV_SEL_V 0x1 +#define GPIO_FUNC98_IN_INV_SEL_S 6 +/* GPIO_FUNC98_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC98_IN_SEL 0x0000003F +#define GPIO_FUNC98_IN_SEL_M ((GPIO_FUNC98_IN_SEL_V)<<(GPIO_FUNC98_IN_SEL_S)) +#define GPIO_FUNC98_IN_SEL_V 0x3F +#define GPIO_FUNC98_IN_SEL_S 0 + +#define GPIO_FUNC99_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02bc) +/* GPIO_SIG99_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG99_IN_SEL (BIT(7)) +#define GPIO_SIG99_IN_SEL_M (BIT(7)) +#define GPIO_SIG99_IN_SEL_V 0x1 +#define GPIO_SIG99_IN_SEL_S 7 +/* GPIO_FUNC99_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC99_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC99_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC99_IN_INV_SEL_V 0x1 +#define GPIO_FUNC99_IN_INV_SEL_S 6 +/* GPIO_FUNC99_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC99_IN_SEL 0x0000003F +#define GPIO_FUNC99_IN_SEL_M ((GPIO_FUNC99_IN_SEL_V)<<(GPIO_FUNC99_IN_SEL_S)) +#define GPIO_FUNC99_IN_SEL_V 0x3F +#define GPIO_FUNC99_IN_SEL_S 0 + +#define GPIO_FUNC100_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02c0) +/* GPIO_SIG100_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG100_IN_SEL (BIT(7)) +#define GPIO_SIG100_IN_SEL_M (BIT(7)) +#define GPIO_SIG100_IN_SEL_V 0x1 +#define GPIO_SIG100_IN_SEL_S 7 +/* GPIO_FUNC100_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC100_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC100_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC100_IN_INV_SEL_V 0x1 +#define GPIO_FUNC100_IN_INV_SEL_S 6 +/* GPIO_FUNC100_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC100_IN_SEL 0x0000003F +#define GPIO_FUNC100_IN_SEL_M ((GPIO_FUNC100_IN_SEL_V)<<(GPIO_FUNC100_IN_SEL_S)) +#define GPIO_FUNC100_IN_SEL_V 0x3F +#define GPIO_FUNC100_IN_SEL_S 0 + +#define GPIO_FUNC101_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02c4) +/* GPIO_SIG101_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG101_IN_SEL (BIT(7)) +#define GPIO_SIG101_IN_SEL_M (BIT(7)) +#define GPIO_SIG101_IN_SEL_V 0x1 +#define GPIO_SIG101_IN_SEL_S 7 +/* GPIO_FUNC101_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC101_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC101_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC101_IN_INV_SEL_V 0x1 +#define GPIO_FUNC101_IN_INV_SEL_S 6 +/* GPIO_FUNC101_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC101_IN_SEL 0x0000003F +#define GPIO_FUNC101_IN_SEL_M ((GPIO_FUNC101_IN_SEL_V)<<(GPIO_FUNC101_IN_SEL_S)) +#define GPIO_FUNC101_IN_SEL_V 0x3F +#define GPIO_FUNC101_IN_SEL_S 0 + +#define GPIO_FUNC102_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02c8) +/* GPIO_SIG102_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG102_IN_SEL (BIT(7)) +#define GPIO_SIG102_IN_SEL_M (BIT(7)) +#define GPIO_SIG102_IN_SEL_V 0x1 +#define GPIO_SIG102_IN_SEL_S 7 +/* GPIO_FUNC102_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC102_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC102_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC102_IN_INV_SEL_V 0x1 +#define GPIO_FUNC102_IN_INV_SEL_S 6 +/* GPIO_FUNC102_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC102_IN_SEL 0x0000003F +#define GPIO_FUNC102_IN_SEL_M ((GPIO_FUNC102_IN_SEL_V)<<(GPIO_FUNC102_IN_SEL_S)) +#define GPIO_FUNC102_IN_SEL_V 0x3F +#define GPIO_FUNC102_IN_SEL_S 0 + +#define GPIO_FUNC103_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02cc) +/* GPIO_SIG103_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG103_IN_SEL (BIT(7)) +#define GPIO_SIG103_IN_SEL_M (BIT(7)) +#define GPIO_SIG103_IN_SEL_V 0x1 +#define GPIO_SIG103_IN_SEL_S 7 +/* GPIO_FUNC103_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC103_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC103_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC103_IN_INV_SEL_V 0x1 +#define GPIO_FUNC103_IN_INV_SEL_S 6 +/* GPIO_FUNC103_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC103_IN_SEL 0x0000003F +#define GPIO_FUNC103_IN_SEL_M ((GPIO_FUNC103_IN_SEL_V)<<(GPIO_FUNC103_IN_SEL_S)) +#define GPIO_FUNC103_IN_SEL_V 0x3F +#define GPIO_FUNC103_IN_SEL_S 0 + +#define GPIO_FUNC104_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02d0) +/* GPIO_SIG104_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG104_IN_SEL (BIT(7)) +#define GPIO_SIG104_IN_SEL_M (BIT(7)) +#define GPIO_SIG104_IN_SEL_V 0x1 +#define GPIO_SIG104_IN_SEL_S 7 +/* GPIO_FUNC104_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC104_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC104_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC104_IN_INV_SEL_V 0x1 +#define GPIO_FUNC104_IN_INV_SEL_S 6 +/* GPIO_FUNC104_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC104_IN_SEL 0x0000003F +#define GPIO_FUNC104_IN_SEL_M ((GPIO_FUNC104_IN_SEL_V)<<(GPIO_FUNC104_IN_SEL_S)) +#define GPIO_FUNC104_IN_SEL_V 0x3F +#define GPIO_FUNC104_IN_SEL_S 0 + +#define GPIO_FUNC105_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02d4) +/* GPIO_SIG105_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG105_IN_SEL (BIT(7)) +#define GPIO_SIG105_IN_SEL_M (BIT(7)) +#define GPIO_SIG105_IN_SEL_V 0x1 +#define GPIO_SIG105_IN_SEL_S 7 +/* GPIO_FUNC105_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC105_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC105_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC105_IN_INV_SEL_V 0x1 +#define GPIO_FUNC105_IN_INV_SEL_S 6 +/* GPIO_FUNC105_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC105_IN_SEL 0x0000003F +#define GPIO_FUNC105_IN_SEL_M ((GPIO_FUNC105_IN_SEL_V)<<(GPIO_FUNC105_IN_SEL_S)) +#define GPIO_FUNC105_IN_SEL_V 0x3F +#define GPIO_FUNC105_IN_SEL_S 0 + +#define GPIO_FUNC106_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02d8) +/* GPIO_SIG106_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG106_IN_SEL (BIT(7)) +#define GPIO_SIG106_IN_SEL_M (BIT(7)) +#define GPIO_SIG106_IN_SEL_V 0x1 +#define GPIO_SIG106_IN_SEL_S 7 +/* GPIO_FUNC106_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC106_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC106_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC106_IN_INV_SEL_V 0x1 +#define GPIO_FUNC106_IN_INV_SEL_S 6 +/* GPIO_FUNC106_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC106_IN_SEL 0x0000003F +#define GPIO_FUNC106_IN_SEL_M ((GPIO_FUNC106_IN_SEL_V)<<(GPIO_FUNC106_IN_SEL_S)) +#define GPIO_FUNC106_IN_SEL_V 0x3F +#define GPIO_FUNC106_IN_SEL_S 0 + +#define GPIO_FUNC107_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02dc) +/* GPIO_SIG107_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG107_IN_SEL (BIT(7)) +#define GPIO_SIG107_IN_SEL_M (BIT(7)) +#define GPIO_SIG107_IN_SEL_V 0x1 +#define GPIO_SIG107_IN_SEL_S 7 +/* GPIO_FUNC107_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC107_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC107_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC107_IN_INV_SEL_V 0x1 +#define GPIO_FUNC107_IN_INV_SEL_S 6 +/* GPIO_FUNC107_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC107_IN_SEL 0x0000003F +#define GPIO_FUNC107_IN_SEL_M ((GPIO_FUNC107_IN_SEL_V)<<(GPIO_FUNC107_IN_SEL_S)) +#define GPIO_FUNC107_IN_SEL_V 0x3F +#define GPIO_FUNC107_IN_SEL_S 0 + +#define GPIO_FUNC108_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02e0) +/* GPIO_SIG108_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG108_IN_SEL (BIT(7)) +#define GPIO_SIG108_IN_SEL_M (BIT(7)) +#define GPIO_SIG108_IN_SEL_V 0x1 +#define GPIO_SIG108_IN_SEL_S 7 +/* GPIO_FUNC108_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC108_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC108_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC108_IN_INV_SEL_V 0x1 +#define GPIO_FUNC108_IN_INV_SEL_S 6 +/* GPIO_FUNC108_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC108_IN_SEL 0x0000003F +#define GPIO_FUNC108_IN_SEL_M ((GPIO_FUNC108_IN_SEL_V)<<(GPIO_FUNC108_IN_SEL_S)) +#define GPIO_FUNC108_IN_SEL_V 0x3F +#define GPIO_FUNC108_IN_SEL_S 0 + +#define GPIO_FUNC109_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02e4) +/* GPIO_SIG109_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG109_IN_SEL (BIT(7)) +#define GPIO_SIG109_IN_SEL_M (BIT(7)) +#define GPIO_SIG109_IN_SEL_V 0x1 +#define GPIO_SIG109_IN_SEL_S 7 +/* GPIO_FUNC109_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC109_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC109_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC109_IN_INV_SEL_V 0x1 +#define GPIO_FUNC109_IN_INV_SEL_S 6 +/* GPIO_FUNC109_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC109_IN_SEL 0x0000003F +#define GPIO_FUNC109_IN_SEL_M ((GPIO_FUNC109_IN_SEL_V)<<(GPIO_FUNC109_IN_SEL_S)) +#define GPIO_FUNC109_IN_SEL_V 0x3F +#define GPIO_FUNC109_IN_SEL_S 0 + +#define GPIO_FUNC110_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02e8) +/* GPIO_SIG110_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG110_IN_SEL (BIT(7)) +#define GPIO_SIG110_IN_SEL_M (BIT(7)) +#define GPIO_SIG110_IN_SEL_V 0x1 +#define GPIO_SIG110_IN_SEL_S 7 +/* GPIO_FUNC110_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC110_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC110_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC110_IN_INV_SEL_V 0x1 +#define GPIO_FUNC110_IN_INV_SEL_S 6 +/* GPIO_FUNC110_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC110_IN_SEL 0x0000003F +#define GPIO_FUNC110_IN_SEL_M ((GPIO_FUNC110_IN_SEL_V)<<(GPIO_FUNC110_IN_SEL_S)) +#define GPIO_FUNC110_IN_SEL_V 0x3F +#define GPIO_FUNC110_IN_SEL_S 0 + +#define GPIO_FUNC111_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02ec) +/* GPIO_SIG111_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG111_IN_SEL (BIT(7)) +#define GPIO_SIG111_IN_SEL_M (BIT(7)) +#define GPIO_SIG111_IN_SEL_V 0x1 +#define GPIO_SIG111_IN_SEL_S 7 +/* GPIO_FUNC111_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC111_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC111_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC111_IN_INV_SEL_V 0x1 +#define GPIO_FUNC111_IN_INV_SEL_S 6 +/* GPIO_FUNC111_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC111_IN_SEL 0x0000003F +#define GPIO_FUNC111_IN_SEL_M ((GPIO_FUNC111_IN_SEL_V)<<(GPIO_FUNC111_IN_SEL_S)) +#define GPIO_FUNC111_IN_SEL_V 0x3F +#define GPIO_FUNC111_IN_SEL_S 0 + +#define GPIO_FUNC112_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02f0) +/* GPIO_SIG112_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG112_IN_SEL (BIT(7)) +#define GPIO_SIG112_IN_SEL_M (BIT(7)) +#define GPIO_SIG112_IN_SEL_V 0x1 +#define GPIO_SIG112_IN_SEL_S 7 +/* GPIO_FUNC112_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC112_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC112_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC112_IN_INV_SEL_V 0x1 +#define GPIO_FUNC112_IN_INV_SEL_S 6 +/* GPIO_FUNC112_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC112_IN_SEL 0x0000003F +#define GPIO_FUNC112_IN_SEL_M ((GPIO_FUNC112_IN_SEL_V)<<(GPIO_FUNC112_IN_SEL_S)) +#define GPIO_FUNC112_IN_SEL_V 0x3F +#define GPIO_FUNC112_IN_SEL_S 0 + +#define GPIO_FUNC113_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02f4) +/* GPIO_SIG113_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG113_IN_SEL (BIT(7)) +#define GPIO_SIG113_IN_SEL_M (BIT(7)) +#define GPIO_SIG113_IN_SEL_V 0x1 +#define GPIO_SIG113_IN_SEL_S 7 +/* GPIO_FUNC113_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC113_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC113_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC113_IN_INV_SEL_V 0x1 +#define GPIO_FUNC113_IN_INV_SEL_S 6 +/* GPIO_FUNC113_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC113_IN_SEL 0x0000003F +#define GPIO_FUNC113_IN_SEL_M ((GPIO_FUNC113_IN_SEL_V)<<(GPIO_FUNC113_IN_SEL_S)) +#define GPIO_FUNC113_IN_SEL_V 0x3F +#define GPIO_FUNC113_IN_SEL_S 0 + +#define GPIO_FUNC114_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02f8) +/* GPIO_SIG114_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG114_IN_SEL (BIT(7)) +#define GPIO_SIG114_IN_SEL_M (BIT(7)) +#define GPIO_SIG114_IN_SEL_V 0x1 +#define GPIO_SIG114_IN_SEL_S 7 +/* GPIO_FUNC114_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC114_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC114_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC114_IN_INV_SEL_V 0x1 +#define GPIO_FUNC114_IN_INV_SEL_S 6 +/* GPIO_FUNC114_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC114_IN_SEL 0x0000003F +#define GPIO_FUNC114_IN_SEL_M ((GPIO_FUNC114_IN_SEL_V)<<(GPIO_FUNC114_IN_SEL_S)) +#define GPIO_FUNC114_IN_SEL_V 0x3F +#define GPIO_FUNC114_IN_SEL_S 0 + +#define GPIO_FUNC115_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x02fc) +/* GPIO_SIG115_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG115_IN_SEL (BIT(7)) +#define GPIO_SIG115_IN_SEL_M (BIT(7)) +#define GPIO_SIG115_IN_SEL_V 0x1 +#define GPIO_SIG115_IN_SEL_S 7 +/* GPIO_FUNC115_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC115_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC115_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC115_IN_INV_SEL_V 0x1 +#define GPIO_FUNC115_IN_INV_SEL_S 6 +/* GPIO_FUNC115_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC115_IN_SEL 0x0000003F +#define GPIO_FUNC115_IN_SEL_M ((GPIO_FUNC115_IN_SEL_V)<<(GPIO_FUNC115_IN_SEL_S)) +#define GPIO_FUNC115_IN_SEL_V 0x3F +#define GPIO_FUNC115_IN_SEL_S 0 + +#define GPIO_FUNC116_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0300) +/* GPIO_SIG116_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG116_IN_SEL (BIT(7)) +#define GPIO_SIG116_IN_SEL_M (BIT(7)) +#define GPIO_SIG116_IN_SEL_V 0x1 +#define GPIO_SIG116_IN_SEL_S 7 +/* GPIO_FUNC116_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC116_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC116_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC116_IN_INV_SEL_V 0x1 +#define GPIO_FUNC116_IN_INV_SEL_S 6 +/* GPIO_FUNC116_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC116_IN_SEL 0x0000003F +#define GPIO_FUNC116_IN_SEL_M ((GPIO_FUNC116_IN_SEL_V)<<(GPIO_FUNC116_IN_SEL_S)) +#define GPIO_FUNC116_IN_SEL_V 0x3F +#define GPIO_FUNC116_IN_SEL_S 0 + +#define GPIO_FUNC117_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0304) +/* GPIO_SIG117_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG117_IN_SEL (BIT(7)) +#define GPIO_SIG117_IN_SEL_M (BIT(7)) +#define GPIO_SIG117_IN_SEL_V 0x1 +#define GPIO_SIG117_IN_SEL_S 7 +/* GPIO_FUNC117_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC117_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC117_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC117_IN_INV_SEL_V 0x1 +#define GPIO_FUNC117_IN_INV_SEL_S 6 +/* GPIO_FUNC117_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC117_IN_SEL 0x0000003F +#define GPIO_FUNC117_IN_SEL_M ((GPIO_FUNC117_IN_SEL_V)<<(GPIO_FUNC117_IN_SEL_S)) +#define GPIO_FUNC117_IN_SEL_V 0x3F +#define GPIO_FUNC117_IN_SEL_S 0 + +#define GPIO_FUNC118_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0308) +/* GPIO_SIG118_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG118_IN_SEL (BIT(7)) +#define GPIO_SIG118_IN_SEL_M (BIT(7)) +#define GPIO_SIG118_IN_SEL_V 0x1 +#define GPIO_SIG118_IN_SEL_S 7 +/* GPIO_FUNC118_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC118_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC118_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC118_IN_INV_SEL_V 0x1 +#define GPIO_FUNC118_IN_INV_SEL_S 6 +/* GPIO_FUNC118_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC118_IN_SEL 0x0000003F +#define GPIO_FUNC118_IN_SEL_M ((GPIO_FUNC118_IN_SEL_V)<<(GPIO_FUNC118_IN_SEL_S)) +#define GPIO_FUNC118_IN_SEL_V 0x3F +#define GPIO_FUNC118_IN_SEL_S 0 + +#define GPIO_FUNC119_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x030c) +/* GPIO_SIG119_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG119_IN_SEL (BIT(7)) +#define GPIO_SIG119_IN_SEL_M (BIT(7)) +#define GPIO_SIG119_IN_SEL_V 0x1 +#define GPIO_SIG119_IN_SEL_S 7 +/* GPIO_FUNC119_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC119_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC119_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC119_IN_INV_SEL_V 0x1 +#define GPIO_FUNC119_IN_INV_SEL_S 6 +/* GPIO_FUNC119_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC119_IN_SEL 0x0000003F +#define GPIO_FUNC119_IN_SEL_M ((GPIO_FUNC119_IN_SEL_V)<<(GPIO_FUNC119_IN_SEL_S)) +#define GPIO_FUNC119_IN_SEL_V 0x3F +#define GPIO_FUNC119_IN_SEL_S 0 + +#define GPIO_FUNC120_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0310) +/* GPIO_SIG120_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG120_IN_SEL (BIT(7)) +#define GPIO_SIG120_IN_SEL_M (BIT(7)) +#define GPIO_SIG120_IN_SEL_V 0x1 +#define GPIO_SIG120_IN_SEL_S 7 +/* GPIO_FUNC120_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC120_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC120_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC120_IN_INV_SEL_V 0x1 +#define GPIO_FUNC120_IN_INV_SEL_S 6 +/* GPIO_FUNC120_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC120_IN_SEL 0x0000003F +#define GPIO_FUNC120_IN_SEL_M ((GPIO_FUNC120_IN_SEL_V)<<(GPIO_FUNC120_IN_SEL_S)) +#define GPIO_FUNC120_IN_SEL_V 0x3F +#define GPIO_FUNC120_IN_SEL_S 0 + +#define GPIO_FUNC121_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0314) +/* GPIO_SIG121_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG121_IN_SEL (BIT(7)) +#define GPIO_SIG121_IN_SEL_M (BIT(7)) +#define GPIO_SIG121_IN_SEL_V 0x1 +#define GPIO_SIG121_IN_SEL_S 7 +/* GPIO_FUNC121_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC121_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC121_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC121_IN_INV_SEL_V 0x1 +#define GPIO_FUNC121_IN_INV_SEL_S 6 +/* GPIO_FUNC121_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC121_IN_SEL 0x0000003F +#define GPIO_FUNC121_IN_SEL_M ((GPIO_FUNC121_IN_SEL_V)<<(GPIO_FUNC121_IN_SEL_S)) +#define GPIO_FUNC121_IN_SEL_V 0x3F +#define GPIO_FUNC121_IN_SEL_S 0 + +#define GPIO_FUNC122_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0318) +/* GPIO_SIG122_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG122_IN_SEL (BIT(7)) +#define GPIO_SIG122_IN_SEL_M (BIT(7)) +#define GPIO_SIG122_IN_SEL_V 0x1 +#define GPIO_SIG122_IN_SEL_S 7 +/* GPIO_FUNC122_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC122_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC122_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC122_IN_INV_SEL_V 0x1 +#define GPIO_FUNC122_IN_INV_SEL_S 6 +/* GPIO_FUNC122_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC122_IN_SEL 0x0000003F +#define GPIO_FUNC122_IN_SEL_M ((GPIO_FUNC122_IN_SEL_V)<<(GPIO_FUNC122_IN_SEL_S)) +#define GPIO_FUNC122_IN_SEL_V 0x3F +#define GPIO_FUNC122_IN_SEL_S 0 + +#define GPIO_FUNC123_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x031c) +/* GPIO_SIG123_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG123_IN_SEL (BIT(7)) +#define GPIO_SIG123_IN_SEL_M (BIT(7)) +#define GPIO_SIG123_IN_SEL_V 0x1 +#define GPIO_SIG123_IN_SEL_S 7 +/* GPIO_FUNC123_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC123_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC123_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC123_IN_INV_SEL_V 0x1 +#define GPIO_FUNC123_IN_INV_SEL_S 6 +/* GPIO_FUNC123_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC123_IN_SEL 0x0000003F +#define GPIO_FUNC123_IN_SEL_M ((GPIO_FUNC123_IN_SEL_V)<<(GPIO_FUNC123_IN_SEL_S)) +#define GPIO_FUNC123_IN_SEL_V 0x3F +#define GPIO_FUNC123_IN_SEL_S 0 + +#define GPIO_FUNC124_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0320) +/* GPIO_SIG124_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG124_IN_SEL (BIT(7)) +#define GPIO_SIG124_IN_SEL_M (BIT(7)) +#define GPIO_SIG124_IN_SEL_V 0x1 +#define GPIO_SIG124_IN_SEL_S 7 +/* GPIO_FUNC124_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC124_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC124_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC124_IN_INV_SEL_V 0x1 +#define GPIO_FUNC124_IN_INV_SEL_S 6 +/* GPIO_FUNC124_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC124_IN_SEL 0x0000003F +#define GPIO_FUNC124_IN_SEL_M ((GPIO_FUNC124_IN_SEL_V)<<(GPIO_FUNC124_IN_SEL_S)) +#define GPIO_FUNC124_IN_SEL_V 0x3F +#define GPIO_FUNC124_IN_SEL_S 0 + +#define GPIO_FUNC125_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0324) +/* GPIO_SIG125_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG125_IN_SEL (BIT(7)) +#define GPIO_SIG125_IN_SEL_M (BIT(7)) +#define GPIO_SIG125_IN_SEL_V 0x1 +#define GPIO_SIG125_IN_SEL_S 7 +/* GPIO_FUNC125_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC125_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC125_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC125_IN_INV_SEL_V 0x1 +#define GPIO_FUNC125_IN_INV_SEL_S 6 +/* GPIO_FUNC125_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC125_IN_SEL 0x0000003F +#define GPIO_FUNC125_IN_SEL_M ((GPIO_FUNC125_IN_SEL_V)<<(GPIO_FUNC125_IN_SEL_S)) +#define GPIO_FUNC125_IN_SEL_V 0x3F +#define GPIO_FUNC125_IN_SEL_S 0 + +#define GPIO_FUNC126_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0328) +/* GPIO_SIG126_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG126_IN_SEL (BIT(7)) +#define GPIO_SIG126_IN_SEL_M (BIT(7)) +#define GPIO_SIG126_IN_SEL_V 0x1 +#define GPIO_SIG126_IN_SEL_S 7 +/* GPIO_FUNC126_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC126_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC126_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC126_IN_INV_SEL_V 0x1 +#define GPIO_FUNC126_IN_INV_SEL_S 6 +/* GPIO_FUNC126_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC126_IN_SEL 0x0000003F +#define GPIO_FUNC126_IN_SEL_M ((GPIO_FUNC126_IN_SEL_V)<<(GPIO_FUNC126_IN_SEL_S)) +#define GPIO_FUNC126_IN_SEL_V 0x3F +#define GPIO_FUNC126_IN_SEL_S 0 + +#define GPIO_FUNC127_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x032c) +/* GPIO_SIG127_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG127_IN_SEL (BIT(7)) +#define GPIO_SIG127_IN_SEL_M (BIT(7)) +#define GPIO_SIG127_IN_SEL_V 0x1 +#define GPIO_SIG127_IN_SEL_S 7 +/* GPIO_FUNC127_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC127_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC127_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC127_IN_INV_SEL_V 0x1 +#define GPIO_FUNC127_IN_INV_SEL_S 6 +/* GPIO_FUNC127_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC127_IN_SEL 0x0000003F +#define GPIO_FUNC127_IN_SEL_M ((GPIO_FUNC127_IN_SEL_V)<<(GPIO_FUNC127_IN_SEL_S)) +#define GPIO_FUNC127_IN_SEL_V 0x3F +#define GPIO_FUNC127_IN_SEL_S 0 + +#define GPIO_FUNC128_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0330) +/* GPIO_SIG128_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG128_IN_SEL (BIT(7)) +#define GPIO_SIG128_IN_SEL_M (BIT(7)) +#define GPIO_SIG128_IN_SEL_V 0x1 +#define GPIO_SIG128_IN_SEL_S 7 +/* GPIO_FUNC128_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC128_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC128_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC128_IN_INV_SEL_V 0x1 +#define GPIO_FUNC128_IN_INV_SEL_S 6 +/* GPIO_FUNC128_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC128_IN_SEL 0x0000003F +#define GPIO_FUNC128_IN_SEL_M ((GPIO_FUNC128_IN_SEL_V)<<(GPIO_FUNC128_IN_SEL_S)) +#define GPIO_FUNC128_IN_SEL_V 0x3F +#define GPIO_FUNC128_IN_SEL_S 0 + +#define GPIO_FUNC129_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0334) +/* GPIO_SIG129_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG129_IN_SEL (BIT(7)) +#define GPIO_SIG129_IN_SEL_M (BIT(7)) +#define GPIO_SIG129_IN_SEL_V 0x1 +#define GPIO_SIG129_IN_SEL_S 7 +/* GPIO_FUNC129_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC129_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC129_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC129_IN_INV_SEL_V 0x1 +#define GPIO_FUNC129_IN_INV_SEL_S 6 +/* GPIO_FUNC129_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC129_IN_SEL 0x0000003F +#define GPIO_FUNC129_IN_SEL_M ((GPIO_FUNC129_IN_SEL_V)<<(GPIO_FUNC129_IN_SEL_S)) +#define GPIO_FUNC129_IN_SEL_V 0x3F +#define GPIO_FUNC129_IN_SEL_S 0 + +#define GPIO_FUNC130_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0338) +/* GPIO_SIG130_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG130_IN_SEL (BIT(7)) +#define GPIO_SIG130_IN_SEL_M (BIT(7)) +#define GPIO_SIG130_IN_SEL_V 0x1 +#define GPIO_SIG130_IN_SEL_S 7 +/* GPIO_FUNC130_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC130_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC130_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC130_IN_INV_SEL_V 0x1 +#define GPIO_FUNC130_IN_INV_SEL_S 6 +/* GPIO_FUNC130_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC130_IN_SEL 0x0000003F +#define GPIO_FUNC130_IN_SEL_M ((GPIO_FUNC130_IN_SEL_V)<<(GPIO_FUNC130_IN_SEL_S)) +#define GPIO_FUNC130_IN_SEL_V 0x3F +#define GPIO_FUNC130_IN_SEL_S 0 + +#define GPIO_FUNC131_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x033c) +/* GPIO_SIG131_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG131_IN_SEL (BIT(7)) +#define GPIO_SIG131_IN_SEL_M (BIT(7)) +#define GPIO_SIG131_IN_SEL_V 0x1 +#define GPIO_SIG131_IN_SEL_S 7 +/* GPIO_FUNC131_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC131_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC131_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC131_IN_INV_SEL_V 0x1 +#define GPIO_FUNC131_IN_INV_SEL_S 6 +/* GPIO_FUNC131_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC131_IN_SEL 0x0000003F +#define GPIO_FUNC131_IN_SEL_M ((GPIO_FUNC131_IN_SEL_V)<<(GPIO_FUNC131_IN_SEL_S)) +#define GPIO_FUNC131_IN_SEL_V 0x3F +#define GPIO_FUNC131_IN_SEL_S 0 + +#define GPIO_FUNC132_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0340) +/* GPIO_SIG132_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG132_IN_SEL (BIT(7)) +#define GPIO_SIG132_IN_SEL_M (BIT(7)) +#define GPIO_SIG132_IN_SEL_V 0x1 +#define GPIO_SIG132_IN_SEL_S 7 +/* GPIO_FUNC132_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC132_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC132_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC132_IN_INV_SEL_V 0x1 +#define GPIO_FUNC132_IN_INV_SEL_S 6 +/* GPIO_FUNC132_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC132_IN_SEL 0x0000003F +#define GPIO_FUNC132_IN_SEL_M ((GPIO_FUNC132_IN_SEL_V)<<(GPIO_FUNC132_IN_SEL_S)) +#define GPIO_FUNC132_IN_SEL_V 0x3F +#define GPIO_FUNC132_IN_SEL_S 0 + +#define GPIO_FUNC133_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0344) +/* GPIO_SIG133_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG133_IN_SEL (BIT(7)) +#define GPIO_SIG133_IN_SEL_M (BIT(7)) +#define GPIO_SIG133_IN_SEL_V 0x1 +#define GPIO_SIG133_IN_SEL_S 7 +/* GPIO_FUNC133_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC133_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC133_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC133_IN_INV_SEL_V 0x1 +#define GPIO_FUNC133_IN_INV_SEL_S 6 +/* GPIO_FUNC133_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC133_IN_SEL 0x0000003F +#define GPIO_FUNC133_IN_SEL_M ((GPIO_FUNC133_IN_SEL_V)<<(GPIO_FUNC133_IN_SEL_S)) +#define GPIO_FUNC133_IN_SEL_V 0x3F +#define GPIO_FUNC133_IN_SEL_S 0 + +#define GPIO_FUNC134_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0348) +/* GPIO_SIG134_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG134_IN_SEL (BIT(7)) +#define GPIO_SIG134_IN_SEL_M (BIT(7)) +#define GPIO_SIG134_IN_SEL_V 0x1 +#define GPIO_SIG134_IN_SEL_S 7 +/* GPIO_FUNC134_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC134_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC134_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC134_IN_INV_SEL_V 0x1 +#define GPIO_FUNC134_IN_INV_SEL_S 6 +/* GPIO_FUNC134_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC134_IN_SEL 0x0000003F +#define GPIO_FUNC134_IN_SEL_M ((GPIO_FUNC134_IN_SEL_V)<<(GPIO_FUNC134_IN_SEL_S)) +#define GPIO_FUNC134_IN_SEL_V 0x3F +#define GPIO_FUNC134_IN_SEL_S 0 + +#define GPIO_FUNC135_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x034c) +/* GPIO_SIG135_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG135_IN_SEL (BIT(7)) +#define GPIO_SIG135_IN_SEL_M (BIT(7)) +#define GPIO_SIG135_IN_SEL_V 0x1 +#define GPIO_SIG135_IN_SEL_S 7 +/* GPIO_FUNC135_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC135_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC135_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC135_IN_INV_SEL_V 0x1 +#define GPIO_FUNC135_IN_INV_SEL_S 6 +/* GPIO_FUNC135_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC135_IN_SEL 0x0000003F +#define GPIO_FUNC135_IN_SEL_M ((GPIO_FUNC135_IN_SEL_V)<<(GPIO_FUNC135_IN_SEL_S)) +#define GPIO_FUNC135_IN_SEL_V 0x3F +#define GPIO_FUNC135_IN_SEL_S 0 + +#define GPIO_FUNC136_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0350) +/* GPIO_SIG136_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG136_IN_SEL (BIT(7)) +#define GPIO_SIG136_IN_SEL_M (BIT(7)) +#define GPIO_SIG136_IN_SEL_V 0x1 +#define GPIO_SIG136_IN_SEL_S 7 +/* GPIO_FUNC136_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC136_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC136_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC136_IN_INV_SEL_V 0x1 +#define GPIO_FUNC136_IN_INV_SEL_S 6 +/* GPIO_FUNC136_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC136_IN_SEL 0x0000003F +#define GPIO_FUNC136_IN_SEL_M ((GPIO_FUNC136_IN_SEL_V)<<(GPIO_FUNC136_IN_SEL_S)) +#define GPIO_FUNC136_IN_SEL_V 0x3F +#define GPIO_FUNC136_IN_SEL_S 0 + +#define GPIO_FUNC137_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0354) +/* GPIO_SIG137_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG137_IN_SEL (BIT(7)) +#define GPIO_SIG137_IN_SEL_M (BIT(7)) +#define GPIO_SIG137_IN_SEL_V 0x1 +#define GPIO_SIG137_IN_SEL_S 7 +/* GPIO_FUNC137_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC137_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC137_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC137_IN_INV_SEL_V 0x1 +#define GPIO_FUNC137_IN_INV_SEL_S 6 +/* GPIO_FUNC137_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC137_IN_SEL 0x0000003F +#define GPIO_FUNC137_IN_SEL_M ((GPIO_FUNC137_IN_SEL_V)<<(GPIO_FUNC137_IN_SEL_S)) +#define GPIO_FUNC137_IN_SEL_V 0x3F +#define GPIO_FUNC137_IN_SEL_S 0 + +#define GPIO_FUNC138_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0358) +/* GPIO_SIG138_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG138_IN_SEL (BIT(7)) +#define GPIO_SIG138_IN_SEL_M (BIT(7)) +#define GPIO_SIG138_IN_SEL_V 0x1 +#define GPIO_SIG138_IN_SEL_S 7 +/* GPIO_FUNC138_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC138_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC138_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC138_IN_INV_SEL_V 0x1 +#define GPIO_FUNC138_IN_INV_SEL_S 6 +/* GPIO_FUNC138_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC138_IN_SEL 0x0000003F +#define GPIO_FUNC138_IN_SEL_M ((GPIO_FUNC138_IN_SEL_V)<<(GPIO_FUNC138_IN_SEL_S)) +#define GPIO_FUNC138_IN_SEL_V 0x3F +#define GPIO_FUNC138_IN_SEL_S 0 + +#define GPIO_FUNC139_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x035c) +/* GPIO_SIG139_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG139_IN_SEL (BIT(7)) +#define GPIO_SIG139_IN_SEL_M (BIT(7)) +#define GPIO_SIG139_IN_SEL_V 0x1 +#define GPIO_SIG139_IN_SEL_S 7 +/* GPIO_FUNC139_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC139_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC139_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC139_IN_INV_SEL_V 0x1 +#define GPIO_FUNC139_IN_INV_SEL_S 6 +/* GPIO_FUNC139_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC139_IN_SEL 0x0000003F +#define GPIO_FUNC139_IN_SEL_M ((GPIO_FUNC139_IN_SEL_V)<<(GPIO_FUNC139_IN_SEL_S)) +#define GPIO_FUNC139_IN_SEL_V 0x3F +#define GPIO_FUNC139_IN_SEL_S 0 + +#define GPIO_FUNC140_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0360) +/* GPIO_SIG140_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG140_IN_SEL (BIT(7)) +#define GPIO_SIG140_IN_SEL_M (BIT(7)) +#define GPIO_SIG140_IN_SEL_V 0x1 +#define GPIO_SIG140_IN_SEL_S 7 +/* GPIO_FUNC140_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC140_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC140_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC140_IN_INV_SEL_V 0x1 +#define GPIO_FUNC140_IN_INV_SEL_S 6 +/* GPIO_FUNC140_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC140_IN_SEL 0x0000003F +#define GPIO_FUNC140_IN_SEL_M ((GPIO_FUNC140_IN_SEL_V)<<(GPIO_FUNC140_IN_SEL_S)) +#define GPIO_FUNC140_IN_SEL_V 0x3F +#define GPIO_FUNC140_IN_SEL_S 0 + +#define GPIO_FUNC141_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0364) +/* GPIO_SIG141_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG141_IN_SEL (BIT(7)) +#define GPIO_SIG141_IN_SEL_M (BIT(7)) +#define GPIO_SIG141_IN_SEL_V 0x1 +#define GPIO_SIG141_IN_SEL_S 7 +/* GPIO_FUNC141_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC141_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC141_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC141_IN_INV_SEL_V 0x1 +#define GPIO_FUNC141_IN_INV_SEL_S 6 +/* GPIO_FUNC141_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC141_IN_SEL 0x0000003F +#define GPIO_FUNC141_IN_SEL_M ((GPIO_FUNC141_IN_SEL_V)<<(GPIO_FUNC141_IN_SEL_S)) +#define GPIO_FUNC141_IN_SEL_V 0x3F +#define GPIO_FUNC141_IN_SEL_S 0 + +#define GPIO_FUNC142_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0368) +/* GPIO_SIG142_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG142_IN_SEL (BIT(7)) +#define GPIO_SIG142_IN_SEL_M (BIT(7)) +#define GPIO_SIG142_IN_SEL_V 0x1 +#define GPIO_SIG142_IN_SEL_S 7 +/* GPIO_FUNC142_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC142_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC142_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC142_IN_INV_SEL_V 0x1 +#define GPIO_FUNC142_IN_INV_SEL_S 6 +/* GPIO_FUNC142_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC142_IN_SEL 0x0000003F +#define GPIO_FUNC142_IN_SEL_M ((GPIO_FUNC142_IN_SEL_V)<<(GPIO_FUNC142_IN_SEL_S)) +#define GPIO_FUNC142_IN_SEL_V 0x3F +#define GPIO_FUNC142_IN_SEL_S 0 + +#define GPIO_FUNC143_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x036c) +/* GPIO_SIG143_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG143_IN_SEL (BIT(7)) +#define GPIO_SIG143_IN_SEL_M (BIT(7)) +#define GPIO_SIG143_IN_SEL_V 0x1 +#define GPIO_SIG143_IN_SEL_S 7 +/* GPIO_FUNC143_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC143_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC143_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC143_IN_INV_SEL_V 0x1 +#define GPIO_FUNC143_IN_INV_SEL_S 6 +/* GPIO_FUNC143_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC143_IN_SEL 0x0000003F +#define GPIO_FUNC143_IN_SEL_M ((GPIO_FUNC143_IN_SEL_V)<<(GPIO_FUNC143_IN_SEL_S)) +#define GPIO_FUNC143_IN_SEL_V 0x3F +#define GPIO_FUNC143_IN_SEL_S 0 + +#define GPIO_FUNC144_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0370) +/* GPIO_SIG144_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG144_IN_SEL (BIT(7)) +#define GPIO_SIG144_IN_SEL_M (BIT(7)) +#define GPIO_SIG144_IN_SEL_V 0x1 +#define GPIO_SIG144_IN_SEL_S 7 +/* GPIO_FUNC144_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC144_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC144_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC144_IN_INV_SEL_V 0x1 +#define GPIO_FUNC144_IN_INV_SEL_S 6 +/* GPIO_FUNC144_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC144_IN_SEL 0x0000003F +#define GPIO_FUNC144_IN_SEL_M ((GPIO_FUNC144_IN_SEL_V)<<(GPIO_FUNC144_IN_SEL_S)) +#define GPIO_FUNC144_IN_SEL_V 0x3F +#define GPIO_FUNC144_IN_SEL_S 0 + +#define GPIO_FUNC145_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0374) +/* GPIO_SIG145_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG145_IN_SEL (BIT(7)) +#define GPIO_SIG145_IN_SEL_M (BIT(7)) +#define GPIO_SIG145_IN_SEL_V 0x1 +#define GPIO_SIG145_IN_SEL_S 7 +/* GPIO_FUNC145_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC145_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC145_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC145_IN_INV_SEL_V 0x1 +#define GPIO_FUNC145_IN_INV_SEL_S 6 +/* GPIO_FUNC145_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC145_IN_SEL 0x0000003F +#define GPIO_FUNC145_IN_SEL_M ((GPIO_FUNC145_IN_SEL_V)<<(GPIO_FUNC145_IN_SEL_S)) +#define GPIO_FUNC145_IN_SEL_V 0x3F +#define GPIO_FUNC145_IN_SEL_S 0 + +#define GPIO_FUNC146_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0378) +/* GPIO_SIG146_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG146_IN_SEL (BIT(7)) +#define GPIO_SIG146_IN_SEL_M (BIT(7)) +#define GPIO_SIG146_IN_SEL_V 0x1 +#define GPIO_SIG146_IN_SEL_S 7 +/* GPIO_FUNC146_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC146_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC146_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC146_IN_INV_SEL_V 0x1 +#define GPIO_FUNC146_IN_INV_SEL_S 6 +/* GPIO_FUNC146_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC146_IN_SEL 0x0000003F +#define GPIO_FUNC146_IN_SEL_M ((GPIO_FUNC146_IN_SEL_V)<<(GPIO_FUNC146_IN_SEL_S)) +#define GPIO_FUNC146_IN_SEL_V 0x3F +#define GPIO_FUNC146_IN_SEL_S 0 + +#define GPIO_FUNC147_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x037c) +/* GPIO_SIG147_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG147_IN_SEL (BIT(7)) +#define GPIO_SIG147_IN_SEL_M (BIT(7)) +#define GPIO_SIG147_IN_SEL_V 0x1 +#define GPIO_SIG147_IN_SEL_S 7 +/* GPIO_FUNC147_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC147_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC147_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC147_IN_INV_SEL_V 0x1 +#define GPIO_FUNC147_IN_INV_SEL_S 6 +/* GPIO_FUNC147_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC147_IN_SEL 0x0000003F +#define GPIO_FUNC147_IN_SEL_M ((GPIO_FUNC147_IN_SEL_V)<<(GPIO_FUNC147_IN_SEL_S)) +#define GPIO_FUNC147_IN_SEL_V 0x3F +#define GPIO_FUNC147_IN_SEL_S 0 + +#define GPIO_FUNC148_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0380) +/* GPIO_SIG148_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG148_IN_SEL (BIT(7)) +#define GPIO_SIG148_IN_SEL_M (BIT(7)) +#define GPIO_SIG148_IN_SEL_V 0x1 +#define GPIO_SIG148_IN_SEL_S 7 +/* GPIO_FUNC148_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC148_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC148_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC148_IN_INV_SEL_V 0x1 +#define GPIO_FUNC148_IN_INV_SEL_S 6 +/* GPIO_FUNC148_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC148_IN_SEL 0x0000003F +#define GPIO_FUNC148_IN_SEL_M ((GPIO_FUNC148_IN_SEL_V)<<(GPIO_FUNC148_IN_SEL_S)) +#define GPIO_FUNC148_IN_SEL_V 0x3F +#define GPIO_FUNC148_IN_SEL_S 0 + +#define GPIO_FUNC149_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0384) +/* GPIO_SIG149_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG149_IN_SEL (BIT(7)) +#define GPIO_SIG149_IN_SEL_M (BIT(7)) +#define GPIO_SIG149_IN_SEL_V 0x1 +#define GPIO_SIG149_IN_SEL_S 7 +/* GPIO_FUNC149_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC149_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC149_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC149_IN_INV_SEL_V 0x1 +#define GPIO_FUNC149_IN_INV_SEL_S 6 +/* GPIO_FUNC149_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC149_IN_SEL 0x0000003F +#define GPIO_FUNC149_IN_SEL_M ((GPIO_FUNC149_IN_SEL_V)<<(GPIO_FUNC149_IN_SEL_S)) +#define GPIO_FUNC149_IN_SEL_V 0x3F +#define GPIO_FUNC149_IN_SEL_S 0 + +#define GPIO_FUNC150_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0388) +/* GPIO_SIG150_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG150_IN_SEL (BIT(7)) +#define GPIO_SIG150_IN_SEL_M (BIT(7)) +#define GPIO_SIG150_IN_SEL_V 0x1 +#define GPIO_SIG150_IN_SEL_S 7 +/* GPIO_FUNC150_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC150_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC150_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC150_IN_INV_SEL_V 0x1 +#define GPIO_FUNC150_IN_INV_SEL_S 6 +/* GPIO_FUNC150_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC150_IN_SEL 0x0000003F +#define GPIO_FUNC150_IN_SEL_M ((GPIO_FUNC150_IN_SEL_V)<<(GPIO_FUNC150_IN_SEL_S)) +#define GPIO_FUNC150_IN_SEL_V 0x3F +#define GPIO_FUNC150_IN_SEL_S 0 + +#define GPIO_FUNC151_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x038c) +/* GPIO_SIG151_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG151_IN_SEL (BIT(7)) +#define GPIO_SIG151_IN_SEL_M (BIT(7)) +#define GPIO_SIG151_IN_SEL_V 0x1 +#define GPIO_SIG151_IN_SEL_S 7 +/* GPIO_FUNC151_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC151_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC151_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC151_IN_INV_SEL_V 0x1 +#define GPIO_FUNC151_IN_INV_SEL_S 6 +/* GPIO_FUNC151_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC151_IN_SEL 0x0000003F +#define GPIO_FUNC151_IN_SEL_M ((GPIO_FUNC151_IN_SEL_V)<<(GPIO_FUNC151_IN_SEL_S)) +#define GPIO_FUNC151_IN_SEL_V 0x3F +#define GPIO_FUNC151_IN_SEL_S 0 + +#define GPIO_FUNC152_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0390) +/* GPIO_SIG152_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG152_IN_SEL (BIT(7)) +#define GPIO_SIG152_IN_SEL_M (BIT(7)) +#define GPIO_SIG152_IN_SEL_V 0x1 +#define GPIO_SIG152_IN_SEL_S 7 +/* GPIO_FUNC152_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC152_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC152_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC152_IN_INV_SEL_V 0x1 +#define GPIO_FUNC152_IN_INV_SEL_S 6 +/* GPIO_FUNC152_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC152_IN_SEL 0x0000003F +#define GPIO_FUNC152_IN_SEL_M ((GPIO_FUNC152_IN_SEL_V)<<(GPIO_FUNC152_IN_SEL_S)) +#define GPIO_FUNC152_IN_SEL_V 0x3F +#define GPIO_FUNC152_IN_SEL_S 0 + +#define GPIO_FUNC153_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0394) +/* GPIO_SIG153_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG153_IN_SEL (BIT(7)) +#define GPIO_SIG153_IN_SEL_M (BIT(7)) +#define GPIO_SIG153_IN_SEL_V 0x1 +#define GPIO_SIG153_IN_SEL_S 7 +/* GPIO_FUNC153_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC153_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC153_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC153_IN_INV_SEL_V 0x1 +#define GPIO_FUNC153_IN_INV_SEL_S 6 +/* GPIO_FUNC153_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC153_IN_SEL 0x0000003F +#define GPIO_FUNC153_IN_SEL_M ((GPIO_FUNC153_IN_SEL_V)<<(GPIO_FUNC153_IN_SEL_S)) +#define GPIO_FUNC153_IN_SEL_V 0x3F +#define GPIO_FUNC153_IN_SEL_S 0 + +#define GPIO_FUNC154_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0398) +/* GPIO_SIG154_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG154_IN_SEL (BIT(7)) +#define GPIO_SIG154_IN_SEL_M (BIT(7)) +#define GPIO_SIG154_IN_SEL_V 0x1 +#define GPIO_SIG154_IN_SEL_S 7 +/* GPIO_FUNC154_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC154_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC154_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC154_IN_INV_SEL_V 0x1 +#define GPIO_FUNC154_IN_INV_SEL_S 6 +/* GPIO_FUNC154_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC154_IN_SEL 0x0000003F +#define GPIO_FUNC154_IN_SEL_M ((GPIO_FUNC154_IN_SEL_V)<<(GPIO_FUNC154_IN_SEL_S)) +#define GPIO_FUNC154_IN_SEL_V 0x3F +#define GPIO_FUNC154_IN_SEL_S 0 + +#define GPIO_FUNC155_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x039c) +/* GPIO_SIG155_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG155_IN_SEL (BIT(7)) +#define GPIO_SIG155_IN_SEL_M (BIT(7)) +#define GPIO_SIG155_IN_SEL_V 0x1 +#define GPIO_SIG155_IN_SEL_S 7 +/* GPIO_FUNC155_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC155_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC155_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC155_IN_INV_SEL_V 0x1 +#define GPIO_FUNC155_IN_INV_SEL_S 6 +/* GPIO_FUNC155_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC155_IN_SEL 0x0000003F +#define GPIO_FUNC155_IN_SEL_M ((GPIO_FUNC155_IN_SEL_V)<<(GPIO_FUNC155_IN_SEL_S)) +#define GPIO_FUNC155_IN_SEL_V 0x3F +#define GPIO_FUNC155_IN_SEL_S 0 + +#define GPIO_FUNC156_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03a0) +/* GPIO_SIG156_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG156_IN_SEL (BIT(7)) +#define GPIO_SIG156_IN_SEL_M (BIT(7)) +#define GPIO_SIG156_IN_SEL_V 0x1 +#define GPIO_SIG156_IN_SEL_S 7 +/* GPIO_FUNC156_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC156_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC156_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC156_IN_INV_SEL_V 0x1 +#define GPIO_FUNC156_IN_INV_SEL_S 6 +/* GPIO_FUNC156_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC156_IN_SEL 0x0000003F +#define GPIO_FUNC156_IN_SEL_M ((GPIO_FUNC156_IN_SEL_V)<<(GPIO_FUNC156_IN_SEL_S)) +#define GPIO_FUNC156_IN_SEL_V 0x3F +#define GPIO_FUNC156_IN_SEL_S 0 + +#define GPIO_FUNC157_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03a4) +/* GPIO_SIG157_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG157_IN_SEL (BIT(7)) +#define GPIO_SIG157_IN_SEL_M (BIT(7)) +#define GPIO_SIG157_IN_SEL_V 0x1 +#define GPIO_SIG157_IN_SEL_S 7 +/* GPIO_FUNC157_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC157_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC157_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC157_IN_INV_SEL_V 0x1 +#define GPIO_FUNC157_IN_INV_SEL_S 6 +/* GPIO_FUNC157_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC157_IN_SEL 0x0000003F +#define GPIO_FUNC157_IN_SEL_M ((GPIO_FUNC157_IN_SEL_V)<<(GPIO_FUNC157_IN_SEL_S)) +#define GPIO_FUNC157_IN_SEL_V 0x3F +#define GPIO_FUNC157_IN_SEL_S 0 + +#define GPIO_FUNC158_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03a8) +/* GPIO_SIG158_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG158_IN_SEL (BIT(7)) +#define GPIO_SIG158_IN_SEL_M (BIT(7)) +#define GPIO_SIG158_IN_SEL_V 0x1 +#define GPIO_SIG158_IN_SEL_S 7 +/* GPIO_FUNC158_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC158_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC158_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC158_IN_INV_SEL_V 0x1 +#define GPIO_FUNC158_IN_INV_SEL_S 6 +/* GPIO_FUNC158_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC158_IN_SEL 0x0000003F +#define GPIO_FUNC158_IN_SEL_M ((GPIO_FUNC158_IN_SEL_V)<<(GPIO_FUNC158_IN_SEL_S)) +#define GPIO_FUNC158_IN_SEL_V 0x3F +#define GPIO_FUNC158_IN_SEL_S 0 + +#define GPIO_FUNC159_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03ac) +/* GPIO_SIG159_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG159_IN_SEL (BIT(7)) +#define GPIO_SIG159_IN_SEL_M (BIT(7)) +#define GPIO_SIG159_IN_SEL_V 0x1 +#define GPIO_SIG159_IN_SEL_S 7 +/* GPIO_FUNC159_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC159_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC159_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC159_IN_INV_SEL_V 0x1 +#define GPIO_FUNC159_IN_INV_SEL_S 6 +/* GPIO_FUNC159_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC159_IN_SEL 0x0000003F +#define GPIO_FUNC159_IN_SEL_M ((GPIO_FUNC159_IN_SEL_V)<<(GPIO_FUNC159_IN_SEL_S)) +#define GPIO_FUNC159_IN_SEL_V 0x3F +#define GPIO_FUNC159_IN_SEL_S 0 + +#define GPIO_FUNC160_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03b0) +/* GPIO_SIG160_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG160_IN_SEL (BIT(7)) +#define GPIO_SIG160_IN_SEL_M (BIT(7)) +#define GPIO_SIG160_IN_SEL_V 0x1 +#define GPIO_SIG160_IN_SEL_S 7 +/* GPIO_FUNC160_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC160_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC160_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC160_IN_INV_SEL_V 0x1 +#define GPIO_FUNC160_IN_INV_SEL_S 6 +/* GPIO_FUNC160_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC160_IN_SEL 0x0000003F +#define GPIO_FUNC160_IN_SEL_M ((GPIO_FUNC160_IN_SEL_V)<<(GPIO_FUNC160_IN_SEL_S)) +#define GPIO_FUNC160_IN_SEL_V 0x3F +#define GPIO_FUNC160_IN_SEL_S 0 + +#define GPIO_FUNC161_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03b4) +/* GPIO_SIG161_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG161_IN_SEL (BIT(7)) +#define GPIO_SIG161_IN_SEL_M (BIT(7)) +#define GPIO_SIG161_IN_SEL_V 0x1 +#define GPIO_SIG161_IN_SEL_S 7 +/* GPIO_FUNC161_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC161_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC161_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC161_IN_INV_SEL_V 0x1 +#define GPIO_FUNC161_IN_INV_SEL_S 6 +/* GPIO_FUNC161_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC161_IN_SEL 0x0000003F +#define GPIO_FUNC161_IN_SEL_M ((GPIO_FUNC161_IN_SEL_V)<<(GPIO_FUNC161_IN_SEL_S)) +#define GPIO_FUNC161_IN_SEL_V 0x3F +#define GPIO_FUNC161_IN_SEL_S 0 + +#define GPIO_FUNC162_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03b8) +/* GPIO_SIG162_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG162_IN_SEL (BIT(7)) +#define GPIO_SIG162_IN_SEL_M (BIT(7)) +#define GPIO_SIG162_IN_SEL_V 0x1 +#define GPIO_SIG162_IN_SEL_S 7 +/* GPIO_FUNC162_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC162_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC162_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC162_IN_INV_SEL_V 0x1 +#define GPIO_FUNC162_IN_INV_SEL_S 6 +/* GPIO_FUNC162_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC162_IN_SEL 0x0000003F +#define GPIO_FUNC162_IN_SEL_M ((GPIO_FUNC162_IN_SEL_V)<<(GPIO_FUNC162_IN_SEL_S)) +#define GPIO_FUNC162_IN_SEL_V 0x3F +#define GPIO_FUNC162_IN_SEL_S 0 + +#define GPIO_FUNC163_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03bc) +/* GPIO_SIG163_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG163_IN_SEL (BIT(7)) +#define GPIO_SIG163_IN_SEL_M (BIT(7)) +#define GPIO_SIG163_IN_SEL_V 0x1 +#define GPIO_SIG163_IN_SEL_S 7 +/* GPIO_FUNC163_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC163_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC163_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC163_IN_INV_SEL_V 0x1 +#define GPIO_FUNC163_IN_INV_SEL_S 6 +/* GPIO_FUNC163_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC163_IN_SEL 0x0000003F +#define GPIO_FUNC163_IN_SEL_M ((GPIO_FUNC163_IN_SEL_V)<<(GPIO_FUNC163_IN_SEL_S)) +#define GPIO_FUNC163_IN_SEL_V 0x3F +#define GPIO_FUNC163_IN_SEL_S 0 + +#define GPIO_FUNC164_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03c0) +/* GPIO_SIG164_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG164_IN_SEL (BIT(7)) +#define GPIO_SIG164_IN_SEL_M (BIT(7)) +#define GPIO_SIG164_IN_SEL_V 0x1 +#define GPIO_SIG164_IN_SEL_S 7 +/* GPIO_FUNC164_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC164_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC164_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC164_IN_INV_SEL_V 0x1 +#define GPIO_FUNC164_IN_INV_SEL_S 6 +/* GPIO_FUNC164_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC164_IN_SEL 0x0000003F +#define GPIO_FUNC164_IN_SEL_M ((GPIO_FUNC164_IN_SEL_V)<<(GPIO_FUNC164_IN_SEL_S)) +#define GPIO_FUNC164_IN_SEL_V 0x3F +#define GPIO_FUNC164_IN_SEL_S 0 + +#define GPIO_FUNC165_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03c4) +/* GPIO_SIG165_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG165_IN_SEL (BIT(7)) +#define GPIO_SIG165_IN_SEL_M (BIT(7)) +#define GPIO_SIG165_IN_SEL_V 0x1 +#define GPIO_SIG165_IN_SEL_S 7 +/* GPIO_FUNC165_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC165_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC165_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC165_IN_INV_SEL_V 0x1 +#define GPIO_FUNC165_IN_INV_SEL_S 6 +/* GPIO_FUNC165_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC165_IN_SEL 0x0000003F +#define GPIO_FUNC165_IN_SEL_M ((GPIO_FUNC165_IN_SEL_V)<<(GPIO_FUNC165_IN_SEL_S)) +#define GPIO_FUNC165_IN_SEL_V 0x3F +#define GPIO_FUNC165_IN_SEL_S 0 + +#define GPIO_FUNC166_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03c8) +/* GPIO_SIG166_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG166_IN_SEL (BIT(7)) +#define GPIO_SIG166_IN_SEL_M (BIT(7)) +#define GPIO_SIG166_IN_SEL_V 0x1 +#define GPIO_SIG166_IN_SEL_S 7 +/* GPIO_FUNC166_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC166_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC166_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC166_IN_INV_SEL_V 0x1 +#define GPIO_FUNC166_IN_INV_SEL_S 6 +/* GPIO_FUNC166_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC166_IN_SEL 0x0000003F +#define GPIO_FUNC166_IN_SEL_M ((GPIO_FUNC166_IN_SEL_V)<<(GPIO_FUNC166_IN_SEL_S)) +#define GPIO_FUNC166_IN_SEL_V 0x3F +#define GPIO_FUNC166_IN_SEL_S 0 + +#define GPIO_FUNC167_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03cc) +/* GPIO_SIG167_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG167_IN_SEL (BIT(7)) +#define GPIO_SIG167_IN_SEL_M (BIT(7)) +#define GPIO_SIG167_IN_SEL_V 0x1 +#define GPIO_SIG167_IN_SEL_S 7 +/* GPIO_FUNC167_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC167_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC167_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC167_IN_INV_SEL_V 0x1 +#define GPIO_FUNC167_IN_INV_SEL_S 6 +/* GPIO_FUNC167_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC167_IN_SEL 0x0000003F +#define GPIO_FUNC167_IN_SEL_M ((GPIO_FUNC167_IN_SEL_V)<<(GPIO_FUNC167_IN_SEL_S)) +#define GPIO_FUNC167_IN_SEL_V 0x3F +#define GPIO_FUNC167_IN_SEL_S 0 + +#define GPIO_FUNC168_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03d0) +/* GPIO_SIG168_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG168_IN_SEL (BIT(7)) +#define GPIO_SIG168_IN_SEL_M (BIT(7)) +#define GPIO_SIG168_IN_SEL_V 0x1 +#define GPIO_SIG168_IN_SEL_S 7 +/* GPIO_FUNC168_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC168_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC168_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC168_IN_INV_SEL_V 0x1 +#define GPIO_FUNC168_IN_INV_SEL_S 6 +/* GPIO_FUNC168_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC168_IN_SEL 0x0000003F +#define GPIO_FUNC168_IN_SEL_M ((GPIO_FUNC168_IN_SEL_V)<<(GPIO_FUNC168_IN_SEL_S)) +#define GPIO_FUNC168_IN_SEL_V 0x3F +#define GPIO_FUNC168_IN_SEL_S 0 + +#define GPIO_FUNC169_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03d4) +/* GPIO_SIG169_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG169_IN_SEL (BIT(7)) +#define GPIO_SIG169_IN_SEL_M (BIT(7)) +#define GPIO_SIG169_IN_SEL_V 0x1 +#define GPIO_SIG169_IN_SEL_S 7 +/* GPIO_FUNC169_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC169_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC169_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC169_IN_INV_SEL_V 0x1 +#define GPIO_FUNC169_IN_INV_SEL_S 6 +/* GPIO_FUNC169_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC169_IN_SEL 0x0000003F +#define GPIO_FUNC169_IN_SEL_M ((GPIO_FUNC169_IN_SEL_V)<<(GPIO_FUNC169_IN_SEL_S)) +#define GPIO_FUNC169_IN_SEL_V 0x3F +#define GPIO_FUNC169_IN_SEL_S 0 + +#define GPIO_FUNC170_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03d8) +/* GPIO_SIG170_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG170_IN_SEL (BIT(7)) +#define GPIO_SIG170_IN_SEL_M (BIT(7)) +#define GPIO_SIG170_IN_SEL_V 0x1 +#define GPIO_SIG170_IN_SEL_S 7 +/* GPIO_FUNC170_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC170_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC170_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC170_IN_INV_SEL_V 0x1 +#define GPIO_FUNC170_IN_INV_SEL_S 6 +/* GPIO_FUNC170_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC170_IN_SEL 0x0000003F +#define GPIO_FUNC170_IN_SEL_M ((GPIO_FUNC170_IN_SEL_V)<<(GPIO_FUNC170_IN_SEL_S)) +#define GPIO_FUNC170_IN_SEL_V 0x3F +#define GPIO_FUNC170_IN_SEL_S 0 + +#define GPIO_FUNC171_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03dc) +/* GPIO_SIG171_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG171_IN_SEL (BIT(7)) +#define GPIO_SIG171_IN_SEL_M (BIT(7)) +#define GPIO_SIG171_IN_SEL_V 0x1 +#define GPIO_SIG171_IN_SEL_S 7 +/* GPIO_FUNC171_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC171_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC171_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC171_IN_INV_SEL_V 0x1 +#define GPIO_FUNC171_IN_INV_SEL_S 6 +/* GPIO_FUNC171_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC171_IN_SEL 0x0000003F +#define GPIO_FUNC171_IN_SEL_M ((GPIO_FUNC171_IN_SEL_V)<<(GPIO_FUNC171_IN_SEL_S)) +#define GPIO_FUNC171_IN_SEL_V 0x3F +#define GPIO_FUNC171_IN_SEL_S 0 + +#define GPIO_FUNC172_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03e0) +/* GPIO_SIG172_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG172_IN_SEL (BIT(7)) +#define GPIO_SIG172_IN_SEL_M (BIT(7)) +#define GPIO_SIG172_IN_SEL_V 0x1 +#define GPIO_SIG172_IN_SEL_S 7 +/* GPIO_FUNC172_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC172_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC172_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC172_IN_INV_SEL_V 0x1 +#define GPIO_FUNC172_IN_INV_SEL_S 6 +/* GPIO_FUNC172_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC172_IN_SEL 0x0000003F +#define GPIO_FUNC172_IN_SEL_M ((GPIO_FUNC172_IN_SEL_V)<<(GPIO_FUNC172_IN_SEL_S)) +#define GPIO_FUNC172_IN_SEL_V 0x3F +#define GPIO_FUNC172_IN_SEL_S 0 + +#define GPIO_FUNC173_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03e4) +/* GPIO_SIG173_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG173_IN_SEL (BIT(7)) +#define GPIO_SIG173_IN_SEL_M (BIT(7)) +#define GPIO_SIG173_IN_SEL_V 0x1 +#define GPIO_SIG173_IN_SEL_S 7 +/* GPIO_FUNC173_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC173_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC173_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC173_IN_INV_SEL_V 0x1 +#define GPIO_FUNC173_IN_INV_SEL_S 6 +/* GPIO_FUNC173_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC173_IN_SEL 0x0000003F +#define GPIO_FUNC173_IN_SEL_M ((GPIO_FUNC173_IN_SEL_V)<<(GPIO_FUNC173_IN_SEL_S)) +#define GPIO_FUNC173_IN_SEL_V 0x3F +#define GPIO_FUNC173_IN_SEL_S 0 + +#define GPIO_FUNC174_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03e8) +/* GPIO_SIG174_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG174_IN_SEL (BIT(7)) +#define GPIO_SIG174_IN_SEL_M (BIT(7)) +#define GPIO_SIG174_IN_SEL_V 0x1 +#define GPIO_SIG174_IN_SEL_S 7 +/* GPIO_FUNC174_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC174_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC174_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC174_IN_INV_SEL_V 0x1 +#define GPIO_FUNC174_IN_INV_SEL_S 6 +/* GPIO_FUNC174_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC174_IN_SEL 0x0000003F +#define GPIO_FUNC174_IN_SEL_M ((GPIO_FUNC174_IN_SEL_V)<<(GPIO_FUNC174_IN_SEL_S)) +#define GPIO_FUNC174_IN_SEL_V 0x3F +#define GPIO_FUNC174_IN_SEL_S 0 + +#define GPIO_FUNC175_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03ec) +/* GPIO_SIG175_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG175_IN_SEL (BIT(7)) +#define GPIO_SIG175_IN_SEL_M (BIT(7)) +#define GPIO_SIG175_IN_SEL_V 0x1 +#define GPIO_SIG175_IN_SEL_S 7 +/* GPIO_FUNC175_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC175_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC175_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC175_IN_INV_SEL_V 0x1 +#define GPIO_FUNC175_IN_INV_SEL_S 6 +/* GPIO_FUNC175_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC175_IN_SEL 0x0000003F +#define GPIO_FUNC175_IN_SEL_M ((GPIO_FUNC175_IN_SEL_V)<<(GPIO_FUNC175_IN_SEL_S)) +#define GPIO_FUNC175_IN_SEL_V 0x3F +#define GPIO_FUNC175_IN_SEL_S 0 + +#define GPIO_FUNC176_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03f0) +/* GPIO_SIG176_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG176_IN_SEL (BIT(7)) +#define GPIO_SIG176_IN_SEL_M (BIT(7)) +#define GPIO_SIG176_IN_SEL_V 0x1 +#define GPIO_SIG176_IN_SEL_S 7 +/* GPIO_FUNC176_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC176_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC176_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC176_IN_INV_SEL_V 0x1 +#define GPIO_FUNC176_IN_INV_SEL_S 6 +/* GPIO_FUNC176_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC176_IN_SEL 0x0000003F +#define GPIO_FUNC176_IN_SEL_M ((GPIO_FUNC176_IN_SEL_V)<<(GPIO_FUNC176_IN_SEL_S)) +#define GPIO_FUNC176_IN_SEL_V 0x3F +#define GPIO_FUNC176_IN_SEL_S 0 + +#define GPIO_FUNC177_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03f4) +/* GPIO_SIG177_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG177_IN_SEL (BIT(7)) +#define GPIO_SIG177_IN_SEL_M (BIT(7)) +#define GPIO_SIG177_IN_SEL_V 0x1 +#define GPIO_SIG177_IN_SEL_S 7 +/* GPIO_FUNC177_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC177_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC177_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC177_IN_INV_SEL_V 0x1 +#define GPIO_FUNC177_IN_INV_SEL_S 6 +/* GPIO_FUNC177_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC177_IN_SEL 0x0000003F +#define GPIO_FUNC177_IN_SEL_M ((GPIO_FUNC177_IN_SEL_V)<<(GPIO_FUNC177_IN_SEL_S)) +#define GPIO_FUNC177_IN_SEL_V 0x3F +#define GPIO_FUNC177_IN_SEL_S 0 + +#define GPIO_FUNC178_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03f8) +/* GPIO_SIG178_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG178_IN_SEL (BIT(7)) +#define GPIO_SIG178_IN_SEL_M (BIT(7)) +#define GPIO_SIG178_IN_SEL_V 0x1 +#define GPIO_SIG178_IN_SEL_S 7 +/* GPIO_FUNC178_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC178_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC178_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC178_IN_INV_SEL_V 0x1 +#define GPIO_FUNC178_IN_INV_SEL_S 6 +/* GPIO_FUNC178_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC178_IN_SEL 0x0000003F +#define GPIO_FUNC178_IN_SEL_M ((GPIO_FUNC178_IN_SEL_V)<<(GPIO_FUNC178_IN_SEL_S)) +#define GPIO_FUNC178_IN_SEL_V 0x3F +#define GPIO_FUNC178_IN_SEL_S 0 + +#define GPIO_FUNC179_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x03fc) +/* GPIO_SIG179_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG179_IN_SEL (BIT(7)) +#define GPIO_SIG179_IN_SEL_M (BIT(7)) +#define GPIO_SIG179_IN_SEL_V 0x1 +#define GPIO_SIG179_IN_SEL_S 7 +/* GPIO_FUNC179_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC179_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC179_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC179_IN_INV_SEL_V 0x1 +#define GPIO_FUNC179_IN_INV_SEL_S 6 +/* GPIO_FUNC179_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC179_IN_SEL 0x0000003F +#define GPIO_FUNC179_IN_SEL_M ((GPIO_FUNC179_IN_SEL_V)<<(GPIO_FUNC179_IN_SEL_S)) +#define GPIO_FUNC179_IN_SEL_V 0x3F +#define GPIO_FUNC179_IN_SEL_S 0 + +#define GPIO_FUNC180_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0400) +/* GPIO_SIG180_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG180_IN_SEL (BIT(7)) +#define GPIO_SIG180_IN_SEL_M (BIT(7)) +#define GPIO_SIG180_IN_SEL_V 0x1 +#define GPIO_SIG180_IN_SEL_S 7 +/* GPIO_FUNC180_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC180_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC180_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC180_IN_INV_SEL_V 0x1 +#define GPIO_FUNC180_IN_INV_SEL_S 6 +/* GPIO_FUNC180_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC180_IN_SEL 0x0000003F +#define GPIO_FUNC180_IN_SEL_M ((GPIO_FUNC180_IN_SEL_V)<<(GPIO_FUNC180_IN_SEL_S)) +#define GPIO_FUNC180_IN_SEL_V 0x3F +#define GPIO_FUNC180_IN_SEL_S 0 + +#define GPIO_FUNC181_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0404) +/* GPIO_SIG181_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG181_IN_SEL (BIT(7)) +#define GPIO_SIG181_IN_SEL_M (BIT(7)) +#define GPIO_SIG181_IN_SEL_V 0x1 +#define GPIO_SIG181_IN_SEL_S 7 +/* GPIO_FUNC181_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC181_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC181_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC181_IN_INV_SEL_V 0x1 +#define GPIO_FUNC181_IN_INV_SEL_S 6 +/* GPIO_FUNC181_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC181_IN_SEL 0x0000003F +#define GPIO_FUNC181_IN_SEL_M ((GPIO_FUNC181_IN_SEL_V)<<(GPIO_FUNC181_IN_SEL_S)) +#define GPIO_FUNC181_IN_SEL_V 0x3F +#define GPIO_FUNC181_IN_SEL_S 0 + +#define GPIO_FUNC182_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0408) +/* GPIO_SIG182_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG182_IN_SEL (BIT(7)) +#define GPIO_SIG182_IN_SEL_M (BIT(7)) +#define GPIO_SIG182_IN_SEL_V 0x1 +#define GPIO_SIG182_IN_SEL_S 7 +/* GPIO_FUNC182_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC182_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC182_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC182_IN_INV_SEL_V 0x1 +#define GPIO_FUNC182_IN_INV_SEL_S 6 +/* GPIO_FUNC182_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC182_IN_SEL 0x0000003F +#define GPIO_FUNC182_IN_SEL_M ((GPIO_FUNC182_IN_SEL_V)<<(GPIO_FUNC182_IN_SEL_S)) +#define GPIO_FUNC182_IN_SEL_V 0x3F +#define GPIO_FUNC182_IN_SEL_S 0 + +#define GPIO_FUNC183_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x040c) +/* GPIO_SIG183_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG183_IN_SEL (BIT(7)) +#define GPIO_SIG183_IN_SEL_M (BIT(7)) +#define GPIO_SIG183_IN_SEL_V 0x1 +#define GPIO_SIG183_IN_SEL_S 7 +/* GPIO_FUNC183_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC183_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC183_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC183_IN_INV_SEL_V 0x1 +#define GPIO_FUNC183_IN_INV_SEL_S 6 +/* GPIO_FUNC183_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC183_IN_SEL 0x0000003F +#define GPIO_FUNC183_IN_SEL_M ((GPIO_FUNC183_IN_SEL_V)<<(GPIO_FUNC183_IN_SEL_S)) +#define GPIO_FUNC183_IN_SEL_V 0x3F +#define GPIO_FUNC183_IN_SEL_S 0 + +#define GPIO_FUNC184_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0410) +/* GPIO_SIG184_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG184_IN_SEL (BIT(7)) +#define GPIO_SIG184_IN_SEL_M (BIT(7)) +#define GPIO_SIG184_IN_SEL_V 0x1 +#define GPIO_SIG184_IN_SEL_S 7 +/* GPIO_FUNC184_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC184_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC184_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC184_IN_INV_SEL_V 0x1 +#define GPIO_FUNC184_IN_INV_SEL_S 6 +/* GPIO_FUNC184_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC184_IN_SEL 0x0000003F +#define GPIO_FUNC184_IN_SEL_M ((GPIO_FUNC184_IN_SEL_V)<<(GPIO_FUNC184_IN_SEL_S)) +#define GPIO_FUNC184_IN_SEL_V 0x3F +#define GPIO_FUNC184_IN_SEL_S 0 + +#define GPIO_FUNC185_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0414) +/* GPIO_SIG185_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG185_IN_SEL (BIT(7)) +#define GPIO_SIG185_IN_SEL_M (BIT(7)) +#define GPIO_SIG185_IN_SEL_V 0x1 +#define GPIO_SIG185_IN_SEL_S 7 +/* GPIO_FUNC185_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC185_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC185_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC185_IN_INV_SEL_V 0x1 +#define GPIO_FUNC185_IN_INV_SEL_S 6 +/* GPIO_FUNC185_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC185_IN_SEL 0x0000003F +#define GPIO_FUNC185_IN_SEL_M ((GPIO_FUNC185_IN_SEL_V)<<(GPIO_FUNC185_IN_SEL_S)) +#define GPIO_FUNC185_IN_SEL_V 0x3F +#define GPIO_FUNC185_IN_SEL_S 0 + +#define GPIO_FUNC186_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0418) +/* GPIO_SIG186_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG186_IN_SEL (BIT(7)) +#define GPIO_SIG186_IN_SEL_M (BIT(7)) +#define GPIO_SIG186_IN_SEL_V 0x1 +#define GPIO_SIG186_IN_SEL_S 7 +/* GPIO_FUNC186_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC186_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC186_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC186_IN_INV_SEL_V 0x1 +#define GPIO_FUNC186_IN_INV_SEL_S 6 +/* GPIO_FUNC186_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC186_IN_SEL 0x0000003F +#define GPIO_FUNC186_IN_SEL_M ((GPIO_FUNC186_IN_SEL_V)<<(GPIO_FUNC186_IN_SEL_S)) +#define GPIO_FUNC186_IN_SEL_V 0x3F +#define GPIO_FUNC186_IN_SEL_S 0 + +#define GPIO_FUNC187_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x041c) +/* GPIO_SIG187_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG187_IN_SEL (BIT(7)) +#define GPIO_SIG187_IN_SEL_M (BIT(7)) +#define GPIO_SIG187_IN_SEL_V 0x1 +#define GPIO_SIG187_IN_SEL_S 7 +/* GPIO_FUNC187_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC187_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC187_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC187_IN_INV_SEL_V 0x1 +#define GPIO_FUNC187_IN_INV_SEL_S 6 +/* GPIO_FUNC187_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC187_IN_SEL 0x0000003F +#define GPIO_FUNC187_IN_SEL_M ((GPIO_FUNC187_IN_SEL_V)<<(GPIO_FUNC187_IN_SEL_S)) +#define GPIO_FUNC187_IN_SEL_V 0x3F +#define GPIO_FUNC187_IN_SEL_S 0 + +#define GPIO_FUNC188_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0420) +/* GPIO_SIG188_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG188_IN_SEL (BIT(7)) +#define GPIO_SIG188_IN_SEL_M (BIT(7)) +#define GPIO_SIG188_IN_SEL_V 0x1 +#define GPIO_SIG188_IN_SEL_S 7 +/* GPIO_FUNC188_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC188_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC188_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC188_IN_INV_SEL_V 0x1 +#define GPIO_FUNC188_IN_INV_SEL_S 6 +/* GPIO_FUNC188_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC188_IN_SEL 0x0000003F +#define GPIO_FUNC188_IN_SEL_M ((GPIO_FUNC188_IN_SEL_V)<<(GPIO_FUNC188_IN_SEL_S)) +#define GPIO_FUNC188_IN_SEL_V 0x3F +#define GPIO_FUNC188_IN_SEL_S 0 + +#define GPIO_FUNC189_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0424) +/* GPIO_SIG189_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG189_IN_SEL (BIT(7)) +#define GPIO_SIG189_IN_SEL_M (BIT(7)) +#define GPIO_SIG189_IN_SEL_V 0x1 +#define GPIO_SIG189_IN_SEL_S 7 +/* GPIO_FUNC189_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC189_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC189_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC189_IN_INV_SEL_V 0x1 +#define GPIO_FUNC189_IN_INV_SEL_S 6 +/* GPIO_FUNC189_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC189_IN_SEL 0x0000003F +#define GPIO_FUNC189_IN_SEL_M ((GPIO_FUNC189_IN_SEL_V)<<(GPIO_FUNC189_IN_SEL_S)) +#define GPIO_FUNC189_IN_SEL_V 0x3F +#define GPIO_FUNC189_IN_SEL_S 0 + +#define GPIO_FUNC190_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0428) +/* GPIO_SIG190_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG190_IN_SEL (BIT(7)) +#define GPIO_SIG190_IN_SEL_M (BIT(7)) +#define GPIO_SIG190_IN_SEL_V 0x1 +#define GPIO_SIG190_IN_SEL_S 7 +/* GPIO_FUNC190_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC190_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC190_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC190_IN_INV_SEL_V 0x1 +#define GPIO_FUNC190_IN_INV_SEL_S 6 +/* GPIO_FUNC190_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC190_IN_SEL 0x0000003F +#define GPIO_FUNC190_IN_SEL_M ((GPIO_FUNC190_IN_SEL_V)<<(GPIO_FUNC190_IN_SEL_S)) +#define GPIO_FUNC190_IN_SEL_V 0x3F +#define GPIO_FUNC190_IN_SEL_S 0 + +#define GPIO_FUNC191_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x042c) +/* GPIO_SIG191_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG191_IN_SEL (BIT(7)) +#define GPIO_SIG191_IN_SEL_M (BIT(7)) +#define GPIO_SIG191_IN_SEL_V 0x1 +#define GPIO_SIG191_IN_SEL_S 7 +/* GPIO_FUNC191_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC191_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC191_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC191_IN_INV_SEL_V 0x1 +#define GPIO_FUNC191_IN_INV_SEL_S 6 +/* GPIO_FUNC191_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC191_IN_SEL 0x0000003F +#define GPIO_FUNC191_IN_SEL_M ((GPIO_FUNC191_IN_SEL_V)<<(GPIO_FUNC191_IN_SEL_S)) +#define GPIO_FUNC191_IN_SEL_V 0x3F +#define GPIO_FUNC191_IN_SEL_S 0 + +#define GPIO_FUNC192_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0430) +/* GPIO_SIG192_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG192_IN_SEL (BIT(7)) +#define GPIO_SIG192_IN_SEL_M (BIT(7)) +#define GPIO_SIG192_IN_SEL_V 0x1 +#define GPIO_SIG192_IN_SEL_S 7 +/* GPIO_FUNC192_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC192_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC192_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC192_IN_INV_SEL_V 0x1 +#define GPIO_FUNC192_IN_INV_SEL_S 6 +/* GPIO_FUNC192_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC192_IN_SEL 0x0000003F +#define GPIO_FUNC192_IN_SEL_M ((GPIO_FUNC192_IN_SEL_V)<<(GPIO_FUNC192_IN_SEL_S)) +#define GPIO_FUNC192_IN_SEL_V 0x3F +#define GPIO_FUNC192_IN_SEL_S 0 + +#define GPIO_FUNC193_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0434) +/* GPIO_SIG193_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG193_IN_SEL (BIT(7)) +#define GPIO_SIG193_IN_SEL_M (BIT(7)) +#define GPIO_SIG193_IN_SEL_V 0x1 +#define GPIO_SIG193_IN_SEL_S 7 +/* GPIO_FUNC193_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC193_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC193_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC193_IN_INV_SEL_V 0x1 +#define GPIO_FUNC193_IN_INV_SEL_S 6 +/* GPIO_FUNC193_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC193_IN_SEL 0x0000003F +#define GPIO_FUNC193_IN_SEL_M ((GPIO_FUNC193_IN_SEL_V)<<(GPIO_FUNC193_IN_SEL_S)) +#define GPIO_FUNC193_IN_SEL_V 0x3F +#define GPIO_FUNC193_IN_SEL_S 0 + +#define GPIO_FUNC194_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0438) +/* GPIO_SIG194_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG194_IN_SEL (BIT(7)) +#define GPIO_SIG194_IN_SEL_M (BIT(7)) +#define GPIO_SIG194_IN_SEL_V 0x1 +#define GPIO_SIG194_IN_SEL_S 7 +/* GPIO_FUNC194_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC194_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC194_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC194_IN_INV_SEL_V 0x1 +#define GPIO_FUNC194_IN_INV_SEL_S 6 +/* GPIO_FUNC194_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC194_IN_SEL 0x0000003F +#define GPIO_FUNC194_IN_SEL_M ((GPIO_FUNC194_IN_SEL_V)<<(GPIO_FUNC194_IN_SEL_S)) +#define GPIO_FUNC194_IN_SEL_V 0x3F +#define GPIO_FUNC194_IN_SEL_S 0 + +#define GPIO_FUNC195_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x043c) +/* GPIO_SIG195_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG195_IN_SEL (BIT(7)) +#define GPIO_SIG195_IN_SEL_M (BIT(7)) +#define GPIO_SIG195_IN_SEL_V 0x1 +#define GPIO_SIG195_IN_SEL_S 7 +/* GPIO_FUNC195_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC195_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC195_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC195_IN_INV_SEL_V 0x1 +#define GPIO_FUNC195_IN_INV_SEL_S 6 +/* GPIO_FUNC195_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC195_IN_SEL 0x0000003F +#define GPIO_FUNC195_IN_SEL_M ((GPIO_FUNC195_IN_SEL_V)<<(GPIO_FUNC195_IN_SEL_S)) +#define GPIO_FUNC195_IN_SEL_V 0x3F +#define GPIO_FUNC195_IN_SEL_S 0 + +#define GPIO_FUNC196_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0440) +/* GPIO_SIG196_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG196_IN_SEL (BIT(7)) +#define GPIO_SIG196_IN_SEL_M (BIT(7)) +#define GPIO_SIG196_IN_SEL_V 0x1 +#define GPIO_SIG196_IN_SEL_S 7 +/* GPIO_FUNC196_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC196_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC196_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC196_IN_INV_SEL_V 0x1 +#define GPIO_FUNC196_IN_INV_SEL_S 6 +/* GPIO_FUNC196_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC196_IN_SEL 0x0000003F +#define GPIO_FUNC196_IN_SEL_M ((GPIO_FUNC196_IN_SEL_V)<<(GPIO_FUNC196_IN_SEL_S)) +#define GPIO_FUNC196_IN_SEL_V 0x3F +#define GPIO_FUNC196_IN_SEL_S 0 + +#define GPIO_FUNC197_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0444) +/* GPIO_SIG197_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG197_IN_SEL (BIT(7)) +#define GPIO_SIG197_IN_SEL_M (BIT(7)) +#define GPIO_SIG197_IN_SEL_V 0x1 +#define GPIO_SIG197_IN_SEL_S 7 +/* GPIO_FUNC197_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC197_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC197_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC197_IN_INV_SEL_V 0x1 +#define GPIO_FUNC197_IN_INV_SEL_S 6 +/* GPIO_FUNC197_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC197_IN_SEL 0x0000003F +#define GPIO_FUNC197_IN_SEL_M ((GPIO_FUNC197_IN_SEL_V)<<(GPIO_FUNC197_IN_SEL_S)) +#define GPIO_FUNC197_IN_SEL_V 0x3F +#define GPIO_FUNC197_IN_SEL_S 0 + +#define GPIO_FUNC198_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0448) +/* GPIO_SIG198_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG198_IN_SEL (BIT(7)) +#define GPIO_SIG198_IN_SEL_M (BIT(7)) +#define GPIO_SIG198_IN_SEL_V 0x1 +#define GPIO_SIG198_IN_SEL_S 7 +/* GPIO_FUNC198_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC198_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC198_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC198_IN_INV_SEL_V 0x1 +#define GPIO_FUNC198_IN_INV_SEL_S 6 +/* GPIO_FUNC198_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC198_IN_SEL 0x0000003F +#define GPIO_FUNC198_IN_SEL_M ((GPIO_FUNC198_IN_SEL_V)<<(GPIO_FUNC198_IN_SEL_S)) +#define GPIO_FUNC198_IN_SEL_V 0x3F +#define GPIO_FUNC198_IN_SEL_S 0 + +#define GPIO_FUNC199_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x044c) +/* GPIO_SIG199_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG199_IN_SEL (BIT(7)) +#define GPIO_SIG199_IN_SEL_M (BIT(7)) +#define GPIO_SIG199_IN_SEL_V 0x1 +#define GPIO_SIG199_IN_SEL_S 7 +/* GPIO_FUNC199_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC199_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC199_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC199_IN_INV_SEL_V 0x1 +#define GPIO_FUNC199_IN_INV_SEL_S 6 +/* GPIO_FUNC199_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC199_IN_SEL 0x0000003F +#define GPIO_FUNC199_IN_SEL_M ((GPIO_FUNC199_IN_SEL_V)<<(GPIO_FUNC199_IN_SEL_S)) +#define GPIO_FUNC199_IN_SEL_V 0x3F +#define GPIO_FUNC199_IN_SEL_S 0 + +#define GPIO_FUNC200_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0450) +/* GPIO_SIG200_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG200_IN_SEL (BIT(7)) +#define GPIO_SIG200_IN_SEL_M (BIT(7)) +#define GPIO_SIG200_IN_SEL_V 0x1 +#define GPIO_SIG200_IN_SEL_S 7 +/* GPIO_FUNC200_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC200_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC200_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC200_IN_INV_SEL_V 0x1 +#define GPIO_FUNC200_IN_INV_SEL_S 6 +/* GPIO_FUNC200_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC200_IN_SEL 0x0000003F +#define GPIO_FUNC200_IN_SEL_M ((GPIO_FUNC200_IN_SEL_V)<<(GPIO_FUNC200_IN_SEL_S)) +#define GPIO_FUNC200_IN_SEL_V 0x3F +#define GPIO_FUNC200_IN_SEL_S 0 + +#define GPIO_FUNC201_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0454) +/* GPIO_SIG201_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG201_IN_SEL (BIT(7)) +#define GPIO_SIG201_IN_SEL_M (BIT(7)) +#define GPIO_SIG201_IN_SEL_V 0x1 +#define GPIO_SIG201_IN_SEL_S 7 +/* GPIO_FUNC201_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC201_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC201_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC201_IN_INV_SEL_V 0x1 +#define GPIO_FUNC201_IN_INV_SEL_S 6 +/* GPIO_FUNC201_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC201_IN_SEL 0x0000003F +#define GPIO_FUNC201_IN_SEL_M ((GPIO_FUNC201_IN_SEL_V)<<(GPIO_FUNC201_IN_SEL_S)) +#define GPIO_FUNC201_IN_SEL_V 0x3F +#define GPIO_FUNC201_IN_SEL_S 0 + +#define GPIO_FUNC202_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0458) +/* GPIO_SIG202_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG202_IN_SEL (BIT(7)) +#define GPIO_SIG202_IN_SEL_M (BIT(7)) +#define GPIO_SIG202_IN_SEL_V 0x1 +#define GPIO_SIG202_IN_SEL_S 7 +/* GPIO_FUNC202_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC202_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC202_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC202_IN_INV_SEL_V 0x1 +#define GPIO_FUNC202_IN_INV_SEL_S 6 +/* GPIO_FUNC202_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC202_IN_SEL 0x0000003F +#define GPIO_FUNC202_IN_SEL_M ((GPIO_FUNC202_IN_SEL_V)<<(GPIO_FUNC202_IN_SEL_S)) +#define GPIO_FUNC202_IN_SEL_V 0x3F +#define GPIO_FUNC202_IN_SEL_S 0 + +#define GPIO_FUNC203_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x045c) +/* GPIO_SIG203_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG203_IN_SEL (BIT(7)) +#define GPIO_SIG203_IN_SEL_M (BIT(7)) +#define GPIO_SIG203_IN_SEL_V 0x1 +#define GPIO_SIG203_IN_SEL_S 7 +/* GPIO_FUNC203_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC203_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC203_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC203_IN_INV_SEL_V 0x1 +#define GPIO_FUNC203_IN_INV_SEL_S 6 +/* GPIO_FUNC203_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC203_IN_SEL 0x0000003F +#define GPIO_FUNC203_IN_SEL_M ((GPIO_FUNC203_IN_SEL_V)<<(GPIO_FUNC203_IN_SEL_S)) +#define GPIO_FUNC203_IN_SEL_V 0x3F +#define GPIO_FUNC203_IN_SEL_S 0 + +#define GPIO_FUNC204_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0460) +/* GPIO_SIG204_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG204_IN_SEL (BIT(7)) +#define GPIO_SIG204_IN_SEL_M (BIT(7)) +#define GPIO_SIG204_IN_SEL_V 0x1 +#define GPIO_SIG204_IN_SEL_S 7 +/* GPIO_FUNC204_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC204_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC204_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC204_IN_INV_SEL_V 0x1 +#define GPIO_FUNC204_IN_INV_SEL_S 6 +/* GPIO_FUNC204_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC204_IN_SEL 0x0000003F +#define GPIO_FUNC204_IN_SEL_M ((GPIO_FUNC204_IN_SEL_V)<<(GPIO_FUNC204_IN_SEL_S)) +#define GPIO_FUNC204_IN_SEL_V 0x3F +#define GPIO_FUNC204_IN_SEL_S 0 + +#define GPIO_FUNC205_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0464) +/* GPIO_SIG205_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG205_IN_SEL (BIT(7)) +#define GPIO_SIG205_IN_SEL_M (BIT(7)) +#define GPIO_SIG205_IN_SEL_V 0x1 +#define GPIO_SIG205_IN_SEL_S 7 +/* GPIO_FUNC205_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC205_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC205_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC205_IN_INV_SEL_V 0x1 +#define GPIO_FUNC205_IN_INV_SEL_S 6 +/* GPIO_FUNC205_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC205_IN_SEL 0x0000003F +#define GPIO_FUNC205_IN_SEL_M ((GPIO_FUNC205_IN_SEL_V)<<(GPIO_FUNC205_IN_SEL_S)) +#define GPIO_FUNC205_IN_SEL_V 0x3F +#define GPIO_FUNC205_IN_SEL_S 0 + +#define GPIO_FUNC206_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0468) +/* GPIO_SIG206_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG206_IN_SEL (BIT(7)) +#define GPIO_SIG206_IN_SEL_M (BIT(7)) +#define GPIO_SIG206_IN_SEL_V 0x1 +#define GPIO_SIG206_IN_SEL_S 7 +/* GPIO_FUNC206_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC206_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC206_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC206_IN_INV_SEL_V 0x1 +#define GPIO_FUNC206_IN_INV_SEL_S 6 +/* GPIO_FUNC206_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC206_IN_SEL 0x0000003F +#define GPIO_FUNC206_IN_SEL_M ((GPIO_FUNC206_IN_SEL_V)<<(GPIO_FUNC206_IN_SEL_S)) +#define GPIO_FUNC206_IN_SEL_V 0x3F +#define GPIO_FUNC206_IN_SEL_S 0 + +#define GPIO_FUNC207_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x046c) +/* GPIO_SIG207_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG207_IN_SEL (BIT(7)) +#define GPIO_SIG207_IN_SEL_M (BIT(7)) +#define GPIO_SIG207_IN_SEL_V 0x1 +#define GPIO_SIG207_IN_SEL_S 7 +/* GPIO_FUNC207_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC207_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC207_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC207_IN_INV_SEL_V 0x1 +#define GPIO_FUNC207_IN_INV_SEL_S 6 +/* GPIO_FUNC207_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC207_IN_SEL 0x0000003F +#define GPIO_FUNC207_IN_SEL_M ((GPIO_FUNC207_IN_SEL_V)<<(GPIO_FUNC207_IN_SEL_S)) +#define GPIO_FUNC207_IN_SEL_V 0x3F +#define GPIO_FUNC207_IN_SEL_S 0 + +#define GPIO_FUNC208_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0470) +/* GPIO_SIG208_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG208_IN_SEL (BIT(7)) +#define GPIO_SIG208_IN_SEL_M (BIT(7)) +#define GPIO_SIG208_IN_SEL_V 0x1 +#define GPIO_SIG208_IN_SEL_S 7 +/* GPIO_FUNC208_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC208_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC208_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC208_IN_INV_SEL_V 0x1 +#define GPIO_FUNC208_IN_INV_SEL_S 6 +/* GPIO_FUNC208_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC208_IN_SEL 0x0000003F +#define GPIO_FUNC208_IN_SEL_M ((GPIO_FUNC208_IN_SEL_V)<<(GPIO_FUNC208_IN_SEL_S)) +#define GPIO_FUNC208_IN_SEL_V 0x3F +#define GPIO_FUNC208_IN_SEL_S 0 + +#define GPIO_FUNC209_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0474) +/* GPIO_SIG209_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG209_IN_SEL (BIT(7)) +#define GPIO_SIG209_IN_SEL_M (BIT(7)) +#define GPIO_SIG209_IN_SEL_V 0x1 +#define GPIO_SIG209_IN_SEL_S 7 +/* GPIO_FUNC209_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC209_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC209_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC209_IN_INV_SEL_V 0x1 +#define GPIO_FUNC209_IN_INV_SEL_S 6 +/* GPIO_FUNC209_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC209_IN_SEL 0x0000003F +#define GPIO_FUNC209_IN_SEL_M ((GPIO_FUNC209_IN_SEL_V)<<(GPIO_FUNC209_IN_SEL_S)) +#define GPIO_FUNC209_IN_SEL_V 0x3F +#define GPIO_FUNC209_IN_SEL_S 0 + +#define GPIO_FUNC210_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0478) +/* GPIO_SIG210_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG210_IN_SEL (BIT(7)) +#define GPIO_SIG210_IN_SEL_M (BIT(7)) +#define GPIO_SIG210_IN_SEL_V 0x1 +#define GPIO_SIG210_IN_SEL_S 7 +/* GPIO_FUNC210_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC210_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC210_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC210_IN_INV_SEL_V 0x1 +#define GPIO_FUNC210_IN_INV_SEL_S 6 +/* GPIO_FUNC210_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC210_IN_SEL 0x0000003F +#define GPIO_FUNC210_IN_SEL_M ((GPIO_FUNC210_IN_SEL_V)<<(GPIO_FUNC210_IN_SEL_S)) +#define GPIO_FUNC210_IN_SEL_V 0x3F +#define GPIO_FUNC210_IN_SEL_S 0 + +#define GPIO_FUNC211_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x047c) +/* GPIO_SIG211_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG211_IN_SEL (BIT(7)) +#define GPIO_SIG211_IN_SEL_M (BIT(7)) +#define GPIO_SIG211_IN_SEL_V 0x1 +#define GPIO_SIG211_IN_SEL_S 7 +/* GPIO_FUNC211_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC211_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC211_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC211_IN_INV_SEL_V 0x1 +#define GPIO_FUNC211_IN_INV_SEL_S 6 +/* GPIO_FUNC211_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC211_IN_SEL 0x0000003F +#define GPIO_FUNC211_IN_SEL_M ((GPIO_FUNC211_IN_SEL_V)<<(GPIO_FUNC211_IN_SEL_S)) +#define GPIO_FUNC211_IN_SEL_V 0x3F +#define GPIO_FUNC211_IN_SEL_S 0 + +#define GPIO_FUNC212_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0480) +/* GPIO_SIG212_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG212_IN_SEL (BIT(7)) +#define GPIO_SIG212_IN_SEL_M (BIT(7)) +#define GPIO_SIG212_IN_SEL_V 0x1 +#define GPIO_SIG212_IN_SEL_S 7 +/* GPIO_FUNC212_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC212_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC212_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC212_IN_INV_SEL_V 0x1 +#define GPIO_FUNC212_IN_INV_SEL_S 6 +/* GPIO_FUNC212_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC212_IN_SEL 0x0000003F +#define GPIO_FUNC212_IN_SEL_M ((GPIO_FUNC212_IN_SEL_V)<<(GPIO_FUNC212_IN_SEL_S)) +#define GPIO_FUNC212_IN_SEL_V 0x3F +#define GPIO_FUNC212_IN_SEL_S 0 + +#define GPIO_FUNC213_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0484) +/* GPIO_SIG213_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG213_IN_SEL (BIT(7)) +#define GPIO_SIG213_IN_SEL_M (BIT(7)) +#define GPIO_SIG213_IN_SEL_V 0x1 +#define GPIO_SIG213_IN_SEL_S 7 +/* GPIO_FUNC213_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC213_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC213_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC213_IN_INV_SEL_V 0x1 +#define GPIO_FUNC213_IN_INV_SEL_S 6 +/* GPIO_FUNC213_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC213_IN_SEL 0x0000003F +#define GPIO_FUNC213_IN_SEL_M ((GPIO_FUNC213_IN_SEL_V)<<(GPIO_FUNC213_IN_SEL_S)) +#define GPIO_FUNC213_IN_SEL_V 0x3F +#define GPIO_FUNC213_IN_SEL_S 0 + +#define GPIO_FUNC214_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0488) +/* GPIO_SIG214_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG214_IN_SEL (BIT(7)) +#define GPIO_SIG214_IN_SEL_M (BIT(7)) +#define GPIO_SIG214_IN_SEL_V 0x1 +#define GPIO_SIG214_IN_SEL_S 7 +/* GPIO_FUNC214_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC214_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC214_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC214_IN_INV_SEL_V 0x1 +#define GPIO_FUNC214_IN_INV_SEL_S 6 +/* GPIO_FUNC214_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC214_IN_SEL 0x0000003F +#define GPIO_FUNC214_IN_SEL_M ((GPIO_FUNC214_IN_SEL_V)<<(GPIO_FUNC214_IN_SEL_S)) +#define GPIO_FUNC214_IN_SEL_V 0x3F +#define GPIO_FUNC214_IN_SEL_S 0 + +#define GPIO_FUNC215_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x048c) +/* GPIO_SIG215_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG215_IN_SEL (BIT(7)) +#define GPIO_SIG215_IN_SEL_M (BIT(7)) +#define GPIO_SIG215_IN_SEL_V 0x1 +#define GPIO_SIG215_IN_SEL_S 7 +/* GPIO_FUNC215_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC215_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC215_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC215_IN_INV_SEL_V 0x1 +#define GPIO_FUNC215_IN_INV_SEL_S 6 +/* GPIO_FUNC215_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC215_IN_SEL 0x0000003F +#define GPIO_FUNC215_IN_SEL_M ((GPIO_FUNC215_IN_SEL_V)<<(GPIO_FUNC215_IN_SEL_S)) +#define GPIO_FUNC215_IN_SEL_V 0x3F +#define GPIO_FUNC215_IN_SEL_S 0 + +#define GPIO_FUNC216_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0490) +/* GPIO_SIG216_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG216_IN_SEL (BIT(7)) +#define GPIO_SIG216_IN_SEL_M (BIT(7)) +#define GPIO_SIG216_IN_SEL_V 0x1 +#define GPIO_SIG216_IN_SEL_S 7 +/* GPIO_FUNC216_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC216_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC216_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC216_IN_INV_SEL_V 0x1 +#define GPIO_FUNC216_IN_INV_SEL_S 6 +/* GPIO_FUNC216_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC216_IN_SEL 0x0000003F +#define GPIO_FUNC216_IN_SEL_M ((GPIO_FUNC216_IN_SEL_V)<<(GPIO_FUNC216_IN_SEL_S)) +#define GPIO_FUNC216_IN_SEL_V 0x3F +#define GPIO_FUNC216_IN_SEL_S 0 + +#define GPIO_FUNC217_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0494) +/* GPIO_SIG217_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG217_IN_SEL (BIT(7)) +#define GPIO_SIG217_IN_SEL_M (BIT(7)) +#define GPIO_SIG217_IN_SEL_V 0x1 +#define GPIO_SIG217_IN_SEL_S 7 +/* GPIO_FUNC217_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC217_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC217_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC217_IN_INV_SEL_V 0x1 +#define GPIO_FUNC217_IN_INV_SEL_S 6 +/* GPIO_FUNC217_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC217_IN_SEL 0x0000003F +#define GPIO_FUNC217_IN_SEL_M ((GPIO_FUNC217_IN_SEL_V)<<(GPIO_FUNC217_IN_SEL_S)) +#define GPIO_FUNC217_IN_SEL_V 0x3F +#define GPIO_FUNC217_IN_SEL_S 0 + +#define GPIO_FUNC218_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0498) +/* GPIO_SIG218_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG218_IN_SEL (BIT(7)) +#define GPIO_SIG218_IN_SEL_M (BIT(7)) +#define GPIO_SIG218_IN_SEL_V 0x1 +#define GPIO_SIG218_IN_SEL_S 7 +/* GPIO_FUNC218_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC218_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC218_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC218_IN_INV_SEL_V 0x1 +#define GPIO_FUNC218_IN_INV_SEL_S 6 +/* GPIO_FUNC218_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC218_IN_SEL 0x0000003F +#define GPIO_FUNC218_IN_SEL_M ((GPIO_FUNC218_IN_SEL_V)<<(GPIO_FUNC218_IN_SEL_S)) +#define GPIO_FUNC218_IN_SEL_V 0x3F +#define GPIO_FUNC218_IN_SEL_S 0 + +#define GPIO_FUNC219_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x049c) +/* GPIO_SIG219_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG219_IN_SEL (BIT(7)) +#define GPIO_SIG219_IN_SEL_M (BIT(7)) +#define GPIO_SIG219_IN_SEL_V 0x1 +#define GPIO_SIG219_IN_SEL_S 7 +/* GPIO_FUNC219_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC219_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC219_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC219_IN_INV_SEL_V 0x1 +#define GPIO_FUNC219_IN_INV_SEL_S 6 +/* GPIO_FUNC219_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC219_IN_SEL 0x0000003F +#define GPIO_FUNC219_IN_SEL_M ((GPIO_FUNC219_IN_SEL_V)<<(GPIO_FUNC219_IN_SEL_S)) +#define GPIO_FUNC219_IN_SEL_V 0x3F +#define GPIO_FUNC219_IN_SEL_S 0 + +#define GPIO_FUNC220_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04a0) +/* GPIO_SIG220_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG220_IN_SEL (BIT(7)) +#define GPIO_SIG220_IN_SEL_M (BIT(7)) +#define GPIO_SIG220_IN_SEL_V 0x1 +#define GPIO_SIG220_IN_SEL_S 7 +/* GPIO_FUNC220_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC220_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC220_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC220_IN_INV_SEL_V 0x1 +#define GPIO_FUNC220_IN_INV_SEL_S 6 +/* GPIO_FUNC220_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC220_IN_SEL 0x0000003F +#define GPIO_FUNC220_IN_SEL_M ((GPIO_FUNC220_IN_SEL_V)<<(GPIO_FUNC220_IN_SEL_S)) +#define GPIO_FUNC220_IN_SEL_V 0x3F +#define GPIO_FUNC220_IN_SEL_S 0 + +#define GPIO_FUNC221_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04a4) +/* GPIO_SIG221_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG221_IN_SEL (BIT(7)) +#define GPIO_SIG221_IN_SEL_M (BIT(7)) +#define GPIO_SIG221_IN_SEL_V 0x1 +#define GPIO_SIG221_IN_SEL_S 7 +/* GPIO_FUNC221_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC221_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC221_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC221_IN_INV_SEL_V 0x1 +#define GPIO_FUNC221_IN_INV_SEL_S 6 +/* GPIO_FUNC221_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC221_IN_SEL 0x0000003F +#define GPIO_FUNC221_IN_SEL_M ((GPIO_FUNC221_IN_SEL_V)<<(GPIO_FUNC221_IN_SEL_S)) +#define GPIO_FUNC221_IN_SEL_V 0x3F +#define GPIO_FUNC221_IN_SEL_S 0 + +#define GPIO_FUNC222_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04a8) +/* GPIO_SIG222_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG222_IN_SEL (BIT(7)) +#define GPIO_SIG222_IN_SEL_M (BIT(7)) +#define GPIO_SIG222_IN_SEL_V 0x1 +#define GPIO_SIG222_IN_SEL_S 7 +/* GPIO_FUNC222_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC222_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC222_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC222_IN_INV_SEL_V 0x1 +#define GPIO_FUNC222_IN_INV_SEL_S 6 +/* GPIO_FUNC222_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC222_IN_SEL 0x0000003F +#define GPIO_FUNC222_IN_SEL_M ((GPIO_FUNC222_IN_SEL_V)<<(GPIO_FUNC222_IN_SEL_S)) +#define GPIO_FUNC222_IN_SEL_V 0x3F +#define GPIO_FUNC222_IN_SEL_S 0 + +#define GPIO_FUNC223_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04ac) +/* GPIO_SIG223_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG223_IN_SEL (BIT(7)) +#define GPIO_SIG223_IN_SEL_M (BIT(7)) +#define GPIO_SIG223_IN_SEL_V 0x1 +#define GPIO_SIG223_IN_SEL_S 7 +/* GPIO_FUNC223_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC223_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC223_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC223_IN_INV_SEL_V 0x1 +#define GPIO_FUNC223_IN_INV_SEL_S 6 +/* GPIO_FUNC223_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC223_IN_SEL 0x0000003F +#define GPIO_FUNC223_IN_SEL_M ((GPIO_FUNC223_IN_SEL_V)<<(GPIO_FUNC223_IN_SEL_S)) +#define GPIO_FUNC223_IN_SEL_V 0x3F +#define GPIO_FUNC223_IN_SEL_S 0 + +#define GPIO_FUNC224_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04b0) +/* GPIO_SIG224_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG224_IN_SEL (BIT(7)) +#define GPIO_SIG224_IN_SEL_M (BIT(7)) +#define GPIO_SIG224_IN_SEL_V 0x1 +#define GPIO_SIG224_IN_SEL_S 7 +/* GPIO_FUNC224_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC224_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC224_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC224_IN_INV_SEL_V 0x1 +#define GPIO_FUNC224_IN_INV_SEL_S 6 +/* GPIO_FUNC224_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC224_IN_SEL 0x0000003F +#define GPIO_FUNC224_IN_SEL_M ((GPIO_FUNC224_IN_SEL_V)<<(GPIO_FUNC224_IN_SEL_S)) +#define GPIO_FUNC224_IN_SEL_V 0x3F +#define GPIO_FUNC224_IN_SEL_S 0 + +#define GPIO_FUNC225_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04b4) +/* GPIO_SIG225_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG225_IN_SEL (BIT(7)) +#define GPIO_SIG225_IN_SEL_M (BIT(7)) +#define GPIO_SIG225_IN_SEL_V 0x1 +#define GPIO_SIG225_IN_SEL_S 7 +/* GPIO_FUNC225_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC225_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC225_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC225_IN_INV_SEL_V 0x1 +#define GPIO_FUNC225_IN_INV_SEL_S 6 +/* GPIO_FUNC225_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC225_IN_SEL 0x0000003F +#define GPIO_FUNC225_IN_SEL_M ((GPIO_FUNC225_IN_SEL_V)<<(GPIO_FUNC225_IN_SEL_S)) +#define GPIO_FUNC225_IN_SEL_V 0x3F +#define GPIO_FUNC225_IN_SEL_S 0 + +#define GPIO_FUNC226_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04b8) +/* GPIO_SIG226_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG226_IN_SEL (BIT(7)) +#define GPIO_SIG226_IN_SEL_M (BIT(7)) +#define GPIO_SIG226_IN_SEL_V 0x1 +#define GPIO_SIG226_IN_SEL_S 7 +/* GPIO_FUNC226_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC226_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC226_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC226_IN_INV_SEL_V 0x1 +#define GPIO_FUNC226_IN_INV_SEL_S 6 +/* GPIO_FUNC226_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC226_IN_SEL 0x0000003F +#define GPIO_FUNC226_IN_SEL_M ((GPIO_FUNC226_IN_SEL_V)<<(GPIO_FUNC226_IN_SEL_S)) +#define GPIO_FUNC226_IN_SEL_V 0x3F +#define GPIO_FUNC226_IN_SEL_S 0 + +#define GPIO_FUNC227_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04bc) +/* GPIO_SIG227_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG227_IN_SEL (BIT(7)) +#define GPIO_SIG227_IN_SEL_M (BIT(7)) +#define GPIO_SIG227_IN_SEL_V 0x1 +#define GPIO_SIG227_IN_SEL_S 7 +/* GPIO_FUNC227_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC227_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC227_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC227_IN_INV_SEL_V 0x1 +#define GPIO_FUNC227_IN_INV_SEL_S 6 +/* GPIO_FUNC227_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC227_IN_SEL 0x0000003F +#define GPIO_FUNC227_IN_SEL_M ((GPIO_FUNC227_IN_SEL_V)<<(GPIO_FUNC227_IN_SEL_S)) +#define GPIO_FUNC227_IN_SEL_V 0x3F +#define GPIO_FUNC227_IN_SEL_S 0 + +#define GPIO_FUNC228_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04c0) +/* GPIO_SIG228_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG228_IN_SEL (BIT(7)) +#define GPIO_SIG228_IN_SEL_M (BIT(7)) +#define GPIO_SIG228_IN_SEL_V 0x1 +#define GPIO_SIG228_IN_SEL_S 7 +/* GPIO_FUNC228_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC228_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC228_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC228_IN_INV_SEL_V 0x1 +#define GPIO_FUNC228_IN_INV_SEL_S 6 +/* GPIO_FUNC228_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC228_IN_SEL 0x0000003F +#define GPIO_FUNC228_IN_SEL_M ((GPIO_FUNC228_IN_SEL_V)<<(GPIO_FUNC228_IN_SEL_S)) +#define GPIO_FUNC228_IN_SEL_V 0x3F +#define GPIO_FUNC228_IN_SEL_S 0 + +#define GPIO_FUNC229_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04c4) +/* GPIO_SIG229_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG229_IN_SEL (BIT(7)) +#define GPIO_SIG229_IN_SEL_M (BIT(7)) +#define GPIO_SIG229_IN_SEL_V 0x1 +#define GPIO_SIG229_IN_SEL_S 7 +/* GPIO_FUNC229_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC229_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC229_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC229_IN_INV_SEL_V 0x1 +#define GPIO_FUNC229_IN_INV_SEL_S 6 +/* GPIO_FUNC229_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC229_IN_SEL 0x0000003F +#define GPIO_FUNC229_IN_SEL_M ((GPIO_FUNC229_IN_SEL_V)<<(GPIO_FUNC229_IN_SEL_S)) +#define GPIO_FUNC229_IN_SEL_V 0x3F +#define GPIO_FUNC229_IN_SEL_S 0 + +#define GPIO_FUNC230_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04c8) +/* GPIO_SIG230_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG230_IN_SEL (BIT(7)) +#define GPIO_SIG230_IN_SEL_M (BIT(7)) +#define GPIO_SIG230_IN_SEL_V 0x1 +#define GPIO_SIG230_IN_SEL_S 7 +/* GPIO_FUNC230_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC230_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC230_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC230_IN_INV_SEL_V 0x1 +#define GPIO_FUNC230_IN_INV_SEL_S 6 +/* GPIO_FUNC230_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC230_IN_SEL 0x0000003F +#define GPIO_FUNC230_IN_SEL_M ((GPIO_FUNC230_IN_SEL_V)<<(GPIO_FUNC230_IN_SEL_S)) +#define GPIO_FUNC230_IN_SEL_V 0x3F +#define GPIO_FUNC230_IN_SEL_S 0 + +#define GPIO_FUNC231_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04cc) +/* GPIO_SIG231_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG231_IN_SEL (BIT(7)) +#define GPIO_SIG231_IN_SEL_M (BIT(7)) +#define GPIO_SIG231_IN_SEL_V 0x1 +#define GPIO_SIG231_IN_SEL_S 7 +/* GPIO_FUNC231_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC231_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC231_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC231_IN_INV_SEL_V 0x1 +#define GPIO_FUNC231_IN_INV_SEL_S 6 +/* GPIO_FUNC231_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC231_IN_SEL 0x0000003F +#define GPIO_FUNC231_IN_SEL_M ((GPIO_FUNC231_IN_SEL_V)<<(GPIO_FUNC231_IN_SEL_S)) +#define GPIO_FUNC231_IN_SEL_V 0x3F +#define GPIO_FUNC231_IN_SEL_S 0 + +#define GPIO_FUNC232_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04d0) +/* GPIO_SIG232_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG232_IN_SEL (BIT(7)) +#define GPIO_SIG232_IN_SEL_M (BIT(7)) +#define GPIO_SIG232_IN_SEL_V 0x1 +#define GPIO_SIG232_IN_SEL_S 7 +/* GPIO_FUNC232_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC232_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC232_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC232_IN_INV_SEL_V 0x1 +#define GPIO_FUNC232_IN_INV_SEL_S 6 +/* GPIO_FUNC232_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC232_IN_SEL 0x0000003F +#define GPIO_FUNC232_IN_SEL_M ((GPIO_FUNC232_IN_SEL_V)<<(GPIO_FUNC232_IN_SEL_S)) +#define GPIO_FUNC232_IN_SEL_V 0x3F +#define GPIO_FUNC232_IN_SEL_S 0 + +#define GPIO_FUNC233_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04d4) +/* GPIO_SIG233_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG233_IN_SEL (BIT(7)) +#define GPIO_SIG233_IN_SEL_M (BIT(7)) +#define GPIO_SIG233_IN_SEL_V 0x1 +#define GPIO_SIG233_IN_SEL_S 7 +/* GPIO_FUNC233_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC233_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC233_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC233_IN_INV_SEL_V 0x1 +#define GPIO_FUNC233_IN_INV_SEL_S 6 +/* GPIO_FUNC233_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC233_IN_SEL 0x0000003F +#define GPIO_FUNC233_IN_SEL_M ((GPIO_FUNC233_IN_SEL_V)<<(GPIO_FUNC233_IN_SEL_S)) +#define GPIO_FUNC233_IN_SEL_V 0x3F +#define GPIO_FUNC233_IN_SEL_S 0 + +#define GPIO_FUNC234_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04d8) +/* GPIO_SIG234_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG234_IN_SEL (BIT(7)) +#define GPIO_SIG234_IN_SEL_M (BIT(7)) +#define GPIO_SIG234_IN_SEL_V 0x1 +#define GPIO_SIG234_IN_SEL_S 7 +/* GPIO_FUNC234_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC234_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC234_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC234_IN_INV_SEL_V 0x1 +#define GPIO_FUNC234_IN_INV_SEL_S 6 +/* GPIO_FUNC234_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC234_IN_SEL 0x0000003F +#define GPIO_FUNC234_IN_SEL_M ((GPIO_FUNC234_IN_SEL_V)<<(GPIO_FUNC234_IN_SEL_S)) +#define GPIO_FUNC234_IN_SEL_V 0x3F +#define GPIO_FUNC234_IN_SEL_S 0 + +#define GPIO_FUNC235_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04dc) +/* GPIO_SIG235_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG235_IN_SEL (BIT(7)) +#define GPIO_SIG235_IN_SEL_M (BIT(7)) +#define GPIO_SIG235_IN_SEL_V 0x1 +#define GPIO_SIG235_IN_SEL_S 7 +/* GPIO_FUNC235_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC235_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC235_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC235_IN_INV_SEL_V 0x1 +#define GPIO_FUNC235_IN_INV_SEL_S 6 +/* GPIO_FUNC235_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC235_IN_SEL 0x0000003F +#define GPIO_FUNC235_IN_SEL_M ((GPIO_FUNC235_IN_SEL_V)<<(GPIO_FUNC235_IN_SEL_S)) +#define GPIO_FUNC235_IN_SEL_V 0x3F +#define GPIO_FUNC235_IN_SEL_S 0 + +#define GPIO_FUNC236_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04e0) +/* GPIO_SIG236_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG236_IN_SEL (BIT(7)) +#define GPIO_SIG236_IN_SEL_M (BIT(7)) +#define GPIO_SIG236_IN_SEL_V 0x1 +#define GPIO_SIG236_IN_SEL_S 7 +/* GPIO_FUNC236_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC236_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC236_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC236_IN_INV_SEL_V 0x1 +#define GPIO_FUNC236_IN_INV_SEL_S 6 +/* GPIO_FUNC236_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC236_IN_SEL 0x0000003F +#define GPIO_FUNC236_IN_SEL_M ((GPIO_FUNC236_IN_SEL_V)<<(GPIO_FUNC236_IN_SEL_S)) +#define GPIO_FUNC236_IN_SEL_V 0x3F +#define GPIO_FUNC236_IN_SEL_S 0 + +#define GPIO_FUNC237_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04e4) +/* GPIO_SIG237_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG237_IN_SEL (BIT(7)) +#define GPIO_SIG237_IN_SEL_M (BIT(7)) +#define GPIO_SIG237_IN_SEL_V 0x1 +#define GPIO_SIG237_IN_SEL_S 7 +/* GPIO_FUNC237_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC237_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC237_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC237_IN_INV_SEL_V 0x1 +#define GPIO_FUNC237_IN_INV_SEL_S 6 +/* GPIO_FUNC237_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC237_IN_SEL 0x0000003F +#define GPIO_FUNC237_IN_SEL_M ((GPIO_FUNC237_IN_SEL_V)<<(GPIO_FUNC237_IN_SEL_S)) +#define GPIO_FUNC237_IN_SEL_V 0x3F +#define GPIO_FUNC237_IN_SEL_S 0 + +#define GPIO_FUNC238_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04e8) +/* GPIO_SIG238_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG238_IN_SEL (BIT(7)) +#define GPIO_SIG238_IN_SEL_M (BIT(7)) +#define GPIO_SIG238_IN_SEL_V 0x1 +#define GPIO_SIG238_IN_SEL_S 7 +/* GPIO_FUNC238_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC238_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC238_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC238_IN_INV_SEL_V 0x1 +#define GPIO_FUNC238_IN_INV_SEL_S 6 +/* GPIO_FUNC238_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC238_IN_SEL 0x0000003F +#define GPIO_FUNC238_IN_SEL_M ((GPIO_FUNC238_IN_SEL_V)<<(GPIO_FUNC238_IN_SEL_S)) +#define GPIO_FUNC238_IN_SEL_V 0x3F +#define GPIO_FUNC238_IN_SEL_S 0 + +#define GPIO_FUNC239_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04ec) +/* GPIO_SIG239_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG239_IN_SEL (BIT(7)) +#define GPIO_SIG239_IN_SEL_M (BIT(7)) +#define GPIO_SIG239_IN_SEL_V 0x1 +#define GPIO_SIG239_IN_SEL_S 7 +/* GPIO_FUNC239_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC239_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC239_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC239_IN_INV_SEL_V 0x1 +#define GPIO_FUNC239_IN_INV_SEL_S 6 +/* GPIO_FUNC239_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC239_IN_SEL 0x0000003F +#define GPIO_FUNC239_IN_SEL_M ((GPIO_FUNC239_IN_SEL_V)<<(GPIO_FUNC239_IN_SEL_S)) +#define GPIO_FUNC239_IN_SEL_V 0x3F +#define GPIO_FUNC239_IN_SEL_S 0 + +#define GPIO_FUNC240_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04f0) +/* GPIO_SIG240_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG240_IN_SEL (BIT(7)) +#define GPIO_SIG240_IN_SEL_M (BIT(7)) +#define GPIO_SIG240_IN_SEL_V 0x1 +#define GPIO_SIG240_IN_SEL_S 7 +/* GPIO_FUNC240_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC240_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC240_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC240_IN_INV_SEL_V 0x1 +#define GPIO_FUNC240_IN_INV_SEL_S 6 +/* GPIO_FUNC240_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC240_IN_SEL 0x0000003F +#define GPIO_FUNC240_IN_SEL_M ((GPIO_FUNC240_IN_SEL_V)<<(GPIO_FUNC240_IN_SEL_S)) +#define GPIO_FUNC240_IN_SEL_V 0x3F +#define GPIO_FUNC240_IN_SEL_S 0 + +#define GPIO_FUNC241_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04f4) +/* GPIO_SIG241_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG241_IN_SEL (BIT(7)) +#define GPIO_SIG241_IN_SEL_M (BIT(7)) +#define GPIO_SIG241_IN_SEL_V 0x1 +#define GPIO_SIG241_IN_SEL_S 7 +/* GPIO_FUNC241_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC241_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC241_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC241_IN_INV_SEL_V 0x1 +#define GPIO_FUNC241_IN_INV_SEL_S 6 +/* GPIO_FUNC241_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC241_IN_SEL 0x0000003F +#define GPIO_FUNC241_IN_SEL_M ((GPIO_FUNC241_IN_SEL_V)<<(GPIO_FUNC241_IN_SEL_S)) +#define GPIO_FUNC241_IN_SEL_V 0x3F +#define GPIO_FUNC241_IN_SEL_S 0 + +#define GPIO_FUNC242_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04f8) +/* GPIO_SIG242_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG242_IN_SEL (BIT(7)) +#define GPIO_SIG242_IN_SEL_M (BIT(7)) +#define GPIO_SIG242_IN_SEL_V 0x1 +#define GPIO_SIG242_IN_SEL_S 7 +/* GPIO_FUNC242_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC242_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC242_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC242_IN_INV_SEL_V 0x1 +#define GPIO_FUNC242_IN_INV_SEL_S 6 +/* GPIO_FUNC242_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC242_IN_SEL 0x0000003F +#define GPIO_FUNC242_IN_SEL_M ((GPIO_FUNC242_IN_SEL_V)<<(GPIO_FUNC242_IN_SEL_S)) +#define GPIO_FUNC242_IN_SEL_V 0x3F +#define GPIO_FUNC242_IN_SEL_S 0 + +#define GPIO_FUNC243_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x04fc) +/* GPIO_SIG243_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG243_IN_SEL (BIT(7)) +#define GPIO_SIG243_IN_SEL_M (BIT(7)) +#define GPIO_SIG243_IN_SEL_V 0x1 +#define GPIO_SIG243_IN_SEL_S 7 +/* GPIO_FUNC243_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC243_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC243_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC243_IN_INV_SEL_V 0x1 +#define GPIO_FUNC243_IN_INV_SEL_S 6 +/* GPIO_FUNC243_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC243_IN_SEL 0x0000003F +#define GPIO_FUNC243_IN_SEL_M ((GPIO_FUNC243_IN_SEL_V)<<(GPIO_FUNC243_IN_SEL_S)) +#define GPIO_FUNC243_IN_SEL_V 0x3F +#define GPIO_FUNC243_IN_SEL_S 0 + +#define GPIO_FUNC244_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0500) +/* GPIO_SIG244_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG244_IN_SEL (BIT(7)) +#define GPIO_SIG244_IN_SEL_M (BIT(7)) +#define GPIO_SIG244_IN_SEL_V 0x1 +#define GPIO_SIG244_IN_SEL_S 7 +/* GPIO_FUNC244_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC244_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC244_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC244_IN_INV_SEL_V 0x1 +#define GPIO_FUNC244_IN_INV_SEL_S 6 +/* GPIO_FUNC244_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC244_IN_SEL 0x0000003F +#define GPIO_FUNC244_IN_SEL_M ((GPIO_FUNC244_IN_SEL_V)<<(GPIO_FUNC244_IN_SEL_S)) +#define GPIO_FUNC244_IN_SEL_V 0x3F +#define GPIO_FUNC244_IN_SEL_S 0 + +#define GPIO_FUNC245_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0504) +/* GPIO_SIG245_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG245_IN_SEL (BIT(7)) +#define GPIO_SIG245_IN_SEL_M (BIT(7)) +#define GPIO_SIG245_IN_SEL_V 0x1 +#define GPIO_SIG245_IN_SEL_S 7 +/* GPIO_FUNC245_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC245_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC245_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC245_IN_INV_SEL_V 0x1 +#define GPIO_FUNC245_IN_INV_SEL_S 6 +/* GPIO_FUNC245_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC245_IN_SEL 0x0000003F +#define GPIO_FUNC245_IN_SEL_M ((GPIO_FUNC245_IN_SEL_V)<<(GPIO_FUNC245_IN_SEL_S)) +#define GPIO_FUNC245_IN_SEL_V 0x3F +#define GPIO_FUNC245_IN_SEL_S 0 + +#define GPIO_FUNC246_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0508) +/* GPIO_SIG246_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG246_IN_SEL (BIT(7)) +#define GPIO_SIG246_IN_SEL_M (BIT(7)) +#define GPIO_SIG246_IN_SEL_V 0x1 +#define GPIO_SIG246_IN_SEL_S 7 +/* GPIO_FUNC246_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC246_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC246_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC246_IN_INV_SEL_V 0x1 +#define GPIO_FUNC246_IN_INV_SEL_S 6 +/* GPIO_FUNC246_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC246_IN_SEL 0x0000003F +#define GPIO_FUNC246_IN_SEL_M ((GPIO_FUNC246_IN_SEL_V)<<(GPIO_FUNC246_IN_SEL_S)) +#define GPIO_FUNC246_IN_SEL_V 0x3F +#define GPIO_FUNC246_IN_SEL_S 0 + +#define GPIO_FUNC247_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x050c) +/* GPIO_SIG247_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG247_IN_SEL (BIT(7)) +#define GPIO_SIG247_IN_SEL_M (BIT(7)) +#define GPIO_SIG247_IN_SEL_V 0x1 +#define GPIO_SIG247_IN_SEL_S 7 +/* GPIO_FUNC247_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC247_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC247_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC247_IN_INV_SEL_V 0x1 +#define GPIO_FUNC247_IN_INV_SEL_S 6 +/* GPIO_FUNC247_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC247_IN_SEL 0x0000003F +#define GPIO_FUNC247_IN_SEL_M ((GPIO_FUNC247_IN_SEL_V)<<(GPIO_FUNC247_IN_SEL_S)) +#define GPIO_FUNC247_IN_SEL_V 0x3F +#define GPIO_FUNC247_IN_SEL_S 0 + +#define GPIO_FUNC248_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0510) +/* GPIO_SIG248_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG248_IN_SEL (BIT(7)) +#define GPIO_SIG248_IN_SEL_M (BIT(7)) +#define GPIO_SIG248_IN_SEL_V 0x1 +#define GPIO_SIG248_IN_SEL_S 7 +/* GPIO_FUNC248_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC248_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC248_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC248_IN_INV_SEL_V 0x1 +#define GPIO_FUNC248_IN_INV_SEL_S 6 +/* GPIO_FUNC248_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC248_IN_SEL 0x0000003F +#define GPIO_FUNC248_IN_SEL_M ((GPIO_FUNC248_IN_SEL_V)<<(GPIO_FUNC248_IN_SEL_S)) +#define GPIO_FUNC248_IN_SEL_V 0x3F +#define GPIO_FUNC248_IN_SEL_S 0 + +#define GPIO_FUNC249_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0514) +/* GPIO_SIG249_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG249_IN_SEL (BIT(7)) +#define GPIO_SIG249_IN_SEL_M (BIT(7)) +#define GPIO_SIG249_IN_SEL_V 0x1 +#define GPIO_SIG249_IN_SEL_S 7 +/* GPIO_FUNC249_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC249_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC249_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC249_IN_INV_SEL_V 0x1 +#define GPIO_FUNC249_IN_INV_SEL_S 6 +/* GPIO_FUNC249_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC249_IN_SEL 0x0000003F +#define GPIO_FUNC249_IN_SEL_M ((GPIO_FUNC249_IN_SEL_V)<<(GPIO_FUNC249_IN_SEL_S)) +#define GPIO_FUNC249_IN_SEL_V 0x3F +#define GPIO_FUNC249_IN_SEL_S 0 + +#define GPIO_FUNC250_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0518) +/* GPIO_SIG250_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG250_IN_SEL (BIT(7)) +#define GPIO_SIG250_IN_SEL_M (BIT(7)) +#define GPIO_SIG250_IN_SEL_V 0x1 +#define GPIO_SIG250_IN_SEL_S 7 +/* GPIO_FUNC250_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC250_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC250_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC250_IN_INV_SEL_V 0x1 +#define GPIO_FUNC250_IN_INV_SEL_S 6 +/* GPIO_FUNC250_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC250_IN_SEL 0x0000003F +#define GPIO_FUNC250_IN_SEL_M ((GPIO_FUNC250_IN_SEL_V)<<(GPIO_FUNC250_IN_SEL_S)) +#define GPIO_FUNC250_IN_SEL_V 0x3F +#define GPIO_FUNC250_IN_SEL_S 0 + +#define GPIO_FUNC251_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x051c) +/* GPIO_SIG251_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG251_IN_SEL (BIT(7)) +#define GPIO_SIG251_IN_SEL_M (BIT(7)) +#define GPIO_SIG251_IN_SEL_V 0x1 +#define GPIO_SIG251_IN_SEL_S 7 +/* GPIO_FUNC251_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC251_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC251_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC251_IN_INV_SEL_V 0x1 +#define GPIO_FUNC251_IN_INV_SEL_S 6 +/* GPIO_FUNC251_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC251_IN_SEL 0x0000003F +#define GPIO_FUNC251_IN_SEL_M ((GPIO_FUNC251_IN_SEL_V)<<(GPIO_FUNC251_IN_SEL_S)) +#define GPIO_FUNC251_IN_SEL_V 0x3F +#define GPIO_FUNC251_IN_SEL_S 0 + +#define GPIO_FUNC252_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0520) +/* GPIO_SIG252_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG252_IN_SEL (BIT(7)) +#define GPIO_SIG252_IN_SEL_M (BIT(7)) +#define GPIO_SIG252_IN_SEL_V 0x1 +#define GPIO_SIG252_IN_SEL_S 7 +/* GPIO_FUNC252_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC252_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC252_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC252_IN_INV_SEL_V 0x1 +#define GPIO_FUNC252_IN_INV_SEL_S 6 +/* GPIO_FUNC252_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC252_IN_SEL 0x0000003F +#define GPIO_FUNC252_IN_SEL_M ((GPIO_FUNC252_IN_SEL_V)<<(GPIO_FUNC252_IN_SEL_S)) +#define GPIO_FUNC252_IN_SEL_V 0x3F +#define GPIO_FUNC252_IN_SEL_S 0 + +#define GPIO_FUNC253_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0524) +/* GPIO_SIG253_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG253_IN_SEL (BIT(7)) +#define GPIO_SIG253_IN_SEL_M (BIT(7)) +#define GPIO_SIG253_IN_SEL_V 0x1 +#define GPIO_SIG253_IN_SEL_S 7 +/* GPIO_FUNC253_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC253_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC253_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC253_IN_INV_SEL_V 0x1 +#define GPIO_FUNC253_IN_INV_SEL_S 6 +/* GPIO_FUNC253_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC253_IN_SEL 0x0000003F +#define GPIO_FUNC253_IN_SEL_M ((GPIO_FUNC253_IN_SEL_V)<<(GPIO_FUNC253_IN_SEL_S)) +#define GPIO_FUNC253_IN_SEL_V 0x3F +#define GPIO_FUNC253_IN_SEL_S 0 + +#define GPIO_FUNC254_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0528) +/* GPIO_SIG254_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG254_IN_SEL (BIT(7)) +#define GPIO_SIG254_IN_SEL_M (BIT(7)) +#define GPIO_SIG254_IN_SEL_V 0x1 +#define GPIO_SIG254_IN_SEL_S 7 +/* GPIO_FUNC254_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC254_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC254_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC254_IN_INV_SEL_V 0x1 +#define GPIO_FUNC254_IN_INV_SEL_S 6 +/* GPIO_FUNC254_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC254_IN_SEL 0x0000003F +#define GPIO_FUNC254_IN_SEL_M ((GPIO_FUNC254_IN_SEL_V)<<(GPIO_FUNC254_IN_SEL_S)) +#define GPIO_FUNC254_IN_SEL_V 0x3F +#define GPIO_FUNC254_IN_SEL_S 0 + +#define GPIO_FUNC255_IN_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x052c) +/* GPIO_SIG255_IN_SEL : R/W ;bitpos:[7] ;default: x ; */ +/*description: if the slow signal bypass the io matrix or not if you want setting + the value to 1*/ +#define GPIO_SIG255_IN_SEL (BIT(7)) +#define GPIO_SIG255_IN_SEL_M (BIT(7)) +#define GPIO_SIG255_IN_SEL_V 0x1 +#define GPIO_SIG255_IN_SEL_S 7 +/* GPIO_FUNC255_IN_INV_SEL : R/W ;bitpos:[6] ;default: x ; */ +/*description: revert the value of the input if you want to revert please set the value to 1*/ +#define GPIO_FUNC255_IN_INV_SEL (BIT(6)) +#define GPIO_FUNC255_IN_INV_SEL_M (BIT(6)) +#define GPIO_FUNC255_IN_INV_SEL_V 0x1 +#define GPIO_FUNC255_IN_INV_SEL_S 6 +/* GPIO_FUNC255_IN_SEL : R/W ;bitpos:[5:0] ;default: x ; */ +/*description: select one of the 256 inputs*/ +#define GPIO_FUNC255_IN_SEL 0x0000003F +#define GPIO_FUNC255_IN_SEL_M ((GPIO_FUNC255_IN_SEL_V)<<(GPIO_FUNC255_IN_SEL_S)) +#define GPIO_FUNC255_IN_SEL_V 0x3F +#define GPIO_FUNC255_IN_SEL_S 0 + +#define GPIO_FUNC0_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0530) +/* GPIO_FUNC0_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC0_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC0_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC0_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC0_OEN_INV_SEL_S 11 +/* GPIO_FUNC0_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC0_OEN_SEL (BIT(10)) +#define GPIO_FUNC0_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC0_OEN_SEL_V 0x1 +#define GPIO_FUNC0_OEN_SEL_S 10 +/* GPIO_FUNC0_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC0_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC0_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC0_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC0_OUT_INV_SEL_S 9 +/* GPIO_FUNC0_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC0_OUT_SEL 0x000001FF +#define GPIO_FUNC0_OUT_SEL_M ((GPIO_FUNC0_OUT_SEL_V)<<(GPIO_FUNC0_OUT_SEL_S)) +#define GPIO_FUNC0_OUT_SEL_V 0x1FF +#define GPIO_FUNC0_OUT_SEL_S 0 + +#define GPIO_FUNC1_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0534) +/* GPIO_FUNC1_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC1_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC1_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC1_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC1_OEN_INV_SEL_S 11 +/* GPIO_FUNC1_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC1_OEN_SEL (BIT(10)) +#define GPIO_FUNC1_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC1_OEN_SEL_V 0x1 +#define GPIO_FUNC1_OEN_SEL_S 10 +/* GPIO_FUNC1_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC1_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC1_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC1_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC1_OUT_INV_SEL_S 9 +/* GPIO_FUNC1_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC1_OUT_SEL 0x000001FF +#define GPIO_FUNC1_OUT_SEL_M ((GPIO_FUNC1_OUT_SEL_V)<<(GPIO_FUNC1_OUT_SEL_S)) +#define GPIO_FUNC1_OUT_SEL_V 0x1FF +#define GPIO_FUNC1_OUT_SEL_S 0 + +#define GPIO_FUNC2_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0538) +/* GPIO_FUNC2_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC2_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC2_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC2_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC2_OEN_INV_SEL_S 11 +/* GPIO_FUNC2_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC2_OEN_SEL (BIT(10)) +#define GPIO_FUNC2_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC2_OEN_SEL_V 0x1 +#define GPIO_FUNC2_OEN_SEL_S 10 +/* GPIO_FUNC2_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC2_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC2_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC2_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC2_OUT_INV_SEL_S 9 +/* GPIO_FUNC2_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC2_OUT_SEL 0x000001FF +#define GPIO_FUNC2_OUT_SEL_M ((GPIO_FUNC2_OUT_SEL_V)<<(GPIO_FUNC2_OUT_SEL_S)) +#define GPIO_FUNC2_OUT_SEL_V 0x1FF +#define GPIO_FUNC2_OUT_SEL_S 0 + +#define GPIO_FUNC3_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x053c) +/* GPIO_FUNC3_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC3_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC3_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC3_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC3_OEN_INV_SEL_S 11 +/* GPIO_FUNC3_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC3_OEN_SEL (BIT(10)) +#define GPIO_FUNC3_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC3_OEN_SEL_V 0x1 +#define GPIO_FUNC3_OEN_SEL_S 10 +/* GPIO_FUNC3_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC3_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC3_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC3_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC3_OUT_INV_SEL_S 9 +/* GPIO_FUNC3_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC3_OUT_SEL 0x000001FF +#define GPIO_FUNC3_OUT_SEL_M ((GPIO_FUNC3_OUT_SEL_V)<<(GPIO_FUNC3_OUT_SEL_S)) +#define GPIO_FUNC3_OUT_SEL_V 0x1FF +#define GPIO_FUNC3_OUT_SEL_S 0 + +#define GPIO_FUNC4_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0540) +/* GPIO_FUNC4_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC4_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC4_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC4_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC4_OEN_INV_SEL_S 11 +/* GPIO_FUNC4_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC4_OEN_SEL (BIT(10)) +#define GPIO_FUNC4_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC4_OEN_SEL_V 0x1 +#define GPIO_FUNC4_OEN_SEL_S 10 +/* GPIO_FUNC4_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC4_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC4_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC4_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC4_OUT_INV_SEL_S 9 +/* GPIO_FUNC4_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC4_OUT_SEL 0x000001FF +#define GPIO_FUNC4_OUT_SEL_M ((GPIO_FUNC4_OUT_SEL_V)<<(GPIO_FUNC4_OUT_SEL_S)) +#define GPIO_FUNC4_OUT_SEL_V 0x1FF +#define GPIO_FUNC4_OUT_SEL_S 0 + +#define GPIO_FUNC5_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0544) +/* GPIO_FUNC5_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC5_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC5_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC5_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC5_OEN_INV_SEL_S 11 +/* GPIO_FUNC5_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC5_OEN_SEL (BIT(10)) +#define GPIO_FUNC5_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC5_OEN_SEL_V 0x1 +#define GPIO_FUNC5_OEN_SEL_S 10 +/* GPIO_FUNC5_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC5_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC5_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC5_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC5_OUT_INV_SEL_S 9 +/* GPIO_FUNC5_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC5_OUT_SEL 0x000001FF +#define GPIO_FUNC5_OUT_SEL_M ((GPIO_FUNC5_OUT_SEL_V)<<(GPIO_FUNC5_OUT_SEL_S)) +#define GPIO_FUNC5_OUT_SEL_V 0x1FF +#define GPIO_FUNC5_OUT_SEL_S 0 + +#define GPIO_FUNC6_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0548) +/* GPIO_FUNC6_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC6_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC6_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC6_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC6_OEN_INV_SEL_S 11 +/* GPIO_FUNC6_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC6_OEN_SEL (BIT(10)) +#define GPIO_FUNC6_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC6_OEN_SEL_V 0x1 +#define GPIO_FUNC6_OEN_SEL_S 10 +/* GPIO_FUNC6_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC6_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC6_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC6_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC6_OUT_INV_SEL_S 9 +/* GPIO_FUNC6_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC6_OUT_SEL 0x000001FF +#define GPIO_FUNC6_OUT_SEL_M ((GPIO_FUNC6_OUT_SEL_V)<<(GPIO_FUNC6_OUT_SEL_S)) +#define GPIO_FUNC6_OUT_SEL_V 0x1FF +#define GPIO_FUNC6_OUT_SEL_S 0 + +#define GPIO_FUNC7_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x054c) +/* GPIO_FUNC7_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC7_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC7_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC7_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC7_OEN_INV_SEL_S 11 +/* GPIO_FUNC7_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC7_OEN_SEL (BIT(10)) +#define GPIO_FUNC7_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC7_OEN_SEL_V 0x1 +#define GPIO_FUNC7_OEN_SEL_S 10 +/* GPIO_FUNC7_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC7_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC7_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC7_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC7_OUT_INV_SEL_S 9 +/* GPIO_FUNC7_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC7_OUT_SEL 0x000001FF +#define GPIO_FUNC7_OUT_SEL_M ((GPIO_FUNC7_OUT_SEL_V)<<(GPIO_FUNC7_OUT_SEL_S)) +#define GPIO_FUNC7_OUT_SEL_V 0x1FF +#define GPIO_FUNC7_OUT_SEL_S 0 + +#define GPIO_FUNC8_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0550) +/* GPIO_FUNC8_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC8_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC8_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC8_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC8_OEN_INV_SEL_S 11 +/* GPIO_FUNC8_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC8_OEN_SEL (BIT(10)) +#define GPIO_FUNC8_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC8_OEN_SEL_V 0x1 +#define GPIO_FUNC8_OEN_SEL_S 10 +/* GPIO_FUNC8_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC8_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC8_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC8_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC8_OUT_INV_SEL_S 9 +/* GPIO_FUNC8_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC8_OUT_SEL 0x000001FF +#define GPIO_FUNC8_OUT_SEL_M ((GPIO_FUNC8_OUT_SEL_V)<<(GPIO_FUNC8_OUT_SEL_S)) +#define GPIO_FUNC8_OUT_SEL_V 0x1FF +#define GPIO_FUNC8_OUT_SEL_S 0 + +#define GPIO_FUNC9_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0554) +/* GPIO_FUNC9_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC9_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC9_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC9_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC9_OEN_INV_SEL_S 11 +/* GPIO_FUNC9_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC9_OEN_SEL (BIT(10)) +#define GPIO_FUNC9_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC9_OEN_SEL_V 0x1 +#define GPIO_FUNC9_OEN_SEL_S 10 +/* GPIO_FUNC9_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC9_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC9_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC9_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC9_OUT_INV_SEL_S 9 +/* GPIO_FUNC9_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC9_OUT_SEL 0x000001FF +#define GPIO_FUNC9_OUT_SEL_M ((GPIO_FUNC9_OUT_SEL_V)<<(GPIO_FUNC9_OUT_SEL_S)) +#define GPIO_FUNC9_OUT_SEL_V 0x1FF +#define GPIO_FUNC9_OUT_SEL_S 0 + +#define GPIO_FUNC10_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0558) +/* GPIO_FUNC10_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC10_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC10_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC10_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC10_OEN_INV_SEL_S 11 +/* GPIO_FUNC10_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC10_OEN_SEL (BIT(10)) +#define GPIO_FUNC10_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC10_OEN_SEL_V 0x1 +#define GPIO_FUNC10_OEN_SEL_S 10 +/* GPIO_FUNC10_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC10_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC10_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC10_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC10_OUT_INV_SEL_S 9 +/* GPIO_FUNC10_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC10_OUT_SEL 0x000001FF +#define GPIO_FUNC10_OUT_SEL_M ((GPIO_FUNC10_OUT_SEL_V)<<(GPIO_FUNC10_OUT_SEL_S)) +#define GPIO_FUNC10_OUT_SEL_V 0x1FF +#define GPIO_FUNC10_OUT_SEL_S 0 + +#define GPIO_FUNC11_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x055c) +/* GPIO_FUNC11_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC11_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC11_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC11_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC11_OEN_INV_SEL_S 11 +/* GPIO_FUNC11_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC11_OEN_SEL (BIT(10)) +#define GPIO_FUNC11_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC11_OEN_SEL_V 0x1 +#define GPIO_FUNC11_OEN_SEL_S 10 +/* GPIO_FUNC11_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC11_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC11_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC11_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC11_OUT_INV_SEL_S 9 +/* GPIO_FUNC11_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC11_OUT_SEL 0x000001FF +#define GPIO_FUNC11_OUT_SEL_M ((GPIO_FUNC11_OUT_SEL_V)<<(GPIO_FUNC11_OUT_SEL_S)) +#define GPIO_FUNC11_OUT_SEL_V 0x1FF +#define GPIO_FUNC11_OUT_SEL_S 0 + +#define GPIO_FUNC12_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0560) +/* GPIO_FUNC12_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC12_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC12_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC12_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC12_OEN_INV_SEL_S 11 +/* GPIO_FUNC12_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC12_OEN_SEL (BIT(10)) +#define GPIO_FUNC12_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC12_OEN_SEL_V 0x1 +#define GPIO_FUNC12_OEN_SEL_S 10 +/* GPIO_FUNC12_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC12_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC12_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC12_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC12_OUT_INV_SEL_S 9 +/* GPIO_FUNC12_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC12_OUT_SEL 0x000001FF +#define GPIO_FUNC12_OUT_SEL_M ((GPIO_FUNC12_OUT_SEL_V)<<(GPIO_FUNC12_OUT_SEL_S)) +#define GPIO_FUNC12_OUT_SEL_V 0x1FF +#define GPIO_FUNC12_OUT_SEL_S 0 + +#define GPIO_FUNC13_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0564) +/* GPIO_FUNC13_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC13_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC13_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC13_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC13_OEN_INV_SEL_S 11 +/* GPIO_FUNC13_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC13_OEN_SEL (BIT(10)) +#define GPIO_FUNC13_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC13_OEN_SEL_V 0x1 +#define GPIO_FUNC13_OEN_SEL_S 10 +/* GPIO_FUNC13_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC13_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC13_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC13_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC13_OUT_INV_SEL_S 9 +/* GPIO_FUNC13_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC13_OUT_SEL 0x000001FF +#define GPIO_FUNC13_OUT_SEL_M ((GPIO_FUNC13_OUT_SEL_V)<<(GPIO_FUNC13_OUT_SEL_S)) +#define GPIO_FUNC13_OUT_SEL_V 0x1FF +#define GPIO_FUNC13_OUT_SEL_S 0 + +#define GPIO_FUNC14_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0568) +/* GPIO_FUNC14_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC14_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC14_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC14_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC14_OEN_INV_SEL_S 11 +/* GPIO_FUNC14_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC14_OEN_SEL (BIT(10)) +#define GPIO_FUNC14_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC14_OEN_SEL_V 0x1 +#define GPIO_FUNC14_OEN_SEL_S 10 +/* GPIO_FUNC14_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC14_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC14_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC14_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC14_OUT_INV_SEL_S 9 +/* GPIO_FUNC14_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC14_OUT_SEL 0x000001FF +#define GPIO_FUNC14_OUT_SEL_M ((GPIO_FUNC14_OUT_SEL_V)<<(GPIO_FUNC14_OUT_SEL_S)) +#define GPIO_FUNC14_OUT_SEL_V 0x1FF +#define GPIO_FUNC14_OUT_SEL_S 0 + +#define GPIO_FUNC15_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x056c) +/* GPIO_FUNC15_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC15_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC15_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC15_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC15_OEN_INV_SEL_S 11 +/* GPIO_FUNC15_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC15_OEN_SEL (BIT(10)) +#define GPIO_FUNC15_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC15_OEN_SEL_V 0x1 +#define GPIO_FUNC15_OEN_SEL_S 10 +/* GPIO_FUNC15_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC15_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC15_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC15_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC15_OUT_INV_SEL_S 9 +/* GPIO_FUNC15_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC15_OUT_SEL 0x000001FF +#define GPIO_FUNC15_OUT_SEL_M ((GPIO_FUNC15_OUT_SEL_V)<<(GPIO_FUNC15_OUT_SEL_S)) +#define GPIO_FUNC15_OUT_SEL_V 0x1FF +#define GPIO_FUNC15_OUT_SEL_S 0 + +#define GPIO_FUNC16_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0570) +/* GPIO_FUNC16_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC16_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC16_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC16_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC16_OEN_INV_SEL_S 11 +/* GPIO_FUNC16_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC16_OEN_SEL (BIT(10)) +#define GPIO_FUNC16_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC16_OEN_SEL_V 0x1 +#define GPIO_FUNC16_OEN_SEL_S 10 +/* GPIO_FUNC16_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC16_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC16_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC16_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC16_OUT_INV_SEL_S 9 +/* GPIO_FUNC16_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC16_OUT_SEL 0x000001FF +#define GPIO_FUNC16_OUT_SEL_M ((GPIO_FUNC16_OUT_SEL_V)<<(GPIO_FUNC16_OUT_SEL_S)) +#define GPIO_FUNC16_OUT_SEL_V 0x1FF +#define GPIO_FUNC16_OUT_SEL_S 0 + +#define GPIO_FUNC17_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0574) +/* GPIO_FUNC17_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC17_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC17_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC17_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC17_OEN_INV_SEL_S 11 +/* GPIO_FUNC17_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC17_OEN_SEL (BIT(10)) +#define GPIO_FUNC17_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC17_OEN_SEL_V 0x1 +#define GPIO_FUNC17_OEN_SEL_S 10 +/* GPIO_FUNC17_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC17_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC17_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC17_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC17_OUT_INV_SEL_S 9 +/* GPIO_FUNC17_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC17_OUT_SEL 0x000001FF +#define GPIO_FUNC17_OUT_SEL_M ((GPIO_FUNC17_OUT_SEL_V)<<(GPIO_FUNC17_OUT_SEL_S)) +#define GPIO_FUNC17_OUT_SEL_V 0x1FF +#define GPIO_FUNC17_OUT_SEL_S 0 + +#define GPIO_FUNC18_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0578) +/* GPIO_FUNC18_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC18_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC18_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC18_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC18_OEN_INV_SEL_S 11 +/* GPIO_FUNC18_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC18_OEN_SEL (BIT(10)) +#define GPIO_FUNC18_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC18_OEN_SEL_V 0x1 +#define GPIO_FUNC18_OEN_SEL_S 10 +/* GPIO_FUNC18_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC18_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC18_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC18_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC18_OUT_INV_SEL_S 9 +/* GPIO_FUNC18_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC18_OUT_SEL 0x000001FF +#define GPIO_FUNC18_OUT_SEL_M ((GPIO_FUNC18_OUT_SEL_V)<<(GPIO_FUNC18_OUT_SEL_S)) +#define GPIO_FUNC18_OUT_SEL_V 0x1FF +#define GPIO_FUNC18_OUT_SEL_S 0 + +#define GPIO_FUNC19_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x057c) +/* GPIO_FUNC19_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC19_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC19_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC19_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC19_OEN_INV_SEL_S 11 +/* GPIO_FUNC19_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC19_OEN_SEL (BIT(10)) +#define GPIO_FUNC19_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC19_OEN_SEL_V 0x1 +#define GPIO_FUNC19_OEN_SEL_S 10 +/* GPIO_FUNC19_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC19_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC19_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC19_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC19_OUT_INV_SEL_S 9 +/* GPIO_FUNC19_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC19_OUT_SEL 0x000001FF +#define GPIO_FUNC19_OUT_SEL_M ((GPIO_FUNC19_OUT_SEL_V)<<(GPIO_FUNC19_OUT_SEL_S)) +#define GPIO_FUNC19_OUT_SEL_V 0x1FF +#define GPIO_FUNC19_OUT_SEL_S 0 + +#define GPIO_FUNC20_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0580) +/* GPIO_FUNC20_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC20_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC20_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC20_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC20_OEN_INV_SEL_S 11 +/* GPIO_FUNC20_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC20_OEN_SEL (BIT(10)) +#define GPIO_FUNC20_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC20_OEN_SEL_V 0x1 +#define GPIO_FUNC20_OEN_SEL_S 10 +/* GPIO_FUNC20_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC20_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC20_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC20_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC20_OUT_INV_SEL_S 9 +/* GPIO_FUNC20_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC20_OUT_SEL 0x000001FF +#define GPIO_FUNC20_OUT_SEL_M ((GPIO_FUNC20_OUT_SEL_V)<<(GPIO_FUNC20_OUT_SEL_S)) +#define GPIO_FUNC20_OUT_SEL_V 0x1FF +#define GPIO_FUNC20_OUT_SEL_S 0 + +#define GPIO_FUNC21_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0584) +/* GPIO_FUNC21_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC21_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC21_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC21_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC21_OEN_INV_SEL_S 11 +/* GPIO_FUNC21_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC21_OEN_SEL (BIT(10)) +#define GPIO_FUNC21_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC21_OEN_SEL_V 0x1 +#define GPIO_FUNC21_OEN_SEL_S 10 +/* GPIO_FUNC21_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC21_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC21_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC21_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC21_OUT_INV_SEL_S 9 +/* GPIO_FUNC21_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC21_OUT_SEL 0x000001FF +#define GPIO_FUNC21_OUT_SEL_M ((GPIO_FUNC21_OUT_SEL_V)<<(GPIO_FUNC21_OUT_SEL_S)) +#define GPIO_FUNC21_OUT_SEL_V 0x1FF +#define GPIO_FUNC21_OUT_SEL_S 0 + +#define GPIO_FUNC22_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0588) +/* GPIO_FUNC22_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC22_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC22_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC22_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC22_OEN_INV_SEL_S 11 +/* GPIO_FUNC22_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC22_OEN_SEL (BIT(10)) +#define GPIO_FUNC22_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC22_OEN_SEL_V 0x1 +#define GPIO_FUNC22_OEN_SEL_S 10 +/* GPIO_FUNC22_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC22_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC22_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC22_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC22_OUT_INV_SEL_S 9 +/* GPIO_FUNC22_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC22_OUT_SEL 0x000001FF +#define GPIO_FUNC22_OUT_SEL_M ((GPIO_FUNC22_OUT_SEL_V)<<(GPIO_FUNC22_OUT_SEL_S)) +#define GPIO_FUNC22_OUT_SEL_V 0x1FF +#define GPIO_FUNC22_OUT_SEL_S 0 + +#define GPIO_FUNC23_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x058c) +/* GPIO_FUNC23_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC23_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC23_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC23_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC23_OEN_INV_SEL_S 11 +/* GPIO_FUNC23_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC23_OEN_SEL (BIT(10)) +#define GPIO_FUNC23_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC23_OEN_SEL_V 0x1 +#define GPIO_FUNC23_OEN_SEL_S 10 +/* GPIO_FUNC23_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC23_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC23_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC23_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC23_OUT_INV_SEL_S 9 +/* GPIO_FUNC23_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC23_OUT_SEL 0x000001FF +#define GPIO_FUNC23_OUT_SEL_M ((GPIO_FUNC23_OUT_SEL_V)<<(GPIO_FUNC23_OUT_SEL_S)) +#define GPIO_FUNC23_OUT_SEL_V 0x1FF +#define GPIO_FUNC23_OUT_SEL_S 0 + +#define GPIO_FUNC24_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0590) +/* GPIO_FUNC24_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC24_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC24_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC24_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC24_OEN_INV_SEL_S 11 +/* GPIO_FUNC24_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC24_OEN_SEL (BIT(10)) +#define GPIO_FUNC24_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC24_OEN_SEL_V 0x1 +#define GPIO_FUNC24_OEN_SEL_S 10 +/* GPIO_FUNC24_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC24_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC24_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC24_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC24_OUT_INV_SEL_S 9 +/* GPIO_FUNC24_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC24_OUT_SEL 0x000001FF +#define GPIO_FUNC24_OUT_SEL_M ((GPIO_FUNC24_OUT_SEL_V)<<(GPIO_FUNC24_OUT_SEL_S)) +#define GPIO_FUNC24_OUT_SEL_V 0x1FF +#define GPIO_FUNC24_OUT_SEL_S 0 + +#define GPIO_FUNC25_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0594) +/* GPIO_FUNC25_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC25_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC25_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC25_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC25_OEN_INV_SEL_S 11 +/* GPIO_FUNC25_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC25_OEN_SEL (BIT(10)) +#define GPIO_FUNC25_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC25_OEN_SEL_V 0x1 +#define GPIO_FUNC25_OEN_SEL_S 10 +/* GPIO_FUNC25_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC25_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC25_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC25_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC25_OUT_INV_SEL_S 9 +/* GPIO_FUNC25_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC25_OUT_SEL 0x000001FF +#define GPIO_FUNC25_OUT_SEL_M ((GPIO_FUNC25_OUT_SEL_V)<<(GPIO_FUNC25_OUT_SEL_S)) +#define GPIO_FUNC25_OUT_SEL_V 0x1FF +#define GPIO_FUNC25_OUT_SEL_S 0 + +#define GPIO_FUNC26_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x0598) +/* GPIO_FUNC26_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC26_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC26_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC26_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC26_OEN_INV_SEL_S 11 +/* GPIO_FUNC26_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC26_OEN_SEL (BIT(10)) +#define GPIO_FUNC26_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC26_OEN_SEL_V 0x1 +#define GPIO_FUNC26_OEN_SEL_S 10 +/* GPIO_FUNC26_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC26_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC26_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC26_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC26_OUT_INV_SEL_S 9 +/* GPIO_FUNC26_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC26_OUT_SEL 0x000001FF +#define GPIO_FUNC26_OUT_SEL_M ((GPIO_FUNC26_OUT_SEL_V)<<(GPIO_FUNC26_OUT_SEL_S)) +#define GPIO_FUNC26_OUT_SEL_V 0x1FF +#define GPIO_FUNC26_OUT_SEL_S 0 + +#define GPIO_FUNC27_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x059c) +/* GPIO_FUNC27_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC27_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC27_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC27_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC27_OEN_INV_SEL_S 11 +/* GPIO_FUNC27_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC27_OEN_SEL (BIT(10)) +#define GPIO_FUNC27_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC27_OEN_SEL_V 0x1 +#define GPIO_FUNC27_OEN_SEL_S 10 +/* GPIO_FUNC27_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC27_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC27_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC27_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC27_OUT_INV_SEL_S 9 +/* GPIO_FUNC27_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC27_OUT_SEL 0x000001FF +#define GPIO_FUNC27_OUT_SEL_M ((GPIO_FUNC27_OUT_SEL_V)<<(GPIO_FUNC27_OUT_SEL_S)) +#define GPIO_FUNC27_OUT_SEL_V 0x1FF +#define GPIO_FUNC27_OUT_SEL_S 0 + +#define GPIO_FUNC28_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05a0) +/* GPIO_FUNC28_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC28_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC28_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC28_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC28_OEN_INV_SEL_S 11 +/* GPIO_FUNC28_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC28_OEN_SEL (BIT(10)) +#define GPIO_FUNC28_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC28_OEN_SEL_V 0x1 +#define GPIO_FUNC28_OEN_SEL_S 10 +/* GPIO_FUNC28_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC28_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC28_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC28_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC28_OUT_INV_SEL_S 9 +/* GPIO_FUNC28_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC28_OUT_SEL 0x000001FF +#define GPIO_FUNC28_OUT_SEL_M ((GPIO_FUNC28_OUT_SEL_V)<<(GPIO_FUNC28_OUT_SEL_S)) +#define GPIO_FUNC28_OUT_SEL_V 0x1FF +#define GPIO_FUNC28_OUT_SEL_S 0 + +#define GPIO_FUNC29_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05a4) +/* GPIO_FUNC29_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC29_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC29_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC29_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC29_OEN_INV_SEL_S 11 +/* GPIO_FUNC29_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC29_OEN_SEL (BIT(10)) +#define GPIO_FUNC29_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC29_OEN_SEL_V 0x1 +#define GPIO_FUNC29_OEN_SEL_S 10 +/* GPIO_FUNC29_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC29_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC29_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC29_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC29_OUT_INV_SEL_S 9 +/* GPIO_FUNC29_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC29_OUT_SEL 0x000001FF +#define GPIO_FUNC29_OUT_SEL_M ((GPIO_FUNC29_OUT_SEL_V)<<(GPIO_FUNC29_OUT_SEL_S)) +#define GPIO_FUNC29_OUT_SEL_V 0x1FF +#define GPIO_FUNC29_OUT_SEL_S 0 + +#define GPIO_FUNC30_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05a8) +/* GPIO_FUNC30_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC30_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC30_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC30_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC30_OEN_INV_SEL_S 11 +/* GPIO_FUNC30_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC30_OEN_SEL (BIT(10)) +#define GPIO_FUNC30_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC30_OEN_SEL_V 0x1 +#define GPIO_FUNC30_OEN_SEL_S 10 +/* GPIO_FUNC30_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC30_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC30_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC30_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC30_OUT_INV_SEL_S 9 +/* GPIO_FUNC30_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC30_OUT_SEL 0x000001FF +#define GPIO_FUNC30_OUT_SEL_M ((GPIO_FUNC30_OUT_SEL_V)<<(GPIO_FUNC30_OUT_SEL_S)) +#define GPIO_FUNC30_OUT_SEL_V 0x1FF +#define GPIO_FUNC30_OUT_SEL_S 0 + +#define GPIO_FUNC31_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05ac) +/* GPIO_FUNC31_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC31_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC31_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC31_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC31_OEN_INV_SEL_S 11 +/* GPIO_FUNC31_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC31_OEN_SEL (BIT(10)) +#define GPIO_FUNC31_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC31_OEN_SEL_V 0x1 +#define GPIO_FUNC31_OEN_SEL_S 10 +/* GPIO_FUNC31_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC31_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC31_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC31_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC31_OUT_INV_SEL_S 9 +/* GPIO_FUNC31_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC31_OUT_SEL 0x000001FF +#define GPIO_FUNC31_OUT_SEL_M ((GPIO_FUNC31_OUT_SEL_V)<<(GPIO_FUNC31_OUT_SEL_S)) +#define GPIO_FUNC31_OUT_SEL_V 0x1FF +#define GPIO_FUNC31_OUT_SEL_S 0 + +#define GPIO_FUNC32_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05b0) +/* GPIO_FUNC32_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC32_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC32_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC32_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC32_OEN_INV_SEL_S 11 +/* GPIO_FUNC32_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC32_OEN_SEL (BIT(10)) +#define GPIO_FUNC32_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC32_OEN_SEL_V 0x1 +#define GPIO_FUNC32_OEN_SEL_S 10 +/* GPIO_FUNC32_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC32_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC32_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC32_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC32_OUT_INV_SEL_S 9 +/* GPIO_FUNC32_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC32_OUT_SEL 0x000001FF +#define GPIO_FUNC32_OUT_SEL_M ((GPIO_FUNC32_OUT_SEL_V)<<(GPIO_FUNC32_OUT_SEL_S)) +#define GPIO_FUNC32_OUT_SEL_V 0x1FF +#define GPIO_FUNC32_OUT_SEL_S 0 + +#define GPIO_FUNC33_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05b4) +/* GPIO_FUNC33_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC33_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC33_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC33_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC33_OEN_INV_SEL_S 11 +/* GPIO_FUNC33_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC33_OEN_SEL (BIT(10)) +#define GPIO_FUNC33_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC33_OEN_SEL_V 0x1 +#define GPIO_FUNC33_OEN_SEL_S 10 +/* GPIO_FUNC33_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC33_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC33_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC33_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC33_OUT_INV_SEL_S 9 +/* GPIO_FUNC33_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC33_OUT_SEL 0x000001FF +#define GPIO_FUNC33_OUT_SEL_M ((GPIO_FUNC33_OUT_SEL_V)<<(GPIO_FUNC33_OUT_SEL_S)) +#define GPIO_FUNC33_OUT_SEL_V 0x1FF +#define GPIO_FUNC33_OUT_SEL_S 0 + +#define GPIO_FUNC34_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05b8) +/* GPIO_FUNC34_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC34_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC34_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC34_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC34_OEN_INV_SEL_S 11 +/* GPIO_FUNC34_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC34_OEN_SEL (BIT(10)) +#define GPIO_FUNC34_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC34_OEN_SEL_V 0x1 +#define GPIO_FUNC34_OEN_SEL_S 10 +/* GPIO_FUNC34_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC34_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC34_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC34_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC34_OUT_INV_SEL_S 9 +/* GPIO_FUNC34_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC34_OUT_SEL 0x000001FF +#define GPIO_FUNC34_OUT_SEL_M ((GPIO_FUNC34_OUT_SEL_V)<<(GPIO_FUNC34_OUT_SEL_S)) +#define GPIO_FUNC34_OUT_SEL_V 0x1FF +#define GPIO_FUNC34_OUT_SEL_S 0 + +#define GPIO_FUNC35_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05bc) +/* GPIO_FUNC35_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC35_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC35_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC35_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC35_OEN_INV_SEL_S 11 +/* GPIO_FUNC35_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC35_OEN_SEL (BIT(10)) +#define GPIO_FUNC35_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC35_OEN_SEL_V 0x1 +#define GPIO_FUNC35_OEN_SEL_S 10 +/* GPIO_FUNC35_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC35_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC35_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC35_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC35_OUT_INV_SEL_S 9 +/* GPIO_FUNC35_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC35_OUT_SEL 0x000001FF +#define GPIO_FUNC35_OUT_SEL_M ((GPIO_FUNC35_OUT_SEL_V)<<(GPIO_FUNC35_OUT_SEL_S)) +#define GPIO_FUNC35_OUT_SEL_V 0x1FF +#define GPIO_FUNC35_OUT_SEL_S 0 + +#define GPIO_FUNC36_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05c0) +/* GPIO_FUNC36_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC36_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC36_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC36_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC36_OEN_INV_SEL_S 11 +/* GPIO_FUNC36_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC36_OEN_SEL (BIT(10)) +#define GPIO_FUNC36_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC36_OEN_SEL_V 0x1 +#define GPIO_FUNC36_OEN_SEL_S 10 +/* GPIO_FUNC36_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC36_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC36_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC36_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC36_OUT_INV_SEL_S 9 +/* GPIO_FUNC36_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC36_OUT_SEL 0x000001FF +#define GPIO_FUNC36_OUT_SEL_M ((GPIO_FUNC36_OUT_SEL_V)<<(GPIO_FUNC36_OUT_SEL_S)) +#define GPIO_FUNC36_OUT_SEL_V 0x1FF +#define GPIO_FUNC36_OUT_SEL_S 0 + +#define GPIO_FUNC37_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05c4) +/* GPIO_FUNC37_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC37_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC37_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC37_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC37_OEN_INV_SEL_S 11 +/* GPIO_FUNC37_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC37_OEN_SEL (BIT(10)) +#define GPIO_FUNC37_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC37_OEN_SEL_V 0x1 +#define GPIO_FUNC37_OEN_SEL_S 10 +/* GPIO_FUNC37_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC37_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC37_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC37_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC37_OUT_INV_SEL_S 9 +/* GPIO_FUNC37_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC37_OUT_SEL 0x000001FF +#define GPIO_FUNC37_OUT_SEL_M ((GPIO_FUNC37_OUT_SEL_V)<<(GPIO_FUNC37_OUT_SEL_S)) +#define GPIO_FUNC37_OUT_SEL_V 0x1FF +#define GPIO_FUNC37_OUT_SEL_S 0 + +#define GPIO_FUNC38_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05c8) +/* GPIO_FUNC38_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC38_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC38_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC38_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC38_OEN_INV_SEL_S 11 +/* GPIO_FUNC38_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC38_OEN_SEL (BIT(10)) +#define GPIO_FUNC38_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC38_OEN_SEL_V 0x1 +#define GPIO_FUNC38_OEN_SEL_S 10 +/* GPIO_FUNC38_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC38_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC38_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC38_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC38_OUT_INV_SEL_S 9 +/* GPIO_FUNC38_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC38_OUT_SEL 0x000001FF +#define GPIO_FUNC38_OUT_SEL_M ((GPIO_FUNC38_OUT_SEL_V)<<(GPIO_FUNC38_OUT_SEL_S)) +#define GPIO_FUNC38_OUT_SEL_V 0x1FF +#define GPIO_FUNC38_OUT_SEL_S 0 + +#define GPIO_FUNC39_OUT_SEL_CFG_REG (DR_REG_GPIO_BASE + 0x05cc) +/* GPIO_FUNC39_OEN_INV_SEL : R/W ;bitpos:[11] ;default: x ; */ +/*description: invert the output enable value if you want to revert the output + enable value setting the value to 1*/ +#define GPIO_FUNC39_OEN_INV_SEL (BIT(11)) +#define GPIO_FUNC39_OEN_INV_SEL_M (BIT(11)) +#define GPIO_FUNC39_OEN_INV_SEL_V 0x1 +#define GPIO_FUNC39_OEN_INV_SEL_S 11 +/* GPIO_FUNC39_OEN_SEL : R/W ;bitpos:[10] ;default: x ; */ +/*description: weather using the logical oen signal or not using the value setting + by the register*/ +#define GPIO_FUNC39_OEN_SEL (BIT(10)) +#define GPIO_FUNC39_OEN_SEL_M (BIT(10)) +#define GPIO_FUNC39_OEN_SEL_V 0x1 +#define GPIO_FUNC39_OEN_SEL_S 10 +/* GPIO_FUNC39_OUT_INV_SEL : R/W ;bitpos:[9] ;default: x ; */ +/*description: invert the output value if you want to revert the output value + setting the value to 1*/ +#define GPIO_FUNC39_OUT_INV_SEL (BIT(9)) +#define GPIO_FUNC39_OUT_INV_SEL_M (BIT(9)) +#define GPIO_FUNC39_OUT_INV_SEL_V 0x1 +#define GPIO_FUNC39_OUT_INV_SEL_S 9 +/* GPIO_FUNC39_OUT_SEL : R/W ;bitpos:[8:0] ;default: x ; */ +/*description: select one of the 256 output to 40 GPIO*/ +#define GPIO_FUNC39_OUT_SEL 0x000001FF +#define GPIO_FUNC39_OUT_SEL_M ((GPIO_FUNC39_OUT_SEL_V)<<(GPIO_FUNC39_OUT_SEL_S)) +#define GPIO_FUNC39_OUT_SEL_V 0x1FF +#define GPIO_FUNC39_OUT_SEL_S 0 + + + + +#endif /*_SOC_GPIO_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/gpio_sd_reg.h b/tools/sdk/include/esp32/soc/gpio_sd_reg.h new file mode 100644 index 00000000..be39fcf2 --- /dev/null +++ b/tools/sdk/include/esp32/soc/gpio_sd_reg.h @@ -0,0 +1,160 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_GPIO_SD_REG_H_ +#define _SOC_GPIO_SD_REG_H_ + +#include "soc.h" +#define GPIO_SIGMADELTA0_REG (DR_REG_GPIO_SD_BASE + 0x0000) +/* GPIO_SD0_PRESCALE : R/W ;bitpos:[15:8] ;default: 8'hff ; */ +/*description: */ +#define GPIO_SD0_PRESCALE 0x000000FF +#define GPIO_SD0_PRESCALE_M ((GPIO_SD0_PRESCALE_V)<<(GPIO_SD0_PRESCALE_S)) +#define GPIO_SD0_PRESCALE_V 0xFF +#define GPIO_SD0_PRESCALE_S 8 +/* GPIO_SD0_IN : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: */ +#define GPIO_SD0_IN 0x000000FF +#define GPIO_SD0_IN_M ((GPIO_SD0_IN_V)<<(GPIO_SD0_IN_S)) +#define GPIO_SD0_IN_V 0xFF +#define GPIO_SD0_IN_S 0 + +#define GPIO_SIGMADELTA1_REG (DR_REG_GPIO_SD_BASE + 0x0004) +/* GPIO_SD1_PRESCALE : R/W ;bitpos:[15:8] ;default: 8'hff ; */ +/*description: */ +#define GPIO_SD1_PRESCALE 0x000000FF +#define GPIO_SD1_PRESCALE_M ((GPIO_SD1_PRESCALE_V)<<(GPIO_SD1_PRESCALE_S)) +#define GPIO_SD1_PRESCALE_V 0xFF +#define GPIO_SD1_PRESCALE_S 8 +/* GPIO_SD1_IN : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: */ +#define GPIO_SD1_IN 0x000000FF +#define GPIO_SD1_IN_M ((GPIO_SD1_IN_V)<<(GPIO_SD1_IN_S)) +#define GPIO_SD1_IN_V 0xFF +#define GPIO_SD1_IN_S 0 + +#define GPIO_SIGMADELTA2_REG (DR_REG_GPIO_SD_BASE + 0x0008) +/* GPIO_SD2_PRESCALE : R/W ;bitpos:[15:8] ;default: 8'hff ; */ +/*description: */ +#define GPIO_SD2_PRESCALE 0x000000FF +#define GPIO_SD2_PRESCALE_M ((GPIO_SD2_PRESCALE_V)<<(GPIO_SD2_PRESCALE_S)) +#define GPIO_SD2_PRESCALE_V 0xFF +#define GPIO_SD2_PRESCALE_S 8 +/* GPIO_SD2_IN : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: */ +#define GPIO_SD2_IN 0x000000FF +#define GPIO_SD2_IN_M ((GPIO_SD2_IN_V)<<(GPIO_SD2_IN_S)) +#define GPIO_SD2_IN_V 0xFF +#define GPIO_SD2_IN_S 0 + +#define GPIO_SIGMADELTA3_REG (DR_REG_GPIO_SD_BASE + 0x000c) +/* GPIO_SD3_PRESCALE : R/W ;bitpos:[15:8] ;default: 8'hff ; */ +/*description: */ +#define GPIO_SD3_PRESCALE 0x000000FF +#define GPIO_SD3_PRESCALE_M ((GPIO_SD3_PRESCALE_V)<<(GPIO_SD3_PRESCALE_S)) +#define GPIO_SD3_PRESCALE_V 0xFF +#define GPIO_SD3_PRESCALE_S 8 +/* GPIO_SD3_IN : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: */ +#define GPIO_SD3_IN 0x000000FF +#define GPIO_SD3_IN_M ((GPIO_SD3_IN_V)<<(GPIO_SD3_IN_S)) +#define GPIO_SD3_IN_V 0xFF +#define GPIO_SD3_IN_S 0 + +#define GPIO_SIGMADELTA4_REG (DR_REG_GPIO_SD_BASE + 0x0010) +/* GPIO_SD4_PRESCALE : R/W ;bitpos:[15:8] ;default: 8'hff ; */ +/*description: */ +#define GPIO_SD4_PRESCALE 0x000000FF +#define GPIO_SD4_PRESCALE_M ((GPIO_SD4_PRESCALE_V)<<(GPIO_SD4_PRESCALE_S)) +#define GPIO_SD4_PRESCALE_V 0xFF +#define GPIO_SD4_PRESCALE_S 8 +/* GPIO_SD4_IN : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: */ +#define GPIO_SD4_IN 0x000000FF +#define GPIO_SD4_IN_M ((GPIO_SD4_IN_V)<<(GPIO_SD4_IN_S)) +#define GPIO_SD4_IN_V 0xFF +#define GPIO_SD4_IN_S 0 + +#define GPIO_SIGMADELTA5_REG (DR_REG_GPIO_SD_BASE + 0x0014) +/* GPIO_SD5_PRESCALE : R/W ;bitpos:[15:8] ;default: 8'hff ; */ +/*description: */ +#define GPIO_SD5_PRESCALE 0x000000FF +#define GPIO_SD5_PRESCALE_M ((GPIO_SD5_PRESCALE_V)<<(GPIO_SD5_PRESCALE_S)) +#define GPIO_SD5_PRESCALE_V 0xFF +#define GPIO_SD5_PRESCALE_S 8 +/* GPIO_SD5_IN : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: */ +#define GPIO_SD5_IN 0x000000FF +#define GPIO_SD5_IN_M ((GPIO_SD5_IN_V)<<(GPIO_SD5_IN_S)) +#define GPIO_SD5_IN_V 0xFF +#define GPIO_SD5_IN_S 0 + +#define GPIO_SIGMADELTA6_REG (DR_REG_GPIO_SD_BASE + 0x0018) +/* GPIO_SD6_PRESCALE : R/W ;bitpos:[15:8] ;default: 8'hff ; */ +/*description: */ +#define GPIO_SD6_PRESCALE 0x000000FF +#define GPIO_SD6_PRESCALE_M ((GPIO_SD6_PRESCALE_V)<<(GPIO_SD6_PRESCALE_S)) +#define GPIO_SD6_PRESCALE_V 0xFF +#define GPIO_SD6_PRESCALE_S 8 +/* GPIO_SD6_IN : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: */ +#define GPIO_SD6_IN 0x000000FF +#define GPIO_SD6_IN_M ((GPIO_SD6_IN_V)<<(GPIO_SD6_IN_S)) +#define GPIO_SD6_IN_V 0xFF +#define GPIO_SD6_IN_S 0 + +#define GPIO_SIGMADELTA7_REG (DR_REG_GPIO_SD_BASE + 0x001c) +/* GPIO_SD7_PRESCALE : R/W ;bitpos:[15:8] ;default: 8'hff ; */ +/*description: */ +#define GPIO_SD7_PRESCALE 0x000000FF +#define GPIO_SD7_PRESCALE_M ((GPIO_SD7_PRESCALE_V)<<(GPIO_SD7_PRESCALE_S)) +#define GPIO_SD7_PRESCALE_V 0xFF +#define GPIO_SD7_PRESCALE_S 8 +/* GPIO_SD7_IN : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: */ +#define GPIO_SD7_IN 0x000000FF +#define GPIO_SD7_IN_M ((GPIO_SD7_IN_V)<<(GPIO_SD7_IN_S)) +#define GPIO_SD7_IN_V 0xFF +#define GPIO_SD7_IN_S 0 + +#define GPIO_SIGMADELTA_CG_REG (DR_REG_GPIO_SD_BASE + 0x0020) +/* GPIO_SD_CLK_EN : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: */ +#define GPIO_SD_CLK_EN (BIT(31)) +#define GPIO_SD_CLK_EN_M (BIT(31)) +#define GPIO_SD_CLK_EN_V 0x1 +#define GPIO_SD_CLK_EN_S 31 + +#define GPIO_SIGMADELTA_MISC_REG (DR_REG_GPIO_SD_BASE + 0x0024) +/* GPIO_SPI_SWAP : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: */ +#define GPIO_SPI_SWAP (BIT(31)) +#define GPIO_SPI_SWAP_M (BIT(31)) +#define GPIO_SPI_SWAP_V 0x1 +#define GPIO_SPI_SWAP_S 31 + +#define GPIO_SIGMADELTA_VERSION_REG (DR_REG_GPIO_SD_BASE + 0x0028) +/* GPIO_SD_DATE : R/W ;bitpos:[27:0] ;default: 28'h1506190 ; */ +/*description: */ +#define GPIO_SD_DATE 0x0FFFFFFF +#define GPIO_SD_DATE_M ((GPIO_SD_DATE_V)<<(GPIO_SD_DATE_S)) +#define GPIO_SD_DATE_V 0xFFFFFFF +#define GPIO_SD_DATE_S 0 +#define SIGMADELTA_GPIO_SD_DATE_VERSION 0x1506190 + + + + +#endif /*_SOC_GPIO_SD_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/gpio_sd_struct.h b/tools/sdk/include/esp32/soc/gpio_sd_struct.h new file mode 100644 index 00000000..94ddd5ba --- /dev/null +++ b/tools/sdk/include/esp32/soc/gpio_sd_struct.h @@ -0,0 +1,48 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_GPIO_SD_STRUCT_H_ +#define _SOC_GPIO_SD_STRUCT_H_ +typedef volatile struct { + union { + struct { + uint32_t duty: 8; + uint32_t prescale: 8; + uint32_t reserved16: 16; + }; + uint32_t val; + } channel[8]; + union { + struct { + uint32_t reserved0: 31; + uint32_t clk_en: 1; + }; + uint32_t val; + } cg; + union { + struct { + uint32_t reserved0: 31; + uint32_t spi_swap: 1; + }; + uint32_t val; + } misc; + union { + struct { + uint32_t date: 28; + uint32_t reserved28: 4; + }; + uint32_t val; + } version; +} gpio_sd_dev_t; +extern gpio_sd_dev_t SIGMADELTA; +#endif /* _SOC_GPIO_SD_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/gpio_sig_map.h b/tools/sdk/include/esp32/soc/gpio_sig_map.h new file mode 100644 index 00000000..dad22f92 --- /dev/null +++ b/tools/sdk/include/esp32/soc/gpio_sig_map.h @@ -0,0 +1,422 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_GPIO_SIG_MAP_H_ +#define _SOC_GPIO_SIG_MAP_H_ + +#define SPICLK_IN_IDX 0 +#define SPICLK_OUT_IDX 0 +#define SPIQ_IN_IDX 1 +#define SPIQ_OUT_IDX 1 +#define SPID_IN_IDX 2 +#define SPID_OUT_IDX 2 +#define SPIHD_IN_IDX 3 +#define SPIHD_OUT_IDX 3 +#define SPIWP_IN_IDX 4 +#define SPIWP_OUT_IDX 4 +#define SPICS0_IN_IDX 5 +#define SPICS0_OUT_IDX 5 +#define SPICS1_IN_IDX 6 +#define SPICS1_OUT_IDX 6 +#define SPICS2_IN_IDX 7 +#define SPICS2_OUT_IDX 7 +#define HSPICLK_IN_IDX 8 +#define HSPICLK_OUT_IDX 8 +#define HSPIQ_IN_IDX 9 +#define HSPIQ_OUT_IDX 9 +#define HSPID_IN_IDX 10 +#define HSPID_OUT_IDX 10 +#define HSPICS0_IN_IDX 11 +#define HSPICS0_OUT_IDX 11 +#define HSPIHD_IN_IDX 12 +#define HSPIHD_OUT_IDX 12 +#define HSPIWP_IN_IDX 13 +#define HSPIWP_OUT_IDX 13 +#define U0RXD_IN_IDX 14 +#define U0TXD_OUT_IDX 14 +#define U0CTS_IN_IDX 15 +#define U0RTS_OUT_IDX 15 +#define U0DSR_IN_IDX 16 +#define U0DTR_OUT_IDX 16 +#define U1RXD_IN_IDX 17 +#define U1TXD_OUT_IDX 17 +#define U1CTS_IN_IDX 18 +#define U1RTS_OUT_IDX 18 +#define I2CM_SCL_O_IDX 19 +#define I2CM_SDA_I_IDX 20 +#define I2CM_SDA_O_IDX 20 +#define EXT_I2C_SCL_O_IDX 21 +#define EXT_I2C_SDA_O_IDX 22 +#define EXT_I2C_SDA_I_IDX 22 +#define I2S0O_BCK_IN_IDX 23 +#define I2S0O_BCK_OUT_IDX 23 +#define I2S1O_BCK_IN_IDX 24 +#define I2S1O_BCK_OUT_IDX 24 +#define I2S0O_WS_IN_IDX 25 +#define I2S0O_WS_OUT_IDX 25 +#define I2S1O_WS_IN_IDX 26 +#define I2S1O_WS_OUT_IDX 26 +#define I2S0I_BCK_IN_IDX 27 +#define I2S0I_BCK_OUT_IDX 27 +#define I2S0I_WS_IN_IDX 28 +#define I2S0I_WS_OUT_IDX 28 +#define I2CEXT0_SCL_IN_IDX 29 +#define I2CEXT0_SCL_OUT_IDX 29 +#define I2CEXT0_SDA_IN_IDX 30 +#define I2CEXT0_SDA_OUT_IDX 30 +#define PWM0_SYNC0_IN_IDX 31 +#define SDIO_TOHOST_INT_OUT_IDX 31 +#define PWM0_SYNC1_IN_IDX 32 +#define PWM0_OUT0A_IDX 32 +#define PWM0_SYNC2_IN_IDX 33 +#define PWM0_OUT0B_IDX 33 +#define PWM0_F0_IN_IDX 34 +#define PWM0_OUT1A_IDX 34 +#define PWM0_F1_IN_IDX 35 +#define PWM0_OUT1B_IDX 35 +#define PWM0_F2_IN_IDX 36 +#define PWM0_OUT2A_IDX 36 +#define GPIO_BT_ACTIVE_IDX 37 +#define PWM0_OUT2B_IDX 37 +#define GPIO_BT_PRIORITY_IDX 38 +#define PCNT_SIG_CH0_IN0_IDX 39 +#define PCNT_SIG_CH1_IN0_IDX 40 +#define GPIO_WLAN_ACTIVE_IDX 40 +#define PCNT_CTRL_CH0_IN0_IDX 41 +#define BB_DIAG0_IDX 41 +#define PCNT_CTRL_CH1_IN0_IDX 42 +#define BB_DIAG1_IDX 42 +#define PCNT_SIG_CH0_IN1_IDX 43 +#define BB_DIAG2_IDX 43 +#define PCNT_SIG_CH1_IN1_IDX 44 +#define BB_DIAG3_IDX 44 +#define PCNT_CTRL_CH0_IN1_IDX 45 +#define BB_DIAG4_IDX 45 +#define PCNT_CTRL_CH1_IN1_IDX 46 +#define BB_DIAG5_IDX 46 +#define PCNT_SIG_CH0_IN2_IDX 47 +#define BB_DIAG6_IDX 47 +#define PCNT_SIG_CH1_IN2_IDX 48 +#define BB_DIAG7_IDX 48 +#define PCNT_CTRL_CH0_IN2_IDX 49 +#define BB_DIAG8_IDX 49 +#define PCNT_CTRL_CH1_IN2_IDX 50 +#define BB_DIAG9_IDX 50 +#define PCNT_SIG_CH0_IN3_IDX 51 +#define BB_DIAG10_IDX 51 +#define PCNT_SIG_CH1_IN3_IDX 52 +#define BB_DIAG11_IDX 52 +#define PCNT_CTRL_CH0_IN3_IDX 53 +#define BB_DIAG12_IDX 53 +#define PCNT_CTRL_CH1_IN3_IDX 54 +#define BB_DIAG13_IDX 54 +#define PCNT_SIG_CH0_IN4_IDX 55 +#define BB_DIAG14_IDX 55 +#define PCNT_SIG_CH1_IN4_IDX 56 +#define BB_DIAG15_IDX 56 +#define PCNT_CTRL_CH0_IN4_IDX 57 +#define BB_DIAG16_IDX 57 +#define PCNT_CTRL_CH1_IN4_IDX 58 +#define BB_DIAG17_IDX 58 +#define BB_DIAG18_IDX 59 +#define BB_DIAG19_IDX 60 +#define HSPICS1_IN_IDX 61 +#define HSPICS1_OUT_IDX 61 +#define HSPICS2_IN_IDX 62 +#define HSPICS2_OUT_IDX 62 +#define VSPICLK_IN_IDX 63 +#define VSPICLK_OUT_MUX_IDX 63 +#define VSPIQ_IN_IDX 64 +#define VSPIQ_OUT_IDX 64 +#define VSPID_IN_IDX 65 +#define VSPID_OUT_IDX 65 +#define VSPIHD_IN_IDX 66 +#define VSPIHD_OUT_IDX 66 +#define VSPIWP_IN_IDX 67 +#define VSPIWP_OUT_IDX 67 +#define VSPICS0_IN_IDX 68 +#define VSPICS0_OUT_IDX 68 +#define VSPICS1_IN_IDX 69 +#define VSPICS1_OUT_IDX 69 +#define VSPICS2_IN_IDX 70 +#define VSPICS2_OUT_IDX 70 +#define PCNT_SIG_CH0_IN5_IDX 71 +#define LEDC_HS_SIG_OUT0_IDX 71 +#define PCNT_SIG_CH1_IN5_IDX 72 +#define LEDC_HS_SIG_OUT1_IDX 72 +#define PCNT_CTRL_CH0_IN5_IDX 73 +#define LEDC_HS_SIG_OUT2_IDX 73 +#define PCNT_CTRL_CH1_IN5_IDX 74 +#define LEDC_HS_SIG_OUT3_IDX 74 +#define PCNT_SIG_CH0_IN6_IDX 75 +#define LEDC_HS_SIG_OUT4_IDX 75 +#define PCNT_SIG_CH1_IN6_IDX 76 +#define LEDC_HS_SIG_OUT5_IDX 76 +#define PCNT_CTRL_CH0_IN6_IDX 77 +#define LEDC_HS_SIG_OUT6_IDX 77 +#define PCNT_CTRL_CH1_IN6_IDX 78 +#define LEDC_HS_SIG_OUT7_IDX 78 +#define PCNT_SIG_CH0_IN7_IDX 79 +#define LEDC_LS_SIG_OUT0_IDX 79 +#define PCNT_SIG_CH1_IN7_IDX 80 +#define LEDC_LS_SIG_OUT1_IDX 80 +#define PCNT_CTRL_CH0_IN7_IDX 81 +#define LEDC_LS_SIG_OUT2_IDX 81 +#define PCNT_CTRL_CH1_IN7_IDX 82 +#define LEDC_LS_SIG_OUT3_IDX 82 +#define RMT_SIG_IN0_IDX 83 +#define LEDC_LS_SIG_OUT4_IDX 83 +#define RMT_SIG_IN1_IDX 84 +#define LEDC_LS_SIG_OUT5_IDX 84 +#define RMT_SIG_IN2_IDX 85 +#define LEDC_LS_SIG_OUT6_IDX 85 +#define RMT_SIG_IN3_IDX 86 +#define LEDC_LS_SIG_OUT7_IDX 86 +#define RMT_SIG_IN4_IDX 87 +#define RMT_SIG_OUT0_IDX 87 +#define RMT_SIG_IN5_IDX 88 +#define RMT_SIG_OUT1_IDX 88 +#define RMT_SIG_IN6_IDX 89 +#define RMT_SIG_OUT2_IDX 89 +#define RMT_SIG_IN7_IDX 90 +#define RMT_SIG_OUT3_IDX 90 +#define RMT_SIG_OUT4_IDX 91 +#define RMT_SIG_OUT5_IDX 92 +#define EXT_ADC_START_IDX 93 +#define RMT_SIG_OUT6_IDX 93 +#define CAN_RX_IDX 94 +#define RMT_SIG_OUT7_IDX 94 +#define I2CEXT1_SCL_IN_IDX 95 +#define I2CEXT1_SCL_OUT_IDX 95 +#define I2CEXT1_SDA_IN_IDX 96 +#define I2CEXT1_SDA_OUT_IDX 96 +#define HOST_CARD_DETECT_N_1_IDX 97 +#define HOST_CCMD_OD_PULLUP_EN_N_IDX 97 +#define HOST_CARD_DETECT_N_2_IDX 98 +#define HOST_RST_N_1_IDX 98 +#define HOST_CARD_WRITE_PRT_1_IDX 99 +#define HOST_RST_N_2_IDX 99 +#define HOST_CARD_WRITE_PRT_2_IDX 100 +#define GPIO_SD0_OUT_IDX 100 +#define HOST_CARD_INT_N_1_IDX 101 +#define GPIO_SD1_OUT_IDX 101 +#define HOST_CARD_INT_N_2_IDX 102 +#define GPIO_SD2_OUT_IDX 102 +#define PWM1_SYNC0_IN_IDX 103 +#define GPIO_SD3_OUT_IDX 103 +#define PWM1_SYNC1_IN_IDX 104 +#define GPIO_SD4_OUT_IDX 104 +#define PWM1_SYNC2_IN_IDX 105 +#define GPIO_SD5_OUT_IDX 105 +#define PWM1_F0_IN_IDX 106 +#define GPIO_SD6_OUT_IDX 106 +#define PWM1_F1_IN_IDX 107 +#define GPIO_SD7_OUT_IDX 107 +#define PWM1_F2_IN_IDX 108 +#define PWM1_OUT0A_IDX 108 +#define PWM0_CAP0_IN_IDX 109 +#define PWM1_OUT0B_IDX 109 +#define PWM0_CAP1_IN_IDX 110 +#define PWM1_OUT1A_IDX 110 +#define PWM0_CAP2_IN_IDX 111 +#define PWM1_OUT1B_IDX 111 +#define PWM1_CAP0_IN_IDX 112 +#define PWM1_OUT2A_IDX 112 +#define PWM1_CAP1_IN_IDX 113 +#define PWM1_OUT2B_IDX 113 +#define PWM1_CAP2_IN_IDX 114 +#define PWM2_OUT1H_IDX 114 +#define PWM2_FLTA_IDX 115 +#define PWM2_OUT1L_IDX 115 +#define PWM2_FLTB_IDX 116 +#define PWM2_OUT2H_IDX 116 +#define PWM2_CAP1_IN_IDX 117 +#define PWM2_OUT2L_IDX 117 +#define PWM2_CAP2_IN_IDX 118 +#define PWM2_OUT3H_IDX 118 +#define PWM2_CAP3_IN_IDX 119 +#define PWM2_OUT3L_IDX 119 +#define PWM3_FLTA_IDX 120 +#define PWM2_OUT4H_IDX 120 +#define PWM3_FLTB_IDX 121 +#define PWM2_OUT4L_IDX 121 +#define PWM3_CAP1_IN_IDX 122 +#define PWM3_CAP2_IN_IDX 123 +#define CAN_TX_IDX 123 +#define PWM3_CAP3_IN_IDX 124 +#define CAN_BUS_OFF_ON_IDX 124 +#define CAN_CLKOUT_IDX 125 +#define SPID4_IN_IDX 128 +#define SPID4_OUT_IDX 128 +#define SPID5_IN_IDX 129 +#define SPID5_OUT_IDX 129 +#define SPID6_IN_IDX 130 +#define SPID6_OUT_IDX 130 +#define SPID7_IN_IDX 131 +#define SPID7_OUT_IDX 131 +#define HSPID4_IN_IDX 132 +#define HSPID4_OUT_IDX 132 +#define HSPID5_IN_IDX 133 +#define HSPID5_OUT_IDX 133 +#define HSPID6_IN_IDX 134 +#define HSPID6_OUT_IDX 134 +#define HSPID7_IN_IDX 135 +#define HSPID7_OUT_IDX 135 +#define VSPID4_IN_IDX 136 +#define VSPID4_OUT_IDX 136 +#define VSPID5_IN_IDX 137 +#define VSPID5_OUT_IDX 137 +#define VSPID6_IN_IDX 138 +#define VSPID6_OUT_IDX 138 +#define VSPID7_IN_IDX 139 +#define VSPID7_OUT_IDX 139 +#define I2S0I_DATA_IN0_IDX 140 +#define I2S0O_DATA_OUT0_IDX 140 +#define I2S0I_DATA_IN1_IDX 141 +#define I2S0O_DATA_OUT1_IDX 141 +#define I2S0I_DATA_IN2_IDX 142 +#define I2S0O_DATA_OUT2_IDX 142 +#define I2S0I_DATA_IN3_IDX 143 +#define I2S0O_DATA_OUT3_IDX 143 +#define I2S0I_DATA_IN4_IDX 144 +#define I2S0O_DATA_OUT4_IDX 144 +#define I2S0I_DATA_IN5_IDX 145 +#define I2S0O_DATA_OUT5_IDX 145 +#define I2S0I_DATA_IN6_IDX 146 +#define I2S0O_DATA_OUT6_IDX 146 +#define I2S0I_DATA_IN7_IDX 147 +#define I2S0O_DATA_OUT7_IDX 147 +#define I2S0I_DATA_IN8_IDX 148 +#define I2S0O_DATA_OUT8_IDX 148 +#define I2S0I_DATA_IN9_IDX 149 +#define I2S0O_DATA_OUT9_IDX 149 +#define I2S0I_DATA_IN10_IDX 150 +#define I2S0O_DATA_OUT10_IDX 150 +#define I2S0I_DATA_IN11_IDX 151 +#define I2S0O_DATA_OUT11_IDX 151 +#define I2S0I_DATA_IN12_IDX 152 +#define I2S0O_DATA_OUT12_IDX 152 +#define I2S0I_DATA_IN13_IDX 153 +#define I2S0O_DATA_OUT13_IDX 153 +#define I2S0I_DATA_IN14_IDX 154 +#define I2S0O_DATA_OUT14_IDX 154 +#define I2S0I_DATA_IN15_IDX 155 +#define I2S0O_DATA_OUT15_IDX 155 +#define I2S0O_DATA_OUT16_IDX 156 +#define I2S0O_DATA_OUT17_IDX 157 +#define I2S0O_DATA_OUT18_IDX 158 +#define I2S0O_DATA_OUT19_IDX 159 +#define I2S0O_DATA_OUT20_IDX 160 +#define I2S0O_DATA_OUT21_IDX 161 +#define I2S0O_DATA_OUT22_IDX 162 +#define I2S0O_DATA_OUT23_IDX 163 +#define I2S1I_BCK_IN_IDX 164 +#define I2S1I_BCK_OUT_IDX 164 +#define I2S1I_WS_IN_IDX 165 +#define I2S1I_WS_OUT_IDX 165 +#define I2S1I_DATA_IN0_IDX 166 +#define I2S1O_DATA_OUT0_IDX 166 +#define I2S1I_DATA_IN1_IDX 167 +#define I2S1O_DATA_OUT1_IDX 167 +#define I2S1I_DATA_IN2_IDX 168 +#define I2S1O_DATA_OUT2_IDX 168 +#define I2S1I_DATA_IN3_IDX 169 +#define I2S1O_DATA_OUT3_IDX 169 +#define I2S1I_DATA_IN4_IDX 170 +#define I2S1O_DATA_OUT4_IDX 170 +#define I2S1I_DATA_IN5_IDX 171 +#define I2S1O_DATA_OUT5_IDX 171 +#define I2S1I_DATA_IN6_IDX 172 +#define I2S1O_DATA_OUT6_IDX 172 +#define I2S1I_DATA_IN7_IDX 173 +#define I2S1O_DATA_OUT7_IDX 173 +#define I2S1I_DATA_IN8_IDX 174 +#define I2S1O_DATA_OUT8_IDX 174 +#define I2S1I_DATA_IN9_IDX 175 +#define I2S1O_DATA_OUT9_IDX 175 +#define I2S1I_DATA_IN10_IDX 176 +#define I2S1O_DATA_OUT10_IDX 176 +#define I2S1I_DATA_IN11_IDX 177 +#define I2S1O_DATA_OUT11_IDX 177 +#define I2S1I_DATA_IN12_IDX 178 +#define I2S1O_DATA_OUT12_IDX 178 +#define I2S1I_DATA_IN13_IDX 179 +#define I2S1O_DATA_OUT13_IDX 179 +#define I2S1I_DATA_IN14_IDX 180 +#define I2S1O_DATA_OUT14_IDX 180 +#define I2S1I_DATA_IN15_IDX 181 +#define I2S1O_DATA_OUT15_IDX 181 +#define I2S1O_DATA_OUT16_IDX 182 +#define I2S1O_DATA_OUT17_IDX 183 +#define I2S1O_DATA_OUT18_IDX 184 +#define I2S1O_DATA_OUT19_IDX 185 +#define I2S1O_DATA_OUT20_IDX 186 +#define I2S1O_DATA_OUT21_IDX 187 +#define I2S1O_DATA_OUT22_IDX 188 +#define I2S1O_DATA_OUT23_IDX 189 +#define I2S0I_H_SYNC_IDX 190 +#define PWM3_OUT1H_IDX 190 +#define I2S0I_V_SYNC_IDX 191 +#define PWM3_OUT1L_IDX 191 +#define I2S0I_H_ENABLE_IDX 192 +#define PWM3_OUT2H_IDX 192 +#define I2S1I_H_SYNC_IDX 193 +#define PWM3_OUT2L_IDX 193 +#define I2S1I_V_SYNC_IDX 194 +#define PWM3_OUT3H_IDX 194 +#define I2S1I_H_ENABLE_IDX 195 +#define PWM3_OUT3L_IDX 195 +#define PWM3_OUT4H_IDX 196 +#define PWM3_OUT4L_IDX 197 +#define U2RXD_IN_IDX 198 +#define U2TXD_OUT_IDX 198 +#define U2CTS_IN_IDX 199 +#define U2RTS_OUT_IDX 199 +#define EMAC_MDC_I_IDX 200 +#define EMAC_MDC_O_IDX 200 +#define EMAC_MDI_I_IDX 201 +#define EMAC_MDO_O_IDX 201 +#define EMAC_CRS_I_IDX 202 +#define EMAC_CRS_O_IDX 202 +#define EMAC_COL_I_IDX 203 +#define EMAC_COL_O_IDX 203 +#define PCMFSYNC_IN_IDX 204 +#define BT_AUDIO0_IRQ_IDX 204 +#define PCMCLK_IN_IDX 205 +#define BT_AUDIO1_IRQ_IDX 205 +#define PCMDIN_IDX 206 +#define BT_AUDIO2_IRQ_IDX 206 +#define BLE_AUDIO0_IRQ_IDX 207 +#define BLE_AUDIO1_IRQ_IDX 208 +#define BLE_AUDIO2_IRQ_IDX 209 +#define PCMFSYNC_OUT_IDX 210 +#define PCMCLK_OUT_IDX 211 +#define PCMDOUT_IDX 212 +#define BLE_AUDIO_SYNC0_P_IDX 213 +#define BLE_AUDIO_SYNC1_P_IDX 214 +#define BLE_AUDIO_SYNC2_P_IDX 215 +#define ANT_SEL0_IDX 216 +#define ANT_SEL1_IDX 217 +#define ANT_SEL2_IDX 218 +#define ANT_SEL3_IDX 219 +#define ANT_SEL4_IDX 220 +#define ANT_SEL5_IDX 221 +#define ANT_SEL6_IDX 222 +#define ANT_SEL7_IDX 223 +#define SIG_IN_FUNC224_IDX 224 +#define SIG_IN_FUNC225_IDX 225 +#define SIG_IN_FUNC226_IDX 226 +#define SIG_IN_FUNC227_IDX 227 +#define SIG_IN_FUNC228_IDX 228 + +#endif /* _SOC_GPIO_SIG_MAP_H_ */ diff --git a/tools/sdk/include/esp32/soc/gpio_struct.h b/tools/sdk/include/esp32/soc/gpio_struct.h new file mode 100644 index 00000000..7a90b71a --- /dev/null +++ b/tools/sdk/include/esp32/soc/gpio_struct.h @@ -0,0 +1,204 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_GPIO_STRUCT_H_ +#define _SOC_GPIO_STRUCT_H_ +typedef volatile struct { + uint32_t bt_select; /*NA*/ + uint32_t out; /*GPIO0~31 output value*/ + uint32_t out_w1ts; /*GPIO0~31 output value write 1 to set*/ + uint32_t out_w1tc; /*GPIO0~31 output value write 1 to clear*/ + union { + struct { + uint32_t data: 8; /*GPIO32~39 output value*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } out1; + union { + struct { + uint32_t data: 8; /*GPIO32~39 output value write 1 to set*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } out1_w1ts; + union { + struct { + uint32_t data: 8; /*GPIO32~39 output value write 1 to clear*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } out1_w1tc; + union { + struct { + uint32_t sel: 8; /*SDIO PADS on/off control from outside*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } sdio_select; + uint32_t enable; /*GPIO0~31 output enable*/ + uint32_t enable_w1ts; /*GPIO0~31 output enable write 1 to set*/ + uint32_t enable_w1tc; /*GPIO0~31 output enable write 1 to clear*/ + union { + struct { + uint32_t data: 8; /*GPIO32~39 output enable*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } enable1; + union { + struct { + uint32_t data: 8; /*GPIO32~39 output enable write 1 to set*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } enable1_w1ts; + union { + struct { + uint32_t data: 8; /*GPIO32~39 output enable write 1 to clear*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } enable1_w1tc; + union { + struct { + uint32_t strapping: 16; /*GPIO strapping results: {2'd0 boot_sel_dig[7:1] vsdio_boot_sel boot_sel_chip[5:0]} . Boot_sel_dig[7:1]: {U0RXD SD_CLK SD_CMD SD_DATA0 SD_DATA1 SD_DATA2 SD_DATA3} . vsdio_boot_sel: MTDI. boot_sel_chip[5:0]: {GPIO0 U0TXD GPIO2 GPIO4 MTDO GPIO5} */ + uint32_t reserved16:16; + }; + uint32_t val; + } strap; + uint32_t in; /*GPIO0~31 input value*/ + union { + struct { + uint32_t data: 8; /*GPIO32~39 input value*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } in1; + uint32_t status; /*GPIO0~31 interrupt status*/ + uint32_t status_w1ts; /*GPIO0~31 interrupt status write 1 to set*/ + uint32_t status_w1tc; /*GPIO0~31 interrupt status write 1 to clear*/ + union { + struct { + uint32_t intr_st: 8; /*GPIO32~39 interrupt status*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } status1; + union { + struct { + uint32_t intr_st: 8; /*GPIO32~39 interrupt status write 1 to set*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } status1_w1ts; + union { + struct { + uint32_t intr_st: 8; /*GPIO32~39 interrupt status write 1 to clear*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } status1_w1tc; + uint32_t reserved_5c; + uint32_t acpu_int; /*GPIO0~31 APP CPU interrupt status*/ + uint32_t acpu_nmi_int; /*GPIO0~31 APP CPU non-maskable interrupt status*/ + uint32_t pcpu_int; /*GPIO0~31 PRO CPU interrupt status*/ + uint32_t pcpu_nmi_int; /*GPIO0~31 PRO CPU non-maskable interrupt status*/ + uint32_t cpusdio_int; /*SDIO's extent GPIO0~31 interrupt*/ + union { + struct { + uint32_t intr: 8; /*GPIO32~39 APP CPU interrupt status*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } acpu_int1; + union { + struct { + uint32_t intr: 8; /*GPIO32~39 APP CPU non-maskable interrupt status*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } acpu_nmi_int1; + union { + struct { + uint32_t intr: 8; /*GPIO32~39 PRO CPU interrupt status*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } pcpu_int1; + union { + struct { + uint32_t intr: 8; /*GPIO32~39 PRO CPU non-maskable interrupt status*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } pcpu_nmi_int1; + union { + struct { + uint32_t intr: 8; /*SDIO's extent GPIO32~39 interrupt*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } cpusdio_int1; + union { + struct { + uint32_t reserved0: 2; + uint32_t pad_driver: 1; /*if set to 0: normal output if set to 1: open drain*/ + uint32_t reserved3: 4; + uint32_t int_type: 3; /*if set to 0: GPIO interrupt disable if set to 1: rising edge trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ + uint32_t wakeup_enable: 1; /*GPIO wake up enable only available in light sleep*/ + uint32_t config: 2; /*NA*/ + uint32_t int_ena: 5; /*bit0: APP CPU interrupt enable bit1: APP CPU non-maskable interrupt enable bit3: PRO CPU interrupt enable bit4: PRO CPU non-maskable interrupt enable bit5: SDIO's extent interrupt enable*/ + uint32_t reserved18: 14; + }; + uint32_t val; + } pin[40]; + union { + struct { + uint32_t rtc_max: 10; + uint32_t reserved10: 21; + uint32_t start: 1; + }; + uint32_t val; + } cali_conf; + union { + struct { + uint32_t value_sync2: 20; + uint32_t reserved20: 10; + uint32_t rdy_real: 1; + uint32_t rdy_sync2: 1; + }; + uint32_t val; + } cali_data; + union { + struct { + uint32_t func_sel: 6; /*select one of the 256 inputs*/ + uint32_t sig_in_inv: 1; /*revert the value of the input if you want to revert please set the value to 1*/ + uint32_t sig_in_sel: 1; /*if the slow signal bypass the io matrix or not if you want setting the value to 1*/ + uint32_t reserved8: 24; /*The 256 registers below are selection control for 256 input signals connected to GPIO matrix's 40 GPIO input if GPIO_FUNCx_IN_SEL is set to n(0<=n<40): it means GPIOn input is used for input signal x if GPIO_FUNCx_IN_SEL is set to 0x38: the input signal x is set to 1 if GPIO_FUNCx_IN_SEL is set to 0x30: the input signal x is set to 0*/ + }; + uint32_t val; + } func_in_sel_cfg[256]; + union { + struct { + uint32_t func_sel: 9; /*select one of the 256 output to 40 GPIO*/ + uint32_t inv_sel: 1; /*invert the output value if you want to revert the output value setting the value to 1*/ + uint32_t oen_sel: 1; /*weather using the logical oen signal or not using the value setting by the register*/ + uint32_t oen_inv_sel: 1; /*invert the output enable value if you want to revert the output enable value setting the value to 1*/ + uint32_t reserved12: 20; /*The 40 registers below are selection control for 40 GPIO output if GPIO_FUNCx_OUT_SEL is set to n(0<=n<256): it means GPIOn input is used for output signal x if GPIO_FUNCx_OUT_INV_SEL is set to 1 the output signal x is set to ~value. if GPIO_FUNC0_OUT_SEL is 256 or GPIO_FUNC0_OEN_SEL is 1 using GPIO_ENABLE_DATA[x] for the enable value else using the signal enable*/ + }; + uint32_t val; + } func_out_sel_cfg[40]; +} gpio_dev_t; +extern gpio_dev_t GPIO; +#endif /* _SOC_GPIO_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/i2c_reg.h b/tools/sdk/include/esp32/soc/i2c_reg.h new file mode 100644 index 00000000..d5c9858a --- /dev/null +++ b/tools/sdk/include/esp32/soc/i2c_reg.h @@ -0,0 +1,949 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_I2C_REG_H_ +#define _SOC_I2C_REG_H_ + + +#include "soc.h" + +#define REG_I2C_BASE(i) (DR_REG_I2C_EXT_BASE + (i) * 0x14000 ) + +#define I2C_SCL_LOW_PERIOD_REG(i) (REG_I2C_BASE(i) + 0x0000) +/* I2C_SCL_LOW_PERIOD : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This register is used to configure the low level width of SCL clock.*/ +#define I2C_SCL_LOW_PERIOD 0x00003FFF +#define I2C_SCL_LOW_PERIOD_M ((I2C_SCL_LOW_PERIOD_V)<<(I2C_SCL_LOW_PERIOD_S)) +#define I2C_SCL_LOW_PERIOD_V 0x3FFF +#define I2C_SCL_LOW_PERIOD_S 0 + +#define I2C_CTR_REG(i) (REG_I2C_BASE(i) + 0x0004) +/* I2C_CLK_EN : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: This is the clock gating control bit for reading or writing registers.*/ +#define I2C_CLK_EN (BIT(8)) +#define I2C_CLK_EN_M (BIT(8)) +#define I2C_CLK_EN_V 0x1 +#define I2C_CLK_EN_S 8 +/* I2C_RX_LSB_FIRST : R/W ;bitpos:[7] ;default: 1'h0 ; */ +/*description: This bit is used to control the storage mode for received datas. + 1: receive data from most significant bit 0: receive data from least significant bit*/ +#define I2C_RX_LSB_FIRST (BIT(7)) +#define I2C_RX_LSB_FIRST_M (BIT(7)) +#define I2C_RX_LSB_FIRST_V 0x1 +#define I2C_RX_LSB_FIRST_S 7 +/* I2C_TX_LSB_FIRST : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: This bit is used to control the sending mode for data need to + be send. 1: receive data from most significant bit 0: receive data from least significant bit*/ +#define I2C_TX_LSB_FIRST (BIT(6)) +#define I2C_TX_LSB_FIRST_M (BIT(6)) +#define I2C_TX_LSB_FIRST_V 0x1 +#define I2C_TX_LSB_FIRST_S 6 +/* I2C_TRANS_START : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Set this bit to start sending data in txfifo.*/ +#define I2C_TRANS_START (BIT(5)) +#define I2C_TRANS_START_M (BIT(5)) +#define I2C_TRANS_START_V 0x1 +#define I2C_TRANS_START_S 5 +/* I2C_MS_MODE : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to configure the module as i2c master clear this + bit to configure the module as i2c slave.*/ +#define I2C_MS_MODE (BIT(4)) +#define I2C_MS_MODE_M (BIT(4)) +#define I2C_MS_MODE_V 0x1 +#define I2C_MS_MODE_S 4 +/* I2C_SAMPLE_SCL_LEVEL : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to sample data in SCL low level. clear this bit + to sample data in SCL high level.*/ +#define I2C_SAMPLE_SCL_LEVEL (BIT(2)) +#define I2C_SAMPLE_SCL_LEVEL_M (BIT(2)) +#define I2C_SAMPLE_SCL_LEVEL_V 0x1 +#define I2C_SAMPLE_SCL_LEVEL_S 2 +/* I2C_SCL_FORCE_OUT : R/W ;bitpos:[1] ;default: 1'b1 ; */ +/*description: 1: normally ouput scl clock 0: exchange the function of scl_o + and scl_oe (scl_o is the original internal output scl signal scl_oe is the enable bit for the internal output scl signal)*/ +#define I2C_SCL_FORCE_OUT (BIT(1)) +#define I2C_SCL_FORCE_OUT_M (BIT(1)) +#define I2C_SCL_FORCE_OUT_V 0x1 +#define I2C_SCL_FORCE_OUT_S 1 +/* I2C_SDA_FORCE_OUT : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: 1: normally ouput sda data 0: exchange the function of sda_o + and sda_oe (sda_o is the original internal output sda signal sda_oe is the enable bit for the internal output sda signal)*/ +#define I2C_SDA_FORCE_OUT (BIT(0)) +#define I2C_SDA_FORCE_OUT_M (BIT(0)) +#define I2C_SDA_FORCE_OUT_V 0x1 +#define I2C_SDA_FORCE_OUT_S 0 + +#define I2C_SR_REG(i) (REG_I2C_BASE(i) + 0x0008) +/* I2C_SCL_STATE_LAST : RO ;bitpos:[30:28] ;default: 3'b0 ; */ +/*description: This register stores the value of state machine to produce SCL. + 3'h0: SCL_IDLE 3'h1:SCL_START 3'h2:SCL_LOW_EDGE 3'h3: SCL_LOW 3'h4:SCL_HIGH_EDGE 3'h5:SCL_HIGH 3'h6:SCL_STOP*/ +#define I2C_SCL_STATE_LAST 0x00000007 +#define I2C_SCL_STATE_LAST_M ((I2C_SCL_STATE_LAST_V)<<(I2C_SCL_STATE_LAST_S)) +#define I2C_SCL_STATE_LAST_V 0x7 +#define I2C_SCL_STATE_LAST_S 28 +/* I2C_SCL_MAIN_STATE_LAST : RO ;bitpos:[26:24] ;default: 3'b0 ; */ +/*description: This register stores the value of state machine for i2c module. + 3'h0: SCL_MAIN_IDLE 3'h1: SCL_ADDRESS_SHIFT 3'h2: SCL_ACK_ADDRESS 3'h3: SCL_RX_DATA 3'h4 SCL_TX_DATA 3'h5:SCL_SEND_ACK 3'h6:SCL_WAIT_ACK*/ +#define I2C_SCL_MAIN_STATE_LAST 0x00000007 +#define I2C_SCL_MAIN_STATE_LAST_M ((I2C_SCL_MAIN_STATE_LAST_V)<<(I2C_SCL_MAIN_STATE_LAST_S)) +#define I2C_SCL_MAIN_STATE_LAST_V 0x7 +#define I2C_SCL_MAIN_STATE_LAST_S 24 +/* I2C_TXFIFO_CNT : RO ;bitpos:[23:18] ;default: 6'b0 ; */ +/*description: This register stores the amount of received data in ram.*/ +#define I2C_TXFIFO_CNT 0x0000003F +#define I2C_TXFIFO_CNT_M ((I2C_TXFIFO_CNT_V)<<(I2C_TXFIFO_CNT_S)) +#define I2C_TXFIFO_CNT_V 0x3F +#define I2C_TXFIFO_CNT_S 18 +/* I2C_RXFIFO_CNT : RO ;bitpos:[13:8] ;default: 6'b0 ; */ +/*description: This register represent the amount of data need to send.*/ +#define I2C_RXFIFO_CNT 0x0000003F +#define I2C_RXFIFO_CNT_M ((I2C_RXFIFO_CNT_V)<<(I2C_RXFIFO_CNT_S)) +#define I2C_RXFIFO_CNT_V 0x3F +#define I2C_RXFIFO_CNT_S 8 +/* I2C_BYTE_TRANS : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: This register changes to high level when one byte is transferred.*/ +#define I2C_BYTE_TRANS (BIT(6)) +#define I2C_BYTE_TRANS_M (BIT(6)) +#define I2C_BYTE_TRANS_V 0x1 +#define I2C_BYTE_TRANS_S 6 +/* I2C_SLAVE_ADDRESSED : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: when configured as i2c slave and the address send by master + is equal to slave's address then this bit will be high level.*/ +#define I2C_SLAVE_ADDRESSED (BIT(5)) +#define I2C_SLAVE_ADDRESSED_M (BIT(5)) +#define I2C_SLAVE_ADDRESSED_V 0x1 +#define I2C_SLAVE_ADDRESSED_S 5 +/* I2C_BUS_BUSY : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: 1:I2C bus is busy transferring data. 0:I2C bus is in idle state.*/ +#define I2C_BUS_BUSY (BIT(4)) +#define I2C_BUS_BUSY_M (BIT(4)) +#define I2C_BUS_BUSY_V 0x1 +#define I2C_BUS_BUSY_S 4 +/* I2C_ARB_LOST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: when I2C lost control of SDA line this register changes to high level.*/ +#define I2C_ARB_LOST (BIT(3)) +#define I2C_ARB_LOST_M (BIT(3)) +#define I2C_ARB_LOST_V 0x1 +#define I2C_ARB_LOST_S 3 +/* I2C_TIME_OUT : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: when I2C takes more than time_out_reg clocks to receive a data + then this register changes to high level.*/ +#define I2C_TIME_OUT (BIT(2)) +#define I2C_TIME_OUT_M (BIT(2)) +#define I2C_TIME_OUT_V 0x1 +#define I2C_TIME_OUT_S 2 +/* I2C_SLAVE_RW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: when in slave mode 1: master read slave 0: master write slave.*/ +#define I2C_SLAVE_RW (BIT(1)) +#define I2C_SLAVE_RW_M (BIT(1)) +#define I2C_SLAVE_RW_V 0x1 +#define I2C_SLAVE_RW_S 1 +/* I2C_ACK_REC : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: This register stores the value of ACK bit.*/ +#define I2C_ACK_REC (BIT(0)) +#define I2C_ACK_REC_M (BIT(0)) +#define I2C_ACK_REC_V 0x1 +#define I2C_ACK_REC_S 0 + +#define I2C_TO_REG(i) (REG_I2C_BASE(i) + 0x000c) +/* I2C_TIME_OUT_REG : R/W ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: This register is used to configure the max clock number of receiving a data.*/ +#define I2C_TIME_OUT_REG 0x000FFFFF +#define I2C_TIME_OUT_REG_M ((I2C_TIME_OUT_REG_V)<<(I2C_TIME_OUT_REG_S)) +#define I2C_TIME_OUT_REG_V 0xFFFFF +#define I2C_TIME_OUT_REG_S 0 + +#define I2C_SLAVE_ADDR_REG(i) (REG_I2C_BASE(i) + 0x0010) +/* I2C_ADDR_10BIT_EN : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: This register is used to enable slave 10bit address mode.*/ +#define I2C_ADDR_10BIT_EN (BIT(31)) +#define I2C_ADDR_10BIT_EN_M (BIT(31)) +#define I2C_ADDR_10BIT_EN_V 0x1 +#define I2C_ADDR_10BIT_EN_S 31 +/* I2C_SLAVE_ADDR : R/W ;bitpos:[14:0] ;default: 15'b0 ; */ +/*description: when configured as i2c slave this register is used to configure + slave's address.*/ +#define I2C_SLAVE_ADDR 0x00007FFF +#define I2C_SLAVE_ADDR_M ((I2C_SLAVE_ADDR_V)<<(I2C_SLAVE_ADDR_S)) +#define I2C_SLAVE_ADDR_V 0x7FFF +#define I2C_SLAVE_ADDR_S 0 + +#define I2C_RXFIFO_ST_REG(i) (REG_I2C_BASE(i) + 0x0014) +/* I2C_TXFIFO_END_ADDR : RO ;bitpos:[19:15] ;default: 5'b0 ; */ +/*description: This is the offset address of the last sending data as described + in nonfifo_tx_thres register.*/ +#define I2C_TXFIFO_END_ADDR 0x0000001F +#define I2C_TXFIFO_END_ADDR_M ((I2C_TXFIFO_END_ADDR_V)<<(I2C_TXFIFO_END_ADDR_S)) +#define I2C_TXFIFO_END_ADDR_V 0x1F +#define I2C_TXFIFO_END_ADDR_S 15 +/* I2C_TXFIFO_START_ADDR : RO ;bitpos:[14:10] ;default: 5'b0 ; */ +/*description: This is the offset address of the first sending data as described + in nonfifo_tx_thres register.*/ +#define I2C_TXFIFO_START_ADDR 0x0000001F +#define I2C_TXFIFO_START_ADDR_M ((I2C_TXFIFO_START_ADDR_V)<<(I2C_TXFIFO_START_ADDR_S)) +#define I2C_TXFIFO_START_ADDR_V 0x1F +#define I2C_TXFIFO_START_ADDR_S 10 +/* I2C_RXFIFO_END_ADDR : RO ;bitpos:[9:5] ;default: 5'b0 ; */ +/*description: This is the offset address of the first receiving data as described + in nonfifo_rx_thres_register.*/ +#define I2C_RXFIFO_END_ADDR 0x0000001F +#define I2C_RXFIFO_END_ADDR_M ((I2C_RXFIFO_END_ADDR_V)<<(I2C_RXFIFO_END_ADDR_S)) +#define I2C_RXFIFO_END_ADDR_V 0x1F +#define I2C_RXFIFO_END_ADDR_S 5 +/* I2C_RXFIFO_START_ADDR : RO ;bitpos:[4:0] ;default: 5'b0 ; */ +/*description: This is the offset address of the last receiving data as described + in nonfifo_rx_thres_register.*/ +#define I2C_RXFIFO_START_ADDR 0x0000001F +#define I2C_RXFIFO_START_ADDR_M ((I2C_RXFIFO_START_ADDR_V)<<(I2C_RXFIFO_START_ADDR_S)) +#define I2C_RXFIFO_START_ADDR_V 0x1F +#define I2C_RXFIFO_START_ADDR_S 0 + +#define I2C_FIFO_CONF_REG(i) (REG_I2C_BASE(i) + 0x0018) +/* I2C_NONFIFO_TX_THRES : R/W ;bitpos:[25:20] ;default: 6'h15 ; */ +/*description: when I2C sends more than nonfifo_tx_thres data it will produce + tx_send_empty_int_raw interrupt and update the current offset address of the sending data.*/ +#define I2C_NONFIFO_TX_THRES 0x0000003F +#define I2C_NONFIFO_TX_THRES_M ((I2C_NONFIFO_TX_THRES_V)<<(I2C_NONFIFO_TX_THRES_S)) +#define I2C_NONFIFO_TX_THRES_V 0x3F +#define I2C_NONFIFO_TX_THRES_S 20 +/* I2C_NONFIFO_RX_THRES : R/W ;bitpos:[19:14] ;default: 6'h15 ; */ +/*description: when I2C receives more than nonfifo_rx_thres data it will produce + rx_send_full_int_raw interrupt and update the current offset address of the receiving data.*/ +#define I2C_NONFIFO_RX_THRES 0x0000003F +#define I2C_NONFIFO_RX_THRES_M ((I2C_NONFIFO_RX_THRES_V)<<(I2C_NONFIFO_RX_THRES_S)) +#define I2C_NONFIFO_RX_THRES_V 0x3F +#define I2C_NONFIFO_RX_THRES_S 14 +/* I2C_TX_FIFO_RST : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: Set this bit to reset tx fifo when using apb fifo access.*/ +#define I2C_TX_FIFO_RST (BIT(13)) +#define I2C_TX_FIFO_RST_M (BIT(13)) +#define I2C_TX_FIFO_RST_V 0x1 +#define I2C_TX_FIFO_RST_S 13 +/* I2C_RX_FIFO_RST : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: Set this bit to reset rx fifo when using apb fifo access.*/ +#define I2C_RX_FIFO_RST (BIT(12)) +#define I2C_RX_FIFO_RST_M (BIT(12)) +#define I2C_RX_FIFO_RST_V 0x1 +#define I2C_RX_FIFO_RST_S 12 +/* I2C_FIFO_ADDR_CFG_EN : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: When this bit is set to 1 then the byte after address represent + the offset address of I2C Slave's ram.*/ +#define I2C_FIFO_ADDR_CFG_EN (BIT(11)) +#define I2C_FIFO_ADDR_CFG_EN_M (BIT(11)) +#define I2C_FIFO_ADDR_CFG_EN_V 0x1 +#define I2C_FIFO_ADDR_CFG_EN_S 11 +/* I2C_NONFIFO_EN : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: Set this bit to enble apb nonfifo access.*/ +#define I2C_NONFIFO_EN (BIT(10)) +#define I2C_NONFIFO_EN_M (BIT(10)) +#define I2C_NONFIFO_EN_V 0x1 +#define I2C_NONFIFO_EN_S 10 +/* I2C_TXFIFO_EMPTY_THRHD : R/W ;bitpos:[9:5] ;default: 5'h4 ; */ +/*description: Config txfifo empty threhd value when using apb fifo access*/ +#define I2C_TXFIFO_EMPTY_THRHD 0x0000001F +#define I2C_TXFIFO_EMPTY_THRHD_M ((I2C_TXFIFO_EMPTY_THRHD_V)<<(I2C_TXFIFO_EMPTY_THRHD_S)) +#define I2C_TXFIFO_EMPTY_THRHD_V 0x1F +#define I2C_TXFIFO_EMPTY_THRHD_S 5 +/* I2C_RXFIFO_FULL_THRHD : R/W ;bitpos:[4:0] ;default: 5'hb ; */ +/*description: */ +#define I2C_RXFIFO_FULL_THRHD 0x0000001F +#define I2C_RXFIFO_FULL_THRHD_M ((I2C_RXFIFO_FULL_THRHD_V)<<(I2C_RXFIFO_FULL_THRHD_S)) +#define I2C_RXFIFO_FULL_THRHD_V 0x1F +#define I2C_RXFIFO_FULL_THRHD_S 0 + +#define I2C_DATA_REG(i) (REG_I2C_BASE(i) + 0x001c) +/* I2C_FIFO_RDATA : RO ;bitpos:[7:0] ;default: 8'b0 ; */ +/*description: The register represent the byte data read from rxfifo when use apb fifo access*/ +#define I2C_FIFO_RDATA 0x000000FF +#define I2C_FIFO_RDATA_M ((I2C_FIFO_RDATA_V)<<(I2C_FIFO_RDATA_S)) +#define I2C_FIFO_RDATA_V 0xFF +#define I2C_FIFO_RDATA_S 0 + +#define I2C_INT_RAW_REG(i) (REG_I2C_BASE(i) + 0x0020) +/* I2C_TX_SEND_EMPTY_INT_RAW : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for tx_send_empty_int interrupt.when + I2C sends more data than nonfifo_tx_thres it will produce tx_send_empty_int interrupt..*/ +#define I2C_TX_SEND_EMPTY_INT_RAW (BIT(12)) +#define I2C_TX_SEND_EMPTY_INT_RAW_M (BIT(12)) +#define I2C_TX_SEND_EMPTY_INT_RAW_V 0x1 +#define I2C_TX_SEND_EMPTY_INT_RAW_S 12 +/* I2C_RX_REC_FULL_INT_RAW : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for rx_rec_full_int interrupt. when + I2C receives more data than nonfifo_rx_thres it will produce rx_rec_full_int interrupt.*/ +#define I2C_RX_REC_FULL_INT_RAW (BIT(11)) +#define I2C_RX_REC_FULL_INT_RAW_M (BIT(11)) +#define I2C_RX_REC_FULL_INT_RAW_V 0x1 +#define I2C_RX_REC_FULL_INT_RAW_S 11 +/* I2C_ACK_ERR_INT_RAW : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for ack_err_int interrupt. when + I2C receives a wrong ACK bit it will produce ack_err_int interrupt..*/ +#define I2C_ACK_ERR_INT_RAW (BIT(10)) +#define I2C_ACK_ERR_INT_RAW_M (BIT(10)) +#define I2C_ACK_ERR_INT_RAW_V 0x1 +#define I2C_ACK_ERR_INT_RAW_S 10 +/* I2C_TRANS_START_INT_RAW : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for trans_start_int interrupt. when + I2C sends the START bit it will produce trans_start_int interrupt.*/ +#define I2C_TRANS_START_INT_RAW (BIT(9)) +#define I2C_TRANS_START_INT_RAW_M (BIT(9)) +#define I2C_TRANS_START_INT_RAW_V 0x1 +#define I2C_TRANS_START_INT_RAW_S 9 +/* I2C_TIME_OUT_INT_RAW : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for time_out_int interrupt. when + I2C takes a lot of time to receive a data it will produce time_out_int interrupt.*/ +#define I2C_TIME_OUT_INT_RAW (BIT(8)) +#define I2C_TIME_OUT_INT_RAW_M (BIT(8)) +#define I2C_TIME_OUT_INT_RAW_V 0x1 +#define I2C_TIME_OUT_INT_RAW_S 8 +/* I2C_TRANS_COMPLETE_INT_RAW : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for trans_complete_int interrupt. + when I2C Master finished STOP command it will produce trans_complete_int interrupt.*/ +#define I2C_TRANS_COMPLETE_INT_RAW (BIT(7)) +#define I2C_TRANS_COMPLETE_INT_RAW_M (BIT(7)) +#define I2C_TRANS_COMPLETE_INT_RAW_V 0x1 +#define I2C_TRANS_COMPLETE_INT_RAW_S 7 +/* I2C_MASTER_TRAN_COMP_INT_RAW : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for master_tra_comp_int interrupt. + when I2C Master sends or receives a byte it will produce master_tran_comp_int interrupt.*/ +#define I2C_MASTER_TRAN_COMP_INT_RAW (BIT(6)) +#define I2C_MASTER_TRAN_COMP_INT_RAW_M (BIT(6)) +#define I2C_MASTER_TRAN_COMP_INT_RAW_V 0x1 +#define I2C_MASTER_TRAN_COMP_INT_RAW_S 6 +/* I2C_ARBITRATION_LOST_INT_RAW : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for arbitration_lost_int interrupt.when + I2C lost the usage right of I2C BUS it will produce arbitration_lost_int interrupt.*/ +#define I2C_ARBITRATION_LOST_INT_RAW (BIT(5)) +#define I2C_ARBITRATION_LOST_INT_RAW_M (BIT(5)) +#define I2C_ARBITRATION_LOST_INT_RAW_V 0x1 +#define I2C_ARBITRATION_LOST_INT_RAW_S 5 +/* I2C_SLAVE_TRAN_COMP_INT_RAW : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for slave_tran_comp_int interrupt. + when I2C Slave detectsthe STOP bit it will produce slave_tran_comp_int interrupt.*/ +#define I2C_SLAVE_TRAN_COMP_INT_RAW (BIT(4)) +#define I2C_SLAVE_TRAN_COMP_INT_RAW_M (BIT(4)) +#define I2C_SLAVE_TRAN_COMP_INT_RAW_V 0x1 +#define I2C_SLAVE_TRAN_COMP_INT_RAW_S 4 +/* I2C_END_DETECT_INT_RAW : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for end_detect_int interrupt. when + I2C deals with the END command it will produce end_detect_int interrupt.*/ +#define I2C_END_DETECT_INT_RAW (BIT(3)) +#define I2C_END_DETECT_INT_RAW_M (BIT(3)) +#define I2C_END_DETECT_INT_RAW_V 0x1 +#define I2C_END_DETECT_INT_RAW_S 3 +/* I2C_RXFIFO_OVF_INT_RAW : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for receiving data overflow when + use apb fifo access.*/ +#define I2C_RXFIFO_OVF_INT_RAW (BIT(2)) +#define I2C_RXFIFO_OVF_INT_RAW_M (BIT(2)) +#define I2C_RXFIFO_OVF_INT_RAW_V 0x1 +#define I2C_RXFIFO_OVF_INT_RAW_S 2 +/* I2C_TXFIFO_EMPTY_INT_RAW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for txfifo empty when use apb fifo access.*/ +#define I2C_TXFIFO_EMPTY_INT_RAW (BIT(1)) +#define I2C_TXFIFO_EMPTY_INT_RAW_M (BIT(1)) +#define I2C_TXFIFO_EMPTY_INT_RAW_V 0x1 +#define I2C_TXFIFO_EMPTY_INT_RAW_S 1 +/* I2C_RXFIFO_FULL_INT_RAW : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The raw interrupt status bit for rxfifo full when use apb fifo access.*/ +#define I2C_RXFIFO_FULL_INT_RAW (BIT(0)) +#define I2C_RXFIFO_FULL_INT_RAW_M (BIT(0)) +#define I2C_RXFIFO_FULL_INT_RAW_V 0x1 +#define I2C_RXFIFO_FULL_INT_RAW_S 0 + +#define I2C_INT_CLR_REG(i) (REG_I2C_BASE(i) + 0x0024) +/* I2C_TX_SEND_EMPTY_INT_CLR : WO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: Set this bit to clear the tx_send_empty_int interrupt.*/ +#define I2C_TX_SEND_EMPTY_INT_CLR (BIT(12)) +#define I2C_TX_SEND_EMPTY_INT_CLR_M (BIT(12)) +#define I2C_TX_SEND_EMPTY_INT_CLR_V 0x1 +#define I2C_TX_SEND_EMPTY_INT_CLR_S 12 +/* I2C_RX_REC_FULL_INT_CLR : WO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rx_rec_full_int interrupt.*/ +#define I2C_RX_REC_FULL_INT_CLR (BIT(11)) +#define I2C_RX_REC_FULL_INT_CLR_M (BIT(11)) +#define I2C_RX_REC_FULL_INT_CLR_V 0x1 +#define I2C_RX_REC_FULL_INT_CLR_S 11 +/* I2C_ACK_ERR_INT_CLR : WO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: Set this bit to clear the ack_err_int interrupt.*/ +#define I2C_ACK_ERR_INT_CLR (BIT(10)) +#define I2C_ACK_ERR_INT_CLR_M (BIT(10)) +#define I2C_ACK_ERR_INT_CLR_V 0x1 +#define I2C_ACK_ERR_INT_CLR_S 10 +/* I2C_TRANS_START_INT_CLR : WO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: Set this bit to clear the trans_start_int interrupt.*/ +#define I2C_TRANS_START_INT_CLR (BIT(9)) +#define I2C_TRANS_START_INT_CLR_M (BIT(9)) +#define I2C_TRANS_START_INT_CLR_V 0x1 +#define I2C_TRANS_START_INT_CLR_S 9 +/* I2C_TIME_OUT_INT_CLR : WO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: Set this bit to clear the time_out_int interrupt.*/ +#define I2C_TIME_OUT_INT_CLR (BIT(8)) +#define I2C_TIME_OUT_INT_CLR_M (BIT(8)) +#define I2C_TIME_OUT_INT_CLR_V 0x1 +#define I2C_TIME_OUT_INT_CLR_S 8 +/* I2C_TRANS_COMPLETE_INT_CLR : WO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set this bit to clear the trans_complete_int interrupt.*/ +#define I2C_TRANS_COMPLETE_INT_CLR (BIT(7)) +#define I2C_TRANS_COMPLETE_INT_CLR_M (BIT(7)) +#define I2C_TRANS_COMPLETE_INT_CLR_V 0x1 +#define I2C_TRANS_COMPLETE_INT_CLR_S 7 +/* I2C_MASTER_TRAN_COMP_INT_CLR : WO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to clear the master_tran_comp interrupt.*/ +#define I2C_MASTER_TRAN_COMP_INT_CLR (BIT(6)) +#define I2C_MASTER_TRAN_COMP_INT_CLR_M (BIT(6)) +#define I2C_MASTER_TRAN_COMP_INT_CLR_V 0x1 +#define I2C_MASTER_TRAN_COMP_INT_CLR_S 6 +/* I2C_ARBITRATION_LOST_INT_CLR : WO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Set this bit to clear the arbitration_lost_int interrupt.*/ +#define I2C_ARBITRATION_LOST_INT_CLR (BIT(5)) +#define I2C_ARBITRATION_LOST_INT_CLR_M (BIT(5)) +#define I2C_ARBITRATION_LOST_INT_CLR_V 0x1 +#define I2C_ARBITRATION_LOST_INT_CLR_S 5 +/* I2C_SLAVE_TRAN_COMP_INT_CLR : WO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to clear the slave_tran_comp_int interrupt.*/ +#define I2C_SLAVE_TRAN_COMP_INT_CLR (BIT(4)) +#define I2C_SLAVE_TRAN_COMP_INT_CLR_M (BIT(4)) +#define I2C_SLAVE_TRAN_COMP_INT_CLR_V 0x1 +#define I2C_SLAVE_TRAN_COMP_INT_CLR_S 4 +/* I2C_END_DETECT_INT_CLR : WO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to clear the end_detect_int interrupt.*/ +#define I2C_END_DETECT_INT_CLR (BIT(3)) +#define I2C_END_DETECT_INT_CLR_M (BIT(3)) +#define I2C_END_DETECT_INT_CLR_V 0x1 +#define I2C_END_DETECT_INT_CLR_S 3 +/* I2C_RXFIFO_OVF_INT_CLR : WO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rxfifo_ovf_int interrupt.*/ +#define I2C_RXFIFO_OVF_INT_CLR (BIT(2)) +#define I2C_RXFIFO_OVF_INT_CLR_M (BIT(2)) +#define I2C_RXFIFO_OVF_INT_CLR_V 0x1 +#define I2C_RXFIFO_OVF_INT_CLR_S 2 +/* I2C_TXFIFO_EMPTY_INT_CLR : WO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to clear the txfifo_empty_int interrupt.*/ +#define I2C_TXFIFO_EMPTY_INT_CLR (BIT(1)) +#define I2C_TXFIFO_EMPTY_INT_CLR_M (BIT(1)) +#define I2C_TXFIFO_EMPTY_INT_CLR_V 0x1 +#define I2C_TXFIFO_EMPTY_INT_CLR_S 1 +/* I2C_RXFIFO_FULL_INT_CLR : WO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rxfifo_full_int interrupt.*/ +#define I2C_RXFIFO_FULL_INT_CLR (BIT(0)) +#define I2C_RXFIFO_FULL_INT_CLR_M (BIT(0)) +#define I2C_RXFIFO_FULL_INT_CLR_V 0x1 +#define I2C_RXFIFO_FULL_INT_CLR_S 0 + +#define I2C_INT_ENA_REG(i) (REG_I2C_BASE(i) + 0x0028) +/* I2C_TX_SEND_EMPTY_INT_ENA : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: The enable bit for tx_send_empty_int interrupt.*/ +#define I2C_TX_SEND_EMPTY_INT_ENA (BIT(12)) +#define I2C_TX_SEND_EMPTY_INT_ENA_M (BIT(12)) +#define I2C_TX_SEND_EMPTY_INT_ENA_V 0x1 +#define I2C_TX_SEND_EMPTY_INT_ENA_S 12 +/* I2C_RX_REC_FULL_INT_ENA : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: The enable bit for rx_rec_full_int interrupt.*/ +#define I2C_RX_REC_FULL_INT_ENA (BIT(11)) +#define I2C_RX_REC_FULL_INT_ENA_M (BIT(11)) +#define I2C_RX_REC_FULL_INT_ENA_V 0x1 +#define I2C_RX_REC_FULL_INT_ENA_S 11 +/* I2C_ACK_ERR_INT_ENA : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: The enable bit for ack_err_int interrupt.*/ +#define I2C_ACK_ERR_INT_ENA (BIT(10)) +#define I2C_ACK_ERR_INT_ENA_M (BIT(10)) +#define I2C_ACK_ERR_INT_ENA_V 0x1 +#define I2C_ACK_ERR_INT_ENA_S 10 +/* I2C_TRANS_START_INT_ENA : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: The enable bit for trans_start_int interrupt.*/ +#define I2C_TRANS_START_INT_ENA (BIT(9)) +#define I2C_TRANS_START_INT_ENA_M (BIT(9)) +#define I2C_TRANS_START_INT_ENA_V 0x1 +#define I2C_TRANS_START_INT_ENA_S 9 +/* I2C_TIME_OUT_INT_ENA : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The enable bit for time_out_int interrupt.*/ +#define I2C_TIME_OUT_INT_ENA (BIT(8)) +#define I2C_TIME_OUT_INT_ENA_M (BIT(8)) +#define I2C_TIME_OUT_INT_ENA_V 0x1 +#define I2C_TIME_OUT_INT_ENA_S 8 +/* I2C_TRANS_COMPLETE_INT_ENA : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The enable bit for trans_complete_int interrupt.*/ +#define I2C_TRANS_COMPLETE_INT_ENA (BIT(7)) +#define I2C_TRANS_COMPLETE_INT_ENA_M (BIT(7)) +#define I2C_TRANS_COMPLETE_INT_ENA_V 0x1 +#define I2C_TRANS_COMPLETE_INT_ENA_S 7 +/* I2C_MASTER_TRAN_COMP_INT_ENA : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The enable bit for master_tran_comp_int interrupt.*/ +#define I2C_MASTER_TRAN_COMP_INT_ENA (BIT(6)) +#define I2C_MASTER_TRAN_COMP_INT_ENA_M (BIT(6)) +#define I2C_MASTER_TRAN_COMP_INT_ENA_V 0x1 +#define I2C_MASTER_TRAN_COMP_INT_ENA_S 6 +/* I2C_ARBITRATION_LOST_INT_ENA : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The enable bit for arbitration_lost_int interrupt.*/ +#define I2C_ARBITRATION_LOST_INT_ENA (BIT(5)) +#define I2C_ARBITRATION_LOST_INT_ENA_M (BIT(5)) +#define I2C_ARBITRATION_LOST_INT_ENA_V 0x1 +#define I2C_ARBITRATION_LOST_INT_ENA_S 5 +/* I2C_SLAVE_TRAN_COMP_INT_ENA : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The enable bit for slave_tran_comp_int interrupt.*/ +#define I2C_SLAVE_TRAN_COMP_INT_ENA (BIT(4)) +#define I2C_SLAVE_TRAN_COMP_INT_ENA_M (BIT(4)) +#define I2C_SLAVE_TRAN_COMP_INT_ENA_V 0x1 +#define I2C_SLAVE_TRAN_COMP_INT_ENA_S 4 +/* I2C_END_DETECT_INT_ENA : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The enable bit for end_detect_int interrupt.*/ +#define I2C_END_DETECT_INT_ENA (BIT(3)) +#define I2C_END_DETECT_INT_ENA_M (BIT(3)) +#define I2C_END_DETECT_INT_ENA_V 0x1 +#define I2C_END_DETECT_INT_ENA_S 3 +/* I2C_RXFIFO_OVF_INT_ENA : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The enable bit for rxfifo_ovf_int interrupt.*/ +#define I2C_RXFIFO_OVF_INT_ENA (BIT(2)) +#define I2C_RXFIFO_OVF_INT_ENA_M (BIT(2)) +#define I2C_RXFIFO_OVF_INT_ENA_V 0x1 +#define I2C_RXFIFO_OVF_INT_ENA_S 2 +/* I2C_TXFIFO_EMPTY_INT_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The enable bit for txfifo_empty_int interrupt.*/ +#define I2C_TXFIFO_EMPTY_INT_ENA (BIT(1)) +#define I2C_TXFIFO_EMPTY_INT_ENA_M (BIT(1)) +#define I2C_TXFIFO_EMPTY_INT_ENA_V 0x1 +#define I2C_TXFIFO_EMPTY_INT_ENA_S 1 +/* I2C_RXFIFO_FULL_INT_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The enable bit for rxfifo_full_int interrupt.*/ +#define I2C_RXFIFO_FULL_INT_ENA (BIT(0)) +#define I2C_RXFIFO_FULL_INT_ENA_M (BIT(0)) +#define I2C_RXFIFO_FULL_INT_ENA_V 0x1 +#define I2C_RXFIFO_FULL_INT_ENA_S 0 + +#define I2C_INT_STATUS_REG(i) (REG_I2C_BASE(i) + 0x002c) +/* I2C_TX_SEND_EMPTY_INT_ST : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: The masked interrupt status for tx_send_empty_int interrupt.*/ +#define I2C_TX_SEND_EMPTY_INT_ST (BIT(12)) +#define I2C_TX_SEND_EMPTY_INT_ST_M (BIT(12)) +#define I2C_TX_SEND_EMPTY_INT_ST_V 0x1 +#define I2C_TX_SEND_EMPTY_INT_ST_S 12 +/* I2C_RX_REC_FULL_INT_ST : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: The masked interrupt status for rx_rec_full_int interrupt.*/ +#define I2C_RX_REC_FULL_INT_ST (BIT(11)) +#define I2C_RX_REC_FULL_INT_ST_M (BIT(11)) +#define I2C_RX_REC_FULL_INT_ST_V 0x1 +#define I2C_RX_REC_FULL_INT_ST_S 11 +/* I2C_ACK_ERR_INT_ST : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: The masked interrupt status for ack_err_int interrupt.*/ +#define I2C_ACK_ERR_INT_ST (BIT(10)) +#define I2C_ACK_ERR_INT_ST_M (BIT(10)) +#define I2C_ACK_ERR_INT_ST_V 0x1 +#define I2C_ACK_ERR_INT_ST_S 10 +/* I2C_TRANS_START_INT_ST : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: The masked interrupt status for trans_start_int interrupt.*/ +#define I2C_TRANS_START_INT_ST (BIT(9)) +#define I2C_TRANS_START_INT_ST_M (BIT(9)) +#define I2C_TRANS_START_INT_ST_V 0x1 +#define I2C_TRANS_START_INT_ST_S 9 +/* I2C_TIME_OUT_INT_ST : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The masked interrupt status for time_out_int interrupt.*/ +#define I2C_TIME_OUT_INT_ST (BIT(8)) +#define I2C_TIME_OUT_INT_ST_M (BIT(8)) +#define I2C_TIME_OUT_INT_ST_V 0x1 +#define I2C_TIME_OUT_INT_ST_S 8 +/* I2C_TRANS_COMPLETE_INT_ST : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The masked interrupt status for trans_complete_int interrupt.*/ +#define I2C_TRANS_COMPLETE_INT_ST (BIT(7)) +#define I2C_TRANS_COMPLETE_INT_ST_M (BIT(7)) +#define I2C_TRANS_COMPLETE_INT_ST_V 0x1 +#define I2C_TRANS_COMPLETE_INT_ST_S 7 +/* I2C_MASTER_TRAN_COMP_INT_ST : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The masked interrupt status for master_tran_comp_int interrupt.*/ +#define I2C_MASTER_TRAN_COMP_INT_ST (BIT(6)) +#define I2C_MASTER_TRAN_COMP_INT_ST_M (BIT(6)) +#define I2C_MASTER_TRAN_COMP_INT_ST_V 0x1 +#define I2C_MASTER_TRAN_COMP_INT_ST_S 6 +/* I2C_ARBITRATION_LOST_INT_ST : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The masked interrupt status for arbitration_lost_int interrupt.*/ +#define I2C_ARBITRATION_LOST_INT_ST (BIT(5)) +#define I2C_ARBITRATION_LOST_INT_ST_M (BIT(5)) +#define I2C_ARBITRATION_LOST_INT_ST_V 0x1 +#define I2C_ARBITRATION_LOST_INT_ST_S 5 +/* I2C_SLAVE_TRAN_COMP_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The masked interrupt status for slave_tran_comp_int interrupt.*/ +#define I2C_SLAVE_TRAN_COMP_INT_ST (BIT(4)) +#define I2C_SLAVE_TRAN_COMP_INT_ST_M (BIT(4)) +#define I2C_SLAVE_TRAN_COMP_INT_ST_V 0x1 +#define I2C_SLAVE_TRAN_COMP_INT_ST_S 4 +/* I2C_END_DETECT_INT_ST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The masked interrupt status for end_detect_int interrupt.*/ +#define I2C_END_DETECT_INT_ST (BIT(3)) +#define I2C_END_DETECT_INT_ST_M (BIT(3)) +#define I2C_END_DETECT_INT_ST_V 0x1 +#define I2C_END_DETECT_INT_ST_S 3 +/* I2C_RXFIFO_OVF_INT_ST : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The masked interrupt status for rxfifo_ovf_int interrupt.*/ +#define I2C_RXFIFO_OVF_INT_ST (BIT(2)) +#define I2C_RXFIFO_OVF_INT_ST_M (BIT(2)) +#define I2C_RXFIFO_OVF_INT_ST_V 0x1 +#define I2C_RXFIFO_OVF_INT_ST_S 2 +/* I2C_TXFIFO_EMPTY_INT_ST : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The masked interrupt status for txfifo_empty_int interrupt.*/ +#define I2C_TXFIFO_EMPTY_INT_ST (BIT(1)) +#define I2C_TXFIFO_EMPTY_INT_ST_M (BIT(1)) +#define I2C_TXFIFO_EMPTY_INT_ST_V 0x1 +#define I2C_TXFIFO_EMPTY_INT_ST_S 1 +/* I2C_RXFIFO_FULL_INT_ST : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The masked interrupt status for rxfifo_full_int interrupt.*/ +#define I2C_RXFIFO_FULL_INT_ST (BIT(0)) +#define I2C_RXFIFO_FULL_INT_ST_M (BIT(0)) +#define I2C_RXFIFO_FULL_INT_ST_V 0x1 +#define I2C_RXFIFO_FULL_INT_ST_S 0 + +#define I2C_SDA_HOLD_REG(i) (REG_I2C_BASE(i) + 0x0030) +/* I2C_SDA_HOLD_TIME : R/W ;bitpos:[9:0] ;default: 10'b0 ; */ +/*description: This register is used to configure the clock num I2C used to + hold the data after the negedge of SCL.*/ +#define I2C_SDA_HOLD_TIME 0x000003FF +#define I2C_SDA_HOLD_TIME_M ((I2C_SDA_HOLD_TIME_V)<<(I2C_SDA_HOLD_TIME_S)) +#define I2C_SDA_HOLD_TIME_V 0x3FF +#define I2C_SDA_HOLD_TIME_S 0 + +#define I2C_SDA_SAMPLE_REG(i) (REG_I2C_BASE(i) + 0x0034) +/* I2C_SDA_SAMPLE_TIME : R/W ;bitpos:[9:0] ;default: 10'b0 ; */ +/*description: This register is used to configure the clock num I2C used to + sample data on SDA after the posedge of SCL*/ +#define I2C_SDA_SAMPLE_TIME 0x000003FF +#define I2C_SDA_SAMPLE_TIME_M ((I2C_SDA_SAMPLE_TIME_V)<<(I2C_SDA_SAMPLE_TIME_S)) +#define I2C_SDA_SAMPLE_TIME_V 0x3FF +#define I2C_SDA_SAMPLE_TIME_S 0 + +#define I2C_SCL_HIGH_PERIOD_REG(i) (REG_I2C_BASE(i) + 0x0038) +/* I2C_SCL_HIGH_PERIOD : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This register is used to configure the clock num during SCL is low level.*/ +#define I2C_SCL_HIGH_PERIOD 0x00003FFF +#define I2C_SCL_HIGH_PERIOD_M ((I2C_SCL_HIGH_PERIOD_V)<<(I2C_SCL_HIGH_PERIOD_S)) +#define I2C_SCL_HIGH_PERIOD_V 0x3FFF +#define I2C_SCL_HIGH_PERIOD_S 0 + +#define I2C_SCL_START_HOLD_REG(i) (REG_I2C_BASE(i) + 0x0040) +/* I2C_SCL_START_HOLD_TIME : R/W ;bitpos:[9:0] ;default: 10'b1000 ; */ +/*description: This register is used to configure the clock num between the + negedge of SDA and negedge of SCL for start mark.*/ +#define I2C_SCL_START_HOLD_TIME 0x000003FF +#define I2C_SCL_START_HOLD_TIME_M ((I2C_SCL_START_HOLD_TIME_V)<<(I2C_SCL_START_HOLD_TIME_S)) +#define I2C_SCL_START_HOLD_TIME_V 0x3FF +#define I2C_SCL_START_HOLD_TIME_S 0 + +#define I2C_SCL_RSTART_SETUP_REG(i) (REG_I2C_BASE(i) + 0x0044) +/* I2C_SCL_RSTART_SETUP_TIME : R/W ;bitpos:[9:0] ;default: 10'b1000 ; */ +/*description: This register is used to configure the clock num between the + posedge of SCL and the negedge of SDA for restart mark.*/ +#define I2C_SCL_RSTART_SETUP_TIME 0x000003FF +#define I2C_SCL_RSTART_SETUP_TIME_M ((I2C_SCL_RSTART_SETUP_TIME_V)<<(I2C_SCL_RSTART_SETUP_TIME_S)) +#define I2C_SCL_RSTART_SETUP_TIME_V 0x3FF +#define I2C_SCL_RSTART_SETUP_TIME_S 0 + +#define I2C_SCL_STOP_HOLD_REG(i) (REG_I2C_BASE(i) + 0x0048) +/* I2C_SCL_STOP_HOLD_TIME : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This register is used to configure the clock num after the STOP bit's posedge.*/ +#define I2C_SCL_STOP_HOLD_TIME 0x00003FFF +#define I2C_SCL_STOP_HOLD_TIME_M ((I2C_SCL_STOP_HOLD_TIME_V)<<(I2C_SCL_STOP_HOLD_TIME_S)) +#define I2C_SCL_STOP_HOLD_TIME_V 0x3FFF +#define I2C_SCL_STOP_HOLD_TIME_S 0 + +#define I2C_SCL_STOP_SETUP_REG(i) (REG_I2C_BASE(i) + 0x004C) +/* I2C_SCL_STOP_SETUP_TIME : R/W ;bitpos:[9:0] ;default: 10'b0 ; */ +/*description: This register is used to configure the clock num between the + posedge of SCL and the posedge of SDA.*/ +#define I2C_SCL_STOP_SETUP_TIME 0x000003FF +#define I2C_SCL_STOP_SETUP_TIME_M ((I2C_SCL_STOP_SETUP_TIME_V)<<(I2C_SCL_STOP_SETUP_TIME_S)) +#define I2C_SCL_STOP_SETUP_TIME_V 0x3FF +#define I2C_SCL_STOP_SETUP_TIME_S 0 + +#define I2C_SCL_FILTER_CFG_REG(i) (REG_I2C_BASE(i) + 0x0050) +/* I2C_SCL_FILTER_EN : R/W ;bitpos:[3] ;default: 1'b1 ; */ +/*description: This is the filter enable bit for SCL.*/ +#define I2C_SCL_FILTER_EN (BIT(3)) +#define I2C_SCL_FILTER_EN_M (BIT(3)) +#define I2C_SCL_FILTER_EN_V 0x1 +#define I2C_SCL_FILTER_EN_S 3 +/* I2C_SCL_FILTER_THRES : R/W ;bitpos:[2:0] ;default: 3'b0 ; */ +/*description: When input SCL's pulse width is smaller than this register value + I2C ignores this pulse.*/ +#define I2C_SCL_FILTER_THRES 0x00000007 +#define I2C_SCL_FILTER_THRES_M ((I2C_SCL_FILTER_THRES_V)<<(I2C_SCL_FILTER_THRES_S)) +#define I2C_SCL_FILTER_THRES_V 0x7 +#define I2C_SCL_FILTER_THRES_S 0 + +#define I2C_SDA_FILTER_CFG_REG(i) (REG_I2C_BASE(i) + 0x0054) +/* I2C_SDA_FILTER_EN : R/W ;bitpos:[3] ;default: 1'b1 ; */ +/*description: This is the filter enable bit for SDA.*/ +#define I2C_SDA_FILTER_EN (BIT(3)) +#define I2C_SDA_FILTER_EN_M (BIT(3)) +#define I2C_SDA_FILTER_EN_V 0x1 +#define I2C_SDA_FILTER_EN_S 3 +/* I2C_SDA_FILTER_THRES : R/W ;bitpos:[2:0] ;default: 3'b0 ; */ +/*description: When input SCL's pulse width is smaller than this register value + I2C ignores this pulse.*/ +#define I2C_SDA_FILTER_THRES 0x00000007 +#define I2C_SDA_FILTER_THRES_M ((I2C_SDA_FILTER_THRES_V)<<(I2C_SDA_FILTER_THRES_S)) +#define I2C_SDA_FILTER_THRES_V 0x7 +#define I2C_SDA_FILTER_THRES_S 0 + +#define I2C_COMD0_REG(i) (REG_I2C_BASE(i) + 0x0058) +/* I2C_COMMAND0_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command0 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND0_DONE (BIT(31)) +#define I2C_COMMAND0_DONE_M (BIT(31)) +#define I2C_COMMAND0_DONE_V 0x1 +#define I2C_COMMAND0_DONE_S 31 +/* I2C_COMMAND0 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command0. It consists of three part. op_code + is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND0 0x00003FFF +#define I2C_COMMAND0_M ((I2C_COMMAND0_V)<<(I2C_COMMAND0_S)) +#define I2C_COMMAND0_V 0x3FFF +#define I2C_COMMAND0_S 0 + +#define I2C_COMD1_REG(i) (REG_I2C_BASE(i) + 0x005C) +/* I2C_COMMAND1_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command1 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND1_DONE (BIT(31)) +#define I2C_COMMAND1_DONE_M (BIT(31)) +#define I2C_COMMAND1_DONE_V 0x1 +#define I2C_COMMAND1_DONE_S 31 +/* I2C_COMMAND1 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command1. It consists of three part. op_code + is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND1 0x00003FFF +#define I2C_COMMAND1_M ((I2C_COMMAND1_V)<<(I2C_COMMAND1_S)) +#define I2C_COMMAND1_V 0x3FFF +#define I2C_COMMAND1_S 0 + +#define I2C_COMD2_REG(i) (REG_I2C_BASE(i) + 0x0060) +/* I2C_COMMAND2_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command2 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND2_DONE (BIT(31)) +#define I2C_COMMAND2_DONE_M (BIT(31)) +#define I2C_COMMAND2_DONE_V 0x1 +#define I2C_COMMAND2_DONE_S 31 +/* I2C_COMMAND2 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command2. It consists of three part. op_code + is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND2 0x00003FFF +#define I2C_COMMAND2_M ((I2C_COMMAND2_V)<<(I2C_COMMAND2_S)) +#define I2C_COMMAND2_V 0x3FFF +#define I2C_COMMAND2_S 0 + +#define I2C_COMD3_REG(i) (REG_I2C_BASE(i) + 0x0064) +/* I2C_COMMAND3_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command3 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND3_DONE (BIT(31)) +#define I2C_COMMAND3_DONE_M (BIT(31)) +#define I2C_COMMAND3_DONE_V 0x1 +#define I2C_COMMAND3_DONE_S 31 +/* I2C_COMMAND3 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command3. It consists of three part. op_code + is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND3 0x00003FFF +#define I2C_COMMAND3_M ((I2C_COMMAND3_V)<<(I2C_COMMAND3_S)) +#define I2C_COMMAND3_V 0x3FFF +#define I2C_COMMAND3_S 0 + +#define I2C_COMD4_REG(i) (REG_I2C_BASE(i) + 0x0068) +/* I2C_COMMAND4_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command4 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND4_DONE (BIT(31)) +#define I2C_COMMAND4_DONE_M (BIT(31)) +#define I2C_COMMAND4_DONE_V 0x1 +#define I2C_COMMAND4_DONE_S 31 +/* I2C_COMMAND4 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command4. It consists of three part. op_code + is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND4 0x00003FFF +#define I2C_COMMAND4_M ((I2C_COMMAND4_V)<<(I2C_COMMAND4_S)) +#define I2C_COMMAND4_V 0x3FFF +#define I2C_COMMAND4_S 0 + +#define I2C_COMD5_REG(i) (REG_I2C_BASE(i) + 0x006C) +/* I2C_COMMAND5_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command5 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND5_DONE (BIT(31)) +#define I2C_COMMAND5_DONE_M (BIT(31)) +#define I2C_COMMAND5_DONE_V 0x1 +#define I2C_COMMAND5_DONE_S 31 +/* I2C_COMMAND5 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command5. It consists of three part. op_code + is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND5 0x00003FFF +#define I2C_COMMAND5_M ((I2C_COMMAND5_V)<<(I2C_COMMAND5_S)) +#define I2C_COMMAND5_V 0x3FFF +#define I2C_COMMAND5_S 0 + +#define I2C_COMD6_REG(i) (REG_I2C_BASE(i) + 0x0070) +/* I2C_COMMAND6_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command6 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND6_DONE (BIT(31)) +#define I2C_COMMAND6_DONE_M (BIT(31)) +#define I2C_COMMAND6_DONE_V 0x1 +#define I2C_COMMAND6_DONE_S 31 +/* I2C_COMMAND6 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command6. It consists of three part. op_code + is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND6 0x00003FFF +#define I2C_COMMAND6_M ((I2C_COMMAND6_V)<<(I2C_COMMAND6_S)) +#define I2C_COMMAND6_V 0x3FFF +#define I2C_COMMAND6_S 0 + +#define I2C_COMD7_REG(i) (REG_I2C_BASE(i) + 0x0074) +/* I2C_COMMAND7_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command7 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND7_DONE (BIT(31)) +#define I2C_COMMAND7_DONE_M (BIT(31)) +#define I2C_COMMAND7_DONE_V 0x1 +#define I2C_COMMAND7_DONE_S 31 +/* I2C_COMMAND7 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command7. It consists of three part. op_code + is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND7 0x00003FFF +#define I2C_COMMAND7_M ((I2C_COMMAND7_V)<<(I2C_COMMAND7_S)) +#define I2C_COMMAND7_V 0x3FFF +#define I2C_COMMAND7_S 0 + +#define I2C_COMD8_REG(i) (REG_I2C_BASE(i) + 0x0078) +/* I2C_COMMAND8_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command8 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND8_DONE (BIT(31)) +#define I2C_COMMAND8_DONE_M (BIT(31)) +#define I2C_COMMAND8_DONE_V 0x1 +#define I2C_COMMAND8_DONE_S 31 +/* I2C_COMMAND8 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command8. It consists of three part. op_code + is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND8 0x00003FFF +#define I2C_COMMAND8_M ((I2C_COMMAND8_V)<<(I2C_COMMAND8_S)) +#define I2C_COMMAND8_V 0x3FFF +#define I2C_COMMAND8_S 0 + +#define I2C_COMD9_REG(i) (REG_I2C_BASE(i) + 0x007C) +/* I2C_COMMAND9_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command9 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND9_DONE (BIT(31)) +#define I2C_COMMAND9_DONE_M (BIT(31)) +#define I2C_COMMAND9_DONE_V 0x1 +#define I2C_COMMAND9_DONE_S 31 +/* I2C_COMMAND9 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command9. It consists of three part. op_code + is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND9 0x00003FFF +#define I2C_COMMAND9_M ((I2C_COMMAND9_V)<<(I2C_COMMAND9_S)) +#define I2C_COMMAND9_V 0x3FFF +#define I2C_COMMAND9_S 0 + +#define I2C_COMD10_REG(i) (REG_I2C_BASE(i) + 0x0080) +/* I2C_COMMAND10_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command10 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND10_DONE (BIT(31)) +#define I2C_COMMAND10_DONE_M (BIT(31)) +#define I2C_COMMAND10_DONE_V 0x1 +#define I2C_COMMAND10_DONE_S 31 +/* I2C_COMMAND10 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command10. It consists of three part. + op_code is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND10 0x00003FFF +#define I2C_COMMAND10_M ((I2C_COMMAND10_V)<<(I2C_COMMAND10_S)) +#define I2C_COMMAND10_V 0x3FFF +#define I2C_COMMAND10_S 0 + +#define I2C_COMD11_REG(i) (REG_I2C_BASE(i) + 0x0084) +/* I2C_COMMAND11_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command11 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND11_DONE (BIT(31)) +#define I2C_COMMAND11_DONE_M (BIT(31)) +#define I2C_COMMAND11_DONE_V 0x1 +#define I2C_COMMAND11_DONE_S 31 +/* I2C_COMMAND11 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command11. It consists of three part. + op_code is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND11 0x00003FFF +#define I2C_COMMAND11_M ((I2C_COMMAND11_V)<<(I2C_COMMAND11_S)) +#define I2C_COMMAND11_V 0x3FFF +#define I2C_COMMAND11_S 0 + +#define I2C_COMD12_REG(i) (REG_I2C_BASE(i) + 0x0088) +/* I2C_COMMAND12_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command12 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND12_DONE (BIT(31)) +#define I2C_COMMAND12_DONE_M (BIT(31)) +#define I2C_COMMAND12_DONE_V 0x1 +#define I2C_COMMAND12_DONE_S 31 +/* I2C_COMMAND12 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command12. It consists of three part. + op_code is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND12 0x00003FFF +#define I2C_COMMAND12_M ((I2C_COMMAND12_V)<<(I2C_COMMAND12_S)) +#define I2C_COMMAND12_V 0x3FFF +#define I2C_COMMAND12_S 0 + +#define I2C_COMD13_REG(i) (REG_I2C_BASE(i) + 0x008C) +/* I2C_COMMAND13_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command13 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND13_DONE (BIT(31)) +#define I2C_COMMAND13_DONE_M (BIT(31)) +#define I2C_COMMAND13_DONE_V 0x1 +#define I2C_COMMAND13_DONE_S 31 +/* I2C_COMMAND13 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command13. It consists of three part. + op_code is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND13 0x00003FFF +#define I2C_COMMAND13_M ((I2C_COMMAND13_V)<<(I2C_COMMAND13_S)) +#define I2C_COMMAND13_V 0x3FFF +#define I2C_COMMAND13_S 0 + +#define I2C_COMD14_REG(i) (REG_I2C_BASE(i) + 0x0090) +/* I2C_COMMAND14_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command14 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND14_DONE (BIT(31)) +#define I2C_COMMAND14_DONE_M (BIT(31)) +#define I2C_COMMAND14_DONE_V 0x1 +#define I2C_COMMAND14_DONE_S 31 +/* I2C_COMMAND14 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command14. It consists of three part. + op_code is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND14 0x00003FFF +#define I2C_COMMAND14_M ((I2C_COMMAND14_V)<<(I2C_COMMAND14_S)) +#define I2C_COMMAND14_V 0x3FFF +#define I2C_COMMAND14_S 0 + +#define I2C_COMD15_REG(i) (REG_I2C_BASE(i) + 0x0094) +/* I2C_COMMAND15_DONE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When command15 is done in I2C Master mode this bit changes to high level.*/ +#define I2C_COMMAND15_DONE (BIT(31)) +#define I2C_COMMAND15_DONE_M (BIT(31)) +#define I2C_COMMAND15_DONE_V 0x1 +#define I2C_COMMAND15_DONE_S 31 +/* I2C_COMMAND15 : R/W ;bitpos:[13:0] ;default: 14'b0 ; */ +/*description: This is the content of command15. It consists of three part. + op_code is the command 0: RSTART 1: WRITE 2: READ 3: STOP . 4:END. Byte_num represent the number of data need to be send or data need to be received. ack_check_en ack_exp and ack value are used to control the ack bit.*/ +#define I2C_COMMAND15 0x00003FFF +#define I2C_COMMAND15_M ((I2C_COMMAND15_V)<<(I2C_COMMAND15_S)) +#define I2C_COMMAND15_V 0x3FFF +#define I2C_COMMAND15_S 0 + +#define I2C_DATE_REG(i) (REG_I2C_BASE(i) + 0x00F8) +/* I2C_DATE : R/W ;bitpos:[31:0] ;default: 32'h16042000 ; */ +/*description: */ +#define I2C_DATE 0xFFFFFFFF +#define I2C_DATE_M ((I2C_DATE_V)<<(I2C_DATE_S)) +#define I2C_DATE_V 0xFFFFFFFF +#define I2C_DATE_S 0 + +#define I2C_FIFO_START_ADDR_REG(i) (REG_I2C_BASE(i) + 0x0100) + + + + +#endif /*_SOC_I2C_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/i2c_struct.h b/tools/sdk/include/esp32/soc/i2c_struct.h new file mode 100644 index 00000000..a29a9c52 --- /dev/null +++ b/tools/sdk/include/esp32/soc/i2c_struct.h @@ -0,0 +1,289 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_I2C_STRUCT_H_ +#define _SOC_I2C_STRUCT_H_ +typedef volatile struct { + union { + struct { + uint32_t scl_low_period:14; /*This register is used to configure the low level width of SCL clock.*/ + uint32_t reserved14: 18; + }; + uint32_t val; + } scl_low_period; + union { + struct { + uint32_t sda_force_out: 1; /*1:normally output sda data 0: exchange the function of sda_o and sda_oe (sda_o is the original internal output sda signal sda_oe is the enable bit for the internal output sda signal)*/ + uint32_t scl_force_out: 1; /*1:normally output scl clock 0: exchange the function of scl_o and scl_oe (scl_o is the original internal output scl signal scl_oe is the enable bit for the internal output scl signal)*/ + uint32_t sample_scl_level: 1; /*Set this bit to sample data in SCL low level. clear this bit to sample data in SCL high level.*/ + uint32_t reserved3: 1; + uint32_t ms_mode: 1; /*Set this bit to configure the module as i2c master clear this bit to configure the module as i2c slave.*/ + uint32_t trans_start: 1; /*Set this bit to start sending data in tx_fifo.*/ + uint32_t tx_lsb_first: 1; /*This bit is used to control the sending mode for data need to be send. 1:receive data from most significant bit 0:receive data from least significant bit*/ + uint32_t rx_lsb_first: 1; /*This bit is used to control the storage mode for received data. 1:receive data from most significant bit 0:receive data from least significant bit*/ + uint32_t clk_en: 1; /*This is the clock gating control bit for reading or writing registers.*/ + uint32_t reserved9: 23; + }; + uint32_t val; + } ctr; + union { + struct { + uint32_t ack_rec: 1; /*This register stores the value of ACK bit.*/ + uint32_t slave_rw: 1; /*when in slave mode 1:master read slave 0: master write slave.*/ + uint32_t time_out: 1; /*when I2C takes more than time_out_reg clocks to receive a data then this register changes to high level.*/ + uint32_t arb_lost: 1; /*when I2C lost control of SDA line this register changes to high level.*/ + uint32_t bus_busy: 1; /*1:I2C bus is busy transferring data. 0:I2C bus is in idle state.*/ + uint32_t slave_addressed: 1; /*when configured as i2c slave and the address send by master is equal to slave's address then this bit will be high level.*/ + uint32_t byte_trans: 1; /*This register changes to high level when one byte is transferred.*/ + uint32_t reserved7: 1; + uint32_t rx_fifo_cnt: 6; /*This register represent the amount of data need to send.*/ + uint32_t reserved14: 4; + uint32_t tx_fifo_cnt: 6; /*This register stores the amount of received data in ram.*/ + uint32_t scl_main_state_last: 3; /*This register stores the value of state machine for i2c module. 3'h0: SCL_MAIN_IDLE 3'h1: SCL_ADDRESS_SHIFT 3'h2: SCL_ACK_ADDRESS 3'h3: SCL_RX_DATA 3'h4 SCL_TX_DATA 3'h5:SCL_SEND_ACK 3'h6:SCL_WAIT_ACK*/ + uint32_t reserved27: 1; + uint32_t scl_state_last: 3; /*This register stores the value of state machine to produce SCL. 3'h0: SCL_IDLE 3'h1:SCL_START 3'h2:SCL_LOW_EDGE 3'h3: SCL_LOW 3'h4:SCL_HIGH_EDGE 3'h5:SCL_HIGH 3'h6:SCL_STOP*/ + uint32_t reserved31: 1; + }; + uint32_t val; + } status_reg; + union { + struct { + uint32_t tout: 20; /*This register is used to configure the max clock number of receiving a data.*/ + uint32_t reserved20:12; + }; + uint32_t val; + } timeout; + union { + struct { + uint32_t addr: 15; /*when configured as i2c slave this register is used to configure slave's address.*/ + uint32_t reserved15: 16; + uint32_t en_10bit: 1; /*This register is used to enable slave 10bit address mode.*/ + }; + uint32_t val; + } slave_addr; + union { + struct { + uint32_t rx_fifo_start_addr: 5; /*This is the offset address of the last receiving data as described in nonfifo_rx_thres_register.*/ + uint32_t rx_fifo_end_addr: 5; /*This is the offset address of the first receiving data as described in nonfifo_rx_thres_register.*/ + uint32_t tx_fifo_start_addr: 5; /*This is the offset address of the first sending data as described in nonfifo_tx_thres register.*/ + uint32_t tx_fifo_end_addr: 5; /*This is the offset address of the last sending data as described in nonfifo_tx_thres register.*/ + uint32_t reserved20: 12; + }; + uint32_t val; + } fifo_st; + union { + struct { + uint32_t rx_fifo_full_thrhd: 5; + uint32_t tx_fifo_empty_thrhd:5; /*Config tx_fifo empty threhd value when using apb fifo access*/ + uint32_t nonfifo_en: 1; /*Set this bit to enble apb nonfifo access.*/ + uint32_t fifo_addr_cfg_en: 1; /*When this bit is set to 1 then the byte after address represent the offset address of I2C Slave's ram.*/ + uint32_t rx_fifo_rst: 1; /*Set this bit to reset rx fifo when using apb fifo access.*/ + uint32_t tx_fifo_rst: 1; /*Set this bit to reset tx fifo when using apb fifo access.*/ + uint32_t nonfifo_rx_thres: 6; /*when I2C receives more than nonfifo_rx_thres data it will produce rx_send_full_int_raw interrupt and update the current offset address of the receiving data.*/ + uint32_t nonfifo_tx_thres: 6; /*when I2C sends more than nonfifo_tx_thres data it will produce tx_send_empty_int_raw interrupt and update the current offset address of the sending data.*/ + uint32_t reserved26: 6; + }; + uint32_t val; + } fifo_conf; + union { + struct { + uint8_t data; /*The register represent the byte data read from rx_fifo when use apb fifo access*/ + uint8_t reserved[3]; + }; + uint32_t val; + } fifo_data; + union { + struct { + uint32_t rx_fifo_full: 1; /*The raw interrupt status bit for rx_fifo full when use apb fifo access.*/ + uint32_t tx_fifo_empty: 1; /*The raw interrupt status bit for tx_fifo empty when use apb fifo access.*/ + uint32_t rx_fifo_ovf: 1; /*The raw interrupt status bit for receiving data overflow when use apb fifo access.*/ + uint32_t end_detect: 1; /*The raw interrupt status bit for end_detect_int interrupt. when I2C deals with the END command it will produce end_detect_int interrupt.*/ + uint32_t slave_tran_comp: 1; /*The raw interrupt status bit for slave_tran_comp_int interrupt. when I2C Slave detects the STOP bit it will produce slave_tran_comp_int interrupt.*/ + uint32_t arbitration_lost: 1; /*The raw interrupt status bit for arbitration_lost_int interrupt.when I2C lost the usage right of I2C BUS it will produce arbitration_lost_int interrupt.*/ + uint32_t master_tran_comp: 1; /*The raw interrupt status bit for master_tra_comp_int interrupt. when I2C Master sends or receives a byte it will produce master_tran_comp_int interrupt.*/ + uint32_t trans_complete: 1; /*The raw interrupt status bit for trans_complete_int interrupt. when I2C Master finished STOP command it will produce trans_complete_int interrupt.*/ + uint32_t time_out: 1; /*The raw interrupt status bit for time_out_int interrupt. when I2C takes a lot of time to receive a data it will produce time_out_int interrupt.*/ + uint32_t trans_start: 1; /*The raw interrupt status bit for trans_start_int interrupt. when I2C sends the START bit it will produce trans_start_int interrupt.*/ + uint32_t ack_err: 1; /*The raw interrupt status bit for ack_err_int interrupt. when I2C receives a wrong ACK bit it will produce ack_err_int interrupt..*/ + uint32_t rx_rec_full: 1; /*The raw interrupt status bit for rx_rec_full_int interrupt. when I2C receives more data than nonfifo_rx_thres it will produce rx_rec_full_int interrupt.*/ + uint32_t tx_send_empty: 1; /*The raw interrupt status bit for tx_send_empty_int interrupt.when I2C sends more data than nonfifo_tx_thres it will produce tx_send_empty_int interrupt..*/ + uint32_t reserved13: 19; + }; + uint32_t val; + } int_raw; + union { + struct { + uint32_t rx_fifo_full: 1; /*Set this bit to clear the rx_fifo_full_int interrupt.*/ + uint32_t tx_fifo_empty: 1; /*Set this bit to clear the tx_fifo_empty_int interrupt.*/ + uint32_t rx_fifo_ovf: 1; /*Set this bit to clear the rx_fifo_ovf_int interrupt.*/ + uint32_t end_detect: 1; /*Set this bit to clear the end_detect_int interrupt.*/ + uint32_t slave_tran_comp: 1; /*Set this bit to clear the slave_tran_comp_int interrupt.*/ + uint32_t arbitration_lost: 1; /*Set this bit to clear the arbitration_lost_int interrupt.*/ + uint32_t master_tran_comp: 1; /*Set this bit to clear the master_tran_comp interrupt.*/ + uint32_t trans_complete: 1; /*Set this bit to clear the trans_complete_int interrupt.*/ + uint32_t time_out: 1; /*Set this bit to clear the time_out_int interrupt.*/ + uint32_t trans_start: 1; /*Set this bit to clear the trans_start_int interrupt.*/ + uint32_t ack_err: 1; /*Set this bit to clear the ack_err_int interrupt.*/ + uint32_t rx_rec_full: 1; /*Set this bit to clear the rx_rec_full_int interrupt.*/ + uint32_t tx_send_empty: 1; /*Set this bit to clear the tx_send_empty_int interrupt.*/ + uint32_t reserved13: 19; + }; + uint32_t val; + } int_clr; + union { + struct { + uint32_t rx_fifo_full: 1; /*The enable bit for rx_fifo_full_int interrupt.*/ + uint32_t tx_fifo_empty: 1; /*The enable bit for tx_fifo_empty_int interrupt.*/ + uint32_t rx_fifo_ovf: 1; /*The enable bit for rx_fifo_ovf_int interrupt.*/ + uint32_t end_detect: 1; /*The enable bit for end_detect_int interrupt.*/ + uint32_t slave_tran_comp: 1; /*The enable bit for slave_tran_comp_int interrupt.*/ + uint32_t arbitration_lost: 1; /*The enable bit for arbitration_lost_int interrupt.*/ + uint32_t master_tran_comp: 1; /*The enable bit for master_tran_comp_int interrupt.*/ + uint32_t trans_complete: 1; /*The enable bit for trans_complete_int interrupt.*/ + uint32_t time_out: 1; /*The enable bit for time_out_int interrupt.*/ + uint32_t trans_start: 1; /*The enable bit for trans_start_int interrupt.*/ + uint32_t ack_err: 1; /*The enable bit for ack_err_int interrupt.*/ + uint32_t rx_rec_full: 1; /*The enable bit for rx_rec_full_int interrupt.*/ + uint32_t tx_send_empty: 1; /*The enable bit for tx_send_empty_int interrupt.*/ + uint32_t reserved13: 19; + }; + uint32_t val; + } int_ena; + union { + struct { + uint32_t rx_fifo_full: 1; /*The masked interrupt status for rx_fifo_full_int interrupt.*/ + uint32_t tx_fifo_empty: 1; /*The masked interrupt status for tx_fifo_empty_int interrupt.*/ + uint32_t rx_fifo_ovf: 1; /*The masked interrupt status for rx_fifo_ovf_int interrupt.*/ + uint32_t end_detect: 1; /*The masked interrupt status for end_detect_int interrupt.*/ + uint32_t slave_tran_comp: 1; /*The masked interrupt status for slave_tran_comp_int interrupt.*/ + uint32_t arbitration_lost: 1; /*The masked interrupt status for arbitration_lost_int interrupt.*/ + uint32_t master_tran_comp: 1; /*The masked interrupt status for master_tran_comp_int interrupt.*/ + uint32_t trans_complete: 1; /*The masked interrupt status for trans_complete_int interrupt.*/ + uint32_t time_out: 1; /*The masked interrupt status for time_out_int interrupt.*/ + uint32_t trans_start: 1; /*The masked interrupt status for trans_start_int interrupt.*/ + uint32_t ack_err: 1; /*The masked interrupt status for ack_err_int interrupt.*/ + uint32_t rx_rec_full: 1; /*The masked interrupt status for rx_rec_full_int interrupt.*/ + uint32_t tx_send_empty: 1; /*The masked interrupt status for tx_send_empty_int interrupt.*/ + uint32_t reserved13: 19; + }; + uint32_t val; + } int_status; + union { + struct { + uint32_t time: 10; /*This register is used to configure the clock num I2C used to hold the data after the negedge of SCL.*/ + uint32_t reserved10: 22; + }; + uint32_t val; + } sda_hold; + union { + struct { + uint32_t time: 10; /*This register is used to configure the clock num I2C used to sample data on SDA after the posedge of SCL*/ + uint32_t reserved10: 22; + }; + uint32_t val; + } sda_sample; + union { + struct { + uint32_t period: 14; /*This register is used to configure the clock num during SCL is low level.*/ + uint32_t reserved14: 18; + }; + uint32_t val; + } scl_high_period; + uint32_t reserved_3c; + union { + struct { + uint32_t time: 10; /*This register is used to configure the clock num between the negedge of SDA and negedge of SCL for start mark.*/ + uint32_t reserved10: 22; + }; + uint32_t val; + } scl_start_hold; + union { + struct { + uint32_t time: 10; /*This register is used to configure the clock num between the posedge of SCL and the negedge of SDA for restart mark.*/ + uint32_t reserved10: 22; + }; + uint32_t val; + } scl_rstart_setup; + union { + struct { + uint32_t time: 14; /*This register is used to configure the clock num after the STOP bit's posedge.*/ + uint32_t reserved14: 18; + }; + uint32_t val; + } scl_stop_hold; + union { + struct { + uint32_t time: 10; /*This register is used to configure the clock num between the posedge of SCL and the posedge of SDA.*/ + uint32_t reserved10: 22; + }; + uint32_t val; + } scl_stop_setup; + union { + struct { + uint32_t thres: 3; /*When input SCL's pulse width is smaller than this register value I2C ignores this pulse.*/ + uint32_t en: 1; /*This is the filter enable bit for SCL.*/ + uint32_t reserved4: 28; + }; + uint32_t val; + } scl_filter_cfg; + union { + struct { + uint32_t thres: 3; /*When input SCL's pulse width is smaller than this register value I2C ignores this pulse.*/ + uint32_t en: 1; /*This is the filter enable bit for SDA.*/ + uint32_t reserved4: 28; + }; + uint32_t val; + } sda_filter_cfg; + union { + struct { + uint32_t byte_num: 8; /*Byte_num represent the number of data need to be send or data need to be received.*/ + uint32_t ack_en: 1; /*ack_check_en ack_exp and ack value are used to control the ack bit.*/ + uint32_t ack_exp: 1; /*ack_check_en ack_exp and ack value are used to control the ack bit.*/ + uint32_t ack_val: 1; /*ack_check_en ack_exp and ack value are used to control the ack bit.*/ + uint32_t op_code: 3; /*op_code is the command 0:RSTART 1:WRITE 2:READ 3:STOP . 4:END.*/ + uint32_t reserved14: 17; + uint32_t done: 1; /*When command0 is done in I2C Master mode this bit changes to high level.*/ + }; + uint32_t val; + } command[16]; + uint32_t reserved_98; + uint32_t reserved_9c; + uint32_t reserved_a0; + uint32_t reserved_a4; + uint32_t reserved_a8; + uint32_t reserved_ac; + uint32_t reserved_b0; + uint32_t reserved_b4; + uint32_t reserved_b8; + uint32_t reserved_bc; + uint32_t reserved_c0; + uint32_t reserved_c4; + uint32_t reserved_c8; + uint32_t reserved_cc; + uint32_t reserved_d0; + uint32_t reserved_d4; + uint32_t reserved_d8; + uint32_t reserved_dc; + uint32_t reserved_e0; + uint32_t reserved_e4; + uint32_t reserved_e8; + uint32_t reserved_ec; + uint32_t reserved_f0; + uint32_t reserved_f4; + uint32_t date; /**/ + uint32_t reserved_fc; + uint32_t fifo_start_addr; /*This the start address for ram when use apb nonfifo access.*/ +} i2c_dev_t; +extern i2c_dev_t I2C0; +extern i2c_dev_t I2C1; +#endif /* _SOC_I2C_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/i2s_reg.h b/tools/sdk/include/esp32/soc/i2s_reg.h new file mode 100644 index 00000000..3473c087 --- /dev/null +++ b/tools/sdk/include/esp32/soc/i2s_reg.h @@ -0,0 +1,1527 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_I2S_REG_H_ +#define _SOC_I2S_REG_H_ + +#include "soc.h" + +#define REG_I2S_BASE( i ) ( DR_REG_I2S_BASE + ((i)*0x1E000)) + + +#define I2S_CONF_REG(i) (REG_I2S_BASE(i) + 0x0008) +/* I2S_SIG_LOOPBACK : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: */ +#define I2S_SIG_LOOPBACK (BIT(18)) +#define I2S_SIG_LOOPBACK_M (BIT(18)) +#define I2S_SIG_LOOPBACK_V 0x1 +#define I2S_SIG_LOOPBACK_S 18 +/* I2S_RX_MSB_RIGHT : R/W ;bitpos:[17] ;default: 1'b1 ; */ +/*description: */ +#define I2S_RX_MSB_RIGHT (BIT(17)) +#define I2S_RX_MSB_RIGHT_M (BIT(17)) +#define I2S_RX_MSB_RIGHT_V 0x1 +#define I2S_RX_MSB_RIGHT_S 17 +/* I2S_TX_MSB_RIGHT : R/W ;bitpos:[16] ;default: 1'b1 ; */ +/*description: */ +#define I2S_TX_MSB_RIGHT (BIT(16)) +#define I2S_TX_MSB_RIGHT_M (BIT(16)) +#define I2S_TX_MSB_RIGHT_V 0x1 +#define I2S_TX_MSB_RIGHT_S 16 +/* I2S_RX_MONO : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_MONO (BIT(15)) +#define I2S_RX_MONO_M (BIT(15)) +#define I2S_RX_MONO_V 0x1 +#define I2S_RX_MONO_S 15 +/* I2S_TX_MONO : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_MONO (BIT(14)) +#define I2S_TX_MONO_M (BIT(14)) +#define I2S_TX_MONO_V 0x1 +#define I2S_TX_MONO_S 14 +/* I2S_RX_SHORT_SYNC : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_SHORT_SYNC (BIT(13)) +#define I2S_RX_SHORT_SYNC_M (BIT(13)) +#define I2S_RX_SHORT_SYNC_V 0x1 +#define I2S_RX_SHORT_SYNC_S 13 +/* I2S_TX_SHORT_SYNC : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_SHORT_SYNC (BIT(12)) +#define I2S_TX_SHORT_SYNC_M (BIT(12)) +#define I2S_TX_SHORT_SYNC_V 0x1 +#define I2S_TX_SHORT_SYNC_S 12 +/* I2S_RX_MSB_SHIFT : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_MSB_SHIFT (BIT(11)) +#define I2S_RX_MSB_SHIFT_M (BIT(11)) +#define I2S_RX_MSB_SHIFT_V 0x1 +#define I2S_RX_MSB_SHIFT_S 11 +/* I2S_TX_MSB_SHIFT : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_MSB_SHIFT (BIT(10)) +#define I2S_TX_MSB_SHIFT_M (BIT(10)) +#define I2S_TX_MSB_SHIFT_V 0x1 +#define I2S_TX_MSB_SHIFT_S 10 +/* I2S_RX_RIGHT_FIRST : R/W ;bitpos:[9] ;default: 1'b1 ; */ +/*description: */ +#define I2S_RX_RIGHT_FIRST (BIT(9)) +#define I2S_RX_RIGHT_FIRST_M (BIT(9)) +#define I2S_RX_RIGHT_FIRST_V 0x1 +#define I2S_RX_RIGHT_FIRST_S 9 +/* I2S_TX_RIGHT_FIRST : R/W ;bitpos:[8] ;default: 1'b1 ; */ +/*description: */ +#define I2S_TX_RIGHT_FIRST (BIT(8)) +#define I2S_TX_RIGHT_FIRST_M (BIT(8)) +#define I2S_TX_RIGHT_FIRST_V 0x1 +#define I2S_TX_RIGHT_FIRST_S 8 +/* I2S_RX_SLAVE_MOD : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_SLAVE_MOD (BIT(7)) +#define I2S_RX_SLAVE_MOD_M (BIT(7)) +#define I2S_RX_SLAVE_MOD_V 0x1 +#define I2S_RX_SLAVE_MOD_S 7 +/* I2S_TX_SLAVE_MOD : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_SLAVE_MOD (BIT(6)) +#define I2S_TX_SLAVE_MOD_M (BIT(6)) +#define I2S_TX_SLAVE_MOD_V 0x1 +#define I2S_TX_SLAVE_MOD_S 6 +/* I2S_RX_START : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_START (BIT(5)) +#define I2S_RX_START_M (BIT(5)) +#define I2S_RX_START_V 0x1 +#define I2S_RX_START_S 5 +/* I2S_TX_START : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_START (BIT(4)) +#define I2S_TX_START_M (BIT(4)) +#define I2S_TX_START_V 0x1 +#define I2S_TX_START_S 4 +/* I2S_RX_FIFO_RESET : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_FIFO_RESET (BIT(3)) +#define I2S_RX_FIFO_RESET_M (BIT(3)) +#define I2S_RX_FIFO_RESET_V 0x1 +#define I2S_RX_FIFO_RESET_S 3 +/* I2S_TX_FIFO_RESET : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_FIFO_RESET (BIT(2)) +#define I2S_TX_FIFO_RESET_M (BIT(2)) +#define I2S_TX_FIFO_RESET_V 0x1 +#define I2S_TX_FIFO_RESET_S 2 +/* I2S_RX_RESET : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_RESET (BIT(1)) +#define I2S_RX_RESET_M (BIT(1)) +#define I2S_RX_RESET_V 0x1 +#define I2S_RX_RESET_S 1 +/* I2S_TX_RESET : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_RESET (BIT(0)) +#define I2S_TX_RESET_M (BIT(0)) +#define I2S_TX_RESET_V 0x1 +#define I2S_TX_RESET_S 0 + +#define I2S_INT_RAW_REG(i) (REG_I2S_BASE(i) + 0x000c) +/* I2S_OUT_TOTAL_EOF_INT_RAW : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_TOTAL_EOF_INT_RAW (BIT(16)) +#define I2S_OUT_TOTAL_EOF_INT_RAW_M (BIT(16)) +#define I2S_OUT_TOTAL_EOF_INT_RAW_V 0x1 +#define I2S_OUT_TOTAL_EOF_INT_RAW_S 16 +/* I2S_IN_DSCR_EMPTY_INT_RAW : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DSCR_EMPTY_INT_RAW (BIT(15)) +#define I2S_IN_DSCR_EMPTY_INT_RAW_M (BIT(15)) +#define I2S_IN_DSCR_EMPTY_INT_RAW_V 0x1 +#define I2S_IN_DSCR_EMPTY_INT_RAW_S 15 +/* I2S_OUT_DSCR_ERR_INT_RAW : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_DSCR_ERR_INT_RAW (BIT(14)) +#define I2S_OUT_DSCR_ERR_INT_RAW_M (BIT(14)) +#define I2S_OUT_DSCR_ERR_INT_RAW_V 0x1 +#define I2S_OUT_DSCR_ERR_INT_RAW_S 14 +/* I2S_IN_DSCR_ERR_INT_RAW : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DSCR_ERR_INT_RAW (BIT(13)) +#define I2S_IN_DSCR_ERR_INT_RAW_M (BIT(13)) +#define I2S_IN_DSCR_ERR_INT_RAW_V 0x1 +#define I2S_IN_DSCR_ERR_INT_RAW_S 13 +/* I2S_OUT_EOF_INT_RAW : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_EOF_INT_RAW (BIT(12)) +#define I2S_OUT_EOF_INT_RAW_M (BIT(12)) +#define I2S_OUT_EOF_INT_RAW_V 0x1 +#define I2S_OUT_EOF_INT_RAW_S 12 +/* I2S_OUT_DONE_INT_RAW : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_DONE_INT_RAW (BIT(11)) +#define I2S_OUT_DONE_INT_RAW_M (BIT(11)) +#define I2S_OUT_DONE_INT_RAW_V 0x1 +#define I2S_OUT_DONE_INT_RAW_S 11 +/* I2S_IN_ERR_EOF_INT_RAW : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_ERR_EOF_INT_RAW (BIT(10)) +#define I2S_IN_ERR_EOF_INT_RAW_M (BIT(10)) +#define I2S_IN_ERR_EOF_INT_RAW_V 0x1 +#define I2S_IN_ERR_EOF_INT_RAW_S 10 +/* I2S_IN_SUC_EOF_INT_RAW : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_SUC_EOF_INT_RAW (BIT(9)) +#define I2S_IN_SUC_EOF_INT_RAW_M (BIT(9)) +#define I2S_IN_SUC_EOF_INT_RAW_V 0x1 +#define I2S_IN_SUC_EOF_INT_RAW_S 9 +/* I2S_IN_DONE_INT_RAW : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DONE_INT_RAW (BIT(8)) +#define I2S_IN_DONE_INT_RAW_M (BIT(8)) +#define I2S_IN_DONE_INT_RAW_V 0x1 +#define I2S_IN_DONE_INT_RAW_S 8 +/* I2S_TX_HUNG_INT_RAW : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_HUNG_INT_RAW (BIT(7)) +#define I2S_TX_HUNG_INT_RAW_M (BIT(7)) +#define I2S_TX_HUNG_INT_RAW_V 0x1 +#define I2S_TX_HUNG_INT_RAW_S 7 +/* I2S_RX_HUNG_INT_RAW : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_HUNG_INT_RAW (BIT(6)) +#define I2S_RX_HUNG_INT_RAW_M (BIT(6)) +#define I2S_RX_HUNG_INT_RAW_V 0x1 +#define I2S_RX_HUNG_INT_RAW_S 6 +/* I2S_TX_REMPTY_INT_RAW : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_REMPTY_INT_RAW (BIT(5)) +#define I2S_TX_REMPTY_INT_RAW_M (BIT(5)) +#define I2S_TX_REMPTY_INT_RAW_V 0x1 +#define I2S_TX_REMPTY_INT_RAW_S 5 +/* I2S_TX_WFULL_INT_RAW : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_WFULL_INT_RAW (BIT(4)) +#define I2S_TX_WFULL_INT_RAW_M (BIT(4)) +#define I2S_TX_WFULL_INT_RAW_V 0x1 +#define I2S_TX_WFULL_INT_RAW_S 4 +/* I2S_RX_REMPTY_INT_RAW : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_REMPTY_INT_RAW (BIT(3)) +#define I2S_RX_REMPTY_INT_RAW_M (BIT(3)) +#define I2S_RX_REMPTY_INT_RAW_V 0x1 +#define I2S_RX_REMPTY_INT_RAW_S 3 +/* I2S_RX_WFULL_INT_RAW : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_WFULL_INT_RAW (BIT(2)) +#define I2S_RX_WFULL_INT_RAW_M (BIT(2)) +#define I2S_RX_WFULL_INT_RAW_V 0x1 +#define I2S_RX_WFULL_INT_RAW_S 2 +/* I2S_TX_PUT_DATA_INT_RAW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_PUT_DATA_INT_RAW (BIT(1)) +#define I2S_TX_PUT_DATA_INT_RAW_M (BIT(1)) +#define I2S_TX_PUT_DATA_INT_RAW_V 0x1 +#define I2S_TX_PUT_DATA_INT_RAW_S 1 +/* I2S_RX_TAKE_DATA_INT_RAW : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_TAKE_DATA_INT_RAW (BIT(0)) +#define I2S_RX_TAKE_DATA_INT_RAW_M (BIT(0)) +#define I2S_RX_TAKE_DATA_INT_RAW_V 0x1 +#define I2S_RX_TAKE_DATA_INT_RAW_S 0 + +#define I2S_INT_ST_REG(i) (REG_I2S_BASE(i) + 0x0010) +/* I2S_OUT_TOTAL_EOF_INT_ST : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_TOTAL_EOF_INT_ST (BIT(16)) +#define I2S_OUT_TOTAL_EOF_INT_ST_M (BIT(16)) +#define I2S_OUT_TOTAL_EOF_INT_ST_V 0x1 +#define I2S_OUT_TOTAL_EOF_INT_ST_S 16 +/* I2S_IN_DSCR_EMPTY_INT_ST : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DSCR_EMPTY_INT_ST (BIT(15)) +#define I2S_IN_DSCR_EMPTY_INT_ST_M (BIT(15)) +#define I2S_IN_DSCR_EMPTY_INT_ST_V 0x1 +#define I2S_IN_DSCR_EMPTY_INT_ST_S 15 +/* I2S_OUT_DSCR_ERR_INT_ST : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_DSCR_ERR_INT_ST (BIT(14)) +#define I2S_OUT_DSCR_ERR_INT_ST_M (BIT(14)) +#define I2S_OUT_DSCR_ERR_INT_ST_V 0x1 +#define I2S_OUT_DSCR_ERR_INT_ST_S 14 +/* I2S_IN_DSCR_ERR_INT_ST : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DSCR_ERR_INT_ST (BIT(13)) +#define I2S_IN_DSCR_ERR_INT_ST_M (BIT(13)) +#define I2S_IN_DSCR_ERR_INT_ST_V 0x1 +#define I2S_IN_DSCR_ERR_INT_ST_S 13 +/* I2S_OUT_EOF_INT_ST : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_EOF_INT_ST (BIT(12)) +#define I2S_OUT_EOF_INT_ST_M (BIT(12)) +#define I2S_OUT_EOF_INT_ST_V 0x1 +#define I2S_OUT_EOF_INT_ST_S 12 +/* I2S_OUT_DONE_INT_ST : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_DONE_INT_ST (BIT(11)) +#define I2S_OUT_DONE_INT_ST_M (BIT(11)) +#define I2S_OUT_DONE_INT_ST_V 0x1 +#define I2S_OUT_DONE_INT_ST_S 11 +/* I2S_IN_ERR_EOF_INT_ST : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_ERR_EOF_INT_ST (BIT(10)) +#define I2S_IN_ERR_EOF_INT_ST_M (BIT(10)) +#define I2S_IN_ERR_EOF_INT_ST_V 0x1 +#define I2S_IN_ERR_EOF_INT_ST_S 10 +/* I2S_IN_SUC_EOF_INT_ST : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_SUC_EOF_INT_ST (BIT(9)) +#define I2S_IN_SUC_EOF_INT_ST_M (BIT(9)) +#define I2S_IN_SUC_EOF_INT_ST_V 0x1 +#define I2S_IN_SUC_EOF_INT_ST_S 9 +/* I2S_IN_DONE_INT_ST : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DONE_INT_ST (BIT(8)) +#define I2S_IN_DONE_INT_ST_M (BIT(8)) +#define I2S_IN_DONE_INT_ST_V 0x1 +#define I2S_IN_DONE_INT_ST_S 8 +/* I2S_TX_HUNG_INT_ST : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_HUNG_INT_ST (BIT(7)) +#define I2S_TX_HUNG_INT_ST_M (BIT(7)) +#define I2S_TX_HUNG_INT_ST_V 0x1 +#define I2S_TX_HUNG_INT_ST_S 7 +/* I2S_RX_HUNG_INT_ST : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_HUNG_INT_ST (BIT(6)) +#define I2S_RX_HUNG_INT_ST_M (BIT(6)) +#define I2S_RX_HUNG_INT_ST_V 0x1 +#define I2S_RX_HUNG_INT_ST_S 6 +/* I2S_TX_REMPTY_INT_ST : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_REMPTY_INT_ST (BIT(5)) +#define I2S_TX_REMPTY_INT_ST_M (BIT(5)) +#define I2S_TX_REMPTY_INT_ST_V 0x1 +#define I2S_TX_REMPTY_INT_ST_S 5 +/* I2S_TX_WFULL_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_WFULL_INT_ST (BIT(4)) +#define I2S_TX_WFULL_INT_ST_M (BIT(4)) +#define I2S_TX_WFULL_INT_ST_V 0x1 +#define I2S_TX_WFULL_INT_ST_S 4 +/* I2S_RX_REMPTY_INT_ST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_REMPTY_INT_ST (BIT(3)) +#define I2S_RX_REMPTY_INT_ST_M (BIT(3)) +#define I2S_RX_REMPTY_INT_ST_V 0x1 +#define I2S_RX_REMPTY_INT_ST_S 3 +/* I2S_RX_WFULL_INT_ST : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_WFULL_INT_ST (BIT(2)) +#define I2S_RX_WFULL_INT_ST_M (BIT(2)) +#define I2S_RX_WFULL_INT_ST_V 0x1 +#define I2S_RX_WFULL_INT_ST_S 2 +/* I2S_TX_PUT_DATA_INT_ST : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_PUT_DATA_INT_ST (BIT(1)) +#define I2S_TX_PUT_DATA_INT_ST_M (BIT(1)) +#define I2S_TX_PUT_DATA_INT_ST_V 0x1 +#define I2S_TX_PUT_DATA_INT_ST_S 1 +/* I2S_RX_TAKE_DATA_INT_ST : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_TAKE_DATA_INT_ST (BIT(0)) +#define I2S_RX_TAKE_DATA_INT_ST_M (BIT(0)) +#define I2S_RX_TAKE_DATA_INT_ST_V 0x1 +#define I2S_RX_TAKE_DATA_INT_ST_S 0 + +#define I2S_INT_ENA_REG(i) (REG_I2S_BASE(i) + 0x0014) +/* I2S_OUT_TOTAL_EOF_INT_ENA : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_TOTAL_EOF_INT_ENA (BIT(16)) +#define I2S_OUT_TOTAL_EOF_INT_ENA_M (BIT(16)) +#define I2S_OUT_TOTAL_EOF_INT_ENA_V 0x1 +#define I2S_OUT_TOTAL_EOF_INT_ENA_S 16 +/* I2S_IN_DSCR_EMPTY_INT_ENA : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DSCR_EMPTY_INT_ENA (BIT(15)) +#define I2S_IN_DSCR_EMPTY_INT_ENA_M (BIT(15)) +#define I2S_IN_DSCR_EMPTY_INT_ENA_V 0x1 +#define I2S_IN_DSCR_EMPTY_INT_ENA_S 15 +/* I2S_OUT_DSCR_ERR_INT_ENA : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_DSCR_ERR_INT_ENA (BIT(14)) +#define I2S_OUT_DSCR_ERR_INT_ENA_M (BIT(14)) +#define I2S_OUT_DSCR_ERR_INT_ENA_V 0x1 +#define I2S_OUT_DSCR_ERR_INT_ENA_S 14 +/* I2S_IN_DSCR_ERR_INT_ENA : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DSCR_ERR_INT_ENA (BIT(13)) +#define I2S_IN_DSCR_ERR_INT_ENA_M (BIT(13)) +#define I2S_IN_DSCR_ERR_INT_ENA_V 0x1 +#define I2S_IN_DSCR_ERR_INT_ENA_S 13 +/* I2S_OUT_EOF_INT_ENA : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_EOF_INT_ENA (BIT(12)) +#define I2S_OUT_EOF_INT_ENA_M (BIT(12)) +#define I2S_OUT_EOF_INT_ENA_V 0x1 +#define I2S_OUT_EOF_INT_ENA_S 12 +/* I2S_OUT_DONE_INT_ENA : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_DONE_INT_ENA (BIT(11)) +#define I2S_OUT_DONE_INT_ENA_M (BIT(11)) +#define I2S_OUT_DONE_INT_ENA_V 0x1 +#define I2S_OUT_DONE_INT_ENA_S 11 +/* I2S_IN_ERR_EOF_INT_ENA : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_ERR_EOF_INT_ENA (BIT(10)) +#define I2S_IN_ERR_EOF_INT_ENA_M (BIT(10)) +#define I2S_IN_ERR_EOF_INT_ENA_V 0x1 +#define I2S_IN_ERR_EOF_INT_ENA_S 10 +/* I2S_IN_SUC_EOF_INT_ENA : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_SUC_EOF_INT_ENA (BIT(9)) +#define I2S_IN_SUC_EOF_INT_ENA_M (BIT(9)) +#define I2S_IN_SUC_EOF_INT_ENA_V 0x1 +#define I2S_IN_SUC_EOF_INT_ENA_S 9 +/* I2S_IN_DONE_INT_ENA : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DONE_INT_ENA (BIT(8)) +#define I2S_IN_DONE_INT_ENA_M (BIT(8)) +#define I2S_IN_DONE_INT_ENA_V 0x1 +#define I2S_IN_DONE_INT_ENA_S 8 +/* I2S_TX_HUNG_INT_ENA : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_HUNG_INT_ENA (BIT(7)) +#define I2S_TX_HUNG_INT_ENA_M (BIT(7)) +#define I2S_TX_HUNG_INT_ENA_V 0x1 +#define I2S_TX_HUNG_INT_ENA_S 7 +/* I2S_RX_HUNG_INT_ENA : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_HUNG_INT_ENA (BIT(6)) +#define I2S_RX_HUNG_INT_ENA_M (BIT(6)) +#define I2S_RX_HUNG_INT_ENA_V 0x1 +#define I2S_RX_HUNG_INT_ENA_S 6 +/* I2S_TX_REMPTY_INT_ENA : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_REMPTY_INT_ENA (BIT(5)) +#define I2S_TX_REMPTY_INT_ENA_M (BIT(5)) +#define I2S_TX_REMPTY_INT_ENA_V 0x1 +#define I2S_TX_REMPTY_INT_ENA_S 5 +/* I2S_TX_WFULL_INT_ENA : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_WFULL_INT_ENA (BIT(4)) +#define I2S_TX_WFULL_INT_ENA_M (BIT(4)) +#define I2S_TX_WFULL_INT_ENA_V 0x1 +#define I2S_TX_WFULL_INT_ENA_S 4 +/* I2S_RX_REMPTY_INT_ENA : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_REMPTY_INT_ENA (BIT(3)) +#define I2S_RX_REMPTY_INT_ENA_M (BIT(3)) +#define I2S_RX_REMPTY_INT_ENA_V 0x1 +#define I2S_RX_REMPTY_INT_ENA_S 3 +/* I2S_RX_WFULL_INT_ENA : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_WFULL_INT_ENA (BIT(2)) +#define I2S_RX_WFULL_INT_ENA_M (BIT(2)) +#define I2S_RX_WFULL_INT_ENA_V 0x1 +#define I2S_RX_WFULL_INT_ENA_S 2 +/* I2S_TX_PUT_DATA_INT_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_PUT_DATA_INT_ENA (BIT(1)) +#define I2S_TX_PUT_DATA_INT_ENA_M (BIT(1)) +#define I2S_TX_PUT_DATA_INT_ENA_V 0x1 +#define I2S_TX_PUT_DATA_INT_ENA_S 1 +/* I2S_RX_TAKE_DATA_INT_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_TAKE_DATA_INT_ENA (BIT(0)) +#define I2S_RX_TAKE_DATA_INT_ENA_M (BIT(0)) +#define I2S_RX_TAKE_DATA_INT_ENA_V 0x1 +#define I2S_RX_TAKE_DATA_INT_ENA_S 0 + +#define I2S_INT_CLR_REG(i) (REG_I2S_BASE(i) + 0x0018) +/* I2S_OUT_TOTAL_EOF_INT_CLR : WO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_TOTAL_EOF_INT_CLR (BIT(16)) +#define I2S_OUT_TOTAL_EOF_INT_CLR_M (BIT(16)) +#define I2S_OUT_TOTAL_EOF_INT_CLR_V 0x1 +#define I2S_OUT_TOTAL_EOF_INT_CLR_S 16 +/* I2S_IN_DSCR_EMPTY_INT_CLR : WO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DSCR_EMPTY_INT_CLR (BIT(15)) +#define I2S_IN_DSCR_EMPTY_INT_CLR_M (BIT(15)) +#define I2S_IN_DSCR_EMPTY_INT_CLR_V 0x1 +#define I2S_IN_DSCR_EMPTY_INT_CLR_S 15 +/* I2S_OUT_DSCR_ERR_INT_CLR : WO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_DSCR_ERR_INT_CLR (BIT(14)) +#define I2S_OUT_DSCR_ERR_INT_CLR_M (BIT(14)) +#define I2S_OUT_DSCR_ERR_INT_CLR_V 0x1 +#define I2S_OUT_DSCR_ERR_INT_CLR_S 14 +/* I2S_IN_DSCR_ERR_INT_CLR : WO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DSCR_ERR_INT_CLR (BIT(13)) +#define I2S_IN_DSCR_ERR_INT_CLR_M (BIT(13)) +#define I2S_IN_DSCR_ERR_INT_CLR_V 0x1 +#define I2S_IN_DSCR_ERR_INT_CLR_S 13 +/* I2S_OUT_EOF_INT_CLR : WO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_EOF_INT_CLR (BIT(12)) +#define I2S_OUT_EOF_INT_CLR_M (BIT(12)) +#define I2S_OUT_EOF_INT_CLR_V 0x1 +#define I2S_OUT_EOF_INT_CLR_S 12 +/* I2S_OUT_DONE_INT_CLR : WO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_DONE_INT_CLR (BIT(11)) +#define I2S_OUT_DONE_INT_CLR_M (BIT(11)) +#define I2S_OUT_DONE_INT_CLR_V 0x1 +#define I2S_OUT_DONE_INT_CLR_S 11 +/* I2S_IN_ERR_EOF_INT_CLR : WO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_ERR_EOF_INT_CLR (BIT(10)) +#define I2S_IN_ERR_EOF_INT_CLR_M (BIT(10)) +#define I2S_IN_ERR_EOF_INT_CLR_V 0x1 +#define I2S_IN_ERR_EOF_INT_CLR_S 10 +/* I2S_IN_SUC_EOF_INT_CLR : WO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_SUC_EOF_INT_CLR (BIT(9)) +#define I2S_IN_SUC_EOF_INT_CLR_M (BIT(9)) +#define I2S_IN_SUC_EOF_INT_CLR_V 0x1 +#define I2S_IN_SUC_EOF_INT_CLR_S 9 +/* I2S_IN_DONE_INT_CLR : WO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_DONE_INT_CLR (BIT(8)) +#define I2S_IN_DONE_INT_CLR_M (BIT(8)) +#define I2S_IN_DONE_INT_CLR_V 0x1 +#define I2S_IN_DONE_INT_CLR_S 8 +/* I2S_TX_HUNG_INT_CLR : WO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_HUNG_INT_CLR (BIT(7)) +#define I2S_TX_HUNG_INT_CLR_M (BIT(7)) +#define I2S_TX_HUNG_INT_CLR_V 0x1 +#define I2S_TX_HUNG_INT_CLR_S 7 +/* I2S_RX_HUNG_INT_CLR : WO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_HUNG_INT_CLR (BIT(6)) +#define I2S_RX_HUNG_INT_CLR_M (BIT(6)) +#define I2S_RX_HUNG_INT_CLR_V 0x1 +#define I2S_RX_HUNG_INT_CLR_S 6 +/* I2S_TX_REMPTY_INT_CLR : WO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_REMPTY_INT_CLR (BIT(5)) +#define I2S_TX_REMPTY_INT_CLR_M (BIT(5)) +#define I2S_TX_REMPTY_INT_CLR_V 0x1 +#define I2S_TX_REMPTY_INT_CLR_S 5 +/* I2S_TX_WFULL_INT_CLR : WO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_WFULL_INT_CLR (BIT(4)) +#define I2S_TX_WFULL_INT_CLR_M (BIT(4)) +#define I2S_TX_WFULL_INT_CLR_V 0x1 +#define I2S_TX_WFULL_INT_CLR_S 4 +/* I2S_RX_REMPTY_INT_CLR : WO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_REMPTY_INT_CLR (BIT(3)) +#define I2S_RX_REMPTY_INT_CLR_M (BIT(3)) +#define I2S_RX_REMPTY_INT_CLR_V 0x1 +#define I2S_RX_REMPTY_INT_CLR_S 3 +/* I2S_RX_WFULL_INT_CLR : WO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_WFULL_INT_CLR (BIT(2)) +#define I2S_RX_WFULL_INT_CLR_M (BIT(2)) +#define I2S_RX_WFULL_INT_CLR_V 0x1 +#define I2S_RX_WFULL_INT_CLR_S 2 +/* I2S_PUT_DATA_INT_CLR : WO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define I2S_PUT_DATA_INT_CLR (BIT(1)) +#define I2S_PUT_DATA_INT_CLR_M (BIT(1)) +#define I2S_PUT_DATA_INT_CLR_V 0x1 +#define I2S_PUT_DATA_INT_CLR_S 1 +/* I2S_TAKE_DATA_INT_CLR : WO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TAKE_DATA_INT_CLR (BIT(0)) +#define I2S_TAKE_DATA_INT_CLR_M (BIT(0)) +#define I2S_TAKE_DATA_INT_CLR_V 0x1 +#define I2S_TAKE_DATA_INT_CLR_S 0 + +#define I2S_TIMING_REG(i) (REG_I2S_BASE(i) + 0x001c) +/* I2S_TX_BCK_IN_INV : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_BCK_IN_INV (BIT(24)) +#define I2S_TX_BCK_IN_INV_M (BIT(24)) +#define I2S_TX_BCK_IN_INV_V 0x1 +#define I2S_TX_BCK_IN_INV_S 24 +/* I2S_DATA_ENABLE_DELAY : R/W ;bitpos:[23:22] ;default: 2'b0 ; */ +/*description: */ +#define I2S_DATA_ENABLE_DELAY 0x00000003 +#define I2S_DATA_ENABLE_DELAY_M ((I2S_DATA_ENABLE_DELAY_V)<<(I2S_DATA_ENABLE_DELAY_S)) +#define I2S_DATA_ENABLE_DELAY_V 0x3 +#define I2S_DATA_ENABLE_DELAY_S 22 +/* I2S_RX_DSYNC_SW : R/W ;bitpos:[21] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_DSYNC_SW (BIT(21)) +#define I2S_RX_DSYNC_SW_M (BIT(21)) +#define I2S_RX_DSYNC_SW_V 0x1 +#define I2S_RX_DSYNC_SW_S 21 +/* I2S_TX_DSYNC_SW : R/W ;bitpos:[20] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_DSYNC_SW (BIT(20)) +#define I2S_TX_DSYNC_SW_M (BIT(20)) +#define I2S_TX_DSYNC_SW_V 0x1 +#define I2S_TX_DSYNC_SW_S 20 +/* I2S_RX_BCK_OUT_DELAY : R/W ;bitpos:[19:18] ;default: 2'b0 ; */ +/*description: */ +#define I2S_RX_BCK_OUT_DELAY 0x00000003 +#define I2S_RX_BCK_OUT_DELAY_M ((I2S_RX_BCK_OUT_DELAY_V)<<(I2S_RX_BCK_OUT_DELAY_S)) +#define I2S_RX_BCK_OUT_DELAY_V 0x3 +#define I2S_RX_BCK_OUT_DELAY_S 18 +/* I2S_RX_WS_OUT_DELAY : R/W ;bitpos:[17:16] ;default: 2'b0 ; */ +/*description: */ +#define I2S_RX_WS_OUT_DELAY 0x00000003 +#define I2S_RX_WS_OUT_DELAY_M ((I2S_RX_WS_OUT_DELAY_V)<<(I2S_RX_WS_OUT_DELAY_S)) +#define I2S_RX_WS_OUT_DELAY_V 0x3 +#define I2S_RX_WS_OUT_DELAY_S 16 +/* I2S_TX_SD_OUT_DELAY : R/W ;bitpos:[15:14] ;default: 2'b0 ; */ +/*description: */ +#define I2S_TX_SD_OUT_DELAY 0x00000003 +#define I2S_TX_SD_OUT_DELAY_M ((I2S_TX_SD_OUT_DELAY_V)<<(I2S_TX_SD_OUT_DELAY_S)) +#define I2S_TX_SD_OUT_DELAY_V 0x3 +#define I2S_TX_SD_OUT_DELAY_S 14 +/* I2S_TX_WS_OUT_DELAY : R/W ;bitpos:[13:12] ;default: 2'b0 ; */ +/*description: */ +#define I2S_TX_WS_OUT_DELAY 0x00000003 +#define I2S_TX_WS_OUT_DELAY_M ((I2S_TX_WS_OUT_DELAY_V)<<(I2S_TX_WS_OUT_DELAY_S)) +#define I2S_TX_WS_OUT_DELAY_V 0x3 +#define I2S_TX_WS_OUT_DELAY_S 12 +/* I2S_TX_BCK_OUT_DELAY : R/W ;bitpos:[11:10] ;default: 2'b0 ; */ +/*description: */ +#define I2S_TX_BCK_OUT_DELAY 0x00000003 +#define I2S_TX_BCK_OUT_DELAY_M ((I2S_TX_BCK_OUT_DELAY_V)<<(I2S_TX_BCK_OUT_DELAY_S)) +#define I2S_TX_BCK_OUT_DELAY_V 0x3 +#define I2S_TX_BCK_OUT_DELAY_S 10 +/* I2S_RX_SD_IN_DELAY : R/W ;bitpos:[9:8] ;default: 2'b0 ; */ +/*description: */ +#define I2S_RX_SD_IN_DELAY 0x00000003 +#define I2S_RX_SD_IN_DELAY_M ((I2S_RX_SD_IN_DELAY_V)<<(I2S_RX_SD_IN_DELAY_S)) +#define I2S_RX_SD_IN_DELAY_V 0x3 +#define I2S_RX_SD_IN_DELAY_S 8 +/* I2S_RX_WS_IN_DELAY : R/W ;bitpos:[7:6] ;default: 2'b0 ; */ +/*description: */ +#define I2S_RX_WS_IN_DELAY 0x00000003 +#define I2S_RX_WS_IN_DELAY_M ((I2S_RX_WS_IN_DELAY_V)<<(I2S_RX_WS_IN_DELAY_S)) +#define I2S_RX_WS_IN_DELAY_V 0x3 +#define I2S_RX_WS_IN_DELAY_S 6 +/* I2S_RX_BCK_IN_DELAY : R/W ;bitpos:[5:4] ;default: 2'b0 ; */ +/*description: */ +#define I2S_RX_BCK_IN_DELAY 0x00000003 +#define I2S_RX_BCK_IN_DELAY_M ((I2S_RX_BCK_IN_DELAY_V)<<(I2S_RX_BCK_IN_DELAY_S)) +#define I2S_RX_BCK_IN_DELAY_V 0x3 +#define I2S_RX_BCK_IN_DELAY_S 4 +/* I2S_TX_WS_IN_DELAY : R/W ;bitpos:[3:2] ;default: 2'b0 ; */ +/*description: */ +#define I2S_TX_WS_IN_DELAY 0x00000003 +#define I2S_TX_WS_IN_DELAY_M ((I2S_TX_WS_IN_DELAY_V)<<(I2S_TX_WS_IN_DELAY_S)) +#define I2S_TX_WS_IN_DELAY_V 0x3 +#define I2S_TX_WS_IN_DELAY_S 2 +/* I2S_TX_BCK_IN_DELAY : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ +/*description: */ +#define I2S_TX_BCK_IN_DELAY 0x00000003 +#define I2S_TX_BCK_IN_DELAY_M ((I2S_TX_BCK_IN_DELAY_V)<<(I2S_TX_BCK_IN_DELAY_S)) +#define I2S_TX_BCK_IN_DELAY_V 0x3 +#define I2S_TX_BCK_IN_DELAY_S 0 + +#define I2S_FIFO_CONF_REG(i) (REG_I2S_BASE(i) + 0x0020) +/* I2S_RX_FIFO_MOD_FORCE_EN : R/W ;bitpos:[20] ;default: 1'b0 ; */ +/*description: */ +#define I2S_RX_FIFO_MOD_FORCE_EN (BIT(20)) +#define I2S_RX_FIFO_MOD_FORCE_EN_M (BIT(20)) +#define I2S_RX_FIFO_MOD_FORCE_EN_V 0x1 +#define I2S_RX_FIFO_MOD_FORCE_EN_S 20 +/* I2S_TX_FIFO_MOD_FORCE_EN : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: */ +#define I2S_TX_FIFO_MOD_FORCE_EN (BIT(19)) +#define I2S_TX_FIFO_MOD_FORCE_EN_M (BIT(19)) +#define I2S_TX_FIFO_MOD_FORCE_EN_V 0x1 +#define I2S_TX_FIFO_MOD_FORCE_EN_S 19 +/* I2S_RX_FIFO_MOD : R/W ;bitpos:[18:16] ;default: 3'b0 ; */ +/*description: */ +#define I2S_RX_FIFO_MOD 0x00000007 +#define I2S_RX_FIFO_MOD_M ((I2S_RX_FIFO_MOD_V)<<(I2S_RX_FIFO_MOD_S)) +#define I2S_RX_FIFO_MOD_V 0x7 +#define I2S_RX_FIFO_MOD_S 16 +/* I2S_TX_FIFO_MOD : R/W ;bitpos:[15:13] ;default: 3'b0 ; */ +/*description: */ +#define I2S_TX_FIFO_MOD 0x00000007 +#define I2S_TX_FIFO_MOD_M ((I2S_TX_FIFO_MOD_V)<<(I2S_TX_FIFO_MOD_S)) +#define I2S_TX_FIFO_MOD_V 0x7 +#define I2S_TX_FIFO_MOD_S 13 +/* I2S_DSCR_EN : R/W ;bitpos:[12] ;default: 1'd1 ; */ +/*description: */ +#define I2S_DSCR_EN (BIT(12)) +#define I2S_DSCR_EN_M (BIT(12)) +#define I2S_DSCR_EN_V 0x1 +#define I2S_DSCR_EN_S 12 +/* I2S_TX_DATA_NUM : R/W ;bitpos:[11:6] ;default: 6'd32 ; */ +/*description: */ +#define I2S_TX_DATA_NUM 0x0000003F +#define I2S_TX_DATA_NUM_M ((I2S_TX_DATA_NUM_V)<<(I2S_TX_DATA_NUM_S)) +#define I2S_TX_DATA_NUM_V 0x3F +#define I2S_TX_DATA_NUM_S 6 +/* I2S_RX_DATA_NUM : R/W ;bitpos:[5:0] ;default: 6'd32 ; */ +/*description: */ +#define I2S_RX_DATA_NUM 0x0000003F +#define I2S_RX_DATA_NUM_M ((I2S_RX_DATA_NUM_V)<<(I2S_RX_DATA_NUM_S)) +#define I2S_RX_DATA_NUM_V 0x3F +#define I2S_RX_DATA_NUM_S 0 + +#define I2S_RXEOF_NUM_REG(i) (REG_I2S_BASE(i) + 0x0024) +/* I2S_RX_EOF_NUM : R/W ;bitpos:[31:0] ;default: 32'd64 ; */ +/*description: */ +#define I2S_RX_EOF_NUM 0xFFFFFFFF +#define I2S_RX_EOF_NUM_M ((I2S_RX_EOF_NUM_V)<<(I2S_RX_EOF_NUM_S)) +#define I2S_RX_EOF_NUM_V 0xFFFFFFFF +#define I2S_RX_EOF_NUM_S 0 + +#define I2S_CONF_SIGLE_DATA_REG(i) (REG_I2S_BASE(i) + 0x0028) +/* I2S_SIGLE_DATA : R/W ;bitpos:[31:0] ;default: 32'd0 ; */ +/*description: */ +#define I2S_SIGLE_DATA 0xFFFFFFFF +#define I2S_SIGLE_DATA_M ((I2S_SIGLE_DATA_V)<<(I2S_SIGLE_DATA_S)) +#define I2S_SIGLE_DATA_V 0xFFFFFFFF +#define I2S_SIGLE_DATA_S 0 + +#define I2S_CONF_CHAN_REG(i) (REG_I2S_BASE(i) + 0x002c) +/* I2S_RX_CHAN_MOD : R/W ;bitpos:[4:3] ;default: 2'b0 ; */ +/*description: */ +#define I2S_RX_CHAN_MOD 0x00000003 +#define I2S_RX_CHAN_MOD_M ((I2S_RX_CHAN_MOD_V)<<(I2S_RX_CHAN_MOD_S)) +#define I2S_RX_CHAN_MOD_V 0x3 +#define I2S_RX_CHAN_MOD_S 3 +/* I2S_TX_CHAN_MOD : R/W ;bitpos:[2:0] ;default: 3'b0 ; */ +/*description: */ +#define I2S_TX_CHAN_MOD 0x00000007 +#define I2S_TX_CHAN_MOD_M ((I2S_TX_CHAN_MOD_V)<<(I2S_TX_CHAN_MOD_S)) +#define I2S_TX_CHAN_MOD_V 0x7 +#define I2S_TX_CHAN_MOD_S 0 + +#define I2S_OUT_LINK_REG(i) (REG_I2S_BASE(i) + 0x0030) +/* I2S_OUTLINK_PARK : RO ;bitpos:[31] ;default: 1'h0 ; */ +/*description: */ +#define I2S_OUTLINK_PARK (BIT(31)) +#define I2S_OUTLINK_PARK_M (BIT(31)) +#define I2S_OUTLINK_PARK_V 0x1 +#define I2S_OUTLINK_PARK_S 31 +/* I2S_OUTLINK_RESTART : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUTLINK_RESTART (BIT(30)) +#define I2S_OUTLINK_RESTART_M (BIT(30)) +#define I2S_OUTLINK_RESTART_V 0x1 +#define I2S_OUTLINK_RESTART_S 30 +/* I2S_OUTLINK_START : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUTLINK_START (BIT(29)) +#define I2S_OUTLINK_START_M (BIT(29)) +#define I2S_OUTLINK_START_V 0x1 +#define I2S_OUTLINK_START_S 29 +/* I2S_OUTLINK_STOP : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUTLINK_STOP (BIT(28)) +#define I2S_OUTLINK_STOP_M (BIT(28)) +#define I2S_OUTLINK_STOP_V 0x1 +#define I2S_OUTLINK_STOP_S 28 +/* I2S_OUTLINK_ADDR : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: */ +#define I2S_OUTLINK_ADDR 0x000FFFFF +#define I2S_OUTLINK_ADDR_M ((I2S_OUTLINK_ADDR_V)<<(I2S_OUTLINK_ADDR_S)) +#define I2S_OUTLINK_ADDR_V 0xFFFFF +#define I2S_OUTLINK_ADDR_S 0 + +#define I2S_IN_LINK_REG(i) (REG_I2S_BASE(i) + 0x0034) +/* I2S_INLINK_PARK : RO ;bitpos:[31] ;default: 1'h0 ; */ +/*description: */ +#define I2S_INLINK_PARK (BIT(31)) +#define I2S_INLINK_PARK_M (BIT(31)) +#define I2S_INLINK_PARK_V 0x1 +#define I2S_INLINK_PARK_S 31 +/* I2S_INLINK_RESTART : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: */ +#define I2S_INLINK_RESTART (BIT(30)) +#define I2S_INLINK_RESTART_M (BIT(30)) +#define I2S_INLINK_RESTART_V 0x1 +#define I2S_INLINK_RESTART_S 30 +/* I2S_INLINK_START : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: */ +#define I2S_INLINK_START (BIT(29)) +#define I2S_INLINK_START_M (BIT(29)) +#define I2S_INLINK_START_V 0x1 +#define I2S_INLINK_START_S 29 +/* I2S_INLINK_STOP : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: */ +#define I2S_INLINK_STOP (BIT(28)) +#define I2S_INLINK_STOP_M (BIT(28)) +#define I2S_INLINK_STOP_V 0x1 +#define I2S_INLINK_STOP_S 28 +/* I2S_INLINK_ADDR : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: */ +#define I2S_INLINK_ADDR 0x000FFFFF +#define I2S_INLINK_ADDR_M ((I2S_INLINK_ADDR_V)<<(I2S_INLINK_ADDR_S)) +#define I2S_INLINK_ADDR_V 0xFFFFF +#define I2S_INLINK_ADDR_S 0 + +#define I2S_OUT_EOF_DES_ADDR_REG(i) (REG_I2S_BASE(i) + 0x0038) +/* I2S_OUT_EOF_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define I2S_OUT_EOF_DES_ADDR 0xFFFFFFFF +#define I2S_OUT_EOF_DES_ADDR_M ((I2S_OUT_EOF_DES_ADDR_V)<<(I2S_OUT_EOF_DES_ADDR_S)) +#define I2S_OUT_EOF_DES_ADDR_V 0xFFFFFFFF +#define I2S_OUT_EOF_DES_ADDR_S 0 + +#define I2S_IN_EOF_DES_ADDR_REG(i) (REG_I2S_BASE(i) + 0x003c) +/* I2S_IN_SUC_EOF_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define I2S_IN_SUC_EOF_DES_ADDR 0xFFFFFFFF +#define I2S_IN_SUC_EOF_DES_ADDR_M ((I2S_IN_SUC_EOF_DES_ADDR_V)<<(I2S_IN_SUC_EOF_DES_ADDR_S)) +#define I2S_IN_SUC_EOF_DES_ADDR_V 0xFFFFFFFF +#define I2S_IN_SUC_EOF_DES_ADDR_S 0 + +#define I2S_OUT_EOF_BFR_DES_ADDR_REG(i) (REG_I2S_BASE(i) + 0x0040) +/* I2S_OUT_EOF_BFR_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define I2S_OUT_EOF_BFR_DES_ADDR 0xFFFFFFFF +#define I2S_OUT_EOF_BFR_DES_ADDR_M ((I2S_OUT_EOF_BFR_DES_ADDR_V)<<(I2S_OUT_EOF_BFR_DES_ADDR_S)) +#define I2S_OUT_EOF_BFR_DES_ADDR_V 0xFFFFFFFF +#define I2S_OUT_EOF_BFR_DES_ADDR_S 0 + +#define I2S_AHB_TEST_REG(i) (REG_I2S_BASE(i) + 0x0044) +/* I2S_AHB_TESTADDR : R/W ;bitpos:[5:4] ;default: 2'b0 ; */ +/*description: */ +#define I2S_AHB_TESTADDR 0x00000003 +#define I2S_AHB_TESTADDR_M ((I2S_AHB_TESTADDR_V)<<(I2S_AHB_TESTADDR_S)) +#define I2S_AHB_TESTADDR_V 0x3 +#define I2S_AHB_TESTADDR_S 4 +/* I2S_AHB_TESTMODE : R/W ;bitpos:[2:0] ;default: 3'b0 ; */ +/*description: */ +#define I2S_AHB_TESTMODE 0x00000007 +#define I2S_AHB_TESTMODE_M ((I2S_AHB_TESTMODE_V)<<(I2S_AHB_TESTMODE_S)) +#define I2S_AHB_TESTMODE_V 0x7 +#define I2S_AHB_TESTMODE_S 0 + +#define I2S_INLINK_DSCR_REG(i) (REG_I2S_BASE(i) + 0x0048) +/* I2S_INLINK_DSCR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define I2S_INLINK_DSCR 0xFFFFFFFF +#define I2S_INLINK_DSCR_M ((I2S_INLINK_DSCR_V)<<(I2S_INLINK_DSCR_S)) +#define I2S_INLINK_DSCR_V 0xFFFFFFFF +#define I2S_INLINK_DSCR_S 0 + +#define I2S_INLINK_DSCR_BF0_REG(i) (REG_I2S_BASE(i) + 0x004C) +/* I2S_INLINK_DSCR_BF0 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define I2S_INLINK_DSCR_BF0 0xFFFFFFFF +#define I2S_INLINK_DSCR_BF0_M ((I2S_INLINK_DSCR_BF0_V)<<(I2S_INLINK_DSCR_BF0_S)) +#define I2S_INLINK_DSCR_BF0_V 0xFFFFFFFF +#define I2S_INLINK_DSCR_BF0_S 0 + +#define I2S_INLINK_DSCR_BF1_REG(i) (REG_I2S_BASE(i) + 0x0050) +/* I2S_INLINK_DSCR_BF1 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define I2S_INLINK_DSCR_BF1 0xFFFFFFFF +#define I2S_INLINK_DSCR_BF1_M ((I2S_INLINK_DSCR_BF1_V)<<(I2S_INLINK_DSCR_BF1_S)) +#define I2S_INLINK_DSCR_BF1_V 0xFFFFFFFF +#define I2S_INLINK_DSCR_BF1_S 0 + +#define I2S_OUTLINK_DSCR_REG(i) (REG_I2S_BASE(i) + 0x0054) +/* I2S_OUTLINK_DSCR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define I2S_OUTLINK_DSCR 0xFFFFFFFF +#define I2S_OUTLINK_DSCR_M ((I2S_OUTLINK_DSCR_V)<<(I2S_OUTLINK_DSCR_S)) +#define I2S_OUTLINK_DSCR_V 0xFFFFFFFF +#define I2S_OUTLINK_DSCR_S 0 + +#define I2S_OUTLINK_DSCR_BF0_REG(i) (REG_I2S_BASE(i) + 0x0058) +/* I2S_OUTLINK_DSCR_BF0 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define I2S_OUTLINK_DSCR_BF0 0xFFFFFFFF +#define I2S_OUTLINK_DSCR_BF0_M ((I2S_OUTLINK_DSCR_BF0_V)<<(I2S_OUTLINK_DSCR_BF0_S)) +#define I2S_OUTLINK_DSCR_BF0_V 0xFFFFFFFF +#define I2S_OUTLINK_DSCR_BF0_S 0 + +#define I2S_OUTLINK_DSCR_BF1_REG(i) (REG_I2S_BASE(i) + 0x005C) +/* I2S_OUTLINK_DSCR_BF1 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: */ +#define I2S_OUTLINK_DSCR_BF1 0xFFFFFFFF +#define I2S_OUTLINK_DSCR_BF1_M ((I2S_OUTLINK_DSCR_BF1_V)<<(I2S_OUTLINK_DSCR_BF1_S)) +#define I2S_OUTLINK_DSCR_BF1_V 0xFFFFFFFF +#define I2S_OUTLINK_DSCR_BF1_S 0 + +#define I2S_LC_CONF_REG(i) (REG_I2S_BASE(i) + 0x0060) +/* I2S_MEM_TRANS_EN : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define I2S_MEM_TRANS_EN (BIT(13)) +#define I2S_MEM_TRANS_EN_M (BIT(13)) +#define I2S_MEM_TRANS_EN_V 0x1 +#define I2S_MEM_TRANS_EN_S 13 +/* I2S_CHECK_OWNER : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define I2S_CHECK_OWNER (BIT(12)) +#define I2S_CHECK_OWNER_M (BIT(12)) +#define I2S_CHECK_OWNER_V 0x1 +#define I2S_CHECK_OWNER_S 12 +/* I2S_OUT_DATA_BURST_EN : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_DATA_BURST_EN (BIT(11)) +#define I2S_OUT_DATA_BURST_EN_M (BIT(11)) +#define I2S_OUT_DATA_BURST_EN_V 0x1 +#define I2S_OUT_DATA_BURST_EN_S 11 +/* I2S_INDSCR_BURST_EN : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define I2S_INDSCR_BURST_EN (BIT(10)) +#define I2S_INDSCR_BURST_EN_M (BIT(10)) +#define I2S_INDSCR_BURST_EN_V 0x1 +#define I2S_INDSCR_BURST_EN_S 10 +/* I2S_OUTDSCR_BURST_EN : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUTDSCR_BURST_EN (BIT(9)) +#define I2S_OUTDSCR_BURST_EN_M (BIT(9)) +#define I2S_OUTDSCR_BURST_EN_V 0x1 +#define I2S_OUTDSCR_BURST_EN_S 9 +/* I2S_OUT_EOF_MODE : R/W ;bitpos:[8] ;default: 1'b1 ; */ +/*description: */ +#define I2S_OUT_EOF_MODE (BIT(8)) +#define I2S_OUT_EOF_MODE_M (BIT(8)) +#define I2S_OUT_EOF_MODE_V 0x1 +#define I2S_OUT_EOF_MODE_S 8 +/* I2S_OUT_NO_RESTART_CLR : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_NO_RESTART_CLR (BIT(7)) +#define I2S_OUT_NO_RESTART_CLR_M (BIT(7)) +#define I2S_OUT_NO_RESTART_CLR_V 0x1 +#define I2S_OUT_NO_RESTART_CLR_S 7 +/* I2S_OUT_AUTO_WRBACK : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_AUTO_WRBACK (BIT(6)) +#define I2S_OUT_AUTO_WRBACK_M (BIT(6)) +#define I2S_OUT_AUTO_WRBACK_V 0x1 +#define I2S_OUT_AUTO_WRBACK_S 6 +/* I2S_IN_LOOP_TEST : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define I2S_IN_LOOP_TEST (BIT(5)) +#define I2S_IN_LOOP_TEST_M (BIT(5)) +#define I2S_IN_LOOP_TEST_V 0x1 +#define I2S_IN_LOOP_TEST_S 5 +/* I2S_OUT_LOOP_TEST : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_LOOP_TEST (BIT(4)) +#define I2S_OUT_LOOP_TEST_M (BIT(4)) +#define I2S_OUT_LOOP_TEST_V 0x1 +#define I2S_OUT_LOOP_TEST_S 4 +/* I2S_AHBM_RST : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define I2S_AHBM_RST (BIT(3)) +#define I2S_AHBM_RST_M (BIT(3)) +#define I2S_AHBM_RST_V 0x1 +#define I2S_AHBM_RST_S 3 +/* I2S_AHBM_FIFO_RST : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define I2S_AHBM_FIFO_RST (BIT(2)) +#define I2S_AHBM_FIFO_RST_M (BIT(2)) +#define I2S_AHBM_FIFO_RST_V 0x1 +#define I2S_AHBM_FIFO_RST_S 2 +/* I2S_OUT_RST : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define I2S_OUT_RST (BIT(1)) +#define I2S_OUT_RST_M (BIT(1)) +#define I2S_OUT_RST_V 0x1 +#define I2S_OUT_RST_S 1 +/* I2S_IN_RST : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: */ +#define I2S_IN_RST (BIT(0)) +#define I2S_IN_RST_M (BIT(0)) +#define I2S_IN_RST_V 0x1 +#define I2S_IN_RST_S 0 + +#define I2S_OUTFIFO_PUSH_REG(i) (REG_I2S_BASE(i) + 0x0064) +/* I2S_OUTFIFO_PUSH : R/W ;bitpos:[16] ;default: 1'h0 ; */ +/*description: */ +#define I2S_OUTFIFO_PUSH (BIT(16)) +#define I2S_OUTFIFO_PUSH_M (BIT(16)) +#define I2S_OUTFIFO_PUSH_V 0x1 +#define I2S_OUTFIFO_PUSH_S 16 +/* I2S_OUTFIFO_WDATA : R/W ;bitpos:[8:0] ;default: 9'h0 ; */ +/*description: */ +#define I2S_OUTFIFO_WDATA 0x000001FF +#define I2S_OUTFIFO_WDATA_M ((I2S_OUTFIFO_WDATA_V)<<(I2S_OUTFIFO_WDATA_S)) +#define I2S_OUTFIFO_WDATA_V 0x1FF +#define I2S_OUTFIFO_WDATA_S 0 + +#define I2S_INFIFO_POP_REG(i) (REG_I2S_BASE(i) + 0x0068) +/* I2S_INFIFO_POP : R/W ;bitpos:[16] ;default: 1'h0 ; */ +/*description: */ +#define I2S_INFIFO_POP (BIT(16)) +#define I2S_INFIFO_POP_M (BIT(16)) +#define I2S_INFIFO_POP_V 0x1 +#define I2S_INFIFO_POP_S 16 +/* I2S_INFIFO_RDATA : RO ;bitpos:[11:0] ;default: 12'h0 ; */ +/*description: */ +#define I2S_INFIFO_RDATA 0x00000FFF +#define I2S_INFIFO_RDATA_M ((I2S_INFIFO_RDATA_V)<<(I2S_INFIFO_RDATA_S)) +#define I2S_INFIFO_RDATA_V 0xFFF +#define I2S_INFIFO_RDATA_S 0 + +#define I2S_LC_STATE0_REG(i) (REG_I2S_BASE(i) + 0x006C) +/* I2S_LC_STATE0 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define I2S_LC_STATE0 0xFFFFFFFF +#define I2S_LC_STATE0_M ((I2S_LC_STATE0_V)<<(I2S_LC_STATE0_S)) +#define I2S_LC_STATE0_V 0xFFFFFFFF +#define I2S_LC_STATE0_S 0 + +#define I2S_LC_STATE1_REG(i) (REG_I2S_BASE(i) + 0x0070) +/* I2S_LC_STATE1 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define I2S_LC_STATE1 0xFFFFFFFF +#define I2S_LC_STATE1_M ((I2S_LC_STATE1_V)<<(I2S_LC_STATE1_S)) +#define I2S_LC_STATE1_V 0xFFFFFFFF +#define I2S_LC_STATE1_S 0 + +#define I2S_LC_HUNG_CONF_REG(i) (REG_I2S_BASE(i) + 0x0074) +/* I2S_LC_FIFO_TIMEOUT_ENA : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: */ +#define I2S_LC_FIFO_TIMEOUT_ENA (BIT(11)) +#define I2S_LC_FIFO_TIMEOUT_ENA_M (BIT(11)) +#define I2S_LC_FIFO_TIMEOUT_ENA_V 0x1 +#define I2S_LC_FIFO_TIMEOUT_ENA_S 11 +/* I2S_LC_FIFO_TIMEOUT_SHIFT : R/W ;bitpos:[10:8] ;default: 3'b0 ; */ +/*description: */ +#define I2S_LC_FIFO_TIMEOUT_SHIFT 0x00000007 +#define I2S_LC_FIFO_TIMEOUT_SHIFT_M ((I2S_LC_FIFO_TIMEOUT_SHIFT_V)<<(I2S_LC_FIFO_TIMEOUT_SHIFT_S)) +#define I2S_LC_FIFO_TIMEOUT_SHIFT_V 0x7 +#define I2S_LC_FIFO_TIMEOUT_SHIFT_S 8 +/* I2S_LC_FIFO_TIMEOUT : R/W ;bitpos:[7:0] ;default: 8'h10 ; */ +/*description: */ +#define I2S_LC_FIFO_TIMEOUT 0x000000FF +#define I2S_LC_FIFO_TIMEOUT_M ((I2S_LC_FIFO_TIMEOUT_V)<<(I2S_LC_FIFO_TIMEOUT_S)) +#define I2S_LC_FIFO_TIMEOUT_V 0xFF +#define I2S_LC_FIFO_TIMEOUT_S 0 + +#define I2S_CVSD_CONF0_REG(i) (REG_I2S_BASE(i) + 0x0080) +/* I2S_CVSD_Y_MIN : R/W ;bitpos:[31:16] ;default: 16'h8000 ; */ +/*description: */ +#define I2S_CVSD_Y_MIN 0x0000FFFF +#define I2S_CVSD_Y_MIN_M ((I2S_CVSD_Y_MIN_V)<<(I2S_CVSD_Y_MIN_S)) +#define I2S_CVSD_Y_MIN_V 0xFFFF +#define I2S_CVSD_Y_MIN_S 16 +/* I2S_CVSD_Y_MAX : R/W ;bitpos:[15:0] ;default: 16'h7fff ; */ +/*description: */ +#define I2S_CVSD_Y_MAX 0x0000FFFF +#define I2S_CVSD_Y_MAX_M ((I2S_CVSD_Y_MAX_V)<<(I2S_CVSD_Y_MAX_S)) +#define I2S_CVSD_Y_MAX_V 0xFFFF +#define I2S_CVSD_Y_MAX_S 0 + +#define I2S_CVSD_CONF1_REG(i) (REG_I2S_BASE(i) + 0x0084) +/* I2S_CVSD_SIGMA_MIN : R/W ;bitpos:[31:16] ;default: 16'd10 ; */ +/*description: */ +#define I2S_CVSD_SIGMA_MIN 0x0000FFFF +#define I2S_CVSD_SIGMA_MIN_M ((I2S_CVSD_SIGMA_MIN_V)<<(I2S_CVSD_SIGMA_MIN_S)) +#define I2S_CVSD_SIGMA_MIN_V 0xFFFF +#define I2S_CVSD_SIGMA_MIN_S 16 +/* I2S_CVSD_SIGMA_MAX : R/W ;bitpos:[15:0] ;default: 16'd1280 ; */ +/*description: */ +#define I2S_CVSD_SIGMA_MAX 0x0000FFFF +#define I2S_CVSD_SIGMA_MAX_M ((I2S_CVSD_SIGMA_MAX_V)<<(I2S_CVSD_SIGMA_MAX_S)) +#define I2S_CVSD_SIGMA_MAX_V 0xFFFF +#define I2S_CVSD_SIGMA_MAX_S 0 + +#define I2S_CVSD_CONF2_REG(i) (REG_I2S_BASE(i) + 0x0088) +/* I2S_CVSD_H : R/W ;bitpos:[18:16] ;default: 3'd5 ; */ +/*description: */ +#define I2S_CVSD_H 0x00000007 +#define I2S_CVSD_H_M ((I2S_CVSD_H_V)<<(I2S_CVSD_H_S)) +#define I2S_CVSD_H_V 0x7 +#define I2S_CVSD_H_S 16 +/* I2S_CVSD_BETA : R/W ;bitpos:[15:6] ;default: 10'd10 ; */ +/*description: */ +#define I2S_CVSD_BETA 0x000003FF +#define I2S_CVSD_BETA_M ((I2S_CVSD_BETA_V)<<(I2S_CVSD_BETA_S)) +#define I2S_CVSD_BETA_V 0x3FF +#define I2S_CVSD_BETA_S 6 +/* I2S_CVSD_J : R/W ;bitpos:[5:3] ;default: 3'h4 ; */ +/*description: */ +#define I2S_CVSD_J 0x00000007 +#define I2S_CVSD_J_M ((I2S_CVSD_J_V)<<(I2S_CVSD_J_S)) +#define I2S_CVSD_J_V 0x7 +#define I2S_CVSD_J_S 3 +/* I2S_CVSD_K : R/W ;bitpos:[2:0] ;default: 3'h4 ; */ +/*description: */ +#define I2S_CVSD_K 0x00000007 +#define I2S_CVSD_K_M ((I2S_CVSD_K_V)<<(I2S_CVSD_K_S)) +#define I2S_CVSD_K_V 0x7 +#define I2S_CVSD_K_S 0 + +#define I2S_PLC_CONF0_REG(i) (REG_I2S_BASE(i) + 0x008C) +/* I2S_N_MIN_ERR : R/W ;bitpos:[27:25] ;default: 3'd4 ; */ +/*description: */ +#define I2S_N_MIN_ERR 0x00000007 +#define I2S_N_MIN_ERR_M ((I2S_N_MIN_ERR_V)<<(I2S_N_MIN_ERR_S)) +#define I2S_N_MIN_ERR_V 0x7 +#define I2S_N_MIN_ERR_S 25 +/* I2S_PACK_LEN_8K : R/W ;bitpos:[24:20] ;default: 5'd10 ; */ +/*description: */ +#define I2S_PACK_LEN_8K 0x0000001F +#define I2S_PACK_LEN_8K_M ((I2S_PACK_LEN_8K_V)<<(I2S_PACK_LEN_8K_S)) +#define I2S_PACK_LEN_8K_V 0x1F +#define I2S_PACK_LEN_8K_S 20 +/* I2S_MAX_SLIDE_SAMPLE : R/W ;bitpos:[19:12] ;default: 8'd128 ; */ +/*description: */ +#define I2S_MAX_SLIDE_SAMPLE 0x000000FF +#define I2S_MAX_SLIDE_SAMPLE_M ((I2S_MAX_SLIDE_SAMPLE_V)<<(I2S_MAX_SLIDE_SAMPLE_S)) +#define I2S_MAX_SLIDE_SAMPLE_V 0xFF +#define I2S_MAX_SLIDE_SAMPLE_S 12 +/* I2S_SHIFT_RATE : R/W ;bitpos:[11:9] ;default: 3'h1 ; */ +/*description: */ +#define I2S_SHIFT_RATE 0x00000007 +#define I2S_SHIFT_RATE_M ((I2S_SHIFT_RATE_V)<<(I2S_SHIFT_RATE_S)) +#define I2S_SHIFT_RATE_V 0x7 +#define I2S_SHIFT_RATE_S 9 +/* I2S_N_ERR_SEG : R/W ;bitpos:[8:6] ;default: 3'h4 ; */ +/*description: */ +#define I2S_N_ERR_SEG 0x00000007 +#define I2S_N_ERR_SEG_M ((I2S_N_ERR_SEG_V)<<(I2S_N_ERR_SEG_S)) +#define I2S_N_ERR_SEG_V 0x7 +#define I2S_N_ERR_SEG_S 6 +/* I2S_GOOD_PACK_MAX : R/W ;bitpos:[5:0] ;default: 6'h39 ; */ +/*description: */ +#define I2S_GOOD_PACK_MAX 0x0000003F +#define I2S_GOOD_PACK_MAX_M ((I2S_GOOD_PACK_MAX_V)<<(I2S_GOOD_PACK_MAX_S)) +#define I2S_GOOD_PACK_MAX_V 0x3F +#define I2S_GOOD_PACK_MAX_S 0 + +#define I2S_PLC_CONF1_REG(i) (REG_I2S_BASE(i) + 0x0090) +/* I2S_SLIDE_WIN_LEN : R/W ;bitpos:[31:24] ;default: 8'd160 ; */ +/*description: */ +#define I2S_SLIDE_WIN_LEN 0x000000FF +#define I2S_SLIDE_WIN_LEN_M ((I2S_SLIDE_WIN_LEN_V)<<(I2S_SLIDE_WIN_LEN_S)) +#define I2S_SLIDE_WIN_LEN_V 0xFF +#define I2S_SLIDE_WIN_LEN_S 24 +/* I2S_BAD_OLA_WIN2_PARA : R/W ;bitpos:[23:16] ;default: 8'd23 ; */ +/*description: */ +#define I2S_BAD_OLA_WIN2_PARA 0x000000FF +#define I2S_BAD_OLA_WIN2_PARA_M ((I2S_BAD_OLA_WIN2_PARA_V)<<(I2S_BAD_OLA_WIN2_PARA_S)) +#define I2S_BAD_OLA_WIN2_PARA_V 0xFF +#define I2S_BAD_OLA_WIN2_PARA_S 16 +/* I2S_BAD_OLA_WIN2_PARA_SHIFT : R/W ;bitpos:[15:12] ;default: 4'd8 ; */ +/*description: */ +#define I2S_BAD_OLA_WIN2_PARA_SHIFT 0x0000000F +#define I2S_BAD_OLA_WIN2_PARA_SHIFT_M ((I2S_BAD_OLA_WIN2_PARA_SHIFT_V)<<(I2S_BAD_OLA_WIN2_PARA_SHIFT_S)) +#define I2S_BAD_OLA_WIN2_PARA_SHIFT_V 0xF +#define I2S_BAD_OLA_WIN2_PARA_SHIFT_S 12 +/* I2S_BAD_CEF_ATTEN_PARA_SHIFT : R/W ;bitpos:[11:8] ;default: 4'd10 ; */ +/*description: */ +#define I2S_BAD_CEF_ATTEN_PARA_SHIFT 0x0000000F +#define I2S_BAD_CEF_ATTEN_PARA_SHIFT_M ((I2S_BAD_CEF_ATTEN_PARA_SHIFT_V)<<(I2S_BAD_CEF_ATTEN_PARA_SHIFT_S)) +#define I2S_BAD_CEF_ATTEN_PARA_SHIFT_V 0xF +#define I2S_BAD_CEF_ATTEN_PARA_SHIFT_S 8 +/* I2S_BAD_CEF_ATTEN_PARA : R/W ;bitpos:[7:0] ;default: 8'd5 ; */ +/*description: */ +#define I2S_BAD_CEF_ATTEN_PARA 0x000000FF +#define I2S_BAD_CEF_ATTEN_PARA_M ((I2S_BAD_CEF_ATTEN_PARA_V)<<(I2S_BAD_CEF_ATTEN_PARA_S)) +#define I2S_BAD_CEF_ATTEN_PARA_V 0xFF +#define I2S_BAD_CEF_ATTEN_PARA_S 0 + +#define I2S_PLC_CONF2_REG(i) (REG_I2S_BASE(i) + 0x0094) +/* I2S_MIN_PERIOD : R/W ;bitpos:[6:2] ;default: 5'd10 ; */ +/*description: */ +#define I2S_MIN_PERIOD 0x0000001F +#define I2S_MIN_PERIOD_M ((I2S_MIN_PERIOD_V)<<(I2S_MIN_PERIOD_S)) +#define I2S_MIN_PERIOD_V 0x1F +#define I2S_MIN_PERIOD_S 2 +/* I2S_CVSD_SEG_MOD : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: */ +#define I2S_CVSD_SEG_MOD 0x00000003 +#define I2S_CVSD_SEG_MOD_M ((I2S_CVSD_SEG_MOD_V)<<(I2S_CVSD_SEG_MOD_S)) +#define I2S_CVSD_SEG_MOD_V 0x3 +#define I2S_CVSD_SEG_MOD_S 0 + +#define I2S_ESCO_CONF0_REG(i) (REG_I2S_BASE(i) + 0x0098) +/* I2S_PLC2DMA_EN : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define I2S_PLC2DMA_EN (BIT(12)) +#define I2S_PLC2DMA_EN_M (BIT(12)) +#define I2S_PLC2DMA_EN_V 0x1 +#define I2S_PLC2DMA_EN_S 12 +/* I2S_PLC_EN : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define I2S_PLC_EN (BIT(11)) +#define I2S_PLC_EN_M (BIT(11)) +#define I2S_PLC_EN_V 0x1 +#define I2S_PLC_EN_S 11 +/* I2S_CVSD_DEC_RESET : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define I2S_CVSD_DEC_RESET (BIT(10)) +#define I2S_CVSD_DEC_RESET_M (BIT(10)) +#define I2S_CVSD_DEC_RESET_V 0x1 +#define I2S_CVSD_DEC_RESET_S 10 +/* I2S_CVSD_DEC_START : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define I2S_CVSD_DEC_START (BIT(9)) +#define I2S_CVSD_DEC_START_M (BIT(9)) +#define I2S_CVSD_DEC_START_V 0x1 +#define I2S_CVSD_DEC_START_S 9 +/* I2S_ESCO_CVSD_INF_EN : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define I2S_ESCO_CVSD_INF_EN (BIT(8)) +#define I2S_ESCO_CVSD_INF_EN_M (BIT(8)) +#define I2S_ESCO_CVSD_INF_EN_V 0x1 +#define I2S_ESCO_CVSD_INF_EN_S 8 +/* I2S_ESCO_CVSD_PACK_LEN_8K : R/W ;bitpos:[7:3] ;default: 5'b0 ; */ +/*description: */ +#define I2S_ESCO_CVSD_PACK_LEN_8K 0x0000001F +#define I2S_ESCO_CVSD_PACK_LEN_8K_M ((I2S_ESCO_CVSD_PACK_LEN_8K_V)<<(I2S_ESCO_CVSD_PACK_LEN_8K_S)) +#define I2S_ESCO_CVSD_PACK_LEN_8K_V 0x1F +#define I2S_ESCO_CVSD_PACK_LEN_8K_S 3 +/* I2S_ESCO_CVSD_DEC_PACK_ERR : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define I2S_ESCO_CVSD_DEC_PACK_ERR (BIT(2)) +#define I2S_ESCO_CVSD_DEC_PACK_ERR_M (BIT(2)) +#define I2S_ESCO_CVSD_DEC_PACK_ERR_V 0x1 +#define I2S_ESCO_CVSD_DEC_PACK_ERR_S 2 +/* I2S_ESCO_CHAN_MOD : R/W ;bitpos:[1] ;default: 1'd0 ; */ +/*description: */ +#define I2S_ESCO_CHAN_MOD (BIT(1)) +#define I2S_ESCO_CHAN_MOD_M (BIT(1)) +#define I2S_ESCO_CHAN_MOD_V 0x1 +#define I2S_ESCO_CHAN_MOD_S 1 +/* I2S_ESCO_EN : R/W ;bitpos:[0] ;default: 1'd0 ; */ +/*description: */ +#define I2S_ESCO_EN (BIT(0)) +#define I2S_ESCO_EN_M (BIT(0)) +#define I2S_ESCO_EN_V 0x1 +#define I2S_ESCO_EN_S 0 + +#define I2S_SCO_CONF0_REG(i) (REG_I2S_BASE(i) + 0x009c) +/* I2S_CVSD_ENC_RESET : R/W ;bitpos:[3] ;default: 1'd0 ; */ +/*description: */ +#define I2S_CVSD_ENC_RESET (BIT(3)) +#define I2S_CVSD_ENC_RESET_M (BIT(3)) +#define I2S_CVSD_ENC_RESET_V 0x1 +#define I2S_CVSD_ENC_RESET_S 3 +/* I2S_CVSD_ENC_START : R/W ;bitpos:[2] ;default: 1'd0 ; */ +/*description: */ +#define I2S_CVSD_ENC_START (BIT(2)) +#define I2S_CVSD_ENC_START_M (BIT(2)) +#define I2S_CVSD_ENC_START_V 0x1 +#define I2S_CVSD_ENC_START_S 2 +/* I2S_SCO_NO_I2S_EN : R/W ;bitpos:[1] ;default: 1'd0 ; */ +/*description: */ +#define I2S_SCO_NO_I2S_EN (BIT(1)) +#define I2S_SCO_NO_I2S_EN_M (BIT(1)) +#define I2S_SCO_NO_I2S_EN_V 0x1 +#define I2S_SCO_NO_I2S_EN_S 1 +/* I2S_SCO_WITH_I2S_EN : R/W ;bitpos:[0] ;default: 1'd0 ; */ +/*description: */ +#define I2S_SCO_WITH_I2S_EN (BIT(0)) +#define I2S_SCO_WITH_I2S_EN_M (BIT(0)) +#define I2S_SCO_WITH_I2S_EN_V 0x1 +#define I2S_SCO_WITH_I2S_EN_S 0 + +#define I2S_CONF1_REG(i) (REG_I2S_BASE(i) + 0x00a0) +/* I2S_TX_ZEROS_RM_EN : R/W ;bitpos:[9] ;default: 1'd0 ; */ +/*description: */ +#define I2S_TX_ZEROS_RM_EN (BIT(9)) +#define I2S_TX_ZEROS_RM_EN_M (BIT(9)) +#define I2S_TX_ZEROS_RM_EN_V 0x1 +#define I2S_TX_ZEROS_RM_EN_S 9 +/* I2S_TX_STOP_EN : R/W ;bitpos:[8] ;default: 1'd0 ; */ +/*description: */ +#define I2S_TX_STOP_EN (BIT(8)) +#define I2S_TX_STOP_EN_M (BIT(8)) +#define I2S_TX_STOP_EN_V 0x1 +#define I2S_TX_STOP_EN_S 8 +/* I2S_RX_PCM_BYPASS : R/W ;bitpos:[7] ;default: 1'h1 ; */ +/*description: */ +#define I2S_RX_PCM_BYPASS (BIT(7)) +#define I2S_RX_PCM_BYPASS_M (BIT(7)) +#define I2S_RX_PCM_BYPASS_V 0x1 +#define I2S_RX_PCM_BYPASS_S 7 +/* I2S_RX_PCM_CONF : R/W ;bitpos:[6:4] ;default: 3'h0 ; */ +/*description: */ +#define I2S_RX_PCM_CONF 0x00000007 +#define I2S_RX_PCM_CONF_M ((I2S_RX_PCM_CONF_V)<<(I2S_RX_PCM_CONF_S)) +#define I2S_RX_PCM_CONF_V 0x7 +#define I2S_RX_PCM_CONF_S 4 +/* I2S_TX_PCM_BYPASS : R/W ;bitpos:[3] ;default: 1'h1 ; */ +/*description: */ +#define I2S_TX_PCM_BYPASS (BIT(3)) +#define I2S_TX_PCM_BYPASS_M (BIT(3)) +#define I2S_TX_PCM_BYPASS_V 0x1 +#define I2S_TX_PCM_BYPASS_S 3 +/* I2S_TX_PCM_CONF : R/W ;bitpos:[2:0] ;default: 3'h1 ; */ +/*description: */ +#define I2S_TX_PCM_CONF 0x00000007 +#define I2S_TX_PCM_CONF_M ((I2S_TX_PCM_CONF_V)<<(I2S_TX_PCM_CONF_S)) +#define I2S_TX_PCM_CONF_V 0x7 +#define I2S_TX_PCM_CONF_S 0 + +#define I2S_PD_CONF_REG(i) (REG_I2S_BASE(i) + 0x00a4) +/* I2S_PLC_MEM_FORCE_PU : R/W ;bitpos:[3] ;default: 1'h1 ; */ +/*description: */ +#define I2S_PLC_MEM_FORCE_PU (BIT(3)) +#define I2S_PLC_MEM_FORCE_PU_M (BIT(3)) +#define I2S_PLC_MEM_FORCE_PU_V 0x1 +#define I2S_PLC_MEM_FORCE_PU_S 3 +/* I2S_PLC_MEM_FORCE_PD : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: */ +#define I2S_PLC_MEM_FORCE_PD (BIT(2)) +#define I2S_PLC_MEM_FORCE_PD_M (BIT(2)) +#define I2S_PLC_MEM_FORCE_PD_V 0x1 +#define I2S_PLC_MEM_FORCE_PD_S 2 +/* I2S_FIFO_FORCE_PU : R/W ;bitpos:[1] ;default: 1'h1 ; */ +/*description: */ +#define I2S_FIFO_FORCE_PU (BIT(1)) +#define I2S_FIFO_FORCE_PU_M (BIT(1)) +#define I2S_FIFO_FORCE_PU_V 0x1 +#define I2S_FIFO_FORCE_PU_S 1 +/* I2S_FIFO_FORCE_PD : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: */ +#define I2S_FIFO_FORCE_PD (BIT(0)) +#define I2S_FIFO_FORCE_PD_M (BIT(0)) +#define I2S_FIFO_FORCE_PD_V 0x1 +#define I2S_FIFO_FORCE_PD_S 0 + +#define I2S_CONF2_REG(i) (REG_I2S_BASE(i) + 0x00a8) +/* I2S_INTER_VALID_EN : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define I2S_INTER_VALID_EN (BIT(7)) +#define I2S_INTER_VALID_EN_M (BIT(7)) +#define I2S_INTER_VALID_EN_V 0x1 +#define I2S_INTER_VALID_EN_S 7 +/* I2S_EXT_ADC_START_EN : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define I2S_EXT_ADC_START_EN (BIT(6)) +#define I2S_EXT_ADC_START_EN_M (BIT(6)) +#define I2S_EXT_ADC_START_EN_V 0x1 +#define I2S_EXT_ADC_START_EN_S 6 +/* I2S_LCD_EN : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define I2S_LCD_EN (BIT(5)) +#define I2S_LCD_EN_M (BIT(5)) +#define I2S_LCD_EN_V 0x1 +#define I2S_LCD_EN_S 5 +/* I2S_DATA_ENABLE : R/W ;bitpos:[4] ;default: 1'h0 ; */ +/*description: */ +#define I2S_DATA_ENABLE (BIT(4)) +#define I2S_DATA_ENABLE_M (BIT(4)) +#define I2S_DATA_ENABLE_V 0x1 +#define I2S_DATA_ENABLE_S 4 +/* I2S_DATA_ENABLE_TEST_EN : R/W ;bitpos:[3] ;default: 1'h0 ; */ +/*description: */ +#define I2S_DATA_ENABLE_TEST_EN (BIT(3)) +#define I2S_DATA_ENABLE_TEST_EN_M (BIT(3)) +#define I2S_DATA_ENABLE_TEST_EN_V 0x1 +#define I2S_DATA_ENABLE_TEST_EN_S 3 +/* I2S_LCD_TX_SDX2_EN : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: */ +#define I2S_LCD_TX_SDX2_EN (BIT(2)) +#define I2S_LCD_TX_SDX2_EN_M (BIT(2)) +#define I2S_LCD_TX_SDX2_EN_V 0x1 +#define I2S_LCD_TX_SDX2_EN_S 2 +/* I2S_LCD_TX_WRX2_EN : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: */ +#define I2S_LCD_TX_WRX2_EN (BIT(1)) +#define I2S_LCD_TX_WRX2_EN_M (BIT(1)) +#define I2S_LCD_TX_WRX2_EN_V 0x1 +#define I2S_LCD_TX_WRX2_EN_S 1 +/* I2S_CAMERA_EN : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: */ +#define I2S_CAMERA_EN (BIT(0)) +#define I2S_CAMERA_EN_M (BIT(0)) +#define I2S_CAMERA_EN_V 0x1 +#define I2S_CAMERA_EN_S 0 + +#define I2S_CLKM_CONF_REG(i) (REG_I2S_BASE(i) + 0x00ac) +/* I2S_CLKA_ENA : R/W ;bitpos:[21] ;default: 1'b0 ; */ +/*description: */ +#define I2S_CLKA_ENA (BIT(21)) +#define I2S_CLKA_ENA_M (BIT(21)) +#define I2S_CLKA_ENA_V 0x1 +#define I2S_CLKA_ENA_S 21 +/* I2S_CLK_EN : R/W ;bitpos:[20] ;default: 1'b0 ; */ +/*description: */ +#define I2S_CLK_EN (BIT(20)) +#define I2S_CLK_EN_M (BIT(20)) +#define I2S_CLK_EN_V 0x1 +#define I2S_CLK_EN_S 20 +/* I2S_CLKM_DIV_A : R/W ;bitpos:[19:14] ;default: 6'h0 ; */ +/*description: */ +#define I2S_CLKM_DIV_A 0x0000003F +#define I2S_CLKM_DIV_A_M ((I2S_CLKM_DIV_A_V)<<(I2S_CLKM_DIV_A_S)) +#define I2S_CLKM_DIV_A_V 0x3F +#define I2S_CLKM_DIV_A_S 14 +/* I2S_CLKM_DIV_B : R/W ;bitpos:[13:8] ;default: 6'h0 ; */ +/*description: */ +#define I2S_CLKM_DIV_B 0x0000003F +#define I2S_CLKM_DIV_B_M ((I2S_CLKM_DIV_B_V)<<(I2S_CLKM_DIV_B_S)) +#define I2S_CLKM_DIV_B_V 0x3F +#define I2S_CLKM_DIV_B_S 8 +/* I2S_CLKM_DIV_NUM : R/W ;bitpos:[7:0] ;default: 8'd4 ; */ +/*description: */ +#define I2S_CLKM_DIV_NUM 0x000000FF +#define I2S_CLKM_DIV_NUM_M ((I2S_CLKM_DIV_NUM_V)<<(I2S_CLKM_DIV_NUM_S)) +#define I2S_CLKM_DIV_NUM_V 0xFF +#define I2S_CLKM_DIV_NUM_S 0 + +#define I2S_SAMPLE_RATE_CONF_REG(i) (REG_I2S_BASE(i) + 0x00b0) +/* I2S_RX_BITS_MOD : R/W ;bitpos:[23:18] ;default: 6'd16 ; */ +/*description: */ +#define I2S_RX_BITS_MOD 0x0000003F +#define I2S_RX_BITS_MOD_M ((I2S_RX_BITS_MOD_V)<<(I2S_RX_BITS_MOD_S)) +#define I2S_RX_BITS_MOD_V 0x3F +#define I2S_RX_BITS_MOD_S 18 +/* I2S_TX_BITS_MOD : R/W ;bitpos:[17:12] ;default: 6'd16 ; */ +/*description: */ +#define I2S_TX_BITS_MOD 0x0000003F +#define I2S_TX_BITS_MOD_M ((I2S_TX_BITS_MOD_V)<<(I2S_TX_BITS_MOD_S)) +#define I2S_TX_BITS_MOD_V 0x3F +#define I2S_TX_BITS_MOD_S 12 +/* I2S_RX_BCK_DIV_NUM : R/W ;bitpos:[11:6] ;default: 6'd6 ; */ +/*description: */ +#define I2S_RX_BCK_DIV_NUM 0x0000003F +#define I2S_RX_BCK_DIV_NUM_M ((I2S_RX_BCK_DIV_NUM_V)<<(I2S_RX_BCK_DIV_NUM_S)) +#define I2S_RX_BCK_DIV_NUM_V 0x3F +#define I2S_RX_BCK_DIV_NUM_S 6 +/* I2S_TX_BCK_DIV_NUM : R/W ;bitpos:[5:0] ;default: 6'd6 ; */ +/*description: */ +#define I2S_TX_BCK_DIV_NUM 0x0000003F +#define I2S_TX_BCK_DIV_NUM_M ((I2S_TX_BCK_DIV_NUM_V)<<(I2S_TX_BCK_DIV_NUM_S)) +#define I2S_TX_BCK_DIV_NUM_V 0x3F +#define I2S_TX_BCK_DIV_NUM_S 0 + +#define I2S_PDM_CONF_REG(i) (REG_I2S_BASE(i) + 0x00b4) +/* I2S_TX_PDM_HP_BYPASS : R/W ;bitpos:[25] ;default: 1'h0 ; */ +/*description: */ +#define I2S_TX_PDM_HP_BYPASS (BIT(25)) +#define I2S_TX_PDM_HP_BYPASS_M (BIT(25)) +#define I2S_TX_PDM_HP_BYPASS_V 0x1 +#define I2S_TX_PDM_HP_BYPASS_S 25 +/* I2S_RX_PDM_SINC_DSR_16_EN : R/W ;bitpos:[24] ;default: 1'h1 ; */ +/*description: */ +#define I2S_RX_PDM_SINC_DSR_16_EN (BIT(24)) +#define I2S_RX_PDM_SINC_DSR_16_EN_M (BIT(24)) +#define I2S_RX_PDM_SINC_DSR_16_EN_V 0x1 +#define I2S_RX_PDM_SINC_DSR_16_EN_S 24 +/* I2S_TX_PDM_SIGMADELTA_IN_SHIFT : R/W ;bitpos:[23:22] ;default: 2'h1 ; */ +/*description: */ +#define I2S_TX_PDM_SIGMADELTA_IN_SHIFT 0x00000003 +#define I2S_TX_PDM_SIGMADELTA_IN_SHIFT_M ((I2S_TX_PDM_SIGMADELTA_IN_SHIFT_V)<<(I2S_TX_PDM_SIGMADELTA_IN_SHIFT_S)) +#define I2S_TX_PDM_SIGMADELTA_IN_SHIFT_V 0x3 +#define I2S_TX_PDM_SIGMADELTA_IN_SHIFT_S 22 +/* I2S_TX_PDM_SINC_IN_SHIFT : R/W ;bitpos:[21:20] ;default: 2'h1 ; */ +/*description: */ +#define I2S_TX_PDM_SINC_IN_SHIFT 0x00000003 +#define I2S_TX_PDM_SINC_IN_SHIFT_M ((I2S_TX_PDM_SINC_IN_SHIFT_V)<<(I2S_TX_PDM_SINC_IN_SHIFT_S)) +#define I2S_TX_PDM_SINC_IN_SHIFT_V 0x3 +#define I2S_TX_PDM_SINC_IN_SHIFT_S 20 +/* I2S_TX_PDM_LP_IN_SHIFT : R/W ;bitpos:[19:18] ;default: 2'h1 ; */ +/*description: */ +#define I2S_TX_PDM_LP_IN_SHIFT 0x00000003 +#define I2S_TX_PDM_LP_IN_SHIFT_M ((I2S_TX_PDM_LP_IN_SHIFT_V)<<(I2S_TX_PDM_LP_IN_SHIFT_S)) +#define I2S_TX_PDM_LP_IN_SHIFT_V 0x3 +#define I2S_TX_PDM_LP_IN_SHIFT_S 18 +/* I2S_TX_PDM_HP_IN_SHIFT : R/W ;bitpos:[17:16] ;default: 2'h1 ; */ +/*description: */ +#define I2S_TX_PDM_HP_IN_SHIFT 0x00000003 +#define I2S_TX_PDM_HP_IN_SHIFT_M ((I2S_TX_PDM_HP_IN_SHIFT_V)<<(I2S_TX_PDM_HP_IN_SHIFT_S)) +#define I2S_TX_PDM_HP_IN_SHIFT_V 0x3 +#define I2S_TX_PDM_HP_IN_SHIFT_S 16 +/* I2S_TX_PDM_PRESCALE : R/W ;bitpos:[15:8] ;default: 8'h0 ; */ +/*description: */ +#define I2S_TX_PDM_PRESCALE 0x000000FF +#define I2S_TX_PDM_PRESCALE_M ((I2S_TX_PDM_PRESCALE_V)<<(I2S_TX_PDM_PRESCALE_S)) +#define I2S_TX_PDM_PRESCALE_V 0xFF +#define I2S_TX_PDM_PRESCALE_S 8 +/* I2S_TX_PDM_SINC_OSR2 : R/W ;bitpos:[7:4] ;default: 4'h2 ; */ +/*description: */ +#define I2S_TX_PDM_SINC_OSR2 0x0000000F +#define I2S_TX_PDM_SINC_OSR2_M ((I2S_TX_PDM_SINC_OSR2_V)<<(I2S_TX_PDM_SINC_OSR2_S)) +#define I2S_TX_PDM_SINC_OSR2_V 0xF +#define I2S_TX_PDM_SINC_OSR2_S 4 +/* I2S_PDM2PCM_CONV_EN : R/W ;bitpos:[3] ;default: 1'h0 ; */ +/*description: */ +#define I2S_PDM2PCM_CONV_EN (BIT(3)) +#define I2S_PDM2PCM_CONV_EN_M (BIT(3)) +#define I2S_PDM2PCM_CONV_EN_V 0x1 +#define I2S_PDM2PCM_CONV_EN_S 3 +/* I2S_PCM2PDM_CONV_EN : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: */ +#define I2S_PCM2PDM_CONV_EN (BIT(2)) +#define I2S_PCM2PDM_CONV_EN_M (BIT(2)) +#define I2S_PCM2PDM_CONV_EN_V 0x1 +#define I2S_PCM2PDM_CONV_EN_S 2 +/* I2S_RX_PDM_EN : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: */ +#define I2S_RX_PDM_EN (BIT(1)) +#define I2S_RX_PDM_EN_M (BIT(1)) +#define I2S_RX_PDM_EN_V 0x1 +#define I2S_RX_PDM_EN_S 1 +/* I2S_TX_PDM_EN : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: */ +#define I2S_TX_PDM_EN (BIT(0)) +#define I2S_TX_PDM_EN_M (BIT(0)) +#define I2S_TX_PDM_EN_V 0x1 +#define I2S_TX_PDM_EN_S 0 + +#define I2S_PDM_FREQ_CONF_REG(i) (REG_I2S_BASE(i) + 0x00b8) +/* I2S_TX_PDM_FP : R/W ;bitpos:[19:10] ;default: 10'd960 ; */ +/*description: */ +#define I2S_TX_PDM_FP 0x000003FF +#define I2S_TX_PDM_FP_M ((I2S_TX_PDM_FP_V)<<(I2S_TX_PDM_FP_S)) +#define I2S_TX_PDM_FP_V 0x3FF +#define I2S_TX_PDM_FP_S 10 +/* I2S_TX_PDM_FS : R/W ;bitpos:[9:0] ;default: 10'd480 ; */ +/*description: */ +#define I2S_TX_PDM_FS 0x000003FF +#define I2S_TX_PDM_FS_M ((I2S_TX_PDM_FS_V)<<(I2S_TX_PDM_FS_S)) +#define I2S_TX_PDM_FS_V 0x3FF +#define I2S_TX_PDM_FS_S 0 + +#define I2S_STATE_REG(i) (REG_I2S_BASE(i) + 0x00bc) +/* I2S_RX_FIFO_RESET_BACK : RO ;bitpos:[2] ;default: 1'b1 ; */ +/*description: */ +#define I2S_RX_FIFO_RESET_BACK (BIT(2)) +#define I2S_RX_FIFO_RESET_BACK_M (BIT(2)) +#define I2S_RX_FIFO_RESET_BACK_V 0x1 +#define I2S_RX_FIFO_RESET_BACK_S 2 +/* I2S_TX_FIFO_RESET_BACK : RO ;bitpos:[1] ;default: 1'b1 ; */ +/*description: */ +#define I2S_TX_FIFO_RESET_BACK (BIT(1)) +#define I2S_TX_FIFO_RESET_BACK_M (BIT(1)) +#define I2S_TX_FIFO_RESET_BACK_V 0x1 +#define I2S_TX_FIFO_RESET_BACK_S 1 +/* I2S_TX_IDLE : RO ;bitpos:[0] ;default: 1'b1 ; */ +/*description: */ +#define I2S_TX_IDLE (BIT(0)) +#define I2S_TX_IDLE_M (BIT(0)) +#define I2S_TX_IDLE_V 0x1 +#define I2S_TX_IDLE_S 0 + +#define I2S_DATE_REG(i) (REG_I2S_BASE(i) + 0x00fc) +/* I2S_I2SDATE : R/W ;bitpos:[31:0] ;default: 32'h1604201 ; */ +/*description: */ +#define I2S_I2SDATE 0xFFFFFFFF +#define I2S_I2SDATE_M ((I2S_I2SDATE_V)<<(I2S_I2SDATE_S)) +#define I2S_I2SDATE_V 0xFFFFFFFF +#define I2S_I2SDATE_S 0 + + + + +#endif /*_SOC_I2S_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/i2s_struct.h b/tools/sdk/include/esp32/soc/i2s_struct.h new file mode 100644 index 00000000..6d9fcbab --- /dev/null +++ b/tools/sdk/include/esp32/soc/i2s_struct.h @@ -0,0 +1,461 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_I2S_STRUCT_H_ +#define _SOC_I2S_STRUCT_H_ +typedef volatile struct { + uint32_t reserved_0; + uint32_t reserved_4; + union { + struct { + uint32_t tx_reset: 1; + uint32_t rx_reset: 1; + uint32_t tx_fifo_reset: 1; + uint32_t rx_fifo_reset: 1; + uint32_t tx_start: 1; + uint32_t rx_start: 1; + uint32_t tx_slave_mod: 1; + uint32_t rx_slave_mod: 1; + uint32_t tx_right_first: 1; + uint32_t rx_right_first: 1; + uint32_t tx_msb_shift: 1; + uint32_t rx_msb_shift: 1; + uint32_t tx_short_sync: 1; + uint32_t rx_short_sync: 1; + uint32_t tx_mono: 1; + uint32_t rx_mono: 1; + uint32_t tx_msb_right: 1; + uint32_t rx_msb_right: 1; + uint32_t sig_loopback: 1; + uint32_t reserved19: 13; + }; + uint32_t val; + } conf; + union { + struct { + uint32_t rx_take_data: 1; + uint32_t tx_put_data: 1; + uint32_t rx_wfull: 1; + uint32_t rx_rempty: 1; + uint32_t tx_wfull: 1; + uint32_t tx_rempty: 1; + uint32_t rx_hung: 1; + uint32_t tx_hung: 1; + uint32_t in_done: 1; + uint32_t in_suc_eof: 1; + uint32_t in_err_eof: 1; + uint32_t out_done: 1; + uint32_t out_eof: 1; + uint32_t in_dscr_err: 1; + uint32_t out_dscr_err: 1; + uint32_t in_dscr_empty: 1; + uint32_t out_total_eof: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } int_raw; + union { + struct { + uint32_t rx_take_data: 1; + uint32_t tx_put_data: 1; + uint32_t rx_wfull: 1; + uint32_t rx_rempty: 1; + uint32_t tx_wfull: 1; + uint32_t tx_rempty: 1; + uint32_t rx_hung: 1; + uint32_t tx_hung: 1; + uint32_t in_done: 1; + uint32_t in_suc_eof: 1; + uint32_t in_err_eof: 1; + uint32_t out_done: 1; + uint32_t out_eof: 1; + uint32_t in_dscr_err: 1; + uint32_t out_dscr_err: 1; + uint32_t in_dscr_empty: 1; + uint32_t out_total_eof: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } int_st; + union { + struct { + uint32_t rx_take_data: 1; + uint32_t tx_put_data: 1; + uint32_t rx_wfull: 1; + uint32_t rx_rempty: 1; + uint32_t tx_wfull: 1; + uint32_t tx_rempty: 1; + uint32_t rx_hung: 1; + uint32_t tx_hung: 1; + uint32_t in_done: 1; + uint32_t in_suc_eof: 1; + uint32_t in_err_eof: 1; + uint32_t out_done: 1; + uint32_t out_eof: 1; + uint32_t in_dscr_err: 1; + uint32_t out_dscr_err: 1; + uint32_t in_dscr_empty: 1; + uint32_t out_total_eof: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } int_ena; + union { + struct { + uint32_t take_data: 1; + uint32_t put_data: 1; + uint32_t rx_wfull: 1; + uint32_t rx_rempty: 1; + uint32_t tx_wfull: 1; + uint32_t tx_rempty: 1; + uint32_t rx_hung: 1; + uint32_t tx_hung: 1; + uint32_t in_done: 1; + uint32_t in_suc_eof: 1; + uint32_t in_err_eof: 1; + uint32_t out_done: 1; + uint32_t out_eof: 1; + uint32_t in_dscr_err: 1; + uint32_t out_dscr_err: 1; + uint32_t in_dscr_empty: 1; + uint32_t out_total_eof: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } int_clr; + union { + struct { + uint32_t tx_bck_in_delay: 2; + uint32_t tx_ws_in_delay: 2; + uint32_t rx_bck_in_delay: 2; + uint32_t rx_ws_in_delay: 2; + uint32_t rx_sd_in_delay: 2; + uint32_t tx_bck_out_delay: 2; + uint32_t tx_ws_out_delay: 2; + uint32_t tx_sd_out_delay: 2; + uint32_t rx_ws_out_delay: 2; + uint32_t rx_bck_out_delay: 2; + uint32_t tx_dsync_sw: 1; + uint32_t rx_dsync_sw: 1; + uint32_t data_enable_delay: 2; + uint32_t tx_bck_in_inv: 1; + uint32_t reserved25: 7; + }; + uint32_t val; + } timing; + union { + struct { + uint32_t rx_data_num: 6; + uint32_t tx_data_num: 6; + uint32_t dscr_en: 1; + uint32_t tx_fifo_mod: 3; + uint32_t rx_fifo_mod: 3; + uint32_t tx_fifo_mod_force_en: 1; + uint32_t rx_fifo_mod_force_en: 1; + uint32_t reserved21: 11; + }; + uint32_t val; + } fifo_conf; + uint32_t rx_eof_num; + uint32_t conf_single_data; + union { + struct { + uint32_t tx_chan_mod: 3; + uint32_t rx_chan_mod: 2; + uint32_t reserved5: 27; + }; + uint32_t val; + } conf_chan; + union { + struct { + uint32_t addr: 20; + uint32_t reserved20: 8; + uint32_t stop: 1; + uint32_t start: 1; + uint32_t restart: 1; + uint32_t park: 1; + }; + uint32_t val; + } out_link; + union { + struct { + uint32_t addr: 20; + uint32_t reserved20: 8; + uint32_t stop: 1; + uint32_t start: 1; + uint32_t restart: 1; + uint32_t park: 1; + }; + uint32_t val; + } in_link; + uint32_t out_eof_des_addr; + uint32_t in_eof_des_addr; + uint32_t out_eof_bfr_des_addr; + union { + struct { + uint32_t mode: 3; + uint32_t reserved3: 1; + uint32_t addr: 2; + uint32_t reserved6: 26; + }; + uint32_t val; + } ahb_test; + uint32_t in_link_dscr; + uint32_t in_link_dscr_bf0; + uint32_t in_link_dscr_bf1; + uint32_t out_link_dscr; + uint32_t out_link_dscr_bf0; + uint32_t out_link_dscr_bf1; + union { + struct { + uint32_t in_rst: 1; + uint32_t out_rst: 1; + uint32_t ahbm_fifo_rst: 1; + uint32_t ahbm_rst: 1; + uint32_t out_loop_test: 1; + uint32_t in_loop_test: 1; + uint32_t out_auto_wrback: 1; + uint32_t out_no_restart_clr: 1; + uint32_t out_eof_mode: 1; + uint32_t outdscr_burst_en: 1; + uint32_t indscr_burst_en: 1; + uint32_t out_data_burst_en: 1; + uint32_t check_owner: 1; + uint32_t mem_trans_en: 1; + uint32_t reserved14: 18; + }; + uint32_t val; + } lc_conf; + union { + struct { + uint32_t wdata: 9; + uint32_t reserved9: 7; + uint32_t push: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } out_fifo_push; + union { + struct { + uint32_t rdata: 12; + uint32_t reserved12: 4; + uint32_t pop: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } in_fifo_pop; + uint32_t lc_state0; + uint32_t lc_state1; + union { + struct { + uint32_t fifo_timeout: 8; + uint32_t fifo_timeout_shift: 3; + uint32_t fifo_timeout_ena: 1; + uint32_t reserved12: 20; + }; + uint32_t val; + } lc_hung_conf; + uint32_t reserved_78; + uint32_t reserved_7c; + union { + struct { + uint32_t y_max:16; + uint32_t y_min:16; + }; + uint32_t val; + } cvsd_conf0; + union { + struct { + uint32_t sigma_max:16; + uint32_t sigma_min:16; + }; + uint32_t val; + } cvsd_conf1; + union { + struct { + uint32_t cvsd_k: 3; + uint32_t cvsd_j: 3; + uint32_t cvsd_beta: 10; + uint32_t cvsd_h: 3; + uint32_t reserved19:13; + }; + uint32_t val; + } cvsd_conf2; + union { + struct { + uint32_t good_pack_max: 6; + uint32_t n_err_seg: 3; + uint32_t shift_rate: 3; + uint32_t max_slide_sample: 8; + uint32_t pack_len_8k: 5; + uint32_t n_min_err: 3; + uint32_t reserved28: 4; + }; + uint32_t val; + } plc_conf0; + union { + struct { + uint32_t bad_cef_atten_para: 8; + uint32_t bad_cef_atten_para_shift: 4; + uint32_t bad_ola_win2_para_shift: 4; + uint32_t bad_ola_win2_para: 8; + uint32_t slide_win_len: 8; + }; + uint32_t val; + } plc_conf1; + union { + struct { + uint32_t cvsd_seg_mod: 2; + uint32_t min_period: 5; + uint32_t reserved7: 25; + }; + uint32_t val; + } plc_conf2; + union { + struct { + uint32_t en: 1; + uint32_t chan_mod: 1; + uint32_t cvsd_dec_pack_err: 1; + uint32_t cvsd_pack_len_8k: 5; + uint32_t cvsd_inf_en: 1; + uint32_t cvsd_dec_start: 1; + uint32_t cvsd_dec_reset: 1; + uint32_t plc_en: 1; + uint32_t plc2dma_en: 1; + uint32_t reserved13: 19; + }; + uint32_t val; + } esco_conf0; + union { + struct { + uint32_t with_en: 1; + uint32_t no_en: 1; + uint32_t cvsd_enc_start: 1; + uint32_t cvsd_enc_reset: 1; + uint32_t reserved4: 28; + }; + uint32_t val; + } sco_conf0; + union { + struct { + uint32_t tx_pcm_conf: 3; + uint32_t tx_pcm_bypass: 1; + uint32_t rx_pcm_conf: 3; + uint32_t rx_pcm_bypass: 1; + uint32_t tx_stop_en: 1; + uint32_t tx_zeros_rm_en: 1; + uint32_t reserved10: 22; + }; + uint32_t val; + } conf1; + union { + struct { + uint32_t fifo_force_pd: 1; + uint32_t fifo_force_pu: 1; + uint32_t plc_mem_force_pd: 1; + uint32_t plc_mem_force_pu: 1; + uint32_t reserved4: 28; + }; + uint32_t val; + } pd_conf; + union { + struct { + uint32_t camera_en: 1; + uint32_t lcd_tx_wrx2_en: 1; + uint32_t lcd_tx_sdx2_en: 1; + uint32_t data_enable_test_en: 1; + uint32_t data_enable: 1; + uint32_t lcd_en: 1; + uint32_t ext_adc_start_en: 1; + uint32_t inter_valid_en: 1; + uint32_t reserved8: 24; + }; + uint32_t val; + } conf2; + union { + struct { + uint32_t clkm_div_num: 8; + uint32_t clkm_div_b: 6; + uint32_t clkm_div_a: 6; + uint32_t clk_en: 1; + uint32_t clka_en: 1; + uint32_t reserved22: 10; + }; + uint32_t val; + } clkm_conf; + union { + struct { + uint32_t tx_bck_div_num: 6; + uint32_t rx_bck_div_num: 6; + uint32_t tx_bits_mod: 6; + uint32_t rx_bits_mod: 6; + uint32_t reserved24: 8; + }; + uint32_t val; + } sample_rate_conf; + union { + struct { + uint32_t tx_pdm_en: 1; + uint32_t rx_pdm_en: 1; + uint32_t pcm2pdm_conv_en: 1; + uint32_t pdm2pcm_conv_en: 1; + uint32_t tx_sinc_osr2: 4; + uint32_t tx_prescale: 8; + uint32_t tx_hp_in_shift: 2; + uint32_t tx_lp_in_shift: 2; + uint32_t tx_sinc_in_shift: 2; + uint32_t tx_sigmadelta_in_shift: 2; + uint32_t rx_sinc_dsr_16_en: 1; + uint32_t txhp_bypass: 1; + uint32_t reserved26: 6; + }; + uint32_t val; + } pdm_conf; + union { + struct { + uint32_t tx_pdm_fs: 10; + uint32_t tx_pdm_fp: 10; + uint32_t reserved20:12; + }; + uint32_t val; + } pdm_freq_conf; + union { + struct { + uint32_t tx_idle: 1; + uint32_t tx_fifo_reset_back: 1; + uint32_t rx_fifo_reset_back: 1; + uint32_t reserved3: 29; + }; + uint32_t val; + } state; + uint32_t reserved_c0; + uint32_t reserved_c4; + uint32_t reserved_c8; + uint32_t reserved_cc; + uint32_t reserved_d0; + uint32_t reserved_d4; + uint32_t reserved_d8; + uint32_t reserved_dc; + uint32_t reserved_e0; + uint32_t reserved_e4; + uint32_t reserved_e8; + uint32_t reserved_ec; + uint32_t reserved_f0; + uint32_t reserved_f4; + uint32_t reserved_f8; + uint32_t date; /**/ +} i2s_dev_t; +extern i2s_dev_t I2S0; +extern i2s_dev_t I2S1; + +#endif /* _SOC_I2S_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/io_mux_reg.h b/tools/sdk/include/esp32/soc/io_mux_reg.h new file mode 100644 index 00000000..208a6070 --- /dev/null +++ b/tools/sdk/include/esp32/soc/io_mux_reg.h @@ -0,0 +1,267 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_IO_MUX_REG_H_ +#define _SOC_IO_MUX_REG_H_ + +#include "soc.h" + +#define SLP_OE (BIT(0)) +#define SLP_SEL (BIT(1)) +#define SLP_PD (BIT(2)) +#define SLP_PU (BIT(3)) +#define SLP_IE (BIT(4)) +#define SLP_DRV 0x3 +#define SLP_DRV_S 5 +#define FUN_PD (BIT(7)) +#define FUN_PU (BIT(8)) +#define FUN_IE (BIT(9)) +#define FUN_DRV 0x3 +#define FUN_DRV_S 10 +#define MCU_SEL 0x7 +#define MCU_SEL_S 12 + +#define PIN_INPUT_ENABLE(PIN_NAME) SET_PERI_REG_MASK(PIN_NAME,FUN_IE) +#define PIN_INPUT_DISABLE(PIN_NAME) CLEAR_PERI_REG_MASK(PIN_NAME,FUN_IE) +#define PIN_SET_DRV(PIN_NAME, drv) REG_SET_FIELD(PIN_NAME, FUN_DRV, (drv)); +#define PIN_PULLUP_DIS(PIN_NAME) REG_CLR_BIT(PIN_NAME, FUN_PU) +#define PIN_PULLUP_EN(PIN_NAME) REG_SET_BIT(PIN_NAME, FUN_PU) +#define PIN_PULLDWN_DIS(PIN_NAME) REG_CLR_BIT(PIN_NAME, FUN_PD) +#define PIN_PULLDWN_EN(PIN_NAME) REG_SET_BIT(PIN_NAME, FUN_PD) +#define PIN_FUNC_SELECT(PIN_NAME, FUNC) REG_SET_FIELD(PIN_NAME, MCU_SEL, FUNC) + +#define PIN_FUNC_GPIO 2 + +#define PIN_CTRL (DR_REG_IO_MUX_BASE +0x00) +#define CLK_OUT3 0xf +#define CLK_OUT3_S 8 +#define CLK_OUT2 0xf +#define CLK_OUT2_S 4 +#define CLK_OUT1 0xf +#define CLK_OUT1_S 0 + +#define PERIPHS_IO_MUX_GPIO0_U (DR_REG_IO_MUX_BASE +0x44) +#define FUNC_GPIO0_EMAC_TX_CLK 5 +#define FUNC_GPIO0_GPIO0 2 +#define FUNC_GPIO0_CLK_OUT1 1 +#define FUNC_GPIO0_GPIO0_0 0 + +#define PERIPHS_IO_MUX_U0TXD_U (DR_REG_IO_MUX_BASE +0x88) +#define FUNC_U0TXD_EMAC_RXD2 3 +#define FUNC_U0TXD_GPIO1 2 +#define FUNC_U0TXD_CLK_OUT3 1 +#define FUNC_U0TXD_U0TXD 0 + +#define PERIPHS_IO_MUX_GPIO2_U (DR_REG_IO_MUX_BASE +0x40) +#define FUNC_GPIO2_SD_DATA0 4 +#define FUNC_GPIO2_HS2_DATA0 3 +#define FUNC_GPIO2_GPIO2 2 +#define FUNC_GPIO2_HSPIWP 1 +#define FUNC_GPIO2_GPIO2_0 0 + +#define PERIPHS_IO_MUX_U0RXD_U (DR_REG_IO_MUX_BASE +0x84) +#define FUNC_U0RXD_GPIO3 2 +#define FUNC_U0RXD_CLK_OUT2 1 +#define FUNC_U0RXD_U0RXD 0 + +#define PERIPHS_IO_MUX_GPIO4_U (DR_REG_IO_MUX_BASE +0x48) +#define FUNC_GPIO4_EMAC_TX_ER 5 +#define FUNC_GPIO4_SD_DATA1 4 +#define FUNC_GPIO4_HS2_DATA1 3 +#define FUNC_GPIO4_GPIO4 2 +#define FUNC_GPIO4_HSPIHD 1 +#define FUNC_GPIO4_GPIO4_0 0 + +#define PERIPHS_IO_MUX_GPIO5_U (DR_REG_IO_MUX_BASE +0x6c) +#define FUNC_GPIO5_EMAC_RX_CLK 5 +#define FUNC_GPIO5_HS1_DATA6 3 +#define FUNC_GPIO5_GPIO5 2 +#define FUNC_GPIO5_VSPICS0 1 +#define FUNC_GPIO5_GPIO5_0 0 + +#define PERIPHS_IO_MUX_SD_CLK_U (DR_REG_IO_MUX_BASE +0x60) +#define FUNC_SD_CLK_U1CTS 4 +#define FUNC_SD_CLK_HS1_CLK 3 +#define FUNC_SD_CLK_GPIO6 2 +#define FUNC_SD_CLK_SPICLK 1 +#define FUNC_SD_CLK_SD_CLK 0 + +#define PERIPHS_IO_MUX_SD_DATA0_U (DR_REG_IO_MUX_BASE +0x64) +#define FUNC_SD_DATA0_U2RTS 4 +#define FUNC_SD_DATA0_HS1_DATA0 3 +#define FUNC_SD_DATA0_GPIO7 2 +#define FUNC_SD_DATA0_SPIQ 1 +#define FUNC_SD_DATA0_SD_DATA0 0 + +#define PERIPHS_IO_MUX_SD_DATA1_U (DR_REG_IO_MUX_BASE +0x68) +#define FUNC_SD_DATA1_U2CTS 4 +#define FUNC_SD_DATA1_HS1_DATA1 3 +#define FUNC_SD_DATA1_GPIO8 2 +#define FUNC_SD_DATA1_SPID 1 +#define FUNC_SD_DATA1_SD_DATA1 0 + +#define PERIPHS_IO_MUX_SD_DATA2_U (DR_REG_IO_MUX_BASE +0x54) +#define FUNC_SD_DATA2_U1RXD 4 +#define FUNC_SD_DATA2_HS1_DATA2 3 +#define FUNC_SD_DATA2_GPIO9 2 +#define FUNC_SD_DATA2_SPIHD 1 +#define FUNC_SD_DATA2_SD_DATA2 0 + +#define PERIPHS_IO_MUX_SD_DATA3_U (DR_REG_IO_MUX_BASE +0x58) +#define FUNC_SD_DATA3_U1TXD 4 +#define FUNC_SD_DATA3_HS1_DATA3 3 +#define FUNC_SD_DATA3_GPIO10 2 +#define FUNC_SD_DATA3_SPIWP 1 +#define FUNC_SD_DATA3_SD_DATA3 0 + +#define PERIPHS_IO_MUX_SD_CMD_U (DR_REG_IO_MUX_BASE +0x5c) +#define FUNC_SD_CMD_U1RTS 4 +#define FUNC_SD_CMD_HS1_CMD 3 +#define FUNC_SD_CMD_GPIO11 2 +#define FUNC_SD_CMD_SPICS0 1 +#define FUNC_SD_CMD_SD_CMD 0 + +#define PERIPHS_IO_MUX_MTDI_U (DR_REG_IO_MUX_BASE +0x34) +#define FUNC_MTDI_EMAC_TXD3 5 +#define FUNC_MTDI_SD_DATA2 4 +#define FUNC_MTDI_HS2_DATA2 3 +#define FUNC_MTDI_GPIO12 2 +#define FUNC_MTDI_HSPIQ 1 +#define FUNC_MTDI_MTDI 0 + +#define PERIPHS_IO_MUX_MTCK_U (DR_REG_IO_MUX_BASE +0x38) +#define FUNC_MTCK_EMAC_RX_ER 5 +#define FUNC_MTCK_SD_DATA3 4 +#define FUNC_MTCK_HS2_DATA3 3 +#define FUNC_MTCK_GPIO13 2 +#define FUNC_MTCK_HSPID 1 +#define FUNC_MTCK_MTCK 0 + +#define PERIPHS_IO_MUX_MTMS_U (DR_REG_IO_MUX_BASE +0x30) +#define FUNC_MTMS_EMAC_TXD2 5 +#define FUNC_MTMS_SD_CLK 4 +#define FUNC_MTMS_HS2_CLk 3 +#define FUNC_MTMS_GPIO14 2 +#define FUNC_MTMS_HSPICLK 1 +#define FUNC_MTMS_MTMS 0 + +#define PERIPHS_IO_MUX_MTDO_U (DR_REG_IO_MUX_BASE +0x3c) +#define FUNC_MTDO_EMAC_RXD3 5 +#define FUNC_MTDO_SD_CMD 4 +#define FUNC_MTDO_HS2_CMD 3 +#define FUNC_MTDO_GPIO15 2 +#define FUNC_MTDO_HSPICS0 1 +#define FUNC_MTDO_MTDO 0 + +#define PERIPHS_IO_MUX_GPIO16_U (DR_REG_IO_MUX_BASE +0x4c) +#define FUNC_GPIO16_EMAC_CLK_OUT 5 +#define FUNC_GPIO16_U2RXD 4 +#define FUNC_GPIO16_HS1_DATA4 3 +#define FUNC_GPIO16_GPIO16 2 +#define FUNC_GPIO16_GPIO16_0 0 + +#define PERIPHS_IO_MUX_GPIO17_U (DR_REG_IO_MUX_BASE +0x50) +#define FUNC_GPIO17_EMAC_CLK_OUT_180 5 +#define FUNC_GPIO17_U2TXD 4 +#define FUNC_GPIO17_HS1_DATA5 3 +#define FUNC_GPIO17_GPIO17 2 +#define FUNC_GPIO17_GPIO17_0 0 + +#define PERIPHS_IO_MUX_GPIO18_U (DR_REG_IO_MUX_BASE +0x70) +#define FUNC_GPIO18_HS1_DATA7 3 +#define FUNC_GPIO18_GPIO18 2 +#define FUNC_GPIO18_VSPICLK 1 +#define FUNC_GPIO18_GPIO18_0 0 + +#define PERIPHS_IO_MUX_GPIO19_U (DR_REG_IO_MUX_BASE +0x74) +#define FUNC_GPIO19_EMAC_TXD0 5 +#define FUNC_GPIO19_U0CTS 3 +#define FUNC_GPIO19_GPIO19 2 +#define FUNC_GPIO19_VSPIQ 1 +#define FUNC_GPIO19_GPIO19_0 0 + +#define PERIPHS_IO_MUX_GPIO20_U (DR_REG_IO_MUX_BASE +0x78) +#define FUNC_GPIO20_GPIO20 2 +#define FUNC_GPIO20_GPIO20_0 0 + +#define PERIPHS_IO_MUX_GPIO21_U (DR_REG_IO_MUX_BASE +0x7c) +#define FUNC_GPIO21_EMAC_TX_EN 5 +#define FUNC_GPIO21_GPIO21 2 +#define FUNC_GPIO21_VSPIHD 1 +#define FUNC_GPIO21_GPIO21_0 0 + +#define PERIPHS_IO_MUX_GPIO22_U (DR_REG_IO_MUX_BASE +0x80) +#define FUNC_GPIO22_EMAC_TXD1 5 +#define FUNC_GPIO22_U0RTS 3 +#define FUNC_GPIO22_GPIO22 2 +#define FUNC_GPIO22_VSPIWP 1 +#define FUNC_GPIO22_GPIO22_0 0 + +#define PERIPHS_IO_MUX_GPIO23_U (DR_REG_IO_MUX_BASE +0x8c) +#define FUNC_GPIO23_HS1_STROBE 3 +#define FUNC_GPIO23_GPIO23 2 +#define FUNC_GPIO23_VSPID 1 +#define FUNC_GPIO23_GPIO23_0 0 + +#define PERIPHS_IO_MUX_GPIO24_U (DR_REG_IO_MUX_BASE +0x90) +#define FUNC_GPIO24_GPIO24 2 +#define FUNC_GPIO24_GPIO24_0 0 + +#define PERIPHS_IO_MUX_GPIO25_U (DR_REG_IO_MUX_BASE +0x24) +#define FUNC_GPIO25_EMAC_RXD0 5 +#define FUNC_GPIO25_GPIO25 2 +#define FUNC_GPIO25_GPIO25_0 0 + +#define PERIPHS_IO_MUX_GPIO26_U (DR_REG_IO_MUX_BASE +0x28) +#define FUNC_GPIO26_EMAC_RXD1 5 +#define FUNC_GPIO26_GPIO26 2 +#define FUNC_GPIO26_GPIO26_0 0 + +#define PERIPHS_IO_MUX_GPIO27_U (DR_REG_IO_MUX_BASE +0x2c) +#define FUNC_GPIO27_EMAC_RX_DV 5 +#define FUNC_GPIO27_GPIO27 2 +#define FUNC_GPIO27_GPIO27_0 0 + +#define PERIPHS_IO_MUX_GPIO32_U (DR_REG_IO_MUX_BASE +0x1c) +#define FUNC_GPIO32_GPIO32 2 +#define FUNC_GPIO32_GPIO32_0 0 + +#define PERIPHS_IO_MUX_GPIO33_U (DR_REG_IO_MUX_BASE +0x20) +#define FUNC_GPIO33_GPIO33 2 +#define FUNC_GPIO33_GPIO33_0 0 + +#define PERIPHS_IO_MUX_GPIO34_U (DR_REG_IO_MUX_BASE +0x14) +#define FUNC_GPIO34_GPIO34 2 +#define FUNC_GPIO34_GPIO34_0 0 + +#define PERIPHS_IO_MUX_GPIO35_U (DR_REG_IO_MUX_BASE +0x18) +#define FUNC_GPIO35_GPIO35 2 +#define FUNC_GPIO35_GPIO35_0 0 + +#define PERIPHS_IO_MUX_GPIO36_U (DR_REG_IO_MUX_BASE +0x04) +#define FUNC_GPIO36_GPIO36 2 +#define FUNC_GPIO36_GPIO36_0 0 + +#define PERIPHS_IO_MUX_GPIO37_U (DR_REG_IO_MUX_BASE +0x08) +#define FUNC_GPIO37_GPIO37 2 +#define FUNC_GPIO37_GPIO37_0 0 + +#define PERIPHS_IO_MUX_GPIO38_U (DR_REG_IO_MUX_BASE +0x0c) +#define FUNC_GPIO38_GPIO38 2 +#define FUNC_GPIO38_GPIO38_0 0 + +#define PERIPHS_IO_MUX_GPIO39_U (DR_REG_IO_MUX_BASE +0x10) +#define FUNC_GPIO39_GPIO39 2 +#define FUNC_GPIO39_GPIO39_0 0 + +#endif /* _SOC_IO_MUX_REG_H_ */ diff --git a/tools/sdk/include/esp32/soc/ledc_reg.h b/tools/sdk/include/esp32/soc/ledc_reg.h new file mode 100644 index 00000000..1137e3da --- /dev/null +++ b/tools/sdk/include/esp32/soc/ledc_reg.h @@ -0,0 +1,2423 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_LEDC_REG_H_ +#define _SOC_LEDC_REG_H_ + + +#include "soc.h" +#define LEDC_HSCH0_CONF0_REG (DR_REG_LEDC_BASE + 0x0000) +/* LEDC_CLK_EN : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: This bit is clock gating control signal. when software config + LED_PWM internal registers it controls the register clock.*/ +#define LEDC_CLK_EN (BIT(31)) +#define LEDC_CLK_EN_M (BIT(31)) +#define LEDC_CLK_EN_V 0x1 +#define LEDC_CLK_EN_S 31 +/* LEDC_IDLE_LV_HSCH0 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when high speed channel0 is off.*/ +#define LEDC_IDLE_LV_HSCH0 (BIT(3)) +#define LEDC_IDLE_LV_HSCH0_M (BIT(3)) +#define LEDC_IDLE_LV_HSCH0_V 0x1 +#define LEDC_IDLE_LV_HSCH0_S 3 +/* LEDC_SIG_OUT_EN_HSCH0 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for high speed channel0*/ +#define LEDC_SIG_OUT_EN_HSCH0 (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH0_M (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH0_V 0x1 +#define LEDC_SIG_OUT_EN_HSCH0_S 2 +/* LEDC_TIMER_SEL_HSCH0 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four high speed timers the two bits are used to select + one of them for high speed channel0. 2'b00: seletc hstimer0. 2'b01: select hstimer1. 2'b10: select hstimer2. 2'b11: select hstimer3.*/ +#define LEDC_TIMER_SEL_HSCH0 0x00000003 +#define LEDC_TIMER_SEL_HSCH0_M ((LEDC_TIMER_SEL_HSCH0_V)<<(LEDC_TIMER_SEL_HSCH0_S)) +#define LEDC_TIMER_SEL_HSCH0_V 0x3 +#define LEDC_TIMER_SEL_HSCH0_S 0 + +#define LEDC_HSCH0_HPOINT_REG (DR_REG_LEDC_BASE + 0x0004) +/* LEDC_HPOINT_HSCH0 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when htimerx(x=[0 3]) selected + by high speed channel0 has reached reg_hpoint_hsch0[19:0]*/ +#define LEDC_HPOINT_HSCH0 0x000FFFFF +#define LEDC_HPOINT_HSCH0_M ((LEDC_HPOINT_HSCH0_V)<<(LEDC_HPOINT_HSCH0_S)) +#define LEDC_HPOINT_HSCH0_V 0xFFFFF +#define LEDC_HPOINT_HSCH0_S 0 + +#define LEDC_HSCH0_DUTY_REG (DR_REG_LEDC_BASE + 0x0008) +/* LEDC_DUTY_HSCH0 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When hstimerx(x=[0 + 3]) choosed by high speed channel0 has reached reg_lpoint_hsch0 the output signal changes to low. reg_lpoint_hsch0=(reg_hpoint_hsch0[19:0]+reg_duty_hsch0[24:4]) (1) reg_lpoint_hsch0=(reg_hpoint_hsch0[19:0]+reg_duty_hsch0[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_HSCH0 0x01FFFFFF +#define LEDC_DUTY_HSCH0_M ((LEDC_DUTY_HSCH0_V)<<(LEDC_DUTY_HSCH0_S)) +#define LEDC_DUTY_HSCH0_V 0x1FFFFFF +#define LEDC_DUTY_HSCH0_S 0 + +#define LEDC_HSCH0_CONF1_REG (DR_REG_LEDC_BASE + 0x000C) +/* LEDC_DUTY_START_HSCH0 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch0 reg_duty_cycle_hsch0 and reg_duty_scale_hsch0 + has been configured. these register won't take effect until set reg_duty_start_hsch0. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_HSCH0 (BIT(31)) +#define LEDC_DUTY_START_HSCH0_M (BIT(31)) +#define LEDC_DUTY_START_HSCH0_V 0x1 +#define LEDC_DUTY_START_HSCH0_S 31 +/* LEDC_DUTY_INC_HSCH0 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for high speed channel0.*/ +#define LEDC_DUTY_INC_HSCH0 (BIT(30)) +#define LEDC_DUTY_INC_HSCH0_M (BIT(30)) +#define LEDC_DUTY_INC_HSCH0_V 0x1 +#define LEDC_DUTY_INC_HSCH0_S 30 +/* LEDC_DUTY_NUM_HSCH0 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for high speed channel0.*/ +#define LEDC_DUTY_NUM_HSCH0 0x000003FF +#define LEDC_DUTY_NUM_HSCH0_M ((LEDC_DUTY_NUM_HSCH0_V)<<(LEDC_DUTY_NUM_HSCH0_S)) +#define LEDC_DUTY_NUM_HSCH0_V 0x3FF +#define LEDC_DUTY_NUM_HSCH0_S 20 +/* LEDC_DUTY_CYCLE_HSCH0 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_hsch0 cycles for high speed channel0.*/ +#define LEDC_DUTY_CYCLE_HSCH0 0x000003FF +#define LEDC_DUTY_CYCLE_HSCH0_M ((LEDC_DUTY_CYCLE_HSCH0_V)<<(LEDC_DUTY_CYCLE_HSCH0_S)) +#define LEDC_DUTY_CYCLE_HSCH0_V 0x3FF +#define LEDC_DUTY_CYCLE_HSCH0_S 10 +/* LEDC_DUTY_SCALE_HSCH0 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + high speed channel0.*/ +#define LEDC_DUTY_SCALE_HSCH0 0x000003FF +#define LEDC_DUTY_SCALE_HSCH0_M ((LEDC_DUTY_SCALE_HSCH0_V)<<(LEDC_DUTY_SCALE_HSCH0_S)) +#define LEDC_DUTY_SCALE_HSCH0_V 0x3FF +#define LEDC_DUTY_SCALE_HSCH0_S 0 + +#define LEDC_HSCH0_DUTY_R_REG (DR_REG_LEDC_BASE + 0x0010) +/* LEDC_DUTY_HSCH0 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for high speed channel0.*/ +#define LEDC_DUTY_HSCH0 0x01FFFFFF +#define LEDC_DUTY_HSCH0_M ((LEDC_DUTY_HSCH0_V)<<(LEDC_DUTY_HSCH0_S)) +#define LEDC_DUTY_HSCH0_V 0x1FFFFFF +#define LEDC_DUTY_HSCH0_S 0 + +#define LEDC_HSCH1_CONF0_REG (DR_REG_LEDC_BASE + 0x0014) +/* LEDC_IDLE_LV_HSCH1 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when high speed channel1 is off.*/ +#define LEDC_IDLE_LV_HSCH1 (BIT(3)) +#define LEDC_IDLE_LV_HSCH1_M (BIT(3)) +#define LEDC_IDLE_LV_HSCH1_V 0x1 +#define LEDC_IDLE_LV_HSCH1_S 3 +/* LEDC_SIG_OUT_EN_HSCH1 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for high speed channel1*/ +#define LEDC_SIG_OUT_EN_HSCH1 (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH1_M (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH1_V 0x1 +#define LEDC_SIG_OUT_EN_HSCH1_S 2 +/* LEDC_TIMER_SEL_HSCH1 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four high speed timers the two bits are used to select + one of them for high speed channel1. 2'b00: seletc hstimer0. 2'b01: select hstimer1. 2'b10: select hstimer2. 2'b11: select hstimer3.*/ +#define LEDC_TIMER_SEL_HSCH1 0x00000003 +#define LEDC_TIMER_SEL_HSCH1_M ((LEDC_TIMER_SEL_HSCH1_V)<<(LEDC_TIMER_SEL_HSCH1_S)) +#define LEDC_TIMER_SEL_HSCH1_V 0x3 +#define LEDC_TIMER_SEL_HSCH1_S 0 + +#define LEDC_HSCH1_HPOINT_REG (DR_REG_LEDC_BASE + 0x0018) +/* LEDC_HPOINT_HSCH1 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when htimerx(x=[0 3]) selected + by high speed channel1 has reached reg_hpoint_hsch1[19:0]*/ +#define LEDC_HPOINT_HSCH1 0x000FFFFF +#define LEDC_HPOINT_HSCH1_M ((LEDC_HPOINT_HSCH1_V)<<(LEDC_HPOINT_HSCH1_S)) +#define LEDC_HPOINT_HSCH1_V 0xFFFFF +#define LEDC_HPOINT_HSCH1_S 0 + +#define LEDC_HSCH1_DUTY_REG (DR_REG_LEDC_BASE + 0x001C) +/* LEDC_DUTY_HSCH1 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When hstimerx(x=[0 + 3]) choosed by high speed channel1 has reached reg_lpoint_hsch1 the output signal changes to low. reg_lpoint_hsch1=(reg_hpoint_hsch1[19:0]+reg_duty_hsch1[24:4]) (1) reg_lpoint_hsch1=(reg_hpoint_hsch1[19:0]+reg_duty_hsch1[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_HSCH1 0x01FFFFFF +#define LEDC_DUTY_HSCH1_M ((LEDC_DUTY_HSCH1_V)<<(LEDC_DUTY_HSCH1_S)) +#define LEDC_DUTY_HSCH1_V 0x1FFFFFF +#define LEDC_DUTY_HSCH1_S 0 + +#define LEDC_HSCH1_CONF1_REG (DR_REG_LEDC_BASE + 0x0020) +/* LEDC_DUTY_START_HSCH1 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch1 reg_duty_cycle_hsch1 and reg_duty_scale_hsch1 + has been configured. these register won't take effect until set reg_duty_start_hsch1. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_HSCH1 (BIT(31)) +#define LEDC_DUTY_START_HSCH1_M (BIT(31)) +#define LEDC_DUTY_START_HSCH1_V 0x1 +#define LEDC_DUTY_START_HSCH1_S 31 +/* LEDC_DUTY_INC_HSCH1 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for high speed channel1.*/ +#define LEDC_DUTY_INC_HSCH1 (BIT(30)) +#define LEDC_DUTY_INC_HSCH1_M (BIT(30)) +#define LEDC_DUTY_INC_HSCH1_V 0x1 +#define LEDC_DUTY_INC_HSCH1_S 30 +/* LEDC_DUTY_NUM_HSCH1 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for high speed channel1.*/ +#define LEDC_DUTY_NUM_HSCH1 0x000003FF +#define LEDC_DUTY_NUM_HSCH1_M ((LEDC_DUTY_NUM_HSCH1_V)<<(LEDC_DUTY_NUM_HSCH1_S)) +#define LEDC_DUTY_NUM_HSCH1_V 0x3FF +#define LEDC_DUTY_NUM_HSCH1_S 20 +/* LEDC_DUTY_CYCLE_HSCH1 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_hsch1 cycles for high speed channel1.*/ +#define LEDC_DUTY_CYCLE_HSCH1 0x000003FF +#define LEDC_DUTY_CYCLE_HSCH1_M ((LEDC_DUTY_CYCLE_HSCH1_V)<<(LEDC_DUTY_CYCLE_HSCH1_S)) +#define LEDC_DUTY_CYCLE_HSCH1_V 0x3FF +#define LEDC_DUTY_CYCLE_HSCH1_S 10 +/* LEDC_DUTY_SCALE_HSCH1 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + high speed channel1.*/ +#define LEDC_DUTY_SCALE_HSCH1 0x000003FF +#define LEDC_DUTY_SCALE_HSCH1_M ((LEDC_DUTY_SCALE_HSCH1_V)<<(LEDC_DUTY_SCALE_HSCH1_S)) +#define LEDC_DUTY_SCALE_HSCH1_V 0x3FF +#define LEDC_DUTY_SCALE_HSCH1_S 0 + +#define LEDC_HSCH1_DUTY_R_REG (DR_REG_LEDC_BASE + 0x0024) +/* LEDC_DUTY_HSCH1 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for high speed channel1.*/ +#define LEDC_DUTY_HSCH1 0x01FFFFFF +#define LEDC_DUTY_HSCH1_M ((LEDC_DUTY_HSCH1_V)<<(LEDC_DUTY_HSCH1_S)) +#define LEDC_DUTY_HSCH1_V 0x1FFFFFF +#define LEDC_DUTY_HSCH1_S 0 + +#define LEDC_HSCH2_CONF0_REG (DR_REG_LEDC_BASE + 0x0028) +/* LEDC_IDLE_LV_HSCH2 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when high speed channel2 is off.*/ +#define LEDC_IDLE_LV_HSCH2 (BIT(3)) +#define LEDC_IDLE_LV_HSCH2_M (BIT(3)) +#define LEDC_IDLE_LV_HSCH2_V 0x1 +#define LEDC_IDLE_LV_HSCH2_S 3 +/* LEDC_SIG_OUT_EN_HSCH2 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for high speed channel2*/ +#define LEDC_SIG_OUT_EN_HSCH2 (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH2_M (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH2_V 0x1 +#define LEDC_SIG_OUT_EN_HSCH2_S 2 +/* LEDC_TIMER_SEL_HSCH2 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four high speed timers the two bits are used to select + one of them for high speed channel2. 2'b00: seletc hstimer0. 2'b01: select hstimer1. 2'b10: select hstimer2. 2'b11: select hstimer3.*/ +#define LEDC_TIMER_SEL_HSCH2 0x00000003 +#define LEDC_TIMER_SEL_HSCH2_M ((LEDC_TIMER_SEL_HSCH2_V)<<(LEDC_TIMER_SEL_HSCH2_S)) +#define LEDC_TIMER_SEL_HSCH2_V 0x3 +#define LEDC_TIMER_SEL_HSCH2_S 0 + +#define LEDC_HSCH2_HPOINT_REG (DR_REG_LEDC_BASE + 0x002C) +/* LEDC_HPOINT_HSCH2 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when htimerx(x=[0 3]) selected + by high speed channel2 has reached reg_hpoint_hsch2[19:0]*/ +#define LEDC_HPOINT_HSCH2 0x000FFFFF +#define LEDC_HPOINT_HSCH2_M ((LEDC_HPOINT_HSCH2_V)<<(LEDC_HPOINT_HSCH2_S)) +#define LEDC_HPOINT_HSCH2_V 0xFFFFF +#define LEDC_HPOINT_HSCH2_S 0 + +#define LEDC_HSCH2_DUTY_REG (DR_REG_LEDC_BASE + 0x0030) +/* LEDC_DUTY_HSCH2 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When hstimerx(x=[0 + 3]) choosed by high speed channel2 has reached reg_lpoint_hsch2 the output signal changes to low. reg_lpoint_hsch2=(reg_hpoint_hsch2[19:0]+reg_duty_hsch2[24:4]) (1) reg_lpoint_hsch2=(reg_hpoint_hsch2[19:0]+reg_duty_hsch2[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_HSCH2 0x01FFFFFF +#define LEDC_DUTY_HSCH2_M ((LEDC_DUTY_HSCH2_V)<<(LEDC_DUTY_HSCH2_S)) +#define LEDC_DUTY_HSCH2_V 0x1FFFFFF +#define LEDC_DUTY_HSCH2_S 0 + +#define LEDC_HSCH2_CONF1_REG (DR_REG_LEDC_BASE + 0x0034) +/* LEDC_DUTY_START_HSCH2 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch2 reg_duty_cycle_hsch2 and reg_duty_scale_hsch2 + has been configured. these register won't take effect until set reg_duty_start_hsch2. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_HSCH2 (BIT(31)) +#define LEDC_DUTY_START_HSCH2_M (BIT(31)) +#define LEDC_DUTY_START_HSCH2_V 0x1 +#define LEDC_DUTY_START_HSCH2_S 31 +/* LEDC_DUTY_INC_HSCH2 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for high speed channel2.*/ +#define LEDC_DUTY_INC_HSCH2 (BIT(30)) +#define LEDC_DUTY_INC_HSCH2_M (BIT(30)) +#define LEDC_DUTY_INC_HSCH2_V 0x1 +#define LEDC_DUTY_INC_HSCH2_S 30 +/* LEDC_DUTY_NUM_HSCH2 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for high speed channel2.*/ +#define LEDC_DUTY_NUM_HSCH2 0x000003FF +#define LEDC_DUTY_NUM_HSCH2_M ((LEDC_DUTY_NUM_HSCH2_V)<<(LEDC_DUTY_NUM_HSCH2_S)) +#define LEDC_DUTY_NUM_HSCH2_V 0x3FF +#define LEDC_DUTY_NUM_HSCH2_S 20 +/* LEDC_DUTY_CYCLE_HSCH2 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_hsch2 cycles for high speed channel2.*/ +#define LEDC_DUTY_CYCLE_HSCH2 0x000003FF +#define LEDC_DUTY_CYCLE_HSCH2_M ((LEDC_DUTY_CYCLE_HSCH2_V)<<(LEDC_DUTY_CYCLE_HSCH2_S)) +#define LEDC_DUTY_CYCLE_HSCH2_V 0x3FF +#define LEDC_DUTY_CYCLE_HSCH2_S 10 +/* LEDC_DUTY_SCALE_HSCH2 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + high speed channel2.*/ +#define LEDC_DUTY_SCALE_HSCH2 0x000003FF +#define LEDC_DUTY_SCALE_HSCH2_M ((LEDC_DUTY_SCALE_HSCH2_V)<<(LEDC_DUTY_SCALE_HSCH2_S)) +#define LEDC_DUTY_SCALE_HSCH2_V 0x3FF +#define LEDC_DUTY_SCALE_HSCH2_S 0 + +#define LEDC_HSCH2_DUTY_R_REG (DR_REG_LEDC_BASE + 0x0038) +/* LEDC_DUTY_HSCH2 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for high speed channel2.*/ +#define LEDC_DUTY_HSCH2 0x01FFFFFF +#define LEDC_DUTY_HSCH2_M ((LEDC_DUTY_HSCH2_V)<<(LEDC_DUTY_HSCH2_S)) +#define LEDC_DUTY_HSCH2_V 0x1FFFFFF +#define LEDC_DUTY_HSCH2_S 0 + +#define LEDC_HSCH3_CONF0_REG (DR_REG_LEDC_BASE + 0x003C) +/* LEDC_IDLE_LV_HSCH3 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when high speed channel3 is off.*/ +#define LEDC_IDLE_LV_HSCH3 (BIT(3)) +#define LEDC_IDLE_LV_HSCH3_M (BIT(3)) +#define LEDC_IDLE_LV_HSCH3_V 0x1 +#define LEDC_IDLE_LV_HSCH3_S 3 +/* LEDC_SIG_OUT_EN_HSCH3 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for high speed channel3*/ +#define LEDC_SIG_OUT_EN_HSCH3 (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH3_M (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH3_V 0x1 +#define LEDC_SIG_OUT_EN_HSCH3_S 2 +/* LEDC_TIMER_SEL_HSCH3 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four high speed timers the two bits are used to select + one of them for high speed channel3. 2'b00: seletc hstimer0. 2'b01: select hstimer1. 2'b10: select hstimer2. 2'b11: select hstimer3.*/ +#define LEDC_TIMER_SEL_HSCH3 0x00000003 +#define LEDC_TIMER_SEL_HSCH3_M ((LEDC_TIMER_SEL_HSCH3_V)<<(LEDC_TIMER_SEL_HSCH3_S)) +#define LEDC_TIMER_SEL_HSCH3_V 0x3 +#define LEDC_TIMER_SEL_HSCH3_S 0 + +#define LEDC_HSCH3_HPOINT_REG (DR_REG_LEDC_BASE + 0x0040) +/* LEDC_HPOINT_HSCH3 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when htimerx(x=[0 3]) selected + by high speed channel3 has reached reg_hpoint_hsch3[19:0]*/ +#define LEDC_HPOINT_HSCH3 0x000FFFFF +#define LEDC_HPOINT_HSCH3_M ((LEDC_HPOINT_HSCH3_V)<<(LEDC_HPOINT_HSCH3_S)) +#define LEDC_HPOINT_HSCH3_V 0xFFFFF +#define LEDC_HPOINT_HSCH3_S 0 + +#define LEDC_HSCH3_DUTY_REG (DR_REG_LEDC_BASE + 0x0044) +/* LEDC_DUTY_HSCH3 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When hstimerx(x=[0 + 3]) choosed by high speed channel3 has reached reg_lpoint_hsch3 the output signal changes to low. reg_lpoint_hsch3=(reg_hpoint_hsch3[19:0]+reg_duty_hsch3[24:4]) (1) reg_lpoint_hsch3=(reg_hpoint_hsch3[19:0]+reg_duty_hsch3[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_HSCH3 0x01FFFFFF +#define LEDC_DUTY_HSCH3_M ((LEDC_DUTY_HSCH3_V)<<(LEDC_DUTY_HSCH3_S)) +#define LEDC_DUTY_HSCH3_V 0x1FFFFFF +#define LEDC_DUTY_HSCH3_S 0 + +#define LEDC_HSCH3_CONF1_REG (DR_REG_LEDC_BASE + 0x0048) +/* LEDC_DUTY_START_HSCH3 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch3 reg_duty_cycle_hsch3 and reg_duty_scale_hsch3 + has been configured. these register won't take effect until set reg_duty_start_hsch3. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_HSCH3 (BIT(31)) +#define LEDC_DUTY_START_HSCH3_M (BIT(31)) +#define LEDC_DUTY_START_HSCH3_V 0x1 +#define LEDC_DUTY_START_HSCH3_S 31 +/* LEDC_DUTY_INC_HSCH3 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for high speed channel3.*/ +#define LEDC_DUTY_INC_HSCH3 (BIT(30)) +#define LEDC_DUTY_INC_HSCH3_M (BIT(30)) +#define LEDC_DUTY_INC_HSCH3_V 0x1 +#define LEDC_DUTY_INC_HSCH3_S 30 +/* LEDC_DUTY_NUM_HSCH3 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for high speed channel3.*/ +#define LEDC_DUTY_NUM_HSCH3 0x000003FF +#define LEDC_DUTY_NUM_HSCH3_M ((LEDC_DUTY_NUM_HSCH3_V)<<(LEDC_DUTY_NUM_HSCH3_S)) +#define LEDC_DUTY_NUM_HSCH3_V 0x3FF +#define LEDC_DUTY_NUM_HSCH3_S 20 +/* LEDC_DUTY_CYCLE_HSCH3 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_hsch3 cycles for high speed channel3.*/ +#define LEDC_DUTY_CYCLE_HSCH3 0x000003FF +#define LEDC_DUTY_CYCLE_HSCH3_M ((LEDC_DUTY_CYCLE_HSCH3_V)<<(LEDC_DUTY_CYCLE_HSCH3_S)) +#define LEDC_DUTY_CYCLE_HSCH3_V 0x3FF +#define LEDC_DUTY_CYCLE_HSCH3_S 10 +/* LEDC_DUTY_SCALE_HSCH3 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + high speed channel3.*/ +#define LEDC_DUTY_SCALE_HSCH3 0x000003FF +#define LEDC_DUTY_SCALE_HSCH3_M ((LEDC_DUTY_SCALE_HSCH3_V)<<(LEDC_DUTY_SCALE_HSCH3_S)) +#define LEDC_DUTY_SCALE_HSCH3_V 0x3FF +#define LEDC_DUTY_SCALE_HSCH3_S 0 + +#define LEDC_HSCH3_DUTY_R_REG (DR_REG_LEDC_BASE + 0x004C) +/* LEDC_DUTY_HSCH3 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for high speed channel3.*/ +#define LEDC_DUTY_HSCH3 0x01FFFFFF +#define LEDC_DUTY_HSCH3_M ((LEDC_DUTY_HSCH3_V)<<(LEDC_DUTY_HSCH3_S)) +#define LEDC_DUTY_HSCH3_V 0x1FFFFFF +#define LEDC_DUTY_HSCH3_S 0 + +#define LEDC_HSCH4_CONF0_REG (DR_REG_LEDC_BASE + 0x0050) +/* LEDC_IDLE_LV_HSCH4 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when high speed channel4 is off.*/ +#define LEDC_IDLE_LV_HSCH4 (BIT(3)) +#define LEDC_IDLE_LV_HSCH4_M (BIT(3)) +#define LEDC_IDLE_LV_HSCH4_V 0x1 +#define LEDC_IDLE_LV_HSCH4_S 3 +/* LEDC_SIG_OUT_EN_HSCH4 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for high speed channel4*/ +#define LEDC_SIG_OUT_EN_HSCH4 (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH4_M (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH4_V 0x1 +#define LEDC_SIG_OUT_EN_HSCH4_S 2 +/* LEDC_TIMER_SEL_HSCH4 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four high speed timers the two bits are used to select + one of them for high speed channel4. 2'b00: seletc hstimer0. 2'b01: select hstimer1. 2'b10: select hstimer2. 2'b11: select hstimer3.*/ +#define LEDC_TIMER_SEL_HSCH4 0x00000003 +#define LEDC_TIMER_SEL_HSCH4_M ((LEDC_TIMER_SEL_HSCH4_V)<<(LEDC_TIMER_SEL_HSCH4_S)) +#define LEDC_TIMER_SEL_HSCH4_V 0x3 +#define LEDC_TIMER_SEL_HSCH4_S 0 + +#define LEDC_HSCH4_HPOINT_REG (DR_REG_LEDC_BASE + 0x0054) +/* LEDC_HPOINT_HSCH4 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when htimerx(x=[0 3]) selected + by high speed channel4 has reached reg_hpoint_hsch4[19:0]*/ +#define LEDC_HPOINT_HSCH4 0x000FFFFF +#define LEDC_HPOINT_HSCH4_M ((LEDC_HPOINT_HSCH4_V)<<(LEDC_HPOINT_HSCH4_S)) +#define LEDC_HPOINT_HSCH4_V 0xFFFFF +#define LEDC_HPOINT_HSCH4_S 0 + +#define LEDC_HSCH4_DUTY_REG (DR_REG_LEDC_BASE + 0x0058) +/* LEDC_DUTY_HSCH4 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When hstimerx(x=[0 + 3]) choosed by high speed channel4 has reached reg_lpoint_hsch4 the output signal changes to low. reg_lpoint_hsch4=(reg_hpoint_hsch4[19:0]+reg_duty_hsch4[24:4]) (1) reg_lpoint_hsch4=(reg_hpoint_hsch4[19:0]+reg_duty_hsch4[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_HSCH4 0x01FFFFFF +#define LEDC_DUTY_HSCH4_M ((LEDC_DUTY_HSCH4_V)<<(LEDC_DUTY_HSCH4_S)) +#define LEDC_DUTY_HSCH4_V 0x1FFFFFF +#define LEDC_DUTY_HSCH4_S 0 + +#define LEDC_HSCH4_CONF1_REG (DR_REG_LEDC_BASE + 0x005C) +/* LEDC_DUTY_START_HSCH4 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch1 reg_duty_cycle_hsch1 and reg_duty_scale_hsch1 + has been configured. these register won't take effect until set reg_duty_start_hsch1. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_HSCH4 (BIT(31)) +#define LEDC_DUTY_START_HSCH4_M (BIT(31)) +#define LEDC_DUTY_START_HSCH4_V 0x1 +#define LEDC_DUTY_START_HSCH4_S 31 +/* LEDC_DUTY_INC_HSCH4 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for high speed channel4.*/ +#define LEDC_DUTY_INC_HSCH4 (BIT(30)) +#define LEDC_DUTY_INC_HSCH4_M (BIT(30)) +#define LEDC_DUTY_INC_HSCH4_V 0x1 +#define LEDC_DUTY_INC_HSCH4_S 30 +/* LEDC_DUTY_NUM_HSCH4 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for high speed channel1.*/ +#define LEDC_DUTY_NUM_HSCH4 0x000003FF +#define LEDC_DUTY_NUM_HSCH4_M ((LEDC_DUTY_NUM_HSCH4_V)<<(LEDC_DUTY_NUM_HSCH4_S)) +#define LEDC_DUTY_NUM_HSCH4_V 0x3FF +#define LEDC_DUTY_NUM_HSCH4_S 20 +/* LEDC_DUTY_CYCLE_HSCH4 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_hsch4 cycles for high speed channel4.*/ +#define LEDC_DUTY_CYCLE_HSCH4 0x000003FF +#define LEDC_DUTY_CYCLE_HSCH4_M ((LEDC_DUTY_CYCLE_HSCH4_V)<<(LEDC_DUTY_CYCLE_HSCH4_S)) +#define LEDC_DUTY_CYCLE_HSCH4_V 0x3FF +#define LEDC_DUTY_CYCLE_HSCH4_S 10 +/* LEDC_DUTY_SCALE_HSCH4 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + high speed channel4.*/ +#define LEDC_DUTY_SCALE_HSCH4 0x000003FF +#define LEDC_DUTY_SCALE_HSCH4_M ((LEDC_DUTY_SCALE_HSCH4_V)<<(LEDC_DUTY_SCALE_HSCH4_S)) +#define LEDC_DUTY_SCALE_HSCH4_V 0x3FF +#define LEDC_DUTY_SCALE_HSCH4_S 0 + +#define LEDC_HSCH4_DUTY_R_REG (DR_REG_LEDC_BASE + 0x0060) +/* LEDC_DUTY_HSCH4 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for high speed channel4.*/ +#define LEDC_DUTY_HSCH4 0x01FFFFFF +#define LEDC_DUTY_HSCH4_M ((LEDC_DUTY_HSCH4_V)<<(LEDC_DUTY_HSCH4_S)) +#define LEDC_DUTY_HSCH4_V 0x1FFFFFF +#define LEDC_DUTY_HSCH4_S 0 + +#define LEDC_HSCH5_CONF0_REG (DR_REG_LEDC_BASE + 0x0064) +/* LEDC_IDLE_LV_HSCH5 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when high speed channel5 is off.*/ +#define LEDC_IDLE_LV_HSCH5 (BIT(3)) +#define LEDC_IDLE_LV_HSCH5_M (BIT(3)) +#define LEDC_IDLE_LV_HSCH5_V 0x1 +#define LEDC_IDLE_LV_HSCH5_S 3 +/* LEDC_SIG_OUT_EN_HSCH5 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for high speed channel5.*/ +#define LEDC_SIG_OUT_EN_HSCH5 (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH5_M (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH5_V 0x1 +#define LEDC_SIG_OUT_EN_HSCH5_S 2 +/* LEDC_TIMER_SEL_HSCH5 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four high speed timers the two bits are used to select + one of them for high speed channel5. 2'b00: seletc hstimer0. 2'b01: select hstimer1. 2'b10: select hstimer2. 2'b11: select hstimer3.*/ +#define LEDC_TIMER_SEL_HSCH5 0x00000003 +#define LEDC_TIMER_SEL_HSCH5_M ((LEDC_TIMER_SEL_HSCH5_V)<<(LEDC_TIMER_SEL_HSCH5_S)) +#define LEDC_TIMER_SEL_HSCH5_V 0x3 +#define LEDC_TIMER_SEL_HSCH5_S 0 + +#define LEDC_HSCH5_HPOINT_REG (DR_REG_LEDC_BASE + 0x0068) +/* LEDC_HPOINT_HSCH5 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when htimerx(x=[0 3]) selected + by high speed channel5 has reached reg_hpoint_hsch5[19:0]*/ +#define LEDC_HPOINT_HSCH5 0x000FFFFF +#define LEDC_HPOINT_HSCH5_M ((LEDC_HPOINT_HSCH5_V)<<(LEDC_HPOINT_HSCH5_S)) +#define LEDC_HPOINT_HSCH5_V 0xFFFFF +#define LEDC_HPOINT_HSCH5_S 0 + +#define LEDC_HSCH5_DUTY_REG (DR_REG_LEDC_BASE + 0x006C) +/* LEDC_DUTY_HSCH5 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When hstimerx(x=[0 + 3]) choosed by high speed channel5 has reached reg_lpoint_hsch5 the output signal changes to low. reg_lpoint_hsch5=(reg_hpoint_hsch5[19:0]+reg_duty_hsch5[24:4]) (1) reg_lpoint_hsch5=(reg_hpoint_hsch5[19:0]+reg_duty_hsch5[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_HSCH5 0x01FFFFFF +#define LEDC_DUTY_HSCH5_M ((LEDC_DUTY_HSCH5_V)<<(LEDC_DUTY_HSCH5_S)) +#define LEDC_DUTY_HSCH5_V 0x1FFFFFF +#define LEDC_DUTY_HSCH5_S 0 + +#define LEDC_HSCH5_CONF1_REG (DR_REG_LEDC_BASE + 0x0070) +/* LEDC_DUTY_START_HSCH5 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch5 reg_duty_cycle_hsch5 and reg_duty_scale_hsch5 + has been configured. these register won't take effect until set reg_duty_start_hsch5. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_HSCH5 (BIT(31)) +#define LEDC_DUTY_START_HSCH5_M (BIT(31)) +#define LEDC_DUTY_START_HSCH5_V 0x1 +#define LEDC_DUTY_START_HSCH5_S 31 +/* LEDC_DUTY_INC_HSCH5 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for high speed channel5.*/ +#define LEDC_DUTY_INC_HSCH5 (BIT(30)) +#define LEDC_DUTY_INC_HSCH5_M (BIT(30)) +#define LEDC_DUTY_INC_HSCH5_V 0x1 +#define LEDC_DUTY_INC_HSCH5_S 30 +/* LEDC_DUTY_NUM_HSCH5 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for high speed channel5.*/ +#define LEDC_DUTY_NUM_HSCH5 0x000003FF +#define LEDC_DUTY_NUM_HSCH5_M ((LEDC_DUTY_NUM_HSCH5_V)<<(LEDC_DUTY_NUM_HSCH5_S)) +#define LEDC_DUTY_NUM_HSCH5_V 0x3FF +#define LEDC_DUTY_NUM_HSCH5_S 20 +/* LEDC_DUTY_CYCLE_HSCH5 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_hsch5 cycles for high speed channel5.*/ +#define LEDC_DUTY_CYCLE_HSCH5 0x000003FF +#define LEDC_DUTY_CYCLE_HSCH5_M ((LEDC_DUTY_CYCLE_HSCH5_V)<<(LEDC_DUTY_CYCLE_HSCH5_S)) +#define LEDC_DUTY_CYCLE_HSCH5_V 0x3FF +#define LEDC_DUTY_CYCLE_HSCH5_S 10 +/* LEDC_DUTY_SCALE_HSCH5 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + high speed channel5.*/ +#define LEDC_DUTY_SCALE_HSCH5 0x000003FF +#define LEDC_DUTY_SCALE_HSCH5_M ((LEDC_DUTY_SCALE_HSCH5_V)<<(LEDC_DUTY_SCALE_HSCH5_S)) +#define LEDC_DUTY_SCALE_HSCH5_V 0x3FF +#define LEDC_DUTY_SCALE_HSCH5_S 0 + +#define LEDC_HSCH5_DUTY_R_REG (DR_REG_LEDC_BASE + 0x0074) +/* LEDC_DUTY_HSCH5 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for high speed channel5.*/ +#define LEDC_DUTY_HSCH5 0x01FFFFFF +#define LEDC_DUTY_HSCH5_M ((LEDC_DUTY_HSCH5_V)<<(LEDC_DUTY_HSCH5_S)) +#define LEDC_DUTY_HSCH5_V 0x1FFFFFF +#define LEDC_DUTY_HSCH5_S 0 + +#define LEDC_HSCH6_CONF0_REG (DR_REG_LEDC_BASE + 0x0078) +/* LEDC_IDLE_LV_HSCH6 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when high speed channel6 is off.*/ +#define LEDC_IDLE_LV_HSCH6 (BIT(3)) +#define LEDC_IDLE_LV_HSCH6_M (BIT(3)) +#define LEDC_IDLE_LV_HSCH6_V 0x1 +#define LEDC_IDLE_LV_HSCH6_S 3 +/* LEDC_SIG_OUT_EN_HSCH6 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for high speed channel6*/ +#define LEDC_SIG_OUT_EN_HSCH6 (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH6_M (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH6_V 0x1 +#define LEDC_SIG_OUT_EN_HSCH6_S 2 +/* LEDC_TIMER_SEL_HSCH6 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four high speed timers the two bits are used to select + one of them for high speed channel6. 2'b00: seletc hstimer0. 2'b01: select hstimer1. 2'b10: select hstimer2. 2'b11: select hstimer3.*/ +#define LEDC_TIMER_SEL_HSCH6 0x00000003 +#define LEDC_TIMER_SEL_HSCH6_M ((LEDC_TIMER_SEL_HSCH6_V)<<(LEDC_TIMER_SEL_HSCH6_S)) +#define LEDC_TIMER_SEL_HSCH6_V 0x3 +#define LEDC_TIMER_SEL_HSCH6_S 0 + +#define LEDC_HSCH6_HPOINT_REG (DR_REG_LEDC_BASE + 0x007C) +/* LEDC_HPOINT_HSCH6 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when htimerx(x=[0 3]) selected + by high speed channel6 has reached reg_hpoint_hsch6[19:0]*/ +#define LEDC_HPOINT_HSCH6 0x000FFFFF +#define LEDC_HPOINT_HSCH6_M ((LEDC_HPOINT_HSCH6_V)<<(LEDC_HPOINT_HSCH6_S)) +#define LEDC_HPOINT_HSCH6_V 0xFFFFF +#define LEDC_HPOINT_HSCH6_S 0 + +#define LEDC_HSCH6_DUTY_REG (DR_REG_LEDC_BASE + 0x0080) +/* LEDC_DUTY_HSCH6 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When hstimerx(x=[0 + 3]) choosed by high speed channel6 has reached reg_lpoint_hsch6 the output signal changes to low. reg_lpoint_hsch6=(reg_hpoint_hsch6[19:0]+reg_duty_hsch6[24:4]) (1) reg_lpoint_hsch6=(reg_hpoint_hsch6[19:0]+reg_duty_hsch6[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_HSCH6 0x01FFFFFF +#define LEDC_DUTY_HSCH6_M ((LEDC_DUTY_HSCH6_V)<<(LEDC_DUTY_HSCH6_S)) +#define LEDC_DUTY_HSCH6_V 0x1FFFFFF +#define LEDC_DUTY_HSCH6_S 0 + +#define LEDC_HSCH6_CONF1_REG (DR_REG_LEDC_BASE + 0x0084) +/* LEDC_DUTY_START_HSCH6 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch1 reg_duty_cycle_hsch1 and reg_duty_scale_hsch1 + has been configured. these register won't take effect until set reg_duty_start_hsch1. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_HSCH6 (BIT(31)) +#define LEDC_DUTY_START_HSCH6_M (BIT(31)) +#define LEDC_DUTY_START_HSCH6_V 0x1 +#define LEDC_DUTY_START_HSCH6_S 31 +/* LEDC_DUTY_INC_HSCH6 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for high speed channel6.*/ +#define LEDC_DUTY_INC_HSCH6 (BIT(30)) +#define LEDC_DUTY_INC_HSCH6_M (BIT(30)) +#define LEDC_DUTY_INC_HSCH6_V 0x1 +#define LEDC_DUTY_INC_HSCH6_S 30 +/* LEDC_DUTY_NUM_HSCH6 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for high speed channel6.*/ +#define LEDC_DUTY_NUM_HSCH6 0x000003FF +#define LEDC_DUTY_NUM_HSCH6_M ((LEDC_DUTY_NUM_HSCH6_V)<<(LEDC_DUTY_NUM_HSCH6_S)) +#define LEDC_DUTY_NUM_HSCH6_V 0x3FF +#define LEDC_DUTY_NUM_HSCH6_S 20 +/* LEDC_DUTY_CYCLE_HSCH6 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_hsch6 cycles for high speed channel6.*/ +#define LEDC_DUTY_CYCLE_HSCH6 0x000003FF +#define LEDC_DUTY_CYCLE_HSCH6_M ((LEDC_DUTY_CYCLE_HSCH6_V)<<(LEDC_DUTY_CYCLE_HSCH6_S)) +#define LEDC_DUTY_CYCLE_HSCH6_V 0x3FF +#define LEDC_DUTY_CYCLE_HSCH6_S 10 +/* LEDC_DUTY_SCALE_HSCH6 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + high speed channel6.*/ +#define LEDC_DUTY_SCALE_HSCH6 0x000003FF +#define LEDC_DUTY_SCALE_HSCH6_M ((LEDC_DUTY_SCALE_HSCH6_V)<<(LEDC_DUTY_SCALE_HSCH6_S)) +#define LEDC_DUTY_SCALE_HSCH6_V 0x3FF +#define LEDC_DUTY_SCALE_HSCH6_S 0 + +#define LEDC_HSCH6_DUTY_R_REG (DR_REG_LEDC_BASE + 0x0088) +/* LEDC_DUTY_HSCH6 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for high speed channel6.*/ +#define LEDC_DUTY_HSCH6 0x01FFFFFF +#define LEDC_DUTY_HSCH6_M ((LEDC_DUTY_HSCH6_V)<<(LEDC_DUTY_HSCH6_S)) +#define LEDC_DUTY_HSCH6_V 0x1FFFFFF +#define LEDC_DUTY_HSCH6_S 0 + +#define LEDC_HSCH7_CONF0_REG (DR_REG_LEDC_BASE + 0x008C) +/* LEDC_IDLE_LV_HSCH7 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when high speed channel7 is off.*/ +#define LEDC_IDLE_LV_HSCH7 (BIT(3)) +#define LEDC_IDLE_LV_HSCH7_M (BIT(3)) +#define LEDC_IDLE_LV_HSCH7_V 0x1 +#define LEDC_IDLE_LV_HSCH7_S 3 +/* LEDC_SIG_OUT_EN_HSCH7 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for high speed channel7.*/ +#define LEDC_SIG_OUT_EN_HSCH7 (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH7_M (BIT(2)) +#define LEDC_SIG_OUT_EN_HSCH7_V 0x1 +#define LEDC_SIG_OUT_EN_HSCH7_S 2 +/* LEDC_TIMER_SEL_HSCH7 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four high speed timers the two bits are used to select + one of them for high speed channel7. 2'b00: seletc hstimer0. 2'b01: select hstimer1. 2'b10: select hstimer2. 2'b11: select hstimer3.*/ +#define LEDC_TIMER_SEL_HSCH7 0x00000003 +#define LEDC_TIMER_SEL_HSCH7_M ((LEDC_TIMER_SEL_HSCH7_V)<<(LEDC_TIMER_SEL_HSCH7_S)) +#define LEDC_TIMER_SEL_HSCH7_V 0x3 +#define LEDC_TIMER_SEL_HSCH7_S 0 + +#define LEDC_HSCH7_HPOINT_REG (DR_REG_LEDC_BASE + 0x0090) +/* LEDC_HPOINT_HSCH7 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when htimerx(x=[0 3]) selected + by high speed channel7 has reached reg_hpoint_hsch7[19:0]*/ +#define LEDC_HPOINT_HSCH7 0x000FFFFF +#define LEDC_HPOINT_HSCH7_M ((LEDC_HPOINT_HSCH7_V)<<(LEDC_HPOINT_HSCH7_S)) +#define LEDC_HPOINT_HSCH7_V 0xFFFFF +#define LEDC_HPOINT_HSCH7_S 0 + +#define LEDC_HSCH7_DUTY_REG (DR_REG_LEDC_BASE + 0x0094) +/* LEDC_DUTY_HSCH7 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When hstimerx(x=[0 + 3]) choosed by high speed channel7 has reached reg_lpoint_hsch7 the output signal changes to low. reg_lpoint_hsch7=(reg_hpoint_hsch7[19:0]+reg_duty_hsch7[24:4]) (1) reg_lpoint_hsch7=(reg_hpoint_hsch7[19:0]+reg_duty_hsch7[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_HSCH7 0x01FFFFFF +#define LEDC_DUTY_HSCH7_M ((LEDC_DUTY_HSCH7_V)<<(LEDC_DUTY_HSCH7_S)) +#define LEDC_DUTY_HSCH7_V 0x1FFFFFF +#define LEDC_DUTY_HSCH7_S 0 + +#define LEDC_HSCH7_CONF1_REG (DR_REG_LEDC_BASE + 0x0098) +/* LEDC_DUTY_START_HSCH7 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch1 reg_duty_cycle_hsch1 and reg_duty_scale_hsch1 + has been configured. these register won't take effect until set reg_duty_start_hsch1. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_HSCH7 (BIT(31)) +#define LEDC_DUTY_START_HSCH7_M (BIT(31)) +#define LEDC_DUTY_START_HSCH7_V 0x1 +#define LEDC_DUTY_START_HSCH7_S 31 +/* LEDC_DUTY_INC_HSCH7 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for high speed channel6.*/ +#define LEDC_DUTY_INC_HSCH7 (BIT(30)) +#define LEDC_DUTY_INC_HSCH7_M (BIT(30)) +#define LEDC_DUTY_INC_HSCH7_V 0x1 +#define LEDC_DUTY_INC_HSCH7_S 30 +/* LEDC_DUTY_NUM_HSCH7 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for high speed channel6.*/ +#define LEDC_DUTY_NUM_HSCH7 0x000003FF +#define LEDC_DUTY_NUM_HSCH7_M ((LEDC_DUTY_NUM_HSCH7_V)<<(LEDC_DUTY_NUM_HSCH7_S)) +#define LEDC_DUTY_NUM_HSCH7_V 0x3FF +#define LEDC_DUTY_NUM_HSCH7_S 20 +/* LEDC_DUTY_CYCLE_HSCH7 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_hsch7 cycles for high speed channel7.*/ +#define LEDC_DUTY_CYCLE_HSCH7 0x000003FF +#define LEDC_DUTY_CYCLE_HSCH7_M ((LEDC_DUTY_CYCLE_HSCH7_V)<<(LEDC_DUTY_CYCLE_HSCH7_S)) +#define LEDC_DUTY_CYCLE_HSCH7_V 0x3FF +#define LEDC_DUTY_CYCLE_HSCH7_S 10 +/* LEDC_DUTY_SCALE_HSCH7 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + high speed channel7.*/ +#define LEDC_DUTY_SCALE_HSCH7 0x000003FF +#define LEDC_DUTY_SCALE_HSCH7_M ((LEDC_DUTY_SCALE_HSCH7_V)<<(LEDC_DUTY_SCALE_HSCH7_S)) +#define LEDC_DUTY_SCALE_HSCH7_V 0x3FF +#define LEDC_DUTY_SCALE_HSCH7_S 0 + +#define LEDC_HSCH7_DUTY_R_REG (DR_REG_LEDC_BASE + 0x009C) +/* LEDC_DUTY_HSCH7 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for high speed channel7.*/ +#define LEDC_DUTY_HSCH7 0x01FFFFFF +#define LEDC_DUTY_HSCH7_M ((LEDC_DUTY_HSCH7_V)<<(LEDC_DUTY_HSCH7_S)) +#define LEDC_DUTY_HSCH7_V 0x1FFFFFF +#define LEDC_DUTY_HSCH7_S 0 + +#define LEDC_LSCH0_CONF0_REG (DR_REG_LEDC_BASE + 0x00A0) +/* LEDC_PARA_UP_LSCH0 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This bit is used to update register LEDC_LSCH0_HPOINT and LEDC_LSCH0_DUTY + for low speed channel0.*/ +#define LEDC_PARA_UP_LSCH0 (BIT(4)) +#define LEDC_PARA_UP_LSCH0_M (BIT(4)) +#define LEDC_PARA_UP_LSCH0_V 0x1 +#define LEDC_PARA_UP_LSCH0_S 4 +/* LEDC_IDLE_LV_LSCH0 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when low speed channel0 is off.*/ +#define LEDC_IDLE_LV_LSCH0 (BIT(3)) +#define LEDC_IDLE_LV_LSCH0_M (BIT(3)) +#define LEDC_IDLE_LV_LSCH0_V 0x1 +#define LEDC_IDLE_LV_LSCH0_S 3 +/* LEDC_SIG_OUT_EN_LSCH0 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for low speed channel0.*/ +#define LEDC_SIG_OUT_EN_LSCH0 (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH0_M (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH0_V 0x1 +#define LEDC_SIG_OUT_EN_LSCH0_S 2 +/* LEDC_TIMER_SEL_LSCH0 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four low speed timers the two bits are used to select + one of them for low speed channel0. 2'b00: seletc lstimer0. 2'b01: select lstimer1. 2'b10: select lstimer2. 2'b11: select lstimer3.*/ +#define LEDC_TIMER_SEL_LSCH0 0x00000003 +#define LEDC_TIMER_SEL_LSCH0_M ((LEDC_TIMER_SEL_LSCH0_V)<<(LEDC_TIMER_SEL_LSCH0_S)) +#define LEDC_TIMER_SEL_LSCH0_V 0x3 +#define LEDC_TIMER_SEL_LSCH0_S 0 + +#define LEDC_LSCH0_HPOINT_REG (DR_REG_LEDC_BASE + 0x00A4) +/* LEDC_HPOINT_LSCH0 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when lstimerx(x=[0 3]) selected + by low speed channel0 has reached reg_hpoint_lsch0[19:0]*/ +#define LEDC_HPOINT_LSCH0 0x000FFFFF +#define LEDC_HPOINT_LSCH0_M ((LEDC_HPOINT_LSCH0_V)<<(LEDC_HPOINT_LSCH0_S)) +#define LEDC_HPOINT_LSCH0_V 0xFFFFF +#define LEDC_HPOINT_LSCH0_S 0 + +#define LEDC_LSCH0_DUTY_REG (DR_REG_LEDC_BASE + 0x00A8) +/* LEDC_DUTY_LSCH0 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When lstimerx(x=[0 + 3]) choosed by low speed channel0 has reached reg_lpoint_lsch0 the output signal changes to low. reg_lpoint_lsch0=(reg_hpoint_lsch0[19:0]+reg_duty_lsch0[24:4]) (1) reg_lpoint_lsch0=(reg_hpoint_lsch0[19:0]+reg_duty_lsch0[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_LSCH0 0x01FFFFFF +#define LEDC_DUTY_LSCH0_M ((LEDC_DUTY_LSCH0_V)<<(LEDC_DUTY_LSCH0_S)) +#define LEDC_DUTY_LSCH0_V 0x1FFFFFF +#define LEDC_DUTY_LSCH0_S 0 + +#define LEDC_LSCH0_CONF1_REG (DR_REG_LEDC_BASE + 0x00AC) +/* LEDC_DUTY_START_LSCH0 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch1 reg_duty_cycle_hsch1 and reg_duty_scale_hsch1 + has been configured. these register won't take effect until set reg_duty_start_hsch1. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_LSCH0 (BIT(31)) +#define LEDC_DUTY_START_LSCH0_M (BIT(31)) +#define LEDC_DUTY_START_LSCH0_V 0x1 +#define LEDC_DUTY_START_LSCH0_S 31 +/* LEDC_DUTY_INC_LSCH0 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for low speed channel6.*/ +#define LEDC_DUTY_INC_LSCH0 (BIT(30)) +#define LEDC_DUTY_INC_LSCH0_M (BIT(30)) +#define LEDC_DUTY_INC_LSCH0_V 0x1 +#define LEDC_DUTY_INC_LSCH0_S 30 +/* LEDC_DUTY_NUM_LSCH0 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for low speed channel6.*/ +#define LEDC_DUTY_NUM_LSCH0 0x000003FF +#define LEDC_DUTY_NUM_LSCH0_M ((LEDC_DUTY_NUM_LSCH0_V)<<(LEDC_DUTY_NUM_LSCH0_S)) +#define LEDC_DUTY_NUM_LSCH0_V 0x3FF +#define LEDC_DUTY_NUM_LSCH0_S 20 +/* LEDC_DUTY_CYCLE_LSCH0 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_lsch0 cycles for low speed channel0.*/ +#define LEDC_DUTY_CYCLE_LSCH0 0x000003FF +#define LEDC_DUTY_CYCLE_LSCH0_M ((LEDC_DUTY_CYCLE_LSCH0_V)<<(LEDC_DUTY_CYCLE_LSCH0_S)) +#define LEDC_DUTY_CYCLE_LSCH0_V 0x3FF +#define LEDC_DUTY_CYCLE_LSCH0_S 10 +/* LEDC_DUTY_SCALE_LSCH0 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + low speed channel0.*/ +#define LEDC_DUTY_SCALE_LSCH0 0x000003FF +#define LEDC_DUTY_SCALE_LSCH0_M ((LEDC_DUTY_SCALE_LSCH0_V)<<(LEDC_DUTY_SCALE_LSCH0_S)) +#define LEDC_DUTY_SCALE_LSCH0_V 0x3FF +#define LEDC_DUTY_SCALE_LSCH0_S 0 + +#define LEDC_LSCH0_DUTY_R_REG (DR_REG_LEDC_BASE + 0x00B0) +/* LEDC_DUTY_LSCH0 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for low speed channel0.*/ +#define LEDC_DUTY_LSCH0 0x01FFFFFF +#define LEDC_DUTY_LSCH0_M ((LEDC_DUTY_LSCH0_V)<<(LEDC_DUTY_LSCH0_S)) +#define LEDC_DUTY_LSCH0_V 0x1FFFFFF +#define LEDC_DUTY_LSCH0_S 0 + +#define LEDC_LSCH1_CONF0_REG (DR_REG_LEDC_BASE + 0x00B4) +/* LEDC_PARA_UP_LSCH1 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This bit is used to update register LEDC_LSCH1_HPOINT and LEDC_LSCH1_DUTY + for low speed channel1.*/ +#define LEDC_PARA_UP_LSCH1 (BIT(4)) +#define LEDC_PARA_UP_LSCH1_M (BIT(4)) +#define LEDC_PARA_UP_LSCH1_V 0x1 +#define LEDC_PARA_UP_LSCH1_S 4 +/* LEDC_IDLE_LV_LSCH1 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when low speed channel1 is off.*/ +#define LEDC_IDLE_LV_LSCH1 (BIT(3)) +#define LEDC_IDLE_LV_LSCH1_M (BIT(3)) +#define LEDC_IDLE_LV_LSCH1_V 0x1 +#define LEDC_IDLE_LV_LSCH1_S 3 +/* LEDC_SIG_OUT_EN_LSCH1 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for low speed channel1.*/ +#define LEDC_SIG_OUT_EN_LSCH1 (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH1_M (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH1_V 0x1 +#define LEDC_SIG_OUT_EN_LSCH1_S 2 +/* LEDC_TIMER_SEL_LSCH1 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four low speed timers the two bits are used to select + one of them for low speed channel1. 2'b00: seletc lstimer0. 2'b01: select lstimer1. 2'b10: select lstimer2. 2'b11: select lstimer3.*/ +#define LEDC_TIMER_SEL_LSCH1 0x00000003 +#define LEDC_TIMER_SEL_LSCH1_M ((LEDC_TIMER_SEL_LSCH1_V)<<(LEDC_TIMER_SEL_LSCH1_S)) +#define LEDC_TIMER_SEL_LSCH1_V 0x3 +#define LEDC_TIMER_SEL_LSCH1_S 0 + +#define LEDC_LSCH1_HPOINT_REG (DR_REG_LEDC_BASE + 0x00B8) +/* LEDC_HPOINT_LSCH1 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when lstimerx(x=[0 3]) selected + by low speed channel1 has reached reg_hpoint_lsch1[19:0]*/ +#define LEDC_HPOINT_LSCH1 0x000FFFFF +#define LEDC_HPOINT_LSCH1_M ((LEDC_HPOINT_LSCH1_V)<<(LEDC_HPOINT_LSCH1_S)) +#define LEDC_HPOINT_LSCH1_V 0xFFFFF +#define LEDC_HPOINT_LSCH1_S 0 + +#define LEDC_LSCH1_DUTY_REG (DR_REG_LEDC_BASE + 0x00BC) +/* LEDC_DUTY_LSCH1 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When lstimerx(x=[0 + 3]) choosed by low speed channel1 has reached reg_lpoint_lsch1 the output signal changes to low. reg_lpoint_lsch1=(reg_hpoint_lsch1[19:0]+reg_duty_lsch1[24:4]) (1) reg_lpoint_lsch1=(reg_hpoint_lsch1[19:0]+reg_duty_lsch1[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_LSCH1 0x01FFFFFF +#define LEDC_DUTY_LSCH1_M ((LEDC_DUTY_LSCH1_V)<<(LEDC_DUTY_LSCH1_S)) +#define LEDC_DUTY_LSCH1_V 0x1FFFFFF +#define LEDC_DUTY_LSCH1_S 0 + +#define LEDC_LSCH1_CONF1_REG (DR_REG_LEDC_BASE + 0x00C0) +/* LEDC_DUTY_START_LSCH1 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch1 reg_duty_cycle_hsch1 and reg_duty_scale_hsch1 + has been configured. these register won't take effect until set reg_duty_start_hsch1. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_LSCH1 (BIT(31)) +#define LEDC_DUTY_START_LSCH1_M (BIT(31)) +#define LEDC_DUTY_START_LSCH1_V 0x1 +#define LEDC_DUTY_START_LSCH1_S 31 +/* LEDC_DUTY_INC_LSCH1 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for low speed channel1.*/ +#define LEDC_DUTY_INC_LSCH1 (BIT(30)) +#define LEDC_DUTY_INC_LSCH1_M (BIT(30)) +#define LEDC_DUTY_INC_LSCH1_V 0x1 +#define LEDC_DUTY_INC_LSCH1_S 30 +/* LEDC_DUTY_NUM_LSCH1 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for low speed channel1.*/ +#define LEDC_DUTY_NUM_LSCH1 0x000003FF +#define LEDC_DUTY_NUM_LSCH1_M ((LEDC_DUTY_NUM_LSCH1_V)<<(LEDC_DUTY_NUM_LSCH1_S)) +#define LEDC_DUTY_NUM_LSCH1_V 0x3FF +#define LEDC_DUTY_NUM_LSCH1_S 20 +/* LEDC_DUTY_CYCLE_LSCH1 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_lsch1 cycles for low speed channel1.*/ +#define LEDC_DUTY_CYCLE_LSCH1 0x000003FF +#define LEDC_DUTY_CYCLE_LSCH1_M ((LEDC_DUTY_CYCLE_LSCH1_V)<<(LEDC_DUTY_CYCLE_LSCH1_S)) +#define LEDC_DUTY_CYCLE_LSCH1_V 0x3FF +#define LEDC_DUTY_CYCLE_LSCH1_S 10 +/* LEDC_DUTY_SCALE_LSCH1 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + low speed channel1.*/ +#define LEDC_DUTY_SCALE_LSCH1 0x000003FF +#define LEDC_DUTY_SCALE_LSCH1_M ((LEDC_DUTY_SCALE_LSCH1_V)<<(LEDC_DUTY_SCALE_LSCH1_S)) +#define LEDC_DUTY_SCALE_LSCH1_V 0x3FF +#define LEDC_DUTY_SCALE_LSCH1_S 0 + +#define LEDC_LSCH1_DUTY_R_REG (DR_REG_LEDC_BASE + 0x00C4) +/* LEDC_DUTY_LSCH1 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for low speed channel1.*/ +#define LEDC_DUTY_LSCH1 0x01FFFFFF +#define LEDC_DUTY_LSCH1_M ((LEDC_DUTY_LSCH1_V)<<(LEDC_DUTY_LSCH1_S)) +#define LEDC_DUTY_LSCH1_V 0x1FFFFFF +#define LEDC_DUTY_LSCH1_S 0 + +#define LEDC_LSCH2_CONF0_REG (DR_REG_LEDC_BASE + 0x00C8) +/* LEDC_PARA_UP_LSCH2 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This bit is used to update register LEDC_LSCH2_HPOINT and LEDC_LSCH2_DUTY + for low speed channel2.*/ +#define LEDC_PARA_UP_LSCH2 (BIT(4)) +#define LEDC_PARA_UP_LSCH2_M (BIT(4)) +#define LEDC_PARA_UP_LSCH2_V 0x1 +#define LEDC_PARA_UP_LSCH2_S 4 +/* LEDC_IDLE_LV_LSCH2 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when low speed channel2 is off.*/ +#define LEDC_IDLE_LV_LSCH2 (BIT(3)) +#define LEDC_IDLE_LV_LSCH2_M (BIT(3)) +#define LEDC_IDLE_LV_LSCH2_V 0x1 +#define LEDC_IDLE_LV_LSCH2_S 3 +/* LEDC_SIG_OUT_EN_LSCH2 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for low speed channel2.*/ +#define LEDC_SIG_OUT_EN_LSCH2 (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH2_M (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH2_V 0x1 +#define LEDC_SIG_OUT_EN_LSCH2_S 2 +/* LEDC_TIMER_SEL_LSCH2 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four low speed timers the two bits are used to select + one of them for low speed channel2. 2'b00: seletc lstimer0. 2'b01: select lstimer1. 2'b10: select lstimer2. 2'b11: select lstimer3.*/ +#define LEDC_TIMER_SEL_LSCH2 0x00000003 +#define LEDC_TIMER_SEL_LSCH2_M ((LEDC_TIMER_SEL_LSCH2_V)<<(LEDC_TIMER_SEL_LSCH2_S)) +#define LEDC_TIMER_SEL_LSCH2_V 0x3 +#define LEDC_TIMER_SEL_LSCH2_S 0 + +#define LEDC_LSCH2_HPOINT_REG (DR_REG_LEDC_BASE + 0x00CC) +/* LEDC_HPOINT_LSCH2 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when lstimerx(x=[0 3]) selected + by low speed channel2 has reached reg_hpoint_lsch2[19:0]*/ +#define LEDC_HPOINT_LSCH2 0x000FFFFF +#define LEDC_HPOINT_LSCH2_M ((LEDC_HPOINT_LSCH2_V)<<(LEDC_HPOINT_LSCH2_S)) +#define LEDC_HPOINT_LSCH2_V 0xFFFFF +#define LEDC_HPOINT_LSCH2_S 0 + +#define LEDC_LSCH2_DUTY_REG (DR_REG_LEDC_BASE + 0x00D0) +/* LEDC_DUTY_LSCH2 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When lstimerx(x=[0 + 3]) choosed by low speed channel2 has reached reg_lpoint_lsch2 the output signal changes to low. reg_lpoint_lsch2=(reg_hpoint_lsch2[19:0]+reg_duty_lsch2[24:4]) (1) reg_lpoint_lsch2=(reg_hpoint_lsch2[19:0]+reg_duty_lsch2[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_LSCH2 0x01FFFFFF +#define LEDC_DUTY_LSCH2_M ((LEDC_DUTY_LSCH2_V)<<(LEDC_DUTY_LSCH2_S)) +#define LEDC_DUTY_LSCH2_V 0x1FFFFFF +#define LEDC_DUTY_LSCH2_S 0 + +#define LEDC_LSCH2_CONF1_REG (DR_REG_LEDC_BASE + 0x00D4) +/* LEDC_DUTY_START_LSCH2 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch2 reg_duty_cycle_hsch2 and reg_duty_scale_hsch2 + has been configured. these register won't take effect until set reg_duty_start_hsch2. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_LSCH2 (BIT(31)) +#define LEDC_DUTY_START_LSCH2_M (BIT(31)) +#define LEDC_DUTY_START_LSCH2_V 0x1 +#define LEDC_DUTY_START_LSCH2_S 31 +/* LEDC_DUTY_INC_LSCH2 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for low speed channel2.*/ +#define LEDC_DUTY_INC_LSCH2 (BIT(30)) +#define LEDC_DUTY_INC_LSCH2_M (BIT(30)) +#define LEDC_DUTY_INC_LSCH2_V 0x1 +#define LEDC_DUTY_INC_LSCH2_S 30 +/* LEDC_DUTY_NUM_LSCH2 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for low speed channel2.*/ +#define LEDC_DUTY_NUM_LSCH2 0x000003FF +#define LEDC_DUTY_NUM_LSCH2_M ((LEDC_DUTY_NUM_LSCH2_V)<<(LEDC_DUTY_NUM_LSCH2_S)) +#define LEDC_DUTY_NUM_LSCH2_V 0x3FF +#define LEDC_DUTY_NUM_LSCH2_S 20 +/* LEDC_DUTY_CYCLE_LSCH2 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_lsch2 cycles for low speed channel2.*/ +#define LEDC_DUTY_CYCLE_LSCH2 0x000003FF +#define LEDC_DUTY_CYCLE_LSCH2_M ((LEDC_DUTY_CYCLE_LSCH2_V)<<(LEDC_DUTY_CYCLE_LSCH2_S)) +#define LEDC_DUTY_CYCLE_LSCH2_V 0x3FF +#define LEDC_DUTY_CYCLE_LSCH2_S 10 +/* LEDC_DUTY_SCALE_LSCH2 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + low speed channel2.*/ +#define LEDC_DUTY_SCALE_LSCH2 0x000003FF +#define LEDC_DUTY_SCALE_LSCH2_M ((LEDC_DUTY_SCALE_LSCH2_V)<<(LEDC_DUTY_SCALE_LSCH2_S)) +#define LEDC_DUTY_SCALE_LSCH2_V 0x3FF +#define LEDC_DUTY_SCALE_LSCH2_S 0 + +#define LEDC_LSCH2_DUTY_R_REG (DR_REG_LEDC_BASE + 0x00D8) +/* LEDC_DUTY_LSCH2 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for low speed channel2.*/ +#define LEDC_DUTY_LSCH2 0x01FFFFFF +#define LEDC_DUTY_LSCH2_M ((LEDC_DUTY_LSCH2_V)<<(LEDC_DUTY_LSCH2_S)) +#define LEDC_DUTY_LSCH2_V 0x1FFFFFF +#define LEDC_DUTY_LSCH2_S 0 + +#define LEDC_LSCH3_CONF0_REG (DR_REG_LEDC_BASE + 0x00DC) +/* LEDC_PARA_UP_LSCH3 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This bit is used to update register LEDC_LSCH3_HPOINT and LEDC_LSCH3_DUTY + for low speed channel3.*/ +#define LEDC_PARA_UP_LSCH3 (BIT(4)) +#define LEDC_PARA_UP_LSCH3_M (BIT(4)) +#define LEDC_PARA_UP_LSCH3_V 0x1 +#define LEDC_PARA_UP_LSCH3_S 4 +/* LEDC_IDLE_LV_LSCH3 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when low speed channel3 is off.*/ +#define LEDC_IDLE_LV_LSCH3 (BIT(3)) +#define LEDC_IDLE_LV_LSCH3_M (BIT(3)) +#define LEDC_IDLE_LV_LSCH3_V 0x1 +#define LEDC_IDLE_LV_LSCH3_S 3 +/* LEDC_SIG_OUT_EN_LSCH3 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for low speed channel3.*/ +#define LEDC_SIG_OUT_EN_LSCH3 (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH3_M (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH3_V 0x1 +#define LEDC_SIG_OUT_EN_LSCH3_S 2 +/* LEDC_TIMER_SEL_LSCH3 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four low speed timers the two bits are used to select + one of them for low speed channel3. 2'b00: seletc lstimer0. 2'b01: select lstimer1. 2'b10: select lstimer2. 2'b11: select lstimer3.*/ +#define LEDC_TIMER_SEL_LSCH3 0x00000003 +#define LEDC_TIMER_SEL_LSCH3_M ((LEDC_TIMER_SEL_LSCH3_V)<<(LEDC_TIMER_SEL_LSCH3_S)) +#define LEDC_TIMER_SEL_LSCH3_V 0x3 +#define LEDC_TIMER_SEL_LSCH3_S 0 + +#define LEDC_LSCH3_HPOINT_REG (DR_REG_LEDC_BASE + 0x00E0) +/* LEDC_HPOINT_LSCH3 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when lstimerx(x=[0 3]) selected + by low speed channel3 has reached reg_hpoint_lsch3[19:0]*/ +#define LEDC_HPOINT_LSCH3 0x000FFFFF +#define LEDC_HPOINT_LSCH3_M ((LEDC_HPOINT_LSCH3_V)<<(LEDC_HPOINT_LSCH3_S)) +#define LEDC_HPOINT_LSCH3_V 0xFFFFF +#define LEDC_HPOINT_LSCH3_S 0 + +#define LEDC_LSCH3_DUTY_REG (DR_REG_LEDC_BASE + 0x00E4) +/* LEDC_DUTY_LSCH3 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When lstimerx(x=[0 + 3]) choosed by low speed channel3 has reached reg_lpoint_lsch3 the output signal changes to low. reg_lpoint_lsch3=(reg_hpoint_lsch3[19:0]+reg_duty_lsch3[24:4]) (1) reg_lpoint_lsch3=(reg_hpoint_lsch3[19:0]+reg_duty_lsch3[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_LSCH3 0x01FFFFFF +#define LEDC_DUTY_LSCH3_M ((LEDC_DUTY_LSCH3_V)<<(LEDC_DUTY_LSCH3_S)) +#define LEDC_DUTY_LSCH3_V 0x1FFFFFF +#define LEDC_DUTY_LSCH3_S 0 + +#define LEDC_LSCH3_CONF1_REG (DR_REG_LEDC_BASE + 0x00E8) +/* LEDC_DUTY_START_LSCH3 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch3 reg_duty_cycle_hsch3 and reg_duty_scale_hsch3 + has been configured. these register won't take effect until set reg_duty_start_hsch3. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_LSCH3 (BIT(31)) +#define LEDC_DUTY_START_LSCH3_M (BIT(31)) +#define LEDC_DUTY_START_LSCH3_V 0x1 +#define LEDC_DUTY_START_LSCH3_S 31 +/* LEDC_DUTY_INC_LSCH3 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for low speed channel3.*/ +#define LEDC_DUTY_INC_LSCH3 (BIT(30)) +#define LEDC_DUTY_INC_LSCH3_M (BIT(30)) +#define LEDC_DUTY_INC_LSCH3_V 0x1 +#define LEDC_DUTY_INC_LSCH3_S 30 +/* LEDC_DUTY_NUM_LSCH3 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for low speed channel3.*/ +#define LEDC_DUTY_NUM_LSCH3 0x000003FF +#define LEDC_DUTY_NUM_LSCH3_M ((LEDC_DUTY_NUM_LSCH3_V)<<(LEDC_DUTY_NUM_LSCH3_S)) +#define LEDC_DUTY_NUM_LSCH3_V 0x3FF +#define LEDC_DUTY_NUM_LSCH3_S 20 +/* LEDC_DUTY_CYCLE_LSCH3 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_lsch3 cycles for low speed channel3.*/ +#define LEDC_DUTY_CYCLE_LSCH3 0x000003FF +#define LEDC_DUTY_CYCLE_LSCH3_M ((LEDC_DUTY_CYCLE_LSCH3_V)<<(LEDC_DUTY_CYCLE_LSCH3_S)) +#define LEDC_DUTY_CYCLE_LSCH3_V 0x3FF +#define LEDC_DUTY_CYCLE_LSCH3_S 10 +/* LEDC_DUTY_SCALE_LSCH3 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + low speed channel3.*/ +#define LEDC_DUTY_SCALE_LSCH3 0x000003FF +#define LEDC_DUTY_SCALE_LSCH3_M ((LEDC_DUTY_SCALE_LSCH3_V)<<(LEDC_DUTY_SCALE_LSCH3_S)) +#define LEDC_DUTY_SCALE_LSCH3_V 0x3FF +#define LEDC_DUTY_SCALE_LSCH3_S 0 + +#define LEDC_LSCH3_DUTY_R_REG (DR_REG_LEDC_BASE + 0x00EC) +/* LEDC_DUTY_LSCH3 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for low speed channel3.*/ +#define LEDC_DUTY_LSCH3 0x01FFFFFF +#define LEDC_DUTY_LSCH3_M ((LEDC_DUTY_LSCH3_V)<<(LEDC_DUTY_LSCH3_S)) +#define LEDC_DUTY_LSCH3_V 0x1FFFFFF +#define LEDC_DUTY_LSCH3_S 0 + +#define LEDC_LSCH4_CONF0_REG (DR_REG_LEDC_BASE + 0x00F0) +/* LEDC_PARA_UP_LSCH4 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This bit is used to update register LEDC_LSCH4_HPOINT and LEDC_LSCH4_DUTY + for low speed channel4.*/ +#define LEDC_PARA_UP_LSCH4 (BIT(4)) +#define LEDC_PARA_UP_LSCH4_M (BIT(4)) +#define LEDC_PARA_UP_LSCH4_V 0x1 +#define LEDC_PARA_UP_LSCH4_S 4 +/* LEDC_IDLE_LV_LSCH4 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when low speed channel4 is off.*/ +#define LEDC_IDLE_LV_LSCH4 (BIT(3)) +#define LEDC_IDLE_LV_LSCH4_M (BIT(3)) +#define LEDC_IDLE_LV_LSCH4_V 0x1 +#define LEDC_IDLE_LV_LSCH4_S 3 +/* LEDC_SIG_OUT_EN_LSCH4 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for low speed channel4.*/ +#define LEDC_SIG_OUT_EN_LSCH4 (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH4_M (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH4_V 0x1 +#define LEDC_SIG_OUT_EN_LSCH4_S 2 +/* LEDC_TIMER_SEL_LSCH4 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four low speed timers the two bits are used to select + one of them for low speed channel4. 2'b00: seletc lstimer0. 2'b01: select lstimer1. 2'b10: select lstimer2. 2'b11: select lstimer3.*/ +#define LEDC_TIMER_SEL_LSCH4 0x00000003 +#define LEDC_TIMER_SEL_LSCH4_M ((LEDC_TIMER_SEL_LSCH4_V)<<(LEDC_TIMER_SEL_LSCH4_S)) +#define LEDC_TIMER_SEL_LSCH4_V 0x3 +#define LEDC_TIMER_SEL_LSCH4_S 0 + +#define LEDC_LSCH4_HPOINT_REG (DR_REG_LEDC_BASE + 0x00F4) +/* LEDC_HPOINT_LSCH4 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when lstimerx(x=[0 3]) selected + by low speed channel4 has reached reg_hpoint_lsch4[19:0]*/ +#define LEDC_HPOINT_LSCH4 0x000FFFFF +#define LEDC_HPOINT_LSCH4_M ((LEDC_HPOINT_LSCH4_V)<<(LEDC_HPOINT_LSCH4_S)) +#define LEDC_HPOINT_LSCH4_V 0xFFFFF +#define LEDC_HPOINT_LSCH4_S 0 + +#define LEDC_LSCH4_DUTY_REG (DR_REG_LEDC_BASE + 0x00F8) +/* LEDC_DUTY_LSCH4 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When lstimerx(x=[0 + 3]) choosed by low speed channel4 has reached reg_lpoint_lsch4 the output signal changes to low. reg_lpoint_lsch4=(reg_hpoint_lsch4[19:0]+reg_duty_lsch4[24:4]) (1) reg_lpoint_lsch4=(reg_hpoint_lsch4[19:0]+reg_duty_lsch4[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_LSCH4 0x01FFFFFF +#define LEDC_DUTY_LSCH4_M ((LEDC_DUTY_LSCH4_V)<<(LEDC_DUTY_LSCH4_S)) +#define LEDC_DUTY_LSCH4_V 0x1FFFFFF +#define LEDC_DUTY_LSCH4_S 0 + +#define LEDC_LSCH4_CONF1_REG (DR_REG_LEDC_BASE + 0x00FC) +/* LEDC_DUTY_START_LSCH4 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch4 reg_duty_cycle_hsch4 and reg_duty_scale_hsch4 + has been configured. these register won't take effect until set reg_duty_start_hsch4. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_LSCH4 (BIT(31)) +#define LEDC_DUTY_START_LSCH4_M (BIT(31)) +#define LEDC_DUTY_START_LSCH4_V 0x1 +#define LEDC_DUTY_START_LSCH4_S 31 +/* LEDC_DUTY_INC_LSCH4 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for low speed channel4.*/ +#define LEDC_DUTY_INC_LSCH4 (BIT(30)) +#define LEDC_DUTY_INC_LSCH4_M (BIT(30)) +#define LEDC_DUTY_INC_LSCH4_V 0x1 +#define LEDC_DUTY_INC_LSCH4_S 30 +/* LEDC_DUTY_NUM_LSCH4 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for low speed channel4.*/ +#define LEDC_DUTY_NUM_LSCH4 0x000003FF +#define LEDC_DUTY_NUM_LSCH4_M ((LEDC_DUTY_NUM_LSCH4_V)<<(LEDC_DUTY_NUM_LSCH4_S)) +#define LEDC_DUTY_NUM_LSCH4_V 0x3FF +#define LEDC_DUTY_NUM_LSCH4_S 20 +/* LEDC_DUTY_CYCLE_LSCH4 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_lsch4 cycles for low speed channel4.*/ +#define LEDC_DUTY_CYCLE_LSCH4 0x000003FF +#define LEDC_DUTY_CYCLE_LSCH4_M ((LEDC_DUTY_CYCLE_LSCH4_V)<<(LEDC_DUTY_CYCLE_LSCH4_S)) +#define LEDC_DUTY_CYCLE_LSCH4_V 0x3FF +#define LEDC_DUTY_CYCLE_LSCH4_S 10 +/* LEDC_DUTY_SCALE_LSCH4 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + low speed channel4.*/ +#define LEDC_DUTY_SCALE_LSCH4 0x000003FF +#define LEDC_DUTY_SCALE_LSCH4_M ((LEDC_DUTY_SCALE_LSCH4_V)<<(LEDC_DUTY_SCALE_LSCH4_S)) +#define LEDC_DUTY_SCALE_LSCH4_V 0x3FF +#define LEDC_DUTY_SCALE_LSCH4_S 0 + +#define LEDC_LSCH4_DUTY_R_REG (DR_REG_LEDC_BASE + 0x0100) +/* LEDC_DUTY_LSCH4 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for low speed channel4.*/ +#define LEDC_DUTY_LSCH4 0x01FFFFFF +#define LEDC_DUTY_LSCH4_M ((LEDC_DUTY_LSCH4_V)<<(LEDC_DUTY_LSCH4_S)) +#define LEDC_DUTY_LSCH4_V 0x1FFFFFF +#define LEDC_DUTY_LSCH4_S 0 + +#define LEDC_LSCH5_CONF0_REG (DR_REG_LEDC_BASE + 0x0104) +/* LEDC_PARA_UP_LSCH5 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This bit is used to update register LEDC_LSCH5_HPOINT and LEDC_LSCH5_DUTY + for low speed channel5.*/ +#define LEDC_PARA_UP_LSCH5 (BIT(4)) +#define LEDC_PARA_UP_LSCH5_M (BIT(4)) +#define LEDC_PARA_UP_LSCH5_V 0x1 +#define LEDC_PARA_UP_LSCH5_S 4 +/* LEDC_IDLE_LV_LSCH5 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when low speed channel5 is off.*/ +#define LEDC_IDLE_LV_LSCH5 (BIT(3)) +#define LEDC_IDLE_LV_LSCH5_M (BIT(3)) +#define LEDC_IDLE_LV_LSCH5_V 0x1 +#define LEDC_IDLE_LV_LSCH5_S 3 +/* LEDC_SIG_OUT_EN_LSCH5 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for low speed channel5.*/ +#define LEDC_SIG_OUT_EN_LSCH5 (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH5_M (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH5_V 0x1 +#define LEDC_SIG_OUT_EN_LSCH5_S 2 +/* LEDC_TIMER_SEL_LSCH5 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four low speed timers the two bits are used to select + one of them for low speed channel5. 2'b00: seletc lstimer0. 2'b01: select lstimer1. 2'b10: select lstimer2. 2'b11: select lstimer3.*/ +#define LEDC_TIMER_SEL_LSCH5 0x00000003 +#define LEDC_TIMER_SEL_LSCH5_M ((LEDC_TIMER_SEL_LSCH5_V)<<(LEDC_TIMER_SEL_LSCH5_S)) +#define LEDC_TIMER_SEL_LSCH5_V 0x3 +#define LEDC_TIMER_SEL_LSCH5_S 0 + +#define LEDC_LSCH5_HPOINT_REG (DR_REG_LEDC_BASE + 0x0108) +/* LEDC_HPOINT_LSCH5 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when lstimerx(x=[0 3]) selected + by low speed channel5 has reached reg_hpoint_lsch5[19:0]*/ +#define LEDC_HPOINT_LSCH5 0x000FFFFF +#define LEDC_HPOINT_LSCH5_M ((LEDC_HPOINT_LSCH5_V)<<(LEDC_HPOINT_LSCH5_S)) +#define LEDC_HPOINT_LSCH5_V 0xFFFFF +#define LEDC_HPOINT_LSCH5_S 0 + +#define LEDC_LSCH5_DUTY_REG (DR_REG_LEDC_BASE + 0x010C) +/* LEDC_DUTY_LSCH5 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When lstimerx(x=[0 + 3]) choosed by low speed channel5 has reached reg_lpoint_lsch5 the output signal changes to low. reg_lpoint_lsch5=(reg_hpoint_lsch5[19:0]+reg_duty_lsch5[24:4]) (1) reg_lpoint_lsch5=(reg_hpoint_lsch5[19:0]+reg_duty_lsch5[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_LSCH5 0x01FFFFFF +#define LEDC_DUTY_LSCH5_M ((LEDC_DUTY_LSCH5_V)<<(LEDC_DUTY_LSCH5_S)) +#define LEDC_DUTY_LSCH5_V 0x1FFFFFF +#define LEDC_DUTY_LSCH5_S 0 + +#define LEDC_LSCH5_CONF1_REG (DR_REG_LEDC_BASE + 0x0110) +/* LEDC_DUTY_START_LSCH5 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch4 reg_duty_cycle_hsch4 and reg_duty_scale_hsch4 + has been configured. these register won't take effect until set reg_duty_start_hsch4. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_LSCH5 (BIT(31)) +#define LEDC_DUTY_START_LSCH5_M (BIT(31)) +#define LEDC_DUTY_START_LSCH5_V 0x1 +#define LEDC_DUTY_START_LSCH5_S 31 +/* LEDC_DUTY_INC_LSCH5 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for low speed channel5.*/ +#define LEDC_DUTY_INC_LSCH5 (BIT(30)) +#define LEDC_DUTY_INC_LSCH5_M (BIT(30)) +#define LEDC_DUTY_INC_LSCH5_V 0x1 +#define LEDC_DUTY_INC_LSCH5_S 30 +/* LEDC_DUTY_NUM_LSCH5 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for low speed channel5.*/ +#define LEDC_DUTY_NUM_LSCH5 0x000003FF +#define LEDC_DUTY_NUM_LSCH5_M ((LEDC_DUTY_NUM_LSCH5_V)<<(LEDC_DUTY_NUM_LSCH5_S)) +#define LEDC_DUTY_NUM_LSCH5_V 0x3FF +#define LEDC_DUTY_NUM_LSCH5_S 20 +/* LEDC_DUTY_CYCLE_LSCH5 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_lsch5 cycles for low speed channel4.*/ +#define LEDC_DUTY_CYCLE_LSCH5 0x000003FF +#define LEDC_DUTY_CYCLE_LSCH5_M ((LEDC_DUTY_CYCLE_LSCH5_V)<<(LEDC_DUTY_CYCLE_LSCH5_S)) +#define LEDC_DUTY_CYCLE_LSCH5_V 0x3FF +#define LEDC_DUTY_CYCLE_LSCH5_S 10 +/* LEDC_DUTY_SCALE_LSCH5 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + low speed channel5.*/ +#define LEDC_DUTY_SCALE_LSCH5 0x000003FF +#define LEDC_DUTY_SCALE_LSCH5_M ((LEDC_DUTY_SCALE_LSCH5_V)<<(LEDC_DUTY_SCALE_LSCH5_S)) +#define LEDC_DUTY_SCALE_LSCH5_V 0x3FF +#define LEDC_DUTY_SCALE_LSCH5_S 0 + +#define LEDC_LSCH5_DUTY_R_REG (DR_REG_LEDC_BASE + 0x0114) +/* LEDC_DUTY_LSCH5 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for low speed channel5.*/ +#define LEDC_DUTY_LSCH5 0x01FFFFFF +#define LEDC_DUTY_LSCH5_M ((LEDC_DUTY_LSCH5_V)<<(LEDC_DUTY_LSCH5_S)) +#define LEDC_DUTY_LSCH5_V 0x1FFFFFF +#define LEDC_DUTY_LSCH5_S 0 + +#define LEDC_LSCH6_CONF0_REG (DR_REG_LEDC_BASE + 0x0118) +/* LEDC_PARA_UP_LSCH6 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This bit is used to update register LEDC_LSCH6_HPOINT and LEDC_LSCH6_DUTY + for low speed channel6.*/ +#define LEDC_PARA_UP_LSCH6 (BIT(4)) +#define LEDC_PARA_UP_LSCH6_M (BIT(4)) +#define LEDC_PARA_UP_LSCH6_V 0x1 +#define LEDC_PARA_UP_LSCH6_S 4 +/* LEDC_IDLE_LV_LSCH6 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when low speed channel6 is off.*/ +#define LEDC_IDLE_LV_LSCH6 (BIT(3)) +#define LEDC_IDLE_LV_LSCH6_M (BIT(3)) +#define LEDC_IDLE_LV_LSCH6_V 0x1 +#define LEDC_IDLE_LV_LSCH6_S 3 +/* LEDC_SIG_OUT_EN_LSCH6 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for low speed channel6.*/ +#define LEDC_SIG_OUT_EN_LSCH6 (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH6_M (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH6_V 0x1 +#define LEDC_SIG_OUT_EN_LSCH6_S 2 +/* LEDC_TIMER_SEL_LSCH6 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four low speed timers the two bits are used to select + one of them for low speed channel6. 2'b00: seletc lstimer0. 2'b01: select lstimer1. 2'b10: select lstimer2. 2'b11: select lstimer3.*/ +#define LEDC_TIMER_SEL_LSCH6 0x00000003 +#define LEDC_TIMER_SEL_LSCH6_M ((LEDC_TIMER_SEL_LSCH6_V)<<(LEDC_TIMER_SEL_LSCH6_S)) +#define LEDC_TIMER_SEL_LSCH6_V 0x3 +#define LEDC_TIMER_SEL_LSCH6_S 0 + +#define LEDC_LSCH6_HPOINT_REG (DR_REG_LEDC_BASE + 0x011C) +/* LEDC_HPOINT_LSCH6 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when lstimerx(x=[0 3]) selected + by low speed channel6 has reached reg_hpoint_lsch6[19:0]*/ +#define LEDC_HPOINT_LSCH6 0x000FFFFF +#define LEDC_HPOINT_LSCH6_M ((LEDC_HPOINT_LSCH6_V)<<(LEDC_HPOINT_LSCH6_S)) +#define LEDC_HPOINT_LSCH6_V 0xFFFFF +#define LEDC_HPOINT_LSCH6_S 0 + +#define LEDC_LSCH6_DUTY_REG (DR_REG_LEDC_BASE + 0x0120) +/* LEDC_DUTY_LSCH6 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When lstimerx(x=[0 + 3]) choosed by low speed channel6 has reached reg_lpoint_lsch6 the output signal changes to low. reg_lpoint_lsch6=(reg_hpoint_lsch6[19:0]+reg_duty_lsch6[24:4]) (1) reg_lpoint_lsch6=(reg_hpoint_lsch6[19:0]+reg_duty_lsch6[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_LSCH6 0x01FFFFFF +#define LEDC_DUTY_LSCH6_M ((LEDC_DUTY_LSCH6_V)<<(LEDC_DUTY_LSCH6_S)) +#define LEDC_DUTY_LSCH6_V 0x1FFFFFF +#define LEDC_DUTY_LSCH6_S 0 + +#define LEDC_LSCH6_CONF1_REG (DR_REG_LEDC_BASE + 0x0124) +/* LEDC_DUTY_START_LSCH6 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch6 reg_duty_cycle_hsch6 and reg_duty_scale_hsch6 + has been configured. these register won't take effect until set reg_duty_start_hsch6. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_LSCH6 (BIT(31)) +#define LEDC_DUTY_START_LSCH6_M (BIT(31)) +#define LEDC_DUTY_START_LSCH6_V 0x1 +#define LEDC_DUTY_START_LSCH6_S 31 +/* LEDC_DUTY_INC_LSCH6 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for low speed channel6.*/ +#define LEDC_DUTY_INC_LSCH6 (BIT(30)) +#define LEDC_DUTY_INC_LSCH6_M (BIT(30)) +#define LEDC_DUTY_INC_LSCH6_V 0x1 +#define LEDC_DUTY_INC_LSCH6_S 30 +/* LEDC_DUTY_NUM_LSCH6 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for low speed channel6.*/ +#define LEDC_DUTY_NUM_LSCH6 0x000003FF +#define LEDC_DUTY_NUM_LSCH6_M ((LEDC_DUTY_NUM_LSCH6_V)<<(LEDC_DUTY_NUM_LSCH6_S)) +#define LEDC_DUTY_NUM_LSCH6_V 0x3FF +#define LEDC_DUTY_NUM_LSCH6_S 20 +/* LEDC_DUTY_CYCLE_LSCH6 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_lsch6 cycles for low speed channel6.*/ +#define LEDC_DUTY_CYCLE_LSCH6 0x000003FF +#define LEDC_DUTY_CYCLE_LSCH6_M ((LEDC_DUTY_CYCLE_LSCH6_V)<<(LEDC_DUTY_CYCLE_LSCH6_S)) +#define LEDC_DUTY_CYCLE_LSCH6_V 0x3FF +#define LEDC_DUTY_CYCLE_LSCH6_S 10 +/* LEDC_DUTY_SCALE_LSCH6 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + low speed channel6.*/ +#define LEDC_DUTY_SCALE_LSCH6 0x000003FF +#define LEDC_DUTY_SCALE_LSCH6_M ((LEDC_DUTY_SCALE_LSCH6_V)<<(LEDC_DUTY_SCALE_LSCH6_S)) +#define LEDC_DUTY_SCALE_LSCH6_V 0x3FF +#define LEDC_DUTY_SCALE_LSCH6_S 0 + +#define LEDC_LSCH6_DUTY_R_REG (DR_REG_LEDC_BASE + 0x0128) +/* LEDC_DUTY_LSCH6 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for low speed channel6.*/ +#define LEDC_DUTY_LSCH6 0x01FFFFFF +#define LEDC_DUTY_LSCH6_M ((LEDC_DUTY_LSCH6_V)<<(LEDC_DUTY_LSCH6_S)) +#define LEDC_DUTY_LSCH6_V 0x1FFFFFF +#define LEDC_DUTY_LSCH6_S 0 + +#define LEDC_LSCH7_CONF0_REG (DR_REG_LEDC_BASE + 0x012C) +/* LEDC_PARA_UP_LSCH7 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This bit is used to update register LEDC_LSCH7_HPOINT and LEDC_LSCH7_DUTY + for low speed channel7.*/ +#define LEDC_PARA_UP_LSCH7 (BIT(4)) +#define LEDC_PARA_UP_LSCH7_M (BIT(4)) +#define LEDC_PARA_UP_LSCH7_V 0x1 +#define LEDC_PARA_UP_LSCH7_S 4 +/* LEDC_IDLE_LV_LSCH7 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This bit is used to control the output value when low speed channel7 is off.*/ +#define LEDC_IDLE_LV_LSCH7 (BIT(3)) +#define LEDC_IDLE_LV_LSCH7_M (BIT(3)) +#define LEDC_IDLE_LV_LSCH7_V 0x1 +#define LEDC_IDLE_LV_LSCH7_S 3 +/* LEDC_SIG_OUT_EN_LSCH7 : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for low speed channel7.*/ +#define LEDC_SIG_OUT_EN_LSCH7 (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH7_M (BIT(2)) +#define LEDC_SIG_OUT_EN_LSCH7_V 0x1 +#define LEDC_SIG_OUT_EN_LSCH7_S 2 +/* LEDC_TIMER_SEL_LSCH7 : R/W ;bitpos:[1:0] ;default: 2'd0 ; */ +/*description: There are four low speed timers the two bits are used to select + one of them for low speed channel7. 2'b00: seletc lstimer0. 2'b01: select lstimer1. 2'b10: select lstimer2. 2'b11: select lstimer3.*/ +#define LEDC_TIMER_SEL_LSCH7 0x00000003 +#define LEDC_TIMER_SEL_LSCH7_M ((LEDC_TIMER_SEL_LSCH7_V)<<(LEDC_TIMER_SEL_LSCH7_S)) +#define LEDC_TIMER_SEL_LSCH7_V 0x3 +#define LEDC_TIMER_SEL_LSCH7_S 0 + +#define LEDC_LSCH7_HPOINT_REG (DR_REG_LEDC_BASE + 0x0130) +/* LEDC_HPOINT_LSCH7 : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The output value changes to high when lstimerx(x=[0 3]) selected + by low speed channel7 has reached reg_hpoint_lsch7[19:0]*/ +#define LEDC_HPOINT_LSCH7 0x000FFFFF +#define LEDC_HPOINT_LSCH7_M ((LEDC_HPOINT_LSCH7_V)<<(LEDC_HPOINT_LSCH7_S)) +#define LEDC_HPOINT_LSCH7_V 0xFFFFF +#define LEDC_HPOINT_LSCH7_S 0 + +#define LEDC_LSCH7_DUTY_REG (DR_REG_LEDC_BASE + 0x0134) +/* LEDC_DUTY_LSCH7 : R/W ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: The register is used to control output duty. When lstimerx(x=[0 + 3]) choosed by low speed channel7 has reached reg_lpoint_lsch7 the output signal changes to low. reg_lpoint_lsch7=(reg_hpoint_lsch7[19:0]+reg_duty_lsch7[24:4]) (1) reg_lpoint_lsch7=(reg_hpoint_lsch7[19:0]+reg_duty_lsch7[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ +#define LEDC_DUTY_LSCH7 0x01FFFFFF +#define LEDC_DUTY_LSCH7_M ((LEDC_DUTY_LSCH7_V)<<(LEDC_DUTY_LSCH7_S)) +#define LEDC_DUTY_LSCH7_V 0x1FFFFFF +#define LEDC_DUTY_LSCH7_S 0 + +#define LEDC_LSCH7_CONF1_REG (DR_REG_LEDC_BASE + 0x0138) +/* LEDC_DUTY_START_LSCH7 : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: When reg_duty_num_hsch4 reg_duty_cycle_hsch4 and reg_duty_scale_hsch4 + has been configured. these register won't take effect until set reg_duty_start_hsch4. this bit is automatically cleared by hardware.*/ +#define LEDC_DUTY_START_LSCH7 (BIT(31)) +#define LEDC_DUTY_START_LSCH7_M (BIT(31)) +#define LEDC_DUTY_START_LSCH7_V 0x1 +#define LEDC_DUTY_START_LSCH7_S 31 +/* LEDC_DUTY_INC_LSCH7 : R/W ;bitpos:[30] ;default: 1'b1 ; */ +/*description: This register is used to increase the duty of output signal or + decrease the duty of output signal for low speed channel4.*/ +#define LEDC_DUTY_INC_LSCH7 (BIT(30)) +#define LEDC_DUTY_INC_LSCH7_M (BIT(30)) +#define LEDC_DUTY_INC_LSCH7_V 0x1 +#define LEDC_DUTY_INC_LSCH7_S 30 +/* LEDC_DUTY_NUM_LSCH7 : R/W ;bitpos:[29:20] ;default: 10'h0 ; */ +/*description: This register is used to control the num of increased or decreased + times for low speed channel4.*/ +#define LEDC_DUTY_NUM_LSCH7 0x000003FF +#define LEDC_DUTY_NUM_LSCH7_M ((LEDC_DUTY_NUM_LSCH7_V)<<(LEDC_DUTY_NUM_LSCH7_S)) +#define LEDC_DUTY_NUM_LSCH7_V 0x3FF +#define LEDC_DUTY_NUM_LSCH7_S 20 +/* LEDC_DUTY_CYCLE_LSCH7 : R/W ;bitpos:[19:10] ;default: 10'h0 ; */ +/*description: This register is used to increase or decrease the duty every + reg_duty_cycle_lsch7 cycles for low speed channel7.*/ +#define LEDC_DUTY_CYCLE_LSCH7 0x000003FF +#define LEDC_DUTY_CYCLE_LSCH7_M ((LEDC_DUTY_CYCLE_LSCH7_V)<<(LEDC_DUTY_CYCLE_LSCH7_S)) +#define LEDC_DUTY_CYCLE_LSCH7_V 0x3FF +#define LEDC_DUTY_CYCLE_LSCH7_S 10 +/* LEDC_DUTY_SCALE_LSCH7 : R/W ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register controls the increase or decrease step scale for + low speed channel7.*/ +#define LEDC_DUTY_SCALE_LSCH7 0x000003FF +#define LEDC_DUTY_SCALE_LSCH7_M ((LEDC_DUTY_SCALE_LSCH7_V)<<(LEDC_DUTY_SCALE_LSCH7_S)) +#define LEDC_DUTY_SCALE_LSCH7_V 0x3FF +#define LEDC_DUTY_SCALE_LSCH7_S 0 + +#define LEDC_LSCH7_DUTY_R_REG (DR_REG_LEDC_BASE + 0x013C) +/* LEDC_DUTY_LSCH7 : RO ;bitpos:[24:0] ;default: 25'h0 ; */ +/*description: This register represents the current duty of the output signal + for low speed channel7.*/ +#define LEDC_DUTY_LSCH7 0x01FFFFFF +#define LEDC_DUTY_LSCH7_M ((LEDC_DUTY_LSCH7_V)<<(LEDC_DUTY_LSCH7_S)) +#define LEDC_DUTY_LSCH7_V 0x1FFFFFF +#define LEDC_DUTY_LSCH7_S 0 + +#define LEDC_HSTIMER0_CONF_REG (DR_REG_LEDC_BASE + 0x0140) +/* LEDC_TICK_SEL_HSTIMER0 : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: This bit is used to choose apb_clk or ref_tick for high speed + timer0. 1'b1:apb_clk 0:ref_tick*/ +#define LEDC_TICK_SEL_HSTIMER0 (BIT(25)) +#define LEDC_TICK_SEL_HSTIMER0_M (BIT(25)) +#define LEDC_TICK_SEL_HSTIMER0_V 0x1 +#define LEDC_TICK_SEL_HSTIMER0_S 25 +/* LEDC_HSTIMER0_RST : R/W ;bitpos:[24] ;default: 1'b1 ; */ +/*description: This bit is used to reset high speed timer0 the counter will be 0 after reset.*/ +#define LEDC_HSTIMER0_RST (BIT(24)) +#define LEDC_HSTIMER0_RST_M (BIT(24)) +#define LEDC_HSTIMER0_RST_V 0x1 +#define LEDC_HSTIMER0_RST_S 24 +/* LEDC_HSTIMER0_PAUSE : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: This bit is used to pause the counter in high speed timer0*/ +#define LEDC_HSTIMER0_PAUSE (BIT(23)) +#define LEDC_HSTIMER0_PAUSE_M (BIT(23)) +#define LEDC_HSTIMER0_PAUSE_V 0x1 +#define LEDC_HSTIMER0_PAUSE_S 23 +/* LEDC_DIV_NUM_HSTIMER0 : R/W ;bitpos:[22:5] ;default: 18'h0 ; */ +/*description: This register is used to configure parameter for divider in high + speed timer0 the least significant eight bits represent the decimal part.*/ +#define LEDC_DIV_NUM_HSTIMER0 0x0003FFFF +#define LEDC_DIV_NUM_HSTIMER0_M ((LEDC_DIV_NUM_HSTIMER0_V)<<(LEDC_DIV_NUM_HSTIMER0_S)) +#define LEDC_DIV_NUM_HSTIMER0_V 0x3FFFF +#define LEDC_DIV_NUM_HSTIMER0_S 5 +/* LEDC_HSTIMER0_LIM : R/W ;bitpos:[4:0] ;default: 5'h0 ; */ +/*description: This register controls the range of the counter in high speed + timer0. the counter range is [0 2**reg_hstimer0_lim] the max bit width for counter is 20.*/ +#define LEDC_HSTIMER0_LIM 0x0000001F +#define LEDC_HSTIMER0_LIM_M ((LEDC_HSTIMER0_LIM_V)<<(LEDC_HSTIMER0_LIM_S)) +#define LEDC_HSTIMER0_LIM_V 0x1F +#define LEDC_HSTIMER0_LIM_S 0 + +#define LEDC_HSTIMER0_VALUE_REG (DR_REG_LEDC_BASE + 0x0144) +/* LEDC_HSTIMER0_CNT : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: software can read this register to get the current counter value + in high speed timer0*/ +#define LEDC_HSTIMER0_CNT 0x000FFFFF +#define LEDC_HSTIMER0_CNT_M ((LEDC_HSTIMER0_CNT_V)<<(LEDC_HSTIMER0_CNT_S)) +#define LEDC_HSTIMER0_CNT_V 0xFFFFF +#define LEDC_HSTIMER0_CNT_S 0 + +#define LEDC_HSTIMER1_CONF_REG (DR_REG_LEDC_BASE + 0x0148) +/* LEDC_TICK_SEL_HSTIMER1 : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: This bit is used to choose apb_clk or ref_tick for high speed + timer1. 1'b1:apb_clk 0:ref_tick*/ +#define LEDC_TICK_SEL_HSTIMER1 (BIT(25)) +#define LEDC_TICK_SEL_HSTIMER1_M (BIT(25)) +#define LEDC_TICK_SEL_HSTIMER1_V 0x1 +#define LEDC_TICK_SEL_HSTIMER1_S 25 +/* LEDC_HSTIMER1_RST : R/W ;bitpos:[24] ;default: 1'b1 ; */ +/*description: This bit is used to reset high speed timer1 the counter will be 0 after reset.*/ +#define LEDC_HSTIMER1_RST (BIT(24)) +#define LEDC_HSTIMER1_RST_M (BIT(24)) +#define LEDC_HSTIMER1_RST_V 0x1 +#define LEDC_HSTIMER1_RST_S 24 +/* LEDC_HSTIMER1_PAUSE : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: This bit is used to pause the counter in high speed timer1*/ +#define LEDC_HSTIMER1_PAUSE (BIT(23)) +#define LEDC_HSTIMER1_PAUSE_M (BIT(23)) +#define LEDC_HSTIMER1_PAUSE_V 0x1 +#define LEDC_HSTIMER1_PAUSE_S 23 +/* LEDC_DIV_NUM_HSTIMER1 : R/W ;bitpos:[22:5] ;default: 18'h0 ; */ +/*description: This register is used to configure parameter for divider in high + speed timer1 the least significant eight bits represent the decimal part.*/ +#define LEDC_DIV_NUM_HSTIMER1 0x0003FFFF +#define LEDC_DIV_NUM_HSTIMER1_M ((LEDC_DIV_NUM_HSTIMER1_V)<<(LEDC_DIV_NUM_HSTIMER1_S)) +#define LEDC_DIV_NUM_HSTIMER1_V 0x3FFFF +#define LEDC_DIV_NUM_HSTIMER1_S 5 +/* LEDC_HSTIMER1_LIM : R/W ;bitpos:[4:0] ;default: 5'h0 ; */ +/*description: This register controls the range of the counter in high speed + timer1. the counter range is [0 2**reg_hstimer1_lim] the max bit width for counter is 20.*/ +#define LEDC_HSTIMER1_LIM 0x0000001F +#define LEDC_HSTIMER1_LIM_M ((LEDC_HSTIMER1_LIM_V)<<(LEDC_HSTIMER1_LIM_S)) +#define LEDC_HSTIMER1_LIM_V 0x1F +#define LEDC_HSTIMER1_LIM_S 0 + +#define LEDC_HSTIMER1_VALUE_REG (DR_REG_LEDC_BASE + 0x014C) +/* LEDC_HSTIMER1_CNT : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: software can read this register to get the current counter value + in high speed timer1.*/ +#define LEDC_HSTIMER1_CNT 0x000FFFFF +#define LEDC_HSTIMER1_CNT_M ((LEDC_HSTIMER1_CNT_V)<<(LEDC_HSTIMER1_CNT_S)) +#define LEDC_HSTIMER1_CNT_V 0xFFFFF +#define LEDC_HSTIMER1_CNT_S 0 + +#define LEDC_HSTIMER2_CONF_REG (DR_REG_LEDC_BASE + 0x0150) +/* LEDC_TICK_SEL_HSTIMER2 : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: This bit is used to choose apb_clk or ref_tick for high speed + timer2. 1'b1:apb_clk 0:ref_tick*/ +#define LEDC_TICK_SEL_HSTIMER2 (BIT(25)) +#define LEDC_TICK_SEL_HSTIMER2_M (BIT(25)) +#define LEDC_TICK_SEL_HSTIMER2_V 0x1 +#define LEDC_TICK_SEL_HSTIMER2_S 25 +/* LEDC_HSTIMER2_RST : R/W ;bitpos:[24] ;default: 1'b1 ; */ +/*description: This bit is used to reset high speed timer2 the counter will be 0 after reset.*/ +#define LEDC_HSTIMER2_RST (BIT(24)) +#define LEDC_HSTIMER2_RST_M (BIT(24)) +#define LEDC_HSTIMER2_RST_V 0x1 +#define LEDC_HSTIMER2_RST_S 24 +/* LEDC_HSTIMER2_PAUSE : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: This bit is used to pause the counter in high speed timer2*/ +#define LEDC_HSTIMER2_PAUSE (BIT(23)) +#define LEDC_HSTIMER2_PAUSE_M (BIT(23)) +#define LEDC_HSTIMER2_PAUSE_V 0x1 +#define LEDC_HSTIMER2_PAUSE_S 23 +/* LEDC_DIV_NUM_HSTIMER2 : R/W ;bitpos:[22:5] ;default: 18'h0 ; */ +/*description: This register is used to configure parameter for divider in high + speed timer2 the least significant eight bits represent the decimal part.*/ +#define LEDC_DIV_NUM_HSTIMER2 0x0003FFFF +#define LEDC_DIV_NUM_HSTIMER2_M ((LEDC_DIV_NUM_HSTIMER2_V)<<(LEDC_DIV_NUM_HSTIMER2_S)) +#define LEDC_DIV_NUM_HSTIMER2_V 0x3FFFF +#define LEDC_DIV_NUM_HSTIMER2_S 5 +/* LEDC_HSTIMER2_LIM : R/W ;bitpos:[4:0] ;default: 5'h0 ; */ +/*description: This register controls the range of the counter in high speed + timer2. the counter range is [0 2**reg_hstimer2_lim] the max bit width for counter is 20.*/ +#define LEDC_HSTIMER2_LIM 0x0000001F +#define LEDC_HSTIMER2_LIM_M ((LEDC_HSTIMER2_LIM_V)<<(LEDC_HSTIMER2_LIM_S)) +#define LEDC_HSTIMER2_LIM_V 0x1F +#define LEDC_HSTIMER2_LIM_S 0 + +#define LEDC_HSTIMER2_VALUE_REG (DR_REG_LEDC_BASE + 0x0154) +/* LEDC_HSTIMER2_CNT : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: software can read this register to get the current counter value + in high speed timer2*/ +#define LEDC_HSTIMER2_CNT 0x000FFFFF +#define LEDC_HSTIMER2_CNT_M ((LEDC_HSTIMER2_CNT_V)<<(LEDC_HSTIMER2_CNT_S)) +#define LEDC_HSTIMER2_CNT_V 0xFFFFF +#define LEDC_HSTIMER2_CNT_S 0 + +#define LEDC_HSTIMER3_CONF_REG (DR_REG_LEDC_BASE + 0x0158) +/* LEDC_TICK_SEL_HSTIMER3 : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: This bit is used to choose apb_clk or ref_tick for high speed + timer3. 1'b1:apb_clk 0:ref_tick*/ +#define LEDC_TICK_SEL_HSTIMER3 (BIT(25)) +#define LEDC_TICK_SEL_HSTIMER3_M (BIT(25)) +#define LEDC_TICK_SEL_HSTIMER3_V 0x1 +#define LEDC_TICK_SEL_HSTIMER3_S 25 +/* LEDC_HSTIMER3_RST : R/W ;bitpos:[24] ;default: 1'b1 ; */ +/*description: This bit is used to reset high speed timer3 the counter will be 0 after reset.*/ +#define LEDC_HSTIMER3_RST (BIT(24)) +#define LEDC_HSTIMER3_RST_M (BIT(24)) +#define LEDC_HSTIMER3_RST_V 0x1 +#define LEDC_HSTIMER3_RST_S 24 +/* LEDC_HSTIMER3_PAUSE : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: This bit is used to pause the counter in high speed timer3*/ +#define LEDC_HSTIMER3_PAUSE (BIT(23)) +#define LEDC_HSTIMER3_PAUSE_M (BIT(23)) +#define LEDC_HSTIMER3_PAUSE_V 0x1 +#define LEDC_HSTIMER3_PAUSE_S 23 +/* LEDC_DIV_NUM_HSTIMER3 : R/W ;bitpos:[22:5] ;default: 18'h0 ; */ +/*description: This register is used to configure parameter for divider in high + speed timer3 the least significant eight bits represent the decimal part.*/ +#define LEDC_DIV_NUM_HSTIMER3 0x0003FFFF +#define LEDC_DIV_NUM_HSTIMER3_M ((LEDC_DIV_NUM_HSTIMER3_V)<<(LEDC_DIV_NUM_HSTIMER3_S)) +#define LEDC_DIV_NUM_HSTIMER3_V 0x3FFFF +#define LEDC_DIV_NUM_HSTIMER3_S 5 +/* LEDC_HSTIMER3_LIM : R/W ;bitpos:[4:0] ;default: 5'h0 ; */ +/*description: This register controls the range of the counter in high speed + timer3. the counter range is [0 2**reg_hstimer3_lim] the max bit width for counter is 20.*/ +#define LEDC_HSTIMER3_LIM 0x0000001F +#define LEDC_HSTIMER3_LIM_M ((LEDC_HSTIMER3_LIM_V)<<(LEDC_HSTIMER3_LIM_S)) +#define LEDC_HSTIMER3_LIM_V 0x1F +#define LEDC_HSTIMER3_LIM_S 0 + +#define LEDC_HSTIMER3_VALUE_REG (DR_REG_LEDC_BASE + 0x015C) +/* LEDC_HSTIMER3_CNT : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: software can read this register to get the current counter value + in high speed timer3*/ +#define LEDC_HSTIMER3_CNT 0x000FFFFF +#define LEDC_HSTIMER3_CNT_M ((LEDC_HSTIMER3_CNT_V)<<(LEDC_HSTIMER3_CNT_S)) +#define LEDC_HSTIMER3_CNT_V 0xFFFFF +#define LEDC_HSTIMER3_CNT_S 0 + +#define LEDC_LSTIMER0_CONF_REG (DR_REG_LEDC_BASE + 0x0160) +/* LEDC_LSTIMER0_PARA_UP : R/W ;bitpos:[26] ;default: 1'h0 ; */ +/*description: Set this bit to update reg_div_num_lstime0 and reg_lstimer0_lim.*/ +#define LEDC_LSTIMER0_PARA_UP (BIT(26)) +#define LEDC_LSTIMER0_PARA_UP_M (BIT(26)) +#define LEDC_LSTIMER0_PARA_UP_V 0x1 +#define LEDC_LSTIMER0_PARA_UP_S 26 +/* LEDC_TICK_SEL_LSTIMER0 : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: This bit is used to choose slow_clk or ref_tick for low speed + timer0. 1'b1:slow_clk 0:ref_tick*/ +#define LEDC_TICK_SEL_LSTIMER0 (BIT(25)) +#define LEDC_TICK_SEL_LSTIMER0_M (BIT(25)) +#define LEDC_TICK_SEL_LSTIMER0_V 0x1 +#define LEDC_TICK_SEL_LSTIMER0_S 25 +/* LEDC_LSTIMER0_RST : R/W ;bitpos:[24] ;default: 1'b1 ; */ +/*description: This bit is used to reset low speed timer0 the counter will be 0 after reset.*/ +#define LEDC_LSTIMER0_RST (BIT(24)) +#define LEDC_LSTIMER0_RST_M (BIT(24)) +#define LEDC_LSTIMER0_RST_V 0x1 +#define LEDC_LSTIMER0_RST_S 24 +/* LEDC_LSTIMER0_PAUSE : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: This bit is used to pause the counter in low speed timer0.*/ +#define LEDC_LSTIMER0_PAUSE (BIT(23)) +#define LEDC_LSTIMER0_PAUSE_M (BIT(23)) +#define LEDC_LSTIMER0_PAUSE_V 0x1 +#define LEDC_LSTIMER0_PAUSE_S 23 +/* LEDC_DIV_NUM_LSTIMER0 : R/W ;bitpos:[22:5] ;default: 18'h0 ; */ +/*description: This register is used to configure parameter for divider in low + speed timer0 the least significant eight bits represent the decimal part.*/ +#define LEDC_DIV_NUM_LSTIMER0 0x0003FFFF +#define LEDC_DIV_NUM_LSTIMER0_M ((LEDC_DIV_NUM_LSTIMER0_V)<<(LEDC_DIV_NUM_LSTIMER0_S)) +#define LEDC_DIV_NUM_LSTIMER0_V 0x3FFFF +#define LEDC_DIV_NUM_LSTIMER0_S 5 +/* LEDC_LSTIMER0_LIM : R/W ;bitpos:[4:0] ;default: 5'h0 ; */ +/*description: This register controls the range of the counter in low speed + timer0. the counter range is [0 2**reg_lstimer0_lim] the max bit width for counter is 20.*/ +#define LEDC_LSTIMER0_LIM 0x0000001F +#define LEDC_LSTIMER0_LIM_M ((LEDC_LSTIMER0_LIM_V)<<(LEDC_LSTIMER0_LIM_S)) +#define LEDC_LSTIMER0_LIM_V 0x1F +#define LEDC_LSTIMER0_LIM_S 0 + +#define LEDC_LSTIMER0_VALUE_REG (DR_REG_LEDC_BASE + 0x0164) +/* LEDC_LSTIMER0_CNT : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: software can read this register to get the current counter value + in low speed timer0.*/ +#define LEDC_LSTIMER0_CNT 0x000FFFFF +#define LEDC_LSTIMER0_CNT_M ((LEDC_LSTIMER0_CNT_V)<<(LEDC_LSTIMER0_CNT_S)) +#define LEDC_LSTIMER0_CNT_V 0xFFFFF +#define LEDC_LSTIMER0_CNT_S 0 + +#define LEDC_LSTIMER1_CONF_REG (DR_REG_LEDC_BASE + 0x0168) +/* LEDC_LSTIMER1_PARA_UP : R/W ;bitpos:[26] ;default: 1'h0 ; */ +/*description: Set this bit to update reg_div_num_lstime1 and reg_lstimer1_lim.*/ +#define LEDC_LSTIMER1_PARA_UP (BIT(26)) +#define LEDC_LSTIMER1_PARA_UP_M (BIT(26)) +#define LEDC_LSTIMER1_PARA_UP_V 0x1 +#define LEDC_LSTIMER1_PARA_UP_S 26 +/* LEDC_TICK_SEL_LSTIMER1 : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: This bit is used to choose slow_clk or ref_tick for low speed + timer1. 1'b1:slow_clk 0:ref_tick*/ +#define LEDC_TICK_SEL_LSTIMER1 (BIT(25)) +#define LEDC_TICK_SEL_LSTIMER1_M (BIT(25)) +#define LEDC_TICK_SEL_LSTIMER1_V 0x1 +#define LEDC_TICK_SEL_LSTIMER1_S 25 +/* LEDC_LSTIMER1_RST : R/W ;bitpos:[24] ;default: 1'b1 ; */ +/*description: This bit is used to reset low speed timer1 the counter will be 0 after reset.*/ +#define LEDC_LSTIMER1_RST (BIT(24)) +#define LEDC_LSTIMER1_RST_M (BIT(24)) +#define LEDC_LSTIMER1_RST_V 0x1 +#define LEDC_LSTIMER1_RST_S 24 +/* LEDC_LSTIMER1_PAUSE : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: This bit is used to pause the counter in low speed timer1.*/ +#define LEDC_LSTIMER1_PAUSE (BIT(23)) +#define LEDC_LSTIMER1_PAUSE_M (BIT(23)) +#define LEDC_LSTIMER1_PAUSE_V 0x1 +#define LEDC_LSTIMER1_PAUSE_S 23 +/* LEDC_DIV_NUM_LSTIMER1 : R/W ;bitpos:[22:5] ;default: 18'h0 ; */ +/*description: This register is used to configure parameter for divider in low + speed timer1 the least significant eight bits represent the decimal part.*/ +#define LEDC_DIV_NUM_LSTIMER1 0x0003FFFF +#define LEDC_DIV_NUM_LSTIMER1_M ((LEDC_DIV_NUM_LSTIMER1_V)<<(LEDC_DIV_NUM_LSTIMER1_S)) +#define LEDC_DIV_NUM_LSTIMER1_V 0x3FFFF +#define LEDC_DIV_NUM_LSTIMER1_S 5 +/* LEDC_LSTIMER1_LIM : R/W ;bitpos:[4:0] ;default: 5'h0 ; */ +/*description: This register controls the range of the counter in low speed + timer1. the counter range is [0 2**reg_lstimer1_lim] the max bit width for counter is 20.*/ +#define LEDC_LSTIMER1_LIM 0x0000001F +#define LEDC_LSTIMER1_LIM_M ((LEDC_LSTIMER1_LIM_V)<<(LEDC_LSTIMER1_LIM_S)) +#define LEDC_LSTIMER1_LIM_V 0x1F +#define LEDC_LSTIMER1_LIM_S 0 + +#define LEDC_LSTIMER1_VALUE_REG (DR_REG_LEDC_BASE + 0x016C) +/* LEDC_LSTIMER1_CNT : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: software can read this register to get the current counter value + in low speed timer1.*/ +#define LEDC_LSTIMER1_CNT 0x000FFFFF +#define LEDC_LSTIMER1_CNT_M ((LEDC_LSTIMER1_CNT_V)<<(LEDC_LSTIMER1_CNT_S)) +#define LEDC_LSTIMER1_CNT_V 0xFFFFF +#define LEDC_LSTIMER1_CNT_S 0 + +#define LEDC_LSTIMER2_CONF_REG (DR_REG_LEDC_BASE + 0x0170) +/* LEDC_LSTIMER2_PARA_UP : R/W ;bitpos:[26] ;default: 1'h0 ; */ +/*description: Set this bit to update reg_div_num_lstime2 and reg_lstimer2_lim.*/ +#define LEDC_LSTIMER2_PARA_UP (BIT(26)) +#define LEDC_LSTIMER2_PARA_UP_M (BIT(26)) +#define LEDC_LSTIMER2_PARA_UP_V 0x1 +#define LEDC_LSTIMER2_PARA_UP_S 26 +/* LEDC_TICK_SEL_LSTIMER2 : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: This bit is used to choose slow_clk or ref_tick for low speed + timer2. 1'b1:slow_clk 0:ref_tick*/ +#define LEDC_TICK_SEL_LSTIMER2 (BIT(25)) +#define LEDC_TICK_SEL_LSTIMER2_M (BIT(25)) +#define LEDC_TICK_SEL_LSTIMER2_V 0x1 +#define LEDC_TICK_SEL_LSTIMER2_S 25 +/* LEDC_LSTIMER2_RST : R/W ;bitpos:[24] ;default: 1'b1 ; */ +/*description: This bit is used to reset low speed timer2 the counter will be 0 after reset.*/ +#define LEDC_LSTIMER2_RST (BIT(24)) +#define LEDC_LSTIMER2_RST_M (BIT(24)) +#define LEDC_LSTIMER2_RST_V 0x1 +#define LEDC_LSTIMER2_RST_S 24 +/* LEDC_LSTIMER2_PAUSE : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: This bit is used to pause the counter in low speed timer2.*/ +#define LEDC_LSTIMER2_PAUSE (BIT(23)) +#define LEDC_LSTIMER2_PAUSE_M (BIT(23)) +#define LEDC_LSTIMER2_PAUSE_V 0x1 +#define LEDC_LSTIMER2_PAUSE_S 23 +/* LEDC_DIV_NUM_LSTIMER2 : R/W ;bitpos:[22:5] ;default: 18'h0 ; */ +/*description: This register is used to configure parameter for divider in low + speed timer2 the least significant eight bits represent the decimal part.*/ +#define LEDC_DIV_NUM_LSTIMER2 0x0003FFFF +#define LEDC_DIV_NUM_LSTIMER2_M ((LEDC_DIV_NUM_LSTIMER2_V)<<(LEDC_DIV_NUM_LSTIMER2_S)) +#define LEDC_DIV_NUM_LSTIMER2_V 0x3FFFF +#define LEDC_DIV_NUM_LSTIMER2_S 5 +/* LEDC_LSTIMER2_LIM : R/W ;bitpos:[4:0] ;default: 5'h0 ; */ +/*description: This register controls the range of the counter in low speed + timer2. the counter range is [0 2**reg_lstimer2_lim] the max bit width for counter is 20.*/ +#define LEDC_LSTIMER2_LIM 0x0000001F +#define LEDC_LSTIMER2_LIM_M ((LEDC_LSTIMER2_LIM_V)<<(LEDC_LSTIMER2_LIM_S)) +#define LEDC_LSTIMER2_LIM_V 0x1F +#define LEDC_LSTIMER2_LIM_S 0 + +#define LEDC_LSTIMER2_VALUE_REG (DR_REG_LEDC_BASE + 0x0174) +/* LEDC_LSTIMER2_CNT : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: software can read this register to get the current counter value + in low speed timer2.*/ +#define LEDC_LSTIMER2_CNT 0x000FFFFF +#define LEDC_LSTIMER2_CNT_M ((LEDC_LSTIMER2_CNT_V)<<(LEDC_LSTIMER2_CNT_S)) +#define LEDC_LSTIMER2_CNT_V 0xFFFFF +#define LEDC_LSTIMER2_CNT_S 0 + +#define LEDC_LSTIMER3_CONF_REG (DR_REG_LEDC_BASE + 0x0178) +/* LEDC_LSTIMER3_PARA_UP : R/W ;bitpos:[26] ;default: 1'h0 ; */ +/*description: Set this bit to update reg_div_num_lstime3 and reg_lstimer3_lim.*/ +#define LEDC_LSTIMER3_PARA_UP (BIT(26)) +#define LEDC_LSTIMER3_PARA_UP_M (BIT(26)) +#define LEDC_LSTIMER3_PARA_UP_V 0x1 +#define LEDC_LSTIMER3_PARA_UP_S 26 +/* LEDC_TICK_SEL_LSTIMER3 : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: This bit is used to choose slow_clk or ref_tick for low speed + timer3. 1'b1:slow_clk 0:ref_tick*/ +#define LEDC_TICK_SEL_LSTIMER3 (BIT(25)) +#define LEDC_TICK_SEL_LSTIMER3_M (BIT(25)) +#define LEDC_TICK_SEL_LSTIMER3_V 0x1 +#define LEDC_TICK_SEL_LSTIMER3_S 25 +/* LEDC_LSTIMER3_RST : R/W ;bitpos:[24] ;default: 1'b1 ; */ +/*description: This bit is used to reset low speed timer3 the counter will be 0 after reset.*/ +#define LEDC_LSTIMER3_RST (BIT(24)) +#define LEDC_LSTIMER3_RST_M (BIT(24)) +#define LEDC_LSTIMER3_RST_V 0x1 +#define LEDC_LSTIMER3_RST_S 24 +/* LEDC_LSTIMER3_PAUSE : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: This bit is used to pause the counter in low speed timer3.*/ +#define LEDC_LSTIMER3_PAUSE (BIT(23)) +#define LEDC_LSTIMER3_PAUSE_M (BIT(23)) +#define LEDC_LSTIMER3_PAUSE_V 0x1 +#define LEDC_LSTIMER3_PAUSE_S 23 +/* LEDC_DIV_NUM_LSTIMER3 : R/W ;bitpos:[22:5] ;default: 18'h0 ; */ +/*description: This register is used to configure parameter for divider in low + speed timer3 the least significant eight bits represent the decimal part.*/ +#define LEDC_DIV_NUM_LSTIMER3 0x0003FFFF +#define LEDC_DIV_NUM_LSTIMER3_M ((LEDC_DIV_NUM_LSTIMER3_V)<<(LEDC_DIV_NUM_LSTIMER3_S)) +#define LEDC_DIV_NUM_LSTIMER3_V 0x3FFFF +#define LEDC_DIV_NUM_LSTIMER3_S 5 +/* LEDC_LSTIMER3_LIM : R/W ;bitpos:[4:0] ;default: 5'h0 ; */ +/*description: This register controls the range of the counter in low speed + timer3. the counter range is [0 2**reg_lstimer3_lim] the max bit width for counter is 20.*/ +#define LEDC_LSTIMER3_LIM 0x0000001F +#define LEDC_LSTIMER3_LIM_M ((LEDC_LSTIMER3_LIM_V)<<(LEDC_LSTIMER3_LIM_S)) +#define LEDC_LSTIMER3_LIM_V 0x1F +#define LEDC_LSTIMER3_LIM_S 0 + +#define LEDC_LSTIMER3_VALUE_REG (DR_REG_LEDC_BASE + 0x017C) +/* LEDC_LSTIMER3_CNT : RO ;bitpos:[19:0] ;default: 20'b0 ; */ +/*description: software can read this register to get the current counter value + in low speed timer3.*/ +#define LEDC_LSTIMER3_CNT 0x000FFFFF +#define LEDC_LSTIMER3_CNT_M ((LEDC_LSTIMER3_CNT_V)<<(LEDC_LSTIMER3_CNT_S)) +#define LEDC_LSTIMER3_CNT_V 0xFFFFF +#define LEDC_LSTIMER3_CNT_S 0 + +#define LEDC_INT_RAW_REG (DR_REG_LEDC_BASE + 0x0180) +/* LEDC_DUTY_CHNG_END_LSCH7_INT_RAW : RO ;bitpos:[23] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel 7 duty change done.*/ +#define LEDC_DUTY_CHNG_END_LSCH7_INT_RAW (BIT(23)) +#define LEDC_DUTY_CHNG_END_LSCH7_INT_RAW_M (BIT(23)) +#define LEDC_DUTY_CHNG_END_LSCH7_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH7_INT_RAW_S 23 +/* LEDC_DUTY_CHNG_END_LSCH6_INT_RAW : RO ;bitpos:[22] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel 6 duty change done.*/ +#define LEDC_DUTY_CHNG_END_LSCH6_INT_RAW (BIT(22)) +#define LEDC_DUTY_CHNG_END_LSCH6_INT_RAW_M (BIT(22)) +#define LEDC_DUTY_CHNG_END_LSCH6_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH6_INT_RAW_S 22 +/* LEDC_DUTY_CHNG_END_LSCH5_INT_RAW : RO ;bitpos:[21] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel 5 duty change done.*/ +#define LEDC_DUTY_CHNG_END_LSCH5_INT_RAW (BIT(21)) +#define LEDC_DUTY_CHNG_END_LSCH5_INT_RAW_M (BIT(21)) +#define LEDC_DUTY_CHNG_END_LSCH5_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH5_INT_RAW_S 21 +/* LEDC_DUTY_CHNG_END_LSCH4_INT_RAW : RO ;bitpos:[20] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel 4 duty change done.*/ +#define LEDC_DUTY_CHNG_END_LSCH4_INT_RAW (BIT(20)) +#define LEDC_DUTY_CHNG_END_LSCH4_INT_RAW_M (BIT(20)) +#define LEDC_DUTY_CHNG_END_LSCH4_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH4_INT_RAW_S 20 +/* LEDC_DUTY_CHNG_END_LSCH3_INT_RAW : RO ;bitpos:[19] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel 3 duty change done.*/ +#define LEDC_DUTY_CHNG_END_LSCH3_INT_RAW (BIT(19)) +#define LEDC_DUTY_CHNG_END_LSCH3_INT_RAW_M (BIT(19)) +#define LEDC_DUTY_CHNG_END_LSCH3_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH3_INT_RAW_S 19 +/* LEDC_DUTY_CHNG_END_LSCH2_INT_RAW : RO ;bitpos:[18] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel 2 duty change done.*/ +#define LEDC_DUTY_CHNG_END_LSCH2_INT_RAW (BIT(18)) +#define LEDC_DUTY_CHNG_END_LSCH2_INT_RAW_M (BIT(18)) +#define LEDC_DUTY_CHNG_END_LSCH2_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH2_INT_RAW_S 18 +/* LEDC_DUTY_CHNG_END_LSCH1_INT_RAW : RO ;bitpos:[17] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel 1 duty change done.*/ +#define LEDC_DUTY_CHNG_END_LSCH1_INT_RAW (BIT(17)) +#define LEDC_DUTY_CHNG_END_LSCH1_INT_RAW_M (BIT(17)) +#define LEDC_DUTY_CHNG_END_LSCH1_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH1_INT_RAW_S 17 +/* LEDC_DUTY_CHNG_END_LSCH0_INT_RAW : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel 0 duty change done.*/ +#define LEDC_DUTY_CHNG_END_LSCH0_INT_RAW (BIT(16)) +#define LEDC_DUTY_CHNG_END_LSCH0_INT_RAW_M (BIT(16)) +#define LEDC_DUTY_CHNG_END_LSCH0_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH0_INT_RAW_S 16 +/* LEDC_DUTY_CHNG_END_HSCH7_INT_RAW : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel 7 duty change done.*/ +#define LEDC_DUTY_CHNG_END_HSCH7_INT_RAW (BIT(15)) +#define LEDC_DUTY_CHNG_END_HSCH7_INT_RAW_M (BIT(15)) +#define LEDC_DUTY_CHNG_END_HSCH7_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH7_INT_RAW_S 15 +/* LEDC_DUTY_CHNG_END_HSCH6_INT_RAW : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel 6 duty change done.*/ +#define LEDC_DUTY_CHNG_END_HSCH6_INT_RAW (BIT(14)) +#define LEDC_DUTY_CHNG_END_HSCH6_INT_RAW_M (BIT(14)) +#define LEDC_DUTY_CHNG_END_HSCH6_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH6_INT_RAW_S 14 +/* LEDC_DUTY_CHNG_END_HSCH5_INT_RAW : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel 5 duty change done.*/ +#define LEDC_DUTY_CHNG_END_HSCH5_INT_RAW (BIT(13)) +#define LEDC_DUTY_CHNG_END_HSCH5_INT_RAW_M (BIT(13)) +#define LEDC_DUTY_CHNG_END_HSCH5_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH5_INT_RAW_S 13 +/* LEDC_DUTY_CHNG_END_HSCH4_INT_RAW : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel 4 duty change done.*/ +#define LEDC_DUTY_CHNG_END_HSCH4_INT_RAW (BIT(12)) +#define LEDC_DUTY_CHNG_END_HSCH4_INT_RAW_M (BIT(12)) +#define LEDC_DUTY_CHNG_END_HSCH4_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH4_INT_RAW_S 12 +/* LEDC_DUTY_CHNG_END_HSCH3_INT_RAW : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel 3 duty change done.*/ +#define LEDC_DUTY_CHNG_END_HSCH3_INT_RAW (BIT(11)) +#define LEDC_DUTY_CHNG_END_HSCH3_INT_RAW_M (BIT(11)) +#define LEDC_DUTY_CHNG_END_HSCH3_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH3_INT_RAW_S 11 +/* LEDC_DUTY_CHNG_END_HSCH2_INT_RAW : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel 2 duty change done.*/ +#define LEDC_DUTY_CHNG_END_HSCH2_INT_RAW (BIT(10)) +#define LEDC_DUTY_CHNG_END_HSCH2_INT_RAW_M (BIT(10)) +#define LEDC_DUTY_CHNG_END_HSCH2_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH2_INT_RAW_S 10 +/* LEDC_DUTY_CHNG_END_HSCH1_INT_RAW : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel 1 duty change done.*/ +#define LEDC_DUTY_CHNG_END_HSCH1_INT_RAW (BIT(9)) +#define LEDC_DUTY_CHNG_END_HSCH1_INT_RAW_M (BIT(9)) +#define LEDC_DUTY_CHNG_END_HSCH1_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH1_INT_RAW_S 9 +/* LEDC_DUTY_CHNG_END_HSCH0_INT_RAW : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel 0 duty change done.*/ +#define LEDC_DUTY_CHNG_END_HSCH0_INT_RAW (BIT(8)) +#define LEDC_DUTY_CHNG_END_HSCH0_INT_RAW_M (BIT(8)) +#define LEDC_DUTY_CHNG_END_HSCH0_INT_RAW_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH0_INT_RAW_S 8 +/* LEDC_LSTIMER3_OVF_INT_RAW : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel3 counter overflow.*/ +#define LEDC_LSTIMER3_OVF_INT_RAW (BIT(7)) +#define LEDC_LSTIMER3_OVF_INT_RAW_M (BIT(7)) +#define LEDC_LSTIMER3_OVF_INT_RAW_V 0x1 +#define LEDC_LSTIMER3_OVF_INT_RAW_S 7 +/* LEDC_LSTIMER2_OVF_INT_RAW : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel2 counter overflow.*/ +#define LEDC_LSTIMER2_OVF_INT_RAW (BIT(6)) +#define LEDC_LSTIMER2_OVF_INT_RAW_M (BIT(6)) +#define LEDC_LSTIMER2_OVF_INT_RAW_V 0x1 +#define LEDC_LSTIMER2_OVF_INT_RAW_S 6 +/* LEDC_LSTIMER1_OVF_INT_RAW : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel1 counter overflow.*/ +#define LEDC_LSTIMER1_OVF_INT_RAW (BIT(5)) +#define LEDC_LSTIMER1_OVF_INT_RAW_M (BIT(5)) +#define LEDC_LSTIMER1_OVF_INT_RAW_V 0x1 +#define LEDC_LSTIMER1_OVF_INT_RAW_S 5 +/* LEDC_LSTIMER0_OVF_INT_RAW : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for low speed channel0 counter overflow.*/ +#define LEDC_LSTIMER0_OVF_INT_RAW (BIT(4)) +#define LEDC_LSTIMER0_OVF_INT_RAW_M (BIT(4)) +#define LEDC_LSTIMER0_OVF_INT_RAW_V 0x1 +#define LEDC_LSTIMER0_OVF_INT_RAW_S 4 +/* LEDC_HSTIMER3_OVF_INT_RAW : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel3 counter overflow.*/ +#define LEDC_HSTIMER3_OVF_INT_RAW (BIT(3)) +#define LEDC_HSTIMER3_OVF_INT_RAW_M (BIT(3)) +#define LEDC_HSTIMER3_OVF_INT_RAW_V 0x1 +#define LEDC_HSTIMER3_OVF_INT_RAW_S 3 +/* LEDC_HSTIMER2_OVF_INT_RAW : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel2 counter overflow.*/ +#define LEDC_HSTIMER2_OVF_INT_RAW (BIT(2)) +#define LEDC_HSTIMER2_OVF_INT_RAW_M (BIT(2)) +#define LEDC_HSTIMER2_OVF_INT_RAW_V 0x1 +#define LEDC_HSTIMER2_OVF_INT_RAW_S 2 +/* LEDC_HSTIMER1_OVF_INT_RAW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel1 counter overflow.*/ +#define LEDC_HSTIMER1_OVF_INT_RAW (BIT(1)) +#define LEDC_HSTIMER1_OVF_INT_RAW_M (BIT(1)) +#define LEDC_HSTIMER1_OVF_INT_RAW_V 0x1 +#define LEDC_HSTIMER1_OVF_INT_RAW_S 1 +/* LEDC_HSTIMER0_OVF_INT_RAW : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for high speed channel0 counter overflow.*/ +#define LEDC_HSTIMER0_OVF_INT_RAW (BIT(0)) +#define LEDC_HSTIMER0_OVF_INT_RAW_M (BIT(0)) +#define LEDC_HSTIMER0_OVF_INT_RAW_V 0x1 +#define LEDC_HSTIMER0_OVF_INT_RAW_S 0 + +#define LEDC_INT_ST_REG (DR_REG_LEDC_BASE + 0x0184) +/* LEDC_DUTY_CHNG_END_LSCH7_INT_ST : RO ;bitpos:[23] ;default: 1'h0 ; */ +/*description: The interrupt status bit for low speed channel 7 duty change done event*/ +#define LEDC_DUTY_CHNG_END_LSCH7_INT_ST (BIT(23)) +#define LEDC_DUTY_CHNG_END_LSCH7_INT_ST_M (BIT(23)) +#define LEDC_DUTY_CHNG_END_LSCH7_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH7_INT_ST_S 23 +/* LEDC_DUTY_CHNG_END_LSCH6_INT_ST : RO ;bitpos:[22] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel 6 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_LSCH6_INT_ST (BIT(22)) +#define LEDC_DUTY_CHNG_END_LSCH6_INT_ST_M (BIT(22)) +#define LEDC_DUTY_CHNG_END_LSCH6_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH6_INT_ST_S 22 +/* LEDC_DUTY_CHNG_END_LSCH5_INT_ST : RO ;bitpos:[21] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel 5 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_LSCH5_INT_ST (BIT(21)) +#define LEDC_DUTY_CHNG_END_LSCH5_INT_ST_M (BIT(21)) +#define LEDC_DUTY_CHNG_END_LSCH5_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH5_INT_ST_S 21 +/* LEDC_DUTY_CHNG_END_LSCH4_INT_ST : RO ;bitpos:[20] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel 4 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_LSCH4_INT_ST (BIT(20)) +#define LEDC_DUTY_CHNG_END_LSCH4_INT_ST_M (BIT(20)) +#define LEDC_DUTY_CHNG_END_LSCH4_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH4_INT_ST_S 20 +/* LEDC_DUTY_CHNG_END_LSCH3_INT_ST : RO ;bitpos:[19] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel 3 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_LSCH3_INT_ST (BIT(19)) +#define LEDC_DUTY_CHNG_END_LSCH3_INT_ST_M (BIT(19)) +#define LEDC_DUTY_CHNG_END_LSCH3_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH3_INT_ST_S 19 +/* LEDC_DUTY_CHNG_END_LSCH2_INT_ST : RO ;bitpos:[18] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel 2 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_LSCH2_INT_ST (BIT(18)) +#define LEDC_DUTY_CHNG_END_LSCH2_INT_ST_M (BIT(18)) +#define LEDC_DUTY_CHNG_END_LSCH2_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH2_INT_ST_S 18 +/* LEDC_DUTY_CHNG_END_LSCH1_INT_ST : RO ;bitpos:[17] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel 1 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_LSCH1_INT_ST (BIT(17)) +#define LEDC_DUTY_CHNG_END_LSCH1_INT_ST_M (BIT(17)) +#define LEDC_DUTY_CHNG_END_LSCH1_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH1_INT_ST_S 17 +/* LEDC_DUTY_CHNG_END_LSCH0_INT_ST : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel 0 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_LSCH0_INT_ST (BIT(16)) +#define LEDC_DUTY_CHNG_END_LSCH0_INT_ST_M (BIT(16)) +#define LEDC_DUTY_CHNG_END_LSCH0_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH0_INT_ST_S 16 +/* LEDC_DUTY_CHNG_END_HSCH7_INT_ST : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel 7 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_HSCH7_INT_ST (BIT(15)) +#define LEDC_DUTY_CHNG_END_HSCH7_INT_ST_M (BIT(15)) +#define LEDC_DUTY_CHNG_END_HSCH7_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH7_INT_ST_S 15 +/* LEDC_DUTY_CHNG_END_HSCH6_INT_ST : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel 6 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_HSCH6_INT_ST (BIT(14)) +#define LEDC_DUTY_CHNG_END_HSCH6_INT_ST_M (BIT(14)) +#define LEDC_DUTY_CHNG_END_HSCH6_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH6_INT_ST_S 14 +/* LEDC_DUTY_CHNG_END_HSCH5_INT_ST : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel 5 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_HSCH5_INT_ST (BIT(13)) +#define LEDC_DUTY_CHNG_END_HSCH5_INT_ST_M (BIT(13)) +#define LEDC_DUTY_CHNG_END_HSCH5_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH5_INT_ST_S 13 +/* LEDC_DUTY_CHNG_END_HSCH4_INT_ST : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel 4 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_HSCH4_INT_ST (BIT(12)) +#define LEDC_DUTY_CHNG_END_HSCH4_INT_ST_M (BIT(12)) +#define LEDC_DUTY_CHNG_END_HSCH4_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH4_INT_ST_S 12 +/* LEDC_DUTY_CHNG_END_HSCH3_INT_ST : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel 3 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_HSCH3_INT_ST (BIT(11)) +#define LEDC_DUTY_CHNG_END_HSCH3_INT_ST_M (BIT(11)) +#define LEDC_DUTY_CHNG_END_HSCH3_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH3_INT_ST_S 11 +/* LEDC_DUTY_CHNG_END_HSCH2_INT_ST : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel 2 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_HSCH2_INT_ST (BIT(10)) +#define LEDC_DUTY_CHNG_END_HSCH2_INT_ST_M (BIT(10)) +#define LEDC_DUTY_CHNG_END_HSCH2_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH2_INT_ST_S 10 +/* LEDC_DUTY_CHNG_END_HSCH1_INT_ST : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel 1 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_HSCH1_INT_ST (BIT(9)) +#define LEDC_DUTY_CHNG_END_HSCH1_INT_ST_M (BIT(9)) +#define LEDC_DUTY_CHNG_END_HSCH1_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH1_INT_ST_S 9 +/* LEDC_DUTY_CHNG_END_HSCH0_INT_ST : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel 0 duty change done event.*/ +#define LEDC_DUTY_CHNG_END_HSCH0_INT_ST (BIT(8)) +#define LEDC_DUTY_CHNG_END_HSCH0_INT_ST_M (BIT(8)) +#define LEDC_DUTY_CHNG_END_HSCH0_INT_ST_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH0_INT_ST_S 8 +/* LEDC_LSTIMER3_OVF_INT_ST : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel3 counter overflow event.*/ +#define LEDC_LSTIMER3_OVF_INT_ST (BIT(7)) +#define LEDC_LSTIMER3_OVF_INT_ST_M (BIT(7)) +#define LEDC_LSTIMER3_OVF_INT_ST_V 0x1 +#define LEDC_LSTIMER3_OVF_INT_ST_S 7 +/* LEDC_LSTIMER2_OVF_INT_ST : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel2 counter overflow event.*/ +#define LEDC_LSTIMER2_OVF_INT_ST (BIT(6)) +#define LEDC_LSTIMER2_OVF_INT_ST_M (BIT(6)) +#define LEDC_LSTIMER2_OVF_INT_ST_V 0x1 +#define LEDC_LSTIMER2_OVF_INT_ST_S 6 +/* LEDC_LSTIMER1_OVF_INT_ST : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel1 counter overflow event.*/ +#define LEDC_LSTIMER1_OVF_INT_ST (BIT(5)) +#define LEDC_LSTIMER1_OVF_INT_ST_M (BIT(5)) +#define LEDC_LSTIMER1_OVF_INT_ST_V 0x1 +#define LEDC_LSTIMER1_OVF_INT_ST_S 5 +/* LEDC_LSTIMER0_OVF_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The interrupt status bit for low speed channel0 counter overflow event.*/ +#define LEDC_LSTIMER0_OVF_INT_ST (BIT(4)) +#define LEDC_LSTIMER0_OVF_INT_ST_M (BIT(4)) +#define LEDC_LSTIMER0_OVF_INT_ST_V 0x1 +#define LEDC_LSTIMER0_OVF_INT_ST_S 4 +/* LEDC_HSTIMER3_OVF_INT_ST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel3 counter overflow event.*/ +#define LEDC_HSTIMER3_OVF_INT_ST (BIT(3)) +#define LEDC_HSTIMER3_OVF_INT_ST_M (BIT(3)) +#define LEDC_HSTIMER3_OVF_INT_ST_V 0x1 +#define LEDC_HSTIMER3_OVF_INT_ST_S 3 +/* LEDC_HSTIMER2_OVF_INT_ST : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel2 counter overflow event.*/ +#define LEDC_HSTIMER2_OVF_INT_ST (BIT(2)) +#define LEDC_HSTIMER2_OVF_INT_ST_M (BIT(2)) +#define LEDC_HSTIMER2_OVF_INT_ST_V 0x1 +#define LEDC_HSTIMER2_OVF_INT_ST_S 2 +/* LEDC_HSTIMER1_OVF_INT_ST : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel1 counter overflow event.*/ +#define LEDC_HSTIMER1_OVF_INT_ST (BIT(1)) +#define LEDC_HSTIMER1_OVF_INT_ST_M (BIT(1)) +#define LEDC_HSTIMER1_OVF_INT_ST_V 0x1 +#define LEDC_HSTIMER1_OVF_INT_ST_S 1 +/* LEDC_HSTIMER0_OVF_INT_ST : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The interrupt status bit for high speed channel0 counter overflow event.*/ +#define LEDC_HSTIMER0_OVF_INT_ST (BIT(0)) +#define LEDC_HSTIMER0_OVF_INT_ST_M (BIT(0)) +#define LEDC_HSTIMER0_OVF_INT_ST_V 0x1 +#define LEDC_HSTIMER0_OVF_INT_ST_S 0 + +#define LEDC_INT_ENA_REG (DR_REG_LEDC_BASE + 0x0188) +/* LEDC_DUTY_CHNG_END_LSCH7_INT_ENA : R/W ;bitpos:[23] ;default: 1'h0 ; */ +/*description: The interrupt enable bit for low speed channel 7 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH7_INT_ENA (BIT(23)) +#define LEDC_DUTY_CHNG_END_LSCH7_INT_ENA_M (BIT(23)) +#define LEDC_DUTY_CHNG_END_LSCH7_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH7_INT_ENA_S 23 +/* LEDC_DUTY_CHNG_END_LSCH6_INT_ENA : R/W ;bitpos:[22] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel 6 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH6_INT_ENA (BIT(22)) +#define LEDC_DUTY_CHNG_END_LSCH6_INT_ENA_M (BIT(22)) +#define LEDC_DUTY_CHNG_END_LSCH6_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH6_INT_ENA_S 22 +/* LEDC_DUTY_CHNG_END_LSCH5_INT_ENA : R/W ;bitpos:[21] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel 5 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH5_INT_ENA (BIT(21)) +#define LEDC_DUTY_CHNG_END_LSCH5_INT_ENA_M (BIT(21)) +#define LEDC_DUTY_CHNG_END_LSCH5_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH5_INT_ENA_S 21 +/* LEDC_DUTY_CHNG_END_LSCH4_INT_ENA : R/W ;bitpos:[20] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel 4 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH4_INT_ENA (BIT(20)) +#define LEDC_DUTY_CHNG_END_LSCH4_INT_ENA_M (BIT(20)) +#define LEDC_DUTY_CHNG_END_LSCH4_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH4_INT_ENA_S 20 +/* LEDC_DUTY_CHNG_END_LSCH3_INT_ENA : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel 3 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH3_INT_ENA (BIT(19)) +#define LEDC_DUTY_CHNG_END_LSCH3_INT_ENA_M (BIT(19)) +#define LEDC_DUTY_CHNG_END_LSCH3_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH3_INT_ENA_S 19 +/* LEDC_DUTY_CHNG_END_LSCH2_INT_ENA : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel 2 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH2_INT_ENA (BIT(18)) +#define LEDC_DUTY_CHNG_END_LSCH2_INT_ENA_M (BIT(18)) +#define LEDC_DUTY_CHNG_END_LSCH2_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH2_INT_ENA_S 18 +/* LEDC_DUTY_CHNG_END_LSCH1_INT_ENA : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel 1 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH1_INT_ENA (BIT(17)) +#define LEDC_DUTY_CHNG_END_LSCH1_INT_ENA_M (BIT(17)) +#define LEDC_DUTY_CHNG_END_LSCH1_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH1_INT_ENA_S 17 +/* LEDC_DUTY_CHNG_END_LSCH0_INT_ENA : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel 0 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH0_INT_ENA (BIT(16)) +#define LEDC_DUTY_CHNG_END_LSCH0_INT_ENA_M (BIT(16)) +#define LEDC_DUTY_CHNG_END_LSCH0_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH0_INT_ENA_S 16 +/* LEDC_DUTY_CHNG_END_HSCH7_INT_ENA : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel 7 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH7_INT_ENA (BIT(15)) +#define LEDC_DUTY_CHNG_END_HSCH7_INT_ENA_M (BIT(15)) +#define LEDC_DUTY_CHNG_END_HSCH7_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH7_INT_ENA_S 15 +/* LEDC_DUTY_CHNG_END_HSCH6_INT_ENA : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel 6 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH6_INT_ENA (BIT(14)) +#define LEDC_DUTY_CHNG_END_HSCH6_INT_ENA_M (BIT(14)) +#define LEDC_DUTY_CHNG_END_HSCH6_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH6_INT_ENA_S 14 +/* LEDC_DUTY_CHNG_END_HSCH5_INT_ENA : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel 5 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH5_INT_ENA (BIT(13)) +#define LEDC_DUTY_CHNG_END_HSCH5_INT_ENA_M (BIT(13)) +#define LEDC_DUTY_CHNG_END_HSCH5_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH5_INT_ENA_S 13 +/* LEDC_DUTY_CHNG_END_HSCH4_INT_ENA : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel 4 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH4_INT_ENA (BIT(12)) +#define LEDC_DUTY_CHNG_END_HSCH4_INT_ENA_M (BIT(12)) +#define LEDC_DUTY_CHNG_END_HSCH4_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH4_INT_ENA_S 12 +/* LEDC_DUTY_CHNG_END_HSCH3_INT_ENA : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel 3 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH3_INT_ENA (BIT(11)) +#define LEDC_DUTY_CHNG_END_HSCH3_INT_ENA_M (BIT(11)) +#define LEDC_DUTY_CHNG_END_HSCH3_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH3_INT_ENA_S 11 +/* LEDC_DUTY_CHNG_END_HSCH2_INT_ENA : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel 2 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH2_INT_ENA (BIT(10)) +#define LEDC_DUTY_CHNG_END_HSCH2_INT_ENA_M (BIT(10)) +#define LEDC_DUTY_CHNG_END_HSCH2_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH2_INT_ENA_S 10 +/* LEDC_DUTY_CHNG_END_HSCH1_INT_ENA : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel 1 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH1_INT_ENA (BIT(9)) +#define LEDC_DUTY_CHNG_END_HSCH1_INT_ENA_M (BIT(9)) +#define LEDC_DUTY_CHNG_END_HSCH1_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH1_INT_ENA_S 9 +/* LEDC_DUTY_CHNG_END_HSCH0_INT_ENA : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel 0 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH0_INT_ENA (BIT(8)) +#define LEDC_DUTY_CHNG_END_HSCH0_INT_ENA_M (BIT(8)) +#define LEDC_DUTY_CHNG_END_HSCH0_INT_ENA_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH0_INT_ENA_S 8 +/* LEDC_LSTIMER3_OVF_INT_ENA : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel3 counter overflow interrupt.*/ +#define LEDC_LSTIMER3_OVF_INT_ENA (BIT(7)) +#define LEDC_LSTIMER3_OVF_INT_ENA_M (BIT(7)) +#define LEDC_LSTIMER3_OVF_INT_ENA_V 0x1 +#define LEDC_LSTIMER3_OVF_INT_ENA_S 7 +/* LEDC_LSTIMER2_OVF_INT_ENA : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel2 counter overflow interrupt.*/ +#define LEDC_LSTIMER2_OVF_INT_ENA (BIT(6)) +#define LEDC_LSTIMER2_OVF_INT_ENA_M (BIT(6)) +#define LEDC_LSTIMER2_OVF_INT_ENA_V 0x1 +#define LEDC_LSTIMER2_OVF_INT_ENA_S 6 +/* LEDC_LSTIMER1_OVF_INT_ENA : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel1 counter overflow interrupt.*/ +#define LEDC_LSTIMER1_OVF_INT_ENA (BIT(5)) +#define LEDC_LSTIMER1_OVF_INT_ENA_M (BIT(5)) +#define LEDC_LSTIMER1_OVF_INT_ENA_V 0x1 +#define LEDC_LSTIMER1_OVF_INT_ENA_S 5 +/* LEDC_LSTIMER0_OVF_INT_ENA : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for low speed channel0 counter overflow interrupt.*/ +#define LEDC_LSTIMER0_OVF_INT_ENA (BIT(4)) +#define LEDC_LSTIMER0_OVF_INT_ENA_M (BIT(4)) +#define LEDC_LSTIMER0_OVF_INT_ENA_V 0x1 +#define LEDC_LSTIMER0_OVF_INT_ENA_S 4 +/* LEDC_HSTIMER3_OVF_INT_ENA : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel3 counter overflow interrupt.*/ +#define LEDC_HSTIMER3_OVF_INT_ENA (BIT(3)) +#define LEDC_HSTIMER3_OVF_INT_ENA_M (BIT(3)) +#define LEDC_HSTIMER3_OVF_INT_ENA_V 0x1 +#define LEDC_HSTIMER3_OVF_INT_ENA_S 3 +/* LEDC_HSTIMER2_OVF_INT_ENA : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel2 counter overflow interrupt.*/ +#define LEDC_HSTIMER2_OVF_INT_ENA (BIT(2)) +#define LEDC_HSTIMER2_OVF_INT_ENA_M (BIT(2)) +#define LEDC_HSTIMER2_OVF_INT_ENA_V 0x1 +#define LEDC_HSTIMER2_OVF_INT_ENA_S 2 +/* LEDC_HSTIMER1_OVF_INT_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel1 counter overflow interrupt.*/ +#define LEDC_HSTIMER1_OVF_INT_ENA (BIT(1)) +#define LEDC_HSTIMER1_OVF_INT_ENA_M (BIT(1)) +#define LEDC_HSTIMER1_OVF_INT_ENA_V 0x1 +#define LEDC_HSTIMER1_OVF_INT_ENA_S 1 +/* LEDC_HSTIMER0_OVF_INT_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The interrupt enable bit for high speed channel0 counter overflow interrupt.*/ +#define LEDC_HSTIMER0_OVF_INT_ENA (BIT(0)) +#define LEDC_HSTIMER0_OVF_INT_ENA_M (BIT(0)) +#define LEDC_HSTIMER0_OVF_INT_ENA_V 0x1 +#define LEDC_HSTIMER0_OVF_INT_ENA_S 0 + +#define LEDC_INT_CLR_REG (DR_REG_LEDC_BASE + 0x018C) +/* LEDC_DUTY_CHNG_END_LSCH7_INT_CLR : WO ;bitpos:[23] ;default: 1'h0 ; */ +/*description: Set this bit to clear low speed channel 7 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH7_INT_CLR (BIT(23)) +#define LEDC_DUTY_CHNG_END_LSCH7_INT_CLR_M (BIT(23)) +#define LEDC_DUTY_CHNG_END_LSCH7_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH7_INT_CLR_S 23 +/* LEDC_DUTY_CHNG_END_LSCH6_INT_CLR : WO ;bitpos:[22] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel 6 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH6_INT_CLR (BIT(22)) +#define LEDC_DUTY_CHNG_END_LSCH6_INT_CLR_M (BIT(22)) +#define LEDC_DUTY_CHNG_END_LSCH6_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH6_INT_CLR_S 22 +/* LEDC_DUTY_CHNG_END_LSCH5_INT_CLR : WO ;bitpos:[21] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel 5 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH5_INT_CLR (BIT(21)) +#define LEDC_DUTY_CHNG_END_LSCH5_INT_CLR_M (BIT(21)) +#define LEDC_DUTY_CHNG_END_LSCH5_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH5_INT_CLR_S 21 +/* LEDC_DUTY_CHNG_END_LSCH4_INT_CLR : WO ;bitpos:[20] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel 4 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH4_INT_CLR (BIT(20)) +#define LEDC_DUTY_CHNG_END_LSCH4_INT_CLR_M (BIT(20)) +#define LEDC_DUTY_CHNG_END_LSCH4_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH4_INT_CLR_S 20 +/* LEDC_DUTY_CHNG_END_LSCH3_INT_CLR : WO ;bitpos:[19] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel 3 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH3_INT_CLR (BIT(19)) +#define LEDC_DUTY_CHNG_END_LSCH3_INT_CLR_M (BIT(19)) +#define LEDC_DUTY_CHNG_END_LSCH3_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH3_INT_CLR_S 19 +/* LEDC_DUTY_CHNG_END_LSCH2_INT_CLR : WO ;bitpos:[18] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel 2 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH2_INT_CLR (BIT(18)) +#define LEDC_DUTY_CHNG_END_LSCH2_INT_CLR_M (BIT(18)) +#define LEDC_DUTY_CHNG_END_LSCH2_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH2_INT_CLR_S 18 +/* LEDC_DUTY_CHNG_END_LSCH1_INT_CLR : WO ;bitpos:[17] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel 1 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH1_INT_CLR (BIT(17)) +#define LEDC_DUTY_CHNG_END_LSCH1_INT_CLR_M (BIT(17)) +#define LEDC_DUTY_CHNG_END_LSCH1_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH1_INT_CLR_S 17 +/* LEDC_DUTY_CHNG_END_LSCH0_INT_CLR : WO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel 0 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_LSCH0_INT_CLR (BIT(16)) +#define LEDC_DUTY_CHNG_END_LSCH0_INT_CLR_M (BIT(16)) +#define LEDC_DUTY_CHNG_END_LSCH0_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_LSCH0_INT_CLR_S 16 +/* LEDC_DUTY_CHNG_END_HSCH7_INT_CLR : WO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel 7 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH7_INT_CLR (BIT(15)) +#define LEDC_DUTY_CHNG_END_HSCH7_INT_CLR_M (BIT(15)) +#define LEDC_DUTY_CHNG_END_HSCH7_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH7_INT_CLR_S 15 +/* LEDC_DUTY_CHNG_END_HSCH6_INT_CLR : WO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel 6 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH6_INT_CLR (BIT(14)) +#define LEDC_DUTY_CHNG_END_HSCH6_INT_CLR_M (BIT(14)) +#define LEDC_DUTY_CHNG_END_HSCH6_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH6_INT_CLR_S 14 +/* LEDC_DUTY_CHNG_END_HSCH5_INT_CLR : WO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel 5 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH5_INT_CLR (BIT(13)) +#define LEDC_DUTY_CHNG_END_HSCH5_INT_CLR_M (BIT(13)) +#define LEDC_DUTY_CHNG_END_HSCH5_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH5_INT_CLR_S 13 +/* LEDC_DUTY_CHNG_END_HSCH4_INT_CLR : WO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel 4 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH4_INT_CLR (BIT(12)) +#define LEDC_DUTY_CHNG_END_HSCH4_INT_CLR_M (BIT(12)) +#define LEDC_DUTY_CHNG_END_HSCH4_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH4_INT_CLR_S 12 +/* LEDC_DUTY_CHNG_END_HSCH3_INT_CLR : WO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel 3 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH3_INT_CLR (BIT(11)) +#define LEDC_DUTY_CHNG_END_HSCH3_INT_CLR_M (BIT(11)) +#define LEDC_DUTY_CHNG_END_HSCH3_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH3_INT_CLR_S 11 +/* LEDC_DUTY_CHNG_END_HSCH2_INT_CLR : WO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel 2 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH2_INT_CLR (BIT(10)) +#define LEDC_DUTY_CHNG_END_HSCH2_INT_CLR_M (BIT(10)) +#define LEDC_DUTY_CHNG_END_HSCH2_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH2_INT_CLR_S 10 +/* LEDC_DUTY_CHNG_END_HSCH1_INT_CLR : WO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel 1 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH1_INT_CLR (BIT(9)) +#define LEDC_DUTY_CHNG_END_HSCH1_INT_CLR_M (BIT(9)) +#define LEDC_DUTY_CHNG_END_HSCH1_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH1_INT_CLR_S 9 +/* LEDC_DUTY_CHNG_END_HSCH0_INT_CLR : WO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel 0 duty change done interrupt.*/ +#define LEDC_DUTY_CHNG_END_HSCH0_INT_CLR (BIT(8)) +#define LEDC_DUTY_CHNG_END_HSCH0_INT_CLR_M (BIT(8)) +#define LEDC_DUTY_CHNG_END_HSCH0_INT_CLR_V 0x1 +#define LEDC_DUTY_CHNG_END_HSCH0_INT_CLR_S 8 +/* LEDC_LSTIMER3_OVF_INT_CLR : WO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel3 counter overflow interrupt.*/ +#define LEDC_LSTIMER3_OVF_INT_CLR (BIT(7)) +#define LEDC_LSTIMER3_OVF_INT_CLR_M (BIT(7)) +#define LEDC_LSTIMER3_OVF_INT_CLR_V 0x1 +#define LEDC_LSTIMER3_OVF_INT_CLR_S 7 +/* LEDC_LSTIMER2_OVF_INT_CLR : WO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel2 counter overflow interrupt.*/ +#define LEDC_LSTIMER2_OVF_INT_CLR (BIT(6)) +#define LEDC_LSTIMER2_OVF_INT_CLR_M (BIT(6)) +#define LEDC_LSTIMER2_OVF_INT_CLR_V 0x1 +#define LEDC_LSTIMER2_OVF_INT_CLR_S 6 +/* LEDC_LSTIMER1_OVF_INT_CLR : WO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel1 counter overflow interrupt.*/ +#define LEDC_LSTIMER1_OVF_INT_CLR (BIT(5)) +#define LEDC_LSTIMER1_OVF_INT_CLR_M (BIT(5)) +#define LEDC_LSTIMER1_OVF_INT_CLR_V 0x1 +#define LEDC_LSTIMER1_OVF_INT_CLR_S 5 +/* LEDC_LSTIMER0_OVF_INT_CLR : WO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to clear low speed channel0 counter overflow interrupt.*/ +#define LEDC_LSTIMER0_OVF_INT_CLR (BIT(4)) +#define LEDC_LSTIMER0_OVF_INT_CLR_M (BIT(4)) +#define LEDC_LSTIMER0_OVF_INT_CLR_V 0x1 +#define LEDC_LSTIMER0_OVF_INT_CLR_S 4 +/* LEDC_HSTIMER3_OVF_INT_CLR : WO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel3 counter overflow interrupt.*/ +#define LEDC_HSTIMER3_OVF_INT_CLR (BIT(3)) +#define LEDC_HSTIMER3_OVF_INT_CLR_M (BIT(3)) +#define LEDC_HSTIMER3_OVF_INT_CLR_V 0x1 +#define LEDC_HSTIMER3_OVF_INT_CLR_S 3 +/* LEDC_HSTIMER2_OVF_INT_CLR : WO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel2 counter overflow interrupt.*/ +#define LEDC_HSTIMER2_OVF_INT_CLR (BIT(2)) +#define LEDC_HSTIMER2_OVF_INT_CLR_M (BIT(2)) +#define LEDC_HSTIMER2_OVF_INT_CLR_V 0x1 +#define LEDC_HSTIMER2_OVF_INT_CLR_S 2 +/* LEDC_HSTIMER1_OVF_INT_CLR : WO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel1 counter overflow interrupt.*/ +#define LEDC_HSTIMER1_OVF_INT_CLR (BIT(1)) +#define LEDC_HSTIMER1_OVF_INT_CLR_M (BIT(1)) +#define LEDC_HSTIMER1_OVF_INT_CLR_V 0x1 +#define LEDC_HSTIMER1_OVF_INT_CLR_S 1 +/* LEDC_HSTIMER0_OVF_INT_CLR : WO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Set this bit to clear high speed channel0 counter overflow interrupt.*/ +#define LEDC_HSTIMER0_OVF_INT_CLR (BIT(0)) +#define LEDC_HSTIMER0_OVF_INT_CLR_M (BIT(0)) +#define LEDC_HSTIMER0_OVF_INT_CLR_V 0x1 +#define LEDC_HSTIMER0_OVF_INT_CLR_S 0 + +#define LEDC_CONF_REG (DR_REG_LEDC_BASE + 0x0190) +/* LEDC_APB_CLK_SEL : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: This bit is used to set the frequency of slow_clk. 1'b1:80mhz 1'b0:8mhz*/ +#define LEDC_APB_CLK_SEL (BIT(0)) +#define LEDC_APB_CLK_SEL_M (BIT(0)) +#define LEDC_APB_CLK_SEL_V 0x1 +#define LEDC_APB_CLK_SEL_S 0 + +#define LEDC_DATE_REG (DR_REG_LEDC_BASE + 0x01FC) +/* LEDC_DATE : R/W ;bitpos:[31:0] ;default: 32'h16031700 ; */ +/*description: This register represents the version .*/ +#define LEDC_DATE 0xFFFFFFFF +#define LEDC_DATE_M ((LEDC_DATE_V)<<(LEDC_DATE_S)) +#define LEDC_DATE_V 0xFFFFFFFF +#define LEDC_DATE_S 0 + + + + +#endif /*_SOC_LEDC_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/ledc_struct.h b/tools/sdk/include/esp32/soc/ledc_struct.h new file mode 100644 index 00000000..d119289a --- /dev/null +++ b/tools/sdk/include/esp32/soc/ledc_struct.h @@ -0,0 +1,240 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_LEDC_STRUCT_H_ +#define _SOC_LEDC_STRUCT_H_ +typedef volatile struct { + struct { + struct { + union { + struct { + uint32_t timer_sel: 2; /*There are four high speed timers the two bits are used to select one of them for high speed channel. 2'b00: seletc hstimer0. 2'b01: select hstimer1. 2'b10: select hstimer2. 2'b11: select hstimer3.*/ + uint32_t sig_out_en: 1; /*This is the output enable control bit for high speed channel*/ + uint32_t idle_lv: 1; /*This bit is used to control the output value when high speed channel is off.*/ + uint32_t reserved4: 27; + uint32_t clk_en: 1; /*This bit is clock gating control signal. when software configure LED_PWM internal registers it controls the register clock.*/ + }; + uint32_t val; + } conf0; + union { + struct { + uint32_t hpoint: 20; /*The output value changes to high when htimerx(x=[0 3]) selected by high speed channel has reached reg_hpoint_hsch0[19:0]*/ + uint32_t reserved20: 12; + }; + uint32_t val; + } hpoint; + union { + struct { + uint32_t duty: 25; /*The register is used to control output duty. When hstimerx(x=[0 3]) chosen by high speed channel has reached reg_lpoint_hsch0 the output signal changes to low. reg_lpoint_hsch0=(reg_hpoint_hsch0[19:0]+reg_duty_hsch0[24:4]) (1) reg_lpoint_hsch0=(reg_hpoint_hsch0[19:0]+reg_duty_hsch0[24:4] +1) (2) The least four bits in this register represent the decimal part and determines when to choose (1) or (2)*/ + uint32_t reserved25: 7; + }; + uint32_t val; + } duty; + union { + struct { + uint32_t duty_scale:10; /*This register controls the increase or decrease step scale for high speed channel.*/ + uint32_t duty_cycle:10; /*This register is used to increase or decrease the duty every reg_duty_cycle_hsch0 cycles for high speed channel.*/ + uint32_t duty_num: 10; /*This register is used to control the number of increased or decreased times for high speed channel.*/ + uint32_t duty_inc: 1; /*This register is used to increase the duty of output signal or decrease the duty of output signal for high speed channel.*/ + uint32_t duty_start: 1; /*When reg_duty_num_hsch0 reg_duty_cycle_hsch0 and reg_duty_scale_hsch0 has been configured. these register won't take effect until set reg_duty_start_hsch0. this bit is automatically cleared by hardware.*/ + }; + uint32_t val; + } conf1; + union { + struct { + uint32_t duty_read: 25; /*This register represents the current duty of the output signal for high speed channel.*/ + uint32_t reserved25: 7; + }; + uint32_t val; + } duty_rd; + } channel[8]; + } channel_group[2]; /*two channel groups : 0: high-speed channels; 1: low-speed channels*/ + struct { + struct { + union { + struct { + uint32_t bit_num: 5; /*This register controls the range of the counter in high speed timer. the counter range is [0 2**reg_hstimer0_lim] the max bit width for counter is 20.*/ + uint32_t div_num: 18; /*This register is used to configure parameter for divider in high speed timer the least significant eight bits represent the decimal part.*/ + uint32_t pause: 1; /*This bit is used to pause the counter in high speed timer*/ + uint32_t rst: 1; /*This bit is used to reset high speed timer the counter will be 0 after reset.*/ + uint32_t tick_sel: 1; /*This bit is used to choose apb_clk or ref_tick for high speed timer. 1'b1:apb_clk 0:ref_tick*/ + uint32_t low_speed_update: 1; /*This bit is only useful for low speed timer channels, reserved for high speed timers*/ + uint32_t reserved26: 5; + }; + uint32_t val; + } conf; + union { + struct { + uint32_t timer_cnt: 20; /*software can read this register to get the current counter value in high speed timer*/ + uint32_t reserved20: 12; + }; + uint32_t val; + } value; + } timer[4]; + } timer_group[2]; /*two channel groups : 0: high-speed channels; 1: low-speed channels*/ + union { + struct { + uint32_t hstimer0_ovf: 1; /*The interrupt raw bit for high speed channel0 counter overflow.*/ + uint32_t hstimer1_ovf: 1; /*The interrupt raw bit for high speed channel1 counter overflow.*/ + uint32_t hstimer2_ovf: 1; /*The interrupt raw bit for high speed channel2 counter overflow.*/ + uint32_t hstimer3_ovf: 1; /*The interrupt raw bit for high speed channel3 counter overflow.*/ + uint32_t lstimer0_ovf: 1; /*The interrupt raw bit for low speed channel0 counter overflow.*/ + uint32_t lstimer1_ovf: 1; /*The interrupt raw bit for low speed channel1 counter overflow.*/ + uint32_t lstimer2_ovf: 1; /*The interrupt raw bit for low speed channel2 counter overflow.*/ + uint32_t lstimer3_ovf: 1; /*The interrupt raw bit for low speed channel3 counter overflow.*/ + uint32_t duty_chng_end_hsch0: 1; /*The interrupt raw bit for high speed channel 0 duty change done.*/ + uint32_t duty_chng_end_hsch1: 1; /*The interrupt raw bit for high speed channel 1 duty change done.*/ + uint32_t duty_chng_end_hsch2: 1; /*The interrupt raw bit for high speed channel 2 duty change done.*/ + uint32_t duty_chng_end_hsch3: 1; /*The interrupt raw bit for high speed channel 3 duty change done.*/ + uint32_t duty_chng_end_hsch4: 1; /*The interrupt raw bit for high speed channel 4 duty change done.*/ + uint32_t duty_chng_end_hsch5: 1; /*The interrupt raw bit for high speed channel 5 duty change done.*/ + uint32_t duty_chng_end_hsch6: 1; /*The interrupt raw bit for high speed channel 6 duty change done.*/ + uint32_t duty_chng_end_hsch7: 1; /*The interrupt raw bit for high speed channel 7 duty change done.*/ + uint32_t duty_chng_end_lsch0: 1; /*The interrupt raw bit for low speed channel 0 duty change done.*/ + uint32_t duty_chng_end_lsch1: 1; /*The interrupt raw bit for low speed channel 1 duty change done.*/ + uint32_t duty_chng_end_lsch2: 1; /*The interrupt raw bit for low speed channel 2 duty change done.*/ + uint32_t duty_chng_end_lsch3: 1; /*The interrupt raw bit for low speed channel 3 duty change done.*/ + uint32_t duty_chng_end_lsch4: 1; /*The interrupt raw bit for low speed channel 4 duty change done.*/ + uint32_t duty_chng_end_lsch5: 1; /*The interrupt raw bit for low speed channel 5 duty change done.*/ + uint32_t duty_chng_end_lsch6: 1; /*The interrupt raw bit for low speed channel 6 duty change done.*/ + uint32_t duty_chng_end_lsch7: 1; /*The interrupt raw bit for low speed channel 7 duty change done.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } int_raw; + union { + struct { + uint32_t hstimer0_ovf: 1; /*The interrupt status bit for high speed channel0 counter overflow event.*/ + uint32_t hstimer1_ovf: 1; /*The interrupt status bit for high speed channel1 counter overflow event.*/ + uint32_t hstimer2_ovf: 1; /*The interrupt status bit for high speed channel2 counter overflow event.*/ + uint32_t hstimer3_ovf: 1; /*The interrupt status bit for high speed channel3 counter overflow event.*/ + uint32_t lstimer0_ovf: 1; /*The interrupt status bit for low speed channel0 counter overflow event.*/ + uint32_t lstimer1_ovf: 1; /*The interrupt status bit for low speed channel1 counter overflow event.*/ + uint32_t lstimer2_ovf: 1; /*The interrupt status bit for low speed channel2 counter overflow event.*/ + uint32_t lstimer3_ovf: 1; /*The interrupt status bit for low speed channel3 counter overflow event.*/ + uint32_t duty_chng_end_hsch1: 1; /*The interrupt status bit for high speed channel 1 duty change done event.*/ + uint32_t duty_chng_end_hsch2: 1; /*The interrupt status bit for high speed channel 2 duty change done event.*/ + uint32_t duty_chng_end_hsch3: 1; /*The interrupt status bit for high speed channel 3 duty change done event.*/ + uint32_t duty_chng_end_hsch4: 1; /*The interrupt status bit for high speed channel 4 duty change done event.*/ + uint32_t duty_chng_end_hsch5: 1; /*The interrupt status bit for high speed channel 5 duty change done event.*/ + uint32_t duty_chng_end_hsch6: 1; /*The interrupt status bit for high speed channel 6 duty change done event.*/ + uint32_t duty_chng_end_hsch7: 1; /*The interrupt status bit for high speed channel 7 duty change done event.*/ + uint32_t duty_chng_end_lsch0: 1; /*The interrupt status bit for low speed channel 0 duty change done event.*/ + uint32_t duty_chng_end_lsch1: 1; /*The interrupt status bit for low speed channel 1 duty change done event.*/ + uint32_t duty_chng_end_lsch2: 1; /*The interrupt status bit for low speed channel 2 duty change done event.*/ + uint32_t duty_chng_end_lsch3: 1; /*The interrupt status bit for low speed channel 3 duty change done event.*/ + uint32_t duty_chng_end_lsch4: 1; /*The interrupt status bit for low speed channel 4 duty change done event.*/ + uint32_t duty_chng_end_lsch5: 1; /*The interrupt status bit for low speed channel 5 duty change done event.*/ + uint32_t duty_chng_end_lsch6: 1; /*The interrupt status bit for low speed channel 6 duty change done event.*/ + uint32_t duty_chng_end_lsch7: 1; /*The interrupt status bit for low speed channel 7 duty change done event*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } int_st; + union { + struct { + uint32_t hstimer0_ovf: 1; /*The interrupt enable bit for high speed channel0 counter overflow interrupt.*/ + uint32_t hstimer1_ovf: 1; /*The interrupt enable bit for high speed channel1 counter overflow interrupt.*/ + uint32_t hstimer2_ovf: 1; /*The interrupt enable bit for high speed channel2 counter overflow interrupt.*/ + uint32_t hstimer3_ovf: 1; /*The interrupt enable bit for high speed channel3 counter overflow interrupt.*/ + uint32_t lstimer0_ovf: 1; /*The interrupt enable bit for low speed channel0 counter overflow interrupt.*/ + uint32_t lstimer1_ovf: 1; /*The interrupt enable bit for low speed channel1 counter overflow interrupt.*/ + uint32_t lstimer2_ovf: 1; /*The interrupt enable bit for low speed channel2 counter overflow interrupt.*/ + uint32_t lstimer3_ovf: 1; /*The interrupt enable bit for low speed channel3 counter overflow interrupt.*/ + uint32_t duty_chng_end_hsch0: 1; /*The interrupt enable bit for high speed channel 0 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch1: 1; /*The interrupt enable bit for high speed channel 1 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch2: 1; /*The interrupt enable bit for high speed channel 2 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch3: 1; /*The interrupt enable bit for high speed channel 3 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch4: 1; /*The interrupt enable bit for high speed channel 4 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch5: 1; /*The interrupt enable bit for high speed channel 5 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch6: 1; /*The interrupt enable bit for high speed channel 6 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch7: 1; /*The interrupt enable bit for high speed channel 7 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch0: 1; /*The interrupt enable bit for low speed channel 0 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch1: 1; /*The interrupt enable bit for low speed channel 1 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch2: 1; /*The interrupt enable bit for low speed channel 2 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch3: 1; /*The interrupt enable bit for low speed channel 3 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch4: 1; /*The interrupt enable bit for low speed channel 4 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch5: 1; /*The interrupt enable bit for low speed channel 5 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch6: 1; /*The interrupt enable bit for low speed channel 6 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch7: 1; /*The interrupt enable bit for low speed channel 7 duty change done interrupt.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } int_ena; + union { + struct { + uint32_t hstimer0_ovf: 1; /*Set this bit to clear high speed channel0 counter overflow interrupt.*/ + uint32_t hstimer1_ovf: 1; /*Set this bit to clear high speed channel1 counter overflow interrupt.*/ + uint32_t hstimer2_ovf: 1; /*Set this bit to clear high speed channel2 counter overflow interrupt.*/ + uint32_t hstimer3_ovf: 1; /*Set this bit to clear high speed channel3 counter overflow interrupt.*/ + uint32_t lstimer0_ovf: 1; /*Set this bit to clear low speed channel0 counter overflow interrupt.*/ + uint32_t lstimer1_ovf: 1; /*Set this bit to clear low speed channel1 counter overflow interrupt.*/ + uint32_t lstimer2_ovf: 1; /*Set this bit to clear low speed channel2 counter overflow interrupt.*/ + uint32_t lstimer3_ovf: 1; /*Set this bit to clear low speed channel3 counter overflow interrupt.*/ + uint32_t duty_chng_end_hsch0: 1; /*Set this bit to clear high speed channel 0 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch1: 1; /*Set this bit to clear high speed channel 1 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch2: 1; /*Set this bit to clear high speed channel 2 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch3: 1; /*Set this bit to clear high speed channel 3 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch4: 1; /*Set this bit to clear high speed channel 4 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch5: 1; /*Set this bit to clear high speed channel 5 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch6: 1; /*Set this bit to clear high speed channel 6 duty change done interrupt.*/ + uint32_t duty_chng_end_hsch7: 1; /*Set this bit to clear high speed channel 7 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch0: 1; /*Set this bit to clear low speed channel 0 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch1: 1; /*Set this bit to clear low speed channel 1 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch2: 1; /*Set this bit to clear low speed channel 2 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch3: 1; /*Set this bit to clear low speed channel 3 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch4: 1; /*Set this bit to clear low speed channel 4 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch5: 1; /*Set this bit to clear low speed channel 5 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch6: 1; /*Set this bit to clear low speed channel 6 duty change done interrupt.*/ + uint32_t duty_chng_end_lsch7: 1; /*Set this bit to clear low speed channel 7 duty change done interrupt.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } int_clr; + union { + struct { + uint32_t apb_clk_sel: 1; /*This bit is used to set the frequency of slow_clk. 1'b1:80mhz 1'b0:8mhz*/ + uint32_t reserved1: 31; + }; + uint32_t val; + } conf; + uint32_t reserved_194; + uint32_t reserved_198; + uint32_t reserved_19c; + uint32_t reserved_1a0; + uint32_t reserved_1a4; + uint32_t reserved_1a8; + uint32_t reserved_1ac; + uint32_t reserved_1b0; + uint32_t reserved_1b4; + uint32_t reserved_1b8; + uint32_t reserved_1bc; + uint32_t reserved_1c0; + uint32_t reserved_1c4; + uint32_t reserved_1c8; + uint32_t reserved_1cc; + uint32_t reserved_1d0; + uint32_t reserved_1d4; + uint32_t reserved_1d8; + uint32_t reserved_1dc; + uint32_t reserved_1e0; + uint32_t reserved_1e4; + uint32_t reserved_1e8; + uint32_t reserved_1ec; + uint32_t reserved_1f0; + uint32_t reserved_1f4; + uint32_t reserved_1f8; + uint32_t date; /*This register represents the version .*/ +} ledc_dev_t; +extern ledc_dev_t LEDC; +#endif /* _SOC_LEDC_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/pcnt_reg.h b/tools/sdk/include/esp32/soc/pcnt_reg.h new file mode 100644 index 00000000..7a3a78bf --- /dev/null +++ b/tools/sdk/include/esp32/soc/pcnt_reg.h @@ -0,0 +1,1496 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_PCNT_REG_H_ +#define _SOC_PCNT_REG_H_ + + +#include "soc.h" +#define PCNT_U0_CONF0_REG (DR_REG_PCNT_BASE + 0x0000) +/* PCNT_CH1_LCTRL_MODE_U0 : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's low control + signal for unit0. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_LCTRL_MODE_U0 0x00000003 +#define PCNT_CH1_LCTRL_MODE_U0_M ((PCNT_CH1_LCTRL_MODE_U0_V)<<(PCNT_CH1_LCTRL_MODE_U0_S)) +#define PCNT_CH1_LCTRL_MODE_U0_V 0x3 +#define PCNT_CH1_LCTRL_MODE_U0_S 30 +/* PCNT_CH1_HCTRL_MODE_U0 : R/W ;bitpos:[29:28] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's high + control signal for unit0. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_HCTRL_MODE_U0 0x00000003 +#define PCNT_CH1_HCTRL_MODE_U0_M ((PCNT_CH1_HCTRL_MODE_U0_V)<<(PCNT_CH1_HCTRL_MODE_U0_S)) +#define PCNT_CH1_HCTRL_MODE_U0_V 0x3 +#define PCNT_CH1_HCTRL_MODE_U0_S 28 +/* PCNT_CH1_POS_MODE_U0 : R/W ;bitpos:[27:26] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + posedge signal for unit0. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH1_POS_MODE_U0 0x00000003 +#define PCNT_CH1_POS_MODE_U0_M ((PCNT_CH1_POS_MODE_U0_V)<<(PCNT_CH1_POS_MODE_U0_S)) +#define PCNT_CH1_POS_MODE_U0_V 0x3 +#define PCNT_CH1_POS_MODE_U0_S 26 +/* PCNT_CH1_NEG_MODE_U0 : R/W ;bitpos:[25:24] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + negedge signal for unit0. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH1_NEG_MODE_U0 0x00000003 +#define PCNT_CH1_NEG_MODE_U0_M ((PCNT_CH1_NEG_MODE_U0_V)<<(PCNT_CH1_NEG_MODE_U0_S)) +#define PCNT_CH1_NEG_MODE_U0_V 0x3 +#define PCNT_CH1_NEG_MODE_U0_S 24 +/* PCNT_CH0_LCTRL_MODE_U0 : R/W ;bitpos:[23:22] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's low control + signal for unit0. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_LCTRL_MODE_U0 0x00000003 +#define PCNT_CH0_LCTRL_MODE_U0_M ((PCNT_CH0_LCTRL_MODE_U0_V)<<(PCNT_CH0_LCTRL_MODE_U0_S)) +#define PCNT_CH0_LCTRL_MODE_U0_V 0x3 +#define PCNT_CH0_LCTRL_MODE_U0_S 22 +/* PCNT_CH0_HCTRL_MODE_U0 : R/W ;bitpos:[21:20] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's high + control signal for unit0. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_HCTRL_MODE_U0 0x00000003 +#define PCNT_CH0_HCTRL_MODE_U0_M ((PCNT_CH0_HCTRL_MODE_U0_V)<<(PCNT_CH0_HCTRL_MODE_U0_S)) +#define PCNT_CH0_HCTRL_MODE_U0_V 0x3 +#define PCNT_CH0_HCTRL_MODE_U0_S 20 +/* PCNT_CH0_POS_MODE_U0 : R/W ;bitpos:[19:18] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + posedge signal for unit0. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH0_POS_MODE_U0 0x00000003 +#define PCNT_CH0_POS_MODE_U0_M ((PCNT_CH0_POS_MODE_U0_V)<<(PCNT_CH0_POS_MODE_U0_S)) +#define PCNT_CH0_POS_MODE_U0_V 0x3 +#define PCNT_CH0_POS_MODE_U0_S 18 +/* PCNT_CH0_NEG_MODE_U0 : R/W ;bitpos:[17:16] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + negedge signal for unit0. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH0_NEG_MODE_U0 0x00000003 +#define PCNT_CH0_NEG_MODE_U0_M ((PCNT_CH0_NEG_MODE_U0_V)<<(PCNT_CH0_NEG_MODE_U0_S)) +#define PCNT_CH0_NEG_MODE_U0_V 0x3 +#define PCNT_CH0_NEG_MODE_U0_S 16 +/* PCNT_THR_THRES1_EN_U0 : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit0's count with thres1 value .*/ +#define PCNT_THR_THRES1_EN_U0 (BIT(15)) +#define PCNT_THR_THRES1_EN_U0_M (BIT(15)) +#define PCNT_THR_THRES1_EN_U0_V 0x1 +#define PCNT_THR_THRES1_EN_U0_S 15 +/* PCNT_THR_THRES0_EN_U0 : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit0's count with thres0 value.*/ +#define PCNT_THR_THRES0_EN_U0 (BIT(14)) +#define PCNT_THR_THRES0_EN_U0_M (BIT(14)) +#define PCNT_THR_THRES0_EN_U0_V 0x1 +#define PCNT_THR_THRES0_EN_U0_S 14 +/* PCNT_THR_L_LIM_EN_U0 : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit0's count with thr_l_lim value.*/ +#define PCNT_THR_L_LIM_EN_U0 (BIT(13)) +#define PCNT_THR_L_LIM_EN_U0_M (BIT(13)) +#define PCNT_THR_L_LIM_EN_U0_V 0x1 +#define PCNT_THR_L_LIM_EN_U0_S 13 +/* PCNT_THR_H_LIM_EN_U0 : R/W ;bitpos:[12] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit0's count with thr_h_lim value.*/ +#define PCNT_THR_H_LIM_EN_U0 (BIT(12)) +#define PCNT_THR_H_LIM_EN_U0_M (BIT(12)) +#define PCNT_THR_H_LIM_EN_U0_V 0x1 +#define PCNT_THR_H_LIM_EN_U0_S 12 +/* PCNT_THR_ZERO_EN_U0 : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit0's count with 0 value.*/ +#define PCNT_THR_ZERO_EN_U0 (BIT(11)) +#define PCNT_THR_ZERO_EN_U0_M (BIT(11)) +#define PCNT_THR_ZERO_EN_U0_V 0x1 +#define PCNT_THR_ZERO_EN_U0_S 11 +/* PCNT_FILTER_EN_U0 : R/W ;bitpos:[10] ;default: 1'b1 ; */ +/*description: This is the enable bit for filtering input signals for unit0.*/ +#define PCNT_FILTER_EN_U0 (BIT(10)) +#define PCNT_FILTER_EN_U0_M (BIT(10)) +#define PCNT_FILTER_EN_U0_V 0x1 +#define PCNT_FILTER_EN_U0_S 10 +/* PCNT_FILTER_THRES_U0 : R/W ;bitpos:[9:0] ;default: 10'h10 ; */ +/*description: This register is used to filter pluse whose width is smaller + than this value for unit0.*/ +#define PCNT_FILTER_THRES_U0 0x000003FF +#define PCNT_FILTER_THRES_U0_M ((PCNT_FILTER_THRES_U0_V)<<(PCNT_FILTER_THRES_U0_S)) +#define PCNT_FILTER_THRES_U0_V 0x3FF +#define PCNT_FILTER_THRES_U0_S 0 + +#define PCNT_U0_CONF1_REG (DR_REG_PCNT_BASE + 0x0004) +/* PCNT_CNT_THRES1_U0 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to configure thres1 value for unit0.*/ +#define PCNT_CNT_THRES1_U0 0x0000FFFF +#define PCNT_CNT_THRES1_U0_M ((PCNT_CNT_THRES1_U0_V)<<(PCNT_CNT_THRES1_U0_S)) +#define PCNT_CNT_THRES1_U0_V 0xFFFF +#define PCNT_CNT_THRES1_U0_S 16 +/* PCNT_CNT_THRES0_U0 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thres0 value for unit0.*/ +#define PCNT_CNT_THRES0_U0 0x0000FFFF +#define PCNT_CNT_THRES0_U0_M ((PCNT_CNT_THRES0_U0_V)<<(PCNT_CNT_THRES0_U0_S)) +#define PCNT_CNT_THRES0_U0_V 0xFFFF +#define PCNT_CNT_THRES0_U0_S 0 + +#define PCNT_U0_CONF2_REG (DR_REG_PCNT_BASE + 0x0008) +/* PCNT_CNT_L_LIM_U0 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to confiugre thr_l_lim value for unit0.*/ +#define PCNT_CNT_L_LIM_U0 0x0000FFFF +#define PCNT_CNT_L_LIM_U0_M ((PCNT_CNT_L_LIM_U0_V)<<(PCNT_CNT_L_LIM_U0_S)) +#define PCNT_CNT_L_LIM_U0_V 0xFFFF +#define PCNT_CNT_L_LIM_U0_S 16 +/* PCNT_CNT_H_LIM_U0 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thr_h_lim value for unit0.*/ +#define PCNT_CNT_H_LIM_U0 0x0000FFFF +#define PCNT_CNT_H_LIM_U0_M ((PCNT_CNT_H_LIM_U0_V)<<(PCNT_CNT_H_LIM_U0_S)) +#define PCNT_CNT_H_LIM_U0_V 0xFFFF +#define PCNT_CNT_H_LIM_U0_S 0 + +#define PCNT_U1_CONF0_REG (DR_REG_PCNT_BASE + 0x000c) +/* PCNT_CH1_LCTRL_MODE_U1 : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's low control + signal for unit1. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_LCTRL_MODE_U1 0x00000003 +#define PCNT_CH1_LCTRL_MODE_U1_M ((PCNT_CH1_LCTRL_MODE_U1_V)<<(PCNT_CH1_LCTRL_MODE_U1_S)) +#define PCNT_CH1_LCTRL_MODE_U1_V 0x3 +#define PCNT_CH1_LCTRL_MODE_U1_S 30 +/* PCNT_CH1_HCTRL_MODE_U1 : R/W ;bitpos:[29:28] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's high + control signal for unit1. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_HCTRL_MODE_U1 0x00000003 +#define PCNT_CH1_HCTRL_MODE_U1_M ((PCNT_CH1_HCTRL_MODE_U1_V)<<(PCNT_CH1_HCTRL_MODE_U1_S)) +#define PCNT_CH1_HCTRL_MODE_U1_V 0x3 +#define PCNT_CH1_HCTRL_MODE_U1_S 28 +/* PCNT_CH1_POS_MODE_U1 : R/W ;bitpos:[27:26] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + posedge signal for unit1. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH1_POS_MODE_U1 0x00000003 +#define PCNT_CH1_POS_MODE_U1_M ((PCNT_CH1_POS_MODE_U1_V)<<(PCNT_CH1_POS_MODE_U1_S)) +#define PCNT_CH1_POS_MODE_U1_V 0x3 +#define PCNT_CH1_POS_MODE_U1_S 26 +/* PCNT_CH1_NEG_MODE_U1 : R/W ;bitpos:[25:24] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + negedge signal for unit1. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH1_NEG_MODE_U1 0x00000003 +#define PCNT_CH1_NEG_MODE_U1_M ((PCNT_CH1_NEG_MODE_U1_V)<<(PCNT_CH1_NEG_MODE_U1_S)) +#define PCNT_CH1_NEG_MODE_U1_V 0x3 +#define PCNT_CH1_NEG_MODE_U1_S 24 +/* PCNT_CH0_LCTRL_MODE_U1 : R/W ;bitpos:[23:22] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's low control + signal for unit1. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_LCTRL_MODE_U1 0x00000003 +#define PCNT_CH0_LCTRL_MODE_U1_M ((PCNT_CH0_LCTRL_MODE_U1_V)<<(PCNT_CH0_LCTRL_MODE_U1_S)) +#define PCNT_CH0_LCTRL_MODE_U1_V 0x3 +#define PCNT_CH0_LCTRL_MODE_U1_S 22 +/* PCNT_CH0_HCTRL_MODE_U1 : R/W ;bitpos:[21:20] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's high + control signal for unit1. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_HCTRL_MODE_U1 0x00000003 +#define PCNT_CH0_HCTRL_MODE_U1_M ((PCNT_CH0_HCTRL_MODE_U1_V)<<(PCNT_CH0_HCTRL_MODE_U1_S)) +#define PCNT_CH0_HCTRL_MODE_U1_V 0x3 +#define PCNT_CH0_HCTRL_MODE_U1_S 20 +/* PCNT_CH0_POS_MODE_U1 : R/W ;bitpos:[19:18] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + posedge signal for unit1. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH0_POS_MODE_U1 0x00000003 +#define PCNT_CH0_POS_MODE_U1_M ((PCNT_CH0_POS_MODE_U1_V)<<(PCNT_CH0_POS_MODE_U1_S)) +#define PCNT_CH0_POS_MODE_U1_V 0x3 +#define PCNT_CH0_POS_MODE_U1_S 18 +/* PCNT_CH0_NEG_MODE_U1 : R/W ;bitpos:[17:16] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + negedge signal for unit1. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH0_NEG_MODE_U1 0x00000003 +#define PCNT_CH0_NEG_MODE_U1_M ((PCNT_CH0_NEG_MODE_U1_V)<<(PCNT_CH0_NEG_MODE_U1_S)) +#define PCNT_CH0_NEG_MODE_U1_V 0x3 +#define PCNT_CH0_NEG_MODE_U1_S 16 +/* PCNT_THR_THRES1_EN_U1 : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit1's count with thres1 value .*/ +#define PCNT_THR_THRES1_EN_U1 (BIT(15)) +#define PCNT_THR_THRES1_EN_U1_M (BIT(15)) +#define PCNT_THR_THRES1_EN_U1_V 0x1 +#define PCNT_THR_THRES1_EN_U1_S 15 +/* PCNT_THR_THRES0_EN_U1 : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit1's count with thres0 value.*/ +#define PCNT_THR_THRES0_EN_U1 (BIT(14)) +#define PCNT_THR_THRES0_EN_U1_M (BIT(14)) +#define PCNT_THR_THRES0_EN_U1_V 0x1 +#define PCNT_THR_THRES0_EN_U1_S 14 +/* PCNT_THR_L_LIM_EN_U1 : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit1's count with thr_l_lim value.*/ +#define PCNT_THR_L_LIM_EN_U1 (BIT(13)) +#define PCNT_THR_L_LIM_EN_U1_M (BIT(13)) +#define PCNT_THR_L_LIM_EN_U1_V 0x1 +#define PCNT_THR_L_LIM_EN_U1_S 13 +/* PCNT_THR_H_LIM_EN_U1 : R/W ;bitpos:[12] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit1's count with thr_h_lim value.*/ +#define PCNT_THR_H_LIM_EN_U1 (BIT(12)) +#define PCNT_THR_H_LIM_EN_U1_M (BIT(12)) +#define PCNT_THR_H_LIM_EN_U1_V 0x1 +#define PCNT_THR_H_LIM_EN_U1_S 12 +/* PCNT_THR_ZERO_EN_U1 : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit1's count with 0 value.*/ +#define PCNT_THR_ZERO_EN_U1 (BIT(11)) +#define PCNT_THR_ZERO_EN_U1_M (BIT(11)) +#define PCNT_THR_ZERO_EN_U1_V 0x1 +#define PCNT_THR_ZERO_EN_U1_S 11 +/* PCNT_FILTER_EN_U1 : R/W ;bitpos:[10] ;default: 1'b1 ; */ +/*description: This is the enable bit for filtering input signals for unit1.*/ +#define PCNT_FILTER_EN_U1 (BIT(10)) +#define PCNT_FILTER_EN_U1_M (BIT(10)) +#define PCNT_FILTER_EN_U1_V 0x1 +#define PCNT_FILTER_EN_U1_S 10 +/* PCNT_FILTER_THRES_U1 : R/W ;bitpos:[9:0] ;default: 10'h10 ; */ +/*description: This register is used to filter pluse whose width is smaller + than this value for unit1.*/ +#define PCNT_FILTER_THRES_U1 0x000003FF +#define PCNT_FILTER_THRES_U1_M ((PCNT_FILTER_THRES_U1_V)<<(PCNT_FILTER_THRES_U1_S)) +#define PCNT_FILTER_THRES_U1_V 0x3FF +#define PCNT_FILTER_THRES_U1_S 0 + +#define PCNT_U1_CONF1_REG (DR_REG_PCNT_BASE + 0x0010) +/* PCNT_CNT_THRES1_U1 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to configure thres1 value for unit1.*/ +#define PCNT_CNT_THRES1_U1 0x0000FFFF +#define PCNT_CNT_THRES1_U1_M ((PCNT_CNT_THRES1_U1_V)<<(PCNT_CNT_THRES1_U1_S)) +#define PCNT_CNT_THRES1_U1_V 0xFFFF +#define PCNT_CNT_THRES1_U1_S 16 +/* PCNT_CNT_THRES0_U1 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thres0 value for unit1.*/ +#define PCNT_CNT_THRES0_U1 0x0000FFFF +#define PCNT_CNT_THRES0_U1_M ((PCNT_CNT_THRES0_U1_V)<<(PCNT_CNT_THRES0_U1_S)) +#define PCNT_CNT_THRES0_U1_V 0xFFFF +#define PCNT_CNT_THRES0_U1_S 0 + +#define PCNT_U1_CONF2_REG (DR_REG_PCNT_BASE + 0x0014) +/* PCNT_CNT_L_LIM_U1 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to confiugre thr_l_lim value for unit1.*/ +#define PCNT_CNT_L_LIM_U1 0x0000FFFF +#define PCNT_CNT_L_LIM_U1_M ((PCNT_CNT_L_LIM_U1_V)<<(PCNT_CNT_L_LIM_U1_S)) +#define PCNT_CNT_L_LIM_U1_V 0xFFFF +#define PCNT_CNT_L_LIM_U1_S 16 +/* PCNT_CNT_H_LIM_U1 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thr_h_lim value for unit1.*/ +#define PCNT_CNT_H_LIM_U1 0x0000FFFF +#define PCNT_CNT_H_LIM_U1_M ((PCNT_CNT_H_LIM_U1_V)<<(PCNT_CNT_H_LIM_U1_S)) +#define PCNT_CNT_H_LIM_U1_V 0xFFFF +#define PCNT_CNT_H_LIM_U1_S 0 + +#define PCNT_U2_CONF0_REG (DR_REG_PCNT_BASE + 0x0018) +/* PCNT_CH1_LCTRL_MODE_U2 : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's low control + signal for unit2. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_LCTRL_MODE_U2 0x00000003 +#define PCNT_CH1_LCTRL_MODE_U2_M ((PCNT_CH1_LCTRL_MODE_U2_V)<<(PCNT_CH1_LCTRL_MODE_U2_S)) +#define PCNT_CH1_LCTRL_MODE_U2_V 0x3 +#define PCNT_CH1_LCTRL_MODE_U2_S 30 +/* PCNT_CH1_HCTRL_MODE_U2 : R/W ;bitpos:[29:28] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's high + control signal for unit2. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_HCTRL_MODE_U2 0x00000003 +#define PCNT_CH1_HCTRL_MODE_U2_M ((PCNT_CH1_HCTRL_MODE_U2_V)<<(PCNT_CH1_HCTRL_MODE_U2_S)) +#define PCNT_CH1_HCTRL_MODE_U2_V 0x3 +#define PCNT_CH1_HCTRL_MODE_U2_S 28 +/* PCNT_CH1_POS_MODE_U2 : R/W ;bitpos:[27:26] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + posedge signal for unit2. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH1_POS_MODE_U2 0x00000003 +#define PCNT_CH1_POS_MODE_U2_M ((PCNT_CH1_POS_MODE_U2_V)<<(PCNT_CH1_POS_MODE_U2_S)) +#define PCNT_CH1_POS_MODE_U2_V 0x3 +#define PCNT_CH1_POS_MODE_U2_S 26 +/* PCNT_CH1_NEG_MODE_U2 : R/W ;bitpos:[25:24] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + negedge signal for unit2. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH1_NEG_MODE_U2 0x00000003 +#define PCNT_CH1_NEG_MODE_U2_M ((PCNT_CH1_NEG_MODE_U2_V)<<(PCNT_CH1_NEG_MODE_U2_S)) +#define PCNT_CH1_NEG_MODE_U2_V 0x3 +#define PCNT_CH1_NEG_MODE_U2_S 24 +/* PCNT_CH0_LCTRL_MODE_U2 : R/W ;bitpos:[23:22] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's low control + signal for unit2. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_LCTRL_MODE_U2 0x00000003 +#define PCNT_CH0_LCTRL_MODE_U2_M ((PCNT_CH0_LCTRL_MODE_U2_V)<<(PCNT_CH0_LCTRL_MODE_U2_S)) +#define PCNT_CH0_LCTRL_MODE_U2_V 0x3 +#define PCNT_CH0_LCTRL_MODE_U2_S 22 +/* PCNT_CH0_HCTRL_MODE_U2 : R/W ;bitpos:[21:20] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's high + control signal for unit2. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_HCTRL_MODE_U2 0x00000003 +#define PCNT_CH0_HCTRL_MODE_U2_M ((PCNT_CH0_HCTRL_MODE_U2_V)<<(PCNT_CH0_HCTRL_MODE_U2_S)) +#define PCNT_CH0_HCTRL_MODE_U2_V 0x3 +#define PCNT_CH0_HCTRL_MODE_U2_S 20 +/* PCNT_CH0_POS_MODE_U2 : R/W ;bitpos:[19:18] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + posedge signal for unit2. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH0_POS_MODE_U2 0x00000003 +#define PCNT_CH0_POS_MODE_U2_M ((PCNT_CH0_POS_MODE_U2_V)<<(PCNT_CH0_POS_MODE_U2_S)) +#define PCNT_CH0_POS_MODE_U2_V 0x3 +#define PCNT_CH0_POS_MODE_U2_S 18 +/* PCNT_CH0_NEG_MODE_U2 : R/W ;bitpos:[17:16] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + negedge signal for unit2. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH0_NEG_MODE_U2 0x00000003 +#define PCNT_CH0_NEG_MODE_U2_M ((PCNT_CH0_NEG_MODE_U2_V)<<(PCNT_CH0_NEG_MODE_U2_S)) +#define PCNT_CH0_NEG_MODE_U2_V 0x3 +#define PCNT_CH0_NEG_MODE_U2_S 16 +/* PCNT_THR_THRES1_EN_U2 : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit2's count with thres1 value .*/ +#define PCNT_THR_THRES1_EN_U2 (BIT(15)) +#define PCNT_THR_THRES1_EN_U2_M (BIT(15)) +#define PCNT_THR_THRES1_EN_U2_V 0x1 +#define PCNT_THR_THRES1_EN_U2_S 15 +/* PCNT_THR_THRES0_EN_U2 : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit2's count with thres0 value.*/ +#define PCNT_THR_THRES0_EN_U2 (BIT(14)) +#define PCNT_THR_THRES0_EN_U2_M (BIT(14)) +#define PCNT_THR_THRES0_EN_U2_V 0x1 +#define PCNT_THR_THRES0_EN_U2_S 14 +/* PCNT_THR_L_LIM_EN_U2 : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit2's count with thr_l_lim value.*/ +#define PCNT_THR_L_LIM_EN_U2 (BIT(13)) +#define PCNT_THR_L_LIM_EN_U2_M (BIT(13)) +#define PCNT_THR_L_LIM_EN_U2_V 0x1 +#define PCNT_THR_L_LIM_EN_U2_S 13 +/* PCNT_THR_H_LIM_EN_U2 : R/W ;bitpos:[12] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit2's count with thr_h_lim value.*/ +#define PCNT_THR_H_LIM_EN_U2 (BIT(12)) +#define PCNT_THR_H_LIM_EN_U2_M (BIT(12)) +#define PCNT_THR_H_LIM_EN_U2_V 0x1 +#define PCNT_THR_H_LIM_EN_U2_S 12 +/* PCNT_THR_ZERO_EN_U2 : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit2's count with 0 value.*/ +#define PCNT_THR_ZERO_EN_U2 (BIT(11)) +#define PCNT_THR_ZERO_EN_U2_M (BIT(11)) +#define PCNT_THR_ZERO_EN_U2_V 0x1 +#define PCNT_THR_ZERO_EN_U2_S 11 +/* PCNT_FILTER_EN_U2 : R/W ;bitpos:[10] ;default: 1'b1 ; */ +/*description: This is the enable bit for filtering input signals for unit2.*/ +#define PCNT_FILTER_EN_U2 (BIT(10)) +#define PCNT_FILTER_EN_U2_M (BIT(10)) +#define PCNT_FILTER_EN_U2_V 0x1 +#define PCNT_FILTER_EN_U2_S 10 +/* PCNT_FILTER_THRES_U2 : R/W ;bitpos:[9:0] ;default: 10'h10 ; */ +/*description: This register is used to filter pluse whose width is smaller + than this value for unit2.*/ +#define PCNT_FILTER_THRES_U2 0x000003FF +#define PCNT_FILTER_THRES_U2_M ((PCNT_FILTER_THRES_U2_V)<<(PCNT_FILTER_THRES_U2_S)) +#define PCNT_FILTER_THRES_U2_V 0x3FF +#define PCNT_FILTER_THRES_U2_S 0 + +#define PCNT_U2_CONF1_REG (DR_REG_PCNT_BASE + 0x001c) +/* PCNT_CNT_THRES1_U2 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to configure thres1 value for unit2.*/ +#define PCNT_CNT_THRES1_U2 0x0000FFFF +#define PCNT_CNT_THRES1_U2_M ((PCNT_CNT_THRES1_U2_V)<<(PCNT_CNT_THRES1_U2_S)) +#define PCNT_CNT_THRES1_U2_V 0xFFFF +#define PCNT_CNT_THRES1_U2_S 16 +/* PCNT_CNT_THRES0_U2 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thres0 value for unit2.*/ +#define PCNT_CNT_THRES0_U2 0x0000FFFF +#define PCNT_CNT_THRES0_U2_M ((PCNT_CNT_THRES0_U2_V)<<(PCNT_CNT_THRES0_U2_S)) +#define PCNT_CNT_THRES0_U2_V 0xFFFF +#define PCNT_CNT_THRES0_U2_S 0 + +#define PCNT_U2_CONF2_REG (DR_REG_PCNT_BASE + 0x0020) +/* PCNT_CNT_L_LIM_U2 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to confiugre thr_l_lim value for unit2.*/ +#define PCNT_CNT_L_LIM_U2 0x0000FFFF +#define PCNT_CNT_L_LIM_U2_M ((PCNT_CNT_L_LIM_U2_V)<<(PCNT_CNT_L_LIM_U2_S)) +#define PCNT_CNT_L_LIM_U2_V 0xFFFF +#define PCNT_CNT_L_LIM_U2_S 16 +/* PCNT_CNT_H_LIM_U2 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thr_h_lim value for unit2.*/ +#define PCNT_CNT_H_LIM_U2 0x0000FFFF +#define PCNT_CNT_H_LIM_U2_M ((PCNT_CNT_H_LIM_U2_V)<<(PCNT_CNT_H_LIM_U2_S)) +#define PCNT_CNT_H_LIM_U2_V 0xFFFF +#define PCNT_CNT_H_LIM_U2_S 0 + +#define PCNT_U3_CONF0_REG (DR_REG_PCNT_BASE + 0x0024) +/* PCNT_CH1_LCTRL_MODE_U3 : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's low control + signal for unit3. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_LCTRL_MODE_U3 0x00000003 +#define PCNT_CH1_LCTRL_MODE_U3_M ((PCNT_CH1_LCTRL_MODE_U3_V)<<(PCNT_CH1_LCTRL_MODE_U3_S)) +#define PCNT_CH1_LCTRL_MODE_U3_V 0x3 +#define PCNT_CH1_LCTRL_MODE_U3_S 30 +/* PCNT_CH1_HCTRL_MODE_U3 : R/W ;bitpos:[29:28] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's high + control signal for unit3. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_HCTRL_MODE_U3 0x00000003 +#define PCNT_CH1_HCTRL_MODE_U3_M ((PCNT_CH1_HCTRL_MODE_U3_V)<<(PCNT_CH1_HCTRL_MODE_U3_S)) +#define PCNT_CH1_HCTRL_MODE_U3_V 0x3 +#define PCNT_CH1_HCTRL_MODE_U3_S 28 +/* PCNT_CH1_POS_MODE_U3 : R/W ;bitpos:[27:26] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + posedge signal for unit3. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH1_POS_MODE_U3 0x00000003 +#define PCNT_CH1_POS_MODE_U3_M ((PCNT_CH1_POS_MODE_U3_V)<<(PCNT_CH1_POS_MODE_U3_S)) +#define PCNT_CH1_POS_MODE_U3_V 0x3 +#define PCNT_CH1_POS_MODE_U3_S 26 +/* PCNT_CH1_NEG_MODE_U3 : R/W ;bitpos:[25:24] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + negedge signal for unit3. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH1_NEG_MODE_U3 0x00000003 +#define PCNT_CH1_NEG_MODE_U3_M ((PCNT_CH1_NEG_MODE_U3_V)<<(PCNT_CH1_NEG_MODE_U3_S)) +#define PCNT_CH1_NEG_MODE_U3_V 0x3 +#define PCNT_CH1_NEG_MODE_U3_S 24 +/* PCNT_CH0_LCTRL_MODE_U3 : R/W ;bitpos:[23:22] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's low control + signal for unit3. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_LCTRL_MODE_U3 0x00000003 +#define PCNT_CH0_LCTRL_MODE_U3_M ((PCNT_CH0_LCTRL_MODE_U3_V)<<(PCNT_CH0_LCTRL_MODE_U3_S)) +#define PCNT_CH0_LCTRL_MODE_U3_V 0x3 +#define PCNT_CH0_LCTRL_MODE_U3_S 22 +/* PCNT_CH0_HCTRL_MODE_U3 : R/W ;bitpos:[21:20] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's high + control signal for unit3. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_HCTRL_MODE_U3 0x00000003 +#define PCNT_CH0_HCTRL_MODE_U3_M ((PCNT_CH0_HCTRL_MODE_U3_V)<<(PCNT_CH0_HCTRL_MODE_U3_S)) +#define PCNT_CH0_HCTRL_MODE_U3_V 0x3 +#define PCNT_CH0_HCTRL_MODE_U3_S 20 +/* PCNT_CH0_POS_MODE_U3 : R/W ;bitpos:[19:18] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + posedge signal for unit3. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH0_POS_MODE_U3 0x00000003 +#define PCNT_CH0_POS_MODE_U3_M ((PCNT_CH0_POS_MODE_U3_V)<<(PCNT_CH0_POS_MODE_U3_S)) +#define PCNT_CH0_POS_MODE_U3_V 0x3 +#define PCNT_CH0_POS_MODE_U3_S 18 +/* PCNT_CH0_NEG_MODE_U3 : R/W ;bitpos:[17:16] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + negedge signal for unit3. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH0_NEG_MODE_U3 0x00000003 +#define PCNT_CH0_NEG_MODE_U3_M ((PCNT_CH0_NEG_MODE_U3_V)<<(PCNT_CH0_NEG_MODE_U3_S)) +#define PCNT_CH0_NEG_MODE_U3_V 0x3 +#define PCNT_CH0_NEG_MODE_U3_S 16 +/* PCNT_THR_THRES1_EN_U3 : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit3's count with thres1 value .*/ +#define PCNT_THR_THRES1_EN_U3 (BIT(15)) +#define PCNT_THR_THRES1_EN_U3_M (BIT(15)) +#define PCNT_THR_THRES1_EN_U3_V 0x1 +#define PCNT_THR_THRES1_EN_U3_S 15 +/* PCNT_THR_THRES0_EN_U3 : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit3's count with thres0 value.*/ +#define PCNT_THR_THRES0_EN_U3 (BIT(14)) +#define PCNT_THR_THRES0_EN_U3_M (BIT(14)) +#define PCNT_THR_THRES0_EN_U3_V 0x1 +#define PCNT_THR_THRES0_EN_U3_S 14 +/* PCNT_THR_L_LIM_EN_U3 : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit3's count with thr_l_lim value.*/ +#define PCNT_THR_L_LIM_EN_U3 (BIT(13)) +#define PCNT_THR_L_LIM_EN_U3_M (BIT(13)) +#define PCNT_THR_L_LIM_EN_U3_V 0x1 +#define PCNT_THR_L_LIM_EN_U3_S 13 +/* PCNT_THR_H_LIM_EN_U3 : R/W ;bitpos:[12] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit3's count with thr_h_lim value.*/ +#define PCNT_THR_H_LIM_EN_U3 (BIT(12)) +#define PCNT_THR_H_LIM_EN_U3_M (BIT(12)) +#define PCNT_THR_H_LIM_EN_U3_V 0x1 +#define PCNT_THR_H_LIM_EN_U3_S 12 +/* PCNT_THR_ZERO_EN_U3 : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit3's count with 0 value.*/ +#define PCNT_THR_ZERO_EN_U3 (BIT(11)) +#define PCNT_THR_ZERO_EN_U3_M (BIT(11)) +#define PCNT_THR_ZERO_EN_U3_V 0x1 +#define PCNT_THR_ZERO_EN_U3_S 11 +/* PCNT_FILTER_EN_U3 : R/W ;bitpos:[10] ;default: 1'b1 ; */ +/*description: This is the enable bit for filtering input signals for unit3.*/ +#define PCNT_FILTER_EN_U3 (BIT(10)) +#define PCNT_FILTER_EN_U3_M (BIT(10)) +#define PCNT_FILTER_EN_U3_V 0x1 +#define PCNT_FILTER_EN_U3_S 10 +/* PCNT_FILTER_THRES_U3 : R/W ;bitpos:[9:0] ;default: 10'h10 ; */ +/*description: This register is used to filter pluse whose width is smaller + than this value for unit3.*/ +#define PCNT_FILTER_THRES_U3 0x000003FF +#define PCNT_FILTER_THRES_U3_M ((PCNT_FILTER_THRES_U3_V)<<(PCNT_FILTER_THRES_U3_S)) +#define PCNT_FILTER_THRES_U3_V 0x3FF +#define PCNT_FILTER_THRES_U3_S 0 + +#define PCNT_U3_CONF1_REG (DR_REG_PCNT_BASE + 0x0028) +/* PCNT_CNT_THRES1_U3 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to configure thres1 value for unit3.*/ +#define PCNT_CNT_THRES1_U3 0x0000FFFF +#define PCNT_CNT_THRES1_U3_M ((PCNT_CNT_THRES1_U3_V)<<(PCNT_CNT_THRES1_U3_S)) +#define PCNT_CNT_THRES1_U3_V 0xFFFF +#define PCNT_CNT_THRES1_U3_S 16 +/* PCNT_CNT_THRES0_U3 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thres0 value for unit3.*/ +#define PCNT_CNT_THRES0_U3 0x0000FFFF +#define PCNT_CNT_THRES0_U3_M ((PCNT_CNT_THRES0_U3_V)<<(PCNT_CNT_THRES0_U3_S)) +#define PCNT_CNT_THRES0_U3_V 0xFFFF +#define PCNT_CNT_THRES0_U3_S 0 + +#define PCNT_U3_CONF2_REG (DR_REG_PCNT_BASE + 0x002c) +/* PCNT_CNT_L_LIM_U3 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to confiugre thr_l_lim value for unit3.*/ +#define PCNT_CNT_L_LIM_U3 0x0000FFFF +#define PCNT_CNT_L_LIM_U3_M ((PCNT_CNT_L_LIM_U3_V)<<(PCNT_CNT_L_LIM_U3_S)) +#define PCNT_CNT_L_LIM_U3_V 0xFFFF +#define PCNT_CNT_L_LIM_U3_S 16 +/* PCNT_CNT_H_LIM_U3 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thr_h_lim value for unit3.*/ +#define PCNT_CNT_H_LIM_U3 0x0000FFFF +#define PCNT_CNT_H_LIM_U3_M ((PCNT_CNT_H_LIM_U3_V)<<(PCNT_CNT_H_LIM_U3_S)) +#define PCNT_CNT_H_LIM_U3_V 0xFFFF +#define PCNT_CNT_H_LIM_U3_S 0 + +#define PCNT_U4_CONF0_REG (DR_REG_PCNT_BASE + 0x0030) +/* PCNT_CH1_LCTRL_MODE_U4 : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's low control + signal for unit4. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_LCTRL_MODE_U4 0x00000003 +#define PCNT_CH1_LCTRL_MODE_U4_M ((PCNT_CH1_LCTRL_MODE_U4_V)<<(PCNT_CH1_LCTRL_MODE_U4_S)) +#define PCNT_CH1_LCTRL_MODE_U4_V 0x3 +#define PCNT_CH1_LCTRL_MODE_U4_S 30 +/* PCNT_CH1_HCTRL_MODE_U4 : R/W ;bitpos:[29:28] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's high + control signal for unit4. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_HCTRL_MODE_U4 0x00000003 +#define PCNT_CH1_HCTRL_MODE_U4_M ((PCNT_CH1_HCTRL_MODE_U4_V)<<(PCNT_CH1_HCTRL_MODE_U4_S)) +#define PCNT_CH1_HCTRL_MODE_U4_V 0x3 +#define PCNT_CH1_HCTRL_MODE_U4_S 28 +/* PCNT_CH1_POS_MODE_U4 : R/W ;bitpos:[27:26] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + posedge signal for unit4. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH1_POS_MODE_U4 0x00000003 +#define PCNT_CH1_POS_MODE_U4_M ((PCNT_CH1_POS_MODE_U4_V)<<(PCNT_CH1_POS_MODE_U4_S)) +#define PCNT_CH1_POS_MODE_U4_V 0x3 +#define PCNT_CH1_POS_MODE_U4_S 26 +/* PCNT_CH1_NEG_MODE_U4 : R/W ;bitpos:[25:24] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + negedge signal for unit4. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH1_NEG_MODE_U4 0x00000003 +#define PCNT_CH1_NEG_MODE_U4_M ((PCNT_CH1_NEG_MODE_U4_V)<<(PCNT_CH1_NEG_MODE_U4_S)) +#define PCNT_CH1_NEG_MODE_U4_V 0x3 +#define PCNT_CH1_NEG_MODE_U4_S 24 +/* PCNT_CH0_LCTRL_MODE_U4 : R/W ;bitpos:[23:22] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's low control + signal for unit4. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_LCTRL_MODE_U4 0x00000003 +#define PCNT_CH0_LCTRL_MODE_U4_M ((PCNT_CH0_LCTRL_MODE_U4_V)<<(PCNT_CH0_LCTRL_MODE_U4_S)) +#define PCNT_CH0_LCTRL_MODE_U4_V 0x3 +#define PCNT_CH0_LCTRL_MODE_U4_S 22 +/* PCNT_CH0_HCTRL_MODE_U4 : R/W ;bitpos:[21:20] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's high + control signal for unit4. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_HCTRL_MODE_U4 0x00000003 +#define PCNT_CH0_HCTRL_MODE_U4_M ((PCNT_CH0_HCTRL_MODE_U4_V)<<(PCNT_CH0_HCTRL_MODE_U4_S)) +#define PCNT_CH0_HCTRL_MODE_U4_V 0x3 +#define PCNT_CH0_HCTRL_MODE_U4_S 20 +/* PCNT_CH0_POS_MODE_U4 : R/W ;bitpos:[19:18] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + posedge signal for unit4. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH0_POS_MODE_U4 0x00000003 +#define PCNT_CH0_POS_MODE_U4_M ((PCNT_CH0_POS_MODE_U4_V)<<(PCNT_CH0_POS_MODE_U4_S)) +#define PCNT_CH0_POS_MODE_U4_V 0x3 +#define PCNT_CH0_POS_MODE_U4_S 18 +/* PCNT_CH0_NEG_MODE_U4 : R/W ;bitpos:[17:16] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + negedge signal for unit4. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH0_NEG_MODE_U4 0x00000003 +#define PCNT_CH0_NEG_MODE_U4_M ((PCNT_CH0_NEG_MODE_U4_V)<<(PCNT_CH0_NEG_MODE_U4_S)) +#define PCNT_CH0_NEG_MODE_U4_V 0x3 +#define PCNT_CH0_NEG_MODE_U4_S 16 +/* PCNT_THR_THRES1_EN_U4 : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit4's count with thres1 value .*/ +#define PCNT_THR_THRES1_EN_U4 (BIT(15)) +#define PCNT_THR_THRES1_EN_U4_M (BIT(15)) +#define PCNT_THR_THRES1_EN_U4_V 0x1 +#define PCNT_THR_THRES1_EN_U4_S 15 +/* PCNT_THR_THRES0_EN_U4 : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit4's count with thres0 value.*/ +#define PCNT_THR_THRES0_EN_U4 (BIT(14)) +#define PCNT_THR_THRES0_EN_U4_M (BIT(14)) +#define PCNT_THR_THRES0_EN_U4_V 0x1 +#define PCNT_THR_THRES0_EN_U4_S 14 +/* PCNT_THR_L_LIM_EN_U4 : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit4's count with thr_l_lim value.*/ +#define PCNT_THR_L_LIM_EN_U4 (BIT(13)) +#define PCNT_THR_L_LIM_EN_U4_M (BIT(13)) +#define PCNT_THR_L_LIM_EN_U4_V 0x1 +#define PCNT_THR_L_LIM_EN_U4_S 13 +/* PCNT_THR_H_LIM_EN_U4 : R/W ;bitpos:[12] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit4's count with thr_h_lim value.*/ +#define PCNT_THR_H_LIM_EN_U4 (BIT(12)) +#define PCNT_THR_H_LIM_EN_U4_M (BIT(12)) +#define PCNT_THR_H_LIM_EN_U4_V 0x1 +#define PCNT_THR_H_LIM_EN_U4_S 12 +/* PCNT_THR_ZERO_EN_U4 : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit4's count with 0 value.*/ +#define PCNT_THR_ZERO_EN_U4 (BIT(11)) +#define PCNT_THR_ZERO_EN_U4_M (BIT(11)) +#define PCNT_THR_ZERO_EN_U4_V 0x1 +#define PCNT_THR_ZERO_EN_U4_S 11 +/* PCNT_FILTER_EN_U4 : R/W ;bitpos:[10] ;default: 1'b1 ; */ +/*description: This is the enable bit for filtering input signals for unit4.*/ +#define PCNT_FILTER_EN_U4 (BIT(10)) +#define PCNT_FILTER_EN_U4_M (BIT(10)) +#define PCNT_FILTER_EN_U4_V 0x1 +#define PCNT_FILTER_EN_U4_S 10 +/* PCNT_FILTER_THRES_U4 : R/W ;bitpos:[9:0] ;default: 10'h10 ; */ +/*description: This register is used to filter pluse whose width is smaller + than this value for unit4.*/ +#define PCNT_FILTER_THRES_U4 0x000003FF +#define PCNT_FILTER_THRES_U4_M ((PCNT_FILTER_THRES_U4_V)<<(PCNT_FILTER_THRES_U4_S)) +#define PCNT_FILTER_THRES_U4_V 0x3FF +#define PCNT_FILTER_THRES_U4_S 0 + +#define PCNT_U4_CONF1_REG (DR_REG_PCNT_BASE + 0x0034) +/* PCNT_CNT_THRES1_U4 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to configure thres1 value for unit4.*/ +#define PCNT_CNT_THRES1_U4 0x0000FFFF +#define PCNT_CNT_THRES1_U4_M ((PCNT_CNT_THRES1_U4_V)<<(PCNT_CNT_THRES1_U4_S)) +#define PCNT_CNT_THRES1_U4_V 0xFFFF +#define PCNT_CNT_THRES1_U4_S 16 +/* PCNT_CNT_THRES0_U4 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thres0 value for unit4.*/ +#define PCNT_CNT_THRES0_U4 0x0000FFFF +#define PCNT_CNT_THRES0_U4_M ((PCNT_CNT_THRES0_U4_V)<<(PCNT_CNT_THRES0_U4_S)) +#define PCNT_CNT_THRES0_U4_V 0xFFFF +#define PCNT_CNT_THRES0_U4_S 0 + +#define PCNT_U4_CONF2_REG (DR_REG_PCNT_BASE + 0x0038) +/* PCNT_CNT_L_LIM_U4 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to confiugre thr_l_lim value for unit4.*/ +#define PCNT_CNT_L_LIM_U4 0x0000FFFF +#define PCNT_CNT_L_LIM_U4_M ((PCNT_CNT_L_LIM_U4_V)<<(PCNT_CNT_L_LIM_U4_S)) +#define PCNT_CNT_L_LIM_U4_V 0xFFFF +#define PCNT_CNT_L_LIM_U4_S 16 +/* PCNT_CNT_H_LIM_U4 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thr_h_lim value for unit4.*/ +#define PCNT_CNT_H_LIM_U4 0x0000FFFF +#define PCNT_CNT_H_LIM_U4_M ((PCNT_CNT_H_LIM_U4_V)<<(PCNT_CNT_H_LIM_U4_S)) +#define PCNT_CNT_H_LIM_U4_V 0xFFFF +#define PCNT_CNT_H_LIM_U4_S 0 + +#define PCNT_U5_CONF0_REG (DR_REG_PCNT_BASE + 0x003c) +/* PCNT_CH1_LCTRL_MODE_U5 : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's low control + signal for unit5. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_LCTRL_MODE_U5 0x00000003 +#define PCNT_CH1_LCTRL_MODE_U5_M ((PCNT_CH1_LCTRL_MODE_U5_V)<<(PCNT_CH1_LCTRL_MODE_U5_S)) +#define PCNT_CH1_LCTRL_MODE_U5_V 0x3 +#define PCNT_CH1_LCTRL_MODE_U5_S 30 +/* PCNT_CH1_HCTRL_MODE_U5 : R/W ;bitpos:[29:28] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's high + control signal for unit5. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_HCTRL_MODE_U5 0x00000003 +#define PCNT_CH1_HCTRL_MODE_U5_M ((PCNT_CH1_HCTRL_MODE_U5_V)<<(PCNT_CH1_HCTRL_MODE_U5_S)) +#define PCNT_CH1_HCTRL_MODE_U5_V 0x3 +#define PCNT_CH1_HCTRL_MODE_U5_S 28 +/* PCNT_CH1_POS_MODE_U5 : R/W ;bitpos:[27:26] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + posedge signal for unit5. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH1_POS_MODE_U5 0x00000003 +#define PCNT_CH1_POS_MODE_U5_M ((PCNT_CH1_POS_MODE_U5_V)<<(PCNT_CH1_POS_MODE_U5_S)) +#define PCNT_CH1_POS_MODE_U5_V 0x3 +#define PCNT_CH1_POS_MODE_U5_S 26 +/* PCNT_CH1_NEG_MODE_U5 : R/W ;bitpos:[25:24] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + negedge signal for unit5. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH1_NEG_MODE_U5 0x00000003 +#define PCNT_CH1_NEG_MODE_U5_M ((PCNT_CH1_NEG_MODE_U5_V)<<(PCNT_CH1_NEG_MODE_U5_S)) +#define PCNT_CH1_NEG_MODE_U5_V 0x3 +#define PCNT_CH1_NEG_MODE_U5_S 24 +/* PCNT_CH0_LCTRL_MODE_U5 : R/W ;bitpos:[23:22] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's low control + signal for unit5. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_LCTRL_MODE_U5 0x00000003 +#define PCNT_CH0_LCTRL_MODE_U5_M ((PCNT_CH0_LCTRL_MODE_U5_V)<<(PCNT_CH0_LCTRL_MODE_U5_S)) +#define PCNT_CH0_LCTRL_MODE_U5_V 0x3 +#define PCNT_CH0_LCTRL_MODE_U5_S 22 +/* PCNT_CH0_HCTRL_MODE_U5 : R/W ;bitpos:[21:20] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's high + control signal for unit5. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_HCTRL_MODE_U5 0x00000003 +#define PCNT_CH0_HCTRL_MODE_U5_M ((PCNT_CH0_HCTRL_MODE_U5_V)<<(PCNT_CH0_HCTRL_MODE_U5_S)) +#define PCNT_CH0_HCTRL_MODE_U5_V 0x3 +#define PCNT_CH0_HCTRL_MODE_U5_S 20 +/* PCNT_CH0_POS_MODE_U5 : R/W ;bitpos:[19:18] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + posedge signal for unit5. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH0_POS_MODE_U5 0x00000003 +#define PCNT_CH0_POS_MODE_U5_M ((PCNT_CH0_POS_MODE_U5_V)<<(PCNT_CH0_POS_MODE_U5_S)) +#define PCNT_CH0_POS_MODE_U5_V 0x3 +#define PCNT_CH0_POS_MODE_U5_S 18 +/* PCNT_CH0_NEG_MODE_U5 : R/W ;bitpos:[17:16] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + negedge signal for unit5. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH0_NEG_MODE_U5 0x00000003 +#define PCNT_CH0_NEG_MODE_U5_M ((PCNT_CH0_NEG_MODE_U5_V)<<(PCNT_CH0_NEG_MODE_U5_S)) +#define PCNT_CH0_NEG_MODE_U5_V 0x3 +#define PCNT_CH0_NEG_MODE_U5_S 16 +/* PCNT_THR_THRES1_EN_U5 : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit5's count with thres1 value .*/ +#define PCNT_THR_THRES1_EN_U5 (BIT(15)) +#define PCNT_THR_THRES1_EN_U5_M (BIT(15)) +#define PCNT_THR_THRES1_EN_U5_V 0x1 +#define PCNT_THR_THRES1_EN_U5_S 15 +/* PCNT_THR_THRES0_EN_U5 : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit5's count with thres0 value.*/ +#define PCNT_THR_THRES0_EN_U5 (BIT(14)) +#define PCNT_THR_THRES0_EN_U5_M (BIT(14)) +#define PCNT_THR_THRES0_EN_U5_V 0x1 +#define PCNT_THR_THRES0_EN_U5_S 14 +/* PCNT_THR_L_LIM_EN_U5 : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit5's count with thr_l_lim value.*/ +#define PCNT_THR_L_LIM_EN_U5 (BIT(13)) +#define PCNT_THR_L_LIM_EN_U5_M (BIT(13)) +#define PCNT_THR_L_LIM_EN_U5_V 0x1 +#define PCNT_THR_L_LIM_EN_U5_S 13 +/* PCNT_THR_H_LIM_EN_U5 : R/W ;bitpos:[12] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit5's count with thr_h_lim value.*/ +#define PCNT_THR_H_LIM_EN_U5 (BIT(12)) +#define PCNT_THR_H_LIM_EN_U5_M (BIT(12)) +#define PCNT_THR_H_LIM_EN_U5_V 0x1 +#define PCNT_THR_H_LIM_EN_U5_S 12 +/* PCNT_THR_ZERO_EN_U5 : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit5's count with 0 value.*/ +#define PCNT_THR_ZERO_EN_U5 (BIT(11)) +#define PCNT_THR_ZERO_EN_U5_M (BIT(11)) +#define PCNT_THR_ZERO_EN_U5_V 0x1 +#define PCNT_THR_ZERO_EN_U5_S 11 +/* PCNT_FILTER_EN_U5 : R/W ;bitpos:[10] ;default: 1'b1 ; */ +/*description: This is the enable bit for filtering input signals for unit5.*/ +#define PCNT_FILTER_EN_U5 (BIT(10)) +#define PCNT_FILTER_EN_U5_M (BIT(10)) +#define PCNT_FILTER_EN_U5_V 0x1 +#define PCNT_FILTER_EN_U5_S 10 +/* PCNT_FILTER_THRES_U5 : R/W ;bitpos:[9:0] ;default: 10'h10 ; */ +/*description: This register is used to filter pluse whose width is smaller + than this value for unit5.*/ +#define PCNT_FILTER_THRES_U5 0x000003FF +#define PCNT_FILTER_THRES_U5_M ((PCNT_FILTER_THRES_U5_V)<<(PCNT_FILTER_THRES_U5_S)) +#define PCNT_FILTER_THRES_U5_V 0x3FF +#define PCNT_FILTER_THRES_U5_S 0 + +#define PCNT_U5_CONF1_REG (DR_REG_PCNT_BASE + 0x0040) +/* PCNT_CNT_THRES1_U5 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to configure thres1 value for unit5.*/ +#define PCNT_CNT_THRES1_U5 0x0000FFFF +#define PCNT_CNT_THRES1_U5_M ((PCNT_CNT_THRES1_U5_V)<<(PCNT_CNT_THRES1_U5_S)) +#define PCNT_CNT_THRES1_U5_V 0xFFFF +#define PCNT_CNT_THRES1_U5_S 16 +/* PCNT_CNT_THRES0_U5 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thres0 value for unit5.*/ +#define PCNT_CNT_THRES0_U5 0x0000FFFF +#define PCNT_CNT_THRES0_U5_M ((PCNT_CNT_THRES0_U5_V)<<(PCNT_CNT_THRES0_U5_S)) +#define PCNT_CNT_THRES0_U5_V 0xFFFF +#define PCNT_CNT_THRES0_U5_S 0 + +#define PCNT_U5_CONF2_REG (DR_REG_PCNT_BASE + 0x0044) +/* PCNT_CNT_L_LIM_U5 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to confiugre thr_l_lim value for unit5.*/ +#define PCNT_CNT_L_LIM_U5 0x0000FFFF +#define PCNT_CNT_L_LIM_U5_M ((PCNT_CNT_L_LIM_U5_V)<<(PCNT_CNT_L_LIM_U5_S)) +#define PCNT_CNT_L_LIM_U5_V 0xFFFF +#define PCNT_CNT_L_LIM_U5_S 16 +/* PCNT_CNT_H_LIM_U5 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thr_h_lim value for unit5.*/ +#define PCNT_CNT_H_LIM_U5 0x0000FFFF +#define PCNT_CNT_H_LIM_U5_M ((PCNT_CNT_H_LIM_U5_V)<<(PCNT_CNT_H_LIM_U5_S)) +#define PCNT_CNT_H_LIM_U5_V 0xFFFF +#define PCNT_CNT_H_LIM_U5_S 0 + +#define PCNT_U6_CONF0_REG (DR_REG_PCNT_BASE + 0x0048) +/* PCNT_CH1_LCTRL_MODE_U6 : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's low control + signal for unit6. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_LCTRL_MODE_U6 0x00000003 +#define PCNT_CH1_LCTRL_MODE_U6_M ((PCNT_CH1_LCTRL_MODE_U6_V)<<(PCNT_CH1_LCTRL_MODE_U6_S)) +#define PCNT_CH1_LCTRL_MODE_U6_V 0x3 +#define PCNT_CH1_LCTRL_MODE_U6_S 30 +/* PCNT_CH1_HCTRL_MODE_U6 : R/W ;bitpos:[29:28] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's high + control signal for unit6. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_HCTRL_MODE_U6 0x00000003 +#define PCNT_CH1_HCTRL_MODE_U6_M ((PCNT_CH1_HCTRL_MODE_U6_V)<<(PCNT_CH1_HCTRL_MODE_U6_S)) +#define PCNT_CH1_HCTRL_MODE_U6_V 0x3 +#define PCNT_CH1_HCTRL_MODE_U6_S 28 +/* PCNT_CH1_POS_MODE_U6 : R/W ;bitpos:[27:26] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + posedge signal for unit6. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH1_POS_MODE_U6 0x00000003 +#define PCNT_CH1_POS_MODE_U6_M ((PCNT_CH1_POS_MODE_U6_V)<<(PCNT_CH1_POS_MODE_U6_S)) +#define PCNT_CH1_POS_MODE_U6_V 0x3 +#define PCNT_CH1_POS_MODE_U6_S 26 +/* PCNT_CH1_NEG_MODE_U6 : R/W ;bitpos:[25:24] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + negedge signal for unit6. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH1_NEG_MODE_U6 0x00000003 +#define PCNT_CH1_NEG_MODE_U6_M ((PCNT_CH1_NEG_MODE_U6_V)<<(PCNT_CH1_NEG_MODE_U6_S)) +#define PCNT_CH1_NEG_MODE_U6_V 0x3 +#define PCNT_CH1_NEG_MODE_U6_S 24 +/* PCNT_CH0_LCTRL_MODE_U6 : R/W ;bitpos:[23:22] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's low control + signal for unit6. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_LCTRL_MODE_U6 0x00000003 +#define PCNT_CH0_LCTRL_MODE_U6_M ((PCNT_CH0_LCTRL_MODE_U6_V)<<(PCNT_CH0_LCTRL_MODE_U6_S)) +#define PCNT_CH0_LCTRL_MODE_U6_V 0x3 +#define PCNT_CH0_LCTRL_MODE_U6_S 22 +/* PCNT_CH0_HCTRL_MODE_U6 : R/W ;bitpos:[21:20] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's high + control signal for unit6. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_HCTRL_MODE_U6 0x00000003 +#define PCNT_CH0_HCTRL_MODE_U6_M ((PCNT_CH0_HCTRL_MODE_U6_V)<<(PCNT_CH0_HCTRL_MODE_U6_S)) +#define PCNT_CH0_HCTRL_MODE_U6_V 0x3 +#define PCNT_CH0_HCTRL_MODE_U6_S 20 +/* PCNT_CH0_POS_MODE_U6 : R/W ;bitpos:[19:18] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + posedge signal for unit6. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH0_POS_MODE_U6 0x00000003 +#define PCNT_CH0_POS_MODE_U6_M ((PCNT_CH0_POS_MODE_U6_V)<<(PCNT_CH0_POS_MODE_U6_S)) +#define PCNT_CH0_POS_MODE_U6_V 0x3 +#define PCNT_CH0_POS_MODE_U6_S 18 +/* PCNT_CH0_NEG_MODE_U6 : R/W ;bitpos:[17:16] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + negedge signal for unit6. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH0_NEG_MODE_U6 0x00000003 +#define PCNT_CH0_NEG_MODE_U6_M ((PCNT_CH0_NEG_MODE_U6_V)<<(PCNT_CH0_NEG_MODE_U6_S)) +#define PCNT_CH0_NEG_MODE_U6_V 0x3 +#define PCNT_CH0_NEG_MODE_U6_S 16 +/* PCNT_THR_THRES1_EN_U6 : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit6's count with thres1 value .*/ +#define PCNT_THR_THRES1_EN_U6 (BIT(15)) +#define PCNT_THR_THRES1_EN_U6_M (BIT(15)) +#define PCNT_THR_THRES1_EN_U6_V 0x1 +#define PCNT_THR_THRES1_EN_U6_S 15 +/* PCNT_THR_THRES0_EN_U6 : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit6's count with thres0 value.*/ +#define PCNT_THR_THRES0_EN_U6 (BIT(14)) +#define PCNT_THR_THRES0_EN_U6_M (BIT(14)) +#define PCNT_THR_THRES0_EN_U6_V 0x1 +#define PCNT_THR_THRES0_EN_U6_S 14 +/* PCNT_THR_L_LIM_EN_U6 : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit6's count with thr_l_lim value.*/ +#define PCNT_THR_L_LIM_EN_U6 (BIT(13)) +#define PCNT_THR_L_LIM_EN_U6_M (BIT(13)) +#define PCNT_THR_L_LIM_EN_U6_V 0x1 +#define PCNT_THR_L_LIM_EN_U6_S 13 +/* PCNT_THR_H_LIM_EN_U6 : R/W ;bitpos:[12] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit6's count with thr_h_lim value.*/ +#define PCNT_THR_H_LIM_EN_U6 (BIT(12)) +#define PCNT_THR_H_LIM_EN_U6_M (BIT(12)) +#define PCNT_THR_H_LIM_EN_U6_V 0x1 +#define PCNT_THR_H_LIM_EN_U6_S 12 +/* PCNT_THR_ZERO_EN_U6 : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit6's count with 0 value.*/ +#define PCNT_THR_ZERO_EN_U6 (BIT(11)) +#define PCNT_THR_ZERO_EN_U6_M (BIT(11)) +#define PCNT_THR_ZERO_EN_U6_V 0x1 +#define PCNT_THR_ZERO_EN_U6_S 11 +/* PCNT_FILTER_EN_U6 : R/W ;bitpos:[10] ;default: 1'b1 ; */ +/*description: This is the enable bit for filtering input signals for unit6.*/ +#define PCNT_FILTER_EN_U6 (BIT(10)) +#define PCNT_FILTER_EN_U6_M (BIT(10)) +#define PCNT_FILTER_EN_U6_V 0x1 +#define PCNT_FILTER_EN_U6_S 10 +/* PCNT_FILTER_THRES_U6 : R/W ;bitpos:[9:0] ;default: 10'h10 ; */ +/*description: This register is used to filter pluse whose width is smaller + than this value for unit6.*/ +#define PCNT_FILTER_THRES_U6 0x000003FF +#define PCNT_FILTER_THRES_U6_M ((PCNT_FILTER_THRES_U6_V)<<(PCNT_FILTER_THRES_U6_S)) +#define PCNT_FILTER_THRES_U6_V 0x3FF +#define PCNT_FILTER_THRES_U6_S 0 + +#define PCNT_U6_CONF1_REG (DR_REG_PCNT_BASE + 0x004c) +/* PCNT_CNT_THRES1_U6 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to configure thres1 value for unit6.*/ +#define PCNT_CNT_THRES1_U6 0x0000FFFF +#define PCNT_CNT_THRES1_U6_M ((PCNT_CNT_THRES1_U6_V)<<(PCNT_CNT_THRES1_U6_S)) +#define PCNT_CNT_THRES1_U6_V 0xFFFF +#define PCNT_CNT_THRES1_U6_S 16 +/* PCNT_CNT_THRES0_U6 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thres0 value for unit6.*/ +#define PCNT_CNT_THRES0_U6 0x0000FFFF +#define PCNT_CNT_THRES0_U6_M ((PCNT_CNT_THRES0_U6_V)<<(PCNT_CNT_THRES0_U6_S)) +#define PCNT_CNT_THRES0_U6_V 0xFFFF +#define PCNT_CNT_THRES0_U6_S 0 + +#define PCNT_U6_CONF2_REG (DR_REG_PCNT_BASE + 0x0050) +/* PCNT_CNT_L_LIM_U6 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to confiugre thr_l_lim value for unit6.*/ +#define PCNT_CNT_L_LIM_U6 0x0000FFFF +#define PCNT_CNT_L_LIM_U6_M ((PCNT_CNT_L_LIM_U6_V)<<(PCNT_CNT_L_LIM_U6_S)) +#define PCNT_CNT_L_LIM_U6_V 0xFFFF +#define PCNT_CNT_L_LIM_U6_S 16 +/* PCNT_CNT_H_LIM_U6 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thr_h_lim value for unit6.*/ +#define PCNT_CNT_H_LIM_U6 0x0000FFFF +#define PCNT_CNT_H_LIM_U6_M ((PCNT_CNT_H_LIM_U6_V)<<(PCNT_CNT_H_LIM_U6_S)) +#define PCNT_CNT_H_LIM_U6_V 0xFFFF +#define PCNT_CNT_H_LIM_U6_S 0 + +#define PCNT_U7_CONF0_REG (DR_REG_PCNT_BASE + 0x0054) +/* PCNT_CH1_LCTRL_MODE_U7 : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's low control + signal for unit7. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_LCTRL_MODE_U7 0x00000003 +#define PCNT_CH1_LCTRL_MODE_U7_M ((PCNT_CH1_LCTRL_MODE_U7_V)<<(PCNT_CH1_LCTRL_MODE_U7_S)) +#define PCNT_CH1_LCTRL_MODE_U7_V 0x3 +#define PCNT_CH1_LCTRL_MODE_U7_S 30 +/* PCNT_CH1_HCTRL_MODE_U7 : R/W ;bitpos:[29:28] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's high + control signal for unit7. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH1_HCTRL_MODE_U7 0x00000003 +#define PCNT_CH1_HCTRL_MODE_U7_M ((PCNT_CH1_HCTRL_MODE_U7_V)<<(PCNT_CH1_HCTRL_MODE_U7_S)) +#define PCNT_CH1_HCTRL_MODE_U7_V 0x3 +#define PCNT_CH1_HCTRL_MODE_U7_S 28 +/* PCNT_CH1_POS_MODE_U7 : R/W ;bitpos:[27:26] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + posedge signal for unit7. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH1_POS_MODE_U7 0x00000003 +#define PCNT_CH1_POS_MODE_U7_M ((PCNT_CH1_POS_MODE_U7_V)<<(PCNT_CH1_POS_MODE_U7_S)) +#define PCNT_CH1_POS_MODE_U7_V 0x3 +#define PCNT_CH1_POS_MODE_U7_S 26 +/* PCNT_CH1_NEG_MODE_U7 : R/W ;bitpos:[25:24] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel1's input + negedge signal for unit7. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH1_NEG_MODE_U7 0x00000003 +#define PCNT_CH1_NEG_MODE_U7_M ((PCNT_CH1_NEG_MODE_U7_V)<<(PCNT_CH1_NEG_MODE_U7_S)) +#define PCNT_CH1_NEG_MODE_U7_V 0x3 +#define PCNT_CH1_NEG_MODE_U7_S 24 +/* PCNT_CH0_LCTRL_MODE_U7 : R/W ;bitpos:[23:22] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's low control + signal for unit7. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_LCTRL_MODE_U7 0x00000003 +#define PCNT_CH0_LCTRL_MODE_U7_M ((PCNT_CH0_LCTRL_MODE_U7_V)<<(PCNT_CH0_LCTRL_MODE_U7_S)) +#define PCNT_CH0_LCTRL_MODE_U7_V 0x3 +#define PCNT_CH0_LCTRL_MODE_U7_S 22 +/* PCNT_CH0_HCTRL_MODE_U7 : R/W ;bitpos:[21:20] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's high + control signal for unit7. 2'd0:increase when control signal is low 2'd1: decrease when control signal is high others:forbidden*/ +#define PCNT_CH0_HCTRL_MODE_U7 0x00000003 +#define PCNT_CH0_HCTRL_MODE_U7_M ((PCNT_CH0_HCTRL_MODE_U7_V)<<(PCNT_CH0_HCTRL_MODE_U7_S)) +#define PCNT_CH0_HCTRL_MODE_U7_V 0x3 +#define PCNT_CH0_HCTRL_MODE_U7_S 20 +/* PCNT_CH0_POS_MODE_U7 : R/W ;bitpos:[19:18] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + posedge signal for unit7. 2'd1: increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ +#define PCNT_CH0_POS_MODE_U7 0x00000003 +#define PCNT_CH0_POS_MODE_U7_M ((PCNT_CH0_POS_MODE_U7_V)<<(PCNT_CH0_POS_MODE_U7_S)) +#define PCNT_CH0_POS_MODE_U7_V 0x3 +#define PCNT_CH0_POS_MODE_U7_S 18 +/* PCNT_CH0_NEG_MODE_U7 : R/W ;bitpos:[17:16] ;default: 2'd0 ; */ +/*description: This register is used to control the mode of channel0's input + negedge signal for unit7. 2'd1: increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ +#define PCNT_CH0_NEG_MODE_U7 0x00000003 +#define PCNT_CH0_NEG_MODE_U7_M ((PCNT_CH0_NEG_MODE_U7_V)<<(PCNT_CH0_NEG_MODE_U7_S)) +#define PCNT_CH0_NEG_MODE_U7_V 0x3 +#define PCNT_CH0_NEG_MODE_U7_S 16 +/* PCNT_THR_THRES1_EN_U7 : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit7's count with thres1 value .*/ +#define PCNT_THR_THRES1_EN_U7 (BIT(15)) +#define PCNT_THR_THRES1_EN_U7_M (BIT(15)) +#define PCNT_THR_THRES1_EN_U7_V 0x1 +#define PCNT_THR_THRES1_EN_U7_S 15 +/* PCNT_THR_THRES0_EN_U7 : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This is the enable bit for comparing unit7's count with thres0 value.*/ +#define PCNT_THR_THRES0_EN_U7 (BIT(14)) +#define PCNT_THR_THRES0_EN_U7_M (BIT(14)) +#define PCNT_THR_THRES0_EN_U7_V 0x1 +#define PCNT_THR_THRES0_EN_U7_S 14 +/* PCNT_THR_L_LIM_EN_U7 : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit7's count with thr_l_lim value.*/ +#define PCNT_THR_L_LIM_EN_U7 (BIT(13)) +#define PCNT_THR_L_LIM_EN_U7_M (BIT(13)) +#define PCNT_THR_L_LIM_EN_U7_V 0x1 +#define PCNT_THR_L_LIM_EN_U7_S 13 +/* PCNT_THR_H_LIM_EN_U7 : R/W ;bitpos:[12] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit7's count with thr_h_lim value.*/ +#define PCNT_THR_H_LIM_EN_U7 (BIT(12)) +#define PCNT_THR_H_LIM_EN_U7_M (BIT(12)) +#define PCNT_THR_H_LIM_EN_U7_V 0x1 +#define PCNT_THR_H_LIM_EN_U7_S 12 +/* PCNT_THR_ZERO_EN_U7 : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: This is the enable bit for comparing unit7's count with 0 value.*/ +#define PCNT_THR_ZERO_EN_U7 (BIT(11)) +#define PCNT_THR_ZERO_EN_U7_M (BIT(11)) +#define PCNT_THR_ZERO_EN_U7_V 0x1 +#define PCNT_THR_ZERO_EN_U7_S 11 +/* PCNT_FILTER_EN_U7 : R/W ;bitpos:[10] ;default: 1'b1 ; */ +/*description: This is the enable bit for filtering input signals for unit7.*/ +#define PCNT_FILTER_EN_U7 (BIT(10)) +#define PCNT_FILTER_EN_U7_M (BIT(10)) +#define PCNT_FILTER_EN_U7_V 0x1 +#define PCNT_FILTER_EN_U7_S 10 +/* PCNT_FILTER_THRES_U7 : R/W ;bitpos:[9:0] ;default: 10'h10 ; */ +/*description: This register is used to filter pluse whose width is smaller + than this value for unit7.*/ +#define PCNT_FILTER_THRES_U7 0x000003FF +#define PCNT_FILTER_THRES_U7_M ((PCNT_FILTER_THRES_U7_V)<<(PCNT_FILTER_THRES_U7_S)) +#define PCNT_FILTER_THRES_U7_V 0x3FF +#define PCNT_FILTER_THRES_U7_S 0 + +#define PCNT_U7_CONF1_REG (DR_REG_PCNT_BASE + 0x0058) +/* PCNT_CNT_THRES1_U7 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to configure thres1 value for unit7.*/ +#define PCNT_CNT_THRES1_U7 0x0000FFFF +#define PCNT_CNT_THRES1_U7_M ((PCNT_CNT_THRES1_U7_V)<<(PCNT_CNT_THRES1_U7_S)) +#define PCNT_CNT_THRES1_U7_V 0xFFFF +#define PCNT_CNT_THRES1_U7_S 16 +/* PCNT_CNT_THRES0_U7 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thres0 value for unit7.*/ +#define PCNT_CNT_THRES0_U7 0x0000FFFF +#define PCNT_CNT_THRES0_U7_M ((PCNT_CNT_THRES0_U7_V)<<(PCNT_CNT_THRES0_U7_S)) +#define PCNT_CNT_THRES0_U7_V 0xFFFF +#define PCNT_CNT_THRES0_U7_S 0 + +#define PCNT_U7_CONF2_REG (DR_REG_PCNT_BASE + 0x005c) +/* PCNT_CNT_L_LIM_U7 : R/W ;bitpos:[31:16] ;default: 10'h0 ; */ +/*description: This register is used to confiugre thr_l_lim value for unit7.*/ +#define PCNT_CNT_L_LIM_U7 0x0000FFFF +#define PCNT_CNT_L_LIM_U7_M ((PCNT_CNT_L_LIM_U7_V)<<(PCNT_CNT_L_LIM_U7_S)) +#define PCNT_CNT_L_LIM_U7_V 0xFFFF +#define PCNT_CNT_L_LIM_U7_S 16 +/* PCNT_CNT_H_LIM_U7 : R/W ;bitpos:[15:0] ;default: 10'h0 ; */ +/*description: This register is used to configure thr_h_lim value for unit7.*/ +#define PCNT_CNT_H_LIM_U7 0x0000FFFF +#define PCNT_CNT_H_LIM_U7_M ((PCNT_CNT_H_LIM_U7_V)<<(PCNT_CNT_H_LIM_U7_S)) +#define PCNT_CNT_H_LIM_U7_V 0xFFFF +#define PCNT_CNT_H_LIM_U7_S 0 + +#define PCNT_U0_CNT_REG (DR_REG_PCNT_BASE + 0x0060) +/* PCNT_PLUS_CNT_U0 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: This register stores the current pulse count value for unit0.*/ +#define PCNT_PLUS_CNT_U0 0x0000FFFF +#define PCNT_PLUS_CNT_U0_M ((PCNT_PLUS_CNT_U0_V)<<(PCNT_PLUS_CNT_U0_S)) +#define PCNT_PLUS_CNT_U0_V 0xFFFF +#define PCNT_PLUS_CNT_U0_S 0 + +#define PCNT_U1_CNT_REG (DR_REG_PCNT_BASE + 0x0064) +/* PCNT_PLUS_CNT_U1 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: This register stores the current pulse count value for unit1.*/ +#define PCNT_PLUS_CNT_U1 0x0000FFFF +#define PCNT_PLUS_CNT_U1_M ((PCNT_PLUS_CNT_U1_V)<<(PCNT_PLUS_CNT_U1_S)) +#define PCNT_PLUS_CNT_U1_V 0xFFFF +#define PCNT_PLUS_CNT_U1_S 0 + +#define PCNT_U2_CNT_REG (DR_REG_PCNT_BASE + 0x0068) +/* PCNT_PLUS_CNT_U2 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: This register stores the current pulse count value for unit2.*/ +#define PCNT_PLUS_CNT_U2 0x0000FFFF +#define PCNT_PLUS_CNT_U2_M ((PCNT_PLUS_CNT_U2_V)<<(PCNT_PLUS_CNT_U2_S)) +#define PCNT_PLUS_CNT_U2_V 0xFFFF +#define PCNT_PLUS_CNT_U2_S 0 + +#define PCNT_U3_CNT_REG (DR_REG_PCNT_BASE + 0x006c) +/* PCNT_PLUS_CNT_U3 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: This register stores the current pulse count value for unit3.*/ +#define PCNT_PLUS_CNT_U3 0x0000FFFF +#define PCNT_PLUS_CNT_U3_M ((PCNT_PLUS_CNT_U3_V)<<(PCNT_PLUS_CNT_U3_S)) +#define PCNT_PLUS_CNT_U3_V 0xFFFF +#define PCNT_PLUS_CNT_U3_S 0 + +#define PCNT_U4_CNT_REG (DR_REG_PCNT_BASE + 0x0070) +/* PCNT_PLUS_CNT_U4 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: This register stores the current pulse count value for unit4.*/ +#define PCNT_PLUS_CNT_U4 0x0000FFFF +#define PCNT_PLUS_CNT_U4_M ((PCNT_PLUS_CNT_U4_V)<<(PCNT_PLUS_CNT_U4_S)) +#define PCNT_PLUS_CNT_U4_V 0xFFFF +#define PCNT_PLUS_CNT_U4_S 0 + +#define PCNT_U5_CNT_REG (DR_REG_PCNT_BASE + 0x0074) +/* PCNT_PLUS_CNT_U5 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: This register stores the current pulse count value for unit5.*/ +#define PCNT_PLUS_CNT_U5 0x0000FFFF +#define PCNT_PLUS_CNT_U5_M ((PCNT_PLUS_CNT_U5_V)<<(PCNT_PLUS_CNT_U5_S)) +#define PCNT_PLUS_CNT_U5_V 0xFFFF +#define PCNT_PLUS_CNT_U5_S 0 + +#define PCNT_U6_CNT_REG (DR_REG_PCNT_BASE + 0x0078) +/* PCNT_PLUS_CNT_U6 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: This register stores the current pulse count value for unit6.*/ +#define PCNT_PLUS_CNT_U6 0x0000FFFF +#define PCNT_PLUS_CNT_U6_M ((PCNT_PLUS_CNT_U6_V)<<(PCNT_PLUS_CNT_U6_S)) +#define PCNT_PLUS_CNT_U6_V 0xFFFF +#define PCNT_PLUS_CNT_U6_S 0 + +#define PCNT_U7_CNT_REG (DR_REG_PCNT_BASE + 0x007c) +/* PCNT_PLUS_CNT_U7 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: This register stores the current pulse count value for unit7.*/ +#define PCNT_PLUS_CNT_U7 0x0000FFFF +#define PCNT_PLUS_CNT_U7_M ((PCNT_PLUS_CNT_U7_V)<<(PCNT_PLUS_CNT_U7_S)) +#define PCNT_PLUS_CNT_U7_V 0xFFFF +#define PCNT_PLUS_CNT_U7_S 0 + +#define PCNT_INT_RAW_REG (DR_REG_PCNT_BASE + 0x0080) +/* PCNT_CNT_THR_EVENT_U7_INT_RAW : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the interrupt raw bit for channel7 event.*/ +#define PCNT_CNT_THR_EVENT_U7_INT_RAW (BIT(7)) +#define PCNT_CNT_THR_EVENT_U7_INT_RAW_M (BIT(7)) +#define PCNT_CNT_THR_EVENT_U7_INT_RAW_V 0x1 +#define PCNT_CNT_THR_EVENT_U7_INT_RAW_S 7 +/* PCNT_CNT_THR_EVENT_U6_INT_RAW : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: This is the interrupt raw bit for channel6 event.*/ +#define PCNT_CNT_THR_EVENT_U6_INT_RAW (BIT(6)) +#define PCNT_CNT_THR_EVENT_U6_INT_RAW_M (BIT(6)) +#define PCNT_CNT_THR_EVENT_U6_INT_RAW_V 0x1 +#define PCNT_CNT_THR_EVENT_U6_INT_RAW_S 6 +/* PCNT_CNT_THR_EVENT_U5_INT_RAW : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: This is the interrupt raw bit for channel5 event.*/ +#define PCNT_CNT_THR_EVENT_U5_INT_RAW (BIT(5)) +#define PCNT_CNT_THR_EVENT_U5_INT_RAW_M (BIT(5)) +#define PCNT_CNT_THR_EVENT_U5_INT_RAW_V 0x1 +#define PCNT_CNT_THR_EVENT_U5_INT_RAW_S 5 +/* PCNT_CNT_THR_EVENT_U4_INT_RAW : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This is the interrupt raw bit for channel4 event.*/ +#define PCNT_CNT_THR_EVENT_U4_INT_RAW (BIT(4)) +#define PCNT_CNT_THR_EVENT_U4_INT_RAW_M (BIT(4)) +#define PCNT_CNT_THR_EVENT_U4_INT_RAW_V 0x1 +#define PCNT_CNT_THR_EVENT_U4_INT_RAW_S 4 +/* PCNT_CNT_THR_EVENT_U3_INT_RAW : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This is the interrupt raw bit for channel3 event.*/ +#define PCNT_CNT_THR_EVENT_U3_INT_RAW (BIT(3)) +#define PCNT_CNT_THR_EVENT_U3_INT_RAW_M (BIT(3)) +#define PCNT_CNT_THR_EVENT_U3_INT_RAW_V 0x1 +#define PCNT_CNT_THR_EVENT_U3_INT_RAW_S 3 +/* PCNT_CNT_THR_EVENT_U2_INT_RAW : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the interrupt raw bit for channel2 event.*/ +#define PCNT_CNT_THR_EVENT_U2_INT_RAW (BIT(2)) +#define PCNT_CNT_THR_EVENT_U2_INT_RAW_M (BIT(2)) +#define PCNT_CNT_THR_EVENT_U2_INT_RAW_V 0x1 +#define PCNT_CNT_THR_EVENT_U2_INT_RAW_S 2 +/* PCNT_CNT_THR_EVENT_U1_INT_RAW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: This is the interrupt raw bit for channel1 event.*/ +#define PCNT_CNT_THR_EVENT_U1_INT_RAW (BIT(1)) +#define PCNT_CNT_THR_EVENT_U1_INT_RAW_M (BIT(1)) +#define PCNT_CNT_THR_EVENT_U1_INT_RAW_V 0x1 +#define PCNT_CNT_THR_EVENT_U1_INT_RAW_S 1 +/* PCNT_CNT_THR_EVENT_U0_INT_RAW : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: This is the interrupt raw bit for channel0 event.*/ +#define PCNT_CNT_THR_EVENT_U0_INT_RAW (BIT(0)) +#define PCNT_CNT_THR_EVENT_U0_INT_RAW_M (BIT(0)) +#define PCNT_CNT_THR_EVENT_U0_INT_RAW_V 0x1 +#define PCNT_CNT_THR_EVENT_U0_INT_RAW_S 0 + +#define PCNT_INT_ST_REG (DR_REG_PCNT_BASE + 0x0084) +/* PCNT_CNT_THR_EVENT_U7_INT_ST : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the interrupt status bit for channel7 event.*/ +#define PCNT_CNT_THR_EVENT_U7_INT_ST (BIT(7)) +#define PCNT_CNT_THR_EVENT_U7_INT_ST_M (BIT(7)) +#define PCNT_CNT_THR_EVENT_U7_INT_ST_V 0x1 +#define PCNT_CNT_THR_EVENT_U7_INT_ST_S 7 +/* PCNT_CNT_THR_EVENT_U6_INT_ST : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: This is the interrupt status bit for channel6 event.*/ +#define PCNT_CNT_THR_EVENT_U6_INT_ST (BIT(6)) +#define PCNT_CNT_THR_EVENT_U6_INT_ST_M (BIT(6)) +#define PCNT_CNT_THR_EVENT_U6_INT_ST_V 0x1 +#define PCNT_CNT_THR_EVENT_U6_INT_ST_S 6 +/* PCNT_CNT_THR_EVENT_U5_INT_ST : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: This is the interrupt status bit for channel5 event.*/ +#define PCNT_CNT_THR_EVENT_U5_INT_ST (BIT(5)) +#define PCNT_CNT_THR_EVENT_U5_INT_ST_M (BIT(5)) +#define PCNT_CNT_THR_EVENT_U5_INT_ST_V 0x1 +#define PCNT_CNT_THR_EVENT_U5_INT_ST_S 5 +/* PCNT_CNT_THR_EVENT_U4_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This is the interrupt status bit for channel4 event.*/ +#define PCNT_CNT_THR_EVENT_U4_INT_ST (BIT(4)) +#define PCNT_CNT_THR_EVENT_U4_INT_ST_M (BIT(4)) +#define PCNT_CNT_THR_EVENT_U4_INT_ST_V 0x1 +#define PCNT_CNT_THR_EVENT_U4_INT_ST_S 4 +/* PCNT_CNT_THR_EVENT_U3_INT_ST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This is the interrupt status bit for channel3 event.*/ +#define PCNT_CNT_THR_EVENT_U3_INT_ST (BIT(3)) +#define PCNT_CNT_THR_EVENT_U3_INT_ST_M (BIT(3)) +#define PCNT_CNT_THR_EVENT_U3_INT_ST_V 0x1 +#define PCNT_CNT_THR_EVENT_U3_INT_ST_S 3 +/* PCNT_CNT_THR_EVENT_U2_INT_ST : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the interrupt status bit for channel2 event.*/ +#define PCNT_CNT_THR_EVENT_U2_INT_ST (BIT(2)) +#define PCNT_CNT_THR_EVENT_U2_INT_ST_M (BIT(2)) +#define PCNT_CNT_THR_EVENT_U2_INT_ST_V 0x1 +#define PCNT_CNT_THR_EVENT_U2_INT_ST_S 2 +/* PCNT_CNT_THR_EVENT_U1_INT_ST : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: This is the interrupt status bit for channel1 event.*/ +#define PCNT_CNT_THR_EVENT_U1_INT_ST (BIT(1)) +#define PCNT_CNT_THR_EVENT_U1_INT_ST_M (BIT(1)) +#define PCNT_CNT_THR_EVENT_U1_INT_ST_V 0x1 +#define PCNT_CNT_THR_EVENT_U1_INT_ST_S 1 +/* PCNT_CNT_THR_EVENT_U0_INT_ST : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: This is the interrupt status bit for channel0 event.*/ +#define PCNT_CNT_THR_EVENT_U0_INT_ST (BIT(0)) +#define PCNT_CNT_THR_EVENT_U0_INT_ST_M (BIT(0)) +#define PCNT_CNT_THR_EVENT_U0_INT_ST_V 0x1 +#define PCNT_CNT_THR_EVENT_U0_INT_ST_S 0 + +#define PCNT_INT_ENA_REG (DR_REG_PCNT_BASE + 0x0088) +/* PCNT_CNT_THR_EVENT_U7_INT_ENA : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the interrupt enable bit for channel7 event.*/ +#define PCNT_CNT_THR_EVENT_U7_INT_ENA (BIT(7)) +#define PCNT_CNT_THR_EVENT_U7_INT_ENA_M (BIT(7)) +#define PCNT_CNT_THR_EVENT_U7_INT_ENA_V 0x1 +#define PCNT_CNT_THR_EVENT_U7_INT_ENA_S 7 +/* PCNT_CNT_THR_EVENT_U6_INT_ENA : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: This is the interrupt enable bit for channel6 event.*/ +#define PCNT_CNT_THR_EVENT_U6_INT_ENA (BIT(6)) +#define PCNT_CNT_THR_EVENT_U6_INT_ENA_M (BIT(6)) +#define PCNT_CNT_THR_EVENT_U6_INT_ENA_V 0x1 +#define PCNT_CNT_THR_EVENT_U6_INT_ENA_S 6 +/* PCNT_CNT_THR_EVENT_U5_INT_ENA : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: This is the interrupt enable bit for channel5 event.*/ +#define PCNT_CNT_THR_EVENT_U5_INT_ENA (BIT(5)) +#define PCNT_CNT_THR_EVENT_U5_INT_ENA_M (BIT(5)) +#define PCNT_CNT_THR_EVENT_U5_INT_ENA_V 0x1 +#define PCNT_CNT_THR_EVENT_U5_INT_ENA_S 5 +/* PCNT_CNT_THR_EVENT_U4_INT_ENA : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This is the interrupt enable bit for channel4 event.*/ +#define PCNT_CNT_THR_EVENT_U4_INT_ENA (BIT(4)) +#define PCNT_CNT_THR_EVENT_U4_INT_ENA_M (BIT(4)) +#define PCNT_CNT_THR_EVENT_U4_INT_ENA_V 0x1 +#define PCNT_CNT_THR_EVENT_U4_INT_ENA_S 4 +/* PCNT_CNT_THR_EVENT_U3_INT_ENA : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This is the interrupt enable bit for channel3 event.*/ +#define PCNT_CNT_THR_EVENT_U3_INT_ENA (BIT(3)) +#define PCNT_CNT_THR_EVENT_U3_INT_ENA_M (BIT(3)) +#define PCNT_CNT_THR_EVENT_U3_INT_ENA_V 0x1 +#define PCNT_CNT_THR_EVENT_U3_INT_ENA_S 3 +/* PCNT_CNT_THR_EVENT_U2_INT_ENA : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the interrupt enable bit for channel2 event.*/ +#define PCNT_CNT_THR_EVENT_U2_INT_ENA (BIT(2)) +#define PCNT_CNT_THR_EVENT_U2_INT_ENA_M (BIT(2)) +#define PCNT_CNT_THR_EVENT_U2_INT_ENA_V 0x1 +#define PCNT_CNT_THR_EVENT_U2_INT_ENA_S 2 +/* PCNT_CNT_THR_EVENT_U1_INT_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: This is the interrupt enable bit for channel1 event.*/ +#define PCNT_CNT_THR_EVENT_U1_INT_ENA (BIT(1)) +#define PCNT_CNT_THR_EVENT_U1_INT_ENA_M (BIT(1)) +#define PCNT_CNT_THR_EVENT_U1_INT_ENA_V 0x1 +#define PCNT_CNT_THR_EVENT_U1_INT_ENA_S 1 +/* PCNT_CNT_THR_EVENT_U0_INT_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: This is the interrupt enable bit for channel0 event.*/ +#define PCNT_CNT_THR_EVENT_U0_INT_ENA (BIT(0)) +#define PCNT_CNT_THR_EVENT_U0_INT_ENA_M (BIT(0)) +#define PCNT_CNT_THR_EVENT_U0_INT_ENA_V 0x1 +#define PCNT_CNT_THR_EVENT_U0_INT_ENA_S 0 + +#define PCNT_INT_CLR_REG (DR_REG_PCNT_BASE + 0x008c) +/* PCNT_CNT_THR_EVENT_U7_INT_CLR : WO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set this bit to clear channel7 event interrupt.*/ +#define PCNT_CNT_THR_EVENT_U7_INT_CLR (BIT(7)) +#define PCNT_CNT_THR_EVENT_U7_INT_CLR_M (BIT(7)) +#define PCNT_CNT_THR_EVENT_U7_INT_CLR_V 0x1 +#define PCNT_CNT_THR_EVENT_U7_INT_CLR_S 7 +/* PCNT_CNT_THR_EVENT_U6_INT_CLR : WO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to clear channel6 event interrupt.*/ +#define PCNT_CNT_THR_EVENT_U6_INT_CLR (BIT(6)) +#define PCNT_CNT_THR_EVENT_U6_INT_CLR_M (BIT(6)) +#define PCNT_CNT_THR_EVENT_U6_INT_CLR_V 0x1 +#define PCNT_CNT_THR_EVENT_U6_INT_CLR_S 6 +/* PCNT_CNT_THR_EVENT_U5_INT_CLR : WO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Set this bit to clear channel5 event interrupt.*/ +#define PCNT_CNT_THR_EVENT_U5_INT_CLR (BIT(5)) +#define PCNT_CNT_THR_EVENT_U5_INT_CLR_M (BIT(5)) +#define PCNT_CNT_THR_EVENT_U5_INT_CLR_V 0x1 +#define PCNT_CNT_THR_EVENT_U5_INT_CLR_S 5 +/* PCNT_CNT_THR_EVENT_U4_INT_CLR : WO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to clear channel4 event interrupt.*/ +#define PCNT_CNT_THR_EVENT_U4_INT_CLR (BIT(4)) +#define PCNT_CNT_THR_EVENT_U4_INT_CLR_M (BIT(4)) +#define PCNT_CNT_THR_EVENT_U4_INT_CLR_V 0x1 +#define PCNT_CNT_THR_EVENT_U4_INT_CLR_S 4 +/* PCNT_CNT_THR_EVENT_U3_INT_CLR : WO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to clear channel3 event interrupt.*/ +#define PCNT_CNT_THR_EVENT_U3_INT_CLR (BIT(3)) +#define PCNT_CNT_THR_EVENT_U3_INT_CLR_M (BIT(3)) +#define PCNT_CNT_THR_EVENT_U3_INT_CLR_V 0x1 +#define PCNT_CNT_THR_EVENT_U3_INT_CLR_S 3 +/* PCNT_CNT_THR_EVENT_U2_INT_CLR : WO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to clear channel2 event interrupt.*/ +#define PCNT_CNT_THR_EVENT_U2_INT_CLR (BIT(2)) +#define PCNT_CNT_THR_EVENT_U2_INT_CLR_M (BIT(2)) +#define PCNT_CNT_THR_EVENT_U2_INT_CLR_V 0x1 +#define PCNT_CNT_THR_EVENT_U2_INT_CLR_S 2 +/* PCNT_CNT_THR_EVENT_U1_INT_CLR : WO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to clear channel1 event interrupt.*/ +#define PCNT_CNT_THR_EVENT_U1_INT_CLR (BIT(1)) +#define PCNT_CNT_THR_EVENT_U1_INT_CLR_M (BIT(1)) +#define PCNT_CNT_THR_EVENT_U1_INT_CLR_V 0x1 +#define PCNT_CNT_THR_EVENT_U1_INT_CLR_S 1 +/* PCNT_CNT_THR_EVENT_U0_INT_CLR : WO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Set this bit to clear channel0 event interrupt.*/ +#define PCNT_CNT_THR_EVENT_U0_INT_CLR (BIT(0)) +#define PCNT_CNT_THR_EVENT_U0_INT_CLR_M (BIT(0)) +#define PCNT_CNT_THR_EVENT_U0_INT_CLR_V 0x1 +#define PCNT_CNT_THR_EVENT_U0_INT_CLR_S 0 + +#define PCNT_U0_STATUS_REG (DR_REG_PCNT_BASE + 0x0090) +/* PCNT_CORE_STATUS_U0 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define PCNT_CORE_STATUS_U0 0xFFFFFFFF +#define PCNT_CORE_STATUS_U0_M ((PCNT_CORE_STATUS_U0_V)<<(PCNT_CORE_STATUS_U0_S)) +#define PCNT_CORE_STATUS_U0_V 0xFFFFFFFF +#define PCNT_CORE_STATUS_U0_S 0 + +#define PCNT_U1_STATUS_REG (DR_REG_PCNT_BASE + 0x0094) +/* PCNT_CORE_STATUS_U1 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define PCNT_CORE_STATUS_U1 0xFFFFFFFF +#define PCNT_CORE_STATUS_U1_M ((PCNT_CORE_STATUS_U1_V)<<(PCNT_CORE_STATUS_U1_S)) +#define PCNT_CORE_STATUS_U1_V 0xFFFFFFFF +#define PCNT_CORE_STATUS_U1_S 0 + +#define PCNT_U2_STATUS_REG (DR_REG_PCNT_BASE + 0x0098) +/* PCNT_CORE_STATUS_U2 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define PCNT_CORE_STATUS_U2 0xFFFFFFFF +#define PCNT_CORE_STATUS_U2_M ((PCNT_CORE_STATUS_U2_V)<<(PCNT_CORE_STATUS_U2_S)) +#define PCNT_CORE_STATUS_U2_V 0xFFFFFFFF +#define PCNT_CORE_STATUS_U2_S 0 + +#define PCNT_U3_STATUS_REG (DR_REG_PCNT_BASE + 0x009c) +/* PCNT_CORE_STATUS_U3 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define PCNT_CORE_STATUS_U3 0xFFFFFFFF +#define PCNT_CORE_STATUS_U3_M ((PCNT_CORE_STATUS_U3_V)<<(PCNT_CORE_STATUS_U3_S)) +#define PCNT_CORE_STATUS_U3_V 0xFFFFFFFF +#define PCNT_CORE_STATUS_U3_S 0 + +#define PCNT_U4_STATUS_REG (DR_REG_PCNT_BASE + 0x00a0) +/* PCNT_CORE_STATUS_U4 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define PCNT_CORE_STATUS_U4 0xFFFFFFFF +#define PCNT_CORE_STATUS_U4_M ((PCNT_CORE_STATUS_U4_V)<<(PCNT_CORE_STATUS_U4_S)) +#define PCNT_CORE_STATUS_U4_V 0xFFFFFFFF +#define PCNT_CORE_STATUS_U4_S 0 + +#define PCNT_U5_STATUS_REG (DR_REG_PCNT_BASE + 0x00a4) +/* PCNT_CORE_STATUS_U5 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define PCNT_CORE_STATUS_U5 0xFFFFFFFF +#define PCNT_CORE_STATUS_U5_M ((PCNT_CORE_STATUS_U5_V)<<(PCNT_CORE_STATUS_U5_S)) +#define PCNT_CORE_STATUS_U5_V 0xFFFFFFFF +#define PCNT_CORE_STATUS_U5_S 0 + +#define PCNT_U6_STATUS_REG (DR_REG_PCNT_BASE + 0x00a8) +/* PCNT_CORE_STATUS_U6 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define PCNT_CORE_STATUS_U6 0xFFFFFFFF +#define PCNT_CORE_STATUS_U6_M ((PCNT_CORE_STATUS_U6_V)<<(PCNT_CORE_STATUS_U6_S)) +#define PCNT_CORE_STATUS_U6_V 0xFFFFFFFF +#define PCNT_CORE_STATUS_U6_S 0 + +#define PCNT_U7_STATUS_REG (DR_REG_PCNT_BASE + 0x00ac) +/* PCNT_CORE_STATUS_U7 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define PCNT_CORE_STATUS_U7 0xFFFFFFFF +#define PCNT_CORE_STATUS_U7_M ((PCNT_CORE_STATUS_U7_V)<<(PCNT_CORE_STATUS_U7_S)) +#define PCNT_CORE_STATUS_U7_V 0xFFFFFFFF +#define PCNT_CORE_STATUS_U7_S 0 + +#define PCNT_CTRL_REG (DR_REG_PCNT_BASE + 0x00b0) +/* PCNT_CLK_EN : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define PCNT_CLK_EN (BIT(16)) +#define PCNT_CLK_EN_M (BIT(16)) +#define PCNT_CLK_EN_V 0x1 +#define PCNT_CLK_EN_S 16 +/* PCNT_CNT_PAUSE_U7 : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: Set this bit to pause unit7's counter.*/ +#define PCNT_CNT_PAUSE_U7 (BIT(15)) +#define PCNT_CNT_PAUSE_U7_M (BIT(15)) +#define PCNT_CNT_PAUSE_U7_V 0x1 +#define PCNT_CNT_PAUSE_U7_S 15 +/* PCNT_PLUS_CNT_RST_U7 : R/W ;bitpos:[14] ;default: 1'b1 ; */ +/*description: Set this bit to clear unit7's counter.*/ +#define PCNT_PLUS_CNT_RST_U7 (BIT(14)) +#define PCNT_PLUS_CNT_RST_U7_M (BIT(14)) +#define PCNT_PLUS_CNT_RST_U7_V 0x1 +#define PCNT_PLUS_CNT_RST_U7_S 14 +/* PCNT_CNT_PAUSE_U6 : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: Set this bit to pause unit6's counter.*/ +#define PCNT_CNT_PAUSE_U6 (BIT(13)) +#define PCNT_CNT_PAUSE_U6_M (BIT(13)) +#define PCNT_CNT_PAUSE_U6_V 0x1 +#define PCNT_CNT_PAUSE_U6_S 13 +/* PCNT_PLUS_CNT_RST_U6 : R/W ;bitpos:[12] ;default: 1'b1 ; */ +/*description: Set this bit to clear unit6's counter.*/ +#define PCNT_PLUS_CNT_RST_U6 (BIT(12)) +#define PCNT_PLUS_CNT_RST_U6_M (BIT(12)) +#define PCNT_PLUS_CNT_RST_U6_V 0x1 +#define PCNT_PLUS_CNT_RST_U6_S 12 +/* PCNT_CNT_PAUSE_U5 : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: Set this bit to pause unit5's counter.*/ +#define PCNT_CNT_PAUSE_U5 (BIT(11)) +#define PCNT_CNT_PAUSE_U5_M (BIT(11)) +#define PCNT_CNT_PAUSE_U5_V 0x1 +#define PCNT_CNT_PAUSE_U5_S 11 +/* PCNT_PLUS_CNT_RST_U5 : R/W ;bitpos:[10] ;default: 1'b1 ; */ +/*description: Set this bit to clear unit5's counter.*/ +#define PCNT_PLUS_CNT_RST_U5 (BIT(10)) +#define PCNT_PLUS_CNT_RST_U5_M (BIT(10)) +#define PCNT_PLUS_CNT_RST_U5_V 0x1 +#define PCNT_PLUS_CNT_RST_U5_S 10 +/* PCNT_CNT_PAUSE_U4 : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: Set this bit to pause unit4's counter.*/ +#define PCNT_CNT_PAUSE_U4 (BIT(9)) +#define PCNT_CNT_PAUSE_U4_M (BIT(9)) +#define PCNT_CNT_PAUSE_U4_V 0x1 +#define PCNT_CNT_PAUSE_U4_S 9 +/* PCNT_PLUS_CNT_RST_U4 : R/W ;bitpos:[8] ;default: 1'b1 ; */ +/*description: Set this bit to clear unit4's counter.*/ +#define PCNT_PLUS_CNT_RST_U4 (BIT(8)) +#define PCNT_PLUS_CNT_RST_U4_M (BIT(8)) +#define PCNT_PLUS_CNT_RST_U4_V 0x1 +#define PCNT_PLUS_CNT_RST_U4_S 8 +/* PCNT_CNT_PAUSE_U3 : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set this bit to pause unit3's counter.*/ +#define PCNT_CNT_PAUSE_U3 (BIT(7)) +#define PCNT_CNT_PAUSE_U3_M (BIT(7)) +#define PCNT_CNT_PAUSE_U3_V 0x1 +#define PCNT_CNT_PAUSE_U3_S 7 +/* PCNT_PLUS_CNT_RST_U3 : R/W ;bitpos:[6] ;default: 1'b1 ; */ +/*description: Set this bit to clear unit3's counter.*/ +#define PCNT_PLUS_CNT_RST_U3 (BIT(6)) +#define PCNT_PLUS_CNT_RST_U3_M (BIT(6)) +#define PCNT_PLUS_CNT_RST_U3_V 0x1 +#define PCNT_PLUS_CNT_RST_U3_S 6 +/* PCNT_CNT_PAUSE_U2 : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Set this bit to pause unit2's counter.*/ +#define PCNT_CNT_PAUSE_U2 (BIT(5)) +#define PCNT_CNT_PAUSE_U2_M (BIT(5)) +#define PCNT_CNT_PAUSE_U2_V 0x1 +#define PCNT_CNT_PAUSE_U2_S 5 +/* PCNT_PLUS_CNT_RST_U2 : R/W ;bitpos:[4] ;default: 1'b1 ; */ +/*description: Set this bit to clear unit2's counter.*/ +#define PCNT_PLUS_CNT_RST_U2 (BIT(4)) +#define PCNT_PLUS_CNT_RST_U2_M (BIT(4)) +#define PCNT_PLUS_CNT_RST_U2_V 0x1 +#define PCNT_PLUS_CNT_RST_U2_S 4 +/* PCNT_CNT_PAUSE_U1 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to pause unit1's counter.*/ +#define PCNT_CNT_PAUSE_U1 (BIT(3)) +#define PCNT_CNT_PAUSE_U1_M (BIT(3)) +#define PCNT_CNT_PAUSE_U1_V 0x1 +#define PCNT_CNT_PAUSE_U1_S 3 +/* PCNT_PLUS_CNT_RST_U1 : R/W ;bitpos:[2] ;default: 1'b1 ; */ +/*description: Set this bit to clear unit1's counter.*/ +#define PCNT_PLUS_CNT_RST_U1 (BIT(2)) +#define PCNT_PLUS_CNT_RST_U1_M (BIT(2)) +#define PCNT_PLUS_CNT_RST_U1_V 0x1 +#define PCNT_PLUS_CNT_RST_U1_S 2 +/* PCNT_CNT_PAUSE_U0 : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to pause unit0's counter.*/ +#define PCNT_CNT_PAUSE_U0 (BIT(1)) +#define PCNT_CNT_PAUSE_U0_M (BIT(1)) +#define PCNT_CNT_PAUSE_U0_V 0x1 +#define PCNT_CNT_PAUSE_U0_S 1 +/* PCNT_PLUS_CNT_RST_U0 : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: Set this bit to clear unit0's counter.*/ +#define PCNT_PLUS_CNT_RST_U0 (BIT(0)) +#define PCNT_PLUS_CNT_RST_U0_M (BIT(0)) +#define PCNT_PLUS_CNT_RST_U0_V 0x1 +#define PCNT_PLUS_CNT_RST_U0_S 0 + +#define PCNT_DATE_REG (DR_REG_PCNT_BASE + 0x00fc) +/* PCNT_DATE : R/W ;bitpos:[31:0] ;default: 32'h14122600 ; */ +/*description: */ +#define PCNT_DATE 0xFFFFFFFF +#define PCNT_DATE_M ((PCNT_DATE_V)<<(PCNT_DATE_S)) +#define PCNT_DATE_V 0xFFFFFFFF +#define PCNT_DATE_S 0 + + + + +#endif /*_SOC_PCNT_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/pcnt_struct.h b/tools/sdk/include/esp32/soc/pcnt_struct.h new file mode 100644 index 00000000..eef64a33 --- /dev/null +++ b/tools/sdk/include/esp32/soc/pcnt_struct.h @@ -0,0 +1,161 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_PCNT_STRUCT_H_ +#define _SOC_PCNT_STRUCT_H_ +typedef volatile struct { + struct{ + union { + struct { + uint32_t filter_thres: 10; /*This register is used to filter pulse whose width is smaller than this value for unit0.*/ + uint32_t filter_en: 1; /*This is the enable bit for filtering input signals for unit0.*/ + uint32_t thr_zero_en: 1; /*This is the enable bit for comparing unit0's count with 0 value.*/ + uint32_t thr_h_lim_en: 1; /*This is the enable bit for comparing unit0's count with thr_h_lim value.*/ + uint32_t thr_l_lim_en: 1; /*This is the enable bit for comparing unit0's count with thr_l_lim value.*/ + uint32_t thr_thres0_en: 1; /*This is the enable bit for comparing unit0's count with thres0 value.*/ + uint32_t thr_thres1_en: 1; /*This is the enable bit for comparing unit0's count with thres1 value .*/ + uint32_t ch0_neg_mode: 2; /*This register is used to control the mode of channel0's input neg-edge signal for unit0. 2'd1:increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ + uint32_t ch0_pos_mode: 2; /*This register is used to control the mode of channel0's input pos-edge signal for unit0. 2'd1:increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ + uint32_t ch0_hctrl_mode: 2; /*This register is used to control the mode of channel0's high control signal for unit0. 2'd0:increase when control signal is low 2'd1:decrease when control signal is high others:forbidden*/ + uint32_t ch0_lctrl_mode: 2; /*This register is used to control the mode of channel0's low control signal for unit0. 2'd0:increase when control signal is low 2'd1:decrease when control signal is high others:forbidden*/ + uint32_t ch1_neg_mode: 2; /*This register is used to control the mode of channel1's input neg-edge signal for unit0. 2'd1:increase at the negedge of input signal 2'd2:decrease at the negedge of input signal others:forbidden*/ + uint32_t ch1_pos_mode: 2; /*This register is used to control the mode of channel1's input pos-edge signal for unit0. 2'd1:increase at the posedge of input signal 2'd2:decrease at the posedge of input signal others:forbidden*/ + uint32_t ch1_hctrl_mode: 2; /*This register is used to control the mode of channel1's high control signal for unit0. 2'd0:increase when control signal is low 2'd1:decrease when control signal is high others:forbidden*/ + uint32_t ch1_lctrl_mode: 2; /*This register is used to control the mode of channel1's low control signal for unit0. 2'd0:increase when control signal is low 2'd1:decrease when control signal is high others:forbidden*/ + }; + uint32_t val; + } conf0; + union { + struct { + uint32_t cnt_thres0:16; /*This register is used to configure thres0 value for unit0.*/ + uint32_t cnt_thres1:16; /*This register is used to configure thres1 value for unit0.*/ + }; + uint32_t val; + } conf1; + union { + struct { + uint32_t cnt_h_lim:16; /*This register is used to configure thr_h_lim value for unit0.*/ + uint32_t cnt_l_lim:16; /*This register is used to configure thr_l_lim value for unit0.*/ + }; + uint32_t val; + } conf2; + } conf_unit[8]; + union { + struct { + uint32_t cnt_val : 16; /*This register stores the current pulse count value for unit0.*/ + uint32_t reserved16: 16; + }; + uint32_t val; + } cnt_unit[8]; + union { + struct { + uint32_t cnt_thr_event_u0: 1; /*This is the interrupt raw bit for channel0 event.*/ + uint32_t cnt_thr_event_u1: 1; /*This is the interrupt raw bit for channel1 event.*/ + uint32_t cnt_thr_event_u2: 1; /*This is the interrupt raw bit for channel2 event.*/ + uint32_t cnt_thr_event_u3: 1; /*This is the interrupt raw bit for channel3 event.*/ + uint32_t cnt_thr_event_u4: 1; /*This is the interrupt raw bit for channel4 event.*/ + uint32_t cnt_thr_event_u5: 1; /*This is the interrupt raw bit for channel5 event.*/ + uint32_t cnt_thr_event_u6: 1; /*This is the interrupt raw bit for channel6 event.*/ + uint32_t cnt_thr_event_u7: 1; /*This is the interrupt raw bit for channel7 event.*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } int_raw; + union { + struct { + uint32_t cnt_thr_event_u0: 1; /*This is the interrupt status bit for channel0 event.*/ + uint32_t cnt_thr_event_u1: 1; /*This is the interrupt status bit for channel1 event.*/ + uint32_t cnt_thr_event_u2: 1; /*This is the interrupt status bit for channel2 event.*/ + uint32_t cnt_thr_event_u3: 1; /*This is the interrupt status bit for channel3 event.*/ + uint32_t cnt_thr_event_u4: 1; /*This is the interrupt status bit for channel4 event.*/ + uint32_t cnt_thr_event_u5: 1; /*This is the interrupt status bit for channel5 event.*/ + uint32_t cnt_thr_event_u6: 1; /*This is the interrupt status bit for channel6 event.*/ + uint32_t cnt_thr_event_u7: 1; /*This is the interrupt status bit for channel7 event.*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } int_st; + union { + struct { + uint32_t cnt_thr_event_u0: 1; /*This is the interrupt enable bit for channel0 event.*/ + uint32_t cnt_thr_event_u1: 1; /*This is the interrupt enable bit for channel1 event.*/ + uint32_t cnt_thr_event_u2: 1; /*This is the interrupt enable bit for channel2 event.*/ + uint32_t cnt_thr_event_u3: 1; /*This is the interrupt enable bit for channel3 event.*/ + uint32_t cnt_thr_event_u4: 1; /*This is the interrupt enable bit for channel4 event.*/ + uint32_t cnt_thr_event_u5: 1; /*This is the interrupt enable bit for channel5 event.*/ + uint32_t cnt_thr_event_u6: 1; /*This is the interrupt enable bit for channel6 event.*/ + uint32_t cnt_thr_event_u7: 1; /*This is the interrupt enable bit for channel7 event.*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } int_ena; + union { + struct { + uint32_t cnt_thr_event_u0: 1; /*Set this bit to clear channel0 event interrupt.*/ + uint32_t cnt_thr_event_u1: 1; /*Set this bit to clear channel1 event interrupt.*/ + uint32_t cnt_thr_event_u2: 1; /*Set this bit to clear channel2 event interrupt.*/ + uint32_t cnt_thr_event_u3: 1; /*Set this bit to clear channel3 event interrupt.*/ + uint32_t cnt_thr_event_u4: 1; /*Set this bit to clear channel4 event interrupt.*/ + uint32_t cnt_thr_event_u5: 1; /*Set this bit to clear channel5 event interrupt.*/ + uint32_t cnt_thr_event_u6: 1; /*Set this bit to clear channel6 event interrupt.*/ + uint32_t cnt_thr_event_u7: 1; /*Set this bit to clear channel7 event interrupt.*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } int_clr; + uint32_t status_unit[8]; + union { + struct { + uint32_t cnt_rst_u0: 1; /*Set this bit to clear unit0's counter.*/ + uint32_t cnt_pause_u0: 1; /*Set this bit to pause unit0's counter.*/ + uint32_t cnt_rst_u1: 1; /*Set this bit to clear unit1's counter.*/ + uint32_t cnt_pause_u1: 1; /*Set this bit to pause unit1's counter.*/ + uint32_t cnt_rst_u2: 1; /*Set this bit to clear unit2's counter.*/ + uint32_t cnt_pause_u2: 1; /*Set this bit to pause unit2's counter.*/ + uint32_t cnt_rst_u3: 1; /*Set this bit to clear unit3's counter.*/ + uint32_t cnt_pause_u3: 1; /*Set this bit to pause unit3's counter.*/ + uint32_t cnt_rst_u4: 1; /*Set this bit to clear unit4's counter.*/ + uint32_t cnt_pause_u4: 1; /*Set this bit to pause unit4's counter.*/ + uint32_t cnt_rst_u5: 1; /*Set this bit to clear unit5's counter.*/ + uint32_t cnt_pause_u5: 1; /*Set this bit to pause unit5's counter.*/ + uint32_t cnt_rst_u6: 1; /*Set this bit to clear unit6's counter.*/ + uint32_t cnt_pause_u6: 1; /*Set this bit to pause unit6's counter.*/ + uint32_t cnt_rst_u7: 1; /*Set this bit to clear unit7's counter.*/ + uint32_t cnt_pause_u7: 1; /*Set this bit to pause unit7's counter.*/ + uint32_t clk_en: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } ctrl; + uint32_t reserved_b4; + uint32_t reserved_b8; + uint32_t reserved_bc; + uint32_t reserved_c0; + uint32_t reserved_c4; + uint32_t reserved_c8; + uint32_t reserved_cc; + uint32_t reserved_d0; + uint32_t reserved_d4; + uint32_t reserved_d8; + uint32_t reserved_dc; + uint32_t reserved_e0; + uint32_t reserved_e4; + uint32_t reserved_e8; + uint32_t reserved_ec; + uint32_t reserved_f0; + uint32_t reserved_f4; + uint32_t reserved_f8; + uint32_t date; /**/ +} pcnt_dev_t; +extern pcnt_dev_t PCNT; +#endif /* _SOC_PCNT_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/pid.h b/tools/sdk/include/esp32/soc/pid.h new file mode 100644 index 00000000..bd4e9f26 --- /dev/null +++ b/tools/sdk/include/esp32/soc/pid.h @@ -0,0 +1,65 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_PID_H_ +#define _SOC_PID_H_ + +#define PROPID_GEN_BASE 0x3FF1F000 +//Bits 1..7: 1 if interrupt will be triggering PID change +#define PROPID_CONFIG_INTERRUPT_ENABLE ((PROPID_GEN_BASE)+0x000) +//Vectors for the various interrupt handlers +#define PROPID_CONFIG_INTERRUPT_ADDR_1 ((PROPID_GEN_BASE)+0x004) +#define PROPID_CONFIG_INTERRUPT_ADDR_2 ((PROPID_GEN_BASE)+0x008) +#define PROPID_CONFIG_INTERRUPT_ADDR_3 ((PROPID_GEN_BASE)+0x00C) +#define PROPID_CONFIG_INTERRUPT_ADDR_4 ((PROPID_GEN_BASE)+0x010) +#define PROPID_CONFIG_INTERRUPT_ADDR_5 ((PROPID_GEN_BASE)+0x014) +#define PROPID_CONFIG_INTERRUPT_ADDR_6 ((PROPID_GEN_BASE)+0x018) +#define PROPID_CONFIG_INTERRUPT_ADDR_7 ((PROPID_GEN_BASE)+0x01C) + +//Delay, in CPU cycles, before switching to new PID +#define PROPID_CONFIG_PID_DELAY ((PROPID_GEN_BASE)+0x020) +#define PROPID_CONFIG_NMI_DELAY ((PROPID_GEN_BASE)+0x024) + +//Last detected interrupt. Set by hw on int. +#define PROPID_TABLE_LEVEL ((PROPID_GEN_BASE)+0x028) +//PID/prev int data for each int +#define PROPID_FROM_1 ((PROPID_GEN_BASE)+0x02C) +#define PROPID_FROM_2 ((PROPID_GEN_BASE)+0x030) +#define PROPID_FROM_3 ((PROPID_GEN_BASE)+0x034) +#define PROPID_FROM_4 ((PROPID_GEN_BASE)+0x038) +#define PROPID_FROM_5 ((PROPID_GEN_BASE)+0x03C) +#define PROPID_FROM_6 ((PROPID_GEN_BASE)+0x040) +#define PROPID_FROM_7 ((PROPID_GEN_BASE)+0x044) +#define PROPID_FROM_PID_MASK 0x7 +#define PROPID_FROM_PID_S 0 +#define PROPID_FROM_INT_MASK 0xF +#define PROPID_FROM_INT_S 3 + +//PID to be set after confirm routine +#define PROPID_PID_NEW ((PROPID_GEN_BASE)+0x048) +//Write to kick off PID change +#define PROPID_PID_CONFIRM ((PROPID_GEN_BASE)+0x04c) +//current PID? +#define PROPID_PID_REG ((PROPID_GEN_BASE)+0x050) + +//Write to mask NMI +#define PROPID_PID_NMI_MASK_HW_ENABLE ((PROPID_GEN_BASE)+0x054) +//Write to unmask NMI +#define PROPID_PID_NMI_MASK_HW_DISABLE ((PROPID_GEN_BASE)+0x058) +#define PROPID_PID_NMI_MASK_HW_REG ((PROPID_GEN_BASE)+0x05c) + +//Debug regs +#define PROPID_PID ((PROPID_GEN_BASE)+0x060) +#define PROPID_NMI_MASK_HW ((PROPID_GEN_BASE)+0x064) + +#endif /* _SOC_PID_H_ */ diff --git a/tools/sdk/include/esp32/soc/rmt_reg.h b/tools/sdk/include/esp32/soc/rmt_reg.h new file mode 100644 index 00000000..a95aa6c0 --- /dev/null +++ b/tools/sdk/include/esp32/soc/rmt_reg.h @@ -0,0 +1,2171 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_RMT_REG_H_ +#define _SOC_RMT_REG_H_ + +#include "soc.h" +#define RMT_CH0DATA_REG (DR_REG_RMT_BASE + 0x0000) + +#define RMT_CH1DATA_REG (DR_REG_RMT_BASE + 0x0004) + +#define RMT_CH2DATA_REG (DR_REG_RMT_BASE + 0x0008) + +#define RMT_CH3DATA_REG (DR_REG_RMT_BASE + 0x000c) + +#define RMT_CH4DATA_REG (DR_REG_RMT_BASE + 0x0010) + +#define RMT_CH5DATA_REG (DR_REG_RMT_BASE + 0x0014) + +#define RMT_CH6DATA_REG (DR_REG_RMT_BASE + 0x0018) + +#define RMT_CH7DATA_REG (DR_REG_RMT_BASE + 0x001c) + +#define RMT_CH0CONF0_REG (DR_REG_RMT_BASE + 0x0020) +/* RMT_CLK_EN : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: This bit is used to control clock.when software config RMT + internal registers it controls the register clock.*/ +#define RMT_CLK_EN (BIT(31)) +#define RMT_CLK_EN_M (BIT(31)) +#define RMT_CLK_EN_V 0x1 +#define RMT_CLK_EN_S 31 +/* RMT_MEM_PD : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: This bit is used to reduce power consumed by mem. 1:mem is in low power state.*/ +#define RMT_MEM_PD (BIT(30)) +#define RMT_MEM_PD_M (BIT(30)) +#define RMT_MEM_PD_V 0x1 +#define RMT_MEM_PD_S 30 +/* RMT_CARRIER_OUT_LV_CH0 : R/W ;bitpos:[29] ;default: 1'b1 ; */ +/*description: This bit is used to configure the way carrier wave is modulated + for channel0.1'b1:transmit on low output level 1'b0:transmit on high output level.*/ +#define RMT_CARRIER_OUT_LV_CH0 (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH0_M (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH0_V 0x1 +#define RMT_CARRIER_OUT_LV_CH0_S 29 +/* RMT_CARRIER_EN_CH0 : R/W ;bitpos:[28] ;default: 1'b1 ; */ +/*description: This is the carrier modulation enable control bit for channel0.*/ +#define RMT_CARRIER_EN_CH0 (BIT(28)) +#define RMT_CARRIER_EN_CH0_M (BIT(28)) +#define RMT_CARRIER_EN_CH0_V 0x1 +#define RMT_CARRIER_EN_CH0_S 28 +/* RMT_MEM_SIZE_CH0 : R/W ;bitpos:[27:24] ;default: 4'h1 ; */ +/*description: This register is used to configure the the amount of memory blocks + allocated to channel0.*/ +#define RMT_MEM_SIZE_CH0 0x0000000F +#define RMT_MEM_SIZE_CH0_M ((RMT_MEM_SIZE_CH0_V)<<(RMT_MEM_SIZE_CH0_S)) +#define RMT_MEM_SIZE_CH0_V 0xF +#define RMT_MEM_SIZE_CH0_S 24 +/* RMT_IDLE_THRES_CH0 : R/W ;bitpos:[23:8] ;default: 16'h1000 ; */ +/*description: In receive mode when no edge is detected on the input signal + for longer than reg_idle_thres_ch0 then the receive process is done.*/ +#define RMT_IDLE_THRES_CH0 0x0000FFFF +#define RMT_IDLE_THRES_CH0_M ((RMT_IDLE_THRES_CH0_V)<<(RMT_IDLE_THRES_CH0_S)) +#define RMT_IDLE_THRES_CH0_V 0xFFFF +#define RMT_IDLE_THRES_CH0_S 8 +/* RMT_DIV_CNT_CH0 : R/W ;bitpos:[7:0] ;default: 8'h2 ; */ +/*description: This register is used to configure the frequency divider's factor in channel0.*/ +#define RMT_DIV_CNT_CH0 0x000000FF +#define RMT_DIV_CNT_CH0_M ((RMT_DIV_CNT_CH0_V)<<(RMT_DIV_CNT_CH0_S)) +#define RMT_DIV_CNT_CH0_V 0xFF +#define RMT_DIV_CNT_CH0_S 0 + +#define RMT_CH0CONF1_REG (DR_REG_RMT_BASE + 0x0024) +/* RMT_IDLE_OUT_EN_CH0 : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for channel0 in IDLE state.*/ +#define RMT_IDLE_OUT_EN_CH0 (BIT(19)) +#define RMT_IDLE_OUT_EN_CH0_M (BIT(19)) +#define RMT_IDLE_OUT_EN_CH0_V 0x1 +#define RMT_IDLE_OUT_EN_CH0_S 19 +/* RMT_IDLE_OUT_LV_CH0 : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This bit configures the output signal's level for channel0 in IDLE state.*/ +#define RMT_IDLE_OUT_LV_CH0 (BIT(18)) +#define RMT_IDLE_OUT_LV_CH0_M (BIT(18)) +#define RMT_IDLE_OUT_LV_CH0_V 0x1 +#define RMT_IDLE_OUT_LV_CH0_S 18 +/* RMT_REF_ALWAYS_ON_CH0 : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This bit is used to select base clock. 1'b1:clk_apb 1'b0:clk_ref*/ +#define RMT_REF_ALWAYS_ON_CH0 (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH0_M (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH0_V 0x1 +#define RMT_REF_ALWAYS_ON_CH0_S 17 +/* RMT_REF_CNT_RST_CH0 : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This bit is used to reset divider in channel0.*/ +#define RMT_REF_CNT_RST_CH0 (BIT(16)) +#define RMT_REF_CNT_RST_CH0_M (BIT(16)) +#define RMT_REF_CNT_RST_CH0_V 0x1 +#define RMT_REF_CNT_RST_CH0_S 16 +/* RMT_RX_FILTER_THRES_CH0 : R/W ;bitpos:[15:8] ;default: 8'hf ; */ +/*description: in receive mode channel0 ignore input pulse when the pulse width + is smaller then this value.*/ +#define RMT_RX_FILTER_THRES_CH0 0x000000FF +#define RMT_RX_FILTER_THRES_CH0_M ((RMT_RX_FILTER_THRES_CH0_V)<<(RMT_RX_FILTER_THRES_CH0_S)) +#define RMT_RX_FILTER_THRES_CH0_V 0xFF +#define RMT_RX_FILTER_THRES_CH0_S 8 +/* RMT_RX_FILTER_EN_CH0 : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the receive filter enable bit for channel0.*/ +#define RMT_RX_FILTER_EN_CH0 (BIT(7)) +#define RMT_RX_FILTER_EN_CH0_M (BIT(7)) +#define RMT_RX_FILTER_EN_CH0_V 0x1 +#define RMT_RX_FILTER_EN_CH0_S 7 +/* RMT_TX_CONTI_MODE_CH0 : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to continue sending from the first data to the + last data in channel0 again and again.*/ +#define RMT_TX_CONTI_MODE_CH0 (BIT(6)) +#define RMT_TX_CONTI_MODE_CH0_M (BIT(6)) +#define RMT_TX_CONTI_MODE_CH0_V 0x1 +#define RMT_TX_CONTI_MODE_CH0_S 6 +/* RMT_MEM_OWNER_CH0 : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: This is the mark of channel0's ram usage right.1'b1:receiver + uses the ram 0:transmitter uses the ram*/ +#define RMT_MEM_OWNER_CH0 (BIT(5)) +#define RMT_MEM_OWNER_CH0_M (BIT(5)) +#define RMT_MEM_OWNER_CH0_V 0x1 +#define RMT_MEM_OWNER_CH0_S 5 +/* RMT_APB_MEM_RST_CH0 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to reset W/R ram address for channel0 by apb fifo access*/ +#define RMT_APB_MEM_RST_CH0 (BIT(4)) +#define RMT_APB_MEM_RST_CH0_M (BIT(4)) +#define RMT_APB_MEM_RST_CH0_V 0x1 +#define RMT_APB_MEM_RST_CH0_S 4 +/* RMT_MEM_RD_RST_CH0 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to reset read ram address for channel0 by transmitter access.*/ +#define RMT_MEM_RD_RST_CH0 (BIT(3)) +#define RMT_MEM_RD_RST_CH0_M (BIT(3)) +#define RMT_MEM_RD_RST_CH0_V 0x1 +#define RMT_MEM_RD_RST_CH0_S 3 +/* RMT_MEM_WR_RST_CH0 : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Set this bit to reset write ram address for channel0 by receiver access.*/ +#define RMT_MEM_WR_RST_CH0 (BIT(2)) +#define RMT_MEM_WR_RST_CH0_M (BIT(2)) +#define RMT_MEM_WR_RST_CH0_V 0x1 +#define RMT_MEM_WR_RST_CH0_S 2 +/* RMT_RX_EN_CH0 : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: Set this bit to enbale receving data for channel0.*/ +#define RMT_RX_EN_CH0 (BIT(1)) +#define RMT_RX_EN_CH0_M (BIT(1)) +#define RMT_RX_EN_CH0_V 0x1 +#define RMT_RX_EN_CH0_S 1 +/* RMT_TX_START_CH0 : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: Set this bit to start sending data for channel0.*/ +#define RMT_TX_START_CH0 (BIT(0)) +#define RMT_TX_START_CH0_M (BIT(0)) +#define RMT_TX_START_CH0_V 0x1 +#define RMT_TX_START_CH0_S 0 + +#define RMT_CH1CONF0_REG (DR_REG_RMT_BASE + 0x0028) +/* RMT_CARRIER_OUT_LV_CH1 : R/W ;bitpos:[29] ;default: 1'b1 ; */ +/*description: This bit is used to configure the way carrier wave is modulated + for channel1.1'b1:transmit on low output level 1'b0:transmit on high output level.*/ +#define RMT_CARRIER_OUT_LV_CH1 (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH1_M (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH1_V 0x1 +#define RMT_CARRIER_OUT_LV_CH1_S 29 +/* RMT_CARRIER_EN_CH1 : R/W ;bitpos:[28] ;default: 1'b1 ; */ +/*description: This is the carrier modulation enable control bit for channel1.*/ +#define RMT_CARRIER_EN_CH1 (BIT(28)) +#define RMT_CARRIER_EN_CH1_M (BIT(28)) +#define RMT_CARRIER_EN_CH1_V 0x1 +#define RMT_CARRIER_EN_CH1_S 28 +/* RMT_MEM_SIZE_CH1 : R/W ;bitpos:[27:24] ;default: 4'h1 ; */ +/*description: This register is used to configure the the amount of memory blocks + allocated to channel1.*/ +#define RMT_MEM_SIZE_CH1 0x0000000F +#define RMT_MEM_SIZE_CH1_M ((RMT_MEM_SIZE_CH1_V)<<(RMT_MEM_SIZE_CH1_S)) +#define RMT_MEM_SIZE_CH1_V 0xF +#define RMT_MEM_SIZE_CH1_S 24 +/* RMT_IDLE_THRES_CH1 : R/W ;bitpos:[23:8] ;default: 16'h1000 ; */ +/*description: This register is used to configure the the amount of memory blocks + allocated to channel1.*/ +#define RMT_IDLE_THRES_CH1 0x0000FFFF +#define RMT_IDLE_THRES_CH1_M ((RMT_IDLE_THRES_CH1_V)<<(RMT_IDLE_THRES_CH1_S)) +#define RMT_IDLE_THRES_CH1_V 0xFFFF +#define RMT_IDLE_THRES_CH1_S 8 +/* RMT_DIV_CNT_CH1 : R/W ;bitpos:[7:0] ;default: 8'h2 ; */ +/*description: This register is used to configure the frequency divider's factor in channel1.*/ +#define RMT_DIV_CNT_CH1 0x000000FF +#define RMT_DIV_CNT_CH1_M ((RMT_DIV_CNT_CH1_V)<<(RMT_DIV_CNT_CH1_S)) +#define RMT_DIV_CNT_CH1_V 0xFF +#define RMT_DIV_CNT_CH1_S 0 + +#define RMT_CH1CONF1_REG (DR_REG_RMT_BASE + 0x002c) +/* RMT_IDLE_OUT_EN_CH1 : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for channel1 in IDLE state.*/ +#define RMT_IDLE_OUT_EN_CH1 (BIT(19)) +#define RMT_IDLE_OUT_EN_CH1_M (BIT(19)) +#define RMT_IDLE_OUT_EN_CH1_V 0x1 +#define RMT_IDLE_OUT_EN_CH1_S 19 +/* RMT_IDLE_OUT_LV_CH1 : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This bit configures the output signal's level for channel1 in IDLE state.*/ +#define RMT_IDLE_OUT_LV_CH1 (BIT(18)) +#define RMT_IDLE_OUT_LV_CH1_M (BIT(18)) +#define RMT_IDLE_OUT_LV_CH1_V 0x1 +#define RMT_IDLE_OUT_LV_CH1_S 18 +/* RMT_REF_ALWAYS_ON_CH1 : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This bit is used to select base clock. 1'b1:clk_apb 1'b0:clk_ref*/ +#define RMT_REF_ALWAYS_ON_CH1 (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH1_M (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH1_V 0x1 +#define RMT_REF_ALWAYS_ON_CH1_S 17 +/* RMT_REF_CNT_RST_CH1 : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This bit is used to reset divider in channel1.*/ +#define RMT_REF_CNT_RST_CH1 (BIT(16)) +#define RMT_REF_CNT_RST_CH1_M (BIT(16)) +#define RMT_REF_CNT_RST_CH1_V 0x1 +#define RMT_REF_CNT_RST_CH1_S 16 +/* RMT_RX_FILTER_THRES_CH1 : R/W ;bitpos:[15:8] ;default: 8'hf ; */ +/*description: in receive mode channel1 ignore input pulse when the pulse width + is smaller then this value.*/ +#define RMT_RX_FILTER_THRES_CH1 0x000000FF +#define RMT_RX_FILTER_THRES_CH1_M ((RMT_RX_FILTER_THRES_CH1_V)<<(RMT_RX_FILTER_THRES_CH1_S)) +#define RMT_RX_FILTER_THRES_CH1_V 0xFF +#define RMT_RX_FILTER_THRES_CH1_S 8 +/* RMT_RX_FILTER_EN_CH1 : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the receive filter enable bit for channel1.*/ +#define RMT_RX_FILTER_EN_CH1 (BIT(7)) +#define RMT_RX_FILTER_EN_CH1_M (BIT(7)) +#define RMT_RX_FILTER_EN_CH1_V 0x1 +#define RMT_RX_FILTER_EN_CH1_S 7 +/* RMT_TX_CONTI_MODE_CH1 : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to continue sending from the first data to the + last data in channel1 again and again.*/ +#define RMT_TX_CONTI_MODE_CH1 (BIT(6)) +#define RMT_TX_CONTI_MODE_CH1_M (BIT(6)) +#define RMT_TX_CONTI_MODE_CH1_V 0x1 +#define RMT_TX_CONTI_MODE_CH1_S 6 +/* RMT_MEM_OWNER_CH1 : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: This is the mark of channel1's ram usage right.1'b1:receiver + uses the ram 0:transmitter uses the ram*/ +#define RMT_MEM_OWNER_CH1 (BIT(5)) +#define RMT_MEM_OWNER_CH1_M (BIT(5)) +#define RMT_MEM_OWNER_CH1_V 0x1 +#define RMT_MEM_OWNER_CH1_S 5 +/* RMT_APB_MEM_RST_CH1 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to reset W/R ram address for channel1 by apb fifo access*/ +#define RMT_APB_MEM_RST_CH1 (BIT(4)) +#define RMT_APB_MEM_RST_CH1_M (BIT(4)) +#define RMT_APB_MEM_RST_CH1_V 0x1 +#define RMT_APB_MEM_RST_CH1_S 4 +/* RMT_MEM_RD_RST_CH1 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to reset read ram address for channel1 by transmitter access.*/ +#define RMT_MEM_RD_RST_CH1 (BIT(3)) +#define RMT_MEM_RD_RST_CH1_M (BIT(3)) +#define RMT_MEM_RD_RST_CH1_V 0x1 +#define RMT_MEM_RD_RST_CH1_S 3 +/* RMT_MEM_WR_RST_CH1 : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Set this bit to reset write ram address for channel1 by receiver access.*/ +#define RMT_MEM_WR_RST_CH1 (BIT(2)) +#define RMT_MEM_WR_RST_CH1_M (BIT(2)) +#define RMT_MEM_WR_RST_CH1_V 0x1 +#define RMT_MEM_WR_RST_CH1_S 2 +/* RMT_RX_EN_CH1 : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: Set this bit to enbale receving data for channel1.*/ +#define RMT_RX_EN_CH1 (BIT(1)) +#define RMT_RX_EN_CH1_M (BIT(1)) +#define RMT_RX_EN_CH1_V 0x1 +#define RMT_RX_EN_CH1_S 1 +/* RMT_TX_START_CH1 : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: Set this bit to start sending data for channel1.*/ +#define RMT_TX_START_CH1 (BIT(0)) +#define RMT_TX_START_CH1_M (BIT(0)) +#define RMT_TX_START_CH1_V 0x1 +#define RMT_TX_START_CH1_S 0 + +#define RMT_CH2CONF0_REG (DR_REG_RMT_BASE + 0x0030) +/* RMT_CARRIER_OUT_LV_CH2 : R/W ;bitpos:[29] ;default: 1'b1 ; */ +/*description: This bit is used to configure carrier wave's position for channel2.1'b1:add + on low level 1'b0:add on high level.*/ +#define RMT_CARRIER_OUT_LV_CH2 (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH2_M (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH2_V 0x1 +#define RMT_CARRIER_OUT_LV_CH2_S 29 +/* RMT_CARRIER_EN_CH2 : R/W ;bitpos:[28] ;default: 1'b1 ; */ +/*description: This is the carrier modulation enable control bit for channel2.*/ +#define RMT_CARRIER_EN_CH2 (BIT(28)) +#define RMT_CARRIER_EN_CH2_M (BIT(28)) +#define RMT_CARRIER_EN_CH2_V 0x1 +#define RMT_CARRIER_EN_CH2_S 28 +/* RMT_MEM_SIZE_CH2 : R/W ;bitpos:[27:24] ;default: 4'h1 ; */ +/*description: This register is used to configure the the amount of memory blocks + allocated to channel2.*/ +#define RMT_MEM_SIZE_CH2 0x0000000F +#define RMT_MEM_SIZE_CH2_M ((RMT_MEM_SIZE_CH2_V)<<(RMT_MEM_SIZE_CH2_S)) +#define RMT_MEM_SIZE_CH2_V 0xF +#define RMT_MEM_SIZE_CH2_S 24 +/* RMT_IDLE_THRES_CH2 : R/W ;bitpos:[23:8] ;default: 16'h1000 ; */ +/*description: In receive mode when the counter's value is bigger than reg_idle_thres_ch2 + then the receive process is done.*/ +#define RMT_IDLE_THRES_CH2 0x0000FFFF +#define RMT_IDLE_THRES_CH2_M ((RMT_IDLE_THRES_CH2_V)<<(RMT_IDLE_THRES_CH2_S)) +#define RMT_IDLE_THRES_CH2_V 0xFFFF +#define RMT_IDLE_THRES_CH2_S 8 +/* RMT_DIV_CNT_CH2 : R/W ;bitpos:[7:0] ;default: 8'h2 ; */ +/*description: This register is used to configure the frequency divider's factor in channel2.*/ +#define RMT_DIV_CNT_CH2 0x000000FF +#define RMT_DIV_CNT_CH2_M ((RMT_DIV_CNT_CH2_V)<<(RMT_DIV_CNT_CH2_S)) +#define RMT_DIV_CNT_CH2_V 0xFF +#define RMT_DIV_CNT_CH2_S 0 + +#define RMT_CH2CONF1_REG (DR_REG_RMT_BASE + 0x0034) +/* RMT_IDLE_OUT_EN_CH2 : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for channel2 in IDLE state.*/ +#define RMT_IDLE_OUT_EN_CH2 (BIT(19)) +#define RMT_IDLE_OUT_EN_CH2_M (BIT(19)) +#define RMT_IDLE_OUT_EN_CH2_V 0x1 +#define RMT_IDLE_OUT_EN_CH2_S 19 +/* RMT_IDLE_OUT_LV_CH2 : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This bit configures the output signal's level for channel2 in IDLE state.*/ +#define RMT_IDLE_OUT_LV_CH2 (BIT(18)) +#define RMT_IDLE_OUT_LV_CH2_M (BIT(18)) +#define RMT_IDLE_OUT_LV_CH2_V 0x1 +#define RMT_IDLE_OUT_LV_CH2_S 18 +/* RMT_REF_ALWAYS_ON_CH2 : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This bit is used to select base clock. 1'b1:clk_apb 1'b0:clk_ref*/ +#define RMT_REF_ALWAYS_ON_CH2 (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH2_M (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH2_V 0x1 +#define RMT_REF_ALWAYS_ON_CH2_S 17 +/* RMT_REF_CNT_RST_CH2 : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This bit is used to reset divider in channel2.*/ +#define RMT_REF_CNT_RST_CH2 (BIT(16)) +#define RMT_REF_CNT_RST_CH2_M (BIT(16)) +#define RMT_REF_CNT_RST_CH2_V 0x1 +#define RMT_REF_CNT_RST_CH2_S 16 +/* RMT_RX_FILTER_THRES_CH2 : R/W ;bitpos:[15:8] ;default: 8'hf ; */ +/*description: in receive mode channel2 ignore input pulse when the pulse width + is smaller then this value.*/ +#define RMT_RX_FILTER_THRES_CH2 0x000000FF +#define RMT_RX_FILTER_THRES_CH2_M ((RMT_RX_FILTER_THRES_CH2_V)<<(RMT_RX_FILTER_THRES_CH2_S)) +#define RMT_RX_FILTER_THRES_CH2_V 0xFF +#define RMT_RX_FILTER_THRES_CH2_S 8 +/* RMT_RX_FILTER_EN_CH2 : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the receive filter enable bit for channel2.*/ +#define RMT_RX_FILTER_EN_CH2 (BIT(7)) +#define RMT_RX_FILTER_EN_CH2_M (BIT(7)) +#define RMT_RX_FILTER_EN_CH2_V 0x1 +#define RMT_RX_FILTER_EN_CH2_S 7 +/* RMT_TX_CONTI_MODE_CH2 : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to continue sending from the first data to the + last data in channel2.*/ +#define RMT_TX_CONTI_MODE_CH2 (BIT(6)) +#define RMT_TX_CONTI_MODE_CH2_M (BIT(6)) +#define RMT_TX_CONTI_MODE_CH2_V 0x1 +#define RMT_TX_CONTI_MODE_CH2_S 6 +/* RMT_MEM_OWNER_CH2 : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: This is the mark of channel2's ram usage right.1'b1:receiver + uses the ram 0:transmitter uses the ram*/ +#define RMT_MEM_OWNER_CH2 (BIT(5)) +#define RMT_MEM_OWNER_CH2_M (BIT(5)) +#define RMT_MEM_OWNER_CH2_V 0x1 +#define RMT_MEM_OWNER_CH2_S 5 +/* RMT_APB_MEM_RST_CH2 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to reset W/R ram address for channel2 by apb fifo access*/ +#define RMT_APB_MEM_RST_CH2 (BIT(4)) +#define RMT_APB_MEM_RST_CH2_M (BIT(4)) +#define RMT_APB_MEM_RST_CH2_V 0x1 +#define RMT_APB_MEM_RST_CH2_S 4 +/* RMT_MEM_RD_RST_CH2 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to reset read ram address for channel2 by transmitter access.*/ +#define RMT_MEM_RD_RST_CH2 (BIT(3)) +#define RMT_MEM_RD_RST_CH2_M (BIT(3)) +#define RMT_MEM_RD_RST_CH2_V 0x1 +#define RMT_MEM_RD_RST_CH2_S 3 +/* RMT_MEM_WR_RST_CH2 : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Set this bit to reset write ram address for channel2 by receiver access.*/ +#define RMT_MEM_WR_RST_CH2 (BIT(2)) +#define RMT_MEM_WR_RST_CH2_M (BIT(2)) +#define RMT_MEM_WR_RST_CH2_V 0x1 +#define RMT_MEM_WR_RST_CH2_S 2 +/* RMT_RX_EN_CH2 : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: Set this bit to enbale receving data for channel2.*/ +#define RMT_RX_EN_CH2 (BIT(1)) +#define RMT_RX_EN_CH2_M (BIT(1)) +#define RMT_RX_EN_CH2_V 0x1 +#define RMT_RX_EN_CH2_S 1 +/* RMT_TX_START_CH2 : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: Set this bit to start sending data for channel2.*/ +#define RMT_TX_START_CH2 (BIT(0)) +#define RMT_TX_START_CH2_M (BIT(0)) +#define RMT_TX_START_CH2_V 0x1 +#define RMT_TX_START_CH2_S 0 + +#define RMT_CH3CONF0_REG (DR_REG_RMT_BASE + 0x0038) +/* RMT_CARRIER_OUT_LV_CH3 : R/W ;bitpos:[29] ;default: 1'b1 ; */ +/*description: This bit is used to configure carrier wave's position for channel3.1'b1:add + on low level 1'b0:add on high level.*/ +#define RMT_CARRIER_OUT_LV_CH3 (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH3_M (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH3_V 0x1 +#define RMT_CARRIER_OUT_LV_CH3_S 29 +/* RMT_CARRIER_EN_CH3 : R/W ;bitpos:[28] ;default: 1'b1 ; */ +/*description: This is the carrier modulation enable control bit for channel3.*/ +#define RMT_CARRIER_EN_CH3 (BIT(28)) +#define RMT_CARRIER_EN_CH3_M (BIT(28)) +#define RMT_CARRIER_EN_CH3_V 0x1 +#define RMT_CARRIER_EN_CH3_S 28 +/* RMT_MEM_SIZE_CH3 : R/W ;bitpos:[27:24] ;default: 4'h1 ; */ +/*description: This register is used to configure the the amount of memory blocks + allocated to channel3.*/ +#define RMT_MEM_SIZE_CH3 0x0000000F +#define RMT_MEM_SIZE_CH3_M ((RMT_MEM_SIZE_CH3_V)<<(RMT_MEM_SIZE_CH3_S)) +#define RMT_MEM_SIZE_CH3_V 0xF +#define RMT_MEM_SIZE_CH3_S 24 +/* RMT_IDLE_THRES_CH3 : R/W ;bitpos:[23:8] ;default: 16'h1000 ; */ +/*description: In receive mode when the counter's value is bigger than reg_idle_thres_ch3 + then the receive process is done.*/ +#define RMT_IDLE_THRES_CH3 0x0000FFFF +#define RMT_IDLE_THRES_CH3_M ((RMT_IDLE_THRES_CH3_V)<<(RMT_IDLE_THRES_CH3_S)) +#define RMT_IDLE_THRES_CH3_V 0xFFFF +#define RMT_IDLE_THRES_CH3_S 8 +/* RMT_DIV_CNT_CH3 : R/W ;bitpos:[7:0] ;default: 8'h2 ; */ +/*description: This register is used to configure the frequency divider's factor in channel3.*/ +#define RMT_DIV_CNT_CH3 0x000000FF +#define RMT_DIV_CNT_CH3_M ((RMT_DIV_CNT_CH3_V)<<(RMT_DIV_CNT_CH3_S)) +#define RMT_DIV_CNT_CH3_V 0xFF +#define RMT_DIV_CNT_CH3_S 0 + +#define RMT_CH3CONF1_REG (DR_REG_RMT_BASE + 0x003c) +/* RMT_IDLE_OUT_EN_CH3 : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for channel3 in IDLE state.*/ +#define RMT_IDLE_OUT_EN_CH3 (BIT(19)) +#define RMT_IDLE_OUT_EN_CH3_M (BIT(19)) +#define RMT_IDLE_OUT_EN_CH3_V 0x1 +#define RMT_IDLE_OUT_EN_CH3_S 19 +/* RMT_IDLE_OUT_LV_CH3 : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This bit configures the output signal's level for channel3 in IDLE state.*/ +#define RMT_IDLE_OUT_LV_CH3 (BIT(18)) +#define RMT_IDLE_OUT_LV_CH3_M (BIT(18)) +#define RMT_IDLE_OUT_LV_CH3_V 0x1 +#define RMT_IDLE_OUT_LV_CH3_S 18 +/* RMT_REF_ALWAYS_ON_CH3 : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This bit is used to select base clock. 1'b1:clk_apb 1'b0:clk_ref*/ +#define RMT_REF_ALWAYS_ON_CH3 (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH3_M (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH3_V 0x1 +#define RMT_REF_ALWAYS_ON_CH3_S 17 +/* RMT_REF_CNT_RST_CH3 : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This bit is used to reset divider in channel3.*/ +#define RMT_REF_CNT_RST_CH3 (BIT(16)) +#define RMT_REF_CNT_RST_CH3_M (BIT(16)) +#define RMT_REF_CNT_RST_CH3_V 0x1 +#define RMT_REF_CNT_RST_CH3_S 16 +/* RMT_RX_FILTER_THRES_CH3 : R/W ;bitpos:[15:8] ;default: 8'hf ; */ +/*description: in receive mode channel3 ignore input pulse when the pulse width + is smaller then this value.*/ +#define RMT_RX_FILTER_THRES_CH3 0x000000FF +#define RMT_RX_FILTER_THRES_CH3_M ((RMT_RX_FILTER_THRES_CH3_V)<<(RMT_RX_FILTER_THRES_CH3_S)) +#define RMT_RX_FILTER_THRES_CH3_V 0xFF +#define RMT_RX_FILTER_THRES_CH3_S 8 +/* RMT_RX_FILTER_EN_CH3 : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the receive filter enable bit for channel3.*/ +#define RMT_RX_FILTER_EN_CH3 (BIT(7)) +#define RMT_RX_FILTER_EN_CH3_M (BIT(7)) +#define RMT_RX_FILTER_EN_CH3_V 0x1 +#define RMT_RX_FILTER_EN_CH3_S 7 +/* RMT_TX_CONTI_MODE_CH3 : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to continue sending from the first data to the + last data in channel3.*/ +#define RMT_TX_CONTI_MODE_CH3 (BIT(6)) +#define RMT_TX_CONTI_MODE_CH3_M (BIT(6)) +#define RMT_TX_CONTI_MODE_CH3_V 0x1 +#define RMT_TX_CONTI_MODE_CH3_S 6 +/* RMT_MEM_OWNER_CH3 : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: This is the mark of channel3's ram usage right.1'b1:receiver + uses the ram 0:transmitter uses the ram*/ +#define RMT_MEM_OWNER_CH3 (BIT(5)) +#define RMT_MEM_OWNER_CH3_M (BIT(5)) +#define RMT_MEM_OWNER_CH3_V 0x1 +#define RMT_MEM_OWNER_CH3_S 5 +/* RMT_APB_MEM_RST_CH3 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to reset W/R ram address for channel3 by apb fifo access*/ +#define RMT_APB_MEM_RST_CH3 (BIT(4)) +#define RMT_APB_MEM_RST_CH3_M (BIT(4)) +#define RMT_APB_MEM_RST_CH3_V 0x1 +#define RMT_APB_MEM_RST_CH3_S 4 +/* RMT_MEM_RD_RST_CH3 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to reset read ram address for channel3 by transmitter access.*/ +#define RMT_MEM_RD_RST_CH3 (BIT(3)) +#define RMT_MEM_RD_RST_CH3_M (BIT(3)) +#define RMT_MEM_RD_RST_CH3_V 0x1 +#define RMT_MEM_RD_RST_CH3_S 3 +/* RMT_MEM_WR_RST_CH3 : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Set this bit to reset write ram address for channel3 by receiver access.*/ +#define RMT_MEM_WR_RST_CH3 (BIT(2)) +#define RMT_MEM_WR_RST_CH3_M (BIT(2)) +#define RMT_MEM_WR_RST_CH3_V 0x1 +#define RMT_MEM_WR_RST_CH3_S 2 +/* RMT_RX_EN_CH3 : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: Set this bit to enbale receving data for channel3.*/ +#define RMT_RX_EN_CH3 (BIT(1)) +#define RMT_RX_EN_CH3_M (BIT(1)) +#define RMT_RX_EN_CH3_V 0x1 +#define RMT_RX_EN_CH3_S 1 +/* RMT_TX_START_CH3 : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: Set this bit to start sending data for channel3.*/ +#define RMT_TX_START_CH3 (BIT(0)) +#define RMT_TX_START_CH3_M (BIT(0)) +#define RMT_TX_START_CH3_V 0x1 +#define RMT_TX_START_CH3_S 0 + +#define RMT_CH4CONF0_REG (DR_REG_RMT_BASE + 0x0040) +/* RMT_CARRIER_OUT_LV_CH4 : R/W ;bitpos:[29] ;default: 1'b1 ; */ +/*description: This bit is used to configure carrier wave's position for channel4.1'b1:add + on low level 1'b0:add on high level.*/ +#define RMT_CARRIER_OUT_LV_CH4 (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH4_M (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH4_V 0x1 +#define RMT_CARRIER_OUT_LV_CH4_S 29 +/* RMT_CARRIER_EN_CH4 : R/W ;bitpos:[28] ;default: 1'b1 ; */ +/*description: This is the carrier modulation enable control bit for channel4.*/ +#define RMT_CARRIER_EN_CH4 (BIT(28)) +#define RMT_CARRIER_EN_CH4_M (BIT(28)) +#define RMT_CARRIER_EN_CH4_V 0x1 +#define RMT_CARRIER_EN_CH4_S 28 +/* RMT_MEM_SIZE_CH4 : R/W ;bitpos:[27:24] ;default: 4'h1 ; */ +/*description: This register is used to configure the the amount of memory blocks + allocated to channel4.*/ +#define RMT_MEM_SIZE_CH4 0x0000000F +#define RMT_MEM_SIZE_CH4_M ((RMT_MEM_SIZE_CH4_V)<<(RMT_MEM_SIZE_CH4_S)) +#define RMT_MEM_SIZE_CH4_V 0xF +#define RMT_MEM_SIZE_CH4_S 24 +/* RMT_IDLE_THRES_CH4 : R/W ;bitpos:[23:8] ;default: 16'h1000 ; */ +/*description: In receive mode when the counter's value is bigger than reg_idle_thres_ch4 + then the receive process is done.*/ +#define RMT_IDLE_THRES_CH4 0x0000FFFF +#define RMT_IDLE_THRES_CH4_M ((RMT_IDLE_THRES_CH4_V)<<(RMT_IDLE_THRES_CH4_S)) +#define RMT_IDLE_THRES_CH4_V 0xFFFF +#define RMT_IDLE_THRES_CH4_S 8 +/* RMT_DIV_CNT_CH4 : R/W ;bitpos:[7:0] ;default: 8'h2 ; */ +/*description: This register is used to configure the frequency divider's factor in channel4.*/ +#define RMT_DIV_CNT_CH4 0x000000FF +#define RMT_DIV_CNT_CH4_M ((RMT_DIV_CNT_CH4_V)<<(RMT_DIV_CNT_CH4_S)) +#define RMT_DIV_CNT_CH4_V 0xFF +#define RMT_DIV_CNT_CH4_S 0 + +#define RMT_CH4CONF1_REG (DR_REG_RMT_BASE + 0x0044) +/* RMT_IDLE_OUT_EN_CH4 : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for channel4 in IDLE state.*/ +#define RMT_IDLE_OUT_EN_CH4 (BIT(19)) +#define RMT_IDLE_OUT_EN_CH4_M (BIT(19)) +#define RMT_IDLE_OUT_EN_CH4_V 0x1 +#define RMT_IDLE_OUT_EN_CH4_S 19 +/* RMT_IDLE_OUT_LV_CH4 : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This bit configures the output signal's level for channel4 in IDLE state.*/ +#define RMT_IDLE_OUT_LV_CH4 (BIT(18)) +#define RMT_IDLE_OUT_LV_CH4_M (BIT(18)) +#define RMT_IDLE_OUT_LV_CH4_V 0x1 +#define RMT_IDLE_OUT_LV_CH4_S 18 +/* RMT_REF_ALWAYS_ON_CH4 : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This bit is used to select base clock. 1'b1:clk_apb 1'b0:clk_ref*/ +#define RMT_REF_ALWAYS_ON_CH4 (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH4_M (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH4_V 0x1 +#define RMT_REF_ALWAYS_ON_CH4_S 17 +/* RMT_REF_CNT_RST_CH4 : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This bit is used to reset divider in channel4.*/ +#define RMT_REF_CNT_RST_CH4 (BIT(16)) +#define RMT_REF_CNT_RST_CH4_M (BIT(16)) +#define RMT_REF_CNT_RST_CH4_V 0x1 +#define RMT_REF_CNT_RST_CH4_S 16 +/* RMT_RX_FILTER_THRES_CH4 : R/W ;bitpos:[15:8] ;default: 8'hf ; */ +/*description: in receive mode channel4 ignore input pulse when the pulse width + is smaller then this value.*/ +#define RMT_RX_FILTER_THRES_CH4 0x000000FF +#define RMT_RX_FILTER_THRES_CH4_M ((RMT_RX_FILTER_THRES_CH4_V)<<(RMT_RX_FILTER_THRES_CH4_S)) +#define RMT_RX_FILTER_THRES_CH4_V 0xFF +#define RMT_RX_FILTER_THRES_CH4_S 8 +/* RMT_RX_FILTER_EN_CH4 : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the receive filter enable bit for channel4.*/ +#define RMT_RX_FILTER_EN_CH4 (BIT(7)) +#define RMT_RX_FILTER_EN_CH4_M (BIT(7)) +#define RMT_RX_FILTER_EN_CH4_V 0x1 +#define RMT_RX_FILTER_EN_CH4_S 7 +/* RMT_TX_CONTI_MODE_CH4 : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to continue sending from the first data to the + last data in channel4.*/ +#define RMT_TX_CONTI_MODE_CH4 (BIT(6)) +#define RMT_TX_CONTI_MODE_CH4_M (BIT(6)) +#define RMT_TX_CONTI_MODE_CH4_V 0x1 +#define RMT_TX_CONTI_MODE_CH4_S 6 +/* RMT_MEM_OWNER_CH4 : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: This is the mark of channel4's ram usage right.1'b1:receiver + uses the ram 0:transmitter uses the ram*/ +#define RMT_MEM_OWNER_CH4 (BIT(5)) +#define RMT_MEM_OWNER_CH4_M (BIT(5)) +#define RMT_MEM_OWNER_CH4_V 0x1 +#define RMT_MEM_OWNER_CH4_S 5 +/* RMT_APB_MEM_RST_CH4 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to reset W/R ram address for channel4 by apb fifo access*/ +#define RMT_APB_MEM_RST_CH4 (BIT(4)) +#define RMT_APB_MEM_RST_CH4_M (BIT(4)) +#define RMT_APB_MEM_RST_CH4_V 0x1 +#define RMT_APB_MEM_RST_CH4_S 4 +/* RMT_MEM_RD_RST_CH4 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to reset read ram address for channel4 by transmitter access.*/ +#define RMT_MEM_RD_RST_CH4 (BIT(3)) +#define RMT_MEM_RD_RST_CH4_M (BIT(3)) +#define RMT_MEM_RD_RST_CH4_V 0x1 +#define RMT_MEM_RD_RST_CH4_S 3 +/* RMT_MEM_WR_RST_CH4 : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Set this bit to reset write ram address for channel4 by receiver access.*/ +#define RMT_MEM_WR_RST_CH4 (BIT(2)) +#define RMT_MEM_WR_RST_CH4_M (BIT(2)) +#define RMT_MEM_WR_RST_CH4_V 0x1 +#define RMT_MEM_WR_RST_CH4_S 2 +/* RMT_RX_EN_CH4 : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: Set this bit to enbale receving data for channel4.*/ +#define RMT_RX_EN_CH4 (BIT(1)) +#define RMT_RX_EN_CH4_M (BIT(1)) +#define RMT_RX_EN_CH4_V 0x1 +#define RMT_RX_EN_CH4_S 1 +/* RMT_TX_START_CH4 : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: Set this bit to start sending data for channel4.*/ +#define RMT_TX_START_CH4 (BIT(0)) +#define RMT_TX_START_CH4_M (BIT(0)) +#define RMT_TX_START_CH4_V 0x1 +#define RMT_TX_START_CH4_S 0 + +#define RMT_CH5CONF0_REG (DR_REG_RMT_BASE + 0x0048) +/* RMT_CARRIER_OUT_LV_CH5 : R/W ;bitpos:[29] ;default: 1'b1 ; */ +/*description: This bit is used to configure carrier wave's position for channel5.1'b1:add + on low level 1'b0:add on high level.*/ +#define RMT_CARRIER_OUT_LV_CH5 (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH5_M (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH5_V 0x1 +#define RMT_CARRIER_OUT_LV_CH5_S 29 +/* RMT_CARRIER_EN_CH5 : R/W ;bitpos:[28] ;default: 1'b1 ; */ +/*description: This is the carrier modulation enable control bit for channel5.*/ +#define RMT_CARRIER_EN_CH5 (BIT(28)) +#define RMT_CARRIER_EN_CH5_M (BIT(28)) +#define RMT_CARRIER_EN_CH5_V 0x1 +#define RMT_CARRIER_EN_CH5_S 28 +/* RMT_MEM_SIZE_CH5 : R/W ;bitpos:[27:24] ;default: 4'h1 ; */ +/*description: This register is used to configure the the amount of memory blocks + allocated to channel5.*/ +#define RMT_MEM_SIZE_CH5 0x0000000F +#define RMT_MEM_SIZE_CH5_M ((RMT_MEM_SIZE_CH5_V)<<(RMT_MEM_SIZE_CH5_S)) +#define RMT_MEM_SIZE_CH5_V 0xF +#define RMT_MEM_SIZE_CH5_S 24 +/* RMT_IDLE_THRES_CH5 : R/W ;bitpos:[23:8] ;default: 16'h1000 ; */ +/*description: In receive mode when the counter's value is bigger than reg_idle_thres_ch5 + then the receive process is done.*/ +#define RMT_IDLE_THRES_CH5 0x0000FFFF +#define RMT_IDLE_THRES_CH5_M ((RMT_IDLE_THRES_CH5_V)<<(RMT_IDLE_THRES_CH5_S)) +#define RMT_IDLE_THRES_CH5_V 0xFFFF +#define RMT_IDLE_THRES_CH5_S 8 +/* RMT_DIV_CNT_CH5 : R/W ;bitpos:[7:0] ;default: 8'h2 ; */ +/*description: This register is used to configure the frequency divider's factor in channel5.*/ +#define RMT_DIV_CNT_CH5 0x000000FF +#define RMT_DIV_CNT_CH5_M ((RMT_DIV_CNT_CH5_V)<<(RMT_DIV_CNT_CH5_S)) +#define RMT_DIV_CNT_CH5_V 0xFF +#define RMT_DIV_CNT_CH5_S 0 + +#define RMT_CH5CONF1_REG (DR_REG_RMT_BASE + 0x004c) +/* RMT_IDLE_OUT_EN_CH5 : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for channel5 in IDLE state.*/ +#define RMT_IDLE_OUT_EN_CH5 (BIT(19)) +#define RMT_IDLE_OUT_EN_CH5_M (BIT(19)) +#define RMT_IDLE_OUT_EN_CH5_V 0x1 +#define RMT_IDLE_OUT_EN_CH5_S 19 +/* RMT_IDLE_OUT_LV_CH5 : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This bit configures the output signal's level for channel5 in IDLE state.*/ +#define RMT_IDLE_OUT_LV_CH5 (BIT(18)) +#define RMT_IDLE_OUT_LV_CH5_M (BIT(18)) +#define RMT_IDLE_OUT_LV_CH5_V 0x1 +#define RMT_IDLE_OUT_LV_CH5_S 18 +/* RMT_REF_ALWAYS_ON_CH5 : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This bit is used to select base clock. 1'b1:clk_apb 1'b0:clk_ref*/ +#define RMT_REF_ALWAYS_ON_CH5 (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH5_M (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH5_V 0x1 +#define RMT_REF_ALWAYS_ON_CH5_S 17 +/* RMT_REF_CNT_RST_CH5 : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This bit is used to reset divider in channel5.*/ +#define RMT_REF_CNT_RST_CH5 (BIT(16)) +#define RMT_REF_CNT_RST_CH5_M (BIT(16)) +#define RMT_REF_CNT_RST_CH5_V 0x1 +#define RMT_REF_CNT_RST_CH5_S 16 +/* RMT_RX_FILTER_THRES_CH5 : R/W ;bitpos:[15:8] ;default: 8'hf ; */ +/*description: in receive mode channel5 ignore input pulse when the pulse width + is smaller then this value.*/ +#define RMT_RX_FILTER_THRES_CH5 0x000000FF +#define RMT_RX_FILTER_THRES_CH5_M ((RMT_RX_FILTER_THRES_CH5_V)<<(RMT_RX_FILTER_THRES_CH5_S)) +#define RMT_RX_FILTER_THRES_CH5_V 0xFF +#define RMT_RX_FILTER_THRES_CH5_S 8 +/* RMT_RX_FILTER_EN_CH5 : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the receive filter enable bit for channel5.*/ +#define RMT_RX_FILTER_EN_CH5 (BIT(7)) +#define RMT_RX_FILTER_EN_CH5_M (BIT(7)) +#define RMT_RX_FILTER_EN_CH5_V 0x1 +#define RMT_RX_FILTER_EN_CH5_S 7 +/* RMT_TX_CONTI_MODE_CH5 : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to continue sending from the first data to the + last data in channel5.*/ +#define RMT_TX_CONTI_MODE_CH5 (BIT(6)) +#define RMT_TX_CONTI_MODE_CH5_M (BIT(6)) +#define RMT_TX_CONTI_MODE_CH5_V 0x1 +#define RMT_TX_CONTI_MODE_CH5_S 6 +/* RMT_MEM_OWNER_CH5 : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: This is the mark of channel5's ram usage right.1'b1:receiver + uses the ram 0:transmitter uses the ram*/ +#define RMT_MEM_OWNER_CH5 (BIT(5)) +#define RMT_MEM_OWNER_CH5_M (BIT(5)) +#define RMT_MEM_OWNER_CH5_V 0x1 +#define RMT_MEM_OWNER_CH5_S 5 +/* RMT_APB_MEM_RST_CH5 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to reset W/R ram address for channel5 by apb fifo access*/ +#define RMT_APB_MEM_RST_CH5 (BIT(4)) +#define RMT_APB_MEM_RST_CH5_M (BIT(4)) +#define RMT_APB_MEM_RST_CH5_V 0x1 +#define RMT_APB_MEM_RST_CH5_S 4 +/* RMT_MEM_RD_RST_CH5 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to reset read ram address for channel5 by transmitter access.*/ +#define RMT_MEM_RD_RST_CH5 (BIT(3)) +#define RMT_MEM_RD_RST_CH5_M (BIT(3)) +#define RMT_MEM_RD_RST_CH5_V 0x1 +#define RMT_MEM_RD_RST_CH5_S 3 +/* RMT_MEM_WR_RST_CH5 : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Set this bit to reset write ram address for channel5 by receiver access.*/ +#define RMT_MEM_WR_RST_CH5 (BIT(2)) +#define RMT_MEM_WR_RST_CH5_M (BIT(2)) +#define RMT_MEM_WR_RST_CH5_V 0x1 +#define RMT_MEM_WR_RST_CH5_S 2 +/* RMT_RX_EN_CH5 : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: Set this bit to enbale receving data for channel5.*/ +#define RMT_RX_EN_CH5 (BIT(1)) +#define RMT_RX_EN_CH5_M (BIT(1)) +#define RMT_RX_EN_CH5_V 0x1 +#define RMT_RX_EN_CH5_S 1 +/* RMT_TX_START_CH5 : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: Set this bit to start sending data for channel5.*/ +#define RMT_TX_START_CH5 (BIT(0)) +#define RMT_TX_START_CH5_M (BIT(0)) +#define RMT_TX_START_CH5_V 0x1 +#define RMT_TX_START_CH5_S 0 + +#define RMT_CH6CONF0_REG (DR_REG_RMT_BASE + 0x0050) +/* RMT_CARRIER_OUT_LV_CH6 : R/W ;bitpos:[29] ;default: 1'b1 ; */ +/*description: This bit is used to configure carrier wave's position for channel6.1'b1:add + on low level 1'b0:add on high level.*/ +#define RMT_CARRIER_OUT_LV_CH6 (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH6_M (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH6_V 0x1 +#define RMT_CARRIER_OUT_LV_CH6_S 29 +/* RMT_CARRIER_EN_CH6 : R/W ;bitpos:[28] ;default: 1'b1 ; */ +/*description: This is the carrier modulation enable control bit for channel6.*/ +#define RMT_CARRIER_EN_CH6 (BIT(28)) +#define RMT_CARRIER_EN_CH6_M (BIT(28)) +#define RMT_CARRIER_EN_CH6_V 0x1 +#define RMT_CARRIER_EN_CH6_S 28 +/* RMT_MEM_SIZE_CH6 : R/W ;bitpos:[27:24] ;default: 4'h1 ; */ +/*description: This register is used to configure the the amount of memory blocks + allocated to channel6.*/ +#define RMT_MEM_SIZE_CH6 0x0000000F +#define RMT_MEM_SIZE_CH6_M ((RMT_MEM_SIZE_CH6_V)<<(RMT_MEM_SIZE_CH6_S)) +#define RMT_MEM_SIZE_CH6_V 0xF +#define RMT_MEM_SIZE_CH6_S 24 +/* RMT_IDLE_THRES_CH6 : R/W ;bitpos:[23:8] ;default: 16'h1000 ; */ +/*description: In receive mode when the counter's value is bigger than reg_idle_thres_ch6 + then the receive process is done.*/ +#define RMT_IDLE_THRES_CH6 0x0000FFFF +#define RMT_IDLE_THRES_CH6_M ((RMT_IDLE_THRES_CH6_V)<<(RMT_IDLE_THRES_CH6_S)) +#define RMT_IDLE_THRES_CH6_V 0xFFFF +#define RMT_IDLE_THRES_CH6_S 8 +/* RMT_DIV_CNT_CH6 : R/W ;bitpos:[7:0] ;default: 8'h2 ; */ +/*description: This register is used to configure the frequency divider's factor in channel6.*/ +#define RMT_DIV_CNT_CH6 0x000000FF +#define RMT_DIV_CNT_CH6_M ((RMT_DIV_CNT_CH6_V)<<(RMT_DIV_CNT_CH6_S)) +#define RMT_DIV_CNT_CH6_V 0xFF +#define RMT_DIV_CNT_CH6_S 0 + +#define RMT_CH6CONF1_REG (DR_REG_RMT_BASE + 0x0054) +/* RMT_IDLE_OUT_EN_CH6 : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for channel6 in IDLE state.*/ +#define RMT_IDLE_OUT_EN_CH6 (BIT(19)) +#define RMT_IDLE_OUT_EN_CH6_M (BIT(19)) +#define RMT_IDLE_OUT_EN_CH6_V 0x1 +#define RMT_IDLE_OUT_EN_CH6_S 19 +/* RMT_IDLE_OUT_LV_CH6 : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This bit configures the output signal's level for channel6 in IDLE state.*/ +#define RMT_IDLE_OUT_LV_CH6 (BIT(18)) +#define RMT_IDLE_OUT_LV_CH6_M (BIT(18)) +#define RMT_IDLE_OUT_LV_CH6_V 0x1 +#define RMT_IDLE_OUT_LV_CH6_S 18 +/* RMT_REF_ALWAYS_ON_CH6 : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This bit is used to select base clock. 1'b1:clk_apb 1'b0:clk_ref*/ +#define RMT_REF_ALWAYS_ON_CH6 (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH6_M (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH6_V 0x1 +#define RMT_REF_ALWAYS_ON_CH6_S 17 +/* RMT_REF_CNT_RST_CH6 : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This bit is used to reset divider in channel6.*/ +#define RMT_REF_CNT_RST_CH6 (BIT(16)) +#define RMT_REF_CNT_RST_CH6_M (BIT(16)) +#define RMT_REF_CNT_RST_CH6_V 0x1 +#define RMT_REF_CNT_RST_CH6_S 16 +/* RMT_RX_FILTER_THRES_CH6 : R/W ;bitpos:[15:8] ;default: 8'hf ; */ +/*description: in receive mode channel6 ignore input pulse when the pulse width + is smaller then this value.*/ +#define RMT_RX_FILTER_THRES_CH6 0x000000FF +#define RMT_RX_FILTER_THRES_CH6_M ((RMT_RX_FILTER_THRES_CH6_V)<<(RMT_RX_FILTER_THRES_CH6_S)) +#define RMT_RX_FILTER_THRES_CH6_V 0xFF +#define RMT_RX_FILTER_THRES_CH6_S 8 +/* RMT_RX_FILTER_EN_CH6 : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the receive filter enable bit for channel6.*/ +#define RMT_RX_FILTER_EN_CH6 (BIT(7)) +#define RMT_RX_FILTER_EN_CH6_M (BIT(7)) +#define RMT_RX_FILTER_EN_CH6_V 0x1 +#define RMT_RX_FILTER_EN_CH6_S 7 +/* RMT_TX_CONTI_MODE_CH6 : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to continue sending from the first data to the + last data in channel6.*/ +#define RMT_TX_CONTI_MODE_CH6 (BIT(6)) +#define RMT_TX_CONTI_MODE_CH6_M (BIT(6)) +#define RMT_TX_CONTI_MODE_CH6_V 0x1 +#define RMT_TX_CONTI_MODE_CH6_S 6 +/* RMT_MEM_OWNER_CH6 : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: This is the mark of channel6's ram usage right.1'b1:receiver + uses the ram 0:transmitter uses the ram*/ +#define RMT_MEM_OWNER_CH6 (BIT(5)) +#define RMT_MEM_OWNER_CH6_M (BIT(5)) +#define RMT_MEM_OWNER_CH6_V 0x1 +#define RMT_MEM_OWNER_CH6_S 5 +/* RMT_APB_MEM_RST_CH6 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to reset W/R ram address for channel6 by apb fifo access*/ +#define RMT_APB_MEM_RST_CH6 (BIT(4)) +#define RMT_APB_MEM_RST_CH6_M (BIT(4)) +#define RMT_APB_MEM_RST_CH6_V 0x1 +#define RMT_APB_MEM_RST_CH6_S 4 +/* RMT_MEM_RD_RST_CH6 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to reset read ram address for channel6 by transmitter access.*/ +#define RMT_MEM_RD_RST_CH6 (BIT(3)) +#define RMT_MEM_RD_RST_CH6_M (BIT(3)) +#define RMT_MEM_RD_RST_CH6_V 0x1 +#define RMT_MEM_RD_RST_CH6_S 3 +/* RMT_MEM_WR_RST_CH6 : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Set this bit to reset write ram address for channel6 by receiver access.*/ +#define RMT_MEM_WR_RST_CH6 (BIT(2)) +#define RMT_MEM_WR_RST_CH6_M (BIT(2)) +#define RMT_MEM_WR_RST_CH6_V 0x1 +#define RMT_MEM_WR_RST_CH6_S 2 +/* RMT_RX_EN_CH6 : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: Set this bit to enbale receving data for channel6.*/ +#define RMT_RX_EN_CH6 (BIT(1)) +#define RMT_RX_EN_CH6_M (BIT(1)) +#define RMT_RX_EN_CH6_V 0x1 +#define RMT_RX_EN_CH6_S 1 +/* RMT_TX_START_CH6 : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: Set this bit to start sending data for channel6.*/ +#define RMT_TX_START_CH6 (BIT(0)) +#define RMT_TX_START_CH6_M (BIT(0)) +#define RMT_TX_START_CH6_V 0x1 +#define RMT_TX_START_CH6_S 0 + +#define RMT_CH7CONF0_REG (DR_REG_RMT_BASE + 0x0058) +/* RMT_CARRIER_OUT_LV_CH7 : R/W ;bitpos:[29] ;default: 1'b1 ; */ +/*description: This bit is used to configure carrier wave's position for channel7.1'b1:add + on low level 1'b0:add on high level.*/ +#define RMT_CARRIER_OUT_LV_CH7 (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH7_M (BIT(29)) +#define RMT_CARRIER_OUT_LV_CH7_V 0x1 +#define RMT_CARRIER_OUT_LV_CH7_S 29 +/* RMT_CARRIER_EN_CH7 : R/W ;bitpos:[28] ;default: 1'b1 ; */ +/*description: This is the carrier modulation enable control bit for channel7.*/ +#define RMT_CARRIER_EN_CH7 (BIT(28)) +#define RMT_CARRIER_EN_CH7_M (BIT(28)) +#define RMT_CARRIER_EN_CH7_V 0x1 +#define RMT_CARRIER_EN_CH7_S 28 +/* RMT_MEM_SIZE_CH7 : R/W ;bitpos:[27:24] ;default: 4'h1 ; */ +/*description: This register is used to configure the the amount of memory blocks + allocated to channel7.*/ +#define RMT_MEM_SIZE_CH7 0x0000000F +#define RMT_MEM_SIZE_CH7_M ((RMT_MEM_SIZE_CH7_V)<<(RMT_MEM_SIZE_CH7_S)) +#define RMT_MEM_SIZE_CH7_V 0xF +#define RMT_MEM_SIZE_CH7_S 24 +/* RMT_IDLE_THRES_CH7 : R/W ;bitpos:[23:8] ;default: 16'h1000 ; */ +/*description: In receive mode when the counter's value is bigger than reg_idle_thres_ch7 + then the receive process is done.*/ +#define RMT_IDLE_THRES_CH7 0x0000FFFF +#define RMT_IDLE_THRES_CH7_M ((RMT_IDLE_THRES_CH7_V)<<(RMT_IDLE_THRES_CH7_S)) +#define RMT_IDLE_THRES_CH7_V 0xFFFF +#define RMT_IDLE_THRES_CH7_S 8 +/* RMT_DIV_CNT_CH7 : R/W ;bitpos:[7:0] ;default: 8'h2 ; */ +/*description: This register is used to configure the frequency divider's factor in channel7.*/ +#define RMT_DIV_CNT_CH7 0x000000FF +#define RMT_DIV_CNT_CH7_M ((RMT_DIV_CNT_CH7_V)<<(RMT_DIV_CNT_CH7_S)) +#define RMT_DIV_CNT_CH7_V 0xFF +#define RMT_DIV_CNT_CH7_S 0 + +#define RMT_CH7CONF1_REG (DR_REG_RMT_BASE + 0x005c) +/* RMT_IDLE_OUT_EN_CH7 : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: This is the output enable control bit for channel6 in IDLE state.*/ +#define RMT_IDLE_OUT_EN_CH7 (BIT(19)) +#define RMT_IDLE_OUT_EN_CH7_M (BIT(19)) +#define RMT_IDLE_OUT_EN_CH7_V 0x1 +#define RMT_IDLE_OUT_EN_CH7_S 19 +/* RMT_IDLE_OUT_LV_CH7 : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This bit configures the output signal's level for channel7 in IDLE state.*/ +#define RMT_IDLE_OUT_LV_CH7 (BIT(18)) +#define RMT_IDLE_OUT_LV_CH7_M (BIT(18)) +#define RMT_IDLE_OUT_LV_CH7_V 0x1 +#define RMT_IDLE_OUT_LV_CH7_S 18 +/* RMT_REF_ALWAYS_ON_CH7 : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This bit is used to select base clock. 1'b1:clk_apb 1'b0:clk_ref*/ +#define RMT_REF_ALWAYS_ON_CH7 (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH7_M (BIT(17)) +#define RMT_REF_ALWAYS_ON_CH7_V 0x1 +#define RMT_REF_ALWAYS_ON_CH7_S 17 +/* RMT_REF_CNT_RST_CH7 : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This bit is used to reset divider in channel7.*/ +#define RMT_REF_CNT_RST_CH7 (BIT(16)) +#define RMT_REF_CNT_RST_CH7_M (BIT(16)) +#define RMT_REF_CNT_RST_CH7_V 0x1 +#define RMT_REF_CNT_RST_CH7_S 16 +/* RMT_RX_FILTER_THRES_CH7 : R/W ;bitpos:[15:8] ;default: 8'hf ; */ +/*description: in receive mode channel7 ignore input pulse when the pulse width + is smaller then this value.*/ +#define RMT_RX_FILTER_THRES_CH7 0x000000FF +#define RMT_RX_FILTER_THRES_CH7_M ((RMT_RX_FILTER_THRES_CH7_V)<<(RMT_RX_FILTER_THRES_CH7_S)) +#define RMT_RX_FILTER_THRES_CH7_V 0xFF +#define RMT_RX_FILTER_THRES_CH7_S 8 +/* RMT_RX_FILTER_EN_CH7 : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the receive filter enable bit for channel7.*/ +#define RMT_RX_FILTER_EN_CH7 (BIT(7)) +#define RMT_RX_FILTER_EN_CH7_M (BIT(7)) +#define RMT_RX_FILTER_EN_CH7_V 0x1 +#define RMT_RX_FILTER_EN_CH7_S 7 +/* RMT_TX_CONTI_MODE_CH7 : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to continue sending from the first data to the + last data in channel7.*/ +#define RMT_TX_CONTI_MODE_CH7 (BIT(6)) +#define RMT_TX_CONTI_MODE_CH7_M (BIT(6)) +#define RMT_TX_CONTI_MODE_CH7_V 0x1 +#define RMT_TX_CONTI_MODE_CH7_S 6 +/* RMT_MEM_OWNER_CH7 : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: This is the mark of channel7's ram usage right.1'b1:receiver + uses the ram 0:transmitter uses the ram*/ +#define RMT_MEM_OWNER_CH7 (BIT(5)) +#define RMT_MEM_OWNER_CH7_M (BIT(5)) +#define RMT_MEM_OWNER_CH7_V 0x1 +#define RMT_MEM_OWNER_CH7_S 5 +/* RMT_APB_MEM_RST_CH7 : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to reset W/R ram address for channel7 by apb fifo access*/ +#define RMT_APB_MEM_RST_CH7 (BIT(4)) +#define RMT_APB_MEM_RST_CH7_M (BIT(4)) +#define RMT_APB_MEM_RST_CH7_V 0x1 +#define RMT_APB_MEM_RST_CH7_S 4 +/* RMT_MEM_RD_RST_CH7 : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to reset read ram address for channel7 by transmitter access.*/ +#define RMT_MEM_RD_RST_CH7 (BIT(3)) +#define RMT_MEM_RD_RST_CH7_M (BIT(3)) +#define RMT_MEM_RD_RST_CH7_V 0x1 +#define RMT_MEM_RD_RST_CH7_S 3 +/* RMT_MEM_WR_RST_CH7 : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Set this bit to reset write ram address for channel7 by receiver access.*/ +#define RMT_MEM_WR_RST_CH7 (BIT(2)) +#define RMT_MEM_WR_RST_CH7_M (BIT(2)) +#define RMT_MEM_WR_RST_CH7_V 0x1 +#define RMT_MEM_WR_RST_CH7_S 2 +/* RMT_RX_EN_CH7 : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: Set this bit to enbale receving data for channel7.*/ +#define RMT_RX_EN_CH7 (BIT(1)) +#define RMT_RX_EN_CH7_M (BIT(1)) +#define RMT_RX_EN_CH7_V 0x1 +#define RMT_RX_EN_CH7_S 1 +/* RMT_TX_START_CH7 : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: Set this bit to start sending data for channel7.*/ +#define RMT_TX_START_CH7 (BIT(0)) +#define RMT_TX_START_CH7_M (BIT(0)) +#define RMT_TX_START_CH7_V 0x1 +#define RMT_TX_START_CH7_S 0 + +#define RMT_CH0STATUS_REG (DR_REG_RMT_BASE + 0x0060) +/* RMT_STATUS_CH0 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The status for channel0*/ +#define RMT_STATUS_CH0 0xFFFFFFFF +#define RMT_STATUS_CH0_M ((RMT_STATUS_CH0_V)<<(RMT_STATUS_CH0_S)) +#define RMT_STATUS_CH0_V 0xFFFFFFFF +#define RMT_STATUS_CH0_S 0 + +#define RMT_CH1STATUS_REG (DR_REG_RMT_BASE + 0x0064) +/* RMT_STATUS_CH1 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The status for channel1*/ +#define RMT_STATUS_CH1 0xFFFFFFFF +#define RMT_STATUS_CH1_M ((RMT_STATUS_CH1_V)<<(RMT_STATUS_CH1_S)) +#define RMT_STATUS_CH1_V 0xFFFFFFFF +#define RMT_STATUS_CH1_S 0 + +#define RMT_CH2STATUS_REG (DR_REG_RMT_BASE + 0x0068) +/* RMT_STATUS_CH2 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The status for channel2*/ +#define RMT_STATUS_CH2 0xFFFFFFFF +#define RMT_STATUS_CH2_M ((RMT_STATUS_CH2_V)<<(RMT_STATUS_CH2_S)) +#define RMT_STATUS_CH2_V 0xFFFFFFFF +#define RMT_STATUS_CH2_S 0 + +#define RMT_CH3STATUS_REG (DR_REG_RMT_BASE + 0x006c) +/* RMT_STATUS_CH3 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The status for channel3*/ +#define RMT_STATUS_CH3 0xFFFFFFFF +#define RMT_STATUS_CH3_M ((RMT_STATUS_CH3_V)<<(RMT_STATUS_CH3_S)) +#define RMT_STATUS_CH3_V 0xFFFFFFFF +#define RMT_STATUS_CH3_S 0 + +#define RMT_CH4STATUS_REG (DR_REG_RMT_BASE + 0x0070) +/* RMT_STATUS_CH4 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The status for channel4*/ +#define RMT_STATUS_CH4 0xFFFFFFFF +#define RMT_STATUS_CH4_M ((RMT_STATUS_CH4_V)<<(RMT_STATUS_CH4_S)) +#define RMT_STATUS_CH4_V 0xFFFFFFFF +#define RMT_STATUS_CH4_S 0 + +#define RMT_CH5STATUS_REG (DR_REG_RMT_BASE + 0x0074) +/* RMT_STATUS_CH5 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The status for channel5*/ +#define RMT_STATUS_CH5 0xFFFFFFFF +#define RMT_STATUS_CH5_M ((RMT_STATUS_CH5_V)<<(RMT_STATUS_CH5_S)) +#define RMT_STATUS_CH5_V 0xFFFFFFFF +#define RMT_STATUS_CH5_S 0 + +#define RMT_CH6STATUS_REG (DR_REG_RMT_BASE + 0x0078) +/* RMT_STATUS_CH6 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The status for channel6*/ +#define RMT_STATUS_CH6 0xFFFFFFFF +#define RMT_STATUS_CH6_M ((RMT_STATUS_CH6_V)<<(RMT_STATUS_CH6_S)) +#define RMT_STATUS_CH6_V 0xFFFFFFFF +#define RMT_STATUS_CH6_S 0 + +#define RMT_CH7STATUS_REG (DR_REG_RMT_BASE + 0x007c) +/* RMT_STATUS_CH7 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The status for channel7*/ +#define RMT_STATUS_CH7 0xFFFFFFFF +#define RMT_STATUS_CH7_M ((RMT_STATUS_CH7_V)<<(RMT_STATUS_CH7_S)) +#define RMT_STATUS_CH7_V 0xFFFFFFFF +#define RMT_STATUS_CH7_S 0 + +#define RMT_CH0ADDR_REG (DR_REG_RMT_BASE + 0x0080) +/* RMT_APB_MEM_ADDR_CH0 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The ram relative address in channel0 by apb fifo access*/ +#define RMT_APB_MEM_ADDR_CH0 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH0_M ((RMT_APB_MEM_ADDR_CH0_V)<<(RMT_APB_MEM_ADDR_CH0_S)) +#define RMT_APB_MEM_ADDR_CH0_V 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH0_S 0 + +#define RMT_CH1ADDR_REG (DR_REG_RMT_BASE + 0x0084) +/* RMT_APB_MEM_ADDR_CH1 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The ram relative address in channel1 by apb fifo access*/ +#define RMT_APB_MEM_ADDR_CH1 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH1_M ((RMT_APB_MEM_ADDR_CH1_V)<<(RMT_APB_MEM_ADDR_CH1_S)) +#define RMT_APB_MEM_ADDR_CH1_V 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH1_S 0 + +#define RMT_CH2ADDR_REG (DR_REG_RMT_BASE + 0x0088) +/* RMT_APB_MEM_ADDR_CH2 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The ram relative address in channel2 by apb fifo access*/ +#define RMT_APB_MEM_ADDR_CH2 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH2_M ((RMT_APB_MEM_ADDR_CH2_V)<<(RMT_APB_MEM_ADDR_CH2_S)) +#define RMT_APB_MEM_ADDR_CH2_V 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH2_S 0 + +#define RMT_CH3ADDR_REG (DR_REG_RMT_BASE + 0x008c) +/* RMT_APB_MEM_ADDR_CH3 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The ram relative address in channel3 by apb fifo access*/ +#define RMT_APB_MEM_ADDR_CH3 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH3_M ((RMT_APB_MEM_ADDR_CH3_V)<<(RMT_APB_MEM_ADDR_CH3_S)) +#define RMT_APB_MEM_ADDR_CH3_V 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH3_S 0 + +#define RMT_CH4ADDR_REG (DR_REG_RMT_BASE + 0x0090) +/* RMT_APB_MEM_ADDR_CH4 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The ram relative address in channel4 by apb fifo access*/ +#define RMT_APB_MEM_ADDR_CH4 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH4_M ((RMT_APB_MEM_ADDR_CH4_V)<<(RMT_APB_MEM_ADDR_CH4_S)) +#define RMT_APB_MEM_ADDR_CH4_V 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH4_S 0 + +#define RMT_CH5ADDR_REG (DR_REG_RMT_BASE + 0x0094) +/* RMT_APB_MEM_ADDR_CH5 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The ram relative address in channel5 by apb fifo access*/ +#define RMT_APB_MEM_ADDR_CH5 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH5_M ((RMT_APB_MEM_ADDR_CH5_V)<<(RMT_APB_MEM_ADDR_CH5_S)) +#define RMT_APB_MEM_ADDR_CH5_V 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH5_S 0 + +#define RMT_CH6ADDR_REG (DR_REG_RMT_BASE + 0x0098) +/* RMT_APB_MEM_ADDR_CH6 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The ram relative address in channel6 by apb fifo access*/ +#define RMT_APB_MEM_ADDR_CH6 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH6_M ((RMT_APB_MEM_ADDR_CH6_V)<<(RMT_APB_MEM_ADDR_CH6_S)) +#define RMT_APB_MEM_ADDR_CH6_V 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH6_S 0 + +#define RMT_CH7ADDR_REG (DR_REG_RMT_BASE + 0x009c) +/* RMT_APB_MEM_ADDR_CH7 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: The ram relative address in channel7 by apb fifo access*/ +#define RMT_APB_MEM_ADDR_CH7 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH7_M ((RMT_APB_MEM_ADDR_CH7_V)<<(RMT_APB_MEM_ADDR_CH7_S)) +#define RMT_APB_MEM_ADDR_CH7_V 0xFFFFFFFF +#define RMT_APB_MEM_ADDR_CH7_S 0 + +#define RMT_INT_RAW_REG (DR_REG_RMT_BASE + 0x00a0) +/* RMT_CH7_TX_THR_EVENT_INT_RAW : RO ;bitpos:[31] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 7 turns to high level when + transmitter in channle7 have send datas more than reg_rmt_tx_lim_ch7 after detecting this interrupt software can updata the old datas with new datas.*/ +#define RMT_CH7_TX_THR_EVENT_INT_RAW (BIT(31)) +#define RMT_CH7_TX_THR_EVENT_INT_RAW_M (BIT(31)) +#define RMT_CH7_TX_THR_EVENT_INT_RAW_V 0x1 +#define RMT_CH7_TX_THR_EVENT_INT_RAW_S 31 +/* RMT_CH6_TX_THR_EVENT_INT_RAW : RO ;bitpos:[30] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 6 turns to high level when + transmitter in channle6 have send datas more than reg_rmt_tx_lim_ch6 after detecting this interrupt software can updata the old datas with new datas.*/ +#define RMT_CH6_TX_THR_EVENT_INT_RAW (BIT(30)) +#define RMT_CH6_TX_THR_EVENT_INT_RAW_M (BIT(30)) +#define RMT_CH6_TX_THR_EVENT_INT_RAW_V 0x1 +#define RMT_CH6_TX_THR_EVENT_INT_RAW_S 30 +/* RMT_CH5_TX_THR_EVENT_INT_RAW : RO ;bitpos:[29] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 5 turns to high level when + transmitter in channle5 have send datas more than reg_rmt_tx_lim_ch5 after detecting this interrupt software can updata the old datas with new datas.*/ +#define RMT_CH5_TX_THR_EVENT_INT_RAW (BIT(29)) +#define RMT_CH5_TX_THR_EVENT_INT_RAW_M (BIT(29)) +#define RMT_CH5_TX_THR_EVENT_INT_RAW_V 0x1 +#define RMT_CH5_TX_THR_EVENT_INT_RAW_S 29 +/* RMT_CH4_TX_THR_EVENT_INT_RAW : RO ;bitpos:[28] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 4 turns to high level when + transmitter in channle4 have send datas more than reg_rmt_tx_lim_ch4 after detecting this interrupt software can updata the old datas with new datas.*/ +#define RMT_CH4_TX_THR_EVENT_INT_RAW (BIT(28)) +#define RMT_CH4_TX_THR_EVENT_INT_RAW_M (BIT(28)) +#define RMT_CH4_TX_THR_EVENT_INT_RAW_V 0x1 +#define RMT_CH4_TX_THR_EVENT_INT_RAW_S 28 +/* RMT_CH3_TX_THR_EVENT_INT_RAW : RO ;bitpos:[27] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 3 turns to high level when + transmitter in channle3 have send datas more than reg_rmt_tx_lim_ch3 after detecting this interrupt software can updata the old datas with new datas.*/ +#define RMT_CH3_TX_THR_EVENT_INT_RAW (BIT(27)) +#define RMT_CH3_TX_THR_EVENT_INT_RAW_M (BIT(27)) +#define RMT_CH3_TX_THR_EVENT_INT_RAW_V 0x1 +#define RMT_CH3_TX_THR_EVENT_INT_RAW_S 27 +/* RMT_CH2_TX_THR_EVENT_INT_RAW : RO ;bitpos:[26] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 2 turns to high level when + transmitter in channle2 have send datas more than reg_rmt_tx_lim_ch2 after detecting this interrupt software can updata the old datas with new datas.*/ +#define RMT_CH2_TX_THR_EVENT_INT_RAW (BIT(26)) +#define RMT_CH2_TX_THR_EVENT_INT_RAW_M (BIT(26)) +#define RMT_CH2_TX_THR_EVENT_INT_RAW_V 0x1 +#define RMT_CH2_TX_THR_EVENT_INT_RAW_S 26 +/* RMT_CH1_TX_THR_EVENT_INT_RAW : RO ;bitpos:[25] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 1 turns to high level when + transmitter in channle1 have send datas more than reg_rmt_tx_lim_ch1 after detecting this interrupt software can updata the old datas with new datas.*/ +#define RMT_CH1_TX_THR_EVENT_INT_RAW (BIT(25)) +#define RMT_CH1_TX_THR_EVENT_INT_RAW_M (BIT(25)) +#define RMT_CH1_TX_THR_EVENT_INT_RAW_V 0x1 +#define RMT_CH1_TX_THR_EVENT_INT_RAW_S 25 +/* RMT_CH0_TX_THR_EVENT_INT_RAW : RO ;bitpos:[24] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 0 turns to high level when + transmitter in channle0 have send datas more than reg_rmt_tx_lim_ch0 after detecting this interrupt software can updata the old datas with new datas.*/ +#define RMT_CH0_TX_THR_EVENT_INT_RAW (BIT(24)) +#define RMT_CH0_TX_THR_EVENT_INT_RAW_M (BIT(24)) +#define RMT_CH0_TX_THR_EVENT_INT_RAW_V 0x1 +#define RMT_CH0_TX_THR_EVENT_INT_RAW_S 24 +/* RMT_CH7_ERR_INT_RAW : RO ;bitpos:[23] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 7 turns to high level when + channle 7 detects some errors.*/ +#define RMT_CH7_ERR_INT_RAW (BIT(23)) +#define RMT_CH7_ERR_INT_RAW_M (BIT(23)) +#define RMT_CH7_ERR_INT_RAW_V 0x1 +#define RMT_CH7_ERR_INT_RAW_S 23 +/* RMT_CH7_RX_END_INT_RAW : RO ;bitpos:[22] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 7 turns to high level when + the receive process is done.*/ +#define RMT_CH7_RX_END_INT_RAW (BIT(22)) +#define RMT_CH7_RX_END_INT_RAW_M (BIT(22)) +#define RMT_CH7_RX_END_INT_RAW_V 0x1 +#define RMT_CH7_RX_END_INT_RAW_S 22 +/* RMT_CH7_TX_END_INT_RAW : RO ;bitpos:[21] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 7 turns to high level when + the transmit process is done.*/ +#define RMT_CH7_TX_END_INT_RAW (BIT(21)) +#define RMT_CH7_TX_END_INT_RAW_M (BIT(21)) +#define RMT_CH7_TX_END_INT_RAW_V 0x1 +#define RMT_CH7_TX_END_INT_RAW_S 21 +/* RMT_CH6_ERR_INT_RAW : RO ;bitpos:[20] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 6 turns to high level when + channle 6 detects some errors.*/ +#define RMT_CH6_ERR_INT_RAW (BIT(20)) +#define RMT_CH6_ERR_INT_RAW_M (BIT(20)) +#define RMT_CH6_ERR_INT_RAW_V 0x1 +#define RMT_CH6_ERR_INT_RAW_S 20 +/* RMT_CH6_RX_END_INT_RAW : RO ;bitpos:[19] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 6 turns to high level when + the receive process is done.*/ +#define RMT_CH6_RX_END_INT_RAW (BIT(19)) +#define RMT_CH6_RX_END_INT_RAW_M (BIT(19)) +#define RMT_CH6_RX_END_INT_RAW_V 0x1 +#define RMT_CH6_RX_END_INT_RAW_S 19 +/* RMT_CH6_TX_END_INT_RAW : RO ;bitpos:[18] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 6 turns to high level when + the transmit process is done.*/ +#define RMT_CH6_TX_END_INT_RAW (BIT(18)) +#define RMT_CH6_TX_END_INT_RAW_M (BIT(18)) +#define RMT_CH6_TX_END_INT_RAW_V 0x1 +#define RMT_CH6_TX_END_INT_RAW_S 18 +/* RMT_CH5_ERR_INT_RAW : RO ;bitpos:[17] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 5 turns to high level when + channle 5 detects some errors.*/ +#define RMT_CH5_ERR_INT_RAW (BIT(17)) +#define RMT_CH5_ERR_INT_RAW_M (BIT(17)) +#define RMT_CH5_ERR_INT_RAW_V 0x1 +#define RMT_CH5_ERR_INT_RAW_S 17 +/* RMT_CH5_RX_END_INT_RAW : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 5 turns to high level when + the receive process is done.*/ +#define RMT_CH5_RX_END_INT_RAW (BIT(16)) +#define RMT_CH5_RX_END_INT_RAW_M (BIT(16)) +#define RMT_CH5_RX_END_INT_RAW_V 0x1 +#define RMT_CH5_RX_END_INT_RAW_S 16 +/* RMT_CH5_TX_END_INT_RAW : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 5 turns to high level when + the transmit process is done.*/ +#define RMT_CH5_TX_END_INT_RAW (BIT(15)) +#define RMT_CH5_TX_END_INT_RAW_M (BIT(15)) +#define RMT_CH5_TX_END_INT_RAW_V 0x1 +#define RMT_CH5_TX_END_INT_RAW_S 15 +/* RMT_CH4_ERR_INT_RAW : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 4 turns to high level when + channle 4 detects some errors.*/ +#define RMT_CH4_ERR_INT_RAW (BIT(14)) +#define RMT_CH4_ERR_INT_RAW_M (BIT(14)) +#define RMT_CH4_ERR_INT_RAW_V 0x1 +#define RMT_CH4_ERR_INT_RAW_S 14 +/* RMT_CH4_RX_END_INT_RAW : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 4 turns to high level when + the receive process is done.*/ +#define RMT_CH4_RX_END_INT_RAW (BIT(13)) +#define RMT_CH4_RX_END_INT_RAW_M (BIT(13)) +#define RMT_CH4_RX_END_INT_RAW_V 0x1 +#define RMT_CH4_RX_END_INT_RAW_S 13 +/* RMT_CH4_TX_END_INT_RAW : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 4 turns to high level when + the transmit process is done.*/ +#define RMT_CH4_TX_END_INT_RAW (BIT(12)) +#define RMT_CH4_TX_END_INT_RAW_M (BIT(12)) +#define RMT_CH4_TX_END_INT_RAW_V 0x1 +#define RMT_CH4_TX_END_INT_RAW_S 12 +/* RMT_CH3_ERR_INT_RAW : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 3 turns to high level when + channle 3 detects some errors.*/ +#define RMT_CH3_ERR_INT_RAW (BIT(11)) +#define RMT_CH3_ERR_INT_RAW_M (BIT(11)) +#define RMT_CH3_ERR_INT_RAW_V 0x1 +#define RMT_CH3_ERR_INT_RAW_S 11 +/* RMT_CH3_RX_END_INT_RAW : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 3 turns to high level when + the receive process is done.*/ +#define RMT_CH3_RX_END_INT_RAW (BIT(10)) +#define RMT_CH3_RX_END_INT_RAW_M (BIT(10)) +#define RMT_CH3_RX_END_INT_RAW_V 0x1 +#define RMT_CH3_RX_END_INT_RAW_S 10 +/* RMT_CH3_TX_END_INT_RAW : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 3 turns to high level when + the transmit process is done.*/ +#define RMT_CH3_TX_END_INT_RAW (BIT(9)) +#define RMT_CH3_TX_END_INT_RAW_M (BIT(9)) +#define RMT_CH3_TX_END_INT_RAW_V 0x1 +#define RMT_CH3_TX_END_INT_RAW_S 9 +/* RMT_CH2_ERR_INT_RAW : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 2 turns to high level when + channle 2 detects some errors.*/ +#define RMT_CH2_ERR_INT_RAW (BIT(8)) +#define RMT_CH2_ERR_INT_RAW_M (BIT(8)) +#define RMT_CH2_ERR_INT_RAW_V 0x1 +#define RMT_CH2_ERR_INT_RAW_S 8 +/* RMT_CH2_RX_END_INT_RAW : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 2 turns to high level when + the receive process is done.*/ +#define RMT_CH2_RX_END_INT_RAW (BIT(7)) +#define RMT_CH2_RX_END_INT_RAW_M (BIT(7)) +#define RMT_CH2_RX_END_INT_RAW_V 0x1 +#define RMT_CH2_RX_END_INT_RAW_S 7 +/* RMT_CH2_TX_END_INT_RAW : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 2 turns to high level when + the transmit process is done.*/ +#define RMT_CH2_TX_END_INT_RAW (BIT(6)) +#define RMT_CH2_TX_END_INT_RAW_M (BIT(6)) +#define RMT_CH2_TX_END_INT_RAW_V 0x1 +#define RMT_CH2_TX_END_INT_RAW_S 6 +/* RMT_CH1_ERR_INT_RAW : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 1 turns to high level when + channle 1 detects some errors.*/ +#define RMT_CH1_ERR_INT_RAW (BIT(5)) +#define RMT_CH1_ERR_INT_RAW_M (BIT(5)) +#define RMT_CH1_ERR_INT_RAW_V 0x1 +#define RMT_CH1_ERR_INT_RAW_S 5 +/* RMT_CH1_RX_END_INT_RAW : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 1 turns to high level when + the receive process is done.*/ +#define RMT_CH1_RX_END_INT_RAW (BIT(4)) +#define RMT_CH1_RX_END_INT_RAW_M (BIT(4)) +#define RMT_CH1_RX_END_INT_RAW_V 0x1 +#define RMT_CH1_RX_END_INT_RAW_S 4 +/* RMT_CH1_TX_END_INT_RAW : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 1 turns to high level when + the transmit process is done.*/ +#define RMT_CH1_TX_END_INT_RAW (BIT(3)) +#define RMT_CH1_TX_END_INT_RAW_M (BIT(3)) +#define RMT_CH1_TX_END_INT_RAW_V 0x1 +#define RMT_CH1_TX_END_INT_RAW_S 3 +/* RMT_CH0_ERR_INT_RAW : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 0 turns to high level when + channle 0 detects some errors.*/ +#define RMT_CH0_ERR_INT_RAW (BIT(2)) +#define RMT_CH0_ERR_INT_RAW_M (BIT(2)) +#define RMT_CH0_ERR_INT_RAW_V 0x1 +#define RMT_CH0_ERR_INT_RAW_S 2 +/* RMT_CH0_RX_END_INT_RAW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 0 turns to high level when + the receive process is done.*/ +#define RMT_CH0_RX_END_INT_RAW (BIT(1)) +#define RMT_CH0_RX_END_INT_RAW_M (BIT(1)) +#define RMT_CH0_RX_END_INT_RAW_V 0x1 +#define RMT_CH0_RX_END_INT_RAW_S 1 +/* RMT_CH0_TX_END_INT_RAW : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for channel 0 turns to high level when + the transmit process is done.*/ +#define RMT_CH0_TX_END_INT_RAW (BIT(0)) +#define RMT_CH0_TX_END_INT_RAW_M (BIT(0)) +#define RMT_CH0_TX_END_INT_RAW_V 0x1 +#define RMT_CH0_TX_END_INT_RAW_S 0 + +#define RMT_INT_ST_REG (DR_REG_RMT_BASE + 0x00a4) +/* RMT_CH7_TX_THR_EVENT_INT_ST : RO ;bitpos:[31] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 7's rmt_ch7_tx_thr_event_int_raw + when mt_ch7_tx_thr_event_int_ena is set to 1.*/ +#define RMT_CH7_TX_THR_EVENT_INT_ST (BIT(31)) +#define RMT_CH7_TX_THR_EVENT_INT_ST_M (BIT(31)) +#define RMT_CH7_TX_THR_EVENT_INT_ST_V 0x1 +#define RMT_CH7_TX_THR_EVENT_INT_ST_S 31 +/* RMT_CH6_TX_THR_EVENT_INT_ST : RO ;bitpos:[30] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 6's rmt_ch6_tx_thr_event_int_raw + when mt_ch6_tx_thr_event_int_ena is set to 1.*/ +#define RMT_CH6_TX_THR_EVENT_INT_ST (BIT(30)) +#define RMT_CH6_TX_THR_EVENT_INT_ST_M (BIT(30)) +#define RMT_CH6_TX_THR_EVENT_INT_ST_V 0x1 +#define RMT_CH6_TX_THR_EVENT_INT_ST_S 30 +/* RMT_CH5_TX_THR_EVENT_INT_ST : RO ;bitpos:[29] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 5's rmt_ch5_tx_thr_event_int_raw + when mt_ch5_tx_thr_event_int_ena is set to 1.*/ +#define RMT_CH5_TX_THR_EVENT_INT_ST (BIT(29)) +#define RMT_CH5_TX_THR_EVENT_INT_ST_M (BIT(29)) +#define RMT_CH5_TX_THR_EVENT_INT_ST_V 0x1 +#define RMT_CH5_TX_THR_EVENT_INT_ST_S 29 +/* RMT_CH4_TX_THR_EVENT_INT_ST : RO ;bitpos:[28] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 4's rmt_ch4_tx_thr_event_int_raw + when mt_ch4_tx_thr_event_int_ena is set to 1.*/ +#define RMT_CH4_TX_THR_EVENT_INT_ST (BIT(28)) +#define RMT_CH4_TX_THR_EVENT_INT_ST_M (BIT(28)) +#define RMT_CH4_TX_THR_EVENT_INT_ST_V 0x1 +#define RMT_CH4_TX_THR_EVENT_INT_ST_S 28 +/* RMT_CH3_TX_THR_EVENT_INT_ST : RO ;bitpos:[27] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 3's rmt_ch3_tx_thr_event_int_raw + when mt_ch3_tx_thr_event_int_ena is set to 1.*/ +#define RMT_CH3_TX_THR_EVENT_INT_ST (BIT(27)) +#define RMT_CH3_TX_THR_EVENT_INT_ST_M (BIT(27)) +#define RMT_CH3_TX_THR_EVENT_INT_ST_V 0x1 +#define RMT_CH3_TX_THR_EVENT_INT_ST_S 27 +/* RMT_CH2_TX_THR_EVENT_INT_ST : RO ;bitpos:[26] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 2's rmt_ch2_tx_thr_event_int_raw + when mt_ch2_tx_thr_event_int_ena is set to 1.*/ +#define RMT_CH2_TX_THR_EVENT_INT_ST (BIT(26)) +#define RMT_CH2_TX_THR_EVENT_INT_ST_M (BIT(26)) +#define RMT_CH2_TX_THR_EVENT_INT_ST_V 0x1 +#define RMT_CH2_TX_THR_EVENT_INT_ST_S 26 +/* RMT_CH1_TX_THR_EVENT_INT_ST : RO ;bitpos:[25] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 1's rmt_ch1_tx_thr_event_int_raw + when mt_ch1_tx_thr_event_int_ena is set to 1.*/ +#define RMT_CH1_TX_THR_EVENT_INT_ST (BIT(25)) +#define RMT_CH1_TX_THR_EVENT_INT_ST_M (BIT(25)) +#define RMT_CH1_TX_THR_EVENT_INT_ST_V 0x1 +#define RMT_CH1_TX_THR_EVENT_INT_ST_S 25 +/* RMT_CH0_TX_THR_EVENT_INT_ST : RO ;bitpos:[24] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 0's rmt_ch0_tx_thr_event_int_raw + when mt_ch0_tx_thr_event_int_ena is set to 1.*/ +#define RMT_CH0_TX_THR_EVENT_INT_ST (BIT(24)) +#define RMT_CH0_TX_THR_EVENT_INT_ST_M (BIT(24)) +#define RMT_CH0_TX_THR_EVENT_INT_ST_V 0x1 +#define RMT_CH0_TX_THR_EVENT_INT_ST_S 24 +/* RMT_CH7_ERR_INT_ST : RO ;bitpos:[23] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 7's rmt_ch7_err_int_raw + when rmt_ch7_err_int_ena is set to 1.*/ +#define RMT_CH7_ERR_INT_ST (BIT(23)) +#define RMT_CH7_ERR_INT_ST_M (BIT(23)) +#define RMT_CH7_ERR_INT_ST_V 0x1 +#define RMT_CH7_ERR_INT_ST_S 23 +/* RMT_CH7_RX_END_INT_ST : RO ;bitpos:[22] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 7's rmt_ch7_rx_end_int_raw + when rmt_ch7_rx_end_int_ena is set to 1.*/ +#define RMT_CH7_RX_END_INT_ST (BIT(22)) +#define RMT_CH7_RX_END_INT_ST_M (BIT(22)) +#define RMT_CH7_RX_END_INT_ST_V 0x1 +#define RMT_CH7_RX_END_INT_ST_S 22 +/* RMT_CH7_TX_END_INT_ST : RO ;bitpos:[21] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 7's mt_ch7_tx_end_int_raw + when mt_ch7_tx_end_int_ena is set to 1.*/ +#define RMT_CH7_TX_END_INT_ST (BIT(21)) +#define RMT_CH7_TX_END_INT_ST_M (BIT(21)) +#define RMT_CH7_TX_END_INT_ST_V 0x1 +#define RMT_CH7_TX_END_INT_ST_S 21 +/* RMT_CH6_ERR_INT_ST : RO ;bitpos:[20] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 6's rmt_ch6_err_int_raw + when rmt_ch6_err_int_ena is set to 1.*/ +#define RMT_CH6_ERR_INT_ST (BIT(20)) +#define RMT_CH6_ERR_INT_ST_M (BIT(20)) +#define RMT_CH6_ERR_INT_ST_V 0x1 +#define RMT_CH6_ERR_INT_ST_S 20 +/* RMT_CH6_RX_END_INT_ST : RO ;bitpos:[19] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 6's rmt_ch6_rx_end_int_raw + when rmt_ch6_rx_end_int_ena is set to 1.*/ +#define RMT_CH6_RX_END_INT_ST (BIT(19)) +#define RMT_CH6_RX_END_INT_ST_M (BIT(19)) +#define RMT_CH6_RX_END_INT_ST_V 0x1 +#define RMT_CH6_RX_END_INT_ST_S 19 +/* RMT_CH6_TX_END_INT_ST : RO ;bitpos:[18] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 6's mt_ch6_tx_end_int_raw + when mt_ch6_tx_end_int_ena is set to 1.*/ +#define RMT_CH6_TX_END_INT_ST (BIT(18)) +#define RMT_CH6_TX_END_INT_ST_M (BIT(18)) +#define RMT_CH6_TX_END_INT_ST_V 0x1 +#define RMT_CH6_TX_END_INT_ST_S 18 +/* RMT_CH5_ERR_INT_ST : RO ;bitpos:[17] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 5's rmt_ch5_err_int_raw + when rmt_ch5_err_int_ena is set to 1.*/ +#define RMT_CH5_ERR_INT_ST (BIT(17)) +#define RMT_CH5_ERR_INT_ST_M (BIT(17)) +#define RMT_CH5_ERR_INT_ST_V 0x1 +#define RMT_CH5_ERR_INT_ST_S 17 +/* RMT_CH5_RX_END_INT_ST : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 5's rmt_ch5_rx_end_int_raw + when rmt_ch5_rx_end_int_ena is set to 1.*/ +#define RMT_CH5_RX_END_INT_ST (BIT(16)) +#define RMT_CH5_RX_END_INT_ST_M (BIT(16)) +#define RMT_CH5_RX_END_INT_ST_V 0x1 +#define RMT_CH5_RX_END_INT_ST_S 16 +/* RMT_CH5_TX_END_INT_ST : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 5's mt_ch5_tx_end_int_raw + when mt_ch5_tx_end_int_ena is set to 1.*/ +#define RMT_CH5_TX_END_INT_ST (BIT(15)) +#define RMT_CH5_TX_END_INT_ST_M (BIT(15)) +#define RMT_CH5_TX_END_INT_ST_V 0x1 +#define RMT_CH5_TX_END_INT_ST_S 15 +/* RMT_CH4_ERR_INT_ST : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 4's rmt_ch4_err_int_raw + when rmt_ch4_err_int_ena is set to 1.*/ +#define RMT_CH4_ERR_INT_ST (BIT(14)) +#define RMT_CH4_ERR_INT_ST_M (BIT(14)) +#define RMT_CH4_ERR_INT_ST_V 0x1 +#define RMT_CH4_ERR_INT_ST_S 14 +/* RMT_CH4_RX_END_INT_ST : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 4's rmt_ch4_rx_end_int_raw + when rmt_ch4_rx_end_int_ena is set to 1.*/ +#define RMT_CH4_RX_END_INT_ST (BIT(13)) +#define RMT_CH4_RX_END_INT_ST_M (BIT(13)) +#define RMT_CH4_RX_END_INT_ST_V 0x1 +#define RMT_CH4_RX_END_INT_ST_S 13 +/* RMT_CH4_TX_END_INT_ST : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 4's mt_ch4_tx_end_int_raw + when mt_ch4_tx_end_int_ena is set to 1.*/ +#define RMT_CH4_TX_END_INT_ST (BIT(12)) +#define RMT_CH4_TX_END_INT_ST_M (BIT(12)) +#define RMT_CH4_TX_END_INT_ST_V 0x1 +#define RMT_CH4_TX_END_INT_ST_S 12 +/* RMT_CH3_ERR_INT_ST : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 3's rmt_ch3_err_int_raw + when rmt_ch3_err_int_ena is set to 1.*/ +#define RMT_CH3_ERR_INT_ST (BIT(11)) +#define RMT_CH3_ERR_INT_ST_M (BIT(11)) +#define RMT_CH3_ERR_INT_ST_V 0x1 +#define RMT_CH3_ERR_INT_ST_S 11 +/* RMT_CH3_RX_END_INT_ST : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 3's rmt_ch3_rx_end_int_raw + when rmt_ch3_rx_end_int_ena is set to 1.*/ +#define RMT_CH3_RX_END_INT_ST (BIT(10)) +#define RMT_CH3_RX_END_INT_ST_M (BIT(10)) +#define RMT_CH3_RX_END_INT_ST_V 0x1 +#define RMT_CH3_RX_END_INT_ST_S 10 +/* RMT_CH3_TX_END_INT_ST : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 3's mt_ch3_tx_end_int_raw + when mt_ch3_tx_end_int_ena is set to 1.*/ +#define RMT_CH3_TX_END_INT_ST (BIT(9)) +#define RMT_CH3_TX_END_INT_ST_M (BIT(9)) +#define RMT_CH3_TX_END_INT_ST_V 0x1 +#define RMT_CH3_TX_END_INT_ST_S 9 +/* RMT_CH2_ERR_INT_ST : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 2's rmt_ch2_err_int_raw + when rmt_ch2_err_int_ena is set to 1.*/ +#define RMT_CH2_ERR_INT_ST (BIT(8)) +#define RMT_CH2_ERR_INT_ST_M (BIT(8)) +#define RMT_CH2_ERR_INT_ST_V 0x1 +#define RMT_CH2_ERR_INT_ST_S 8 +/* RMT_CH2_RX_END_INT_ST : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 2's rmt_ch2_rx_end_int_raw + when rmt_ch2_rx_end_int_ena is set to 1.*/ +#define RMT_CH2_RX_END_INT_ST (BIT(7)) +#define RMT_CH2_RX_END_INT_ST_M (BIT(7)) +#define RMT_CH2_RX_END_INT_ST_V 0x1 +#define RMT_CH2_RX_END_INT_ST_S 7 +/* RMT_CH2_TX_END_INT_ST : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 2's mt_ch2_tx_end_int_raw + when mt_ch2_tx_end_int_ena is set to 1.*/ +#define RMT_CH2_TX_END_INT_ST (BIT(6)) +#define RMT_CH2_TX_END_INT_ST_M (BIT(6)) +#define RMT_CH2_TX_END_INT_ST_V 0x1 +#define RMT_CH2_TX_END_INT_ST_S 6 +/* RMT_CH1_ERR_INT_ST : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 1's rmt_ch1_err_int_raw + when rmt_ch1_err_int_ena is set to 1.*/ +#define RMT_CH1_ERR_INT_ST (BIT(5)) +#define RMT_CH1_ERR_INT_ST_M (BIT(5)) +#define RMT_CH1_ERR_INT_ST_V 0x1 +#define RMT_CH1_ERR_INT_ST_S 5 +/* RMT_CH1_RX_END_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 1's rmt_ch1_rx_end_int_raw + when rmt_ch1_rx_end_int_ena is set to 1.*/ +#define RMT_CH1_RX_END_INT_ST (BIT(4)) +#define RMT_CH1_RX_END_INT_ST_M (BIT(4)) +#define RMT_CH1_RX_END_INT_ST_V 0x1 +#define RMT_CH1_RX_END_INT_ST_S 4 +/* RMT_CH1_TX_END_INT_ST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 1's mt_ch1_tx_end_int_raw + when mt_ch1_tx_end_int_ena is set to 1.*/ +#define RMT_CH1_TX_END_INT_ST (BIT(3)) +#define RMT_CH1_TX_END_INT_ST_M (BIT(3)) +#define RMT_CH1_TX_END_INT_ST_V 0x1 +#define RMT_CH1_TX_END_INT_ST_S 3 +/* RMT_CH0_ERR_INT_ST : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 0's rmt_ch0_err_int_raw + when rmt_ch0_err_int_ena is set to 0.*/ +#define RMT_CH0_ERR_INT_ST (BIT(2)) +#define RMT_CH0_ERR_INT_ST_M (BIT(2)) +#define RMT_CH0_ERR_INT_ST_V 0x1 +#define RMT_CH0_ERR_INT_ST_S 2 +/* RMT_CH0_RX_END_INT_ST : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 0's rmt_ch0_rx_end_int_raw + when rmt_ch0_rx_end_int_ena is set to 0.*/ +#define RMT_CH0_RX_END_INT_ST (BIT(1)) +#define RMT_CH0_RX_END_INT_ST_M (BIT(1)) +#define RMT_CH0_RX_END_INT_ST_V 0x1 +#define RMT_CH0_RX_END_INT_ST_S 1 +/* RMT_CH0_TX_END_INT_ST : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The interrupt state bit for channel 0's mt_ch0_tx_end_int_raw + when mt_ch0_tx_end_int_ena is set to 0.*/ +#define RMT_CH0_TX_END_INT_ST (BIT(0)) +#define RMT_CH0_TX_END_INT_ST_M (BIT(0)) +#define RMT_CH0_TX_END_INT_ST_V 0x1 +#define RMT_CH0_TX_END_INT_ST_S 0 + +#define RMT_INT_ENA_REG (DR_REG_RMT_BASE + 0x00a8) +/* RMT_CH7_TX_THR_EVENT_INT_ENA : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch7_tx_thr_event_int_st.*/ +#define RMT_CH7_TX_THR_EVENT_INT_ENA (BIT(31)) +#define RMT_CH7_TX_THR_EVENT_INT_ENA_M (BIT(31)) +#define RMT_CH7_TX_THR_EVENT_INT_ENA_V 0x1 +#define RMT_CH7_TX_THR_EVENT_INT_ENA_S 31 +/* RMT_CH6_TX_THR_EVENT_INT_ENA : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch6_tx_thr_event_int_st.*/ +#define RMT_CH6_TX_THR_EVENT_INT_ENA (BIT(30)) +#define RMT_CH6_TX_THR_EVENT_INT_ENA_M (BIT(30)) +#define RMT_CH6_TX_THR_EVENT_INT_ENA_V 0x1 +#define RMT_CH6_TX_THR_EVENT_INT_ENA_S 30 +/* RMT_CH5_TX_THR_EVENT_INT_ENA : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch5_tx_thr_event_int_st.*/ +#define RMT_CH5_TX_THR_EVENT_INT_ENA (BIT(29)) +#define RMT_CH5_TX_THR_EVENT_INT_ENA_M (BIT(29)) +#define RMT_CH5_TX_THR_EVENT_INT_ENA_V 0x1 +#define RMT_CH5_TX_THR_EVENT_INT_ENA_S 29 +/* RMT_CH4_TX_THR_EVENT_INT_ENA : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch4_tx_thr_event_int_st.*/ +#define RMT_CH4_TX_THR_EVENT_INT_ENA (BIT(28)) +#define RMT_CH4_TX_THR_EVENT_INT_ENA_M (BIT(28)) +#define RMT_CH4_TX_THR_EVENT_INT_ENA_V 0x1 +#define RMT_CH4_TX_THR_EVENT_INT_ENA_S 28 +/* RMT_CH3_TX_THR_EVENT_INT_ENA : R/W ;bitpos:[27] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch3_tx_thr_event_int_st.*/ +#define RMT_CH3_TX_THR_EVENT_INT_ENA (BIT(27)) +#define RMT_CH3_TX_THR_EVENT_INT_ENA_M (BIT(27)) +#define RMT_CH3_TX_THR_EVENT_INT_ENA_V 0x1 +#define RMT_CH3_TX_THR_EVENT_INT_ENA_S 27 +/* RMT_CH2_TX_THR_EVENT_INT_ENA : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch2_tx_thr_event_int_st.*/ +#define RMT_CH2_TX_THR_EVENT_INT_ENA (BIT(26)) +#define RMT_CH2_TX_THR_EVENT_INT_ENA_M (BIT(26)) +#define RMT_CH2_TX_THR_EVENT_INT_ENA_V 0x1 +#define RMT_CH2_TX_THR_EVENT_INT_ENA_S 26 +/* RMT_CH1_TX_THR_EVENT_INT_ENA : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch1_tx_thr_event_int_st.*/ +#define RMT_CH1_TX_THR_EVENT_INT_ENA (BIT(25)) +#define RMT_CH1_TX_THR_EVENT_INT_ENA_M (BIT(25)) +#define RMT_CH1_TX_THR_EVENT_INT_ENA_V 0x1 +#define RMT_CH1_TX_THR_EVENT_INT_ENA_S 25 +/* RMT_CH0_TX_THR_EVENT_INT_ENA : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch0_tx_thr_event_int_st.*/ +#define RMT_CH0_TX_THR_EVENT_INT_ENA (BIT(24)) +#define RMT_CH0_TX_THR_EVENT_INT_ENA_M (BIT(24)) +#define RMT_CH0_TX_THR_EVENT_INT_ENA_V 0x1 +#define RMT_CH0_TX_THR_EVENT_INT_ENA_S 24 +/* RMT_CH7_ERR_INT_ENA : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch7_err_int_st.*/ +#define RMT_CH7_ERR_INT_ENA (BIT(23)) +#define RMT_CH7_ERR_INT_ENA_M (BIT(23)) +#define RMT_CH7_ERR_INT_ENA_V 0x1 +#define RMT_CH7_ERR_INT_ENA_S 23 +/* RMT_CH7_RX_END_INT_ENA : R/W ;bitpos:[22] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch7_rx_end_int_st.*/ +#define RMT_CH7_RX_END_INT_ENA (BIT(22)) +#define RMT_CH7_RX_END_INT_ENA_M (BIT(22)) +#define RMT_CH7_RX_END_INT_ENA_V 0x1 +#define RMT_CH7_RX_END_INT_ENA_S 22 +/* RMT_CH7_TX_END_INT_ENA : R/W ;bitpos:[21] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch7_tx_end_int_st.*/ +#define RMT_CH7_TX_END_INT_ENA (BIT(21)) +#define RMT_CH7_TX_END_INT_ENA_M (BIT(21)) +#define RMT_CH7_TX_END_INT_ENA_V 0x1 +#define RMT_CH7_TX_END_INT_ENA_S 21 +/* RMT_CH6_ERR_INT_ENA : R/W ;bitpos:[20] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch6_err_int_st.*/ +#define RMT_CH6_ERR_INT_ENA (BIT(20)) +#define RMT_CH6_ERR_INT_ENA_M (BIT(20)) +#define RMT_CH6_ERR_INT_ENA_V 0x1 +#define RMT_CH6_ERR_INT_ENA_S 20 +/* RMT_CH6_RX_END_INT_ENA : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch6_rx_end_int_st.*/ +#define RMT_CH6_RX_END_INT_ENA (BIT(19)) +#define RMT_CH6_RX_END_INT_ENA_M (BIT(19)) +#define RMT_CH6_RX_END_INT_ENA_V 0x1 +#define RMT_CH6_RX_END_INT_ENA_S 19 +/* RMT_CH6_TX_END_INT_ENA : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch6_tx_end_int_st.*/ +#define RMT_CH6_TX_END_INT_ENA (BIT(18)) +#define RMT_CH6_TX_END_INT_ENA_M (BIT(18)) +#define RMT_CH6_TX_END_INT_ENA_V 0x1 +#define RMT_CH6_TX_END_INT_ENA_S 18 +/* RMT_CH5_ERR_INT_ENA : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch5_err_int_st.*/ +#define RMT_CH5_ERR_INT_ENA (BIT(17)) +#define RMT_CH5_ERR_INT_ENA_M (BIT(17)) +#define RMT_CH5_ERR_INT_ENA_V 0x1 +#define RMT_CH5_ERR_INT_ENA_S 17 +/* RMT_CH5_RX_END_INT_ENA : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch5_rx_end_int_st.*/ +#define RMT_CH5_RX_END_INT_ENA (BIT(16)) +#define RMT_CH5_RX_END_INT_ENA_M (BIT(16)) +#define RMT_CH5_RX_END_INT_ENA_V 0x1 +#define RMT_CH5_RX_END_INT_ENA_S 16 +/* RMT_CH5_TX_END_INT_ENA : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch5_tx_end_int_st.*/ +#define RMT_CH5_TX_END_INT_ENA (BIT(15)) +#define RMT_CH5_TX_END_INT_ENA_M (BIT(15)) +#define RMT_CH5_TX_END_INT_ENA_V 0x1 +#define RMT_CH5_TX_END_INT_ENA_S 15 +/* RMT_CH4_ERR_INT_ENA : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch4_err_int_st.*/ +#define RMT_CH4_ERR_INT_ENA (BIT(14)) +#define RMT_CH4_ERR_INT_ENA_M (BIT(14)) +#define RMT_CH4_ERR_INT_ENA_V 0x1 +#define RMT_CH4_ERR_INT_ENA_S 14 +/* RMT_CH4_RX_END_INT_ENA : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch4_rx_end_int_st.*/ +#define RMT_CH4_RX_END_INT_ENA (BIT(13)) +#define RMT_CH4_RX_END_INT_ENA_M (BIT(13)) +#define RMT_CH4_RX_END_INT_ENA_V 0x1 +#define RMT_CH4_RX_END_INT_ENA_S 13 +/* RMT_CH4_TX_END_INT_ENA : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch4_tx_end_int_st.*/ +#define RMT_CH4_TX_END_INT_ENA (BIT(12)) +#define RMT_CH4_TX_END_INT_ENA_M (BIT(12)) +#define RMT_CH4_TX_END_INT_ENA_V 0x1 +#define RMT_CH4_TX_END_INT_ENA_S 12 +/* RMT_CH3_ERR_INT_ENA : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch3_err_int_st.*/ +#define RMT_CH3_ERR_INT_ENA (BIT(11)) +#define RMT_CH3_ERR_INT_ENA_M (BIT(11)) +#define RMT_CH3_ERR_INT_ENA_V 0x1 +#define RMT_CH3_ERR_INT_ENA_S 11 +/* RMT_CH3_RX_END_INT_ENA : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch3_rx_end_int_st.*/ +#define RMT_CH3_RX_END_INT_ENA (BIT(10)) +#define RMT_CH3_RX_END_INT_ENA_M (BIT(10)) +#define RMT_CH3_RX_END_INT_ENA_V 0x1 +#define RMT_CH3_RX_END_INT_ENA_S 10 +/* RMT_CH3_TX_END_INT_ENA : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch3_tx_end_int_st.*/ +#define RMT_CH3_TX_END_INT_ENA (BIT(9)) +#define RMT_CH3_TX_END_INT_ENA_M (BIT(9)) +#define RMT_CH3_TX_END_INT_ENA_V 0x1 +#define RMT_CH3_TX_END_INT_ENA_S 9 +/* RMT_CH2_ERR_INT_ENA : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch2_err_int_st.*/ +#define RMT_CH2_ERR_INT_ENA (BIT(8)) +#define RMT_CH2_ERR_INT_ENA_M (BIT(8)) +#define RMT_CH2_ERR_INT_ENA_V 0x1 +#define RMT_CH2_ERR_INT_ENA_S 8 +/* RMT_CH2_RX_END_INT_ENA : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch2_rx_end_int_st.*/ +#define RMT_CH2_RX_END_INT_ENA (BIT(7)) +#define RMT_CH2_RX_END_INT_ENA_M (BIT(7)) +#define RMT_CH2_RX_END_INT_ENA_V 0x1 +#define RMT_CH2_RX_END_INT_ENA_S 7 +/* RMT_CH2_TX_END_INT_ENA : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch2_tx_end_int_st.*/ +#define RMT_CH2_TX_END_INT_ENA (BIT(6)) +#define RMT_CH2_TX_END_INT_ENA_M (BIT(6)) +#define RMT_CH2_TX_END_INT_ENA_V 0x1 +#define RMT_CH2_TX_END_INT_ENA_S 6 +/* RMT_CH1_ERR_INT_ENA : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch1_err_int_st.*/ +#define RMT_CH1_ERR_INT_ENA (BIT(5)) +#define RMT_CH1_ERR_INT_ENA_M (BIT(5)) +#define RMT_CH1_ERR_INT_ENA_V 0x1 +#define RMT_CH1_ERR_INT_ENA_S 5 +/* RMT_CH1_RX_END_INT_ENA : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch1_rx_end_int_st.*/ +#define RMT_CH1_RX_END_INT_ENA (BIT(4)) +#define RMT_CH1_RX_END_INT_ENA_M (BIT(4)) +#define RMT_CH1_RX_END_INT_ENA_V 0x1 +#define RMT_CH1_RX_END_INT_ENA_S 4 +/* RMT_CH1_TX_END_INT_ENA : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch1_tx_end_int_st.*/ +#define RMT_CH1_TX_END_INT_ENA (BIT(3)) +#define RMT_CH1_TX_END_INT_ENA_M (BIT(3)) +#define RMT_CH1_TX_END_INT_ENA_V 0x1 +#define RMT_CH1_TX_END_INT_ENA_S 3 +/* RMT_CH0_ERR_INT_ENA : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch0_err_int_st.*/ +#define RMT_CH0_ERR_INT_ENA (BIT(2)) +#define RMT_CH0_ERR_INT_ENA_M (BIT(2)) +#define RMT_CH0_ERR_INT_ENA_V 0x1 +#define RMT_CH0_ERR_INT_ENA_S 2 +/* RMT_CH0_RX_END_INT_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch0_rx_end_int_st.*/ +#define RMT_CH0_RX_END_INT_ENA (BIT(1)) +#define RMT_CH0_RX_END_INT_ENA_M (BIT(1)) +#define RMT_CH0_RX_END_INT_ENA_V 0x1 +#define RMT_CH0_RX_END_INT_ENA_S 1 +/* RMT_CH0_TX_END_INT_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Set this bit to enable rmt_ch0_tx_end_int_st.*/ +#define RMT_CH0_TX_END_INT_ENA (BIT(0)) +#define RMT_CH0_TX_END_INT_ENA_M (BIT(0)) +#define RMT_CH0_TX_END_INT_ENA_V 0x1 +#define RMT_CH0_TX_END_INT_ENA_S 0 + +#define RMT_INT_CLR_REG (DR_REG_RMT_BASE + 0x00ac) +/* RMT_CH7_TX_THR_EVENT_INT_CLR : WO ;bitpos:[31] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch7_tx_thr_event_int_raw interrupt.*/ +#define RMT_CH7_TX_THR_EVENT_INT_CLR (BIT(31)) +#define RMT_CH7_TX_THR_EVENT_INT_CLR_M (BIT(31)) +#define RMT_CH7_TX_THR_EVENT_INT_CLR_V 0x1 +#define RMT_CH7_TX_THR_EVENT_INT_CLR_S 31 +/* RMT_CH6_TX_THR_EVENT_INT_CLR : WO ;bitpos:[30] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch6_tx_thr_event_int_raw interrupt.*/ +#define RMT_CH6_TX_THR_EVENT_INT_CLR (BIT(30)) +#define RMT_CH6_TX_THR_EVENT_INT_CLR_M (BIT(30)) +#define RMT_CH6_TX_THR_EVENT_INT_CLR_V 0x1 +#define RMT_CH6_TX_THR_EVENT_INT_CLR_S 30 +/* RMT_CH5_TX_THR_EVENT_INT_CLR : WO ;bitpos:[29] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch5_tx_thr_event_int_raw interrupt.*/ +#define RMT_CH5_TX_THR_EVENT_INT_CLR (BIT(29)) +#define RMT_CH5_TX_THR_EVENT_INT_CLR_M (BIT(29)) +#define RMT_CH5_TX_THR_EVENT_INT_CLR_V 0x1 +#define RMT_CH5_TX_THR_EVENT_INT_CLR_S 29 +/* RMT_CH4_TX_THR_EVENT_INT_CLR : WO ;bitpos:[28] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch4_tx_thr_event_int_raw interrupt.*/ +#define RMT_CH4_TX_THR_EVENT_INT_CLR (BIT(28)) +#define RMT_CH4_TX_THR_EVENT_INT_CLR_M (BIT(28)) +#define RMT_CH4_TX_THR_EVENT_INT_CLR_V 0x1 +#define RMT_CH4_TX_THR_EVENT_INT_CLR_S 28 +/* RMT_CH3_TX_THR_EVENT_INT_CLR : WO ;bitpos:[27] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch3_tx_thr_event_int_raw interrupt.*/ +#define RMT_CH3_TX_THR_EVENT_INT_CLR (BIT(27)) +#define RMT_CH3_TX_THR_EVENT_INT_CLR_M (BIT(27)) +#define RMT_CH3_TX_THR_EVENT_INT_CLR_V 0x1 +#define RMT_CH3_TX_THR_EVENT_INT_CLR_S 27 +/* RMT_CH2_TX_THR_EVENT_INT_CLR : WO ;bitpos:[26] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch2_tx_thr_event_int_raw interrupt.*/ +#define RMT_CH2_TX_THR_EVENT_INT_CLR (BIT(26)) +#define RMT_CH2_TX_THR_EVENT_INT_CLR_M (BIT(26)) +#define RMT_CH2_TX_THR_EVENT_INT_CLR_V 0x1 +#define RMT_CH2_TX_THR_EVENT_INT_CLR_S 26 +/* RMT_CH1_TX_THR_EVENT_INT_CLR : WO ;bitpos:[25] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch1_tx_thr_event_int_raw interrupt.*/ +#define RMT_CH1_TX_THR_EVENT_INT_CLR (BIT(25)) +#define RMT_CH1_TX_THR_EVENT_INT_CLR_M (BIT(25)) +#define RMT_CH1_TX_THR_EVENT_INT_CLR_V 0x1 +#define RMT_CH1_TX_THR_EVENT_INT_CLR_S 25 +/* RMT_CH0_TX_THR_EVENT_INT_CLR : WO ;bitpos:[24] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch0_tx_thr_event_int_raw interrupt.*/ +#define RMT_CH0_TX_THR_EVENT_INT_CLR (BIT(24)) +#define RMT_CH0_TX_THR_EVENT_INT_CLR_M (BIT(24)) +#define RMT_CH0_TX_THR_EVENT_INT_CLR_V 0x1 +#define RMT_CH0_TX_THR_EVENT_INT_CLR_S 24 +/* RMT_CH7_ERR_INT_CLR : WO ;bitpos:[23] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch7_err_int_raw.*/ +#define RMT_CH7_ERR_INT_CLR (BIT(23)) +#define RMT_CH7_ERR_INT_CLR_M (BIT(23)) +#define RMT_CH7_ERR_INT_CLR_V 0x1 +#define RMT_CH7_ERR_INT_CLR_S 23 +/* RMT_CH7_RX_END_INT_CLR : WO ;bitpos:[22] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch7_tx_end_int_raw.*/ +#define RMT_CH7_RX_END_INT_CLR (BIT(22)) +#define RMT_CH7_RX_END_INT_CLR_M (BIT(22)) +#define RMT_CH7_RX_END_INT_CLR_V 0x1 +#define RMT_CH7_RX_END_INT_CLR_S 22 +/* RMT_CH7_TX_END_INT_CLR : WO ;bitpos:[21] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch7_rx_end_int_raw..*/ +#define RMT_CH7_TX_END_INT_CLR (BIT(21)) +#define RMT_CH7_TX_END_INT_CLR_M (BIT(21)) +#define RMT_CH7_TX_END_INT_CLR_V 0x1 +#define RMT_CH7_TX_END_INT_CLR_S 21 +/* RMT_CH6_ERR_INT_CLR : WO ;bitpos:[20] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch6_err_int_raw.*/ +#define RMT_CH6_ERR_INT_CLR (BIT(20)) +#define RMT_CH6_ERR_INT_CLR_M (BIT(20)) +#define RMT_CH6_ERR_INT_CLR_V 0x1 +#define RMT_CH6_ERR_INT_CLR_S 20 +/* RMT_CH6_RX_END_INT_CLR : WO ;bitpos:[19] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch6_tx_end_int_raw.*/ +#define RMT_CH6_RX_END_INT_CLR (BIT(19)) +#define RMT_CH6_RX_END_INT_CLR_M (BIT(19)) +#define RMT_CH6_RX_END_INT_CLR_V 0x1 +#define RMT_CH6_RX_END_INT_CLR_S 19 +/* RMT_CH6_TX_END_INT_CLR : WO ;bitpos:[18] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch6_rx_end_int_raw..*/ +#define RMT_CH6_TX_END_INT_CLR (BIT(18)) +#define RMT_CH6_TX_END_INT_CLR_M (BIT(18)) +#define RMT_CH6_TX_END_INT_CLR_V 0x1 +#define RMT_CH6_TX_END_INT_CLR_S 18 +/* RMT_CH5_ERR_INT_CLR : WO ;bitpos:[17] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch5_err_int_raw.*/ +#define RMT_CH5_ERR_INT_CLR (BIT(17)) +#define RMT_CH5_ERR_INT_CLR_M (BIT(17)) +#define RMT_CH5_ERR_INT_CLR_V 0x1 +#define RMT_CH5_ERR_INT_CLR_S 17 +/* RMT_CH5_RX_END_INT_CLR : WO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch5_tx_end_int_raw.*/ +#define RMT_CH5_RX_END_INT_CLR (BIT(16)) +#define RMT_CH5_RX_END_INT_CLR_M (BIT(16)) +#define RMT_CH5_RX_END_INT_CLR_V 0x1 +#define RMT_CH5_RX_END_INT_CLR_S 16 +/* RMT_CH5_TX_END_INT_CLR : WO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch5_rx_end_int_raw..*/ +#define RMT_CH5_TX_END_INT_CLR (BIT(15)) +#define RMT_CH5_TX_END_INT_CLR_M (BIT(15)) +#define RMT_CH5_TX_END_INT_CLR_V 0x1 +#define RMT_CH5_TX_END_INT_CLR_S 15 +/* RMT_CH4_ERR_INT_CLR : WO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch4_err_int_raw.*/ +#define RMT_CH4_ERR_INT_CLR (BIT(14)) +#define RMT_CH4_ERR_INT_CLR_M (BIT(14)) +#define RMT_CH4_ERR_INT_CLR_V 0x1 +#define RMT_CH4_ERR_INT_CLR_S 14 +/* RMT_CH4_RX_END_INT_CLR : WO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch4_tx_end_int_raw.*/ +#define RMT_CH4_RX_END_INT_CLR (BIT(13)) +#define RMT_CH4_RX_END_INT_CLR_M (BIT(13)) +#define RMT_CH4_RX_END_INT_CLR_V 0x1 +#define RMT_CH4_RX_END_INT_CLR_S 13 +/* RMT_CH4_TX_END_INT_CLR : WO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch4_rx_end_int_raw..*/ +#define RMT_CH4_TX_END_INT_CLR (BIT(12)) +#define RMT_CH4_TX_END_INT_CLR_M (BIT(12)) +#define RMT_CH4_TX_END_INT_CLR_V 0x1 +#define RMT_CH4_TX_END_INT_CLR_S 12 +/* RMT_CH3_ERR_INT_CLR : WO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch3_err_int_raw.*/ +#define RMT_CH3_ERR_INT_CLR (BIT(11)) +#define RMT_CH3_ERR_INT_CLR_M (BIT(11)) +#define RMT_CH3_ERR_INT_CLR_V 0x1 +#define RMT_CH3_ERR_INT_CLR_S 11 +/* RMT_CH3_RX_END_INT_CLR : WO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch3_tx_end_int_raw.*/ +#define RMT_CH3_RX_END_INT_CLR (BIT(10)) +#define RMT_CH3_RX_END_INT_CLR_M (BIT(10)) +#define RMT_CH3_RX_END_INT_CLR_V 0x1 +#define RMT_CH3_RX_END_INT_CLR_S 10 +/* RMT_CH3_TX_END_INT_CLR : WO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch3_rx_end_int_raw..*/ +#define RMT_CH3_TX_END_INT_CLR (BIT(9)) +#define RMT_CH3_TX_END_INT_CLR_M (BIT(9)) +#define RMT_CH3_TX_END_INT_CLR_V 0x1 +#define RMT_CH3_TX_END_INT_CLR_S 9 +/* RMT_CH2_ERR_INT_CLR : WO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch2_err_int_raw.*/ +#define RMT_CH2_ERR_INT_CLR (BIT(8)) +#define RMT_CH2_ERR_INT_CLR_M (BIT(8)) +#define RMT_CH2_ERR_INT_CLR_V 0x1 +#define RMT_CH2_ERR_INT_CLR_S 8 +/* RMT_CH2_RX_END_INT_CLR : WO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch2_tx_end_int_raw.*/ +#define RMT_CH2_RX_END_INT_CLR (BIT(7)) +#define RMT_CH2_RX_END_INT_CLR_M (BIT(7)) +#define RMT_CH2_RX_END_INT_CLR_V 0x1 +#define RMT_CH2_RX_END_INT_CLR_S 7 +/* RMT_CH2_TX_END_INT_CLR : WO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch2_rx_end_int_raw..*/ +#define RMT_CH2_TX_END_INT_CLR (BIT(6)) +#define RMT_CH2_TX_END_INT_CLR_M (BIT(6)) +#define RMT_CH2_TX_END_INT_CLR_V 0x1 +#define RMT_CH2_TX_END_INT_CLR_S 6 +/* RMT_CH1_ERR_INT_CLR : WO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch1_err_int_raw.*/ +#define RMT_CH1_ERR_INT_CLR (BIT(5)) +#define RMT_CH1_ERR_INT_CLR_M (BIT(5)) +#define RMT_CH1_ERR_INT_CLR_V 0x1 +#define RMT_CH1_ERR_INT_CLR_S 5 +/* RMT_CH1_RX_END_INT_CLR : WO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch1_tx_end_int_raw.*/ +#define RMT_CH1_RX_END_INT_CLR (BIT(4)) +#define RMT_CH1_RX_END_INT_CLR_M (BIT(4)) +#define RMT_CH1_RX_END_INT_CLR_V 0x1 +#define RMT_CH1_RX_END_INT_CLR_S 4 +/* RMT_CH1_TX_END_INT_CLR : WO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch1_rx_end_int_raw..*/ +#define RMT_CH1_TX_END_INT_CLR (BIT(3)) +#define RMT_CH1_TX_END_INT_CLR_M (BIT(3)) +#define RMT_CH1_TX_END_INT_CLR_V 0x1 +#define RMT_CH1_TX_END_INT_CLR_S 3 +/* RMT_CH0_ERR_INT_CLR : WO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch0_err_int_raw.*/ +#define RMT_CH0_ERR_INT_CLR (BIT(2)) +#define RMT_CH0_ERR_INT_CLR_M (BIT(2)) +#define RMT_CH0_ERR_INT_CLR_V 0x1 +#define RMT_CH0_ERR_INT_CLR_S 2 +/* RMT_CH0_RX_END_INT_CLR : WO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch0_tx_end_int_raw.*/ +#define RMT_CH0_RX_END_INT_CLR (BIT(1)) +#define RMT_CH0_RX_END_INT_CLR_M (BIT(1)) +#define RMT_CH0_RX_END_INT_CLR_V 0x1 +#define RMT_CH0_RX_END_INT_CLR_S 1 +/* RMT_CH0_TX_END_INT_CLR : WO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rmt_ch0_rx_end_int_raw..*/ +#define RMT_CH0_TX_END_INT_CLR (BIT(0)) +#define RMT_CH0_TX_END_INT_CLR_M (BIT(0)) +#define RMT_CH0_TX_END_INT_CLR_V 0x1 +#define RMT_CH0_TX_END_INT_CLR_S 0 + +#define RMT_CH0CARRIER_DUTY_REG (DR_REG_RMT_BASE + 0x00b0) +/* RMT_CARRIER_HIGH_CH0 : R/W ;bitpos:[31:16] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's high level value for channel0.*/ +#define RMT_CARRIER_HIGH_CH0 0x0000FFFF +#define RMT_CARRIER_HIGH_CH0_M ((RMT_CARRIER_HIGH_CH0_V)<<(RMT_CARRIER_HIGH_CH0_S)) +#define RMT_CARRIER_HIGH_CH0_V 0xFFFF +#define RMT_CARRIER_HIGH_CH0_S 16 +/* RMT_CARRIER_LOW_CH0 : R/W ;bitpos:[15:0] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's low level value for channel0.*/ +#define RMT_CARRIER_LOW_CH0 0x0000FFFF +#define RMT_CARRIER_LOW_CH0_M ((RMT_CARRIER_LOW_CH0_V)<<(RMT_CARRIER_LOW_CH0_S)) +#define RMT_CARRIER_LOW_CH0_V 0xFFFF +#define RMT_CARRIER_LOW_CH0_S 0 + +#define RMT_CH1CARRIER_DUTY_REG (DR_REG_RMT_BASE + 0x00b4) +/* RMT_CARRIER_HIGH_CH1 : R/W ;bitpos:[31:16] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's high level value for channel1.*/ +#define RMT_CARRIER_HIGH_CH1 0x0000FFFF +#define RMT_CARRIER_HIGH_CH1_M ((RMT_CARRIER_HIGH_CH1_V)<<(RMT_CARRIER_HIGH_CH1_S)) +#define RMT_CARRIER_HIGH_CH1_V 0xFFFF +#define RMT_CARRIER_HIGH_CH1_S 16 +/* RMT_CARRIER_LOW_CH1 : R/W ;bitpos:[15:0] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's low level value for channel1.*/ +#define RMT_CARRIER_LOW_CH1 0x0000FFFF +#define RMT_CARRIER_LOW_CH1_M ((RMT_CARRIER_LOW_CH1_V)<<(RMT_CARRIER_LOW_CH1_S)) +#define RMT_CARRIER_LOW_CH1_V 0xFFFF +#define RMT_CARRIER_LOW_CH1_S 0 + +#define RMT_CH2CARRIER_DUTY_REG (DR_REG_RMT_BASE + 0x00b8) +/* RMT_CARRIER_HIGH_CH2 : R/W ;bitpos:[31:16] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's high level value for channel2.*/ +#define RMT_CARRIER_HIGH_CH2 0x0000FFFF +#define RMT_CARRIER_HIGH_CH2_M ((RMT_CARRIER_HIGH_CH2_V)<<(RMT_CARRIER_HIGH_CH2_S)) +#define RMT_CARRIER_HIGH_CH2_V 0xFFFF +#define RMT_CARRIER_HIGH_CH2_S 16 +/* RMT_CARRIER_LOW_CH2 : R/W ;bitpos:[15:0] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's low level value for channel2.*/ +#define RMT_CARRIER_LOW_CH2 0x0000FFFF +#define RMT_CARRIER_LOW_CH2_M ((RMT_CARRIER_LOW_CH2_V)<<(RMT_CARRIER_LOW_CH2_S)) +#define RMT_CARRIER_LOW_CH2_V 0xFFFF +#define RMT_CARRIER_LOW_CH2_S 0 + +#define RMT_CH3CARRIER_DUTY_REG (DR_REG_RMT_BASE + 0x00bc) +/* RMT_CARRIER_HIGH_CH3 : R/W ;bitpos:[31:16] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's high level value for channel3.*/ +#define RMT_CARRIER_HIGH_CH3 0x0000FFFF +#define RMT_CARRIER_HIGH_CH3_M ((RMT_CARRIER_HIGH_CH3_V)<<(RMT_CARRIER_HIGH_CH3_S)) +#define RMT_CARRIER_HIGH_CH3_V 0xFFFF +#define RMT_CARRIER_HIGH_CH3_S 16 +/* RMT_CARRIER_LOW_CH3 : R/W ;bitpos:[15:0] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's low level value for channel3.*/ +#define RMT_CARRIER_LOW_CH3 0x0000FFFF +#define RMT_CARRIER_LOW_CH3_M ((RMT_CARRIER_LOW_CH3_V)<<(RMT_CARRIER_LOW_CH3_S)) +#define RMT_CARRIER_LOW_CH3_V 0xFFFF +#define RMT_CARRIER_LOW_CH3_S 0 + +#define RMT_CH4CARRIER_DUTY_REG (DR_REG_RMT_BASE + 0x00c0) +/* RMT_CARRIER_HIGH_CH4 : R/W ;bitpos:[31:16] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's high level value for channel4.*/ +#define RMT_CARRIER_HIGH_CH4 0x0000FFFF +#define RMT_CARRIER_HIGH_CH4_M ((RMT_CARRIER_HIGH_CH4_V)<<(RMT_CARRIER_HIGH_CH4_S)) +#define RMT_CARRIER_HIGH_CH4_V 0xFFFF +#define RMT_CARRIER_HIGH_CH4_S 16 +/* RMT_CARRIER_LOW_CH4 : R/W ;bitpos:[15:0] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's low level value for channel4.*/ +#define RMT_CARRIER_LOW_CH4 0x0000FFFF +#define RMT_CARRIER_LOW_CH4_M ((RMT_CARRIER_LOW_CH4_V)<<(RMT_CARRIER_LOW_CH4_S)) +#define RMT_CARRIER_LOW_CH4_V 0xFFFF +#define RMT_CARRIER_LOW_CH4_S 0 + +#define RMT_CH5CARRIER_DUTY_REG (DR_REG_RMT_BASE + 0x00c4) +/* RMT_CARRIER_HIGH_CH5 : R/W ;bitpos:[31:16] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's high level value for channel5.*/ +#define RMT_CARRIER_HIGH_CH5 0x0000FFFF +#define RMT_CARRIER_HIGH_CH5_M ((RMT_CARRIER_HIGH_CH5_V)<<(RMT_CARRIER_HIGH_CH5_S)) +#define RMT_CARRIER_HIGH_CH5_V 0xFFFF +#define RMT_CARRIER_HIGH_CH5_S 16 +/* RMT_CARRIER_LOW_CH5 : R/W ;bitpos:[15:0] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's low level value for channel5.*/ +#define RMT_CARRIER_LOW_CH5 0x0000FFFF +#define RMT_CARRIER_LOW_CH5_M ((RMT_CARRIER_LOW_CH5_V)<<(RMT_CARRIER_LOW_CH5_S)) +#define RMT_CARRIER_LOW_CH5_V 0xFFFF +#define RMT_CARRIER_LOW_CH5_S 0 + +#define RMT_CH6CARRIER_DUTY_REG (DR_REG_RMT_BASE + 0x00c8) +/* RMT_CARRIER_HIGH_CH6 : R/W ;bitpos:[31:16] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's high level value for channel6.*/ +#define RMT_CARRIER_HIGH_CH6 0x0000FFFF +#define RMT_CARRIER_HIGH_CH6_M ((RMT_CARRIER_HIGH_CH6_V)<<(RMT_CARRIER_HIGH_CH6_S)) +#define RMT_CARRIER_HIGH_CH6_V 0xFFFF +#define RMT_CARRIER_HIGH_CH6_S 16 +/* RMT_CARRIER_LOW_CH6 : R/W ;bitpos:[15:0] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's low level value for channel6.*/ +#define RMT_CARRIER_LOW_CH6 0x0000FFFF +#define RMT_CARRIER_LOW_CH6_M ((RMT_CARRIER_LOW_CH6_V)<<(RMT_CARRIER_LOW_CH6_S)) +#define RMT_CARRIER_LOW_CH6_V 0xFFFF +#define RMT_CARRIER_LOW_CH6_S 0 + +#define RMT_CH7CARRIER_DUTY_REG (DR_REG_RMT_BASE + 0x00cc) +/* RMT_CARRIER_HIGH_CH7 : R/W ;bitpos:[31:16] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's high level value for channel7.*/ +#define RMT_CARRIER_HIGH_CH7 0x0000FFFF +#define RMT_CARRIER_HIGH_CH7_M ((RMT_CARRIER_HIGH_CH7_V)<<(RMT_CARRIER_HIGH_CH7_S)) +#define RMT_CARRIER_HIGH_CH7_V 0xFFFF +#define RMT_CARRIER_HIGH_CH7_S 16 +/* RMT_CARRIER_LOW_CH7 : R/W ;bitpos:[15:0] ;default: 16'h40 ; */ +/*description: This register is used to configure carrier wave's low level value for channel7.*/ +#define RMT_CARRIER_LOW_CH7 0x0000FFFF +#define RMT_CARRIER_LOW_CH7_M ((RMT_CARRIER_LOW_CH7_V)<<(RMT_CARRIER_LOW_CH7_S)) +#define RMT_CARRIER_LOW_CH7_V 0xFFFF +#define RMT_CARRIER_LOW_CH7_S 0 + +#define RMT_CH0_TX_LIM_REG (DR_REG_RMT_BASE + 0x00d0) +/* RMT_TX_LIM_CH0 : R/W ;bitpos:[8:0] ;default: 9'h80 ; */ +/*description: When channel0 sends more than reg_rmt_tx_lim_ch0 datas then channel0 + produce the relative interrupt.*/ +#define RMT_TX_LIM_CH0 0x000001FF +#define RMT_TX_LIM_CH0_M ((RMT_TX_LIM_CH0_V)<<(RMT_TX_LIM_CH0_S)) +#define RMT_TX_LIM_CH0_V 0x1FF +#define RMT_TX_LIM_CH0_S 0 + +#define RMT_CH1_TX_LIM_REG (DR_REG_RMT_BASE + 0x00d4) +/* RMT_TX_LIM_CH1 : R/W ;bitpos:[8:0] ;default: 9'h80 ; */ +/*description: When channel1 sends more than reg_rmt_tx_lim_ch1 datas then channel1 + produce the relative interrupt.*/ +#define RMT_TX_LIM_CH1 0x000001FF +#define RMT_TX_LIM_CH1_M ((RMT_TX_LIM_CH1_V)<<(RMT_TX_LIM_CH1_S)) +#define RMT_TX_LIM_CH1_V 0x1FF +#define RMT_TX_LIM_CH1_S 0 + +#define RMT_CH2_TX_LIM_REG (DR_REG_RMT_BASE + 0x00d8) +/* RMT_TX_LIM_CH2 : R/W ;bitpos:[8:0] ;default: 9'h80 ; */ +/*description: When channel2 sends more than reg_rmt_tx_lim_ch2 datas then channel2 + produce the relative interrupt.*/ +#define RMT_TX_LIM_CH2 0x000001FF +#define RMT_TX_LIM_CH2_M ((RMT_TX_LIM_CH2_V)<<(RMT_TX_LIM_CH2_S)) +#define RMT_TX_LIM_CH2_V 0x1FF +#define RMT_TX_LIM_CH2_S 0 + +#define RMT_CH3_TX_LIM_REG (DR_REG_RMT_BASE + 0x00dc) +/* RMT_TX_LIM_CH3 : R/W ;bitpos:[8:0] ;default: 9'h80 ; */ +/*description: When channel3 sends more than reg_rmt_tx_lim_ch3 datas then channel3 + produce the relative interrupt.*/ +#define RMT_TX_LIM_CH3 0x000001FF +#define RMT_TX_LIM_CH3_M ((RMT_TX_LIM_CH3_V)<<(RMT_TX_LIM_CH3_S)) +#define RMT_TX_LIM_CH3_V 0x1FF +#define RMT_TX_LIM_CH3_S 0 + +#define RMT_CH4_TX_LIM_REG (DR_REG_RMT_BASE + 0x00e0) +/* RMT_TX_LIM_CH4 : R/W ;bitpos:[8:0] ;default: 9'h80 ; */ +/*description: When channel4 sends more than reg_rmt_tx_lim_ch4 datas then channel4 + produce the relative interrupt.*/ +#define RMT_TX_LIM_CH4 0x000001FF +#define RMT_TX_LIM_CH4_M ((RMT_TX_LIM_CH4_V)<<(RMT_TX_LIM_CH4_S)) +#define RMT_TX_LIM_CH4_V 0x1FF +#define RMT_TX_LIM_CH4_S 0 + +#define RMT_CH5_TX_LIM_REG (DR_REG_RMT_BASE + 0x00e4) +/* RMT_TX_LIM_CH5 : R/W ;bitpos:[8:0] ;default: 9'h80 ; */ +/*description: When channel5 sends more than reg_rmt_tx_lim_ch5 datas then channel5 + produce the relative interrupt.*/ +#define RMT_TX_LIM_CH5 0x000001FF +#define RMT_TX_LIM_CH5_M ((RMT_TX_LIM_CH5_V)<<(RMT_TX_LIM_CH5_S)) +#define RMT_TX_LIM_CH5_V 0x1FF +#define RMT_TX_LIM_CH5_S 0 + +#define RMT_CH6_TX_LIM_REG (DR_REG_RMT_BASE + 0x00e8) +/* RMT_TX_LIM_CH6 : R/W ;bitpos:[8:0] ;default: 9'h80 ; */ +/*description: When channel6 sends more than reg_rmt_tx_lim_ch6 datas then channel6 + produce the relative interrupt.*/ +#define RMT_TX_LIM_CH6 0x000001FF +#define RMT_TX_LIM_CH6_M ((RMT_TX_LIM_CH6_V)<<(RMT_TX_LIM_CH6_S)) +#define RMT_TX_LIM_CH6_V 0x1FF +#define RMT_TX_LIM_CH6_S 0 + +#define RMT_CH7_TX_LIM_REG (DR_REG_RMT_BASE + 0x00ec) +/* RMT_TX_LIM_CH7 : R/W ;bitpos:[8:0] ;default: 9'h80 ; */ +/*description: When channel7 sends more than reg_rmt_tx_lim_ch7 datas then channel7 + produce the relative interrupt.*/ +#define RMT_TX_LIM_CH7 0x000001FF +#define RMT_TX_LIM_CH7_M ((RMT_TX_LIM_CH7_V)<<(RMT_TX_LIM_CH7_S)) +#define RMT_TX_LIM_CH7_V 0x1FF +#define RMT_TX_LIM_CH7_S 0 + +#define RMT_APB_CONF_REG (DR_REG_RMT_BASE + 0x00f0) +/* RMT_MEM_TX_WRAP_EN : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: when datas need to be send is more than channel's mem can store + then set this bit to enable reusage of mem this bit is used together with reg_rmt_tx_lim_chn.*/ +#define RMT_MEM_TX_WRAP_EN (BIT(1)) +#define RMT_MEM_TX_WRAP_EN_M (BIT(1)) +#define RMT_MEM_TX_WRAP_EN_V 0x1 +#define RMT_MEM_TX_WRAP_EN_S 1 +/* RMT_APB_FIFO_MASK : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: Set this bit to disable apb fifo access*/ +#define RMT_APB_FIFO_MASK (BIT(0)) +#define RMT_APB_FIFO_MASK_M (BIT(0)) +#define RMT_APB_FIFO_MASK_V 0x1 +#define RMT_APB_FIFO_MASK_S 0 + +#define RMT_DATE_REG (DR_REG_RMT_BASE + 0x00fc) +/* RMT_DATE : R/W ;bitpos:[31:0] ;default: 32'h16022600 ; */ +/*description: This is the version register.*/ +#define RMT_DATE 0xFFFFFFFF +#define RMT_DATE_M ((RMT_DATE_V)<<(RMT_DATE_S)) +#define RMT_DATE_V 0xFFFFFFFF +#define RMT_DATE_S 0 + + + + +#endif /*_SOC_RMT_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/rmt_struct.h b/tools/sdk/include/esp32/soc/rmt_struct.h new file mode 100644 index 00000000..15beb8c6 --- /dev/null +++ b/tools/sdk/include/esp32/soc/rmt_struct.h @@ -0,0 +1,228 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_RMT_STRUCT_H_ +#define _SOC_RMT_STRUCT_H_ +typedef volatile struct { + uint32_t data_ch[8]; /*The R/W ram address for channel0-7 by apb fifo access.*/ + struct{ + union { + struct { + uint32_t div_cnt: 8; /*This register is used to configure the frequency divider's factor in channel0-7.*/ + uint32_t idle_thres: 16; /*In receive mode when no edge is detected on the input signal for longer than reg_idle_thres_ch0 then the receive process is done.*/ + uint32_t mem_size: 4; /*This register is used to configure the the amount of memory blocks allocated to channel0-7.*/ + uint32_t carrier_en: 1; /*This is the carrier modulation enable control bit for channel0-7.*/ + uint32_t carrier_out_lv: 1; /*This bit is used to configure the way carrier wave is modulated for channel0-7.1'b1:transmit on low output level 1'b0:transmit on high output level.*/ + uint32_t mem_pd: 1; /*This bit is used to reduce power consumed by memory. 1:memory is in low power state.*/ + uint32_t clk_en: 1; /*This bit is used to control clock.when software configure RMT internal registers it controls the register clock.*/ + }; + uint32_t val; + } conf0; + union { + struct { + uint32_t tx_start: 1; /*Set this bit to start sending data for channel0-7.*/ + uint32_t rx_en: 1; /*Set this bit to enable receiving data for channel0-7.*/ + uint32_t mem_wr_rst: 1; /*Set this bit to reset write ram address for channel0-7 by receiver access.*/ + uint32_t mem_rd_rst: 1; /*Set this bit to reset read ram address for channel0-7 by transmitter access.*/ + uint32_t apb_mem_rst: 1; /*Set this bit to reset W/R ram address for channel0-7 by apb fifo access*/ + uint32_t mem_owner: 1; /*This is the mark of channel0-7's ram usage right.1'b1:receiver uses the ram 0:transmitter uses the ram*/ + uint32_t tx_conti_mode: 1; /*Set this bit to continue sending from the first data to the last data in channel0-7 again and again.*/ + uint32_t rx_filter_en: 1; /*This is the receive filter enable bit for channel0-7.*/ + uint32_t rx_filter_thres: 8; /*in receive mode channel0-7 ignore input pulse when the pulse width is smaller then this value.*/ + uint32_t ref_cnt_rst: 1; /*This bit is used to reset divider in channel0-7.*/ + uint32_t ref_always_on: 1; /*This bit is used to select base clock. 1'b1:clk_apb 1'b0:clk_ref*/ + uint32_t idle_out_lv: 1; /*This bit configures the output signal's level for channel0-7 in IDLE state.*/ + uint32_t idle_out_en: 1; /*This is the output enable control bit for channel0-7 in IDLE state.*/ + uint32_t reserved20: 12; + }; + uint32_t val; + } conf1; + } conf_ch[8]; + uint32_t status_ch[8]; /*The status for channel0-7*/ + uint32_t apb_mem_addr_ch[8]; /*The ram relative address in channel0-7 by apb fifo access*/ + union { + struct { + uint32_t ch0_tx_end: 1; /*The interrupt raw bit for channel 0 turns to high level when the transmit process is done.*/ + uint32_t ch0_rx_end: 1; /*The interrupt raw bit for channel 0 turns to high level when the receive process is done.*/ + uint32_t ch0_err: 1; /*The interrupt raw bit for channel 0 turns to high level when channel 0 detects some errors.*/ + uint32_t ch1_tx_end: 1; /*The interrupt raw bit for channel 1 turns to high level when the transmit process is done.*/ + uint32_t ch1_rx_end: 1; /*The interrupt raw bit for channel 1 turns to high level when the receive process is done.*/ + uint32_t ch1_err: 1; /*The interrupt raw bit for channel 1 turns to high level when channel 1 detects some errors.*/ + uint32_t ch2_tx_end: 1; /*The interrupt raw bit for channel 2 turns to high level when the transmit process is done.*/ + uint32_t ch2_rx_end: 1; /*The interrupt raw bit for channel 2 turns to high level when the receive process is done.*/ + uint32_t ch2_err: 1; /*The interrupt raw bit for channel 2 turns to high level when channel 2 detects some errors.*/ + uint32_t ch3_tx_end: 1; /*The interrupt raw bit for channel 3 turns to high level when the transmit process is done.*/ + uint32_t ch3_rx_end: 1; /*The interrupt raw bit for channel 3 turns to high level when the receive process is done.*/ + uint32_t ch3_err: 1; /*The interrupt raw bit for channel 3 turns to high level when channel 3 detects some errors.*/ + uint32_t ch4_tx_end: 1; /*The interrupt raw bit for channel 4 turns to high level when the transmit process is done.*/ + uint32_t ch4_rx_end: 1; /*The interrupt raw bit for channel 4 turns to high level when the receive process is done.*/ + uint32_t ch4_err: 1; /*The interrupt raw bit for channel 4 turns to high level when channel 4 detects some errors.*/ + uint32_t ch5_tx_end: 1; /*The interrupt raw bit for channel 5 turns to high level when the transmit process is done.*/ + uint32_t ch5_rx_end: 1; /*The interrupt raw bit for channel 5 turns to high level when the receive process is done.*/ + uint32_t ch5_err: 1; /*The interrupt raw bit for channel 5 turns to high level when channel 5 detects some errors.*/ + uint32_t ch6_tx_end: 1; /*The interrupt raw bit for channel 6 turns to high level when the transmit process is done.*/ + uint32_t ch6_rx_end: 1; /*The interrupt raw bit for channel 6 turns to high level when the receive process is done.*/ + uint32_t ch6_err: 1; /*The interrupt raw bit for channel 6 turns to high level when channel 6 detects some errors.*/ + uint32_t ch7_tx_end: 1; /*The interrupt raw bit for channel 7 turns to high level when the transmit process is done.*/ + uint32_t ch7_rx_end: 1; /*The interrupt raw bit for channel 7 turns to high level when the receive process is done.*/ + uint32_t ch7_err: 1; /*The interrupt raw bit for channel 7 turns to high level when channel 7 detects some errors.*/ + uint32_t ch0_tx_thr_event: 1; /*The interrupt raw bit for channel 0 turns to high level when transmitter in channel0 have send data more than reg_rmt_tx_lim_ch0 after detecting this interrupt software can updata the old data with new data.*/ + uint32_t ch1_tx_thr_event: 1; /*The interrupt raw bit for channel 1 turns to high level when transmitter in channel1 have send data more than reg_rmt_tx_lim_ch1 after detecting this interrupt software can updata the old data with new data.*/ + uint32_t ch2_tx_thr_event: 1; /*The interrupt raw bit for channel 2 turns to high level when transmitter in channel2 have send data more than reg_rmt_tx_lim_ch2 after detecting this interrupt software can updata the old data with new data.*/ + uint32_t ch3_tx_thr_event: 1; /*The interrupt raw bit for channel 3 turns to high level when transmitter in channel3 have send data more than reg_rmt_tx_lim_ch3 after detecting this interrupt software can updata the old data with new data.*/ + uint32_t ch4_tx_thr_event: 1; /*The interrupt raw bit for channel 4 turns to high level when transmitter in channel4 have send data more than reg_rmt_tx_lim_ch4 after detecting this interrupt software can updata the old data with new data.*/ + uint32_t ch5_tx_thr_event: 1; /*The interrupt raw bit for channel 5 turns to high level when transmitter in channel5 have send data more than reg_rmt_tx_lim_ch5 after detecting this interrupt software can updata the old data with new data.*/ + uint32_t ch6_tx_thr_event: 1; /*The interrupt raw bit for channel 6 turns to high level when transmitter in channel6 have send data more than reg_rmt_tx_lim_ch6 after detecting this interrupt software can updata the old data with new data.*/ + uint32_t ch7_tx_thr_event: 1; /*The interrupt raw bit for channel 7 turns to high level when transmitter in channel7 have send data more than reg_rmt_tx_lim_ch7 after detecting this interrupt software can updata the old data with new data.*/ + }; + uint32_t val; + } int_raw; + union { + struct { + uint32_t ch0_tx_end: 1; /*The interrupt state bit for channel 0's mt_ch0_tx_end_int_raw when mt_ch0_tx_end_int_ena is set to 0.*/ + uint32_t ch0_rx_end: 1; /*The interrupt state bit for channel 0's rmt_ch0_rx_end_int_raw when rmt_ch0_rx_end_int_ena is set to 0.*/ + uint32_t ch0_err: 1; /*The interrupt state bit for channel 0's rmt_ch0_err_int_raw when rmt_ch0_err_int_ena is set to 0.*/ + uint32_t ch1_tx_end: 1; /*The interrupt state bit for channel 1's mt_ch1_tx_end_int_raw when mt_ch1_tx_end_int_ena is set to 1.*/ + uint32_t ch1_rx_end: 1; /*The interrupt state bit for channel 1's rmt_ch1_rx_end_int_raw when rmt_ch1_rx_end_int_ena is set to 1.*/ + uint32_t ch1_err: 1; /*The interrupt state bit for channel 1's rmt_ch1_err_int_raw when rmt_ch1_err_int_ena is set to 1.*/ + uint32_t ch2_tx_end: 1; /*The interrupt state bit for channel 2's mt_ch2_tx_end_int_raw when mt_ch2_tx_end_int_ena is set to 1.*/ + uint32_t ch2_rx_end: 1; /*The interrupt state bit for channel 2's rmt_ch2_rx_end_int_raw when rmt_ch2_rx_end_int_ena is set to 1.*/ + uint32_t ch2_err: 1; /*The interrupt state bit for channel 2's rmt_ch2_err_int_raw when rmt_ch2_err_int_ena is set to 1.*/ + uint32_t ch3_tx_end: 1; /*The interrupt state bit for channel 3's mt_ch3_tx_end_int_raw when mt_ch3_tx_end_int_ena is set to 1.*/ + uint32_t ch3_rx_end: 1; /*The interrupt state bit for channel 3's rmt_ch3_rx_end_int_raw when rmt_ch3_rx_end_int_ena is set to 1.*/ + uint32_t ch3_err: 1; /*The interrupt state bit for channel 3's rmt_ch3_err_int_raw when rmt_ch3_err_int_ena is set to 1.*/ + uint32_t ch4_tx_end: 1; /*The interrupt state bit for channel 4's mt_ch4_tx_end_int_raw when mt_ch4_tx_end_int_ena is set to 1.*/ + uint32_t ch4_rx_end: 1; /*The interrupt state bit for channel 4's rmt_ch4_rx_end_int_raw when rmt_ch4_rx_end_int_ena is set to 1.*/ + uint32_t ch4_err: 1; /*The interrupt state bit for channel 4's rmt_ch4_err_int_raw when rmt_ch4_err_int_ena is set to 1.*/ + uint32_t ch5_tx_end: 1; /*The interrupt state bit for channel 5's mt_ch5_tx_end_int_raw when mt_ch5_tx_end_int_ena is set to 1.*/ + uint32_t ch5_rx_end: 1; /*The interrupt state bit for channel 5's rmt_ch5_rx_end_int_raw when rmt_ch5_rx_end_int_ena is set to 1.*/ + uint32_t ch5_err: 1; /*The interrupt state bit for channel 5's rmt_ch5_err_int_raw when rmt_ch5_err_int_ena is set to 1.*/ + uint32_t ch6_tx_end: 1; /*The interrupt state bit for channel 6's mt_ch6_tx_end_int_raw when mt_ch6_tx_end_int_ena is set to 1.*/ + uint32_t ch6_rx_end: 1; /*The interrupt state bit for channel 6's rmt_ch6_rx_end_int_raw when rmt_ch6_rx_end_int_ena is set to 1.*/ + uint32_t ch6_err: 1; /*The interrupt state bit for channel 6's rmt_ch6_err_int_raw when rmt_ch6_err_int_ena is set to 1.*/ + uint32_t ch7_tx_end: 1; /*The interrupt state bit for channel 7's mt_ch7_tx_end_int_raw when mt_ch7_tx_end_int_ena is set to 1.*/ + uint32_t ch7_rx_end: 1; /*The interrupt state bit for channel 7's rmt_ch7_rx_end_int_raw when rmt_ch7_rx_end_int_ena is set to 1.*/ + uint32_t ch7_err: 1; /*The interrupt state bit for channel 7's rmt_ch7_err_int_raw when rmt_ch7_err_int_ena is set to 1.*/ + uint32_t ch0_tx_thr_event: 1; /*The interrupt state bit for channel 0's rmt_ch0_tx_thr_event_int_raw when mt_ch0_tx_thr_event_int_ena is set to 1.*/ + uint32_t ch1_tx_thr_event: 1; /*The interrupt state bit for channel 1's rmt_ch1_tx_thr_event_int_raw when mt_ch1_tx_thr_event_int_ena is set to 1.*/ + uint32_t ch2_tx_thr_event: 1; /*The interrupt state bit for channel 2's rmt_ch2_tx_thr_event_int_raw when mt_ch2_tx_thr_event_int_ena is set to 1.*/ + uint32_t ch3_tx_thr_event: 1; /*The interrupt state bit for channel 3's rmt_ch3_tx_thr_event_int_raw when mt_ch3_tx_thr_event_int_ena is set to 1.*/ + uint32_t ch4_tx_thr_event: 1; /*The interrupt state bit for channel 4's rmt_ch4_tx_thr_event_int_raw when mt_ch4_tx_thr_event_int_ena is set to 1.*/ + uint32_t ch5_tx_thr_event: 1; /*The interrupt state bit for channel 5's rmt_ch5_tx_thr_event_int_raw when mt_ch5_tx_thr_event_int_ena is set to 1.*/ + uint32_t ch6_tx_thr_event: 1; /*The interrupt state bit for channel 6's rmt_ch6_tx_thr_event_int_raw when mt_ch6_tx_thr_event_int_ena is set to 1.*/ + uint32_t ch7_tx_thr_event: 1; /*The interrupt state bit for channel 7's rmt_ch7_tx_thr_event_int_raw when mt_ch7_tx_thr_event_int_ena is set to 1.*/ + }; + uint32_t val; + } int_st; + union { + struct { + uint32_t ch0_tx_end: 1; /*Set this bit to enable rmt_ch0_tx_end_int_st.*/ + uint32_t ch0_rx_end: 1; /*Set this bit to enable rmt_ch0_rx_end_int_st.*/ + uint32_t ch0_err: 1; /*Set this bit to enable rmt_ch0_err_int_st.*/ + uint32_t ch1_tx_end: 1; /*Set this bit to enable rmt_ch1_tx_end_int_st.*/ + uint32_t ch1_rx_end: 1; /*Set this bit to enable rmt_ch1_rx_end_int_st.*/ + uint32_t ch1_err: 1; /*Set this bit to enable rmt_ch1_err_int_st.*/ + uint32_t ch2_tx_end: 1; /*Set this bit to enable rmt_ch2_tx_end_int_st.*/ + uint32_t ch2_rx_end: 1; /*Set this bit to enable rmt_ch2_rx_end_int_st.*/ + uint32_t ch2_err: 1; /*Set this bit to enable rmt_ch2_err_int_st.*/ + uint32_t ch3_tx_end: 1; /*Set this bit to enable rmt_ch3_tx_end_int_st.*/ + uint32_t ch3_rx_end: 1; /*Set this bit to enable rmt_ch3_rx_end_int_st.*/ + uint32_t ch3_err: 1; /*Set this bit to enable rmt_ch3_err_int_st.*/ + uint32_t ch4_tx_end: 1; /*Set this bit to enable rmt_ch4_tx_end_int_st.*/ + uint32_t ch4_rx_end: 1; /*Set this bit to enable rmt_ch4_rx_end_int_st.*/ + uint32_t ch4_err: 1; /*Set this bit to enable rmt_ch4_err_int_st.*/ + uint32_t ch5_tx_end: 1; /*Set this bit to enable rmt_ch5_tx_end_int_st.*/ + uint32_t ch5_rx_end: 1; /*Set this bit to enable rmt_ch5_rx_end_int_st.*/ + uint32_t ch5_err: 1; /*Set this bit to enable rmt_ch5_err_int_st.*/ + uint32_t ch6_tx_end: 1; /*Set this bit to enable rmt_ch6_tx_end_int_st.*/ + uint32_t ch6_rx_end: 1; /*Set this bit to enable rmt_ch6_rx_end_int_st.*/ + uint32_t ch6_err: 1; /*Set this bit to enable rmt_ch6_err_int_st.*/ + uint32_t ch7_tx_end: 1; /*Set this bit to enable rmt_ch7_tx_end_int_st.*/ + uint32_t ch7_rx_end: 1; /*Set this bit to enable rmt_ch7_rx_end_int_st.*/ + uint32_t ch7_err: 1; /*Set this bit to enable rmt_ch7_err_int_st.*/ + uint32_t ch0_tx_thr_event: 1; /*Set this bit to enable rmt_ch0_tx_thr_event_int_st.*/ + uint32_t ch1_tx_thr_event: 1; /*Set this bit to enable rmt_ch1_tx_thr_event_int_st.*/ + uint32_t ch2_tx_thr_event: 1; /*Set this bit to enable rmt_ch2_tx_thr_event_int_st.*/ + uint32_t ch3_tx_thr_event: 1; /*Set this bit to enable rmt_ch3_tx_thr_event_int_st.*/ + uint32_t ch4_tx_thr_event: 1; /*Set this bit to enable rmt_ch4_tx_thr_event_int_st.*/ + uint32_t ch5_tx_thr_event: 1; /*Set this bit to enable rmt_ch5_tx_thr_event_int_st.*/ + uint32_t ch6_tx_thr_event: 1; /*Set this bit to enable rmt_ch6_tx_thr_event_int_st.*/ + uint32_t ch7_tx_thr_event: 1; /*Set this bit to enable rmt_ch7_tx_thr_event_int_st.*/ + }; + uint32_t val; + } int_ena; + union { + struct { + uint32_t ch0_tx_end: 1; /*Set this bit to clear the rmt_ch0_rx_end_int_raw..*/ + uint32_t ch0_rx_end: 1; /*Set this bit to clear the rmt_ch0_tx_end_int_raw.*/ + uint32_t ch0_err: 1; /*Set this bit to clear the rmt_ch0_err_int_raw.*/ + uint32_t ch1_tx_end: 1; /*Set this bit to clear the rmt_ch1_rx_end_int_raw..*/ + uint32_t ch1_rx_end: 1; /*Set this bit to clear the rmt_ch1_tx_end_int_raw.*/ + uint32_t ch1_err: 1; /*Set this bit to clear the rmt_ch1_err_int_raw.*/ + uint32_t ch2_tx_end: 1; /*Set this bit to clear the rmt_ch2_rx_end_int_raw..*/ + uint32_t ch2_rx_end: 1; /*Set this bit to clear the rmt_ch2_tx_end_int_raw.*/ + uint32_t ch2_err: 1; /*Set this bit to clear the rmt_ch2_err_int_raw.*/ + uint32_t ch3_tx_end: 1; /*Set this bit to clear the rmt_ch3_rx_end_int_raw..*/ + uint32_t ch3_rx_end: 1; /*Set this bit to clear the rmt_ch3_tx_end_int_raw.*/ + uint32_t ch3_err: 1; /*Set this bit to clear the rmt_ch3_err_int_raw.*/ + uint32_t ch4_tx_end: 1; /*Set this bit to clear the rmt_ch4_rx_end_int_raw..*/ + uint32_t ch4_rx_end: 1; /*Set this bit to clear the rmt_ch4_tx_end_int_raw.*/ + uint32_t ch4_err: 1; /*Set this bit to clear the rmt_ch4_err_int_raw.*/ + uint32_t ch5_tx_end: 1; /*Set this bit to clear the rmt_ch5_rx_end_int_raw..*/ + uint32_t ch5_rx_end: 1; /*Set this bit to clear the rmt_ch5_tx_end_int_raw.*/ + uint32_t ch5_err: 1; /*Set this bit to clear the rmt_ch5_err_int_raw.*/ + uint32_t ch6_tx_end: 1; /*Set this bit to clear the rmt_ch6_rx_end_int_raw..*/ + uint32_t ch6_rx_end: 1; /*Set this bit to clear the rmt_ch6_tx_end_int_raw.*/ + uint32_t ch6_err: 1; /*Set this bit to clear the rmt_ch6_err_int_raw.*/ + uint32_t ch7_tx_end: 1; /*Set this bit to clear the rmt_ch7_rx_end_int_raw..*/ + uint32_t ch7_rx_end: 1; /*Set this bit to clear the rmt_ch7_tx_end_int_raw.*/ + uint32_t ch7_err: 1; /*Set this bit to clear the rmt_ch7_err_int_raw.*/ + uint32_t ch0_tx_thr_event: 1; /*Set this bit to clear the rmt_ch0_tx_thr_event_int_raw interrupt.*/ + uint32_t ch1_tx_thr_event: 1; /*Set this bit to clear the rmt_ch1_tx_thr_event_int_raw interrupt.*/ + uint32_t ch2_tx_thr_event: 1; /*Set this bit to clear the rmt_ch2_tx_thr_event_int_raw interrupt.*/ + uint32_t ch3_tx_thr_event: 1; /*Set this bit to clear the rmt_ch3_tx_thr_event_int_raw interrupt.*/ + uint32_t ch4_tx_thr_event: 1; /*Set this bit to clear the rmt_ch4_tx_thr_event_int_raw interrupt.*/ + uint32_t ch5_tx_thr_event: 1; /*Set this bit to clear the rmt_ch5_tx_thr_event_int_raw interrupt.*/ + uint32_t ch6_tx_thr_event: 1; /*Set this bit to clear the rmt_ch6_tx_thr_event_int_raw interrupt.*/ + uint32_t ch7_tx_thr_event: 1; /*Set this bit to clear the rmt_ch7_tx_thr_event_int_raw interrupt.*/ + }; + uint32_t val; + } int_clr; + union { + struct { + uint32_t low: 16; /*This register is used to configure carrier wave's low level value for channel0-7.*/ + uint32_t high:16; /*This register is used to configure carrier wave's high level value for channel0-7.*/ + }; + uint32_t val; + } carrier_duty_ch[8]; + union { + struct { + uint32_t limit: 9; /*When channel0-7 sends more than reg_rmt_tx_lim_ch0 data then channel0-7 produce the relative interrupt.*/ + uint32_t reserved9: 23; + }; + uint32_t val; + } tx_lim_ch[8]; + union { + struct { + uint32_t fifo_mask: 1; /*Set this bit to disable apb fifo access*/ + uint32_t mem_tx_wrap_en: 1; /*when data need to be send is more than channel's mem can store then set this bit to enable reuse of mem this bit is used together with reg_rmt_tx_lim_chn.*/ + uint32_t reserved2: 30; + }; + uint32_t val; + } apb_conf; + uint32_t reserved_f4; + uint32_t reserved_f8; + uint32_t date; /*This is the version register.*/ +} rmt_dev_t; +extern rmt_dev_t RMT; +#endif /* _SOC_RMT_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/rtc_cntl_reg.h b/tools/sdk/include/esp32/soc/rtc_cntl_reg.h new file mode 100644 index 00000000..47328611 --- /dev/null +++ b/tools/sdk/include/esp32/soc/rtc_cntl_reg.h @@ -0,0 +1,1988 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_RTC_CNTL_REG_H_ +#define _SOC_RTC_CNTL_REG_H_ + + +#include "soc.h" +#define RTC_CNTL_OPTIONS0_REG (DR_REG_RTCCNTL_BASE + 0x0) +/* RTC_CNTL_SW_SYS_RST : WO ;bitpos:[31] ;default: 1'd0 ; */ +/*description: SW system reset*/ +#define RTC_CNTL_SW_SYS_RST (BIT(31)) +#define RTC_CNTL_SW_SYS_RST_M (BIT(31)) +#define RTC_CNTL_SW_SYS_RST_V 0x1 +#define RTC_CNTL_SW_SYS_RST_S 31 +/* RTC_CNTL_DG_WRAP_FORCE_NORST : R/W ;bitpos:[30] ;default: 1'd0 ; */ +/*description: digital core force no reset in deep sleep*/ +#define RTC_CNTL_DG_WRAP_FORCE_NORST (BIT(30)) +#define RTC_CNTL_DG_WRAP_FORCE_NORST_M (BIT(30)) +#define RTC_CNTL_DG_WRAP_FORCE_NORST_V 0x1 +#define RTC_CNTL_DG_WRAP_FORCE_NORST_S 30 +/* RTC_CNTL_DG_WRAP_FORCE_RST : R/W ;bitpos:[29] ;default: 1'd0 ; */ +/*description: digital wrap force reset in deep sleep*/ +#define RTC_CNTL_DG_WRAP_FORCE_RST (BIT(29)) +#define RTC_CNTL_DG_WRAP_FORCE_RST_M (BIT(29)) +#define RTC_CNTL_DG_WRAP_FORCE_RST_V 0x1 +#define RTC_CNTL_DG_WRAP_FORCE_RST_S 29 +/* RTC_CNTL_ANALOG_FORCE_NOISO : R/W ;bitpos:[28] ;default: 1'd1 ; */ +/*description: */ +#define RTC_CNTL_ANALOG_FORCE_NOISO (BIT(28)) +#define RTC_CNTL_ANALOG_FORCE_NOISO_M (BIT(28)) +#define RTC_CNTL_ANALOG_FORCE_NOISO_V 0x1 +#define RTC_CNTL_ANALOG_FORCE_NOISO_S 28 +/* RTC_CNTL_PLL_FORCE_NOISO : R/W ;bitpos:[27] ;default: 1'd1 ; */ +/*description: */ +#define RTC_CNTL_PLL_FORCE_NOISO (BIT(27)) +#define RTC_CNTL_PLL_FORCE_NOISO_M (BIT(27)) +#define RTC_CNTL_PLL_FORCE_NOISO_V 0x1 +#define RTC_CNTL_PLL_FORCE_NOISO_S 27 +/* RTC_CNTL_XTL_FORCE_NOISO : R/W ;bitpos:[26] ;default: 1'd1 ; */ +/*description: */ +#define RTC_CNTL_XTL_FORCE_NOISO (BIT(26)) +#define RTC_CNTL_XTL_FORCE_NOISO_M (BIT(26)) +#define RTC_CNTL_XTL_FORCE_NOISO_V 0x1 +#define RTC_CNTL_XTL_FORCE_NOISO_S 26 +/* RTC_CNTL_ANALOG_FORCE_ISO : R/W ;bitpos:[25] ;default: 1'd0 ; */ +/*description: */ +#define RTC_CNTL_ANALOG_FORCE_ISO (BIT(25)) +#define RTC_CNTL_ANALOG_FORCE_ISO_M (BIT(25)) +#define RTC_CNTL_ANALOG_FORCE_ISO_V 0x1 +#define RTC_CNTL_ANALOG_FORCE_ISO_S 25 +/* RTC_CNTL_PLL_FORCE_ISO : R/W ;bitpos:[24] ;default: 1'd0 ; */ +/*description: */ +#define RTC_CNTL_PLL_FORCE_ISO (BIT(24)) +#define RTC_CNTL_PLL_FORCE_ISO_M (BIT(24)) +#define RTC_CNTL_PLL_FORCE_ISO_V 0x1 +#define RTC_CNTL_PLL_FORCE_ISO_S 24 +/* RTC_CNTL_XTL_FORCE_ISO : R/W ;bitpos:[23] ;default: 1'd0 ; */ +/*description: */ +#define RTC_CNTL_XTL_FORCE_ISO (BIT(23)) +#define RTC_CNTL_XTL_FORCE_ISO_M (BIT(23)) +#define RTC_CNTL_XTL_FORCE_ISO_V 0x1 +#define RTC_CNTL_XTL_FORCE_ISO_S 23 +/* RTC_CNTL_BIAS_CORE_FORCE_PU : R/W ;bitpos:[22] ;default: 1'd1 ; */ +/*description: BIAS_CORE force power up*/ +#define RTC_CNTL_BIAS_CORE_FORCE_PU (BIT(22)) +#define RTC_CNTL_BIAS_CORE_FORCE_PU_M (BIT(22)) +#define RTC_CNTL_BIAS_CORE_FORCE_PU_V 0x1 +#define RTC_CNTL_BIAS_CORE_FORCE_PU_S 22 +/* RTC_CNTL_BIAS_CORE_FORCE_PD : R/W ;bitpos:[21] ;default: 1'b0 ; */ +/*description: BIAS_CORE force power down*/ +#define RTC_CNTL_BIAS_CORE_FORCE_PD (BIT(21)) +#define RTC_CNTL_BIAS_CORE_FORCE_PD_M (BIT(21)) +#define RTC_CNTL_BIAS_CORE_FORCE_PD_V 0x1 +#define RTC_CNTL_BIAS_CORE_FORCE_PD_S 21 +/* RTC_CNTL_BIAS_CORE_FOLW_8M : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: BIAS_CORE follow CK8M*/ +#define RTC_CNTL_BIAS_CORE_FOLW_8M (BIT(20)) +#define RTC_CNTL_BIAS_CORE_FOLW_8M_M (BIT(20)) +#define RTC_CNTL_BIAS_CORE_FOLW_8M_V 0x1 +#define RTC_CNTL_BIAS_CORE_FOLW_8M_S 20 +/* RTC_CNTL_BIAS_I2C_FORCE_PU : R/W ;bitpos:[19] ;default: 1'd1 ; */ +/*description: BIAS_I2C force power up*/ +#define RTC_CNTL_BIAS_I2C_FORCE_PU (BIT(19)) +#define RTC_CNTL_BIAS_I2C_FORCE_PU_M (BIT(19)) +#define RTC_CNTL_BIAS_I2C_FORCE_PU_V 0x1 +#define RTC_CNTL_BIAS_I2C_FORCE_PU_S 19 +/* RTC_CNTL_BIAS_I2C_FORCE_PD : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: BIAS_I2C force power down*/ +#define RTC_CNTL_BIAS_I2C_FORCE_PD (BIT(18)) +#define RTC_CNTL_BIAS_I2C_FORCE_PD_M (BIT(18)) +#define RTC_CNTL_BIAS_I2C_FORCE_PD_V 0x1 +#define RTC_CNTL_BIAS_I2C_FORCE_PD_S 18 +/* RTC_CNTL_BIAS_I2C_FOLW_8M : R/W ;bitpos:[17] ;default: 1'd0 ; */ +/*description: BIAS_I2C follow CK8M*/ +#define RTC_CNTL_BIAS_I2C_FOLW_8M (BIT(17)) +#define RTC_CNTL_BIAS_I2C_FOLW_8M_M (BIT(17)) +#define RTC_CNTL_BIAS_I2C_FOLW_8M_V 0x1 +#define RTC_CNTL_BIAS_I2C_FOLW_8M_S 17 +/* RTC_CNTL_BIAS_FORCE_NOSLEEP : R/W ;bitpos:[16] ;default: 1'd1 ; */ +/*description: BIAS_SLEEP force no sleep*/ +#define RTC_CNTL_BIAS_FORCE_NOSLEEP (BIT(16)) +#define RTC_CNTL_BIAS_FORCE_NOSLEEP_M (BIT(16)) +#define RTC_CNTL_BIAS_FORCE_NOSLEEP_V 0x1 +#define RTC_CNTL_BIAS_FORCE_NOSLEEP_S 16 +/* RTC_CNTL_BIAS_FORCE_SLEEP : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: BIAS_SLEEP force sleep*/ +#define RTC_CNTL_BIAS_FORCE_SLEEP (BIT(15)) +#define RTC_CNTL_BIAS_FORCE_SLEEP_M (BIT(15)) +#define RTC_CNTL_BIAS_FORCE_SLEEP_V 0x1 +#define RTC_CNTL_BIAS_FORCE_SLEEP_S 15 +/* RTC_CNTL_BIAS_SLEEP_FOLW_8M : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: BIAS_SLEEP follow CK8M*/ +#define RTC_CNTL_BIAS_SLEEP_FOLW_8M (BIT(14)) +#define RTC_CNTL_BIAS_SLEEP_FOLW_8M_M (BIT(14)) +#define RTC_CNTL_BIAS_SLEEP_FOLW_8M_V 0x1 +#define RTC_CNTL_BIAS_SLEEP_FOLW_8M_S 14 +/* RTC_CNTL_XTL_FORCE_PU : R/W ;bitpos:[13] ;default: 1'd1 ; */ +/*description: crystall force power up*/ +#define RTC_CNTL_XTL_FORCE_PU (BIT(13)) +#define RTC_CNTL_XTL_FORCE_PU_M (BIT(13)) +#define RTC_CNTL_XTL_FORCE_PU_V 0x1 +#define RTC_CNTL_XTL_FORCE_PU_S 13 +/* RTC_CNTL_XTL_FORCE_PD : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: crystall force power down*/ +#define RTC_CNTL_XTL_FORCE_PD (BIT(12)) +#define RTC_CNTL_XTL_FORCE_PD_M (BIT(12)) +#define RTC_CNTL_XTL_FORCE_PD_V 0x1 +#define RTC_CNTL_XTL_FORCE_PD_S 12 +/* RTC_CNTL_BBPLL_FORCE_PU : R/W ;bitpos:[11] ;default: 1'd0 ; */ +/*description: BB_PLL force power up*/ +#define RTC_CNTL_BBPLL_FORCE_PU (BIT(11)) +#define RTC_CNTL_BBPLL_FORCE_PU_M (BIT(11)) +#define RTC_CNTL_BBPLL_FORCE_PU_V 0x1 +#define RTC_CNTL_BBPLL_FORCE_PU_S 11 +/* RTC_CNTL_BBPLL_FORCE_PD : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: BB_PLL force power down*/ +#define RTC_CNTL_BBPLL_FORCE_PD (BIT(10)) +#define RTC_CNTL_BBPLL_FORCE_PD_M (BIT(10)) +#define RTC_CNTL_BBPLL_FORCE_PD_V 0x1 +#define RTC_CNTL_BBPLL_FORCE_PD_S 10 +/* RTC_CNTL_BBPLL_I2C_FORCE_PU : R/W ;bitpos:[9] ;default: 1'd0 ; */ +/*description: BB_PLL_I2C force power up*/ +#define RTC_CNTL_BBPLL_I2C_FORCE_PU (BIT(9)) +#define RTC_CNTL_BBPLL_I2C_FORCE_PU_M (BIT(9)) +#define RTC_CNTL_BBPLL_I2C_FORCE_PU_V 0x1 +#define RTC_CNTL_BBPLL_I2C_FORCE_PU_S 9 +/* RTC_CNTL_BBPLL_I2C_FORCE_PD : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: BB_PLL _I2C force power down*/ +#define RTC_CNTL_BBPLL_I2C_FORCE_PD (BIT(8)) +#define RTC_CNTL_BBPLL_I2C_FORCE_PD_M (BIT(8)) +#define RTC_CNTL_BBPLL_I2C_FORCE_PD_V 0x1 +#define RTC_CNTL_BBPLL_I2C_FORCE_PD_S 8 +/* RTC_CNTL_BB_I2C_FORCE_PU : R/W ;bitpos:[7] ;default: 1'd0 ; */ +/*description: BB_I2C force power up*/ +#define RTC_CNTL_BB_I2C_FORCE_PU (BIT(7)) +#define RTC_CNTL_BB_I2C_FORCE_PU_M (BIT(7)) +#define RTC_CNTL_BB_I2C_FORCE_PU_V 0x1 +#define RTC_CNTL_BB_I2C_FORCE_PU_S 7 +/* RTC_CNTL_BB_I2C_FORCE_PD : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: BB_I2C force power down*/ +#define RTC_CNTL_BB_I2C_FORCE_PD (BIT(6)) +#define RTC_CNTL_BB_I2C_FORCE_PD_M (BIT(6)) +#define RTC_CNTL_BB_I2C_FORCE_PD_V 0x1 +#define RTC_CNTL_BB_I2C_FORCE_PD_S 6 +/* RTC_CNTL_SW_PROCPU_RST : WO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: PRO CPU SW reset*/ +#define RTC_CNTL_SW_PROCPU_RST (BIT(5)) +#define RTC_CNTL_SW_PROCPU_RST_M (BIT(5)) +#define RTC_CNTL_SW_PROCPU_RST_V 0x1 +#define RTC_CNTL_SW_PROCPU_RST_S 5 +/* RTC_CNTL_SW_APPCPU_RST : WO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: APP CPU SW reset*/ +#define RTC_CNTL_SW_APPCPU_RST (BIT(4)) +#define RTC_CNTL_SW_APPCPU_RST_M (BIT(4)) +#define RTC_CNTL_SW_APPCPU_RST_V 0x1 +#define RTC_CNTL_SW_APPCPU_RST_S 4 +/* RTC_CNTL_SW_STALL_PROCPU_C0 : R/W ;bitpos:[3:2] ;default: 2'b0 ; */ +/*description: {reg_sw_stall_procpu_c1[5:0] reg_sw_stall_procpu_c0[1:0]} == + 0x86 will stall PRO CPU*/ +#define RTC_CNTL_SW_STALL_PROCPU_C0 0x00000003 +#define RTC_CNTL_SW_STALL_PROCPU_C0_M ((RTC_CNTL_SW_STALL_PROCPU_C0_V)<<(RTC_CNTL_SW_STALL_PROCPU_C0_S)) +#define RTC_CNTL_SW_STALL_PROCPU_C0_V 0x3 +#define RTC_CNTL_SW_STALL_PROCPU_C0_S 2 +/* RTC_CNTL_SW_STALL_APPCPU_C0 : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ +/*description: {reg_sw_stall_appcpu_c1[5:0] reg_sw_stall_appcpu_c0[1:0]} == + 0x86 will stall APP CPU*/ +#define RTC_CNTL_SW_STALL_APPCPU_C0 0x00000003 +#define RTC_CNTL_SW_STALL_APPCPU_C0_M ((RTC_CNTL_SW_STALL_APPCPU_C0_V)<<(RTC_CNTL_SW_STALL_APPCPU_C0_S)) +#define RTC_CNTL_SW_STALL_APPCPU_C0_V 0x3 +#define RTC_CNTL_SW_STALL_APPCPU_C0_S 0 + +#define RTC_CNTL_SLP_TIMER0_REG (DR_REG_RTCCNTL_BASE + 0x4) +/* RTC_CNTL_SLP_VAL_LO : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: RTC sleep timer low 32 bits*/ +#define RTC_CNTL_SLP_VAL_LO 0xFFFFFFFF +#define RTC_CNTL_SLP_VAL_LO_M ((RTC_CNTL_SLP_VAL_LO_V)<<(RTC_CNTL_SLP_VAL_LO_S)) +#define RTC_CNTL_SLP_VAL_LO_V 0xFFFFFFFF +#define RTC_CNTL_SLP_VAL_LO_S 0 + +#define RTC_CNTL_SLP_TIMER1_REG (DR_REG_RTCCNTL_BASE + 0x8) +/* RTC_CNTL_MAIN_TIMER_ALARM_EN : R/W ;bitpos:[16] ;default: 1'h0 ; */ +/*description: timer alarm enable bit*/ +#define RTC_CNTL_MAIN_TIMER_ALARM_EN (BIT(16)) +#define RTC_CNTL_MAIN_TIMER_ALARM_EN_M (BIT(16)) +#define RTC_CNTL_MAIN_TIMER_ALARM_EN_V 0x1 +#define RTC_CNTL_MAIN_TIMER_ALARM_EN_S 16 +/* RTC_CNTL_SLP_VAL_HI : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: RTC sleep timer high 16 bits*/ +#define RTC_CNTL_SLP_VAL_HI 0x0000FFFF +#define RTC_CNTL_SLP_VAL_HI_M ((RTC_CNTL_SLP_VAL_HI_V)<<(RTC_CNTL_SLP_VAL_HI_S)) +#define RTC_CNTL_SLP_VAL_HI_V 0xFFFF +#define RTC_CNTL_SLP_VAL_HI_S 0 + +#define RTC_CNTL_TIME_UPDATE_REG (DR_REG_RTCCNTL_BASE + 0xc) +/* RTC_CNTL_TIME_UPDATE : WO ;bitpos:[31] ;default: 1'h0 ; */ +/*description: Set 1: to update register with RTC timer*/ +#define RTC_CNTL_TIME_UPDATE (BIT(31)) +#define RTC_CNTL_TIME_UPDATE_M (BIT(31)) +#define RTC_CNTL_TIME_UPDATE_V 0x1 +#define RTC_CNTL_TIME_UPDATE_S 31 +/* RTC_CNTL_TIME_VALID : RO ;bitpos:[30] ;default: 1'b0 ; */ +/*description: To indicate the register is updated*/ +#define RTC_CNTL_TIME_VALID (BIT(30)) +#define RTC_CNTL_TIME_VALID_M (BIT(30)) +#define RTC_CNTL_TIME_VALID_V 0x1 +#define RTC_CNTL_TIME_VALID_S 30 + +#define RTC_CNTL_TIME0_REG (DR_REG_RTCCNTL_BASE + 0x10) +/* RTC_CNTL_TIME_LO : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: RTC timer low 32 bits*/ +#define RTC_CNTL_TIME_LO 0xFFFFFFFF +#define RTC_CNTL_TIME_LO_M ((RTC_CNTL_TIME_LO_V)<<(RTC_CNTL_TIME_LO_S)) +#define RTC_CNTL_TIME_LO_V 0xFFFFFFFF +#define RTC_CNTL_TIME_LO_S 0 + +#define RTC_CNTL_TIME1_REG (DR_REG_RTCCNTL_BASE + 0x14) +/* RTC_CNTL_TIME_HI : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: RTC timer high 16 bits*/ +#define RTC_CNTL_TIME_HI 0x0000FFFF +#define RTC_CNTL_TIME_HI_M ((RTC_CNTL_TIME_HI_V)<<(RTC_CNTL_TIME_HI_S)) +#define RTC_CNTL_TIME_HI_V 0xFFFF +#define RTC_CNTL_TIME_HI_S 0 + +#define RTC_CNTL_STATE0_REG (DR_REG_RTCCNTL_BASE + 0x18) +/* RTC_CNTL_SLEEP_EN : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: sleep enable bit*/ +#define RTC_CNTL_SLEEP_EN (BIT(31)) +#define RTC_CNTL_SLEEP_EN_M (BIT(31)) +#define RTC_CNTL_SLEEP_EN_V 0x1 +#define RTC_CNTL_SLEEP_EN_S 31 +/* RTC_CNTL_SLP_REJECT : R/W ;bitpos:[30] ;default: 1'd0 ; */ +/*description: sleep reject bit*/ +#define RTC_CNTL_SLP_REJECT (BIT(30)) +#define RTC_CNTL_SLP_REJECT_M (BIT(30)) +#define RTC_CNTL_SLP_REJECT_V 0x1 +#define RTC_CNTL_SLP_REJECT_S 30 +/* RTC_CNTL_SLP_WAKEUP : R/W ;bitpos:[29] ;default: 1'd0 ; */ +/*description: sleep wakeup bit*/ +#define RTC_CNTL_SLP_WAKEUP (BIT(29)) +#define RTC_CNTL_SLP_WAKEUP_M (BIT(29)) +#define RTC_CNTL_SLP_WAKEUP_V 0x1 +#define RTC_CNTL_SLP_WAKEUP_S 29 +/* RTC_CNTL_SDIO_ACTIVE_IND : RO ;bitpos:[28] ;default: 1'd0 ; */ +/*description: SDIO active indication*/ +#define RTC_CNTL_SDIO_ACTIVE_IND (BIT(28)) +#define RTC_CNTL_SDIO_ACTIVE_IND_M (BIT(28)) +#define RTC_CNTL_SDIO_ACTIVE_IND_V 0x1 +#define RTC_CNTL_SDIO_ACTIVE_IND_S 28 +/* RTC_CNTL_ULP_CP_SLP_TIMER_EN : R/W ;bitpos:[24] ;default: 1'd0 ; */ +/*description: ULP-coprocessor timer enable bit*/ +#define RTC_CNTL_ULP_CP_SLP_TIMER_EN (BIT(24)) +#define RTC_CNTL_ULP_CP_SLP_TIMER_EN_M (BIT(24)) +#define RTC_CNTL_ULP_CP_SLP_TIMER_EN_V 0x1 +#define RTC_CNTL_ULP_CP_SLP_TIMER_EN_S 24 +/* RTC_CNTL_TOUCH_SLP_TIMER_EN : R/W ;bitpos:[23] ;default: 1'd0 ; */ +/*description: touch timer enable bit*/ +#define RTC_CNTL_TOUCH_SLP_TIMER_EN (BIT(23)) +#define RTC_CNTL_TOUCH_SLP_TIMER_EN_M (BIT(23)) +#define RTC_CNTL_TOUCH_SLP_TIMER_EN_V 0x1 +#define RTC_CNTL_TOUCH_SLP_TIMER_EN_S 23 +/* RTC_CNTL_APB2RTC_BRIDGE_SEL : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: 1: APB to RTC using bridge 0: APB to RTC using sync*/ +#define RTC_CNTL_APB2RTC_BRIDGE_SEL (BIT(22)) +#define RTC_CNTL_APB2RTC_BRIDGE_SEL_M (BIT(22)) +#define RTC_CNTL_APB2RTC_BRIDGE_SEL_V 0x1 +#define RTC_CNTL_APB2RTC_BRIDGE_SEL_S 22 +/* RTC_CNTL_ULP_CP_WAKEUP_FORCE_EN : R/W ;bitpos:[21] ;default: 1'd1 ; */ +/*description: ULP-coprocessor force wake up*/ +#define RTC_CNTL_ULP_CP_WAKEUP_FORCE_EN (BIT(21)) +#define RTC_CNTL_ULP_CP_WAKEUP_FORCE_EN_M (BIT(21)) +#define RTC_CNTL_ULP_CP_WAKEUP_FORCE_EN_V 0x1 +#define RTC_CNTL_ULP_CP_WAKEUP_FORCE_EN_S 21 +/* RTC_CNTL_TOUCH_WAKEUP_FORCE_EN : R/W ;bitpos:[20] ;default: 1'd1 ; */ +/*description: touch controller force wake up*/ +#define RTC_CNTL_TOUCH_WAKEUP_FORCE_EN (BIT(20)) +#define RTC_CNTL_TOUCH_WAKEUP_FORCE_EN_M (BIT(20)) +#define RTC_CNTL_TOUCH_WAKEUP_FORCE_EN_V 0x1 +#define RTC_CNTL_TOUCH_WAKEUP_FORCE_EN_S 20 + +#define RTC_CNTL_TIMER1_REG (DR_REG_RTCCNTL_BASE + 0x1c) +/* RTC_CNTL_PLL_BUF_WAIT : R/W ;bitpos:[31:24] ;default: 8'd40 ; */ +/*description: PLL wait cycles in slow_clk_rtc*/ +#define RTC_CNTL_PLL_BUF_WAIT 0x000000FF +#define RTC_CNTL_PLL_BUF_WAIT_M ((RTC_CNTL_PLL_BUF_WAIT_V)<<(RTC_CNTL_PLL_BUF_WAIT_S)) +#define RTC_CNTL_PLL_BUF_WAIT_V 0xFF +#define RTC_CNTL_PLL_BUF_WAIT_S 24 +/* RTC_CNTL_XTL_BUF_WAIT : R/W ;bitpos:[23:14] ;default: 10'd80 ; */ +/*description: XTAL wait cycles in slow_clk_rtc*/ +#define RTC_CNTL_XTL_BUF_WAIT 0x000003FF +#define RTC_CNTL_XTL_BUF_WAIT_M ((RTC_CNTL_XTL_BUF_WAIT_V)<<(RTC_CNTL_XTL_BUF_WAIT_S)) +#define RTC_CNTL_XTL_BUF_WAIT_V 0x3FF +#define RTC_CNTL_XTL_BUF_WAIT_S 14 +/* RTC_CNTL_CK8M_WAIT : R/W ;bitpos:[13:6] ;default: 8'h10 ; */ +/*description: CK8M wait cycles in slow_clk_rtc*/ +#define RTC_CNTL_CK8M_WAIT 0x000000FF +#define RTC_CNTL_CK8M_WAIT_M ((RTC_CNTL_CK8M_WAIT_V)<<(RTC_CNTL_CK8M_WAIT_S)) +#define RTC_CNTL_CK8M_WAIT_V 0xFF +#define RTC_CNTL_CK8M_WAIT_S 6 +/* RTC_CNTL_CPU_STALL_WAIT : R/W ;bitpos:[5:1] ;default: 5'd1 ; */ +/*description: CPU stall wait cycles in fast_clk_rtc*/ +#define RTC_CNTL_CPU_STALL_WAIT 0x0000001F +#define RTC_CNTL_CPU_STALL_WAIT_M ((RTC_CNTL_CPU_STALL_WAIT_V)<<(RTC_CNTL_CPU_STALL_WAIT_S)) +#define RTC_CNTL_CPU_STALL_WAIT_V 0x1F +#define RTC_CNTL_CPU_STALL_WAIT_S 1 +/* RTC_CNTL_CPU_STALL_EN : R/W ;bitpos:[0] ;default: 1'd1 ; */ +/*description: CPU stall enable bit*/ +#define RTC_CNTL_CPU_STALL_EN (BIT(0)) +#define RTC_CNTL_CPU_STALL_EN_M (BIT(0)) +#define RTC_CNTL_CPU_STALL_EN_V 0x1 +#define RTC_CNTL_CPU_STALL_EN_S 0 + +#define RTC_CNTL_TIMER2_REG (DR_REG_RTCCNTL_BASE + 0x20) +/* RTC_CNTL_MIN_TIME_CK8M_OFF : R/W ;bitpos:[31:24] ;default: 8'h1 ; */ +/*description: minimal cycles in slow_clk_rtc for CK8M in power down state*/ +#define RTC_CNTL_MIN_TIME_CK8M_OFF 0x000000FF +#define RTC_CNTL_MIN_TIME_CK8M_OFF_M ((RTC_CNTL_MIN_TIME_CK8M_OFF_V)<<(RTC_CNTL_MIN_TIME_CK8M_OFF_S)) +#define RTC_CNTL_MIN_TIME_CK8M_OFF_V 0xFF +#define RTC_CNTL_MIN_TIME_CK8M_OFF_S 24 +/* RTC_CNTL_ULPCP_TOUCH_START_WAIT : R/W ;bitpos:[23:15] ;default: 9'h10 ; */ +/*description: wait cycles in slow_clk_rtc before ULP-coprocessor / touch controller + start to work*/ +#define RTC_CNTL_ULPCP_TOUCH_START_WAIT 0x000001FF +#define RTC_CNTL_ULPCP_TOUCH_START_WAIT_M ((RTC_CNTL_ULPCP_TOUCH_START_WAIT_V)<<(RTC_CNTL_ULPCP_TOUCH_START_WAIT_S)) +#define RTC_CNTL_ULPCP_TOUCH_START_WAIT_V 0x1FF +#define RTC_CNTL_ULPCP_TOUCH_START_WAIT_S 15 + +#define RTC_CNTL_TIMER3_REG (DR_REG_RTCCNTL_BASE + 0x24) +/* RTC_CNTL_ROM_RAM_POWERUP_TIMER : R/W ;bitpos:[31:25] ;default: 7'd10 ; */ +/*description: */ +#define RTC_CNTL_ROM_RAM_POWERUP_TIMER 0x0000007F +#define RTC_CNTL_ROM_RAM_POWERUP_TIMER_M ((RTC_CNTL_ROM_RAM_POWERUP_TIMER_V)<<(RTC_CNTL_ROM_RAM_POWERUP_TIMER_S)) +#define RTC_CNTL_ROM_RAM_POWERUP_TIMER_V 0x7F +#define RTC_CNTL_ROM_RAM_POWERUP_TIMER_S 25 +/* RTC_CNTL_ROM_RAM_WAIT_TIMER : R/W ;bitpos:[24:16] ;default: 9'h16 ; */ +/*description: */ +#define RTC_CNTL_ROM_RAM_WAIT_TIMER 0x000001FF +#define RTC_CNTL_ROM_RAM_WAIT_TIMER_M ((RTC_CNTL_ROM_RAM_WAIT_TIMER_V)<<(RTC_CNTL_ROM_RAM_WAIT_TIMER_S)) +#define RTC_CNTL_ROM_RAM_WAIT_TIMER_V 0x1FF +#define RTC_CNTL_ROM_RAM_WAIT_TIMER_S 16 +/* RTC_CNTL_WIFI_POWERUP_TIMER : R/W ;bitpos:[15:9] ;default: 7'h5 ; */ +/*description: */ +#define RTC_CNTL_WIFI_POWERUP_TIMER 0x0000007F +#define RTC_CNTL_WIFI_POWERUP_TIMER_M ((RTC_CNTL_WIFI_POWERUP_TIMER_V)<<(RTC_CNTL_WIFI_POWERUP_TIMER_S)) +#define RTC_CNTL_WIFI_POWERUP_TIMER_V 0x7F +#define RTC_CNTL_WIFI_POWERUP_TIMER_S 9 +/* RTC_CNTL_WIFI_WAIT_TIMER : R/W ;bitpos:[8:0] ;default: 9'h8 ; */ +/*description: */ +#define RTC_CNTL_WIFI_WAIT_TIMER 0x000001FF +#define RTC_CNTL_WIFI_WAIT_TIMER_M ((RTC_CNTL_WIFI_WAIT_TIMER_V)<<(RTC_CNTL_WIFI_WAIT_TIMER_S)) +#define RTC_CNTL_WIFI_WAIT_TIMER_V 0x1FF +#define RTC_CNTL_WIFI_WAIT_TIMER_S 0 + +#define RTC_CNTL_TIMER4_REG (DR_REG_RTCCNTL_BASE + 0x28) +/* RTC_CNTL_DG_WRAP_POWERUP_TIMER : R/W ;bitpos:[31:25] ;default: 7'h8 ; */ +/*description: */ +#define RTC_CNTL_DG_WRAP_POWERUP_TIMER 0x0000007F +#define RTC_CNTL_DG_WRAP_POWERUP_TIMER_M ((RTC_CNTL_DG_WRAP_POWERUP_TIMER_V)<<(RTC_CNTL_DG_WRAP_POWERUP_TIMER_S)) +#define RTC_CNTL_DG_WRAP_POWERUP_TIMER_V 0x7F +#define RTC_CNTL_DG_WRAP_POWERUP_TIMER_S 25 +/* RTC_CNTL_DG_WRAP_WAIT_TIMER : R/W ;bitpos:[24:16] ;default: 9'h20 ; */ +/*description: */ +#define RTC_CNTL_DG_WRAP_WAIT_TIMER 0x000001FF +#define RTC_CNTL_DG_WRAP_WAIT_TIMER_M ((RTC_CNTL_DG_WRAP_WAIT_TIMER_V)<<(RTC_CNTL_DG_WRAP_WAIT_TIMER_S)) +#define RTC_CNTL_DG_WRAP_WAIT_TIMER_V 0x1FF +#define RTC_CNTL_DG_WRAP_WAIT_TIMER_S 16 +/* RTC_CNTL_POWERUP_TIMER : R/W ;bitpos:[15:9] ;default: 7'h5 ; */ +/*description: */ +#define RTC_CNTL_POWERUP_TIMER 0x0000007F +#define RTC_CNTL_POWERUP_TIMER_M ((RTC_CNTL_POWERUP_TIMER_V)<<(RTC_CNTL_POWERUP_TIMER_S)) +#define RTC_CNTL_POWERUP_TIMER_V 0x7F +#define RTC_CNTL_POWERUP_TIMER_S 9 +/* RTC_CNTL_WAIT_TIMER : R/W ;bitpos:[8:0] ;default: 9'h8 ; */ +/*description: */ +#define RTC_CNTL_WAIT_TIMER 0x000001FF +#define RTC_CNTL_WAIT_TIMER_M ((RTC_CNTL_WAIT_TIMER_V)<<(RTC_CNTL_WAIT_TIMER_S)) +#define RTC_CNTL_WAIT_TIMER_V 0x1FF +#define RTC_CNTL_WAIT_TIMER_S 0 + +#define RTC_CNTL_TIMER5_REG (DR_REG_RTCCNTL_BASE + 0x2c) +/* RTC_CNTL_RTCMEM_POWERUP_TIMER : R/W ;bitpos:[31:25] ;default: 7'h9 ; */ +/*description: */ +#define RTC_CNTL_RTCMEM_POWERUP_TIMER 0x0000007F +#define RTC_CNTL_RTCMEM_POWERUP_TIMER_M ((RTC_CNTL_RTCMEM_POWERUP_TIMER_V)<<(RTC_CNTL_RTCMEM_POWERUP_TIMER_S)) +#define RTC_CNTL_RTCMEM_POWERUP_TIMER_V 0x7F +#define RTC_CNTL_RTCMEM_POWERUP_TIMER_S 25 +/* RTC_CNTL_RTCMEM_WAIT_TIMER : R/W ;bitpos:[24:16] ;default: 9'h14 ; */ +/*description: */ +#define RTC_CNTL_RTCMEM_WAIT_TIMER 0x000001FF +#define RTC_CNTL_RTCMEM_WAIT_TIMER_M ((RTC_CNTL_RTCMEM_WAIT_TIMER_V)<<(RTC_CNTL_RTCMEM_WAIT_TIMER_S)) +#define RTC_CNTL_RTCMEM_WAIT_TIMER_V 0x1FF +#define RTC_CNTL_RTCMEM_WAIT_TIMER_S 16 +/* RTC_CNTL_MIN_SLP_VAL : R/W ;bitpos:[15:8] ;default: 8'h80 ; */ +/*description: minimal sleep cycles in slow_clk_rtc*/ +#define RTC_CNTL_MIN_SLP_VAL 0x000000FF +#define RTC_CNTL_MIN_SLP_VAL_M ((RTC_CNTL_MIN_SLP_VAL_V)<<(RTC_CNTL_MIN_SLP_VAL_S)) +#define RTC_CNTL_MIN_SLP_VAL_V 0xFF +#define RTC_CNTL_MIN_SLP_VAL_S 8 +/* RTC_CNTL_ULP_CP_SUBTIMER_PREDIV : R/W ;bitpos:[7:0] ;default: 8'd1 ; */ +/*description: */ +#define RTC_CNTL_ULP_CP_SUBTIMER_PREDIV 0x000000FF +#define RTC_CNTL_ULP_CP_SUBTIMER_PREDIV_M ((RTC_CNTL_ULP_CP_SUBTIMER_PREDIV_V)<<(RTC_CNTL_ULP_CP_SUBTIMER_PREDIV_S)) +#define RTC_CNTL_ULP_CP_SUBTIMER_PREDIV_V 0xFF +#define RTC_CNTL_ULP_CP_SUBTIMER_PREDIV_S 0 + +#define RTC_CNTL_ANA_CONF_REG (DR_REG_RTCCNTL_BASE + 0x30) +/* RTC_CNTL_PLL_I2C_PU : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: 1: PLL_I2C power up otherwise power down*/ +#define RTC_CNTL_PLL_I2C_PU (BIT(31)) +#define RTC_CNTL_PLL_I2C_PU_M (BIT(31)) +#define RTC_CNTL_PLL_I2C_PU_V 0x1 +#define RTC_CNTL_PLL_I2C_PU_S 31 +/* RTC_CNTL_CKGEN_I2C_PU : R/W ;bitpos:[30] ;default: 1'd0 ; */ +/*description: 1: CKGEN_I2C power up otherwise power down*/ +#define RTC_CNTL_CKGEN_I2C_PU (BIT(30)) +#define RTC_CNTL_CKGEN_I2C_PU_M (BIT(30)) +#define RTC_CNTL_CKGEN_I2C_PU_V 0x1 +#define RTC_CNTL_CKGEN_I2C_PU_S 30 +/* RTC_CNTL_RFRX_PBUS_PU : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: 1: RFRX_PBUS power up otherwise power down*/ +#define RTC_CNTL_RFRX_PBUS_PU (BIT(28)) +#define RTC_CNTL_RFRX_PBUS_PU_M (BIT(28)) +#define RTC_CNTL_RFRX_PBUS_PU_V 0x1 +#define RTC_CNTL_RFRX_PBUS_PU_S 28 +/* RTC_CNTL_TXRF_I2C_PU : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: 1: TXRF_I2C power up otherwise power down*/ +#define RTC_CNTL_TXRF_I2C_PU (BIT(27)) +#define RTC_CNTL_TXRF_I2C_PU_M (BIT(27)) +#define RTC_CNTL_TXRF_I2C_PU_V 0x1 +#define RTC_CNTL_TXRF_I2C_PU_S 27 +/* RTC_CNTL_PVTMON_PU : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: 1: PVTMON power up otherwise power down*/ +#define RTC_CNTL_PVTMON_PU (BIT(26)) +#define RTC_CNTL_PVTMON_PU_M (BIT(26)) +#define RTC_CNTL_PVTMON_PU_V 0x1 +#define RTC_CNTL_PVTMON_PU_S 26 +/* RTC_CNTL_BBPLL_CAL_SLP_START : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: start BBPLL calibration during sleep*/ +#define RTC_CNTL_BBPLL_CAL_SLP_START (BIT(25)) +#define RTC_CNTL_BBPLL_CAL_SLP_START_M (BIT(25)) +#define RTC_CNTL_BBPLL_CAL_SLP_START_V 0x1 +#define RTC_CNTL_BBPLL_CAL_SLP_START_S 25 +/* RTC_CNTL_PLLA_FORCE_PU : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: PLLA force power up*/ +#define RTC_CNTL_PLLA_FORCE_PU (BIT(24)) +#define RTC_CNTL_PLLA_FORCE_PU_M (BIT(24)) +#define RTC_CNTL_PLLA_FORCE_PU_V 0x1 +#define RTC_CNTL_PLLA_FORCE_PU_S 24 +/* RTC_CNTL_PLLA_FORCE_PD : R/W ;bitpos:[23] ;default: 1'b1 ; */ +/*description: PLLA force power down*/ +#define RTC_CNTL_PLLA_FORCE_PD (BIT(23)) +#define RTC_CNTL_PLLA_FORCE_PD_M (BIT(23)) +#define RTC_CNTL_PLLA_FORCE_PD_V 0x1 +#define RTC_CNTL_PLLA_FORCE_PD_S 23 + +#define RTC_CNTL_RESET_STATE_REG (DR_REG_RTCCNTL_BASE + 0x34) +/* RTC_CNTL_PROCPU_STAT_VECTOR_SEL : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: PRO CPU state vector sel*/ +#define RTC_CNTL_PROCPU_STAT_VECTOR_SEL (BIT(13)) +#define RTC_CNTL_PROCPU_STAT_VECTOR_SEL_M (BIT(13)) +#define RTC_CNTL_PROCPU_STAT_VECTOR_SEL_V 0x1 +#define RTC_CNTL_PROCPU_STAT_VECTOR_SEL_S 13 +/* RTC_CNTL_APPCPU_STAT_VECTOR_SEL : R/W ;bitpos:[12] ;default: 1'b1 ; */ +/*description: APP CPU state vector sel*/ +#define RTC_CNTL_APPCPU_STAT_VECTOR_SEL (BIT(12)) +#define RTC_CNTL_APPCPU_STAT_VECTOR_SEL_M (BIT(12)) +#define RTC_CNTL_APPCPU_STAT_VECTOR_SEL_V 0x1 +#define RTC_CNTL_APPCPU_STAT_VECTOR_SEL_S 12 +/* RTC_CNTL_RESET_CAUSE_APPCPU : RO ;bitpos:[11:6] ;default: 0 ; */ +/*description: reset cause of APP CPU*/ +#define RTC_CNTL_RESET_CAUSE_APPCPU 0x0000003F +#define RTC_CNTL_RESET_CAUSE_APPCPU_M ((RTC_CNTL_RESET_CAUSE_APPCPU_V)<<(RTC_CNTL_RESET_CAUSE_APPCPU_S)) +#define RTC_CNTL_RESET_CAUSE_APPCPU_V 0x3F +#define RTC_CNTL_RESET_CAUSE_APPCPU_S 6 +/* RTC_CNTL_RESET_CAUSE_PROCPU : RO ;bitpos:[5:0] ;default: 0 ; */ +/*description: reset cause of PRO CPU*/ +#define RTC_CNTL_RESET_CAUSE_PROCPU 0x0000003F +#define RTC_CNTL_RESET_CAUSE_PROCPU_M ((RTC_CNTL_RESET_CAUSE_PROCPU_V)<<(RTC_CNTL_RESET_CAUSE_PROCPU_S)) +#define RTC_CNTL_RESET_CAUSE_PROCPU_V 0x3F +#define RTC_CNTL_RESET_CAUSE_PROCPU_S 0 + +#define RTC_CNTL_WAKEUP_STATE_REG (DR_REG_RTCCNTL_BASE + 0x38) +/* RTC_CNTL_GPIO_WAKEUP_FILTER : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: enable filter for gpio wakeup event*/ +#define RTC_CNTL_GPIO_WAKEUP_FILTER (BIT(22)) +#define RTC_CNTL_GPIO_WAKEUP_FILTER_M (BIT(22)) +#define RTC_CNTL_GPIO_WAKEUP_FILTER_V 0x1 +#define RTC_CNTL_GPIO_WAKEUP_FILTER_S 22 +/* RTC_CNTL_WAKEUP_ENA : R/W ;bitpos:[21:11] ;default: 11'b1100 ; */ +/*description: wakeup enable bitmap*/ +#define RTC_CNTL_WAKEUP_ENA 0x000007FF +#define RTC_CNTL_WAKEUP_ENA_M ((RTC_CNTL_WAKEUP_ENA_V)<<(RTC_CNTL_WAKEUP_ENA_S)) +#define RTC_CNTL_WAKEUP_ENA_V 0x7FF +#define RTC_CNTL_WAKEUP_ENA_S 11 +/* RTC_CNTL_WAKEUP_CAUSE : RO ;bitpos:[10:0] ;default: 11'h0 ; */ +/*description: wakeup cause*/ +#define RTC_CNTL_WAKEUP_CAUSE 0x000007FF +#define RTC_CNTL_WAKEUP_CAUSE_M ((RTC_CNTL_WAKEUP_CAUSE_V)<<(RTC_CNTL_WAKEUP_CAUSE_S)) +#define RTC_CNTL_WAKEUP_CAUSE_V 0x7FF +#define RTC_CNTL_WAKEUP_CAUSE_S 0 + +#define RTC_CNTL_INT_ENA_REG (DR_REG_RTCCNTL_BASE + 0x3c) +/* RTC_CNTL_MAIN_TIMER_INT_ENA : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: enable RTC main timer interrupt*/ +#define RTC_CNTL_MAIN_TIMER_INT_ENA (BIT(8)) +#define RTC_CNTL_MAIN_TIMER_INT_ENA_M (BIT(8)) +#define RTC_CNTL_MAIN_TIMER_INT_ENA_V 0x1 +#define RTC_CNTL_MAIN_TIMER_INT_ENA_S 8 +/* RTC_CNTL_BROWN_OUT_INT_ENA : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: enable brown out interrupt*/ +#define RTC_CNTL_BROWN_OUT_INT_ENA (BIT(7)) +#define RTC_CNTL_BROWN_OUT_INT_ENA_M (BIT(7)) +#define RTC_CNTL_BROWN_OUT_INT_ENA_V 0x1 +#define RTC_CNTL_BROWN_OUT_INT_ENA_S 7 +/* RTC_CNTL_TOUCH_INT_ENA : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: enable touch interrupt*/ +#define RTC_CNTL_TOUCH_INT_ENA (BIT(6)) +#define RTC_CNTL_TOUCH_INT_ENA_M (BIT(6)) +#define RTC_CNTL_TOUCH_INT_ENA_V 0x1 +#define RTC_CNTL_TOUCH_INT_ENA_S 6 +/* RTC_CNTL_ULP_CP_INT_ENA : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: enable ULP-coprocessor interrupt*/ +#define RTC_CNTL_ULP_CP_INT_ENA (BIT(5)) +#define RTC_CNTL_ULP_CP_INT_ENA_M (BIT(5)) +#define RTC_CNTL_ULP_CP_INT_ENA_V 0x1 +#define RTC_CNTL_ULP_CP_INT_ENA_S 5 +/* RTC_CNTL_TIME_VALID_INT_ENA : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: enable RTC time valid interrupt*/ +#define RTC_CNTL_TIME_VALID_INT_ENA (BIT(4)) +#define RTC_CNTL_TIME_VALID_INT_ENA_M (BIT(4)) +#define RTC_CNTL_TIME_VALID_INT_ENA_V 0x1 +#define RTC_CNTL_TIME_VALID_INT_ENA_S 4 +/* RTC_CNTL_WDT_INT_ENA : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: enable RTC WDT interrupt*/ +#define RTC_CNTL_WDT_INT_ENA (BIT(3)) +#define RTC_CNTL_WDT_INT_ENA_M (BIT(3)) +#define RTC_CNTL_WDT_INT_ENA_V 0x1 +#define RTC_CNTL_WDT_INT_ENA_S 3 +/* RTC_CNTL_SDIO_IDLE_INT_ENA : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: enable SDIO idle interrupt*/ +#define RTC_CNTL_SDIO_IDLE_INT_ENA (BIT(2)) +#define RTC_CNTL_SDIO_IDLE_INT_ENA_M (BIT(2)) +#define RTC_CNTL_SDIO_IDLE_INT_ENA_V 0x1 +#define RTC_CNTL_SDIO_IDLE_INT_ENA_S 2 +/* RTC_CNTL_SLP_REJECT_INT_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: enable sleep reject interrupt*/ +#define RTC_CNTL_SLP_REJECT_INT_ENA (BIT(1)) +#define RTC_CNTL_SLP_REJECT_INT_ENA_M (BIT(1)) +#define RTC_CNTL_SLP_REJECT_INT_ENA_V 0x1 +#define RTC_CNTL_SLP_REJECT_INT_ENA_S 1 +/* RTC_CNTL_SLP_WAKEUP_INT_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: enable sleep wakeup interrupt*/ +#define RTC_CNTL_SLP_WAKEUP_INT_ENA (BIT(0)) +#define RTC_CNTL_SLP_WAKEUP_INT_ENA_M (BIT(0)) +#define RTC_CNTL_SLP_WAKEUP_INT_ENA_V 0x1 +#define RTC_CNTL_SLP_WAKEUP_INT_ENA_S 0 + +#define RTC_CNTL_INT_RAW_REG (DR_REG_RTCCNTL_BASE + 0x40) +/* RTC_CNTL_MAIN_TIMER_INT_RAW : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: RTC main timer interrupt raw*/ +#define RTC_CNTL_MAIN_TIMER_INT_RAW (BIT(8)) +#define RTC_CNTL_MAIN_TIMER_INT_RAW_M (BIT(8)) +#define RTC_CNTL_MAIN_TIMER_INT_RAW_V 0x1 +#define RTC_CNTL_MAIN_TIMER_INT_RAW_S 8 +/* RTC_CNTL_BROWN_OUT_INT_RAW : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: brown out interrupt raw*/ +#define RTC_CNTL_BROWN_OUT_INT_RAW (BIT(7)) +#define RTC_CNTL_BROWN_OUT_INT_RAW_M (BIT(7)) +#define RTC_CNTL_BROWN_OUT_INT_RAW_V 0x1 +#define RTC_CNTL_BROWN_OUT_INT_RAW_S 7 +/* RTC_CNTL_TOUCH_INT_RAW : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: touch interrupt raw*/ +#define RTC_CNTL_TOUCH_INT_RAW (BIT(6)) +#define RTC_CNTL_TOUCH_INT_RAW_M (BIT(6)) +#define RTC_CNTL_TOUCH_INT_RAW_V 0x1 +#define RTC_CNTL_TOUCH_INT_RAW_S 6 +/* RTC_CNTL_ULP_CP_INT_RAW : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: ULP-coprocessor interrupt raw*/ +#define RTC_CNTL_ULP_CP_INT_RAW (BIT(5)) +#define RTC_CNTL_ULP_CP_INT_RAW_M (BIT(5)) +#define RTC_CNTL_ULP_CP_INT_RAW_V 0x1 +#define RTC_CNTL_ULP_CP_INT_RAW_S 5 +/* RTC_CNTL_TIME_VALID_INT_RAW : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: RTC time valid interrupt raw*/ +#define RTC_CNTL_TIME_VALID_INT_RAW (BIT(4)) +#define RTC_CNTL_TIME_VALID_INT_RAW_M (BIT(4)) +#define RTC_CNTL_TIME_VALID_INT_RAW_V 0x1 +#define RTC_CNTL_TIME_VALID_INT_RAW_S 4 +/* RTC_CNTL_WDT_INT_RAW : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: RTC WDT interrupt raw*/ +#define RTC_CNTL_WDT_INT_RAW (BIT(3)) +#define RTC_CNTL_WDT_INT_RAW_M (BIT(3)) +#define RTC_CNTL_WDT_INT_RAW_V 0x1 +#define RTC_CNTL_WDT_INT_RAW_S 3 +/* RTC_CNTL_SDIO_IDLE_INT_RAW : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: SDIO idle interrupt raw*/ +#define RTC_CNTL_SDIO_IDLE_INT_RAW (BIT(2)) +#define RTC_CNTL_SDIO_IDLE_INT_RAW_M (BIT(2)) +#define RTC_CNTL_SDIO_IDLE_INT_RAW_V 0x1 +#define RTC_CNTL_SDIO_IDLE_INT_RAW_S 2 +/* RTC_CNTL_SLP_REJECT_INT_RAW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: sleep reject interrupt raw*/ +#define RTC_CNTL_SLP_REJECT_INT_RAW (BIT(1)) +#define RTC_CNTL_SLP_REJECT_INT_RAW_M (BIT(1)) +#define RTC_CNTL_SLP_REJECT_INT_RAW_V 0x1 +#define RTC_CNTL_SLP_REJECT_INT_RAW_S 1 +/* RTC_CNTL_SLP_WAKEUP_INT_RAW : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: sleep wakeup interrupt raw*/ +#define RTC_CNTL_SLP_WAKEUP_INT_RAW (BIT(0)) +#define RTC_CNTL_SLP_WAKEUP_INT_RAW_M (BIT(0)) +#define RTC_CNTL_SLP_WAKEUP_INT_RAW_V 0x1 +#define RTC_CNTL_SLP_WAKEUP_INT_RAW_S 0 + +#define RTC_CNTL_INT_ST_REG (DR_REG_RTCCNTL_BASE + 0x44) +/* RTC_CNTL_MAIN_TIMER_INT_ST : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: RTC main timer interrupt state*/ +#define RTC_CNTL_MAIN_TIMER_INT_ST (BIT(8)) +#define RTC_CNTL_MAIN_TIMER_INT_ST_M (BIT(8)) +#define RTC_CNTL_MAIN_TIMER_INT_ST_V 0x1 +#define RTC_CNTL_MAIN_TIMER_INT_ST_S 8 +/* RTC_CNTL_BROWN_OUT_INT_ST : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: brown out interrupt state*/ +#define RTC_CNTL_BROWN_OUT_INT_ST (BIT(7)) +#define RTC_CNTL_BROWN_OUT_INT_ST_M (BIT(7)) +#define RTC_CNTL_BROWN_OUT_INT_ST_V 0x1 +#define RTC_CNTL_BROWN_OUT_INT_ST_S 7 +/* RTC_CNTL_TOUCH_INT_ST : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: touch interrupt state*/ +#define RTC_CNTL_TOUCH_INT_ST (BIT(6)) +#define RTC_CNTL_TOUCH_INT_ST_M (BIT(6)) +#define RTC_CNTL_TOUCH_INT_ST_V 0x1 +#define RTC_CNTL_TOUCH_INT_ST_S 6 +/* RTC_CNTL_SAR_INT_ST : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: ULP-coprocessor interrupt state*/ +#define RTC_CNTL_SAR_INT_ST (BIT(5)) +#define RTC_CNTL_SAR_INT_ST_M (BIT(5)) +#define RTC_CNTL_SAR_INT_ST_V 0x1 +#define RTC_CNTL_SAR_INT_ST_S 5 +/* RTC_CNTL_TIME_VALID_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: RTC time valid interrupt state*/ +#define RTC_CNTL_TIME_VALID_INT_ST (BIT(4)) +#define RTC_CNTL_TIME_VALID_INT_ST_M (BIT(4)) +#define RTC_CNTL_TIME_VALID_INT_ST_V 0x1 +#define RTC_CNTL_TIME_VALID_INT_ST_S 4 +/* RTC_CNTL_WDT_INT_ST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: RTC WDT interrupt state*/ +#define RTC_CNTL_WDT_INT_ST (BIT(3)) +#define RTC_CNTL_WDT_INT_ST_M (BIT(3)) +#define RTC_CNTL_WDT_INT_ST_V 0x1 +#define RTC_CNTL_WDT_INT_ST_S 3 +/* RTC_CNTL_SDIO_IDLE_INT_ST : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: SDIO idle interrupt state*/ +#define RTC_CNTL_SDIO_IDLE_INT_ST (BIT(2)) +#define RTC_CNTL_SDIO_IDLE_INT_ST_M (BIT(2)) +#define RTC_CNTL_SDIO_IDLE_INT_ST_V 0x1 +#define RTC_CNTL_SDIO_IDLE_INT_ST_S 2 +/* RTC_CNTL_SLP_REJECT_INT_ST : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: sleep reject interrupt state*/ +#define RTC_CNTL_SLP_REJECT_INT_ST (BIT(1)) +#define RTC_CNTL_SLP_REJECT_INT_ST_M (BIT(1)) +#define RTC_CNTL_SLP_REJECT_INT_ST_V 0x1 +#define RTC_CNTL_SLP_REJECT_INT_ST_S 1 +/* RTC_CNTL_SLP_WAKEUP_INT_ST : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: sleep wakeup interrupt state*/ +#define RTC_CNTL_SLP_WAKEUP_INT_ST (BIT(0)) +#define RTC_CNTL_SLP_WAKEUP_INT_ST_M (BIT(0)) +#define RTC_CNTL_SLP_WAKEUP_INT_ST_V 0x1 +#define RTC_CNTL_SLP_WAKEUP_INT_ST_S 0 + +#define RTC_CNTL_INT_CLR_REG (DR_REG_RTCCNTL_BASE + 0x48) +/* RTC_CNTL_MAIN_TIMER_INT_CLR : WO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: Clear RTC main timer interrupt state*/ +#define RTC_CNTL_MAIN_TIMER_INT_CLR (BIT(8)) +#define RTC_CNTL_MAIN_TIMER_INT_CLR_M (BIT(8)) +#define RTC_CNTL_MAIN_TIMER_INT_CLR_V 0x1 +#define RTC_CNTL_MAIN_TIMER_INT_CLR_S 8 +/* RTC_CNTL_BROWN_OUT_INT_CLR : WO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Clear brown out interrupt state*/ +#define RTC_CNTL_BROWN_OUT_INT_CLR (BIT(7)) +#define RTC_CNTL_BROWN_OUT_INT_CLR_M (BIT(7)) +#define RTC_CNTL_BROWN_OUT_INT_CLR_V 0x1 +#define RTC_CNTL_BROWN_OUT_INT_CLR_S 7 +/* RTC_CNTL_TOUCH_INT_CLR : WO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Clear touch interrupt state*/ +#define RTC_CNTL_TOUCH_INT_CLR (BIT(6)) +#define RTC_CNTL_TOUCH_INT_CLR_M (BIT(6)) +#define RTC_CNTL_TOUCH_INT_CLR_V 0x1 +#define RTC_CNTL_TOUCH_INT_CLR_S 6 +/* RTC_CNTL_SAR_INT_CLR : WO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Clear ULP-coprocessor interrupt state*/ +#define RTC_CNTL_SAR_INT_CLR (BIT(5)) +#define RTC_CNTL_SAR_INT_CLR_M (BIT(5)) +#define RTC_CNTL_SAR_INT_CLR_V 0x1 +#define RTC_CNTL_SAR_INT_CLR_S 5 +/* RTC_CNTL_TIME_VALID_INT_CLR : WO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Clear RTC time valid interrupt state*/ +#define RTC_CNTL_TIME_VALID_INT_CLR (BIT(4)) +#define RTC_CNTL_TIME_VALID_INT_CLR_M (BIT(4)) +#define RTC_CNTL_TIME_VALID_INT_CLR_V 0x1 +#define RTC_CNTL_TIME_VALID_INT_CLR_S 4 +/* RTC_CNTL_WDT_INT_CLR : WO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Clear RTC WDT interrupt state*/ +#define RTC_CNTL_WDT_INT_CLR (BIT(3)) +#define RTC_CNTL_WDT_INT_CLR_M (BIT(3)) +#define RTC_CNTL_WDT_INT_CLR_V 0x1 +#define RTC_CNTL_WDT_INT_CLR_S 3 +/* RTC_CNTL_SDIO_IDLE_INT_CLR : WO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Clear SDIO idle interrupt state*/ +#define RTC_CNTL_SDIO_IDLE_INT_CLR (BIT(2)) +#define RTC_CNTL_SDIO_IDLE_INT_CLR_M (BIT(2)) +#define RTC_CNTL_SDIO_IDLE_INT_CLR_V 0x1 +#define RTC_CNTL_SDIO_IDLE_INT_CLR_S 2 +/* RTC_CNTL_SLP_REJECT_INT_CLR : WO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Clear sleep reject interrupt state*/ +#define RTC_CNTL_SLP_REJECT_INT_CLR (BIT(1)) +#define RTC_CNTL_SLP_REJECT_INT_CLR_M (BIT(1)) +#define RTC_CNTL_SLP_REJECT_INT_CLR_V 0x1 +#define RTC_CNTL_SLP_REJECT_INT_CLR_S 1 +/* RTC_CNTL_SLP_WAKEUP_INT_CLR : WO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Clear sleep wakeup interrupt state*/ +#define RTC_CNTL_SLP_WAKEUP_INT_CLR (BIT(0)) +#define RTC_CNTL_SLP_WAKEUP_INT_CLR_M (BIT(0)) +#define RTC_CNTL_SLP_WAKEUP_INT_CLR_V 0x1 +#define RTC_CNTL_SLP_WAKEUP_INT_CLR_S 0 + +#define RTC_CNTL_STORE0_REG (DR_REG_RTCCNTL_BASE + 0x4c) +/* RTC_CNTL_SCRATCH0 : R/W ;bitpos:[31:0] ;default: 0 ; */ +/*description: 32-bit general purpose retention register*/ +#define RTC_CNTL_SCRATCH0 0xFFFFFFFF +#define RTC_CNTL_SCRATCH0_M ((RTC_CNTL_SCRATCH0_V)<<(RTC_CNTL_SCRATCH0_S)) +#define RTC_CNTL_SCRATCH0_V 0xFFFFFFFF +#define RTC_CNTL_SCRATCH0_S 0 + +#define RTC_CNTL_STORE1_REG (DR_REG_RTCCNTL_BASE + 0x50) +/* RTC_CNTL_SCRATCH1 : R/W ;bitpos:[31:0] ;default: 0 ; */ +/*description: 32-bit general purpose retention register*/ +#define RTC_CNTL_SCRATCH1 0xFFFFFFFF +#define RTC_CNTL_SCRATCH1_M ((RTC_CNTL_SCRATCH1_V)<<(RTC_CNTL_SCRATCH1_S)) +#define RTC_CNTL_SCRATCH1_V 0xFFFFFFFF +#define RTC_CNTL_SCRATCH1_S 0 + +#define RTC_CNTL_STORE2_REG (DR_REG_RTCCNTL_BASE + 0x54) +/* RTC_CNTL_SCRATCH2 : R/W ;bitpos:[31:0] ;default: 0 ; */ +/*description: 32-bit general purpose retention register*/ +#define RTC_CNTL_SCRATCH2 0xFFFFFFFF +#define RTC_CNTL_SCRATCH2_M ((RTC_CNTL_SCRATCH2_V)<<(RTC_CNTL_SCRATCH2_S)) +#define RTC_CNTL_SCRATCH2_V 0xFFFFFFFF +#define RTC_CNTL_SCRATCH2_S 0 + +#define RTC_CNTL_STORE3_REG (DR_REG_RTCCNTL_BASE + 0x58) +/* RTC_CNTL_SCRATCH3 : R/W ;bitpos:[31:0] ;default: 0 ; */ +/*description: 32-bit general purpose retention register*/ +#define RTC_CNTL_SCRATCH3 0xFFFFFFFF +#define RTC_CNTL_SCRATCH3_M ((RTC_CNTL_SCRATCH3_V)<<(RTC_CNTL_SCRATCH3_S)) +#define RTC_CNTL_SCRATCH3_V 0xFFFFFFFF +#define RTC_CNTL_SCRATCH3_S 0 + +#define RTC_CNTL_EXT_XTL_CONF_REG (DR_REG_RTCCNTL_BASE + 0x5c) +/* RTC_CNTL_XTL_EXT_CTR_EN : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: enable control XTAL by external pads*/ +#define RTC_CNTL_XTL_EXT_CTR_EN (BIT(31)) +#define RTC_CNTL_XTL_EXT_CTR_EN_M (BIT(31)) +#define RTC_CNTL_XTL_EXT_CTR_EN_V 0x1 +#define RTC_CNTL_XTL_EXT_CTR_EN_S 31 +/* RTC_CNTL_XTL_EXT_CTR_LV : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: 0: power down XTAL at high level 1: power down XTAL at low level*/ +#define RTC_CNTL_XTL_EXT_CTR_LV (BIT(30)) +#define RTC_CNTL_XTL_EXT_CTR_LV_M (BIT(30)) +#define RTC_CNTL_XTL_EXT_CTR_LV_V 0x1 +#define RTC_CNTL_XTL_EXT_CTR_LV_S 30 + +#define RTC_CNTL_EXT_WAKEUP_CONF_REG (DR_REG_RTCCNTL_BASE + 0x60) +/* RTC_CNTL_EXT_WAKEUP1_LV : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: 0: external wakeup at low level 1: external wakeup at high level*/ +#define RTC_CNTL_EXT_WAKEUP1_LV (BIT(31)) +#define RTC_CNTL_EXT_WAKEUP1_LV_M (BIT(31)) +#define RTC_CNTL_EXT_WAKEUP1_LV_V 0x1 +#define RTC_CNTL_EXT_WAKEUP1_LV_S 31 +/* RTC_CNTL_EXT_WAKEUP0_LV : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: 0: external wakeup at low level 1: external wakeup at high level*/ +#define RTC_CNTL_EXT_WAKEUP0_LV (BIT(30)) +#define RTC_CNTL_EXT_WAKEUP0_LV_M (BIT(30)) +#define RTC_CNTL_EXT_WAKEUP0_LV_V 0x1 +#define RTC_CNTL_EXT_WAKEUP0_LV_S 30 + +#define RTC_CNTL_SLP_REJECT_CONF_REG (DR_REG_RTCCNTL_BASE + 0x64) +/* RTC_CNTL_REJECT_CAUSE : RO ;bitpos:[31:28] ;default: 4'b0 ; */ +/*description: sleep reject cause*/ +#define RTC_CNTL_REJECT_CAUSE 0x0000000F +#define RTC_CNTL_REJECT_CAUSE_M ((RTC_CNTL_REJECT_CAUSE_V)<<(RTC_CNTL_REJECT_CAUSE_S)) +#define RTC_CNTL_REJECT_CAUSE_V 0xF +#define RTC_CNTL_REJECT_CAUSE_S 28 +/* RTC_CNTL_DEEP_SLP_REJECT_EN : R/W ;bitpos:[27] ;default: 1'b0 ; */ +/*description: enable reject for deep sleep*/ +#define RTC_CNTL_DEEP_SLP_REJECT_EN (BIT(27)) +#define RTC_CNTL_DEEP_SLP_REJECT_EN_M (BIT(27)) +#define RTC_CNTL_DEEP_SLP_REJECT_EN_V 0x1 +#define RTC_CNTL_DEEP_SLP_REJECT_EN_S 27 +/* RTC_CNTL_LIGHT_SLP_REJECT_EN : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: enable reject for light sleep*/ +#define RTC_CNTL_LIGHT_SLP_REJECT_EN (BIT(26)) +#define RTC_CNTL_LIGHT_SLP_REJECT_EN_M (BIT(26)) +#define RTC_CNTL_LIGHT_SLP_REJECT_EN_V 0x1 +#define RTC_CNTL_LIGHT_SLP_REJECT_EN_S 26 +/* RTC_CNTL_SDIO_REJECT_EN : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: enable SDIO reject*/ +#define RTC_CNTL_SDIO_REJECT_EN (BIT(25)) +#define RTC_CNTL_SDIO_REJECT_EN_M (BIT(25)) +#define RTC_CNTL_SDIO_REJECT_EN_V 0x1 +#define RTC_CNTL_SDIO_REJECT_EN_S 25 +/* RTC_CNTL_GPIO_REJECT_EN : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: enable GPIO reject*/ +#define RTC_CNTL_GPIO_REJECT_EN (BIT(24)) +#define RTC_CNTL_GPIO_REJECT_EN_M (BIT(24)) +#define RTC_CNTL_GPIO_REJECT_EN_V 0x1 +#define RTC_CNTL_GPIO_REJECT_EN_S 24 + +#define RTC_CNTL_CPU_PERIOD_CONF_REG (DR_REG_RTCCNTL_BASE + 0x68) +/* RTC_CNTL_CPUPERIOD_SEL : R/W ;bitpos:[31:30] ;default: 2'b00 ; */ +/*description: CPU period sel*/ +#define RTC_CNTL_CPUPERIOD_SEL 0x00000003 +#define RTC_CNTL_CPUPERIOD_SEL_M ((RTC_CNTL_CPUPERIOD_SEL_V)<<(RTC_CNTL_CPUPERIOD_SEL_S)) +#define RTC_CNTL_CPUPERIOD_SEL_V 0x3 +#define RTC_CNTL_CPUPERIOD_SEL_S 30 +/* RTC_CNTL_CPUSEL_CONF : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: CPU sel option*/ +#define RTC_CNTL_CPUSEL_CONF (BIT(29)) +#define RTC_CNTL_CPUSEL_CONF_M (BIT(29)) +#define RTC_CNTL_CPUSEL_CONF_V 0x1 +#define RTC_CNTL_CPUSEL_CONF_S 29 + +#define RTC_CNTL_SDIO_ACT_CONF_REG (DR_REG_RTCCNTL_BASE + 0x6c) +/* RTC_CNTL_SDIO_ACT_DNUM : R/W ;bitpos:[31:22] ;default: 10'b0 ; */ +/*description: */ +#define RTC_CNTL_SDIO_ACT_DNUM 0x000003FF +#define RTC_CNTL_SDIO_ACT_DNUM_M ((RTC_CNTL_SDIO_ACT_DNUM_V)<<(RTC_CNTL_SDIO_ACT_DNUM_S)) +#define RTC_CNTL_SDIO_ACT_DNUM_V 0x3FF +#define RTC_CNTL_SDIO_ACT_DNUM_S 22 + +#define RTC_CNTL_CLK_CONF_REG (DR_REG_RTCCNTL_BASE + 0x70) +/* RTC_CNTL_ANA_CLK_RTC_SEL : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: slow_clk_rtc sel. 0: SLOW_CK 1: CK_XTAL_32K 2: CK8M_D256_OUT*/ +#define RTC_CNTL_ANA_CLK_RTC_SEL 0x00000003 +#define RTC_CNTL_ANA_CLK_RTC_SEL_M ((RTC_CNTL_ANA_CLK_RTC_SEL_V)<<(RTC_CNTL_ANA_CLK_RTC_SEL_S)) +#define RTC_CNTL_ANA_CLK_RTC_SEL_V 0x3 +#define RTC_CNTL_ANA_CLK_RTC_SEL_S 30 +/* RTC_CNTL_FAST_CLK_RTC_SEL : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: fast_clk_rtc sel. 0: XTAL div 4 1: CK8M*/ +#define RTC_CNTL_FAST_CLK_RTC_SEL (BIT(29)) +#define RTC_CNTL_FAST_CLK_RTC_SEL_M (BIT(29)) +#define RTC_CNTL_FAST_CLK_RTC_SEL_V 0x1 +#define RTC_CNTL_FAST_CLK_RTC_SEL_S 29 +/* RTC_CNTL_SOC_CLK_SEL : R/W ;bitpos:[28:27] ;default: 2'd0 ; */ +/*description: SOC clock sel. 0: XTAL 1: PLL 2: CK8M 3: APLL*/ +#define RTC_CNTL_SOC_CLK_SEL 0x00000003 +#define RTC_CNTL_SOC_CLK_SEL_M ((RTC_CNTL_SOC_CLK_SEL_V)<<(RTC_CNTL_SOC_CLK_SEL_S)) +#define RTC_CNTL_SOC_CLK_SEL_V 0x3 +#define RTC_CNTL_SOC_CLK_SEL_S 27 +/* RTC_CNTL_CK8M_FORCE_PU : R/W ;bitpos:[26] ;default: 1'd0 ; */ +/*description: CK8M force power up*/ +#define RTC_CNTL_CK8M_FORCE_PU (BIT(26)) +#define RTC_CNTL_CK8M_FORCE_PU_M (BIT(26)) +#define RTC_CNTL_CK8M_FORCE_PU_V 0x1 +#define RTC_CNTL_CK8M_FORCE_PU_S 26 +/* RTC_CNTL_CK8M_FORCE_PD : R/W ;bitpos:[25] ;default: 1'd0 ; */ +/*description: CK8M force power down*/ +#define RTC_CNTL_CK8M_FORCE_PD (BIT(25)) +#define RTC_CNTL_CK8M_FORCE_PD_M (BIT(25)) +#define RTC_CNTL_CK8M_FORCE_PD_V 0x1 +#define RTC_CNTL_CK8M_FORCE_PD_S 25 +/* RTC_CNTL_CK8M_DFREQ : R/W ;bitpos:[24:17] ;default: 8'd0 ; */ +/*description: CK8M_DFREQ*/ +#define RTC_CNTL_CK8M_DFREQ 0x000000FF +#define RTC_CNTL_CK8M_DFREQ_M ((RTC_CNTL_CK8M_DFREQ_V)<<(RTC_CNTL_CK8M_DFREQ_S)) +#define RTC_CNTL_CK8M_DFREQ_V 0xFF +#define RTC_CNTL_CK8M_DFREQ_S 17 +/* RTC_CNTL_CK8M_FORCE_NOGATING : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: CK8M force no gating during sleep*/ +#define RTC_CNTL_CK8M_FORCE_NOGATING (BIT(16)) +#define RTC_CNTL_CK8M_FORCE_NOGATING_M (BIT(16)) +#define RTC_CNTL_CK8M_FORCE_NOGATING_V 0x1 +#define RTC_CNTL_CK8M_FORCE_NOGATING_S 16 +/* RTC_CNTL_XTAL_FORCE_NOGATING : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: XTAL force no gating during sleep*/ +#define RTC_CNTL_XTAL_FORCE_NOGATING (BIT(15)) +#define RTC_CNTL_XTAL_FORCE_NOGATING_M (BIT(15)) +#define RTC_CNTL_XTAL_FORCE_NOGATING_V 0x1 +#define RTC_CNTL_XTAL_FORCE_NOGATING_S 15 +/* RTC_CNTL_CK8M_DIV_SEL : R/W ;bitpos:[14:12] ;default: 3'd2 ; */ +/*description: divider = reg_ck8m_div_sel + 1*/ +#define RTC_CNTL_CK8M_DIV_SEL 0x00000007 +#define RTC_CNTL_CK8M_DIV_SEL_M ((RTC_CNTL_CK8M_DIV_SEL_V)<<(RTC_CNTL_CK8M_DIV_SEL_S)) +#define RTC_CNTL_CK8M_DIV_SEL_V 0x7 +#define RTC_CNTL_CK8M_DIV_SEL_S 12 +/* RTC_CNTL_CK8M_DFREQ_FORCE : R/W ;bitpos:[11] ;default: 1'd0 ; */ +/*description: */ +#define RTC_CNTL_CK8M_DFREQ_FORCE (BIT(11)) +#define RTC_CNTL_CK8M_DFREQ_FORCE_M (BIT(11)) +#define RTC_CNTL_CK8M_DFREQ_FORCE_V 0x1 +#define RTC_CNTL_CK8M_DFREQ_FORCE_S 11 +/* RTC_CNTL_DIG_CLK8M_EN : R/W ;bitpos:[10] ;default: 1'd0 ; */ +/*description: enable CK8M for digital core (no relationship with RTC core)*/ +#define RTC_CNTL_DIG_CLK8M_EN (BIT(10)) +#define RTC_CNTL_DIG_CLK8M_EN_M (BIT(10)) +#define RTC_CNTL_DIG_CLK8M_EN_V 0x1 +#define RTC_CNTL_DIG_CLK8M_EN_S 10 +/* RTC_CNTL_DIG_CLK8M_D256_EN : R/W ;bitpos:[9] ;default: 1'd1 ; */ +/*description: enable CK8M_D256_OUT for digital core (no relationship with RTC core)*/ +#define RTC_CNTL_DIG_CLK8M_D256_EN (BIT(9)) +#define RTC_CNTL_DIG_CLK8M_D256_EN_M (BIT(9)) +#define RTC_CNTL_DIG_CLK8M_D256_EN_V 0x1 +#define RTC_CNTL_DIG_CLK8M_D256_EN_S 9 +/* RTC_CNTL_DIG_XTAL32K_EN : R/W ;bitpos:[8] ;default: 1'd0 ; */ +/*description: enable CK_XTAL_32K for digital core (no relationship with RTC core)*/ +#define RTC_CNTL_DIG_XTAL32K_EN (BIT(8)) +#define RTC_CNTL_DIG_XTAL32K_EN_M (BIT(8)) +#define RTC_CNTL_DIG_XTAL32K_EN_V 0x1 +#define RTC_CNTL_DIG_XTAL32K_EN_S 8 +/* RTC_CNTL_ENB_CK8M_DIV : R/W ;bitpos:[7] ;default: 1'd0 ; */ +/*description: 1: CK8M_D256_OUT is actually CK8M 0: CK8M_D256_OUT is CK8M divided by 256*/ +#define RTC_CNTL_ENB_CK8M_DIV (BIT(7)) +#define RTC_CNTL_ENB_CK8M_DIV_M (BIT(7)) +#define RTC_CNTL_ENB_CK8M_DIV_V 0x1 +#define RTC_CNTL_ENB_CK8M_DIV_S 7 +/* RTC_CNTL_ENB_CK8M : R/W ;bitpos:[6] ;default: 1'd0 ; */ +/*description: disable CK8M and CK8M_D256_OUT*/ +#define RTC_CNTL_ENB_CK8M (BIT(6)) +#define RTC_CNTL_ENB_CK8M_M (BIT(6)) +#define RTC_CNTL_ENB_CK8M_V 0x1 +#define RTC_CNTL_ENB_CK8M_S 6 +/* RTC_CNTL_CK8M_DIV : R/W ;bitpos:[5:4] ;default: 2'b01 ; */ +/*description: CK8M_D256_OUT divider. 00: div128 01: div256 10: div512 11: div1024.*/ +#define RTC_CNTL_CK8M_DIV 0x00000003 +#define RTC_CNTL_CK8M_DIV_M ((RTC_CNTL_CK8M_DIV_V)<<(RTC_CNTL_CK8M_DIV_S)) +#define RTC_CNTL_CK8M_DIV_V 0x3 +#define RTC_CNTL_CK8M_DIV_S 4 + +#define RTC_CNTL_SDIO_CONF_REG (DR_REG_RTCCNTL_BASE + 0x74) +/* RTC_CNTL_XPD_SDIO_REG : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: SW option for XPD_SDIO_REG. Only active when reg_sdio_force = 1*/ +#define RTC_CNTL_XPD_SDIO_REG (BIT(31)) +#define RTC_CNTL_XPD_SDIO_REG_M (BIT(31)) +#define RTC_CNTL_XPD_SDIO_REG_V 0x1 +#define RTC_CNTL_XPD_SDIO_REG_S 31 +/* RTC_CNTL_DREFH_SDIO : R/W ;bitpos:[30:29] ;default: 2'b00 ; */ +/*description: SW option for DREFH_SDIO. Only active when reg_sdio_force = 1*/ +#define RTC_CNTL_DREFH_SDIO 0x00000003 +#define RTC_CNTL_DREFH_SDIO_M ((RTC_CNTL_DREFH_SDIO_V)<<(RTC_CNTL_DREFH_SDIO_S)) +#define RTC_CNTL_DREFH_SDIO_V 0x3 +#define RTC_CNTL_DREFH_SDIO_S 29 +/* RTC_CNTL_DREFM_SDIO : R/W ;bitpos:[28:27] ;default: 2'b00 ; */ +/*description: SW option for DREFM_SDIO. Only active when reg_sdio_force = 1*/ +#define RTC_CNTL_DREFM_SDIO 0x00000003 +#define RTC_CNTL_DREFM_SDIO_M ((RTC_CNTL_DREFM_SDIO_V)<<(RTC_CNTL_DREFM_SDIO_S)) +#define RTC_CNTL_DREFM_SDIO_V 0x3 +#define RTC_CNTL_DREFM_SDIO_S 27 +/* RTC_CNTL_DREFL_SDIO : R/W ;bitpos:[26:25] ;default: 2'b01 ; */ +/*description: SW option for DREFL_SDIO. Only active when reg_sdio_force = 1*/ +#define RTC_CNTL_DREFL_SDIO 0x00000003 +#define RTC_CNTL_DREFL_SDIO_M ((RTC_CNTL_DREFL_SDIO_V)<<(RTC_CNTL_DREFL_SDIO_S)) +#define RTC_CNTL_DREFL_SDIO_V 0x3 +#define RTC_CNTL_DREFL_SDIO_S 25 +/* RTC_CNTL_REG1P8_READY : RO ;bitpos:[24] ;default: 1'd0 ; */ +/*description: read only register for REG1P8_READY*/ +#define RTC_CNTL_REG1P8_READY (BIT(24)) +#define RTC_CNTL_REG1P8_READY_M (BIT(24)) +#define RTC_CNTL_REG1P8_READY_V 0x1 +#define RTC_CNTL_REG1P8_READY_S 24 +/* RTC_CNTL_SDIO_TIEH : R/W ;bitpos:[23] ;default: 1'd1 ; */ +/*description: SW option for SDIO_TIEH. Only active when reg_sdio_force = 1*/ +#define RTC_CNTL_SDIO_TIEH (BIT(23)) +#define RTC_CNTL_SDIO_TIEH_M (BIT(23)) +#define RTC_CNTL_SDIO_TIEH_V 0x1 +#define RTC_CNTL_SDIO_TIEH_S 23 +/* RTC_CNTL_SDIO_FORCE : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: 1: use SW option to control SDIO_REG 0: use state machine*/ +#define RTC_CNTL_SDIO_FORCE (BIT(22)) +#define RTC_CNTL_SDIO_FORCE_M (BIT(22)) +#define RTC_CNTL_SDIO_FORCE_V 0x1 +#define RTC_CNTL_SDIO_FORCE_S 22 +/* RTC_CNTL_SDIO_PD_EN : R/W ;bitpos:[21] ;default: 1'd1 ; */ +/*description: power down SDIO_REG in sleep. Only active when reg_sdio_force = 0*/ +#define RTC_CNTL_SDIO_PD_EN (BIT(21)) +#define RTC_CNTL_SDIO_PD_EN_M (BIT(21)) +#define RTC_CNTL_SDIO_PD_EN_V 0x1 +#define RTC_CNTL_SDIO_PD_EN_S 21 + +#define RTC_CNTL_BIAS_CONF_REG (DR_REG_RTCCNTL_BASE + 0x78) +/* RTC_CNTL_RST_BIAS_I2C : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: RST_BIAS_I2C*/ +#define RTC_CNTL_RST_BIAS_I2C (BIT(31)) +#define RTC_CNTL_RST_BIAS_I2C_M (BIT(31)) +#define RTC_CNTL_RST_BIAS_I2C_V 0x1 +#define RTC_CNTL_RST_BIAS_I2C_S 31 +/* RTC_CNTL_DEC_HEARTBEAT_WIDTH : R/W ;bitpos:[30] ;default: 1'd0 ; */ +/*description: DEC_HEARTBEAT_WIDTH*/ +#define RTC_CNTL_DEC_HEARTBEAT_WIDTH (BIT(30)) +#define RTC_CNTL_DEC_HEARTBEAT_WIDTH_M (BIT(30)) +#define RTC_CNTL_DEC_HEARTBEAT_WIDTH_V 0x1 +#define RTC_CNTL_DEC_HEARTBEAT_WIDTH_S 30 +/* RTC_CNTL_INC_HEARTBEAT_PERIOD : R/W ;bitpos:[29] ;default: 1'd0 ; */ +/*description: INC_HEARTBEAT_PERIOD*/ +#define RTC_CNTL_INC_HEARTBEAT_PERIOD (BIT(29)) +#define RTC_CNTL_INC_HEARTBEAT_PERIOD_M (BIT(29)) +#define RTC_CNTL_INC_HEARTBEAT_PERIOD_V 0x1 +#define RTC_CNTL_INC_HEARTBEAT_PERIOD_S 29 +/* RTC_CNTL_DEC_HEARTBEAT_PERIOD : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: DEC_HEARTBEAT_PERIOD*/ +#define RTC_CNTL_DEC_HEARTBEAT_PERIOD (BIT(28)) +#define RTC_CNTL_DEC_HEARTBEAT_PERIOD_M (BIT(28)) +#define RTC_CNTL_DEC_HEARTBEAT_PERIOD_V 0x1 +#define RTC_CNTL_DEC_HEARTBEAT_PERIOD_S 28 +/* RTC_CNTL_INC_HEARTBEAT_REFRESH : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: INC_HEARTBEAT_REFRESH*/ +#define RTC_CNTL_INC_HEARTBEAT_REFRESH (BIT(27)) +#define RTC_CNTL_INC_HEARTBEAT_REFRESH_M (BIT(27)) +#define RTC_CNTL_INC_HEARTBEAT_REFRESH_V 0x1 +#define RTC_CNTL_INC_HEARTBEAT_REFRESH_S 27 +/* RTC_CNTL_ENB_SCK_XTAL : R/W ;bitpos:[26] ;default: 1'd0 ; */ +/*description: ENB_SCK_XTAL*/ +#define RTC_CNTL_ENB_SCK_XTAL (BIT(26)) +#define RTC_CNTL_ENB_SCK_XTAL_M (BIT(26)) +#define RTC_CNTL_ENB_SCK_XTAL_V 0x1 +#define RTC_CNTL_ENB_SCK_XTAL_S 26 +/* RTC_CNTL_DBG_ATTEN : R/W ;bitpos:[25:24] ;default: 2'b00 ; */ +/*description: DBG_ATTEN*/ +#define RTC_CNTL_DBG_ATTEN 0x00000003 +#define RTC_CNTL_DBG_ATTEN_M ((RTC_CNTL_DBG_ATTEN_V)<<(RTC_CNTL_DBG_ATTEN_S)) +#define RTC_CNTL_DBG_ATTEN_V 0x3 +#define RTC_CNTL_DBG_ATTEN_S 24 + +#define RTC_CNTL_REG (DR_REG_RTCCNTL_BASE + 0x7c) +/* RTC_CNTL_FORCE_PU : R/W ;bitpos:[31] ;default: 1'd1 ; */ +/*description: RTC_REG force power up*/ +#define RTC_CNTL_FORCE_PU (BIT(31)) +#define RTC_CNTL_FORCE_PU_M (BIT(31)) +#define RTC_CNTL_FORCE_PU_V 0x1 +#define RTC_CNTL_FORCE_PU_S 31 +/* RTC_CNTL_FORCE_PD : R/W ;bitpos:[30] ;default: 1'd0 ; */ +/*description: RTC_REG force power down (for RTC_REG power down means decrease + the voltage to 0.8v or lower )*/ +#define RTC_CNTL_FORCE_PD (BIT(30)) +#define RTC_CNTL_FORCE_PD_M (BIT(30)) +#define RTC_CNTL_FORCE_PD_V 0x1 +#define RTC_CNTL_FORCE_PD_S 30 +/* RTC_CNTL_DBOOST_FORCE_PU : R/W ;bitpos:[29] ;default: 1'd1 ; */ +/*description: RTC_DBOOST force power up*/ +#define RTC_CNTL_DBOOST_FORCE_PU (BIT(29)) +#define RTC_CNTL_DBOOST_FORCE_PU_M (BIT(29)) +#define RTC_CNTL_DBOOST_FORCE_PU_V 0x1 +#define RTC_CNTL_DBOOST_FORCE_PU_S 29 +/* RTC_CNTL_DBOOST_FORCE_PD : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: RTC_DBOOST force power down*/ +#define RTC_CNTL_DBOOST_FORCE_PD (BIT(28)) +#define RTC_CNTL_DBOOST_FORCE_PD_M (BIT(28)) +#define RTC_CNTL_DBOOST_FORCE_PD_V 0x1 +#define RTC_CNTL_DBOOST_FORCE_PD_S 28 +/* RTC_CNTL_DBIAS_WAK : R/W ;bitpos:[27:25] ;default: 3'd4 ; */ +/*description: RTC_DBIAS during wakeup*/ +#define RTC_CNTL_DBIAS_WAK 0x00000007 +#define RTC_CNTL_DBIAS_WAK_M ((RTC_CNTL_DBIAS_WAK_V)<<(RTC_CNTL_DBIAS_WAK_S)) +#define RTC_CNTL_DBIAS_WAK_V 0x7 +#define RTC_CNTL_DBIAS_WAK_S 25 +/* RTC_CNTL_DBIAS_SLP : R/W ;bitpos:[24:22] ;default: 3'd4 ; */ +/*description: RTC_DBIAS during sleep*/ +#define RTC_CNTL_DBIAS_SLP 0x00000007 +#define RTC_CNTL_DBIAS_SLP_M ((RTC_CNTL_DBIAS_SLP_V)<<(RTC_CNTL_DBIAS_SLP_S)) +#define RTC_CNTL_DBIAS_SLP_V 0x7 +#define RTC_CNTL_DBIAS_SLP_S 22 +/* RTC_CNTL_SCK_DCAP : R/W ;bitpos:[21:14] ;default: 8'd0 ; */ +/*description: SCK_DCAP*/ +#define RTC_CNTL_SCK_DCAP 0x000000FF +#define RTC_CNTL_SCK_DCAP_M ((RTC_CNTL_SCK_DCAP_V)<<(RTC_CNTL_SCK_DCAP_S)) +#define RTC_CNTL_SCK_DCAP_V 0xFF +#define RTC_CNTL_SCK_DCAP_S 14 +/* RTC_CNTL_DIG_DBIAS_WAK : R/W ;bitpos:[13:11] ;default: 3'd4 ; */ +/*description: DIG_REG_DBIAS during wakeup*/ +#define RTC_CNTL_DIG_DBIAS_WAK 0x00000007 +#define RTC_CNTL_DIG_DBIAS_WAK_M ((RTC_CNTL_DIG_DBIAS_WAK_V)<<(RTC_CNTL_DIG_DBIAS_WAK_S)) +#define RTC_CNTL_DIG_DBIAS_WAK_V 0x7 +#define RTC_CNTL_DIG_DBIAS_WAK_S 11 +/* RTC_CNTL_DIG_DBIAS_SLP : R/W ;bitpos:[10:8] ;default: 3'd4 ; */ +/*description: DIG_REG_DBIAS during sleep*/ +#define RTC_CNTL_DIG_DBIAS_SLP 0x00000007 +#define RTC_CNTL_DIG_DBIAS_SLP_M ((RTC_CNTL_DIG_DBIAS_SLP_V)<<(RTC_CNTL_DIG_DBIAS_SLP_S)) +#define RTC_CNTL_DIG_DBIAS_SLP_V 0x7 +#define RTC_CNTL_DIG_DBIAS_SLP_S 8 +/* RTC_CNTL_SCK_DCAP_FORCE : R/W ;bitpos:[7] ;default: 1'd0 ; */ +/*description: N/A*/ +#define RTC_CNTL_SCK_DCAP_FORCE (BIT(7)) +#define RTC_CNTL_SCK_DCAP_FORCE_M (BIT(7)) +#define RTC_CNTL_SCK_DCAP_FORCE_V 0x1 +#define RTC_CNTL_SCK_DCAP_FORCE_S 7 + +#define RTC_CNTL_PWC_REG (DR_REG_RTCCNTL_BASE + 0x80) +/* RTC_CNTL_PD_EN : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: enable power down rtc_peri in sleep*/ +#define RTC_CNTL_PD_EN (BIT(20)) +#define RTC_CNTL_PD_EN_M (BIT(20)) +#define RTC_CNTL_PD_EN_V 0x1 +#define RTC_CNTL_PD_EN_S 20 +/* RTC_CNTL_FORCE_PU : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: rtc_peri force power up*/ +#define RTC_CNTL_PWC_FORCE_PU (BIT(19)) +#define RTC_CNTL_PWC_FORCE_PU_M (BIT(19)) +#define RTC_CNTL_PWC_FORCE_PU_V 0x1 +#define RTC_CNTL_PWC_FORCE_PU_S 19 +/* RTC_CNTL_FORCE_PD : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: rtc_peri force power down*/ +#define RTC_CNTL_PWC_FORCE_PD (BIT(18)) +#define RTC_CNTL_PWC_FORCE_PD_M (BIT(18)) +#define RTC_CNTL_PWC_FORCE_PD_V 0x1 +#define RTC_CNTL_PWC_FORCE_PD_S 18 +/* RTC_CNTL_SLOWMEM_PD_EN : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: enable power down RTC memory in sleep*/ +#define RTC_CNTL_SLOWMEM_PD_EN (BIT(17)) +#define RTC_CNTL_SLOWMEM_PD_EN_M (BIT(17)) +#define RTC_CNTL_SLOWMEM_PD_EN_V 0x1 +#define RTC_CNTL_SLOWMEM_PD_EN_S 17 +/* RTC_CNTL_SLOWMEM_FORCE_PU : R/W ;bitpos:[16] ;default: 1'b1 ; */ +/*description: RTC memory force power up*/ +#define RTC_CNTL_SLOWMEM_FORCE_PU (BIT(16)) +#define RTC_CNTL_SLOWMEM_FORCE_PU_M (BIT(16)) +#define RTC_CNTL_SLOWMEM_FORCE_PU_V 0x1 +#define RTC_CNTL_SLOWMEM_FORCE_PU_S 16 +/* RTC_CNTL_SLOWMEM_FORCE_PD : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: RTC memory force power down*/ +#define RTC_CNTL_SLOWMEM_FORCE_PD (BIT(15)) +#define RTC_CNTL_SLOWMEM_FORCE_PD_M (BIT(15)) +#define RTC_CNTL_SLOWMEM_FORCE_PD_V 0x1 +#define RTC_CNTL_SLOWMEM_FORCE_PD_S 15 +/* RTC_CNTL_FASTMEM_PD_EN : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: enable power down fast RTC memory in sleep*/ +#define RTC_CNTL_FASTMEM_PD_EN (BIT(14)) +#define RTC_CNTL_FASTMEM_PD_EN_M (BIT(14)) +#define RTC_CNTL_FASTMEM_PD_EN_V 0x1 +#define RTC_CNTL_FASTMEM_PD_EN_S 14 +/* RTC_CNTL_FASTMEM_FORCE_PU : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: Fast RTC memory force power up*/ +#define RTC_CNTL_FASTMEM_FORCE_PU (BIT(13)) +#define RTC_CNTL_FASTMEM_FORCE_PU_M (BIT(13)) +#define RTC_CNTL_FASTMEM_FORCE_PU_V 0x1 +#define RTC_CNTL_FASTMEM_FORCE_PU_S 13 +/* RTC_CNTL_FASTMEM_FORCE_PD : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: Fast RTC memory force power down*/ +#define RTC_CNTL_FASTMEM_FORCE_PD (BIT(12)) +#define RTC_CNTL_FASTMEM_FORCE_PD_M (BIT(12)) +#define RTC_CNTL_FASTMEM_FORCE_PD_V 0x1 +#define RTC_CNTL_FASTMEM_FORCE_PD_S 12 +/* RTC_CNTL_SLOWMEM_FORCE_LPU : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: RTC memory force no PD*/ +#define RTC_CNTL_SLOWMEM_FORCE_LPU (BIT(11)) +#define RTC_CNTL_SLOWMEM_FORCE_LPU_M (BIT(11)) +#define RTC_CNTL_SLOWMEM_FORCE_LPU_V 0x1 +#define RTC_CNTL_SLOWMEM_FORCE_LPU_S 11 +/* RTC_CNTL_SLOWMEM_FORCE_LPD : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: RTC memory force PD*/ +#define RTC_CNTL_SLOWMEM_FORCE_LPD (BIT(10)) +#define RTC_CNTL_SLOWMEM_FORCE_LPD_M (BIT(10)) +#define RTC_CNTL_SLOWMEM_FORCE_LPD_V 0x1 +#define RTC_CNTL_SLOWMEM_FORCE_LPD_S 10 +/* RTC_CNTL_SLOWMEM_FOLW_CPU : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: 1: RTC memory PD following CPU 0: RTC memory PD following RTC state machine*/ +#define RTC_CNTL_SLOWMEM_FOLW_CPU (BIT(9)) +#define RTC_CNTL_SLOWMEM_FOLW_CPU_M (BIT(9)) +#define RTC_CNTL_SLOWMEM_FOLW_CPU_V 0x1 +#define RTC_CNTL_SLOWMEM_FOLW_CPU_S 9 +/* RTC_CNTL_FASTMEM_FORCE_LPU : R/W ;bitpos:[8] ;default: 1'b1 ; */ +/*description: Fast RTC memory force no PD*/ +#define RTC_CNTL_FASTMEM_FORCE_LPU (BIT(8)) +#define RTC_CNTL_FASTMEM_FORCE_LPU_M (BIT(8)) +#define RTC_CNTL_FASTMEM_FORCE_LPU_V 0x1 +#define RTC_CNTL_FASTMEM_FORCE_LPU_S 8 +/* RTC_CNTL_FASTMEM_FORCE_LPD : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Fast RTC memory force PD*/ +#define RTC_CNTL_FASTMEM_FORCE_LPD (BIT(7)) +#define RTC_CNTL_FASTMEM_FORCE_LPD_M (BIT(7)) +#define RTC_CNTL_FASTMEM_FORCE_LPD_V 0x1 +#define RTC_CNTL_FASTMEM_FORCE_LPD_S 7 +/* RTC_CNTL_FASTMEM_FOLW_CPU : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: 1: Fast RTC memory PD following CPU 0: fast RTC memory PD following + RTC state machine*/ +#define RTC_CNTL_FASTMEM_FOLW_CPU (BIT(6)) +#define RTC_CNTL_FASTMEM_FOLW_CPU_M (BIT(6)) +#define RTC_CNTL_FASTMEM_FOLW_CPU_V 0x1 +#define RTC_CNTL_FASTMEM_FOLW_CPU_S 6 +/* RTC_CNTL_FORCE_NOISO : R/W ;bitpos:[5] ;default: 1'd1 ; */ +/*description: rtc_peri force no ISO*/ +#define RTC_CNTL_FORCE_NOISO (BIT(5)) +#define RTC_CNTL_FORCE_NOISO_M (BIT(5)) +#define RTC_CNTL_FORCE_NOISO_V 0x1 +#define RTC_CNTL_FORCE_NOISO_S 5 +/* RTC_CNTL_FORCE_ISO : R/W ;bitpos:[4] ;default: 1'd0 ; */ +/*description: rtc_peri force ISO*/ +#define RTC_CNTL_FORCE_ISO (BIT(4)) +#define RTC_CNTL_FORCE_ISO_M (BIT(4)) +#define RTC_CNTL_FORCE_ISO_V 0x1 +#define RTC_CNTL_FORCE_ISO_S 4 +/* RTC_CNTL_SLOWMEM_FORCE_ISO : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: RTC memory force ISO*/ +#define RTC_CNTL_SLOWMEM_FORCE_ISO (BIT(3)) +#define RTC_CNTL_SLOWMEM_FORCE_ISO_M (BIT(3)) +#define RTC_CNTL_SLOWMEM_FORCE_ISO_V 0x1 +#define RTC_CNTL_SLOWMEM_FORCE_ISO_S 3 +/* RTC_CNTL_SLOWMEM_FORCE_NOISO : R/W ;bitpos:[2] ;default: 1'b1 ; */ +/*description: RTC memory force no ISO*/ +#define RTC_CNTL_SLOWMEM_FORCE_NOISO (BIT(2)) +#define RTC_CNTL_SLOWMEM_FORCE_NOISO_M (BIT(2)) +#define RTC_CNTL_SLOWMEM_FORCE_NOISO_V 0x1 +#define RTC_CNTL_SLOWMEM_FORCE_NOISO_S 2 +/* RTC_CNTL_FASTMEM_FORCE_ISO : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Fast RTC memory force ISO*/ +#define RTC_CNTL_FASTMEM_FORCE_ISO (BIT(1)) +#define RTC_CNTL_FASTMEM_FORCE_ISO_M (BIT(1)) +#define RTC_CNTL_FASTMEM_FORCE_ISO_V 0x1 +#define RTC_CNTL_FASTMEM_FORCE_ISO_S 1 +/* RTC_CNTL_FASTMEM_FORCE_NOISO : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: Fast RTC memory force no ISO*/ +#define RTC_CNTL_FASTMEM_FORCE_NOISO (BIT(0)) +#define RTC_CNTL_FASTMEM_FORCE_NOISO_M (BIT(0)) +#define RTC_CNTL_FASTMEM_FORCE_NOISO_V 0x1 +#define RTC_CNTL_FASTMEM_FORCE_NOISO_S 0 + +#define RTC_CNTL_DIG_PWC_REG (DR_REG_RTCCNTL_BASE + 0x84) +/* RTC_CNTL_DG_WRAP_PD_EN : R/W ;bitpos:[31] ;default: 0 ; */ +/*description: enable power down digital core in sleep*/ +#define RTC_CNTL_DG_WRAP_PD_EN (BIT(31)) +#define RTC_CNTL_DG_WRAP_PD_EN_M (BIT(31)) +#define RTC_CNTL_DG_WRAP_PD_EN_V 0x1 +#define RTC_CNTL_DG_WRAP_PD_EN_S 31 +/* RTC_CNTL_WIFI_PD_EN : R/W ;bitpos:[30] ;default: 0 ; */ +/*description: enable power down wifi in sleep*/ +#define RTC_CNTL_WIFI_PD_EN (BIT(30)) +#define RTC_CNTL_WIFI_PD_EN_M (BIT(30)) +#define RTC_CNTL_WIFI_PD_EN_V 0x1 +#define RTC_CNTL_WIFI_PD_EN_S 30 +/* RTC_CNTL_INTER_RAM4_PD_EN : R/W ;bitpos:[29] ;default: 0 ; */ +/*description: enable power down internal SRAM 4 in sleep*/ +#define RTC_CNTL_INTER_RAM4_PD_EN (BIT(29)) +#define RTC_CNTL_INTER_RAM4_PD_EN_M (BIT(29)) +#define RTC_CNTL_INTER_RAM4_PD_EN_V 0x1 +#define RTC_CNTL_INTER_RAM4_PD_EN_S 29 +/* RTC_CNTL_INTER_RAM3_PD_EN : R/W ;bitpos:[28] ;default: 0 ; */ +/*description: enable power down internal SRAM 3 in sleep*/ +#define RTC_CNTL_INTER_RAM3_PD_EN (BIT(28)) +#define RTC_CNTL_INTER_RAM3_PD_EN_M (BIT(28)) +#define RTC_CNTL_INTER_RAM3_PD_EN_V 0x1 +#define RTC_CNTL_INTER_RAM3_PD_EN_S 28 +/* RTC_CNTL_INTER_RAM2_PD_EN : R/W ;bitpos:[27] ;default: 0 ; */ +/*description: enable power down internal SRAM 2 in sleep*/ +#define RTC_CNTL_INTER_RAM2_PD_EN (BIT(27)) +#define RTC_CNTL_INTER_RAM2_PD_EN_M (BIT(27)) +#define RTC_CNTL_INTER_RAM2_PD_EN_V 0x1 +#define RTC_CNTL_INTER_RAM2_PD_EN_S 27 +/* RTC_CNTL_INTER_RAM1_PD_EN : R/W ;bitpos:[26] ;default: 0 ; */ +/*description: enable power down internal SRAM 1 in sleep*/ +#define RTC_CNTL_INTER_RAM1_PD_EN (BIT(26)) +#define RTC_CNTL_INTER_RAM1_PD_EN_M (BIT(26)) +#define RTC_CNTL_INTER_RAM1_PD_EN_V 0x1 +#define RTC_CNTL_INTER_RAM1_PD_EN_S 26 +/* RTC_CNTL_INTER_RAM0_PD_EN : R/W ;bitpos:[25] ;default: 0 ; */ +/*description: enable power down internal SRAM 0 in sleep*/ +#define RTC_CNTL_INTER_RAM0_PD_EN (BIT(25)) +#define RTC_CNTL_INTER_RAM0_PD_EN_M (BIT(25)) +#define RTC_CNTL_INTER_RAM0_PD_EN_V 0x1 +#define RTC_CNTL_INTER_RAM0_PD_EN_S 25 +/* RTC_CNTL_ROM0_PD_EN : R/W ;bitpos:[24] ;default: 0 ; */ +/*description: enable power down ROM in sleep*/ +#define RTC_CNTL_ROM0_PD_EN (BIT(24)) +#define RTC_CNTL_ROM0_PD_EN_M (BIT(24)) +#define RTC_CNTL_ROM0_PD_EN_V 0x1 +#define RTC_CNTL_ROM0_PD_EN_S 24 +/* RTC_CNTL_DG_WRAP_FORCE_PU : R/W ;bitpos:[20] ;default: 1'd1 ; */ +/*description: digital core force power up*/ +#define RTC_CNTL_DG_WRAP_FORCE_PU (BIT(20)) +#define RTC_CNTL_DG_WRAP_FORCE_PU_M (BIT(20)) +#define RTC_CNTL_DG_WRAP_FORCE_PU_V 0x1 +#define RTC_CNTL_DG_WRAP_FORCE_PU_S 20 +/* RTC_CNTL_DG_WRAP_FORCE_PD : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: digital core force power down*/ +#define RTC_CNTL_DG_WRAP_FORCE_PD (BIT(19)) +#define RTC_CNTL_DG_WRAP_FORCE_PD_M (BIT(19)) +#define RTC_CNTL_DG_WRAP_FORCE_PD_V 0x1 +#define RTC_CNTL_DG_WRAP_FORCE_PD_S 19 +/* RTC_CNTL_WIFI_FORCE_PU : R/W ;bitpos:[18] ;default: 1'd1 ; */ +/*description: wifi force power up*/ +#define RTC_CNTL_WIFI_FORCE_PU (BIT(18)) +#define RTC_CNTL_WIFI_FORCE_PU_M (BIT(18)) +#define RTC_CNTL_WIFI_FORCE_PU_V 0x1 +#define RTC_CNTL_WIFI_FORCE_PU_S 18 +/* RTC_CNTL_WIFI_FORCE_PD : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: wifi force power down*/ +#define RTC_CNTL_WIFI_FORCE_PD (BIT(17)) +#define RTC_CNTL_WIFI_FORCE_PD_M (BIT(17)) +#define RTC_CNTL_WIFI_FORCE_PD_V 0x1 +#define RTC_CNTL_WIFI_FORCE_PD_S 17 +/* RTC_CNTL_INTER_RAM4_FORCE_PU : R/W ;bitpos:[16] ;default: 1'd1 ; */ +/*description: internal SRAM 4 force power up*/ +#define RTC_CNTL_INTER_RAM4_FORCE_PU (BIT(16)) +#define RTC_CNTL_INTER_RAM4_FORCE_PU_M (BIT(16)) +#define RTC_CNTL_INTER_RAM4_FORCE_PU_V 0x1 +#define RTC_CNTL_INTER_RAM4_FORCE_PU_S 16 +/* RTC_CNTL_INTER_RAM4_FORCE_PD : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: internal SRAM 4 force power down*/ +#define RTC_CNTL_INTER_RAM4_FORCE_PD (BIT(15)) +#define RTC_CNTL_INTER_RAM4_FORCE_PD_M (BIT(15)) +#define RTC_CNTL_INTER_RAM4_FORCE_PD_V 0x1 +#define RTC_CNTL_INTER_RAM4_FORCE_PD_S 15 +/* RTC_CNTL_INTER_RAM3_FORCE_PU : R/W ;bitpos:[14] ;default: 1'd1 ; */ +/*description: internal SRAM 3 force power up*/ +#define RTC_CNTL_INTER_RAM3_FORCE_PU (BIT(14)) +#define RTC_CNTL_INTER_RAM3_FORCE_PU_M (BIT(14)) +#define RTC_CNTL_INTER_RAM3_FORCE_PU_V 0x1 +#define RTC_CNTL_INTER_RAM3_FORCE_PU_S 14 +/* RTC_CNTL_INTER_RAM3_FORCE_PD : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: internal SRAM 3 force power down*/ +#define RTC_CNTL_INTER_RAM3_FORCE_PD (BIT(13)) +#define RTC_CNTL_INTER_RAM3_FORCE_PD_M (BIT(13)) +#define RTC_CNTL_INTER_RAM3_FORCE_PD_V 0x1 +#define RTC_CNTL_INTER_RAM3_FORCE_PD_S 13 +/* RTC_CNTL_INTER_RAM2_FORCE_PU : R/W ;bitpos:[12] ;default: 1'd1 ; */ +/*description: internal SRAM 2 force power up*/ +#define RTC_CNTL_INTER_RAM2_FORCE_PU (BIT(12)) +#define RTC_CNTL_INTER_RAM2_FORCE_PU_M (BIT(12)) +#define RTC_CNTL_INTER_RAM2_FORCE_PU_V 0x1 +#define RTC_CNTL_INTER_RAM2_FORCE_PU_S 12 +/* RTC_CNTL_INTER_RAM2_FORCE_PD : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: internal SRAM 2 force power down*/ +#define RTC_CNTL_INTER_RAM2_FORCE_PD (BIT(11)) +#define RTC_CNTL_INTER_RAM2_FORCE_PD_M (BIT(11)) +#define RTC_CNTL_INTER_RAM2_FORCE_PD_V 0x1 +#define RTC_CNTL_INTER_RAM2_FORCE_PD_S 11 +/* RTC_CNTL_INTER_RAM1_FORCE_PU : R/W ;bitpos:[10] ;default: 1'd1 ; */ +/*description: internal SRAM 1 force power up*/ +#define RTC_CNTL_INTER_RAM1_FORCE_PU (BIT(10)) +#define RTC_CNTL_INTER_RAM1_FORCE_PU_M (BIT(10)) +#define RTC_CNTL_INTER_RAM1_FORCE_PU_V 0x1 +#define RTC_CNTL_INTER_RAM1_FORCE_PU_S 10 +/* RTC_CNTL_INTER_RAM1_FORCE_PD : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: internal SRAM 1 force power down*/ +#define RTC_CNTL_INTER_RAM1_FORCE_PD (BIT(9)) +#define RTC_CNTL_INTER_RAM1_FORCE_PD_M (BIT(9)) +#define RTC_CNTL_INTER_RAM1_FORCE_PD_V 0x1 +#define RTC_CNTL_INTER_RAM1_FORCE_PD_S 9 +/* RTC_CNTL_INTER_RAM0_FORCE_PU : R/W ;bitpos:[8] ;default: 1'd1 ; */ +/*description: internal SRAM 0 force power up*/ +#define RTC_CNTL_INTER_RAM0_FORCE_PU (BIT(8)) +#define RTC_CNTL_INTER_RAM0_FORCE_PU_M (BIT(8)) +#define RTC_CNTL_INTER_RAM0_FORCE_PU_V 0x1 +#define RTC_CNTL_INTER_RAM0_FORCE_PU_S 8 +/* RTC_CNTL_INTER_RAM0_FORCE_PD : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: internal SRAM 0 force power down*/ +#define RTC_CNTL_INTER_RAM0_FORCE_PD (BIT(7)) +#define RTC_CNTL_INTER_RAM0_FORCE_PD_M (BIT(7)) +#define RTC_CNTL_INTER_RAM0_FORCE_PD_V 0x1 +#define RTC_CNTL_INTER_RAM0_FORCE_PD_S 7 +/* RTC_CNTL_ROM0_FORCE_PU : R/W ;bitpos:[6] ;default: 1'd1 ; */ +/*description: ROM force power up*/ +#define RTC_CNTL_ROM0_FORCE_PU (BIT(6)) +#define RTC_CNTL_ROM0_FORCE_PU_M (BIT(6)) +#define RTC_CNTL_ROM0_FORCE_PU_V 0x1 +#define RTC_CNTL_ROM0_FORCE_PU_S 6 +/* RTC_CNTL_ROM0_FORCE_PD : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: ROM force power down*/ +#define RTC_CNTL_ROM0_FORCE_PD (BIT(5)) +#define RTC_CNTL_ROM0_FORCE_PD_M (BIT(5)) +#define RTC_CNTL_ROM0_FORCE_PD_V 0x1 +#define RTC_CNTL_ROM0_FORCE_PD_S 5 +/* RTC_CNTL_LSLP_MEM_FORCE_PU : R/W ;bitpos:[4] ;default: 1'b1 ; */ +/*description: memories in digital core force no PD in sleep*/ +#define RTC_CNTL_LSLP_MEM_FORCE_PU (BIT(4)) +#define RTC_CNTL_LSLP_MEM_FORCE_PU_M (BIT(4)) +#define RTC_CNTL_LSLP_MEM_FORCE_PU_V 0x1 +#define RTC_CNTL_LSLP_MEM_FORCE_PU_S 4 +/* RTC_CNTL_LSLP_MEM_FORCE_PD : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: memories in digital core force PD in sleep*/ +#define RTC_CNTL_LSLP_MEM_FORCE_PD (BIT(3)) +#define RTC_CNTL_LSLP_MEM_FORCE_PD_M (BIT(3)) +#define RTC_CNTL_LSLP_MEM_FORCE_PD_V 0x1 +#define RTC_CNTL_LSLP_MEM_FORCE_PD_S 3 + +#define RTC_CNTL_DIG_ISO_REG (DR_REG_RTCCNTL_BASE + 0x88) +/* RTC_CNTL_DG_WRAP_FORCE_NOISO : R/W ;bitpos:[31] ;default: 1'd1 ; */ +/*description: digital core force no ISO*/ +#define RTC_CNTL_DG_WRAP_FORCE_NOISO (BIT(31)) +#define RTC_CNTL_DG_WRAP_FORCE_NOISO_M (BIT(31)) +#define RTC_CNTL_DG_WRAP_FORCE_NOISO_V 0x1 +#define RTC_CNTL_DG_WRAP_FORCE_NOISO_S 31 +/* RTC_CNTL_DG_WRAP_FORCE_ISO : R/W ;bitpos:[30] ;default: 1'd0 ; */ +/*description: digital core force ISO*/ +#define RTC_CNTL_DG_WRAP_FORCE_ISO (BIT(30)) +#define RTC_CNTL_DG_WRAP_FORCE_ISO_M (BIT(30)) +#define RTC_CNTL_DG_WRAP_FORCE_ISO_V 0x1 +#define RTC_CNTL_DG_WRAP_FORCE_ISO_S 30 +/* RTC_CNTL_WIFI_FORCE_NOISO : R/W ;bitpos:[29] ;default: 1'd1 ; */ +/*description: wifi force no ISO*/ +#define RTC_CNTL_WIFI_FORCE_NOISO (BIT(29)) +#define RTC_CNTL_WIFI_FORCE_NOISO_M (BIT(29)) +#define RTC_CNTL_WIFI_FORCE_NOISO_V 0x1 +#define RTC_CNTL_WIFI_FORCE_NOISO_S 29 +/* RTC_CNTL_WIFI_FORCE_ISO : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: wifi force ISO*/ +#define RTC_CNTL_WIFI_FORCE_ISO (BIT(28)) +#define RTC_CNTL_WIFI_FORCE_ISO_M (BIT(28)) +#define RTC_CNTL_WIFI_FORCE_ISO_V 0x1 +#define RTC_CNTL_WIFI_FORCE_ISO_S 28 +/* RTC_CNTL_INTER_RAM4_FORCE_NOISO : R/W ;bitpos:[27] ;default: 1'd1 ; */ +/*description: internal SRAM 4 force no ISO*/ +#define RTC_CNTL_INTER_RAM4_FORCE_NOISO (BIT(27)) +#define RTC_CNTL_INTER_RAM4_FORCE_NOISO_M (BIT(27)) +#define RTC_CNTL_INTER_RAM4_FORCE_NOISO_V 0x1 +#define RTC_CNTL_INTER_RAM4_FORCE_NOISO_S 27 +/* RTC_CNTL_INTER_RAM4_FORCE_ISO : R/W ;bitpos:[26] ;default: 1'd0 ; */ +/*description: internal SRAM 4 force ISO*/ +#define RTC_CNTL_INTER_RAM4_FORCE_ISO (BIT(26)) +#define RTC_CNTL_INTER_RAM4_FORCE_ISO_M (BIT(26)) +#define RTC_CNTL_INTER_RAM4_FORCE_ISO_V 0x1 +#define RTC_CNTL_INTER_RAM4_FORCE_ISO_S 26 +/* RTC_CNTL_INTER_RAM3_FORCE_NOISO : R/W ;bitpos:[25] ;default: 1'd1 ; */ +/*description: internal SRAM 3 force no ISO*/ +#define RTC_CNTL_INTER_RAM3_FORCE_NOISO (BIT(25)) +#define RTC_CNTL_INTER_RAM3_FORCE_NOISO_M (BIT(25)) +#define RTC_CNTL_INTER_RAM3_FORCE_NOISO_V 0x1 +#define RTC_CNTL_INTER_RAM3_FORCE_NOISO_S 25 +/* RTC_CNTL_INTER_RAM3_FORCE_ISO : R/W ;bitpos:[24] ;default: 1'd0 ; */ +/*description: internal SRAM 3 force ISO*/ +#define RTC_CNTL_INTER_RAM3_FORCE_ISO (BIT(24)) +#define RTC_CNTL_INTER_RAM3_FORCE_ISO_M (BIT(24)) +#define RTC_CNTL_INTER_RAM3_FORCE_ISO_V 0x1 +#define RTC_CNTL_INTER_RAM3_FORCE_ISO_S 24 +/* RTC_CNTL_INTER_RAM2_FORCE_NOISO : R/W ;bitpos:[23] ;default: 1'd1 ; */ +/*description: internal SRAM 2 force no ISO*/ +#define RTC_CNTL_INTER_RAM2_FORCE_NOISO (BIT(23)) +#define RTC_CNTL_INTER_RAM2_FORCE_NOISO_M (BIT(23)) +#define RTC_CNTL_INTER_RAM2_FORCE_NOISO_V 0x1 +#define RTC_CNTL_INTER_RAM2_FORCE_NOISO_S 23 +/* RTC_CNTL_INTER_RAM2_FORCE_ISO : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: internal SRAM 2 force ISO*/ +#define RTC_CNTL_INTER_RAM2_FORCE_ISO (BIT(22)) +#define RTC_CNTL_INTER_RAM2_FORCE_ISO_M (BIT(22)) +#define RTC_CNTL_INTER_RAM2_FORCE_ISO_V 0x1 +#define RTC_CNTL_INTER_RAM2_FORCE_ISO_S 22 +/* RTC_CNTL_INTER_RAM1_FORCE_NOISO : R/W ;bitpos:[21] ;default: 1'd1 ; */ +/*description: internal SRAM 1 force no ISO*/ +#define RTC_CNTL_INTER_RAM1_FORCE_NOISO (BIT(21)) +#define RTC_CNTL_INTER_RAM1_FORCE_NOISO_M (BIT(21)) +#define RTC_CNTL_INTER_RAM1_FORCE_NOISO_V 0x1 +#define RTC_CNTL_INTER_RAM1_FORCE_NOISO_S 21 +/* RTC_CNTL_INTER_RAM1_FORCE_ISO : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: internal SRAM 1 force ISO*/ +#define RTC_CNTL_INTER_RAM1_FORCE_ISO (BIT(20)) +#define RTC_CNTL_INTER_RAM1_FORCE_ISO_M (BIT(20)) +#define RTC_CNTL_INTER_RAM1_FORCE_ISO_V 0x1 +#define RTC_CNTL_INTER_RAM1_FORCE_ISO_S 20 +/* RTC_CNTL_INTER_RAM0_FORCE_NOISO : R/W ;bitpos:[19] ;default: 1'd1 ; */ +/*description: internal SRAM 0 force no ISO*/ +#define RTC_CNTL_INTER_RAM0_FORCE_NOISO (BIT(19)) +#define RTC_CNTL_INTER_RAM0_FORCE_NOISO_M (BIT(19)) +#define RTC_CNTL_INTER_RAM0_FORCE_NOISO_V 0x1 +#define RTC_CNTL_INTER_RAM0_FORCE_NOISO_S 19 +/* RTC_CNTL_INTER_RAM0_FORCE_ISO : R/W ;bitpos:[18] ;default: 1'd0 ; */ +/*description: internal SRAM 0 force ISO*/ +#define RTC_CNTL_INTER_RAM0_FORCE_ISO (BIT(18)) +#define RTC_CNTL_INTER_RAM0_FORCE_ISO_M (BIT(18)) +#define RTC_CNTL_INTER_RAM0_FORCE_ISO_V 0x1 +#define RTC_CNTL_INTER_RAM0_FORCE_ISO_S 18 +/* RTC_CNTL_ROM0_FORCE_NOISO : R/W ;bitpos:[17] ;default: 1'd1 ; */ +/*description: ROM force no ISO*/ +#define RTC_CNTL_ROM0_FORCE_NOISO (BIT(17)) +#define RTC_CNTL_ROM0_FORCE_NOISO_M (BIT(17)) +#define RTC_CNTL_ROM0_FORCE_NOISO_V 0x1 +#define RTC_CNTL_ROM0_FORCE_NOISO_S 17 +/* RTC_CNTL_ROM0_FORCE_ISO : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: ROM force ISO*/ +#define RTC_CNTL_ROM0_FORCE_ISO (BIT(16)) +#define RTC_CNTL_ROM0_FORCE_ISO_M (BIT(16)) +#define RTC_CNTL_ROM0_FORCE_ISO_V 0x1 +#define RTC_CNTL_ROM0_FORCE_ISO_S 16 +/* RTC_CNTL_DG_PAD_FORCE_HOLD : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: digital pad force hold*/ +#define RTC_CNTL_DG_PAD_FORCE_HOLD (BIT(15)) +#define RTC_CNTL_DG_PAD_FORCE_HOLD_M (BIT(15)) +#define RTC_CNTL_DG_PAD_FORCE_HOLD_V 0x1 +#define RTC_CNTL_DG_PAD_FORCE_HOLD_S 15 +/* RTC_CNTL_DG_PAD_FORCE_UNHOLD : R/W ;bitpos:[14] ;default: 1'd1 ; */ +/*description: digital pad force un-hold*/ +#define RTC_CNTL_DG_PAD_FORCE_UNHOLD (BIT(14)) +#define RTC_CNTL_DG_PAD_FORCE_UNHOLD_M (BIT(14)) +#define RTC_CNTL_DG_PAD_FORCE_UNHOLD_V 0x1 +#define RTC_CNTL_DG_PAD_FORCE_UNHOLD_S 14 +/* RTC_CNTL_DG_PAD_FORCE_ISO : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: digital pad force ISO*/ +#define RTC_CNTL_DG_PAD_FORCE_ISO (BIT(13)) +#define RTC_CNTL_DG_PAD_FORCE_ISO_M (BIT(13)) +#define RTC_CNTL_DG_PAD_FORCE_ISO_V 0x1 +#define RTC_CNTL_DG_PAD_FORCE_ISO_S 13 +/* RTC_CNTL_DG_PAD_FORCE_NOISO : R/W ;bitpos:[12] ;default: 1'd1 ; */ +/*description: digital pad force no ISO*/ +#define RTC_CNTL_DG_PAD_FORCE_NOISO (BIT(12)) +#define RTC_CNTL_DG_PAD_FORCE_NOISO_M (BIT(12)) +#define RTC_CNTL_DG_PAD_FORCE_NOISO_V 0x1 +#define RTC_CNTL_DG_PAD_FORCE_NOISO_S 12 +/* RTC_CNTL_DG_PAD_AUTOHOLD_EN : R/W ;bitpos:[11] ;default: 1'd0 ; */ +/*description: digital pad enable auto-hold*/ +#define RTC_CNTL_DG_PAD_AUTOHOLD_EN (BIT(11)) +#define RTC_CNTL_DG_PAD_AUTOHOLD_EN_M (BIT(11)) +#define RTC_CNTL_DG_PAD_AUTOHOLD_EN_V 0x1 +#define RTC_CNTL_DG_PAD_AUTOHOLD_EN_S 11 +/* RTC_CNTL_CLR_DG_PAD_AUTOHOLD : WO ;bitpos:[10] ;default: 1'd0 ; */ +/*description: wtite only register to clear digital pad auto-hold*/ +#define RTC_CNTL_CLR_DG_PAD_AUTOHOLD (BIT(10)) +#define RTC_CNTL_CLR_DG_PAD_AUTOHOLD_M (BIT(10)) +#define RTC_CNTL_CLR_DG_PAD_AUTOHOLD_V 0x1 +#define RTC_CNTL_CLR_DG_PAD_AUTOHOLD_S 10 +/* RTC_CNTL_DG_PAD_AUTOHOLD : RO ;bitpos:[9] ;default: 1'd0 ; */ +/*description: read only register to indicate digital pad auto-hold status*/ +#define RTC_CNTL_DG_PAD_AUTOHOLD (BIT(9)) +#define RTC_CNTL_DG_PAD_AUTOHOLD_M (BIT(9)) +#define RTC_CNTL_DG_PAD_AUTOHOLD_V 0x1 +#define RTC_CNTL_DG_PAD_AUTOHOLD_S 9 +/* RTC_CNTL_DIG_ISO_FORCE_ON : R/W ;bitpos:[8] ;default: 1'd0 ; */ +/*description: */ +#define RTC_CNTL_DIG_ISO_FORCE_ON (BIT(8)) +#define RTC_CNTL_DIG_ISO_FORCE_ON_M (BIT(8)) +#define RTC_CNTL_DIG_ISO_FORCE_ON_V 0x1 +#define RTC_CNTL_DIG_ISO_FORCE_ON_S 8 +/* RTC_CNTL_DIG_ISO_FORCE_OFF : R/W ;bitpos:[7] ;default: 1'd0 ; */ +/*description: */ +#define RTC_CNTL_DIG_ISO_FORCE_OFF (BIT(7)) +#define RTC_CNTL_DIG_ISO_FORCE_OFF_M (BIT(7)) +#define RTC_CNTL_DIG_ISO_FORCE_OFF_V 0x1 +#define RTC_CNTL_DIG_ISO_FORCE_OFF_S 7 + +#define RTC_CNTL_WDTCONFIG0_REG (DR_REG_RTCCNTL_BASE + 0x8c) +/* RTC_CNTL_WDT_EN : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: enable RTC WDT*/ +#define RTC_CNTL_WDT_EN (BIT(31)) +#define RTC_CNTL_WDT_EN_M (BIT(31)) +#define RTC_CNTL_WDT_EN_V 0x1 +#define RTC_CNTL_WDT_EN_S 31 +/* RTC_CNTL_WDT_STG0 : R/W ;bitpos:[30:28] ;default: 3'h0 ; */ +/*description: 1: interrupt stage en 2: CPU reset stage en 3: system reset + stage en 4: RTC reset stage en*/ +#define RTC_CNTL_WDT_STG0 0x00000007 +#define RTC_CNTL_WDT_STG0_M ((RTC_CNTL_WDT_STG0_V)<<(RTC_CNTL_WDT_STG0_S)) +#define RTC_CNTL_WDT_STG0_V 0x7 +#define RTC_CNTL_WDT_STG0_S 28 +/* RTC_CNTL_WDT_STG1 : R/W ;bitpos:[27:25] ;default: 3'h0 ; */ +/*description: 1: interrupt stage en 2: CPU reset stage en 3: system reset + stage en 4: RTC reset stage en*/ +#define RTC_CNTL_WDT_STG1 0x00000007 +#define RTC_CNTL_WDT_STG1_M ((RTC_CNTL_WDT_STG1_V)<<(RTC_CNTL_WDT_STG1_S)) +#define RTC_CNTL_WDT_STG1_V 0x7 +#define RTC_CNTL_WDT_STG1_S 25 +/* RTC_CNTL_WDT_STG2 : R/W ;bitpos:[24:22] ;default: 3'h0 ; */ +/*description: 1: interrupt stage en 2: CPU reset stage en 3: system reset + stage en 4: RTC reset stage en*/ +#define RTC_CNTL_WDT_STG2 0x00000007 +#define RTC_CNTL_WDT_STG2_M ((RTC_CNTL_WDT_STG2_V)<<(RTC_CNTL_WDT_STG2_S)) +#define RTC_CNTL_WDT_STG2_V 0x7 +#define RTC_CNTL_WDT_STG2_S 22 +/* RTC_CNTL_WDT_STG3 : R/W ;bitpos:[21:19] ;default: 3'h0 ; */ +/*description: 1: interrupt stage en 2: CPU reset stage en 3: system reset + stage en 4: RTC reset stage en*/ +#define RTC_CNTL_WDT_STG3 0x00000007 +#define RTC_CNTL_WDT_STG3_M ((RTC_CNTL_WDT_STG3_V)<<(RTC_CNTL_WDT_STG3_S)) +#define RTC_CNTL_WDT_STG3_V 0x7 +#define RTC_CNTL_WDT_STG3_S 19 +/* RTC_CNTL_WDT_EDGE_INT_EN : R/W ;bitpos:[18] ;default: 1'h0 ; */ +/*description: N/A*/ +#define RTC_CNTL_WDT_EDGE_INT_EN (BIT(18)) +#define RTC_CNTL_WDT_EDGE_INT_EN_M (BIT(18)) +#define RTC_CNTL_WDT_EDGE_INT_EN_V 0x1 +#define RTC_CNTL_WDT_EDGE_INT_EN_S 18 +/* RTC_CNTL_WDT_LEVEL_INT_EN : R/W ;bitpos:[17] ;default: 1'h0 ; */ +/*description: N/A*/ +#define RTC_CNTL_WDT_LEVEL_INT_EN (BIT(17)) +#define RTC_CNTL_WDT_LEVEL_INT_EN_M (BIT(17)) +#define RTC_CNTL_WDT_LEVEL_INT_EN_V 0x1 +#define RTC_CNTL_WDT_LEVEL_INT_EN_S 17 +/* RTC_CNTL_WDT_CPU_RESET_LENGTH : R/W ;bitpos:[16:14] ;default: 3'h1 ; */ +/*description: CPU reset counter length*/ +#define RTC_CNTL_WDT_CPU_RESET_LENGTH 0x00000007 +#define RTC_CNTL_WDT_CPU_RESET_LENGTH_M ((RTC_CNTL_WDT_CPU_RESET_LENGTH_V)<<(RTC_CNTL_WDT_CPU_RESET_LENGTH_S)) +#define RTC_CNTL_WDT_CPU_RESET_LENGTH_V 0x7 +#define RTC_CNTL_WDT_CPU_RESET_LENGTH_S 14 +/* RTC_CNTL_WDT_SYS_RESET_LENGTH : R/W ;bitpos:[13:11] ;default: 3'h1 ; */ +/*description: system reset counter length*/ +#define RTC_CNTL_WDT_SYS_RESET_LENGTH 0x00000007 +#define RTC_CNTL_WDT_SYS_RESET_LENGTH_M ((RTC_CNTL_WDT_SYS_RESET_LENGTH_V)<<(RTC_CNTL_WDT_SYS_RESET_LENGTH_S)) +#define RTC_CNTL_WDT_SYS_RESET_LENGTH_V 0x7 +#define RTC_CNTL_WDT_SYS_RESET_LENGTH_S 11 +/* RTC_CNTL_WDT_FLASHBOOT_MOD_EN : R/W ;bitpos:[10] ;default: 1'h1 ; */ +/*description: enable WDT in flash boot*/ +#define RTC_CNTL_WDT_FLASHBOOT_MOD_EN (BIT(10)) +#define RTC_CNTL_WDT_FLASHBOOT_MOD_EN_M (BIT(10)) +#define RTC_CNTL_WDT_FLASHBOOT_MOD_EN_V 0x1 +#define RTC_CNTL_WDT_FLASHBOOT_MOD_EN_S 10 +/* RTC_CNTL_WDT_PROCPU_RESET_EN : R/W ;bitpos:[9] ;default: 1'd0 ; */ +/*description: enable WDT reset PRO CPU*/ +#define RTC_CNTL_WDT_PROCPU_RESET_EN (BIT(9)) +#define RTC_CNTL_WDT_PROCPU_RESET_EN_M (BIT(9)) +#define RTC_CNTL_WDT_PROCPU_RESET_EN_V 0x1 +#define RTC_CNTL_WDT_PROCPU_RESET_EN_S 9 +/* RTC_CNTL_WDT_APPCPU_RESET_EN : R/W ;bitpos:[8] ;default: 1'd0 ; */ +/*description: enable WDT reset APP CPU*/ +#define RTC_CNTL_WDT_APPCPU_RESET_EN (BIT(8)) +#define RTC_CNTL_WDT_APPCPU_RESET_EN_M (BIT(8)) +#define RTC_CNTL_WDT_APPCPU_RESET_EN_V 0x1 +#define RTC_CNTL_WDT_APPCPU_RESET_EN_S 8 +/* RTC_CNTL_WDT_PAUSE_IN_SLP : R/W ;bitpos:[7] ;default: 1'd1 ; */ +/*description: pause WDT in sleep*/ +#define RTC_CNTL_WDT_PAUSE_IN_SLP (BIT(7)) +#define RTC_CNTL_WDT_PAUSE_IN_SLP_M (BIT(7)) +#define RTC_CNTL_WDT_PAUSE_IN_SLP_V 0x1 +#define RTC_CNTL_WDT_PAUSE_IN_SLP_S 7 + +#define RTC_CNTL_WDTCONFIG1_REG (DR_REG_RTCCNTL_BASE + 0x90) +/* RTC_CNTL_WDT_STG0_HOLD : R/W ;bitpos:[31:0] ;default: 32'd128000 ; */ +/*description: */ +#define RTC_CNTL_WDT_STG0_HOLD 0xFFFFFFFF +#define RTC_CNTL_WDT_STG0_HOLD_M ((RTC_CNTL_WDT_STG0_HOLD_V)<<(RTC_CNTL_WDT_STG0_HOLD_S)) +#define RTC_CNTL_WDT_STG0_HOLD_V 0xFFFFFFFF +#define RTC_CNTL_WDT_STG0_HOLD_S 0 + +#define RTC_CNTL_WDTCONFIG2_REG (DR_REG_RTCCNTL_BASE + 0x94) +/* RTC_CNTL_WDT_STG1_HOLD : R/W ;bitpos:[31:0] ;default: 32'd80000 ; */ +/*description: */ +#define RTC_CNTL_WDT_STG1_HOLD 0xFFFFFFFF +#define RTC_CNTL_WDT_STG1_HOLD_M ((RTC_CNTL_WDT_STG1_HOLD_V)<<(RTC_CNTL_WDT_STG1_HOLD_S)) +#define RTC_CNTL_WDT_STG1_HOLD_V 0xFFFFFFFF +#define RTC_CNTL_WDT_STG1_HOLD_S 0 + +#define RTC_CNTL_WDTCONFIG3_REG (DR_REG_RTCCNTL_BASE + 0x98) +/* RTC_CNTL_WDT_STG2_HOLD : R/W ;bitpos:[31:0] ;default: 32'hfff ; */ +/*description: */ +#define RTC_CNTL_WDT_STG2_HOLD 0xFFFFFFFF +#define RTC_CNTL_WDT_STG2_HOLD_M ((RTC_CNTL_WDT_STG2_HOLD_V)<<(RTC_CNTL_WDT_STG2_HOLD_S)) +#define RTC_CNTL_WDT_STG2_HOLD_V 0xFFFFFFFF +#define RTC_CNTL_WDT_STG2_HOLD_S 0 + +#define RTC_CNTL_WDTCONFIG4_REG (DR_REG_RTCCNTL_BASE + 0x9c) +/* RTC_CNTL_WDT_STG3_HOLD : R/W ;bitpos:[31:0] ;default: 32'hfff ; */ +/*description: */ +#define RTC_CNTL_WDT_STG3_HOLD 0xFFFFFFFF +#define RTC_CNTL_WDT_STG3_HOLD_M ((RTC_CNTL_WDT_STG3_HOLD_V)<<(RTC_CNTL_WDT_STG3_HOLD_S)) +#define RTC_CNTL_WDT_STG3_HOLD_V 0xFFFFFFFF +#define RTC_CNTL_WDT_STG3_HOLD_S 0 + +#define RTC_CNTL_WDTFEED_REG (DR_REG_RTCCNTL_BASE + 0xa0) +/* RTC_CNTL_WDT_FEED : WO ;bitpos:[31] ;default: 1'd0 ; */ +/*description: */ +#define RTC_CNTL_WDT_FEED (BIT(31)) +#define RTC_CNTL_WDT_FEED_M (BIT(31)) +#define RTC_CNTL_WDT_FEED_V 0x1 +#define RTC_CNTL_WDT_FEED_S 31 + +#define RTC_CNTL_WDTWPROTECT_REG (DR_REG_RTCCNTL_BASE + 0xa4) +/* RTC_CNTL_WDT_WKEY : R/W ;bitpos:[31:0] ;default: 32'h50d83aa1 ; */ +/*description: */ +#define RTC_CNTL_WDT_WKEY 0xFFFFFFFF +#define RTC_CNTL_WDT_WKEY_M ((RTC_CNTL_WDT_WKEY_V)<<(RTC_CNTL_WDT_WKEY_S)) +#define RTC_CNTL_WDT_WKEY_V 0xFFFFFFFF +#define RTC_CNTL_WDT_WKEY_S 0 + +#define RTC_CNTL_TEST_MUX_REG (DR_REG_RTCCNTL_BASE + 0xa8) +/* RTC_CNTL_DTEST_RTC : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: DTEST_RTC*/ +#define RTC_CNTL_DTEST_RTC 0x00000003 +#define RTC_CNTL_DTEST_RTC_M ((RTC_CNTL_DTEST_RTC_V)<<(RTC_CNTL_DTEST_RTC_S)) +#define RTC_CNTL_DTEST_RTC_V 0x3 +#define RTC_CNTL_DTEST_RTC_S 30 +/* RTC_CNTL_ENT_RTC : R/W ;bitpos:[29] ;default: 1'd0 ; */ +/*description: ENT_RTC*/ +#define RTC_CNTL_ENT_RTC (BIT(29)) +#define RTC_CNTL_ENT_RTC_M (BIT(29)) +#define RTC_CNTL_ENT_RTC_V 0x1 +#define RTC_CNTL_ENT_RTC_S 29 + +#define RTC_CNTL_SW_CPU_STALL_REG (DR_REG_RTCCNTL_BASE + 0xac) +/* RTC_CNTL_SW_STALL_PROCPU_C1 : R/W ;bitpos:[31:26] ;default: 6'b0 ; */ +/*description: {reg_sw_stall_procpu_c1[5:0] reg_sw_stall_procpu_c0[1:0]} == + 0x86 will stall PRO CPU*/ +#define RTC_CNTL_SW_STALL_PROCPU_C1 0x0000003F +#define RTC_CNTL_SW_STALL_PROCPU_C1_M ((RTC_CNTL_SW_STALL_PROCPU_C1_V)<<(RTC_CNTL_SW_STALL_PROCPU_C1_S)) +#define RTC_CNTL_SW_STALL_PROCPU_C1_V 0x3F +#define RTC_CNTL_SW_STALL_PROCPU_C1_S 26 +/* RTC_CNTL_SW_STALL_APPCPU_C1 : R/W ;bitpos:[25:20] ;default: 6'b0 ; */ +/*description: {reg_sw_stall_appcpu_c1[5:0] reg_sw_stall_appcpu_c0[1:0]} == + 0x86 will stall APP CPU*/ +#define RTC_CNTL_SW_STALL_APPCPU_C1 0x0000003F +#define RTC_CNTL_SW_STALL_APPCPU_C1_M ((RTC_CNTL_SW_STALL_APPCPU_C1_V)<<(RTC_CNTL_SW_STALL_APPCPU_C1_S)) +#define RTC_CNTL_SW_STALL_APPCPU_C1_V 0x3F +#define RTC_CNTL_SW_STALL_APPCPU_C1_S 20 + +#define RTC_CNTL_STORE4_REG (DR_REG_RTCCNTL_BASE + 0xb0) +/* RTC_CNTL_SCRATCH4 : R/W ;bitpos:[31:0] ;default: 0 ; */ +/*description: 32-bit general purpose retention register*/ +#define RTC_CNTL_SCRATCH4 0xFFFFFFFF +#define RTC_CNTL_SCRATCH4_M ((RTC_CNTL_SCRATCH4_V)<<(RTC_CNTL_SCRATCH4_S)) +#define RTC_CNTL_SCRATCH4_V 0xFFFFFFFF +#define RTC_CNTL_SCRATCH4_S 0 + +#define RTC_CNTL_STORE5_REG (DR_REG_RTCCNTL_BASE + 0xb4) +/* RTC_CNTL_SCRATCH5 : R/W ;bitpos:[31:0] ;default: 0 ; */ +/*description: 32-bit general purpose retention register*/ +#define RTC_CNTL_SCRATCH5 0xFFFFFFFF +#define RTC_CNTL_SCRATCH5_M ((RTC_CNTL_SCRATCH5_V)<<(RTC_CNTL_SCRATCH5_S)) +#define RTC_CNTL_SCRATCH5_V 0xFFFFFFFF +#define RTC_CNTL_SCRATCH5_S 0 + +#define RTC_CNTL_STORE6_REG (DR_REG_RTCCNTL_BASE + 0xb8) +/* RTC_CNTL_SCRATCH6 : R/W ;bitpos:[31:0] ;default: 0 ; */ +/*description: 32-bit general purpose retention register*/ +#define RTC_CNTL_SCRATCH6 0xFFFFFFFF +#define RTC_CNTL_SCRATCH6_M ((RTC_CNTL_SCRATCH6_V)<<(RTC_CNTL_SCRATCH6_S)) +#define RTC_CNTL_SCRATCH6_V 0xFFFFFFFF +#define RTC_CNTL_SCRATCH6_S 0 + +#define RTC_CNTL_STORE7_REG (DR_REG_RTCCNTL_BASE + 0xbc) +/* RTC_CNTL_SCRATCH7 : R/W ;bitpos:[31:0] ;default: 0 ; */ +/*description: 32-bit general purpose retention register*/ +#define RTC_CNTL_SCRATCH7 0xFFFFFFFF +#define RTC_CNTL_SCRATCH7_M ((RTC_CNTL_SCRATCH7_V)<<(RTC_CNTL_SCRATCH7_S)) +#define RTC_CNTL_SCRATCH7_V 0xFFFFFFFF +#define RTC_CNTL_SCRATCH7_S 0 + +#define RTC_CNTL_DIAG0_REG (DR_REG_RTCCNTL_BASE + 0xc0) +/* RTC_CNTL_LOW_POWER_DIAG0 : RO ;bitpos:[31:0] ;default: 0 ; */ +/*description: */ +#define RTC_CNTL_LOW_POWER_DIAG0 0xFFFFFFFF +#define RTC_CNTL_LOW_POWER_DIAG0_M ((RTC_CNTL_LOW_POWER_DIAG0_V)<<(RTC_CNTL_LOW_POWER_DIAG0_S)) +#define RTC_CNTL_LOW_POWER_DIAG0_V 0xFFFFFFFF +#define RTC_CNTL_LOW_POWER_DIAG0_S 0 + +#define RTC_CNTL_DIAG1_REG (DR_REG_RTCCNTL_BASE + 0xc4) +/* RTC_CNTL_LOW_POWER_DIAG1 : RO ;bitpos:[31:0] ;default: 0 ; */ +/*description: */ +#define RTC_CNTL_LOW_POWER_DIAG1 0xFFFFFFFF +#define RTC_CNTL_LOW_POWER_DIAG1_M ((RTC_CNTL_LOW_POWER_DIAG1_V)<<(RTC_CNTL_LOW_POWER_DIAG1_S)) +#define RTC_CNTL_LOW_POWER_DIAG1_V 0xFFFFFFFF +#define RTC_CNTL_LOW_POWER_DIAG1_S 0 + +#define RTC_CNTL_HOLD_FORCE_REG (DR_REG_RTCCNTL_BASE + 0xc8) +/* RTC_CNTL_X32N_HOLD_FORCE : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_X32N_HOLD_FORCE (BIT(17)) +#define RTC_CNTL_X32N_HOLD_FORCE_M (BIT(17)) +#define RTC_CNTL_X32N_HOLD_FORCE_V 0x1 +#define RTC_CNTL_X32N_HOLD_FORCE_S 17 +/* RTC_CNTL_X32P_HOLD_FORCE : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_X32P_HOLD_FORCE (BIT(16)) +#define RTC_CNTL_X32P_HOLD_FORCE_M (BIT(16)) +#define RTC_CNTL_X32P_HOLD_FORCE_V 0x1 +#define RTC_CNTL_X32P_HOLD_FORCE_S 16 +/* RTC_CNTL_TOUCH_PAD7_HOLD_FORCE : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_TOUCH_PAD7_HOLD_FORCE (BIT(15)) +#define RTC_CNTL_TOUCH_PAD7_HOLD_FORCE_M (BIT(15)) +#define RTC_CNTL_TOUCH_PAD7_HOLD_FORCE_V 0x1 +#define RTC_CNTL_TOUCH_PAD7_HOLD_FORCE_S 15 +/* RTC_CNTL_TOUCH_PAD6_HOLD_FORCE : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_TOUCH_PAD6_HOLD_FORCE (BIT(14)) +#define RTC_CNTL_TOUCH_PAD6_HOLD_FORCE_M (BIT(14)) +#define RTC_CNTL_TOUCH_PAD6_HOLD_FORCE_V 0x1 +#define RTC_CNTL_TOUCH_PAD6_HOLD_FORCE_S 14 +/* RTC_CNTL_TOUCH_PAD5_HOLD_FORCE : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_TOUCH_PAD5_HOLD_FORCE (BIT(13)) +#define RTC_CNTL_TOUCH_PAD5_HOLD_FORCE_M (BIT(13)) +#define RTC_CNTL_TOUCH_PAD5_HOLD_FORCE_V 0x1 +#define RTC_CNTL_TOUCH_PAD5_HOLD_FORCE_S 13 +/* RTC_CNTL_TOUCH_PAD4_HOLD_FORCE : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_TOUCH_PAD4_HOLD_FORCE (BIT(12)) +#define RTC_CNTL_TOUCH_PAD4_HOLD_FORCE_M (BIT(12)) +#define RTC_CNTL_TOUCH_PAD4_HOLD_FORCE_V 0x1 +#define RTC_CNTL_TOUCH_PAD4_HOLD_FORCE_S 12 +/* RTC_CNTL_TOUCH_PAD3_HOLD_FORCE : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_TOUCH_PAD3_HOLD_FORCE (BIT(11)) +#define RTC_CNTL_TOUCH_PAD3_HOLD_FORCE_M (BIT(11)) +#define RTC_CNTL_TOUCH_PAD3_HOLD_FORCE_V 0x1 +#define RTC_CNTL_TOUCH_PAD3_HOLD_FORCE_S 11 +/* RTC_CNTL_TOUCH_PAD2_HOLD_FORCE : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_TOUCH_PAD2_HOLD_FORCE (BIT(10)) +#define RTC_CNTL_TOUCH_PAD2_HOLD_FORCE_M (BIT(10)) +#define RTC_CNTL_TOUCH_PAD2_HOLD_FORCE_V 0x1 +#define RTC_CNTL_TOUCH_PAD2_HOLD_FORCE_S 10 +/* RTC_CNTL_TOUCH_PAD1_HOLD_FORCE : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_TOUCH_PAD1_HOLD_FORCE (BIT(9)) +#define RTC_CNTL_TOUCH_PAD1_HOLD_FORCE_M (BIT(9)) +#define RTC_CNTL_TOUCH_PAD1_HOLD_FORCE_V 0x1 +#define RTC_CNTL_TOUCH_PAD1_HOLD_FORCE_S 9 +/* RTC_CNTL_TOUCH_PAD0_HOLD_FORCE : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_TOUCH_PAD0_HOLD_FORCE (BIT(8)) +#define RTC_CNTL_TOUCH_PAD0_HOLD_FORCE_M (BIT(8)) +#define RTC_CNTL_TOUCH_PAD0_HOLD_FORCE_V 0x1 +#define RTC_CNTL_TOUCH_PAD0_HOLD_FORCE_S 8 +/* RTC_CNTL_SENSE4_HOLD_FORCE : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_SENSE4_HOLD_FORCE (BIT(7)) +#define RTC_CNTL_SENSE4_HOLD_FORCE_M (BIT(7)) +#define RTC_CNTL_SENSE4_HOLD_FORCE_V 0x1 +#define RTC_CNTL_SENSE4_HOLD_FORCE_S 7 +/* RTC_CNTL_SENSE3_HOLD_FORCE : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_SENSE3_HOLD_FORCE (BIT(6)) +#define RTC_CNTL_SENSE3_HOLD_FORCE_M (BIT(6)) +#define RTC_CNTL_SENSE3_HOLD_FORCE_V 0x1 +#define RTC_CNTL_SENSE3_HOLD_FORCE_S 6 +/* RTC_CNTL_SENSE2_HOLD_FORCE : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_SENSE2_HOLD_FORCE (BIT(5)) +#define RTC_CNTL_SENSE2_HOLD_FORCE_M (BIT(5)) +#define RTC_CNTL_SENSE2_HOLD_FORCE_V 0x1 +#define RTC_CNTL_SENSE2_HOLD_FORCE_S 5 +/* RTC_CNTL_SENSE1_HOLD_FORCE : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_SENSE1_HOLD_FORCE (BIT(4)) +#define RTC_CNTL_SENSE1_HOLD_FORCE_M (BIT(4)) +#define RTC_CNTL_SENSE1_HOLD_FORCE_V 0x1 +#define RTC_CNTL_SENSE1_HOLD_FORCE_S 4 +/* RTC_CNTL_PDAC2_HOLD_FORCE : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_PDAC2_HOLD_FORCE (BIT(3)) +#define RTC_CNTL_PDAC2_HOLD_FORCE_M (BIT(3)) +#define RTC_CNTL_PDAC2_HOLD_FORCE_V 0x1 +#define RTC_CNTL_PDAC2_HOLD_FORCE_S 3 +/* RTC_CNTL_PDAC1_HOLD_FORCE : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_PDAC1_HOLD_FORCE (BIT(2)) +#define RTC_CNTL_PDAC1_HOLD_FORCE_M (BIT(2)) +#define RTC_CNTL_PDAC1_HOLD_FORCE_V 0x1 +#define RTC_CNTL_PDAC1_HOLD_FORCE_S 2 +/* RTC_CNTL_ADC2_HOLD_FORCE : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_ADC2_HOLD_FORCE (BIT(1)) +#define RTC_CNTL_ADC2_HOLD_FORCE_M (BIT(1)) +#define RTC_CNTL_ADC2_HOLD_FORCE_V 0x1 +#define RTC_CNTL_ADC2_HOLD_FORCE_S 1 +/* RTC_CNTL_ADC1_HOLD_FORCE : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define RTC_CNTL_ADC1_HOLD_FORCE (BIT(0)) +#define RTC_CNTL_ADC1_HOLD_FORCE_M (BIT(0)) +#define RTC_CNTL_ADC1_HOLD_FORCE_V 0x1 +#define RTC_CNTL_ADC1_HOLD_FORCE_S 0 + +#define RTC_CNTL_EXT_WAKEUP1_REG (DR_REG_RTCCNTL_BASE + 0xcc) +/* RTC_CNTL_EXT_WAKEUP1_STATUS_CLR : WO ;bitpos:[18] ;default: 1'd0 ; */ +/*description: clear ext wakeup1 status*/ +#define RTC_CNTL_EXT_WAKEUP1_STATUS_CLR (BIT(18)) +#define RTC_CNTL_EXT_WAKEUP1_STATUS_CLR_M (BIT(18)) +#define RTC_CNTL_EXT_WAKEUP1_STATUS_CLR_V 0x1 +#define RTC_CNTL_EXT_WAKEUP1_STATUS_CLR_S 18 +/* RTC_CNTL_EXT_WAKEUP1_SEL : R/W ;bitpos:[17:0] ;default: 18'd0 ; */ +/*description: Bitmap to select RTC pads for ext wakeup1*/ +#define RTC_CNTL_EXT_WAKEUP1_SEL 0x0003FFFF +#define RTC_CNTL_EXT_WAKEUP1_SEL_M ((RTC_CNTL_EXT_WAKEUP1_SEL_V)<<(RTC_CNTL_EXT_WAKEUP1_SEL_S)) +#define RTC_CNTL_EXT_WAKEUP1_SEL_V 0x3FFFF +#define RTC_CNTL_EXT_WAKEUP1_SEL_S 0 + +#define RTC_CNTL_EXT_WAKEUP1_STATUS_REG (DR_REG_RTCCNTL_BASE + 0xd0) +/* RTC_CNTL_EXT_WAKEUP1_STATUS : RO ;bitpos:[17:0] ;default: 18'd0 ; */ +/*description: ext wakeup1 status*/ +#define RTC_CNTL_EXT_WAKEUP1_STATUS 0x0003FFFF +#define RTC_CNTL_EXT_WAKEUP1_STATUS_M ((RTC_CNTL_EXT_WAKEUP1_STATUS_V)<<(RTC_CNTL_EXT_WAKEUP1_STATUS_S)) +#define RTC_CNTL_EXT_WAKEUP1_STATUS_V 0x3FFFF +#define RTC_CNTL_EXT_WAKEUP1_STATUS_S 0 + +#define RTC_CNTL_BROWN_OUT_REG (DR_REG_RTCCNTL_BASE + 0xd4) +/* RTC_CNTL_BROWN_OUT_DET : RO ;bitpos:[31] ;default: 1'b0 ; */ +/*description: brown out detect*/ +#define RTC_CNTL_BROWN_OUT_DET (BIT(31)) +#define RTC_CNTL_BROWN_OUT_DET_M (BIT(31)) +#define RTC_CNTL_BROWN_OUT_DET_V 0x1 +#define RTC_CNTL_BROWN_OUT_DET_S 31 +/* RTC_CNTL_BROWN_OUT_ENA : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: enable brown out*/ +#define RTC_CNTL_BROWN_OUT_ENA (BIT(30)) +#define RTC_CNTL_BROWN_OUT_ENA_M (BIT(30)) +#define RTC_CNTL_BROWN_OUT_ENA_V 0x1 +#define RTC_CNTL_BROWN_OUT_ENA_S 30 +/* RTC_CNTL_DBROWN_OUT_THRES : R/W ;bitpos:[29:27] ;default: 3'b010 ; */ +/*description: brown out threshold*/ +#define RTC_CNTL_DBROWN_OUT_THRES 0x00000007 +#define RTC_CNTL_DBROWN_OUT_THRES_M ((RTC_CNTL_DBROWN_OUT_THRES_V)<<(RTC_CNTL_DBROWN_OUT_THRES_S)) +#define RTC_CNTL_DBROWN_OUT_THRES_V 0x7 +#define RTC_CNTL_DBROWN_OUT_THRES_S 27 +/* RTC_CNTL_BROWN_OUT_RST_ENA : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: enable brown out reset*/ +#define RTC_CNTL_BROWN_OUT_RST_ENA (BIT(26)) +#define RTC_CNTL_BROWN_OUT_RST_ENA_M (BIT(26)) +#define RTC_CNTL_BROWN_OUT_RST_ENA_V 0x1 +#define RTC_CNTL_BROWN_OUT_RST_ENA_S 26 +/* RTC_CNTL_BROWN_OUT_RST_WAIT : R/W ;bitpos:[25:16] ;default: 10'h3ff ; */ +/*description: brown out reset wait cycles*/ +#define RTC_CNTL_BROWN_OUT_RST_WAIT 0x000003FF +#define RTC_CNTL_BROWN_OUT_RST_WAIT_M ((RTC_CNTL_BROWN_OUT_RST_WAIT_V)<<(RTC_CNTL_BROWN_OUT_RST_WAIT_S)) +#define RTC_CNTL_BROWN_OUT_RST_WAIT_V 0x3FF +#define RTC_CNTL_BROWN_OUT_RST_WAIT_S 16 +/* RTC_CNTL_BROWN_OUT_PD_RF_ENA : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: enable power down RF when brown out happens*/ +#define RTC_CNTL_BROWN_OUT_PD_RF_ENA (BIT(15)) +#define RTC_CNTL_BROWN_OUT_PD_RF_ENA_M (BIT(15)) +#define RTC_CNTL_BROWN_OUT_PD_RF_ENA_V 0x1 +#define RTC_CNTL_BROWN_OUT_PD_RF_ENA_S 15 +/* RTC_CNTL_BROWN_OUT_CLOSE_FLASH_ENA : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: enable close flash when brown out happens*/ +#define RTC_CNTL_BROWN_OUT_CLOSE_FLASH_ENA (BIT(14)) +#define RTC_CNTL_BROWN_OUT_CLOSE_FLASH_ENA_M (BIT(14)) +#define RTC_CNTL_BROWN_OUT_CLOSE_FLASH_ENA_V 0x1 +#define RTC_CNTL_BROWN_OUT_CLOSE_FLASH_ENA_S 14 + +#define RTC_MEM_CONF (DR_REG_RTCCNTL_BASE + 0x40 * 4) +#define RTC_MEM_CRC_FINISH (BIT(31)) +#define RTC_MEM_CRC_FINISH_M (BIT(31)) +#define RTC_MEM_CRC_FINISH_V 0x1 +#define RTC_MEM_CRC_FINISH_S (31) +#define RTC_MEM_CRC_LEN (0x7ff) +#define RTC_MEM_CRC_LEN_M ((RTC_MEM_CRC_LEN_V)<<(RTC_MEM_CRC_LEN_S)) +#define RTC_MEM_CRC_LEN_V (0x7ff) +#define RTC_MEM_CRC_LEN_S (20) +#define RTC_MEM_CRC_ADDR (0x7ff) +#define RTC_MEM_CRC_ADDR_M ((RTC_MEM_CRC_ADDR_V)<<(RTC_MEM_CRC_ADDR_S)) +#define RTC_MEM_CRC_ADDR_V (0x7ff) +#define RTC_MEM_CRC_ADDR_S (9) +#define RTC_MEM_CRC_START (BIT(8)) +#define RTC_MEM_CRC_START_M (BIT(8)) +#define RTC_MEM_CRC_START_V 0x1 +#define RTC_MEM_CRC_START_S (8) +#define RTC_MEM_PID_CONF (0xff) +#define RTC_MEM_PID_CONF_M (0xff) +#define RTC_MEM_PID_CONF_V (0xff) +#define RTC_MEM_PID_CONF_S (0) + +#define RTC_MEM_CRC_RES (DR_REG_RTCCNTL_BASE + 0x41 * 4) + +#define RTC_CNTL_DATE_REG (DR_REG_RTCCNTL_BASE + 0x13c) +/* RTC_CNTL_CNTL_DATE : R/W ;bitpos:[27:0] ;default: 28'h1604280 ; */ +/*description: */ +#define RTC_CNTL_CNTL_DATE 0x0FFFFFFF +#define RTC_CNTL_CNTL_DATE_M ((RTC_CNTL_CNTL_DATE_V)<<(RTC_CNTL_CNTL_DATE_S)) +#define RTC_CNTL_CNTL_DATE_V 0xFFFFFFF +#define RTC_CNTL_CNTL_DATE_S 0 +#define RTC_CNTL_RTC_CNTL_DATE_VERSION 0x1604280 + + + + +#endif /*_SOC_RTC_CNTL_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/rtc_io_reg.h b/tools/sdk/include/esp32/soc/rtc_io_reg.h new file mode 100644 index 00000000..086e8b76 --- /dev/null +++ b/tools/sdk/include/esp32/soc/rtc_io_reg.h @@ -0,0 +1,1951 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_RTC_IO_REG_H_ +#define _SOC_RTC_IO_REG_H_ + + +#include "soc.h" +#define RTC_GPIO_OUT_REG (DR_REG_RTCIO_BASE + 0x0) +/* RTC_GPIO_OUT_DATA : R/W ;bitpos:[31:14] ;default: 0 ; */ +/*description: GPIO0~17 output value*/ +#define RTC_GPIO_OUT_DATA 0x0003FFFF +#define RTC_GPIO_OUT_DATA_M ((RTC_GPIO_OUT_DATA_V)<<(RTC_GPIO_OUT_DATA_S)) +#define RTC_GPIO_OUT_DATA_V 0x3FFFF +#define RTC_GPIO_OUT_DATA_S 14 + +#define RTC_GPIO_OUT_W1TS_REG (DR_REG_RTCIO_BASE + 0x4) +/* RTC_GPIO_OUT_DATA_W1TS : WO ;bitpos:[31:14] ;default: 0 ; */ +/*description: GPIO0~17 output value write 1 to set*/ +#define RTC_GPIO_OUT_DATA_W1TS 0x0003FFFF +#define RTC_GPIO_OUT_DATA_W1TS_M ((RTC_GPIO_OUT_DATA_W1TS_V)<<(RTC_GPIO_OUT_DATA_W1TS_S)) +#define RTC_GPIO_OUT_DATA_W1TS_V 0x3FFFF +#define RTC_GPIO_OUT_DATA_W1TS_S 14 + +#define RTC_GPIO_OUT_W1TC_REG (DR_REG_RTCIO_BASE + 0x8) +/* RTC_GPIO_OUT_DATA_W1TC : WO ;bitpos:[31:14] ;default: 0 ; */ +/*description: GPIO0~17 output value write 1 to clear*/ +#define RTC_GPIO_OUT_DATA_W1TC 0x0003FFFF +#define RTC_GPIO_OUT_DATA_W1TC_M ((RTC_GPIO_OUT_DATA_W1TC_V)<<(RTC_GPIO_OUT_DATA_W1TC_S)) +#define RTC_GPIO_OUT_DATA_W1TC_V 0x3FFFF +#define RTC_GPIO_OUT_DATA_W1TC_S 14 + +#define RTC_GPIO_ENABLE_REG (DR_REG_RTCIO_BASE + 0xc) +/* RTC_GPIO_ENABLE : R/W ;bitpos:[31:14] ;default: 0 ; */ +/*description: GPIO0~17 output enable*/ +#define RTC_GPIO_ENABLE 0x0003FFFF +#define RTC_GPIO_ENABLE_M ((RTC_GPIO_ENABLE_V)<<(RTC_GPIO_ENABLE_S)) +#define RTC_GPIO_ENABLE_V 0x3FFFF +#define RTC_GPIO_ENABLE_S 14 + +#define RTC_GPIO_ENABLE_W1TS_REG (DR_REG_RTCIO_BASE + 0x10) +/* RTC_GPIO_ENABLE_W1TS : WO ;bitpos:[31:14] ;default: 0 ; */ +/*description: GPIO0~17 output enable write 1 to set*/ +#define RTC_GPIO_ENABLE_W1TS 0x0003FFFF +#define RTC_GPIO_ENABLE_W1TS_M ((RTC_GPIO_ENABLE_W1TS_V)<<(RTC_GPIO_ENABLE_W1TS_S)) +#define RTC_GPIO_ENABLE_W1TS_V 0x3FFFF +#define RTC_GPIO_ENABLE_W1TS_S 14 + +#define RTC_GPIO_ENABLE_W1TC_REG (DR_REG_RTCIO_BASE + 0x14) +/* RTC_GPIO_ENABLE_W1TC : WO ;bitpos:[31:14] ;default: 0 ; */ +/*description: GPIO0~17 output enable write 1 to clear*/ +#define RTC_GPIO_ENABLE_W1TC 0x0003FFFF +#define RTC_GPIO_ENABLE_W1TC_M ((RTC_GPIO_ENABLE_W1TC_V)<<(RTC_GPIO_ENABLE_W1TC_S)) +#define RTC_GPIO_ENABLE_W1TC_V 0x3FFFF +#define RTC_GPIO_ENABLE_W1TC_S 14 + +#define RTC_GPIO_STATUS_REG (DR_REG_RTCIO_BASE + 0x18) +/* RTC_GPIO_STATUS_INT : R/W ;bitpos:[31:14] ;default: 0 ; */ +/*description: GPIO0~17 interrupt status*/ +#define RTC_GPIO_STATUS_INT 0x0003FFFF +#define RTC_GPIO_STATUS_INT_M ((RTC_GPIO_STATUS_INT_V)<<(RTC_GPIO_STATUS_INT_S)) +#define RTC_GPIO_STATUS_INT_V 0x3FFFF +#define RTC_GPIO_STATUS_INT_S 14 + +#define RTC_GPIO_STATUS_W1TS_REG (DR_REG_RTCIO_BASE + 0x1c) +/* RTC_GPIO_STATUS_INT_W1TS : WO ;bitpos:[31:14] ;default: 0 ; */ +/*description: GPIO0~17 interrupt status write 1 to set*/ +#define RTC_GPIO_STATUS_INT_W1TS 0x0003FFFF +#define RTC_GPIO_STATUS_INT_W1TS_M ((RTC_GPIO_STATUS_INT_W1TS_V)<<(RTC_GPIO_STATUS_INT_W1TS_S)) +#define RTC_GPIO_STATUS_INT_W1TS_V 0x3FFFF +#define RTC_GPIO_STATUS_INT_W1TS_S 14 + +#define RTC_GPIO_STATUS_W1TC_REG (DR_REG_RTCIO_BASE + 0x20) +/* RTC_GPIO_STATUS_INT_W1TC : WO ;bitpos:[31:14] ;default: 0 ; */ +/*description: GPIO0~17 interrupt status write 1 to clear*/ +#define RTC_GPIO_STATUS_INT_W1TC 0x0003FFFF +#define RTC_GPIO_STATUS_INT_W1TC_M ((RTC_GPIO_STATUS_INT_W1TC_V)<<(RTC_GPIO_STATUS_INT_W1TC_S)) +#define RTC_GPIO_STATUS_INT_W1TC_V 0x3FFFF +#define RTC_GPIO_STATUS_INT_W1TC_S 14 + +#define RTC_GPIO_IN_REG (DR_REG_RTCIO_BASE + 0x24) +/* RTC_GPIO_IN_NEXT : RO ;bitpos:[31:14] ;default: ; */ +/*description: GPIO0~17 input value*/ +#define RTC_GPIO_IN_NEXT 0x0003FFFF +#define RTC_GPIO_IN_NEXT_M ((RTC_GPIO_IN_NEXT_V)<<(RTC_GPIO_IN_NEXT_S)) +#define RTC_GPIO_IN_NEXT_V 0x3FFFF +#define RTC_GPIO_IN_NEXT_S 14 + +#define RTC_GPIO_PIN0_REG (DR_REG_RTCIO_BASE + 0x28) +/* RTC_GPIO_PIN0_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN0_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN0_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN0_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN0_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN0_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN0_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN0_INT_TYPE_M ((RTC_GPIO_PIN0_INT_TYPE_V)<<(RTC_GPIO_PIN0_INT_TYPE_S)) +#define RTC_GPIO_PIN0_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN0_INT_TYPE_S 7 +/* RTC_GPIO_PIN0_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN0_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN0_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN0_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN0_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN1_REG (DR_REG_RTCIO_BASE + 0x2c) +/* RTC_GPIO_PIN1_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN1_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN1_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN1_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN1_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN1_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN1_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN1_INT_TYPE_M ((RTC_GPIO_PIN1_INT_TYPE_V)<<(RTC_GPIO_PIN1_INT_TYPE_S)) +#define RTC_GPIO_PIN1_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN1_INT_TYPE_S 7 +/* RTC_GPIO_PIN1_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN1_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN1_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN1_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN1_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN2_REG (DR_REG_RTCIO_BASE + 0x30) +/* RTC_GPIO_PIN2_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN2_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN2_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN2_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN2_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN2_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN2_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN2_INT_TYPE_M ((RTC_GPIO_PIN2_INT_TYPE_V)<<(RTC_GPIO_PIN2_INT_TYPE_S)) +#define RTC_GPIO_PIN2_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN2_INT_TYPE_S 7 +/* RTC_GPIO_PIN2_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN2_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN2_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN2_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN2_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN3_REG (DR_REG_RTCIO_BASE + 0x34) +/* RTC_GPIO_PIN3_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN3_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN3_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN3_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN3_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN3_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN3_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN3_INT_TYPE_M ((RTC_GPIO_PIN3_INT_TYPE_V)<<(RTC_GPIO_PIN3_INT_TYPE_S)) +#define RTC_GPIO_PIN3_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN3_INT_TYPE_S 7 +/* RTC_GPIO_PIN3_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN3_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN3_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN3_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN3_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN4_REG (DR_REG_RTCIO_BASE + 0x38) +/* RTC_GPIO_PIN4_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN4_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN4_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN4_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN4_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN4_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN4_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN4_INT_TYPE_M ((RTC_GPIO_PIN4_INT_TYPE_V)<<(RTC_GPIO_PIN4_INT_TYPE_S)) +#define RTC_GPIO_PIN4_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN4_INT_TYPE_S 7 +/* RTC_GPIO_PIN4_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN4_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN4_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN4_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN4_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN5_REG (DR_REG_RTCIO_BASE + 0x3c) +/* RTC_GPIO_PIN5_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN5_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN5_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN5_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN5_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN5_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN5_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN5_INT_TYPE_M ((RTC_GPIO_PIN5_INT_TYPE_V)<<(RTC_GPIO_PIN5_INT_TYPE_S)) +#define RTC_GPIO_PIN5_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN5_INT_TYPE_S 7 +/* RTC_GPIO_PIN5_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN5_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN5_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN5_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN5_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN6_REG (DR_REG_RTCIO_BASE + 0x40) +/* RTC_GPIO_PIN6_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN6_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN6_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN6_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN6_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN6_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN6_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN6_INT_TYPE_M ((RTC_GPIO_PIN6_INT_TYPE_V)<<(RTC_GPIO_PIN6_INT_TYPE_S)) +#define RTC_GPIO_PIN6_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN6_INT_TYPE_S 7 +/* RTC_GPIO_PIN6_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN6_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN6_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN6_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN6_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN7_REG (DR_REG_RTCIO_BASE + 0x44) +/* RTC_GPIO_PIN7_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN7_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN7_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN7_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN7_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN7_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN7_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN7_INT_TYPE_M ((RTC_GPIO_PIN7_INT_TYPE_V)<<(RTC_GPIO_PIN7_INT_TYPE_S)) +#define RTC_GPIO_PIN7_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN7_INT_TYPE_S 7 +/* RTC_GPIO_PIN7_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN7_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN7_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN7_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN7_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN8_REG (DR_REG_RTCIO_BASE + 0x48) +/* RTC_GPIO_PIN8_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN8_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN8_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN8_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN8_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN8_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN8_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN8_INT_TYPE_M ((RTC_GPIO_PIN8_INT_TYPE_V)<<(RTC_GPIO_PIN8_INT_TYPE_S)) +#define RTC_GPIO_PIN8_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN8_INT_TYPE_S 7 +/* RTC_GPIO_PIN8_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN8_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN8_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN8_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN8_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN9_REG (DR_REG_RTCIO_BASE + 0x4c) +/* RTC_GPIO_PIN9_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN9_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN9_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN9_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN9_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN9_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN9_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN9_INT_TYPE_M ((RTC_GPIO_PIN9_INT_TYPE_V)<<(RTC_GPIO_PIN9_INT_TYPE_S)) +#define RTC_GPIO_PIN9_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN9_INT_TYPE_S 7 +/* RTC_GPIO_PIN9_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN9_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN9_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN9_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN9_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN10_REG (DR_REG_RTCIO_BASE + 0x50) +/* RTC_GPIO_PIN10_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN10_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN10_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN10_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN10_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN10_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN10_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN10_INT_TYPE_M ((RTC_GPIO_PIN10_INT_TYPE_V)<<(RTC_GPIO_PIN10_INT_TYPE_S)) +#define RTC_GPIO_PIN10_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN10_INT_TYPE_S 7 +/* RTC_GPIO_PIN10_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN10_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN10_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN10_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN10_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN11_REG (DR_REG_RTCIO_BASE + 0x54) +/* RTC_GPIO_PIN11_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN11_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN11_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN11_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN11_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN11_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN11_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN11_INT_TYPE_M ((RTC_GPIO_PIN11_INT_TYPE_V)<<(RTC_GPIO_PIN11_INT_TYPE_S)) +#define RTC_GPIO_PIN11_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN11_INT_TYPE_S 7 +/* RTC_GPIO_PIN11_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN11_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN11_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN11_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN11_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN12_REG (DR_REG_RTCIO_BASE + 0x58) +/* RTC_GPIO_PIN12_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN12_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN12_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN12_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN12_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN12_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN12_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN12_INT_TYPE_M ((RTC_GPIO_PIN12_INT_TYPE_V)<<(RTC_GPIO_PIN12_INT_TYPE_S)) +#define RTC_GPIO_PIN12_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN12_INT_TYPE_S 7 +/* RTC_GPIO_PIN12_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN12_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN12_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN12_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN12_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN13_REG (DR_REG_RTCIO_BASE + 0x5c) +/* RTC_GPIO_PIN13_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN13_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN13_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN13_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN13_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN13_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN13_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN13_INT_TYPE_M ((RTC_GPIO_PIN13_INT_TYPE_V)<<(RTC_GPIO_PIN13_INT_TYPE_S)) +#define RTC_GPIO_PIN13_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN13_INT_TYPE_S 7 +/* RTC_GPIO_PIN13_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN13_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN13_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN13_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN13_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN14_REG (DR_REG_RTCIO_BASE + 0x60) +/* RTC_GPIO_PIN14_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN14_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN14_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN14_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN14_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN14_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN14_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN14_INT_TYPE_M ((RTC_GPIO_PIN14_INT_TYPE_V)<<(RTC_GPIO_PIN14_INT_TYPE_S)) +#define RTC_GPIO_PIN14_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN14_INT_TYPE_S 7 +/* RTC_GPIO_PIN14_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN14_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN14_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN14_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN14_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN15_REG (DR_REG_RTCIO_BASE + 0x64) +/* RTC_GPIO_PIN15_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN15_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN15_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN15_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN15_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN15_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN15_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN15_INT_TYPE_M ((RTC_GPIO_PIN15_INT_TYPE_V)<<(RTC_GPIO_PIN15_INT_TYPE_S)) +#define RTC_GPIO_PIN15_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN15_INT_TYPE_S 7 +/* RTC_GPIO_PIN15_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN15_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN15_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN15_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN15_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN16_REG (DR_REG_RTCIO_BASE + 0x68) +/* RTC_GPIO_PIN16_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN16_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN16_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN16_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN16_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN16_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN16_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN16_INT_TYPE_M ((RTC_GPIO_PIN16_INT_TYPE_V)<<(RTC_GPIO_PIN16_INT_TYPE_S)) +#define RTC_GPIO_PIN16_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN16_INT_TYPE_S 7 +/* RTC_GPIO_PIN16_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN16_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN16_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN16_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN16_PAD_DRIVER_S 2 + +#define RTC_GPIO_PIN17_REG (DR_REG_RTCIO_BASE + 0x6c) +/* RTC_GPIO_PIN17_WAKEUP_ENABLE : R/W ;bitpos:[10] ;default: 0 ; */ +/*description: GPIO wake up enable only available in light sleep*/ +#define RTC_GPIO_PIN17_WAKEUP_ENABLE (BIT(10)) +#define RTC_GPIO_PIN17_WAKEUP_ENABLE_M (BIT(10)) +#define RTC_GPIO_PIN17_WAKEUP_ENABLE_V 0x1 +#define RTC_GPIO_PIN17_WAKEUP_ENABLE_S 10 +/* RTC_GPIO_PIN17_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ +/*description: if set to 0: GPIO interrupt disable if set to 1: rising edge + trigger if set to 2: falling edge trigger if set to 3: any edge trigger if set to 4: low level trigger if set to 5: high level trigger*/ +#define RTC_GPIO_PIN17_INT_TYPE 0x00000007 +#define RTC_GPIO_PIN17_INT_TYPE_M ((RTC_GPIO_PIN17_INT_TYPE_V)<<(RTC_GPIO_PIN17_INT_TYPE_S)) +#define RTC_GPIO_PIN17_INT_TYPE_V 0x7 +#define RTC_GPIO_PIN17_INT_TYPE_S 7 +/* RTC_GPIO_PIN17_PAD_DRIVER : R/W ;bitpos:[2] ;default: 0 ; */ +/*description: if set to 0: normal output if set to 1: open drain*/ +#define RTC_GPIO_PIN17_PAD_DRIVER (BIT(2)) +#define RTC_GPIO_PIN17_PAD_DRIVER_M (BIT(2)) +#define RTC_GPIO_PIN17_PAD_DRIVER_V 0x1 +#define RTC_GPIO_PIN17_PAD_DRIVER_S 2 + +#define RTC_IO_RTC_DEBUG_SEL_REG (DR_REG_RTCIO_BASE + 0x70) +/* RTC_IO_DEBUG_12M_NO_GATING : R/W ;bitpos:[25] ;default: 1'd0 ; */ +/*description: */ +#define RTC_IO_DEBUG_12M_NO_GATING (BIT(25)) +#define RTC_IO_DEBUG_12M_NO_GATING_M (BIT(25)) +#define RTC_IO_DEBUG_12M_NO_GATING_V 0x1 +#define RTC_IO_DEBUG_12M_NO_GATING_S 25 +/* RTC_IO_DEBUG_SEL4 : R/W ;bitpos:[24:20] ;default: 5'd0 ; */ +/*description: */ +#define RTC_IO_DEBUG_SEL4 0x0000001F +#define RTC_IO_DEBUG_SEL4_M ((RTC_IO_DEBUG_SEL4_V)<<(RTC_IO_DEBUG_SEL4_S)) +#define RTC_IO_DEBUG_SEL4_V 0x1F +#define RTC_IO_DEBUG_SEL4_S 20 +/* RTC_IO_DEBUG_SEL3 : R/W ;bitpos:[19:15] ;default: 5'd0 ; */ +/*description: */ +#define RTC_IO_DEBUG_SEL3 0x0000001F +#define RTC_IO_DEBUG_SEL3_M ((RTC_IO_DEBUG_SEL3_V)<<(RTC_IO_DEBUG_SEL3_S)) +#define RTC_IO_DEBUG_SEL3_V 0x1F +#define RTC_IO_DEBUG_SEL3_S 15 +/* RTC_IO_DEBUG_SEL2 : R/W ;bitpos:[14:10] ;default: 5'd0 ; */ +/*description: */ +#define RTC_IO_DEBUG_SEL2 0x0000001F +#define RTC_IO_DEBUG_SEL2_M ((RTC_IO_DEBUG_SEL2_V)<<(RTC_IO_DEBUG_SEL2_S)) +#define RTC_IO_DEBUG_SEL2_V 0x1F +#define RTC_IO_DEBUG_SEL2_S 10 +/* RTC_IO_DEBUG_SEL1 : R/W ;bitpos:[9:5] ;default: 5'd0 ; */ +/*description: */ +#define RTC_IO_DEBUG_SEL1 0x0000001F +#define RTC_IO_DEBUG_SEL1_M ((RTC_IO_DEBUG_SEL1_V)<<(RTC_IO_DEBUG_SEL1_S)) +#define RTC_IO_DEBUG_SEL1_V 0x1F +#define RTC_IO_DEBUG_SEL1_S 5 +/* RTC_IO_DEBUG_SEL0 : R/W ;bitpos:[4:0] ;default: 5'd0 ; */ +/*description: */ +#define RTC_IO_DEBUG_SEL0 0x0000001F +#define RTC_IO_DEBUG_SEL0_M ((RTC_IO_DEBUG_SEL0_V)<<(RTC_IO_DEBUG_SEL0_S)) +#define RTC_IO_DEBUG_SEL0_V 0x1F +#define RTC_IO_DEBUG_SEL0_S 0 + +#define RTC_IO_DIG_PAD_HOLD_REG (DR_REG_RTCIO_BASE + 0x74) +/* RTC_IO_DIG_PAD_HOLD : R/W ;bitpos:[31:0] ;default: 1'd0 ; */ +/*description: select the digital pad hold value.*/ +#define RTC_IO_DIG_PAD_HOLD 0xFFFFFFFF +#define RTC_IO_DIG_PAD_HOLD_M ((RTC_IO_DIG_PAD_HOLD_V)<<(RTC_IO_DIG_PAD_HOLD_S)) +#define RTC_IO_DIG_PAD_HOLD_V 0xFFFFFFFF +#define RTC_IO_DIG_PAD_HOLD_S 0 + +#define RTC_IO_HALL_SENS_REG (DR_REG_RTCIO_BASE + 0x78) +/* RTC_IO_XPD_HALL : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: Power on hall sensor and connect to VP and VN*/ +#define RTC_IO_XPD_HALL (BIT(31)) +#define RTC_IO_XPD_HALL_M (BIT(31)) +#define RTC_IO_XPD_HALL_V 0x1 +#define RTC_IO_XPD_HALL_S 31 +/* RTC_IO_HALL_PHASE : R/W ;bitpos:[30] ;default: 1'd0 ; */ +/*description: Reverse phase of hall sensor*/ +#define RTC_IO_HALL_PHASE (BIT(30)) +#define RTC_IO_HALL_PHASE_M (BIT(30)) +#define RTC_IO_HALL_PHASE_V 0x1 +#define RTC_IO_HALL_PHASE_S 30 + +#define RTC_IO_SENSOR_PADS_REG (DR_REG_RTCIO_BASE + 0x7c) +/* RTC_IO_SENSE1_HOLD : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_SENSE1_HOLD (BIT(31)) +#define RTC_IO_SENSE1_HOLD_M (BIT(31)) +#define RTC_IO_SENSE1_HOLD_V 0x1 +#define RTC_IO_SENSE1_HOLD_S 31 +/* RTC_IO_SENSE2_HOLD : R/W ;bitpos:[30] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_SENSE2_HOLD (BIT(30)) +#define RTC_IO_SENSE2_HOLD_M (BIT(30)) +#define RTC_IO_SENSE2_HOLD_V 0x1 +#define RTC_IO_SENSE2_HOLD_S 30 +/* RTC_IO_SENSE3_HOLD : R/W ;bitpos:[29] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_SENSE3_HOLD (BIT(29)) +#define RTC_IO_SENSE3_HOLD_M (BIT(29)) +#define RTC_IO_SENSE3_HOLD_V 0x1 +#define RTC_IO_SENSE3_HOLD_S 29 +/* RTC_IO_SENSE4_HOLD : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_SENSE4_HOLD (BIT(28)) +#define RTC_IO_SENSE4_HOLD_M (BIT(28)) +#define RTC_IO_SENSE4_HOLD_V 0x1 +#define RTC_IO_SENSE4_HOLD_S 28 +/* RTC_IO_SENSE1_MUX_SEL : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_SENSE1_MUX_SEL (BIT(27)) +#define RTC_IO_SENSE1_MUX_SEL_M (BIT(27)) +#define RTC_IO_SENSE1_MUX_SEL_V 0x1 +#define RTC_IO_SENSE1_MUX_SEL_S 27 +/* RTC_IO_SENSE2_MUX_SEL : R/W ;bitpos:[26] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_SENSE2_MUX_SEL (BIT(26)) +#define RTC_IO_SENSE2_MUX_SEL_M (BIT(26)) +#define RTC_IO_SENSE2_MUX_SEL_V 0x1 +#define RTC_IO_SENSE2_MUX_SEL_S 26 +/* RTC_IO_SENSE3_MUX_SEL : R/W ;bitpos:[25] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_SENSE3_MUX_SEL (BIT(25)) +#define RTC_IO_SENSE3_MUX_SEL_M (BIT(25)) +#define RTC_IO_SENSE3_MUX_SEL_V 0x1 +#define RTC_IO_SENSE3_MUX_SEL_S 25 +/* RTC_IO_SENSE4_MUX_SEL : R/W ;bitpos:[24] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_SENSE4_MUX_SEL (BIT(24)) +#define RTC_IO_SENSE4_MUX_SEL_M (BIT(24)) +#define RTC_IO_SENSE4_MUX_SEL_V 0x1 +#define RTC_IO_SENSE4_MUX_SEL_S 24 +/* RTC_IO_SENSE1_FUN_SEL : R/W ;bitpos:[23:22] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_SENSE1_FUN_SEL 0x00000003 +#define RTC_IO_SENSE1_FUN_SEL_M ((RTC_IO_SENSE1_FUN_SEL_V)<<(RTC_IO_SENSE1_FUN_SEL_S)) +#define RTC_IO_SENSE1_FUN_SEL_V 0x3 +#define RTC_IO_SENSE1_FUN_SEL_S 22 +/* RTC_IO_SENSE1_SLP_SEL : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_SENSE1_SLP_SEL (BIT(21)) +#define RTC_IO_SENSE1_SLP_SEL_M (BIT(21)) +#define RTC_IO_SENSE1_SLP_SEL_V 0x1 +#define RTC_IO_SENSE1_SLP_SEL_S 21 +/* RTC_IO_SENSE1_SLP_IE : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_SENSE1_SLP_IE (BIT(20)) +#define RTC_IO_SENSE1_SLP_IE_M (BIT(20)) +#define RTC_IO_SENSE1_SLP_IE_V 0x1 +#define RTC_IO_SENSE1_SLP_IE_S 20 +/* RTC_IO_SENSE1_FUN_IE : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_SENSE1_FUN_IE (BIT(19)) +#define RTC_IO_SENSE1_FUN_IE_M (BIT(19)) +#define RTC_IO_SENSE1_FUN_IE_V 0x1 +#define RTC_IO_SENSE1_FUN_IE_S 19 +/* RTC_IO_SENSE2_FUN_SEL : R/W ;bitpos:[18:17] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_SENSE2_FUN_SEL 0x00000003 +#define RTC_IO_SENSE2_FUN_SEL_M ((RTC_IO_SENSE2_FUN_SEL_V)<<(RTC_IO_SENSE2_FUN_SEL_S)) +#define RTC_IO_SENSE2_FUN_SEL_V 0x3 +#define RTC_IO_SENSE2_FUN_SEL_S 17 +/* RTC_IO_SENSE2_SLP_SEL : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_SENSE2_SLP_SEL (BIT(16)) +#define RTC_IO_SENSE2_SLP_SEL_M (BIT(16)) +#define RTC_IO_SENSE2_SLP_SEL_V 0x1 +#define RTC_IO_SENSE2_SLP_SEL_S 16 +/* RTC_IO_SENSE2_SLP_IE : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_SENSE2_SLP_IE (BIT(15)) +#define RTC_IO_SENSE2_SLP_IE_M (BIT(15)) +#define RTC_IO_SENSE2_SLP_IE_V 0x1 +#define RTC_IO_SENSE2_SLP_IE_S 15 +/* RTC_IO_SENSE2_FUN_IE : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_SENSE2_FUN_IE (BIT(14)) +#define RTC_IO_SENSE2_FUN_IE_M (BIT(14)) +#define RTC_IO_SENSE2_FUN_IE_V 0x1 +#define RTC_IO_SENSE2_FUN_IE_S 14 +/* RTC_IO_SENSE3_FUN_SEL : R/W ;bitpos:[13:12] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_SENSE3_FUN_SEL 0x00000003 +#define RTC_IO_SENSE3_FUN_SEL_M ((RTC_IO_SENSE3_FUN_SEL_V)<<(RTC_IO_SENSE3_FUN_SEL_S)) +#define RTC_IO_SENSE3_FUN_SEL_V 0x3 +#define RTC_IO_SENSE3_FUN_SEL_S 12 +/* RTC_IO_SENSE3_SLP_SEL : R/W ;bitpos:[11] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_SENSE3_SLP_SEL (BIT(11)) +#define RTC_IO_SENSE3_SLP_SEL_M (BIT(11)) +#define RTC_IO_SENSE3_SLP_SEL_V 0x1 +#define RTC_IO_SENSE3_SLP_SEL_S 11 +/* RTC_IO_SENSE3_SLP_IE : R/W ;bitpos:[10] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_SENSE3_SLP_IE (BIT(10)) +#define RTC_IO_SENSE3_SLP_IE_M (BIT(10)) +#define RTC_IO_SENSE3_SLP_IE_V 0x1 +#define RTC_IO_SENSE3_SLP_IE_S 10 +/* RTC_IO_SENSE3_FUN_IE : R/W ;bitpos:[9] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_SENSE3_FUN_IE (BIT(9)) +#define RTC_IO_SENSE3_FUN_IE_M (BIT(9)) +#define RTC_IO_SENSE3_FUN_IE_V 0x1 +#define RTC_IO_SENSE3_FUN_IE_S 9 +/* RTC_IO_SENSE4_FUN_SEL : R/W ;bitpos:[8:7] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_SENSE4_FUN_SEL 0x00000003 +#define RTC_IO_SENSE4_FUN_SEL_M ((RTC_IO_SENSE4_FUN_SEL_V)<<(RTC_IO_SENSE4_FUN_SEL_S)) +#define RTC_IO_SENSE4_FUN_SEL_V 0x3 +#define RTC_IO_SENSE4_FUN_SEL_S 7 +/* RTC_IO_SENSE4_SLP_SEL : R/W ;bitpos:[6] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_SENSE4_SLP_SEL (BIT(6)) +#define RTC_IO_SENSE4_SLP_SEL_M (BIT(6)) +#define RTC_IO_SENSE4_SLP_SEL_V 0x1 +#define RTC_IO_SENSE4_SLP_SEL_S 6 +/* RTC_IO_SENSE4_SLP_IE : R/W ;bitpos:[5] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_SENSE4_SLP_IE (BIT(5)) +#define RTC_IO_SENSE4_SLP_IE_M (BIT(5)) +#define RTC_IO_SENSE4_SLP_IE_V 0x1 +#define RTC_IO_SENSE4_SLP_IE_S 5 +/* RTC_IO_SENSE4_FUN_IE : R/W ;bitpos:[4] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_SENSE4_FUN_IE (BIT(4)) +#define RTC_IO_SENSE4_FUN_IE_M (BIT(4)) +#define RTC_IO_SENSE4_FUN_IE_V 0x1 +#define RTC_IO_SENSE4_FUN_IE_S 4 + +#define RTC_IO_ADC_PAD_REG (DR_REG_RTCIO_BASE + 0x80) +/* RTC_IO_ADC1_HOLD : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_ADC1_HOLD (BIT(31)) +#define RTC_IO_ADC1_HOLD_M (BIT(31)) +#define RTC_IO_ADC1_HOLD_V 0x1 +#define RTC_IO_ADC1_HOLD_S 31 +/* RTC_IO_ADC2_HOLD : R/W ;bitpos:[30] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_ADC2_HOLD (BIT(30)) +#define RTC_IO_ADC2_HOLD_M (BIT(30)) +#define RTC_IO_ADC2_HOLD_V 0x1 +#define RTC_IO_ADC2_HOLD_S 30 +/* RTC_IO_ADC1_MUX_SEL : R/W ;bitpos:[29] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_ADC1_MUX_SEL (BIT(29)) +#define RTC_IO_ADC1_MUX_SEL_M (BIT(29)) +#define RTC_IO_ADC1_MUX_SEL_V 0x1 +#define RTC_IO_ADC1_MUX_SEL_S 29 +/* RTC_IO_ADC2_MUX_SEL : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_ADC2_MUX_SEL (BIT(28)) +#define RTC_IO_ADC2_MUX_SEL_M (BIT(28)) +#define RTC_IO_ADC2_MUX_SEL_V 0x1 +#define RTC_IO_ADC2_MUX_SEL_S 28 +/* RTC_IO_ADC1_FUN_SEL : R/W ;bitpos:[27:26] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_ADC1_FUN_SEL 0x00000003 +#define RTC_IO_ADC1_FUN_SEL_M ((RTC_IO_ADC1_FUN_SEL_V)<<(RTC_IO_ADC1_FUN_SEL_S)) +#define RTC_IO_ADC1_FUN_SEL_V 0x3 +#define RTC_IO_ADC1_FUN_SEL_S 26 +/* RTC_IO_ADC1_SLP_SEL : R/W ;bitpos:[25] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_ADC1_SLP_SEL (BIT(25)) +#define RTC_IO_ADC1_SLP_SEL_M (BIT(25)) +#define RTC_IO_ADC1_SLP_SEL_V 0x1 +#define RTC_IO_ADC1_SLP_SEL_S 25 +/* RTC_IO_ADC1_SLP_IE : R/W ;bitpos:[24] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_ADC1_SLP_IE (BIT(24)) +#define RTC_IO_ADC1_SLP_IE_M (BIT(24)) +#define RTC_IO_ADC1_SLP_IE_V 0x1 +#define RTC_IO_ADC1_SLP_IE_S 24 +/* RTC_IO_ADC1_FUN_IE : R/W ;bitpos:[23] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_ADC1_FUN_IE (BIT(23)) +#define RTC_IO_ADC1_FUN_IE_M (BIT(23)) +#define RTC_IO_ADC1_FUN_IE_V 0x1 +#define RTC_IO_ADC1_FUN_IE_S 23 +/* RTC_IO_ADC2_FUN_SEL : R/W ;bitpos:[22:21] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_ADC2_FUN_SEL 0x00000003 +#define RTC_IO_ADC2_FUN_SEL_M ((RTC_IO_ADC2_FUN_SEL_V)<<(RTC_IO_ADC2_FUN_SEL_S)) +#define RTC_IO_ADC2_FUN_SEL_V 0x3 +#define RTC_IO_ADC2_FUN_SEL_S 21 +/* RTC_IO_ADC2_SLP_SEL : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_ADC2_SLP_SEL (BIT(20)) +#define RTC_IO_ADC2_SLP_SEL_M (BIT(20)) +#define RTC_IO_ADC2_SLP_SEL_V 0x1 +#define RTC_IO_ADC2_SLP_SEL_S 20 +/* RTC_IO_ADC2_SLP_IE : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_ADC2_SLP_IE (BIT(19)) +#define RTC_IO_ADC2_SLP_IE_M (BIT(19)) +#define RTC_IO_ADC2_SLP_IE_V 0x1 +#define RTC_IO_ADC2_SLP_IE_S 19 +/* RTC_IO_ADC2_FUN_IE : R/W ;bitpos:[18] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_ADC2_FUN_IE (BIT(18)) +#define RTC_IO_ADC2_FUN_IE_M (BIT(18)) +#define RTC_IO_ADC2_FUN_IE_V 0x1 +#define RTC_IO_ADC2_FUN_IE_S 18 + +#define RTC_IO_PAD_DAC1_REG (DR_REG_RTCIO_BASE + 0x84) +/* RTC_IO_PDAC1_DRV : R/W ;bitpos:[31:30] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_PDAC1_DRV 0x00000003 +#define RTC_IO_PDAC1_DRV_M ((RTC_IO_PDAC1_DRV_V)<<(RTC_IO_PDAC1_DRV_S)) +#define RTC_IO_PDAC1_DRV_V 0x3 +#define RTC_IO_PDAC1_DRV_S 30 +/* RTC_IO_PDAC1_HOLD : R/W ;bitpos:[29] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_PDAC1_HOLD (BIT(29)) +#define RTC_IO_PDAC1_HOLD_M (BIT(29)) +#define RTC_IO_PDAC1_HOLD_V 0x1 +#define RTC_IO_PDAC1_HOLD_S 29 +/* RTC_IO_PDAC1_RDE : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_PDAC1_RDE (BIT(28)) +#define RTC_IO_PDAC1_RDE_M (BIT(28)) +#define RTC_IO_PDAC1_RDE_V 0x1 +#define RTC_IO_PDAC1_RDE_S 28 +/* RTC_IO_PDAC1_RUE : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_PDAC1_RUE (BIT(27)) +#define RTC_IO_PDAC1_RUE_M (BIT(27)) +#define RTC_IO_PDAC1_RUE_V 0x1 +#define RTC_IO_PDAC1_RUE_S 27 +/* RTC_IO_PDAC1_DAC : R/W ;bitpos:[26:19] ;default: 8'd0 ; */ +/*description: PAD DAC1 control code.*/ +#define RTC_IO_PDAC1_DAC 0x000000FF +#define RTC_IO_PDAC1_DAC_M ((RTC_IO_PDAC1_DAC_V)<<(RTC_IO_PDAC1_DAC_S)) +#define RTC_IO_PDAC1_DAC_V 0xFF +#define RTC_IO_PDAC1_DAC_S 19 +/* RTC_IO_PDAC1_XPD_DAC : R/W ;bitpos:[18] ;default: 1'd0 ; */ +/*description: Power on DAC1. Usually we need to tristate PDAC1 if we power + on the DAC i.e. IE=0 OE=0 RDE=0 RUE=0*/ +#define RTC_IO_PDAC1_XPD_DAC (BIT(18)) +#define RTC_IO_PDAC1_XPD_DAC_M (BIT(18)) +#define RTC_IO_PDAC1_XPD_DAC_V 0x1 +#define RTC_IO_PDAC1_XPD_DAC_S 18 +/* RTC_IO_PDAC1_MUX_SEL : R/W ;bitpos:[17] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_PDAC1_MUX_SEL (BIT(17)) +#define RTC_IO_PDAC1_MUX_SEL_M (BIT(17)) +#define RTC_IO_PDAC1_MUX_SEL_V 0x1 +#define RTC_IO_PDAC1_MUX_SEL_S 17 +/* RTC_IO_PDAC1_FUN_SEL : R/W ;bitpos:[16:15] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_PDAC1_FUN_SEL 0x00000003 +#define RTC_IO_PDAC1_FUN_SEL_M ((RTC_IO_PDAC1_FUN_SEL_V)<<(RTC_IO_PDAC1_FUN_SEL_S)) +#define RTC_IO_PDAC1_FUN_SEL_V 0x3 +#define RTC_IO_PDAC1_FUN_SEL_S 15 +/* RTC_IO_PDAC1_SLP_SEL : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_PDAC1_SLP_SEL (BIT(14)) +#define RTC_IO_PDAC1_SLP_SEL_M (BIT(14)) +#define RTC_IO_PDAC1_SLP_SEL_V 0x1 +#define RTC_IO_PDAC1_SLP_SEL_S 14 +/* RTC_IO_PDAC1_SLP_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_PDAC1_SLP_IE (BIT(13)) +#define RTC_IO_PDAC1_SLP_IE_M (BIT(13)) +#define RTC_IO_PDAC1_SLP_IE_V 0x1 +#define RTC_IO_PDAC1_SLP_IE_S 13 +/* RTC_IO_PDAC1_SLP_OE : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_PDAC1_SLP_OE (BIT(12)) +#define RTC_IO_PDAC1_SLP_OE_M (BIT(12)) +#define RTC_IO_PDAC1_SLP_OE_V 0x1 +#define RTC_IO_PDAC1_SLP_OE_S 12 +/* RTC_IO_PDAC1_FUN_IE : R/W ;bitpos:[11] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_PDAC1_FUN_IE (BIT(11)) +#define RTC_IO_PDAC1_FUN_IE_M (BIT(11)) +#define RTC_IO_PDAC1_FUN_IE_V 0x1 +#define RTC_IO_PDAC1_FUN_IE_S 11 +/* RTC_IO_PDAC1_DAC_XPD_FORCE : R/W ;bitpos:[10] ;default: 1'd0 ; */ +/*description: Power on DAC1. Usually we need to tristate PDAC1 if we power + on the DAC i.e. IE=0 OE=0 RDE=0 RUE=0*/ +#define RTC_IO_PDAC1_DAC_XPD_FORCE (BIT(10)) +#define RTC_IO_PDAC1_DAC_XPD_FORCE_M (BIT(10)) +#define RTC_IO_PDAC1_DAC_XPD_FORCE_V 0x1 +#define RTC_IO_PDAC1_DAC_XPD_FORCE_S 10 + +#define RTC_IO_PAD_DAC2_REG (DR_REG_RTCIO_BASE + 0x88) +/* RTC_IO_PDAC2_DRV : R/W ;bitpos:[31:30] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_PDAC2_DRV 0x00000003 +#define RTC_IO_PDAC2_DRV_M ((RTC_IO_PDAC2_DRV_V)<<(RTC_IO_PDAC2_DRV_S)) +#define RTC_IO_PDAC2_DRV_V 0x3 +#define RTC_IO_PDAC2_DRV_S 30 +/* RTC_IO_PDAC2_HOLD : R/W ;bitpos:[29] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_PDAC2_HOLD (BIT(29)) +#define RTC_IO_PDAC2_HOLD_M (BIT(29)) +#define RTC_IO_PDAC2_HOLD_V 0x1 +#define RTC_IO_PDAC2_HOLD_S 29 +/* RTC_IO_PDAC2_RDE : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_PDAC2_RDE (BIT(28)) +#define RTC_IO_PDAC2_RDE_M (BIT(28)) +#define RTC_IO_PDAC2_RDE_V 0x1 +#define RTC_IO_PDAC2_RDE_S 28 +/* RTC_IO_PDAC2_RUE : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_PDAC2_RUE (BIT(27)) +#define RTC_IO_PDAC2_RUE_M (BIT(27)) +#define RTC_IO_PDAC2_RUE_V 0x1 +#define RTC_IO_PDAC2_RUE_S 27 +/* RTC_IO_PDAC2_DAC : R/W ;bitpos:[26:19] ;default: 8'd0 ; */ +/*description: PAD DAC2 control code.*/ +#define RTC_IO_PDAC2_DAC 0x000000FF +#define RTC_IO_PDAC2_DAC_M ((RTC_IO_PDAC2_DAC_V)<<(RTC_IO_PDAC2_DAC_S)) +#define RTC_IO_PDAC2_DAC_V 0xFF +#define RTC_IO_PDAC2_DAC_S 19 +/* RTC_IO_PDAC2_XPD_DAC : R/W ;bitpos:[18] ;default: 1'd0 ; */ +/*description: Power on DAC2. Usually we need to tristate PDAC1 if we power + on the DAC i.e. IE=0 OE=0 RDE=0 RUE=0*/ +#define RTC_IO_PDAC2_XPD_DAC (BIT(18)) +#define RTC_IO_PDAC2_XPD_DAC_M (BIT(18)) +#define RTC_IO_PDAC2_XPD_DAC_V 0x1 +#define RTC_IO_PDAC2_XPD_DAC_S 18 +/* RTC_IO_PDAC2_MUX_SEL : R/W ;bitpos:[17] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_PDAC2_MUX_SEL (BIT(17)) +#define RTC_IO_PDAC2_MUX_SEL_M (BIT(17)) +#define RTC_IO_PDAC2_MUX_SEL_V 0x1 +#define RTC_IO_PDAC2_MUX_SEL_S 17 +/* RTC_IO_PDAC2_FUN_SEL : R/W ;bitpos:[16:15] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_PDAC2_FUN_SEL 0x00000003 +#define RTC_IO_PDAC2_FUN_SEL_M ((RTC_IO_PDAC2_FUN_SEL_V)<<(RTC_IO_PDAC2_FUN_SEL_S)) +#define RTC_IO_PDAC2_FUN_SEL_V 0x3 +#define RTC_IO_PDAC2_FUN_SEL_S 15 +/* RTC_IO_PDAC2_SLP_SEL : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_PDAC2_SLP_SEL (BIT(14)) +#define RTC_IO_PDAC2_SLP_SEL_M (BIT(14)) +#define RTC_IO_PDAC2_SLP_SEL_V 0x1 +#define RTC_IO_PDAC2_SLP_SEL_S 14 +/* RTC_IO_PDAC2_SLP_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_PDAC2_SLP_IE (BIT(13)) +#define RTC_IO_PDAC2_SLP_IE_M (BIT(13)) +#define RTC_IO_PDAC2_SLP_IE_V 0x1 +#define RTC_IO_PDAC2_SLP_IE_S 13 +/* RTC_IO_PDAC2_SLP_OE : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_PDAC2_SLP_OE (BIT(12)) +#define RTC_IO_PDAC2_SLP_OE_M (BIT(12)) +#define RTC_IO_PDAC2_SLP_OE_V 0x1 +#define RTC_IO_PDAC2_SLP_OE_S 12 +/* RTC_IO_PDAC2_FUN_IE : R/W ;bitpos:[11] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_PDAC2_FUN_IE (BIT(11)) +#define RTC_IO_PDAC2_FUN_IE_M (BIT(11)) +#define RTC_IO_PDAC2_FUN_IE_V 0x1 +#define RTC_IO_PDAC2_FUN_IE_S 11 +/* RTC_IO_PDAC2_DAC_XPD_FORCE : R/W ;bitpos:[10] ;default: 1'd0 ; */ +/*description: Power on DAC2. Usually we need to tristate PDAC2 if we power + on the DAC i.e. IE=0 OE=0 RDE=0 RUE=0*/ +#define RTC_IO_PDAC2_DAC_XPD_FORCE (BIT(10)) +#define RTC_IO_PDAC2_DAC_XPD_FORCE_M (BIT(10)) +#define RTC_IO_PDAC2_DAC_XPD_FORCE_V 0x1 +#define RTC_IO_PDAC2_DAC_XPD_FORCE_S 10 + +#define RTC_IO_XTAL_32K_PAD_REG (DR_REG_RTCIO_BASE + 0x8c) +/* RTC_IO_X32N_DRV : R/W ;bitpos:[31:30] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_X32N_DRV 0x00000003 +#define RTC_IO_X32N_DRV_M ((RTC_IO_X32N_DRV_V)<<(RTC_IO_X32N_DRV_S)) +#define RTC_IO_X32N_DRV_V 0x3 +#define RTC_IO_X32N_DRV_S 30 +/* RTC_IO_X32N_HOLD : R/W ;bitpos:[29] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_X32N_HOLD (BIT(29)) +#define RTC_IO_X32N_HOLD_M (BIT(29)) +#define RTC_IO_X32N_HOLD_V 0x1 +#define RTC_IO_X32N_HOLD_S 29 +/* RTC_IO_X32N_RDE : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_X32N_RDE (BIT(28)) +#define RTC_IO_X32N_RDE_M (BIT(28)) +#define RTC_IO_X32N_RDE_V 0x1 +#define RTC_IO_X32N_RDE_S 28 +/* RTC_IO_X32N_RUE : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_X32N_RUE (BIT(27)) +#define RTC_IO_X32N_RUE_M (BIT(27)) +#define RTC_IO_X32N_RUE_V 0x1 +#define RTC_IO_X32N_RUE_S 27 +/* RTC_IO_X32P_DRV : R/W ;bitpos:[26:25] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_X32P_DRV 0x00000003 +#define RTC_IO_X32P_DRV_M ((RTC_IO_X32P_DRV_V)<<(RTC_IO_X32P_DRV_S)) +#define RTC_IO_X32P_DRV_V 0x3 +#define RTC_IO_X32P_DRV_S 25 +/* RTC_IO_X32P_HOLD : R/W ;bitpos:[24] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_X32P_HOLD (BIT(24)) +#define RTC_IO_X32P_HOLD_M (BIT(24)) +#define RTC_IO_X32P_HOLD_V 0x1 +#define RTC_IO_X32P_HOLD_S 24 +/* RTC_IO_X32P_RDE : R/W ;bitpos:[23] ;default: 1'd0 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_X32P_RDE (BIT(23)) +#define RTC_IO_X32P_RDE_M (BIT(23)) +#define RTC_IO_X32P_RDE_V 0x1 +#define RTC_IO_X32P_RDE_S 23 +/* RTC_IO_X32P_RUE : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_X32P_RUE (BIT(22)) +#define RTC_IO_X32P_RUE_M (BIT(22)) +#define RTC_IO_X32P_RUE_V 0x1 +#define RTC_IO_X32P_RUE_S 22 +/* RTC_IO_DAC_XTAL_32K : R/W ;bitpos:[21:20] ;default: 2'b01 ; */ +/*description: 32K XTAL bias current DAC.*/ +#define RTC_IO_DAC_XTAL_32K 0x00000003 +#define RTC_IO_DAC_XTAL_32K_M ((RTC_IO_DAC_XTAL_32K_V)<<(RTC_IO_DAC_XTAL_32K_S)) +#define RTC_IO_DAC_XTAL_32K_V 0x3 +#define RTC_IO_DAC_XTAL_32K_S 20 +/* RTC_IO_XPD_XTAL_32K : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: Power up 32kHz crystal oscillator*/ +#define RTC_IO_XPD_XTAL_32K (BIT(19)) +#define RTC_IO_XPD_XTAL_32K_M (BIT(19)) +#define RTC_IO_XPD_XTAL_32K_V 0x1 +#define RTC_IO_XPD_XTAL_32K_S 19 +/* RTC_IO_X32N_MUX_SEL : R/W ;bitpos:[18] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_X32N_MUX_SEL (BIT(18)) +#define RTC_IO_X32N_MUX_SEL_M (BIT(18)) +#define RTC_IO_X32N_MUX_SEL_V 0x1 +#define RTC_IO_X32N_MUX_SEL_S 18 +/* RTC_IO_X32P_MUX_SEL : R/W ;bitpos:[17] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_X32P_MUX_SEL (BIT(17)) +#define RTC_IO_X32P_MUX_SEL_M (BIT(17)) +#define RTC_IO_X32P_MUX_SEL_V 0x1 +#define RTC_IO_X32P_MUX_SEL_S 17 +/* RTC_IO_X32N_FUN_SEL : R/W ;bitpos:[16:15] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_X32N_FUN_SEL 0x00000003 +#define RTC_IO_X32N_FUN_SEL_M ((RTC_IO_X32N_FUN_SEL_V)<<(RTC_IO_X32N_FUN_SEL_S)) +#define RTC_IO_X32N_FUN_SEL_V 0x3 +#define RTC_IO_X32N_FUN_SEL_S 15 +/* RTC_IO_X32N_SLP_SEL : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_X32N_SLP_SEL (BIT(14)) +#define RTC_IO_X32N_SLP_SEL_M (BIT(14)) +#define RTC_IO_X32N_SLP_SEL_V 0x1 +#define RTC_IO_X32N_SLP_SEL_S 14 +/* RTC_IO_X32N_SLP_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_X32N_SLP_IE (BIT(13)) +#define RTC_IO_X32N_SLP_IE_M (BIT(13)) +#define RTC_IO_X32N_SLP_IE_V 0x1 +#define RTC_IO_X32N_SLP_IE_S 13 +/* RTC_IO_X32N_SLP_OE : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_X32N_SLP_OE (BIT(12)) +#define RTC_IO_X32N_SLP_OE_M (BIT(12)) +#define RTC_IO_X32N_SLP_OE_V 0x1 +#define RTC_IO_X32N_SLP_OE_S 12 +/* RTC_IO_X32N_FUN_IE : R/W ;bitpos:[11] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_X32N_FUN_IE (BIT(11)) +#define RTC_IO_X32N_FUN_IE_M (BIT(11)) +#define RTC_IO_X32N_FUN_IE_V 0x1 +#define RTC_IO_X32N_FUN_IE_S 11 +/* RTC_IO_X32P_FUN_SEL : R/W ;bitpos:[10:9] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_X32P_FUN_SEL 0x00000003 +#define RTC_IO_X32P_FUN_SEL_M ((RTC_IO_X32P_FUN_SEL_V)<<(RTC_IO_X32P_FUN_SEL_S)) +#define RTC_IO_X32P_FUN_SEL_V 0x3 +#define RTC_IO_X32P_FUN_SEL_S 9 +/* RTC_IO_X32P_SLP_SEL : R/W ;bitpos:[8] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_X32P_SLP_SEL (BIT(8)) +#define RTC_IO_X32P_SLP_SEL_M (BIT(8)) +#define RTC_IO_X32P_SLP_SEL_V 0x1 +#define RTC_IO_X32P_SLP_SEL_S 8 +/* RTC_IO_X32P_SLP_IE : R/W ;bitpos:[7] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_X32P_SLP_IE (BIT(7)) +#define RTC_IO_X32P_SLP_IE_M (BIT(7)) +#define RTC_IO_X32P_SLP_IE_V 0x1 +#define RTC_IO_X32P_SLP_IE_S 7 +/* RTC_IO_X32P_SLP_OE : R/W ;bitpos:[6] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_X32P_SLP_OE (BIT(6)) +#define RTC_IO_X32P_SLP_OE_M (BIT(6)) +#define RTC_IO_X32P_SLP_OE_V 0x1 +#define RTC_IO_X32P_SLP_OE_S 6 +/* RTC_IO_X32P_FUN_IE : R/W ;bitpos:[5] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_X32P_FUN_IE (BIT(5)) +#define RTC_IO_X32P_FUN_IE_M (BIT(5)) +#define RTC_IO_X32P_FUN_IE_V 0x1 +#define RTC_IO_X32P_FUN_IE_S 5 +/* RTC_IO_DRES_XTAL_32K : R/W ;bitpos:[4:3] ;default: 2'b10 ; */ +/*description: 32K XTAL resistor bias control.*/ +#define RTC_IO_DRES_XTAL_32K 0x00000003 +#define RTC_IO_DRES_XTAL_32K_M ((RTC_IO_DRES_XTAL_32K_V)<<(RTC_IO_DRES_XTAL_32K_S)) +#define RTC_IO_DRES_XTAL_32K_V 0x3 +#define RTC_IO_DRES_XTAL_32K_S 3 +/* RTC_IO_DBIAS_XTAL_32K : R/W ;bitpos:[2:1] ;default: 2'b00 ; */ +/*description: 32K XTAL self-bias reference control.*/ +#define RTC_IO_DBIAS_XTAL_32K 0x00000003 +#define RTC_IO_DBIAS_XTAL_32K_M ((RTC_IO_DBIAS_XTAL_32K_V)<<(RTC_IO_DBIAS_XTAL_32K_S)) +#define RTC_IO_DBIAS_XTAL_32K_V 0x3 +#define RTC_IO_DBIAS_XTAL_32K_S 1 + +#define RTC_IO_TOUCH_CFG_REG (DR_REG_RTCIO_BASE + 0x90) +/* RTC_IO_TOUCH_XPD_BIAS : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: touch sensor bias power on.*/ +#define RTC_IO_TOUCH_XPD_BIAS (BIT(31)) +#define RTC_IO_TOUCH_XPD_BIAS_M (BIT(31)) +#define RTC_IO_TOUCH_XPD_BIAS_V 0x1 +#define RTC_IO_TOUCH_XPD_BIAS_S 31 +/* RTC_IO_TOUCH_DREFH : R/W ;bitpos:[30:29] ;default: 2'b11 ; */ +/*description: touch sensor saw wave top voltage.*/ +#define RTC_IO_TOUCH_DREFH 0x00000003 +#define RTC_IO_TOUCH_DREFH_M ((RTC_IO_TOUCH_DREFH_V)<<(RTC_IO_TOUCH_DREFH_S)) +#define RTC_IO_TOUCH_DREFH_V 0x3 +#define RTC_IO_TOUCH_DREFH_S 29 +/* RTC_IO_TOUCH_DREFL : R/W ;bitpos:[28:27] ;default: 2'b00 ; */ +/*description: touch sensor saw wave bottom voltage.*/ +#define RTC_IO_TOUCH_DREFL 0x00000003 +#define RTC_IO_TOUCH_DREFL_M ((RTC_IO_TOUCH_DREFL_V)<<(RTC_IO_TOUCH_DREFL_S)) +#define RTC_IO_TOUCH_DREFL_V 0x3 +#define RTC_IO_TOUCH_DREFL_S 27 +/* RTC_IO_TOUCH_DRANGE : R/W ;bitpos:[26:25] ;default: 2'b11 ; */ +/*description: touch sensor saw wave voltage range.*/ +#define RTC_IO_TOUCH_DRANGE 0x00000003 +#define RTC_IO_TOUCH_DRANGE_M ((RTC_IO_TOUCH_DRANGE_V)<<(RTC_IO_TOUCH_DRANGE_S)) +#define RTC_IO_TOUCH_DRANGE_V 0x3 +#define RTC_IO_TOUCH_DRANGE_S 25 +/* RTC_IO_TOUCH_DCUR : R/W ;bitpos:[24:23] ;default: 2'b00 ; */ +/*description: touch sensor bias current. Should have option to tie with BIAS_SLEEP(When + BIAS_SLEEP this setting is available*/ +#define RTC_IO_TOUCH_DCUR 0x00000003 +#define RTC_IO_TOUCH_DCUR_M ((RTC_IO_TOUCH_DCUR_V)<<(RTC_IO_TOUCH_DCUR_S)) +#define RTC_IO_TOUCH_DCUR_V 0x3 +#define RTC_IO_TOUCH_DCUR_S 23 + +#define RTC_IO_TOUCH_PAD0_REG (DR_REG_RTCIO_BASE + 0x94) +/* RTC_IO_TOUCH_PAD0_HOLD : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_TOUCH_PAD0_HOLD (BIT(31)) +#define RTC_IO_TOUCH_PAD0_HOLD_M (BIT(31)) +#define RTC_IO_TOUCH_PAD0_HOLD_V 0x1 +#define RTC_IO_TOUCH_PAD0_HOLD_S 31 +/* RTC_IO_TOUCH_PAD0_DRV : R/W ;bitpos:[30:29] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_TOUCH_PAD0_DRV 0x00000003 +#define RTC_IO_TOUCH_PAD0_DRV_M ((RTC_IO_TOUCH_PAD0_DRV_V)<<(RTC_IO_TOUCH_PAD0_DRV_S)) +#define RTC_IO_TOUCH_PAD0_DRV_V 0x3 +#define RTC_IO_TOUCH_PAD0_DRV_S 29 +/* RTC_IO_TOUCH_PAD0_RDE : R/W ;bitpos:[28] ;default: 1'd1 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_TOUCH_PAD0_RDE (BIT(28)) +#define RTC_IO_TOUCH_PAD0_RDE_M (BIT(28)) +#define RTC_IO_TOUCH_PAD0_RDE_V 0x1 +#define RTC_IO_TOUCH_PAD0_RDE_S 28 +/* RTC_IO_TOUCH_PAD0_RUE : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_TOUCH_PAD0_RUE (BIT(27)) +#define RTC_IO_TOUCH_PAD0_RUE_M (BIT(27)) +#define RTC_IO_TOUCH_PAD0_RUE_V 0x1 +#define RTC_IO_TOUCH_PAD0_RUE_S 27 +/* RTC_IO_TOUCH_PAD0_DAC : R/W ;bitpos:[25:23] ;default: 3'h4 ; */ +/*description: touch sensor slope control. 3-bit for each touch panel default 100.*/ +#define RTC_IO_TOUCH_PAD0_DAC 0x00000007 +#define RTC_IO_TOUCH_PAD0_DAC_M ((RTC_IO_TOUCH_PAD0_DAC_V)<<(RTC_IO_TOUCH_PAD0_DAC_S)) +#define RTC_IO_TOUCH_PAD0_DAC_V 0x7 +#define RTC_IO_TOUCH_PAD0_DAC_S 23 +/* RTC_IO_TOUCH_PAD0_START : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: start touch sensor.*/ +#define RTC_IO_TOUCH_PAD0_START (BIT(22)) +#define RTC_IO_TOUCH_PAD0_START_M (BIT(22)) +#define RTC_IO_TOUCH_PAD0_START_V 0x1 +#define RTC_IO_TOUCH_PAD0_START_S 22 +/* RTC_IO_TOUCH_PAD0_TIE_OPT : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: default touch sensor tie option. 0: tie low 1: tie high.*/ +#define RTC_IO_TOUCH_PAD0_TIE_OPT (BIT(21)) +#define RTC_IO_TOUCH_PAD0_TIE_OPT_M (BIT(21)) +#define RTC_IO_TOUCH_PAD0_TIE_OPT_V 0x1 +#define RTC_IO_TOUCH_PAD0_TIE_OPT_S 21 +/* RTC_IO_TOUCH_PAD0_XPD : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: touch sensor power on.*/ +#define RTC_IO_TOUCH_PAD0_XPD (BIT(20)) +#define RTC_IO_TOUCH_PAD0_XPD_M (BIT(20)) +#define RTC_IO_TOUCH_PAD0_XPD_V 0x1 +#define RTC_IO_TOUCH_PAD0_XPD_S 20 +/* RTC_IO_TOUCH_PAD0_MUX_SEL : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_TOUCH_PAD0_MUX_SEL (BIT(19)) +#define RTC_IO_TOUCH_PAD0_MUX_SEL_M (BIT(19)) +#define RTC_IO_TOUCH_PAD0_MUX_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD0_MUX_SEL_S 19 +/* RTC_IO_TOUCH_PAD0_FUN_SEL : R/W ;bitpos:[18:17] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD0_FUN_SEL 0x00000003 +#define RTC_IO_TOUCH_PAD0_FUN_SEL_M ((RTC_IO_TOUCH_PAD0_FUN_SEL_V)<<(RTC_IO_TOUCH_PAD0_FUN_SEL_S)) +#define RTC_IO_TOUCH_PAD0_FUN_SEL_V 0x3 +#define RTC_IO_TOUCH_PAD0_FUN_SEL_S 17 +/* RTC_IO_TOUCH_PAD0_SLP_SEL : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD0_SLP_SEL (BIT(16)) +#define RTC_IO_TOUCH_PAD0_SLP_SEL_M (BIT(16)) +#define RTC_IO_TOUCH_PAD0_SLP_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD0_SLP_SEL_S 16 +/* RTC_IO_TOUCH_PAD0_SLP_IE : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD0_SLP_IE (BIT(15)) +#define RTC_IO_TOUCH_PAD0_SLP_IE_M (BIT(15)) +#define RTC_IO_TOUCH_PAD0_SLP_IE_V 0x1 +#define RTC_IO_TOUCH_PAD0_SLP_IE_S 15 +/* RTC_IO_TOUCH_PAD0_SLP_OE : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD0_SLP_OE (BIT(14)) +#define RTC_IO_TOUCH_PAD0_SLP_OE_M (BIT(14)) +#define RTC_IO_TOUCH_PAD0_SLP_OE_V 0x1 +#define RTC_IO_TOUCH_PAD0_SLP_OE_S 14 +/* RTC_IO_TOUCH_PAD0_FUN_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_TOUCH_PAD0_FUN_IE (BIT(13)) +#define RTC_IO_TOUCH_PAD0_FUN_IE_M (BIT(13)) +#define RTC_IO_TOUCH_PAD0_FUN_IE_V 0x1 +#define RTC_IO_TOUCH_PAD0_FUN_IE_S 13 +/* RTC_IO_TOUCH_PAD0_TO_GPIO : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: connect the rtc pad input to digital pad input Ó0Ó is availbale GPIO4*/ +#define RTC_IO_TOUCH_PAD0_TO_GPIO (BIT(12)) +#define RTC_IO_TOUCH_PAD0_TO_GPIO_M (BIT(12)) +#define RTC_IO_TOUCH_PAD0_TO_GPIO_V 0x1 +#define RTC_IO_TOUCH_PAD0_TO_GPIO_S 12 + +#define RTC_IO_TOUCH_PAD1_REG (DR_REG_RTCIO_BASE + 0x98) +/* RTC_IO_TOUCH_PAD1_HOLD : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: */ +#define RTC_IO_TOUCH_PAD1_HOLD (BIT(31)) +#define RTC_IO_TOUCH_PAD1_HOLD_M (BIT(31)) +#define RTC_IO_TOUCH_PAD1_HOLD_V 0x1 +#define RTC_IO_TOUCH_PAD1_HOLD_S 31 +/* RTC_IO_TOUCH_PAD1_DRV : R/W ;bitpos:[30:29] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_TOUCH_PAD1_DRV 0x00000003 +#define RTC_IO_TOUCH_PAD1_DRV_M ((RTC_IO_TOUCH_PAD1_DRV_V)<<(RTC_IO_TOUCH_PAD1_DRV_S)) +#define RTC_IO_TOUCH_PAD1_DRV_V 0x3 +#define RTC_IO_TOUCH_PAD1_DRV_S 29 +/* RTC_IO_TOUCH_PAD1_RDE : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_TOUCH_PAD1_RDE (BIT(28)) +#define RTC_IO_TOUCH_PAD1_RDE_M (BIT(28)) +#define RTC_IO_TOUCH_PAD1_RDE_V 0x1 +#define RTC_IO_TOUCH_PAD1_RDE_S 28 +/* RTC_IO_TOUCH_PAD1_RUE : R/W ;bitpos:[27] ;default: 1'd1 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_TOUCH_PAD1_RUE (BIT(27)) +#define RTC_IO_TOUCH_PAD1_RUE_M (BIT(27)) +#define RTC_IO_TOUCH_PAD1_RUE_V 0x1 +#define RTC_IO_TOUCH_PAD1_RUE_S 27 +/* RTC_IO_TOUCH_PAD1_DAC : R/W ;bitpos:[25:23] ;default: 3'h4 ; */ +/*description: touch sensor slope control. 3-bit for each touch panel default 100.*/ +#define RTC_IO_TOUCH_PAD1_DAC 0x00000007 +#define RTC_IO_TOUCH_PAD1_DAC_M ((RTC_IO_TOUCH_PAD1_DAC_V)<<(RTC_IO_TOUCH_PAD1_DAC_S)) +#define RTC_IO_TOUCH_PAD1_DAC_V 0x7 +#define RTC_IO_TOUCH_PAD1_DAC_S 23 +/* RTC_IO_TOUCH_PAD1_START : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: start touch sensor.*/ +#define RTC_IO_TOUCH_PAD1_START (BIT(22)) +#define RTC_IO_TOUCH_PAD1_START_M (BIT(22)) +#define RTC_IO_TOUCH_PAD1_START_V 0x1 +#define RTC_IO_TOUCH_PAD1_START_S 22 +/* RTC_IO_TOUCH_PAD1_TIE_OPT : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: default touch sensor tie option. 0: tie low 1: tie high.*/ +#define RTC_IO_TOUCH_PAD1_TIE_OPT (BIT(21)) +#define RTC_IO_TOUCH_PAD1_TIE_OPT_M (BIT(21)) +#define RTC_IO_TOUCH_PAD1_TIE_OPT_V 0x1 +#define RTC_IO_TOUCH_PAD1_TIE_OPT_S 21 +/* RTC_IO_TOUCH_PAD1_XPD : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: touch sensor power on.*/ +#define RTC_IO_TOUCH_PAD1_XPD (BIT(20)) +#define RTC_IO_TOUCH_PAD1_XPD_M (BIT(20)) +#define RTC_IO_TOUCH_PAD1_XPD_V 0x1 +#define RTC_IO_TOUCH_PAD1_XPD_S 20 +/* RTC_IO_TOUCH_PAD1_MUX_SEL : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_TOUCH_PAD1_MUX_SEL (BIT(19)) +#define RTC_IO_TOUCH_PAD1_MUX_SEL_M (BIT(19)) +#define RTC_IO_TOUCH_PAD1_MUX_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD1_MUX_SEL_S 19 +/* RTC_IO_TOUCH_PAD1_FUN_SEL : R/W ;bitpos:[18:17] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD1_FUN_SEL 0x00000003 +#define RTC_IO_TOUCH_PAD1_FUN_SEL_M ((RTC_IO_TOUCH_PAD1_FUN_SEL_V)<<(RTC_IO_TOUCH_PAD1_FUN_SEL_S)) +#define RTC_IO_TOUCH_PAD1_FUN_SEL_V 0x3 +#define RTC_IO_TOUCH_PAD1_FUN_SEL_S 17 +/* RTC_IO_TOUCH_PAD1_SLP_SEL : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD1_SLP_SEL (BIT(16)) +#define RTC_IO_TOUCH_PAD1_SLP_SEL_M (BIT(16)) +#define RTC_IO_TOUCH_PAD1_SLP_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD1_SLP_SEL_S 16 +/* RTC_IO_TOUCH_PAD1_SLP_IE : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD1_SLP_IE (BIT(15)) +#define RTC_IO_TOUCH_PAD1_SLP_IE_M (BIT(15)) +#define RTC_IO_TOUCH_PAD1_SLP_IE_V 0x1 +#define RTC_IO_TOUCH_PAD1_SLP_IE_S 15 +/* RTC_IO_TOUCH_PAD1_SLP_OE : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD1_SLP_OE (BIT(14)) +#define RTC_IO_TOUCH_PAD1_SLP_OE_M (BIT(14)) +#define RTC_IO_TOUCH_PAD1_SLP_OE_V 0x1 +#define RTC_IO_TOUCH_PAD1_SLP_OE_S 14 +/* RTC_IO_TOUCH_PAD1_FUN_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_TOUCH_PAD1_FUN_IE (BIT(13)) +#define RTC_IO_TOUCH_PAD1_FUN_IE_M (BIT(13)) +#define RTC_IO_TOUCH_PAD1_FUN_IE_V 0x1 +#define RTC_IO_TOUCH_PAD1_FUN_IE_S 13 +/* RTC_IO_TOUCH_PAD1_TO_GPIO : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: connect the rtc pad input to digital pad input Ó0Ó is availbale.GPIO0*/ +#define RTC_IO_TOUCH_PAD1_TO_GPIO (BIT(12)) +#define RTC_IO_TOUCH_PAD1_TO_GPIO_M (BIT(12)) +#define RTC_IO_TOUCH_PAD1_TO_GPIO_V 0x1 +#define RTC_IO_TOUCH_PAD1_TO_GPIO_S 12 + +#define RTC_IO_TOUCH_PAD2_REG (DR_REG_RTCIO_BASE + 0x9c) +/* RTC_IO_TOUCH_PAD2_HOLD : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_TOUCH_PAD2_HOLD (BIT(31)) +#define RTC_IO_TOUCH_PAD2_HOLD_M (BIT(31)) +#define RTC_IO_TOUCH_PAD2_HOLD_V 0x1 +#define RTC_IO_TOUCH_PAD2_HOLD_S 31 +/* RTC_IO_TOUCH_PAD2_DRV : R/W ;bitpos:[30:29] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_TOUCH_PAD2_DRV 0x00000003 +#define RTC_IO_TOUCH_PAD2_DRV_M ((RTC_IO_TOUCH_PAD2_DRV_V)<<(RTC_IO_TOUCH_PAD2_DRV_S)) +#define RTC_IO_TOUCH_PAD2_DRV_V 0x3 +#define RTC_IO_TOUCH_PAD2_DRV_S 29 +/* RTC_IO_TOUCH_PAD2_RDE : R/W ;bitpos:[28] ;default: 1'd1 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_TOUCH_PAD2_RDE (BIT(28)) +#define RTC_IO_TOUCH_PAD2_RDE_M (BIT(28)) +#define RTC_IO_TOUCH_PAD2_RDE_V 0x1 +#define RTC_IO_TOUCH_PAD2_RDE_S 28 +/* RTC_IO_TOUCH_PAD2_RUE : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_TOUCH_PAD2_RUE (BIT(27)) +#define RTC_IO_TOUCH_PAD2_RUE_M (BIT(27)) +#define RTC_IO_TOUCH_PAD2_RUE_V 0x1 +#define RTC_IO_TOUCH_PAD2_RUE_S 27 +/* RTC_IO_TOUCH_PAD2_DAC : R/W ;bitpos:[25:23] ;default: 3'h4 ; */ +/*description: touch sensor slope control. 3-bit for each touch panel default 100.*/ +#define RTC_IO_TOUCH_PAD2_DAC 0x00000007 +#define RTC_IO_TOUCH_PAD2_DAC_M ((RTC_IO_TOUCH_PAD2_DAC_V)<<(RTC_IO_TOUCH_PAD2_DAC_S)) +#define RTC_IO_TOUCH_PAD2_DAC_V 0x7 +#define RTC_IO_TOUCH_PAD2_DAC_S 23 +/* RTC_IO_TOUCH_PAD2_START : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: start touch sensor.*/ +#define RTC_IO_TOUCH_PAD2_START (BIT(22)) +#define RTC_IO_TOUCH_PAD2_START_M (BIT(22)) +#define RTC_IO_TOUCH_PAD2_START_V 0x1 +#define RTC_IO_TOUCH_PAD2_START_S 22 +/* RTC_IO_TOUCH_PAD2_TIE_OPT : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: default touch sensor tie option. 0: tie low 1: tie high.*/ +#define RTC_IO_TOUCH_PAD2_TIE_OPT (BIT(21)) +#define RTC_IO_TOUCH_PAD2_TIE_OPT_M (BIT(21)) +#define RTC_IO_TOUCH_PAD2_TIE_OPT_V 0x1 +#define RTC_IO_TOUCH_PAD2_TIE_OPT_S 21 +/* RTC_IO_TOUCH_PAD2_XPD : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: touch sensor power on.*/ +#define RTC_IO_TOUCH_PAD2_XPD (BIT(20)) +#define RTC_IO_TOUCH_PAD2_XPD_M (BIT(20)) +#define RTC_IO_TOUCH_PAD2_XPD_V 0x1 +#define RTC_IO_TOUCH_PAD2_XPD_S 20 +/* RTC_IO_TOUCH_PAD2_MUX_SEL : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_TOUCH_PAD2_MUX_SEL (BIT(19)) +#define RTC_IO_TOUCH_PAD2_MUX_SEL_M (BIT(19)) +#define RTC_IO_TOUCH_PAD2_MUX_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD2_MUX_SEL_S 19 +/* RTC_IO_TOUCH_PAD2_FUN_SEL : R/W ;bitpos:[18:17] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD2_FUN_SEL 0x00000003 +#define RTC_IO_TOUCH_PAD2_FUN_SEL_M ((RTC_IO_TOUCH_PAD2_FUN_SEL_V)<<(RTC_IO_TOUCH_PAD2_FUN_SEL_S)) +#define RTC_IO_TOUCH_PAD2_FUN_SEL_V 0x3 +#define RTC_IO_TOUCH_PAD2_FUN_SEL_S 17 +/* RTC_IO_TOUCH_PAD2_SLP_SEL : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD2_SLP_SEL (BIT(16)) +#define RTC_IO_TOUCH_PAD2_SLP_SEL_M (BIT(16)) +#define RTC_IO_TOUCH_PAD2_SLP_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD2_SLP_SEL_S 16 +/* RTC_IO_TOUCH_PAD2_SLP_IE : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD2_SLP_IE (BIT(15)) +#define RTC_IO_TOUCH_PAD2_SLP_IE_M (BIT(15)) +#define RTC_IO_TOUCH_PAD2_SLP_IE_V 0x1 +#define RTC_IO_TOUCH_PAD2_SLP_IE_S 15 +/* RTC_IO_TOUCH_PAD2_SLP_OE : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD2_SLP_OE (BIT(14)) +#define RTC_IO_TOUCH_PAD2_SLP_OE_M (BIT(14)) +#define RTC_IO_TOUCH_PAD2_SLP_OE_V 0x1 +#define RTC_IO_TOUCH_PAD2_SLP_OE_S 14 +/* RTC_IO_TOUCH_PAD2_FUN_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_TOUCH_PAD2_FUN_IE (BIT(13)) +#define RTC_IO_TOUCH_PAD2_FUN_IE_M (BIT(13)) +#define RTC_IO_TOUCH_PAD2_FUN_IE_V 0x1 +#define RTC_IO_TOUCH_PAD2_FUN_IE_S 13 +/* RTC_IO_TOUCH_PAD2_TO_GPIO : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: connect the rtc pad input to digital pad input Ó0Ó is availbale.GPIO2*/ +#define RTC_IO_TOUCH_PAD2_TO_GPIO (BIT(12)) +#define RTC_IO_TOUCH_PAD2_TO_GPIO_M (BIT(12)) +#define RTC_IO_TOUCH_PAD2_TO_GPIO_V 0x1 +#define RTC_IO_TOUCH_PAD2_TO_GPIO_S 12 + +#define RTC_IO_TOUCH_PAD3_REG (DR_REG_RTCIO_BASE + 0xa0) +/* RTC_IO_TOUCH_PAD3_HOLD : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_TOUCH_PAD3_HOLD (BIT(31)) +#define RTC_IO_TOUCH_PAD3_HOLD_M (BIT(31)) +#define RTC_IO_TOUCH_PAD3_HOLD_V 0x1 +#define RTC_IO_TOUCH_PAD3_HOLD_S 31 +/* RTC_IO_TOUCH_PAD3_DRV : R/W ;bitpos:[30:29] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_TOUCH_PAD3_DRV 0x00000003 +#define RTC_IO_TOUCH_PAD3_DRV_M ((RTC_IO_TOUCH_PAD3_DRV_V)<<(RTC_IO_TOUCH_PAD3_DRV_S)) +#define RTC_IO_TOUCH_PAD3_DRV_V 0x3 +#define RTC_IO_TOUCH_PAD3_DRV_S 29 +/* RTC_IO_TOUCH_PAD3_RDE : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_TOUCH_PAD3_RDE (BIT(28)) +#define RTC_IO_TOUCH_PAD3_RDE_M (BIT(28)) +#define RTC_IO_TOUCH_PAD3_RDE_V 0x1 +#define RTC_IO_TOUCH_PAD3_RDE_S 28 +/* RTC_IO_TOUCH_PAD3_RUE : R/W ;bitpos:[27] ;default: 1'd1 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_TOUCH_PAD3_RUE (BIT(27)) +#define RTC_IO_TOUCH_PAD3_RUE_M (BIT(27)) +#define RTC_IO_TOUCH_PAD3_RUE_V 0x1 +#define RTC_IO_TOUCH_PAD3_RUE_S 27 +/* RTC_IO_TOUCH_PAD3_DAC : R/W ;bitpos:[25:23] ;default: 3'h4 ; */ +/*description: touch sensor slope control. 3-bit for each touch panel default 100.*/ +#define RTC_IO_TOUCH_PAD3_DAC 0x00000007 +#define RTC_IO_TOUCH_PAD3_DAC_M ((RTC_IO_TOUCH_PAD3_DAC_V)<<(RTC_IO_TOUCH_PAD3_DAC_S)) +#define RTC_IO_TOUCH_PAD3_DAC_V 0x7 +#define RTC_IO_TOUCH_PAD3_DAC_S 23 +/* RTC_IO_TOUCH_PAD3_START : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: start touch sensor.*/ +#define RTC_IO_TOUCH_PAD3_START (BIT(22)) +#define RTC_IO_TOUCH_PAD3_START_M (BIT(22)) +#define RTC_IO_TOUCH_PAD3_START_V 0x1 +#define RTC_IO_TOUCH_PAD3_START_S 22 +/* RTC_IO_TOUCH_PAD3_TIE_OPT : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: default touch sensor tie option. 0: tie low 1: tie high.*/ +#define RTC_IO_TOUCH_PAD3_TIE_OPT (BIT(21)) +#define RTC_IO_TOUCH_PAD3_TIE_OPT_M (BIT(21)) +#define RTC_IO_TOUCH_PAD3_TIE_OPT_V 0x1 +#define RTC_IO_TOUCH_PAD3_TIE_OPT_S 21 +/* RTC_IO_TOUCH_PAD3_XPD : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: touch sensor power on.*/ +#define RTC_IO_TOUCH_PAD3_XPD (BIT(20)) +#define RTC_IO_TOUCH_PAD3_XPD_M (BIT(20)) +#define RTC_IO_TOUCH_PAD3_XPD_V 0x1 +#define RTC_IO_TOUCH_PAD3_XPD_S 20 +/* RTC_IO_TOUCH_PAD3_MUX_SEL : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_TOUCH_PAD3_MUX_SEL (BIT(19)) +#define RTC_IO_TOUCH_PAD3_MUX_SEL_M (BIT(19)) +#define RTC_IO_TOUCH_PAD3_MUX_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD3_MUX_SEL_S 19 +/* RTC_IO_TOUCH_PAD3_FUN_SEL : R/W ;bitpos:[18:17] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD3_FUN_SEL 0x00000003 +#define RTC_IO_TOUCH_PAD3_FUN_SEL_M ((RTC_IO_TOUCH_PAD3_FUN_SEL_V)<<(RTC_IO_TOUCH_PAD3_FUN_SEL_S)) +#define RTC_IO_TOUCH_PAD3_FUN_SEL_V 0x3 +#define RTC_IO_TOUCH_PAD3_FUN_SEL_S 17 +/* RTC_IO_TOUCH_PAD3_SLP_SEL : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD3_SLP_SEL (BIT(16)) +#define RTC_IO_TOUCH_PAD3_SLP_SEL_M (BIT(16)) +#define RTC_IO_TOUCH_PAD3_SLP_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD3_SLP_SEL_S 16 +/* RTC_IO_TOUCH_PAD3_SLP_IE : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD3_SLP_IE (BIT(15)) +#define RTC_IO_TOUCH_PAD3_SLP_IE_M (BIT(15)) +#define RTC_IO_TOUCH_PAD3_SLP_IE_V 0x1 +#define RTC_IO_TOUCH_PAD3_SLP_IE_S 15 +/* RTC_IO_TOUCH_PAD3_SLP_OE : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD3_SLP_OE (BIT(14)) +#define RTC_IO_TOUCH_PAD3_SLP_OE_M (BIT(14)) +#define RTC_IO_TOUCH_PAD3_SLP_OE_V 0x1 +#define RTC_IO_TOUCH_PAD3_SLP_OE_S 14 +/* RTC_IO_TOUCH_PAD3_FUN_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_TOUCH_PAD3_FUN_IE (BIT(13)) +#define RTC_IO_TOUCH_PAD3_FUN_IE_M (BIT(13)) +#define RTC_IO_TOUCH_PAD3_FUN_IE_V 0x1 +#define RTC_IO_TOUCH_PAD3_FUN_IE_S 13 +/* RTC_IO_TOUCH_PAD3_TO_GPIO : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: connect the rtc pad input to digital pad input Ó0Ó is availbale.MTDO*/ +#define RTC_IO_TOUCH_PAD3_TO_GPIO (BIT(12)) +#define RTC_IO_TOUCH_PAD3_TO_GPIO_M (BIT(12)) +#define RTC_IO_TOUCH_PAD3_TO_GPIO_V 0x1 +#define RTC_IO_TOUCH_PAD3_TO_GPIO_S 12 + +#define RTC_IO_TOUCH_PAD4_REG (DR_REG_RTCIO_BASE + 0xa4) +/* RTC_IO_TOUCH_PAD4_HOLD : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_TOUCH_PAD4_HOLD (BIT(31)) +#define RTC_IO_TOUCH_PAD4_HOLD_M (BIT(31)) +#define RTC_IO_TOUCH_PAD4_HOLD_V 0x1 +#define RTC_IO_TOUCH_PAD4_HOLD_S 31 +/* RTC_IO_TOUCH_PAD4_DRV : R/W ;bitpos:[30:29] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_TOUCH_PAD4_DRV 0x00000003 +#define RTC_IO_TOUCH_PAD4_DRV_M ((RTC_IO_TOUCH_PAD4_DRV_V)<<(RTC_IO_TOUCH_PAD4_DRV_S)) +#define RTC_IO_TOUCH_PAD4_DRV_V 0x3 +#define RTC_IO_TOUCH_PAD4_DRV_S 29 +/* RTC_IO_TOUCH_PAD4_RDE : R/W ;bitpos:[28] ;default: 1'd1 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_TOUCH_PAD4_RDE (BIT(28)) +#define RTC_IO_TOUCH_PAD4_RDE_M (BIT(28)) +#define RTC_IO_TOUCH_PAD4_RDE_V 0x1 +#define RTC_IO_TOUCH_PAD4_RDE_S 28 +/* RTC_IO_TOUCH_PAD4_RUE : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_TOUCH_PAD4_RUE (BIT(27)) +#define RTC_IO_TOUCH_PAD4_RUE_M (BIT(27)) +#define RTC_IO_TOUCH_PAD4_RUE_V 0x1 +#define RTC_IO_TOUCH_PAD4_RUE_S 27 +/* RTC_IO_TOUCH_PAD4_DAC : R/W ;bitpos:[25:23] ;default: 3'h4 ; */ +/*description: touch sensor slope control. 3-bit for each touch panel default 100.*/ +#define RTC_IO_TOUCH_PAD4_DAC 0x00000007 +#define RTC_IO_TOUCH_PAD4_DAC_M ((RTC_IO_TOUCH_PAD4_DAC_V)<<(RTC_IO_TOUCH_PAD4_DAC_S)) +#define RTC_IO_TOUCH_PAD4_DAC_V 0x7 +#define RTC_IO_TOUCH_PAD4_DAC_S 23 +/* RTC_IO_TOUCH_PAD4_START : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: start touch sensor.*/ +#define RTC_IO_TOUCH_PAD4_START (BIT(22)) +#define RTC_IO_TOUCH_PAD4_START_M (BIT(22)) +#define RTC_IO_TOUCH_PAD4_START_V 0x1 +#define RTC_IO_TOUCH_PAD4_START_S 22 +/* RTC_IO_TOUCH_PAD4_TIE_OPT : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: default touch sensor tie option. 0: tie low 1: tie high.*/ +#define RTC_IO_TOUCH_PAD4_TIE_OPT (BIT(21)) +#define RTC_IO_TOUCH_PAD4_TIE_OPT_M (BIT(21)) +#define RTC_IO_TOUCH_PAD4_TIE_OPT_V 0x1 +#define RTC_IO_TOUCH_PAD4_TIE_OPT_S 21 +/* RTC_IO_TOUCH_PAD4_XPD : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: touch sensor power on.*/ +#define RTC_IO_TOUCH_PAD4_XPD (BIT(20)) +#define RTC_IO_TOUCH_PAD4_XPD_M (BIT(20)) +#define RTC_IO_TOUCH_PAD4_XPD_V 0x1 +#define RTC_IO_TOUCH_PAD4_XPD_S 20 +/* RTC_IO_TOUCH_PAD4_MUX_SEL : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_TOUCH_PAD4_MUX_SEL (BIT(19)) +#define RTC_IO_TOUCH_PAD4_MUX_SEL_M (BIT(19)) +#define RTC_IO_TOUCH_PAD4_MUX_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD4_MUX_SEL_S 19 +/* RTC_IO_TOUCH_PAD4_FUN_SEL : R/W ;bitpos:[18:17] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD4_FUN_SEL 0x00000003 +#define RTC_IO_TOUCH_PAD4_FUN_SEL_M ((RTC_IO_TOUCH_PAD4_FUN_SEL_V)<<(RTC_IO_TOUCH_PAD4_FUN_SEL_S)) +#define RTC_IO_TOUCH_PAD4_FUN_SEL_V 0x3 +#define RTC_IO_TOUCH_PAD4_FUN_SEL_S 17 +/* RTC_IO_TOUCH_PAD4_SLP_SEL : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD4_SLP_SEL (BIT(16)) +#define RTC_IO_TOUCH_PAD4_SLP_SEL_M (BIT(16)) +#define RTC_IO_TOUCH_PAD4_SLP_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD4_SLP_SEL_S 16 +/* RTC_IO_TOUCH_PAD4_SLP_IE : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD4_SLP_IE (BIT(15)) +#define RTC_IO_TOUCH_PAD4_SLP_IE_M (BIT(15)) +#define RTC_IO_TOUCH_PAD4_SLP_IE_V 0x1 +#define RTC_IO_TOUCH_PAD4_SLP_IE_S 15 +/* RTC_IO_TOUCH_PAD4_SLP_OE : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD4_SLP_OE (BIT(14)) +#define RTC_IO_TOUCH_PAD4_SLP_OE_M (BIT(14)) +#define RTC_IO_TOUCH_PAD4_SLP_OE_V 0x1 +#define RTC_IO_TOUCH_PAD4_SLP_OE_S 14 +/* RTC_IO_TOUCH_PAD4_FUN_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_TOUCH_PAD4_FUN_IE (BIT(13)) +#define RTC_IO_TOUCH_PAD4_FUN_IE_M (BIT(13)) +#define RTC_IO_TOUCH_PAD4_FUN_IE_V 0x1 +#define RTC_IO_TOUCH_PAD4_FUN_IE_S 13 +/* RTC_IO_TOUCH_PAD4_TO_GPIO : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: connect the rtc pad input to digital pad input Ó0Ó is availbale.MTCK*/ +#define RTC_IO_TOUCH_PAD4_TO_GPIO (BIT(12)) +#define RTC_IO_TOUCH_PAD4_TO_GPIO_M (BIT(12)) +#define RTC_IO_TOUCH_PAD4_TO_GPIO_V 0x1 +#define RTC_IO_TOUCH_PAD4_TO_GPIO_S 12 + +#define RTC_IO_TOUCH_PAD5_REG (DR_REG_RTCIO_BASE + 0xa8) +/* RTC_IO_TOUCH_PAD5_HOLD : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_TOUCH_PAD5_HOLD (BIT(31)) +#define RTC_IO_TOUCH_PAD5_HOLD_M (BIT(31)) +#define RTC_IO_TOUCH_PAD5_HOLD_V 0x1 +#define RTC_IO_TOUCH_PAD5_HOLD_S 31 +/* RTC_IO_TOUCH_PAD5_DRV : R/W ;bitpos:[30:29] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_TOUCH_PAD5_DRV 0x00000003 +#define RTC_IO_TOUCH_PAD5_DRV_M ((RTC_IO_TOUCH_PAD5_DRV_V)<<(RTC_IO_TOUCH_PAD5_DRV_S)) +#define RTC_IO_TOUCH_PAD5_DRV_V 0x3 +#define RTC_IO_TOUCH_PAD5_DRV_S 29 +/* RTC_IO_TOUCH_PAD5_RDE : R/W ;bitpos:[28] ;default: 1'd1 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_TOUCH_PAD5_RDE (BIT(28)) +#define RTC_IO_TOUCH_PAD5_RDE_M (BIT(28)) +#define RTC_IO_TOUCH_PAD5_RDE_V 0x1 +#define RTC_IO_TOUCH_PAD5_RDE_S 28 +/* RTC_IO_TOUCH_PAD5_RUE : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_TOUCH_PAD5_RUE (BIT(27)) +#define RTC_IO_TOUCH_PAD5_RUE_M (BIT(27)) +#define RTC_IO_TOUCH_PAD5_RUE_V 0x1 +#define RTC_IO_TOUCH_PAD5_RUE_S 27 +/* RTC_IO_TOUCH_PAD5_DAC : R/W ;bitpos:[25:23] ;default: 3'h4 ; */ +/*description: touch sensor slope control. 3-bit for each touch panel default 100.*/ +#define RTC_IO_TOUCH_PAD5_DAC 0x00000007 +#define RTC_IO_TOUCH_PAD5_DAC_M ((RTC_IO_TOUCH_PAD5_DAC_V)<<(RTC_IO_TOUCH_PAD5_DAC_S)) +#define RTC_IO_TOUCH_PAD5_DAC_V 0x7 +#define RTC_IO_TOUCH_PAD5_DAC_S 23 +/* RTC_IO_TOUCH_PAD5_START : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: start touch sensor.*/ +#define RTC_IO_TOUCH_PAD5_START (BIT(22)) +#define RTC_IO_TOUCH_PAD5_START_M (BIT(22)) +#define RTC_IO_TOUCH_PAD5_START_V 0x1 +#define RTC_IO_TOUCH_PAD5_START_S 22 +/* RTC_IO_TOUCH_PAD5_TIE_OPT : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: default touch sensor tie option. 0: tie low 1: tie high.*/ +#define RTC_IO_TOUCH_PAD5_TIE_OPT (BIT(21)) +#define RTC_IO_TOUCH_PAD5_TIE_OPT_M (BIT(21)) +#define RTC_IO_TOUCH_PAD5_TIE_OPT_V 0x1 +#define RTC_IO_TOUCH_PAD5_TIE_OPT_S 21 +/* RTC_IO_TOUCH_PAD5_XPD : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: touch sensor power on.*/ +#define RTC_IO_TOUCH_PAD5_XPD (BIT(20)) +#define RTC_IO_TOUCH_PAD5_XPD_M (BIT(20)) +#define RTC_IO_TOUCH_PAD5_XPD_V 0x1 +#define RTC_IO_TOUCH_PAD5_XPD_S 20 +/* RTC_IO_TOUCH_PAD5_MUX_SEL : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_TOUCH_PAD5_MUX_SEL (BIT(19)) +#define RTC_IO_TOUCH_PAD5_MUX_SEL_M (BIT(19)) +#define RTC_IO_TOUCH_PAD5_MUX_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD5_MUX_SEL_S 19 +/* RTC_IO_TOUCH_PAD5_FUN_SEL : R/W ;bitpos:[18:17] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD5_FUN_SEL 0x00000003 +#define RTC_IO_TOUCH_PAD5_FUN_SEL_M ((RTC_IO_TOUCH_PAD5_FUN_SEL_V)<<(RTC_IO_TOUCH_PAD5_FUN_SEL_S)) +#define RTC_IO_TOUCH_PAD5_FUN_SEL_V 0x3 +#define RTC_IO_TOUCH_PAD5_FUN_SEL_S 17 +/* RTC_IO_TOUCH_PAD5_SLP_SEL : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD5_SLP_SEL (BIT(16)) +#define RTC_IO_TOUCH_PAD5_SLP_SEL_M (BIT(16)) +#define RTC_IO_TOUCH_PAD5_SLP_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD5_SLP_SEL_S 16 +/* RTC_IO_TOUCH_PAD5_SLP_IE : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD5_SLP_IE (BIT(15)) +#define RTC_IO_TOUCH_PAD5_SLP_IE_M (BIT(15)) +#define RTC_IO_TOUCH_PAD5_SLP_IE_V 0x1 +#define RTC_IO_TOUCH_PAD5_SLP_IE_S 15 +/* RTC_IO_TOUCH_PAD5_SLP_OE : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD5_SLP_OE (BIT(14)) +#define RTC_IO_TOUCH_PAD5_SLP_OE_M (BIT(14)) +#define RTC_IO_TOUCH_PAD5_SLP_OE_V 0x1 +#define RTC_IO_TOUCH_PAD5_SLP_OE_S 14 +/* RTC_IO_TOUCH_PAD5_FUN_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_TOUCH_PAD5_FUN_IE (BIT(13)) +#define RTC_IO_TOUCH_PAD5_FUN_IE_M (BIT(13)) +#define RTC_IO_TOUCH_PAD5_FUN_IE_V 0x1 +#define RTC_IO_TOUCH_PAD5_FUN_IE_S 13 +/* RTC_IO_TOUCH_PAD5_TO_GPIO : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: connect the rtc pad input to digital pad input Ó0Ó is availbale.MTDI*/ +#define RTC_IO_TOUCH_PAD5_TO_GPIO (BIT(12)) +#define RTC_IO_TOUCH_PAD5_TO_GPIO_M (BIT(12)) +#define RTC_IO_TOUCH_PAD5_TO_GPIO_V 0x1 +#define RTC_IO_TOUCH_PAD5_TO_GPIO_S 12 + +#define RTC_IO_TOUCH_PAD6_REG (DR_REG_RTCIO_BASE + 0xac) +/* RTC_IO_TOUCH_PAD6_HOLD : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_TOUCH_PAD6_HOLD (BIT(31)) +#define RTC_IO_TOUCH_PAD6_HOLD_M (BIT(31)) +#define RTC_IO_TOUCH_PAD6_HOLD_V 0x1 +#define RTC_IO_TOUCH_PAD6_HOLD_S 31 +/* RTC_IO_TOUCH_PAD6_DRV : R/W ;bitpos:[30:29] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_TOUCH_PAD6_DRV 0x00000003 +#define RTC_IO_TOUCH_PAD6_DRV_M ((RTC_IO_TOUCH_PAD6_DRV_V)<<(RTC_IO_TOUCH_PAD6_DRV_S)) +#define RTC_IO_TOUCH_PAD6_DRV_V 0x3 +#define RTC_IO_TOUCH_PAD6_DRV_S 29 +/* RTC_IO_TOUCH_PAD6_RDE : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_TOUCH_PAD6_RDE (BIT(28)) +#define RTC_IO_TOUCH_PAD6_RDE_M (BIT(28)) +#define RTC_IO_TOUCH_PAD6_RDE_V 0x1 +#define RTC_IO_TOUCH_PAD6_RDE_S 28 +/* RTC_IO_TOUCH_PAD6_RUE : R/W ;bitpos:[27] ;default: 1'd1 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_TOUCH_PAD6_RUE (BIT(27)) +#define RTC_IO_TOUCH_PAD6_RUE_M (BIT(27)) +#define RTC_IO_TOUCH_PAD6_RUE_V 0x1 +#define RTC_IO_TOUCH_PAD6_RUE_S 27 +/* RTC_IO_TOUCH_PAD6_DAC : R/W ;bitpos:[25:23] ;default: 3'h4 ; */ +/*description: touch sensor slope control. 3-bit for each touch panel default 100.*/ +#define RTC_IO_TOUCH_PAD6_DAC 0x00000007 +#define RTC_IO_TOUCH_PAD6_DAC_M ((RTC_IO_TOUCH_PAD6_DAC_V)<<(RTC_IO_TOUCH_PAD6_DAC_S)) +#define RTC_IO_TOUCH_PAD6_DAC_V 0x7 +#define RTC_IO_TOUCH_PAD6_DAC_S 23 +/* RTC_IO_TOUCH_PAD6_START : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: start touch sensor.*/ +#define RTC_IO_TOUCH_PAD6_START (BIT(22)) +#define RTC_IO_TOUCH_PAD6_START_M (BIT(22)) +#define RTC_IO_TOUCH_PAD6_START_V 0x1 +#define RTC_IO_TOUCH_PAD6_START_S 22 +/* RTC_IO_TOUCH_PAD6_TIE_OPT : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: default touch sensor tie option. 0: tie low 1: tie high.*/ +#define RTC_IO_TOUCH_PAD6_TIE_OPT (BIT(21)) +#define RTC_IO_TOUCH_PAD6_TIE_OPT_M (BIT(21)) +#define RTC_IO_TOUCH_PAD6_TIE_OPT_V 0x1 +#define RTC_IO_TOUCH_PAD6_TIE_OPT_S 21 +/* RTC_IO_TOUCH_PAD6_XPD : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: touch sensor power on.*/ +#define RTC_IO_TOUCH_PAD6_XPD (BIT(20)) +#define RTC_IO_TOUCH_PAD6_XPD_M (BIT(20)) +#define RTC_IO_TOUCH_PAD6_XPD_V 0x1 +#define RTC_IO_TOUCH_PAD6_XPD_S 20 +/* RTC_IO_TOUCH_PAD6_MUX_SEL : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_TOUCH_PAD6_MUX_SEL (BIT(19)) +#define RTC_IO_TOUCH_PAD6_MUX_SEL_M (BIT(19)) +#define RTC_IO_TOUCH_PAD6_MUX_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD6_MUX_SEL_S 19 +/* RTC_IO_TOUCH_PAD6_FUN_SEL : R/W ;bitpos:[18:17] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD6_FUN_SEL 0x00000003 +#define RTC_IO_TOUCH_PAD6_FUN_SEL_M ((RTC_IO_TOUCH_PAD6_FUN_SEL_V)<<(RTC_IO_TOUCH_PAD6_FUN_SEL_S)) +#define RTC_IO_TOUCH_PAD6_FUN_SEL_V 0x3 +#define RTC_IO_TOUCH_PAD6_FUN_SEL_S 17 +/* RTC_IO_TOUCH_PAD6_SLP_SEL : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD6_SLP_SEL (BIT(16)) +#define RTC_IO_TOUCH_PAD6_SLP_SEL_M (BIT(16)) +#define RTC_IO_TOUCH_PAD6_SLP_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD6_SLP_SEL_S 16 +/* RTC_IO_TOUCH_PAD6_SLP_IE : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD6_SLP_IE (BIT(15)) +#define RTC_IO_TOUCH_PAD6_SLP_IE_M (BIT(15)) +#define RTC_IO_TOUCH_PAD6_SLP_IE_V 0x1 +#define RTC_IO_TOUCH_PAD6_SLP_IE_S 15 +/* RTC_IO_TOUCH_PAD6_SLP_OE : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD6_SLP_OE (BIT(14)) +#define RTC_IO_TOUCH_PAD6_SLP_OE_M (BIT(14)) +#define RTC_IO_TOUCH_PAD6_SLP_OE_V 0x1 +#define RTC_IO_TOUCH_PAD6_SLP_OE_S 14 +/* RTC_IO_TOUCH_PAD6_FUN_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_TOUCH_PAD6_FUN_IE (BIT(13)) +#define RTC_IO_TOUCH_PAD6_FUN_IE_M (BIT(13)) +#define RTC_IO_TOUCH_PAD6_FUN_IE_V 0x1 +#define RTC_IO_TOUCH_PAD6_FUN_IE_S 13 +/* RTC_IO_TOUCH_PAD6_TO_GPIO : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: connect the rtc pad input to digital pad input Ó0Ó is availbale.MTMS*/ +#define RTC_IO_TOUCH_PAD6_TO_GPIO (BIT(12)) +#define RTC_IO_TOUCH_PAD6_TO_GPIO_M (BIT(12)) +#define RTC_IO_TOUCH_PAD6_TO_GPIO_V 0x1 +#define RTC_IO_TOUCH_PAD6_TO_GPIO_S 12 + +#define RTC_IO_TOUCH_PAD7_REG (DR_REG_RTCIO_BASE + 0xb0) +/* RTC_IO_TOUCH_PAD7_HOLD : R/W ;bitpos:[31] ;default: 1'd0 ; */ +/*description: hold the current value of the output when setting the hold to Ò1Ó*/ +#define RTC_IO_TOUCH_PAD7_HOLD (BIT(31)) +#define RTC_IO_TOUCH_PAD7_HOLD_M (BIT(31)) +#define RTC_IO_TOUCH_PAD7_HOLD_V 0x1 +#define RTC_IO_TOUCH_PAD7_HOLD_S 31 +/* RTC_IO_TOUCH_PAD7_DRV : R/W ;bitpos:[30:29] ;default: 2'd2 ; */ +/*description: the driver strength of the pad*/ +#define RTC_IO_TOUCH_PAD7_DRV 0x00000003 +#define RTC_IO_TOUCH_PAD7_DRV_M ((RTC_IO_TOUCH_PAD7_DRV_V)<<(RTC_IO_TOUCH_PAD7_DRV_S)) +#define RTC_IO_TOUCH_PAD7_DRV_V 0x3 +#define RTC_IO_TOUCH_PAD7_DRV_S 29 +/* RTC_IO_TOUCH_PAD7_RDE : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: the pull down enable of the pad*/ +#define RTC_IO_TOUCH_PAD7_RDE (BIT(28)) +#define RTC_IO_TOUCH_PAD7_RDE_M (BIT(28)) +#define RTC_IO_TOUCH_PAD7_RDE_V 0x1 +#define RTC_IO_TOUCH_PAD7_RDE_S 28 +/* RTC_IO_TOUCH_PAD7_RUE : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: the pull up enable of the pad*/ +#define RTC_IO_TOUCH_PAD7_RUE (BIT(27)) +#define RTC_IO_TOUCH_PAD7_RUE_M (BIT(27)) +#define RTC_IO_TOUCH_PAD7_RUE_V 0x1 +#define RTC_IO_TOUCH_PAD7_RUE_S 27 +/* RTC_IO_TOUCH_PAD7_DAC : R/W ;bitpos:[25:23] ;default: 3'h4 ; */ +/*description: touch sensor slope control. 3-bit for each touch panel default 100.*/ +#define RTC_IO_TOUCH_PAD7_DAC 0x00000007 +#define RTC_IO_TOUCH_PAD7_DAC_M ((RTC_IO_TOUCH_PAD7_DAC_V)<<(RTC_IO_TOUCH_PAD7_DAC_S)) +#define RTC_IO_TOUCH_PAD7_DAC_V 0x7 +#define RTC_IO_TOUCH_PAD7_DAC_S 23 +/* RTC_IO_TOUCH_PAD7_START : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: start touch sensor.*/ +#define RTC_IO_TOUCH_PAD7_START (BIT(22)) +#define RTC_IO_TOUCH_PAD7_START_M (BIT(22)) +#define RTC_IO_TOUCH_PAD7_START_V 0x1 +#define RTC_IO_TOUCH_PAD7_START_S 22 +/* RTC_IO_TOUCH_PAD7_TIE_OPT : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: default touch sensor tie option. 0: tie low 1: tie high.*/ +#define RTC_IO_TOUCH_PAD7_TIE_OPT (BIT(21)) +#define RTC_IO_TOUCH_PAD7_TIE_OPT_M (BIT(21)) +#define RTC_IO_TOUCH_PAD7_TIE_OPT_V 0x1 +#define RTC_IO_TOUCH_PAD7_TIE_OPT_S 21 +/* RTC_IO_TOUCH_PAD7_XPD : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: touch sensor power on.*/ +#define RTC_IO_TOUCH_PAD7_XPD (BIT(20)) +#define RTC_IO_TOUCH_PAD7_XPD_M (BIT(20)) +#define RTC_IO_TOUCH_PAD7_XPD_V 0x1 +#define RTC_IO_TOUCH_PAD7_XPD_S 20 +/* RTC_IO_TOUCH_PAD7_MUX_SEL : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: Ò1Ó select the digital function Ó0Óslection the rtc function*/ +#define RTC_IO_TOUCH_PAD7_MUX_SEL (BIT(19)) +#define RTC_IO_TOUCH_PAD7_MUX_SEL_M (BIT(19)) +#define RTC_IO_TOUCH_PAD7_MUX_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD7_MUX_SEL_S 19 +/* RTC_IO_TOUCH_PAD7_FUN_SEL : R/W ;bitpos:[18:17] ;default: 2'd0 ; */ +/*description: the functional selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD7_FUN_SEL 0x00000003 +#define RTC_IO_TOUCH_PAD7_FUN_SEL_M ((RTC_IO_TOUCH_PAD7_FUN_SEL_V)<<(RTC_IO_TOUCH_PAD7_FUN_SEL_S)) +#define RTC_IO_TOUCH_PAD7_FUN_SEL_V 0x3 +#define RTC_IO_TOUCH_PAD7_FUN_SEL_S 17 +/* RTC_IO_TOUCH_PAD7_SLP_SEL : R/W ;bitpos:[16] ;default: 1'd0 ; */ +/*description: the sleep status selection signal of the pad*/ +#define RTC_IO_TOUCH_PAD7_SLP_SEL (BIT(16)) +#define RTC_IO_TOUCH_PAD7_SLP_SEL_M (BIT(16)) +#define RTC_IO_TOUCH_PAD7_SLP_SEL_V 0x1 +#define RTC_IO_TOUCH_PAD7_SLP_SEL_S 16 +/* RTC_IO_TOUCH_PAD7_SLP_IE : R/W ;bitpos:[15] ;default: 1'd0 ; */ +/*description: the input enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD7_SLP_IE (BIT(15)) +#define RTC_IO_TOUCH_PAD7_SLP_IE_M (BIT(15)) +#define RTC_IO_TOUCH_PAD7_SLP_IE_V 0x1 +#define RTC_IO_TOUCH_PAD7_SLP_IE_S 15 +/* RTC_IO_TOUCH_PAD7_SLP_OE : R/W ;bitpos:[14] ;default: 1'd0 ; */ +/*description: the output enable of the pad in sleep status*/ +#define RTC_IO_TOUCH_PAD7_SLP_OE (BIT(14)) +#define RTC_IO_TOUCH_PAD7_SLP_OE_M (BIT(14)) +#define RTC_IO_TOUCH_PAD7_SLP_OE_V 0x1 +#define RTC_IO_TOUCH_PAD7_SLP_OE_S 14 +/* RTC_IO_TOUCH_PAD7_FUN_IE : R/W ;bitpos:[13] ;default: 1'd0 ; */ +/*description: the input enable of the pad*/ +#define RTC_IO_TOUCH_PAD7_FUN_IE (BIT(13)) +#define RTC_IO_TOUCH_PAD7_FUN_IE_M (BIT(13)) +#define RTC_IO_TOUCH_PAD7_FUN_IE_V 0x1 +#define RTC_IO_TOUCH_PAD7_FUN_IE_S 13 +/* RTC_IO_TOUCH_PAD7_TO_GPIO : R/W ;bitpos:[12] ;default: 1'd0 ; */ +/*description: connect the rtc pad input to digital pad input Ó0Ó is availbale.GPIO27*/ +#define RTC_IO_TOUCH_PAD7_TO_GPIO (BIT(12)) +#define RTC_IO_TOUCH_PAD7_TO_GPIO_M (BIT(12)) +#define RTC_IO_TOUCH_PAD7_TO_GPIO_V 0x1 +#define RTC_IO_TOUCH_PAD7_TO_GPIO_S 12 + +#define RTC_IO_TOUCH_PAD8_REG (DR_REG_RTCIO_BASE + 0xb4) +/* RTC_IO_TOUCH_PAD8_DAC : R/W ;bitpos:[25:23] ;default: 3'h4 ; */ +/*description: touch sensor slope control. 3-bit for each touch panel default 100.*/ +#define RTC_IO_TOUCH_PAD8_DAC 0x00000007 +#define RTC_IO_TOUCH_PAD8_DAC_M ((RTC_IO_TOUCH_PAD8_DAC_V)<<(RTC_IO_TOUCH_PAD8_DAC_S)) +#define RTC_IO_TOUCH_PAD8_DAC_V 0x7 +#define RTC_IO_TOUCH_PAD8_DAC_S 23 +/* RTC_IO_TOUCH_PAD8_START : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: start touch sensor.*/ +#define RTC_IO_TOUCH_PAD8_START (BIT(22)) +#define RTC_IO_TOUCH_PAD8_START_M (BIT(22)) +#define RTC_IO_TOUCH_PAD8_START_V 0x1 +#define RTC_IO_TOUCH_PAD8_START_S 22 +/* RTC_IO_TOUCH_PAD8_TIE_OPT : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: default touch sensor tie option. 0: tie low 1: tie high.*/ +#define RTC_IO_TOUCH_PAD8_TIE_OPT (BIT(21)) +#define RTC_IO_TOUCH_PAD8_TIE_OPT_M (BIT(21)) +#define RTC_IO_TOUCH_PAD8_TIE_OPT_V 0x1 +#define RTC_IO_TOUCH_PAD8_TIE_OPT_S 21 +/* RTC_IO_TOUCH_PAD8_XPD : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: touch sensor power on.*/ +#define RTC_IO_TOUCH_PAD8_XPD (BIT(20)) +#define RTC_IO_TOUCH_PAD8_XPD_M (BIT(20)) +#define RTC_IO_TOUCH_PAD8_XPD_V 0x1 +#define RTC_IO_TOUCH_PAD8_XPD_S 20 +/* RTC_IO_TOUCH_PAD8_TO_GPIO : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: connect the rtc pad input to digital pad input Ó0Ó is availbale*/ +#define RTC_IO_TOUCH_PAD8_TO_GPIO (BIT(19)) +#define RTC_IO_TOUCH_PAD8_TO_GPIO_M (BIT(19)) +#define RTC_IO_TOUCH_PAD8_TO_GPIO_V 0x1 +#define RTC_IO_TOUCH_PAD8_TO_GPIO_S 19 + +#define RTC_IO_TOUCH_PAD9_REG (DR_REG_RTCIO_BASE + 0xb8) +/* RTC_IO_TOUCH_PAD9_DAC : R/W ;bitpos:[25:23] ;default: 3'h4 ; */ +/*description: touch sensor slope control. 3-bit for each touch panel default 100.*/ +#define RTC_IO_TOUCH_PAD9_DAC 0x00000007 +#define RTC_IO_TOUCH_PAD9_DAC_M ((RTC_IO_TOUCH_PAD9_DAC_V)<<(RTC_IO_TOUCH_PAD9_DAC_S)) +#define RTC_IO_TOUCH_PAD9_DAC_V 0x7 +#define RTC_IO_TOUCH_PAD9_DAC_S 23 +/* RTC_IO_TOUCH_PAD9_START : R/W ;bitpos:[22] ;default: 1'd0 ; */ +/*description: start touch sensor.*/ +#define RTC_IO_TOUCH_PAD9_START (BIT(22)) +#define RTC_IO_TOUCH_PAD9_START_M (BIT(22)) +#define RTC_IO_TOUCH_PAD9_START_V 0x1 +#define RTC_IO_TOUCH_PAD9_START_S 22 +/* RTC_IO_TOUCH_PAD9_TIE_OPT : R/W ;bitpos:[21] ;default: 1'd0 ; */ +/*description: default touch sensor tie option. 0: tie low 1: tie high.*/ +#define RTC_IO_TOUCH_PAD9_TIE_OPT (BIT(21)) +#define RTC_IO_TOUCH_PAD9_TIE_OPT_M (BIT(21)) +#define RTC_IO_TOUCH_PAD9_TIE_OPT_V 0x1 +#define RTC_IO_TOUCH_PAD9_TIE_OPT_S 21 +/* RTC_IO_TOUCH_PAD9_XPD : R/W ;bitpos:[20] ;default: 1'd0 ; */ +/*description: touch sensor power on.*/ +#define RTC_IO_TOUCH_PAD9_XPD (BIT(20)) +#define RTC_IO_TOUCH_PAD9_XPD_M (BIT(20)) +#define RTC_IO_TOUCH_PAD9_XPD_V 0x1 +#define RTC_IO_TOUCH_PAD9_XPD_S 20 +/* RTC_IO_TOUCH_PAD9_TO_GPIO : R/W ;bitpos:[19] ;default: 1'd0 ; */ +/*description: connect the rtc pad input to digital pad input Ó0Ó is availbale*/ +#define RTC_IO_TOUCH_PAD9_TO_GPIO (BIT(19)) +#define RTC_IO_TOUCH_PAD9_TO_GPIO_M (BIT(19)) +#define RTC_IO_TOUCH_PAD9_TO_GPIO_V 0x1 +#define RTC_IO_TOUCH_PAD9_TO_GPIO_S 19 + +#define RTC_IO_EXT_WAKEUP0_REG (DR_REG_RTCIO_BASE + 0xbc) +/* RTC_IO_EXT_WAKEUP0_SEL : R/W ;bitpos:[31:27] ;default: 5'd0 ; */ +/*description: select the wakeup source Ó0Ó select GPIO0 Ó1Ó select GPIO2 ...Ò17Ó select GPIO17*/ +#define RTC_IO_EXT_WAKEUP0_SEL 0x0000001F +#define RTC_IO_EXT_WAKEUP0_SEL_M ((RTC_IO_EXT_WAKEUP0_SEL_V)<<(RTC_IO_EXT_WAKEUP0_SEL_S)) +#define RTC_IO_EXT_WAKEUP0_SEL_V 0x1F +#define RTC_IO_EXT_WAKEUP0_SEL_S 27 + +#define RTC_IO_XTL_EXT_CTR_REG (DR_REG_RTCIO_BASE + 0xc0) +/* RTC_IO_XTL_EXT_CTR_SEL : R/W ;bitpos:[31:27] ;default: 5'd0 ; */ +/*description: select the external xtl power source Ó0Ó select GPIO0 Ó1Ó select + GPIO2 ...Ò17Ó select GPIO17*/ +#define RTC_IO_XTL_EXT_CTR_SEL 0x0000001F +#define RTC_IO_XTL_EXT_CTR_SEL_M ((RTC_IO_XTL_EXT_CTR_SEL_V)<<(RTC_IO_XTL_EXT_CTR_SEL_S)) +#define RTC_IO_XTL_EXT_CTR_SEL_V 0x1F +#define RTC_IO_XTL_EXT_CTR_SEL_S 27 + +#define RTC_IO_SAR_I2C_IO_REG (DR_REG_RTCIO_BASE + 0xc4) +/* RTC_IO_SAR_I2C_SDA_SEL : R/W ;bitpos:[31:30] ;default: 2'd0 ; */ +/*description: Ò0Ó using TOUCH_PAD[1] as i2c sda Ò1Ó using TOUCH_PAD[3] as i2c sda*/ +#define RTC_IO_SAR_I2C_SDA_SEL 0x00000003 +#define RTC_IO_SAR_I2C_SDA_SEL_M ((RTC_IO_SAR_I2C_SDA_SEL_V)<<(RTC_IO_SAR_I2C_SDA_SEL_S)) +#define RTC_IO_SAR_I2C_SDA_SEL_V 0x3 +#define RTC_IO_SAR_I2C_SDA_SEL_S 30 +/* RTC_IO_SAR_I2C_SCL_SEL : R/W ;bitpos:[29:28] ;default: 2'd0 ; */ +/*description: Ò0Ó using TOUCH_PAD[0] as i2c clk Ò1Ó using TOUCH_PAD[2] as i2c clk*/ +#define RTC_IO_SAR_I2C_SCL_SEL 0x00000003 +#define RTC_IO_SAR_I2C_SCL_SEL_M ((RTC_IO_SAR_I2C_SCL_SEL_V)<<(RTC_IO_SAR_I2C_SCL_SEL_S)) +#define RTC_IO_SAR_I2C_SCL_SEL_V 0x3 +#define RTC_IO_SAR_I2C_SCL_SEL_S 28 +/* RTC_IO_SAR_DEBUG_BIT_SEL : R/W ;bitpos:[27:23] ;default: 5'h0 ; */ +/*description: */ +#define RTC_IO_SAR_DEBUG_BIT_SEL 0x0000001F +#define RTC_IO_SAR_DEBUG_BIT_SEL_M ((RTC_IO_SAR_DEBUG_BIT_SEL_V)<<(RTC_IO_SAR_DEBUG_BIT_SEL_S)) +#define RTC_IO_SAR_DEBUG_BIT_SEL_V 0x1F +#define RTC_IO_SAR_DEBUG_BIT_SEL_S 23 + +#define RTC_IO_DATE_REG (DR_REG_RTCIO_BASE + 0xc8) +/* RTC_IO_IO_DATE : R/W ;bitpos:[27:0] ;default: 28'h1603160 ; */ +/*description: date*/ +#define RTC_IO_IO_DATE 0x0FFFFFFF +#define RTC_IO_IO_DATE_M ((RTC_IO_IO_DATE_V)<<(RTC_IO_IO_DATE_S)) +#define RTC_IO_IO_DATE_V 0xFFFFFFF +#define RTC_IO_IO_DATE_S 0 +#define RTC_IO_RTC_IO_DATE_VERSION 0x1703160 + + + + +#endif /*_SOC_RTC_IO_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/saradc_reg.h b/tools/sdk/include/esp32/soc/saradc_reg.h new file mode 100644 index 00000000..51903297 --- /dev/null +++ b/tools/sdk/include/esp32/soc/saradc_reg.h @@ -0,0 +1,1047 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_SARADC_REG_H_ +#define _SOC_SARADC_REG_H_ + + +#include "soc.h" +#define SARADC_SAR_READ_CTRL_REG (DR_REG_SARADC_BASE + 0x0000) +/* SARADC_SAR1_DATA_INV : R/W ;bitpos:[28] ;default: 1'd0 ; */ +/*description: Invert SAR ADC1 data*/ +#define SARADC_SAR1_DATA_INV (BIT(28)) +#define SARADC_SAR1_DATA_INV_M (BIT(28)) +#define SARADC_SAR1_DATA_INV_V 0x1 +#define SARADC_SAR1_DATA_INV_S 28 +/* SARADC_SAR1_DIG_FORCE : R/W ;bitpos:[27] ;default: 1'd0 ; */ +/*description: 1: SAR ADC1 controlled by DIG ADC1 CTRL 0: SAR ADC1 controlled by RTC ADC1 CTRL*/ +#define SARADC_SAR1_DIG_FORCE (BIT(27)) +#define SARADC_SAR1_DIG_FORCE_M (BIT(27)) +#define SARADC_SAR1_DIG_FORCE_V 0x1 +#define SARADC_SAR1_DIG_FORCE_S 27 +/* SARADC_SAR1_SAMPLE_NUM : R/W ;bitpos:[26:19] ;default: 8'd0 ; */ +/*description: */ +#define SARADC_SAR1_SAMPLE_NUM 0x000000FF +#define SARADC_SAR1_SAMPLE_NUM_M ((SARADC_SAR1_SAMPLE_NUM_V)<<(SARADC_SAR1_SAMPLE_NUM_S)) +#define SARADC_SAR1_SAMPLE_NUM_V 0xFF +#define SARADC_SAR1_SAMPLE_NUM_S 19 +/* SARADC_SAR1_CLK_GATED : R/W ;bitpos:[18] ;default: 1'b1 ; */ +/*description: */ +#define SARADC_SAR1_CLK_GATED (BIT(18)) +#define SARADC_SAR1_CLK_GATED_M (BIT(18)) +#define SARADC_SAR1_CLK_GATED_V 0x1 +#define SARADC_SAR1_CLK_GATED_S 18 +/* SARADC_SAR1_SAMPLE_BIT : R/W ;bitpos:[17:16] ;default: 2'd3 ; */ +/*description: 00: for 9-bit width 01: for 10-bit width 10: for 11-bit width + 11: for 12-bit width*/ +#define SARADC_SAR1_SAMPLE_BIT 0x00000003 +#define SARADC_SAR1_SAMPLE_BIT_M ((SARADC_SAR1_SAMPLE_BIT_V)<<(SARADC_SAR1_SAMPLE_BIT_S)) +#define SARADC_SAR1_SAMPLE_BIT_V 0x3 +#define SARADC_SAR1_SAMPLE_BIT_S 16 +/* SARADC_SAR1_SAMPLE_CYCLE : R/W ;bitpos:[15:8] ;default: 8'd9 ; */ +/*description: sample cycles for SAR ADC1*/ +#define SARADC_SAR1_SAMPLE_CYCLE 0x000000FF +#define SARADC_SAR1_SAMPLE_CYCLE_M ((SARADC_SAR1_SAMPLE_CYCLE_V)<<(SARADC_SAR1_SAMPLE_CYCLE_S)) +#define SARADC_SAR1_SAMPLE_CYCLE_V 0xFF +#define SARADC_SAR1_SAMPLE_CYCLE_S 8 +/* SARADC_SAR1_CLK_DIV : R/W ;bitpos:[7:0] ;default: 8'd2 ; */ +/*description: clock divider*/ +#define SARADC_SAR1_CLK_DIV 0x000000FF +#define SARADC_SAR1_CLK_DIV_M ((SARADC_SAR1_CLK_DIV_V)<<(SARADC_SAR1_CLK_DIV_S)) +#define SARADC_SAR1_CLK_DIV_V 0xFF +#define SARADC_SAR1_CLK_DIV_S 0 + +#define SARADC_SAR_READ_STATUS1_REG (DR_REG_SARADC_BASE + 0x0004) +/* SARADC_SAR1_READER_STATUS : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define SARADC_SAR1_READER_STATUS 0xFFFFFFFF +#define SARADC_SAR1_READER_STATUS_M ((SARADC_SAR1_READER_STATUS_V)<<(SARADC_SAR1_READER_STATUS_S)) +#define SARADC_SAR1_READER_STATUS_V 0xFFFFFFFF +#define SARADC_SAR1_READER_STATUS_S 0 + +#define SARADC_SAR_MEAS_WAIT1_REG (DR_REG_SARADC_BASE + 0x0008) +/* SARADC_SAR_AMP_WAIT2 : R/W ;bitpos:[31:16] ;default: 16'd10 ; */ +/*description: */ +#define SARADC_SAR_AMP_WAIT2 0x0000FFFF +#define SARADC_SAR_AMP_WAIT2_M ((SARADC_SAR_AMP_WAIT2_V)<<(SARADC_SAR_AMP_WAIT2_S)) +#define SARADC_SAR_AMP_WAIT2_V 0xFFFF +#define SARADC_SAR_AMP_WAIT2_S 16 +/* SARADC_SAR_AMP_WAIT1 : R/W ;bitpos:[15:0] ;default: 16'd10 ; */ +/*description: */ +#define SARADC_SAR_AMP_WAIT1 0x0000FFFF +#define SARADC_SAR_AMP_WAIT1_M ((SARADC_SAR_AMP_WAIT1_V)<<(SARADC_SAR_AMP_WAIT1_S)) +#define SARADC_SAR_AMP_WAIT1_V 0xFFFF +#define SARADC_SAR_AMP_WAIT1_S 0 + +#define SARADC_SAR_MEAS_WAIT2_REG (DR_REG_SARADC_BASE + 0x000c) +/* SARADC_SAR2_RSTB_WAIT : R/W ;bitpos:[27:20] ;default: 8'd2 ; */ +/*description: */ +#define SARADC_SAR2_RSTB_WAIT 0x000000FF +#define SARADC_SAR2_RSTB_WAIT_M ((SARADC_SAR2_RSTB_WAIT_V)<<(SARADC_SAR2_RSTB_WAIT_S)) +#define SARADC_SAR2_RSTB_WAIT_V 0xFF +#define SARADC_SAR2_RSTB_WAIT_S 20 +/* SARADC_FORCE_XPD_SAR : R/W ;bitpos:[19:18] ;default: 2'd0 ; */ +/*description: */ +#define SARADC_FORCE_XPD_SAR 0x00000003 +#define SARADC_FORCE_XPD_SAR_M ((SARADC_FORCE_XPD_SAR_V)<<(SARADC_FORCE_XPD_SAR_S)) +#define SARADC_FORCE_XPD_SAR_V 0x3 +#define SARADC_FORCE_XPD_SAR_S 18 +/* SARADC_FORCE_XPD_AMP : R/W ;bitpos:[17:16] ;default: 2'd0 ; */ +/*description: */ +#define SARADC_FORCE_XPD_AMP 0x00000003 +#define SARADC_FORCE_XPD_AMP_M ((SARADC_FORCE_XPD_AMP_V)<<(SARADC_FORCE_XPD_AMP_S)) +#define SARADC_FORCE_XPD_AMP_V 0x3 +#define SARADC_FORCE_XPD_AMP_S 16 +/* SARADC_SAR_AMP_WAIT3 : R/W ;bitpos:[15:0] ;default: 16'd10 ; */ +/*description: */ +#define SARADC_SAR_AMP_WAIT3 0x0000FFFF +#define SARADC_SAR_AMP_WAIT3_M ((SARADC_SAR_AMP_WAIT3_V)<<(SARADC_SAR_AMP_WAIT3_S)) +#define SARADC_SAR_AMP_WAIT3_V 0xFFFF +#define SARADC_SAR_AMP_WAIT3_S 0 + +#define SARADC_SAR_MEAS_CTRL_REG (DR_REG_SARADC_BASE + 0x0010) +/* SARADC_SAR2_XPD_WAIT : R/W ;bitpos:[31:24] ;default: 8'h7 ; */ +/*description: */ +#define SARADC_SAR2_XPD_WAIT 0x000000FF +#define SARADC_SAR2_XPD_WAIT_M ((SARADC_SAR2_XPD_WAIT_V)<<(SARADC_SAR2_XPD_WAIT_S)) +#define SARADC_SAR2_XPD_WAIT_V 0xFF +#define SARADC_SAR2_XPD_WAIT_S 24 +/* SARADC_SAR_RSTB_FSM : R/W ;bitpos:[23:20] ;default: 4'b0000 ; */ +/*description: */ +#define SARADC_SAR_RSTB_FSM 0x0000000F +#define SARADC_SAR_RSTB_FSM_M ((SARADC_SAR_RSTB_FSM_V)<<(SARADC_SAR_RSTB_FSM_S)) +#define SARADC_SAR_RSTB_FSM_V 0xF +#define SARADC_SAR_RSTB_FSM_S 20 +/* SARADC_XPD_SAR_FSM : R/W ;bitpos:[19:16] ;default: 4'b0111 ; */ +/*description: */ +#define SARADC_XPD_SAR_FSM 0x0000000F +#define SARADC_XPD_SAR_FSM_M ((SARADC_XPD_SAR_FSM_V)<<(SARADC_XPD_SAR_FSM_S)) +#define SARADC_XPD_SAR_FSM_V 0xF +#define SARADC_XPD_SAR_FSM_S 16 +/* SARADC_AMP_SHORT_REF_GND_FSM : R/W ;bitpos:[15:12] ;default: 4'b0011 ; */ +/*description: */ +#define SARADC_AMP_SHORT_REF_GND_FSM 0x0000000F +#define SARADC_AMP_SHORT_REF_GND_FSM_M ((SARADC_AMP_SHORT_REF_GND_FSM_V)<<(SARADC_AMP_SHORT_REF_GND_FSM_S)) +#define SARADC_AMP_SHORT_REF_GND_FSM_V 0xF +#define SARADC_AMP_SHORT_REF_GND_FSM_S 12 +/* SARADC_AMP_SHORT_REF_FSM : R/W ;bitpos:[11:8] ;default: 4'b0011 ; */ +/*description: */ +#define SARADC_AMP_SHORT_REF_FSM 0x0000000F +#define SARADC_AMP_SHORT_REF_FSM_M ((SARADC_AMP_SHORT_REF_FSM_V)<<(SARADC_AMP_SHORT_REF_FSM_S)) +#define SARADC_AMP_SHORT_REF_FSM_V 0xF +#define SARADC_AMP_SHORT_REF_FSM_S 8 +/* SARADC_AMP_RST_FB_FSM : R/W ;bitpos:[7:4] ;default: 4'b1000 ; */ +/*description: */ +#define SARADC_AMP_RST_FB_FSM 0x0000000F +#define SARADC_AMP_RST_FB_FSM_M ((SARADC_AMP_RST_FB_FSM_V)<<(SARADC_AMP_RST_FB_FSM_S)) +#define SARADC_AMP_RST_FB_FSM_V 0xF +#define SARADC_AMP_RST_FB_FSM_S 4 +/* SARADC_XPD_SAR_AMP_FSM : R/W ;bitpos:[3:0] ;default: 4'b1111 ; */ +/*description: */ +#define SARADC_XPD_SAR_AMP_FSM 0x0000000F +#define SARADC_XPD_SAR_AMP_FSM_M ((SARADC_XPD_SAR_AMP_FSM_V)<<(SARADC_XPD_SAR_AMP_FSM_S)) +#define SARADC_XPD_SAR_AMP_FSM_V 0xF +#define SARADC_XPD_SAR_AMP_FSM_S 0 + +#define SARADC_SAR_READ_STATUS2_REG (DR_REG_SARADC_BASE + 0x0014) +/* SARADC_SAR2_READER_STATUS : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define SARADC_SAR2_READER_STATUS 0xFFFFFFFF +#define SARADC_SAR2_READER_STATUS_M ((SARADC_SAR2_READER_STATUS_V)<<(SARADC_SAR2_READER_STATUS_S)) +#define SARADC_SAR2_READER_STATUS_V 0xFFFFFFFF +#define SARADC_SAR2_READER_STATUS_S 0 + +#define SARADC_ULP_CP_SLEEP_CYC0_REG (DR_REG_SARADC_BASE + 0x0018) +/* SARADC_SLEEP_CYCLES_S0 : R/W ;bitpos:[31:0] ;default: 32'd200 ; */ +/*description: sleep cycles for ULP-coprocessor timer*/ +#define SARADC_SLEEP_CYCLES_S0 0xFFFFFFFF +#define SARADC_SLEEP_CYCLES_S0_M ((SARADC_SLEEP_CYCLES_S0_V)<<(SARADC_SLEEP_CYCLES_S0_S)) +#define SARADC_SLEEP_CYCLES_S0_V 0xFFFFFFFF +#define SARADC_SLEEP_CYCLES_S0_S 0 + +#define SARADC_ULP_CP_SLEEP_CYC1_REG (DR_REG_SARADC_BASE + 0x001c) +/* SARADC_SLEEP_CYCLES_S1 : R/W ;bitpos:[31:0] ;default: 32'd100 ; */ +/*description: */ +#define SARADC_SLEEP_CYCLES_S1 0xFFFFFFFF +#define SARADC_SLEEP_CYCLES_S1_M ((SARADC_SLEEP_CYCLES_S1_V)<<(SARADC_SLEEP_CYCLES_S1_S)) +#define SARADC_SLEEP_CYCLES_S1_V 0xFFFFFFFF +#define SARADC_SLEEP_CYCLES_S1_S 0 + +#define SARADC_ULP_CP_SLEEP_CYC2_REG (DR_REG_SARADC_BASE + 0x0020) +/* SARADC_SLEEP_CYCLES_S2 : R/W ;bitpos:[31:0] ;default: 32'd50 ; */ +/*description: */ +#define SARADC_SLEEP_CYCLES_S2 0xFFFFFFFF +#define SARADC_SLEEP_CYCLES_S2_M ((SARADC_SLEEP_CYCLES_S2_V)<<(SARADC_SLEEP_CYCLES_S2_S)) +#define SARADC_SLEEP_CYCLES_S2_V 0xFFFFFFFF +#define SARADC_SLEEP_CYCLES_S2_S 0 + +#define SARADC_ULP_CP_SLEEP_CYC3_REG (DR_REG_SARADC_BASE + 0x0024) +/* SARADC_SLEEP_CYCLES_S3 : R/W ;bitpos:[31:0] ;default: 32'd40 ; */ +/*description: */ +#define SARADC_SLEEP_CYCLES_S3 0xFFFFFFFF +#define SARADC_SLEEP_CYCLES_S3_M ((SARADC_SLEEP_CYCLES_S3_V)<<(SARADC_SLEEP_CYCLES_S3_S)) +#define SARADC_SLEEP_CYCLES_S3_V 0xFFFFFFFF +#define SARADC_SLEEP_CYCLES_S3_S 0 + +#define SARADC_ULP_CP_SLEEP_CYC4_REG (DR_REG_SARADC_BASE + 0x0028) +/* SARADC_SLEEP_CYCLES_S4 : R/W ;bitpos:[31:0] ;default: 32'd20 ; */ +/*description: */ +#define SARADC_SLEEP_CYCLES_S4 0xFFFFFFFF +#define SARADC_SLEEP_CYCLES_S4_M ((SARADC_SLEEP_CYCLES_S4_V)<<(SARADC_SLEEP_CYCLES_S4_S)) +#define SARADC_SLEEP_CYCLES_S4_V 0xFFFFFFFF +#define SARADC_SLEEP_CYCLES_S4_S 0 + +#define SARADC_SAR_START_FORCE_REG (DR_REG_SARADC_BASE + 0x002c) +/* SARADC_SAR2_PWDET_EN : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: N/A*/ +#define SARADC_SAR2_PWDET_EN (BIT(24)) +#define SARADC_SAR2_PWDET_EN_M (BIT(24)) +#define SARADC_SAR2_PWDET_EN_V 0x1 +#define SARADC_SAR2_PWDET_EN_S 24 +/* SARADC_SAR1_STOP : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: stop SAR ADC1 conversion*/ +#define SARADC_SAR1_STOP (BIT(23)) +#define SARADC_SAR1_STOP_M (BIT(23)) +#define SARADC_SAR1_STOP_V 0x1 +#define SARADC_SAR1_STOP_S 23 +/* SARADC_SAR2_STOP : R/W ;bitpos:[22] ;default: 1'b0 ; */ +/*description: stop SAR ADC2 conversion*/ +#define SARADC_SAR2_STOP (BIT(22)) +#define SARADC_SAR2_STOP_M (BIT(22)) +#define SARADC_SAR2_STOP_V 0x1 +#define SARADC_SAR2_STOP_S 22 +/* SARADC_PC_INIT : R/W ;bitpos:[21:11] ;default: 11'b0 ; */ +/*description: initialized PC for ULP-coprocessor*/ +#define SARADC_PC_INIT 0x000007FF +#define SARADC_PC_INIT_M ((SARADC_PC_INIT_V)<<(SARADC_PC_INIT_S)) +#define SARADC_PC_INIT_V 0x7FF +#define SARADC_PC_INIT_S 11 +/* SARADC_SARCLK_EN : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define SARADC_SARCLK_EN (BIT(10)) +#define SARADC_SARCLK_EN_M (BIT(10)) +#define SARADC_SARCLK_EN_V 0x1 +#define SARADC_SARCLK_EN_S 10 +/* SARADC_ULP_CP_START_TOP : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: Write 1 to start ULP-coprocessor only active when reg_ulp_cp_force_start_top + = 1*/ +#define SARADC_ULP_CP_START_TOP (BIT(9)) +#define SARADC_ULP_CP_START_TOP_M (BIT(9)) +#define SARADC_ULP_CP_START_TOP_V 0x1 +#define SARADC_ULP_CP_START_TOP_S 9 +/* SARADC_ULP_CP_FORCE_START_TOP : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: 1: ULP-coprocessor is started by SW 0: ULP-coprocessor is started by timer*/ +#define SARADC_ULP_CP_FORCE_START_TOP (BIT(8)) +#define SARADC_ULP_CP_FORCE_START_TOP_M (BIT(8)) +#define SARADC_ULP_CP_FORCE_START_TOP_V 0x1 +#define SARADC_ULP_CP_FORCE_START_TOP_S 8 +/* SARADC_SAR2_PWDET_CCT : R/W ;bitpos:[7:5] ;default: 3'b0 ; */ +/*description: SAR2_PWDET_CCT PA power detector capacitance tuning.*/ +#define SARADC_SAR2_PWDET_CCT 0x00000007 +#define SARADC_SAR2_PWDET_CCT_M ((SARADC_SAR2_PWDET_CCT_V)<<(SARADC_SAR2_PWDET_CCT_S)) +#define SARADC_SAR2_PWDET_CCT_V 0x7 +#define SARADC_SAR2_PWDET_CCT_S 5 +/* SARADC_SAR2_EN_TEST : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: SAR2_EN_TEST only active when reg_sar2_dig_force = 0*/ +#define SARADC_SAR2_EN_TEST (BIT(4)) +#define SARADC_SAR2_EN_TEST_M (BIT(4)) +#define SARADC_SAR2_EN_TEST_V 0x1 +#define SARADC_SAR2_EN_TEST_S 4 +/* SARADC_SAR2_BIT_WIDTH : R/W ;bitpos:[3:2] ;default: 2'b11 ; */ +/*description: 00: 9 bit 01: 10 bits 10: 11bits 11: 12bits*/ +#define SARADC_SAR2_BIT_WIDTH 0x00000003 +#define SARADC_SAR2_BIT_WIDTH_M ((SARADC_SAR2_BIT_WIDTH_V)<<(SARADC_SAR2_BIT_WIDTH_S)) +#define SARADC_SAR2_BIT_WIDTH_V 0x3 +#define SARADC_SAR2_BIT_WIDTH_S 2 +/* SARADC_SAR1_BIT_WIDTH : R/W ;bitpos:[1:0] ;default: 2'b11 ; */ +/*description: 00: 9 bit 01: 10 bits 10: 11bits 11: 12bits*/ +#define SARADC_SAR1_BIT_WIDTH 0x00000003 +#define SARADC_SAR1_BIT_WIDTH_M ((SARADC_SAR1_BIT_WIDTH_V)<<(SARADC_SAR1_BIT_WIDTH_S)) +#define SARADC_SAR1_BIT_WIDTH_V 0x3 +#define SARADC_SAR1_BIT_WIDTH_S 0 + +#define SARADC_SAR_MEM_WR_CTRL_REG (DR_REG_SARADC_BASE + 0x0030) +/* SARADC_RTC_MEM_WR_OFFST_CLR : WO ;bitpos:[22] ;default: 1'd0 ; */ +/*description: */ +#define SARADC_RTC_MEM_WR_OFFST_CLR (BIT(22)) +#define SARADC_RTC_MEM_WR_OFFST_CLR_M (BIT(22)) +#define SARADC_RTC_MEM_WR_OFFST_CLR_V 0x1 +#define SARADC_RTC_MEM_WR_OFFST_CLR_S 22 +/* SARADC_MEM_WR_ADDR_SIZE : R/W ;bitpos:[21:11] ;default: 11'd512 ; */ +/*description: */ +#define SARADC_MEM_WR_ADDR_SIZE 0x000007FF +#define SARADC_MEM_WR_ADDR_SIZE_M ((SARADC_MEM_WR_ADDR_SIZE_V)<<(SARADC_MEM_WR_ADDR_SIZE_S)) +#define SARADC_MEM_WR_ADDR_SIZE_V 0x7FF +#define SARADC_MEM_WR_ADDR_SIZE_S 11 +/* SARADC_MEM_WR_ADDR_INIT : R/W ;bitpos:[10:0] ;default: 11'd512 ; */ +/*description: */ +#define SARADC_MEM_WR_ADDR_INIT 0x000007FF +#define SARADC_MEM_WR_ADDR_INIT_M ((SARADC_MEM_WR_ADDR_INIT_V)<<(SARADC_MEM_WR_ADDR_INIT_S)) +#define SARADC_MEM_WR_ADDR_INIT_V 0x7FF +#define SARADC_MEM_WR_ADDR_INIT_S 0 + +#define SARADC_SAR_ATTEN1_REG (DR_REG_SARADC_BASE + 0x0034) +/* SARADC_SAR1_ATTEN : R/W ;bitpos:[31:0] ;default: 32'hffffffff ; */ +/*description: 2-bit attenuation for each pad 11:1dB 10:6dB 01:3dB 00:0dB*/ +#define SARADC_SAR1_ATTEN 0xFFFFFFFF +#define SARADC_SAR1_ATTEN_M ((SARADC_SAR1_ATTEN_V)<<(SARADC_SAR1_ATTEN_S)) +#define SARADC_SAR1_ATTEN_V 0xFFFFFFFF +#define SARADC_SAR1_ATTEN_S 0 + +#define SARADC_SAR_ATTEN2_REG (DR_REG_SARADC_BASE + 0x0038) +/* SARADC_SAR2_ATTEN : R/W ;bitpos:[31:0] ;default: 32'hffffffff ; */ +/*description: 2-bit attenuation for each pad 11:1dB 10:6dB 01:3dB 00:0dB*/ +#define SARADC_SAR2_ATTEN 0xFFFFFFFF +#define SARADC_SAR2_ATTEN_M ((SARADC_SAR2_ATTEN_V)<<(SARADC_SAR2_ATTEN_S)) +#define SARADC_SAR2_ATTEN_V 0xFFFFFFFF +#define SARADC_SAR2_ATTEN_S 0 + +#define SARADC_SAR_SLAVE_ADDR1_REG (DR_REG_SARADC_BASE + 0x003c) +/* SARADC_MEAS_STATUS : RO ;bitpos:[29:22] ;default: 8'h0 ; */ +/*description: */ +#define SARADC_MEAS_STATUS 0x000000FF +#define SARADC_MEAS_STATUS_M ((SARADC_MEAS_STATUS_V)<<(SARADC_MEAS_STATUS_S)) +#define SARADC_MEAS_STATUS_V 0xFF +#define SARADC_MEAS_STATUS_S 22 +/* SARADC_I2C_SLAVE_ADDR0 : R/W ;bitpos:[21:11] ;default: 11'h0 ; */ +/*description: */ +#define SARADC_I2C_SLAVE_ADDR0 0x000007FF +#define SARADC_I2C_SLAVE_ADDR0_M ((SARADC_I2C_SLAVE_ADDR0_V)<<(SARADC_I2C_SLAVE_ADDR0_S)) +#define SARADC_I2C_SLAVE_ADDR0_V 0x7FF +#define SARADC_I2C_SLAVE_ADDR0_S 11 +/* SARADC_I2C_SLAVE_ADDR1 : R/W ;bitpos:[10:0] ;default: 11'h0 ; */ +/*description: */ +#define SARADC_I2C_SLAVE_ADDR1 0x000007FF +#define SARADC_I2C_SLAVE_ADDR1_M ((SARADC_I2C_SLAVE_ADDR1_V)<<(SARADC_I2C_SLAVE_ADDR1_S)) +#define SARADC_I2C_SLAVE_ADDR1_V 0x7FF +#define SARADC_I2C_SLAVE_ADDR1_S 0 + +#define SARADC_SAR_SLAVE_ADDR2_REG (DR_REG_SARADC_BASE + 0x0040) +/* SARADC_I2C_SLAVE_ADDR2 : R/W ;bitpos:[21:11] ;default: 11'h0 ; */ +/*description: */ +#define SARADC_I2C_SLAVE_ADDR2 0x000007FF +#define SARADC_I2C_SLAVE_ADDR2_M ((SARADC_I2C_SLAVE_ADDR2_V)<<(SARADC_I2C_SLAVE_ADDR2_S)) +#define SARADC_I2C_SLAVE_ADDR2_V 0x7FF +#define SARADC_I2C_SLAVE_ADDR2_S 11 +/* SARADC_I2C_SLAVE_ADDR3 : R/W ;bitpos:[10:0] ;default: 11'h0 ; */ +/*description: */ +#define SARADC_I2C_SLAVE_ADDR3 0x000007FF +#define SARADC_I2C_SLAVE_ADDR3_M ((SARADC_I2C_SLAVE_ADDR3_V)<<(SARADC_I2C_SLAVE_ADDR3_S)) +#define SARADC_I2C_SLAVE_ADDR3_V 0x7FF +#define SARADC_I2C_SLAVE_ADDR3_S 0 + +#define SARADC_SAR_SLAVE_ADDR3_REG (DR_REG_SARADC_BASE + 0x0044) +/* SARADC_TSENS_RDY_OUT : RO ;bitpos:[30] ;default: 1'h0 ; */ +/*description: indicate temperature sensor out ready*/ +#define SARADC_TSENS_RDY_OUT (BIT(30)) +#define SARADC_TSENS_RDY_OUT_M (BIT(30)) +#define SARADC_TSENS_RDY_OUT_V 0x1 +#define SARADC_TSENS_RDY_OUT_S 30 +/* SARADC_TSENS_OUT : RO ;bitpos:[29:22] ;default: 8'h0 ; */ +/*description: temperature sensor data out*/ +#define SARADC_TSENS_OUT 0x000000FF +#define SARADC_TSENS_OUT_M ((SARADC_TSENS_OUT_V)<<(SARADC_TSENS_OUT_S)) +#define SARADC_TSENS_OUT_V 0xFF +#define SARADC_TSENS_OUT_S 22 +/* SARADC_I2C_SLAVE_ADDR4 : R/W ;bitpos:[21:11] ;default: 11'h0 ; */ +/*description: */ +#define SARADC_I2C_SLAVE_ADDR4 0x000007FF +#define SARADC_I2C_SLAVE_ADDR4_M ((SARADC_I2C_SLAVE_ADDR4_V)<<(SARADC_I2C_SLAVE_ADDR4_S)) +#define SARADC_I2C_SLAVE_ADDR4_V 0x7FF +#define SARADC_I2C_SLAVE_ADDR4_S 11 +/* SARADC_I2C_SLAVE_ADDR5 : R/W ;bitpos:[10:0] ;default: 11'h0 ; */ +/*description: */ +#define SARADC_I2C_SLAVE_ADDR5 0x000007FF +#define SARADC_I2C_SLAVE_ADDR5_M ((SARADC_I2C_SLAVE_ADDR5_V)<<(SARADC_I2C_SLAVE_ADDR5_S)) +#define SARADC_I2C_SLAVE_ADDR5_V 0x7FF +#define SARADC_I2C_SLAVE_ADDR5_S 0 + +#define SARADC_SAR_SLAVE_ADDR4_REG (DR_REG_SARADC_BASE + 0x0048) +/* SARADC_I2C_DONE : RO ;bitpos:[30] ;default: 1'h0 ; */ +/*description: indicate I2C done*/ +#define SARADC_I2C_DONE (BIT(30)) +#define SARADC_I2C_DONE_M (BIT(30)) +#define SARADC_I2C_DONE_V 0x1 +#define SARADC_I2C_DONE_S 30 +/* SARADC_I2C_RDATA : RO ;bitpos:[29:22] ;default: 8'h0 ; */ +/*description: I2C read data*/ +#define SARADC_I2C_RDATA 0x000000FF +#define SARADC_I2C_RDATA_M ((SARADC_I2C_RDATA_V)<<(SARADC_I2C_RDATA_S)) +#define SARADC_I2C_RDATA_V 0xFF +#define SARADC_I2C_RDATA_S 22 +/* SARADC_I2C_SLAVE_ADDR6 : R/W ;bitpos:[21:11] ;default: 11'h0 ; */ +/*description: */ +#define SARADC_I2C_SLAVE_ADDR6 0x000007FF +#define SARADC_I2C_SLAVE_ADDR6_M ((SARADC_I2C_SLAVE_ADDR6_V)<<(SARADC_I2C_SLAVE_ADDR6_S)) +#define SARADC_I2C_SLAVE_ADDR6_V 0x7FF +#define SARADC_I2C_SLAVE_ADDR6_S 11 +/* SARADC_I2C_SLAVE_ADDR7 : R/W ;bitpos:[10:0] ;default: 11'h0 ; */ +/*description: */ +#define SARADC_I2C_SLAVE_ADDR7 0x000007FF +#define SARADC_I2C_SLAVE_ADDR7_M ((SARADC_I2C_SLAVE_ADDR7_V)<<(SARADC_I2C_SLAVE_ADDR7_S)) +#define SARADC_I2C_SLAVE_ADDR7_V 0x7FF +#define SARADC_I2C_SLAVE_ADDR7_S 0 + +#define SARADC_SAR_TSENS_CTRL_REG (DR_REG_SARADC_BASE + 0x004c) +/* SARADC_TSENS_DUMP_OUT : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: temperature sensor dump out only active when reg_tsens_power_up_force = 1*/ +#define SARADC_TSENS_DUMP_OUT (BIT(26)) +#define SARADC_TSENS_DUMP_OUT_M (BIT(26)) +#define SARADC_TSENS_DUMP_OUT_V 0x1 +#define SARADC_TSENS_DUMP_OUT_S 26 +/* SARADC_TSENS_POWER_UP_FORCE : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: 1: dump out & power up controlled by SW 0: by FSM*/ +#define SARADC_TSENS_POWER_UP_FORCE (BIT(25)) +#define SARADC_TSENS_POWER_UP_FORCE_M (BIT(25)) +#define SARADC_TSENS_POWER_UP_FORCE_V 0x1 +#define SARADC_TSENS_POWER_UP_FORCE_S 25 +/* SARADC_TSENS_POWER_UP : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: temperature sensor power up*/ +#define SARADC_TSENS_POWER_UP (BIT(24)) +#define SARADC_TSENS_POWER_UP_M (BIT(24)) +#define SARADC_TSENS_POWER_UP_V 0x1 +#define SARADC_TSENS_POWER_UP_S 24 +/* SARADC_TSENS_CLK_DIV : R/W ;bitpos:[23:16] ;default: 8'd6 ; */ +/*description: temperature sensor clock divider*/ +#define SARADC_TSENS_CLK_DIV 0x000000FF +#define SARADC_TSENS_CLK_DIV_M ((SARADC_TSENS_CLK_DIV_V)<<(SARADC_TSENS_CLK_DIV_S)) +#define SARADC_TSENS_CLK_DIV_V 0xFF +#define SARADC_TSENS_CLK_DIV_S 16 +/* SARADC_TSENS_IN_INV : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: invert temperature sensor data*/ +#define SARADC_TSENS_IN_INV (BIT(15)) +#define SARADC_TSENS_IN_INV_M (BIT(15)) +#define SARADC_TSENS_IN_INV_V 0x1 +#define SARADC_TSENS_IN_INV_S 15 +/* SARADC_TSENS_CLK_GATED : R/W ;bitpos:[14] ;default: 1'b1 ; */ +/*description: */ +#define SARADC_TSENS_CLK_GATED (BIT(14)) +#define SARADC_TSENS_CLK_GATED_M (BIT(14)) +#define SARADC_TSENS_CLK_GATED_V 0x1 +#define SARADC_TSENS_CLK_GATED_S 14 +/* SARADC_TSENS_CLK_INV : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: */ +#define SARADC_TSENS_CLK_INV (BIT(13)) +#define SARADC_TSENS_CLK_INV_M (BIT(13)) +#define SARADC_TSENS_CLK_INV_V 0x1 +#define SARADC_TSENS_CLK_INV_S 13 +/* SARADC_TSENS_XPD_FORCE : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define SARADC_TSENS_XPD_FORCE (BIT(12)) +#define SARADC_TSENS_XPD_FORCE_M (BIT(12)) +#define SARADC_TSENS_XPD_FORCE_V 0x1 +#define SARADC_TSENS_XPD_FORCE_S 12 +/* SARADC_TSENS_XPD_WAIT : R/W ;bitpos:[11:0] ;default: 12'h2 ; */ +/*description: */ +#define SARADC_TSENS_XPD_WAIT 0x00000FFF +#define SARADC_TSENS_XPD_WAIT_M ((SARADC_TSENS_XPD_WAIT_V)<<(SARADC_TSENS_XPD_WAIT_S)) +#define SARADC_TSENS_XPD_WAIT_V 0xFFF +#define SARADC_TSENS_XPD_WAIT_S 0 + +#define SARADC_SAR_I2C_CTRL_REG (DR_REG_SARADC_BASE + 0x0050) +/* SARADC_SAR_I2C_START_FORCE : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: 1: I2C started by SW 0: I2C started by FSM*/ +#define SARADC_SAR_I2C_START_FORCE (BIT(29)) +#define SARADC_SAR_I2C_START_FORCE_M (BIT(29)) +#define SARADC_SAR_I2C_START_FORCE_V 0x1 +#define SARADC_SAR_I2C_START_FORCE_S 29 +/* SARADC_SAR_I2C_START : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: start I2C only active when reg_sar_i2c_start_force = 1*/ +#define SARADC_SAR_I2C_START (BIT(28)) +#define SARADC_SAR_I2C_START_M (BIT(28)) +#define SARADC_SAR_I2C_START_V 0x1 +#define SARADC_SAR_I2C_START_S 28 +/* SARADC_SAR_I2C_CTRL : R/W ;bitpos:[27:0] ;default: 28'b0 ; */ +/*description: I2C control data only active when reg_sar_i2c_start_force = 1*/ +#define SARADC_SAR_I2C_CTRL 0x0FFFFFFF +#define SARADC_SAR_I2C_CTRL_M ((SARADC_SAR_I2C_CTRL_V)<<(SARADC_SAR_I2C_CTRL_S)) +#define SARADC_SAR_I2C_CTRL_V 0xFFFFFFF +#define SARADC_SAR_I2C_CTRL_S 0 + +#define SARADC_SAR_MEAS_START1_REG (DR_REG_SARADC_BASE + 0x0054) +/* SARADC_SAR1_EN_PAD_FORCE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: 1: SAR ADC1 pad enable bitmap is controlled by SW 0: SAR ADC1 + pad enable bitmap is controlled by ULP-coprocessor*/ +#define SARADC_SAR1_EN_PAD_FORCE (BIT(31)) +#define SARADC_SAR1_EN_PAD_FORCE_M (BIT(31)) +#define SARADC_SAR1_EN_PAD_FORCE_V 0x1 +#define SARADC_SAR1_EN_PAD_FORCE_S 31 +/* SARADC_SAR1_EN_PAD : R/W ;bitpos:[30:19] ;default: 12'b0 ; */ +/*description: SAR ADC1 pad enable bitmap only active when reg_sar1_en_pad_force = 1*/ +#define SARADC_SAR1_EN_PAD 0x00000FFF +#define SARADC_SAR1_EN_PAD_M ((SARADC_SAR1_EN_PAD_V)<<(SARADC_SAR1_EN_PAD_S)) +#define SARADC_SAR1_EN_PAD_V 0xFFF +#define SARADC_SAR1_EN_PAD_S 19 +/* SARADC_MEAS1_START_FORCE : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: 1: SAR ADC1 controller (in RTC) is started by SW 0: SAR ADC1 + controller is started by ULP-coprocessor*/ +#define SARADC_MEAS1_START_FORCE (BIT(18)) +#define SARADC_MEAS1_START_FORCE_M (BIT(18)) +#define SARADC_MEAS1_START_FORCE_V 0x1 +#define SARADC_MEAS1_START_FORCE_S 18 +/* SARADC_MEAS1_START_SAR : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: SAR ADC1 controller (in RTC) starts conversion only active when + reg_meas1_start_force = 1*/ +#define SARADC_MEAS1_START_SAR (BIT(17)) +#define SARADC_MEAS1_START_SAR_M (BIT(17)) +#define SARADC_MEAS1_START_SAR_V 0x1 +#define SARADC_MEAS1_START_SAR_S 17 +/* SARADC_MEAS1_DONE_SAR : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: SAR ADC1 conversion done indication*/ +#define SARADC_MEAS1_DONE_SAR (BIT(16)) +#define SARADC_MEAS1_DONE_SAR_M (BIT(16)) +#define SARADC_MEAS1_DONE_SAR_V 0x1 +#define SARADC_MEAS1_DONE_SAR_S 16 +/* SARADC_MEAS1_DATA_SAR : RO ;bitpos:[15:0] ;default: 16'b0 ; */ +/*description: SAR ADC1 data*/ +#define SARADC_MEAS1_DATA_SAR 0x0000FFFF +#define SARADC_MEAS1_DATA_SAR_M ((SARADC_MEAS1_DATA_SAR_V)<<(SARADC_MEAS1_DATA_SAR_S)) +#define SARADC_MEAS1_DATA_SAR_V 0xFFFF +#define SARADC_MEAS1_DATA_SAR_S 0 + +#define SARADC_SAR_TOUCH_CTRL1_REG (DR_REG_SARADC_BASE + 0x0058) +/* SARADC_HALL_PHASE_FORCE : R/W ;bitpos:[27] ;default: 1'b0 ; */ +/*description: 1: HALL PHASE is controlled by SW 0: HALL PHASE is controlled + by FSM in ULP-coprocessor*/ +#define SARADC_HALL_PHASE_FORCE (BIT(27)) +#define SARADC_HALL_PHASE_FORCE_M (BIT(27)) +#define SARADC_HALL_PHASE_FORCE_V 0x1 +#define SARADC_HALL_PHASE_FORCE_S 27 +/* SARADC_XPD_HALL_FORCE : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: 1: XPD HALL is controlled by SW. 0: XPD HALL is controlled by + FSM in ULP-coprocessor*/ +#define SARADC_XPD_HALL_FORCE (BIT(26)) +#define SARADC_XPD_HALL_FORCE_M (BIT(26)) +#define SARADC_XPD_HALL_FORCE_V 0x1 +#define SARADC_XPD_HALL_FORCE_S 26 +/* SARADC_TOUCH_OUT_1EN : R/W ;bitpos:[25] ;default: 1'b1 ; */ +/*description: 1: wakeup interrupt is generated if SET1 is "touched" 0: + wakeup interrupt is generated only if SET1 & SET2 is both "touched"*/ +#define SARADC_TOUCH_OUT_1EN (BIT(25)) +#define SARADC_TOUCH_OUT_1EN_M (BIT(25)) +#define SARADC_TOUCH_OUT_1EN_V 0x1 +#define SARADC_TOUCH_OUT_1EN_S 25 +/* SARADC_TOUCH_OUT_SEL : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: 1: when the counter is greater then the threshold the touch + pad is considered as "touched" 0: when the counter is less than the threshold the touch pad is considered as "touched"*/ +#define SARADC_TOUCH_OUT_SEL (BIT(24)) +#define SARADC_TOUCH_OUT_SEL_M (BIT(24)) +#define SARADC_TOUCH_OUT_SEL_V 0x1 +#define SARADC_TOUCH_OUT_SEL_S 24 +/* SARADC_TOUCH_XPD_WAIT : R/W ;bitpos:[23:16] ;default: 8'h4 ; */ +/*description: the waiting cycles (in 8MHz) between TOUCH_START and TOUCH_XPD*/ +#define SARADC_TOUCH_XPD_WAIT 0x000000FF +#define SARADC_TOUCH_XPD_WAIT_M ((SARADC_TOUCH_XPD_WAIT_V)<<(SARADC_TOUCH_XPD_WAIT_S)) +#define SARADC_TOUCH_XPD_WAIT_V 0xFF +#define SARADC_TOUCH_XPD_WAIT_S 16 +/* SARADC_TOUCH_MEAS_DELAY : R/W ;bitpos:[15:0] ;default: 16'h1000 ; */ +/*description: the meas length (in 8MHz)*/ +#define SARADC_TOUCH_MEAS_DELAY 0x0000FFFF +#define SARADC_TOUCH_MEAS_DELAY_M ((SARADC_TOUCH_MEAS_DELAY_V)<<(SARADC_TOUCH_MEAS_DELAY_S)) +#define SARADC_TOUCH_MEAS_DELAY_V 0xFFFF +#define SARADC_TOUCH_MEAS_DELAY_S 0 + +#define SARADC_SAR_TOUCH_THRES1_REG (DR_REG_SARADC_BASE + 0x005c) +/* SARADC_TOUCH_OUT_TH0 : R/W ;bitpos:[31:16] ;default: 16'h0 ; */ +/*description: the threshold for touch pad 0*/ +#define SARADC_TOUCH_OUT_TH0 0x0000FFFF +#define SARADC_TOUCH_OUT_TH0_M ((SARADC_TOUCH_OUT_TH0_V)<<(SARADC_TOUCH_OUT_TH0_S)) +#define SARADC_TOUCH_OUT_TH0_V 0xFFFF +#define SARADC_TOUCH_OUT_TH0_S 16 +/* SARADC_TOUCH_OUT_TH1 : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: the threshold for touch pad 1*/ +#define SARADC_TOUCH_OUT_TH1 0x0000FFFF +#define SARADC_TOUCH_OUT_TH1_M ((SARADC_TOUCH_OUT_TH1_V)<<(SARADC_TOUCH_OUT_TH1_S)) +#define SARADC_TOUCH_OUT_TH1_V 0xFFFF +#define SARADC_TOUCH_OUT_TH1_S 0 + +#define SARADC_SAR_TOUCH_THRES2_REG (DR_REG_SARADC_BASE + 0x0060) +/* SARADC_TOUCH_OUT_TH2 : R/W ;bitpos:[31:16] ;default: 16'h0 ; */ +/*description: the threshold for touch pad 2*/ +#define SARADC_TOUCH_OUT_TH2 0x0000FFFF +#define SARADC_TOUCH_OUT_TH2_M ((SARADC_TOUCH_OUT_TH2_V)<<(SARADC_TOUCH_OUT_TH2_S)) +#define SARADC_TOUCH_OUT_TH2_V 0xFFFF +#define SARADC_TOUCH_OUT_TH2_S 16 +/* SARADC_TOUCH_OUT_TH3 : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: the threshold for touch pad 3*/ +#define SARADC_TOUCH_OUT_TH3 0x0000FFFF +#define SARADC_TOUCH_OUT_TH3_M ((SARADC_TOUCH_OUT_TH3_V)<<(SARADC_TOUCH_OUT_TH3_S)) +#define SARADC_TOUCH_OUT_TH3_V 0xFFFF +#define SARADC_TOUCH_OUT_TH3_S 0 + +#define SARADC_SAR_TOUCH_THRES3_REG (DR_REG_SARADC_BASE + 0x0064) +/* SARADC_TOUCH_OUT_TH4 : R/W ;bitpos:[31:16] ;default: 16'h0 ; */ +/*description: the threshold for touch pad 4*/ +#define SARADC_TOUCH_OUT_TH4 0x0000FFFF +#define SARADC_TOUCH_OUT_TH4_M ((SARADC_TOUCH_OUT_TH4_V)<<(SARADC_TOUCH_OUT_TH4_S)) +#define SARADC_TOUCH_OUT_TH4_V 0xFFFF +#define SARADC_TOUCH_OUT_TH4_S 16 +/* SARADC_TOUCH_OUT_TH5 : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: the threshold for touch pad 5*/ +#define SARADC_TOUCH_OUT_TH5 0x0000FFFF +#define SARADC_TOUCH_OUT_TH5_M ((SARADC_TOUCH_OUT_TH5_V)<<(SARADC_TOUCH_OUT_TH5_S)) +#define SARADC_TOUCH_OUT_TH5_V 0xFFFF +#define SARADC_TOUCH_OUT_TH5_S 0 + +#define SARADC_SAR_TOUCH_THRES4_REG (DR_REG_SARADC_BASE + 0x0068) +/* SARADC_TOUCH_OUT_TH6 : R/W ;bitpos:[31:16] ;default: 16'h0 ; */ +/*description: the threshold for touch pad 6*/ +#define SARADC_TOUCH_OUT_TH6 0x0000FFFF +#define SARADC_TOUCH_OUT_TH6_M ((SARADC_TOUCH_OUT_TH6_V)<<(SARADC_TOUCH_OUT_TH6_S)) +#define SARADC_TOUCH_OUT_TH6_V 0xFFFF +#define SARADC_TOUCH_OUT_TH6_S 16 +/* SARADC_TOUCH_OUT_TH7 : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: the threshold for touch pad 7*/ +#define SARADC_TOUCH_OUT_TH7 0x0000FFFF +#define SARADC_TOUCH_OUT_TH7_M ((SARADC_TOUCH_OUT_TH7_V)<<(SARADC_TOUCH_OUT_TH7_S)) +#define SARADC_TOUCH_OUT_TH7_V 0xFFFF +#define SARADC_TOUCH_OUT_TH7_S 0 + +#define SARADC_SAR_TOUCH_THRES5_REG (DR_REG_SARADC_BASE + 0x006c) +/* SARADC_TOUCH_OUT_TH8 : R/W ;bitpos:[31:16] ;default: 16'h0 ; */ +/*description: the threshold for touch pad 8*/ +#define SARADC_TOUCH_OUT_TH8 0x0000FFFF +#define SARADC_TOUCH_OUT_TH8_M ((SARADC_TOUCH_OUT_TH8_V)<<(SARADC_TOUCH_OUT_TH8_S)) +#define SARADC_TOUCH_OUT_TH8_V 0xFFFF +#define SARADC_TOUCH_OUT_TH8_S 16 +/* SARADC_TOUCH_OUT_TH9 : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: the threshold for touch pad 9*/ +#define SARADC_TOUCH_OUT_TH9 0x0000FFFF +#define SARADC_TOUCH_OUT_TH9_M ((SARADC_TOUCH_OUT_TH9_V)<<(SARADC_TOUCH_OUT_TH9_S)) +#define SARADC_TOUCH_OUT_TH9_V 0xFFFF +#define SARADC_TOUCH_OUT_TH9_S 0 + +#define SARADC_SAR_TOUCH_OUT1_REG (DR_REG_SARADC_BASE + 0x0070) +/* SARADC_TOUCH_MEAS_OUT0 : RO ;bitpos:[31:16] ;default: 16'h0 ; */ +/*description: the counter for touch pad 0*/ +#define SARADC_TOUCH_MEAS_OUT0 0x0000FFFF +#define SARADC_TOUCH_MEAS_OUT0_M ((SARADC_TOUCH_MEAS_OUT0_V)<<(SARADC_TOUCH_MEAS_OUT0_S)) +#define SARADC_TOUCH_MEAS_OUT0_V 0xFFFF +#define SARADC_TOUCH_MEAS_OUT0_S 16 +/* SARADC_TOUCH_MEAS_OUT1 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: the counter for touch pad 1*/ +#define SARADC_TOUCH_MEAS_OUT1 0x0000FFFF +#define SARADC_TOUCH_MEAS_OUT1_M ((SARADC_TOUCH_MEAS_OUT1_V)<<(SARADC_TOUCH_MEAS_OUT1_S)) +#define SARADC_TOUCH_MEAS_OUT1_V 0xFFFF +#define SARADC_TOUCH_MEAS_OUT1_S 0 + +#define SARADC_SAR_TOUCH_OUT2_REG (DR_REG_SARADC_BASE + 0x0074) +/* SARADC_TOUCH_MEAS_OUT2 : RO ;bitpos:[31:16] ;default: 16'h0 ; */ +/*description: the counter for touch pad 2*/ +#define SARADC_TOUCH_MEAS_OUT2 0x0000FFFF +#define SARADC_TOUCH_MEAS_OUT2_M ((SARADC_TOUCH_MEAS_OUT2_V)<<(SARADC_TOUCH_MEAS_OUT2_S)) +#define SARADC_TOUCH_MEAS_OUT2_V 0xFFFF +#define SARADC_TOUCH_MEAS_OUT2_S 16 +/* SARADC_TOUCH_MEAS_OUT3 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: the counter for touch pad 3*/ +#define SARADC_TOUCH_MEAS_OUT3 0x0000FFFF +#define SARADC_TOUCH_MEAS_OUT3_M ((SARADC_TOUCH_MEAS_OUT3_V)<<(SARADC_TOUCH_MEAS_OUT3_S)) +#define SARADC_TOUCH_MEAS_OUT3_V 0xFFFF +#define SARADC_TOUCH_MEAS_OUT3_S 0 + +#define SARADC_SAR_TOUCH_OUT3_REG (DR_REG_SARADC_BASE + 0x0078) +/* SARADC_TOUCH_MEAS_OUT4 : RO ;bitpos:[31:16] ;default: 16'h0 ; */ +/*description: the counter for touch pad 4*/ +#define SARADC_TOUCH_MEAS_OUT4 0x0000FFFF +#define SARADC_TOUCH_MEAS_OUT4_M ((SARADC_TOUCH_MEAS_OUT4_V)<<(SARADC_TOUCH_MEAS_OUT4_S)) +#define SARADC_TOUCH_MEAS_OUT4_V 0xFFFF +#define SARADC_TOUCH_MEAS_OUT4_S 16 +/* SARADC_TOUCH_MEAS_OUT5 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: the counter for touch pad 5*/ +#define SARADC_TOUCH_MEAS_OUT5 0x0000FFFF +#define SARADC_TOUCH_MEAS_OUT5_M ((SARADC_TOUCH_MEAS_OUT5_V)<<(SARADC_TOUCH_MEAS_OUT5_S)) +#define SARADC_TOUCH_MEAS_OUT5_V 0xFFFF +#define SARADC_TOUCH_MEAS_OUT5_S 0 + +#define SARADC_SAR_TOUCH_OUT4_REG (DR_REG_SARADC_BASE + 0x007c) +/* SARADC_TOUCH_MEAS_OUT6 : RO ;bitpos:[31:16] ;default: 16'h0 ; */ +/*description: the counter for touch pad 6*/ +#define SARADC_TOUCH_MEAS_OUT6 0x0000FFFF +#define SARADC_TOUCH_MEAS_OUT6_M ((SARADC_TOUCH_MEAS_OUT6_V)<<(SARADC_TOUCH_MEAS_OUT6_S)) +#define SARADC_TOUCH_MEAS_OUT6_V 0xFFFF +#define SARADC_TOUCH_MEAS_OUT6_S 16 +/* SARADC_TOUCH_MEAS_OUT7 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: the counter for touch pad 7*/ +#define SARADC_TOUCH_MEAS_OUT7 0x0000FFFF +#define SARADC_TOUCH_MEAS_OUT7_M ((SARADC_TOUCH_MEAS_OUT7_V)<<(SARADC_TOUCH_MEAS_OUT7_S)) +#define SARADC_TOUCH_MEAS_OUT7_V 0xFFFF +#define SARADC_TOUCH_MEAS_OUT7_S 0 + +#define SARADC_SAR_TOUCH_OUT5_REG (DR_REG_SARADC_BASE + 0x0080) +/* SARADC_TOUCH_MEAS_OUT8 : RO ;bitpos:[31:16] ;default: 16'h0 ; */ +/*description: the counter for touch pad 8*/ +#define SARADC_TOUCH_MEAS_OUT8 0x0000FFFF +#define SARADC_TOUCH_MEAS_OUT8_M ((SARADC_TOUCH_MEAS_OUT8_V)<<(SARADC_TOUCH_MEAS_OUT8_S)) +#define SARADC_TOUCH_MEAS_OUT8_V 0xFFFF +#define SARADC_TOUCH_MEAS_OUT8_S 16 +/* SARADC_TOUCH_MEAS_OUT9 : RO ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: the counter for touch pad 9*/ +#define SARADC_TOUCH_MEAS_OUT9 0x0000FFFF +#define SARADC_TOUCH_MEAS_OUT9_M ((SARADC_TOUCH_MEAS_OUT9_V)<<(SARADC_TOUCH_MEAS_OUT9_S)) +#define SARADC_TOUCH_MEAS_OUT9_V 0xFFFF +#define SARADC_TOUCH_MEAS_OUT9_S 0 + +#define SARADC_SAR_TOUCH_CTRL2_REG (DR_REG_SARADC_BASE + 0x0084) +/* SARADC_TOUCH_MEAS_EN_CLR : WO ;bitpos:[30] ;default: 1'h0 ; */ +/*description: to clear reg_touch_meas_en*/ +#define SARADC_TOUCH_MEAS_EN_CLR (BIT(30)) +#define SARADC_TOUCH_MEAS_EN_CLR_M (BIT(30)) +#define SARADC_TOUCH_MEAS_EN_CLR_V 0x1 +#define SARADC_TOUCH_MEAS_EN_CLR_S 30 +/* SARADC_TOUCH_SLEEP_CYCLES : R/W ;bitpos:[29:14] ;default: 16'h100 ; */ +/*description: sleep cycles for timer*/ +#define SARADC_TOUCH_SLEEP_CYCLES 0x0000FFFF +#define SARADC_TOUCH_SLEEP_CYCLES_M ((SARADC_TOUCH_SLEEP_CYCLES_V)<<(SARADC_TOUCH_SLEEP_CYCLES_S)) +#define SARADC_TOUCH_SLEEP_CYCLES_V 0xFFFF +#define SARADC_TOUCH_SLEEP_CYCLES_S 14 +/* SARADC_TOUCH_START_FORCE : R/W ;bitpos:[13] ;default: 1'h0 ; */ +/*description: 1: to start touch fsm by SW 0: to start touch fsm by timer*/ +#define SARADC_TOUCH_START_FORCE (BIT(13)) +#define SARADC_TOUCH_START_FORCE_M (BIT(13)) +#define SARADC_TOUCH_START_FORCE_V 0x1 +#define SARADC_TOUCH_START_FORCE_S 13 +/* SARADC_TOUCH_START_EN : R/W ;bitpos:[12] ;default: 1'h0 ; */ +/*description: 1: start touch fsm valid when reg_touch_start_force is set*/ +#define SARADC_TOUCH_START_EN (BIT(12)) +#define SARADC_TOUCH_START_EN_M (BIT(12)) +#define SARADC_TOUCH_START_EN_V 0x1 +#define SARADC_TOUCH_START_EN_S 12 +/* SARADC_TOUCH_START_FSM_EN : R/W ;bitpos:[11] ;default: 1'h1 ; */ +/*description: 1: TOUCH_START & TOUCH_XPD is controlled by touch fsm 0: TOUCH_START + & TOUCH_XPD is controlled by registers*/ +#define SARADC_TOUCH_START_FSM_EN (BIT(11)) +#define SARADC_TOUCH_START_FSM_EN_M (BIT(11)) +#define SARADC_TOUCH_START_FSM_EN_V 0x1 +#define SARADC_TOUCH_START_FSM_EN_S 11 +/* SARADC_TOUCH_MEAS_DONE : RO ;bitpos:[10] ;default: 1'h0 ; */ +/*description: fsm set 1 to indicate touch touch meas is done*/ +#define SARADC_TOUCH_MEAS_DONE (BIT(10)) +#define SARADC_TOUCH_MEAS_DONE_M (BIT(10)) +#define SARADC_TOUCH_MEAS_DONE_V 0x1 +#define SARADC_TOUCH_MEAS_DONE_S 10 +/* SARADC_TOUCH_MEAS_EN : RO ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: 10-bit register to indicate which pads are "touched"*/ +#define SARADC_TOUCH_MEAS_EN 0x000003FF +#define SARADC_TOUCH_MEAS_EN_M ((SARADC_TOUCH_MEAS_EN_V)<<(SARADC_TOUCH_MEAS_EN_S)) +#define SARADC_TOUCH_MEAS_EN_V 0x3FF +#define SARADC_TOUCH_MEAS_EN_S 0 + +#define SARADC_SAR_TOUCH_ENABLE_REG (DR_REG_SARADC_BASE + 0x008c) +/* SARADC_TOUCH_PAD_OUTEN1 : R/W ;bitpos:[29:20] ;default: 10'h3ff ; */ +/*description: Bitmap defining SET1 for generating wakeup interrupt. SET1 is + "touched" only if at least one of touch pad in SET1 is "touched".*/ +#define SARADC_TOUCH_PAD_OUTEN1 0x000003FF +#define SARADC_TOUCH_PAD_OUTEN1_M ((SARADC_TOUCH_PAD_OUTEN1_V)<<(SARADC_TOUCH_PAD_OUTEN1_S)) +#define SARADC_TOUCH_PAD_OUTEN1_V 0x3FF +#define SARADC_TOUCH_PAD_OUTEN1_S 20 +/* SARADC_TOUCH_PAD_OUTEN2 : R/W ;bitpos:[19:10] ;default: 10'h3ff ; */ +/*description: Bitmap defining SET2 for generating wakeup interrupt. SET2 is + "touched" only if at least one of touch pad in SET2 is "touched".*/ +#define SARADC_TOUCH_PAD_OUTEN2 0x000003FF +#define SARADC_TOUCH_PAD_OUTEN2_M ((SARADC_TOUCH_PAD_OUTEN2_V)<<(SARADC_TOUCH_PAD_OUTEN2_S)) +#define SARADC_TOUCH_PAD_OUTEN2_V 0x3FF +#define SARADC_TOUCH_PAD_OUTEN2_S 10 +/* SARADC_TOUCH_PAD_WORKEN : R/W ;bitpos:[9:0] ;default: 10'h3ff ; */ +/*description: Bitmap defining the working set during the measurement.*/ +#define SARADC_TOUCH_PAD_WORKEN 0x000003FF +#define SARADC_TOUCH_PAD_WORKEN_M ((SARADC_TOUCH_PAD_WORKEN_V)<<(SARADC_TOUCH_PAD_WORKEN_S)) +#define SARADC_TOUCH_PAD_WORKEN_V 0x3FF +#define SARADC_TOUCH_PAD_WORKEN_S 0 + +#define SARADC_SAR_READ_CTRL2_REG (DR_REG_SARADC_BASE + 0x0090) +/* SARADC_SAR2_DATA_INV : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: Invert SAR ADC2 data*/ +#define SARADC_SAR2_DATA_INV (BIT(29)) +#define SARADC_SAR2_DATA_INV_M (BIT(29)) +#define SARADC_SAR2_DATA_INV_V 0x1 +#define SARADC_SAR2_DATA_INV_S 29 +/* SARADC_SAR2_DIG_FORCE : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: 1: SAR ADC2 controlled by DIG ADC2 CTRL or PWDET CTRL 0: SAR + ADC2 controlled by RTC ADC2 CTRL*/ +#define SARADC_SAR2_DIG_FORCE (BIT(28)) +#define SARADC_SAR2_DIG_FORCE_M (BIT(28)) +#define SARADC_SAR2_DIG_FORCE_V 0x1 +#define SARADC_SAR2_DIG_FORCE_S 28 +/* SARADC_SAR2_PWDET_FORCE : R/W ;bitpos:[27] ;default: 1'b0 ; */ +/*description: */ +#define SARADC_SAR2_PWDET_FORCE (BIT(27)) +#define SARADC_SAR2_PWDET_FORCE_M (BIT(27)) +#define SARADC_SAR2_PWDET_FORCE_V 0x1 +#define SARADC_SAR2_PWDET_FORCE_S 27 +/* SARADC_SAR2_SAMPLE_NUM : R/W ;bitpos:[26:19] ;default: 8'd0 ; */ +/*description: */ +#define SARADC_SAR2_SAMPLE_NUM 0x000000FF +#define SARADC_SAR2_SAMPLE_NUM_M ((SARADC_SAR2_SAMPLE_NUM_V)<<(SARADC_SAR2_SAMPLE_NUM_S)) +#define SARADC_SAR2_SAMPLE_NUM_V 0xFF +#define SARADC_SAR2_SAMPLE_NUM_S 19 +/* SARADC_SAR2_CLK_GATED : R/W ;bitpos:[18] ;default: 1'b1 ; */ +/*description: */ +#define SARADC_SAR2_CLK_GATED (BIT(18)) +#define SARADC_SAR2_CLK_GATED_M (BIT(18)) +#define SARADC_SAR2_CLK_GATED_V 0x1 +#define SARADC_SAR2_CLK_GATED_S 18 +/* SARADC_SAR2_SAMPLE_BIT : R/W ;bitpos:[17:16] ;default: 2'd3 ; */ +/*description: 00: for 9-bit width 01: for 10-bit width 10: for 11-bit width + 11: for 12-bit width*/ +#define SARADC_SAR2_SAMPLE_BIT 0x00000003 +#define SARADC_SAR2_SAMPLE_BIT_M ((SARADC_SAR2_SAMPLE_BIT_V)<<(SARADC_SAR2_SAMPLE_BIT_S)) +#define SARADC_SAR2_SAMPLE_BIT_V 0x3 +#define SARADC_SAR2_SAMPLE_BIT_S 16 +/* SARADC_SAR2_SAMPLE_CYCLE : R/W ;bitpos:[15:8] ;default: 8'd9 ; */ +/*description: sample cycles for SAR ADC2*/ +#define SARADC_SAR2_SAMPLE_CYCLE 0x000000FF +#define SARADC_SAR2_SAMPLE_CYCLE_M ((SARADC_SAR2_SAMPLE_CYCLE_V)<<(SARADC_SAR2_SAMPLE_CYCLE_S)) +#define SARADC_SAR2_SAMPLE_CYCLE_V 0xFF +#define SARADC_SAR2_SAMPLE_CYCLE_S 8 +/* SARADC_SAR2_CLK_DIV : R/W ;bitpos:[7:0] ;default: 8'd2 ; */ +/*description: clock divider*/ +#define SARADC_SAR2_CLK_DIV 0x000000FF +#define SARADC_SAR2_CLK_DIV_M ((SARADC_SAR2_CLK_DIV_V)<<(SARADC_SAR2_CLK_DIV_S)) +#define SARADC_SAR2_CLK_DIV_V 0xFF +#define SARADC_SAR2_CLK_DIV_S 0 + +#define SARADC_SAR_MEAS_START2_REG (DR_REG_SARADC_BASE + 0x0094) +/* SARADC_SAR2_EN_PAD_FORCE : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: 1: SAR ADC2 pad enable bitmap is controlled by SW 0: SAR ADC2 + pad enable bitmap is controlled by ULP-coprocessor*/ +#define SARADC_SAR2_EN_PAD_FORCE (BIT(31)) +#define SARADC_SAR2_EN_PAD_FORCE_M (BIT(31)) +#define SARADC_SAR2_EN_PAD_FORCE_V 0x1 +#define SARADC_SAR2_EN_PAD_FORCE_S 31 +/* SARADC_SAR2_EN_PAD : R/W ;bitpos:[30:19] ;default: 12'b0 ; */ +/*description: SAR ADC2 pad enable bitmap only active when reg_sar2_en_pad_force = 1*/ +#define SARADC_SAR2_EN_PAD 0x00000FFF +#define SARADC_SAR2_EN_PAD_M ((SARADC_SAR2_EN_PAD_V)<<(SARADC_SAR2_EN_PAD_S)) +#define SARADC_SAR2_EN_PAD_V 0xFFF +#define SARADC_SAR2_EN_PAD_S 19 +/* SARADC_MEAS2_START_FORCE : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: 1: SAR ADC2 controller (in RTC) is started by SW 0: SAR ADC2 + controller is started by ULP-coprocessor*/ +#define SARADC_MEAS2_START_FORCE (BIT(18)) +#define SARADC_MEAS2_START_FORCE_M (BIT(18)) +#define SARADC_MEAS2_START_FORCE_V 0x1 +#define SARADC_MEAS2_START_FORCE_S 18 +/* SARADC_MEAS2_START_SAR : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: SAR ADC2 controller (in RTC) starts conversion only active when + reg_meas2_start_force = 1*/ +#define SARADC_MEAS2_START_SAR (BIT(17)) +#define SARADC_MEAS2_START_SAR_M (BIT(17)) +#define SARADC_MEAS2_START_SAR_V 0x1 +#define SARADC_MEAS2_START_SAR_S 17 +/* SARADC_MEAS2_DONE_SAR : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: SAR ADC2 conversion done indication*/ +#define SARADC_MEAS2_DONE_SAR (BIT(16)) +#define SARADC_MEAS2_DONE_SAR_M (BIT(16)) +#define SARADC_MEAS2_DONE_SAR_V 0x1 +#define SARADC_MEAS2_DONE_SAR_S 16 +/* SARADC_MEAS2_DATA_SAR : RO ;bitpos:[15:0] ;default: 16'b0 ; */ +/*description: SAR ADC2 data*/ +#define SARADC_MEAS2_DATA_SAR 0x0000FFFF +#define SARADC_MEAS2_DATA_SAR_M ((SARADC_MEAS2_DATA_SAR_V)<<(SARADC_MEAS2_DATA_SAR_S)) +#define SARADC_MEAS2_DATA_SAR_V 0xFFFF +#define SARADC_MEAS2_DATA_SAR_S 0 + +#define SARADC_SAR_DAC_CTRL1_REG (DR_REG_SARADC_BASE + 0x0098) +/* SARADC_DAC_CLK_INV : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: 1: invert PDAC_CLK*/ +#define SARADC_DAC_CLK_INV (BIT(25)) +#define SARADC_DAC_CLK_INV_M (BIT(25)) +#define SARADC_DAC_CLK_INV_V 0x1 +#define SARADC_DAC_CLK_INV_S 25 +/* SARADC_DAC_CLK_FORCE_HIGH : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: 1: force PDAC_CLK to high*/ +#define SARADC_DAC_CLK_FORCE_HIGH (BIT(24)) +#define SARADC_DAC_CLK_FORCE_HIGH_M (BIT(24)) +#define SARADC_DAC_CLK_FORCE_HIGH_V 0x1 +#define SARADC_DAC_CLK_FORCE_HIGH_S 24 +/* SARADC_DAC_CLK_FORCE_LOW : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: 1: force PDAC_CLK to low*/ +#define SARADC_DAC_CLK_FORCE_LOW (BIT(23)) +#define SARADC_DAC_CLK_FORCE_LOW_M (BIT(23)) +#define SARADC_DAC_CLK_FORCE_LOW_V 0x1 +#define SARADC_DAC_CLK_FORCE_LOW_S 23 +/* SARADC_DAC_DIG_FORCE : R/W ;bitpos:[22] ;default: 1'b0 ; */ +/*description: 1: DAC1 & DAC2 use DMA 0: DAC1 & DAC2 do not use DMA*/ +#define SARADC_DAC_DIG_FORCE (BIT(22)) +#define SARADC_DAC_DIG_FORCE_M (BIT(22)) +#define SARADC_DAC_DIG_FORCE_V 0x1 +#define SARADC_DAC_DIG_FORCE_S 22 +/* SARADC_DEBUG_BIT_SEL : R/W ;bitpos:[21:17] ;default: 5'b0 ; */ +/*description: */ +#define SARADC_DEBUG_BIT_SEL 0x0000001F +#define SARADC_DEBUG_BIT_SEL_M ((SARADC_DEBUG_BIT_SEL_V)<<(SARADC_DEBUG_BIT_SEL_S)) +#define SARADC_DEBUG_BIT_SEL_V 0x1F +#define SARADC_DEBUG_BIT_SEL_S 17 +/* SARADC_SW_TONE_EN : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: 1: enable CW generator 0: disable CW generator*/ +#define SARADC_SW_TONE_EN (BIT(16)) +#define SARADC_SW_TONE_EN_M (BIT(16)) +#define SARADC_SW_TONE_EN_V 0x1 +#define SARADC_SW_TONE_EN_S 16 +/* SARADC_SW_FSTEP : R/W ;bitpos:[15:0] ;default: 16'b0 ; */ +/*description: frequency step for CW generator can be used to adjust the frequency*/ +#define SARADC_SW_FSTEP 0x0000FFFF +#define SARADC_SW_FSTEP_M ((SARADC_SW_FSTEP_V)<<(SARADC_SW_FSTEP_S)) +#define SARADC_SW_FSTEP_V 0xFFFF +#define SARADC_SW_FSTEP_S 0 + +#define SARADC_SAR_DAC_CTRL2_REG (DR_REG_SARADC_BASE + 0x009c) +/* SARADC_DAC_CW_EN2 : R/W ;bitpos:[25] ;default: 1'b1 ; */ +/*description: 1: to select CW generator as source to PDAC2_DAC[7:0] 0: to + select register reg_pdac2_dac[7:0] as source to PDAC2_DAC[7:0]*/ +#define SARADC_DAC_CW_EN2 (BIT(25)) +#define SARADC_DAC_CW_EN2_M (BIT(25)) +#define SARADC_DAC_CW_EN2_V 0x1 +#define SARADC_DAC_CW_EN2_S 25 +/* SARADC_DAC_CW_EN1 : R/W ;bitpos:[24] ;default: 1'b1 ; */ +/*description: 1: to select CW generator as source to PDAC1_DAC[7:0] 0: to + select register reg_pdac1_dac[7:0] as source to PDAC1_DAC[7:0]*/ +#define SARADC_DAC_CW_EN1 (BIT(24)) +#define SARADC_DAC_CW_EN1_M (BIT(24)) +#define SARADC_DAC_CW_EN1_V 0x1 +#define SARADC_DAC_CW_EN1_S 24 +/* SARADC_DAC_INV2 : R/W ;bitpos:[23:22] ;default: 2'b0 ; */ +/*description: 00: do not invert any bits 01: invert all bits 10: invert MSB + 11: invert all bits except MSB*/ +#define SARADC_DAC_INV2 0x00000003 +#define SARADC_DAC_INV2_M ((SARADC_DAC_INV2_V)<<(SARADC_DAC_INV2_S)) +#define SARADC_DAC_INV2_V 0x3 +#define SARADC_DAC_INV2_S 22 +/* SARADC_DAC_INV1 : R/W ;bitpos:[21:20] ;default: 2'b0 ; */ +/*description: 00: do not invert any bits 01: invert all bits 10: invert MSB + 11: invert all bits except MSB*/ +#define SARADC_DAC_INV1 0x00000003 +#define SARADC_DAC_INV1_M ((SARADC_DAC_INV1_V)<<(SARADC_DAC_INV1_S)) +#define SARADC_DAC_INV1_V 0x3 +#define SARADC_DAC_INV1_S 20 +/* SARADC_DAC_SCALE2 : R/W ;bitpos:[19:18] ;default: 2'b0 ; */ +/*description: 00: no scale 01: scale to 1/2 10: scale to 1/4 scale to 1/8*/ +#define SARADC_DAC_SCALE2 0x00000003 +#define SARADC_DAC_SCALE2_M ((SARADC_DAC_SCALE2_V)<<(SARADC_DAC_SCALE2_S)) +#define SARADC_DAC_SCALE2_V 0x3 +#define SARADC_DAC_SCALE2_S 18 +/* SARADC_DAC_SCALE1 : R/W ;bitpos:[17:16] ;default: 2'b0 ; */ +/*description: 00: no scale 01: scale to 1/2 10: scale to 1/4 scale to 1/8*/ +#define SARADC_DAC_SCALE1 0x00000003 +#define SARADC_DAC_SCALE1_M ((SARADC_DAC_SCALE1_V)<<(SARADC_DAC_SCALE1_S)) +#define SARADC_DAC_SCALE1_V 0x3 +#define SARADC_DAC_SCALE1_S 16 +/* SARADC_DAC_DC2 : R/W ;bitpos:[15:8] ;default: 8'b0 ; */ +/*description: DC offset for DAC2 CW generator*/ +#define SARADC_DAC_DC2 0x000000FF +#define SARADC_DAC_DC2_M ((SARADC_DAC_DC2_V)<<(SARADC_DAC_DC2_S)) +#define SARADC_DAC_DC2_V 0xFF +#define SARADC_DAC_DC2_S 8 +/* SARADC_DAC_DC1 : R/W ;bitpos:[7:0] ;default: 8'b0 ; */ +/*description: DC offset for DAC1 CW generator*/ +#define SARADC_DAC_DC1 0x000000FF +#define SARADC_DAC_DC1_M ((SARADC_DAC_DC1_V)<<(SARADC_DAC_DC1_S)) +#define SARADC_DAC_DC1_V 0xFF +#define SARADC_DAC_DC1_S 0 + +#define SARADC_SAR_MEAS_CTRL2_REG (DR_REG_SARADC_BASE + 0x0a0) +/* SARADC_AMP_SHORT_REF_GND_FORCE : R/W ;bitpos:[18:17] ;default: 2'b0 ; */ +/*description: */ +#define SARADC_AMP_SHORT_REF_GND_FORCE 0x00000003 +#define SARADC_AMP_SHORT_REF_GND_FORCE_M ((SARADC_AMP_SHORT_REF_GND_FORCE_V)<<(SARADC_AMP_SHORT_REF_GND_FORCE_S)) +#define SARADC_AMP_SHORT_REF_GND_FORCE_V 0x3 +#define SARADC_AMP_SHORT_REF_GND_FORCE_S 17 +/* SARADC_AMP_SHORT_REF_FORCE : R/W ;bitpos:[16:15] ;default: 2'b0 ; */ +/*description: */ +#define SARADC_AMP_SHORT_REF_FORCE 0x00000003 +#define SARADC_AMP_SHORT_REF_FORCE_M ((SARADC_AMP_SHORT_REF_FORCE_V)<<(SARADC_AMP_SHORT_REF_FORCE_S)) +#define SARADC_AMP_SHORT_REF_FORCE_V 0x3 +#define SARADC_AMP_SHORT_REF_FORCE_S 15 +/* SARADC_AMP_RST_FB_FORCE : R/W ;bitpos:[14:13] ;default: 2'b0 ; */ +/*description: */ +#define SARADC_AMP_RST_FB_FORCE 0x00000003 +#define SARADC_AMP_RST_FB_FORCE_M ((SARADC_AMP_RST_FB_FORCE_V)<<(SARADC_AMP_RST_FB_FORCE_S)) +#define SARADC_AMP_RST_FB_FORCE_V 0x3 +#define SARADC_AMP_RST_FB_FORCE_S 13 +/* SARADC_SAR2_RSTB_FORCE : R/W ;bitpos:[12:11] ;default: 2'b0 ; */ +/*description: */ +#define SARADC_SAR2_RSTB_FORCE 0x00000003 +#define SARADC_SAR2_RSTB_FORCE_M ((SARADC_SAR2_RSTB_FORCE_V)<<(SARADC_SAR2_RSTB_FORCE_S)) +#define SARADC_SAR2_RSTB_FORCE_V 0x3 +#define SARADC_SAR2_RSTB_FORCE_S 11 +/* SARADC_SAR_RSTB_FSM_IDLE : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define SARADC_SAR_RSTB_FSM_IDLE (BIT(10)) +#define SARADC_SAR_RSTB_FSM_IDLE_M (BIT(10)) +#define SARADC_SAR_RSTB_FSM_IDLE_V 0x1 +#define SARADC_SAR_RSTB_FSM_IDLE_S 10 +/* SARADC_XPD_SAR_FSM_IDLE : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define SARADC_XPD_SAR_FSM_IDLE (BIT(9)) +#define SARADC_XPD_SAR_FSM_IDLE_M (BIT(9)) +#define SARADC_XPD_SAR_FSM_IDLE_V 0x1 +#define SARADC_XPD_SAR_FSM_IDLE_S 9 +/* SARADC_AMP_SHORT_REF_GND_FSM_IDLE : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define SARADC_AMP_SHORT_REF_GND_FSM_IDLE (BIT(8)) +#define SARADC_AMP_SHORT_REF_GND_FSM_IDLE_M (BIT(8)) +#define SARADC_AMP_SHORT_REF_GND_FSM_IDLE_V 0x1 +#define SARADC_AMP_SHORT_REF_GND_FSM_IDLE_S 8 +/* SARADC_AMP_SHORT_REF_FSM_IDLE : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define SARADC_AMP_SHORT_REF_FSM_IDLE (BIT(7)) +#define SARADC_AMP_SHORT_REF_FSM_IDLE_M (BIT(7)) +#define SARADC_AMP_SHORT_REF_FSM_IDLE_V 0x1 +#define SARADC_AMP_SHORT_REF_FSM_IDLE_S 7 +/* SARADC_AMP_RST_FB_FSM_IDLE : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define SARADC_AMP_RST_FB_FSM_IDLE (BIT(6)) +#define SARADC_AMP_RST_FB_FSM_IDLE_M (BIT(6)) +#define SARADC_AMP_RST_FB_FSM_IDLE_V 0x1 +#define SARADC_AMP_RST_FB_FSM_IDLE_S 6 +/* SARADC_XPD_SAR_AMP_FSM_IDLE : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define SARADC_XPD_SAR_AMP_FSM_IDLE (BIT(5)) +#define SARADC_XPD_SAR_AMP_FSM_IDLE_M (BIT(5)) +#define SARADC_XPD_SAR_AMP_FSM_IDLE_V 0x1 +#define SARADC_XPD_SAR_AMP_FSM_IDLE_S 5 +/* SARADC_SAR1_DAC_XPD_FSM_IDLE : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define SARADC_SAR1_DAC_XPD_FSM_IDLE (BIT(4)) +#define SARADC_SAR1_DAC_XPD_FSM_IDLE_M (BIT(4)) +#define SARADC_SAR1_DAC_XPD_FSM_IDLE_V 0x1 +#define SARADC_SAR1_DAC_XPD_FSM_IDLE_S 4 +/* SARADC_SAR1_DAC_XPD_FSM : R/W ;bitpos:[3:0] ;default: 4'b0011 ; */ +/*description: */ +#define SARADC_SAR1_DAC_XPD_FSM 0x0000000F +#define SARADC_SAR1_DAC_XPD_FSM_M ((SARADC_SAR1_DAC_XPD_FSM_V)<<(SARADC_SAR1_DAC_XPD_FSM_S)) +#define SARADC_SAR1_DAC_XPD_FSM_V 0xF +#define SARADC_SAR1_DAC_XPD_FSM_S 0 + +#define SARADC_SAR_NOUSE_REG (DR_REG_SARADC_BASE + 0x00F8) +/* SARADC_SAR_NOUSE : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define SARADC_SAR_NOUSE 0xFFFFFFFF +#define SARADC_SAR_NOUSE_M ((SARADC_SAR_NOUSE_V)<<(SARADC_SAR_NOUSE_S)) +#define SARADC_SAR_NOUSE_V 0xFFFFFFFF +#define SARADC_SAR_NOUSE_S 0 + +#define SARADC_SARDATE_REG (DR_REG_SARADC_BASE + 0x00FC) +/* SARADC_SAR_DATE : R/W ;bitpos:[27:0] ;default: 28'h1605180 ; */ +/*description: */ +#define SARADC_SAR_DATE 0x0FFFFFFF +#define SARADC_SAR_DATE_M ((SARADC_SAR_DATE_V)<<(SARADC_SAR_DATE_S)) +#define SARADC_SAR_DATE_V 0xFFFFFFF +#define SARADC_SAR_DATE_S 0 + + + + +#endif /*_SOC_SARADC_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/soc.h b/tools/sdk/include/esp32/soc/soc.h new file mode 100755 index 00000000..4ffdfb06 --- /dev/null +++ b/tools/sdk/include/esp32/soc/soc.h @@ -0,0 +1,312 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _ESP32_SOC_H_ +#define _ESP32_SOC_H_ + +#include + +//Register Bits{{ +#define BIT31 0x80000000 +#define BIT30 0x40000000 +#define BIT29 0x20000000 +#define BIT28 0x10000000 +#define BIT27 0x08000000 +#define BIT26 0x04000000 +#define BIT25 0x02000000 +#define BIT24 0x01000000 +#define BIT23 0x00800000 +#define BIT22 0x00400000 +#define BIT21 0x00200000 +#define BIT20 0x00100000 +#define BIT19 0x00080000 +#define BIT18 0x00040000 +#define BIT17 0x00020000 +#define BIT16 0x00010000 +#define BIT15 0x00008000 +#define BIT14 0x00004000 +#define BIT13 0x00002000 +#define BIT12 0x00001000 +#define BIT11 0x00000800 +#define BIT10 0x00000400 +#define BIT9 0x00000200 +#define BIT8 0x00000100 +#define BIT7 0x00000080 +#define BIT6 0x00000040 +#define BIT5 0x00000020 +#define BIT4 0x00000010 +#define BIT3 0x00000008 +#define BIT2 0x00000004 +#define BIT1 0x00000002 +#define BIT0 0x00000001 +//}} + +#define PRO_CPU_NUM (0) +#define APP_CPU_NUM (1) + +//Registers Operation {{ +#define ETS_UNCACHED_ADDR(addr) (addr) +#define ETS_CACHED_ADDR(addr) (addr) + +#define BIT(nr) (1UL << (nr)) + +//write value to register +#define REG_WRITE(_r, _v) (*(volatile uint32_t *)(_r)) = (_v) + +//read value from register +#define REG_READ(_r) (*(volatile uint32_t *)(_r)) + +//get bit or get bits from register +#define REG_GET_BIT(_r, _b) (*(volatile uint32_t*)(_r) & (_b)) + +//set bit or set bits to register +#define REG_SET_BIT(_r, _b) (*(volatile uint32_t*)(_r) |= (_b)) + +//clear bit or clear bits of register +#define REG_CLR_BIT(_r, _b) (*(volatile uint32_t*)(_r) &= ~(_b)) + +//set bits of register controlled by mask +#define REG_SET_BITS(_r, _b, _m) (*(volatile uint32_t*)(_r) = (*(volatile uint32_t*)(_r) & ~(_m)) | ((_b) & (_m))) + +//get field from register, used when _f is not left shifted by _f##_S +#define REG_GET_FIELD(_r, _f) ((REG_READ(_r) >> (_f##_S)) & (_f)) + +//set field to register, used when _f is not left shifted by _f##_S +#define REG_SET_FIELD(_r, _f, _v) (REG_WRITE((_r),((REG_READ(_r) & ~((_f) << (_f##_S)))|(((_v) & (_f))<<(_f##_S))))) + +//get field value from a variable, used when _f is not left shifted by _f##_S +#define VALUE_GET_FIELD(_r, _f) (((_r) >> (_f##_S)) & (_f)) + +//get field value from a variable, used when _f is left shifted by _f##_S +#define VALUE_GET_FIELD2(_r, _f) (((_r) & (_f))>> (_f##_S)) + +//set field value to a variable, used when _f is not left shifted by _f##_S +#define VALUE_SET_FIELD(_r, _f, _v) ((_r)=(((_r) & ~((_f) << (_f##_S)))|((_v)<<(_f##_S)))) + +//set field value to a variable, used when _f is left shifted by _f##_S +#define VALUE_SET_FIELD2(_r, _f, _v) ((_r)=(((_r) & ~(_f))|((_v)<<(_f##_S)))) + +//generate a value from a field value, used when _f is not left shifted by _f##_S +#define FIELD_TO_VALUE(_f, _v) (((_v)&(_f))<<_f##_S) + +//generate a value from a field value, used when _f is left shifted by _f##_S +#define FIELD_TO_VALUE2(_f, _v) (((_v)<<_f##_S) & (_f)) + +//read value from register +#define READ_PERI_REG(addr) (*((volatile uint32_t *)ETS_UNCACHED_ADDR(addr))) + +//write value to register +#define WRITE_PERI_REG(addr, val) (*((volatile uint32_t *)ETS_UNCACHED_ADDR(addr))) = (uint32_t)(val) + +//clear bits of register controlled by mask +#define CLEAR_PERI_REG_MASK(reg, mask) WRITE_PERI_REG((reg), (READ_PERI_REG(reg)&(~(mask)))) + +//set bits of register controlled by mask +#define SET_PERI_REG_MASK(reg, mask) WRITE_PERI_REG((reg), (READ_PERI_REG(reg)|(mask))) + +//get bits of register controlled by mask +#define GET_PERI_REG_MASK(reg, mask) (READ_PERI_REG(reg) & (mask)) + +//get bits of register controlled by highest bit and lowest bit +#define GET_PERI_REG_BITS(reg, hipos,lowpos) ((READ_PERI_REG(reg)>>(lowpos))&((1<<((hipos)-(lowpos)+1))-1)) + +//set bits of register controlled by mask and shift +#define SET_PERI_REG_BITS(reg,bit_map,value,shift) (WRITE_PERI_REG((reg),(READ_PERI_REG(reg)&(~((bit_map)<<(shift))))|(((value) & bit_map)<<(shift)) )) + +//get field of register +#define GET_PERI_REG_BITS2(reg, mask,shift) ((READ_PERI_REG(reg)>>(shift))&(mask)) +//}} + +//Periheral Clock {{ +#define APB_CLK_FREQ_ROM 26*1000000 +#define CPU_CLK_FREQ_ROM APB_CLK_FREQ_ROM +#define CPU_CLK_FREQ APB_CLK_FREQ +#define APB_CLK_FREQ 80*1000000 //unit: Hz +#define UART_CLK_FREQ APB_CLK_FREQ +#define WDT_CLK_FREQ APB_CLK_FREQ +#define TIMER_CLK_FREQ (80000000>>4) //80MHz divided by 16 +#define SPI_CLK_DIV 4 +#define TICKS_PER_US_ROM 26 // CPU is 80MHz +//}} + +#define DR_REG_DPORT_BASE 0x3ff00000 +#define DR_REG_UART_BASE 0x3ff40000 +#define DR_REG_SPI1_BASE 0x3ff42000 +#define DR_REG_SPI0_BASE 0x3ff43000 +#define DR_REG_GPIO_BASE 0x3ff44000 +#define DR_REG_GPIO_SD_BASE 0x3ff44f00 +#define DR_REG_FE2_BASE 0x3ff45000 +#define DR_REG_FE_BASE 0x3ff46000 +#define DR_REG_RTCCNTL_BASE 0x3ff48000 +#define DR_REG_RTCIO_BASE 0x3ff48400 +#define DR_REG_SARADC_BASE 0x3ff48800 +#define DR_REG_IO_MUX_BASE 0x3ff49000 +#define DR_REG_RTCMEM0_BASE 0x3ff61000 +#define DR_REG_RTCMEM1_BASE 0x3ff62000 +#define DR_REG_RTCMEM2_BASE 0x3ff63000 +#define DR_REG_HINF_BASE 0x3ff4B000 +#define DR_REG_UHCI1_BASE 0x3ff4C000 +#define DR_REG_I2S_BASE 0x3ff4F000 +#define DR_REG_UART1_BASE 0x3ff50000 +#define DR_REG_BT_BASE 0x3ff51000 +#define DR_REG_I2C_EXT_BASE 0x3ff53000 +#define DR_REG_UHCI0_BASE 0x3ff54000 +#define DR_REG_SLCHOST_BASE 0x3ff55000 +#define DR_REG_RMT_BASE 0x3ff56000 +#define DR_REG_PCNT_BASE 0x3ff57000 +#define DR_REG_SLC_BASE 0x3ff58000 +#define DR_REG_LEDC_BASE 0x3ff59000 +#define DR_REG_EFUSE_BASE 0x3ff5A000 +#define DR_REG_SPI_ENCRYPT_BASE 0x3ff5B000 +#define DR_REG_PWM_BASE 0x3ff5E000 +#define DR_REG_TIMERGROUP0_BASE 0x3ff5F000 +#define DR_REG_TIMERGROUP1_BASE 0x3ff60000 +#define DR_REG_SPI2_BASE 0x3ff64000 +#define DR_REG_SPI3_BASE 0x3ff65000 +#define DR_REG_I2C1_EXT_BASE 0x3ff67000 +#define DR_REG_SDMMC_BASE 0x3ff68000 +#define DR_REG_EMAC_BASE 0x3ff69000 +#define DR_REG_PWM1_BASE 0x3ff6C000 +#define DR_REG_I2S1_BASE 0x3ff6D000 +#define DR_REG_UART2_BASE 0x3ff6E000 +#define DR_REG_PWM2_BASE 0x3ff6F000 +#define DR_REG_PWM3_BASE 0x3ff70000 +#define PERIPHS_SPI_ENCRYPT_BASEADDR DR_REG_SPI_ENCRYPT_BASE + +//Interrupt hardware source table +//This table is decided by hardware, don't touch this. +#define ETS_WIFI_MAC_INTR_SOURCE 0/**< interrupt of WiFi MAC, level*/ +#define ETS_WIFI_MAC_NMI_SOURCE 1/**< interrupt of WiFi MAC, NMI, use if MAC have bug to fix in NMI*/ +#define ETS_WIFI_BB_INTR_SOURCE 2/**< interrupt of WiFi BB, level, we can do some calibartion*/ +#define ETS_BT_MAC_INTR_SOURCE 3/**< will be cancelled*/ +#define ETS_BT_BB_INTR_SOURCE 4/**< interrupt of BT BB, level*/ +#define ETS_BT_BB_NMI_SOURCE 5/**< interrupt of BT BB, NMI, use if BB have bug to fix in NMI*/ +#define ETS_RWBT_INTR_SOURCE 6/**< interrupt of RWBT, level*/ +#define ETS_RWBLE_INTR_SOURCE 7/**< interrupt of RWBLE, level*/ +#define ETS_RWBT_NMI_SOURCE 8/**< interrupt of RWBT, NMI, use if RWBT have bug to fix in NMI*/ +#define ETS_RWBLE_NMI_SOURCE 9/**< interrupt of RWBLE, NMI, use if RWBT have bug to fix in NMI*/ +#define ETS_SLC0_INTR_SOURCE 10/**< interrupt of SLC0, level*/ +#define ETS_SLC1_INTR_SOURCE 11/**< interrupt of SLC1, level*/ +#define ETS_UHCI0_INTR_SOURCE 12/**< interrupt of UHCI0, level*/ +#define ETS_UHCI1_INTR_SOURCE 13/**< interrupt of UHCI1, level*/ +#define ETS_TG0_T0_LEVEL_INTR_SOURCE 14/**< interrupt of TIMER_GROUP0, TIMER0, level, we would like use EDGE for timer if permission*/ +#define ETS_TG0_T1_LEVEL_INTR_SOURCE 15/**< interrupt of TIMER_GROUP0, TIMER1, level, we would like use EDGE for timer if permission*/ +#define ETS_TG0_WDT_LEVEL_INTR_SOURCE 16/**< interrupt of TIMER_GROUP0, WATCHDOG, level*/ +#define ETS_TG0_LACT_LEVEL_INTR_SOURCE 17/**< interrupt of TIMER_GROUP0, LACT, level*/ +#define ETS_TG1_T0_LEVEL_INTR_SOURCE 18/**< interrupt of TIMER_GROUP1, TIMER0, level, we would like use EDGE for timer if permission*/ +#define ETS_TG1_T1_LEVEL_INTR_SOURCE 19/**< interrupt of TIMER_GROUP1, TIMER1, level, we would like use EDGE for timer if permission*/ +#define ETS_TG1_WDT_LEVEL_INTR_SOURCE 20/**< interrupt of TIMER_GROUP1, WATCHDOG, level*/ +#define ETS_TG1_LACT_LEVEL_INTR_SOURCE 21/**< interrupt of TIMER_GROUP1, LACT, level*/ +#define ETS_GPIO_INTR_SOURCE 22/**< interrupt of GPIO, level*/ +#define ETS_GPIO_NMI_SOURCE 23/**< interrupt of GPIO, NMI*/ +#define ETS_FROM_CPU_INTR0_SOURCE 24/**< interrupt0 generated from a CPU, level*/ +#define ETS_FROM_CPU_INTR1_SOURCE 25/**< interrupt1 generated from a CPU, level*/ +#define ETS_FROM_CPU_INTR2_SOURCE 26/**< interrupt2 generated from a CPU, level*/ +#define ETS_FROM_CPU_INTR3_SOURCE 27/**< interrupt3 generated from a CPU, level*/ +#define ETS_SPI0_INTR_SOURCE 28/**< interrupt of SPI0, level, SPI0 is for Cache Access, do not use this*/ +#define ETS_SPI1_INTR_SOURCE 29/**< interrupt of SPI1, level, SPI1 is for flash read/write, do not use this*/ +#define ETS_SPI2_INTR_SOURCE 30/**< interrupt of SPI2, level*/ +#define ETS_SPI3_INTR_SOURCE 31/**< interrupt of SPI3, level*/ +#define ETS_I2S0_INTR_SOURCE 32/**< interrupt of I2S0, level*/ +#define ETS_I2S1_INTR_SOURCE 33/**< interrupt of I2S1, level*/ +#define ETS_UART0_INTR_SOURCE 34/**< interrupt of UART0, level*/ +#define ETS_UART1_INTR_SOURCE 35/**< interrupt of UART1, level*/ +#define ETS_UART2_INTR_SOURCE 36/**< interrupt of UART2, level*/ +#define ETS_SDIO_HOST_INTR_SOURCE 37/**< interrupt of SD/SDIO/MMC HOST, level*/ +#define ETS_ETH_MAC_INTR_SOURCE 38/**< interrupt of ethernet mac, level*/ +#define ETS_PWM0_INTR_SOURCE 39/**< interrupt of PWM0, level, Reserved*/ +#define ETS_PWM1_INTR_SOURCE 40/**< interrupt of PWM1, level, Reserved*/ +#define ETS_PWM2_INTR_SOURCE 41/**< interrupt of PWM2, level*/ +#define ETS_PWM3_INTR_SOURCE 42/**< interruot of PWM3, level*/ +#define ETS_LEDC_INTR_SOURCE 43/**< interrupt of LED PWM, level*/ +#define ETS_EFUSE_INTR_SOURCE 44/**< interrupt of efuse, level, not likely to use*/ +#define ETS_CAN_INTR_SOURCE 45/**< interrupt of can, level*/ +#define ETS_RTC_CORE_INTR_SOURCE 46/**< interrupt of rtc core, level, include rtc watchdog*/ +#define ETS_RMT_INTR_SOURCE 47/**< interrupt of remote controller, level*/ +#define ETS_PCNT_INTR_SOURCE 48/**< interrupt of pluse count, level*/ +#define ETS_I2C_EXT0_INTR_SOURCE 49/**< interrupt of I2C controller1, level*/ +#define ETS_I2C_EXT1_INTR_SOURCE 50/**< interrupt of I2C controller0, level*/ +#define ETS_RSA_INTR_SOURCE 51/**< interrupt of RSA accelerator, level*/ +#define ETS_SPI1_DMA_INTR_SOURCE 52/**< interrupt of SPI1 DMA, SPI1 is for flash read/write, do not use this*/ +#define ETS_SPI2_DMA_INTR_SOURCE 53/**< interrupt of SPI2 DMA, level*/ +#define ETS_SPI3_DMA_INTR_SOURCE 54/**< interrupt of SPI3 DMA, level*/ +#define ETS_WDT_INTR_SOURCE 55/**< will be cancelled*/ +#define ETS_TIMER1_INTR_SOURCE 56/**< will be cancelled*/ +#define ETS_TIMER2_INTR_SOURCE 57/**< will be cancelled*/ +#define ETS_TG0_T0_EDGE_INTR_SOURCE 58/**< interrupt of TIMER_GROUP0, TIMER0, EDGE*/ +#define ETS_TG0_T1_EDGE_INTR_SOURCE 59/**< interrupt of TIMER_GROUP0, TIMER1, EDGE*/ +#define ETS_TG0_WDT_EDGE_INTR_SOURCE 60/**< interrupt of TIMER_GROUP0, WATCH DOG, EDGE*/ +#define ETS_TG0_LACT_EDGE_INTR_SOURCE 61/**< interrupt of TIMER_GROUP0, LACT, EDGE*/ +#define ETS_TG1_T0_EDGE_INTR_SOURCE 62/**< interrupt of TIMER_GROUP1, TIMER0, EDGE*/ +#define ETS_TG1_T1_EDGE_INTR_SOURCE 63/**< interrupt of TIMER_GROUP1, TIMER1, EDGE*/ +#define ETS_TG1_WDT_EDGE_INTR_SOURCE 64/**< interrupt of TIMER_GROUP1, WATCHDOG, EDGE*/ +#define ETS_TG1_LACT_EDGE_INTR_SOURCE 65/**< interrupt of TIMER_GROUP0, LACT, EDGE*/ +#define ETS_MMU_IA_INTR_SOURCE 66/**< interrupt of MMU Invalid Access, LEVEL*/ +#define ETS_MPU_IA_INTR_SOURCE 67/**< interrupt of MPU Invalid Access, LEVEL*/ +#define ETS_CACHE_IA_INTR_SOURCE 68/**< interrupt of Cache Invalied Access, LEVEL*/ + +//interrupt cpu using table, Please see the core-isa.h +/************************************************************************************************************* + * Intr num Level Type PRO CPU usage APP CPU uasge + * 0 1 extern level WMAC Reserved + * 1 1 extern level BT/BLE Host VHCI Reserved + * 2 1 extern level FROM_CPU FROM_CPU + * 3 1 extern level TG0_WDT Reserved + * 4 1 extern level WBB + * 5 1 extern level BT Controller + * 6 1 timer FreeRTOS Tick(L1) FreeRTOS Tick(L1) + * 7 1 software Reserved Reserved + * 8 1 extern level BLE Controller + * 9 1 extern level + * 10 1 extern edge Internal Timer + * 11 3 profiling + * 12 1 extern level + * 13 1 extern level + * 14 7 nmi Reserved Reserved + * 15 3 timer FreeRTOS Tick(L3) FreeRTOS Tick(L3) + * 16 5 timer + * 17 1 extern level + * 18 1 extern level + * 19 2 extern level + * 20 2 extern level + * 21 2 extern level + * 22 3 extern edge + * 23 3 extern level + * 24 4 extern level + * 25 4 extern level Reserved Reserved + * 26 5 extern level Reserved Reserved + * 27 3 extern level Reserved Reserved + * 28 4 extern edge + * 29 3 software Reserved Reserved + * 30 4 extern edge Reserved Reserved + * 31 5 extern level Reserved Reserved + ************************************************************************************************************* + */ + +//CPU0 Interrupt number reserved, not touch this. +#define ETS_WMAC_INUM 0 +#define ETS_BT_HOST_INUM 1 +#define ETS_FROM_CPU_INUM 2 +#define ETS_T0_WDT_INUM 3 +#define ETS_WBB_INUM 4 +#define ETS_TG0_T1_INUM 10 /**< use edge interrupt*/ + +//CPU0 Intrrupt number used in ROM, should be cancelled in SDK +#define ETS_SLC_INUM 1 +#define ETS_UART0_INUM 5 +#define ETS_UART1_INUM 5 +//Other interrupt number should be managed by the user + + +#endif /* _ESP32_SOC_H_ */ diff --git a/tools/sdk/include/esp32/soc/spi_reg.h b/tools/sdk/include/esp32/soc/spi_reg.h new file mode 100644 index 00000000..34f2f24e --- /dev/null +++ b/tools/sdk/include/esp32/soc/spi_reg.h @@ -0,0 +1,1717 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef __SPI_REG_H__ +#define __SPI_REG_H__ + + +#include "soc.h" +#define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i)>1) ? (((i)* 0x1000) + 0x20000) : (((~(i)) & 1)* 0x1000 ))) + +#define SPI_CMD_REG(i) (REG_SPI_BASE(i) + 0x0) +/* SPI_FLASH_READ : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: Read flash enable. Read flash operation will be triggered when + the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ +#define SPI_FLASH_READ (BIT(31)) +#define SPI_FLASH_READ_M (BIT(31)) +#define SPI_FLASH_READ_V 0x1 +#define SPI_FLASH_READ_S 31 +/* SPI_FLASH_WREN : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: Write flash enable. Write enable command will be sent when the + bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ +#define SPI_FLASH_WREN (BIT(30)) +#define SPI_FLASH_WREN_M (BIT(30)) +#define SPI_FLASH_WREN_V 0x1 +#define SPI_FLASH_WREN_S 30 +/* SPI_FLASH_WRDI : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: Write flash disable. Write disable command will be sent when + the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ +#define SPI_FLASH_WRDI (BIT(29)) +#define SPI_FLASH_WRDI_M (BIT(29)) +#define SPI_FLASH_WRDI_V 0x1 +#define SPI_FLASH_WRDI_S 29 +/* SPI_FLASH_RDID : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: Read JEDEC ID . Read ID command will be sent when the bit is + set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ +#define SPI_FLASH_RDID (BIT(28)) +#define SPI_FLASH_RDID_M (BIT(28)) +#define SPI_FLASH_RDID_V 0x1 +#define SPI_FLASH_RDID_S 28 +/* SPI_FLASH_RDSR : R/W ;bitpos:[27] ;default: 1'b0 ; */ +/*description: Read status register-1. Read status operation will be triggered + when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ +#define SPI_FLASH_RDSR (BIT(27)) +#define SPI_FLASH_RDSR_M (BIT(27)) +#define SPI_FLASH_RDSR_V 0x1 +#define SPI_FLASH_RDSR_S 27 +/* SPI_FLASH_WRSR : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: Write status register enable. Write status operation will + be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ +#define SPI_FLASH_WRSR (BIT(26)) +#define SPI_FLASH_WRSR_M (BIT(26)) +#define SPI_FLASH_WRSR_V 0x1 +#define SPI_FLASH_WRSR_S 26 +/* SPI_FLASH_PP : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: Page program enable(1 byte ~256 bytes data to be programmed). + Page program operation will be triggered when the bit is set. The bit will be cleared once the operation done .1: enable 0: disable.*/ +#define SPI_FLASH_PP (BIT(25)) +#define SPI_FLASH_PP_M (BIT(25)) +#define SPI_FLASH_PP_V 0x1 +#define SPI_FLASH_PP_S 25 +/* SPI_FLASH_SE : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: Sector erase enable(4KB). Sector erase operation will be triggered + when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ +#define SPI_FLASH_SE (BIT(24)) +#define SPI_FLASH_SE_M (BIT(24)) +#define SPI_FLASH_SE_V 0x1 +#define SPI_FLASH_SE_S 24 +/* SPI_FLASH_BE : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: Block erase enable(32KB) . Block erase operation will be triggered + when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ +#define SPI_FLASH_BE (BIT(23)) +#define SPI_FLASH_BE_M (BIT(23)) +#define SPI_FLASH_BE_V 0x1 +#define SPI_FLASH_BE_S 23 +/* SPI_FLASH_CE : R/W ;bitpos:[22] ;default: 1'b0 ; */ +/*description: Chip erase enable. Chip erase operation will be triggered when + the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ +#define SPI_FLASH_CE (BIT(22)) +#define SPI_FLASH_CE_M (BIT(22)) +#define SPI_FLASH_CE_V 0x1 +#define SPI_FLASH_CE_S 22 +/* SPI_FLASH_DP : R/W ;bitpos:[21] ;default: 1'b0 ; */ +/*description: Drive Flash into power down. An operation will be triggered + when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ +#define SPI_FLASH_DP (BIT(21)) +#define SPI_FLASH_DP_M (BIT(21)) +#define SPI_FLASH_DP_V 0x1 +#define SPI_FLASH_DP_S 21 +/* SPI_FLASH_RES : R/W ;bitpos:[20] ;default: 1'b0 ; */ +/*description: This bit combined with reg_resandres bit releases Flash from + the power-down state or high performance mode and obtains the devices ID. The bit will be cleared once the operation done.1: enable 0: disable.*/ +#define SPI_FLASH_RES (BIT(20)) +#define SPI_FLASH_RES_M (BIT(20)) +#define SPI_FLASH_RES_V 0x1 +#define SPI_FLASH_RES_S 20 +/* SPI_FLASH_HPM : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: Drive Flash into high performance mode. The bit will be cleared + once the operation done.1: enable 0: disable.*/ +#define SPI_FLASH_HPM (BIT(19)) +#define SPI_FLASH_HPM_M (BIT(19)) +#define SPI_FLASH_HPM_V 0x1 +#define SPI_FLASH_HPM_S 19 +/* SPI_USR : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: User define command enable. An operation will be triggered when + the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ +#define SPI_USR (BIT(18)) +#define SPI_USR_M (BIT(18)) +#define SPI_USR_V 0x1 +#define SPI_USR_S 18 +/* SPI_FLASH_PES : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: program erase suspend bit program erase suspend operation will + be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ +#define SPI_FLASH_PES (BIT(17)) +#define SPI_FLASH_PES_M (BIT(17)) +#define SPI_FLASH_PES_V 0x1 +#define SPI_FLASH_PES_S 17 +/* SPI_FLASH_PER : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: program erase resume bit program erase suspend operation will + be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ +#define SPI_FLASH_PER (BIT(16)) +#define SPI_FLASH_PER_M (BIT(16)) +#define SPI_FLASH_PER_V 0x1 +#define SPI_FLASH_PER_S 16 + +#define SPI_ADDR_REG(i) (REG_SPI_BASE(i) + 0x4) +/* SPI_USR_ADDR_VALUE : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: [31:8]:address to slave [7:0]:Reserved.*/ +#define SPI_USR_ADDR_VALUE 0xFFFFFFFF +#define SPI_USR_ADDR_VALUE_M ((SPI_USR_ADDR_VALUE_V)<<(SPI_USR_ADDR_VALUE_S)) +#define SPI_USR_ADDR_VALUE_V 0xFFFFFFFF +#define SPI_USR_ADDR_VALUE_S 0 + +#define SPI_CTRL_REG(i) (REG_SPI_BASE(i) + 0x8) +/* SPI_WR_BIT_ORDER : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: In command address write-data (MOSI) phases 1: LSB firs 0: MSB first*/ +#define SPI_WR_BIT_ORDER (BIT(26)) +#define SPI_WR_BIT_ORDER_M (BIT(26)) +#define SPI_WR_BIT_ORDER_V 0x1 +#define SPI_WR_BIT_ORDER_S 26 +/* SPI_RD_BIT_ORDER : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: In read-data (MISO) phase 1: LSB first 0: MSB first*/ +#define SPI_RD_BIT_ORDER (BIT(25)) +#define SPI_RD_BIT_ORDER_M (BIT(25)) +#define SPI_RD_BIT_ORDER_V 0x1 +#define SPI_RD_BIT_ORDER_S 25 +/* SPI_FREAD_QIO : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: In the read operations address phase and read-data phase apply + 4 signals. 1: enable 0: disable.*/ +#define SPI_FREAD_QIO (BIT(24)) +#define SPI_FREAD_QIO_M (BIT(24)) +#define SPI_FREAD_QIO_V 0x1 +#define SPI_FREAD_QIO_S 24 +/* SPI_FREAD_DIO : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: In the read operations address phase and read-data phase apply + 2 signals. 1: enable 0: disable.*/ +#define SPI_FREAD_DIO (BIT(23)) +#define SPI_FREAD_DIO_M (BIT(23)) +#define SPI_FREAD_DIO_V 0x1 +#define SPI_FREAD_DIO_S 23 +/* SPI_WRSR_2B : R/W ;bitpos:[22] ;default: 1'b0 ; */ +/*description: two bytes data will be written to status register when it is + set. 1: enable 0: disable.*/ +#define SPI_WRSR_2B (BIT(22)) +#define SPI_WRSR_2B_M (BIT(22)) +#define SPI_WRSR_2B_V 0x1 +#define SPI_WRSR_2B_S 22 +/* SPI_WP_REG : R/W ;bitpos:[21] ;default: 1'b1 ; */ +/*description: Write protect signal output when SPI is idle. 1: output high 0: output low.*/ +#define SPI_WP_REG (BIT(21)) +#define SPI_WP_REG_M (BIT(21)) +#define SPI_WP_REG_V 0x1 +#define SPI_WP_REG_S 21 +/* SPI_FREAD_QUAD : R/W ;bitpos:[20] ;default: 1'b0 ; */ +/*description: In the read operations read-data phase apply 4 signals. 1: enable 0: disable.*/ +#define SPI_FREAD_QUAD (BIT(20)) +#define SPI_FREAD_QUAD_M (BIT(20)) +#define SPI_FREAD_QUAD_V 0x1 +#define SPI_FREAD_QUAD_S 20 +/* SPI_RESANDRES : R/W ;bitpos:[15] ;default: 1'b1 ; */ +/*description: The Device ID is read out to SPI_RD_STATUS register, this bit + combine with spi_flash_res bit. 1: enable 0: disable.*/ +#define SPI_RESANDRES (BIT(15)) +#define SPI_RESANDRES_M (BIT(15)) +#define SPI_RESANDRES_V 0x1 +#define SPI_RESANDRES_S 15 +/* SPI_FREAD_DUAL : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: In the read operations read-data phase apply 2 signals. 1: enable 0: disable.*/ +#define SPI_FREAD_DUAL (BIT(14)) +#define SPI_FREAD_DUAL_M (BIT(14)) +#define SPI_FREAD_DUAL_V 0x1 +#define SPI_FREAD_DUAL_S 14 +/* SPI_FASTRD_MODE : R/W ;bitpos:[13] ;default: 1'b1 ; */ +/*description: This bit enable the bits: spi_fread_qio spi_fread_dio spi_fread_qout + and spi_fread_dout. 1: enable 0: disable.*/ +#define SPI_FASTRD_MODE (BIT(13)) +#define SPI_FASTRD_MODE_M (BIT(13)) +#define SPI_FASTRD_MODE_V 0x1 +#define SPI_FASTRD_MODE_S 13 +/* SPI_WAIT_FLASH_IDLE_EN : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: wait flash idle when program flash or erase flash. 1: enable 0: disable.*/ +#define SPI_WAIT_FLASH_IDLE_EN (BIT(12)) +#define SPI_WAIT_FLASH_IDLE_EN_M (BIT(12)) +#define SPI_WAIT_FLASH_IDLE_EN_V 0x1 +#define SPI_WAIT_FLASH_IDLE_EN_S 12 +/* SPI_TX_CRC_EN : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: For SPI1 enable crc32 when writing encrypted data to flash. + 1: enable 0:disable*/ +#define SPI_TX_CRC_EN (BIT(11)) +#define SPI_TX_CRC_EN_M (BIT(11)) +#define SPI_TX_CRC_EN_V 0x1 +#define SPI_TX_CRC_EN_S 11 +/* SPI_FCS_CRC_EN : R/W ;bitpos:[10] ;default: 1'b1 ; */ +/*description: For SPI1 initialize crc32 module before writing encrypted data + to flash. Active low.*/ +#define SPI_FCS_CRC_EN (BIT(10)) +#define SPI_FCS_CRC_EN_M (BIT(10)) +#define SPI_FCS_CRC_EN_V 0x1 +#define SPI_FCS_CRC_EN_S 10 + +#define SPI_CTRL1_REG(i) (REG_SPI_BASE(i) + 0xC) +/* SPI_CS_HOLD_DELAY : R/W ;bitpos:[31:28] ;default: 4'h5 ; */ +/*description: SPI cs signal is delayed by spi clock cycles*/ +#define SPI_CS_HOLD_DELAY 0x0000000F +#define SPI_CS_HOLD_DELAY_M ((SPI_CS_HOLD_DELAY_V)<<(SPI_CS_HOLD_DELAY_S)) +#define SPI_CS_HOLD_DELAY_V 0xF +#define SPI_CS_HOLD_DELAY_S 28 +/* SPI_CS_HOLD_DELAY_RES : R/W ;bitpos:[27:16] ;default: 12'hfff ; */ +/*description: Delay cycles of resume Flash when resume Flash is enable by spi clock.*/ +#define SPI_CS_HOLD_DELAY_RES 0x00000FFF +#define SPI_CS_HOLD_DELAY_RES_M ((SPI_CS_HOLD_DELAY_RES_V)<<(SPI_CS_HOLD_DELAY_RES_S)) +#define SPI_CS_HOLD_DELAY_RES_V 0xFFF +#define SPI_CS_HOLD_DELAY_RES_S 16 + +#define SPI_RD_STATUS_REG(i) (REG_SPI_BASE(i) + 0x10) +/* SPI_STATUS_EXT : R/W ;bitpos:[31:24] ;default: 8'h00 ; */ +/*description: In the slave mode,it is the status for master to read out.*/ +#define SPI_STATUS_EXT 0x000000FF +#define SPI_STATUS_EXT_M ((SPI_STATUS_EXT_V)<<(SPI_STATUS_EXT_S)) +#define SPI_STATUS_EXT_V 0xFF +#define SPI_STATUS_EXT_S 24 +/* SPI_WB_MODE : R/W ;bitpos:[23:16] ;default: 8'h00 ; */ +/*description: Mode bits in the flash fast read mode, it is combined with spi_fastrd_mode bit.*/ +#define SPI_WB_MODE 0x000000FF +#define SPI_WB_MODE_M ((SPI_WB_MODE_V)<<(SPI_WB_MODE_S)) +#define SPI_WB_MODE_V 0xFF +#define SPI_WB_MODE_S 16 +/* SPI_STATUS : R/W ;bitpos:[15:0] ;default: 16'b0 ; */ +/*description: In the slave mode, it is the status for master to read out.*/ +#define SPI_STATUS 0x0000FFFF +#define SPI_STATUS_M ((SPI_STATUS_V)<<(SPI_STATUS_S)) +#define SPI_STATUS_V 0xFFFF +#define SPI_STATUS_S 0 + +#define SPI_CTRL2_REG(i) (REG_SPI_BASE(i) + 0x14) +/* SPI_CS_DELAY_NUM : R/W ;bitpos:[31:28] ;default: 4'h0 ; */ +/*description: spi_cs signal is delayed by system clock cycles*/ +#define SPI_CS_DELAY_NUM 0x0000000F +#define SPI_CS_DELAY_NUM_M ((SPI_CS_DELAY_NUM_V)<<(SPI_CS_DELAY_NUM_S)) +#define SPI_CS_DELAY_NUM_V 0xF +#define SPI_CS_DELAY_NUM_S 28 +/* SPI_CS_DELAY_MODE : R/W ;bitpos:[27:26] ;default: 2'h0 ; */ +/*description: spi_cs signal is delayed by spi_clk . 0: zero 1: if spi_ck_out_edge + or spi_ck_i_edge is set 1 delayed by half cycle else delayed by one cycle 2: if spi_ck_out_edge or spi_ck_i_edge is set 1 delayed by one cycle else delayed by half cycle 3: delayed one cycle*/ +#define SPI_CS_DELAY_MODE 0x00000003 +#define SPI_CS_DELAY_MODE_M ((SPI_CS_DELAY_MODE_V)<<(SPI_CS_DELAY_MODE_S)) +#define SPI_CS_DELAY_MODE_V 0x3 +#define SPI_CS_DELAY_MODE_S 26 +/* SPI_MOSI_DELAY_NUM : R/W ;bitpos:[25:23] ;default: 3'h0 ; */ +/*description: MOSI signals are delayed by system clock cycles*/ +#define SPI_MOSI_DELAY_NUM 0x00000007 +#define SPI_MOSI_DELAY_NUM_M ((SPI_MOSI_DELAY_NUM_V)<<(SPI_MOSI_DELAY_NUM_S)) +#define SPI_MOSI_DELAY_NUM_V 0x7 +#define SPI_MOSI_DELAY_NUM_S 23 +/* SPI_MOSI_DELAY_MODE : R/W ;bitpos:[22:21] ;default: 2'h0 ; */ +/*description: MOSI signals are delayed by spi_clk. 0: zero 1: if spi_ck_out_edge + or spi_ck_i_edge is set 1 delayed by half cycle else delayed by one cycle 2: if spi_ck_out_edge or spi_ck_i_edge is set 1 delayed by one cycle else delayed by half cycle 3: delayed one cycle*/ +#define SPI_MOSI_DELAY_MODE 0x00000003 +#define SPI_MOSI_DELAY_MODE_M ((SPI_MOSI_DELAY_MODE_V)<<(SPI_MOSI_DELAY_MODE_S)) +#define SPI_MOSI_DELAY_MODE_V 0x3 +#define SPI_MOSI_DELAY_MODE_S 21 +/* SPI_MISO_DELAY_NUM : R/W ;bitpos:[20:18] ;default: 3'h0 ; */ +/*description: MISO signals are delayed by system clock cycles*/ +#define SPI_MISO_DELAY_NUM 0x00000007 +#define SPI_MISO_DELAY_NUM_M ((SPI_MISO_DELAY_NUM_V)<<(SPI_MISO_DELAY_NUM_S)) +#define SPI_MISO_DELAY_NUM_V 0x7 +#define SPI_MISO_DELAY_NUM_S 18 +/* SPI_MISO_DELAY_MODE : R/W ;bitpos:[17:16] ;default: 2'h0 ; */ +/*description: MISO signals are delayed by spi_clk. 0: zero 1: if spi_ck_out_edge + or spi_ck_i_edge is set 1 delayed by half cycle else delayed by one cycle 2: if spi_ck_out_edge or spi_ck_i_edge is set 1 delayed by one cycle else delayed by half cycle 3: delayed one cycle*/ +#define SPI_MISO_DELAY_MODE 0x00000003 +#define SPI_MISO_DELAY_MODE_M ((SPI_MISO_DELAY_MODE_V)<<(SPI_MISO_DELAY_MODE_S)) +#define SPI_MISO_DELAY_MODE_V 0x3 +#define SPI_MISO_DELAY_MODE_S 16 +/* SPI_CK_OUT_HIGH_MODE : R/W ;bitpos:[15:12] ;default: 4'h0 ; */ +/*description: modify spi clock duty ratio when the value is lager than 8, + the bits are combined with spi_clkcnt_N bits and spi_clkcnt_H bits.*/ +#define SPI_CK_OUT_HIGH_MODE 0x0000000F +#define SPI_CK_OUT_HIGH_MODE_M ((SPI_CK_OUT_HIGH_MODE_V)<<(SPI_CK_OUT_HIGH_MODE_S)) +#define SPI_CK_OUT_HIGH_MODE_V 0xF +#define SPI_CK_OUT_HIGH_MODE_S 12 +/* SPI_CK_OUT_LOW_MODE : R/W ;bitpos:[11:8] ;default: 4'h0 ; */ +/*description: modify spi clock duty ratio when the value is lager than 8, + the bits are combined with spi_clkcnt_N bits and spi_clkcnt_L bits.*/ +#define SPI_CK_OUT_LOW_MODE 0x0000000F +#define SPI_CK_OUT_LOW_MODE_M ((SPI_CK_OUT_LOW_MODE_V)<<(SPI_CK_OUT_LOW_MODE_S)) +#define SPI_CK_OUT_LOW_MODE_V 0xF +#define SPI_CK_OUT_LOW_MODE_S 8 +/* SPI_HOLD_TIME : R/W ;bitpos:[7:4] ;default: 4'h1 ; */ +/*description: delay cycles of cs pin by spi clock, this bits combined with spi_cs_hold bit.*/ +#define SPI_HOLD_TIME 0x0000000F +#define SPI_HOLD_TIME_M ((SPI_HOLD_TIME_V)<<(SPI_HOLD_TIME_S)) +#define SPI_HOLD_TIME_V 0xF +#define SPI_HOLD_TIME_S 4 +/* SPI_SETUP_TIME : R/W ;bitpos:[3:0] ;default: 4'h1 ; */ +/*description: (cycles-1) of ¡°prepare¡± phase by spi clock, this bits combined + with spi_cs_setup bit.*/ +#define SPI_SETUP_TIME 0x0000000F +#define SPI_SETUP_TIME_M ((SPI_SETUP_TIME_V)<<(SPI_SETUP_TIME_S)) +#define SPI_SETUP_TIME_V 0xF +#define SPI_SETUP_TIME_S 0 + +#define SPI_CLOCK_REG(i) (REG_SPI_BASE(i) + 0x18) +/* SPI_CLK_EQU_SYSCLK : R/W ;bitpos:[31] ;default: 1'b1 ; */ +/*description: In the master mode 1: spi_clk is eqaul to system 0: spi_clk is + divided from system clock.*/ +#define SPI_CLK_EQU_SYSCLK (BIT(31)) +#define SPI_CLK_EQU_SYSCLK_M (BIT(31)) +#define SPI_CLK_EQU_SYSCLK_V 0x1 +#define SPI_CLK_EQU_SYSCLK_S 31 +/* SPI_CLKDIV_PRE : R/W ;bitpos:[30:18] ;default: 13'b0 ; */ +/*description: In the master mode it is pre-divider of spi_clk.*/ +#define SPI_CLKDIV_PRE 0x00001FFF +#define SPI_CLKDIV_PRE_M ((SPI_CLKDIV_PRE_V)<<(SPI_CLKDIV_PRE_S)) +#define SPI_CLKDIV_PRE_V 0x1FFF +#define SPI_CLKDIV_PRE_S 18 +/* SPI_CLKCNT_N : R/W ;bitpos:[17:12] ;default: 6'h3 ; */ +/*description: In the master mode it is the divider of spi_clk. So spi_clk frequency + is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1)*/ +#define SPI_CLKCNT_N 0x0000003F +#define SPI_CLKCNT_N_M ((SPI_CLKCNT_N_V)<<(SPI_CLKCNT_N_S)) +#define SPI_CLKCNT_N_V 0x3F +#define SPI_CLKCNT_N_S 12 +/* SPI_CLKCNT_H : R/W ;bitpos:[11:6] ;default: 6'h1 ; */ +/*description: In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In + the slave mode it must be 0.*/ +#define SPI_CLKCNT_H 0x0000003F +#define SPI_CLKCNT_H_M ((SPI_CLKCNT_H_V)<<(SPI_CLKCNT_H_S)) +#define SPI_CLKCNT_H_V 0x3F +#define SPI_CLKCNT_H_S 6 +/* SPI_CLKCNT_L : R/W ;bitpos:[5:0] ;default: 6'h3 ; */ +/*description: In the master mode it must be equal to spi_clkcnt_N. In the slave + mode it must be 0.*/ +#define SPI_CLKCNT_L 0x0000003F +#define SPI_CLKCNT_L_M ((SPI_CLKCNT_L_V)<<(SPI_CLKCNT_L_S)) +#define SPI_CLKCNT_L_V 0x3F +#define SPI_CLKCNT_L_S 0 + +#define SPI_USER_REG(i) (REG_SPI_BASE(i) + 0x1C) +/* SPI_USR_COMMAND : R/W ;bitpos:[31] ;default: 1'b1 ; */ +/*description: This bit enable the command phase of an operation.*/ +#define SPI_USR_COMMAND (BIT(31)) +#define SPI_USR_COMMAND_M (BIT(31)) +#define SPI_USR_COMMAND_V 0x1 +#define SPI_USR_COMMAND_S 31 +/* SPI_USR_ADDR : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: This bit enable the address phase of an operation.*/ +#define SPI_USR_ADDR (BIT(30)) +#define SPI_USR_ADDR_M (BIT(30)) +#define SPI_USR_ADDR_V 0x1 +#define SPI_USR_ADDR_S 30 +/* SPI_USR_DUMMY : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: This bit enable the dummy phase of an operation.*/ +#define SPI_USR_DUMMY (BIT(29)) +#define SPI_USR_DUMMY_M (BIT(29)) +#define SPI_USR_DUMMY_V 0x1 +#define SPI_USR_DUMMY_S 29 +/* SPI_USR_MISO : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: This bit enable the read-data phase of an operation.*/ +#define SPI_USR_MISO (BIT(28)) +#define SPI_USR_MISO_M (BIT(28)) +#define SPI_USR_MISO_V 0x1 +#define SPI_USR_MISO_S 28 +/* SPI_USR_MOSI : R/W ;bitpos:[27] ;default: 1'b0 ; */ +/*description: This bit enable the write-data phase of an operation.*/ +#define SPI_USR_MOSI (BIT(27)) +#define SPI_USR_MOSI_M (BIT(27)) +#define SPI_USR_MOSI_V 0x1 +#define SPI_USR_MOSI_S 27 +/* SPI_USR_DUMMY_IDLE : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: spi clock is disable in dummy phase when the bit is enable.*/ +#define SPI_USR_DUMMY_IDLE (BIT(26)) +#define SPI_USR_DUMMY_IDLE_M (BIT(26)) +#define SPI_USR_DUMMY_IDLE_V 0x1 +#define SPI_USR_DUMMY_IDLE_S 26 +/* SPI_USR_MOSI_HIGHPART : R/W ;bitpos:[25] ;default: 1'b0 ; */ +/*description: write-data phase only access to high-part of the buffer spi_w8~spi_w15. + 1: enable 0: disable.*/ +#define SPI_USR_MOSI_HIGHPART (BIT(25)) +#define SPI_USR_MOSI_HIGHPART_M (BIT(25)) +#define SPI_USR_MOSI_HIGHPART_V 0x1 +#define SPI_USR_MOSI_HIGHPART_S 25 +/* SPI_USR_MISO_HIGHPART : R/W ;bitpos:[24] ;default: 1'b0 ; */ +/*description: read-data phase only access to high-part of the buffer spi_w8~spi_w15. + 1: enable 0: disable.*/ +#define SPI_USR_MISO_HIGHPART (BIT(24)) +#define SPI_USR_MISO_HIGHPART_M (BIT(24)) +#define SPI_USR_MISO_HIGHPART_V 0x1 +#define SPI_USR_MISO_HIGHPART_S 24 +/* SPI_USR_PREP_HOLD : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: spi is hold at prepare state the bit combined with spi_usr_hold_pol bit.*/ +#define SPI_USR_PREP_HOLD (BIT(23)) +#define SPI_USR_PREP_HOLD_M (BIT(23)) +#define SPI_USR_PREP_HOLD_V 0x1 +#define SPI_USR_PREP_HOLD_S 23 +/* SPI_USR_CMD_HOLD : R/W ;bitpos:[22] ;default: 1'b0 ; */ +/*description: spi is hold at command state the bit combined with spi_usr_hold_pol bit.*/ +#define SPI_USR_CMD_HOLD (BIT(22)) +#define SPI_USR_CMD_HOLD_M (BIT(22)) +#define SPI_USR_CMD_HOLD_V 0x1 +#define SPI_USR_CMD_HOLD_S 22 +/* SPI_USR_ADDR_HOLD : R/W ;bitpos:[21] ;default: 1'b0 ; */ +/*description: spi is hold at address state the bit combined with spi_usr_hold_pol bit.*/ +#define SPI_USR_ADDR_HOLD (BIT(21)) +#define SPI_USR_ADDR_HOLD_M (BIT(21)) +#define SPI_USR_ADDR_HOLD_V 0x1 +#define SPI_USR_ADDR_HOLD_S 21 +/* SPI_USR_DUMMY_HOLD : R/W ;bitpos:[20] ;default: 1'b0 ; */ +/*description: spi is hold at dummy state the bit combined with spi_usr_hold_pol bit.*/ +#define SPI_USR_DUMMY_HOLD (BIT(20)) +#define SPI_USR_DUMMY_HOLD_M (BIT(20)) +#define SPI_USR_DUMMY_HOLD_V 0x1 +#define SPI_USR_DUMMY_HOLD_S 20 +/* SPI_USR_DIN_HOLD : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: spi is hold at data in state the bit combined with spi_usr_hold_pol bit.*/ +#define SPI_USR_DIN_HOLD (BIT(19)) +#define SPI_USR_DIN_HOLD_M (BIT(19)) +#define SPI_USR_DIN_HOLD_V 0x1 +#define SPI_USR_DIN_HOLD_S 19 +/* SPI_USR_DOUT_HOLD : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: spi is hold at data out state the bit combined with spi_usr_hold_pol bit.*/ +#define SPI_USR_DOUT_HOLD (BIT(18)) +#define SPI_USR_DOUT_HOLD_M (BIT(18)) +#define SPI_USR_DOUT_HOLD_V 0x1 +#define SPI_USR_DOUT_HOLD_S 18 +/* SPI_USR_HOLD_POL : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: It is combined with hold bits to set the polarity of spi hold + line 1: spi will be held when spi hold line is high 0: spi will be held when spi hold line is low*/ +#define SPI_USR_HOLD_POL (BIT(17)) +#define SPI_USR_HOLD_POL_M (BIT(17)) +#define SPI_USR_HOLD_POL_V 0x1 +#define SPI_USR_HOLD_POL_S 17 +/* SPI_SIO : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: Set the bit to enable 3-line half duplex communication mosi + and miso signals share the same pin. 1: enable 0: disable.*/ +#define SPI_SIO (BIT(16)) +#define SPI_SIO_M (BIT(16)) +#define SPI_SIO_V 0x1 +#define SPI_SIO_S 16 +/* SPI_FWRITE_QIO : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: In the write operations address phase and read-data phase apply 4 signals.*/ +#define SPI_FWRITE_QIO (BIT(15)) +#define SPI_FWRITE_QIO_M (BIT(15)) +#define SPI_FWRITE_QIO_V 0x1 +#define SPI_FWRITE_QIO_S 15 +/* SPI_FWRITE_DIO : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: In the write operations address phase and read-data phase apply 2 signals.*/ +#define SPI_FWRITE_DIO (BIT(14)) +#define SPI_FWRITE_DIO_M (BIT(14)) +#define SPI_FWRITE_DIO_V 0x1 +#define SPI_FWRITE_DIO_S 14 +/* SPI_FWRITE_QUAD : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: In the write operations read-data phase apply 4 signals*/ +#define SPI_FWRITE_QUAD (BIT(13)) +#define SPI_FWRITE_QUAD_M (BIT(13)) +#define SPI_FWRITE_QUAD_V 0x1 +#define SPI_FWRITE_QUAD_S 13 +/* SPI_FWRITE_DUAL : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: In the write operations read-data phase apply 2 signals*/ +#define SPI_FWRITE_DUAL (BIT(12)) +#define SPI_FWRITE_DUAL_M (BIT(12)) +#define SPI_FWRITE_DUAL_V 0x1 +#define SPI_FWRITE_DUAL_S 12 +/* SPI_WR_BYTE_ORDER : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: In command address write-data (MOSI) phases 1: big-endian 0: litte_endian*/ +#define SPI_WR_BYTE_ORDER (BIT(11)) +#define SPI_WR_BYTE_ORDER_M (BIT(11)) +#define SPI_WR_BYTE_ORDER_V 0x1 +#define SPI_WR_BYTE_ORDER_S 11 +/* SPI_RD_BYTE_ORDER : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: In read-data (MISO) phase 1: big-endian 0: little_endian*/ +#define SPI_RD_BYTE_ORDER (BIT(10)) +#define SPI_RD_BYTE_ORDER_M (BIT(10)) +#define SPI_RD_BYTE_ORDER_V 0x1 +#define SPI_RD_BYTE_ORDER_S 10 +/* SPI_CK_OUT_EDGE : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode.*/ +#define SPI_CK_OUT_EDGE (BIT(7)) +#define SPI_CK_OUT_EDGE_M (BIT(7)) +#define SPI_CK_OUT_EDGE_V 0x1 +#define SPI_CK_OUT_EDGE_S 7 +/* SPI_CK_I_EDGE : R/W ;bitpos:[6] ;default: 1'b1 ; */ +/*description: In the slave mode the bit is same as spi_ck_out_edge in master + mode. It is combined with spi_miso_delay_mode bits.*/ +#define SPI_CK_I_EDGE (BIT(6)) +#define SPI_CK_I_EDGE_M (BIT(6)) +#define SPI_CK_I_EDGE_V 0x1 +#define SPI_CK_I_EDGE_S 6 +/* SPI_CS_SETUP : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: spi cs is enable when spi is in ¡°prepare¡± phase. 1: enable 0: disable.*/ +#define SPI_CS_SETUP (BIT(5)) +#define SPI_CS_SETUP_M (BIT(5)) +#define SPI_CS_SETUP_V 0x1 +#define SPI_CS_SETUP_S 5 +/* SPI_CS_HOLD : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: spi cs keep low when spi is in ¡°done¡± phase. 1: enable 0: disable.*/ +#define SPI_CS_HOLD (BIT(4)) +#define SPI_CS_HOLD_M (BIT(4)) +#define SPI_CS_HOLD_V 0x1 +#define SPI_CS_HOLD_S 4 +/* SPI_DOUTDIN : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Set the bit to enable full duplex communication. 1: enable 0: disable.*/ +#define SPI_DOUTDIN (BIT(0)) +#define SPI_DOUTDIN_M (BIT(0)) +#define SPI_DOUTDIN_V 0x1 +#define SPI_DOUTDIN_S 0 + +#define SPI_USER1_REG(i) (REG_SPI_BASE(i) + 0x20) +/* SPI_USR_ADDR_BITLEN : RO ;bitpos:[31:26] ;default: 6'd23 ; */ +/*description: The length in bits of address phase. The register value shall be (bit_num-1).*/ +#define SPI_USR_ADDR_BITLEN 0x0000003F +#define SPI_USR_ADDR_BITLEN_M ((SPI_USR_ADDR_BITLEN_V)<<(SPI_USR_ADDR_BITLEN_S)) +#define SPI_USR_ADDR_BITLEN_V 0x3F +#define SPI_USR_ADDR_BITLEN_S 26 +/* SPI_USR_DUMMY_CYCLELEN : R/W ;bitpos:[7:0] ;default: 8'd7 ; */ +/*description: The length in spi_clk cycles of dummy phase. The register value + shall be (cycle_num-1).*/ +#define SPI_USR_DUMMY_CYCLELEN 0x000000FF +#define SPI_USR_DUMMY_CYCLELEN_M ((SPI_USR_DUMMY_CYCLELEN_V)<<(SPI_USR_DUMMY_CYCLELEN_S)) +#define SPI_USR_DUMMY_CYCLELEN_V 0xFF +#define SPI_USR_DUMMY_CYCLELEN_S 0 + +#define SPI_USER2_REG(i) (REG_SPI_BASE(i) + 0x24) +/* SPI_USR_COMMAND_BITLEN : R/W ;bitpos:[31:28] ;default: 4'd7 ; */ +/*description: The length in bits of command phase. The register value shall be (bit_num-1)*/ +#define SPI_USR_COMMAND_BITLEN 0x0000000F +#define SPI_USR_COMMAND_BITLEN_M ((SPI_USR_COMMAND_BITLEN_V)<<(SPI_USR_COMMAND_BITLEN_S)) +#define SPI_USR_COMMAND_BITLEN_V 0xF +#define SPI_USR_COMMAND_BITLEN_S 28 +/* SPI_USR_COMMAND_VALUE : R/W ;bitpos:[15:0] ;default: 16'b0 ; */ +/*description: The value of command.*/ +#define SPI_USR_COMMAND_VALUE 0x0000FFFF +#define SPI_USR_COMMAND_VALUE_M ((SPI_USR_COMMAND_VALUE_V)<<(SPI_USR_COMMAND_VALUE_S)) +#define SPI_USR_COMMAND_VALUE_V 0xFFFF +#define SPI_USR_COMMAND_VALUE_S 0 + +#define SPI_MOSI_DLEN_REG(i) (REG_SPI_BASE(i) + 0x28) +/* SPI_USR_MOSI_DBITLEN : R/W ;bitpos:[23:0] ;default: 24'h0 ; */ +/*description: The length in bits of write-data. The register value shall be (bit_num-1).*/ +#define SPI_USR_MOSI_DBITLEN 0x00FFFFFF +#define SPI_USR_MOSI_DBITLEN_M ((SPI_USR_MOSI_DBITLEN_V)<<(SPI_USR_MOSI_DBITLEN_S)) +#define SPI_USR_MOSI_DBITLEN_V 0xFFFFFF +#define SPI_USR_MOSI_DBITLEN_S 0 + +#define SPI_MISO_DLEN_REG(i) (REG_SPI_BASE(i) + 0x2C) +/* SPI_USR_MISO_DBITLEN : R/W ;bitpos:[23:0] ;default: 24'h0 ; */ +/*description: The length in bits of read-data. The register value shall be (bit_num-1).*/ +#define SPI_USR_MISO_DBITLEN 0x00FFFFFF +#define SPI_USR_MISO_DBITLEN_M ((SPI_USR_MISO_DBITLEN_V)<<(SPI_USR_MISO_DBITLEN_S)) +#define SPI_USR_MISO_DBITLEN_V 0xFFFFFF +#define SPI_USR_MISO_DBITLEN_S 0 + +#define SPI_SLV_WR_STATUS_REG(i) (REG_SPI_BASE(i) + 0x30) +/* SPI_SLV_WR_ST : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: In the slave mode this register are the status register for the + master to write into. In the master mode this register are the higher 32bits in the 64 bits address condition.*/ +#define SPI_SLV_WR_ST 0xFFFFFFFF +#define SPI_SLV_WR_ST_M ((SPI_SLV_WR_ST_V)<<(SPI_SLV_WR_ST_S)) +#define SPI_SLV_WR_ST_V 0xFFFFFFFF +#define SPI_SLV_WR_ST_S 0 + +#define SPI_PIN_REG(i) (REG_SPI_BASE(i) + 0x34) +/* SPI_CS_KEEP_ACTIVE : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: spi cs line keep low when the bit is set.*/ +#define SPI_CS_KEEP_ACTIVE (BIT(30)) +#define SPI_CS_KEEP_ACTIVE_M (BIT(30)) +#define SPI_CS_KEEP_ACTIVE_V 0x1 +#define SPI_CS_KEEP_ACTIVE_S 30 +/* SPI_CK_IDLE_EDGE : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: 1: spi clk line is high when idle 0: spi clk line is low when idle*/ +#define SPI_CK_IDLE_EDGE (BIT(29)) +#define SPI_CK_IDLE_EDGE_M (BIT(29)) +#define SPI_CK_IDLE_EDGE_V 0x1 +#define SPI_CK_IDLE_EDGE_S 29 +/* SPI_MASTER_CK_SEL : R/W ;bitpos:[15:11] ;default: 5'b0 ; */ +/*description: In the master mode spi cs line is enable as spi clk it is combined + with spi_cs0_dis spi_cs1_dis spi_cs2_dis.*/ +#define SPI_MASTER_CK_SEL 0x0000001F +#define SPI_MASTER_CK_SEL_M ((SPI_MASTER_CK_SEL_V)<<(SPI_MASTER_CK_SEL_S)) +#define SPI_MASTER_CK_SEL_V 0x1F +#define SPI_MASTER_CK_SEL_S 11 +/* SPI_MASTER_CS_POL : R/W ;bitpos:[10:6] ;default: 5'b0 ; */ +/*description: In the master mode the bits are the polarity of spi cs line + the value is equivalent to spi_cs ^ spi_master_cs_pol.*/ +#define SPI_MASTER_CS_POL 0x0000001F +#define SPI_MASTER_CS_POL_M ((SPI_MASTER_CS_POL_V)<<(SPI_MASTER_CS_POL_S)) +#define SPI_MASTER_CS_POL_V 0x1F +#define SPI_MASTER_CS_POL_S 6 +/* SPI_CK_DIS : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: 1: spi clk out disable 0: spi clk out enable*/ +#define SPI_CK_DIS (BIT(5)) +#define SPI_CK_DIS_M (BIT(5)) +#define SPI_CK_DIS_V 0x1 +#define SPI_CK_DIS_S 5 +/* SPI_CS2_DIS : R/W ;bitpos:[2] ;default: 1'b1 ; */ +/*description: SPI CS2 pin enable, 1: disable CS2, 0: spi_cs2 signal is from/to CS2 pin*/ +#define SPI_CS2_DIS (BIT(2)) +#define SPI_CS2_DIS_M (BIT(2)) +#define SPI_CS2_DIS_V 0x1 +#define SPI_CS2_DIS_S 2 +/* SPI_CS1_DIS : R/W ;bitpos:[1] ;default: 1'b1 ; */ +/*description: SPI CS1 pin enable, 1: disable CS1, 0: spi_cs1 signal is from/to CS1 pin*/ +#define SPI_CS1_DIS (BIT(1)) +#define SPI_CS1_DIS_M (BIT(1)) +#define SPI_CS1_DIS_V 0x1 +#define SPI_CS1_DIS_S 1 +/* SPI_CS0_DIS : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: SPI CS0 pin enable, 1: disable CS0, 0: spi_cs0 signal is from/to CS0 pin*/ +#define SPI_CS0_DIS (BIT(0)) +#define SPI_CS0_DIS_M (BIT(0)) +#define SPI_CS0_DIS_V 0x1 +#define SPI_CS0_DIS_S 0 + +#define SPI_SLAVE_REG(i) (REG_SPI_BASE(i) + 0x38) +/* SPI_SYNC_RESET : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: Software reset enable, reset the spi clock line cs line and data lines.*/ +#define SPI_SYNC_RESET (BIT(31)) +#define SPI_SYNC_RESET_M (BIT(31)) +#define SPI_SYNC_RESET_V 0x1 +#define SPI_SYNC_RESET_S 31 +/* SPI_SLAVE_MODE : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: 1: slave mode 0: master mode.*/ +#define SPI_SLAVE_MODE (BIT(30)) +#define SPI_SLAVE_MODE_M (BIT(30)) +#define SPI_SLAVE_MODE_V 0x1 +#define SPI_SLAVE_MODE_S 30 +/* SPI_SLV_WR_RD_BUF_EN : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: write and read buffer enable in the slave mode*/ +#define SPI_SLV_WR_RD_BUF_EN (BIT(29)) +#define SPI_SLV_WR_RD_BUF_EN_M (BIT(29)) +#define SPI_SLV_WR_RD_BUF_EN_V 0x1 +#define SPI_SLV_WR_RD_BUF_EN_S 29 +/* SPI_SLV_WR_RD_STA_EN : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: write and read status enable in the slave mode*/ +#define SPI_SLV_WR_RD_STA_EN (BIT(28)) +#define SPI_SLV_WR_RD_STA_EN_M (BIT(28)) +#define SPI_SLV_WR_RD_STA_EN_V 0x1 +#define SPI_SLV_WR_RD_STA_EN_S 28 +/* SPI_SLV_CMD_DEFINE : R/W ;bitpos:[27] ;default: 1'b0 ; */ +/*description: 1: slave mode commands are defined in SPI_SLAVE3. 0: slave mode + commands are fixed as: 1: write-status 2: write-buffer and 3: read-buffer.*/ +#define SPI_SLV_CMD_DEFINE (BIT(27)) +#define SPI_SLV_CMD_DEFINE_M (BIT(27)) +#define SPI_SLV_CMD_DEFINE_V 0x1 +#define SPI_SLV_CMD_DEFINE_S 27 +/* SPI_TRANS_CNT : RO ;bitpos:[26:23] ;default: 4'b0 ; */ +/*description: The operations counter in both the master mode and the slave + mode. 4: read-status*/ +#define SPI_TRANS_CNT 0x0000000F +#define SPI_TRANS_CNT_M ((SPI_TRANS_CNT_V)<<(SPI_TRANS_CNT_S)) +#define SPI_TRANS_CNT_V 0xF +#define SPI_TRANS_CNT_S 23 +/* SPI_SLV_LAST_STATE : RO ;bitpos:[22:20] ;default: 3'b0 ; */ +/*description: In the slave mode it is the state of spi state machine.*/ +#define SPI_SLV_LAST_STATE 0x00000007 +#define SPI_SLV_LAST_STATE_M ((SPI_SLV_LAST_STATE_V)<<(SPI_SLV_LAST_STATE_S)) +#define SPI_SLV_LAST_STATE_V 0x7 +#define SPI_SLV_LAST_STATE_S 20 +/* SPI_SLV_LAST_COMMAND : RO ;bitpos:[19:17] ;default: 3'b0 ; */ +/*description: In the slave mode it is the value of command.*/ +#define SPI_SLV_LAST_COMMAND 0x00000007 +#define SPI_SLV_LAST_COMMAND_M ((SPI_SLV_LAST_COMMAND_V)<<(SPI_SLV_LAST_COMMAND_S)) +#define SPI_SLV_LAST_COMMAND_V 0x7 +#define SPI_SLV_LAST_COMMAND_S 17 +/* SPI_CS_I_MODE : R/W ;bitpos:[11:10] ;default: 2'b0 ; */ +/*description: In the slave mode this bits used to synchronize the input spi + cs signal and eliminate spi cs jitter.*/ +#define SPI_CS_I_MODE 0x00000003 +#define SPI_CS_I_MODE_M ((SPI_CS_I_MODE_V)<<(SPI_CS_I_MODE_S)) +#define SPI_CS_I_MODE_V 0x3 +#define SPI_CS_I_MODE_S 10 +/* SPI_INT_EN : R/W ;bitpos:[9:5] ;default: 5'b1_0000 ; */ +/*description: Interrupt enable bits for the below 5 sources*/ +#define SPI_INT_EN 0x0000001F +#define SPI_INT_EN_M ((SPI_INT_EN_V)<<(SPI_INT_EN_S)) +#define SPI_INT_EN_V 0x1F +#define SPI_INT_EN_S 5 +/* SPI_TRANS_DONE : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for the completion of any operation in + both the master mode and the slave mode.*/ +#define SPI_TRANS_DONE (BIT(4)) +#define SPI_TRANS_DONE_M (BIT(4)) +#define SPI_TRANS_DONE_V 0x1 +#define SPI_TRANS_DONE_S 4 +/* SPI_SLV_WR_STA_DONE : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for the completion of write-status operation + in the slave mode.*/ +#define SPI_SLV_WR_STA_DONE (BIT(3)) +#define SPI_SLV_WR_STA_DONE_M (BIT(3)) +#define SPI_SLV_WR_STA_DONE_V 0x1 +#define SPI_SLV_WR_STA_DONE_S 3 +/* SPI_SLV_RD_STA_DONE : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for the completion of read-status operation + in the slave mode.*/ +#define SPI_SLV_RD_STA_DONE (BIT(2)) +#define SPI_SLV_RD_STA_DONE_M (BIT(2)) +#define SPI_SLV_RD_STA_DONE_V 0x1 +#define SPI_SLV_RD_STA_DONE_S 2 +/* SPI_SLV_WR_BUF_DONE : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for the completion of write-buffer operation + in the slave mode.*/ +#define SPI_SLV_WR_BUF_DONE (BIT(1)) +#define SPI_SLV_WR_BUF_DONE_M (BIT(1)) +#define SPI_SLV_WR_BUF_DONE_V 0x1 +#define SPI_SLV_WR_BUF_DONE_S 1 +/* SPI_SLV_RD_BUF_DONE : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The interrupt raw bit for the completion of read-buffer operation + in the slave mode.*/ +#define SPI_SLV_RD_BUF_DONE (BIT(0)) +#define SPI_SLV_RD_BUF_DONE_M (BIT(0)) +#define SPI_SLV_RD_BUF_DONE_V 0x1 +#define SPI_SLV_RD_BUF_DONE_S 0 + +#define SPI_SLAVE1_REG(i) (REG_SPI_BASE(i) + 0x3C) +/* SPI_SLV_STATUS_BITLEN : R/W ;bitpos:[31:27] ;default: 5'b0 ; */ +/*description: In the slave mode it is the length of status bit.*/ +#define SPI_SLV_STATUS_BITLEN 0x0000001F +#define SPI_SLV_STATUS_BITLEN_M ((SPI_SLV_STATUS_BITLEN_V)<<(SPI_SLV_STATUS_BITLEN_S)) +#define SPI_SLV_STATUS_BITLEN_V 0x1F +#define SPI_SLV_STATUS_BITLEN_S 27 +/* SPI_SLV_STATUS_FAST_EN : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: In the slave mode enable fast read status.*/ +#define SPI_SLV_STATUS_FAST_EN (BIT(26)) +#define SPI_SLV_STATUS_FAST_EN_M (BIT(26)) +#define SPI_SLV_STATUS_FAST_EN_V 0x1 +#define SPI_SLV_STATUS_FAST_EN_S 26 +/* SPI_SLV_STATUS_READBACK : R/W ;bitpos:[25] ;default: 1'b1 ; */ +/*description: In the slave mode 1:read register of SPI_SLV_WR_STATUS 0: read + register of SPI_RD_STATUS.*/ +#define SPI_SLV_STATUS_READBACK (BIT(25)) +#define SPI_SLV_STATUS_READBACK_M (BIT(25)) +#define SPI_SLV_STATUS_READBACK_V 0x1 +#define SPI_SLV_STATUS_READBACK_S 25 +/* SPI_SLV_RD_ADDR_BITLEN : R/W ;bitpos:[15:10] ;default: 6'h0 ; */ +/*description: In the slave mode it is the address length in bits for read-buffer + operation. The register value shall be (bit_num-1).*/ +#define SPI_SLV_RD_ADDR_BITLEN 0x0000003F +#define SPI_SLV_RD_ADDR_BITLEN_M ((SPI_SLV_RD_ADDR_BITLEN_V)<<(SPI_SLV_RD_ADDR_BITLEN_S)) +#define SPI_SLV_RD_ADDR_BITLEN_V 0x3F +#define SPI_SLV_RD_ADDR_BITLEN_S 10 +/* SPI_SLV_WR_ADDR_BITLEN : R/W ;bitpos:[9:4] ;default: 6'h0 ; */ +/*description: In the slave mode it is the address length in bits for write-buffer + operation. The register value shall be (bit_num-1).*/ +#define SPI_SLV_WR_ADDR_BITLEN 0x0000003F +#define SPI_SLV_WR_ADDR_BITLEN_M ((SPI_SLV_WR_ADDR_BITLEN_V)<<(SPI_SLV_WR_ADDR_BITLEN_S)) +#define SPI_SLV_WR_ADDR_BITLEN_V 0x3F +#define SPI_SLV_WR_ADDR_BITLEN_S 4 +/* SPI_SLV_WRSTA_DUMMY_EN : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: In the slave mode it is the enable bit of dummy phase for write-status + operations.*/ +#define SPI_SLV_WRSTA_DUMMY_EN (BIT(3)) +#define SPI_SLV_WRSTA_DUMMY_EN_M (BIT(3)) +#define SPI_SLV_WRSTA_DUMMY_EN_V 0x1 +#define SPI_SLV_WRSTA_DUMMY_EN_S 3 +/* SPI_SLV_RDSTA_DUMMY_EN : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: In the slave mode it is the enable bit of dummy phase for read-status + operations.*/ +#define SPI_SLV_RDSTA_DUMMY_EN (BIT(2)) +#define SPI_SLV_RDSTA_DUMMY_EN_M (BIT(2)) +#define SPI_SLV_RDSTA_DUMMY_EN_V 0x1 +#define SPI_SLV_RDSTA_DUMMY_EN_S 2 +/* SPI_SLV_WRBUF_DUMMY_EN : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: In the slave mode it is the enable bit of dummy phase for write-buffer + operations.*/ +#define SPI_SLV_WRBUF_DUMMY_EN (BIT(1)) +#define SPI_SLV_WRBUF_DUMMY_EN_M (BIT(1)) +#define SPI_SLV_WRBUF_DUMMY_EN_V 0x1 +#define SPI_SLV_WRBUF_DUMMY_EN_S 1 +/* SPI_SLV_RDBUF_DUMMY_EN : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: In the slave mode it is the enable bit of dummy phase for read-buffer + operations.*/ +#define SPI_SLV_RDBUF_DUMMY_EN (BIT(0)) +#define SPI_SLV_RDBUF_DUMMY_EN_M (BIT(0)) +#define SPI_SLV_RDBUF_DUMMY_EN_V 0x1 +#define SPI_SLV_RDBUF_DUMMY_EN_S 0 + +#define SPI_SLAVE2_REG(i) (REG_SPI_BASE(i) + 0x40) +/* SPI_SLV_WRBUF_DUMMY_CYCLELEN : R/W ;bitpos:[31:24] ;default: 8'b0 ; */ +/*description: In the slave mode it is the length in spi_clk cycles of dummy + phase for write-buffer operations. The register value shall be (cycle_num-1).*/ +#define SPI_SLV_WRBUF_DUMMY_CYCLELEN 0x000000FF +#define SPI_SLV_WRBUF_DUMMY_CYCLELEN_M ((SPI_SLV_WRBUF_DUMMY_CYCLELEN_V)<<(SPI_SLV_WRBUF_DUMMY_CYCLELEN_S)) +#define SPI_SLV_WRBUF_DUMMY_CYCLELEN_V 0xFF +#define SPI_SLV_WRBUF_DUMMY_CYCLELEN_S 24 +/* SPI_SLV_RDBUF_DUMMY_CYCLELEN : R/W ;bitpos:[23:16] ;default: 8'h0 ; */ +/*description: In the slave mode it is the length in spi_clk cycles of dummy + phase for read-buffer operations. The register value shall be (cycle_num-1).*/ +#define SPI_SLV_RDBUF_DUMMY_CYCLELEN 0x000000FF +#define SPI_SLV_RDBUF_DUMMY_CYCLELEN_M ((SPI_SLV_RDBUF_DUMMY_CYCLELEN_V)<<(SPI_SLV_RDBUF_DUMMY_CYCLELEN_S)) +#define SPI_SLV_RDBUF_DUMMY_CYCLELEN_V 0xFF +#define SPI_SLV_RDBUF_DUMMY_CYCLELEN_S 16 +/* SPI_SLV_WRSTA_DUMMY_CYCLELEN : R/W ;bitpos:[15:8] ;default: 8'h0 ; */ +/*description: In the slave mode it is the length in spi_clk cycles of dummy + phase for write-status operations. The register value shall be (cycle_num-1).*/ +#define SPI_SLV_WRSTA_DUMMY_CYCLELEN 0x000000FF +#define SPI_SLV_WRSTA_DUMMY_CYCLELEN_M ((SPI_SLV_WRSTA_DUMMY_CYCLELEN_V)<<(SPI_SLV_WRSTA_DUMMY_CYCLELEN_S)) +#define SPI_SLV_WRSTA_DUMMY_CYCLELEN_V 0xFF +#define SPI_SLV_WRSTA_DUMMY_CYCLELEN_S 8 +/* SPI_SLV_RDSTA_DUMMY_CYCLELEN : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: In the slave mode it is the length in spi_clk cycles of dummy + phase for read-status operations. The register value shall be (cycle_num-1).*/ +#define SPI_SLV_RDSTA_DUMMY_CYCLELEN 0x000000FF +#define SPI_SLV_RDSTA_DUMMY_CYCLELEN_M ((SPI_SLV_RDSTA_DUMMY_CYCLELEN_V)<<(SPI_SLV_RDSTA_DUMMY_CYCLELEN_S)) +#define SPI_SLV_RDSTA_DUMMY_CYCLELEN_V 0xFF +#define SPI_SLV_RDSTA_DUMMY_CYCLELEN_S 0 + +#define SPI_SLAVE3_REG(i) (REG_SPI_BASE(i) + 0x44) +/* SPI_SLV_WRSTA_CMD_VALUE : R/W ;bitpos:[31:24] ;default: 8'b0 ; */ +/*description: In the slave mode it is the value of write-status command.*/ +#define SPI_SLV_WRSTA_CMD_VALUE 0x000000FF +#define SPI_SLV_WRSTA_CMD_VALUE_M ((SPI_SLV_WRSTA_CMD_VALUE_V)<<(SPI_SLV_WRSTA_CMD_VALUE_S)) +#define SPI_SLV_WRSTA_CMD_VALUE_V 0xFF +#define SPI_SLV_WRSTA_CMD_VALUE_S 24 +/* SPI_SLV_RDSTA_CMD_VALUE : R/W ;bitpos:[23:16] ;default: 8'b0 ; */ +/*description: In the slave mode it is the value of read-status command.*/ +#define SPI_SLV_RDSTA_CMD_VALUE 0x000000FF +#define SPI_SLV_RDSTA_CMD_VALUE_M ((SPI_SLV_RDSTA_CMD_VALUE_V)<<(SPI_SLV_RDSTA_CMD_VALUE_S)) +#define SPI_SLV_RDSTA_CMD_VALUE_V 0xFF +#define SPI_SLV_RDSTA_CMD_VALUE_S 16 +/* SPI_SLV_WRBUF_CMD_VALUE : R/W ;bitpos:[15:8] ;default: 8'b0 ; */ +/*description: In the slave mode it is the value of write-buffer command.*/ +#define SPI_SLV_WRBUF_CMD_VALUE 0x000000FF +#define SPI_SLV_WRBUF_CMD_VALUE_M ((SPI_SLV_WRBUF_CMD_VALUE_V)<<(SPI_SLV_WRBUF_CMD_VALUE_S)) +#define SPI_SLV_WRBUF_CMD_VALUE_V 0xFF +#define SPI_SLV_WRBUF_CMD_VALUE_S 8 +/* SPI_SLV_RDBUF_CMD_VALUE : R/W ;bitpos:[7:0] ;default: 8'b0 ; */ +/*description: In the slave mode it is the value of read-buffer command.*/ +#define SPI_SLV_RDBUF_CMD_VALUE 0x000000FF +#define SPI_SLV_RDBUF_CMD_VALUE_M ((SPI_SLV_RDBUF_CMD_VALUE_V)<<(SPI_SLV_RDBUF_CMD_VALUE_S)) +#define SPI_SLV_RDBUF_CMD_VALUE_V 0xFF +#define SPI_SLV_RDBUF_CMD_VALUE_S 0 + +#define SPI_SLV_WRBUF_DLEN_REG(i) (REG_SPI_BASE(i) + 0x48) +/* SPI_SLV_WRBUF_DBITLEN : R/W ;bitpos:[23:0] ;default: 24'h0 ; */ +/*description: In the slave mode it is the length in bits for write-buffer operations. + The register value shall be (bit_num-1).*/ +#define SPI_SLV_WRBUF_DBITLEN 0x00FFFFFF +#define SPI_SLV_WRBUF_DBITLEN_M ((SPI_SLV_WRBUF_DBITLEN_V)<<(SPI_SLV_WRBUF_DBITLEN_S)) +#define SPI_SLV_WRBUF_DBITLEN_V 0xFFFFFF +#define SPI_SLV_WRBUF_DBITLEN_S 0 + +#define SPI_SLV_RDBUF_DLEN_REG(i) (REG_SPI_BASE(i) + 0x4C) +/* SPI_SLV_RDBUF_DBITLEN : R/W ;bitpos:[23:0] ;default: 24'h0 ; */ +/*description: In the slave mode it is the length in bits for read-buffer operations. + The register value shall be (bit_num-1).*/ +#define SPI_SLV_RDBUF_DBITLEN 0x00FFFFFF +#define SPI_SLV_RDBUF_DBITLEN_M ((SPI_SLV_RDBUF_DBITLEN_V)<<(SPI_SLV_RDBUF_DBITLEN_S)) +#define SPI_SLV_RDBUF_DBITLEN_V 0xFFFFFF +#define SPI_SLV_RDBUF_DBITLEN_S 0 + +#define SPI_CACHE_FCTRL_REG(i) (REG_SPI_BASE(i) + 0x50) +/* SPI_CACHE_FLASH_PES_EN : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: For SPI0 spi1 send suspend command before cache read flash + 1: enable 0:disable.*/ +#define SPI_CACHE_FLASH_PES_EN (BIT(3)) +#define SPI_CACHE_FLASH_PES_EN_M (BIT(3)) +#define SPI_CACHE_FLASH_PES_EN_V 0x1 +#define SPI_CACHE_FLASH_PES_EN_S 3 +/* SPI_CACHE_FLASH_USR_CMD : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: For SPI0 cache read flash for user define command 1: enable 0:disable.*/ +#define SPI_CACHE_FLASH_USR_CMD (BIT(2)) +#define SPI_CACHE_FLASH_USR_CMD_M (BIT(2)) +#define SPI_CACHE_FLASH_USR_CMD_V 0x1 +#define SPI_CACHE_FLASH_USR_CMD_S 2 +/* SPI_CACHE_USR_CMD_4BYTE : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: For SPI0 cache read flash with 4 bytes command 1: enable 0:disable.*/ +#define SPI_CACHE_USR_CMD_4BYTE (BIT(1)) +#define SPI_CACHE_USR_CMD_4BYTE_M (BIT(1)) +#define SPI_CACHE_USR_CMD_4BYTE_V 0x1 +#define SPI_CACHE_USR_CMD_4BYTE_S 1 +/* SPI_CACHE_REQ_EN : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: For SPI0 Cache access enable 1: enable 0:disable.*/ +#define SPI_CACHE_REQ_EN (BIT(0)) +#define SPI_CACHE_REQ_EN_M (BIT(0)) +#define SPI_CACHE_REQ_EN_V 0x1 +#define SPI_CACHE_REQ_EN_S 0 + +#define SPI_CACHE_SCTRL_REG(i) (REG_SPI_BASE(i) + 0x54) +/* SPI_CACHE_SRAM_USR_WCMD : R/W ;bitpos:[28] ;default: 1'b1 ; */ +/*description: For SPI0 In the spi sram mode cache write sram for user define command*/ +#define SPI_CACHE_SRAM_USR_WCMD (BIT(28)) +#define SPI_CACHE_SRAM_USR_WCMD_M (BIT(28)) +#define SPI_CACHE_SRAM_USR_WCMD_V 0x1 +#define SPI_CACHE_SRAM_USR_WCMD_S 28 +/* SPI_SRAM_ADDR_BITLEN : R/W ;bitpos:[27:22] ;default: 6'd23 ; */ +/*description: For SPI0 In the sram mode it is the length in bits of address + phase. The register value shall be (bit_num-1).*/ +#define SPI_SRAM_ADDR_BITLEN 0x0000003F +#define SPI_SRAM_ADDR_BITLEN_M ((SPI_SRAM_ADDR_BITLEN_V)<<(SPI_SRAM_ADDR_BITLEN_S)) +#define SPI_SRAM_ADDR_BITLEN_V 0x3F +#define SPI_SRAM_ADDR_BITLEN_S 22 +/* SPI_SRAM_DUMMY_CYCLELEN : R/W ;bitpos:[21:14] ;default: 8'b1 ; */ +/*description: For SPI0 In the sram mode it is the length in bits of address + phase. The register value shall be (bit_num-1).*/ +#define SPI_SRAM_DUMMY_CYCLELEN 0x000000FF +#define SPI_SRAM_DUMMY_CYCLELEN_M ((SPI_SRAM_DUMMY_CYCLELEN_V)<<(SPI_SRAM_DUMMY_CYCLELEN_S)) +#define SPI_SRAM_DUMMY_CYCLELEN_V 0xFF +#define SPI_SRAM_DUMMY_CYCLELEN_S 14 +/* SPI_SRAM_BYTES_LEN : R/W ;bitpos:[13:6] ;default: 8'b32 ; */ +/*description: For SPI0 In the sram mode it is the byte length of spi read sram data.*/ +#define SPI_SRAM_BYTES_LEN 0x000000FF +#define SPI_SRAM_BYTES_LEN_M ((SPI_SRAM_BYTES_LEN_V)<<(SPI_SRAM_BYTES_LEN_S)) +#define SPI_SRAM_BYTES_LEN_V 0xFF +#define SPI_SRAM_BYTES_LEN_S 6 +/* SPI_CACHE_SRAM_USR_RCMD : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: For SPI0 In the spi sram mode cache read sram for user define command.*/ +#define SPI_CACHE_SRAM_USR_RCMD (BIT(5)) +#define SPI_CACHE_SRAM_USR_RCMD_M (BIT(5)) +#define SPI_CACHE_SRAM_USR_RCMD_V 0x1 +#define SPI_CACHE_SRAM_USR_RCMD_S 5 +/* SPI_USR_RD_SRAM_DUMMY : R/W ;bitpos:[4] ;default: 1'b1 ; */ +/*description: For SPI0 In the spi sram mode it is the enable bit of dummy + phase for read operations.*/ +#define SPI_USR_RD_SRAM_DUMMY (BIT(4)) +#define SPI_USR_RD_SRAM_DUMMY_M (BIT(4)) +#define SPI_USR_RD_SRAM_DUMMY_V 0x1 +#define SPI_USR_RD_SRAM_DUMMY_S 4 +/* SPI_USR_WR_SRAM_DUMMY : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: For SPI0 In the spi sram mode it is the enable bit of dummy + phase for write operations.*/ +#define SPI_USR_WR_SRAM_DUMMY (BIT(3)) +#define SPI_USR_WR_SRAM_DUMMY_M (BIT(3)) +#define SPI_USR_WR_SRAM_DUMMY_V 0x1 +#define SPI_USR_WR_SRAM_DUMMY_S 3 +/* SPI_USR_SRAM_QIO : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: For SPI0 In the spi sram mode spi quad I/O mode enable 1: enable 0:disable*/ +#define SPI_USR_SRAM_QIO (BIT(2)) +#define SPI_USR_SRAM_QIO_M (BIT(2)) +#define SPI_USR_SRAM_QIO_V 0x1 +#define SPI_USR_SRAM_QIO_S 2 +/* SPI_USR_SRAM_DIO : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: For SPI0 In the spi sram mode spi dual I/O mode enable 1: enable 0:disable*/ +#define SPI_USR_SRAM_DIO (BIT(1)) +#define SPI_USR_SRAM_DIO_M (BIT(1)) +#define SPI_USR_SRAM_DIO_V 0x1 +#define SPI_USR_SRAM_DIO_S 1 + +#define SPI_SRAM_CMD_REG(i) (REG_SPI_BASE(i) + 0x58) +/* SPI_SRAM_RSTIO : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: For SPI0 SRAM IO mode reset enable. SRAM IO mode reset operation + will be triggered when the bit is set. The bit will be cleared once the operation done*/ +#define SPI_SRAM_RSTIO (BIT(4)) +#define SPI_SRAM_RSTIO_M (BIT(4)) +#define SPI_SRAM_RSTIO_V 0x1 +#define SPI_SRAM_RSTIO_S 4 +/* SPI_SRAM_QIO : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: For SPI0 SRAM QIO mode enable . SRAM QIO enable command will + be send when the bit is set. The bit will be cleared once the operation done.*/ +#define SPI_SRAM_QIO (BIT(1)) +#define SPI_SRAM_QIO_M (BIT(1)) +#define SPI_SRAM_QIO_V 0x1 +#define SPI_SRAM_QIO_S 1 +/* SPI_SRAM_DIO : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: For SPI0 SRAM DIO mode enable . SRAM DIO enable command will + be send when the bit is set. The bit will be cleared once the operation done.*/ +#define SPI_SRAM_DIO (BIT(0)) +#define SPI_SRAM_DIO_M (BIT(0)) +#define SPI_SRAM_DIO_V 0x1 +#define SPI_SRAM_DIO_S 0 + +#define SPI_SRAM_DRD_CMD_REG(i) (REG_SPI_BASE(i) + 0x5C) +/* SPI_CACHE_SRAM_USR_RD_CMD_BITLEN : R/W ;bitpos:[31:28] ;default: 4'h0 ; */ +/*description: For SPI0 When cache mode is enable it is the length in bits of + command phase for SRAM. The register value shall be (bit_num-1).*/ +#define SPI_CACHE_SRAM_USR_RD_CMD_BITLEN 0x0000000F +#define SPI_CACHE_SRAM_USR_RD_CMD_BITLEN_M ((SPI_CACHE_SRAM_USR_RD_CMD_BITLEN_V)<<(SPI_CACHE_SRAM_USR_RD_CMD_BITLEN_S)) +#define SPI_CACHE_SRAM_USR_RD_CMD_BITLEN_V 0xF +#define SPI_CACHE_SRAM_USR_RD_CMD_BITLEN_S 28 +/* SPI_CACHE_SRAM_USR_RD_CMD_VALUE : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: For SPI0 When cache mode is enable it is the read command value + of command phase for SRAM.*/ +#define SPI_CACHE_SRAM_USR_RD_CMD_VALUE 0x0000FFFF +#define SPI_CACHE_SRAM_USR_RD_CMD_VALUE_M ((SPI_CACHE_SRAM_USR_RD_CMD_VALUE_V)<<(SPI_CACHE_SRAM_USR_RD_CMD_VALUE_S)) +#define SPI_CACHE_SRAM_USR_RD_CMD_VALUE_V 0xFFFF +#define SPI_CACHE_SRAM_USR_RD_CMD_VALUE_S 0 + +#define SPI_SRAM_DWR_CMD_REG(i) (REG_SPI_BASE(i) + 0x60) +/* SPI_CACHE_SRAM_USR_WR_CMD_BITLEN : R/W ;bitpos:[31:28] ;default: 4'h0 ; */ +/*description: For SPI0 When cache mode is enable it is the in bits of command + phase for SRAM. The register value shall be (bit_num-1).*/ +#define SPI_CACHE_SRAM_USR_WR_CMD_BITLEN 0x0000000F +#define SPI_CACHE_SRAM_USR_WR_CMD_BITLEN_M ((SPI_CACHE_SRAM_USR_WR_CMD_BITLEN_V)<<(SPI_CACHE_SRAM_USR_WR_CMD_BITLEN_S)) +#define SPI_CACHE_SRAM_USR_WR_CMD_BITLEN_V 0xF +#define SPI_CACHE_SRAM_USR_WR_CMD_BITLEN_S 28 +/* SPI_CACHE_SRAM_USR_WR_CMD_VALUE : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ +/*description: For SPI0 When cache mode is enable it is the write command value + of command phase for SRAM.*/ +#define SPI_CACHE_SRAM_USR_WR_CMD_VALUE 0x0000FFFF +#define SPI_CACHE_SRAM_USR_WR_CMD_VALUE_M ((SPI_CACHE_SRAM_USR_WR_CMD_VALUE_V)<<(SPI_CACHE_SRAM_USR_WR_CMD_VALUE_S)) +#define SPI_CACHE_SRAM_USR_WR_CMD_VALUE_V 0xFFFF +#define SPI_CACHE_SRAM_USR_WR_CMD_VALUE_S 0 + +#define SPI_SLV_RD_BIT_REG(i) (REG_SPI_BASE(i) + 0x64) +/* SPI_SLV_RDATA_BIT : RW ;bitpos:[23:0] ;default: 24'b0 ; */ +/*description: In the slave mode it is the bit length of read data. The value + is the length - 1.*/ +#define SPI_SLV_RDATA_BIT 0x00FFFFFF +#define SPI_SLV_RDATA_BIT_M ((SPI_SLV_RDATA_BIT_V)<<(SPI_SLV_RDATA_BIT_S)) +#define SPI_SLV_RDATA_BIT_V 0xFFFFFF +#define SPI_SLV_RDATA_BIT_S 0 + +#define SPI_W0_REG(i) (REG_SPI_BASE(i) + 0x80) +/* SPI_BUF0 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF0 0xFFFFFFFF +#define SPI_BUF0_M ((SPI_BUF0_V)<<(SPI_BUF0_S)) +#define SPI_BUF0_V 0xFFFFFFFF +#define SPI_BUF0_S 0 + +#define SPI_W1_REG(i) (REG_SPI_BASE(i) + 0x84) +/* SPI_BUF1 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF1 0xFFFFFFFF +#define SPI_BUF1_M ((SPI_BUF1_V)<<(SPI_BUF1_S)) +#define SPI_BUF1_V 0xFFFFFFFF +#define SPI_BUF1_S 0 + +#define SPI_W2_REG(i) (REG_SPI_BASE(i) + 0x88) +/* SPI_BUF2 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF2 0xFFFFFFFF +#define SPI_BUF2_M ((SPI_BUF2_V)<<(SPI_BUF2_S)) +#define SPI_BUF2_V 0xFFFFFFFF +#define SPI_BUF2_S 0 + +#define SPI_W3_REG(i) (REG_SPI_BASE(i) + 0x8C) +/* SPI_BUF3 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF3 0xFFFFFFFF +#define SPI_BUF3_M ((SPI_BUF3_V)<<(SPI_BUF3_S)) +#define SPI_BUF3_V 0xFFFFFFFF +#define SPI_BUF3_S 0 + +#define SPI_W4_REG(i) (REG_SPI_BASE(i) + 0x90) +/* SPI_BUF4 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF4 0xFFFFFFFF +#define SPI_BUF4_M ((SPI_BUF4_V)<<(SPI_BUF4_S)) +#define SPI_BUF4_V 0xFFFFFFFF +#define SPI_BUF4_S 0 + +#define SPI_W5_REG(i) (REG_SPI_BASE(i) + 0x94) +/* SPI_BUF5 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF5 0xFFFFFFFF +#define SPI_BUF5_M ((SPI_BUF5_V)<<(SPI_BUF5_S)) +#define SPI_BUF5_V 0xFFFFFFFF +#define SPI_BUF5_S 0 + +#define SPI_W6_REG(i) (REG_SPI_BASE(i) + 0x98) +/* SPI_BUF6 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF6 0xFFFFFFFF +#define SPI_BUF6_M ((SPI_BUF6_V)<<(SPI_BUF6_S)) +#define SPI_BUF6_V 0xFFFFFFFF +#define SPI_BUF6_S 0 + +#define SPI_W7_REG(i) (REG_SPI_BASE(i) + 0x9C) +/* SPI_BUF7 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF7 0xFFFFFFFF +#define SPI_BUF7_M ((SPI_BUF7_V)<<(SPI_BUF7_S)) +#define SPI_BUF7_V 0xFFFFFFFF +#define SPI_BUF7_S 0 + +#define SPI_W8_REG(i) (REG_SPI_BASE(i) + 0xA0) +/* SPI_BUF8 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF8 0xFFFFFFFF +#define SPI_BUF8_M ((SPI_BUF8_V)<<(SPI_BUF8_S)) +#define SPI_BUF8_V 0xFFFFFFFF +#define SPI_BUF8_S 0 + +#define SPI_W9_REG(i) (REG_SPI_BASE(i) + 0xA4) +/* SPI_BUF9 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF9 0xFFFFFFFF +#define SPI_BUF9_M ((SPI_BUF9_V)<<(SPI_BUF9_S)) +#define SPI_BUF9_V 0xFFFFFFFF +#define SPI_BUF9_S 0 + +#define SPI_W10_REG(i) (REG_SPI_BASE(i) + 0xA8) +/* SPI_BUF10 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF10 0xFFFFFFFF +#define SPI_BUF10_M ((SPI_BUF10_V)<<(SPI_BUF10_S)) +#define SPI_BUF10_V 0xFFFFFFFF +#define SPI_BUF10_S 0 + +#define SPI_W11_REG(i) (REG_SPI_BASE(i) + 0xAC) +/* SPI_BUF11 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF11 0xFFFFFFFF +#define SPI_BUF11_M ((SPI_BUF11_V)<<(SPI_BUF11_S)) +#define SPI_BUF11_V 0xFFFFFFFF +#define SPI_BUF11_S 0 + +#define SPI_W12_REG(i) (REG_SPI_BASE(i) + 0xB0) +/* SPI_BUF12 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF12 0xFFFFFFFF +#define SPI_BUF12_M ((SPI_BUF12_V)<<(SPI_BUF12_S)) +#define SPI_BUF12_V 0xFFFFFFFF +#define SPI_BUF12_S 0 + +#define SPI_W13_REG(i) (REG_SPI_BASE(i) + 0xB4) +/* SPI_BUF13 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF13 0xFFFFFFFF +#define SPI_BUF13_M ((SPI_BUF13_V)<<(SPI_BUF13_S)) +#define SPI_BUF13_V 0xFFFFFFFF +#define SPI_BUF13_S 0 + +#define SPI_W14_REG(i) (REG_SPI_BASE(i) + 0xB8) +/* SPI_BUF14 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF14 0xFFFFFFFF +#define SPI_BUF14_M ((SPI_BUF14_V)<<(SPI_BUF14_S)) +#define SPI_BUF14_V 0xFFFFFFFF +#define SPI_BUF14_S 0 + +#define SPI_W15_REG(i) (REG_SPI_BASE(i) + 0xBC) +/* SPI_BUF15 : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: data buffer*/ +#define SPI_BUF15 0xFFFFFFFF +#define SPI_BUF15_M ((SPI_BUF15_V)<<(SPI_BUF15_S)) +#define SPI_BUF15_V 0xFFFFFFFF +#define SPI_BUF15_S 0 + +#define SPI_TX_CRC_REG(i) (REG_SPI_BASE(i) + 0xC0) +/* SPI_TX_CRC_DATA : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: For SPI1 the value of crc32 for 256 bits data.*/ +#define SPI_TX_CRC_DATA 0xFFFFFFFF +#define SPI_TX_CRC_DATA_M ((SPI_TX_CRC_DATA_V)<<(SPI_TX_CRC_DATA_S)) +#define SPI_TX_CRC_DATA_V 0xFFFFFFFF +#define SPI_TX_CRC_DATA_S 0 + +#define SPI_EXT0_REG(i) (REG_SPI_BASE(i) + 0xF0) +/* SPI_T_PP_ENA : R/W ;bitpos:[31] ;default: 1'b1 ; */ +/*description: page program delay enable.*/ +#define SPI_T_PP_ENA (BIT(31)) +#define SPI_T_PP_ENA_M (BIT(31)) +#define SPI_T_PP_ENA_V 0x1 +#define SPI_T_PP_ENA_S 31 +/* SPI_T_PP_SHIFT : R/W ;bitpos:[19:16] ;default: 4'd10 ; */ +/*description: page program delay time shift .*/ +#define SPI_T_PP_SHIFT 0x0000000F +#define SPI_T_PP_SHIFT_M ((SPI_T_PP_SHIFT_V)<<(SPI_T_PP_SHIFT_S)) +#define SPI_T_PP_SHIFT_V 0xF +#define SPI_T_PP_SHIFT_S 16 +/* SPI_T_PP_TIME : R/W ;bitpos:[11:0] ;default: 12'd80 ; */ +/*description: page program delay time by system clock.*/ +#define SPI_T_PP_TIME 0x00000FFF +#define SPI_T_PP_TIME_M ((SPI_T_PP_TIME_V)<<(SPI_T_PP_TIME_S)) +#define SPI_T_PP_TIME_V 0xFFF +#define SPI_T_PP_TIME_S 0 + +#define SPI_EXT1_REG(i) (REG_SPI_BASE(i) + 0xF4) +/* SPI_T_ERASE_ENA : R/W ;bitpos:[31] ;default: 1'b1 ; */ +/*description: erase flash delay enable.*/ +#define SPI_T_ERASE_ENA (BIT(31)) +#define SPI_T_ERASE_ENA_M (BIT(31)) +#define SPI_T_ERASE_ENA_V 0x1 +#define SPI_T_ERASE_ENA_S 31 +/* SPI_T_ERASE_SHIFT : R/W ;bitpos:[19:16] ;default: 4'd15 ; */ +/*description: erase flash delay time shift.*/ +#define SPI_T_ERASE_SHIFT 0x0000000F +#define SPI_T_ERASE_SHIFT_M ((SPI_T_ERASE_SHIFT_V)<<(SPI_T_ERASE_SHIFT_S)) +#define SPI_T_ERASE_SHIFT_V 0xF +#define SPI_T_ERASE_SHIFT_S 16 +/* SPI_T_ERASE_TIME : R/W ;bitpos:[11:0] ;default: 12'd0 ; */ +/*description: erase flash delay time by system clock.*/ +#define SPI_T_ERASE_TIME 0x00000FFF +#define SPI_T_ERASE_TIME_M ((SPI_T_ERASE_TIME_V)<<(SPI_T_ERASE_TIME_S)) +#define SPI_T_ERASE_TIME_V 0xFFF +#define SPI_T_ERASE_TIME_S 0 + +#define SPI_EXT2_REG(i) (REG_SPI_BASE(i) + 0xF8) +/* SPI_ST : RO ;bitpos:[2:0] ;default: 3'b0 ; */ +/*description: The status of spi state machine .*/ +#define SPI_ST 0x00000007 +#define SPI_ST_M ((SPI_ST_V)<<(SPI_ST_S)) +#define SPI_ST_V 0x7 +#define SPI_ST_S 0 + +#define SPI_EXT3_REG(i) (REG_SPI_BASE(i) + 0xFC) +/* SPI_INT_HOLD_ENA : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ +/*description: This register is for two SPI masters to share the same cs clock + and data signals. The bits of one SPI are set if the other SPI is busy the SPI will be hold. 1(3): hold at ¡°idle¡± phase 2: hold at ¡°prepare¡± phase.*/ +#define SPI_INT_HOLD_ENA 0x00000003 +#define SPI_INT_HOLD_ENA_M ((SPI_INT_HOLD_ENA_V)<<(SPI_INT_HOLD_ENA_S)) +#define SPI_INT_HOLD_ENA_V 0x3 +#define SPI_INT_HOLD_ENA_S 0 + +#define SPI_DMA_CONF_REG(i) (REG_SPI_BASE(i) + 0x100) +/* SPI_DMA_CONTINUE : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: spi dma continue tx/rx data.*/ +#define SPI_DMA_CONTINUE (BIT(16)) +#define SPI_DMA_CONTINUE_M (BIT(16)) +#define SPI_DMA_CONTINUE_V 0x1 +#define SPI_DMA_CONTINUE_S 16 +/* SPI_DMA_TX_STOP : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: spi dma write data stop when in continue tx/rx mode.*/ +#define SPI_DMA_TX_STOP (BIT(15)) +#define SPI_DMA_TX_STOP_M (BIT(15)) +#define SPI_DMA_TX_STOP_V 0x1 +#define SPI_DMA_TX_STOP_S 15 +/* SPI_DMA_RX_STOP : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: spi dma read data stop when in continue tx/rx mode.*/ +#define SPI_DMA_RX_STOP (BIT(14)) +#define SPI_DMA_RX_STOP_M (BIT(14)) +#define SPI_DMA_RX_STOP_V 0x1 +#define SPI_DMA_RX_STOP_S 14 +/* SPI_OUT_DATA_BURST_EN : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: spi dma read data from memory in burst mode.*/ +#define SPI_OUT_DATA_BURST_EN (BIT(12)) +#define SPI_OUT_DATA_BURST_EN_M (BIT(12)) +#define SPI_OUT_DATA_BURST_EN_V 0x1 +#define SPI_OUT_DATA_BURST_EN_S 12 +/* SPI_INDSCR_BURST_EN : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: read descriptor use burst mode when write data to memory.*/ +#define SPI_INDSCR_BURST_EN (BIT(11)) +#define SPI_INDSCR_BURST_EN_M (BIT(11)) +#define SPI_INDSCR_BURST_EN_V 0x1 +#define SPI_INDSCR_BURST_EN_S 11 +/* SPI_OUTDSCR_BURST_EN : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: read descriptor use burst mode when read data for memory.*/ +#define SPI_OUTDSCR_BURST_EN (BIT(10)) +#define SPI_OUTDSCR_BURST_EN_M (BIT(10)) +#define SPI_OUTDSCR_BURST_EN_V 0x1 +#define SPI_OUTDSCR_BURST_EN_S 10 +/* SPI_OUT_EOF_MODE : R/W ;bitpos:[9] ;default: 1'b1 ; */ +/*description: out eof flag generation mode . 1: when dma pop all data from + fifo 0:when ahb push all data to fifo.*/ +#define SPI_OUT_EOF_MODE (BIT(9)) +#define SPI_OUT_EOF_MODE_M (BIT(9)) +#define SPI_OUT_EOF_MODE_V 0x1 +#define SPI_OUT_EOF_MODE_S 9 +/* SPI_OUT_AUTO_WRBACK : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: when the link is empty jump to next automatically.*/ +#define SPI_OUT_AUTO_WRBACK (BIT(8)) +#define SPI_OUT_AUTO_WRBACK_M (BIT(8)) +#define SPI_OUT_AUTO_WRBACK_V 0x1 +#define SPI_OUT_AUTO_WRBACK_S 8 +/* SPI_OUT_LOOP_TEST : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set bit to test out link.*/ +#define SPI_OUT_LOOP_TEST (BIT(7)) +#define SPI_OUT_LOOP_TEST_M (BIT(7)) +#define SPI_OUT_LOOP_TEST_V 0x1 +#define SPI_OUT_LOOP_TEST_S 7 +/* SPI_IN_LOOP_TEST : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set bit to test in link.*/ +#define SPI_IN_LOOP_TEST (BIT(6)) +#define SPI_IN_LOOP_TEST_M (BIT(6)) +#define SPI_IN_LOOP_TEST_V 0x1 +#define SPI_IN_LOOP_TEST_S 6 +/* SPI_AHBM_RST : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: reset spi dma ahb master.*/ +#define SPI_AHBM_RST (BIT(5)) +#define SPI_AHBM_RST_M (BIT(5)) +#define SPI_AHBM_RST_V 0x1 +#define SPI_AHBM_RST_S 5 +/* SPI_AHBM_FIFO_RST : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: reset spi dma ahb master fifo pointer.*/ +#define SPI_AHBM_FIFO_RST (BIT(4)) +#define SPI_AHBM_FIFO_RST_M (BIT(4)) +#define SPI_AHBM_FIFO_RST_V 0x1 +#define SPI_AHBM_FIFO_RST_S 4 +/* SPI_OUT_RST : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The bit is used to reset out dma fsm and out data fifo pointer.*/ +#define SPI_OUT_RST (BIT(3)) +#define SPI_OUT_RST_M (BIT(3)) +#define SPI_OUT_RST_V 0x1 +#define SPI_OUT_RST_S 3 +/* SPI_IN_RST : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The bit is used to reset in dma fsm and in data fifo pointer.*/ +#define SPI_IN_RST (BIT(2)) +#define SPI_IN_RST_M (BIT(2)) +#define SPI_IN_RST_V 0x1 +#define SPI_IN_RST_S 2 + +#define SPI_DMA_OUT_LINK_REG(i) (REG_SPI_BASE(i) + 0x104) +/* SPI_OUTLINK_RESTART : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: Set the bit to mount on new outlink descriptors.*/ +#define SPI_OUTLINK_RESTART (BIT(30)) +#define SPI_OUTLINK_RESTART_M (BIT(30)) +#define SPI_OUTLINK_RESTART_V 0x1 +#define SPI_OUTLINK_RESTART_S 30 +/* SPI_OUTLINK_START : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: Set the bit to start to use outlink descriptor.*/ +#define SPI_OUTLINK_START (BIT(29)) +#define SPI_OUTLINK_START_M (BIT(29)) +#define SPI_OUTLINK_START_V 0x1 +#define SPI_OUTLINK_START_S 29 +/* SPI_OUTLINK_STOP : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: Set the bit to stop to use outlink descriptor.*/ +#define SPI_OUTLINK_STOP (BIT(28)) +#define SPI_OUTLINK_STOP_M (BIT(28)) +#define SPI_OUTLINK_STOP_V 0x1 +#define SPI_OUTLINK_STOP_S 28 +/* SPI_OUTLINK_ADDR : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The address of the first outlink descriptor.*/ +#define SPI_OUTLINK_ADDR 0x000FFFFF +#define SPI_OUTLINK_ADDR_M ((SPI_OUTLINK_ADDR_V)<<(SPI_OUTLINK_ADDR_S)) +#define SPI_OUTLINK_ADDR_V 0xFFFFF +#define SPI_OUTLINK_ADDR_S 0 + +#define SPI_DMA_IN_LINK_REG(i) (REG_SPI_BASE(i) + 0x108) +/* SPI_INLINK_RESTART : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: Set the bit to mount on new inlink descriptors.*/ +#define SPI_INLINK_RESTART (BIT(30)) +#define SPI_INLINK_RESTART_M (BIT(30)) +#define SPI_INLINK_RESTART_V 0x1 +#define SPI_INLINK_RESTART_S 30 +/* SPI_INLINK_START : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: Set the bit to start to use inlink descriptor.*/ +#define SPI_INLINK_START (BIT(29)) +#define SPI_INLINK_START_M (BIT(29)) +#define SPI_INLINK_START_V 0x1 +#define SPI_INLINK_START_S 29 +/* SPI_INLINK_STOP : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: Set the bit to stop to use inlink descriptor.*/ +#define SPI_INLINK_STOP (BIT(28)) +#define SPI_INLINK_STOP_M (BIT(28)) +#define SPI_INLINK_STOP_V 0x1 +#define SPI_INLINK_STOP_S 28 +/* SPI_INLINK_AUTO_RET : R/W ;bitpos:[20] ;default: 1'b0 ; */ +/*description: when the bit is set inlink descriptor returns to the next descriptor + while a packet is wrong*/ +#define SPI_INLINK_AUTO_RET (BIT(20)) +#define SPI_INLINK_AUTO_RET_M (BIT(20)) +#define SPI_INLINK_AUTO_RET_V 0x1 +#define SPI_INLINK_AUTO_RET_S 20 +/* SPI_INLINK_ADDR : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: The address of the first inlink descriptor.*/ +#define SPI_INLINK_ADDR 0x000FFFFF +#define SPI_INLINK_ADDR_M ((SPI_INLINK_ADDR_V)<<(SPI_INLINK_ADDR_S)) +#define SPI_INLINK_ADDR_V 0xFFFFF +#define SPI_INLINK_ADDR_S 0 + +#define SPI_DMA_STATUS_REG(i) (REG_SPI_BASE(i) + 0x10C) +/* SPI_DMA_TX_EN : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: spi dma write data status bit.*/ +#define SPI_DMA_TX_EN (BIT(1)) +#define SPI_DMA_TX_EN_M (BIT(1)) +#define SPI_DMA_TX_EN_V 0x1 +#define SPI_DMA_TX_EN_S 1 +/* SPI_DMA_RX_EN : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: spi dma read data status bit.*/ +#define SPI_DMA_RX_EN (BIT(0)) +#define SPI_DMA_RX_EN_M (BIT(0)) +#define SPI_DMA_RX_EN_V 0x1 +#define SPI_DMA_RX_EN_S 0 + +#define SPI_DMA_INT_ENA_REG(i) (REG_SPI_BASE(i) + 0x110) +/* SPI_OUT_TOTAL_EOF_INT_ENA : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The enable bit for sending all the packets to host done.*/ +#define SPI_OUT_TOTAL_EOF_INT_ENA (BIT(8)) +#define SPI_OUT_TOTAL_EOF_INT_ENA_M (BIT(8)) +#define SPI_OUT_TOTAL_EOF_INT_ENA_V 0x1 +#define SPI_OUT_TOTAL_EOF_INT_ENA_S 8 +/* SPI_OUT_EOF_INT_ENA : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The enable bit for sending a packet to host done.*/ +#define SPI_OUT_EOF_INT_ENA (BIT(7)) +#define SPI_OUT_EOF_INT_ENA_M (BIT(7)) +#define SPI_OUT_EOF_INT_ENA_V 0x1 +#define SPI_OUT_EOF_INT_ENA_S 7 +/* SPI_OUT_DONE_INT_ENA : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The enable bit for completing usage of a outlink descriptor .*/ +#define SPI_OUT_DONE_INT_ENA (BIT(6)) +#define SPI_OUT_DONE_INT_ENA_M (BIT(6)) +#define SPI_OUT_DONE_INT_ENA_V 0x1 +#define SPI_OUT_DONE_INT_ENA_S 6 +/* SPI_IN_SUC_EOF_INT_ENA : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The enable bit for completing receiving all the packets from host.*/ +#define SPI_IN_SUC_EOF_INT_ENA (BIT(5)) +#define SPI_IN_SUC_EOF_INT_ENA_M (BIT(5)) +#define SPI_IN_SUC_EOF_INT_ENA_V 0x1 +#define SPI_IN_SUC_EOF_INT_ENA_S 5 +/* SPI_IN_ERR_EOF_INT_ENA : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The enable bit for receiving error.*/ +#define SPI_IN_ERR_EOF_INT_ENA (BIT(4)) +#define SPI_IN_ERR_EOF_INT_ENA_M (BIT(4)) +#define SPI_IN_ERR_EOF_INT_ENA_V 0x1 +#define SPI_IN_ERR_EOF_INT_ENA_S 4 +/* SPI_IN_DONE_INT_ENA : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The enable bit for completing usage of a inlink descriptor.*/ +#define SPI_IN_DONE_INT_ENA (BIT(3)) +#define SPI_IN_DONE_INT_ENA_M (BIT(3)) +#define SPI_IN_DONE_INT_ENA_V 0x1 +#define SPI_IN_DONE_INT_ENA_S 3 +/* SPI_INLINK_DSCR_ERROR_INT_ENA : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The enable bit for inlink descriptor error.*/ +#define SPI_INLINK_DSCR_ERROR_INT_ENA (BIT(2)) +#define SPI_INLINK_DSCR_ERROR_INT_ENA_M (BIT(2)) +#define SPI_INLINK_DSCR_ERROR_INT_ENA_V 0x1 +#define SPI_INLINK_DSCR_ERROR_INT_ENA_S 2 +/* SPI_OUTLINK_DSCR_ERROR_INT_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The enable bit for outlink descriptor error.*/ +#define SPI_OUTLINK_DSCR_ERROR_INT_ENA (BIT(1)) +#define SPI_OUTLINK_DSCR_ERROR_INT_ENA_M (BIT(1)) +#define SPI_OUTLINK_DSCR_ERROR_INT_ENA_V 0x1 +#define SPI_OUTLINK_DSCR_ERROR_INT_ENA_S 1 +/* SPI_INLINK_DSCR_EMPTY_INT_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The enable bit for lack of enough inlink descriptors.*/ +#define SPI_INLINK_DSCR_EMPTY_INT_ENA (BIT(0)) +#define SPI_INLINK_DSCR_EMPTY_INT_ENA_M (BIT(0)) +#define SPI_INLINK_DSCR_EMPTY_INT_ENA_V 0x1 +#define SPI_INLINK_DSCR_EMPTY_INT_ENA_S 0 + +#define SPI_DMA_INT_RAW_REG(i) (REG_SPI_BASE(i) + 0x114) +/* SPI_OUT_TOTAL_EOF_INT_RAW : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The raw bit for sending all the packets to host done.*/ +#define SPI_OUT_TOTAL_EOF_INT_RAW (BIT(8)) +#define SPI_OUT_TOTAL_EOF_INT_RAW_M (BIT(8)) +#define SPI_OUT_TOTAL_EOF_INT_RAW_V 0x1 +#define SPI_OUT_TOTAL_EOF_INT_RAW_S 8 +/* SPI_OUT_EOF_INT_RAW : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The raw bit for sending a packet to host done.*/ +#define SPI_OUT_EOF_INT_RAW (BIT(7)) +#define SPI_OUT_EOF_INT_RAW_M (BIT(7)) +#define SPI_OUT_EOF_INT_RAW_V 0x1 +#define SPI_OUT_EOF_INT_RAW_S 7 +/* SPI_OUT_DONE_INT_RAW : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The raw bit for completing usage of a outlink descriptor.*/ +#define SPI_OUT_DONE_INT_RAW (BIT(6)) +#define SPI_OUT_DONE_INT_RAW_M (BIT(6)) +#define SPI_OUT_DONE_INT_RAW_V 0x1 +#define SPI_OUT_DONE_INT_RAW_S 6 +/* SPI_IN_SUC_EOF_INT_RAW : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The raw bit for completing receiving all the packets from host.*/ +#define SPI_IN_SUC_EOF_INT_RAW (BIT(5)) +#define SPI_IN_SUC_EOF_INT_RAW_M (BIT(5)) +#define SPI_IN_SUC_EOF_INT_RAW_V 0x1 +#define SPI_IN_SUC_EOF_INT_RAW_S 5 +/* SPI_IN_ERR_EOF_INT_RAW : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The raw bit for receiving error.*/ +#define SPI_IN_ERR_EOF_INT_RAW (BIT(4)) +#define SPI_IN_ERR_EOF_INT_RAW_M (BIT(4)) +#define SPI_IN_ERR_EOF_INT_RAW_V 0x1 +#define SPI_IN_ERR_EOF_INT_RAW_S 4 +/* SPI_IN_DONE_INT_RAW : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The raw bit for completing usage of a inlink descriptor.*/ +#define SPI_IN_DONE_INT_RAW (BIT(3)) +#define SPI_IN_DONE_INT_RAW_M (BIT(3)) +#define SPI_IN_DONE_INT_RAW_V 0x1 +#define SPI_IN_DONE_INT_RAW_S 3 +/* SPI_INLINK_DSCR_ERROR_INT_RAW : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The raw bit for inlink descriptor error.*/ +#define SPI_INLINK_DSCR_ERROR_INT_RAW (BIT(2)) +#define SPI_INLINK_DSCR_ERROR_INT_RAW_M (BIT(2)) +#define SPI_INLINK_DSCR_ERROR_INT_RAW_V 0x1 +#define SPI_INLINK_DSCR_ERROR_INT_RAW_S 2 +/* SPI_OUTLINK_DSCR_ERROR_INT_RAW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The raw bit for outlink descriptor error.*/ +#define SPI_OUTLINK_DSCR_ERROR_INT_RAW (BIT(1)) +#define SPI_OUTLINK_DSCR_ERROR_INT_RAW_M (BIT(1)) +#define SPI_OUTLINK_DSCR_ERROR_INT_RAW_V 0x1 +#define SPI_OUTLINK_DSCR_ERROR_INT_RAW_S 1 +/* SPI_INLINK_DSCR_EMPTY_INT_RAW : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The raw bit for lack of enough inlink descriptors.*/ +#define SPI_INLINK_DSCR_EMPTY_INT_RAW (BIT(0)) +#define SPI_INLINK_DSCR_EMPTY_INT_RAW_M (BIT(0)) +#define SPI_INLINK_DSCR_EMPTY_INT_RAW_V 0x1 +#define SPI_INLINK_DSCR_EMPTY_INT_RAW_S 0 + +#define SPI_DMA_INT_ST_REG(i) (REG_SPI_BASE(i) + 0x118) +/* SPI_OUT_TOTAL_EOF_INT_ST : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The status bit for sending all the packets to host done.*/ +#define SPI_OUT_TOTAL_EOF_INT_ST (BIT(8)) +#define SPI_OUT_TOTAL_EOF_INT_ST_M (BIT(8)) +#define SPI_OUT_TOTAL_EOF_INT_ST_V 0x1 +#define SPI_OUT_TOTAL_EOF_INT_ST_S 8 +/* SPI_OUT_EOF_INT_ST : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The status bit for sending a packet to host done.*/ +#define SPI_OUT_EOF_INT_ST (BIT(7)) +#define SPI_OUT_EOF_INT_ST_M (BIT(7)) +#define SPI_OUT_EOF_INT_ST_V 0x1 +#define SPI_OUT_EOF_INT_ST_S 7 +/* SPI_OUT_DONE_INT_ST : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The status bit for completing usage of a outlink descriptor.*/ +#define SPI_OUT_DONE_INT_ST (BIT(6)) +#define SPI_OUT_DONE_INT_ST_M (BIT(6)) +#define SPI_OUT_DONE_INT_ST_V 0x1 +#define SPI_OUT_DONE_INT_ST_S 6 +/* SPI_IN_SUC_EOF_INT_ST : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The status bit for completing receiving all the packets from host.*/ +#define SPI_IN_SUC_EOF_INT_ST (BIT(5)) +#define SPI_IN_SUC_EOF_INT_ST_M (BIT(5)) +#define SPI_IN_SUC_EOF_INT_ST_V 0x1 +#define SPI_IN_SUC_EOF_INT_ST_S 5 +/* SPI_IN_ERR_EOF_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The status bit for receiving error.*/ +#define SPI_IN_ERR_EOF_INT_ST (BIT(4)) +#define SPI_IN_ERR_EOF_INT_ST_M (BIT(4)) +#define SPI_IN_ERR_EOF_INT_ST_V 0x1 +#define SPI_IN_ERR_EOF_INT_ST_S 4 +/* SPI_IN_DONE_INT_ST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The status bit for completing usage of a inlink descriptor.*/ +#define SPI_IN_DONE_INT_ST (BIT(3)) +#define SPI_IN_DONE_INT_ST_M (BIT(3)) +#define SPI_IN_DONE_INT_ST_V 0x1 +#define SPI_IN_DONE_INT_ST_S 3 +/* SPI_INLINK_DSCR_ERROR_INT_ST : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The status bit for inlink descriptor error.*/ +#define SPI_INLINK_DSCR_ERROR_INT_ST (BIT(2)) +#define SPI_INLINK_DSCR_ERROR_INT_ST_M (BIT(2)) +#define SPI_INLINK_DSCR_ERROR_INT_ST_V 0x1 +#define SPI_INLINK_DSCR_ERROR_INT_ST_S 2 +/* SPI_OUTLINK_DSCR_ERROR_INT_ST : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The status bit for outlink descriptor error.*/ +#define SPI_OUTLINK_DSCR_ERROR_INT_ST (BIT(1)) +#define SPI_OUTLINK_DSCR_ERROR_INT_ST_M (BIT(1)) +#define SPI_OUTLINK_DSCR_ERROR_INT_ST_V 0x1 +#define SPI_OUTLINK_DSCR_ERROR_INT_ST_S 1 +/* SPI_INLINK_DSCR_EMPTY_INT_ST : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The status bit for lack of enough inlink descriptors.*/ +#define SPI_INLINK_DSCR_EMPTY_INT_ST (BIT(0)) +#define SPI_INLINK_DSCR_EMPTY_INT_ST_M (BIT(0)) +#define SPI_INLINK_DSCR_EMPTY_INT_ST_V 0x1 +#define SPI_INLINK_DSCR_EMPTY_INT_ST_S 0 + +#define SPI_DMA_INT_CLR_REG(i) (REG_SPI_BASE(i) + 0x11C) +/* SPI_OUT_TOTAL_EOF_INT_CLR : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: The clear bit for sending all the packets to host done.*/ +#define SPI_OUT_TOTAL_EOF_INT_CLR (BIT(8)) +#define SPI_OUT_TOTAL_EOF_INT_CLR_M (BIT(8)) +#define SPI_OUT_TOTAL_EOF_INT_CLR_V 0x1 +#define SPI_OUT_TOTAL_EOF_INT_CLR_S 8 +/* SPI_OUT_EOF_INT_CLR : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: The clear bit for sending a packet to host done.*/ +#define SPI_OUT_EOF_INT_CLR (BIT(7)) +#define SPI_OUT_EOF_INT_CLR_M (BIT(7)) +#define SPI_OUT_EOF_INT_CLR_V 0x1 +#define SPI_OUT_EOF_INT_CLR_S 7 +/* SPI_OUT_DONE_INT_CLR : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: The clear bit for completing usage of a outlink descriptor.*/ +#define SPI_OUT_DONE_INT_CLR (BIT(6)) +#define SPI_OUT_DONE_INT_CLR_M (BIT(6)) +#define SPI_OUT_DONE_INT_CLR_V 0x1 +#define SPI_OUT_DONE_INT_CLR_S 6 +/* SPI_IN_SUC_EOF_INT_CLR : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: The clear bit for completing receiving all the packets from host.*/ +#define SPI_IN_SUC_EOF_INT_CLR (BIT(5)) +#define SPI_IN_SUC_EOF_INT_CLR_M (BIT(5)) +#define SPI_IN_SUC_EOF_INT_CLR_V 0x1 +#define SPI_IN_SUC_EOF_INT_CLR_S 5 +/* SPI_IN_ERR_EOF_INT_CLR : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: The clear bit for receiving error.*/ +#define SPI_IN_ERR_EOF_INT_CLR (BIT(4)) +#define SPI_IN_ERR_EOF_INT_CLR_M (BIT(4)) +#define SPI_IN_ERR_EOF_INT_CLR_V 0x1 +#define SPI_IN_ERR_EOF_INT_CLR_S 4 +/* SPI_IN_DONE_INT_CLR : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: The clear bit for completing usage of a inlink descriptor.*/ +#define SPI_IN_DONE_INT_CLR (BIT(3)) +#define SPI_IN_DONE_INT_CLR_M (BIT(3)) +#define SPI_IN_DONE_INT_CLR_V 0x1 +#define SPI_IN_DONE_INT_CLR_S 3 +/* SPI_INLINK_DSCR_ERROR_INT_CLR : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: The clear bit for inlink descriptor error.*/ +#define SPI_INLINK_DSCR_ERROR_INT_CLR (BIT(2)) +#define SPI_INLINK_DSCR_ERROR_INT_CLR_M (BIT(2)) +#define SPI_INLINK_DSCR_ERROR_INT_CLR_V 0x1 +#define SPI_INLINK_DSCR_ERROR_INT_CLR_S 2 +/* SPI_OUTLINK_DSCR_ERROR_INT_CLR : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: The clear bit for outlink descriptor error.*/ +#define SPI_OUTLINK_DSCR_ERROR_INT_CLR (BIT(1)) +#define SPI_OUTLINK_DSCR_ERROR_INT_CLR_M (BIT(1)) +#define SPI_OUTLINK_DSCR_ERROR_INT_CLR_V 0x1 +#define SPI_OUTLINK_DSCR_ERROR_INT_CLR_S 1 +/* SPI_INLINK_DSCR_EMPTY_INT_CLR : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: The clear bit for lack of enough inlink descriptors.*/ +#define SPI_INLINK_DSCR_EMPTY_INT_CLR (BIT(0)) +#define SPI_INLINK_DSCR_EMPTY_INT_CLR_M (BIT(0)) +#define SPI_INLINK_DSCR_EMPTY_INT_CLR_V 0x1 +#define SPI_INLINK_DSCR_EMPTY_INT_CLR_S 0 + +#define SPI_IN_ERR_EOF_DES_ADDR_REG(i) (REG_SPI_BASE(i) + 0x120) +/* SPI_DMA_IN_ERR_EOF_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The inlink descriptor address when spi dma produce receiving error.*/ +#define SPI_DMA_IN_ERR_EOF_DES_ADDR 0xFFFFFFFF +#define SPI_DMA_IN_ERR_EOF_DES_ADDR_M ((SPI_DMA_IN_ERR_EOF_DES_ADDR_V)<<(SPI_DMA_IN_ERR_EOF_DES_ADDR_S)) +#define SPI_DMA_IN_ERR_EOF_DES_ADDR_V 0xFFFFFFFF +#define SPI_DMA_IN_ERR_EOF_DES_ADDR_S 0 + +#define SPI_IN_SUC_EOF_DES_ADDR_REG(i) (REG_SPI_BASE(i) + 0x124) +/* SPI_DMA_IN_SUC_EOF_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The last inlink descriptor address when spi dma produce from_suc_eof.*/ +#define SPI_DMA_IN_SUC_EOF_DES_ADDR 0xFFFFFFFF +#define SPI_DMA_IN_SUC_EOF_DES_ADDR_M ((SPI_DMA_IN_SUC_EOF_DES_ADDR_V)<<(SPI_DMA_IN_SUC_EOF_DES_ADDR_S)) +#define SPI_DMA_IN_SUC_EOF_DES_ADDR_V 0xFFFFFFFF +#define SPI_DMA_IN_SUC_EOF_DES_ADDR_S 0 + +#define SPI_INLINK_DSCR_REG(i) (REG_SPI_BASE(i) + 0x128) +/* SPI_DMA_INLINK_DSCR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of current in descriptor pointer.*/ +#define SPI_DMA_INLINK_DSCR 0xFFFFFFFF +#define SPI_DMA_INLINK_DSCR_M ((SPI_DMA_INLINK_DSCR_V)<<(SPI_DMA_INLINK_DSCR_S)) +#define SPI_DMA_INLINK_DSCR_V 0xFFFFFFFF +#define SPI_DMA_INLINK_DSCR_S 0 + +#define SPI_INLINK_DSCR_BF0_REG(i) (REG_SPI_BASE(i) + 0x12C) +/* SPI_DMA_INLINK_DSCR_BF0 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of next in descriptor pointer.*/ +#define SPI_DMA_INLINK_DSCR_BF0 0xFFFFFFFF +#define SPI_DMA_INLINK_DSCR_BF0_M ((SPI_DMA_INLINK_DSCR_BF0_V)<<(SPI_DMA_INLINK_DSCR_BF0_S)) +#define SPI_DMA_INLINK_DSCR_BF0_V 0xFFFFFFFF +#define SPI_DMA_INLINK_DSCR_BF0_S 0 + +#define SPI_INLINK_DSCR_BF1_REG(i) (REG_SPI_BASE(i) + 0x130) +/* SPI_DMA_INLINK_DSCR_BF1 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of current in descriptor data buffer pointer.*/ +#define SPI_DMA_INLINK_DSCR_BF1 0xFFFFFFFF +#define SPI_DMA_INLINK_DSCR_BF1_M ((SPI_DMA_INLINK_DSCR_BF1_V)<<(SPI_DMA_INLINK_DSCR_BF1_S)) +#define SPI_DMA_INLINK_DSCR_BF1_V 0xFFFFFFFF +#define SPI_DMA_INLINK_DSCR_BF1_S 0 + +#define SPI_OUT_EOF_BFR_DES_ADDR_REG(i) (REG_SPI_BASE(i) + 0x134) +/* SPI_DMA_OUT_EOF_BFR_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The address of buffer relative to the outlink descriptor that produce eof.*/ +#define SPI_DMA_OUT_EOF_BFR_DES_ADDR 0xFFFFFFFF +#define SPI_DMA_OUT_EOF_BFR_DES_ADDR_M ((SPI_DMA_OUT_EOF_BFR_DES_ADDR_V)<<(SPI_DMA_OUT_EOF_BFR_DES_ADDR_S)) +#define SPI_DMA_OUT_EOF_BFR_DES_ADDR_V 0xFFFFFFFF +#define SPI_DMA_OUT_EOF_BFR_DES_ADDR_S 0 + +#define SPI_OUT_EOF_DES_ADDR_REG(i) (REG_SPI_BASE(i) + 0x138) +/* SPI_DMA_OUT_EOF_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The last outlink descriptor address when spi dma produce to_eof.*/ +#define SPI_DMA_OUT_EOF_DES_ADDR 0xFFFFFFFF +#define SPI_DMA_OUT_EOF_DES_ADDR_M ((SPI_DMA_OUT_EOF_DES_ADDR_V)<<(SPI_DMA_OUT_EOF_DES_ADDR_S)) +#define SPI_DMA_OUT_EOF_DES_ADDR_V 0xFFFFFFFF +#define SPI_DMA_OUT_EOF_DES_ADDR_S 0 + +#define SPI_OUTLINK_DSCR_REG(i) (REG_SPI_BASE(i) + 0x13C) +/* SPI_DMA_OUTLINK_DSCR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of current out descriptor pointer.*/ +#define SPI_DMA_OUTLINK_DSCR 0xFFFFFFFF +#define SPI_DMA_OUTLINK_DSCR_M ((SPI_DMA_OUTLINK_DSCR_V)<<(SPI_DMA_OUTLINK_DSCR_S)) +#define SPI_DMA_OUTLINK_DSCR_V 0xFFFFFFFF +#define SPI_DMA_OUTLINK_DSCR_S 0 + +#define SPI_OUTLINK_DSCR_BF0_REG(i) (REG_SPI_BASE(i) + 0x140) +/* SPI_DMA_OUTLINK_DSCR_BF0 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of next out descriptor pointer.*/ +#define SPI_DMA_OUTLINK_DSCR_BF0 0xFFFFFFFF +#define SPI_DMA_OUTLINK_DSCR_BF0_M ((SPI_DMA_OUTLINK_DSCR_BF0_V)<<(SPI_DMA_OUTLINK_DSCR_BF0_S)) +#define SPI_DMA_OUTLINK_DSCR_BF0_V 0xFFFFFFFF +#define SPI_DMA_OUTLINK_DSCR_BF0_S 0 + +#define SPI_OUTLINK_DSCR_BF1_REG(i) (REG_SPI_BASE(i) + 0x144) +/* SPI_DMA_OUTLINK_DSCR_BF1 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of current out descriptor data buffer pointer.*/ +#define SPI_DMA_OUTLINK_DSCR_BF1 0xFFFFFFFF +#define SPI_DMA_OUTLINK_DSCR_BF1_M ((SPI_DMA_OUTLINK_DSCR_BF1_V)<<(SPI_DMA_OUTLINK_DSCR_BF1_S)) +#define SPI_DMA_OUTLINK_DSCR_BF1_V 0xFFFFFFFF +#define SPI_DMA_OUTLINK_DSCR_BF1_S 0 + +#define SPI_DMA_RSTATUS_REG(i) (REG_SPI_BASE(i) + 0x148) +/* SPI_DMA_OUT_STATUS : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: spi dma read data from memory status.*/ +#define SPI_DMA_OUT_STATUS 0xFFFFFFFF +#define SPI_DMA_OUT_STATUS_M ((SPI_DMA_OUT_STATUS_V)<<(SPI_DMA_OUT_STATUS_S)) +#define SPI_DMA_OUT_STATUS_V 0xFFFFFFFF +#define SPI_DMA_OUT_STATUS_S 0 + +#define SPI_DMA_TSTATUS_REG(i) (REG_SPI_BASE(i) + 0x14C) +/* SPI_DMA_IN_STATUS : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: spi dma write data to memory status.*/ +#define SPI_DMA_IN_STATUS 0xFFFFFFFF +#define SPI_DMA_IN_STATUS_M ((SPI_DMA_IN_STATUS_V)<<(SPI_DMA_IN_STATUS_S)) +#define SPI_DMA_IN_STATUS_V 0xFFFFFFFF +#define SPI_DMA_IN_STATUS_S 0 + +#define SPI_DATE_REG(i) (REG_SPI_BASE(i) + 0x3FC) +/* SPI_DATE : RO ;bitpos:[27:0] ;default: 32'h1604270 ; */ +/*description: SPI register version.*/ +#define SPI_DATE 0x0FFFFFFF +#define SPI_DATE_M ((SPI_DATE_V)<<(SPI_DATE_S)) +#define SPI_DATE_V 0xFFFFFFF +#define SPI_DATE_S 0 + + + + +#endif /*__SPI_REG_H__ */ + + diff --git a/tools/sdk/include/esp32/soc/spi_struct.h b/tools/sdk/include/esp32/soc/spi_struct.h new file mode 100644 index 00000000..c7aa29a7 --- /dev/null +++ b/tools/sdk/include/esp32/soc/spi_struct.h @@ -0,0 +1,677 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_SPI_STRUCT_H_ +#define _SOC_SPI_STRUCT_H_ +typedef volatile struct { + union { + struct { + uint32_t reserved0: 16; /*reserved*/ + uint32_t flash_per: 1; /*program erase resume bit program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t flash_pes: 1; /*program erase suspend bit program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t usr: 1; /*User define command enable. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t flash_hpm: 1; /*Drive Flash into high performance mode. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t flash_res: 1; /*This bit combined with reg_resandres bit releases Flash from the power-down state or high performance mode and obtains the devices ID. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t flash_dp: 1; /*Drive Flash into power down. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t flash_ce: 1; /*Chip erase enable. Chip erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t flash_be: 1; /*Block erase enable(32KB) . Block erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t flash_se: 1; /*Sector erase enable(4KB). Sector erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t flash_pp: 1; /*Page program enable(1 byte ~256 bytes data to be programmed). Page program operation will be triggered when the bit is set. The bit will be cleared once the operation done .1: enable 0: disable.*/ + uint32_t flash_wrsr: 1; /*Write status register enable. Write status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t flash_rdsr: 1; /*Read status register-1. Read status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ + uint32_t flash_rdid: 1; /*Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ + uint32_t flash_wrdi: 1; /*Write flash disable. Write disable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ + uint32_t flash_wren: 1; /*Write flash enable. Write enable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ + uint32_t flash_read: 1; /*Read flash enable. Read flash operation will be triggered when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ + }; + uint32_t val; + } cmd; + union { + struct { + uint32_t reserved : 8; + uint32_t usr_addr_value:24; /*[31:8]:address to slave [7:0]:Reserved.*/ + }; + uint32_t val; + } addr; + union { + struct { + uint32_t reserved0: 10; /*reserved*/ + uint32_t fcs_crc_en: 1; /*For SPI1 initialize crc32 module before writing encrypted data to flash. Active low.*/ + uint32_t tx_crc_en: 1; /*For SPI1 enable crc32 when writing encrypted data to flash. 1: enable 0:disable*/ + uint32_t wait_flash_idle_en: 1; /*wait flash idle when program flash or erase flash. 1: enable 0: disable.*/ + uint32_t fastrd_mode: 1; /*This bit enable the bits: spi_fread_qio spi_fread_dio spi_fread_qout and spi_fread_dout. 1: enable 0: disable.*/ + uint32_t fread_dual: 1; /*In the read operations read-data phase apply 2 signals. 1: enable 0: disable.*/ + uint32_t resandres: 1; /*The Device ID is read out to SPI_RD_STATUS register, this bit combine with spi_flash_res bit. 1: enable 0: disable.*/ + uint32_t reserved16: 4; /*reserved*/ + uint32_t fread_quad: 1; /*In the read operations read-data phase apply 4 signals. 1: enable 0: disable.*/ + uint32_t wp: 1; /*Write protect signal output when SPI is idle. 1: output high 0: output low.*/ + uint32_t wrsr_2b: 1; /*two bytes data will be written to status register when it is set. 1: enable 0: disable.*/ + uint32_t fread_dio: 1; /*In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.*/ + uint32_t fread_qio: 1; /*In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.*/ + uint32_t rd_bit_order: 1; /*In read-data (MISO) phase 1: LSB first 0: MSB first*/ + uint32_t wr_bit_order: 1; /*In command address write-data (MOSI) phases 1: LSB firs 0: MSB first*/ + uint32_t reserved27: 5; /*reserved*/ + }; + uint32_t val; + } ctrl; + union { + struct { + uint32_t reserved0: 16; /*reserved*/ + uint32_t cs_hold_delay_res:12; /*Delay cycles of resume Flash when resume Flash is enable by spi clock.*/ + uint32_t cs_hold_delay: 4; /*SPI cs signal is delayed by spi clock cycles*/ + }; + uint32_t val; + } ctrl1; + union { + struct { + uint32_t status: 16; /*In the slave mode, it is the status for master to read out.*/ + uint32_t wb_mode: 8; /*Mode bits in the flash fast read mode, it is combined with spi_fastrd_mode bit.*/ + uint32_t status_ext: 8; /*In the slave mode,it is the status for master to read out.*/ + }; + uint32_t val; + } rd_status; + union { + struct { + uint32_t setup_time: 4; /*(cycles-1) of ,prepare, phase by spi clock, this bits combined with spi_cs_setup bit.*/ + uint32_t hold_time: 4; /*delay cycles of cs pin by spi clock, this bits combined with spi_cs_hold bit.*/ + uint32_t ck_out_low_mode: 4; /*modify spi clock duty ratio when the value is lager than 8, the bits are combined with spi_clkcnt_N bits and spi_clkcnt_L bits.*/ + uint32_t ck_out_high_mode: 4; /*modify spi clock duty ratio when the value is lager than 8, the bits are combined with spi_clkcnt_N bits and spi_clkcnt_H bits.*/ + uint32_t miso_delay_mode: 2; /*MISO signals are delayed by spi_clk. 0: zero 1: if spi_ck_out_edge or spi_ck_i_edge is set 1 delayed by half cycle else delayed by one cycle 2: if spi_ck_out_edge or spi_ck_i_edge is set 1 delayed by one cycle else delayed by half cycle 3: delayed one cycle*/ + uint32_t miso_delay_num: 3; /*MISO signals are delayed by system clock cycles*/ + uint32_t mosi_delay_mode: 2; /*MOSI signals are delayed by spi_clk. 0: zero 1: if spi_ck_out_edge or spi_ck_i_edge is set 1 delayed by half cycle else delayed by one cycle 2: if spi_ck_out_edge or spi_ck_i_edge is set 1 delayed by one cycle else delayed by half cycle 3: delayed one cycle*/ + uint32_t mosi_delay_num: 3; /*MOSI signals are delayed by system clock cycles*/ + uint32_t cs_delay_mode: 2; /*spi_cs signal is delayed by spi_clk . 0: zero 1: if spi_ck_out_edge or spi_ck_i_edge is set 1 delayed by half cycle else delayed by one cycle 2: if spi_ck_out_edge or spi_ck_i_edge is set 1 delayed by one cycle else delayed by half cycle 3: delayed one cycle*/ + uint32_t cs_delay_num: 4; /*spi_cs signal is delayed by system clock cycles*/ + }; + uint32_t val; + } ctrl2; + union { + struct { + uint32_t clkcnt_l: 6; /*In the master mode it must be equal to spi_clkcnt_N. In the slave mode it must be 0.*/ + uint32_t clkcnt_h: 6; /*In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In the slave mode it must be 0.*/ + uint32_t clkcnt_n: 6; /*In the master mode it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1)*/ + uint32_t clkdiv_pre: 13; /*In the master mode it is pre-divider of spi_clk.*/ + uint32_t clk_equ_sysclk: 1; /*In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system clock.*/ + }; + uint32_t val; + } clock; + union { + struct { + uint32_t doutdin: 1; /*Set the bit to enable full duplex communication. 1: enable 0: disable.*/ + uint32_t reserved1: 3; /*reserved*/ + uint32_t cs_hold: 1; /*spi cs keep low when spi is in ,done, phase. 1: enable 0: disable.*/ + uint32_t cs_setup: 1; /*spi cs is enable when spi is in ,prepare, phase. 1: enable 0: disable.*/ + uint32_t ck_i_edge: 1; /*In the slave mode the bit is same as spi_ck_out_edge in master mode. It is combined with spi_miso_delay_mode bits.*/ + uint32_t ck_out_edge: 1; /*the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode.*/ + uint32_t reserved8: 2; /*reserved*/ + uint32_t rd_byte_order: 1; /*In read-data (MISO) phase 1: big-endian 0: little_endian*/ + uint32_t wr_byte_order: 1; /*In command address write-data (MOSI) phases 1: big-endian 0: litte_endian*/ + uint32_t fwrite_dual: 1; /*In the write operations read-data phase apply 2 signals*/ + uint32_t fwrite_quad: 1; /*In the write operations read-data phase apply 4 signals*/ + uint32_t fwrite_dio: 1; /*In the write operations address phase and read-data phase apply 2 signals.*/ + uint32_t fwrite_qio: 1; /*In the write operations address phase and read-data phase apply 4 signals.*/ + uint32_t sio: 1; /*Set the bit to enable 3-line half duplex communication mosi and miso signals share the same pin. 1: enable 0: disable.*/ + uint32_t usr_hold_pol: 1; /*It is combined with hold bits to set the polarity of spi hold line 1: spi will be held when spi hold line is high 0: spi will be held when spi hold line is low*/ + uint32_t usr_dout_hold: 1; /*spi is hold at data out state the bit combined with spi_usr_hold_pol bit.*/ + uint32_t usr_din_hold: 1; /*spi is hold at data in state the bit combined with spi_usr_hold_pol bit.*/ + uint32_t usr_dummy_hold: 1; /*spi is hold at dummy state the bit combined with spi_usr_hold_pol bit.*/ + uint32_t usr_addr_hold: 1; /*spi is hold at address state the bit combined with spi_usr_hold_pol bit.*/ + uint32_t usr_cmd_hold: 1; /*spi is hold at command state the bit combined with spi_usr_hold_pol bit.*/ + uint32_t usr_prep_hold: 1; /*spi is hold at prepare state the bit combined with spi_usr_hold_pol bit.*/ + uint32_t usr_miso_highpart: 1; /*read-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable.*/ + uint32_t usr_mosi_highpart: 1; /*write-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable.*/ + uint32_t usr_dummy_idle: 1; /*spi clock is disable in dummy phase when the bit is enable.*/ + uint32_t usr_mosi: 1; /*This bit enable the write-data phase of an operation.*/ + uint32_t usr_miso: 1; /*This bit enable the read-data phase of an operation.*/ + uint32_t usr_dummy: 1; /*This bit enable the dummy phase of an operation.*/ + uint32_t usr_addr: 1; /*This bit enable the address phase of an operation.*/ + uint32_t usr_command: 1; /*This bit enable the command phase of an operation.*/ + }; + uint32_t val; + } user; + union { + struct { + uint32_t usr_dummy_cyclelen: 8; /*The length in spi_clk cycles of dummy phase. The register value shall be (cycle_num-1).*/ + uint32_t reserved8: 18; /*reserved*/ + uint32_t usr_addr_bitlen: 6; /*The length in bits of address phase. The register value shall be (bit_num-1).*/ + }; + uint32_t val; + } user1; + union { + struct { + uint32_t usr_command_value: 16; /*The value of command.*/ + uint32_t reserved16: 12; /*reserved*/ + uint32_t usr_command_bitlen: 4; /*The length in bits of command phase. The register value shall be (bit_num-1)*/ + }; + uint32_t val; + } user2; + union { + struct { + uint32_t usr_mosi_dbitlen:24; /*The length in bits of write-data. The register value shall be (bit_num-1).*/ + uint32_t reserved24: 8; /*reserved*/ + }; + uint32_t val; + } mosi_dlen; + union { + struct { + uint32_t usr_miso_dbitlen:24; /*The length in bits of read-data. The register value shall be (bit_num-1).*/ + uint32_t reserved24: 8; /*reserved*/ + }; + uint32_t val; + } miso_dlen; + uint32_t slv_wr_status; /*In the slave mode this register are the status register for the master to write into. In the master mode this register are the higher 32bits in the 64 bits address condition.*/ + union { + struct { + uint32_t cs0_dis: 1; /*SPI CS0 pin enable, 1: disable CS0, 0: spi_cs0 signal is from/to CS0 pin*/ + uint32_t cs1_dis: 1; /*SPI CS1 pin enable, 1: disable CS1, 0: spi_cs1 signal is from/to CS1 pin*/ + uint32_t cs2_dis: 1; /*SPI CS2 pin enable, 1: disable CS2, 0: spi_cs2 signal is from/to CS2 pin*/ + uint32_t reserved3: 2; /*reserved*/ + uint32_t ck_dis: 1; /*1: spi clk out disable 0: spi clk out enable*/ + uint32_t master_cs_pol: 5; /*In the master mode the bits are the polarity of spi cs line the value is equivalent to spi_cs ^ spi_master_cs_pol.*/ + uint32_t master_ck_sel: 5; /*In the master mode spi cs line is enable as spi clk it is combined with spi_cs0_dis spi_cs1_dis spi_cs2_dis.*/ + uint32_t reserved16: 13; /*reserved*/ + uint32_t ck_idle_edge: 1; /*1: spi clk line is high when idle 0: spi clk line is low when idle*/ + uint32_t cs_keep_active: 1; /*spi cs line keep low when the bit is set.*/ + uint32_t reserved31: 1; /*reserved*/ + }; + uint32_t val; + } pin; + union { + struct { + uint32_t rd_buf_done: 1; /*The interrupt raw bit for the completion of read-buffer operation in the slave mode.*/ + uint32_t wr_buf_done: 1; /*The interrupt raw bit for the completion of write-buffer operation in the slave mode.*/ + uint32_t rd_sta_done: 1; /*The interrupt raw bit for the completion of read-status operation in the slave mode.*/ + uint32_t wr_sta_done: 1; /*The interrupt raw bit for the completion of write-status operation in the slave mode.*/ + uint32_t trans_done: 1; /*The interrupt raw bit for the completion of any operation in both the master mode and the slave mode.*/ + uint32_t int_en: 5; /*Interrupt enable bits for the below 5 sources*/ + uint32_t cs_i_mode: 2; /*In the slave mode this bits used to synchronize the input spi cs signal and eliminate spi cs jitter.*/ + uint32_t reserved12: 5; /*reserved*/ + uint32_t last_command: 3; /*In the slave mode it is the value of command.*/ + uint32_t last_state: 3; /*In the slave mode it is the state of spi state machine.*/ + uint32_t trans_cnt: 4; /*The operations counter in both the master mode and the slave mode. 4: read-status*/ + uint32_t cmd_define: 1; /*1: slave mode commands are defined in SPI_SLAVE3. 0: slave mode commands are fixed as: 1: write-status 2: write-buffer and 3: read-buffer.*/ + uint32_t wr_rd_sta_en: 1; /*write and read status enable in the slave mode*/ + uint32_t wr_rd_buf_en: 1; /*write and read buffer enable in the slave mode*/ + uint32_t slave_mode: 1; /*1: slave mode 0: master mode.*/ + uint32_t sync_reset: 1; /*Software reset enable, reset the spi clock line cs line and data lines.*/ + }; + uint32_t val; + } slave; + union { + struct { + uint32_t rdbuf_dummy_en: 1; /*In the slave mode it is the enable bit of dummy phase for read-buffer operations.*/ + uint32_t wrbuf_dummy_en: 1; /*In the slave mode it is the enable bit of dummy phase for write-buffer operations.*/ + uint32_t rdsta_dummy_en: 1; /*In the slave mode it is the enable bit of dummy phase for read-status operations.*/ + uint32_t wrsta_dummy_en: 1; /*In the slave mode it is the enable bit of dummy phase for write-status operations.*/ + uint32_t wr_addr_bitlen: 6; /*In the slave mode it is the address length in bits for write-buffer operation. The register value shall be (bit_num-1).*/ + uint32_t rd_addr_bitlen: 6; /*In the slave mode it is the address length in bits for read-buffer operation. The register value shall be (bit_num-1).*/ + uint32_t reserved16: 9; /*reserved*/ + uint32_t status_readback: 1; /*In the slave mode 1:read register of SPI_SLV_WR_STATUS 0: read register of SPI_RD_STATUS.*/ + uint32_t status_fast_en: 1; /*In the slave mode enable fast read status.*/ + uint32_t status_bitlen: 5; /*In the slave mode it is the length of status bit.*/ + }; + uint32_t val; + } slave1; + union { + struct { + uint32_t rdsta_dummy_cyclelen: 8; /*In the slave mode it is the length in spi_clk cycles of dummy phase for read-status operations. The register value shall be (cycle_num-1).*/ + uint32_t wrsta_dummy_cyclelen: 8; /*In the slave mode it is the length in spi_clk cycles of dummy phase for write-status operations. The register value shall be (cycle_num-1).*/ + uint32_t rdbuf_dummy_cyclelen: 8; /*In the slave mode it is the length in spi_clk cycles of dummy phase for read-buffer operations. The register value shall be (cycle_num-1).*/ + uint32_t wrbuf_dummy_cyclelen: 8; /*In the slave mode it is the length in spi_clk cycles of dummy phase for write-buffer operations. The register value shall be (cycle_num-1).*/ + }; + uint32_t val; + } slave2; + union { + struct { + uint32_t rdbuf_cmd_value: 8; /*In the slave mode it is the value of read-buffer command.*/ + uint32_t wrbuf_cmd_value: 8; /*In the slave mode it is the value of write-buffer command.*/ + uint32_t rdsta_cmd_value: 8; /*In the slave mode it is the value of read-status command.*/ + uint32_t wrsta_cmd_value: 8; /*In the slave mode it is the value of write-status command.*/ + }; + uint32_t val; + } slave3; + union { + struct { + uint32_t bit_len: 24; /*In the slave mode it is the length in bits for write-buffer operations. The register value shall be (bit_num-1).*/ + uint32_t reserved24: 8; /*reserved*/ + }; + uint32_t val; + } slv_wrbuf_dlen; + union { + struct { + uint32_t bit_len: 24; /*In the slave mode it is the length in bits for read-buffer operations. The register value shall be (bit_num-1).*/ + uint32_t reserved24: 8; /*reserved*/ + }; + uint32_t val; + } slv_rdbuf_dlen; + union { + struct { + uint32_t req_en: 1; /*For SPI0 Cache access enable 1: enable 0:disable.*/ + uint32_t usr_cmd_4byte: 1; /*For SPI0 cache read flash with 4 bytes command 1: enable 0:disable.*/ + uint32_t flash_usr_cmd: 1; /*For SPI0 cache read flash for user define command 1: enable 0:disable.*/ + uint32_t flash_pes_en: 1; /*For SPI0 spi1 send suspend command before cache read flash 1: enable 0:disable.*/ + uint32_t reserved4: 28; /*reserved*/ + }; + uint32_t val; + } cache_fctrl; + union { + struct { + uint32_t reserved0: 1; /*reserved*/ + uint32_t usr_sram_dio: 1; /*For SPI0 In the spi sram mode spi dual I/O mode enable 1: enable 0:disable*/ + uint32_t usr_sram_qio: 1; /*For SPI0 In the spi sram mode spi quad I/O mode enable 1: enable 0:disable*/ + uint32_t usr_wr_sram_dummy: 1; /*For SPI0 In the spi sram mode it is the enable bit of dummy phase for write operations.*/ + uint32_t usr_rd_sram_dummy: 1; /*For SPI0 In the spi sram mode it is the enable bit of dummy phase for read operations.*/ + uint32_t cache_sram_usr_rcmd: 1; /*For SPI0 In the spi sram mode cache read sram for user define command.*/ + uint32_t sram_bytes_len: 8; /*For SPI0 In the sram mode it is the byte length of spi read sram data.*/ + uint32_t sram_dummy_cyclelen: 8; /*For SPI0 In the sram mode it is the length in bits of address phase. The register value shall be (bit_num-1).*/ + uint32_t sram_addr_bitlen: 6; /*For SPI0 In the sram mode it is the length in bits of address phase. The register value shall be (bit_num-1).*/ + uint32_t cache_sram_usr_wcmd: 1; /*For SPI0 In the spi sram mode cache write sram for user define command*/ + uint32_t reserved29: 3; /*reserved*/ + }; + uint32_t val; + } cache_sctrl; + union { + struct { + uint32_t dio: 1; /*For SPI0 SRAM DIO mode enable . SRAM DIO enable command will be send when the bit is set. The bit will be cleared once the operation done.*/ + uint32_t qio: 1; /*For SPI0 SRAM QIO mode enable . SRAM QIO enable command will be send when the bit is set. The bit will be cleared once the operation done.*/ + uint32_t reserved2: 2; /*For SPI0 SRAM write enable . SRAM write operation will be triggered when the bit is set. The bit will be cleared once the operation done.*/ + uint32_t rst_io: 1; /*For SPI0 SRAM IO mode reset enable. SRAM IO mode reset operation will be triggered when the bit is set. The bit will be cleared once the operation done*/ + uint32_t reserved5:27; /*reserved*/ + }; + uint32_t val; + } sram_cmd; + union { + struct { + uint32_t usr_rd_cmd_value: 16; /*For SPI0 When cache mode is enable it is the read command value of command phase for SRAM.*/ + uint32_t reserved16: 12; /*reserved*/ + uint32_t usr_rd_cmd_bitlen: 4; /*For SPI0 When cache mode is enable it is the length in bits of command phase for SRAM. The register value shall be (bit_num-1).*/ + }; + uint32_t val; + } sram_drd_cmd; + union { + struct { + uint32_t usr_wr_cmd_value: 16; /*For SPI0 When cache mode is enable it is the write command value of command phase for SRAM.*/ + uint32_t reserved16: 12; /*reserved*/ + uint32_t usr_wr_cmd_bitlen: 4; /*For SPI0 When cache mode is enable it is the in bits of command phase for SRAM. The register value shall be (bit_num-1).*/ + }; + uint32_t val; + } sram_dwr_cmd; + union { + struct { + uint32_t slv_rdata_bit:24; /*In the slave mode it is the bit length of read data. The value is the length - 1.*/ + uint32_t reserved24: 8; /*reserved*/ + }; + uint32_t val; + } slv_rd_bit; + uint32_t reserved_68; + uint32_t reserved_6c; + uint32_t reserved_70; + uint32_t reserved_74; + uint32_t reserved_78; + uint32_t reserved_7c; + uint32_t data_buf[16]; /*data buffer*/ + uint32_t tx_crc; /*For SPI1 the value of crc32 for 256 bits data.*/ + uint32_t reserved_c4; + uint32_t reserved_c8; + uint32_t reserved_cc; + uint32_t reserved_d0; + uint32_t reserved_d4; + uint32_t reserved_d8; + uint32_t reserved_dc; + uint32_t reserved_e0; + uint32_t reserved_e4; + uint32_t reserved_e8; + uint32_t reserved_ec; + union { + struct { + uint32_t t_pp_time: 12; /*page program delay time by system clock.*/ + uint32_t reserved12: 4; /*reserved*/ + uint32_t t_pp_shift: 4; /*page program delay time shift .*/ + uint32_t reserved20:11; /*reserved*/ + uint32_t t_pp_ena: 1; /*page program delay enable.*/ + }; + uint32_t val; + } ext0; + union { + struct { + uint32_t t_erase_time: 12; /*erase flash delay time by system clock.*/ + uint32_t reserved12: 4; /*reserved*/ + uint32_t t_erase_shift: 4; /*erase flash delay time shift.*/ + uint32_t reserved20: 11; /*reserved*/ + uint32_t t_erase_ena: 1; /*erase flash delay enable.*/ + }; + uint32_t val; + } ext1; + union { + struct { + uint32_t st: 3; /*The status of spi state machine .*/ + uint32_t reserved3: 29; /*reserved*/ + }; + uint32_t val; + } ext2; + union { + struct { + uint32_t int_hold_ena: 2; /*This register is for two SPI masters to share the same cs clock and data signals. The bits of one SPI are set if the other SPI is busy the SPI will be hold. 1(3): hold at ,idle, phase 2: hold at ,prepare, phase.*/ + uint32_t reserved2: 30; /*reserved*/ + }; + uint32_t val; + } ext3; + union { + struct { + uint32_t reserved0: 2; /*reserved*/ + uint32_t in_rst: 1; /*The bit is used to reset in dma fsm and in data fifo pointer.*/ + uint32_t out_rst: 1; /*The bit is used to reset out dma fsm and out data fifo pointer.*/ + uint32_t ahbm_fifo_rst: 1; /*reset spi dma ahb master fifo pointer.*/ + uint32_t ahbm_rst: 1; /*reset spi dma ahb master.*/ + uint32_t in_loop_test: 1; /*Set bit to test in link.*/ + uint32_t out_loop_test: 1; /*Set bit to test out link.*/ + uint32_t out_auto_wrback: 1; /*when the link is empty jump to next automatically.*/ + uint32_t out_eof_mode: 1; /*out eof flag generation mode . 1: when dma pop all data from fifo 0:when ahb push all data to fifo.*/ + uint32_t outdscr_burst_en: 1; /*read descriptor use burst mode when read data for memory.*/ + uint32_t indscr_burst_en: 1; /*read descriptor use burst mode when write data to memory.*/ + uint32_t out_data_burst_en: 1; /*spi dma read data from memory in burst mode.*/ + uint32_t reserved13: 1; /*reserved*/ + uint32_t dma_rx_stop: 1; /*spi dma read data stop when in continue tx/rx mode.*/ + uint32_t dma_tx_stop: 1; /*spi dma write data stop when in continue tx/rx mode.*/ + uint32_t dma_continue: 1; /*spi dma continue tx/rx data.*/ + uint32_t reserved17: 15; /*reserved*/ + }; + uint32_t val; + } dma_conf; + union { + struct { + uint32_t addr: 20; /*The address of the first outlink descriptor.*/ + uint32_t reserved20: 8; /*reserved*/ + uint32_t stop: 1; /*Set the bit to stop to use outlink descriptor.*/ + uint32_t start: 1; /*Set the bit to start to use outlink descriptor.*/ + uint32_t restart: 1; /*Set the bit to mount on new outlink descriptors.*/ + uint32_t reserved31: 1; /*reserved*/ + }; + uint32_t val; + } dma_out_link; + union { + struct { + uint32_t addr: 20; /*The address of the first inlink descriptor.*/ + uint32_t auto_ret: 1; /*when the bit is set inlink descriptor returns to the next descriptor while a packet is wrong*/ + uint32_t reserved21: 7; /*reserved*/ + uint32_t stop: 1; /*Set the bit to stop to use inlink descriptor.*/ + uint32_t start: 1; /*Set the bit to start to use inlink descriptor.*/ + uint32_t restart: 1; /*Set the bit to mount on new inlink descriptors.*/ + uint32_t reserved31: 1; /*reserved*/ + }; + uint32_t val; + } dma_in_link; + union { + struct { + uint32_t rx_en: 1; /*spi dma read data status bit.*/ + uint32_t tx_en: 1; /*spi dma write data status bit.*/ + uint32_t reserved2: 30; /*spi dma read data from memory count.*/ + }; + uint32_t val; + } dma_status; + union { + struct { + uint32_t inlink_dscr_empty: 1; /*The enable bit for lack of enough inlink descriptors.*/ + uint32_t outlink_dscr_error: 1; /*The enable bit for outlink descriptor error.*/ + uint32_t inlink_dscr_error: 1; /*The enable bit for inlink descriptor error.*/ + uint32_t in_done: 1; /*The enable bit for completing usage of a inlink descriptor.*/ + uint32_t in_err_eof: 1; /*The enable bit for receiving error.*/ + uint32_t in_suc_eof: 1; /*The enable bit for completing receiving all the packets from host.*/ + uint32_t out_done: 1; /*The enable bit for completing usage of a outlink descriptor .*/ + uint32_t out_eof: 1; /*The enable bit for sending a packet to host done.*/ + uint32_t out_total_eof: 1; /*The enable bit for sending all the packets to host done.*/ + uint32_t reserved9: 23; /*reserved*/ + }; + uint32_t val; + } dma_int_ena; + union { + struct { + uint32_t inlink_dscr_empty: 1; /*The raw bit for lack of enough inlink descriptors.*/ + uint32_t outlink_dscr_error: 1; /*The raw bit for outlink descriptor error.*/ + uint32_t inlink_dscr_error: 1; /*The raw bit for inlink descriptor error.*/ + uint32_t in_done: 1; /*The raw bit for completing usage of a inlink descriptor.*/ + uint32_t in_err_eof: 1; /*The raw bit for receiving error.*/ + uint32_t in_suc_eof: 1; /*The raw bit for completing receiving all the packets from host.*/ + uint32_t out_done: 1; /*The raw bit for completing usage of a outlink descriptor.*/ + uint32_t out_eof: 1; /*The raw bit for sending a packet to host done.*/ + uint32_t out_total_eof: 1; /*The raw bit for sending all the packets to host done.*/ + uint32_t reserved9: 23; /*reserved*/ + }; + uint32_t val; + } dma_int_raw; + union { + struct { + uint32_t inlink_dscr_empty: 1; /*The status bit for lack of enough inlink descriptors.*/ + uint32_t outlink_dscr_error: 1; /*The status bit for outlink descriptor error.*/ + uint32_t inlink_dscr_error: 1; /*The status bit for inlink descriptor error.*/ + uint32_t in_done: 1; /*The status bit for completing usage of a inlink descriptor.*/ + uint32_t in_err_eof: 1; /*The status bit for receiving error.*/ + uint32_t in_suc_eof: 1; /*The status bit for completing receiving all the packets from host.*/ + uint32_t out_done: 1; /*The status bit for completing usage of a outlink descriptor.*/ + uint32_t out_eof: 1; /*The status bit for sending a packet to host done.*/ + uint32_t out_total_eof: 1; /*The status bit for sending all the packets to host done.*/ + uint32_t reserved9: 23; /*reserved*/ + }; + uint32_t val; + } dma_int_st; + union { + struct { + uint32_t inlink_dscr_empty: 1; /*The clear bit for lack of enough inlink descriptors.*/ + uint32_t outlink_dscr_error: 1; /*The clear bit for outlink descriptor error.*/ + uint32_t inlink_dscr_error: 1; /*The clear bit for inlink descriptor error.*/ + uint32_t in_done: 1; /*The clear bit for completing usage of a inlink descriptor.*/ + uint32_t in_err_eof: 1; /*The clear bit for receiving error.*/ + uint32_t in_suc_eof: 1; /*The clear bit for completing receiving all the packets from host.*/ + uint32_t out_done: 1; /*The clear bit for completing usage of a outlink descriptor.*/ + uint32_t out_eof: 1; /*The clear bit for sending a packet to host done.*/ + uint32_t out_total_eof: 1; /*The clear bit for sending all the packets to host done.*/ + uint32_t reserved9: 23; /*reserved*/ + }; + uint32_t val; + } dma_int_clr; + uint32_t dma_in_err_eof_des_addr; /*The inlink descriptor address when spi dma produce receiving error.*/ + uint32_t dma_in_suc_eof_des_addr; /*The last inlink descriptor address when spi dma produce from_suc_eof.*/ + uint32_t dma_inlink_dscr; /*The content of current in descriptor pointer.*/ + uint32_t dma_inlink_dscr_bf0; /*The content of next in descriptor pointer.*/ + uint32_t dma_inlink_dscr_bf1; /*The content of current in descriptor data buffer pointer.*/ + uint32_t dma_out_eof_bfr_des_addr; /*The address of buffer relative to the outlink descriptor that produce eof.*/ + uint32_t dma_out_eof_des_addr; /*The last outlink descriptor address when spi dma produce to_eof.*/ + uint32_t dma_outlink_dscr; /*The content of current out descriptor pointer.*/ + uint32_t dma_outlink_dscr_bf0; /*The content of next out descriptor pointer.*/ + uint32_t dma_outlink_dscr_bf1; /*The content of current out descriptor data buffer pointer.*/ + uint32_t dma_rx_status; /*spi dma read data from memory status.*/ + uint32_t dma_tx_status; /*spi dma write data to memory status.*/ + uint32_t reserved_150; + uint32_t reserved_154; + uint32_t reserved_158; + uint32_t reserved_15c; + uint32_t reserved_160; + uint32_t reserved_164; + uint32_t reserved_168; + uint32_t reserved_16c; + uint32_t reserved_170; + uint32_t reserved_174; + uint32_t reserved_178; + uint32_t reserved_17c; + uint32_t reserved_180; + uint32_t reserved_184; + uint32_t reserved_188; + uint32_t reserved_18c; + uint32_t reserved_190; + uint32_t reserved_194; + uint32_t reserved_198; + uint32_t reserved_19c; + uint32_t reserved_1a0; + uint32_t reserved_1a4; + uint32_t reserved_1a8; + uint32_t reserved_1ac; + uint32_t reserved_1b0; + uint32_t reserved_1b4; + uint32_t reserved_1b8; + uint32_t reserved_1bc; + uint32_t reserved_1c0; + uint32_t reserved_1c4; + uint32_t reserved_1c8; + uint32_t reserved_1cc; + uint32_t reserved_1d0; + uint32_t reserved_1d4; + uint32_t reserved_1d8; + uint32_t reserved_1dc; + uint32_t reserved_1e0; + uint32_t reserved_1e4; + uint32_t reserved_1e8; + uint32_t reserved_1ec; + uint32_t reserved_1f0; + uint32_t reserved_1f4; + uint32_t reserved_1f8; + uint32_t reserved_1fc; + uint32_t reserved_200; + uint32_t reserved_204; + uint32_t reserved_208; + uint32_t reserved_20c; + uint32_t reserved_210; + uint32_t reserved_214; + uint32_t reserved_218; + uint32_t reserved_21c; + uint32_t reserved_220; + uint32_t reserved_224; + uint32_t reserved_228; + uint32_t reserved_22c; + uint32_t reserved_230; + uint32_t reserved_234; + uint32_t reserved_238; + uint32_t reserved_23c; + uint32_t reserved_240; + uint32_t reserved_244; + uint32_t reserved_248; + uint32_t reserved_24c; + uint32_t reserved_250; + uint32_t reserved_254; + uint32_t reserved_258; + uint32_t reserved_25c; + uint32_t reserved_260; + uint32_t reserved_264; + uint32_t reserved_268; + uint32_t reserved_26c; + uint32_t reserved_270; + uint32_t reserved_274; + uint32_t reserved_278; + uint32_t reserved_27c; + uint32_t reserved_280; + uint32_t reserved_284; + uint32_t reserved_288; + uint32_t reserved_28c; + uint32_t reserved_290; + uint32_t reserved_294; + uint32_t reserved_298; + uint32_t reserved_29c; + uint32_t reserved_2a0; + uint32_t reserved_2a4; + uint32_t reserved_2a8; + uint32_t reserved_2ac; + uint32_t reserved_2b0; + uint32_t reserved_2b4; + uint32_t reserved_2b8; + uint32_t reserved_2bc; + uint32_t reserved_2c0; + uint32_t reserved_2c4; + uint32_t reserved_2c8; + uint32_t reserved_2cc; + uint32_t reserved_2d0; + uint32_t reserved_2d4; + uint32_t reserved_2d8; + uint32_t reserved_2dc; + uint32_t reserved_2e0; + uint32_t reserved_2e4; + uint32_t reserved_2e8; + uint32_t reserved_2ec; + uint32_t reserved_2f0; + uint32_t reserved_2f4; + uint32_t reserved_2f8; + uint32_t reserved_2fc; + uint32_t reserved_300; + uint32_t reserved_304; + uint32_t reserved_308; + uint32_t reserved_30c; + uint32_t reserved_310; + uint32_t reserved_314; + uint32_t reserved_318; + uint32_t reserved_31c; + uint32_t reserved_320; + uint32_t reserved_324; + uint32_t reserved_328; + uint32_t reserved_32c; + uint32_t reserved_330; + uint32_t reserved_334; + uint32_t reserved_338; + uint32_t reserved_33c; + uint32_t reserved_340; + uint32_t reserved_344; + uint32_t reserved_348; + uint32_t reserved_34c; + uint32_t reserved_350; + uint32_t reserved_354; + uint32_t reserved_358; + uint32_t reserved_35c; + uint32_t reserved_360; + uint32_t reserved_364; + uint32_t reserved_368; + uint32_t reserved_36c; + uint32_t reserved_370; + uint32_t reserved_374; + uint32_t reserved_378; + uint32_t reserved_37c; + uint32_t reserved_380; + uint32_t reserved_384; + uint32_t reserved_388; + uint32_t reserved_38c; + uint32_t reserved_390; + uint32_t reserved_394; + uint32_t reserved_398; + uint32_t reserved_39c; + uint32_t reserved_3a0; + uint32_t reserved_3a4; + uint32_t reserved_3a8; + uint32_t reserved_3ac; + uint32_t reserved_3b0; + uint32_t reserved_3b4; + uint32_t reserved_3b8; + uint32_t reserved_3bc; + uint32_t reserved_3c0; + uint32_t reserved_3c4; + uint32_t reserved_3c8; + uint32_t reserved_3cc; + uint32_t reserved_3d0; + uint32_t reserved_3d4; + uint32_t reserved_3d8; + uint32_t reserved_3dc; + uint32_t reserved_3e0; + uint32_t reserved_3e4; + uint32_t reserved_3e8; + uint32_t reserved_3ec; + uint32_t reserved_3f0; + uint32_t reserved_3f4; + uint32_t reserved_3f8; + union { + struct { + uint32_t date: 28; /*SPI register version.*/ + uint32_t reserved28: 4; /*reserved*/ + }; + uint32_t val; + } date; +} spi_dev_t; +extern spi_dev_t SPI0; /* SPI0 IS FOR INTERNAL USE*/ +extern spi_dev_t SPI1; +extern spi_dev_t SPI2; +extern spi_dev_t SPI3; +#endif /* _SOC_SPI_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/timer_group_reg.h b/tools/sdk/include/esp32/soc/timer_group_reg.h new file mode 100644 index 00000000..96a5eb79 --- /dev/null +++ b/tools/sdk/include/esp32/soc/timer_group_reg.h @@ -0,0 +1,658 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef __TIMG_REG_H__ +#define __TIMG_REG_H__ +#include "soc.h" + +#define REG_TIMG_BASE(i) (DR_REG_TIMERGROUP0_BASE + i*0x1000) +#define TIMG_T0CONFIG_REG(i) (REG_TIMG_BASE(i) + 0x0000) +/* TIMG_T0_EN : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: When set timer 0 time-base counter is enabled*/ +#define TIMG_T0_EN (BIT(31)) +#define TIMG_T0_EN_M (BIT(31)) +#define TIMG_T0_EN_V 0x1 +#define TIMG_T0_EN_S 31 +/* TIMG_T0_INCREASE : R/W ;bitpos:[30] ;default: 1'h1 ; */ +/*description: When set timer 0 time-base counter increment. When cleared timer + 0 time-base counter decrement.*/ +#define TIMG_T0_INCREASE (BIT(30)) +#define TIMG_T0_INCREASE_M (BIT(30)) +#define TIMG_T0_INCREASE_V 0x1 +#define TIMG_T0_INCREASE_S 30 +/* TIMG_T0_AUTORELOAD : R/W ;bitpos:[29] ;default: 1'h1 ; */ +/*description: When set timer 0 auto-reload at alarming is enabled*/ +#define TIMG_T0_AUTORELOAD (BIT(29)) +#define TIMG_T0_AUTORELOAD_M (BIT(29)) +#define TIMG_T0_AUTORELOAD_V 0x1 +#define TIMG_T0_AUTORELOAD_S 29 +/* TIMG_T0_DIVIDER : R/W ;bitpos:[28:13] ;default: 16'h1 ; */ +/*description: Timer 0 clock (T0_clk) prescale value.*/ +#define TIMG_T0_DIVIDER 0x0000FFFF +#define TIMG_T0_DIVIDER_M ((TIMG_T0_DIVIDER_V)<<(TIMG_T0_DIVIDER_S)) +#define TIMG_T0_DIVIDER_V 0xFFFF +#define TIMG_T0_DIVIDER_S 13 +/* TIMG_T0_EDGE_INT_EN : R/W ;bitpos:[12] ;default: 1'h0 ; */ +/*description: When set edge type interrupt will be generated during alarm*/ +#define TIMG_T0_EDGE_INT_EN (BIT(12)) +#define TIMG_T0_EDGE_INT_EN_M (BIT(12)) +#define TIMG_T0_EDGE_INT_EN_V 0x1 +#define TIMG_T0_EDGE_INT_EN_S 12 +/* TIMG_T0_LEVEL_INT_EN : R/W ;bitpos:[11] ;default: 1'h0 ; */ +/*description: When set level type interrupt will be generated during alarm*/ +#define TIMG_T0_LEVEL_INT_EN (BIT(11)) +#define TIMG_T0_LEVEL_INT_EN_M (BIT(11)) +#define TIMG_T0_LEVEL_INT_EN_V 0x1 +#define TIMG_T0_LEVEL_INT_EN_S 11 +/* TIMG_T0_ALARM_EN : R/W ;bitpos:[10] ;default: 1'h0 ; */ +/*description: When set alarm is enabled*/ +#define TIMG_T0_ALARM_EN (BIT(10)) +#define TIMG_T0_ALARM_EN_M (BIT(10)) +#define TIMG_T0_ALARM_EN_V 0x1 +#define TIMG_T0_ALARM_EN_S 10 + +#define TIMG_T0LO_REG(i) (REG_TIMG_BASE(i) + 0x0004) +/* TIMG_T0_LO : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Register to store timer 0 time-base counter current value lower 32 bits.*/ +#define TIMG_T0_LO 0xFFFFFFFF +#define TIMG_T0_LO_M ((TIMG_T0_LO_V)<<(TIMG_T0_LO_S)) +#define TIMG_T0_LO_V 0xFFFFFFFF +#define TIMG_T0_LO_S 0 + +#define TIMG_T0HI_REG(i) (REG_TIMG_BASE(i) + 0x0008) +/* TIMG_T0_HI : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Register to store timer 0 time-base counter current value higher 32 bits.*/ +#define TIMG_T0_HI 0xFFFFFFFF +#define TIMG_T0_HI_M ((TIMG_T0_HI_V)<<(TIMG_T0_HI_S)) +#define TIMG_T0_HI_V 0xFFFFFFFF +#define TIMG_T0_HI_S 0 + +#define TIMG_T0UPDATE_REG(i) (REG_TIMG_BASE(i) + 0x000c) +/* TIMG_T0_UPDATE : WO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Write any value will trigger a timer 0 time-base counter value + update (timer 0 current value will be stored in registers above)*/ +#define TIMG_T0_UPDATE 0xFFFFFFFF +#define TIMG_T0_UPDATE_M ((TIMG_T0_UPDATE_V)<<(TIMG_T0_UPDATE_S)) +#define TIMG_T0_UPDATE_V 0xFFFFFFFF +#define TIMG_T0_UPDATE_S 0 + +#define TIMG_T0ALARMLO_REG(i) (REG_TIMG_BASE(i) + 0x0010) +/* TIMG_T0_ALARM_LO : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Timer 0 time-base counter value lower 32 bits that will trigger the alarm*/ +#define TIMG_T0_ALARM_LO 0xFFFFFFFF +#define TIMG_T0_ALARM_LO_M ((TIMG_T0_ALARM_LO_V)<<(TIMG_T0_ALARM_LO_S)) +#define TIMG_T0_ALARM_LO_V 0xFFFFFFFF +#define TIMG_T0_ALARM_LO_S 0 + +#define TIMG_T0ALARMHI_REG(i) (REG_TIMG_BASE(i) + 0x0014) +/* TIMG_T0_ALARM_HI : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Timer 0 time-base counter value higher 32 bits that will trigger the alarm*/ +#define TIMG_T0_ALARM_HI 0xFFFFFFFF +#define TIMG_T0_ALARM_HI_M ((TIMG_T0_ALARM_HI_V)<<(TIMG_T0_ALARM_HI_S)) +#define TIMG_T0_ALARM_HI_V 0xFFFFFFFF +#define TIMG_T0_ALARM_HI_S 0 + +#define TIMG_T0LOADLO_REG(i) (REG_TIMG_BASE(i) + 0x0018) +/* TIMG_T0_LOAD_LO : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Lower 32 bits of the value that will load into timer 0 time-base counter*/ +#define TIMG_T0_LOAD_LO 0xFFFFFFFF +#define TIMG_T0_LOAD_LO_M ((TIMG_T0_LOAD_LO_V)<<(TIMG_T0_LOAD_LO_S)) +#define TIMG_T0_LOAD_LO_V 0xFFFFFFFF +#define TIMG_T0_LOAD_LO_S 0 + +#define TIMG_T0LOADHI_REG(i) (REG_TIMG_BASE(i) + 0x001c) +/* TIMG_T0_LOAD_HI : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: higher 32 bits of the value that will load into timer 0 time-base counter*/ +#define TIMG_T0_LOAD_HI 0xFFFFFFFF +#define TIMG_T0_LOAD_HI_M ((TIMG_T0_LOAD_HI_V)<<(TIMG_T0_LOAD_HI_S)) +#define TIMG_T0_LOAD_HI_V 0xFFFFFFFF +#define TIMG_T0_LOAD_HI_S 0 + +#define TIMG_T0LOAD_REG(i) (REG_TIMG_BASE(i) + 0x0020) +/* TIMG_T0_LOAD : WO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Write any value will trigger timer 0 time-base counter reload*/ +#define TIMG_T0_LOAD 0xFFFFFFFF +#define TIMG_T0_LOAD_M ((TIMG_T0_LOAD_V)<<(TIMG_T0_LOAD_S)) +#define TIMG_T0_LOAD_V 0xFFFFFFFF +#define TIMG_T0_LOAD_S 0 + +#define TIMG_T1CONFIG_REG(i) (REG_TIMG_BASE(i) + 0x0024) +/* TIMG_T1_EN : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: When set timer 1 time-base counter is enabled*/ +#define TIMG_T1_EN (BIT(31)) +#define TIMG_T1_EN_M (BIT(31)) +#define TIMG_T1_EN_V 0x1 +#define TIMG_T1_EN_S 31 +/* TIMG_T1_INCREASE : R/W ;bitpos:[30] ;default: 1'h1 ; */ +/*description: When set timer 1 time-base counter increment. When cleared timer + 1 time-base counter decrement.*/ +#define TIMG_T1_INCREASE (BIT(30)) +#define TIMG_T1_INCREASE_M (BIT(30)) +#define TIMG_T1_INCREASE_V 0x1 +#define TIMG_T1_INCREASE_S 30 +/* TIMG_T1_AUTORELOAD : R/W ;bitpos:[29] ;default: 1'h1 ; */ +/*description: When set timer 1 auto-reload at alarming is enabled*/ +#define TIMG_T1_AUTORELOAD (BIT(29)) +#define TIMG_T1_AUTORELOAD_M (BIT(29)) +#define TIMG_T1_AUTORELOAD_V 0x1 +#define TIMG_T1_AUTORELOAD_S 29 +/* TIMG_T1_DIVIDER : R/W ;bitpos:[28:13] ;default: 16'h1 ; */ +/*description: Timer 1 clock (T1_clk) prescale value.*/ +#define TIMG_T1_DIVIDER 0x0000FFFF +#define TIMG_T1_DIVIDER_M ((TIMG_T1_DIVIDER_V)<<(TIMG_T1_DIVIDER_S)) +#define TIMG_T1_DIVIDER_V 0xFFFF +#define TIMG_T1_DIVIDER_S 13 +/* TIMG_T1_EDGE_INT_EN : R/W ;bitpos:[12] ;default: 1'h0 ; */ +/*description: When set edge type interrupt will be generated during alarm*/ +#define TIMG_T1_EDGE_INT_EN (BIT(12)) +#define TIMG_T1_EDGE_INT_EN_M (BIT(12)) +#define TIMG_T1_EDGE_INT_EN_V 0x1 +#define TIMG_T1_EDGE_INT_EN_S 12 +/* TIMG_T1_LEVEL_INT_EN : R/W ;bitpos:[11] ;default: 1'h0 ; */ +/*description: When set level type interrupt will be generated during alarm*/ +#define TIMG_T1_LEVEL_INT_EN (BIT(11)) +#define TIMG_T1_LEVEL_INT_EN_M (BIT(11)) +#define TIMG_T1_LEVEL_INT_EN_V 0x1 +#define TIMG_T1_LEVEL_INT_EN_S 11 +/* TIMG_T1_ALARM_EN : R/W ;bitpos:[10] ;default: 1'h0 ; */ +/*description: When set alarm is enabled*/ +#define TIMG_T1_ALARM_EN (BIT(10)) +#define TIMG_T1_ALARM_EN_M (BIT(10)) +#define TIMG_T1_ALARM_EN_V 0x1 +#define TIMG_T1_ALARM_EN_S 10 + +#define TIMG_T1LO_REG(i) (REG_TIMG_BASE(i) + 0x0028) +/* TIMG_T1_LO : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Register to store timer 1 time-base counter current value lower 32 bits.*/ +#define TIMG_T1_LO 0xFFFFFFFF +#define TIMG_T1_LO_M ((TIMG_T1_LO_V)<<(TIMG_T1_LO_S)) +#define TIMG_T1_LO_V 0xFFFFFFFF +#define TIMG_T1_LO_S 0 + +#define TIMG_T1HI_REG(i) (REG_TIMG_BASE(i) + 0x002c) +/* TIMG_T1_HI : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Register to store timer 1 time-base counter current value higher 32 bits.*/ +#define TIMG_T1_HI 0xFFFFFFFF +#define TIMG_T1_HI_M ((TIMG_T1_HI_V)<<(TIMG_T1_HI_S)) +#define TIMG_T1_HI_V 0xFFFFFFFF +#define TIMG_T1_HI_S 0 + +#define TIMG_T1UPDATE_REG(i) (REG_TIMG_BASE(i) + 0x0030) +/* TIMG_T1_UPDATE : WO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Write any value will trigger a timer 1 time-base counter value + update (timer 1 current value will be stored in registers above)*/ +#define TIMG_T1_UPDATE 0xFFFFFFFF +#define TIMG_T1_UPDATE_M ((TIMG_T1_UPDATE_V)<<(TIMG_T1_UPDATE_S)) +#define TIMG_T1_UPDATE_V 0xFFFFFFFF +#define TIMG_T1_UPDATE_S 0 + +#define TIMG_T1ALARMLO_REG(i) (REG_TIMG_BASE(i) + 0x0034) +/* TIMG_T1_ALARM_LO : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Timer 1 time-base counter value lower 32 bits that will trigger the alarm*/ +#define TIMG_T1_ALARM_LO 0xFFFFFFFF +#define TIMG_T1_ALARM_LO_M ((TIMG_T1_ALARM_LO_V)<<(TIMG_T1_ALARM_LO_S)) +#define TIMG_T1_ALARM_LO_V 0xFFFFFFFF +#define TIMG_T1_ALARM_LO_S 0 + +#define TIMG_T1ALARMHI_REG(i) (REG_TIMG_BASE(i) + 0x0038) +/* TIMG_T1_ALARM_HI : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Timer 1 time-base counter value higher 32 bits that will trigger the alarm*/ +#define TIMG_T1_ALARM_HI 0xFFFFFFFF +#define TIMG_T1_ALARM_HI_M ((TIMG_T1_ALARM_HI_V)<<(TIMG_T1_ALARM_HI_S)) +#define TIMG_T1_ALARM_HI_V 0xFFFFFFFF +#define TIMG_T1_ALARM_HI_S 0 + +#define TIMG_T1LOADLO_REG(i) (REG_TIMG_BASE(i) + 0x003c) +/* TIMG_T1_LOAD_LO : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Lower 32 bits of the value that will load into timer 1 time-base counter*/ +#define TIMG_T1_LOAD_LO 0xFFFFFFFF +#define TIMG_T1_LOAD_LO_M ((TIMG_T1_LOAD_LO_V)<<(TIMG_T1_LOAD_LO_S)) +#define TIMG_T1_LOAD_LO_V 0xFFFFFFFF +#define TIMG_T1_LOAD_LO_S 0 + +#define TIMG_T1LOADHI_REG(i) (REG_TIMG_BASE(i) + 0x0040) +/* TIMG_T1_LOAD_HI : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: higher 32 bits of the value that will load into timer 1 time-base counter*/ +#define TIMG_T1_LOAD_HI 0xFFFFFFFF +#define TIMG_T1_LOAD_HI_M ((TIMG_T1_LOAD_HI_V)<<(TIMG_T1_LOAD_HI_S)) +#define TIMG_T1_LOAD_HI_V 0xFFFFFFFF +#define TIMG_T1_LOAD_HI_S 0 + +#define TIMG_T1LOAD_REG(i) (REG_TIMG_BASE(i) + 0x0044) +/* TIMG_T1_LOAD : WO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Write any value will trigger timer 1 time-base counter reload*/ +#define TIMG_T1_LOAD 0xFFFFFFFF +#define TIMG_T1_LOAD_M ((TIMG_T1_LOAD_V)<<(TIMG_T1_LOAD_S)) +#define TIMG_T1_LOAD_V 0xFFFFFFFF +#define TIMG_T1_LOAD_S 0 + +#define TIMG_WDTCONFIG0_REG(i) (REG_TIMG_BASE(i) + 0x0048) +/* TIMG_WDT_EN : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: When set SWDT is enabled*/ +#define TIMG_WDT_EN (BIT(31)) +#define TIMG_WDT_EN_M (BIT(31)) +#define TIMG_WDT_EN_V 0x1 +#define TIMG_WDT_EN_S 31 +/* TIMG_WDT_STG0 : R/W ;bitpos:[30:29] ;default: 1'd0 ; */ +/*description: Stage 0 configuration. 0: off 1: interrupt 2: reset CPU 3: reset system*/ +#define TIMG_WDT_STG0 0x00000003 +#define TIMG_WDT_STG0_M ((TIMG_WDT_STG0_V)<<(TIMG_WDT_STG0_S)) +#define TIMG_WDT_STG0_V 0x3 +#define TIMG_WDT_STG0_S 29 +/* TIMG_WDT_STG1 : R/W ;bitpos:[28:27] ;default: 1'd0 ; */ +/*description: Stage 1 configuration. 0: off 1: interrupt 2: reset CPU 3: reset system*/ +#define TIMG_WDT_STG1 0x00000003 +#define TIMG_WDT_STG1_M ((TIMG_WDT_STG1_V)<<(TIMG_WDT_STG1_S)) +#define TIMG_WDT_STG1_V 0x3 +#define TIMG_WDT_STG1_S 27 +/* TIMG_WDT_STG2 : R/W ;bitpos:[26:25] ;default: 1'd0 ; */ +/*description: Stage 2 configuration. 0: off 1: interrupt 2: reset CPU 3: reset system*/ +#define TIMG_WDT_STG2 0x00000003 +#define TIMG_WDT_STG2_M ((TIMG_WDT_STG2_V)<<(TIMG_WDT_STG2_S)) +#define TIMG_WDT_STG2_V 0x3 +#define TIMG_WDT_STG2_S 25 +/* TIMG_WDT_STG3 : R/W ;bitpos:[24:23] ;default: 1'd0 ; */ +/*description: Stage 3 configuration. 0: off 1: interrupt 2: reset CPU 3: reset system*/ +#define TIMG_WDT_STG3 0x00000003 +#define TIMG_WDT_STG3_M ((TIMG_WDT_STG3_V)<<(TIMG_WDT_STG3_S)) +#define TIMG_WDT_STG3_V 0x3 +#define TIMG_WDT_STG3_S 23 +/* TIMG_WDT_EDGE_INT_EN : R/W ;bitpos:[22] ;default: 1'h0 ; */ +/*description: When set edge type interrupt generation is enabled*/ +#define TIMG_WDT_EDGE_INT_EN (BIT(22)) +#define TIMG_WDT_EDGE_INT_EN_M (BIT(22)) +#define TIMG_WDT_EDGE_INT_EN_V 0x1 +#define TIMG_WDT_EDGE_INT_EN_S 22 +/* TIMG_WDT_LEVEL_INT_EN : R/W ;bitpos:[21] ;default: 1'h0 ; */ +/*description: When set level type interrupt generation is enabled*/ +#define TIMG_WDT_LEVEL_INT_EN (BIT(21)) +#define TIMG_WDT_LEVEL_INT_EN_M (BIT(21)) +#define TIMG_WDT_LEVEL_INT_EN_V 0x1 +#define TIMG_WDT_LEVEL_INT_EN_S 21 +/* TIMG_WDT_CPU_RESET_LENGTH : R/W ;bitpos:[20:18] ;default: 3'h1 ; */ +/*description: length of CPU reset selection. 0: 100ns 1: 200ns 2: 300ns + 3: 400ns 4: 500ns 5: 800ns 6: 1.6us 7: 3.2us*/ +#define TIMG_WDT_CPU_RESET_LENGTH 0x00000007 +#define TIMG_WDT_CPU_RESET_LENGTH_M ((TIMG_WDT_CPU_RESET_LENGTH_V)<<(TIMG_WDT_CPU_RESET_LENGTH_S)) +#define TIMG_WDT_CPU_RESET_LENGTH_V 0x7 +#define TIMG_WDT_CPU_RESET_LENGTH_S 18 +/* TIMG_WDT_SYS_RESET_LENGTH : R/W ;bitpos:[17:15] ;default: 3'h1 ; */ +/*description: length of system reset selection. 0: 100ns 1: 200ns 2: 300ns + 3: 400ns 4: 500ns 5: 800ns 6: 1.6us 7: 3.2us*/ +#define TIMG_WDT_SYS_RESET_LENGTH 0x00000007 +#define TIMG_WDT_SYS_RESET_LENGTH_M ((TIMG_WDT_SYS_RESET_LENGTH_V)<<(TIMG_WDT_SYS_RESET_LENGTH_S)) +#define TIMG_WDT_SYS_RESET_LENGTH_V 0x7 +#define TIMG_WDT_SYS_RESET_LENGTH_S 15 +/* TIMG_WDT_FLASHBOOT_MOD_EN : R/W ;bitpos:[14] ;default: 1'h1 ; */ +/*description: When set flash boot protection is enabled*/ +#define TIMG_WDT_FLASHBOOT_MOD_EN (BIT(14)) +#define TIMG_WDT_FLASHBOOT_MOD_EN_M (BIT(14)) +#define TIMG_WDT_FLASHBOOT_MOD_EN_V 0x1 +#define TIMG_WDT_FLASHBOOT_MOD_EN_S 14 + +#define TIMG_WDTCONFIG1_REG(i) (REG_TIMG_BASE(i) + 0x004c) +/* TIMG_WDT_CLK_PRESCALE : R/W ;bitpos:[31:16] ;default: 16'h1 ; */ +/*description: SWDT clock prescale value. Period = 12.5ns * value stored in this register*/ +#define TIMG_WDT_CLK_PRESCALE 0x0000FFFF +#define TIMG_WDT_CLK_PRESCALE_M ((TIMG_WDT_CLK_PRESCALE_V)<<(TIMG_WDT_CLK_PRESCALE_S)) +#define TIMG_WDT_CLK_PRESCALE_V 0xFFFF +#define TIMG_WDT_CLK_PRESCALE_S 16 + +#define TIMG_WDTCONFIG2_REG(i) (REG_TIMG_BASE(i) + 0x0050) +/* TIMG_WDT_STG0_HOLD : R/W ;bitpos:[31:0] ;default: 32'd26000000 ; */ +/*description: Stage 0 timeout value in SWDT clock cycles*/ +#define TIMG_WDT_STG0_HOLD 0xFFFFFFFF +#define TIMG_WDT_STG0_HOLD_M ((TIMG_WDT_STG0_HOLD_V)<<(TIMG_WDT_STG0_HOLD_S)) +#define TIMG_WDT_STG0_HOLD_V 0xFFFFFFFF +#define TIMG_WDT_STG0_HOLD_S 0 + +#define TIMG_WDTCONFIG3_REG(i) (REG_TIMG_BASE(i) + 0x0054) +/* TIMG_WDT_STG1_HOLD : R/W ;bitpos:[31:0] ;default: 32'h7ffffff ; */ +/*description: Stage 1 timeout value in SWDT clock cycles*/ +#define TIMG_WDT_STG1_HOLD 0xFFFFFFFF +#define TIMG_WDT_STG1_HOLD_M ((TIMG_WDT_STG1_HOLD_V)<<(TIMG_WDT_STG1_HOLD_S)) +#define TIMG_WDT_STG1_HOLD_V 0xFFFFFFFF +#define TIMG_WDT_STG1_HOLD_S 0 + +#define TIMG_WDTCONFIG4_REG(i) (REG_TIMG_BASE(i) + 0x0058) +/* TIMG_WDT_STG2_HOLD : R/W ;bitpos:[31:0] ;default: 32'hfffff ; */ +/*description: Stage 2 timeout value in SWDT clock cycles*/ +#define TIMG_WDT_STG2_HOLD 0xFFFFFFFF +#define TIMG_WDT_STG2_HOLD_M ((TIMG_WDT_STG2_HOLD_V)<<(TIMG_WDT_STG2_HOLD_S)) +#define TIMG_WDT_STG2_HOLD_V 0xFFFFFFFF +#define TIMG_WDT_STG2_HOLD_S 0 + +#define TIMG_WDTCONFIG5_REG(i) (REG_TIMG_BASE(i) + 0x005c) +/* TIMG_WDT_STG3_HOLD : R/W ;bitpos:[31:0] ;default: 32'hfffff ; */ +/*description: Stage 3 timeout value in SWDT clock cycles*/ +#define TIMG_WDT_STG3_HOLD 0xFFFFFFFF +#define TIMG_WDT_STG3_HOLD_M ((TIMG_WDT_STG3_HOLD_V)<<(TIMG_WDT_STG3_HOLD_S)) +#define TIMG_WDT_STG3_HOLD_V 0xFFFFFFFF +#define TIMG_WDT_STG3_HOLD_S 0 + +#define TIMG_WDTFEED_REG(i) (REG_TIMG_BASE(i) + 0x0060) +/* TIMG_WDT_FEED : WO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: Write any value will feed SWDT*/ +#define TIMG_WDT_FEED 0xFFFFFFFF +#define TIMG_WDT_FEED_M ((TIMG_WDT_FEED_V)<<(TIMG_WDT_FEED_S)) +#define TIMG_WDT_FEED_V 0xFFFFFFFF +#define TIMG_WDT_FEED_S 0 + +#define TIMG_WDTWPROTECT_REG(i) (REG_TIMG_BASE(i) + 0x0064) +/* TIMG_WDT_WKEY : R/W ;bitpos:[31:0] ;default: 32'h50d83aa1 ; */ +/*description: If change its value from default then write protection is on.*/ +#define TIMG_WDT_WKEY 0xFFFFFFFF +#define TIMG_WDT_WKEY_M ((TIMG_WDT_WKEY_V)<<(TIMG_WDT_WKEY_S)) +#define TIMG_WDT_WKEY_V 0xFFFFFFFF +#define TIMG_WDT_WKEY_S 0 + +#define TIMG_RTCCALICFG_REG(i) (REG_TIMG_BASE(i) + 0x0068) +/* TIMG_RTC_CALI_START : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_RTC_CALI_START (BIT(31)) +#define TIMG_RTC_CALI_START_M (BIT(31)) +#define TIMG_RTC_CALI_START_V 0x1 +#define TIMG_RTC_CALI_START_S 31 +/* TIMG_RTC_CALI_MAX : R/W ;bitpos:[30:16] ;default: 15'h1 ; */ +/*description: */ +#define TIMG_RTC_CALI_MAX 0x00007FFF +#define TIMG_RTC_CALI_MAX_M ((TIMG_RTC_CALI_MAX_V)<<(TIMG_RTC_CALI_MAX_S)) +#define TIMG_RTC_CALI_MAX_V 0x7FFF +#define TIMG_RTC_CALI_MAX_S 16 +/* TIMG_RTC_CALI_RDY : RO ;bitpos:[15] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_RTC_CALI_RDY (BIT(15)) +#define TIMG_RTC_CALI_RDY_M (BIT(15)) +#define TIMG_RTC_CALI_RDY_V 0x1 +#define TIMG_RTC_CALI_RDY_S 15 +/* TIMG_RTC_CALI_CLK_SEL : R/W ;bitpos:[14:13] ;default: 2'h1 ; */ +/*description: */ +#define TIMG_RTC_CALI_CLK_SEL 0x00000003 +#define TIMG_RTC_CALI_CLK_SEL_M ((TIMG_RTC_CALI_CLK_SEL_V)<<(TIMG_RTC_CALI_CLK_SEL_S)) +#define TIMG_RTC_CALI_CLK_SEL_V 0x3 +#define TIMG_RTC_CALI_CLK_SEL_S 13 +/* TIMG_RTC_CALI_START_CYCLING : R/W ;bitpos:[12] ;default: 1'd1 ; */ +/*description: */ +#define TIMG_RTC_CALI_START_CYCLING (BIT(12)) +#define TIMG_RTC_CALI_START_CYCLING_M (BIT(12)) +#define TIMG_RTC_CALI_START_CYCLING_V 0x1 +#define TIMG_RTC_CALI_START_CYCLING_S 12 + +#define TIMG_RTCCALICFG1_REG(i) (REG_TIMG_BASE(i) + 0x006c) +/* TIMG_RTC_CALI_VALUE : RO ;bitpos:[31:7] ;default: 25'h0 ; */ +/*description: */ +#define TIMG_RTC_CALI_VALUE 0x01FFFFFF +#define TIMG_RTC_CALI_VALUE_M ((TIMG_RTC_CALI_VALUE_V)<<(TIMG_RTC_CALI_VALUE_S)) +#define TIMG_RTC_CALI_VALUE_V 0x1FFFFFF +#define TIMG_RTC_CALI_VALUE_S 7 + +#define TIMG_LACTCONFIG_REG(i) (REG_TIMG_BASE(i) + 0x0070) +/* TIMG_LACT_EN : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_LACT_EN (BIT(31)) +#define TIMG_LACT_EN_M (BIT(31)) +#define TIMG_LACT_EN_V 0x1 +#define TIMG_LACT_EN_S 31 +/* TIMG_LACT_INCREASE : R/W ;bitpos:[30] ;default: 1'h1 ; */ +/*description: */ +#define TIMG_LACT_INCREASE (BIT(30)) +#define TIMG_LACT_INCREASE_M (BIT(30)) +#define TIMG_LACT_INCREASE_V 0x1 +#define TIMG_LACT_INCREASE_S 30 +/* TIMG_LACT_AUTORELOAD : R/W ;bitpos:[29] ;default: 1'h1 ; */ +/*description: */ +#define TIMG_LACT_AUTORELOAD (BIT(29)) +#define TIMG_LACT_AUTORELOAD_M (BIT(29)) +#define TIMG_LACT_AUTORELOAD_V 0x1 +#define TIMG_LACT_AUTORELOAD_S 29 +/* TIMG_LACT_DIVIDER : R/W ;bitpos:[28:13] ;default: 16'h1 ; */ +/*description: */ +#define TIMG_LACT_DIVIDER 0x0000FFFF +#define TIMG_LACT_DIVIDER_M ((TIMG_LACT_DIVIDER_V)<<(TIMG_LACT_DIVIDER_S)) +#define TIMG_LACT_DIVIDER_V 0xFFFF +#define TIMG_LACT_DIVIDER_S 13 +/* TIMG_LACT_EDGE_INT_EN : R/W ;bitpos:[12] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_LACT_EDGE_INT_EN (BIT(12)) +#define TIMG_LACT_EDGE_INT_EN_M (BIT(12)) +#define TIMG_LACT_EDGE_INT_EN_V 0x1 +#define TIMG_LACT_EDGE_INT_EN_S 12 +/* TIMG_LACT_LEVEL_INT_EN : R/W ;bitpos:[11] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_LACT_LEVEL_INT_EN (BIT(11)) +#define TIMG_LACT_LEVEL_INT_EN_M (BIT(11)) +#define TIMG_LACT_LEVEL_INT_EN_V 0x1 +#define TIMG_LACT_LEVEL_INT_EN_S 11 +/* TIMG_LACT_ALARM_EN : R/W ;bitpos:[10] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_LACT_ALARM_EN (BIT(10)) +#define TIMG_LACT_ALARM_EN_M (BIT(10)) +#define TIMG_LACT_ALARM_EN_V 0x1 +#define TIMG_LACT_ALARM_EN_S 10 +/* TIMG_LACT_LAC_EN : R/W ;bitpos:[9] ;default: 1'h1 ; */ +/*description: */ +#define TIMG_LACT_LAC_EN (BIT(9)) +#define TIMG_LACT_LAC_EN_M (BIT(9)) +#define TIMG_LACT_LAC_EN_V 0x1 +#define TIMG_LACT_LAC_EN_S 9 +/* TIMG_LACT_CPST_EN : R/W ;bitpos:[8] ;default: 1'h1 ; */ +/*description: */ +#define TIMG_LACT_CPST_EN (BIT(8)) +#define TIMG_LACT_CPST_EN_M (BIT(8)) +#define TIMG_LACT_CPST_EN_V 0x1 +#define TIMG_LACT_CPST_EN_S 8 +/* TIMG_LACT_RTC_ONLY : R/W ;bitpos:[7] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_LACT_RTC_ONLY (BIT(7)) +#define TIMG_LACT_RTC_ONLY_M (BIT(7)) +#define TIMG_LACT_RTC_ONLY_V 0x1 +#define TIMG_LACT_RTC_ONLY_S 7 + +#define TIMG_LACTRTC_REG(i) (REG_TIMG_BASE(i) + 0x0074) +/* TIMG_LACT_RTC_STEP_LEN : R/W ;bitpos:[31:6] ;default: 26'h0 ; */ +/*description: */ +#define TIMG_LACT_RTC_STEP_LEN 0x03FFFFFF +#define TIMG_LACT_RTC_STEP_LEN_M ((TIMG_LACT_RTC_STEP_LEN_V)<<(TIMG_LACT_RTC_STEP_LEN_S)) +#define TIMG_LACT_RTC_STEP_LEN_V 0x3FFFFFF +#define TIMG_LACT_RTC_STEP_LEN_S 6 + +#define TIMG_LACTLO_REG(i) (REG_TIMG_BASE(i) + 0x0078) +/* TIMG_LACT_LO : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define TIMG_LACT_LO 0xFFFFFFFF +#define TIMG_LACT_LO_M ((TIMG_LACT_LO_V)<<(TIMG_LACT_LO_S)) +#define TIMG_LACT_LO_V 0xFFFFFFFF +#define TIMG_LACT_LO_S 0 + +#define TIMG_LACTHI_REG(i) (REG_TIMG_BASE(i) + 0x007c) +/* TIMG_LACT_HI : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define TIMG_LACT_HI 0xFFFFFFFF +#define TIMG_LACT_HI_M ((TIMG_LACT_HI_V)<<(TIMG_LACT_HI_S)) +#define TIMG_LACT_HI_V 0xFFFFFFFF +#define TIMG_LACT_HI_S 0 + +#define TIMG_LACTUPDATE_REG(i) (REG_TIMG_BASE(i) + 0x0080) +/* TIMG_LACT_UPDATE : WO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define TIMG_LACT_UPDATE 0xFFFFFFFF +#define TIMG_LACT_UPDATE_M ((TIMG_LACT_UPDATE_V)<<(TIMG_LACT_UPDATE_S)) +#define TIMG_LACT_UPDATE_V 0xFFFFFFFF +#define TIMG_LACT_UPDATE_S 0 + +#define TIMG_LACTALARMLO_REG(i) (REG_TIMG_BASE(i) + 0x0084) +/* TIMG_LACT_ALARM_LO : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define TIMG_LACT_ALARM_LO 0xFFFFFFFF +#define TIMG_LACT_ALARM_LO_M ((TIMG_LACT_ALARM_LO_V)<<(TIMG_LACT_ALARM_LO_S)) +#define TIMG_LACT_ALARM_LO_V 0xFFFFFFFF +#define TIMG_LACT_ALARM_LO_S 0 + +#define TIMG_LACTALARMHI_REG(i) (REG_TIMG_BASE(i) + 0x0088) +/* TIMG_LACT_ALARM_HI : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define TIMG_LACT_ALARM_HI 0xFFFFFFFF +#define TIMG_LACT_ALARM_HI_M ((TIMG_LACT_ALARM_HI_V)<<(TIMG_LACT_ALARM_HI_S)) +#define TIMG_LACT_ALARM_HI_V 0xFFFFFFFF +#define TIMG_LACT_ALARM_HI_S 0 + +#define TIMG_LACTLOADLO_REG(i) (REG_TIMG_BASE(i) + 0x008c) +/* TIMG_LACT_LOAD_LO : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define TIMG_LACT_LOAD_LO 0xFFFFFFFF +#define TIMG_LACT_LOAD_LO_M ((TIMG_LACT_LOAD_LO_V)<<(TIMG_LACT_LOAD_LO_S)) +#define TIMG_LACT_LOAD_LO_V 0xFFFFFFFF +#define TIMG_LACT_LOAD_LO_S 0 + +#define TIMG_LACTLOADHI_REG(i) (REG_TIMG_BASE(i) + 0x0090) +/* TIMG_LACT_LOAD_HI : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define TIMG_LACT_LOAD_HI 0xFFFFFFFF +#define TIMG_LACT_LOAD_HI_M ((TIMG_LACT_LOAD_HI_V)<<(TIMG_LACT_LOAD_HI_S)) +#define TIMG_LACT_LOAD_HI_V 0xFFFFFFFF +#define TIMG_LACT_LOAD_HI_S 0 + +#define TIMG_LACTLOAD_REG(i) (REG_TIMG_BASE(i) + 0x0094) +/* TIMG_LACT_LOAD : WO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define TIMG_LACT_LOAD 0xFFFFFFFF +#define TIMG_LACT_LOAD_M ((TIMG_LACT_LOAD_V)<<(TIMG_LACT_LOAD_S)) +#define TIMG_LACT_LOAD_V 0xFFFFFFFF +#define TIMG_LACT_LOAD_S 0 + +#define TIMG_INT_ENA_TIMERS_REG(i) (REG_TIMG_BASE(i) + 0x0098) +/* TIMG_LACT_INT_ENA : R/W ;bitpos:[3] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_LACT_INT_ENA (BIT(3)) +#define TIMG_LACT_INT_ENA_M (BIT(3)) +#define TIMG_LACT_INT_ENA_V 0x1 +#define TIMG_LACT_INT_ENA_S 3 +/* TIMG_WDT_INT_ENA : R/W ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Interrupt when an interrupt stage timeout*/ +#define TIMG_WDT_INT_ENA (BIT(2)) +#define TIMG_WDT_INT_ENA_M (BIT(2)) +#define TIMG_WDT_INT_ENA_V 0x1 +#define TIMG_WDT_INT_ENA_S 2 +/* TIMG_T1_INT_ENA : R/W ;bitpos:[1] ;default: 1'h0 ; */ +/*description: interrupt when timer1 alarm*/ +#define TIMG_T1_INT_ENA (BIT(1)) +#define TIMG_T1_INT_ENA_M (BIT(1)) +#define TIMG_T1_INT_ENA_V 0x1 +#define TIMG_T1_INT_ENA_S 1 +/* TIMG_T0_INT_ENA : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: interrupt when timer0 alarm*/ +#define TIMG_T0_INT_ENA (BIT(0)) +#define TIMG_T0_INT_ENA_M (BIT(0)) +#define TIMG_T0_INT_ENA_V 0x1 +#define TIMG_T0_INT_ENA_S 0 + +#define TIMG_INT_RAW_TIMERS_REG(i) (REG_TIMG_BASE(i) + 0x009c) +/* TIMG_LACT_INT_RAW : RO ;bitpos:[3] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_LACT_INT_RAW (BIT(3)) +#define TIMG_LACT_INT_RAW_M (BIT(3)) +#define TIMG_LACT_INT_RAW_V 0x1 +#define TIMG_LACT_INT_RAW_S 3 +/* TIMG_WDT_INT_RAW : RO ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Interrupt when an interrupt stage timeout*/ +#define TIMG_WDT_INT_RAW (BIT(2)) +#define TIMG_WDT_INT_RAW_M (BIT(2)) +#define TIMG_WDT_INT_RAW_V 0x1 +#define TIMG_WDT_INT_RAW_S 2 +/* TIMG_T1_INT_RAW : RO ;bitpos:[1] ;default: 1'h0 ; */ +/*description: interrupt when timer1 alarm*/ +#define TIMG_T1_INT_RAW (BIT(1)) +#define TIMG_T1_INT_RAW_M (BIT(1)) +#define TIMG_T1_INT_RAW_V 0x1 +#define TIMG_T1_INT_RAW_S 1 +/* TIMG_T0_INT_RAW : RO ;bitpos:[0] ;default: 1'h0 ; */ +/*description: interrupt when timer0 alarm*/ +#define TIMG_T0_INT_RAW (BIT(0)) +#define TIMG_T0_INT_RAW_M (BIT(0)) +#define TIMG_T0_INT_RAW_V 0x1 +#define TIMG_T0_INT_RAW_S 0 + +#define TIMG_INT_ST_TIMERS_REG(i) (REG_TIMG_BASE(i) + 0x00a0) +/* TIMG_LACT_INT_ST : RO ;bitpos:[3] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_LACT_INT_ST (BIT(3)) +#define TIMG_LACT_INT_ST_M (BIT(3)) +#define TIMG_LACT_INT_ST_V 0x1 +#define TIMG_LACT_INT_ST_S 3 +/* TIMG_WDT_INT_ST : RO ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Interrupt when an interrupt stage timeout*/ +#define TIMG_WDT_INT_ST (BIT(2)) +#define TIMG_WDT_INT_ST_M (BIT(2)) +#define TIMG_WDT_INT_ST_V 0x1 +#define TIMG_WDT_INT_ST_S 2 +/* TIMG_T1_INT_ST : RO ;bitpos:[1] ;default: 1'h0 ; */ +/*description: interrupt when timer1 alarm*/ +#define TIMG_T1_INT_ST (BIT(1)) +#define TIMG_T1_INT_ST_M (BIT(1)) +#define TIMG_T1_INT_ST_V 0x1 +#define TIMG_T1_INT_ST_S 1 +/* TIMG_T0_INT_ST : RO ;bitpos:[0] ;default: 1'h0 ; */ +/*description: interrupt when timer0 alarm*/ +#define TIMG_T0_INT_ST (BIT(0)) +#define TIMG_T0_INT_ST_M (BIT(0)) +#define TIMG_T0_INT_ST_V 0x1 +#define TIMG_T0_INT_ST_S 0 + +#define TIMG_INT_CLR_TIMERS_REG(i) (REG_TIMG_BASE(i) + 0x00a4) +/* TIMG_LACT_INT_CLR : WO ;bitpos:[3] ;default: 1'h0 ; */ +/*description: */ +#define TIMG_LACT_INT_CLR (BIT(3)) +#define TIMG_LACT_INT_CLR_M (BIT(3)) +#define TIMG_LACT_INT_CLR_V 0x1 +#define TIMG_LACT_INT_CLR_S 3 +/* TIMG_WDT_INT_CLR : WO ;bitpos:[2] ;default: 1'h0 ; */ +/*description: Interrupt when an interrupt stage timeout*/ +#define TIMG_WDT_INT_CLR (BIT(2)) +#define TIMG_WDT_INT_CLR_M (BIT(2)) +#define TIMG_WDT_INT_CLR_V 0x1 +#define TIMG_WDT_INT_CLR_S 2 +/* TIMG_T1_INT_CLR : WO ;bitpos:[1] ;default: 1'h0 ; */ +/*description: interrupt when timer1 alarm*/ +#define TIMG_T1_INT_CLR (BIT(1)) +#define TIMG_T1_INT_CLR_M (BIT(1)) +#define TIMG_T1_INT_CLR_V 0x1 +#define TIMG_T1_INT_CLR_S 1 +/* TIMG_T0_INT_CLR : WO ;bitpos:[0] ;default: 1'h0 ; */ +/*description: interrupt when timer0 alarm*/ +#define TIMG_T0_INT_CLR (BIT(0)) +#define TIMG_T0_INT_CLR_M (BIT(0)) +#define TIMG_T0_INT_CLR_V 0x1 +#define TIMG_T0_INT_CLR_S 0 + +#define TIMG_NTIMERS_DATE_REG(i) (REG_TIMG_BASE(i) + 0x00f8) +/* TIMG_NTIMERS_DATE : R/W ;bitpos:[27:0] ;default: 28'h1604290 ; */ +/*description: Version of this regfile*/ +#define TIMG_NTIMERS_DATE 0x0FFFFFFF +#define TIMG_NTIMERS_DATE_M ((TIMG_NTIMERS_DATE_V)<<(TIMG_NTIMERS_DATE_S)) +#define TIMG_NTIMERS_DATE_V 0xFFFFFFF +#define TIMG_NTIMERS_DATE_S 0 + +#define TIMGCLK_REG(i) (REG_TIMG_BASE(i) + 0x00fc) +/* TIMG_CLK_EN : R/W ;bitpos:[31] ;default: 1'h0 ; */ +/*description: Force clock enable for this regfile*/ +#define TIMG_CLK_EN (BIT(31)) +#define TIMG_CLK_EN_M (BIT(31)) +#define TIMG_CLK_EN_V 0x1 +#define TIMG_CLK_EN_S 31 + + + + +#endif /*__TIMG_REG_H__ */ + + diff --git a/tools/sdk/include/esp32/soc/timer_group_struct.h b/tools/sdk/include/esp32/soc/timer_group_struct.h new file mode 100644 index 00000000..696b439d --- /dev/null +++ b/tools/sdk/include/esp32/soc/timer_group_struct.h @@ -0,0 +1,195 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_TIMG_STRUCT_H_ +#define _SOC_TIMG_STRUCT_H_ +typedef volatile struct { + struct{ + union { + struct { + uint32_t reserved0: 10; + uint32_t alarm_en: 1; /*When set alarm is enabled*/ + uint32_t level_int_en: 1; /*When set level type interrupt will be generated during alarm*/ + uint32_t edge_int_en: 1; /*When set edge type interrupt will be generated during alarm*/ + uint32_t divider: 16; /*Timer clock (T0/1_clk) pre-scale value.*/ + uint32_t autoreload: 1; /*When set timer 0/1 auto-reload at alarming is enabled*/ + uint32_t increase: 1; /*When set timer 0/1 time-base counter increment. When cleared timer 0 time-base counter decrement.*/ + uint32_t enable: 1; /*When set timer 0/1 time-base counter is enabled*/ + }; + uint32_t val; + } config; + uint32_t cnt_low; /*Register to store timer 0/1 time-base counter current value lower 32 bits.*/ + uint32_t cnt_high; /*Register to store timer 0 time-base counter current value higher 32 bits.*/ + uint32_t update; /*Write any value will trigger a timer 0 time-base counter value update (timer 0 current value will be stored in registers above)*/ + uint32_t alarm_low; /*Timer 0 time-base counter value lower 32 bits that will trigger the alarm*/ + uint32_t alarm_high; /*Timer 0 time-base counter value higher 32 bits that will trigger the alarm*/ + uint32_t load_low; /*Lower 32 bits of the value that will load into timer 0 time-base counter*/ + uint32_t load_high; /*higher 32 bits of the value that will load into timer 0 time-base counter*/ + uint32_t reload; /*Write any value will trigger timer 0 time-base counter reload*/ + } hw_timer[2]; + union { + struct { + uint32_t reserved0: 14; + uint32_t flashboot_mod_en: 1; /*When set flash boot protection is enabled*/ + uint32_t sys_reset_length: 3; /*length of system reset selection. 0: 100ns 1: 200ns 2: 300ns 3: 400ns 4: 500ns 5: 800ns 6: 1.6us 7: 3.2us*/ + uint32_t cpu_reset_length: 3; /*length of CPU reset selection. 0: 100ns 1: 200ns 2: 300ns 3: 400ns 4: 500ns 5: 800ns 6: 1.6us 7: 3.2us*/ + uint32_t level_int_en: 1; /*When set level type interrupt generation is enabled*/ + uint32_t edge_int_en: 1; /*When set edge type interrupt generation is enabled*/ + uint32_t stg3: 2; /*Stage 3 configuration. 0: off 1: interrupt 2: reset CPU 3: reset system*/ + uint32_t stg2: 2; /*Stage 2 configuration. 0: off 1: interrupt 2: reset CPU 3: reset system*/ + uint32_t stg1: 2; /*Stage 1 configuration. 0: off 1: interrupt 2: reset CPU 3: reset system*/ + uint32_t stg0: 2; /*Stage 0 configuration. 0: off 1: interrupt 2: reset CPU 3: reset system*/ + uint32_t en: 1; /*When set SWDT is enabled*/ + }; + uint32_t val; + } wdt_config0; + union { + struct { + uint32_t reserved0: 16; + uint32_t clk_prescale:16; /*SWDT clock prescale value. Period = 12.5ns * value stored in this register*/ + }; + uint32_t val; + } wdt_config1; + uint32_t wdt_config2; /*Stage 0 timeout value in SWDT clock cycles*/ + uint32_t wdt_config3; /*Stage 1 timeout value in SWDT clock cycles*/ + uint32_t wdt_config4; /*Stage 2 timeout value in SWDT clock cycles*/ + uint32_t wdt_config5; /*Stage 3 timeout value in SWDT clock cycles*/ + uint32_t wdt_feed; /*Write any value will feed SWDT*/ + uint32_t wdt_wprotect; /*If change its value from default then write protection is on.*/ + union { + struct { + uint32_t reserved0: 12; + uint32_t start_cycling: 1; + uint32_t clk_sel: 2; + uint32_t rdy: 1; + uint32_t max: 15; + uint32_t start: 1; + }; + uint32_t val; + } rtc_cali_cfg; + union { + struct { + uint32_t reserved0: 7; + uint32_t value:25; + }; + uint32_t val; + } rtc_cali_cfg1; + union { + struct { + uint32_t reserved0: 7; + uint32_t rtc_only: 1; + uint32_t cpst_en: 1; + uint32_t lac_en: 1; + uint32_t alarm_en: 1; + uint32_t level_int_en: 1; + uint32_t edge_int_en: 1; + uint32_t divider: 16; + uint32_t autoreload: 1; + uint32_t increase: 1; + uint32_t en: 1; + }; + uint32_t val; + } lactconfig; + union { + struct { + uint32_t reserved0: 6; + uint32_t step_len:26; + }; + uint32_t val; + } lactrtc; + uint32_t lactlo; /**/ + uint32_t lacthi; /**/ + uint32_t lactupdate; /**/ + uint32_t lactalarmlo; /**/ + uint32_t lactalarmhi; /**/ + uint32_t lactloadlo; /**/ + uint32_t lactloadhi; /**/ + uint32_t lactload; /**/ + union { + struct { + uint32_t t0: 1; /*interrupt when timer0 alarm*/ + uint32_t t1: 1; /*interrupt when timer1 alarm*/ + uint32_t wdt: 1; /*Interrupt when an interrupt stage timeout*/ + uint32_t lact: 1; + uint32_t reserved4: 28; + }; + uint32_t val; + } int_ena; + union { + struct { + uint32_t t0: 1; /*interrupt when timer0 alarm*/ + uint32_t t1: 1; /*interrupt when timer1 alarm*/ + uint32_t wdt: 1; /*Interrupt when an interrupt stage timeout*/ + uint32_t lact: 1; + uint32_t reserved4:28; + }; + uint32_t val; + } int_raw; + union { + struct { + uint32_t t0: 1; /*interrupt when timer0 alarm*/ + uint32_t t1: 1; /*interrupt when timer1 alarm*/ + uint32_t wdt: 1; /*Interrupt when an interrupt stage timeout*/ + uint32_t lact: 1; + uint32_t reserved4: 28; + }; + uint32_t val; + } int_st_timers; + union { + struct { + uint32_t t0: 1; /*interrupt when timer0 alarm*/ + uint32_t t1: 1; /*interrupt when timer1 alarm*/ + uint32_t wdt: 1; /*Interrupt when an interrupt stage timeout*/ + uint32_t lact: 1; + uint32_t reserved4: 28; + }; + uint32_t val; + } int_clr_timers; + uint32_t reserved_a8; + uint32_t reserved_ac; + uint32_t reserved_b0; + uint32_t reserved_b4; + uint32_t reserved_b8; + uint32_t reserved_bc; + uint32_t reserved_c0; + uint32_t reserved_c4; + uint32_t reserved_c8; + uint32_t reserved_cc; + uint32_t reserved_d0; + uint32_t reserved_d4; + uint32_t reserved_d8; + uint32_t reserved_dc; + uint32_t reserved_e0; + uint32_t reserved_e4; + uint32_t reserved_e8; + uint32_t reserved_ec; + uint32_t reserved_f0; + uint32_t reserved_f4; + union { + struct { + uint32_t date:28; /*Version of this regfile*/ + uint32_t reserved28: 4; + }; + uint32_t val; + } timg_date; + union { + struct { + uint32_t reserved0: 31; + uint32_t en: 1; /*Force clock enable for this regfile*/ + }; + uint32_t val; + } clk; +} timg_dev_t; +extern timg_dev_t TIMERG0; +extern timg_dev_t TIMERG1; +#endif /* _SOC_TIMG_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/uart_reg.h b/tools/sdk/include/esp32/soc/uart_reg.h new file mode 100644 index 00000000..155700b2 --- /dev/null +++ b/tools/sdk/include/esp32/soc/uart_reg.h @@ -0,0 +1,1165 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef __UART_REG_H__ +#define __UART_REG_H__ + + +#include "soc.h" + +#define REG_UART_BASE( i ) (DR_REG_UART_BASE + (i) * 0x10000 + ( i > 1 ? 0xe000 : 0 ) ) + +#define UART_FIFO_REG(i) (REG_UART_BASE(i) + 0x0) +/* UART_RXFIFO_RD_BYTE : RO ;bitpos:[7:0] ;default: 8'b0 ; */ +/*description: This register stores one byte data read by rx fifo.*/ +#define UART_RXFIFO_RD_BYTE 0x000000FF +#define UART_RXFIFO_RD_BYTE_M ((UART_RXFIFO_RD_BYTE_V)<<(UART_RXFIFO_RD_BYTE_S)) +#define UART_RXFIFO_RD_BYTE_V 0xFF +#define UART_RXFIFO_RD_BYTE_S 0 + +#define UART_INT_RAW_REG(i) (REG_UART_BASE(i) + 0x4) +/* UART_AT_CMD_CHAR_DET_INT_RAW : RO ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver detects + the configured at_cmd chars.*/ +#define UART_AT_CMD_CHAR_DET_INT_RAW (BIT(18)) +#define UART_AT_CMD_CHAR_DET_INT_RAW_M (BIT(18)) +#define UART_AT_CMD_CHAR_DET_INT_RAW_V 0x1 +#define UART_AT_CMD_CHAR_DET_INT_RAW_S 18 +/* UART_RS485_CLASH_INT_RAW : RO ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when rs485 detects + the clash between transmitter and receiver.*/ +#define UART_RS485_CLASH_INT_RAW (BIT(17)) +#define UART_RS485_CLASH_INT_RAW_M (BIT(17)) +#define UART_RS485_CLASH_INT_RAW_V 0x1 +#define UART_RS485_CLASH_INT_RAW_S 17 +/* UART_RS485_FRM_ERR_INT_RAW : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when rs485 detects + the data frame error.*/ +#define UART_RS485_FRM_ERR_INT_RAW (BIT(16)) +#define UART_RS485_FRM_ERR_INT_RAW_M (BIT(16)) +#define UART_RS485_FRM_ERR_INT_RAW_V 0x1 +#define UART_RS485_FRM_ERR_INT_RAW_S 16 +/* UART_RS485_PARITY_ERR_INT_RAW : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when rs485 detects the parity error.*/ +#define UART_RS485_PARITY_ERR_INT_RAW (BIT(15)) +#define UART_RS485_PARITY_ERR_INT_RAW_M (BIT(15)) +#define UART_RS485_PARITY_ERR_INT_RAW_V 0x1 +#define UART_RS485_PARITY_ERR_INT_RAW_S 15 +/* UART_TX_DONE_INT_RAW : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when transmitter has + send all the data in fifo.*/ +#define UART_TX_DONE_INT_RAW (BIT(14)) +#define UART_TX_DONE_INT_RAW_M (BIT(14)) +#define UART_TX_DONE_INT_RAW_V 0x1 +#define UART_TX_DONE_INT_RAW_S 14 +/* UART_TX_BRK_IDLE_DONE_INT_RAW : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when transmitter has + kept the shortest duration after the last data has been send.*/ +#define UART_TX_BRK_IDLE_DONE_INT_RAW (BIT(13)) +#define UART_TX_BRK_IDLE_DONE_INT_RAW_M (BIT(13)) +#define UART_TX_BRK_IDLE_DONE_INT_RAW_V 0x1 +#define UART_TX_BRK_IDLE_DONE_INT_RAW_S 13 +/* UART_TX_BRK_DONE_INT_RAW : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when transmitter completes + sendding 0 after all the datas in transmitter's fifo are send.*/ +#define UART_TX_BRK_DONE_INT_RAW (BIT(12)) +#define UART_TX_BRK_DONE_INT_RAW_M (BIT(12)) +#define UART_TX_BRK_DONE_INT_RAW_V 0x1 +#define UART_TX_BRK_DONE_INT_RAW_S 12 +/* UART_GLITCH_DET_INT_RAW : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver detects the start bit.*/ +#define UART_GLITCH_DET_INT_RAW (BIT(11)) +#define UART_GLITCH_DET_INT_RAW_M (BIT(11)) +#define UART_GLITCH_DET_INT_RAW_V 0x1 +#define UART_GLITCH_DET_INT_RAW_S 11 +/* UART_SW_XOFF_INT_RAW : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver receives + xon char with uart_sw_flow_con_en is set to 1.*/ +#define UART_SW_XOFF_INT_RAW (BIT(10)) +#define UART_SW_XOFF_INT_RAW_M (BIT(10)) +#define UART_SW_XOFF_INT_RAW_V 0x1 +#define UART_SW_XOFF_INT_RAW_S 10 +/* UART_SW_XON_INT_RAW : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver receives + xoff char with uart_sw_flow_con_en is set to 1.*/ +#define UART_SW_XON_INT_RAW (BIT(9)) +#define UART_SW_XON_INT_RAW_M (BIT(9)) +#define UART_SW_XON_INT_RAW_V 0x1 +#define UART_SW_XON_INT_RAW_S 9 +/* UART_RXFIFO_TOUT_INT_RAW : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver takes + more time than rx_tout_thrhd to receive a byte.*/ +#define UART_RXFIFO_TOUT_INT_RAW (BIT(8)) +#define UART_RXFIFO_TOUT_INT_RAW_M (BIT(8)) +#define UART_RXFIFO_TOUT_INT_RAW_V 0x1 +#define UART_RXFIFO_TOUT_INT_RAW_S 8 +/* UART_BRK_DET_INT_RAW : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver detects + the 0 after the stop bit.*/ +#define UART_BRK_DET_INT_RAW (BIT(7)) +#define UART_BRK_DET_INT_RAW_M (BIT(7)) +#define UART_BRK_DET_INT_RAW_V 0x1 +#define UART_BRK_DET_INT_RAW_S 7 +/* UART_CTS_CHG_INT_RAW : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver detects + the edge change of ctsn signal.*/ +#define UART_CTS_CHG_INT_RAW (BIT(6)) +#define UART_CTS_CHG_INT_RAW_M (BIT(6)) +#define UART_CTS_CHG_INT_RAW_V 0x1 +#define UART_CTS_CHG_INT_RAW_S 6 +/* UART_DSR_CHG_INT_RAW : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver detects + the edge change of dsrn signal.*/ +#define UART_DSR_CHG_INT_RAW (BIT(5)) +#define UART_DSR_CHG_INT_RAW_M (BIT(5)) +#define UART_DSR_CHG_INT_RAW_V 0x1 +#define UART_DSR_CHG_INT_RAW_S 5 +/* UART_RXFIFO_OVF_INT_RAW : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver receives + more data than the fifo can store.*/ +#define UART_RXFIFO_OVF_INT_RAW (BIT(4)) +#define UART_RXFIFO_OVF_INT_RAW_M (BIT(4)) +#define UART_RXFIFO_OVF_INT_RAW_V 0x1 +#define UART_RXFIFO_OVF_INT_RAW_S 4 +/* UART_FRM_ERR_INT_RAW : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver detects + data's frame error .*/ +#define UART_FRM_ERR_INT_RAW (BIT(3)) +#define UART_FRM_ERR_INT_RAW_M (BIT(3)) +#define UART_FRM_ERR_INT_RAW_V 0x1 +#define UART_FRM_ERR_INT_RAW_S 3 +/* UART_PARITY_ERR_INT_RAW : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver detects + the parity error of data.*/ +#define UART_PARITY_ERR_INT_RAW (BIT(2)) +#define UART_PARITY_ERR_INT_RAW_M (BIT(2)) +#define UART_PARITY_ERR_INT_RAW_V 0x1 +#define UART_PARITY_ERR_INT_RAW_S 2 +/* UART_TXFIFO_EMPTY_INT_RAW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when the amount of + data in transmitter's fifo is less than ((tx_mem_cnttxfifo_cnt) .*/ +#define UART_TXFIFO_EMPTY_INT_RAW (BIT(1)) +#define UART_TXFIFO_EMPTY_INT_RAW_M (BIT(1)) +#define UART_TXFIFO_EMPTY_INT_RAW_V 0x1 +#define UART_TXFIFO_EMPTY_INT_RAW_S 1 +/* UART_RXFIFO_FULL_INT_RAW : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: This interrupt raw bit turns to high level when receiver receives + more data than (rx_flow_thrhd_h3 rx_flow_thrhd).*/ +#define UART_RXFIFO_FULL_INT_RAW (BIT(0)) +#define UART_RXFIFO_FULL_INT_RAW_M (BIT(0)) +#define UART_RXFIFO_FULL_INT_RAW_V 0x1 +#define UART_RXFIFO_FULL_INT_RAW_S 0 + +#define UART_INT_ST_REG(i) (REG_UART_BASE(i) + 0x8) +/* UART_AT_CMD_CHAR_DET_INT_ST : RO ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena + is set to 1.*/ +#define UART_AT_CMD_CHAR_DET_INT_ST (BIT(18)) +#define UART_AT_CMD_CHAR_DET_INT_ST_M (BIT(18)) +#define UART_AT_CMD_CHAR_DET_INT_ST_V 0x1 +#define UART_AT_CMD_CHAR_DET_INT_ST_S 18 +/* UART_RS485_CLASH_INT_ST : RO ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena + is set to 1.*/ +#define UART_RS485_CLASH_INT_ST (BIT(17)) +#define UART_RS485_CLASH_INT_ST_M (BIT(17)) +#define UART_RS485_CLASH_INT_ST_V 0x1 +#define UART_RS485_CLASH_INT_ST_S 17 +/* UART_RS485_FRM_ERR_INT_ST : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This is the status bit for rs485_fm_err_int_raw when rs485_fm_err_int_ena + is set to 1.*/ +#define UART_RS485_FRM_ERR_INT_ST (BIT(16)) +#define UART_RS485_FRM_ERR_INT_ST_M (BIT(16)) +#define UART_RS485_FRM_ERR_INT_ST_V 0x1 +#define UART_RS485_FRM_ERR_INT_ST_S 16 +/* UART_RS485_PARITY_ERR_INT_ST : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena + is set to 1.*/ +#define UART_RS485_PARITY_ERR_INT_ST (BIT(15)) +#define UART_RS485_PARITY_ERR_INT_ST_M (BIT(15)) +#define UART_RS485_PARITY_ERR_INT_ST_V 0x1 +#define UART_RS485_PARITY_ERR_INT_ST_S 15 +/* UART_TX_DONE_INT_ST : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.*/ +#define UART_TX_DONE_INT_ST (BIT(14)) +#define UART_TX_DONE_INT_ST_M (BIT(14)) +#define UART_TX_DONE_INT_ST_V 0x1 +#define UART_TX_DONE_INT_ST_S 14 +/* UART_TX_BRK_IDLE_DONE_INT_ST : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + is set to 1.*/ +#define UART_TX_BRK_IDLE_DONE_INT_ST (BIT(13)) +#define UART_TX_BRK_IDLE_DONE_INT_ST_M (BIT(13)) +#define UART_TX_BRK_IDLE_DONE_INT_ST_V 0x1 +#define UART_TX_BRK_IDLE_DONE_INT_ST_S 13 +/* UART_TX_BRK_DONE_INT_ST : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena + is set to 1.*/ +#define UART_TX_BRK_DONE_INT_ST (BIT(12)) +#define UART_TX_BRK_DONE_INT_ST_M (BIT(12)) +#define UART_TX_BRK_DONE_INT_ST_V 0x1 +#define UART_TX_BRK_DONE_INT_ST_S 12 +/* UART_GLITCH_DET_INT_ST : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: This is the status bit for glitch_det_int_raw when glitch_det_int_ena + is set to 1.*/ +#define UART_GLITCH_DET_INT_ST (BIT(11)) +#define UART_GLITCH_DET_INT_ST_M (BIT(11)) +#define UART_GLITCH_DET_INT_ST_V 0x1 +#define UART_GLITCH_DET_INT_ST_S 11 +/* UART_SW_XOFF_INT_ST : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.*/ +#define UART_SW_XOFF_INT_ST (BIT(10)) +#define UART_SW_XOFF_INT_ST_M (BIT(10)) +#define UART_SW_XOFF_INT_ST_V 0x1 +#define UART_SW_XOFF_INT_ST_S 10 +/* UART_SW_XON_INT_ST : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.*/ +#define UART_SW_XON_INT_ST (BIT(9)) +#define UART_SW_XON_INT_ST_M (BIT(9)) +#define UART_SW_XON_INT_ST_V 0x1 +#define UART_SW_XON_INT_ST_S 9 +/* UART_RXFIFO_TOUT_INT_ST : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena + is set to 1.*/ +#define UART_RXFIFO_TOUT_INT_ST (BIT(8)) +#define UART_RXFIFO_TOUT_INT_ST_M (BIT(8)) +#define UART_RXFIFO_TOUT_INT_ST_V 0x1 +#define UART_RXFIFO_TOUT_INT_ST_S 8 +/* UART_BRK_DET_INT_ST : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.*/ +#define UART_BRK_DET_INT_ST (BIT(7)) +#define UART_BRK_DET_INT_ST_M (BIT(7)) +#define UART_BRK_DET_INT_ST_V 0x1 +#define UART_BRK_DET_INT_ST_S 7 +/* UART_CTS_CHG_INT_ST : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.*/ +#define UART_CTS_CHG_INT_ST (BIT(6)) +#define UART_CTS_CHG_INT_ST_M (BIT(6)) +#define UART_CTS_CHG_INT_ST_V 0x1 +#define UART_CTS_CHG_INT_ST_S 6 +/* UART_DSR_CHG_INT_ST : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.*/ +#define UART_DSR_CHG_INT_ST (BIT(5)) +#define UART_DSR_CHG_INT_ST_M (BIT(5)) +#define UART_DSR_CHG_INT_ST_V 0x1 +#define UART_DSR_CHG_INT_ST_S 5 +/* UART_RXFIFO_OVF_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena + is set to 1.*/ +#define UART_RXFIFO_OVF_INT_ST (BIT(4)) +#define UART_RXFIFO_OVF_INT_ST_M (BIT(4)) +#define UART_RXFIFO_OVF_INT_ST_V 0x1 +#define UART_RXFIFO_OVF_INT_ST_S 4 +/* UART_FRM_ERR_INT_ST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This is the status bit for frm_err_int_raw when fm_err_int_ena is set to 1.*/ +#define UART_FRM_ERR_INT_ST (BIT(3)) +#define UART_FRM_ERR_INT_ST_M (BIT(3)) +#define UART_FRM_ERR_INT_ST_V 0x1 +#define UART_FRM_ERR_INT_ST_S 3 +/* UART_PARITY_ERR_INT_ST : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the status bit for parity_err_int_raw when parity_err_int_ena + is set to 1.*/ +#define UART_PARITY_ERR_INT_ST (BIT(2)) +#define UART_PARITY_ERR_INT_ST_M (BIT(2)) +#define UART_PARITY_ERR_INT_ST_V 0x1 +#define UART_PARITY_ERR_INT_ST_S 2 +/* UART_TXFIFO_EMPTY_INT_ST : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: This is the status bit for txfifo_empty_int_raw when txfifo_empty_int_ena + is set to 1.*/ +#define UART_TXFIFO_EMPTY_INT_ST (BIT(1)) +#define UART_TXFIFO_EMPTY_INT_ST_M (BIT(1)) +#define UART_TXFIFO_EMPTY_INT_ST_V 0x1 +#define UART_TXFIFO_EMPTY_INT_ST_S 1 +/* UART_RXFIFO_FULL_INT_ST : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena + is set to 1.*/ +#define UART_RXFIFO_FULL_INT_ST (BIT(0)) +#define UART_RXFIFO_FULL_INT_ST_M (BIT(0)) +#define UART_RXFIFO_FULL_INT_ST_V 0x1 +#define UART_RXFIFO_FULL_INT_ST_S 0 + +#define UART_INT_ENA_REG(i) (REG_UART_BASE(i) + 0xC) +/* UART_AT_CMD_CHAR_DET_INT_ENA : R/W ;bitpos:[18] ;default: 1'b0 ; */ +/*description: This is the enable bit for at_cmd_char_det_int_st register.*/ +#define UART_AT_CMD_CHAR_DET_INT_ENA (BIT(18)) +#define UART_AT_CMD_CHAR_DET_INT_ENA_M (BIT(18)) +#define UART_AT_CMD_CHAR_DET_INT_ENA_V 0x1 +#define UART_AT_CMD_CHAR_DET_INT_ENA_S 18 +/* UART_RS485_CLASH_INT_ENA : R/W ;bitpos:[17] ;default: 1'b0 ; */ +/*description: This is the enable bit for rs485_clash_int_st register.*/ +#define UART_RS485_CLASH_INT_ENA (BIT(17)) +#define UART_RS485_CLASH_INT_ENA_M (BIT(17)) +#define UART_RS485_CLASH_INT_ENA_V 0x1 +#define UART_RS485_CLASH_INT_ENA_S 17 +/* UART_RS485_FRM_ERR_INT_ENA : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: This is the enable bit for rs485_parity_err_int_st register.*/ +#define UART_RS485_FRM_ERR_INT_ENA (BIT(16)) +#define UART_RS485_FRM_ERR_INT_ENA_M (BIT(16)) +#define UART_RS485_FRM_ERR_INT_ENA_V 0x1 +#define UART_RS485_FRM_ERR_INT_ENA_S 16 +/* UART_RS485_PARITY_ERR_INT_ENA : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This is the enable bit for rs485_parity_err_int_st register.*/ +#define UART_RS485_PARITY_ERR_INT_ENA (BIT(15)) +#define UART_RS485_PARITY_ERR_INT_ENA_M (BIT(15)) +#define UART_RS485_PARITY_ERR_INT_ENA_V 0x1 +#define UART_RS485_PARITY_ERR_INT_ENA_S 15 +/* UART_TX_DONE_INT_ENA : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This is the enable bit for tx_done_int_st register.*/ +#define UART_TX_DONE_INT_ENA (BIT(14)) +#define UART_TX_DONE_INT_ENA_M (BIT(14)) +#define UART_TX_DONE_INT_ENA_V 0x1 +#define UART_TX_DONE_INT_ENA_S 14 +/* UART_TX_BRK_IDLE_DONE_INT_ENA : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: This is the enable bit for tx_brk_idle_done_int_st register.*/ +#define UART_TX_BRK_IDLE_DONE_INT_ENA (BIT(13)) +#define UART_TX_BRK_IDLE_DONE_INT_ENA_M (BIT(13)) +#define UART_TX_BRK_IDLE_DONE_INT_ENA_V 0x1 +#define UART_TX_BRK_IDLE_DONE_INT_ENA_S 13 +/* UART_TX_BRK_DONE_INT_ENA : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: This is the enable bit for tx_brk_done_int_st register.*/ +#define UART_TX_BRK_DONE_INT_ENA (BIT(12)) +#define UART_TX_BRK_DONE_INT_ENA_M (BIT(12)) +#define UART_TX_BRK_DONE_INT_ENA_V 0x1 +#define UART_TX_BRK_DONE_INT_ENA_S 12 +/* UART_GLITCH_DET_INT_ENA : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: This is the enable bit for glitch_det_int_st register.*/ +#define UART_GLITCH_DET_INT_ENA (BIT(11)) +#define UART_GLITCH_DET_INT_ENA_M (BIT(11)) +#define UART_GLITCH_DET_INT_ENA_V 0x1 +#define UART_GLITCH_DET_INT_ENA_S 11 +/* UART_SW_XOFF_INT_ENA : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: This is the enable bit for sw_xoff_int_st register.*/ +#define UART_SW_XOFF_INT_ENA (BIT(10)) +#define UART_SW_XOFF_INT_ENA_M (BIT(10)) +#define UART_SW_XOFF_INT_ENA_V 0x1 +#define UART_SW_XOFF_INT_ENA_S 10 +/* UART_SW_XON_INT_ENA : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: This is the enable bit for sw_xon_int_st register.*/ +#define UART_SW_XON_INT_ENA (BIT(9)) +#define UART_SW_XON_INT_ENA_M (BIT(9)) +#define UART_SW_XON_INT_ENA_V 0x1 +#define UART_SW_XON_INT_ENA_S 9 +/* UART_RXFIFO_TOUT_INT_ENA : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: This is the enable bit for rxfifo_tout_int_st register.*/ +#define UART_RXFIFO_TOUT_INT_ENA (BIT(8)) +#define UART_RXFIFO_TOUT_INT_ENA_M (BIT(8)) +#define UART_RXFIFO_TOUT_INT_ENA_V 0x1 +#define UART_RXFIFO_TOUT_INT_ENA_S 8 +/* UART_BRK_DET_INT_ENA : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This is the enable bit for brk_det_int_st register.*/ +#define UART_BRK_DET_INT_ENA (BIT(7)) +#define UART_BRK_DET_INT_ENA_M (BIT(7)) +#define UART_BRK_DET_INT_ENA_V 0x1 +#define UART_BRK_DET_INT_ENA_S 7 +/* UART_CTS_CHG_INT_ENA : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: This is the enable bit for cts_chg_int_st register.*/ +#define UART_CTS_CHG_INT_ENA (BIT(6)) +#define UART_CTS_CHG_INT_ENA_M (BIT(6)) +#define UART_CTS_CHG_INT_ENA_V 0x1 +#define UART_CTS_CHG_INT_ENA_S 6 +/* UART_DSR_CHG_INT_ENA : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: This is the enable bit for dsr_chg_int_st register.*/ +#define UART_DSR_CHG_INT_ENA (BIT(5)) +#define UART_DSR_CHG_INT_ENA_M (BIT(5)) +#define UART_DSR_CHG_INT_ENA_V 0x1 +#define UART_DSR_CHG_INT_ENA_S 5 +/* UART_RXFIFO_OVF_INT_ENA : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: This is the enable bit for rxfifo_ovf_int_st register.*/ +#define UART_RXFIFO_OVF_INT_ENA (BIT(4)) +#define UART_RXFIFO_OVF_INT_ENA_M (BIT(4)) +#define UART_RXFIFO_OVF_INT_ENA_V 0x1 +#define UART_RXFIFO_OVF_INT_ENA_S 4 +/* UART_FRM_ERR_INT_ENA : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: This is the enable bit for frm_err_int_st register.*/ +#define UART_FRM_ERR_INT_ENA (BIT(3)) +#define UART_FRM_ERR_INT_ENA_M (BIT(3)) +#define UART_FRM_ERR_INT_ENA_V 0x1 +#define UART_FRM_ERR_INT_ENA_S 3 +/* UART_PARITY_ERR_INT_ENA : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: This is the enable bit for parity_err_int_st register.*/ +#define UART_PARITY_ERR_INT_ENA (BIT(2)) +#define UART_PARITY_ERR_INT_ENA_M (BIT(2)) +#define UART_PARITY_ERR_INT_ENA_V 0x1 +#define UART_PARITY_ERR_INT_ENA_S 2 +/* UART_TXFIFO_EMPTY_INT_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: This is the enable bit for rxfifo_full_int_st register.*/ +#define UART_TXFIFO_EMPTY_INT_ENA (BIT(1)) +#define UART_TXFIFO_EMPTY_INT_ENA_M (BIT(1)) +#define UART_TXFIFO_EMPTY_INT_ENA_V 0x1 +#define UART_TXFIFO_EMPTY_INT_ENA_S 1 +/* UART_RXFIFO_FULL_INT_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: This is the enable bit for rxfifo_full_int_st register.*/ +#define UART_RXFIFO_FULL_INT_ENA (BIT(0)) +#define UART_RXFIFO_FULL_INT_ENA_M (BIT(0)) +#define UART_RXFIFO_FULL_INT_ENA_V 0x1 +#define UART_RXFIFO_FULL_INT_ENA_S 0 + +#define UART_INT_CLR_REG(i) (REG_UART_BASE(i) + 0x10) +/* UART_AT_CMD_CHAR_DET_INT_CLR : WO ;bitpos:[18] ;default: 1'b0 ; */ +/*description: Set this bit to clear the at_cmd_char_det_int_raw interrupt.*/ +#define UART_AT_CMD_CHAR_DET_INT_CLR (BIT(18)) +#define UART_AT_CMD_CHAR_DET_INT_CLR_M (BIT(18)) +#define UART_AT_CMD_CHAR_DET_INT_CLR_V 0x1 +#define UART_AT_CMD_CHAR_DET_INT_CLR_S 18 +/* UART_RS485_CLASH_INT_CLR : WO ;bitpos:[17] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rs485_clash_int_raw interrupt.*/ +#define UART_RS485_CLASH_INT_CLR (BIT(17)) +#define UART_RS485_CLASH_INT_CLR_M (BIT(17)) +#define UART_RS485_CLASH_INT_CLR_V 0x1 +#define UART_RS485_CLASH_INT_CLR_S 17 +/* UART_RS485_FRM_ERR_INT_CLR : WO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rs485_frm_err_int_raw interrupt.*/ +#define UART_RS485_FRM_ERR_INT_CLR (BIT(16)) +#define UART_RS485_FRM_ERR_INT_CLR_M (BIT(16)) +#define UART_RS485_FRM_ERR_INT_CLR_V 0x1 +#define UART_RS485_FRM_ERR_INT_CLR_S 16 +/* UART_RS485_PARITY_ERR_INT_CLR : WO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rs485_parity_err_int_raw interrupt.*/ +#define UART_RS485_PARITY_ERR_INT_CLR (BIT(15)) +#define UART_RS485_PARITY_ERR_INT_CLR_M (BIT(15)) +#define UART_RS485_PARITY_ERR_INT_CLR_V 0x1 +#define UART_RS485_PARITY_ERR_INT_CLR_S 15 +/* UART_TX_DONE_INT_CLR : WO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: Set this bit to clear the tx_done_int_raw interrupt.*/ +#define UART_TX_DONE_INT_CLR (BIT(14)) +#define UART_TX_DONE_INT_CLR_M (BIT(14)) +#define UART_TX_DONE_INT_CLR_V 0x1 +#define UART_TX_DONE_INT_CLR_S 14 +/* UART_TX_BRK_IDLE_DONE_INT_CLR : WO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: Set this bit to clear the tx_brk_idle_done_int_raw interrupt.*/ +#define UART_TX_BRK_IDLE_DONE_INT_CLR (BIT(13)) +#define UART_TX_BRK_IDLE_DONE_INT_CLR_M (BIT(13)) +#define UART_TX_BRK_IDLE_DONE_INT_CLR_V 0x1 +#define UART_TX_BRK_IDLE_DONE_INT_CLR_S 13 +/* UART_TX_BRK_DONE_INT_CLR : WO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: Set this bit to clear the tx_brk_done_int_raw interrupt..*/ +#define UART_TX_BRK_DONE_INT_CLR (BIT(12)) +#define UART_TX_BRK_DONE_INT_CLR_M (BIT(12)) +#define UART_TX_BRK_DONE_INT_CLR_V 0x1 +#define UART_TX_BRK_DONE_INT_CLR_S 12 +/* UART_GLITCH_DET_INT_CLR : WO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: Set this bit to clear the glitch_det_int_raw interrupt.*/ +#define UART_GLITCH_DET_INT_CLR (BIT(11)) +#define UART_GLITCH_DET_INT_CLR_M (BIT(11)) +#define UART_GLITCH_DET_INT_CLR_V 0x1 +#define UART_GLITCH_DET_INT_CLR_S 11 +/* UART_SW_XOFF_INT_CLR : WO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: Set this bit to clear the sw_xon_int_raw interrupt.*/ +#define UART_SW_XOFF_INT_CLR (BIT(10)) +#define UART_SW_XOFF_INT_CLR_M (BIT(10)) +#define UART_SW_XOFF_INT_CLR_V 0x1 +#define UART_SW_XOFF_INT_CLR_S 10 +/* UART_SW_XON_INT_CLR : WO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: Set this bit to clear the sw_xon_int_raw interrupt.*/ +#define UART_SW_XON_INT_CLR (BIT(9)) +#define UART_SW_XON_INT_CLR_M (BIT(9)) +#define UART_SW_XON_INT_CLR_V 0x1 +#define UART_SW_XON_INT_CLR_S 9 +/* UART_RXFIFO_TOUT_INT_CLR : WO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rxfifo_tout_int_raw interrupt.*/ +#define UART_RXFIFO_TOUT_INT_CLR (BIT(8)) +#define UART_RXFIFO_TOUT_INT_CLR_M (BIT(8)) +#define UART_RXFIFO_TOUT_INT_CLR_V 0x1 +#define UART_RXFIFO_TOUT_INT_CLR_S 8 +/* UART_BRK_DET_INT_CLR : WO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set this bit to clear the brk_det_int_raw interrupt.*/ +#define UART_BRK_DET_INT_CLR (BIT(7)) +#define UART_BRK_DET_INT_CLR_M (BIT(7)) +#define UART_BRK_DET_INT_CLR_V 0x1 +#define UART_BRK_DET_INT_CLR_S 7 +/* UART_CTS_CHG_INT_CLR : WO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to clear the cts_chg_int_raw interrupt.*/ +#define UART_CTS_CHG_INT_CLR (BIT(6)) +#define UART_CTS_CHG_INT_CLR_M (BIT(6)) +#define UART_CTS_CHG_INT_CLR_V 0x1 +#define UART_CTS_CHG_INT_CLR_S 6 +/* UART_DSR_CHG_INT_CLR : WO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Set this bit to clear the dsr_chg_int_raw interrupt.*/ +#define UART_DSR_CHG_INT_CLR (BIT(5)) +#define UART_DSR_CHG_INT_CLR_M (BIT(5)) +#define UART_DSR_CHG_INT_CLR_V 0x1 +#define UART_DSR_CHG_INT_CLR_S 5 +/* UART_RXFIFO_OVF_INT_CLR : WO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to clear rxfifo_ovf_int_raw interrupt.*/ +#define UART_RXFIFO_OVF_INT_CLR (BIT(4)) +#define UART_RXFIFO_OVF_INT_CLR_M (BIT(4)) +#define UART_RXFIFO_OVF_INT_CLR_V 0x1 +#define UART_RXFIFO_OVF_INT_CLR_S 4 +/* UART_FRM_ERR_INT_CLR : WO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to clear frm_err_int_raw interrupt.*/ +#define UART_FRM_ERR_INT_CLR (BIT(3)) +#define UART_FRM_ERR_INT_CLR_M (BIT(3)) +#define UART_FRM_ERR_INT_CLR_V 0x1 +#define UART_FRM_ERR_INT_CLR_S 3 +/* UART_PARITY_ERR_INT_CLR : WO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to clear parity_err_int_raw interrupt.*/ +#define UART_PARITY_ERR_INT_CLR (BIT(2)) +#define UART_PARITY_ERR_INT_CLR_M (BIT(2)) +#define UART_PARITY_ERR_INT_CLR_V 0x1 +#define UART_PARITY_ERR_INT_CLR_S 2 +/* UART_TXFIFO_EMPTY_INT_CLR : WO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to clear txfifo_empty_int_raw interrupt.*/ +#define UART_TXFIFO_EMPTY_INT_CLR (BIT(1)) +#define UART_TXFIFO_EMPTY_INT_CLR_M (BIT(1)) +#define UART_TXFIFO_EMPTY_INT_CLR_V 0x1 +#define UART_TXFIFO_EMPTY_INT_CLR_S 1 +/* UART_RXFIFO_FULL_INT_CLR : WO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Set this bit to clear the rxfifo_full_int_raw interrupt.*/ +#define UART_RXFIFO_FULL_INT_CLR (BIT(0)) +#define UART_RXFIFO_FULL_INT_CLR_M (BIT(0)) +#define UART_RXFIFO_FULL_INT_CLR_V 0x1 +#define UART_RXFIFO_FULL_INT_CLR_S 0 + +#define UART_CLKDIV_REG(i) (REG_UART_BASE(i) + 0x14) +/* UART_CLKDIV_FRAG : R/W ;bitpos:[23:20] ;default: 4'h0 ; */ +/*description: The register value is the decimal part of the frequency divider's factor.*/ +#define UART_CLKDIV_FRAG 0x0000000F +#define UART_CLKDIV_FRAG_M ((UART_CLKDIV_FRAG_V)<<(UART_CLKDIV_FRAG_S)) +#define UART_CLKDIV_FRAG_V 0xF +#define UART_CLKDIV_FRAG_S 20 +/* UART_CLKDIV : R/W ;bitpos:[19:0] ;default: 20'h2B6 ; */ +/*description: The register value is the integer part of the frequency divider's factor.*/ +#define UART_CLKDIV 0x000FFFFF +#define UART_CLKDIV_M ((UART_CLKDIV_V)<<(UART_CLKDIV_S)) +#define UART_CLKDIV_V 0xFFFFF +#define UART_CLKDIV_S 0 + +#define UART_AUTOBAUD_REG(i) (REG_UART_BASE(i) + 0x18) +/* UART_GLITCH_FILT : R/W ;bitpos:[15:8] ;default: 8'h10 ; */ +/*description: when input pulse width is lower then this value igore this pulse.this + register is used in autobaud detect process.*/ +#define UART_GLITCH_FILT 0x000000FF +#define UART_GLITCH_FILT_M ((UART_GLITCH_FILT_V)<<(UART_GLITCH_FILT_S)) +#define UART_GLITCH_FILT_V 0xFF +#define UART_GLITCH_FILT_S 8 +/* UART_AUTOBAUD_EN : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: This is the enable bit for detecting baudrate.*/ +#define UART_AUTOBAUD_EN (BIT(0)) +#define UART_AUTOBAUD_EN_M (BIT(0)) +#define UART_AUTOBAUD_EN_V 0x1 +#define UART_AUTOBAUD_EN_S 0 + +#define UART_STATUS_REG(i) (REG_UART_BASE(i) + 0x1C) +/* UART_TXD : RO ;bitpos:[31] ;default: 8'h0 ; */ +/*description: This register represent the level value of the internal uart rxd signal.*/ +#define UART_TXD (BIT(31)) +#define UART_TXD_M (BIT(31)) +#define UART_TXD_V 0x1 +#define UART_TXD_S 31 +/* UART_RTSN : RO ;bitpos:[30] ;default: 1'b0 ; */ +/*description: This register represent the level value of the internal uart cts signal.*/ +#define UART_RTSN (BIT(30)) +#define UART_RTSN_M (BIT(30)) +#define UART_RTSN_V 0x1 +#define UART_RTSN_S 30 +/* UART_DTRN : RO ;bitpos:[29] ;default: 1'b0 ; */ +/*description: The register represent the level value of the internal uart dsr signal.*/ +#define UART_DTRN (BIT(29)) +#define UART_DTRN_M (BIT(29)) +#define UART_DTRN_V 0x1 +#define UART_DTRN_S 29 +/* UART_ST_UTX_OUT : RO ;bitpos:[27:24] ;default: 4'b0 ; */ +/*description: This register stores the value of transmitter's finite state + machine. 0:TX_IDLE 1:TX_STRT 2:TX_DAT0 3:TX_DAT1 4:TX_DAT2 5:TX_DAT3 6:TX_DAT4 7:TX_DAT5 8:TX_DAT6 9:TX_DAT7 10:TX_PRTY 11:TX_STP1 12:TX_STP2 13:TX_DL0 14:TX_DL1*/ +#define UART_ST_UTX_OUT 0x0000000F +#define UART_ST_UTX_OUT_M ((UART_ST_UTX_OUT_V)<<(UART_ST_UTX_OUT_S)) +#define UART_ST_UTX_OUT_V 0xF +#define UART_ST_UTX_OUT_S 24 +/* UART_TXFIFO_CNT : RO ;bitpos:[23:16] ;default: 8'b0 ; */ +/*description: (tx_mem_cnt txfifo_cnt) stores the byte num of valid datas in + transmitter's fifo.tx_mem_cnt stores the 3 most significant bits txfifo_cnt stores the 8 least significant bits.*/ +#define UART_TXFIFO_CNT 0x000000FF +#define UART_TXFIFO_CNT_M ((UART_TXFIFO_CNT_V)<<(UART_TXFIFO_CNT_S)) +#define UART_TXFIFO_CNT_V 0xFF +#define UART_TXFIFO_CNT_S 16 +/* UART_RXD : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: This register stores the level value of the internal uart rxd signal.*/ +#define UART_RXD (BIT(15)) +#define UART_RXD_M (BIT(15)) +#define UART_RXD_V 0x1 +#define UART_RXD_S 15 +/* UART_CTSN : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: This register stores the level value of the internal uart cts signal.*/ +#define UART_CTSN (BIT(14)) +#define UART_CTSN_M (BIT(14)) +#define UART_CTSN_V 0x1 +#define UART_CTSN_S 14 +/* UART_DSRN : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: This register stores the level value of the internal uart dsr signal.*/ +#define UART_DSRN (BIT(13)) +#define UART_DSRN_M (BIT(13)) +#define UART_DSRN_V 0x1 +#define UART_DSRN_S 13 +/* UART_ST_URX_OUT : RO ;bitpos:[11:8] ;default: 4'b0 ; */ +/*description: This register stores the value of receiver's finite state machine. + 0:RX_IDLE 1:RX_STRT 2:RX_DAT0 3:RX_DAT1 4:RX_DAT2 5:RX_DAT3 6:RX_DAT4 7:RX_DAT5 8:RX_DAT6 9:RX_DAT7 10:RX_PRTY 11:RX_STP1 12:RX_STP2 13:RX_DL1*/ +#define UART_ST_URX_OUT 0x0000000F +#define UART_ST_URX_OUT_M ((UART_ST_URX_OUT_V)<<(UART_ST_URX_OUT_S)) +#define UART_ST_URX_OUT_V 0xF +#define UART_ST_URX_OUT_S 8 +/* UART_RXFIFO_CNT : RO ;bitpos:[7:0] ;default: 8'b0 ; */ +/*description: (rx_mem_cnt rxfifo_cnt) stores the byte num of valid datas in + receiver's fifo. rx_mem_cnt register stores the 3 most significant bits rxfifo_cnt stores the 8 least significant bits.*/ +#define UART_RXFIFO_CNT 0x000000FF +#define UART_RXFIFO_CNT_M ((UART_RXFIFO_CNT_V)<<(UART_RXFIFO_CNT_S)) +#define UART_RXFIFO_CNT_V 0xFF +#define UART_RXFIFO_CNT_S 0 + +#define UART_CONF0_REG(i) (REG_UART_BASE(i) + 0x20) +/* UART_TICK_REF_ALWAYS_ON : R/W ;bitpos:[27] ;default: 1'b1 ; */ +/*description: This register is used to select the clock.1.apb clock 0:ref_tick*/ +#define UART_TICK_REF_ALWAYS_ON (BIT(27)) +#define UART_TICK_REF_ALWAYS_ON_M (BIT(27)) +#define UART_TICK_REF_ALWAYS_ON_V 0x1 +#define UART_TICK_REF_ALWAYS_ON_S 27 +/* UART_ERR_WR_MASK : R/W ;bitpos:[26] ;default: 1'b0 ; */ +/*description: 1.receiver stops storing data int fifo when data is wrong. + 0.receiver stores the data even if the received data is wrong.*/ +#define UART_ERR_WR_MASK (BIT(26)) +#define UART_ERR_WR_MASK_M (BIT(26)) +#define UART_ERR_WR_MASK_V 0x1 +#define UART_ERR_WR_MASK_S 26 +/* UART_CLK_EN : R/W ;bitpos:[25] ;default: 1'h0 ; */ +/*description: 1.force clock on for registers.support clock only when write registers*/ +#define UART_CLK_EN (BIT(25)) +#define UART_CLK_EN_M (BIT(25)) +#define UART_CLK_EN_V 0x1 +#define UART_CLK_EN_S 25 +/* UART_DTR_INV : R/W ;bitpos:[24] ;default: 1'h0 ; */ +/*description: Set this bit to inverse the level value of uart dtr signal.*/ +#define UART_DTR_INV (BIT(24)) +#define UART_DTR_INV_M (BIT(24)) +#define UART_DTR_INV_V 0x1 +#define UART_DTR_INV_S 24 +/* UART_RTS_INV : R/W ;bitpos:[23] ;default: 1'h0 ; */ +/*description: Set this bit to inverse the level value of uart rts signal.*/ +#define UART_RTS_INV (BIT(23)) +#define UART_RTS_INV_M (BIT(23)) +#define UART_RTS_INV_V 0x1 +#define UART_RTS_INV_S 23 +/* UART_TXD_INV : R/W ;bitpos:[22] ;default: 1'h0 ; */ +/*description: Set this bit to inverse the level value of uart txd signal.*/ +#define UART_TXD_INV (BIT(22)) +#define UART_TXD_INV_M (BIT(22)) +#define UART_TXD_INV_V 0x1 +#define UART_TXD_INV_S 22 +/* UART_DSR_INV : R/W ;bitpos:[21] ;default: 1'h0 ; */ +/*description: Set this bit to inverse the level value of uart dsr signal.*/ +#define UART_DSR_INV (BIT(21)) +#define UART_DSR_INV_M (BIT(21)) +#define UART_DSR_INV_V 0x1 +#define UART_DSR_INV_S 21 +/* UART_CTS_INV : R/W ;bitpos:[20] ;default: 1'h0 ; */ +/*description: Set this bit to inverse the level value of uart cts signal.*/ +#define UART_CTS_INV (BIT(20)) +#define UART_CTS_INV_M (BIT(20)) +#define UART_CTS_INV_V 0x1 +#define UART_CTS_INV_S 20 +/* UART_RXD_INV : R/W ;bitpos:[19] ;default: 1'h0 ; */ +/*description: Set this bit to inverse the level value of uart rxd signal.*/ +#define UART_RXD_INV (BIT(19)) +#define UART_RXD_INV_M (BIT(19)) +#define UART_RXD_INV_V 0x1 +#define UART_RXD_INV_S 19 +/* UART_TXFIFO_RST : R/W ;bitpos:[18] ;default: 1'h0 ; */ +/*description: Set this bit to reset uart transmitter's fifo.*/ +#define UART_TXFIFO_RST (BIT(18)) +#define UART_TXFIFO_RST_M (BIT(18)) +#define UART_TXFIFO_RST_V 0x1 +#define UART_TXFIFO_RST_S 18 +/* UART_RXFIFO_RST : R/W ;bitpos:[17] ;default: 1'h0 ; */ +/*description: Set this bit to reset uart receiver's fifo.*/ +#define UART_RXFIFO_RST (BIT(17)) +#define UART_RXFIFO_RST_M (BIT(17)) +#define UART_RXFIFO_RST_V 0x1 +#define UART_RXFIFO_RST_S 17 +/* UART_IRDA_EN : R/W ;bitpos:[16] ;default: 1'h0 ; */ +/*description: Set this bit to enable irda protocol.*/ +#define UART_IRDA_EN (BIT(16)) +#define UART_IRDA_EN_M (BIT(16)) +#define UART_IRDA_EN_V 0x1 +#define UART_IRDA_EN_S 16 +/* UART_TX_FLOW_EN : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: Set this bit to enable transmitter's flow control function.*/ +#define UART_TX_FLOW_EN (BIT(15)) +#define UART_TX_FLOW_EN_M (BIT(15)) +#define UART_TX_FLOW_EN_V 0x1 +#define UART_TX_FLOW_EN_S 15 +/* UART_LOOPBACK : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: Set this bit to enable uart loopback test mode.*/ +#define UART_LOOPBACK (BIT(14)) +#define UART_LOOPBACK_M (BIT(14)) +#define UART_LOOPBACK_V 0x1 +#define UART_LOOPBACK_S 14 +/* UART_IRDA_RX_INV : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: Set this bit to inverse the level value of irda receiver's level.*/ +#define UART_IRDA_RX_INV (BIT(13)) +#define UART_IRDA_RX_INV_M (BIT(13)) +#define UART_IRDA_RX_INV_V 0x1 +#define UART_IRDA_RX_INV_S 13 +/* UART_IRDA_TX_INV : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: Set this bit to inverse the level value of irda transmitter's level.*/ +#define UART_IRDA_TX_INV (BIT(12)) +#define UART_IRDA_TX_INV_M (BIT(12)) +#define UART_IRDA_TX_INV_V 0x1 +#define UART_IRDA_TX_INV_S 12 +/* UART_IRDA_WCTL : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: 1.the irda transmitter's 11th bit is the same to the 10th bit. + 0.set irda transmitter's 11th bit to 0.*/ +#define UART_IRDA_WCTL (BIT(11)) +#define UART_IRDA_WCTL_M (BIT(11)) +#define UART_IRDA_WCTL_V 0x1 +#define UART_IRDA_WCTL_S 11 +/* UART_IRDA_TX_EN : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: This is the start enable bit for irda transmitter.*/ +#define UART_IRDA_TX_EN (BIT(10)) +#define UART_IRDA_TX_EN_M (BIT(10)) +#define UART_IRDA_TX_EN_V 0x1 +#define UART_IRDA_TX_EN_S 10 +/* UART_IRDA_DPLX : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: Set this bit to enable irda loopback mode.*/ +#define UART_IRDA_DPLX (BIT(9)) +#define UART_IRDA_DPLX_M (BIT(9)) +#define UART_IRDA_DPLX_V 0x1 +#define UART_IRDA_DPLX_S 9 +/* UART_TXD_BRK : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: Set this bit to enbale transmitter to send 0 when the process + of sending data is done.*/ +#define UART_TXD_BRK (BIT(8)) +#define UART_TXD_BRK_M (BIT(8)) +#define UART_TXD_BRK_V 0x1 +#define UART_TXD_BRK_S 8 +/* UART_SW_DTR : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: This register is used to configure the software dtr signal which + is used in software flow control..*/ +#define UART_SW_DTR (BIT(7)) +#define UART_SW_DTR_M (BIT(7)) +#define UART_SW_DTR_V 0x1 +#define UART_SW_DTR_S 7 +/* UART_SW_RTS : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: This register is used to configure the software rts signal which + is used in software flow control.*/ +#define UART_SW_RTS (BIT(6)) +#define UART_SW_RTS_M (BIT(6)) +#define UART_SW_RTS_V 0x1 +#define UART_SW_RTS_S 6 +/* UART_STOP_BIT_NUM : R/W ;bitpos:[5:4] ;default: 2'd1 ; */ +/*description: This register is used to set the length of stop bit. 1:1bit 2:1.5bits 3:2bits*/ +#define UART_STOP_BIT_NUM 0x00000003 +#define UART_STOP_BIT_NUM_M ((UART_STOP_BIT_NUM_V)<<(UART_STOP_BIT_NUM_S)) +#define UART_STOP_BIT_NUM_V 0x3 +#define UART_STOP_BIT_NUM_S 4 +/* UART_BIT_NUM : R/W ;bitpos:[3:2] ;default: 2'd3 ; */ +/*description: This registe is used to set the length of data: 0:5bits 1:6bits 2:7bits 3:8bits*/ +#define UART_BIT_NUM 0x00000003 +#define UART_BIT_NUM_M ((UART_BIT_NUM_V)<<(UART_BIT_NUM_S)) +#define UART_BIT_NUM_V 0x3 +#define UART_BIT_NUM_S 2 +/* UART_PARITY_EN : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to enable uart parity check.*/ +#define UART_PARITY_EN (BIT(1)) +#define UART_PARITY_EN_M (BIT(1)) +#define UART_PARITY_EN_V 0x1 +#define UART_PARITY_EN_S 1 +/* UART_PARITY : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: This register is used to configure the parity check mode. 0:even 1:odd*/ +#define UART_PARITY (BIT(0)) +#define UART_PARITY_M (BIT(0)) +#define UART_PARITY_V 0x1 +#define UART_PARITY_S 0 + +#define UART_CONF1_REG(i) (REG_UART_BASE(i) + 0x24) +/* UART_RX_TOUT_EN : R/W ;bitpos:[31] ;default: 1'b0 ; */ +/*description: This is the enble bit for uart receiver's timeout function.*/ +#define UART_RX_TOUT_EN (BIT(31)) +#define UART_RX_TOUT_EN_M (BIT(31)) +#define UART_RX_TOUT_EN_V 0x1 +#define UART_RX_TOUT_EN_S 31 +/* UART_RX_TOUT_THRHD : R/W ;bitpos:[30:24] ;default: 7'b0 ; */ +/*description: This register is used to configure the timeout value for uart + receiver receiving a byte.*/ +#define UART_RX_TOUT_THRHD 0x0000007F +#define UART_RX_TOUT_THRHD_M ((UART_RX_TOUT_THRHD_V)<<(UART_RX_TOUT_THRHD_S)) +#define UART_RX_TOUT_THRHD_V 0x7F +#define UART_RX_TOUT_THRHD_S 24 +/* UART_RX_FLOW_EN : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: This is the flow enable bit for uart receiver. 1:choose software + flow control with configuring sw_rts signal*/ +#define UART_RX_FLOW_EN (BIT(23)) +#define UART_RX_FLOW_EN_M (BIT(23)) +#define UART_RX_FLOW_EN_V 0x1 +#define UART_RX_FLOW_EN_S 23 +/* UART_RX_FLOW_THRHD : R/W ;bitpos:[22:16] ;default: 7'h0 ; */ +/*description: when receiver receives more data than its threshold value. + receiver produce signal to tell the transmitter stop transferring data. the threshold value is (rx_flow_thrhd_h3 rx_flow_thrhd).*/ +#define UART_RX_FLOW_THRHD 0x0000007F +#define UART_RX_FLOW_THRHD_M ((UART_RX_FLOW_THRHD_V)<<(UART_RX_FLOW_THRHD_S)) +#define UART_RX_FLOW_THRHD_V 0x7F +#define UART_RX_FLOW_THRHD_S 16 +/* UART_TXFIFO_EMPTY_THRHD : R/W ;bitpos:[14:8] ;default: 7'h60 ; */ +/*description: when the data amount in transmitter fifo is less than its threshold + value. it will produce txfifo_empty_int_raw interrupt. the threshold value is (tx_mem_empty_thrhd txfifo_empty_thrhd)*/ +#define UART_TXFIFO_EMPTY_THRHD 0x0000007F +#define UART_TXFIFO_EMPTY_THRHD_M ((UART_TXFIFO_EMPTY_THRHD_V)<<(UART_TXFIFO_EMPTY_THRHD_S)) +#define UART_TXFIFO_EMPTY_THRHD_V 0x7F +#define UART_TXFIFO_EMPTY_THRHD_S 8 +/* UART_RXFIFO_FULL_THRHD : R/W ;bitpos:[6:0] ;default: 7'h60 ; */ +/*description: When receiver receives more data than its threshold value.receiver + will produce rxfifo_full_int_raw interrupt.the threshold value is (rx_flow_thrhd_h3 rxfifo_full_thrhd).*/ +#define UART_RXFIFO_FULL_THRHD 0x0000007F +#define UART_RXFIFO_FULL_THRHD_M ((UART_RXFIFO_FULL_THRHD_V)<<(UART_RXFIFO_FULL_THRHD_S)) +#define UART_RXFIFO_FULL_THRHD_V 0x7F +#define UART_RXFIFO_FULL_THRHD_S 0 + +#define UART_LOWPULSE_REG(i) (REG_UART_BASE(i) + 0x28) +/* UART_LOWPULSE_MIN_CNT : RO ;bitpos:[19:0] ;default: 20'hFFFFF ; */ +/*description: This register stores the value of the minimum duration time for + the low level pulse. it is used in baudrate-detect process.*/ +#define UART_LOWPULSE_MIN_CNT 0x000FFFFF +#define UART_LOWPULSE_MIN_CNT_M ((UART_LOWPULSE_MIN_CNT_V)<<(UART_LOWPULSE_MIN_CNT_S)) +#define UART_LOWPULSE_MIN_CNT_V 0xFFFFF +#define UART_LOWPULSE_MIN_CNT_S 0 + +#define UART_HIGHPULSE_REG(i) (REG_UART_BASE(i) + 0x2C) +/* UART_HIGHPULSE_MIN_CNT : RO ;bitpos:[19:0] ;default: 20'hFFFFF ; */ +/*description: This register stores the value of the maxinum duration time + for the high level pulse. it is used in baudrate-detect process.*/ +#define UART_HIGHPULSE_MIN_CNT 0x000FFFFF +#define UART_HIGHPULSE_MIN_CNT_M ((UART_HIGHPULSE_MIN_CNT_V)<<(UART_HIGHPULSE_MIN_CNT_S)) +#define UART_HIGHPULSE_MIN_CNT_V 0xFFFFF +#define UART_HIGHPULSE_MIN_CNT_S 0 + +#define UART_RXD_CNT_REG(i) (REG_UART_BASE(i) + 0x30) +/* UART_RXD_EDGE_CNT : RO ;bitpos:[9:0] ;default: 10'h0 ; */ +/*description: This register stores the count of rxd edge change. it is used + in baudrate-detect process.*/ +#define UART_RXD_EDGE_CNT 0x000003FF +#define UART_RXD_EDGE_CNT_M ((UART_RXD_EDGE_CNT_V)<<(UART_RXD_EDGE_CNT_S)) +#define UART_RXD_EDGE_CNT_V 0x3FF +#define UART_RXD_EDGE_CNT_S 0 + +#define UART_FLOW_CONF_REG(i) (REG_UART_BASE(i) + 0x34) +/* UART_SEND_XOFF : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Set this bit to send xoff char. it is cleared by hardware automatically.*/ +#define UART_SEND_XOFF (BIT(5)) +#define UART_SEND_XOFF_M (BIT(5)) +#define UART_SEND_XOFF_V 0x1 +#define UART_SEND_XOFF_S 5 +/* UART_SEND_XON : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to send xon char. it is cleared by hardware automatically.*/ +#define UART_SEND_XON (BIT(4)) +#define UART_SEND_XON_M (BIT(4)) +#define UART_SEND_XON_V 0x1 +#define UART_SEND_XON_S 4 +/* UART_FORCE_XOFF : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to set ctsn to enable the transmitter to go on sending data.*/ +#define UART_FORCE_XOFF (BIT(3)) +#define UART_FORCE_XOFF_M (BIT(3)) +#define UART_FORCE_XOFF_V 0x1 +#define UART_FORCE_XOFF_S 3 +/* UART_FORCE_XON : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to clear ctsn to stop the transmitter from sending data.*/ +#define UART_FORCE_XON (BIT(2)) +#define UART_FORCE_XON_M (BIT(2)) +#define UART_FORCE_XON_V 0x1 +#define UART_FORCE_XON_S 2 +/* UART_XONOFF_DEL : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to remove flow control char from the received data.*/ +#define UART_XONOFF_DEL (BIT(1)) +#define UART_XONOFF_DEL_M (BIT(1)) +#define UART_XONOFF_DEL_V 0x1 +#define UART_XONOFF_DEL_S 1 +/* UART_SW_FLOW_CON_EN : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Set this bit to enable software flow control. it is used with + register sw_xon or sw_xoff .*/ +#define UART_SW_FLOW_CON_EN (BIT(0)) +#define UART_SW_FLOW_CON_EN_M (BIT(0)) +#define UART_SW_FLOW_CON_EN_V 0x1 +#define UART_SW_FLOW_CON_EN_S 0 + +#define UART_SLEEP_CONF_REG(i) (REG_UART_BASE(i) + 0x38) +/* UART_ACTIVE_THRESHOLD : R/W ;bitpos:[9:0] ;default: 10'hf0 ; */ +/*description: When the input rxd edge changes more than this register value. + the uart is active from light sleeping mode.*/ +#define UART_ACTIVE_THRESHOLD 0x000003FF +#define UART_ACTIVE_THRESHOLD_M ((UART_ACTIVE_THRESHOLD_V)<<(UART_ACTIVE_THRESHOLD_S)) +#define UART_ACTIVE_THRESHOLD_V 0x3FF +#define UART_ACTIVE_THRESHOLD_S 0 + +#define UART_SWFC_CONF_REG(i) (REG_UART_BASE(i) + 0x3C) +/* UART_XOFF_CHAR : R/W ;bitpos:[31:24] ;default: 8'h13 ; */ +/*description: This register stores the xoff flow control char.*/ +#define UART_XOFF_CHAR 0x000000FF +#define UART_XOFF_CHAR_M ((UART_XOFF_CHAR_V)<<(UART_XOFF_CHAR_S)) +#define UART_XOFF_CHAR_V 0xFF +#define UART_XOFF_CHAR_S 24 +/* UART_XON_CHAR : R/W ;bitpos:[23:16] ;default: 8'h11 ; */ +/*description: This register stores the xon flow control char.*/ +#define UART_XON_CHAR 0x000000FF +#define UART_XON_CHAR_M ((UART_XON_CHAR_V)<<(UART_XON_CHAR_S)) +#define UART_XON_CHAR_V 0xFF +#define UART_XON_CHAR_S 16 +/* UART_XOFF_THRESHOLD : R/W ;bitpos:[15:8] ;default: 8'he0 ; */ +/*description: When the data amount in receiver's fifo is less than this register + value. it will send a xon char with uart_sw_flow_con_en set to 1.*/ +#define UART_XOFF_THRESHOLD 0x000000FF +#define UART_XOFF_THRESHOLD_M ((UART_XOFF_THRESHOLD_V)<<(UART_XOFF_THRESHOLD_S)) +#define UART_XOFF_THRESHOLD_V 0xFF +#define UART_XOFF_THRESHOLD_S 8 +/* UART_XON_THRESHOLD : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ +/*description: when the data amount in receiver's fifo is more than this register + value. it will send a xoff char with uart_sw_flow_con_en set to 1.*/ +#define UART_XON_THRESHOLD 0x000000FF +#define UART_XON_THRESHOLD_M ((UART_XON_THRESHOLD_V)<<(UART_XON_THRESHOLD_S)) +#define UART_XON_THRESHOLD_V 0xFF +#define UART_XON_THRESHOLD_S 0 + +#define UART_IDLE_CONF_REG(i) (REG_UART_BASE(i) + 0x40) +/* UART_TX_BRK_NUM : R/W ;bitpos:[27:20] ;default: 8'ha ; */ +/*description: This register is used to configure the num of 0 send after the + process of sending data is done. it is active when txd_brk is set to 1.*/ +#define UART_TX_BRK_NUM 0x000000FF +#define UART_TX_BRK_NUM_M ((UART_TX_BRK_NUM_V)<<(UART_TX_BRK_NUM_S)) +#define UART_TX_BRK_NUM_V 0xFF +#define UART_TX_BRK_NUM_S 20 +/* UART_TX_IDLE_NUM : R/W ;bitpos:[19:10] ;default: 10'h100 ; */ +/*description: This register is used to configure the duration time between transfers.*/ +#define UART_TX_IDLE_NUM 0x000003FF +#define UART_TX_IDLE_NUM_M ((UART_TX_IDLE_NUM_V)<<(UART_TX_IDLE_NUM_S)) +#define UART_TX_IDLE_NUM_V 0x3FF +#define UART_TX_IDLE_NUM_S 10 +/* UART_RX_IDLE_THRHD : R/W ;bitpos:[9:0] ;default: 10'h100 ; */ +/*description: when receiver takes more time than this register value to receive + a byte data. it will produce frame end signal for uhci to stop receiving data.*/ +#define UART_RX_IDLE_THRHD 0x000003FF +#define UART_RX_IDLE_THRHD_M ((UART_RX_IDLE_THRHD_V)<<(UART_RX_IDLE_THRHD_S)) +#define UART_RX_IDLE_THRHD_V 0x3FF +#define UART_RX_IDLE_THRHD_S 0 + +#define UART_RS485_CONF_REG(i) (REG_UART_BASE(i) + 0x44) +/* UART_RS485_TX_DLY_NUM : R/W ;bitpos:[9:6] ;default: 4'b0 ; */ +/*description: This register is used to delay the transmitter's internal data signal.*/ +#define UART_RS485_TX_DLY_NUM 0x0000000F +#define UART_RS485_TX_DLY_NUM_M ((UART_RS485_TX_DLY_NUM_V)<<(UART_RS485_TX_DLY_NUM_S)) +#define UART_RS485_TX_DLY_NUM_V 0xF +#define UART_RS485_TX_DLY_NUM_S 6 +/* UART_RS485_RX_DLY_NUM : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: This register is used to delay the receiver's internal data signal.*/ +#define UART_RS485_RX_DLY_NUM (BIT(5)) +#define UART_RS485_RX_DLY_NUM_M (BIT(5)) +#define UART_RS485_RX_DLY_NUM_V 0x1 +#define UART_RS485_RX_DLY_NUM_S 5 +/* UART_RS485RXBY_TX_EN : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: 1: enable rs485's transmitter to send data when rs485's receiver + is busy. 0:rs485's transmitter should not send data when its receiver is busy.*/ +#define UART_RS485RXBY_TX_EN (BIT(4)) +#define UART_RS485RXBY_TX_EN_M (BIT(4)) +#define UART_RS485RXBY_TX_EN_V 0x1 +#define UART_RS485RXBY_TX_EN_S 4 +/* UART_RS485TX_RX_EN : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to enable loopback transmitter's output data signal + to receiver's input data signal.*/ +#define UART_RS485TX_RX_EN (BIT(3)) +#define UART_RS485TX_RX_EN_M (BIT(3)) +#define UART_RS485TX_RX_EN_V 0x1 +#define UART_RS485TX_RX_EN_S 3 +/* UART_DL1_EN : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to delay the stop bit by 1 bit.*/ +#define UART_DL1_EN (BIT(2)) +#define UART_DL1_EN_M (BIT(2)) +#define UART_DL1_EN_V 0x1 +#define UART_DL1_EN_S 2 +/* UART_DL0_EN : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to delay the stop bit by 1 bit.*/ +#define UART_DL0_EN (BIT(1)) +#define UART_DL0_EN_M (BIT(1)) +#define UART_DL0_EN_V 0x1 +#define UART_DL0_EN_S 1 +/* UART_RS485_EN : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Set this bit to choose rs485 mode.*/ +#define UART_RS485_EN (BIT(0)) +#define UART_RS485_EN_M (BIT(0)) +#define UART_RS485_EN_V 0x1 +#define UART_RS485_EN_S 0 + +#define UART_AT_CMD_PRECNT_REG(i) (REG_UART_BASE(i) + 0x48) +/* UART_PRE_IDLE_NUM : R/W ;bitpos:[23:0] ;default: 24'h186a00 ; */ +/*description: This register is used to configure the idle duration time before + the first at_cmd is received by receiver. when the the duration is less than this register value it will not take the next data received as at_cmd char.*/ +#define UART_PRE_IDLE_NUM 0x00FFFFFF +#define UART_PRE_IDLE_NUM_M ((UART_PRE_IDLE_NUM_V)<<(UART_PRE_IDLE_NUM_S)) +#define UART_PRE_IDLE_NUM_V 0xFFFFFF +#define UART_PRE_IDLE_NUM_S 0 + +#define UART_AT_CMD_POSTCNT_REG(i) (REG_UART_BASE(i) + 0x4c) +/* UART_POST_IDLE_NUM : R/W ;bitpos:[23:0] ;default: 24'h186a00 ; */ +/*description: This register is used to configure the duration time between + the last at_cmd and the next data. when the duration is less than this register value it will not take the previous data as at_cmd char.*/ +#define UART_POST_IDLE_NUM 0x00FFFFFF +#define UART_POST_IDLE_NUM_M ((UART_POST_IDLE_NUM_V)<<(UART_POST_IDLE_NUM_S)) +#define UART_POST_IDLE_NUM_V 0xFFFFFF +#define UART_POST_IDLE_NUM_S 0 + +#define UART_AT_CMD_GAPTOUT_REG(i) (REG_UART_BASE(i) + 0x50) +/* UART_RX_GAP_TOUT : R/W ;bitpos:[23:0] ;default: 24'h1e00 ; */ +/*description: This register is used to configure the duration time between + the at_cmd chars. when the duration time is less than this register value it will not take the datas as continous at_cmd chars.*/ +#define UART_RX_GAP_TOUT 0x00FFFFFF +#define UART_RX_GAP_TOUT_M ((UART_RX_GAP_TOUT_V)<<(UART_RX_GAP_TOUT_S)) +#define UART_RX_GAP_TOUT_V 0xFFFFFF +#define UART_RX_GAP_TOUT_S 0 + +#define UART_AT_CMD_CHAR_REG(i) (REG_UART_BASE(i) + 0x54) +/* UART_CHAR_NUM : R/W ;bitpos:[15:8] ;default: 8'h3 ; */ +/*description: This register is used to configure the num of continous at_cmd + chars received by receiver.*/ +#define UART_CHAR_NUM 0x000000FF +#define UART_CHAR_NUM_M ((UART_CHAR_NUM_V)<<(UART_CHAR_NUM_S)) +#define UART_CHAR_NUM_V 0xFF +#define UART_CHAR_NUM_S 8 +/* UART_AT_CMD_CHAR : R/W ;bitpos:[7:0] ;default: 8'h2b ; */ +/*description: This register is used to configure the content of at_cmd char.*/ +#define UART_AT_CMD_CHAR 0x000000FF +#define UART_AT_CMD_CHAR_M ((UART_AT_CMD_CHAR_V)<<(UART_AT_CMD_CHAR_S)) +#define UART_AT_CMD_CHAR_V 0xFF +#define UART_AT_CMD_CHAR_S 0 + +#define UART_MEM_CONF_REG(i) (REG_UART_BASE(i) + 0x58) +/* UART_TX_MEM_EMPTY_THRHD : R/W ;bitpos:[30:28] ;default: 3'h0 ; */ +/*description: refer to txfifo_empty_thrhd 's describtion.*/ +#define UART_TX_MEM_EMPTY_THRHD 0x00000007 +#define UART_TX_MEM_EMPTY_THRHD_M ((UART_TX_MEM_EMPTY_THRHD_V)<<(UART_TX_MEM_EMPTY_THRHD_S)) +#define UART_TX_MEM_EMPTY_THRHD_V 0x7 +#define UART_TX_MEM_EMPTY_THRHD_S 28 +/* UART_RX_MEM_FULL_THRHD : R/W ;bitpos:[27:25] ;default: 3'h0 ; */ +/*description: refer to the rxfifo_full_thrhd's describtion.*/ +#define UART_RX_MEM_FULL_THRHD 0x00000007 +#define UART_RX_MEM_FULL_THRHD_M ((UART_RX_MEM_FULL_THRHD_V)<<(UART_RX_MEM_FULL_THRHD_S)) +#define UART_RX_MEM_FULL_THRHD_V 0x7 +#define UART_RX_MEM_FULL_THRHD_S 25 +/* UART_XOFF_THRESHOLD_H2 : R/W ;bitpos:[24:23] ;default: 2'h0 ; */ +/*description: refer to the uart_xoff_threshold's describtion.*/ +#define UART_XOFF_THRESHOLD_H2 0x00000003 +#define UART_XOFF_THRESHOLD_H2_M ((UART_XOFF_THRESHOLD_H2_V)<<(UART_XOFF_THRESHOLD_H2_S)) +#define UART_XOFF_THRESHOLD_H2_V 0x3 +#define UART_XOFF_THRESHOLD_H2_S 23 +/* UART_XON_THRESHOLD_H2 : R/W ;bitpos:[22:21] ;default: 2'h0 ; */ +/*description: refer to the uart_xon_threshold's describtion.*/ +#define UART_XON_THRESHOLD_H2 0x00000003 +#define UART_XON_THRESHOLD_H2_M ((UART_XON_THRESHOLD_H2_V)<<(UART_XON_THRESHOLD_H2_S)) +#define UART_XON_THRESHOLD_H2_V 0x3 +#define UART_XON_THRESHOLD_H2_S 21 +/* UART_RX_TOUT_THRHD_H3 : R/W ;bitpos:[20:18] ;default: 3'h0 ; */ +/*description: refer to the rx_tout_thrhd's describtion.*/ +#define UART_RX_TOUT_THRHD_H3 0x00000007 +#define UART_RX_TOUT_THRHD_H3_M ((UART_RX_TOUT_THRHD_H3_V)<<(UART_RX_TOUT_THRHD_H3_S)) +#define UART_RX_TOUT_THRHD_H3_V 0x7 +#define UART_RX_TOUT_THRHD_H3_S 18 +/* UART_RX_FLOW_THRHD_H3 : R/W ;bitpos:[17:15] ;default: 3'h0 ; */ +/*description: refer to the rx_flow_thrhd's describtion.*/ +#define UART_RX_FLOW_THRHD_H3 0x00000007 +#define UART_RX_FLOW_THRHD_H3_M ((UART_RX_FLOW_THRHD_H3_V)<<(UART_RX_FLOW_THRHD_H3_S)) +#define UART_RX_FLOW_THRHD_H3_V 0x7 +#define UART_RX_FLOW_THRHD_H3_S 15 +/* UART_TX_SIZE : R/W ;bitpos:[10:7] ;default: 4'h1 ; */ +/*description: This register is used to configure the amount of mem allocated + to transmitter's fifo.the default byte num is 128.*/ +#define UART_TX_SIZE 0x0000000F +#define UART_TX_SIZE_M ((UART_TX_SIZE_V)<<(UART_TX_SIZE_S)) +#define UART_TX_SIZE_V 0xF +#define UART_TX_SIZE_S 7 +/* UART_RX_SIZE : R/W ;bitpos:[6:3] ;default: 4'h1 ; */ +/*description: This register is used to configure the amount of mem allocated + to receiver's fifo. the default byte num is 128.*/ +#define UART_RX_SIZE 0x0000000F +#define UART_RX_SIZE_M ((UART_RX_SIZE_V)<<(UART_RX_SIZE_S)) +#define UART_RX_SIZE_V 0xF +#define UART_RX_SIZE_S 3 +/* UART_MEM_PD : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: Set this bit to power down mem.when reg_mem_pd registers in + the 3 uarts are all set to 1 mem will enter low power mode.*/ +#define UART_MEM_PD (BIT(0)) +#define UART_MEM_PD_M (BIT(0)) +#define UART_MEM_PD_V 0x1 +#define UART_MEM_PD_S 0 + +#define UART_MEM_TX_STATUS_REG(i) (REG_UART_BASE(i) + 0x5c) +/* UART_MEM_TX_STATUS : RO ;bitpos:[23:0] ;default: 24'h0 ; */ +/*description: */ +#define UART_MEM_TX_STATUS 0x00FFFFFF +#define UART_MEM_TX_STATUS_M ((UART_MEM_TX_STATUS_V)<<(UART_MEM_TX_STATUS_S)) +#define UART_MEM_TX_STATUS_V 0xFFFFFF +#define UART_MEM_TX_STATUS_S 0 + +#define UART_MEM_RX_STATUS_REG(i) (REG_UART_BASE(i) + 0x60) +/* UART_MEM_RX_STATUS : RO ;bitpos:[23:0] ;default: 24'h0 ; */ +/*description: */ +#define UART_MEM_RX_STATUS 0x00FFFFFF +#define UART_MEM_RX_STATUS_M ((UART_MEM_RX_STATUS_V)<<(UART_MEM_RX_STATUS_S)) +#define UART_MEM_RX_STATUS_V 0xFFFFFF +#define UART_MEM_RX_STATUS_S 0 + +#define UART_MEM_CNT_STATUS_REG(i) (REG_UART_BASE(i) + 0x64) +/* UART_TX_MEM_CNT : RO ;bitpos:[5:3] ;default: 3'b0 ; */ +/*description: refer to the txfifo_cnt's describtion.*/ +#define UART_TX_MEM_CNT 0x00000007 +#define UART_TX_MEM_CNT_M ((UART_TX_MEM_CNT_V)<<(UART_TX_MEM_CNT_S)) +#define UART_TX_MEM_CNT_V 0x7 +#define UART_TX_MEM_CNT_S 3 +/* UART_RX_MEM_CNT : RO ;bitpos:[2:0] ;default: 3'b0 ; */ +/*description: refer to the rxfifo_cnt's describtion.*/ +#define UART_RX_MEM_CNT 0x00000007 +#define UART_RX_MEM_CNT_M ((UART_RX_MEM_CNT_V)<<(UART_RX_MEM_CNT_S)) +#define UART_RX_MEM_CNT_V 0x7 +#define UART_RX_MEM_CNT_S 0 + +#define UART_POSPULSE_REG(i) (REG_UART_BASE(i) + 0x68) +/* UART_POSEDGE_MIN_CNT : RO ;bitpos:[19:0] ;default: 20'hFFFFF ; */ +/*description: This register stores the count of rxd posedge edge. it is used + in boudrate-detect process.*/ +#define UART_POSEDGE_MIN_CNT 0x000FFFFF +#define UART_POSEDGE_MIN_CNT_M ((UART_POSEDGE_MIN_CNT_V)<<(UART_POSEDGE_MIN_CNT_S)) +#define UART_POSEDGE_MIN_CNT_V 0xFFFFF +#define UART_POSEDGE_MIN_CNT_S 0 + +#define UART_NEGPULSE_REG(i) (REG_UART_BASE(i) + 0x6c) +/* UART_NEGEDGE_MIN_CNT : RO ;bitpos:[19:0] ;default: 20'hFFFFF ; */ +/*description: This register stores the count of rxd negedge edge. it is used + in boudrate-detect process.*/ +#define UART_NEGEDGE_MIN_CNT 0x000FFFFF +#define UART_NEGEDGE_MIN_CNT_M ((UART_NEGEDGE_MIN_CNT_V)<<(UART_NEGEDGE_MIN_CNT_S)) +#define UART_NEGEDGE_MIN_CNT_V 0xFFFFF +#define UART_NEGEDGE_MIN_CNT_S 0 + +#define UART_DATE_REG(i) (REG_UART_BASE(i) + 0x78) +/* UART_DATE : R/W ;bitpos:[31:0] ;default: 32'h15122500 ; */ +/*description: */ +#define UART_DATE 0xFFFFFFFF +#define UART_DATE_M ((UART_DATE_V)<<(UART_DATE_S)) +#define UART_DATE_V 0xFFFFFFFF +#define UART_DATE_S 0 + +#define UART_ID_REG(i) (REG_UART_BASE(i) + 0x7C) +/* UART_ID : R/W ;bitpos:[31:0] ;default: 32'h0500 ; */ +/*description: */ +#define UART_ID 0xFFFFFFFF +#define UART_ID_M ((UART_ID_V)<<(UART_ID_S)) +#define UART_ID_V 0xFFFFFFFF +#define UART_ID_S 0 + + + + +#endif /*__UART_REG_H__ */ + + diff --git a/tools/sdk/include/esp32/soc/uart_struct.h b/tools/sdk/include/esp32/soc/uart_struct.h new file mode 100644 index 00000000..05b54867 --- /dev/null +++ b/tools/sdk/include/esp32/soc/uart_struct.h @@ -0,0 +1,365 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_UART_STRUCT_H_ +#define _SOC_UART_STRUCT_H_ +typedef volatile struct { + union { + struct { + uint8_t rw_byte; /*This register stores one byte data read by rx fifo.*/ + uint8_t reserved[3]; + }; + uint32_t val; + } fifo; + union { + struct { + uint32_t rxfifo_full: 1; /*This interrupt raw bit turns to high level when receiver receives more data than (rx_flow_thrhd_h3 rx_flow_thrhd).*/ + uint32_t txfifo_empty: 1; /*This interrupt raw bit turns to high level when the amount of data in transmitter's fifo is less than ((tx_mem_cnttxfifo_cnt) .*/ + uint32_t parity_err: 1; /*This interrupt raw bit turns to high level when receiver detects the parity error of data.*/ + uint32_t frm_err: 1; /*This interrupt raw bit turns to high level when receiver detects data's frame error .*/ + uint32_t rxfifo_ovf: 1; /*This interrupt raw bit turns to high level when receiver receives more data than the fifo can store.*/ + uint32_t dsr_chg: 1; /*This interrupt raw bit turns to high level when receiver detects the edge change of dsrn signal.*/ + uint32_t cts_chg: 1; /*This interrupt raw bit turns to high level when receiver detects the edge change of ctsn signal.*/ + uint32_t brk_det: 1; /*This interrupt raw bit turns to high level when receiver detects the 0 after the stop bit.*/ + uint32_t rxfifo_tout: 1; /*This interrupt raw bit turns to high level when receiver takes more time than rx_tout_thrhd to receive a byte.*/ + uint32_t sw_xon: 1; /*This interrupt raw bit turns to high level when receiver receives xoff char with uart_sw_flow_con_en is set to 1.*/ + uint32_t sw_xoff: 1; /*This interrupt raw bit turns to high level when receiver receives xon char with uart_sw_flow_con_en is set to 1.*/ + uint32_t glitch_det: 1; /*This interrupt raw bit turns to high level when receiver detects the start bit.*/ + uint32_t tx_brk_done: 1; /*This interrupt raw bit turns to high level when transmitter completes sending 0 after all the data in transmitter's fifo are send.*/ + uint32_t tx_brk_idle_done: 1; /*This interrupt raw bit turns to high level when transmitter has kept the shortest duration after the last data has been send.*/ + uint32_t tx_done: 1; /*This interrupt raw bit turns to high level when transmitter has send all the data in fifo.*/ + uint32_t rs485_parity_err: 1; /*This interrupt raw bit turns to high level when rs485 detects the parity error.*/ + uint32_t rs485_frm_err: 1; /*This interrupt raw bit turns to high level when rs485 detects the data frame error.*/ + uint32_t rs485_clash: 1; /*This interrupt raw bit turns to high level when rs485 detects the clash between transmitter and receiver.*/ + uint32_t at_cmd_char_det: 1; /*This interrupt raw bit turns to high level when receiver detects the configured at_cmd chars.*/ + uint32_t reserved19: 13; + }; + uint32_t val; + } int_raw; + union { + struct { + uint32_t rxfifo_full: 1; /*This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set to 1.*/ + uint32_t txfifo_empty: 1; /*This is the status bit for txfifo_empty_int_raw when txfifo_empty_int_ena is set to 1.*/ + uint32_t parity_err: 1; /*This is the status bit for parity_err_int_raw when parity_err_int_ena is set to 1.*/ + uint32_t frm_err: 1; /*This is the status bit for frm_err_int_raw when fm_err_int_ena is set to 1.*/ + uint32_t rxfifo_ovf: 1; /*This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to 1.*/ + uint32_t dsr_chg: 1; /*This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1.*/ + uint32_t cts_chg: 1; /*This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1.*/ + uint32_t brk_det: 1; /*This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1.*/ + uint32_t rxfifo_tout: 1; /*This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set to 1.*/ + uint32_t sw_xon: 1; /*This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1.*/ + uint32_t sw_xoff: 1; /*This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.*/ + uint32_t glitch_det: 1; /*This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to 1.*/ + uint32_t tx_brk_done: 1; /*This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set to 1.*/ + uint32_t tx_brk_idle_done: 1; /*This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.*/ + uint32_t tx_done: 1; /*This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.*/ + uint32_t rs485_parity_err: 1; /*This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is set to 1.*/ + uint32_t rs485_frm_err: 1; /*This is the status bit for rs485_fm_err_int_raw when rs485_fm_err_int_ena is set to 1.*/ + uint32_t rs485_clash: 1; /*This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set to 1.*/ + uint32_t at_cmd_char_det: 1; /*This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is set to 1.*/ + uint32_t reserved19: 13; + }; + uint32_t val; + } int_st; + union { + struct { + uint32_t rxfifo_full: 1; /*This is the enable bit for rxfifo_full_int_st register.*/ + uint32_t txfifo_empty: 1; /*This is the enable bit for rxfifo_full_int_st register.*/ + uint32_t parity_err: 1; /*This is the enable bit for parity_err_int_st register.*/ + uint32_t frm_err: 1; /*This is the enable bit for frm_err_int_st register.*/ + uint32_t rxfifo_ovf: 1; /*This is the enable bit for rxfifo_ovf_int_st register.*/ + uint32_t dsr_chg: 1; /*This is the enable bit for dsr_chg_int_st register.*/ + uint32_t cts_chg: 1; /*This is the enable bit for cts_chg_int_st register.*/ + uint32_t brk_det: 1; /*This is the enable bit for brk_det_int_st register.*/ + uint32_t rxfifo_tout: 1; /*This is the enable bit for rxfifo_tout_int_st register.*/ + uint32_t sw_xon: 1; /*This is the enable bit for sw_xon_int_st register.*/ + uint32_t sw_xoff: 1; /*This is the enable bit for sw_xoff_int_st register.*/ + uint32_t glitch_det: 1; /*This is the enable bit for glitch_det_int_st register.*/ + uint32_t tx_brk_done: 1; /*This is the enable bit for tx_brk_done_int_st register.*/ + uint32_t tx_brk_idle_done: 1; /*This is the enable bit for tx_brk_idle_done_int_st register.*/ + uint32_t tx_done: 1; /*This is the enable bit for tx_done_int_st register.*/ + uint32_t rs485_parity_err: 1; /*This is the enable bit for rs485_parity_err_int_st register.*/ + uint32_t rs485_frm_err: 1; /*This is the enable bit for rs485_parity_err_int_st register.*/ + uint32_t rs485_clash: 1; /*This is the enable bit for rs485_clash_int_st register.*/ + uint32_t at_cmd_char_det: 1; /*This is the enable bit for at_cmd_char_det_int_st register.*/ + uint32_t reserved19: 13; + }; + uint32_t val; + } int_ena; + union { + struct { + uint32_t rxfifo_full: 1; /*Set this bit to clear the rxfifo_full_int_raw interrupt.*/ + uint32_t txfifo_empty: 1; /*Set this bit to clear txfifo_empty_int_raw interrupt.*/ + uint32_t parity_err: 1; /*Set this bit to clear parity_err_int_raw interrupt.*/ + uint32_t frm_err: 1; /*Set this bit to clear frm_err_int_raw interrupt.*/ + uint32_t rxfifo_ovf: 1; /*Set this bit to clear rxfifo_ovf_int_raw interrupt.*/ + uint32_t dsr_chg: 1; /*Set this bit to clear the dsr_chg_int_raw interrupt.*/ + uint32_t cts_chg: 1; /*Set this bit to clear the cts_chg_int_raw interrupt.*/ + uint32_t brk_det: 1; /*Set this bit to clear the brk_det_int_raw interrupt.*/ + uint32_t rxfifo_tout: 1; /*Set this bit to clear the rxfifo_tout_int_raw interrupt.*/ + uint32_t sw_xon: 1; /*Set this bit to clear the sw_xon_int_raw interrupt.*/ + uint32_t sw_xoff: 1; /*Set this bit to clear the sw_xon_int_raw interrupt.*/ + uint32_t glitch_det: 1; /*Set this bit to clear the glitch_det_int_raw interrupt.*/ + uint32_t tx_brk_done: 1; /*Set this bit to clear the tx_brk_done_int_raw interrupt..*/ + uint32_t tx_brk_idle_done: 1; /*Set this bit to clear the tx_brk_idle_done_int_raw interrupt.*/ + uint32_t tx_done: 1; /*Set this bit to clear the tx_done_int_raw interrupt.*/ + uint32_t rs485_parity_err: 1; /*Set this bit to clear the rs485_parity_err_int_raw interrupt.*/ + uint32_t rs485_frm_err: 1; /*Set this bit to clear the rs485_frm_err_int_raw interrupt.*/ + uint32_t rs485_clash: 1; /*Set this bit to clear the rs485_clash_int_raw interrupt.*/ + uint32_t at_cmd_char_det: 1; /*Set this bit to clear the at_cmd_char_det_int_raw interrupt.*/ + uint32_t reserved19: 13; + }; + uint32_t val; + } int_clr; + union { + struct { + uint32_t div_int: 20; /*The register value is the integer part of the frequency divider's factor.*/ + uint32_t div_frag: 4; /*The register value is the decimal part of the frequency divider's factor.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } clk_div; + union { + struct { + uint32_t en: 1; /*This is the enable bit for detecting baudrate.*/ + uint32_t reserved1: 7; + uint32_t glitch_filt: 8; /*when input pulse width is lower then this value ignore this pulse.this register is used in auto-baud detect process.*/ + uint32_t reserved16: 16; + }; + uint32_t val; + } auto_baud; + union { + struct { + uint32_t rxfifo_cnt: 8; /*(rx_mem_cnt rxfifo_cnt) stores the byte number of valid data in receiver's fifo. rx_mem_cnt register stores the 3 most significant bits rxfifo_cnt stores the 8 least significant bits.*/ + uint32_t st_urx_out: 4; /*This register stores the value of receiver's finite state machine. 0:RX_IDLE 1:RX_STRT 2:RX_DAT0 3:RX_DAT1 4:RX_DAT2 5:RX_DAT3 6:RX_DAT4 7:RX_DAT5 8:RX_DAT6 9:RX_DAT7 10:RX_PRTY 11:RX_STP1 12:RX_STP2 13:RX_DL1*/ + uint32_t reserved12: 1; + uint32_t dsrn: 1; /*This register stores the level value of the internal uart dsr signal.*/ + uint32_t ctsn: 1; /*This register stores the level value of the internal uart cts signal.*/ + uint32_t rxd: 1; /*This register stores the level value of the internal uart rxd signal.*/ + uint32_t txfifo_cnt: 8; /*(tx_mem_cnt txfifo_cnt) stores the byte number of valid data in transmitter's fifo.tx_mem_cnt stores the 3 most significant bits txfifo_cnt stores the 8 least significant bits.*/ + uint32_t st_utx_out: 4; /*This register stores the value of transmitter's finite state machine. 0:TX_IDLE 1:TX_STRT 2:TX_DAT0 3:TX_DAT1 4:TX_DAT2 5:TX_DAT3 6:TX_DAT4 7:TX_DAT5 8:TX_DAT6 9:TX_DAT7 10:TX_PRTY 11:TX_STP1 12:TX_STP2 13:TX_DL0 14:TX_DL1*/ + uint32_t reserved28: 1; + uint32_t dtrn: 1; /*The register represent the level value of the internal uart dsr signal.*/ + uint32_t rtsn: 1; /*This register represent the level value of the internal uart cts signal.*/ + uint32_t txd: 1; /*This register represent the level value of the internal uart rxd signal.*/ + }; + uint32_t val; + } status; + union { + struct { + uint32_t parity: 1; /*This register is used to configure the parity check mode. 0:even 1:odd*/ + uint32_t parity_en: 1; /*Set this bit to enable uart parity check.*/ + uint32_t bit_num: 2; /*This register is used to set the length of data: 0:5bits 1:6bits 2:7bits 3:8bits*/ + uint32_t stop_bit_num: 2; /*This register is used to set the length of stop bit. 1:1bit 2:1.5bits 3:2bits*/ + uint32_t sw_rts: 1; /*This register is used to configure the software rts signal which is used in software flow control.*/ + uint32_t sw_dtr: 1; /*This register is used to configure the software dtr signal which is used in software flow control..*/ + uint32_t txd_brk: 1; /*Set this bit to enable transmitter to send 0 when the process of sending data is done.*/ + uint32_t irda_dplx: 1; /*Set this bit to enable irda loop-back mode.*/ + uint32_t irda_tx_en: 1; /*This is the start enable bit for irda transmitter.*/ + uint32_t irda_wctl: 1; /*1:the irda transmitter's 11th bit is the same to the 10th bit. 0:set irda transmitter's 11th bit to 0.*/ + uint32_t irda_tx_inv: 1; /*Set this bit to inverse the level value of irda transmitter's level.*/ + uint32_t irda_rx_inv: 1; /*Set this bit to inverse the level value of irda receiver's level.*/ + uint32_t loopback: 1; /*Set this bit to enable uart loop-back test mode.*/ + uint32_t tx_flow_en: 1; /*Set this bit to enable transmitter's flow control function.*/ + uint32_t irda_en: 1; /*Set this bit to enable irda protocol.*/ + uint32_t rxfifo_rst: 1; /*Set this bit to reset uart receiver's fifo.*/ + uint32_t txfifo_rst: 1; /*Set this bit to reset uart transmitter's fifo.*/ + uint32_t rxd_inv: 1; /*Set this bit to inverse the level value of uart rxd signal.*/ + uint32_t cts_inv: 1; /*Set this bit to inverse the level value of uart cts signal.*/ + uint32_t dsr_inv: 1; /*Set this bit to inverse the level value of uart dsr signal.*/ + uint32_t txd_inv: 1; /*Set this bit to inverse the level value of uart txd signal.*/ + uint32_t rts_inv: 1; /*Set this bit to inverse the level value of uart rts signal.*/ + uint32_t dtr_inv: 1; /*Set this bit to inverse the level value of uart dtr signal.*/ + uint32_t clk_en: 1; /*1:force clock on for registers:support clock only when write registers*/ + uint32_t err_wr_mask: 1; /*1:receiver stops storing data int fifo when data is wrong. 0:receiver stores the data even if the received data is wrong.*/ + uint32_t tick_ref_always_on: 1; /*This register is used to select the clock.1:apb clock:ref_tick*/ + uint32_t reserved28: 4; + }; + uint32_t val; + } conf0; + union { + struct { + uint32_t rxfifo_full_thrhd: 7; /*When receiver receives more data than its threshold value,receiver will produce rxfifo_full_int_raw interrupt.the threshold value is (rx_flow_thrhd_h3 rxfifo_full_thrhd).*/ + uint32_t reserved7: 1; + uint32_t txfifo_empty_thrhd: 7; /*when the data amount in transmitter fifo is less than its threshold value, it will produce txfifo_empty_int_raw interrupt. the threshold value is (tx_mem_empty_thrhd txfifo_empty_thrhd)*/ + uint32_t reserved15: 1; + uint32_t rx_flow_thrhd: 7; /*when receiver receives more data than its threshold value, receiver produce signal to tell the transmitter stop transferring data. the threshold value is (rx_flow_thrhd_h3 rx_flow_thrhd).*/ + uint32_t rx_flow_en: 1; /*This is the flow enable bit for uart receiver. 1:choose software flow control with configuring sw_rts signal*/ + uint32_t rx_tout_thrhd: 7; /*This register is used to configure the timeout value for uart receiver receiving a byte.*/ + uint32_t rx_tout_en: 1; /*This is the enable bit for uart receiver's timeout function.*/ + }; + uint32_t val; + } conf1; + union { + struct { + uint32_t min_cnt: 20; /*This register stores the value of the minimum duration time for the low level pulse, it is used in baudrate-detect process.*/ + uint32_t reserved20: 12; + }; + uint32_t val; + } lowpulse; + union { + struct { + uint32_t min_cnt: 20; /*This register stores the value of the maximum duration time for the high level pulse, it is used in baudrate-detect process.*/ + uint32_t reserved20: 12; + }; + uint32_t val; + } highpulse; + union { + struct { + uint32_t edge_cnt: 10; /*This register stores the count of rxd edge change, it is used in baudrate-detect process.*/ + uint32_t reserved10: 22; + }; + uint32_t val; + } rxd_cnt; + union { + struct { + uint32_t sw_flow_con_en: 1; /*Set this bit to enable software flow control. it is used with register sw_xon or sw_xoff .*/ + uint32_t xonoff_del: 1; /*Set this bit to remove flow control char from the received data.*/ + uint32_t force_xon: 1; /*Set this bit to clear ctsn to stop the transmitter from sending data.*/ + uint32_t force_xoff: 1; /*Set this bit to set ctsn to enable the transmitter to go on sending data.*/ + uint32_t send_xon: 1; /*Set this bit to send xon char, it is cleared by hardware automatically.*/ + uint32_t send_xoff: 1; /*Set this bit to send xoff char, it is cleared by hardware automatically.*/ + uint32_t reserved6: 26; + }; + uint32_t val; + } flow_conf; + union { + struct { + uint32_t active_threshold:10; /*When the input rxd edge changes more than this register value, the uart is active from light sleeping mode.*/ + uint32_t reserved10: 22; + }; + uint32_t val; + } sleep_conf; + union { + struct { + uint32_t xon_threshold: 8; /*when the data amount in receiver's fifo is more than this register value, it will send a xoff char with uart_sw_flow_con_en set to 1.*/ + uint32_t xoff_threshold: 8; /*When the data amount in receiver's fifo is less than this register value, it will send a xon char with uart_sw_flow_con_en set to 1.*/ + uint32_t xon_char: 8; /*This register stores the xon flow control char.*/ + uint32_t xoff_char: 8; /*This register stores the xoff flow control char.*/ + }; + uint32_t val; + } swfc_conf; + union { + struct { + uint32_t rx_idle_thrhd:10; /*when receiver takes more time than this register value to receive a byte data, it will produce frame end signal for uhci to stop receiving data.*/ + uint32_t tx_idle_num: 10; /*This register is used to configure the duration time between transfers.*/ + uint32_t tx_brk_num: 8; /*This register is used to configure the number of 0 send after the process of sending data is done. it is active when txd_brk is set to 1.*/ + uint32_t reserved28: 4; + }; + uint32_t val; + } idle_conf; + union { + struct { + uint32_t en: 1; /*Set this bit to choose rs485 mode.*/ + uint32_t dl0_en: 1; /*Set this bit to delay the stop bit by 1 bit.*/ + uint32_t dl1_en: 1; /*Set this bit to delay the stop bit by 1 bit.*/ + uint32_t tx_rx_en: 1; /*Set this bit to enable loop-back transmitter's output data signal to receiver's input data signal.*/ + uint32_t rx_busy_tx_en: 1; /*1: enable rs485's transmitter to send data when rs485's receiver is busy. 0:rs485's transmitter should not send data when its receiver is busy.*/ + uint32_t rx_dly_num: 1; /*This register is used to delay the receiver's internal data signal.*/ + uint32_t tx_dly_num: 4; /*This register is used to delay the transmitter's internal data signal.*/ + uint32_t reserved10: 22; + }; + uint32_t val; + } rs485_conf; + union { + struct { + uint32_t pre_idle_num:24; /*This register is used to configure the idle duration time before the first at_cmd is received by receiver, when the the duration is less than this register value it will not take the next data received as at_cmd char.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } at_cmd_precnt; + union { + struct { + uint32_t post_idle_num:24; /*This register is used to configure the duration time between the last at_cmd and the next data, when the duration is less than this register value it will not take the previous data as at_cmd char.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } at_cmd_postcnt; + union { + struct { + uint32_t rx_gap_tout:24; /*This register is used to configure the duration time between the at_cmd chars, when the duration time is less than this register value it will not take the data as continous at_cmd chars.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } at_cmd_gaptout; + union { + struct { + uint32_t data: 8; /*This register is used to configure the content of at_cmd char.*/ + uint32_t char_num: 8; /*This register is used to configure the number of continuous at_cmd chars received by receiver.*/ + uint32_t reserved16: 16; + }; + uint32_t val; + } at_cmd_char; + union { + struct { + uint32_t mem_pd: 1; /*Set this bit to power down memory,when reg_mem_pd registers in the 3 uarts are all set to 1 memory will enter low power mode.*/ + uint32_t reserved1: 1; + uint32_t reserved2: 1; + uint32_t rx_size: 4; /*This register is used to configure the amount of mem allocated to receiver's fifo. the default byte num is 128.*/ + uint32_t tx_size: 4; /*This register is used to configure the amount of mem allocated to transmitter's fifo.the default byte num is 128.*/ + uint32_t reserved11: 4; + uint32_t rx_flow_thrhd_h3: 3; /*refer to the rx_flow_thrhd's description.*/ + uint32_t rx_tout_thrhd_h3: 3; /*refer to the rx_tout_thrhd's description.*/ + uint32_t xon_threshold_h2: 2; /*refer to the uart_xon_threshold's description.*/ + uint32_t xoff_threshold_h2: 2; /*refer to the uart_xoff_threshold's description.*/ + uint32_t rx_mem_full_thrhd: 3; /*refer to the rxfifo_full_thrhd's description.*/ + uint32_t tx_mem_empty_thrhd: 3; /*refer to txfifo_empty_thrhd 's description.*/ + uint32_t reserved31: 1; + }; + uint32_t val; + } mem_conf; + union { + struct { + uint32_t status:24; + uint32_t reserved24: 8; + }; + uint32_t val; + } mem_tx_status; + union { + struct { + uint32_t status:24; + uint32_t reserved24: 8; + }; + uint32_t val; + } mem_rx_status; + union { + struct { + uint32_t rx_cnt: 3; /*refer to the rxfifo_cnt's description.*/ + uint32_t tx_cnt: 3; /*refer to the txfifo_cnt's description.*/ + uint32_t reserved6: 26; + }; + uint32_t val; + } mem_cnt_status; + union { + struct { + uint32_t min_cnt: 20; /*This register stores the count of rxd pos-edge edge, it is used in baudrate-detect process.*/ + uint32_t reserved20: 12; + }; + uint32_t val; + } pospulse; + union { + struct { + uint32_t min_cnt: 20; /*This register stores the count of rxd neg-edge edge, it is used in baudrate-detect process.*/ + uint32_t reserved20: 12; + }; + uint32_t val; + } negpulse; + uint32_t reserved_70; + uint32_t reserved_74; + uint32_t date; /**/ + uint32_t id; /**/ +} uart_dev_t; +extern uart_dev_t UART0; +extern uart_dev_t UART1; +extern uart_dev_t UART2; +#endif /* _SOC_UART_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/uhci_reg.h b/tools/sdk/include/esp32/soc/uhci_reg.h new file mode 100644 index 00000000..973c6b58 --- /dev/null +++ b/tools/sdk/include/esp32/soc/uhci_reg.h @@ -0,0 +1,1260 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_UHCI_REG_H_ +#define _SOC_UHCI_REG_H_ + + +#include "soc.h" +#define REG_UHCI_BASE(i) (DR_REG_UHCI0_BASE - (i) * 0x8000) +#define UHCI_CONF0_REG(i) (REG_UHCI_BASE(i) + 0x0) +/* UHCI_UART_RX_BRK_EOF_EN : R/W ;bitpos:[23] ;default: 1'b0 ; */ +/*description: Set this bit to enable to use brk char as the end of a data frame.*/ +#define UHCI_UART_RX_BRK_EOF_EN (BIT(23)) +#define UHCI_UART_RX_BRK_EOF_EN_M (BIT(23)) +#define UHCI_UART_RX_BRK_EOF_EN_V 0x1 +#define UHCI_UART_RX_BRK_EOF_EN_S 23 +/* UHCI_CLK_EN : R/W ;bitpos:[22] ;default: 1'b0 ; */ +/*description: Set this bit to enable clock-gating for read or write registers.*/ +#define UHCI_CLK_EN (BIT(22)) +#define UHCI_CLK_EN_M (BIT(22)) +#define UHCI_CLK_EN_V 0x1 +#define UHCI_CLK_EN_S 22 +/* UHCI_ENCODE_CRC_EN : R/W ;bitpos:[21] ;default: 1'b1 ; */ +/*description: Set this bit to enable crc calculation for data frame when bit6 + in the head packet is 1.*/ +#define UHCI_ENCODE_CRC_EN (BIT(21)) +#define UHCI_ENCODE_CRC_EN_M (BIT(21)) +#define UHCI_ENCODE_CRC_EN_V 0x1 +#define UHCI_ENCODE_CRC_EN_S 21 +/* UHCI_LEN_EOF_EN : R/W ;bitpos:[20] ;default: 1'b1 ; */ +/*description: Set this bit to enable to use packet_len in packet head when + the received data is equal to packet_len this means the end of a data frame.*/ +#define UHCI_LEN_EOF_EN (BIT(20)) +#define UHCI_LEN_EOF_EN_M (BIT(20)) +#define UHCI_LEN_EOF_EN_V 0x1 +#define UHCI_LEN_EOF_EN_S 20 +/* UHCI_UART_IDLE_EOF_EN : R/W ;bitpos:[19] ;default: 1'b0 ; */ +/*description: Set this bit to enable to use idle time when the idle time after + data frame is satisfied this means the end of a data frame.*/ +#define UHCI_UART_IDLE_EOF_EN (BIT(19)) +#define UHCI_UART_IDLE_EOF_EN_M (BIT(19)) +#define UHCI_UART_IDLE_EOF_EN_V 0x1 +#define UHCI_UART_IDLE_EOF_EN_S 19 +/* UHCI_CRC_REC_EN : R/W ;bitpos:[18] ;default: 1'b1 ; */ +/*description: Set this bit to enable receiver''s ability of crc calculation + when crc_en bit in head packet is 1 then there will be crc bytes after data_frame*/ +#define UHCI_CRC_REC_EN (BIT(18)) +#define UHCI_CRC_REC_EN_M (BIT(18)) +#define UHCI_CRC_REC_EN_V 0x1 +#define UHCI_CRC_REC_EN_S 18 +/* UHCI_HEAD_EN : R/W ;bitpos:[17] ;default: 1'b1 ; */ +/*description: Set this bit to enable to use head packet before the data frame.*/ +#define UHCI_HEAD_EN (BIT(17)) +#define UHCI_HEAD_EN_M (BIT(17)) +#define UHCI_HEAD_EN_V 0x1 +#define UHCI_HEAD_EN_S 17 +/* UHCI_SEPER_EN : R/W ;bitpos:[16] ;default: 1'b1 ; */ +/*description: Set this bit to use special char to separate the data frame.*/ +#define UHCI_SEPER_EN (BIT(16)) +#define UHCI_SEPER_EN_M (BIT(16)) +#define UHCI_SEPER_EN_V 0x1 +#define UHCI_SEPER_EN_S 16 +/* UHCI_MEM_TRANS_EN : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_MEM_TRANS_EN (BIT(15)) +#define UHCI_MEM_TRANS_EN_M (BIT(15)) +#define UHCI_MEM_TRANS_EN_V 0x1 +#define UHCI_MEM_TRANS_EN_S 15 +/* UHCI_OUT_DATA_BURST_EN : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: Set this bit to enable DMA burst MODE*/ +#define UHCI_OUT_DATA_BURST_EN (BIT(14)) +#define UHCI_OUT_DATA_BURST_EN_M (BIT(14)) +#define UHCI_OUT_DATA_BURST_EN_V 0x1 +#define UHCI_OUT_DATA_BURST_EN_S 14 +/* UHCI_INDSCR_BURST_EN : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: Set this bit to enable DMA out links to use burst mode.*/ +#define UHCI_INDSCR_BURST_EN (BIT(13)) +#define UHCI_INDSCR_BURST_EN_M (BIT(13)) +#define UHCI_INDSCR_BURST_EN_V 0x1 +#define UHCI_INDSCR_BURST_EN_S 13 +/* UHCI_OUTDSCR_BURST_EN : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: Set this bit to enable DMA in links to use burst mode.*/ +#define UHCI_OUTDSCR_BURST_EN (BIT(12)) +#define UHCI_OUTDSCR_BURST_EN_M (BIT(12)) +#define UHCI_OUTDSCR_BURST_EN_V 0x1 +#define UHCI_OUTDSCR_BURST_EN_S 12 +/* UHCI_UART2_CE : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: Set this bit to use UART2 to transmit or receive data.*/ +#define UHCI_UART2_CE (BIT(11)) +#define UHCI_UART2_CE_M (BIT(11)) +#define UHCI_UART2_CE_V 0x1 +#define UHCI_UART2_CE_S 11 +/* UHCI_UART1_CE : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: Set this bit to use UART1 to transmit or receive data.*/ +#define UHCI_UART1_CE (BIT(10)) +#define UHCI_UART1_CE_M (BIT(10)) +#define UHCI_UART1_CE_V 0x1 +#define UHCI_UART1_CE_S 10 +/* UHCI_UART0_CE : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: Set this bit to use UART to transmit or receive data.*/ +#define UHCI_UART0_CE (BIT(9)) +#define UHCI_UART0_CE_M (BIT(9)) +#define UHCI_UART0_CE_V 0x1 +#define UHCI_UART0_CE_S 9 +/* UHCI_OUT_EOF_MODE : R/W ;bitpos:[8] ;default: 1'b1 ; */ +/*description: Set this bit to produce eof after DMA pops all data clear this + bit to produce eof after DMA pushes all data*/ +#define UHCI_OUT_EOF_MODE (BIT(8)) +#define UHCI_OUT_EOF_MODE_M (BIT(8)) +#define UHCI_OUT_EOF_MODE_V 0x1 +#define UHCI_OUT_EOF_MODE_S 8 +/* UHCI_OUT_NO_RESTART_CLR : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: don't use*/ +#define UHCI_OUT_NO_RESTART_CLR (BIT(7)) +#define UHCI_OUT_NO_RESTART_CLR_M (BIT(7)) +#define UHCI_OUT_NO_RESTART_CLR_V 0x1 +#define UHCI_OUT_NO_RESTART_CLR_S 7 +/* UHCI_OUT_AUTO_WRBACK : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: when in link's length is 0 go on to use the next in link automatically.*/ +#define UHCI_OUT_AUTO_WRBACK (BIT(6)) +#define UHCI_OUT_AUTO_WRBACK_M (BIT(6)) +#define UHCI_OUT_AUTO_WRBACK_V 0x1 +#define UHCI_OUT_AUTO_WRBACK_S 6 +/* UHCI_OUT_LOOP_TEST : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: Set this bit to enable loop test for out links.*/ +#define UHCI_OUT_LOOP_TEST (BIT(5)) +#define UHCI_OUT_LOOP_TEST_M (BIT(5)) +#define UHCI_OUT_LOOP_TEST_V 0x1 +#define UHCI_OUT_LOOP_TEST_S 5 +/* UHCI_IN_LOOP_TEST : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: Set this bit to enable loop test for in links.*/ +#define UHCI_IN_LOOP_TEST (BIT(4)) +#define UHCI_IN_LOOP_TEST_M (BIT(4)) +#define UHCI_IN_LOOP_TEST_V 0x1 +#define UHCI_IN_LOOP_TEST_S 4 +/* UHCI_AHBM_RST : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to reset dma ahb interface.*/ +#define UHCI_AHBM_RST (BIT(3)) +#define UHCI_AHBM_RST_M (BIT(3)) +#define UHCI_AHBM_RST_V 0x1 +#define UHCI_AHBM_RST_S 3 +/* UHCI_AHBM_FIFO_RST : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to reset dma ahb fifo.*/ +#define UHCI_AHBM_FIFO_RST (BIT(2)) +#define UHCI_AHBM_FIFO_RST_M (BIT(2)) +#define UHCI_AHBM_FIFO_RST_V 0x1 +#define UHCI_AHBM_FIFO_RST_S 2 +/* UHCI_OUT_RST : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: Set this bit to reset out link operations.*/ +#define UHCI_OUT_RST (BIT(1)) +#define UHCI_OUT_RST_M (BIT(1)) +#define UHCI_OUT_RST_V 0x1 +#define UHCI_OUT_RST_S 1 +/* UHCI_IN_RST : R/W ;bitpos:[0] ;default: 1'h0 ; */ +/*description: Set this bit to reset in link operations.*/ +#define UHCI_IN_RST (BIT(0)) +#define UHCI_IN_RST_M (BIT(0)) +#define UHCI_IN_RST_V 0x1 +#define UHCI_IN_RST_S 0 + +#define UHCI_INT_RAW_REG(i) (REG_UHCI_BASE(i) + 0x4) +/* UHCI_DMA_INFIFO_FULL_WM_INT_RAW : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_DMA_INFIFO_FULL_WM_INT_RAW (BIT(16)) +#define UHCI_DMA_INFIFO_FULL_WM_INT_RAW_M (BIT(16)) +#define UHCI_DMA_INFIFO_FULL_WM_INT_RAW_V 0x1 +#define UHCI_DMA_INFIFO_FULL_WM_INT_RAW_S 16 +/* UHCI_SEND_A_Q_INT_RAW : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: When use always_send registers to send a series of short packets + it will produce this interrupt when dma has send the short packet.*/ +#define UHCI_SEND_A_Q_INT_RAW (BIT(15)) +#define UHCI_SEND_A_Q_INT_RAW_M (BIT(15)) +#define UHCI_SEND_A_Q_INT_RAW_V 0x1 +#define UHCI_SEND_A_Q_INT_RAW_S 15 +/* UHCI_SEND_S_Q_INT_RAW : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: When use single send registers to send a short packets it will + produce this interrupt when dma has send the short packet.*/ +#define UHCI_SEND_S_Q_INT_RAW (BIT(14)) +#define UHCI_SEND_S_Q_INT_RAW_M (BIT(14)) +#define UHCI_SEND_S_Q_INT_RAW_V 0x1 +#define UHCI_SEND_S_Q_INT_RAW_S 14 +/* UHCI_OUT_TOTAL_EOF_INT_RAW : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: When all data have been send it will produce uhci_out_total_eof_int interrupt.*/ +#define UHCI_OUT_TOTAL_EOF_INT_RAW (BIT(13)) +#define UHCI_OUT_TOTAL_EOF_INT_RAW_M (BIT(13)) +#define UHCI_OUT_TOTAL_EOF_INT_RAW_V 0x1 +#define UHCI_OUT_TOTAL_EOF_INT_RAW_S 13 +/* UHCI_OUTLINK_EOF_ERR_INT_RAW : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: when there are some errors about eof in outlink descriptor it + will produce uhci_outlink_eof_err_int interrupt.*/ +#define UHCI_OUTLINK_EOF_ERR_INT_RAW (BIT(12)) +#define UHCI_OUTLINK_EOF_ERR_INT_RAW_M (BIT(12)) +#define UHCI_OUTLINK_EOF_ERR_INT_RAW_V 0x1 +#define UHCI_OUTLINK_EOF_ERR_INT_RAW_S 12 +/* UHCI_IN_DSCR_EMPTY_INT_RAW : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: when there are not enough in links for DMA it will produce uhci_in_dscr_err_int + interrupt.*/ +#define UHCI_IN_DSCR_EMPTY_INT_RAW (BIT(11)) +#define UHCI_IN_DSCR_EMPTY_INT_RAW_M (BIT(11)) +#define UHCI_IN_DSCR_EMPTY_INT_RAW_V 0x1 +#define UHCI_IN_DSCR_EMPTY_INT_RAW_S 11 +/* UHCI_OUT_DSCR_ERR_INT_RAW : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: when there are some errors about the in link descriptor it will + produce uhci_out_dscr_err_int interrupt.*/ +#define UHCI_OUT_DSCR_ERR_INT_RAW (BIT(10)) +#define UHCI_OUT_DSCR_ERR_INT_RAW_M (BIT(10)) +#define UHCI_OUT_DSCR_ERR_INT_RAW_V 0x1 +#define UHCI_OUT_DSCR_ERR_INT_RAW_S 10 +/* UHCI_IN_DSCR_ERR_INT_RAW : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: when there are some errors about the out link descriptor it + will produce uhci_in_dscr_err_int interrupt.*/ +#define UHCI_IN_DSCR_ERR_INT_RAW (BIT(9)) +#define UHCI_IN_DSCR_ERR_INT_RAW_M (BIT(9)) +#define UHCI_IN_DSCR_ERR_INT_RAW_V 0x1 +#define UHCI_IN_DSCR_ERR_INT_RAW_S 9 +/* UHCI_OUT_EOF_INT_RAW : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: when the current descriptor's eof bit is 1 it will produce uhci_out_eof_int + interrupt.*/ +#define UHCI_OUT_EOF_INT_RAW (BIT(8)) +#define UHCI_OUT_EOF_INT_RAW_M (BIT(8)) +#define UHCI_OUT_EOF_INT_RAW_V 0x1 +#define UHCI_OUT_EOF_INT_RAW_S 8 +/* UHCI_OUT_DONE_INT_RAW : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: when a out link descriptor is completed it will produce uhci_out_done_int + interrupt.*/ +#define UHCI_OUT_DONE_INT_RAW (BIT(7)) +#define UHCI_OUT_DONE_INT_RAW_M (BIT(7)) +#define UHCI_OUT_DONE_INT_RAW_V 0x1 +#define UHCI_OUT_DONE_INT_RAW_S 7 +/* UHCI_IN_ERR_EOF_INT_RAW : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: when there are some errors about eof in in link descriptor it + will produce uhci_in_err_eof_int interrupt.*/ +#define UHCI_IN_ERR_EOF_INT_RAW (BIT(6)) +#define UHCI_IN_ERR_EOF_INT_RAW_M (BIT(6)) +#define UHCI_IN_ERR_EOF_INT_RAW_V 0x1 +#define UHCI_IN_ERR_EOF_INT_RAW_S 6 +/* UHCI_IN_SUC_EOF_INT_RAW : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: when a data packet has been received it will produce uhci_in_suc_eof_int + interrupt.*/ +#define UHCI_IN_SUC_EOF_INT_RAW (BIT(5)) +#define UHCI_IN_SUC_EOF_INT_RAW_M (BIT(5)) +#define UHCI_IN_SUC_EOF_INT_RAW_V 0x1 +#define UHCI_IN_SUC_EOF_INT_RAW_S 5 +/* UHCI_IN_DONE_INT_RAW : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: when a in link descriptor has been completed it will produce + uhci_in_done_int interrupt.*/ +#define UHCI_IN_DONE_INT_RAW (BIT(4)) +#define UHCI_IN_DONE_INT_RAW_M (BIT(4)) +#define UHCI_IN_DONE_INT_RAW_V 0x1 +#define UHCI_IN_DONE_INT_RAW_S 4 +/* UHCI_TX_HUNG_INT_RAW : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: when DMA takes a lot of time to read a data from RAM it will + produce uhci_tx_hung_int interrupt.*/ +#define UHCI_TX_HUNG_INT_RAW (BIT(3)) +#define UHCI_TX_HUNG_INT_RAW_M (BIT(3)) +#define UHCI_TX_HUNG_INT_RAW_V 0x1 +#define UHCI_TX_HUNG_INT_RAW_S 3 +/* UHCI_RX_HUNG_INT_RAW : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: when DMA takes a lot of time to receive a data it will produce + uhci_rx_hung_int interrupt.*/ +#define UHCI_RX_HUNG_INT_RAW (BIT(2)) +#define UHCI_RX_HUNG_INT_RAW_M (BIT(2)) +#define UHCI_RX_HUNG_INT_RAW_V 0x1 +#define UHCI_RX_HUNG_INT_RAW_S 2 +/* UHCI_TX_START_INT_RAW : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: when DMA detects a separator char it will produce uhci_tx_start_int interrupt.*/ +#define UHCI_TX_START_INT_RAW (BIT(1)) +#define UHCI_TX_START_INT_RAW_M (BIT(1)) +#define UHCI_TX_START_INT_RAW_V 0x1 +#define UHCI_TX_START_INT_RAW_S 1 +/* UHCI_RX_START_INT_RAW : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: when a separator char has been send it will produce uhci_rx_start_int + interrupt.*/ +#define UHCI_RX_START_INT_RAW (BIT(0)) +#define UHCI_RX_START_INT_RAW_M (BIT(0)) +#define UHCI_RX_START_INT_RAW_V 0x1 +#define UHCI_RX_START_INT_RAW_S 0 + +#define UHCI_INT_ST_REG(i) (REG_UHCI_BASE(i) + 0x8) +/* UHCI_DMA_INFIFO_FULL_WM_INT_ST : RO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_DMA_INFIFO_FULL_WM_INT_ST (BIT(16)) +#define UHCI_DMA_INFIFO_FULL_WM_INT_ST_M (BIT(16)) +#define UHCI_DMA_INFIFO_FULL_WM_INT_ST_V 0x1 +#define UHCI_DMA_INFIFO_FULL_WM_INT_ST_S 16 +/* UHCI_SEND_A_Q_INT_ST : RO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_SEND_A_Q_INT_ST (BIT(15)) +#define UHCI_SEND_A_Q_INT_ST_M (BIT(15)) +#define UHCI_SEND_A_Q_INT_ST_V 0x1 +#define UHCI_SEND_A_Q_INT_ST_S 15 +/* UHCI_SEND_S_Q_INT_ST : RO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_SEND_S_Q_INT_ST (BIT(14)) +#define UHCI_SEND_S_Q_INT_ST_M (BIT(14)) +#define UHCI_SEND_S_Q_INT_ST_V 0x1 +#define UHCI_SEND_S_Q_INT_ST_S 14 +/* UHCI_OUT_TOTAL_EOF_INT_ST : RO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_TOTAL_EOF_INT_ST (BIT(13)) +#define UHCI_OUT_TOTAL_EOF_INT_ST_M (BIT(13)) +#define UHCI_OUT_TOTAL_EOF_INT_ST_V 0x1 +#define UHCI_OUT_TOTAL_EOF_INT_ST_S 13 +/* UHCI_OUTLINK_EOF_ERR_INT_ST : RO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUTLINK_EOF_ERR_INT_ST (BIT(12)) +#define UHCI_OUTLINK_EOF_ERR_INT_ST_M (BIT(12)) +#define UHCI_OUTLINK_EOF_ERR_INT_ST_V 0x1 +#define UHCI_OUTLINK_EOF_ERR_INT_ST_S 12 +/* UHCI_IN_DSCR_EMPTY_INT_ST : RO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_DSCR_EMPTY_INT_ST (BIT(11)) +#define UHCI_IN_DSCR_EMPTY_INT_ST_M (BIT(11)) +#define UHCI_IN_DSCR_EMPTY_INT_ST_V 0x1 +#define UHCI_IN_DSCR_EMPTY_INT_ST_S 11 +/* UHCI_OUT_DSCR_ERR_INT_ST : RO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_DSCR_ERR_INT_ST (BIT(10)) +#define UHCI_OUT_DSCR_ERR_INT_ST_M (BIT(10)) +#define UHCI_OUT_DSCR_ERR_INT_ST_V 0x1 +#define UHCI_OUT_DSCR_ERR_INT_ST_S 10 +/* UHCI_IN_DSCR_ERR_INT_ST : RO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_DSCR_ERR_INT_ST (BIT(9)) +#define UHCI_IN_DSCR_ERR_INT_ST_M (BIT(9)) +#define UHCI_IN_DSCR_ERR_INT_ST_V 0x1 +#define UHCI_IN_DSCR_ERR_INT_ST_S 9 +/* UHCI_OUT_EOF_INT_ST : RO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_EOF_INT_ST (BIT(8)) +#define UHCI_OUT_EOF_INT_ST_M (BIT(8)) +#define UHCI_OUT_EOF_INT_ST_V 0x1 +#define UHCI_OUT_EOF_INT_ST_S 8 +/* UHCI_OUT_DONE_INT_ST : RO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_DONE_INT_ST (BIT(7)) +#define UHCI_OUT_DONE_INT_ST_M (BIT(7)) +#define UHCI_OUT_DONE_INT_ST_V 0x1 +#define UHCI_OUT_DONE_INT_ST_S 7 +/* UHCI_IN_ERR_EOF_INT_ST : RO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_ERR_EOF_INT_ST (BIT(6)) +#define UHCI_IN_ERR_EOF_INT_ST_M (BIT(6)) +#define UHCI_IN_ERR_EOF_INT_ST_V 0x1 +#define UHCI_IN_ERR_EOF_INT_ST_S 6 +/* UHCI_IN_SUC_EOF_INT_ST : RO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_SUC_EOF_INT_ST (BIT(5)) +#define UHCI_IN_SUC_EOF_INT_ST_M (BIT(5)) +#define UHCI_IN_SUC_EOF_INT_ST_V 0x1 +#define UHCI_IN_SUC_EOF_INT_ST_S 5 +/* UHCI_IN_DONE_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_DONE_INT_ST (BIT(4)) +#define UHCI_IN_DONE_INT_ST_M (BIT(4)) +#define UHCI_IN_DONE_INT_ST_V 0x1 +#define UHCI_IN_DONE_INT_ST_S 4 +/* UHCI_TX_HUNG_INT_ST : RO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_TX_HUNG_INT_ST (BIT(3)) +#define UHCI_TX_HUNG_INT_ST_M (BIT(3)) +#define UHCI_TX_HUNG_INT_ST_V 0x1 +#define UHCI_TX_HUNG_INT_ST_S 3 +/* UHCI_RX_HUNG_INT_ST : RO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_RX_HUNG_INT_ST (BIT(2)) +#define UHCI_RX_HUNG_INT_ST_M (BIT(2)) +#define UHCI_RX_HUNG_INT_ST_V 0x1 +#define UHCI_RX_HUNG_INT_ST_S 2 +/* UHCI_TX_START_INT_ST : RO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_TX_START_INT_ST (BIT(1)) +#define UHCI_TX_START_INT_ST_M (BIT(1)) +#define UHCI_TX_START_INT_ST_V 0x1 +#define UHCI_TX_START_INT_ST_S 1 +/* UHCI_RX_START_INT_ST : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_RX_START_INT_ST (BIT(0)) +#define UHCI_RX_START_INT_ST_M (BIT(0)) +#define UHCI_RX_START_INT_ST_V 0x1 +#define UHCI_RX_START_INT_ST_S 0 + +#define UHCI_INT_ENA_REG(i) (REG_UHCI_BASE(i) + 0xC) +/* UHCI_DMA_INFIFO_FULL_WM_INT_ENA : R/W ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_DMA_INFIFO_FULL_WM_INT_ENA (BIT(16)) +#define UHCI_DMA_INFIFO_FULL_WM_INT_ENA_M (BIT(16)) +#define UHCI_DMA_INFIFO_FULL_WM_INT_ENA_V 0x1 +#define UHCI_DMA_INFIFO_FULL_WM_INT_ENA_S 16 +/* UHCI_SEND_A_Q_INT_ENA : R/W ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_SEND_A_Q_INT_ENA (BIT(15)) +#define UHCI_SEND_A_Q_INT_ENA_M (BIT(15)) +#define UHCI_SEND_A_Q_INT_ENA_V 0x1 +#define UHCI_SEND_A_Q_INT_ENA_S 15 +/* UHCI_SEND_S_Q_INT_ENA : R/W ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_SEND_S_Q_INT_ENA (BIT(14)) +#define UHCI_SEND_S_Q_INT_ENA_M (BIT(14)) +#define UHCI_SEND_S_Q_INT_ENA_V 0x1 +#define UHCI_SEND_S_Q_INT_ENA_S 14 +/* UHCI_OUT_TOTAL_EOF_INT_ENA : R/W ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_TOTAL_EOF_INT_ENA (BIT(13)) +#define UHCI_OUT_TOTAL_EOF_INT_ENA_M (BIT(13)) +#define UHCI_OUT_TOTAL_EOF_INT_ENA_V 0x1 +#define UHCI_OUT_TOTAL_EOF_INT_ENA_S 13 +/* UHCI_OUTLINK_EOF_ERR_INT_ENA : R/W ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUTLINK_EOF_ERR_INT_ENA (BIT(12)) +#define UHCI_OUTLINK_EOF_ERR_INT_ENA_M (BIT(12)) +#define UHCI_OUTLINK_EOF_ERR_INT_ENA_V 0x1 +#define UHCI_OUTLINK_EOF_ERR_INT_ENA_S 12 +/* UHCI_IN_DSCR_EMPTY_INT_ENA : R/W ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_DSCR_EMPTY_INT_ENA (BIT(11)) +#define UHCI_IN_DSCR_EMPTY_INT_ENA_M (BIT(11)) +#define UHCI_IN_DSCR_EMPTY_INT_ENA_V 0x1 +#define UHCI_IN_DSCR_EMPTY_INT_ENA_S 11 +/* UHCI_OUT_DSCR_ERR_INT_ENA : R/W ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_DSCR_ERR_INT_ENA (BIT(10)) +#define UHCI_OUT_DSCR_ERR_INT_ENA_M (BIT(10)) +#define UHCI_OUT_DSCR_ERR_INT_ENA_V 0x1 +#define UHCI_OUT_DSCR_ERR_INT_ENA_S 10 +/* UHCI_IN_DSCR_ERR_INT_ENA : R/W ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_DSCR_ERR_INT_ENA (BIT(9)) +#define UHCI_IN_DSCR_ERR_INT_ENA_M (BIT(9)) +#define UHCI_IN_DSCR_ERR_INT_ENA_V 0x1 +#define UHCI_IN_DSCR_ERR_INT_ENA_S 9 +/* UHCI_OUT_EOF_INT_ENA : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_EOF_INT_ENA (BIT(8)) +#define UHCI_OUT_EOF_INT_ENA_M (BIT(8)) +#define UHCI_OUT_EOF_INT_ENA_V 0x1 +#define UHCI_OUT_EOF_INT_ENA_S 8 +/* UHCI_OUT_DONE_INT_ENA : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_DONE_INT_ENA (BIT(7)) +#define UHCI_OUT_DONE_INT_ENA_M (BIT(7)) +#define UHCI_OUT_DONE_INT_ENA_V 0x1 +#define UHCI_OUT_DONE_INT_ENA_S 7 +/* UHCI_IN_ERR_EOF_INT_ENA : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_ERR_EOF_INT_ENA (BIT(6)) +#define UHCI_IN_ERR_EOF_INT_ENA_M (BIT(6)) +#define UHCI_IN_ERR_EOF_INT_ENA_V 0x1 +#define UHCI_IN_ERR_EOF_INT_ENA_S 6 +/* UHCI_IN_SUC_EOF_INT_ENA : R/W ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_SUC_EOF_INT_ENA (BIT(5)) +#define UHCI_IN_SUC_EOF_INT_ENA_M (BIT(5)) +#define UHCI_IN_SUC_EOF_INT_ENA_V 0x1 +#define UHCI_IN_SUC_EOF_INT_ENA_S 5 +/* UHCI_IN_DONE_INT_ENA : R/W ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_DONE_INT_ENA (BIT(4)) +#define UHCI_IN_DONE_INT_ENA_M (BIT(4)) +#define UHCI_IN_DONE_INT_ENA_V 0x1 +#define UHCI_IN_DONE_INT_ENA_S 4 +/* UHCI_TX_HUNG_INT_ENA : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_TX_HUNG_INT_ENA (BIT(3)) +#define UHCI_TX_HUNG_INT_ENA_M (BIT(3)) +#define UHCI_TX_HUNG_INT_ENA_V 0x1 +#define UHCI_TX_HUNG_INT_ENA_S 3 +/* UHCI_RX_HUNG_INT_ENA : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_RX_HUNG_INT_ENA (BIT(2)) +#define UHCI_RX_HUNG_INT_ENA_M (BIT(2)) +#define UHCI_RX_HUNG_INT_ENA_V 0x1 +#define UHCI_RX_HUNG_INT_ENA_S 2 +/* UHCI_TX_START_INT_ENA : R/W ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_TX_START_INT_ENA (BIT(1)) +#define UHCI_TX_START_INT_ENA_M (BIT(1)) +#define UHCI_TX_START_INT_ENA_V 0x1 +#define UHCI_TX_START_INT_ENA_S 1 +/* UHCI_RX_START_INT_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_RX_START_INT_ENA (BIT(0)) +#define UHCI_RX_START_INT_ENA_M (BIT(0)) +#define UHCI_RX_START_INT_ENA_V 0x1 +#define UHCI_RX_START_INT_ENA_S 0 + +#define UHCI_INT_CLR_REG(i) (REG_UHCI_BASE(i) + 0x10) +/* UHCI_DMA_INFIFO_FULL_WM_INT_CLR : WO ;bitpos:[16] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_DMA_INFIFO_FULL_WM_INT_CLR (BIT(16)) +#define UHCI_DMA_INFIFO_FULL_WM_INT_CLR_M (BIT(16)) +#define UHCI_DMA_INFIFO_FULL_WM_INT_CLR_V 0x1 +#define UHCI_DMA_INFIFO_FULL_WM_INT_CLR_S 16 +/* UHCI_SEND_A_Q_INT_CLR : WO ;bitpos:[15] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_SEND_A_Q_INT_CLR (BIT(15)) +#define UHCI_SEND_A_Q_INT_CLR_M (BIT(15)) +#define UHCI_SEND_A_Q_INT_CLR_V 0x1 +#define UHCI_SEND_A_Q_INT_CLR_S 15 +/* UHCI_SEND_S_Q_INT_CLR : WO ;bitpos:[14] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_SEND_S_Q_INT_CLR (BIT(14)) +#define UHCI_SEND_S_Q_INT_CLR_M (BIT(14)) +#define UHCI_SEND_S_Q_INT_CLR_V 0x1 +#define UHCI_SEND_S_Q_INT_CLR_S 14 +/* UHCI_OUT_TOTAL_EOF_INT_CLR : WO ;bitpos:[13] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_TOTAL_EOF_INT_CLR (BIT(13)) +#define UHCI_OUT_TOTAL_EOF_INT_CLR_M (BIT(13)) +#define UHCI_OUT_TOTAL_EOF_INT_CLR_V 0x1 +#define UHCI_OUT_TOTAL_EOF_INT_CLR_S 13 +/* UHCI_OUTLINK_EOF_ERR_INT_CLR : WO ;bitpos:[12] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUTLINK_EOF_ERR_INT_CLR (BIT(12)) +#define UHCI_OUTLINK_EOF_ERR_INT_CLR_M (BIT(12)) +#define UHCI_OUTLINK_EOF_ERR_INT_CLR_V 0x1 +#define UHCI_OUTLINK_EOF_ERR_INT_CLR_S 12 +/* UHCI_IN_DSCR_EMPTY_INT_CLR : WO ;bitpos:[11] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_DSCR_EMPTY_INT_CLR (BIT(11)) +#define UHCI_IN_DSCR_EMPTY_INT_CLR_M (BIT(11)) +#define UHCI_IN_DSCR_EMPTY_INT_CLR_V 0x1 +#define UHCI_IN_DSCR_EMPTY_INT_CLR_S 11 +/* UHCI_OUT_DSCR_ERR_INT_CLR : WO ;bitpos:[10] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_DSCR_ERR_INT_CLR (BIT(10)) +#define UHCI_OUT_DSCR_ERR_INT_CLR_M (BIT(10)) +#define UHCI_OUT_DSCR_ERR_INT_CLR_V 0x1 +#define UHCI_OUT_DSCR_ERR_INT_CLR_S 10 +/* UHCI_IN_DSCR_ERR_INT_CLR : WO ;bitpos:[9] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_DSCR_ERR_INT_CLR (BIT(9)) +#define UHCI_IN_DSCR_ERR_INT_CLR_M (BIT(9)) +#define UHCI_IN_DSCR_ERR_INT_CLR_V 0x1 +#define UHCI_IN_DSCR_ERR_INT_CLR_S 9 +/* UHCI_OUT_EOF_INT_CLR : WO ;bitpos:[8] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_EOF_INT_CLR (BIT(8)) +#define UHCI_OUT_EOF_INT_CLR_M (BIT(8)) +#define UHCI_OUT_EOF_INT_CLR_V 0x1 +#define UHCI_OUT_EOF_INT_CLR_S 8 +/* UHCI_OUT_DONE_INT_CLR : WO ;bitpos:[7] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_OUT_DONE_INT_CLR (BIT(7)) +#define UHCI_OUT_DONE_INT_CLR_M (BIT(7)) +#define UHCI_OUT_DONE_INT_CLR_V 0x1 +#define UHCI_OUT_DONE_INT_CLR_S 7 +/* UHCI_IN_ERR_EOF_INT_CLR : WO ;bitpos:[6] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_ERR_EOF_INT_CLR (BIT(6)) +#define UHCI_IN_ERR_EOF_INT_CLR_M (BIT(6)) +#define UHCI_IN_ERR_EOF_INT_CLR_V 0x1 +#define UHCI_IN_ERR_EOF_INT_CLR_S 6 +/* UHCI_IN_SUC_EOF_INT_CLR : WO ;bitpos:[5] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_SUC_EOF_INT_CLR (BIT(5)) +#define UHCI_IN_SUC_EOF_INT_CLR_M (BIT(5)) +#define UHCI_IN_SUC_EOF_INT_CLR_V 0x1 +#define UHCI_IN_SUC_EOF_INT_CLR_S 5 +/* UHCI_IN_DONE_INT_CLR : WO ;bitpos:[4] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_DONE_INT_CLR (BIT(4)) +#define UHCI_IN_DONE_INT_CLR_M (BIT(4)) +#define UHCI_IN_DONE_INT_CLR_V 0x1 +#define UHCI_IN_DONE_INT_CLR_S 4 +/* UHCI_TX_HUNG_INT_CLR : WO ;bitpos:[3] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_TX_HUNG_INT_CLR (BIT(3)) +#define UHCI_TX_HUNG_INT_CLR_M (BIT(3)) +#define UHCI_TX_HUNG_INT_CLR_V 0x1 +#define UHCI_TX_HUNG_INT_CLR_S 3 +/* UHCI_RX_HUNG_INT_CLR : WO ;bitpos:[2] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_RX_HUNG_INT_CLR (BIT(2)) +#define UHCI_RX_HUNG_INT_CLR_M (BIT(2)) +#define UHCI_RX_HUNG_INT_CLR_V 0x1 +#define UHCI_RX_HUNG_INT_CLR_S 2 +/* UHCI_TX_START_INT_CLR : WO ;bitpos:[1] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_TX_START_INT_CLR (BIT(1)) +#define UHCI_TX_START_INT_CLR_M (BIT(1)) +#define UHCI_TX_START_INT_CLR_V 0x1 +#define UHCI_TX_START_INT_CLR_S 1 +/* UHCI_RX_START_INT_CLR : WO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_RX_START_INT_CLR (BIT(0)) +#define UHCI_RX_START_INT_CLR_M (BIT(0)) +#define UHCI_RX_START_INT_CLR_V 0x1 +#define UHCI_RX_START_INT_CLR_S 0 + +#define UHCI_DMA_OUT_STATUS_REG(i) (REG_UHCI_BASE(i) + 0x14) +/* UHCI_OUT_EMPTY : RO ;bitpos:[1] ;default: 1'b1 ; */ +/*description: 1:DMA in link descriptor's fifo is empty.*/ +#define UHCI_OUT_EMPTY (BIT(1)) +#define UHCI_OUT_EMPTY_M (BIT(1)) +#define UHCI_OUT_EMPTY_V 0x1 +#define UHCI_OUT_EMPTY_S 1 +/* UHCI_OUT_FULL : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: 1:DMA out link descriptor's fifo is full.*/ +#define UHCI_OUT_FULL (BIT(0)) +#define UHCI_OUT_FULL_M (BIT(0)) +#define UHCI_OUT_FULL_V 0x1 +#define UHCI_OUT_FULL_S 0 + +#define UHCI_DMA_OUT_PUSH_REG(i) (REG_UHCI_BASE(i) + 0x18) +/* UHCI_OUTFIFO_PUSH : R/W ;bitpos:[16] ;default: 1'h0 ; */ +/*description: Set this bit to push data in out link descriptor's fifo.*/ +#define UHCI_OUTFIFO_PUSH (BIT(16)) +#define UHCI_OUTFIFO_PUSH_M (BIT(16)) +#define UHCI_OUTFIFO_PUSH_V 0x1 +#define UHCI_OUTFIFO_PUSH_S 16 +/* UHCI_OUTFIFO_WDATA : R/W ;bitpos:[8:0] ;default: 9'h0 ; */ +/*description: This is the data need to be pushed into out link descriptor's fifo.*/ +#define UHCI_OUTFIFO_WDATA 0x000001FF +#define UHCI_OUTFIFO_WDATA_M ((UHCI_OUTFIFO_WDATA_V)<<(UHCI_OUTFIFO_WDATA_S)) +#define UHCI_OUTFIFO_WDATA_V 0x1FF +#define UHCI_OUTFIFO_WDATA_S 0 + +#define UHCI_DMA_IN_STATUS_REG(i) (REG_UHCI_BASE(i) + 0x1C) +/* UHCI_RX_ERR_CAUSE : RO ;bitpos:[6:4] ;default: 3'h0 ; */ +/*description: This register stores the errors caused in out link descriptor's data packet.*/ +#define UHCI_RX_ERR_CAUSE 0x00000007 +#define UHCI_RX_ERR_CAUSE_M ((UHCI_RX_ERR_CAUSE_V)<<(UHCI_RX_ERR_CAUSE_S)) +#define UHCI_RX_ERR_CAUSE_V 0x7 +#define UHCI_RX_ERR_CAUSE_S 4 +/* UHCI_IN_EMPTY : RO ;bitpos:[1] ;default: 1'b1 ; */ +/*description: */ +#define UHCI_IN_EMPTY (BIT(1)) +#define UHCI_IN_EMPTY_M (BIT(1)) +#define UHCI_IN_EMPTY_V 0x1 +#define UHCI_IN_EMPTY_S 1 +/* UHCI_IN_FULL : RO ;bitpos:[0] ;default: 1'b0 ; */ +/*description: */ +#define UHCI_IN_FULL (BIT(0)) +#define UHCI_IN_FULL_M (BIT(0)) +#define UHCI_IN_FULL_V 0x1 +#define UHCI_IN_FULL_S 0 + +#define UHCI_DMA_IN_POP_REG(i) (REG_UHCI_BASE(i) + 0x20) +/* UHCI_INFIFO_POP : R/W ;bitpos:[16] ;default: 1'h0 ; */ +/*description: Set this bit to pop data in in link descriptor's fifo.*/ +#define UHCI_INFIFO_POP (BIT(16)) +#define UHCI_INFIFO_POP_M (BIT(16)) +#define UHCI_INFIFO_POP_V 0x1 +#define UHCI_INFIFO_POP_S 16 +/* UHCI_INFIFO_RDATA : RO ;bitpos:[11:0] ;default: 12'h0 ; */ +/*description: This register stores the data pop from in link descriptor's fifo.*/ +#define UHCI_INFIFO_RDATA 0x00000FFF +#define UHCI_INFIFO_RDATA_M ((UHCI_INFIFO_RDATA_V)<<(UHCI_INFIFO_RDATA_S)) +#define UHCI_INFIFO_RDATA_V 0xFFF +#define UHCI_INFIFO_RDATA_S 0 + +#define UHCI_DMA_OUT_LINK_REG(i) (REG_UHCI_BASE(i) + 0x24) +/* UHCI_OUTLINK_PARK : RO ;bitpos:[31] ;default: 1'h0 ; */ +/*description: 1£º the out link descriptor's fsm is in idle state. 0:the out + link descriptor's fsm is working.*/ +#define UHCI_OUTLINK_PARK (BIT(31)) +#define UHCI_OUTLINK_PARK_M (BIT(31)) +#define UHCI_OUTLINK_PARK_V 0x1 +#define UHCI_OUTLINK_PARK_S 31 +/* UHCI_OUTLINK_RESTART : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: Set this bit to mount on new out link descriptors*/ +#define UHCI_OUTLINK_RESTART (BIT(30)) +#define UHCI_OUTLINK_RESTART_M (BIT(30)) +#define UHCI_OUTLINK_RESTART_V 0x1 +#define UHCI_OUTLINK_RESTART_S 30 +/* UHCI_OUTLINK_START : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: Set this bit to start dealing with the out link descriptors.*/ +#define UHCI_OUTLINK_START (BIT(29)) +#define UHCI_OUTLINK_START_M (BIT(29)) +#define UHCI_OUTLINK_START_V 0x1 +#define UHCI_OUTLINK_START_S 29 +/* UHCI_OUTLINK_STOP : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: Set this bit to stop dealing with the out link descriptors.*/ +#define UHCI_OUTLINK_STOP (BIT(28)) +#define UHCI_OUTLINK_STOP_M (BIT(28)) +#define UHCI_OUTLINK_STOP_V 0x1 +#define UHCI_OUTLINK_STOP_S 28 +/* UHCI_OUTLINK_ADDR : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: This register stores the least 20 bits of the first out link + descriptor's address.*/ +#define UHCI_OUTLINK_ADDR 0x000FFFFF +#define UHCI_OUTLINK_ADDR_M ((UHCI_OUTLINK_ADDR_V)<<(UHCI_OUTLINK_ADDR_S)) +#define UHCI_OUTLINK_ADDR_V 0xFFFFF +#define UHCI_OUTLINK_ADDR_S 0 + +#define UHCI_DMA_IN_LINK_REG(i) (REG_UHCI_BASE(i) + 0x28) +/* UHCI_INLINK_PARK : RO ;bitpos:[31] ;default: 1'h0 ; */ +/*description: 1:the in link descriptor's fsm is in idle state. 0:the in link + descriptor's fsm is working*/ +#define UHCI_INLINK_PARK (BIT(31)) +#define UHCI_INLINK_PARK_M (BIT(31)) +#define UHCI_INLINK_PARK_V 0x1 +#define UHCI_INLINK_PARK_S 31 +/* UHCI_INLINK_RESTART : R/W ;bitpos:[30] ;default: 1'b0 ; */ +/*description: Set this bit to mount on new in link descriptors*/ +#define UHCI_INLINK_RESTART (BIT(30)) +#define UHCI_INLINK_RESTART_M (BIT(30)) +#define UHCI_INLINK_RESTART_V 0x1 +#define UHCI_INLINK_RESTART_S 30 +/* UHCI_INLINK_START : R/W ;bitpos:[29] ;default: 1'b0 ; */ +/*description: Set this bit to start dealing with the in link descriptors.*/ +#define UHCI_INLINK_START (BIT(29)) +#define UHCI_INLINK_START_M (BIT(29)) +#define UHCI_INLINK_START_V 0x1 +#define UHCI_INLINK_START_S 29 +/* UHCI_INLINK_STOP : R/W ;bitpos:[28] ;default: 1'b0 ; */ +/*description: Set this bit to stop dealing with the in link descriptors.*/ +#define UHCI_INLINK_STOP (BIT(28)) +#define UHCI_INLINK_STOP_M (BIT(28)) +#define UHCI_INLINK_STOP_V 0x1 +#define UHCI_INLINK_STOP_S 28 +/* UHCI_INLINK_AUTO_RET : R/W ;bitpos:[20] ;default: 1'b1 ; */ +/*description: 1:when a packet is wrong in link descriptor returns to the descriptor + which is lately used.*/ +#define UHCI_INLINK_AUTO_RET (BIT(20)) +#define UHCI_INLINK_AUTO_RET_M (BIT(20)) +#define UHCI_INLINK_AUTO_RET_V 0x1 +#define UHCI_INLINK_AUTO_RET_S 20 +/* UHCI_INLINK_ADDR : R/W ;bitpos:[19:0] ;default: 20'h0 ; */ +/*description: This register stores the least 20 bits of the first in link descriptor's + address.*/ +#define UHCI_INLINK_ADDR 0x000FFFFF +#define UHCI_INLINK_ADDR_M ((UHCI_INLINK_ADDR_V)<<(UHCI_INLINK_ADDR_S)) +#define UHCI_INLINK_ADDR_V 0xFFFFF +#define UHCI_INLINK_ADDR_S 0 + +#define UHCI_CONF1_REG(i) (REG_UHCI_BASE(i) + 0x2C) +/* UHCI_DMA_INFIFO_FULL_THRS : R/W ;bitpos:[20:9] ;default: 12'b0 ; */ +/*description: when data amount in link descriptor's fifo is more than this + register value it will produce uhci_dma_infifo_full_wm_int interrupt.*/ +#define UHCI_DMA_INFIFO_FULL_THRS 0x00000FFF +#define UHCI_DMA_INFIFO_FULL_THRS_M ((UHCI_DMA_INFIFO_FULL_THRS_V)<<(UHCI_DMA_INFIFO_FULL_THRS_S)) +#define UHCI_DMA_INFIFO_FULL_THRS_V 0xFFF +#define UHCI_DMA_INFIFO_FULL_THRS_S 9 +/* UHCI_SW_START : R/W ;bitpos:[8] ;default: 1'b0 ; */ +/*description: Set this bit to start inserting the packet header.*/ +#define UHCI_SW_START (BIT(8)) +#define UHCI_SW_START_M (BIT(8)) +#define UHCI_SW_START_V 0x1 +#define UHCI_SW_START_S 8 +/* UHCI_WAIT_SW_START : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set this bit to enable software way to add packet header.*/ +#define UHCI_WAIT_SW_START (BIT(7)) +#define UHCI_WAIT_SW_START_M (BIT(7)) +#define UHCI_WAIT_SW_START_V 0x1 +#define UHCI_WAIT_SW_START_S 7 +/* UHCI_CHECK_OWNER : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to check the owner bit in link descriptor.*/ +#define UHCI_CHECK_OWNER (BIT(6)) +#define UHCI_CHECK_OWNER_M (BIT(6)) +#define UHCI_CHECK_OWNER_V 0x1 +#define UHCI_CHECK_OWNER_S 6 +/* UHCI_TX_ACK_NUM_RE : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: Set this bit to enable hardware replace ack num in packet header automatically.*/ +#define UHCI_TX_ACK_NUM_RE (BIT(5)) +#define UHCI_TX_ACK_NUM_RE_M (BIT(5)) +#define UHCI_TX_ACK_NUM_RE_V 0x1 +#define UHCI_TX_ACK_NUM_RE_S 5 +/* UHCI_TX_CHECK_SUM_RE : R/W ;bitpos:[4] ;default: 1'b1 ; */ +/*description: Set this bit to enable hardware replace check_sum in packet header + automatically.*/ +#define UHCI_TX_CHECK_SUM_RE (BIT(4)) +#define UHCI_TX_CHECK_SUM_RE_M (BIT(4)) +#define UHCI_TX_CHECK_SUM_RE_V 0x1 +#define UHCI_TX_CHECK_SUM_RE_S 4 +/* UHCI_SAVE_HEAD : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to save packet header .*/ +#define UHCI_SAVE_HEAD (BIT(3)) +#define UHCI_SAVE_HEAD_M (BIT(3)) +#define UHCI_SAVE_HEAD_V 0x1 +#define UHCI_SAVE_HEAD_S 3 +/* UHCI_CRC_DISABLE : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to disable crc calculation.*/ +#define UHCI_CRC_DISABLE (BIT(2)) +#define UHCI_CRC_DISABLE_M (BIT(2)) +#define UHCI_CRC_DISABLE_V 0x1 +#define UHCI_CRC_DISABLE_S 2 +/* UHCI_CHECK_SEQ_EN : R/W ;bitpos:[1] ;default: 1'b1 ; */ +/*description: Set this bit to enable decoder to check seq num in packet header.*/ +#define UHCI_CHECK_SEQ_EN (BIT(1)) +#define UHCI_CHECK_SEQ_EN_M (BIT(1)) +#define UHCI_CHECK_SEQ_EN_V 0x1 +#define UHCI_CHECK_SEQ_EN_S 1 +/* UHCI_CHECK_SUM_EN : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: Set this bit to enable decoder to check check_sum in packet header.*/ +#define UHCI_CHECK_SUM_EN (BIT(0)) +#define UHCI_CHECK_SUM_EN_M (BIT(0)) +#define UHCI_CHECK_SUM_EN_V 0x1 +#define UHCI_CHECK_SUM_EN_S 0 + +#define UHCI_STATE0_REG(i) (REG_UHCI_BASE(i) + 0x30) +/* UHCI_STATE0 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define UHCI_STATE0 0xFFFFFFFF +#define UHCI_STATE0_M ((UHCI_STATE0_V)<<(UHCI_STATE0_S)) +#define UHCI_STATE0_V 0xFFFFFFFF +#define UHCI_STATE0_S 0 + +#define UHCI_STATE1_REG(i) (REG_UHCI_BASE(i) + 0x34) +/* UHCI_STATE1 : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: */ +#define UHCI_STATE1 0xFFFFFFFF +#define UHCI_STATE1_M ((UHCI_STATE1_V)<<(UHCI_STATE1_S)) +#define UHCI_STATE1_V 0xFFFFFFFF +#define UHCI_STATE1_S 0 + +#define UHCI_DMA_OUT_EOF_DES_ADDR_REG(i) (REG_UHCI_BASE(i) + 0x38) +/* UHCI_OUT_EOF_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the address of out link descriptoir when + eof bit in this descriptor is 1.*/ +#define UHCI_OUT_EOF_DES_ADDR 0xFFFFFFFF +#define UHCI_OUT_EOF_DES_ADDR_M ((UHCI_OUT_EOF_DES_ADDR_V)<<(UHCI_OUT_EOF_DES_ADDR_S)) +#define UHCI_OUT_EOF_DES_ADDR_V 0xFFFFFFFF +#define UHCI_OUT_EOF_DES_ADDR_S 0 + +#define UHCI_DMA_IN_SUC_EOF_DES_ADDR_REG(i) (REG_UHCI_BASE(i) + 0x3C) +/* UHCI_IN_SUC_EOF_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the address of in link descriptor when eof + bit in this descriptor is 1.*/ +#define UHCI_IN_SUC_EOF_DES_ADDR 0xFFFFFFFF +#define UHCI_IN_SUC_EOF_DES_ADDR_M ((UHCI_IN_SUC_EOF_DES_ADDR_V)<<(UHCI_IN_SUC_EOF_DES_ADDR_S)) +#define UHCI_IN_SUC_EOF_DES_ADDR_V 0xFFFFFFFF +#define UHCI_IN_SUC_EOF_DES_ADDR_S 0 + +#define UHCI_DMA_IN_ERR_EOF_DES_ADDR_REG(i) (REG_UHCI_BASE(i) + 0x40) +/* UHCI_IN_ERR_EOF_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the address of in link descriptor when there + are some errors in this descriptor.*/ +#define UHCI_IN_ERR_EOF_DES_ADDR 0xFFFFFFFF +#define UHCI_IN_ERR_EOF_DES_ADDR_M ((UHCI_IN_ERR_EOF_DES_ADDR_V)<<(UHCI_IN_ERR_EOF_DES_ADDR_S)) +#define UHCI_IN_ERR_EOF_DES_ADDR_V 0xFFFFFFFF +#define UHCI_IN_ERR_EOF_DES_ADDR_S 0 + +#define UHCI_DMA_OUT_EOF_BFR_DES_ADDR_REG(i) (REG_UHCI_BASE(i) + 0x44) +/* UHCI_OUT_EOF_BFR_DES_ADDR : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the address of out link descriptor when + there are some errors in this descriptor.*/ +#define UHCI_OUT_EOF_BFR_DES_ADDR 0xFFFFFFFF +#define UHCI_OUT_EOF_BFR_DES_ADDR_M ((UHCI_OUT_EOF_BFR_DES_ADDR_V)<<(UHCI_OUT_EOF_BFR_DES_ADDR_S)) +#define UHCI_OUT_EOF_BFR_DES_ADDR_V 0xFFFFFFFF +#define UHCI_OUT_EOF_BFR_DES_ADDR_S 0 + +#define UHCI_AHB_TEST_REG(i) (REG_UHCI_BASE(i) + 0x48) +/* UHCI_AHB_TESTADDR : R/W ;bitpos:[5:4] ;default: 2'b0 ; */ +/*description: The two bits represent ahb bus address bit[20:19]*/ +#define UHCI_AHB_TESTADDR 0x00000003 +#define UHCI_AHB_TESTADDR_M ((UHCI_AHB_TESTADDR_V)<<(UHCI_AHB_TESTADDR_S)) +#define UHCI_AHB_TESTADDR_V 0x3 +#define UHCI_AHB_TESTADDR_S 4 +/* UHCI_AHB_TESTMODE : R/W ;bitpos:[2:0] ;default: 3'b0 ; */ +/*description: bit2 is ahb bus test enable ,bit1 is used to choose wrtie(1) + or read(0) mode. bit0 is used to choose test only once(1) or continue(0)*/ +#define UHCI_AHB_TESTMODE 0x00000007 +#define UHCI_AHB_TESTMODE_M ((UHCI_AHB_TESTMODE_V)<<(UHCI_AHB_TESTMODE_S)) +#define UHCI_AHB_TESTMODE_V 0x7 +#define UHCI_AHB_TESTMODE_S 0 + +#define UHCI_DMA_IN_DSCR_REG(i) (REG_UHCI_BASE(i) + 0x4C) +/* UHCI_INLINK_DSCR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of current in link descriptor's third dword*/ +#define UHCI_INLINK_DSCR 0xFFFFFFFF +#define UHCI_INLINK_DSCR_M ((UHCI_INLINK_DSCR_V)<<(UHCI_INLINK_DSCR_S)) +#define UHCI_INLINK_DSCR_V 0xFFFFFFFF +#define UHCI_INLINK_DSCR_S 0 + +#define UHCI_DMA_IN_DSCR_BF0_REG(i) (REG_UHCI_BASE(i) + 0x50) +/* UHCI_INLINK_DSCR_BF0 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of current in link descriptor's first dword*/ +#define UHCI_INLINK_DSCR_BF0 0xFFFFFFFF +#define UHCI_INLINK_DSCR_BF0_M ((UHCI_INLINK_DSCR_BF0_V)<<(UHCI_INLINK_DSCR_BF0_S)) +#define UHCI_INLINK_DSCR_BF0_V 0xFFFFFFFF +#define UHCI_INLINK_DSCR_BF0_S 0 + +#define UHCI_DMA_IN_DSCR_BF1_REG(i) (REG_UHCI_BASE(i) + 0x54) +/* UHCI_INLINK_DSCR_BF1 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of current in link descriptor's second dword*/ +#define UHCI_INLINK_DSCR_BF1 0xFFFFFFFF +#define UHCI_INLINK_DSCR_BF1_M ((UHCI_INLINK_DSCR_BF1_V)<<(UHCI_INLINK_DSCR_BF1_S)) +#define UHCI_INLINK_DSCR_BF1_V 0xFFFFFFFF +#define UHCI_INLINK_DSCR_BF1_S 0 + +#define UHCI_DMA_OUT_DSCR_REG(i) (REG_UHCI_BASE(i) + 0x58) +/* UHCI_OUTLINK_DSCR : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of current out link descriptor's third dword*/ +#define UHCI_OUTLINK_DSCR 0xFFFFFFFF +#define UHCI_OUTLINK_DSCR_M ((UHCI_OUTLINK_DSCR_V)<<(UHCI_OUTLINK_DSCR_S)) +#define UHCI_OUTLINK_DSCR_V 0xFFFFFFFF +#define UHCI_OUTLINK_DSCR_S 0 + +#define UHCI_DMA_OUT_DSCR_BF0_REG(i) (REG_UHCI_BASE(i) + 0x5C) +/* UHCI_OUTLINK_DSCR_BF0 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of current out link descriptor's first dword*/ +#define UHCI_OUTLINK_DSCR_BF0 0xFFFFFFFF +#define UHCI_OUTLINK_DSCR_BF0_M ((UHCI_OUTLINK_DSCR_BF0_V)<<(UHCI_OUTLINK_DSCR_BF0_S)) +#define UHCI_OUTLINK_DSCR_BF0_V 0xFFFFFFFF +#define UHCI_OUTLINK_DSCR_BF0_S 0 + +#define UHCI_DMA_OUT_DSCR_BF1_REG(i) (REG_UHCI_BASE(i) + 0x60) +/* UHCI_OUTLINK_DSCR_BF1 : RO ;bitpos:[31:0] ;default: 32'b0 ; */ +/*description: The content of current out link descriptor's second dword*/ +#define UHCI_OUTLINK_DSCR_BF1 0xFFFFFFFF +#define UHCI_OUTLINK_DSCR_BF1_M ((UHCI_OUTLINK_DSCR_BF1_V)<<(UHCI_OUTLINK_DSCR_BF1_S)) +#define UHCI_OUTLINK_DSCR_BF1_V 0xFFFFFFFF +#define UHCI_OUTLINK_DSCR_BF1_S 0 + +#define UHCI_ESCAPE_CONF_REG(i) (REG_UHCI_BASE(i) + 0x64) +/* UHCI_RX_13_ESC_EN : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set this bit to enable flow control char 0x13 replace when DMA sends data.*/ +#define UHCI_RX_13_ESC_EN (BIT(7)) +#define UHCI_RX_13_ESC_EN_M (BIT(7)) +#define UHCI_RX_13_ESC_EN_V 0x1 +#define UHCI_RX_13_ESC_EN_S 7 +/* UHCI_RX_11_ESC_EN : R/W ;bitpos:[6] ;default: 1'b0 ; */ +/*description: Set this bit to enable flow control char 0x11 replace when DMA sends data.*/ +#define UHCI_RX_11_ESC_EN (BIT(6)) +#define UHCI_RX_11_ESC_EN_M (BIT(6)) +#define UHCI_RX_11_ESC_EN_V 0x1 +#define UHCI_RX_11_ESC_EN_S 6 +/* UHCI_RX_DB_ESC_EN : R/W ;bitpos:[5] ;default: 1'b1 ; */ +/*description: Set this bit to enable 0xdb char replace when DMA sends data.*/ +#define UHCI_RX_DB_ESC_EN (BIT(5)) +#define UHCI_RX_DB_ESC_EN_M (BIT(5)) +#define UHCI_RX_DB_ESC_EN_V 0x1 +#define UHCI_RX_DB_ESC_EN_S 5 +/* UHCI_RX_C0_ESC_EN : R/W ;bitpos:[4] ;default: 1'b1 ; */ +/*description: Set this bit to enable 0xc0 char replace when DMA sends data.*/ +#define UHCI_RX_C0_ESC_EN (BIT(4)) +#define UHCI_RX_C0_ESC_EN_M (BIT(4)) +#define UHCI_RX_C0_ESC_EN_V 0x1 +#define UHCI_RX_C0_ESC_EN_S 4 +/* UHCI_TX_13_ESC_EN : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to enable flow control char 0x13 decode when DMA receives data.*/ +#define UHCI_TX_13_ESC_EN (BIT(3)) +#define UHCI_TX_13_ESC_EN_M (BIT(3)) +#define UHCI_TX_13_ESC_EN_V 0x1 +#define UHCI_TX_13_ESC_EN_S 3 +/* UHCI_TX_11_ESC_EN : R/W ;bitpos:[2] ;default: 1'b0 ; */ +/*description: Set this bit to enable flow control char 0x11 decode when DMA receives data.*/ +#define UHCI_TX_11_ESC_EN (BIT(2)) +#define UHCI_TX_11_ESC_EN_M (BIT(2)) +#define UHCI_TX_11_ESC_EN_V 0x1 +#define UHCI_TX_11_ESC_EN_S 2 +/* UHCI_TX_DB_ESC_EN : R/W ;bitpos:[1] ;default: 1'b1 ; */ +/*description: Set this bit to enable 0xdb char decode when DMA receives data.*/ +#define UHCI_TX_DB_ESC_EN (BIT(1)) +#define UHCI_TX_DB_ESC_EN_M (BIT(1)) +#define UHCI_TX_DB_ESC_EN_V 0x1 +#define UHCI_TX_DB_ESC_EN_S 1 +/* UHCI_TX_C0_ESC_EN : R/W ;bitpos:[0] ;default: 1'b1 ; */ +/*description: Set this bit to enable 0xc0 char decode when DMA receives data.*/ +#define UHCI_TX_C0_ESC_EN (BIT(0)) +#define UHCI_TX_C0_ESC_EN_M (BIT(0)) +#define UHCI_TX_C0_ESC_EN_V 0x1 +#define UHCI_TX_C0_ESC_EN_S 0 + +#define UHCI_HUNG_CONF_REG(i) (REG_UHCI_BASE(i) + 0x68) +/* UHCI_RXFIFO_TIMEOUT_ENA : R/W ;bitpos:[23] ;default: 1'b1 ; */ +/*description: This is the enable bit for DMA send data timeout*/ +#define UHCI_RXFIFO_TIMEOUT_ENA (BIT(23)) +#define UHCI_RXFIFO_TIMEOUT_ENA_M (BIT(23)) +#define UHCI_RXFIFO_TIMEOUT_ENA_V 0x1 +#define UHCI_RXFIFO_TIMEOUT_ENA_S 23 +/* UHCI_RXFIFO_TIMEOUT_SHIFT : R/W ;bitpos:[22:20] ;default: 3'b0 ; */ +/*description: The tick count is cleared when its value >=(17'd8000>>reg_rxfifo_timeout_shift)*/ +#define UHCI_RXFIFO_TIMEOUT_SHIFT 0x00000007 +#define UHCI_RXFIFO_TIMEOUT_SHIFT_M ((UHCI_RXFIFO_TIMEOUT_SHIFT_V)<<(UHCI_RXFIFO_TIMEOUT_SHIFT_S)) +#define UHCI_RXFIFO_TIMEOUT_SHIFT_V 0x7 +#define UHCI_RXFIFO_TIMEOUT_SHIFT_S 20 +/* UHCI_RXFIFO_TIMEOUT : R/W ;bitpos:[19:12] ;default: 8'h10 ; */ +/*description: This register stores the timeout value.when DMA takes more time + than this register value to read a data from RAM it will produce uhci_rx_hung_int interrupt.*/ +#define UHCI_RXFIFO_TIMEOUT 0x000000FF +#define UHCI_RXFIFO_TIMEOUT_M ((UHCI_RXFIFO_TIMEOUT_V)<<(UHCI_RXFIFO_TIMEOUT_S)) +#define UHCI_RXFIFO_TIMEOUT_V 0xFF +#define UHCI_RXFIFO_TIMEOUT_S 12 +/* UHCI_TXFIFO_TIMEOUT_ENA : R/W ;bitpos:[11] ;default: 1'b1 ; */ +/*description: The enable bit for txfifo receive data timeout*/ +#define UHCI_TXFIFO_TIMEOUT_ENA (BIT(11)) +#define UHCI_TXFIFO_TIMEOUT_ENA_M (BIT(11)) +#define UHCI_TXFIFO_TIMEOUT_ENA_V 0x1 +#define UHCI_TXFIFO_TIMEOUT_ENA_S 11 +/* UHCI_TXFIFO_TIMEOUT_SHIFT : R/W ;bitpos:[10:8] ;default: 3'b0 ; */ +/*description: The tick count is cleared when its value >=(17'd8000>>reg_txfifo_timeout_shift)*/ +#define UHCI_TXFIFO_TIMEOUT_SHIFT 0x00000007 +#define UHCI_TXFIFO_TIMEOUT_SHIFT_M ((UHCI_TXFIFO_TIMEOUT_SHIFT_V)<<(UHCI_TXFIFO_TIMEOUT_SHIFT_S)) +#define UHCI_TXFIFO_TIMEOUT_SHIFT_V 0x7 +#define UHCI_TXFIFO_TIMEOUT_SHIFT_S 8 +/* UHCI_TXFIFO_TIMEOUT : R/W ;bitpos:[7:0] ;default: 8'h10 ; */ +/*description: This register stores the timeout value.when DMA takes more time + than this register value to receive a data it will produce uhci_tx_hung_int interrupt.*/ +#define UHCI_TXFIFO_TIMEOUT 0x000000FF +#define UHCI_TXFIFO_TIMEOUT_M ((UHCI_TXFIFO_TIMEOUT_V)<<(UHCI_TXFIFO_TIMEOUT_S)) +#define UHCI_TXFIFO_TIMEOUT_V 0xFF +#define UHCI_TXFIFO_TIMEOUT_S 0 + +#define UHCI_ACK_NUM_REG(i) (REG_UHCI_BASE(i) + 0x6C) + +#define UHCI_RX_HEAD_REG(i) (REG_UHCI_BASE(i) + 0x70) +/* UHCI_RX_HEAD : RO ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the packet header received by DMA*/ +#define UHCI_RX_HEAD 0xFFFFFFFF +#define UHCI_RX_HEAD_M ((UHCI_RX_HEAD_V)<<(UHCI_RX_HEAD_S)) +#define UHCI_RX_HEAD_V 0xFFFFFFFF +#define UHCI_RX_HEAD_S 0 + +#define UHCI_QUICK_SENT_REG(i) (REG_UHCI_BASE(i) + 0x74) +/* UHCI_ALWAYS_SEND_EN : R/W ;bitpos:[7] ;default: 1'b0 ; */ +/*description: Set this bit to enable continuously send the same short packet*/ +#define UHCI_ALWAYS_SEND_EN (BIT(7)) +#define UHCI_ALWAYS_SEND_EN_M (BIT(7)) +#define UHCI_ALWAYS_SEND_EN_V 0x1 +#define UHCI_ALWAYS_SEND_EN_S 7 +/* UHCI_ALWAYS_SEND_NUM : R/W ;bitpos:[6:4] ;default: 3'h0 ; */ +/*description: The bits are used to choose which short packet*/ +#define UHCI_ALWAYS_SEND_NUM 0x00000007 +#define UHCI_ALWAYS_SEND_NUM_M ((UHCI_ALWAYS_SEND_NUM_V)<<(UHCI_ALWAYS_SEND_NUM_S)) +#define UHCI_ALWAYS_SEND_NUM_V 0x7 +#define UHCI_ALWAYS_SEND_NUM_S 4 +/* UHCI_SINGLE_SEND_EN : R/W ;bitpos:[3] ;default: 1'b0 ; */ +/*description: Set this bit to enable send a short packet*/ +#define UHCI_SINGLE_SEND_EN (BIT(3)) +#define UHCI_SINGLE_SEND_EN_M (BIT(3)) +#define UHCI_SINGLE_SEND_EN_V 0x1 +#define UHCI_SINGLE_SEND_EN_S 3 +/* UHCI_SINGLE_SEND_NUM : R/W ;bitpos:[2:0] ;default: 3'h0 ; */ +/*description: The bits are used to choose which short packet*/ +#define UHCI_SINGLE_SEND_NUM 0x00000007 +#define UHCI_SINGLE_SEND_NUM_M ((UHCI_SINGLE_SEND_NUM_V)<<(UHCI_SINGLE_SEND_NUM_S)) +#define UHCI_SINGLE_SEND_NUM_V 0x7 +#define UHCI_SINGLE_SEND_NUM_S 0 + +#define UHCI_Q0_WORD0_REG(i) (REG_UHCI_BASE(i) + 0x78) +/* UHCI_SEND_Q0_WORD0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's first dword*/ +#define UHCI_SEND_Q0_WORD0 0xFFFFFFFF +#define UHCI_SEND_Q0_WORD0_M ((UHCI_SEND_Q0_WORD0_V)<<(UHCI_SEND_Q0_WORD0_S)) +#define UHCI_SEND_Q0_WORD0_V 0xFFFFFFFF +#define UHCI_SEND_Q0_WORD0_S 0 + +#define UHCI_Q0_WORD1_REG(i) (REG_UHCI_BASE(i) + 0x7C) +/* UHCI_SEND_Q0_WORD1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's second dword*/ +#define UHCI_SEND_Q0_WORD1 0xFFFFFFFF +#define UHCI_SEND_Q0_WORD1_M ((UHCI_SEND_Q0_WORD1_V)<<(UHCI_SEND_Q0_WORD1_S)) +#define UHCI_SEND_Q0_WORD1_V 0xFFFFFFFF +#define UHCI_SEND_Q0_WORD1_S 0 + +#define UHCI_Q1_WORD0_REG(i) (REG_UHCI_BASE(i) + 0x80) +/* UHCI_SEND_Q1_WORD0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's first dword*/ +#define UHCI_SEND_Q1_WORD0 0xFFFFFFFF +#define UHCI_SEND_Q1_WORD0_M ((UHCI_SEND_Q1_WORD0_V)<<(UHCI_SEND_Q1_WORD0_S)) +#define UHCI_SEND_Q1_WORD0_V 0xFFFFFFFF +#define UHCI_SEND_Q1_WORD0_S 0 + +#define UHCI_Q1_WORD1_REG(i) (REG_UHCI_BASE(i) + 0x84) +/* UHCI_SEND_Q1_WORD1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's second dword*/ +#define UHCI_SEND_Q1_WORD1 0xFFFFFFFF +#define UHCI_SEND_Q1_WORD1_M ((UHCI_SEND_Q1_WORD1_V)<<(UHCI_SEND_Q1_WORD1_S)) +#define UHCI_SEND_Q1_WORD1_V 0xFFFFFFFF +#define UHCI_SEND_Q1_WORD1_S 0 + +#define UHCI_Q2_WORD0_REG(i) (REG_UHCI_BASE(i) + 0x88) +/* UHCI_SEND_Q2_WORD0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's first dword*/ +#define UHCI_SEND_Q2_WORD0 0xFFFFFFFF +#define UHCI_SEND_Q2_WORD0_M ((UHCI_SEND_Q2_WORD0_V)<<(UHCI_SEND_Q2_WORD0_S)) +#define UHCI_SEND_Q2_WORD0_V 0xFFFFFFFF +#define UHCI_SEND_Q2_WORD0_S 0 + +#define UHCI_Q2_WORD1_REG(i) (REG_UHCI_BASE(i) + 0x8C) +/* UHCI_SEND_Q2_WORD1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's second dword*/ +#define UHCI_SEND_Q2_WORD1 0xFFFFFFFF +#define UHCI_SEND_Q2_WORD1_M ((UHCI_SEND_Q2_WORD1_V)<<(UHCI_SEND_Q2_WORD1_S)) +#define UHCI_SEND_Q2_WORD1_V 0xFFFFFFFF +#define UHCI_SEND_Q2_WORD1_S 0 + +#define UHCI_Q3_WORD0_REG(i) (REG_UHCI_BASE(i) + 0x90) +/* UHCI_SEND_Q3_WORD0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's first dword*/ +#define UHCI_SEND_Q3_WORD0 0xFFFFFFFF +#define UHCI_SEND_Q3_WORD0_M ((UHCI_SEND_Q3_WORD0_V)<<(UHCI_SEND_Q3_WORD0_S)) +#define UHCI_SEND_Q3_WORD0_V 0xFFFFFFFF +#define UHCI_SEND_Q3_WORD0_S 0 + +#define UHCI_Q3_WORD1_REG(i) (REG_UHCI_BASE(i) + 0x94) +/* UHCI_SEND_Q3_WORD1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's second dword*/ +#define UHCI_SEND_Q3_WORD1 0xFFFFFFFF +#define UHCI_SEND_Q3_WORD1_M ((UHCI_SEND_Q3_WORD1_V)<<(UHCI_SEND_Q3_WORD1_S)) +#define UHCI_SEND_Q3_WORD1_V 0xFFFFFFFF +#define UHCI_SEND_Q3_WORD1_S 0 + +#define UHCI_Q4_WORD0_REG(i) (REG_UHCI_BASE(i) + 0x98) +/* UHCI_SEND_Q4_WORD0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's first dword*/ +#define UHCI_SEND_Q4_WORD0 0xFFFFFFFF +#define UHCI_SEND_Q4_WORD0_M ((UHCI_SEND_Q4_WORD0_V)<<(UHCI_SEND_Q4_WORD0_S)) +#define UHCI_SEND_Q4_WORD0_V 0xFFFFFFFF +#define UHCI_SEND_Q4_WORD0_S 0 + +#define UHCI_Q4_WORD1_REG(i) (REG_UHCI_BASE(i) + 0x9C) +/* UHCI_SEND_Q4_WORD1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's second dword*/ +#define UHCI_SEND_Q4_WORD1 0xFFFFFFFF +#define UHCI_SEND_Q4_WORD1_M ((UHCI_SEND_Q4_WORD1_V)<<(UHCI_SEND_Q4_WORD1_S)) +#define UHCI_SEND_Q4_WORD1_V 0xFFFFFFFF +#define UHCI_SEND_Q4_WORD1_S 0 + +#define UHCI_Q5_WORD0_REG(i) (REG_UHCI_BASE(i) + 0xA0) +/* UHCI_SEND_Q5_WORD0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's first dword*/ +#define UHCI_SEND_Q5_WORD0 0xFFFFFFFF +#define UHCI_SEND_Q5_WORD0_M ((UHCI_SEND_Q5_WORD0_V)<<(UHCI_SEND_Q5_WORD0_S)) +#define UHCI_SEND_Q5_WORD0_V 0xFFFFFFFF +#define UHCI_SEND_Q5_WORD0_S 0 + +#define UHCI_Q5_WORD1_REG(i) (REG_UHCI_BASE(i) + 0xA4) +/* UHCI_SEND_Q5_WORD1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's second dword*/ +#define UHCI_SEND_Q5_WORD1 0xFFFFFFFF +#define UHCI_SEND_Q5_WORD1_M ((UHCI_SEND_Q5_WORD1_V)<<(UHCI_SEND_Q5_WORD1_S)) +#define UHCI_SEND_Q5_WORD1_V 0xFFFFFFFF +#define UHCI_SEND_Q5_WORD1_S 0 + +#define UHCI_Q6_WORD0_REG(i) (REG_UHCI_BASE(i) + 0xA8) +/* UHCI_SEND_Q6_WORD0 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's first dword*/ +#define UHCI_SEND_Q6_WORD0 0xFFFFFFFF +#define UHCI_SEND_Q6_WORD0_M ((UHCI_SEND_Q6_WORD0_V)<<(UHCI_SEND_Q6_WORD0_S)) +#define UHCI_SEND_Q6_WORD0_V 0xFFFFFFFF +#define UHCI_SEND_Q6_WORD0_S 0 + +#define UHCI_Q6_WORD1_REG(i) (REG_UHCI_BASE(i) + 0xAC) +/* UHCI_SEND_Q6_WORD1 : R/W ;bitpos:[31:0] ;default: 32'h0 ; */ +/*description: This register stores the content of short packet's second dword*/ +#define UHCI_SEND_Q6_WORD1 0xFFFFFFFF +#define UHCI_SEND_Q6_WORD1_M ((UHCI_SEND_Q6_WORD1_V)<<(UHCI_SEND_Q6_WORD1_S)) +#define UHCI_SEND_Q6_WORD1_V 0xFFFFFFFF +#define UHCI_SEND_Q6_WORD1_S 0 + +#define UHCI_ESC_CONF0_REG(i) (REG_UHCI_BASE(i) + 0xB0) +/* UHCI_SEPER_ESC_CHAR1 : R/W ;bitpos:[23:16] ;default: 8'hdc ; */ +/*description: This register stores the second char used to replace seperator + char in data . 0xdc 0xdb replace 0xc0 by default.*/ +#define UHCI_SEPER_ESC_CHAR1 0x000000FF +#define UHCI_SEPER_ESC_CHAR1_M ((UHCI_SEPER_ESC_CHAR1_V)<<(UHCI_SEPER_ESC_CHAR1_S)) +#define UHCI_SEPER_ESC_CHAR1_V 0xFF +#define UHCI_SEPER_ESC_CHAR1_S 16 +/* UHCI_SEPER_ESC_CHAR0 : R/W ;bitpos:[15:8] ;default: 8'hdb ; */ +/*description: This register stores thee first char used to replace seperator char in data.*/ +#define UHCI_SEPER_ESC_CHAR0 0x000000FF +#define UHCI_SEPER_ESC_CHAR0_M ((UHCI_SEPER_ESC_CHAR0_V)<<(UHCI_SEPER_ESC_CHAR0_S)) +#define UHCI_SEPER_ESC_CHAR0_V 0xFF +#define UHCI_SEPER_ESC_CHAR0_S 8 +/* UHCI_SEPER_CHAR : R/W ;bitpos:[7:0] ;default: 8'hc0 ; */ +/*description: This register stores the seperator char seperator char is used + to seperate the data frame.*/ +#define UHCI_SEPER_CHAR 0x000000FF +#define UHCI_SEPER_CHAR_M ((UHCI_SEPER_CHAR_V)<<(UHCI_SEPER_CHAR_S)) +#define UHCI_SEPER_CHAR_V 0xFF +#define UHCI_SEPER_CHAR_S 0 + +#define UHCI_ESC_CONF1_REG(i) (REG_UHCI_BASE(i) + 0xB4) +/* UHCI_ESC_SEQ0_CHAR1 : R/W ;bitpos:[23:16] ;default: 8'hdd ; */ +/*description: This register stores the second char used to replace the reg_esc_seq0 in data*/ +#define UHCI_ESC_SEQ0_CHAR1 0x000000FF +#define UHCI_ESC_SEQ0_CHAR1_M ((UHCI_ESC_SEQ0_CHAR1_V)<<(UHCI_ESC_SEQ0_CHAR1_S)) +#define UHCI_ESC_SEQ0_CHAR1_V 0xFF +#define UHCI_ESC_SEQ0_CHAR1_S 16 +/* UHCI_ESC_SEQ0_CHAR0 : R/W ;bitpos:[15:8] ;default: 8'hdb ; */ +/*description: This register stores the first char used to replace reg_esc_seq0 in data.*/ +#define UHCI_ESC_SEQ0_CHAR0 0x000000FF +#define UHCI_ESC_SEQ0_CHAR0_M ((UHCI_ESC_SEQ0_CHAR0_V)<<(UHCI_ESC_SEQ0_CHAR0_S)) +#define UHCI_ESC_SEQ0_CHAR0_V 0xFF +#define UHCI_ESC_SEQ0_CHAR0_S 8 +/* UHCI_ESC_SEQ0 : R/W ;bitpos:[7:0] ;default: 8'hdb ; */ +/*description: This register stores the first substitute char used to replace + the seperator char.*/ +#define UHCI_ESC_SEQ0 0x000000FF +#define UHCI_ESC_SEQ0_M ((UHCI_ESC_SEQ0_V)<<(UHCI_ESC_SEQ0_S)) +#define UHCI_ESC_SEQ0_V 0xFF +#define UHCI_ESC_SEQ0_S 0 + +#define UHCI_ESC_CONF2_REG(i) (REG_UHCI_BASE(i) + 0xB8) +/* UHCI_ESC_SEQ1_CHAR1 : R/W ;bitpos:[23:16] ;default: 8'hde ; */ +/*description: This register stores the second char used to replace the reg_esc_seq1 in data.*/ +#define UHCI_ESC_SEQ1_CHAR1 0x000000FF +#define UHCI_ESC_SEQ1_CHAR1_M ((UHCI_ESC_SEQ1_CHAR1_V)<<(UHCI_ESC_SEQ1_CHAR1_S)) +#define UHCI_ESC_SEQ1_CHAR1_V 0xFF +#define UHCI_ESC_SEQ1_CHAR1_S 16 +/* UHCI_ESC_SEQ1_CHAR0 : R/W ;bitpos:[15:8] ;default: 8'hdb ; */ +/*description: This register stores the first char used to replace the reg_esc_seq1 in data.*/ +#define UHCI_ESC_SEQ1_CHAR0 0x000000FF +#define UHCI_ESC_SEQ1_CHAR0_M ((UHCI_ESC_SEQ1_CHAR0_V)<<(UHCI_ESC_SEQ1_CHAR0_S)) +#define UHCI_ESC_SEQ1_CHAR0_V 0xFF +#define UHCI_ESC_SEQ1_CHAR0_S 8 +/* UHCI_ESC_SEQ1 : R/W ;bitpos:[7:0] ;default: 8'h11 ; */ +/*description: This register stores the flow control char to turn on the flow_control*/ +#define UHCI_ESC_SEQ1 0x000000FF +#define UHCI_ESC_SEQ1_M ((UHCI_ESC_SEQ1_V)<<(UHCI_ESC_SEQ1_S)) +#define UHCI_ESC_SEQ1_V 0xFF +#define UHCI_ESC_SEQ1_S 0 + +#define UHCI_ESC_CONF3_REG(i) (REG_UHCI_BASE(i) + 0xBC) +/* UHCI_ESC_SEQ2_CHAR1 : R/W ;bitpos:[23:16] ;default: 8'hdf ; */ +/*description: This register stores the second char used to replace the reg_esc_seq2 in data.*/ +#define UHCI_ESC_SEQ2_CHAR1 0x000000FF +#define UHCI_ESC_SEQ2_CHAR1_M ((UHCI_ESC_SEQ2_CHAR1_V)<<(UHCI_ESC_SEQ2_CHAR1_S)) +#define UHCI_ESC_SEQ2_CHAR1_V 0xFF +#define UHCI_ESC_SEQ2_CHAR1_S 16 +/* UHCI_ESC_SEQ2_CHAR0 : R/W ;bitpos:[15:8] ;default: 8'hdb ; */ +/*description: This register stores the first char used to replace the reg_esc_seq2 in data.*/ +#define UHCI_ESC_SEQ2_CHAR0 0x000000FF +#define UHCI_ESC_SEQ2_CHAR0_M ((UHCI_ESC_SEQ2_CHAR0_V)<<(UHCI_ESC_SEQ2_CHAR0_S)) +#define UHCI_ESC_SEQ2_CHAR0_V 0xFF +#define UHCI_ESC_SEQ2_CHAR0_S 8 +/* UHCI_ESC_SEQ2 : R/W ;bitpos:[7:0] ;default: 8'h13 ; */ +/*description: This register stores the flow_control char to turn off the flow_control*/ +#define UHCI_ESC_SEQ2 0x000000FF +#define UHCI_ESC_SEQ2_M ((UHCI_ESC_SEQ2_V)<<(UHCI_ESC_SEQ2_S)) +#define UHCI_ESC_SEQ2_V 0xFF +#define UHCI_ESC_SEQ2_S 0 + +#define UHCI_PKT_THRES_REG(i) (REG_UHCI_BASE(i) + 0xC0) +/* UHCI_PKT_THRS : R/W ;bitpos:[12:0] ;default: 13'h80 ; */ +/*description: when the amount of packet payload is greater than this value + the process of receiving data is done.*/ +#define UHCI_PKT_THRS 0x00001FFF +#define UHCI_PKT_THRS_M ((UHCI_PKT_THRS_V)<<(UHCI_PKT_THRS_S)) +#define UHCI_PKT_THRS_V 0x1FFF +#define UHCI_PKT_THRS_S 0 + +#define UHCI_DATE_REG(i) (REG_UHCI_BASE(i) + 0xFC) +/* UHCI_DATE : R/W ;bitpos:[31:0] ;default: 32'h16041001 ; */ +/*description: version information*/ +#define UHCI_DATE 0xFFFFFFFF +#define UHCI_DATE_M ((UHCI_DATE_V)<<(UHCI_DATE_S)) +#define UHCI_DATE_V 0xFFFFFFFF +#define UHCI_DATE_S 0 + + + + +#endif /*_SOC_UHCI_REG_H_ */ + + diff --git a/tools/sdk/include/esp32/soc/uhci_struct.h b/tools/sdk/include/esp32/soc/uhci_struct.h new file mode 100644 index 00000000..0c939796 --- /dev/null +++ b/tools/sdk/include/esp32/soc/uhci_struct.h @@ -0,0 +1,337 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _SOC_UHCI_STRUCT_H_ +#define _SOC_UHCI_STRUCT_H_ +typedef volatile struct { + union { + struct { + uint32_t in_rst: 1; /*Set this bit to reset in link operations.*/ + uint32_t out_rst: 1; /*Set this bit to reset out link operations.*/ + uint32_t ahbm_fifo_rst: 1; /*Set this bit to reset dma ahb fifo.*/ + uint32_t ahbm_rst: 1; /*Set this bit to reset dma ahb interface.*/ + uint32_t in_loop_test: 1; /*Set this bit to enable loop test for in links.*/ + uint32_t out_loop_test: 1; /*Set this bit to enable loop test for out links.*/ + uint32_t out_auto_wrback: 1; /*when in link's length is 0 go on to use the next in link automatically.*/ + uint32_t out_no_restart_clr: 1; /*don't use*/ + uint32_t out_eof_mode: 1; /*Set this bit to produce eof after DMA pops all data clear this bit to produce eof after DMA pushes all data*/ + uint32_t uart0_ce: 1; /*Set this bit to use UART to transmit or receive data.*/ + uint32_t uart1_ce: 1; /*Set this bit to use UART1 to transmit or receive data.*/ + uint32_t uart2_ce: 1; /*Set this bit to use UART2 to transmit or receive data.*/ + uint32_t outdscr_burst_en: 1; /*Set this bit to enable DMA in links to use burst mode.*/ + uint32_t indscr_burst_en: 1; /*Set this bit to enable DMA out links to use burst mode.*/ + uint32_t out_data_burst_en: 1; /*Set this bit to enable DMA burst MODE*/ + uint32_t mem_trans_en: 1; + uint32_t seper_en: 1; /*Set this bit to use special char to separate the data frame.*/ + uint32_t head_en: 1; /*Set this bit to enable to use head packet before the data frame.*/ + uint32_t crc_rec_en: 1; /*Set this bit to enable receiver''s ability of crc calculation when crc_en bit in head packet is 1 then there will be crc bytes after data_frame*/ + uint32_t uart_idle_eof_en: 1; /*Set this bit to enable to use idle time when the idle time after data frame is satisfied this means the end of a data frame.*/ + uint32_t len_eof_en: 1; /*Set this bit to enable to use packet_len in packet head when the received data is equal to packet_len this means the end of a data frame.*/ + uint32_t encode_crc_en: 1; /*Set this bit to enable crc calculation for data frame when bit6 in the head packet is 1.*/ + uint32_t clk_en: 1; /*Set this bit to enable clock-gating for read or write registers.*/ + uint32_t uart_rx_brk_eof_en: 1; /*Set this bit to enable to use brk char as the end of a data frame.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } conf0; + union { + struct { + uint32_t rx_start: 1; /*when a separator char has been send it will produce uhci_rx_start_int interrupt.*/ + uint32_t tx_start: 1; /*when DMA detects a separator char it will produce uhci_tx_start_int interrupt.*/ + uint32_t rx_hung: 1; /*when DMA takes a lot of time to receive a data it will produce uhci_rx_hung_int interrupt.*/ + uint32_t tx_hung: 1; /*when DMA takes a lot of time to read a data from RAM it will produce uhci_tx_hung_int interrupt.*/ + uint32_t in_done: 1; /*when a in link descriptor has been completed it will produce uhci_in_done_int interrupt.*/ + uint32_t in_suc_eof: 1; /*when a data packet has been received it will produce uhci_in_suc_eof_int interrupt.*/ + uint32_t in_err_eof: 1; /*when there are some errors about eof in in link descriptor it will produce uhci_in_err_eof_int interrupt.*/ + uint32_t out_done: 1; /*when a out link descriptor is completed it will produce uhci_out_done_int interrupt.*/ + uint32_t out_eof: 1; /*when the current descriptor's eof bit is 1 it will produce uhci_out_eof_int interrupt.*/ + uint32_t in_dscr_err: 1; /*when there are some errors about the out link descriptor it will produce uhci_in_dscr_err_int interrupt.*/ + uint32_t out_dscr_err: 1; /*when there are some errors about the in link descriptor it will produce uhci_out_dscr_err_int interrupt.*/ + uint32_t in_dscr_empty: 1; /*when there are not enough in links for DMA it will produce uhci_in_dscr_err_int interrupt.*/ + uint32_t outlink_eof_err: 1; /*when there are some errors about eof in outlink descriptor it will produce uhci_outlink_eof_err_int interrupt.*/ + uint32_t out_total_eof: 1; /*When all data have been send it will produce uhci_out_total_eof_int interrupt.*/ + uint32_t send_s_q: 1; /*When use single send registers to send a short packets it will produce this interrupt when dma has send the short packet.*/ + uint32_t send_a_q: 1; /*When use always_send registers to send a series of short packets it will produce this interrupt when dma has send the short packet.*/ + uint32_t dma_in_fifo_full_wm: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } int_raw; + union { + struct { + uint32_t rx_start: 1; + uint32_t tx_start: 1; + uint32_t rx_hung: 1; + uint32_t tx_hung: 1; + uint32_t in_done: 1; + uint32_t in_suc_eof: 1; + uint32_t in_err_eof: 1; + uint32_t out_done: 1; + uint32_t out_eof: 1; + uint32_t in_dscr_err: 1; + uint32_t out_dscr_err: 1; + uint32_t in_dscr_empty: 1; + uint32_t outlink_eof_err: 1; + uint32_t out_total_eof: 1; + uint32_t send_s_q: 1; + uint32_t send_a_q: 1; + uint32_t dma_in_fifo_full_wm: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } int_st; + union { + struct { + uint32_t rx_start: 1; + uint32_t tx_start: 1; + uint32_t rx_hung: 1; + uint32_t tx_hung: 1; + uint32_t in_done: 1; + uint32_t in_suc_eof: 1; + uint32_t in_err_eof: 1; + uint32_t out_done: 1; + uint32_t out_eof: 1; + uint32_t in_dscr_err: 1; + uint32_t out_dscr_err: 1; + uint32_t in_dscr_empty: 1; + uint32_t outlink_eof_err: 1; + uint32_t out_total_eof: 1; + uint32_t send_s_q: 1; + uint32_t send_a_q: 1; + uint32_t dma_in_fifo_full_wm: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } int_ena; + union { + struct { + uint32_t rx_start: 1; + uint32_t tx_start: 1; + uint32_t rx_hung: 1; + uint32_t tx_hung: 1; + uint32_t in_done: 1; + uint32_t in_suc_eof: 1; + uint32_t in_err_eof: 1; + uint32_t out_done: 1; + uint32_t out_eof: 1; + uint32_t in_dscr_err: 1; + uint32_t out_dscr_err: 1; + uint32_t in_dscr_empty: 1; + uint32_t outlink_eof_err: 1; + uint32_t out_total_eof: 1; + uint32_t send_s_q: 1; + uint32_t send_a_q: 1; + uint32_t dma_in_fifo_full_wm: 1; + uint32_t reserved17: 15; + }; + uint32_t val; + } int_clr; + union { + struct { + uint32_t full: 1; /*1:DMA out link descriptor's fifo is full.*/ + uint32_t empty: 1; /*1:DMA in link descriptor's fifo is empty.*/ + uint32_t reserved2: 30; + }; + uint32_t val; + } dma_out_status; + union { + struct { + uint32_t fifo_wdata: 9; /*This is the data need to be pushed into out link descriptor's fifo.*/ + uint32_t reserved9: 7; + uint32_t fifo_push: 1; /*Set this bit to push data in out link descriptor's fifo.*/ + uint32_t reserved17:15; + }; + uint32_t val; + } dma_out_push; + union { + struct { + uint32_t full: 1; + uint32_t empty: 1; + uint32_t reserved2: 2; + uint32_t rx_err_cause: 3; /*This register stores the errors caused in out link descriptor's data packet.*/ + uint32_t reserved7: 25; + }; + uint32_t val; + } dma_in_status; + union { + struct { + uint32_t fifo_rdata: 12; /*This register stores the data pop from in link descriptor's fifo.*/ + uint32_t reserved12: 4; + uint32_t fifo_pop: 1; /*Set this bit to pop data in in link descriptor's fifo.*/ + uint32_t reserved17: 15; + }; + uint32_t val; + } dma_in_pop; + union { + struct { + uint32_t addr: 20; /*This register stores the least 20 bits of the first out link descriptor's address.*/ + uint32_t reserved20: 8; + uint32_t stop: 1; /*Set this bit to stop dealing with the out link descriptors.*/ + uint32_t start: 1; /*Set this bit to start dealing with the out link descriptors.*/ + uint32_t restart: 1; /*Set this bit to mount on new out link descriptors*/ + uint32_t park: 1; /*1: the out link descriptor's fsm is in idle state. 0:the out link descriptor's fsm is working.*/ + }; + uint32_t val; + } dma_out_link; + union { + struct { + uint32_t addr: 20; /*This register stores the least 20 bits of the first in link descriptor's address.*/ + uint32_t auto_ret: 1; /*1:when a packet is wrong in link descriptor returns to the descriptor which is lately used.*/ + uint32_t reserved21: 7; + uint32_t stop: 1; /*Set this bit to stop dealing with the in link descriptors.*/ + uint32_t start: 1; /*Set this bit to start dealing with the in link descriptors.*/ + uint32_t restart: 1; /*Set this bit to mount on new in link descriptors*/ + uint32_t park: 1; /*1:the in link descriptor's fsm is in idle state. 0:the in link descriptor's fsm is working*/ + }; + uint32_t val; + } dma_in_link; + union { + struct { + uint32_t check_sum_en: 1; /*Set this bit to enable decoder to check check_sum in packet header.*/ + uint32_t check_seq_en: 1; /*Set this bit to enable decoder to check seq num in packet header.*/ + uint32_t crc_disable: 1; /*Set this bit to disable crc calculation.*/ + uint32_t save_head: 1; /*Set this bit to save packet header .*/ + uint32_t tx_check_sum_re: 1; /*Set this bit to enable hardware replace check_sum in packet header automatically.*/ + uint32_t tx_ack_num_re: 1; /*Set this bit to enable hardware replace ack num in packet header automatically.*/ + uint32_t check_owner: 1; /*Set this bit to check the owner bit in link descriptor.*/ + uint32_t wait_sw_start: 1; /*Set this bit to enable software way to add packet header.*/ + uint32_t sw_start: 1; /*Set this bit to start inserting the packet header.*/ + uint32_t dma_in_fifo_full_thrs:12; /*when data amount in link descriptor's fifo is more than this register value it will produce uhci_dma_in_fifo_full_wm_int interrupt.*/ + uint32_t reserved21: 11; + }; + uint32_t val; + } conf1; + uint32_t state0; /**/ + uint32_t state1; /**/ + uint32_t dma_out_eof_des_addr; /*This register stores the address of out link description when eof bit in this descriptor is 1.*/ + uint32_t dma_in_suc_eof_des_addr; /*This register stores the address of in link descriptor when eof bit in this descriptor is 1.*/ + uint32_t dma_in_err_eof_des_addr; /*This register stores the address of in link descriptor when there are some errors in this descriptor.*/ + uint32_t dma_out_eof_bfr_des_addr; /*This register stores the address of out link descriptor when there are some errors in this descriptor.*/ + union { + struct { + uint32_t test_mode: 3; /*bit2 is ahb bus test enable ,bit1 is used to choose write(1) or read(0) mode. bit0 is used to choose test only once(1) or continue(0)*/ + uint32_t reserved3: 1; + uint32_t test_addr: 2; /*The two bits represent ahb bus address bit[20:19]*/ + uint32_t reserved6: 26; + }; + uint32_t val; + } ahb_test; + uint32_t dma_in_dscr; /*The content of current in link descriptor's third dword*/ + uint32_t dma_in_dscr_bf0; /*The content of current in link descriptor's first dword*/ + uint32_t dma_in_dscr_bf1; /*The content of current in link descriptor's second dword*/ + uint32_t dma_out_dscr; /*The content of current out link descriptor's third dword*/ + uint32_t dma_out_dscr_bf0; /*The content of current out link descriptor's first dword*/ + uint32_t dma_out_dscr_bf1; /*The content of current out link descriptor's second dword*/ + union { + struct { + uint32_t tx_c0_esc_en: 1; /*Set this bit to enable 0xc0 char decode when DMA receives data.*/ + uint32_t tx_db_esc_en: 1; /*Set this bit to enable 0xdb char decode when DMA receives data.*/ + uint32_t tx_11_esc_en: 1; /*Set this bit to enable flow control char 0x11 decode when DMA receives data.*/ + uint32_t tx_13_esc_en: 1; /*Set this bit to enable flow control char 0x13 decode when DMA receives data.*/ + uint32_t rx_c0_esc_en: 1; /*Set this bit to enable 0xc0 char replace when DMA sends data.*/ + uint32_t rx_db_esc_en: 1; /*Set this bit to enable 0xdb char replace when DMA sends data.*/ + uint32_t rx_11_esc_en: 1; /*Set this bit to enable flow control char 0x11 replace when DMA sends data.*/ + uint32_t rx_13_esc_en: 1; /*Set this bit to enable flow control char 0x13 replace when DMA sends data.*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } escape_conf; + union { + struct { + uint32_t txfifo_timeout: 8; /*This register stores the timeout value.when DMA takes more time than this register value to receive a data it will produce uhci_tx_hung_int interrupt.*/ + uint32_t txfifo_timeout_shift: 3; /*The tick count is cleared when its value >=(17'd8000>>reg_txfifo_timeout_shift)*/ + uint32_t txfifo_timeout_ena: 1; /*The enable bit for tx fifo receive data timeout*/ + uint32_t rxfifo_timeout: 8; /*This register stores the timeout value.when DMA takes more time than this register value to read a data from RAM it will produce uhci_rx_hung_int interrupt.*/ + uint32_t rxfifo_timeout_shift: 3; /*The tick count is cleared when its value >=(17'd8000>>reg_rxfifo_timeout_shift)*/ + uint32_t rxfifo_timeout_ena: 1; /*This is the enable bit for DMA send data timeout*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } hung_conf; + uint32_t ack_num; /**/ + uint32_t rx_head; /*This register stores the packet header received by DMA*/ + union { + struct { + uint32_t single_send_num: 3; /*The bits are used to choose which short packet*/ + uint32_t single_send_en: 1; /*Set this bit to enable send a short packet*/ + uint32_t always_send_num: 3; /*The bits are used to choose which short packet*/ + uint32_t always_send_en: 1; /*Set this bit to enable continuously send the same short packet*/ + uint32_t reserved8: 24; + }; + uint32_t val; + } quick_sent; + struct{ + uint32_t w_data[2]; /*This register stores the content of short packet's dword*/ + } q_data[7]; + union { + struct { + uint32_t seper_char: 8; /*This register stores the separator char separator char is used to separate the data frame.*/ + uint32_t seper_esc_char0: 8; /*This register stores the first char used to replace separator char in data.*/ + uint32_t seper_esc_char1: 8; /*This register stores the second char used to replace separator char in data . 0xdc 0xdb replace 0xc0 by default.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } esc_conf0; + union { + struct { + uint32_t seq0: 8; /*This register stores the first substitute char used to replace the separate char.*/ + uint32_t seq0_char0: 8; /*This register stores the first char used to replace reg_esc_seq0 in data.*/ + uint32_t seq0_char1: 8; /*This register stores the second char used to replace the reg_esc_seq0 in data*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } esc_conf1; + union { + struct { + uint32_t seq1: 8; /*This register stores the flow control char to turn on the flow_control*/ + uint32_t seq1_char0: 8; /*This register stores the first char used to replace the reg_esc_seq1 in data.*/ + uint32_t seq1_char1: 8; /*This register stores the second char used to replace the reg_esc_seq1 in data.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } esc_conf2; + union { + struct { + uint32_t seq2: 8; /*This register stores the flow_control char to turn off the flow_control*/ + uint32_t seq2_char0: 8; /*This register stores the first char used to replace the reg_esc_seq2 in data.*/ + uint32_t seq2_char1: 8; /*This register stores the second char used to replace the reg_esc_seq2 in data.*/ + uint32_t reserved24: 8; + }; + uint32_t val; + } esc_conf3; + union { + struct { + uint32_t thrs: 13; /*when the amount of packet payload is larger than this value the process of receiving data is done.*/ + uint32_t reserved13:19; + }; + uint32_t val; + } pkt_thres; + uint32_t reserved_c4; + uint32_t reserved_c8; + uint32_t reserved_cc; + uint32_t reserved_d0; + uint32_t reserved_d4; + uint32_t reserved_d8; + uint32_t reserved_dc; + uint32_t reserved_e0; + uint32_t reserved_e4; + uint32_t reserved_e8; + uint32_t reserved_ec; + uint32_t reserved_f0; + uint32_t reserved_f4; + uint32_t reserved_f8; + uint32_t date; /*version information*/ +} uhci_dev_t; +extern uhci_dev_t UHCI0; +extern uhci_dev_t UHCI1; +#endif /* _SOC_UHCI_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/xtensa/board.h b/tools/sdk/include/esp32/xtensa/board.h new file mode 100755 index 00000000..c6b04a25 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/board.h @@ -0,0 +1,28 @@ +/* This header is supposed to be obtained from /xtensa/board.h + using a -I directive passed to the compiler. */ + +#error "Unspecified board. Missing -I directive to select supported Xtensa board, usually -I XTENSA_TOOLS_ROOT/xtensa-elf/include/xtensa/ (XTENSA_TOOLS_ROOT is root of Xtensa Tools install, see xt-run --show-config=xttools)" + +/* + * Copyright (c) 2013 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + diff --git a/tools/sdk/include/esp32/xtensa/c6x-compat.h b/tools/sdk/include/esp32/xtensa/c6x-compat.h new file mode 100755 index 00000000..4b17987e --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/c6x-compat.h @@ -0,0 +1,1758 @@ +/* + * Copyright (c) 2006-2010 Tensilica Inc. ALL RIGHTS RESERVED. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef __C6X_COMPAT__H +#define __C6X_COMPAT__H + +/* Unimplemented functions _gmpy, _gmpy4, _xormpy, _lssub, _cmpy, _cmpyr, + _cmpyr1, _ddotpl2r, _ddotph2r */ + + +typedef long long C6X_COMPAT_LONG40; + + +#define _memd8(a) (*((double*)(a))) +#define _memd8_const(a) (*((const double*)(a))) + +#define _amemd8(a) (*((double*)(a))) +#define _amemd8_const(a) (*((const double*)(a))) + +#define _mem8(a) (*((unsigned long long*)(a))) +#define _mem8_const(a) (*((const unsigned long long*)(a))) + +#define _mem4(a) (*((unsigned*)(a))) +#define _mem4_const(a) (*((const unsigned*)(a))) +#define _amem4_const(a) (*((const unsigned*)(a))) + +/* NOTE: To emulate a C6X properly you should define global variables + for your Xtensa with these names. Some of the emulation routines + will set these values. */ + +extern int _carry; +extern int _overflow; + +// Utility routines + + +#define TESTBIT(x,n) (((x) >> (n)) & 1) + +#define NSA_BITS 32 + +static inline unsigned int norm_shift_amt_U_and_non_U(int is_signed, int inp) { +int j=0, k=0; +int x=inp; +if (is_signed) { + /* Invert signed val if negative */ + x= TESTBIT(x,(NSA_BITS-1))? ~x: x; + x= (x&1)|(x<<1); /* Shift up to return count-1 */ + if (x ==0) + return NSA_BITS-1; + } + if (x ==0) + return NSA_BITS; + /* Now count leading zeros */ + for (j=0, k=NSA_BITS-1; k>=0; j++, k--) { + if (TESTBIT(x,k)) + return j; + } + return NSA_BITS; +} + + + +static inline long long +orig_L40_set( long long L40_var1) { + long long L40_var_out; + + L40_var_out = L40_var1 & 0x000000ffffffffffLL; + + if( L40_var1 & 0x8000000000LL) + L40_var_out = L40_var_out | 0xffffff0000000000LL; + + return( L40_var_out); +} + + + +static inline signed long long +util_saturate_n_no_state(signed long long t, int n) +{ + signed long long maxv, minv; + maxv = (1LL << (n-1)) - 1; + minv = (-1LL << (n-1)); + if (t > maxv) { + t = maxv; + } else if (t < minv) { + t = minv; + } + return t; +} + + +static inline signed long long +util_saturate_n_sgn(signed long long t, int n) +{ + signed long long result; + signed long long maxv, minv; + maxv = (1LL << (n-1)) - 1; + minv = (-1LL << (n-1)); + if (t > 0) { + result = maxv; + _overflow = 1; + } else if (t < 0) { + result = minv; + _overflow = 1; + } else { + result = 0; + } + return result; +} + + + + +/* well-behaved signed shift right (left on negative) with + saturation */ +static inline signed long long +util_shift_right_saturate_n(signed long long t, int shval, int n) +{ + /* n should be <= 62 */ + long long result; + + signed long long mask; + int actual_shift = shval; + long long shft = actual_shift > 0 ? actual_shift : -actual_shift; + + if (t == 0 || actual_shift == 0) + return t; + + if (actual_shift >= n) { + return (t < 0) ? -1 : 0; + } + if (actual_shift <= -n) { + return util_saturate_n_sgn(t, n); + } + if (actual_shift > 0) { + return t >> actual_shift; + } + /* actual_shift < 0. Check for saturation after shift. */ + mask = (-1LL << (n-shft-1)); + if (t > 0 && ((mask & t) != 0)) { + return util_saturate_n_sgn(t, n); + } + if (t < 0 && ((mask & t) != mask)) { + return util_saturate_n_sgn(t, n); + } + result = t << shft; + + return result; +} + + +/* Implemented c6x standard C compatibility functions (alphabetical + order) */ + + +static inline int _abs(int src1) { + if ((unsigned) src1 == (unsigned) 0x80000000) { + return 0x7fffffff; + } + return abs(src1); +} + + +static inline int _abs2(int src1) { + short s1[2],r[2]; + int result; + *((int*)s1) = src1; + if ((unsigned short) s1[1] == (unsigned short) 0x8000) r[1] = 0x7fff; + else r[1] = abs(s1[1]); + if ((unsigned short) s1[0] == (unsigned short) 0x8000) r[0] = 0x7fff; + else r[0] = abs(s1[0]); + result = *(int*)r; + return result; + } + + + + +static inline int _add2(int src1, int src2) { + short s1[2], s2[2], r[2]; + int result; + *((int*)s1) = src1; + *((int*)s2) = src2; + r[0] = s1[0] + s2[0]; + r[1] = s1[1] + s2[1]; + result = *(int*)r; + return result; +} + +static inline int _add4(int src1, int src2) { + char c1[4], c2[4], r[4]; + int result; + *((int*)c1) = src1; + *((int*)c2) = src2; + r[0] = c1[0] + c2[0]; + r[1] = c1[1] + c2[1]; + r[2] = c1[2] + c2[2]; + r[3] = c1[3] + c2[3]; + result = *(int*)r; + return result; +} + + + +static inline long long _addsub(unsigned int src1, unsigned int src2) +{ + + int res_lo; + int res_hi; + + res_hi = src1+src2; + res_lo = src1-src2; + return (((unsigned long long) res_hi) << 32) | ((unsigned int) res_lo) ; +} + + +static inline long long _addsub2(unsigned int src1, unsigned int src2) +{ + short s1[2], s2[2], ra[2], rs[2]; + int res_lo; + int res_hi; + + *((int*)s1) = src1; + *((int*)s2) = src2; + ra[0] = s1[0] + s2[0]; + ra[1] = s1[1] + s2[1]; + rs[0] = s1[0] - s2[0]; + rs[1] = s1[1] - s2[1]; + + res_hi = *(int*)ra; + res_lo = *(int*)rs; + return (((unsigned long long) res_hi) << 32) | ((unsigned int) res_lo) ; +} + + +static inline int _avg2(int src1, int src2) { + int low = (((int)1 + (short) src1 + (short) src2) >> 1) & 0XFFFF; + int high1 = src1 >> 16; + int high2 = src2 >> 16; + int high = ((high1 + high2 + 1) >> 1)<< 16; + return high | low; +} + + + +static inline unsigned int _avgu4(unsigned int src1, unsigned int src2) { +unsigned int res0 = ((src1 & 0xFF) + (src2 & 0xFF) + 1) >> 1; + unsigned int res1 = (((src1 & 0xFF00) >> 8) + ((src2 & 0xFF00) >> 8) + 1) >> 1; + unsigned int res2 = (((src1 & 0xFF0000) >> 16) + ((src2 & 0xFF0000) >> 16) + 1) >> 1; + unsigned int res3 = (((src1 & 0xFF000000) >> 24) + ((src2 & 0xFF000000) >> 24) + 1) >> 1; + return (res3 << 24) | (res2 << 16) | (res1 << 8) | res0; +} + + +static inline int TEN_popc (unsigned char b) +{ + int i, result = 0; + for (i = 0; i < 8; i++){ + if (b & 0x1) + result++; + b >>= 1; + } + return result; +} + +static inline unsigned int _bitc4(unsigned int src1) +{ + unsigned int res0 = TEN_popc(src1 & 0xFF); + unsigned int res1 = TEN_popc((src1 & 0xFF00) >> 8); + unsigned int res2 = TEN_popc((src1 & 0xFF0000) >> 16); + unsigned int res3 = TEN_popc((src1 & 0xFF000000) >> 24); + return (res3 << 24) | (res2 << 16) | (res1 << 8) | res0; +} + +static inline unsigned int _bitr(unsigned int src) { + int i; + unsigned r = 0; + for (i = 0; i< 32; ++i) { + r = r | (((src >> i) & 1)<<(31-i)); + } + return r; +} + + +static inline unsigned int _clr(unsigned int src2, int csta, int cstb) +{ + csta &= 0x1f; + cstb &= 0x1f; + if (csta > cstb) + return src2; + else { + unsigned int mask = (((1 << (cstb - csta)) << 1) - 1) << csta; + return src2 & (~mask); + } +} + +static inline unsigned int _clrr(unsigned int src2, int src1) +{ + unsigned int csta = (src1 >> 5) & 0x1f; + unsigned int cstb = src1 & 0x1f; + if (csta > cstb) + return src2; + else { + unsigned int mask = (((1 << (cstb - csta)) << 1) - 1) << csta; + return src2 & (~mask); + } +} + + + + +static inline int _cmpeq2(int src1, int src2) { + short s1[2], s2[2]; + int r0, r1; + int result; + *((int*)s1) = src1; + *((int*)s2) = src2; + r0 = s1[0] == s2[0] ? 1 : 0; + r1 = s1[1] == s2[1] ? 1 : 0; + result = (r1 << 1) | r0; + return result; +} + +static inline int _cmpeq4(int src1, int src2) { + char s1[4], s2[4]; + int r0, r1, r2, r3; + int result; + *((int*)s1) = src1; + *((int*)s2) = src2; + r0 = s1[0] == s2[0] ? 1 : 0; + r1 = s1[1] == s2[1] ? 1 : 0; + r2 = s1[2] == s2[2] ? 1 : 0; + r3 = s1[3] == s2[3] ? 1 : 0; + result = (r3 << 3) | (r2 << 2) | (r1 << 1) | r0; + return result; +} + + +static inline int _cmpgt2(int src1, int src2) { + short s1[2], s2[2]; + int r1, r0; + int result; + *((int*)s1) = src1; + *((int*)s2) = src2; + r0 = s1[0] > s2[0] ? 1 : 0; + r1 = s1[1] > s2[1] ? 1 : 0; + result = (r1<<1) | r0; + return result; +} + + +static inline unsigned int _cmpgtu4(unsigned int src1, unsigned int src2) { + unsigned int s1_0 = (src1 & 0xFF); + unsigned int s1_1 = (src1 & 0xFF00) >> 8; + unsigned int s1_2 = (src1 & 0xFF0000) >> 16; + unsigned int s1_3 = (src1 & 0xFF000000) >> 24; + + unsigned int s2_0 = (src2 & 0xFF); + unsigned int s2_1 = (src2 & 0xFF00) >> 8; + unsigned int s2_2 = (src2 & 0xFF0000) >> 16; + unsigned int s2_3 = (src2 & 0xFF000000) >> 24; + + unsigned int result = 0; + + if (s1_0 > s2_0) + result |= 0x1; + + if (s1_1 > s2_1) + result |= 0x2; + + if (s1_2 > s2_2) + result |= 0x4; + + if (s1_3 > s2_3) + result |= 0x8; + + return result; +} + + + + +static inline long long _ddotp4(unsigned int src1, unsigned int src2) { + unsigned int res0, res1; + short s1_0 = (src1 & 0xffff); + short s1_1 = (src1 & 0xfff0000) >> 16; + + unsigned short s2_0 = (src2 & 0xff); + unsigned short s2_1 = (src2 & 0xff00) >> 8; + unsigned short s2_2 = (src2 & 0xff0000) >> 16; + unsigned short s2_3 = (src2 & 0xff000000) >> 24; + + res0 = ((int)s1_0) * s2_0 + ((int)s1_1) * s2_1; + res1 = ((int)s1_0) * s2_2 + ((int)s1_1) * s2_3; + + return (res1 << 16) | res0; +} + + +static inline long long _ddotph2(long long src1_o_src1_e, unsigned int src2) +{ + + unsigned int src1_o = src1_o_src1_e >> 32; + unsigned int src1_e = src1_o_src1_e & 0xFFFFFFFF; + short ls1_o = src1_o & 0XFFFF; + short hs1_o = src1_o >> 16; +// short ls1_e = src1_e & 0XFFFF; + short hs1_e = src1_e >> 16; + short ls2 = src2 & 0XFFFF; + short hs2 = src2 >> 16; + + unsigned long long res_hi = ls2 * ls1_o + hs2 * hs1_o; + unsigned int res_lo = ls1_o * hs2 + hs1_e * ls2; + return (res_hi << 32) | res_lo; +} + + +static inline long long _ddotpl2(long long src1_o_src1_e, unsigned int src2) +{ + unsigned int src1_o = src1_o_src1_e >> 32; + unsigned int src1_e = src1_o_src1_e & 0xFFFFFFFF; + short ls1_o = src1_o & 0XFFFF; +// short hs1_o = src1_o >> 16; + short ls1_e = src1_e & 0XFFFF; + short hs1_e = src1_e >> 16; + short ls2 = src2 & 0XFFFF; + short hs2 = src2 >> 16; + + unsigned long long res_hi = ls2 * hs1_e + hs2 * ls1_o; + unsigned res_lo = hs1_e * hs2 + ls1_e * ls2; + return (res_hi << 32) | res_lo; +} + + +static inline unsigned int _deal(unsigned int src) +{ + int i; + unsigned short lo = 0, hi = 0; + for (i = 0; i < 32; i+= 2) { + lo >>= 1; + lo |= (src & 0x1) << 15; + src >>= 1; + hi >>= 1; + hi |= (src & 0x1) << 15; + src >>= 1; + } + return (hi << 16) | lo; +} + + +static inline long long _dmv(unsigned int src1, unsigned int src2) +{ + return (((long long) src1) << 32) | src2; +} + + +static inline int _dotpn2(int src1, int src2) { +short int s1_h = src1>>16; + short int s1_l = src1; + short int s2_h = src2>>16; + short int s2_l = src2; + return s1_h * s2_h - s1_l * s2_l; +} + + +static inline int _dotp2(int src1, int src2) { + short int s1_h = src1>>16; + short int s1_l = src1; + short int s2_h = src2>>16; + short int s2_l = src2; + return s1_h * s2_h + s1_l * s2_l; +} + + + +static inline int _dotpnrsu2(int src1, unsigned int src2) +{ + short ls1 = src1 & 0XFFFF; + unsigned short ls2 = src2 & 0XFFFF; + short hs1 = src1 >> 16; + unsigned short hs2 = src2 >> 16; + + int result = (((long long) (int)(hs1 * hs2)) - ((long long) (int)(ls1 * ls2)) + (1 << 15)) >> 16; + return result; +} + + + +static inline int _dotprsu2(int src1, unsigned int src2) { + short ls1 = src1 & 0XFFFF; + unsigned short ls2 = (src2 & 0XFFFF); + short hs1 = src1 >> 16; + unsigned short hs2 = (src2 >> 16); + + int result = (((long long) (int) (ls1 * ls2)) + ((long long) (int) (hs1 * hs2)) + (1LL << 15)) >> 16; + return result; +} + + + + + + + +static inline int _dotpsu4(int src1, unsigned int src2) { + int result; + signed char s1_0 = (src1 & 0xff); + signed char s1_1 = (src1 & 0xff00) >> 8; + signed char s1_2 = (src1 & 0xff0000) >> 16; + signed char s1_3 = (src1 & 0xff000000) >> 24; + + unsigned int s2_0 = (src2 & 0xff); + unsigned int s2_1 = (src2 & 0xff00) >> 8; + unsigned int s2_2 = (src2 & 0xff0000) >> 16; + unsigned int s2_3 = (src2 & 0xff000000) >> 24; + + result = s1_0 * s2_0 + s1_1 * s2_1 + s1_2 * s2_2 + s1_3 * s2_3; + return result; +} + + +static inline unsigned int _dotpu4(unsigned int src1, unsigned int src2) { + unsigned char v1_0 = src1 & 0xff; + unsigned char v1_1 = (src1>>8) & 0xff; + unsigned char v1_2 = (src1>>16) & 0xff; + unsigned char v1_3 = (src1>>24) & 0xff; + + unsigned char v2_0 = src2 & 0xff; + unsigned char v2_1 = (src2>>8) & 0xff; + unsigned char v2_2 = (src2>>16) & 0xff; + unsigned char v2_3 = (src2>>24) & 0xff; + + unsigned v = v1_0 * v2_0 + v1_1 * v2_1 + v1_2 * v2_2 + v1_3 * v2_3; + return v; +} + + +static inline long long _dpack2(unsigned int src1, unsigned int src2){ +unsigned short s1[2], s2[2]; +*((int*)s1) = src1; +*((int*)s2) = src2; +return ((unsigned long long) s1[1] << 48) | ((unsigned long long) s2[1] << 32) | ((unsigned long long) s1[0] << 16) | ((unsigned long long) s2[0]); +} + + +static inline long long _dpackx2(unsigned int src1, unsigned int src2){ +unsigned short s1[2], s2[2]; +*((int*)s1) = src1; +*((int*)s2) = src2; +return ((unsigned long long) s2[0] << 48) | ((unsigned long long) s1[1] << 32) | ((unsigned long long) s1[0] << 16) | ((unsigned long long) s2[1]); +} + +static inline int _ext(int src2, unsigned int csta, unsigned int cstb) +{ + return (src2 << csta) >> cstb; +} + +static inline int _extr(int src2, int src1) +{ + unsigned int csta = (src1 >> 5) & 0x1f; + unsigned int cstb = src1 & 0x1f; + return (src2 << csta) >> cstb; +} + +static inline unsigned int _extu(unsigned int src2, unsigned int csta, unsigned int cstb) +{ + return (src2 << csta) >> cstb; +} + +static inline unsigned int _extur(unsigned int src2, int src1) +{ + unsigned int csta = (src1 >> 5) & 0x1f; + unsigned int cstb = src1 & 0x1f; + return (src2 << csta) >> cstb; +} + + +static inline unsigned long long _hi(double src) { + unsigned long long v; + *(double*)&v = src; + return v>>32; +} + +static inline unsigned int _hill (long long src) +{ + return (unsigned int) (src >> 32); +} + + + +static inline double _itod(unsigned hi, unsigned lo) { + double v; + unsigned long long ll = ((((unsigned long long)(hi))<<32) | (unsigned long long)((unsigned)lo)); + *((unsigned long long *)&v) = ll; + return v; +} + + +static inline long long _itoll(unsigned int src2, unsigned int src1) +{ + return (((long long) src2) << 32) | src1; +} + + +static inline C6X_COMPAT_LONG40 _labs(C6X_COMPAT_LONG40 src2) +{ + long long maxv = (1LL << (40 -1)) - 1; + long long minv = (-1LL << (40 - 1)); + C6X_COMPAT_LONG40 lres = orig_L40_set(src2); + + lres = lres < 0 ? -lres : lres; + if (lres > maxv) lres = maxv; + else if (lres < minv) lres = minv; + + return lres; +} + + +static inline C6X_COMPAT_LONG40 _ldotp2(int src1, int src2) { +return (C6X_COMPAT_LONG40) _dotp2(src1, src2); +} + + +static inline unsigned int _lmbd(unsigned int src1, unsigned int src2) +{ + return norm_shift_amt_U_and_non_U(0,(((int) (src1 << 31)) >> 31) ^ (~src2)); +} + + +static inline unsigned int _lnorm(C6X_COMPAT_LONG40 src2) { +if (src2 == 0) + return 39; + else { + int hi = (int)(src2 >> 32); + int lo = (int)src2; + + + long long temp = (unsigned long long)(unsigned)lo | (unsigned long long)hi << 32; + temp = orig_L40_set(temp); + + if (temp == 0) return 0; + int cnt = 0; + while (((temp >> 39) & 1) == ((temp >> 38) & 1)) { + temp <<= 1; + cnt++; + } + return cnt; + } +} + + +static inline unsigned long long _lo(double src) { + unsigned long long v; + *(double*)&v = src; + return v; +} + + +static inline unsigned int _loll (long long src) +{ + return (unsigned int) src; +} + + +static inline C6X_COMPAT_LONG40 _lsadd(int src1, C6X_COMPAT_LONG40 src2) +{ + long long maxv = (1LL << (40 -1)) - 1; + long long minv = (-1LL << (40 - 1)); + int hi = (int)(src2 >> 32); + int lo = (int)src2; + long long src2_int = (unsigned long long)(unsigned)lo | (unsigned long long)hi << 32; + + + long long src2_int2 = orig_L40_set(src2_int); + + long long res = src1 + src2_int2; + + if (res > maxv) { + res = maxv; + _overflow = 1; + } + else if (res < minv) { + res = minv; + _overflow = 1; + } + + long long res2 = orig_L40_set(res); + + res2 = (signed char)(res2 >> 32); + + C6X_COMPAT_LONG40 lres = (((C6X_COMPAT_LONG40) res2) << 32) | ((unsigned int)res); + return lres; +} + + + +static inline int _max2 (int src1, int src2) { + short s1[2], s2[2], r[2]; + int result; + *((int*)s1) = src1; + *((int*)s2) = src2; + r[0] = s1[0] > s2[0] ? s1[0] : s2[0]; + r[1] = s1[1] > s2[1] ? s1[1] : s2[1]; + result = *(int*)r; + return result; +} + + + + + + +static inline unsigned int _maxu4(unsigned int src1, unsigned int src2) { + unsigned int res0, res1, res2, res3; + unsigned int s1_0 = res0 = (src1 & 0xFF); + unsigned int s1_1 = res1 = (src1 & 0xFF00) >> 8; + unsigned int s1_2 = res2 = (src1 & 0xFF0000) >> 16; + unsigned int s1_3 = res3 = (src1 & 0xFF000000) >> 24; + + unsigned int s2_0 = (src2 & 0xFF); + unsigned int s2_1 = (src2 & 0xFF00) >> 8; + unsigned int s2_2 = (src2 & 0xFF0000) >> 16; + unsigned int s2_3 = (src2 & 0xFF000000) >> 24; + +// unsigned int res = 0; + + if (s1_0 < s2_0) + res0 = s2_0; + + if (s1_1 < s2_1) + res1 = s2_1; + + if (s1_2 < s2_2) + res2 = s2_2; + + if (s1_3 < s2_3) + res3 = s2_3; + + return (res3 << 24) | (res2 << 16) | (res1 << 8) | res0; + + +} + +static inline int _min2(int src1, int src2) { + short s1[2], s2[2], r[2]; + int result; + *((int*)s1) = src1; + *((int*)s2) = src2; + r[0] = s1[0] < s2[0] ? s1[0] : s2[0]; + r[1] = s1[1] < s2[1] ? s1[1] : s2[1]; + result = *(int*)r; + return result; +} + + +static inline unsigned int _minu4(unsigned int src1, unsigned int src2) { +unsigned int res0, res1, res2, res3; + unsigned int s1_0 = res0 = (src1 & 0xFF); + unsigned int s1_1 = res1 = (src1 & 0xFF00) >> 8; + unsigned int s1_2 = res2 = (src1 & 0xFF0000) >> 16; + unsigned int s1_3 = res3 = (src1 & 0xFF000000) >> 24; + + unsigned int s2_0 = (src2 & 0xFF); + unsigned int s2_1 = (src2 & 0xFF00) >> 8; + unsigned int s2_2 = (src2 & 0xFF0000) >> 16; + unsigned int s2_3 = (src2 & 0xFF000000) >> 24; + +// unsigned int res = 0; + + if (s1_0 > s2_0) + res0 = s2_0; + + if (s1_1 > s2_1) + res1 = s2_1; + + if (s1_2 > s2_2) + res2 = s2_2; + + if (s1_3 > s2_3) + res3 = s2_3; + + return (res3 << 24) | (res2 << 16) | (res1 << 8) | res0; +} + + +static inline int _mpy(int src1, int src2) { +return (short) src1 * (short) src2; +} + + +static inline int _mpyh(int src1, int src2) { +return (short) (src1 >> 16) * (short) (src2 >> 16); +} + + +static inline long long _mpyhill (int src1, int src2) +{ + short s1 = src1 >> 16; + return ((long long) src2) * s1; +} + +static inline int _mpyhir(int src1, int src2) +{ + short s1 = src1 >> 16; + long long result = ((long long) src2) * s1 + (1 << 14); + result >>= 15; + return result; +} + + +static inline int _mpyhl(int src1, int src2) { +return (short) (src1 >> 16) * (short) (src2); +} + +static inline unsigned int _mpyhlu(unsigned int src1, unsigned int src2) { +return (unsigned short) (src1 >> 16) * (unsigned short) (src2); +} + +static inline int _mpyhslu(int src1, unsigned int src2) { +return (short) (src1 >> 16) * (unsigned short) src2; +} + + +static inline int _mpyhsu(int src1, unsigned int src2) { +return (short) (src1 >>16) * (unsigned short) (src2 >>16); +} + + +static inline unsigned int _mpyhu(unsigned int src1, unsigned int src2) { +return (unsigned short) (src1 >>16) * (unsigned short) (src2 >> 16); +} + + +static inline int _mpyhuls(unsigned int src1, int src2) { +return (unsigned short) (src1 >>16) * (signed short) (src2); +} + + +static inline int _mpyhus(unsigned int src1, int src2) { +return (unsigned short) (src1 >> 16) * (short) (src2 >>16); +} + + + +static inline long long _mpyidll (int src1, int src2) +{ + return (long long) src1 * src2; +} + + +static inline int _mpylh(int src1, int src2) { +return (signed short) (src1 & 0xffff) * (signed short) (src2 >> 16); +} + +static inline unsigned int _mpylhu(unsigned int src1, unsigned int src2) { +return (unsigned short) src1 * (unsigned short) (src2 >> 16); +} + + +static inline long long _mpylill (int src1, int src2) +{ + return ((long long) src2) * ((short)src1); +} + + + +static inline int _mpylir(int src1, int src2) +{ + short s1 = src1; + long long result = ((long long) src2) * s1 + (1 << 14); + result >>= 15; + return result; +} + + +static inline int _mpylshu(int src1, unsigned int src2) { +return (short) src1 * (unsigned short) (src2 >> 16); +} + + +static inline int _mpyluhs(unsigned int src1, int src2) { +return (unsigned short) src1 * (short) (src2 >> 16); +} + + + +static inline int _mpysu(int src1, unsigned int src2) { +return (short) src1 * (unsigned short) src2; +} + + + +static inline long long _mpysu4ll (int src1, unsigned int src2) { + unsigned short res0, res1, res2, res3; + signed char s1_0 = (src1 & 0xff); + signed char s1_1 = (src1 & 0xff00) >> 8; + signed char s1_2 = (src1 & 0xff0000) >> 16; + signed char s1_3 = (src1 & 0xff000000) >> 24; + + unsigned short s2_0 = (src2 & 0xff); + unsigned short s2_1 = (src2 & 0xff00) >> 8; + unsigned short s2_2 = (src2 & 0xff0000) >> 16; + unsigned short s2_3 = (src2 & 0xff000000) >> 24; + + res0 = s1_0 * s2_0; + res1 = s1_1 * s2_1; + res2 = s1_2 * s2_2; + res3 = s1_3 * s2_3; + + return (((unsigned long long) res3) << 48) + | (((unsigned long long) res2) << 32) + | (((unsigned long long) res1) << 16) + | res0; +} + +static inline unsigned int _mpyu(unsigned int src1, unsigned int src2) { + unsigned v = (unsigned short)src1 * (unsigned short)src2; + return v; +} + +static inline int _mpyus(unsigned int src1, int src2) { +return (unsigned short) src1 * (short) src2; +} + +static inline long long _mpyu4ll (unsigned int src1, unsigned int src2) { + unsigned short res0, res1, res2, res3; + unsigned char s1_0 = (src1 & 0xff); + unsigned char s1_1 = (src1 & 0xff00) >> 8; + unsigned char s1_2 = (src1 & 0xff0000) >> 16; + unsigned char s1_3 = (src1 & 0xff000000) >> 24; + + unsigned short s2_0 = (src2 & 0xff); + unsigned short s2_1 = (src2 & 0xff00) >> 8; + unsigned short s2_2 = (src2 & 0xff0000) >> 16; + unsigned short s2_3 = (src2 & 0xff000000) >> 24; + + res0 = s1_0 * s2_0; + res1 = s1_1 * s2_1; + res2 = s1_2 * s2_2; + res3 = s1_3 * s2_3; + + return (((unsigned long long) res3) << 48) + | (((unsigned long long) res2) << 32) + | (((unsigned long long) res1) << 16) + | res0; +} + + +static inline long long _mpy2ir(unsigned int src1, unsigned int src2) +{ + if ((src1 == 0x8000) && (src2 == 0x80000000)) { + _overflow = 1; + return 0; + } + else { + short ls1 = src1 & 0xffff; + short hs1 = src1 >> 16; + unsigned long long hi = (((long long) hs1) * (int) src2 + (1 << 14)) >> 15; + unsigned long long lo = ((((long long) ls1) * (int) src2 + (1 << 14)) >> 15) & 0xFFFFFFFF; + return (hi << 32) | lo; + } +} + + +static inline long long _mpy2ll (int src1, int src2) { + short ls1 = src1 & 0xffff; + short hs1 = src1 >> 16; + short ls2 = src2 & 0xffff; + short hs2 = src2 >> 16; + + unsigned long long hi = hs1 * hs2; + unsigned long long lo = (ls1 * ls2) & 0xFFFFFFFF; + + return (hi << 32) | lo; + +} + + +static inline int _mpy32(int src1, int src2) +{ + return src1 * src2; +} + + +static inline long long _mpy32ll(int src1, int src2) +{ + return ((long long) src1) * src2; +} + +static inline long long _mpy32su(int src1, unsigned int src2) +{ + return ((long long) src1) * ((int) src2); +} + +static inline long long _mpy32u(unsigned int src1, unsigned int src2) +{ + return ((long long) ((int) src1)) * ((long long) ((int) src2)); +} + +static inline long long _mpy32us(unsigned int src1, int src2) +{ + return ((int) src1) * ((long long) src2); +} + +static inline int _mvd (int src2) +{ + return src2; +} + + +static inline unsigned int _norm(int src2) +{ + return norm_shift_amt_U_and_non_U(1,src2); +} + + +static inline unsigned int _pack2 (unsigned int src1, unsigned int src2) { + short s1[2], s2[2], r[2]; + int result; + *((int*)s1) = src1; + *((int*)s2) = src2; + r[0] = s2[0]; + r[1] = s1[0]; + result = *(int*)r; + return result; +} + + +static inline int _packh2 (unsigned int src1, unsigned int src2) { + unsigned v0 = src1 & 0xffff0000; + unsigned v1 = src2 >> 16; + unsigned v = v0|v1; + return v; + +} + +static inline unsigned int _packh4 (unsigned int src1, unsigned int src2) { + unsigned v3 = (src1 >> 24) & 0xff; + unsigned v2 = (src1 >> 8) & 0xff; + unsigned v1 = (src2 >> 24) & 0xff; + unsigned v0 = (src2 >> 8) & 0xff; + unsigned v = (v3<<24) | (v2<<16) | (v1 << 8) | v0; + return v; +} + +static inline unsigned int _packhl2 (unsigned int src1, unsigned int src2) { + unsigned v0 = src1 & 0xffff0000; + unsigned v1 = src2 & 0x0000ffff; + unsigned v = v0|v1; + return v; +} + +static inline unsigned int _packlh2 (unsigned int src1, unsigned int src2) { + unsigned v0 = src1 << 16; + unsigned v1 = (src2 >> 16) & 0xffff; + unsigned v = v0|v1; + return v; +} + + + + +static inline unsigned int _packl4 (unsigned int src1, unsigned int src2) { + unsigned v3 = (src1 >> 16) & 0xff; + unsigned v2 = (src1) & 0xff; + unsigned v1 = (src2 >> 16) & 0xff; + unsigned v0 = (src2) & 0xff; + unsigned v = (v3<<24) | (v2<<16) | (v1 << 8) | v0; + return v; +} + + + + +static inline unsigned int _rpack2 (unsigned int src1, unsigned int src2) { +int s1 = (int) src1; +int s2 = (int) src2; +s1 = util_shift_right_saturate_n (s1, -1, 32); +s2 = util_shift_right_saturate_n (s2, -1, 32); +return (unsigned int) (s1 & 0xffff0000) | (unsigned int) ((s2 & 0xffff0000) >>16); +} + + +static inline unsigned int _rotl (unsigned int src1, unsigned int src2) +{ + src2 &= 0x1f; + return (src1 << src2) | (src1 >> (32 - src2)); +} + + +static inline int _sadd(int src1, int src2) { +signed long long res; +signed long long maxv, minv; +maxv = (1LL << (32-1)) - 1; +minv = (-1LL << (32-1)); +res = (long long) src1 + (long long) src2; +if (res > maxv) { + res = maxv; + _overflow = 1; + } +else if (res < minv ) { + res = minv; + _overflow = 1; + } +return (int) res; +} + +static inline long long _saddsub(unsigned int src1, unsigned int src2) { +int radd; +signed long long rsub; + +signed long long maxv, minv; +maxv = (1LL << (32-1)) - 1; +minv = (-1LL << (32-1)); + +radd = (int) src1 + (int) src2; + +// saturate on subtract, not add + + +rsub = (long long) ((int) src1) - (long long) ((int) src2); +if (rsub > maxv) { + rsub = maxv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +else if (rsub < minv ) { + rsub = minv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } + +return (((unsigned long long) radd) << 32) | ( rsub & 0x00000000ffffffff ) ; +} + + + +static inline long long _saddsub2(unsigned int src1, unsigned int src2) { +signed int radd[2]; +signed int rsub[2]; +signed short s1[2], s2[2]; + +signed int maxv, minv; +maxv = (1L << (16-1)) - 1; +minv = (-1L << (16-1)); + +*((int*)s1) = src1; +*((int*)s2) = src2; + +radd[0] = (int) s1[0] + (int) s2[0]; +radd[1] = (int) s1[1] + (int) s2[1]; + +rsub[0] = (int) s1[0] - (int) s2[0]; +rsub[1] = (int) s1[1] - (int) s2[1]; + +if (radd[0] > maxv) { + radd[0] = maxv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +else if (radd[0] < minv ) { + radd[0] = minv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } + +if (radd[1] > maxv) { + radd[1] = maxv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +else if (radd[1] < minv ) { + radd[1] = minv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } + + +if (rsub[0] > maxv) { + rsub[0] = maxv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +else if (rsub[0] < minv ) { + rsub[0] = minv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } + +if (rsub[1] > maxv) { + rsub[1] = maxv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +else if (rsub[1] < minv ) { + rsub[1] = minv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } + + +return ((((unsigned long long) radd[1]) & 0x000000000000ffff) << 48) | + ((((unsigned long long) radd[0]) & 0x000000000000ffff) << 32) | + ((((unsigned long long) rsub[1]) & 0x000000000000ffff) << 16) | + ((((unsigned long long) rsub[0]) & 0x000000000000ffff)); +} + + + +static inline int _sadd2(int src1, int src2) { +signed short s1[2], s2[2]; +signed int r[2], maxv, minv; + +maxv = (1L << (16-1)) - 1; +minv = (-1L << (16-1)); + + +*((int*)s1) = src1; +*((int*)s2) = src2; + +r[0] = (int) s1[0] + (int) s2[0]; +r[1] = (int) s1[1] + (int) s2[1]; + +if (r[0] > maxv) { + r[0] = maxv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +else if (r[0] < minv ) { + r[0] = minv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +if (r[1] > maxv) { + r[1] = maxv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +else if (r[1] < minv ) { + r[1] = minv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } + +return ((r[1] & 0xffff) << 16 ) | (r[0] & 0xffff) ; +} + + +static inline int _saddus2(unsigned int src1, int src2) { +int res0, res1; + unsigned int s1_0 = (src1 & 0xffff); + unsigned int s1_1 = (src1 & 0xffff0000) >> 16; + + short s2_0 = (src2 & 0xffff); + short s2_1 = (src2 & 0xffff0000) >> 16; + + res0 = s1_0 + s2_0; + res1 = s1_1 + s2_1; + + if (res0 >= 0x10000) + res0 = 0xffff; + else if (res0 < 0) + res0 = 0; + + if (res1 >= 0x10000) + res1 = 0xffff; + else if (res1 < 0) + res1 = 0; + + return (res1 << 16) | res0; +} + + +static inline unsigned int _saddu4(unsigned int src1, unsigned int src2) { +unsigned int res0, res1, res2, res3; + unsigned int s1_0 = (src1 & 0xff); + unsigned int s1_1 = (src1 & 0xff00) >> 8; + unsigned int s1_2 = (src1 & 0xff0000) >> 16; + unsigned int s1_3 = (src1 & 0xff000000) >> 24; + + unsigned int s2_0 = (src2 & 0xff); + unsigned int s2_1 = (src2 & 0xff00) >> 8; + unsigned int s2_2 = (src2 & 0xff0000) >> 16; + unsigned int s2_3 = (src2 & 0xff000000) >> 24; + + res0 = s1_0 + s2_0; + res1 = s1_1 + s2_1; + res2 = s1_2 + s2_2; + res3 = s1_3 + s2_3; + + if (res0 >= 0x100) + res0 = 0xff; + + if (res1 >= 0x100) + res1 = 0xff; + + if (res2 >= 0x100) + res2 = 0xff; + + if (res3 >= 0x100) + res3 = 0xff; + + return (res3 << 24) | (res2 << 16) | (res1 << 8) | res0; + +} + + + +static inline int _sat(C6X_COMPAT_LONG40 src2) +{ + long long maxv = (1LL << (32-1)) - 1; + long long minv = (-1LL << (32-1)); + + int hi = (int)(src2 >> 32); + int lo = (int)src2; + long long temp = (unsigned long long)(unsigned)lo | (unsigned long long)hi << 32; + temp = orig_L40_set(temp); + + if (temp > maxv) { + temp = maxv; + _overflow = 1; + } + else if (temp < minv) { + temp = minv; + _overflow = 1; + } + return (int) temp; +} + +static inline unsigned int _set(unsigned int src2, unsigned int csta, unsigned int cstb) +{ + csta &= 0x1f; + cstb &= 0x1f; + if (csta > cstb) + return src2; + else { + unsigned int mask = (((1 << (cstb - csta)) << 1) - 1) << csta; + return src2 | mask; + } +} + +static inline unsigned int _setr(unsigned int src2, int src1) +{ + unsigned int csta = (src1 >> 5) & 0x1f; + unsigned int cstb = src1 & 0x1f; + if (csta > cstb) + return src2; + else { + unsigned int mask = (((1 << (cstb - csta)) << 1) - 1) << csta; + return src2 | mask; + } +} + + +static inline unsigned int _shfl (unsigned int src2) +{ + unsigned short lo = src2; + unsigned short hi = src2 >> 16; + unsigned int result = 0; + int i; + for (i = 0; i < 32; i+= 2) { + result >>= 1; + result |= (lo & 0x1) << 31; + lo >>= 1; + result >>= 1; + result |= (hi & 0x1) << 31; + hi >>= 1; + } + return result; +} + +static inline long long _shfl3 (unsigned int src1, unsigned int src2) +{ + unsigned short lo = src2; + unsigned short hi = src1 >> 16; + unsigned short mid = src1; + unsigned long long result = 0; + int i; + for (i = 0; i < 32; i+= 2) { + result >>= 1; + result |= ((unsigned long long) (lo & 0x1)) << 47; + lo >>= 1; + result >>= 1; + result |= ((unsigned long long) (mid & 0x1)) << 47; + mid >>= 1; + result >>= 1; + result |= ((unsigned long long) (hi & 0x1)) << 47; + hi >>= 1; + } + return result; +} + + + +static inline unsigned int _shlmb (unsigned int src1, unsigned int src2) +{ + return (src2 << 8) | (src1 >> 24); +} + +static inline unsigned int _shrmb (unsigned int src1, unsigned int src2) +{ + return (src2 >> 8) | (src1 << 24); +} + + +static inline unsigned int _shru2 (unsigned int src1, unsigned int src2) { +unsigned short hs1 = src1 >> 16; + unsigned short ls1 = src1 & 0xFFFF; + hs1 >>= src2; + ls1 >>= src2; + return (hs1 << 16) | ls1; +} + + +static inline int _shr2 (int src1, unsigned int src2) { + short s1[2], result[2]; + *((int*)s1) = src1; + src2 = src2 & 31; + result[0] = (int)s1[0] >> src2; + result[1] = (int)s1[1] >> src2; + + return *(int*)result; +} + + +static inline int _smpy (int src1, int src2) { +unsigned long long result; +result = (((short) src1 * (short) src2) << 1); + +if ((result & 0xffffffff) == 0x80000000){ + result = 0x7fffffff; + _overflow = 1; + } +return (int) (result); +} + +static inline int _smpyh (int src1, int src2) { +unsigned long long result; +result = ((short) (src1 >> 16) * (short) (src2 >> 16)) << 1; +if ((result & 0xffffffff) == 0x80000000){ + result = 0x7fffffff; + _overflow = 1; + } +return (int) (result); +} + +static inline int _smpyhl (int src1, int src2) { +unsigned long long result; +result = ((short) (src1 >> 16) * (short) (src2)) << 1; +if ((result & 0xffffffff) == 0x80000000){ + result = 0x7fffffff; + _overflow = 1; + } +return (int) (result); +} + +static inline int _smpylh (int src1, int src2) { +unsigned long long result; +result = ((short) (src1) * (short) (src2 >> 16)) << 1; +if ((result & 0xffffffff) == 0x80000000){ + result = 0x7fffffff; + _overflow = 1; + } +return (int) (result); +} + +static inline long long _smpy2ll (int src1, int src2) { + short ls1 = src1 & 0XFFFF; + short hs1 = src1 >> 16; + short ls2 = src2 & 0XFFFF; + short hs2 = src2 >> 16; + + unsigned long long hi = (hs1 * hs2) << 1; + unsigned long long lo = ((ls1 * ls2) << 1) & 0xFFFFFFFF; + if ((hi & 0xffffffff) == 0x80000000){ + hi = 0x7fffffff; + _overflow = 1; + } + + if ((lo & 0xffffffff) == 0x80000000){ + lo = 0x7fffffff; + _overflow = 1; + } + + return (hi << 32) | lo; +} + + + + +static inline int _smpy32(int src1, int src2) +{ + long long res = (long long) src1 * src2; + res <<= 1; + res >>= 32; + return res; +} + +static inline unsigned char TEN_satu8 (short src) +{ + if (src > 0xff) + return 0xff; + else if (src < 0) + return 0; + else + return src; +} + +static inline int _spack2 (int src1, int src2) { +short s1 = (short) util_saturate_n_no_state(src1,16); +short s2 = (short) util_saturate_n_no_state(src2,16); +return ( (unsigned int) s1 << 16) | (((int) s2) & 0xFFFF); +} + + +static inline unsigned int _spacku4 (int src1, int src2) { + short lolo = src2; + short lohi = src2 >> 16; + short hilo = src1; + short hihi = src1 >> 16; + + lolo = TEN_satu8(lolo); + lohi = TEN_satu8(lohi); + hilo = TEN_satu8(hilo); + hihi = TEN_satu8(hihi); + + return (((unsigned int) hihi) << 24) | (((unsigned int) hilo) << 16) | (lohi << 8) | lolo; +} + + + +static inline int _sshl (int src1, unsigned int src2) { +short local2 = (short)(src2 & 0x7FFF); +return (int) util_shift_right_saturate_n(src1, -local2, 32); +} + + + + +static inline int _sshvl (int src2, int src1) { + short s1; + if (src1 > 31) + s1 = 31; + else if (src1 < -31) + s1 = -31; + else + s1 = src1; + + return (int) util_shift_right_saturate_n(src2, -s1, 32); +} + + + + + +static inline int _sshvr (int src2, int src1) { +short s1; + if (src1 > 31) + s1 = 31; + else if (src1 < -31) + s1 = -31; + else + s1 = src1; + return (int) util_shift_right_saturate_n(src2, s1, 32); +} + + + + +static inline int _ssub(int src1, int src2) { +signed long long res; +signed long long maxv, minv; +maxv = (1LL << (32-1)) - 1; +minv = (-1LL << (32-1)); +res = (long long) src1 - (long long) src2; +if (res > maxv) { + res = maxv; + _overflow = 1; + } +else if (res < minv ) { + res = minv; + _overflow = 1; + } +return (int) res; +} + +static inline int _ssub2(int src1, int src2) { +signed short s1[2], s2[2]; +signed int r[2], maxv, minv; + +maxv = (1L << (16-1)) - 1; +minv = (-1L << (16-1)); + + +*((int*)s1) = src1; +*((int*)s2) = src2; + +r[0] = (int) s1[0] - (int) s2[0]; +r[1] = (int) s1[1] - (int) s2[1]; + +if (r[0] > maxv) { + r[0] = maxv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +else if (r[0] < minv ) { + r[0] = minv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +if (r[1] > maxv) { + r[1] = maxv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } +else if (r[1] < minv ) { + r[1] = minv; + /* NOTE: TI c6x does NOT set the overflow register even if results saturate */ + /* _overflow = 1; */ + } + +return ((r[1] & 0xffff) << 16 ) | (r[0] & 0xffff) ; +} + + +static inline int _subabs4 (int src1, int src2) { + int res0, res1, res2, res3; + unsigned int s1_0 = (src1 & 0xff); + unsigned int s1_1 = (src1 & 0xff00) >> 8; + unsigned int s1_2 = (src1 & 0xff0000) >> 16; + unsigned int s1_3 = (src1 & 0xff000000) >> 24; + + unsigned int s2_0 = (src2 & 0xff); + unsigned int s2_1 = (src2 & 0xff00) >> 8; + unsigned int s2_2 = (src2 & 0xff0000) >> 16; + unsigned int s2_3 = (src2 & 0xff000000) >> 24; + + res0 = s1_0 - s2_0; + res1 = s1_1 - s2_1; + res2 = s1_2 - s2_2; + res3 = s1_3 - s2_3; + + if (res0 < 0) + res0 = -res0; + + if (res1 < 0) + res1 = -res1; + + if (res2 < 0) + res2 = -res2; + + if (res3 < 0) + res3 = -res3; + + return (res3 << 24) | (res2 << 16) | (res1 << 8) | res0; +} + + +static inline unsigned int _subc (unsigned int src1, unsigned int src2) +{ + if ( src1 >= src2) + return ((src1 - src2) << 1) + 1; + else + return src1 << 1; +} + + + +static inline int _sub2(int src1, int src2) { + short s1[2], s2[2], r[2]; + int result; + *((int*)s1) = src1; + *((int*)s2) = src2; + r[0] = s1[0] - s2[0]; + r[1] = s1[1] - s2[1]; + result = *(int*)r; + return result; +} + + +static inline int _sub4(int src1, int src2) { + char c1[4], c2[4], r[4]; + int result; + *((int*)c1) = src1; + *((int*)c2) = src2; + r[0] = c1[0] - c2[0]; + r[1] = c1[1] - c2[1]; + r[2] = c1[2] - c2[2]; + r[3] = c1[3] - c2[3]; + result = *(int*)r; + return result; +} + + +static inline int _swap4 (unsigned int src1) { + unsigned char v0 = src1; + unsigned char v1 = src1 >> 8; + unsigned char v2 = src1 >> 16; + unsigned char v3 = src1 >> 24; + unsigned v = v0<<8 | v1 | v2<<24 | v3<<16; + return v; +} + +static inline unsigned int _unpkhu4 (unsigned int src1) { + unsigned v0 = src1>>24; + unsigned v1 = (src1>>16) & 0xff; + return (v0<<16) | v1; +} + +static inline unsigned int _unpklu4 (unsigned int src1) { + unsigned v1 = (src1>>8) & 0xff; + unsigned v0 = (src1) & 0xff; + return (v1<<16) | v0; +} + + + + +static inline unsigned int _xpnd2 (unsigned int src1) { + int v0 = (src1 & 0x1) ? 0x0000ffff : 0x00000000; + int v1 = (src1 & 0x2) ? 0xffff0000 : 0x00000000; + return v0|v1; +} + +static inline unsigned int _xpnd4 (unsigned int src1) { + int v0 = (src1 & 0x1) ? 0x000000ff : 0x00000000; + int v1 = (src1 & 0x2) ? 0x0000ff00 : 0x00000000; + int v2 = (src1 & 0x4) ? 0x00ff0000 : 0x00000000; + int v3 = (src1 & 0x8) ? 0xff000000 : 0x00000000; + int r = v0|v1|v2|v3; + return r; +} + + + +// end of Implemented in alphabetical order + + +#endif /* __C6X_COMPAT__H */ diff --git a/tools/sdk/include/esp32/xtensa/cacheasm.h b/tools/sdk/include/esp32/xtensa/cacheasm.h new file mode 100755 index 00000000..225e01b3 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/cacheasm.h @@ -0,0 +1,962 @@ +/* + * xtensa/cacheasm.h -- assembler-specific cache related definitions + * that depend on CORE configuration + * + * This file is logically part of xtensa/coreasm.h , + * but is kept separate for modularity / compilation-performance. + */ + +/* + * Copyright (c) 2001-2014 Cadence Design Systems, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef XTENSA_CACHEASM_H +#define XTENSA_CACHEASM_H + +#include +#include +#include +#include + +/* + * This header file defines assembler macros of the form: + * cache_ + * where is 'i' or 'd' for instruction and data caches, + * and indicates the function of the macro. + * + * The following functions are defined, + * and apply only to the specified cache (I or D): + * + * reset + * Resets the cache. + * + * sync + * Makes sure any previous cache instructions have been completed; + * ie. makes sure any previous cache control operations + * have had full effect and been synchronized to memory. + * Eg. any invalidate completed [so as not to generate a hit], + * any writebacks or other pipelined writes written to memory, etc. + * + * invalidate_line (single cache line) + * invalidate_region (specified memory range) + * invalidate_all (entire cache) + * Invalidates all cache entries that cache + * data from the specified memory range. + * NOTE: locked entries are not invalidated. + * + * writeback_line (single cache line) + * writeback_region (specified memory range) + * writeback_all (entire cache) + * Writes back to memory all dirty cache entries + * that cache data from the specified memory range, + * and marks these entries as clean. + * NOTE: on some future implementations, this might + * also invalidate. + * NOTE: locked entries are written back, but never invalidated. + * NOTE: instruction caches never implement writeback. + * + * writeback_inv_line (single cache line) + * writeback_inv_region (specified memory range) + * writeback_inv_all (entire cache) + * Writes back to memory all dirty cache entries + * that cache data from the specified memory range, + * and invalidates these entries (including all clean + * cache entries that cache data from that range). + * NOTE: locked entries are written back but not invalidated. + * NOTE: instruction caches never implement writeback. + * + * lock_line (single cache line) + * lock_region (specified memory range) + * Prefetch and lock the specified memory range into cache. + * NOTE: if any part of the specified memory range cannot + * be locked, a Load/Store Error (for dcache) or Instruction + * Fetch Error (for icache) exception occurs. These macros don't + * do anything special (yet anyway) to handle this situation. + * + * unlock_line (single cache line) + * unlock_region (specified memory range) + * unlock_all (entire cache) + * Unlock cache entries that cache the specified memory range. + * Entries not already locked are unaffected. + * + * coherence_on + * coherence_off + * Turn off and on cache coherence + * + */ + + + +/*************************** GENERIC -- ALL CACHES ***************************/ + + +/* + * The following macros assume the following cache size/parameter limits + * in the current Xtensa core implementation: + * cache size: 1024 bytes minimum + * line size: 16 - 64 bytes + * way count: 1 - 4 + * + * Minimum entries per way (ie. per associativity) = 1024 / 64 / 4 = 4 + * Hence the assumption that each loop can execute four cache instructions. + * + * Correspondingly, the offset range of instructions is assumed able to cover + * four lines, ie. offsets {0,1,2,3} * line_size are assumed valid for + * both hit and indexed cache instructions. Ie. these offsets are all + * valid: 0, 16, 32, 48, 64, 96, 128, 192 (for line sizes 16, 32, 64). + * This is true of all original cache instructions + * (dhi, ihi, dhwb, dhwbi, dii, iii) which have offsets + * of 0 to 1020 in multiples of 4 (ie. 8 bits shifted by 2). + * This is also true of subsequent cache instructions + * (dhu, ihu, diu, iiu, diwb, diwbi, dpfl, ipfl) which have offsets + * of 0 to 240 in multiples of 16 (ie. 4 bits shifted by 4). + * + * (Maximum cache size, currently 32k, doesn't affect the following macros. + * Cache ways > MMU min page size cause aliasing but that's another matter.) + */ + + + +/* + * Macro to apply an 'indexed' cache instruction to the entire cache. + * + * Parameters: + * cainst instruction/ that takes an address register parameter + * and an offset parameter (in range 0 .. 3*linesize). + * size size of cache in bytes + * linesize size of cache line in bytes (always power-of-2) + * assoc_or1 number of associativities (ways/sets) in cache + * if all sets affected by cainst, + * or 1 if only one set (or not all sets) of the cache + * is affected by cainst (eg. DIWB or DIWBI [not yet ISA defined]). + * aa, ab unique address registers (temporaries). + * awb set to other than a0 if wb type of instruction + * loopokay 1 allows use of zero-overhead loops, 0 does not + * immrange range (max value) of cainst's immediate offset parameter, in bytes + * (NOTE: macro assumes immrange allows power-of-2 number of lines) + */ + + .macro cache_index_all cainst, size, linesize, assoc_or1, aa, ab, loopokay, maxofs, awb=a0 + + // Number of indices in cache (lines per way): + .set .Lindices, (\size / (\linesize * \assoc_or1)) + // Number of indices processed per loop iteration (max 4): + .set .Lperloop, .Lindices + .ifgt .Lperloop - 4 + .set .Lperloop, 4 + .endif + // Also limit instructions per loop if cache line size exceeds immediate range: + .set .Lmaxperloop, (\maxofs / \linesize) + 1 + .ifgt .Lperloop - .Lmaxperloop + .set .Lperloop, .Lmaxperloop + .endif + // Avoid addi of 128 which takes two instructions (addmi,addi): + .ifeq .Lperloop*\linesize - 128 + .ifgt .Lperloop - 1 + .set .Lperloop, .Lperloop / 2 + .endif + .endif + + // \size byte cache, \linesize byte lines, \assoc_or1 way(s) affected by each \cainst. + // XCHAL_ERRATUM_497 - don't execute using loop, to reduce the amount of added code + .ifne (\loopokay & XCHAL_HAVE_LOOPS && !XCHAL_ERRATUM_497) + + movi \aa, .Lindices / .Lperloop // number of loop iterations + // Possible improvement: need only loop if \aa > 1 ; + // however \aa == 1 is highly unlikely. + movi \ab, 0 // to iterate over cache + loop \aa, .Lend_cachex\@ + .set .Li, 0 ; .rept .Lperloop + \cainst \ab, .Li*\linesize + .set .Li, .Li+1 ; .endr + addi \ab, \ab, .Lperloop*\linesize // move to next line +.Lend_cachex\@: + + .else + + movi \aa, (\size / \assoc_or1) + // Possible improvement: need only loop if \aa > 1 ; + // however \aa == 1 is highly unlikely. + movi \ab, 0 // to iterate over cache + .ifne ((\awb !=a0) & XCHAL_ERRATUM_497) // don't use awb if set to a0 + movi \awb, 0 + .endif +.Lstart_cachex\@: + .set .Li, 0 ; .rept .Lperloop + \cainst \ab, .Li*\linesize + .set .Li, .Li+1 ; .endr + .ifne ((\awb !=a0) & XCHAL_ERRATUM_497) // do memw after 8 cainst wb instructions + addi \awb, \awb, .Lperloop + blti \awb, 8, .Lstart_memw\@ + memw + movi \awb, 0 +.Lstart_memw\@: + .endif + addi \ab, \ab, .Lperloop*\linesize // move to next line + bltu \ab, \aa, .Lstart_cachex\@ + .endif + + .endm + + +/* + * Macro to apply a 'hit' cache instruction to a memory region, + * ie. to any cache entries that cache a specified portion (region) of memory. + * Takes care of the unaligned cases, ie. may apply to one + * more cache line than $asize / lineSize if $aaddr is not aligned. + * + * + * Parameters are: + * cainst instruction/macro that takes an address register parameter + * and an offset parameter (currently always zero) + * and generates a cache instruction (eg. "dhi", "dhwb", "ihi", etc.) + * linesize_log2 log2(size of cache line in bytes) + * addr register containing start address of region (clobbered) + * asize register containing size of the region in bytes (clobbered) + * askew unique register used as temporary + * awb unique register used as temporary for erratum 497. + * + * Note: A possible optimization to this macro is to apply the operation + * to the entire cache if the region exceeds the size of the cache + * by some empirically determined amount or factor. Some experimentation + * is required to determine the appropriate factors, which also need + * to be tunable if required. + */ + + .macro cache_hit_region cainst, linesize_log2, addr, asize, askew, awb=a0 + + // Make \asize the number of iterations: + extui \askew, \addr, 0, \linesize_log2 // get unalignment amount of \addr + add \asize, \asize, \askew // ... and add it to \asize + addi \asize, \asize, (1 << \linesize_log2) - 1 // round up! + srli \asize, \asize, \linesize_log2 + + // Iterate over region: + .ifne ((\awb !=a0) & XCHAL_ERRATUM_497) // don't use awb if set to a0 + movi \awb, 0 + .endif + floopnez \asize, cacheh\@ + \cainst \addr, 0 + .ifne ((\awb !=a0) & XCHAL_ERRATUM_497) // do memw after 8 cainst wb instructions + addi \awb, \awb, 1 + blti \awb, 8, .Lstart_memw\@ + memw + movi \awb, 0 +.Lstart_memw\@: + .endif + addi \addr, \addr, (1 << \linesize_log2) // move to next line + floopend \asize, cacheh\@ + .endm + + + + + +/*************************** INSTRUCTION CACHE ***************************/ + + +/* + * Reset/initialize the instruction cache by simply invalidating it: + * (need to unlock first also, if cache locking implemented): + * + * Parameters: + * aa, ab unique address registers (temporaries) + */ + .macro icache_reset aa, ab, loopokay=0 + icache_unlock_all \aa, \ab, \loopokay + icache_invalidate_all \aa, \ab, \loopokay + .endm + + +/* + * Synchronize after an instruction cache operation, + * to be sure everything is in sync with memory as to be + * expected following any previous instruction cache control operations. + * + * Even if a config doesn't have caches, an isync is still needed + * when instructions in any memory are modified, whether by a loader + * or self-modifying code. Therefore, this macro always produces + * an isync, whether or not an icache is present. + * + * Parameters are: + * ar an address register (temporary) (currently unused, but may be used in future) + */ + .macro icache_sync ar + isync + .endm + + + +/* + * Invalidate a single line of the instruction cache. + * Parameters are: + * ar address register that contains (virtual) address to invalidate + * (may get clobbered in a future implementation, but not currently) + * offset (optional) offset to add to \ar to compute effective address to invalidate + * (note: some number of lsbits are ignored) + */ + .macro icache_invalidate_line ar, offset +#if XCHAL_ICACHE_SIZE > 0 + ihi \ar, \offset // invalidate icache line + icache_sync \ar +#endif + .endm + + + + +/* + * Invalidate instruction cache entries that cache a specified portion of memory. + * Parameters are: + * astart start address (register gets clobbered) + * asize size of the region in bytes (register gets clobbered) + * ac unique register used as temporary + */ + .macro icache_invalidate_region astart, asize, ac +#if XCHAL_ICACHE_SIZE > 0 + // Instruction cache region invalidation: + cache_hit_region ihi, XCHAL_ICACHE_LINEWIDTH, \astart, \asize, \ac + icache_sync \ac + // End of instruction cache region invalidation +#endif + .endm + + + +/* + * Invalidate entire instruction cache. + * + * Parameters: + * aa, ab unique address registers (temporaries) + */ + .macro icache_invalidate_all aa, ab, loopokay=1 +#if XCHAL_ICACHE_SIZE > 0 + // Instruction cache invalidation: + cache_index_all iii, XCHAL_ICACHE_SIZE, XCHAL_ICACHE_LINESIZE, XCHAL_ICACHE_WAYS, \aa, \ab, \loopokay, 1020 + icache_sync \aa + // End of instruction cache invalidation +#endif + .endm + + + +/* + * Lock (prefetch & lock) a single line of the instruction cache. + * + * Parameters are: + * ar address register that contains (virtual) address to lock + * (may get clobbered in a future implementation, but not currently) + * offset offset to add to \ar to compute effective address to lock + * (note: some number of lsbits are ignored) + */ + .macro icache_lock_line ar, offset +#if XCHAL_ICACHE_SIZE > 0 && XCHAL_ICACHE_LINE_LOCKABLE + ipfl \ar, \offset /* prefetch and lock icache line */ + icache_sync \ar +#endif + .endm + + + +/* + * Lock (prefetch & lock) a specified portion of memory into the instruction cache. + * Parameters are: + * astart start address (register gets clobbered) + * asize size of the region in bytes (register gets clobbered) + * ac unique register used as temporary + */ + .macro icache_lock_region astart, asize, ac +#if XCHAL_ICACHE_SIZE > 0 && XCHAL_ICACHE_LINE_LOCKABLE + // Instruction cache region lock: + cache_hit_region ipfl, XCHAL_ICACHE_LINEWIDTH, \astart, \asize, \ac + icache_sync \ac + // End of instruction cache region lock +#endif + .endm + + + +/* + * Unlock a single line of the instruction cache. + * + * Parameters are: + * ar address register that contains (virtual) address to unlock + * (may get clobbered in a future implementation, but not currently) + * offset offset to add to \ar to compute effective address to unlock + * (note: some number of lsbits are ignored) + */ + .macro icache_unlock_line ar, offset +#if XCHAL_ICACHE_SIZE > 0 && XCHAL_ICACHE_LINE_LOCKABLE + ihu \ar, \offset /* unlock icache line */ + icache_sync \ar +#endif + .endm + + + +/* + * Unlock a specified portion of memory from the instruction cache. + * Parameters are: + * astart start address (register gets clobbered) + * asize size of the region in bytes (register gets clobbered) + * ac unique register used as temporary + */ + .macro icache_unlock_region astart, asize, ac +#if XCHAL_ICACHE_SIZE > 0 && XCHAL_ICACHE_LINE_LOCKABLE + // Instruction cache region unlock: + cache_hit_region ihu, XCHAL_ICACHE_LINEWIDTH, \astart, \asize, \ac + icache_sync \ac + // End of instruction cache region unlock +#endif + .endm + + + +/* + * Unlock entire instruction cache. + * + * Parameters: + * aa, ab unique address registers (temporaries) + */ + .macro icache_unlock_all aa, ab, loopokay=1 +#if XCHAL_ICACHE_SIZE > 0 && XCHAL_ICACHE_LINE_LOCKABLE + // Instruction cache unlock: + cache_index_all iiu, XCHAL_ICACHE_SIZE, XCHAL_ICACHE_LINESIZE, 1, \aa, \ab, \loopokay, 240 + icache_sync \aa + // End of instruction cache unlock +#endif + .endm + + + + + +/*************************** DATA CACHE ***************************/ + + + +/* + * Reset/initialize the data cache by simply invalidating it + * (need to unlock first also, if cache locking implemented): + * + * Parameters: + * aa, ab unique address registers (temporaries) + */ + .macro dcache_reset aa, ab, loopokay=0 + dcache_unlock_all \aa, \ab, \loopokay + dcache_invalidate_all \aa, \ab, \loopokay + .endm + + + + +/* + * Synchronize after a data cache operation, + * to be sure everything is in sync with memory as to be + * expected following any previous data cache control operations. + * + * Parameters are: + * ar an address register (temporary) (currently unused, but may be used in future) + */ + .macro dcache_sync ar, wbtype=0 +#if XCHAL_DCACHE_SIZE > 0 + // No synchronization is needed. + // (memw may be desired e.g. after writeback operation to help ensure subsequent + // external accesses are seen to follow that writeback, however that's outside + // the scope of this macro) + + //dsync + .ifne (\wbtype & XCHAL_ERRATUM_497) + memw + .endif +#endif + .endm + + + +/* + * Turn on cache coherence. + * + * WARNING: for RE-201x.x and later hardware, any interrupt that tries + * to change MEMCTL will see its changes dropped if the interrupt comes + * in the middle of this routine. If this might be an issue, call this + * routine with interrupts disabled. + * + * Parameters are: + * ar,at two scratch address registers (both clobbered) + */ + .macro cache_coherence_on ar at +#if XCHAL_DCACHE_IS_COHERENT +# if XCHAL_HW_MIN_VERSION >= XTENSA_HWVERSION_RE_2012_0 + /* Have MEMCTL. Enable snoop responses. */ + rsr.memctl \ar + movi \at, MEMCTL_SNOOP_EN + or \ar, \ar, \at + wsr.memctl \ar +# elif XCHAL_HAVE_EXTERN_REGS && XCHAL_HAVE_MX + /* Opt into coherence for MX (for backward compatibility / testing). */ + movi \ar, 1 + movi \at, XER_CCON + wer \ar, \at + extw +# endif +#endif + .endm + + + +/* + * Turn off cache coherence. + * + * NOTE: this is generally preceded by emptying the cache; + * see xthal_cache_coherence_optout() in hal/coherence.c for details. + * + * WARNING: for RE-201x.x and later hardware, any interrupt that tries + * to change MEMCTL will see its changes dropped if the interrupt comes + * in the middle of this routine. If this might be an issue, call this + * routine with interrupts disabled. + * + * Parameters are: + * ar,at two scratch address registers (both clobbered) + */ + .macro cache_coherence_off ar at +#if XCHAL_DCACHE_IS_COHERENT +# if XCHAL_HW_MIN_VERSION >= XTENSA_HWVERSION_RE_2012_0 + /* Have MEMCTL. Disable snoop responses. */ + rsr.memctl \ar + movi \at, ~MEMCTL_SNOOP_EN + and \ar, \ar, \at + wsr.memctl \ar +# elif XCHAL_HAVE_EXTERN_REGS && XCHAL_HAVE_MX + /* Opt out of coherence, for MX (for backward compatibility / testing). */ + extw + movi \at, 0 + movi \ar, XER_CCON + wer \at, \ar + extw +# endif +#endif + .endm + + + +/* + * Synchronize after a data store operation, + * to be sure the stored data is completely off the processor + * (and assuming there is no buffering outside the processor, + * that the data is in memory). This may be required to + * ensure that the processor's write buffers are emptied. + * A MEMW followed by a read guarantees this, by definition. + * We also try to make sure the read itself completes. + * + * Parameters are: + * ar an address register (temporary) + */ + .macro write_sync ar + memw // ensure previous memory accesses are complete prior to subsequent memory accesses + l32i \ar, sp, 0 // completing this read ensures any previous write has completed, because of MEMW + //slot + add \ar, \ar, \ar // use the result of the read to help ensure the read completes (in future architectures) + .endm + + +/* + * Invalidate a single line of the data cache. + * Parameters are: + * ar address register that contains (virtual) address to invalidate + * (may get clobbered in a future implementation, but not currently) + * offset (optional) offset to add to \ar to compute effective address to invalidate + * (note: some number of lsbits are ignored) + */ + .macro dcache_invalidate_line ar, offset +#if XCHAL_DCACHE_SIZE > 0 + dhi \ar, \offset + dcache_sync \ar +#endif + .endm + + + + + +/* + * Invalidate data cache entries that cache a specified portion of memory. + * Parameters are: + * astart start address (register gets clobbered) + * asize size of the region in bytes (register gets clobbered) + * ac unique register used as temporary + */ + .macro dcache_invalidate_region astart, asize, ac +#if XCHAL_DCACHE_SIZE > 0 + // Data cache region invalidation: + cache_hit_region dhi, XCHAL_DCACHE_LINEWIDTH, \astart, \asize, \ac + dcache_sync \ac + // End of data cache region invalidation +#endif + .endm + + + +/* + * Invalidate entire data cache. + * + * Parameters: + * aa, ab unique address registers (temporaries) + */ + .macro dcache_invalidate_all aa, ab, loopokay=1 +#if XCHAL_DCACHE_SIZE > 0 + // Data cache invalidation: + cache_index_all dii, XCHAL_DCACHE_SIZE, XCHAL_DCACHE_LINESIZE, XCHAL_DCACHE_WAYS, \aa, \ab, \loopokay, 1020 + dcache_sync \aa + // End of data cache invalidation +#endif + .endm + + + +/* + * Writeback a single line of the data cache. + * Parameters are: + * ar address register that contains (virtual) address to writeback + * (may get clobbered in a future implementation, but not currently) + * offset offset to add to \ar to compute effective address to writeback + * (note: some number of lsbits are ignored) + */ + .macro dcache_writeback_line ar, offset +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_DCACHE_IS_WRITEBACK + dhwb \ar, \offset + dcache_sync \ar, wbtype=1 +#endif + .endm + + + +/* + * Writeback dirty data cache entries that cache a specified portion of memory. + * Parameters are: + * astart start address (register gets clobbered) + * asize size of the region in bytes (register gets clobbered) + * ac unique register used as temporary + */ + .macro dcache_writeback_region astart, asize, ac, awb +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_DCACHE_IS_WRITEBACK + // Data cache region writeback: + cache_hit_region dhwb, XCHAL_DCACHE_LINEWIDTH, \astart, \asize, \ac, \awb + dcache_sync \ac, wbtype=1 + // End of data cache region writeback +#endif + .endm + + + +/* + * Writeback entire data cache. + * Parameters: + * aa, ab unique address registers (temporaries) + */ + .macro dcache_writeback_all aa, ab, awb, loopokay=1 +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_DCACHE_IS_WRITEBACK + // Data cache writeback: + cache_index_all diwb, XCHAL_DCACHE_SIZE, XCHAL_DCACHE_LINESIZE, 1, \aa, \ab, \loopokay, 240, \awb, + dcache_sync \aa, wbtype=1 + // End of data cache writeback +#endif + .endm + + + +/* + * Writeback and invalidate a single line of the data cache. + * Parameters are: + * ar address register that contains (virtual) address to writeback and invalidate + * (may get clobbered in a future implementation, but not currently) + * offset offset to add to \ar to compute effective address to writeback and invalidate + * (note: some number of lsbits are ignored) + */ + .macro dcache_writeback_inv_line ar, offset +#if XCHAL_DCACHE_SIZE > 0 + dhwbi \ar, \offset /* writeback and invalidate dcache line */ + dcache_sync \ar, wbtype=1 +#endif + .endm + + + +/* + * Writeback and invalidate data cache entries that cache a specified portion of memory. + * Parameters are: + * astart start address (register gets clobbered) + * asize size of the region in bytes (register gets clobbered) + * ac unique register used as temporary + */ + .macro dcache_writeback_inv_region astart, asize, ac, awb +#if XCHAL_DCACHE_SIZE > 0 + // Data cache region writeback and invalidate: + cache_hit_region dhwbi, XCHAL_DCACHE_LINEWIDTH, \astart, \asize, \ac, \awb + dcache_sync \ac, wbtype=1 + // End of data cache region writeback and invalidate +#endif + .endm + + + +/* + * Writeback and invalidate entire data cache. + * Parameters: + * aa, ab unique address registers (temporaries) + */ + .macro dcache_writeback_inv_all aa, ab, awb, loopokay=1 +#if XCHAL_DCACHE_SIZE > 0 + // Data cache writeback and invalidate: +#if XCHAL_DCACHE_IS_WRITEBACK + cache_index_all diwbi, XCHAL_DCACHE_SIZE, XCHAL_DCACHE_LINESIZE, 1, \aa, \ab, \loopokay, 240, \awb + dcache_sync \aa, wbtype=1 +#else /*writeback*/ + // Data cache does not support writeback, so just invalidate: */ + dcache_invalidate_all \aa, \ab, \loopokay +#endif /*writeback*/ + // End of data cache writeback and invalidate +#endif + .endm + + + + +/* + * Lock (prefetch & lock) a single line of the data cache. + * + * Parameters are: + * ar address register that contains (virtual) address to lock + * (may get clobbered in a future implementation, but not currently) + * offset offset to add to \ar to compute effective address to lock + * (note: some number of lsbits are ignored) + */ + .macro dcache_lock_line ar, offset +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_DCACHE_LINE_LOCKABLE + dpfl \ar, \offset /* prefetch and lock dcache line */ + dcache_sync \ar +#endif + .endm + + + +/* + * Lock (prefetch & lock) a specified portion of memory into the data cache. + * Parameters are: + * astart start address (register gets clobbered) + * asize size of the region in bytes (register gets clobbered) + * ac unique register used as temporary + */ + .macro dcache_lock_region astart, asize, ac +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_DCACHE_LINE_LOCKABLE + // Data cache region lock: + cache_hit_region dpfl, XCHAL_DCACHE_LINEWIDTH, \astart, \asize, \ac + dcache_sync \ac + // End of data cache region lock +#endif + .endm + + + +/* + * Unlock a single line of the data cache. + * + * Parameters are: + * ar address register that contains (virtual) address to unlock + * (may get clobbered in a future implementation, but not currently) + * offset offset to add to \ar to compute effective address to unlock + * (note: some number of lsbits are ignored) + */ + .macro dcache_unlock_line ar, offset +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_DCACHE_LINE_LOCKABLE + dhu \ar, \offset /* unlock dcache line */ + dcache_sync \ar +#endif + .endm + + + +/* + * Unlock a specified portion of memory from the data cache. + * Parameters are: + * astart start address (register gets clobbered) + * asize size of the region in bytes (register gets clobbered) + * ac unique register used as temporary + */ + .macro dcache_unlock_region astart, asize, ac +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_DCACHE_LINE_LOCKABLE + // Data cache region unlock: + cache_hit_region dhu, XCHAL_DCACHE_LINEWIDTH, \astart, \asize, \ac + dcache_sync \ac + // End of data cache region unlock +#endif + .endm + + + +/* + * Unlock entire data cache. + * + * Parameters: + * aa, ab unique address registers (temporaries) + */ + .macro dcache_unlock_all aa, ab, loopokay=1 +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_DCACHE_LINE_LOCKABLE + // Data cache unlock: + cache_index_all diu, XCHAL_DCACHE_SIZE, XCHAL_DCACHE_LINESIZE, 1, \aa, \ab, \loopokay, 240 + dcache_sync \aa + // End of data cache unlock +#endif + .endm + + + +/* + * Get the number of enabled icache ways. Note that this may + * be different from the value read from the MEMCTL register. + * + * Parameters: + * aa address register where value is returned + */ + .macro icache_get_ways aa +#if XCHAL_ICACHE_SIZE > 0 +#if XCHAL_HAVE_ICACHE_DYN_WAYS + // Read from MEMCTL and shift/mask + rsr \aa, MEMCTL + extui \aa, \aa, MEMCTL_ICWU_SHIFT, MEMCTL_ICWU_BITS + blti \aa, XCHAL_ICACHE_WAYS, .Licgw + movi \aa, XCHAL_ICACHE_WAYS +.Licgw: +#else + // All ways are always enabled + movi \aa, XCHAL_ICACHE_WAYS +#endif +#else + // No icache + movi \aa, 0 +#endif + .endm + + + +/* + * Set the number of enabled icache ways. + * + * Parameters: + * aa address register specifying number of ways (trashed) + * ab,ac address register for scratch use (trashed) + */ + .macro icache_set_ways aa, ab, ac +#if XCHAL_ICACHE_SIZE > 0 +#if XCHAL_HAVE_ICACHE_DYN_WAYS + movi \ac, MEMCTL_ICWU_CLR_MASK // set up to clear bits 18-22 + rsr \ab, MEMCTL + and \ab, \ab, \ac + movi \ac, MEMCTL_INV_EN // set bit 23 + slli \aa, \aa, MEMCTL_ICWU_SHIFT // move to right spot + or \ab, \ab, \aa + or \ab, \ab, \ac + wsr \ab, MEMCTL + isync +#else + // All ways are always enabled +#endif +#else + // No icache +#endif + .endm + + + +/* + * Get the number of enabled dcache ways. Note that this may + * be different from the value read from the MEMCTL register. + * + * Parameters: + * aa address register where value is returned + */ + .macro dcache_get_ways aa +#if XCHAL_DCACHE_SIZE > 0 +#if XCHAL_HAVE_DCACHE_DYN_WAYS + // Read from MEMCTL and shift/mask + rsr \aa, MEMCTL + extui \aa, \aa, MEMCTL_DCWU_SHIFT, MEMCTL_DCWU_BITS + blti \aa, XCHAL_DCACHE_WAYS, .Ldcgw + movi \aa, XCHAL_DCACHE_WAYS +.Ldcgw: +#else + // All ways are always enabled + movi \aa, XCHAL_DCACHE_WAYS +#endif +#else + // No dcache + movi \aa, 0 +#endif + .endm + + + +/* + * Set the number of enabled dcache ways. + * + * Parameters: + * aa address register specifying number of ways (trashed) + * ab,ac address register for scratch use (trashed) + */ + .macro dcache_set_ways aa, ab, ac +#if (XCHAL_DCACHE_SIZE > 0) && XCHAL_HAVE_DCACHE_DYN_WAYS + movi \ac, MEMCTL_DCWA_CLR_MASK // set up to clear bits 13-17 + rsr \ab, MEMCTL + and \ab, \ab, \ac // clear ways allocatable + slli \ac, \aa, MEMCTL_DCWA_SHIFT + or \ab, \ab, \ac // set ways allocatable + wsr \ab, MEMCTL +#if XCHAL_DCACHE_IS_WRITEBACK + // Check if the way count is increasing or decreasing + extui \ac, \ab, MEMCTL_DCWU_SHIFT, MEMCTL_DCWU_BITS // bits 8-12 - ways in use + bge \aa, \ac, .Ldsw3 // equal or increasing + slli \ab, \aa, XCHAL_DCACHE_LINEWIDTH + XCHAL_DCACHE_SETWIDTH // start way number + slli \ac, \ac, XCHAL_DCACHE_LINEWIDTH + XCHAL_DCACHE_SETWIDTH // end way number +.Ldsw1: + diwbui.p \ab // auto-increments ab + bge \ab, \ac, .Ldsw2 + beqz \ab, .Ldsw2 + j .Ldsw1 +.Ldsw2: + rsr \ab, MEMCTL +#endif +.Ldsw3: + // No dirty data to write back, just set the new number of ways + movi \ac, MEMCTL_DCWU_CLR_MASK // set up to clear bits 8-12 + and \ab, \ab, \ac // clear ways in use + movi \ac, MEMCTL_INV_EN + or \ab, \ab, \ac // set bit 23 + slli \aa, \aa, MEMCTL_DCWU_SHIFT + or \ab, \ab, \aa // set ways in use + wsr \ab, MEMCTL +#else + // No dcache or no way disable support +#endif + .endm + +#endif /*XTENSA_CACHEASM_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/cacheattrasm.h b/tools/sdk/include/esp32/xtensa/cacheattrasm.h new file mode 100755 index 00000000..20c4cfd5 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/cacheattrasm.h @@ -0,0 +1,436 @@ +/* + * xtensa/cacheattrasm.h -- assembler-specific CACHEATTR register related definitions + * that depend on CORE configuration + * + * This file is logically part of xtensa/coreasm.h (or perhaps xtensa/cacheasm.h), + * but is kept separate for modularity / compilation-performance. + */ + +/* + * Copyright (c) 2001-2009 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef XTENSA_CACHEATTRASM_H +#define XTENSA_CACHEATTRASM_H + +#include + +/* Determine whether cache attributes are controlled using eight 512MB entries: */ +#define XCHAL_CA_8X512 (XCHAL_HAVE_CACHEATTR || XCHAL_HAVE_MIMIC_CACHEATTR || XCHAL_HAVE_XLT_CACHEATTR \ + || (XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY)) + + +/* + * This header file defines assembler macros of the form: + * cacheattr_ + * where: + * is 'i', 'd' or absent for instruction, data + * or both caches; and + * indicates the function of the macro. + * + * The following functions are defined: + * + * icacheattr_get + * Reads I-cache CACHEATTR into a2 (clobbers a3-a5). + * + * dcacheattr_get + * Reads D-cache CACHEATTR into a2 (clobbers a3-a5). + * (Note: for configs with a real CACHEATTR register, the + * above two macros are identical.) + * + * cacheattr_set + * Writes both I-cache and D-cache CACHEATTRs from a2 (a3-a8 clobbered). + * Works even when changing one's own code's attributes. + * + * icacheattr_is_enabled label + * Branches to \label if I-cache appears to have been enabled + * (eg. if CACHEATTR contains a cache-enabled attribute). + * (clobbers a2-a5,SAR) + * + * dcacheattr_is_enabled label + * Branches to \label if D-cache appears to have been enabled + * (eg. if CACHEATTR contains a cache-enabled attribute). + * (clobbers a2-a5,SAR) + * + * cacheattr_is_enabled label + * Branches to \label if either I-cache or D-cache appears to have been enabled + * (eg. if CACHEATTR contains a cache-enabled attribute). + * (clobbers a2-a5,SAR) + * + * The following macros are only defined under certain conditions: + * + * icacheattr_set (if XCHAL_HAVE_MIMIC_CACHEATTR || XCHAL_HAVE_XLT_CACHEATTR) + * Writes I-cache CACHEATTR from a2 (a3-a8 clobbered). + * + * dcacheattr_set (if XCHAL_HAVE_MIMIC_CACHEATTR || XCHAL_HAVE_XLT_CACHEATTR) + * Writes D-cache CACHEATTR from a2 (a3-a8 clobbered). + */ + + + +/*************************** GENERIC -- ALL CACHES ***************************/ + +/* + * _cacheattr_get + * + * (Internal macro.) + * Returns value of CACHEATTR register (or closest equivalent) in a2. + * + * Entry: + * (none) + * Exit: + * a2 value read from CACHEATTR + * a3-a5 clobbered (temporaries) + */ + .macro _cacheattr_get tlb +#if XCHAL_HAVE_CACHEATTR + rsr a2, CACHEATTR +#elif XCHAL_CA_8X512 + // We have a config that "mimics" CACHEATTR using a simplified + // "MMU" composed of a single statically-mapped way. + // DTLB and ITLB are independent, so there's no single + // cache attribute that can describe both. So for now + // just return the DTLB state. + movi a5, 0xE0000000 + movi a2, 0 + movi a3, XCHAL_SPANNING_WAY +1: add a3, a3, a5 // next segment + r&tlb&1 a4, a3 // get PPN+CA of segment at 0xE0000000, 0xC0000000, ..., 0 + dsync // interlock??? + slli a2, a2, 4 + extui a4, a4, 0, 4 // extract CA + or a2, a2, a4 + bgeui a3, 16, 1b +#else + // This macro isn't applicable to arbitrary MMU configurations. + // Just return zero. + movi a2, 0 +#endif + .endm + + .macro icacheattr_get + _cacheattr_get itlb + .endm + + .macro dcacheattr_get + _cacheattr_get dtlb + .endm + + +/* Default (powerup/reset) value of CACHEATTR, + all BYPASS mode (ie. disabled/bypassed caches): */ +#if XCHAL_HAVE_PTP_MMU +# define XCHAL_CACHEATTR_ALL_BYPASS 0x33333333 +#else +# define XCHAL_CACHEATTR_ALL_BYPASS 0x22222222 +#endif + +#if XCHAL_CA_8X512 + +#if XCHAL_HAVE_PTP_MMU +# define XCHAL_FCA_ENAMASK 0x0AA0 /* bitmap of fetch attributes that require enabled icache */ +# define XCHAL_LCA_ENAMASK 0x0FF0 /* bitmap of load attributes that require enabled dcache */ +# define XCHAL_SCA_ENAMASK 0x0CC0 /* bitmap of store attributes that require enabled dcache */ +#else +# define XCHAL_FCA_ENAMASK 0x003A /* bitmap of fetch attributes that require enabled icache */ +# define XCHAL_LCA_ENAMASK 0x0033 /* bitmap of load attributes that require enabled dcache */ +# define XCHAL_SCA_ENAMASK 0x0033 /* bitmap of store attributes that require enabled dcache */ +#endif +#define XCHAL_LSCA_ENAMASK (XCHAL_LCA_ENAMASK|XCHAL_SCA_ENAMASK) /* l/s attrs requiring enabled dcache */ +#define XCHAL_ALLCA_ENAMASK (XCHAL_FCA_ENAMASK|XCHAL_LSCA_ENAMASK) /* all attrs requiring enabled caches */ + +/* + * _cacheattr_is_enabled + * + * (Internal macro.) + * Branches to \label if CACHEATTR in a2 indicates an enabled + * cache, using mask in a3. + * + * Parameters: + * label where to branch to if cache is enabled + * Entry: + * a2 contains CACHEATTR value used to determine whether + * caches are enabled + * a3 16-bit constant where each bit correspond to + * one of the 16 possible CA values (in a CACHEATTR mask); + * CA values that indicate the cache is enabled + * have their corresponding bit set in this mask + * (eg. use XCHAL_xCA_ENAMASK , above) + * Exit: + * a2,a4,a5 clobbered + * SAR clobbered + */ + .macro _cacheattr_is_enabled label + movi a4, 8 // loop 8 times +.Lcaife\@: + extui a5, a2, 0, 4 // get CA nibble + ssr a5 // index into mask according to CA... + srl a5, a3 // ...and get CA's mask bit in a5 bit 0 + bbsi.l a5, 0, \label // if CA indicates cache enabled, jump to label + srli a2, a2, 4 // next nibble + addi a4, a4, -1 + bnez a4, .Lcaife\@ // loop for each nibble + .endm + +#else /* XCHAL_CA_8X512 */ + .macro _cacheattr_is_enabled label + j \label // macro not applicable, assume caches always enabled + .endm +#endif /* XCHAL_CA_8X512 */ + + + +/* + * icacheattr_is_enabled + * + * Branches to \label if I-cache is enabled. + * + * Parameters: + * label where to branch to if icache is enabled + * Entry: + * (none) + * Exit: + * a2-a5, SAR clobbered (temporaries) + */ + .macro icacheattr_is_enabled label +#if XCHAL_CA_8X512 + icacheattr_get + movi a3, XCHAL_FCA_ENAMASK +#endif + _cacheattr_is_enabled \label + .endm + +/* + * dcacheattr_is_enabled + * + * Branches to \label if D-cache is enabled. + * + * Parameters: + * label where to branch to if dcache is enabled + * Entry: + * (none) + * Exit: + * a2-a5, SAR clobbered (temporaries) + */ + .macro dcacheattr_is_enabled label +#if XCHAL_CA_8X512 + dcacheattr_get + movi a3, XCHAL_LSCA_ENAMASK +#endif + _cacheattr_is_enabled \label + .endm + +/* + * cacheattr_is_enabled + * + * Branches to \label if either I-cache or D-cache is enabled. + * + * Parameters: + * label where to branch to if a cache is enabled + * Entry: + * (none) + * Exit: + * a2-a5, SAR clobbered (temporaries) + */ + .macro cacheattr_is_enabled label +#if XCHAL_HAVE_CACHEATTR + rsr a2, CACHEATTR + movi a3, XCHAL_ALLCA_ENAMASK +#elif XCHAL_CA_8X512 + icacheattr_get + movi a3, XCHAL_FCA_ENAMASK + _cacheattr_is_enabled \label + dcacheattr_get + movi a3, XCHAL_LSCA_ENAMASK +#endif + _cacheattr_is_enabled \label + .endm + + + +/* + * The ISA does not have a defined way to change the + * instruction cache attributes of the running code, + * ie. of the memory area that encloses the current PC. + * However, each micro-architecture (or class of + * configurations within a micro-architecture) + * provides a way to deal with this issue. + * + * Here are a few macros used to implement the relevant + * approach taken. + */ + +#if XCHAL_CA_8X512 && !XCHAL_HAVE_CACHEATTR + // We have a config that "mimics" CACHEATTR using a simplified + // "MMU" composed of a single statically-mapped way. + +/* + * icacheattr_set + * + * Entry: + * a2 cacheattr value to set + * Exit: + * a2 unchanged + * a3-a8 clobbered (temporaries) + */ + .macro icacheattr_set + + movi a5, 0xE0000000 // mask of upper 3 bits + movi a6, 3f // PC where ITLB is set + movi a3, XCHAL_SPANNING_WAY // start at region 0 (0 .. 7) + mov a7, a2 // copy a2 so it doesn't get clobbered + and a6, a6, a5 // upper 3 bits of local PC area + j 3f + + // Use micro-architecture specific method. + // The following 4-instruction sequence is aligned such that + // it all fits within a single I-cache line. Sixteen byte + // alignment is sufficient for this (using XCHAL_ICACHE_LINESIZE + // actually causes problems because that can be greater than + // the alignment of the reset vector, where this macro is often + // invoked, which would cause the linker to align the reset + // vector code away from the reset vector!!). + .begin no-transform + .align 16 /*XCHAL_ICACHE_LINESIZE*/ +1: witlb a4, a3 // write wired PTE (CA, no PPN) of 512MB segment to ITLB + isync + .end no-transform + nop + nop + + sub a3, a3, a5 // next segment (add 0x20000000) + bltui a3, 16, 4f // done? + + // Note that in the WITLB loop, we don't do any load/stores + // (may not be an issue here, but it is important in the DTLB case). +2: srli a7, a7, 4 // next CA +3: +# if XCHAL_HAVE_MIMIC_CACHEATTR + extui a4, a7, 0, 4 // extract CA to set +# else /* have translation, preserve it: */ + ritlb1 a8, a3 // get current PPN+CA of segment + //dsync // interlock??? + extui a4, a7, 0, 4 // extract CA to set + srli a8, a8, 4 // clear CA but keep PPN ... + slli a8, a8, 4 // ... + add a4, a4, a8 // combine new CA with PPN to preserve +# endif + beq a3, a6, 1b // current PC's region? if so, do it in a safe way + witlb a4, a3 // write wired PTE (CA [+PPN]) of 512MB segment to ITLB + sub a3, a3, a5 // next segment (add 0x20000000) + bgeui a3, 16, 2b + isync // make sure all ifetch changes take effect +4: + .endm // icacheattr_set + + +/* + * dcacheattr_set + * + * Entry: + * a2 cacheattr value to set + * Exit: + * a2 unchanged + * a3-a8 clobbered (temporaries) + */ + + .macro dcacheattr_set + + movi a5, 0xE0000000 // mask of upper 3 bits + movi a3, XCHAL_SPANNING_WAY // start at region 0 (0 .. 7) + mov a7, a2 // copy a2 so it doesn't get clobbered + // Note that in the WDTLB loop, we don't do any load/stores +2: // (including implicit l32r via movi) because it isn't safe. +# if XCHAL_HAVE_MIMIC_CACHEATTR + extui a4, a7, 0, 4 // extract CA to set +# else /* have translation, preserve it: */ + rdtlb1 a8, a3 // get current PPN+CA of segment + //dsync // interlock??? + extui a4, a7, 0, 4 // extract CA to set + srli a8, a8, 4 // clear CA but keep PPN ... + slli a8, a8, 4 // ... + add a4, a4, a8 // combine new CA with PPN to preserve +# endif + wdtlb a4, a3 // write wired PTE (CA [+PPN]) of 512MB segment to DTLB + sub a3, a3, a5 // next segment (add 0x20000000) + srli a7, a7, 4 // next CA + bgeui a3, 16, 2b + dsync // make sure all data path changes take effect + .endm // dcacheattr_set + +#endif /* XCHAL_CA_8X512 && !XCHAL_HAVE_CACHEATTR */ + + + +/* + * cacheattr_set + * + * Macro that sets the current CACHEATTR safely + * (both i and d) according to the current contents of a2. + * It works even when changing the cache attributes of + * the currently running code. + * + * Entry: + * a2 cacheattr value to set + * Exit: + * a2 unchanged + * a3-a8 clobbered (temporaries) + */ + .macro cacheattr_set + +#if XCHAL_HAVE_CACHEATTR +# if XCHAL_ICACHE_LINESIZE < 4 + // No i-cache, so can always safely write to CACHEATTR: + wsr a2, CACHEATTR +# else + // The Athens micro-architecture, when using the old + // exception architecture option (ie. with the CACHEATTR register) + // allows changing the cache attributes of the running code + // using the following exact sequence aligned to be within + // an instruction cache line. (NOTE: using XCHAL_ICACHE_LINESIZE + // alignment actually causes problems because that can be greater + // than the alignment of the reset vector, where this macro is often + // invoked, which would cause the linker to align the reset + // vector code away from the reset vector!!). + j 1f + .begin no-transform + .align 16 /*XCHAL_ICACHE_LINESIZE*/ // align to within an I-cache line +1: wsr a2, CACHEATTR + isync + .end no-transform + nop + nop +# endif +#elif XCHAL_CA_8X512 + // DTLB and ITLB are independent, but to keep semantics + // of this macro we simply write to both. + icacheattr_set + dcacheattr_set +#else + // This macro isn't applicable to arbitrary MMU configurations. + // Do nothing in this case. +#endif + .endm + + +#endif /*XTENSA_CACHEATTRASM_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/config/core-isa.h b/tools/sdk/include/esp32/xtensa/config/core-isa.h new file mode 100644 index 00000000..18456472 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/config/core-isa.h @@ -0,0 +1,655 @@ +/* + * xtensa/config/core-isa.h -- HAL definitions that are dependent on Xtensa + * processor CORE configuration + * + * See , which includes this file, for more details. + */ + +/* Xtensa processor core configuration information. + + Customer ID=11657; Build=0x5fe96; Copyright (c) 1999-2016 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef _XTENSA_CORE_CONFIGURATION_H +#define _XTENSA_CORE_CONFIGURATION_H + + +/**************************************************************************** + Parameters Useful for Any Code, USER or PRIVILEGED + ****************************************************************************/ + +/* + * Note: Macros of the form XCHAL_HAVE_*** have a value of 1 if the option is + * configured, and a value of 0 otherwise. These macros are always defined. + */ + + +/*---------------------------------------------------------------------- + ISA + ----------------------------------------------------------------------*/ + +#define XCHAL_HAVE_BE 0 /* big-endian byte ordering */ +#define XCHAL_HAVE_WINDOWED 1 /* windowed registers option */ +#define XCHAL_NUM_AREGS 64 /* num of physical addr regs */ +#define XCHAL_NUM_AREGS_LOG2 6 /* log2(XCHAL_NUM_AREGS) */ +#define XCHAL_MAX_INSTRUCTION_SIZE 3 /* max instr bytes (3..8) */ +#define XCHAL_HAVE_DEBUG 1 /* debug option */ +#define XCHAL_HAVE_DENSITY 1 /* 16-bit instructions */ +#define XCHAL_HAVE_LOOPS 1 /* zero-overhead loops */ +#define XCHAL_LOOP_BUFFER_SIZE 256 /* zero-ov. loop instr buffer size */ +#define XCHAL_HAVE_NSA 1 /* NSA/NSAU instructions */ +#define XCHAL_HAVE_MINMAX 1 /* MIN/MAX instructions */ +#define XCHAL_HAVE_SEXT 1 /* SEXT instruction */ +#define XCHAL_HAVE_DEPBITS 0 /* DEPBITS instruction */ +#define XCHAL_HAVE_CLAMPS 1 /* CLAMPS instruction */ +#define XCHAL_HAVE_MUL16 1 /* MUL16S/MUL16U instructions */ +#define XCHAL_HAVE_MUL32 1 /* MULL instruction */ +#define XCHAL_HAVE_MUL32_HIGH 1 /* MULUH/MULSH instructions */ +#define XCHAL_HAVE_DIV32 1 /* QUOS/QUOU/REMS/REMU instructions */ +#define XCHAL_HAVE_L32R 1 /* L32R instruction */ +#define XCHAL_HAVE_ABSOLUTE_LITERALS 0 /* non-PC-rel (extended) L32R */ +#define XCHAL_HAVE_CONST16 0 /* CONST16 instruction */ +#define XCHAL_HAVE_ADDX 1 /* ADDX#/SUBX# instructions */ +#define XCHAL_HAVE_WIDE_BRANCHES 0 /* B*.W18 or B*.W15 instr's */ +#define XCHAL_HAVE_PREDICTED_BRANCHES 0 /* B[EQ/EQZ/NE/NEZ]T instr's */ +#define XCHAL_HAVE_CALL4AND12 1 /* (obsolete option) */ +#define XCHAL_HAVE_ABS 1 /* ABS instruction */ +/*#define XCHAL_HAVE_POPC 0*/ /* POPC instruction */ +/*#define XCHAL_HAVE_CRC 0*/ /* CRC instruction */ +#define XCHAL_HAVE_RELEASE_SYNC 1 /* L32AI/S32RI instructions */ +#define XCHAL_HAVE_S32C1I 1 /* S32C1I instruction */ +#define XCHAL_HAVE_SPECULATION 0 /* speculation */ +#define XCHAL_HAVE_FULL_RESET 1 /* all regs/state reset */ +#define XCHAL_NUM_CONTEXTS 1 /* */ +#define XCHAL_NUM_MISC_REGS 4 /* num of scratch regs (0..4) */ +#define XCHAL_HAVE_TAP_MASTER 0 /* JTAG TAP control instr's */ +#define XCHAL_HAVE_PRID 1 /* processor ID register */ +#define XCHAL_HAVE_EXTERN_REGS 1 /* WER/RER instructions */ +#define XCHAL_HAVE_MX 0 /* MX core (Tensilica internal) */ +#define XCHAL_HAVE_MP_INTERRUPTS 0 /* interrupt distributor port */ +#define XCHAL_HAVE_MP_RUNSTALL 0 /* core RunStall control port */ +#define XCHAL_HAVE_PSO 0 /* Power Shut-Off */ +#define XCHAL_HAVE_PSO_CDM 0 /* core/debug/mem pwr domains */ +#define XCHAL_HAVE_PSO_FULL_RETENTION 0 /* all regs preserved on PSO */ +#define XCHAL_HAVE_THREADPTR 1 /* THREADPTR register */ +#define XCHAL_HAVE_BOOLEANS 1 /* boolean registers */ +#define XCHAL_HAVE_CP 1 /* CPENABLE reg (coprocessor) */ +#define XCHAL_CP_MAXCFG 8 /* max allowed cp id plus one */ +#define XCHAL_HAVE_MAC16 1 /* MAC16 package */ + +#define XCHAL_HAVE_FUSION 0 /* Fusion*/ +#define XCHAL_HAVE_FUSION_FP 0 /* Fusion FP option */ +#define XCHAL_HAVE_FUSION_LOW_POWER 0 /* Fusion Low Power option */ +#define XCHAL_HAVE_FUSION_AES 0 /* Fusion BLE/Wifi AES-128 CCM option */ +#define XCHAL_HAVE_FUSION_CONVENC 0 /* Fusion Conv Encode option */ +#define XCHAL_HAVE_FUSION_LFSR_CRC 0 /* Fusion LFSR-CRC option */ +#define XCHAL_HAVE_FUSION_BITOPS 0 /* Fusion Bit Operations Support option */ +#define XCHAL_HAVE_FUSION_AVS 0 /* Fusion AVS option */ +#define XCHAL_HAVE_FUSION_16BIT_BASEBAND 0 /* Fusion 16-bit Baseband option */ +#define XCHAL_HAVE_FUSION_VITERBI 0 /* Fusion Viterbi option */ +#define XCHAL_HAVE_FUSION_SOFTDEMAP 0 /* Fusion Soft Bit Demap option */ +#define XCHAL_HAVE_HIFIPRO 0 /* HiFiPro Audio Engine pkg */ +#define XCHAL_HAVE_HIFI4 0 /* HiFi4 Audio Engine pkg */ +#define XCHAL_HAVE_HIFI4_VFPU 0 /* HiFi4 Audio Engine VFPU option */ +#define XCHAL_HAVE_HIFI3 0 /* HiFi3 Audio Engine pkg */ +#define XCHAL_HAVE_HIFI3_VFPU 0 /* HiFi3 Audio Engine VFPU option */ +#define XCHAL_HAVE_HIFI2 0 /* HiFi2 Audio Engine pkg */ +#define XCHAL_HAVE_HIFI2EP 0 /* HiFi2EP */ +#define XCHAL_HAVE_HIFI_MINI 0 + + +#define XCHAL_HAVE_VECTORFPU2005 0 /* vector or user floating-point pkg */ +#define XCHAL_HAVE_USER_DPFPU 0 /* user DP floating-point pkg */ +#define XCHAL_HAVE_USER_SPFPU 0 /* user DP floating-point pkg */ +#define XCHAL_HAVE_FP 1 /* single prec floating point */ +#define XCHAL_HAVE_FP_DIV 1 /* FP with DIV instructions */ +#define XCHAL_HAVE_FP_RECIP 1 /* FP with RECIP instructions */ +#define XCHAL_HAVE_FP_SQRT 1 /* FP with SQRT instructions */ +#define XCHAL_HAVE_FP_RSQRT 1 /* FP with RSQRT instructions */ +#define XCHAL_HAVE_DFP 0 /* double precision FP pkg */ +#define XCHAL_HAVE_DFP_DIV 0 /* DFP with DIV instructions */ +#define XCHAL_HAVE_DFP_RECIP 0 /* DFP with RECIP instructions*/ +#define XCHAL_HAVE_DFP_SQRT 0 /* DFP with SQRT instructions */ +#define XCHAL_HAVE_DFP_RSQRT 0 /* DFP with RSQRT instructions*/ +#define XCHAL_HAVE_DFP_ACCEL 1 /* double precision FP acceleration pkg */ +#define XCHAL_HAVE_DFP_accel XCHAL_HAVE_DFP_ACCEL /* for backward compatibility */ + +#define XCHAL_HAVE_DFPU_SINGLE_ONLY 1 /* DFPU Coprocessor, single precision only */ +#define XCHAL_HAVE_DFPU_SINGLE_DOUBLE 0 /* DFPU Coprocessor, single and double precision */ +#define XCHAL_HAVE_VECTRA1 0 /* Vectra I pkg */ +#define XCHAL_HAVE_VECTRALX 0 /* Vectra LX pkg */ +#define XCHAL_HAVE_PDX4 0 /* PDX4 */ +#define XCHAL_HAVE_CONNXD2 0 /* ConnX D2 pkg */ +#define XCHAL_HAVE_CONNXD2_DUALLSFLIX 0 /* ConnX D2 & Dual LoadStore Flix */ +#define XCHAL_HAVE_BBE16 0 /* ConnX BBE16 pkg */ +#define XCHAL_HAVE_BBE16_RSQRT 0 /* BBE16 & vector recip sqrt */ +#define XCHAL_HAVE_BBE16_VECDIV 0 /* BBE16 & vector divide */ +#define XCHAL_HAVE_BBE16_DESPREAD 0 /* BBE16 & despread */ +#define XCHAL_HAVE_BBENEP 0 /* ConnX BBENEP pkgs */ +#define XCHAL_HAVE_BSP3 0 /* ConnX BSP3 pkg */ +#define XCHAL_HAVE_BSP3_TRANSPOSE 0 /* BSP3 & transpose32x32 */ +#define XCHAL_HAVE_SSP16 0 /* ConnX SSP16 pkg */ +#define XCHAL_HAVE_SSP16_VITERBI 0 /* SSP16 & viterbi */ +#define XCHAL_HAVE_TURBO16 0 /* ConnX Turbo16 pkg */ +#define XCHAL_HAVE_BBP16 0 /* ConnX BBP16 pkg */ +#define XCHAL_HAVE_FLIX3 0 /* basic 3-way FLIX option */ +#define XCHAL_HAVE_GRIVPEP 0 /* GRIVPEP is General Release of IVPEP */ +#define XCHAL_HAVE_GRIVPEP_HISTOGRAM 0 /* Histogram option on GRIVPEP */ + + +/*---------------------------------------------------------------------- + MISC + ----------------------------------------------------------------------*/ + +#define XCHAL_NUM_LOADSTORE_UNITS 1 /* load/store units */ +#define XCHAL_NUM_WRITEBUFFER_ENTRIES 4 /* size of write buffer */ +#define XCHAL_INST_FETCH_WIDTH 4 /* instr-fetch width in bytes */ +#define XCHAL_DATA_WIDTH 4 /* data width in bytes */ +#define XCHAL_DATA_PIPE_DELAY 2 /* d-side pipeline delay + (1 = 5-stage, 2 = 7-stage) */ +#define XCHAL_CLOCK_GATING_GLOBAL 1 /* global clock gating */ +#define XCHAL_CLOCK_GATING_FUNCUNIT 1 /* funct. unit clock gating */ +/* In T1050, applies to selected core load and store instructions (see ISA): */ +#define XCHAL_UNALIGNED_LOAD_EXCEPTION 0 /* unaligned loads cause exc. */ +#define XCHAL_UNALIGNED_STORE_EXCEPTION 0 /* unaligned stores cause exc.*/ +#define XCHAL_UNALIGNED_LOAD_HW 1 /* unaligned loads work in hw */ +#define XCHAL_UNALIGNED_STORE_HW 1 /* unaligned stores work in hw*/ + +#define XCHAL_SW_VERSION 1100003 /* sw version of this header */ + +#define XCHAL_CORE_ID "esp32_v3_49_prod" /* alphanum core name + (CoreID) set in the Xtensa + Processor Generator */ + +#define XCHAL_BUILD_UNIQUE_ID 0x0005FE96 /* 22-bit sw build ID */ + +/* + * These definitions describe the hardware targeted by this software. + */ +#define XCHAL_HW_CONFIGID0 0xC2BCFFFE /* ConfigID hi 32 bits*/ +#define XCHAL_HW_CONFIGID1 0x1CC5FE96 /* ConfigID lo 32 bits*/ +#define XCHAL_HW_VERSION_NAME "LX6.0.3" /* full version name */ +#define XCHAL_HW_VERSION_MAJOR 2600 /* major ver# of targeted hw */ +#define XCHAL_HW_VERSION_MINOR 3 /* minor ver# of targeted hw */ +#define XCHAL_HW_VERSION 260003 /* major*100+minor */ +#define XCHAL_HW_REL_LX6 1 +#define XCHAL_HW_REL_LX6_0 1 +#define XCHAL_HW_REL_LX6_0_3 1 +#define XCHAL_HW_CONFIGID_RELIABLE 1 +/* If software targets a *range* of hardware versions, these are the bounds: */ +#define XCHAL_HW_MIN_VERSION_MAJOR 2600 /* major v of earliest tgt hw */ +#define XCHAL_HW_MIN_VERSION_MINOR 3 /* minor v of earliest tgt hw */ +#define XCHAL_HW_MIN_VERSION 260003 /* earliest targeted hw */ +#define XCHAL_HW_MAX_VERSION_MAJOR 2600 /* major v of latest tgt hw */ +#define XCHAL_HW_MAX_VERSION_MINOR 3 /* minor v of latest tgt hw */ +#define XCHAL_HW_MAX_VERSION 260003 /* latest targeted hw */ + + +/*---------------------------------------------------------------------- + CACHE + ----------------------------------------------------------------------*/ + +#define XCHAL_ICACHE_LINESIZE 4 /* I-cache line size in bytes */ +#define XCHAL_DCACHE_LINESIZE 4 /* D-cache line size in bytes */ +#define XCHAL_ICACHE_LINEWIDTH 2 /* log2(I line size in bytes) */ +#define XCHAL_DCACHE_LINEWIDTH 2 /* log2(D line size in bytes) */ + +#define XCHAL_ICACHE_SIZE 0 /* I-cache size in bytes or 0 */ +#define XCHAL_DCACHE_SIZE 0 /* D-cache size in bytes or 0 */ + +#define XCHAL_DCACHE_IS_WRITEBACK 0 /* writeback feature */ +#define XCHAL_DCACHE_IS_COHERENT 0 /* MP coherence feature */ + +#define XCHAL_HAVE_PREFETCH 0 /* PREFCTL register */ +#define XCHAL_HAVE_PREFETCH_L1 0 /* prefetch to L1 dcache */ +#define XCHAL_PREFETCH_CASTOUT_LINES 0 /* dcache pref. castout bufsz */ +#define XCHAL_PREFETCH_ENTRIES 0 /* cache prefetch entries */ +#define XCHAL_PREFETCH_BLOCK_ENTRIES 0 /* prefetch block streams */ +#define XCHAL_HAVE_CACHE_BLOCKOPS 0 /* block prefetch for caches */ +#define XCHAL_HAVE_ICACHE_TEST 0 /* Icache test instructions */ +#define XCHAL_HAVE_DCACHE_TEST 0 /* Dcache test instructions */ +#define XCHAL_HAVE_ICACHE_DYN_WAYS 0 /* Icache dynamic way support */ +#define XCHAL_HAVE_DCACHE_DYN_WAYS 0 /* Dcache dynamic way support */ + + + + +/**************************************************************************** + Parameters Useful for PRIVILEGED (Supervisory or Non-Virtualized) Code + ****************************************************************************/ + + +#ifndef XTENSA_HAL_NON_PRIVILEGED_ONLY + +/*---------------------------------------------------------------------- + CACHE + ----------------------------------------------------------------------*/ + +#define XCHAL_HAVE_PIF 1 /* any outbound PIF present */ +#define XCHAL_HAVE_AXI 0 /* AXI bus */ + +#define XCHAL_HAVE_PIF_WR_RESP 0 /* pif write response */ +#define XCHAL_HAVE_PIF_REQ_ATTR 0 /* pif attribute */ + +/* If present, cache size in bytes == (ways * 2^(linewidth + setwidth)). */ + +/* Number of cache sets in log2(lines per way): */ +#define XCHAL_ICACHE_SETWIDTH 0 +#define XCHAL_DCACHE_SETWIDTH 0 + +/* Cache set associativity (number of ways): */ +#define XCHAL_ICACHE_WAYS 1 +#define XCHAL_DCACHE_WAYS 1 + +/* Cache features: */ +#define XCHAL_ICACHE_LINE_LOCKABLE 0 +#define XCHAL_DCACHE_LINE_LOCKABLE 0 +#define XCHAL_ICACHE_ECC_PARITY 0 +#define XCHAL_DCACHE_ECC_PARITY 0 + +/* Cache access size in bytes (affects operation of SICW instruction): */ +#define XCHAL_ICACHE_ACCESS_SIZE 1 +#define XCHAL_DCACHE_ACCESS_SIZE 1 + +#define XCHAL_DCACHE_BANKS 0 /* number of banks */ + +/* Number of encoded cache attr bits (see for decoded bits): */ +#define XCHAL_CA_BITS 4 + + +/*---------------------------------------------------------------------- + INTERNAL I/D RAM/ROMs and XLMI + ----------------------------------------------------------------------*/ + +#define XCHAL_NUM_INSTROM 1 /* number of core instr. ROMs */ +#define XCHAL_NUM_INSTRAM 2 /* number of core instr. RAMs */ +#define XCHAL_NUM_DATAROM 1 /* number of core data ROMs */ +#define XCHAL_NUM_DATARAM 2 /* number of core data RAMs */ +#define XCHAL_NUM_URAM 0 /* number of core unified RAMs*/ +#define XCHAL_NUM_XLMI 1 /* number of core XLMI ports */ + +/* Instruction ROM 0: */ +#define XCHAL_INSTROM0_VADDR 0x40800000 /* virtual address */ +#define XCHAL_INSTROM0_PADDR 0x40800000 /* physical address */ +#define XCHAL_INSTROM0_SIZE 4194304 /* size in bytes */ +#define XCHAL_INSTROM0_ECC_PARITY 0 /* ECC/parity type, 0=none */ + +/* Instruction RAM 0: */ +#define XCHAL_INSTRAM0_VADDR 0x40000000 /* virtual address */ +#define XCHAL_INSTRAM0_PADDR 0x40000000 /* physical address */ +#define XCHAL_INSTRAM0_SIZE 4194304 /* size in bytes */ +#define XCHAL_INSTRAM0_ECC_PARITY 0 /* ECC/parity type, 0=none */ + +/* Instruction RAM 1: */ +#define XCHAL_INSTRAM1_VADDR 0x40400000 /* virtual address */ +#define XCHAL_INSTRAM1_PADDR 0x40400000 /* physical address */ +#define XCHAL_INSTRAM1_SIZE 4194304 /* size in bytes */ +#define XCHAL_INSTRAM1_ECC_PARITY 0 /* ECC/parity type, 0=none */ + +/* Data ROM 0: */ +#define XCHAL_DATAROM0_VADDR 0x3F400000 /* virtual address */ +#define XCHAL_DATAROM0_PADDR 0x3F400000 /* physical address */ +#define XCHAL_DATAROM0_SIZE 4194304 /* size in bytes */ +#define XCHAL_DATAROM0_ECC_PARITY 0 /* ECC/parity type, 0=none */ +#define XCHAL_DATAROM0_BANKS 1 /* number of banks */ + +/* Data RAM 0: */ +#define XCHAL_DATARAM0_VADDR 0x3FF80000 /* virtual address */ +#define XCHAL_DATARAM0_PADDR 0x3FF80000 /* physical address */ +#define XCHAL_DATARAM0_SIZE 524288 /* size in bytes */ +#define XCHAL_DATARAM0_ECC_PARITY 0 /* ECC/parity type, 0=none */ +#define XCHAL_DATARAM0_BANKS 1 /* number of banks */ + +/* Data RAM 1: */ +#define XCHAL_DATARAM1_VADDR 0x3F800000 /* virtual address */ +#define XCHAL_DATARAM1_PADDR 0x3F800000 /* physical address */ +#define XCHAL_DATARAM1_SIZE 4194304 /* size in bytes */ +#define XCHAL_DATARAM1_ECC_PARITY 0 /* ECC/parity type, 0=none */ +#define XCHAL_DATARAM1_BANKS 1 /* number of banks */ + +/* XLMI Port 0: */ +#define XCHAL_XLMI0_VADDR 0x3FF00000 /* virtual address */ +#define XCHAL_XLMI0_PADDR 0x3FF00000 /* physical address */ +#define XCHAL_XLMI0_SIZE 524288 /* size in bytes */ +#define XCHAL_XLMI0_ECC_PARITY 0 /* ECC/parity type, 0=none */ + +#define XCHAL_HAVE_IMEM_LOADSTORE 1 /* can load/store to IROM/IRAM*/ + + +/*---------------------------------------------------------------------- + INTERRUPTS and TIMERS + ----------------------------------------------------------------------*/ + +#define XCHAL_HAVE_INTERRUPTS 1 /* interrupt option */ +#define XCHAL_HAVE_HIGHPRI_INTERRUPTS 1 /* med/high-pri. interrupts */ +#define XCHAL_HAVE_NMI 1 /* non-maskable interrupt */ +#define XCHAL_HAVE_CCOUNT 1 /* CCOUNT reg. (timer option) */ +#define XCHAL_NUM_TIMERS 3 /* number of CCOMPAREn regs */ +#define XCHAL_NUM_INTERRUPTS 32 /* number of interrupts */ +#define XCHAL_NUM_INTERRUPTS_LOG2 5 /* ceil(log2(NUM_INTERRUPTS)) */ +#define XCHAL_NUM_EXTINTERRUPTS 26 /* num of external interrupts */ +#define XCHAL_NUM_INTLEVELS 6 /* number of interrupt levels + (not including level zero) */ +#define XCHAL_EXCM_LEVEL 3 /* level masked by PS.EXCM */ + /* (always 1 in XEA1; levels 2 .. EXCM_LEVEL are "medium priority") */ + +/* Masks of interrupts at each interrupt level: */ +#define XCHAL_INTLEVEL1_MASK 0x000637FF +#define XCHAL_INTLEVEL2_MASK 0x00380000 +#define XCHAL_INTLEVEL3_MASK 0x28C08800 +#define XCHAL_INTLEVEL4_MASK 0x53000000 +#define XCHAL_INTLEVEL5_MASK 0x84010000 +#define XCHAL_INTLEVEL6_MASK 0x00000000 +#define XCHAL_INTLEVEL7_MASK 0x00004000 + +/* Masks of interrupts at each range 1..n of interrupt levels: */ +#define XCHAL_INTLEVEL1_ANDBELOW_MASK 0x000637FF +#define XCHAL_INTLEVEL2_ANDBELOW_MASK 0x003E37FF +#define XCHAL_INTLEVEL3_ANDBELOW_MASK 0x28FEBFFF +#define XCHAL_INTLEVEL4_ANDBELOW_MASK 0x7BFEBFFF +#define XCHAL_INTLEVEL5_ANDBELOW_MASK 0xFFFFBFFF +#define XCHAL_INTLEVEL6_ANDBELOW_MASK 0xFFFFBFFF +#define XCHAL_INTLEVEL7_ANDBELOW_MASK 0xFFFFFFFF + +/* Level of each interrupt: */ +#define XCHAL_INT0_LEVEL 1 +#define XCHAL_INT1_LEVEL 1 +#define XCHAL_INT2_LEVEL 1 +#define XCHAL_INT3_LEVEL 1 +#define XCHAL_INT4_LEVEL 1 +#define XCHAL_INT5_LEVEL 1 +#define XCHAL_INT6_LEVEL 1 +#define XCHAL_INT7_LEVEL 1 +#define XCHAL_INT8_LEVEL 1 +#define XCHAL_INT9_LEVEL 1 +#define XCHAL_INT10_LEVEL 1 +#define XCHAL_INT11_LEVEL 3 +#define XCHAL_INT12_LEVEL 1 +#define XCHAL_INT13_LEVEL 1 +#define XCHAL_INT14_LEVEL 7 +#define XCHAL_INT15_LEVEL 3 +#define XCHAL_INT16_LEVEL 5 +#define XCHAL_INT17_LEVEL 1 +#define XCHAL_INT18_LEVEL 1 +#define XCHAL_INT19_LEVEL 2 +#define XCHAL_INT20_LEVEL 2 +#define XCHAL_INT21_LEVEL 2 +#define XCHAL_INT22_LEVEL 3 +#define XCHAL_INT23_LEVEL 3 +#define XCHAL_INT24_LEVEL 4 +#define XCHAL_INT25_LEVEL 4 +#define XCHAL_INT26_LEVEL 5 +#define XCHAL_INT27_LEVEL 3 +#define XCHAL_INT28_LEVEL 4 +#define XCHAL_INT29_LEVEL 3 +#define XCHAL_INT30_LEVEL 4 +#define XCHAL_INT31_LEVEL 5 +#define XCHAL_DEBUGLEVEL 6 /* debug interrupt level */ +#define XCHAL_HAVE_DEBUG_EXTERN_INT 1 /* OCD external db interrupt */ +#define XCHAL_NMILEVEL 7 /* NMI "level" (for use with + EXCSAVE/EPS/EPC_n, RFI n) */ + +/* Type of each interrupt: */ +#define XCHAL_INT0_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT1_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT2_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT3_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT4_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT5_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT6_TYPE XTHAL_INTTYPE_TIMER +#define XCHAL_INT7_TYPE XTHAL_INTTYPE_SOFTWARE +#define XCHAL_INT8_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT9_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT10_TYPE XTHAL_INTTYPE_EXTERN_EDGE +#define XCHAL_INT11_TYPE XTHAL_INTTYPE_PROFILING +#define XCHAL_INT12_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT13_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT14_TYPE XTHAL_INTTYPE_NMI +#define XCHAL_INT15_TYPE XTHAL_INTTYPE_TIMER +#define XCHAL_INT16_TYPE XTHAL_INTTYPE_TIMER +#define XCHAL_INT17_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT18_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT19_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT20_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT21_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT22_TYPE XTHAL_INTTYPE_EXTERN_EDGE +#define XCHAL_INT23_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT24_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT25_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT26_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT27_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT28_TYPE XTHAL_INTTYPE_EXTERN_EDGE +#define XCHAL_INT29_TYPE XTHAL_INTTYPE_SOFTWARE +#define XCHAL_INT30_TYPE XTHAL_INTTYPE_EXTERN_EDGE +#define XCHAL_INT31_TYPE XTHAL_INTTYPE_EXTERN_LEVEL + +/* Masks of interrupts for each type of interrupt: */ +#define XCHAL_INTTYPE_MASK_UNCONFIGURED 0x00000000 +#define XCHAL_INTTYPE_MASK_SOFTWARE 0x20000080 +#define XCHAL_INTTYPE_MASK_EXTERN_EDGE 0x50400400 +#define XCHAL_INTTYPE_MASK_EXTERN_LEVEL 0x8FBE333F +#define XCHAL_INTTYPE_MASK_TIMER 0x00018040 +#define XCHAL_INTTYPE_MASK_NMI 0x00004000 +#define XCHAL_INTTYPE_MASK_WRITE_ERROR 0x00000000 +#define XCHAL_INTTYPE_MASK_PROFILING 0x00000800 + +/* Interrupt numbers assigned to specific interrupt sources: */ +#define XCHAL_TIMER0_INTERRUPT 6 /* CCOMPARE0 */ +#define XCHAL_TIMER1_INTERRUPT 15 /* CCOMPARE1 */ +#define XCHAL_TIMER2_INTERRUPT 16 /* CCOMPARE2 */ +#define XCHAL_TIMER3_INTERRUPT XTHAL_TIMER_UNCONFIGURED +#define XCHAL_NMI_INTERRUPT 14 /* non-maskable interrupt */ +#define XCHAL_PROFILING_INTERRUPT 11 /* profiling interrupt */ + +/* Interrupt numbers for levels at which only one interrupt is configured: */ +#define XCHAL_INTLEVEL7_NUM 14 +/* (There are many interrupts each at level(s) 1, 2, 3, 4, 5.) */ + + +/* + * External interrupt mapping. + * These macros describe how Xtensa processor interrupt numbers + * (as numbered internally, eg. in INTERRUPT and INTENABLE registers) + * map to external BInterrupt pins, for those interrupts + * configured as external (level-triggered, edge-triggered, or NMI). + * See the Xtensa processor databook for more details. + */ + +/* Core interrupt numbers mapped to each EXTERNAL BInterrupt pin number: */ +#define XCHAL_EXTINT0_NUM 0 /* (intlevel 1) */ +#define XCHAL_EXTINT1_NUM 1 /* (intlevel 1) */ +#define XCHAL_EXTINT2_NUM 2 /* (intlevel 1) */ +#define XCHAL_EXTINT3_NUM 3 /* (intlevel 1) */ +#define XCHAL_EXTINT4_NUM 4 /* (intlevel 1) */ +#define XCHAL_EXTINT5_NUM 5 /* (intlevel 1) */ +#define XCHAL_EXTINT6_NUM 8 /* (intlevel 1) */ +#define XCHAL_EXTINT7_NUM 9 /* (intlevel 1) */ +#define XCHAL_EXTINT8_NUM 10 /* (intlevel 1) */ +#define XCHAL_EXTINT9_NUM 12 /* (intlevel 1) */ +#define XCHAL_EXTINT10_NUM 13 /* (intlevel 1) */ +#define XCHAL_EXTINT11_NUM 14 /* (intlevel 7) */ +#define XCHAL_EXTINT12_NUM 17 /* (intlevel 1) */ +#define XCHAL_EXTINT13_NUM 18 /* (intlevel 1) */ +#define XCHAL_EXTINT14_NUM 19 /* (intlevel 2) */ +#define XCHAL_EXTINT15_NUM 20 /* (intlevel 2) */ +#define XCHAL_EXTINT16_NUM 21 /* (intlevel 2) */ +#define XCHAL_EXTINT17_NUM 22 /* (intlevel 3) */ +#define XCHAL_EXTINT18_NUM 23 /* (intlevel 3) */ +#define XCHAL_EXTINT19_NUM 24 /* (intlevel 4) */ +#define XCHAL_EXTINT20_NUM 25 /* (intlevel 4) */ +#define XCHAL_EXTINT21_NUM 26 /* (intlevel 5) */ +#define XCHAL_EXTINT22_NUM 27 /* (intlevel 3) */ +#define XCHAL_EXTINT23_NUM 28 /* (intlevel 4) */ +#define XCHAL_EXTINT24_NUM 30 /* (intlevel 4) */ +#define XCHAL_EXTINT25_NUM 31 /* (intlevel 5) */ +/* EXTERNAL BInterrupt pin numbers mapped to each core interrupt number: */ +#define XCHAL_INT0_EXTNUM 0 /* (intlevel 1) */ +#define XCHAL_INT1_EXTNUM 1 /* (intlevel 1) */ +#define XCHAL_INT2_EXTNUM 2 /* (intlevel 1) */ +#define XCHAL_INT3_EXTNUM 3 /* (intlevel 1) */ +#define XCHAL_INT4_EXTNUM 4 /* (intlevel 1) */ +#define XCHAL_INT5_EXTNUM 5 /* (intlevel 1) */ +#define XCHAL_INT8_EXTNUM 6 /* (intlevel 1) */ +#define XCHAL_INT9_EXTNUM 7 /* (intlevel 1) */ +#define XCHAL_INT10_EXTNUM 8 /* (intlevel 1) */ +#define XCHAL_INT12_EXTNUM 9 /* (intlevel 1) */ +#define XCHAL_INT13_EXTNUM 10 /* (intlevel 1) */ +#define XCHAL_INT14_EXTNUM 11 /* (intlevel 7) */ +#define XCHAL_INT17_EXTNUM 12 /* (intlevel 1) */ +#define XCHAL_INT18_EXTNUM 13 /* (intlevel 1) */ +#define XCHAL_INT19_EXTNUM 14 /* (intlevel 2) */ +#define XCHAL_INT20_EXTNUM 15 /* (intlevel 2) */ +#define XCHAL_INT21_EXTNUM 16 /* (intlevel 2) */ +#define XCHAL_INT22_EXTNUM 17 /* (intlevel 3) */ +#define XCHAL_INT23_EXTNUM 18 /* (intlevel 3) */ +#define XCHAL_INT24_EXTNUM 19 /* (intlevel 4) */ +#define XCHAL_INT25_EXTNUM 20 /* (intlevel 4) */ +#define XCHAL_INT26_EXTNUM 21 /* (intlevel 5) */ +#define XCHAL_INT27_EXTNUM 22 /* (intlevel 3) */ +#define XCHAL_INT28_EXTNUM 23 /* (intlevel 4) */ +#define XCHAL_INT30_EXTNUM 24 /* (intlevel 4) */ +#define XCHAL_INT31_EXTNUM 25 /* (intlevel 5) */ + + +/*---------------------------------------------------------------------- + EXCEPTIONS and VECTORS + ----------------------------------------------------------------------*/ + +#define XCHAL_XEA_VERSION 2 /* Xtensa Exception Architecture + number: 1 == XEA1 (old) + 2 == XEA2 (new) + 0 == XEAX (extern) or TX */ +#define XCHAL_HAVE_XEA1 0 /* Exception Architecture 1 */ +#define XCHAL_HAVE_XEA2 1 /* Exception Architecture 2 */ +#define XCHAL_HAVE_XEAX 0 /* External Exception Arch. */ +#define XCHAL_HAVE_EXCEPTIONS 1 /* exception option */ +#define XCHAL_HAVE_HALT 0 /* halt architecture option */ +#define XCHAL_HAVE_BOOTLOADER 0 /* boot loader (for TX) */ +#define XCHAL_HAVE_MEM_ECC_PARITY 0 /* local memory ECC/parity */ +#define XCHAL_HAVE_VECTOR_SELECT 1 /* relocatable vectors */ +#define XCHAL_HAVE_VECBASE 1 /* relocatable vectors */ +#define XCHAL_VECBASE_RESET_VADDR 0x40000000 /* VECBASE reset value */ +#define XCHAL_VECBASE_RESET_PADDR 0x40000000 +#define XCHAL_RESET_VECBASE_OVERLAP 0 + +#define XCHAL_RESET_VECTOR0_VADDR 0x50000000 +#define XCHAL_RESET_VECTOR0_PADDR 0x50000000 +#define XCHAL_RESET_VECTOR1_VADDR 0x40000400 +#define XCHAL_RESET_VECTOR1_PADDR 0x40000400 +#define XCHAL_RESET_VECTOR_VADDR 0x40000400 +#define XCHAL_RESET_VECTOR_PADDR 0x40000400 +#define XCHAL_USER_VECOFS 0x00000340 +#define XCHAL_USER_VECTOR_VADDR 0x40000340 +#define XCHAL_USER_VECTOR_PADDR 0x40000340 +#define XCHAL_KERNEL_VECOFS 0x00000300 +#define XCHAL_KERNEL_VECTOR_VADDR 0x40000300 +#define XCHAL_KERNEL_VECTOR_PADDR 0x40000300 +#define XCHAL_DOUBLEEXC_VECOFS 0x000003C0 +#define XCHAL_DOUBLEEXC_VECTOR_VADDR 0x400003C0 +#define XCHAL_DOUBLEEXC_VECTOR_PADDR 0x400003C0 +#define XCHAL_WINDOW_OF4_VECOFS 0x00000000 +#define XCHAL_WINDOW_UF4_VECOFS 0x00000040 +#define XCHAL_WINDOW_OF8_VECOFS 0x00000080 +#define XCHAL_WINDOW_UF8_VECOFS 0x000000C0 +#define XCHAL_WINDOW_OF12_VECOFS 0x00000100 +#define XCHAL_WINDOW_UF12_VECOFS 0x00000140 +#define XCHAL_WINDOW_VECTORS_VADDR 0x40000000 +#define XCHAL_WINDOW_VECTORS_PADDR 0x40000000 +#define XCHAL_INTLEVEL2_VECOFS 0x00000180 +#define XCHAL_INTLEVEL2_VECTOR_VADDR 0x40000180 +#define XCHAL_INTLEVEL2_VECTOR_PADDR 0x40000180 +#define XCHAL_INTLEVEL3_VECOFS 0x000001C0 +#define XCHAL_INTLEVEL3_VECTOR_VADDR 0x400001C0 +#define XCHAL_INTLEVEL3_VECTOR_PADDR 0x400001C0 +#define XCHAL_INTLEVEL4_VECOFS 0x00000200 +#define XCHAL_INTLEVEL4_VECTOR_VADDR 0x40000200 +#define XCHAL_INTLEVEL4_VECTOR_PADDR 0x40000200 +#define XCHAL_INTLEVEL5_VECOFS 0x00000240 +#define XCHAL_INTLEVEL5_VECTOR_VADDR 0x40000240 +#define XCHAL_INTLEVEL5_VECTOR_PADDR 0x40000240 +#define XCHAL_INTLEVEL6_VECOFS 0x00000280 +#define XCHAL_INTLEVEL6_VECTOR_VADDR 0x40000280 +#define XCHAL_INTLEVEL6_VECTOR_PADDR 0x40000280 +#define XCHAL_DEBUG_VECOFS XCHAL_INTLEVEL6_VECOFS +#define XCHAL_DEBUG_VECTOR_VADDR XCHAL_INTLEVEL6_VECTOR_VADDR +#define XCHAL_DEBUG_VECTOR_PADDR XCHAL_INTLEVEL6_VECTOR_PADDR +#define XCHAL_NMI_VECOFS 0x000002C0 +#define XCHAL_NMI_VECTOR_VADDR 0x400002C0 +#define XCHAL_NMI_VECTOR_PADDR 0x400002C0 +#define XCHAL_INTLEVEL7_VECOFS XCHAL_NMI_VECOFS +#define XCHAL_INTLEVEL7_VECTOR_VADDR XCHAL_NMI_VECTOR_VADDR +#define XCHAL_INTLEVEL7_VECTOR_PADDR XCHAL_NMI_VECTOR_PADDR + + +/*---------------------------------------------------------------------- + DEBUG MODULE + ----------------------------------------------------------------------*/ + +/* Misc */ +#define XCHAL_HAVE_DEBUG_ERI 1 /* ERI to debug module */ +#define XCHAL_HAVE_DEBUG_APB 1 /* APB to debug module */ +#define XCHAL_HAVE_DEBUG_JTAG 1 /* JTAG to debug module */ + +/* On-Chip Debug (OCD) */ +#define XCHAL_HAVE_OCD 1 /* OnChipDebug option */ +#define XCHAL_NUM_IBREAK 2 /* number of IBREAKn regs */ +#define XCHAL_NUM_DBREAK 2 /* number of DBREAKn regs */ +#define XCHAL_HAVE_OCD_DIR_ARRAY 0 /* faster OCD option (to LX4) */ +#define XCHAL_HAVE_OCD_LS32DDR 1 /* L32DDR/S32DDR (faster OCD) */ + +/* TRAX (in core) */ +#define XCHAL_HAVE_TRAX 1 /* TRAX in debug module */ +#define XCHAL_TRAX_MEM_SIZE 16384 /* TRAX memory size in bytes */ +#define XCHAL_TRAX_MEM_SHAREABLE 1 /* start/end regs; ready sig. */ +#define XCHAL_TRAX_ATB_WIDTH 32 /* ATB width (bits), 0=no ATB */ +#define XCHAL_TRAX_TIME_WIDTH 0 /* timestamp bitwidth, 0=none */ + +/* Perf counters */ +#define XCHAL_NUM_PERF_COUNTERS 2 /* performance counters */ + + +/*---------------------------------------------------------------------- + MMU + ----------------------------------------------------------------------*/ + +/* See core-matmap.h header file for more details. */ + +#define XCHAL_HAVE_TLBS 1 /* inverse of HAVE_CACHEATTR */ +#define XCHAL_HAVE_SPANNING_WAY 1 /* one way maps I+D 4GB vaddr */ +#define XCHAL_SPANNING_WAY 0 /* TLB spanning way number */ +#define XCHAL_HAVE_IDENTITY_MAP 1 /* vaddr == paddr always */ +#define XCHAL_HAVE_CACHEATTR 0 /* CACHEATTR register present */ +#define XCHAL_HAVE_MIMIC_CACHEATTR 1 /* region protection */ +#define XCHAL_HAVE_XLT_CACHEATTR 0 /* region prot. w/translation */ +#define XCHAL_HAVE_PTP_MMU 0 /* full MMU (with page table + [autorefill] and protection) + usable for an MMU-based OS */ +/* If none of the above last 4 are set, it's a custom TLB configuration. */ + +#define XCHAL_MMU_ASID_BITS 0 /* number of bits in ASIDs */ +#define XCHAL_MMU_RINGS 1 /* number of rings (1..4) */ +#define XCHAL_MMU_RING_BITS 0 /* num of bits in RING field */ + +#endif /* !XTENSA_HAL_NON_PRIVILEGED_ONLY */ + + +#endif /* _XTENSA_CORE_CONFIGURATION_H */ + diff --git a/tools/sdk/include/esp32/xtensa/config/core-matmap.h b/tools/sdk/include/esp32/xtensa/config/core-matmap.h new file mode 100644 index 00000000..b101f1e6 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/config/core-matmap.h @@ -0,0 +1,318 @@ +/* + * xtensa/config/core-matmap.h -- Memory access and translation mapping + * parameters (CHAL) of the Xtensa processor core configuration. + * + * If you are using Xtensa Tools, see (which includes + * this file) for more details. + * + * In the Xtensa processor products released to date, all parameters + * defined in this file are derivable (at least in theory) from + * information contained in the core-isa.h header file. + * In particular, the following core configuration parameters are relevant: + * XCHAL_HAVE_CACHEATTR + * XCHAL_HAVE_MIMIC_CACHEATTR + * XCHAL_HAVE_XLT_CACHEATTR + * XCHAL_HAVE_PTP_MMU + * XCHAL_ITLB_ARF_ENTRIES_LOG2 + * XCHAL_DTLB_ARF_ENTRIES_LOG2 + * XCHAL_DCACHE_IS_WRITEBACK + * XCHAL_ICACHE_SIZE (presence of I-cache) + * XCHAL_DCACHE_SIZE (presence of D-cache) + * XCHAL_HW_VERSION_MAJOR + * XCHAL_HW_VERSION_MINOR + */ + +/* Customer ID=11657; Build=0x5fe96; Copyright (c) 1999-2016 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + + +#ifndef XTENSA_CONFIG_CORE_MATMAP_H +#define XTENSA_CONFIG_CORE_MATMAP_H + + +/*---------------------------------------------------------------------- + CACHE (MEMORY ACCESS) ATTRIBUTES + ----------------------------------------------------------------------*/ + + +/* Cache Attribute encodings -- lists of access modes for each cache attribute: */ +#define XCHAL_FCA_LIST XTHAL_FAM_EXCEPTION XCHAL_SEP \ + XTHAL_FAM_BYPASS XCHAL_SEP \ + XTHAL_FAM_BYPASS XCHAL_SEP \ + XTHAL_FAM_BYPASS XCHAL_SEP \ + XTHAL_FAM_BYPASS XCHAL_SEP \ + XTHAL_FAM_BYPASS XCHAL_SEP \ + XTHAL_FAM_BYPASS XCHAL_SEP \ + XTHAL_FAM_EXCEPTION XCHAL_SEP \ + XTHAL_FAM_EXCEPTION XCHAL_SEP \ + XTHAL_FAM_EXCEPTION XCHAL_SEP \ + XTHAL_FAM_EXCEPTION XCHAL_SEP \ + XTHAL_FAM_EXCEPTION XCHAL_SEP \ + XTHAL_FAM_EXCEPTION XCHAL_SEP \ + XTHAL_FAM_EXCEPTION XCHAL_SEP \ + XTHAL_FAM_EXCEPTION XCHAL_SEP \ + XTHAL_FAM_EXCEPTION +#define XCHAL_LCA_LIST XTHAL_LAM_BYPASSG XCHAL_SEP \ + XTHAL_LAM_BYPASSG XCHAL_SEP \ + XTHAL_LAM_BYPASSG XCHAL_SEP \ + XTHAL_LAM_EXCEPTION XCHAL_SEP \ + XTHAL_LAM_BYPASSG XCHAL_SEP \ + XTHAL_LAM_BYPASSG XCHAL_SEP \ + XTHAL_LAM_BYPASSG XCHAL_SEP \ + XTHAL_LAM_EXCEPTION XCHAL_SEP \ + XTHAL_LAM_EXCEPTION XCHAL_SEP \ + XTHAL_LAM_EXCEPTION XCHAL_SEP \ + XTHAL_LAM_EXCEPTION XCHAL_SEP \ + XTHAL_LAM_EXCEPTION XCHAL_SEP \ + XTHAL_LAM_EXCEPTION XCHAL_SEP \ + XTHAL_LAM_EXCEPTION XCHAL_SEP \ + XTHAL_LAM_BYPASSG XCHAL_SEP \ + XTHAL_LAM_EXCEPTION +#define XCHAL_SCA_LIST XTHAL_SAM_BYPASS XCHAL_SEP \ + XTHAL_SAM_BYPASS XCHAL_SEP \ + XTHAL_SAM_BYPASS XCHAL_SEP \ + XTHAL_SAM_EXCEPTION XCHAL_SEP \ + XTHAL_SAM_BYPASS XCHAL_SEP \ + XTHAL_SAM_BYPASS XCHAL_SEP \ + XTHAL_SAM_BYPASS XCHAL_SEP \ + XTHAL_SAM_EXCEPTION XCHAL_SEP \ + XTHAL_SAM_EXCEPTION XCHAL_SEP \ + XTHAL_SAM_EXCEPTION XCHAL_SEP \ + XTHAL_SAM_EXCEPTION XCHAL_SEP \ + XTHAL_SAM_EXCEPTION XCHAL_SEP \ + XTHAL_SAM_EXCEPTION XCHAL_SEP \ + XTHAL_SAM_EXCEPTION XCHAL_SEP \ + XTHAL_SAM_BYPASS XCHAL_SEP \ + XTHAL_SAM_EXCEPTION + + +/* + * Specific encoded cache attribute values of general interest. + * If a specific cache mode is not available, the closest available + * one is returned instead (eg. writethru instead of writeback, + * bypass instead of writethru). + */ +#define XCHAL_CA_BYPASS 2 /* cache disabled (bypassed) mode */ +#define XCHAL_CA_BYPASSBUF 6 /* cache disabled (bypassed) bufferable mode */ +#define XCHAL_CA_WRITETHRU 2 /* cache enabled (write-through) mode */ +#define XCHAL_CA_WRITEBACK 2 /* cache enabled (write-back) mode */ +#define XCHAL_HAVE_CA_WRITEBACK_NOALLOC 0 /* write-back no-allocate availability */ +#define XCHAL_CA_WRITEBACK_NOALLOC 2 /* cache enabled (write-back no-allocate) mode */ +#define XCHAL_CA_BYPASS_RW 0 /* cache disabled (bypassed) mode (no exec) */ +#define XCHAL_CA_WRITETHRU_RW 0 /* cache enabled (write-through) mode (no exec) */ +#define XCHAL_CA_WRITEBACK_RW 0 /* cache enabled (write-back) mode (no exec) */ +#define XCHAL_CA_WRITEBACK_NOALLOC_RW 0 /* cache enabled (write-back no-allocate) mode (no exec) */ +#define XCHAL_CA_ILLEGAL 15 /* no access allowed (all cause exceptions) mode */ +#define XCHAL_CA_ISOLATE 0 /* cache isolate (accesses go to cache not memory) mode */ + + +/*---------------------------------------------------------------------- + MMU + ----------------------------------------------------------------------*/ + +/* + * General notes on MMU parameters. + * + * Terminology: + * ASID = address-space ID (acts as an "extension" of virtual addresses) + * VPN = virtual page number + * PPN = physical page number + * CA = encoded cache attribute (access modes) + * TLB = translation look-aside buffer (term is stretched somewhat here) + * I = instruction (fetch accesses) + * D = data (load and store accesses) + * way = each TLB (ITLB and DTLB) consists of a number of "ways" + * that simultaneously match the virtual address of an access; + * a TLB successfully translates a virtual address if exactly + * one way matches the vaddr; if none match, it is a miss; + * if multiple match, one gets a "multihit" exception; + * each way can be independently configured in terms of number of + * entries, page sizes, which fields are writable or constant, etc. + * set = group of contiguous ways with exactly identical parameters + * ARF = auto-refill; hardware services a 1st-level miss by loading a PTE + * from the page table and storing it in one of the auto-refill ways; + * if this PTE load also misses, a miss exception is posted for s/w. + * min-wired = a "min-wired" way can be used to map a single (minimum-sized) + * page arbitrarily under program control; it has a single entry, + * is non-auto-refill (some other way(s) must be auto-refill), + * all its fields (VPN, PPN, ASID, CA) are all writable, and it + * supports the XCHAL_MMU_MIN_PTE_PAGE_SIZE page size (a current + * restriction is that this be the only page size it supports). + * + * TLB way entries are virtually indexed. + * TLB ways that support multiple page sizes: + * - must have all writable VPN and PPN fields; + * - can only use one page size at any given time (eg. setup at startup), + * selected by the respective ITLBCFG or DTLBCFG special register, + * whose bits n*4+3 .. n*4 index the list of page sizes for way n + * (XCHAL_xTLB_SETm_PAGESZ_LOG2_LIST for set m corresponding to way n); + * this list may be sparse for auto-refill ways because auto-refill + * ways have independent lists of supported page sizes sharing a + * common encoding with PTE entries; the encoding is the index into + * this list; unsupported sizes for a given way are zero in the list; + * selecting unsupported sizes results in undefined hardware behaviour; + * - is only possible for ways 0 thru 7 (due to ITLBCFG/DTLBCFG definition). + */ + +#define XCHAL_MMU_ASID_INVALID 0 /* ASID value indicating invalid address space */ +#define XCHAL_MMU_ASID_KERNEL 0 /* ASID value indicating kernel (ring 0) address space */ +#define XCHAL_MMU_SR_BITS 0 /* number of size-restriction bits supported */ +#define XCHAL_MMU_CA_BITS 4 /* number of bits needed to hold cache attribute encoding */ +#define XCHAL_MMU_MAX_PTE_PAGE_SIZE 29 /* max page size in a PTE structure (log2) */ +#define XCHAL_MMU_MIN_PTE_PAGE_SIZE 29 /* min page size in a PTE structure (log2) */ + + +/*** Instruction TLB: ***/ + +#define XCHAL_ITLB_WAY_BITS 0 /* number of bits holding the ways */ +#define XCHAL_ITLB_WAYS 1 /* number of ways (n-way set-associative TLB) */ +#define XCHAL_ITLB_ARF_WAYS 0 /* number of auto-refill ways */ +#define XCHAL_ITLB_SETS 1 /* number of sets (groups of ways with identical settings) */ + +/* Way set to which each way belongs: */ +#define XCHAL_ITLB_WAY0_SET 0 + +/* Ways sets that are used by hardware auto-refill (ARF): */ +#define XCHAL_ITLB_ARF_SETS 0 /* number of auto-refill sets */ + +/* Way sets that are "min-wired" (see terminology comment above): */ +#define XCHAL_ITLB_MINWIRED_SETS 0 /* number of "min-wired" sets */ + + +/* ITLB way set 0 (group of ways 0 thru 0): */ +#define XCHAL_ITLB_SET0_WAY 0 /* index of first way in this way set */ +#define XCHAL_ITLB_SET0_WAYS 1 /* number of (contiguous) ways in this way set */ +#define XCHAL_ITLB_SET0_ENTRIES_LOG2 3 /* log2(number of entries in this way) */ +#define XCHAL_ITLB_SET0_ENTRIES 8 /* number of entries in this way (always a power of 2) */ +#define XCHAL_ITLB_SET0_ARF 0 /* 1=autorefill by h/w, 0=non-autorefill (wired/constant/static) */ +#define XCHAL_ITLB_SET0_PAGESIZES 1 /* number of supported page sizes in this way */ +#define XCHAL_ITLB_SET0_PAGESZ_BITS 0 /* number of bits to encode the page size */ +#define XCHAL_ITLB_SET0_PAGESZ_LOG2_MIN 29 /* log2(minimum supported page size) */ +#define XCHAL_ITLB_SET0_PAGESZ_LOG2_MAX 29 /* log2(maximum supported page size) */ +#define XCHAL_ITLB_SET0_PAGESZ_LOG2_LIST 29 /* list of log2(page size)s, separated by XCHAL_SEP; + 2^PAGESZ_BITS entries in list, unsupported entries are zero */ +#define XCHAL_ITLB_SET0_ASID_CONSTMASK 0 /* constant ASID bits; 0 if all writable */ +#define XCHAL_ITLB_SET0_VPN_CONSTMASK 0x00000000 /* constant VPN bits, not including entry index bits; 0 if all writable */ +#define XCHAL_ITLB_SET0_PPN_CONSTMASK 0xE0000000 /* constant PPN bits, including entry index bits; 0 if all writable */ +#define XCHAL_ITLB_SET0_CA_CONSTMASK 0 /* constant CA bits; 0 if all writable */ +#define XCHAL_ITLB_SET0_ASID_RESET 0 /* 1 if ASID reset values defined (and all writable); 0 otherwise */ +#define XCHAL_ITLB_SET0_VPN_RESET 0 /* 1 if VPN reset values defined (and all writable); 0 otherwise */ +#define XCHAL_ITLB_SET0_PPN_RESET 0 /* 1 if PPN reset values defined (and all writable); 0 otherwise */ +#define XCHAL_ITLB_SET0_CA_RESET 1 /* 1 if CA reset values defined (and all writable); 0 otherwise */ +/* Constant VPN values for each entry of ITLB way set 0 (because VPN_CONSTMASK is non-zero): */ +#define XCHAL_ITLB_SET0_E0_VPN_CONST 0x00000000 +#define XCHAL_ITLB_SET0_E1_VPN_CONST 0x20000000 +#define XCHAL_ITLB_SET0_E2_VPN_CONST 0x40000000 +#define XCHAL_ITLB_SET0_E3_VPN_CONST 0x60000000 +#define XCHAL_ITLB_SET0_E4_VPN_CONST 0x80000000 +#define XCHAL_ITLB_SET0_E5_VPN_CONST 0xA0000000 +#define XCHAL_ITLB_SET0_E6_VPN_CONST 0xC0000000 +#define XCHAL_ITLB_SET0_E7_VPN_CONST 0xE0000000 +/* Constant PPN values for each entry of ITLB way set 0 (because PPN_CONSTMASK is non-zero): */ +#define XCHAL_ITLB_SET0_E0_PPN_CONST 0x00000000 +#define XCHAL_ITLB_SET0_E1_PPN_CONST 0x20000000 +#define XCHAL_ITLB_SET0_E2_PPN_CONST 0x40000000 +#define XCHAL_ITLB_SET0_E3_PPN_CONST 0x60000000 +#define XCHAL_ITLB_SET0_E4_PPN_CONST 0x80000000 +#define XCHAL_ITLB_SET0_E5_PPN_CONST 0xA0000000 +#define XCHAL_ITLB_SET0_E6_PPN_CONST 0xC0000000 +#define XCHAL_ITLB_SET0_E7_PPN_CONST 0xE0000000 +/* Reset CA values for each entry of ITLB way set 0 (because SET0_CA_RESET is non-zero): */ +#define XCHAL_ITLB_SET0_E0_CA_RESET 0x02 +#define XCHAL_ITLB_SET0_E1_CA_RESET 0x02 +#define XCHAL_ITLB_SET0_E2_CA_RESET 0x02 +#define XCHAL_ITLB_SET0_E3_CA_RESET 0x02 +#define XCHAL_ITLB_SET0_E4_CA_RESET 0x02 +#define XCHAL_ITLB_SET0_E5_CA_RESET 0x02 +#define XCHAL_ITLB_SET0_E6_CA_RESET 0x02 +#define XCHAL_ITLB_SET0_E7_CA_RESET 0x02 + + +/*** Data TLB: ***/ + +#define XCHAL_DTLB_WAY_BITS 0 /* number of bits holding the ways */ +#define XCHAL_DTLB_WAYS 1 /* number of ways (n-way set-associative TLB) */ +#define XCHAL_DTLB_ARF_WAYS 0 /* number of auto-refill ways */ +#define XCHAL_DTLB_SETS 1 /* number of sets (groups of ways with identical settings) */ + +/* Way set to which each way belongs: */ +#define XCHAL_DTLB_WAY0_SET 0 + +/* Ways sets that are used by hardware auto-refill (ARF): */ +#define XCHAL_DTLB_ARF_SETS 0 /* number of auto-refill sets */ + +/* Way sets that are "min-wired" (see terminology comment above): */ +#define XCHAL_DTLB_MINWIRED_SETS 0 /* number of "min-wired" sets */ + + +/* DTLB way set 0 (group of ways 0 thru 0): */ +#define XCHAL_DTLB_SET0_WAY 0 /* index of first way in this way set */ +#define XCHAL_DTLB_SET0_WAYS 1 /* number of (contiguous) ways in this way set */ +#define XCHAL_DTLB_SET0_ENTRIES_LOG2 3 /* log2(number of entries in this way) */ +#define XCHAL_DTLB_SET0_ENTRIES 8 /* number of entries in this way (always a power of 2) */ +#define XCHAL_DTLB_SET0_ARF 0 /* 1=autorefill by h/w, 0=non-autorefill (wired/constant/static) */ +#define XCHAL_DTLB_SET0_PAGESIZES 1 /* number of supported page sizes in this way */ +#define XCHAL_DTLB_SET0_PAGESZ_BITS 0 /* number of bits to encode the page size */ +#define XCHAL_DTLB_SET0_PAGESZ_LOG2_MIN 29 /* log2(minimum supported page size) */ +#define XCHAL_DTLB_SET0_PAGESZ_LOG2_MAX 29 /* log2(maximum supported page size) */ +#define XCHAL_DTLB_SET0_PAGESZ_LOG2_LIST 29 /* list of log2(page size)s, separated by XCHAL_SEP; + 2^PAGESZ_BITS entries in list, unsupported entries are zero */ +#define XCHAL_DTLB_SET0_ASID_CONSTMASK 0 /* constant ASID bits; 0 if all writable */ +#define XCHAL_DTLB_SET0_VPN_CONSTMASK 0x00000000 /* constant VPN bits, not including entry index bits; 0 if all writable */ +#define XCHAL_DTLB_SET0_PPN_CONSTMASK 0xE0000000 /* constant PPN bits, including entry index bits; 0 if all writable */ +#define XCHAL_DTLB_SET0_CA_CONSTMASK 0 /* constant CA bits; 0 if all writable */ +#define XCHAL_DTLB_SET0_ASID_RESET 0 /* 1 if ASID reset values defined (and all writable); 0 otherwise */ +#define XCHAL_DTLB_SET0_VPN_RESET 0 /* 1 if VPN reset values defined (and all writable); 0 otherwise */ +#define XCHAL_DTLB_SET0_PPN_RESET 0 /* 1 if PPN reset values defined (and all writable); 0 otherwise */ +#define XCHAL_DTLB_SET0_CA_RESET 1 /* 1 if CA reset values defined (and all writable); 0 otherwise */ +/* Constant VPN values for each entry of DTLB way set 0 (because VPN_CONSTMASK is non-zero): */ +#define XCHAL_DTLB_SET0_E0_VPN_CONST 0x00000000 +#define XCHAL_DTLB_SET0_E1_VPN_CONST 0x20000000 +#define XCHAL_DTLB_SET0_E2_VPN_CONST 0x40000000 +#define XCHAL_DTLB_SET0_E3_VPN_CONST 0x60000000 +#define XCHAL_DTLB_SET0_E4_VPN_CONST 0x80000000 +#define XCHAL_DTLB_SET0_E5_VPN_CONST 0xA0000000 +#define XCHAL_DTLB_SET0_E6_VPN_CONST 0xC0000000 +#define XCHAL_DTLB_SET0_E7_VPN_CONST 0xE0000000 +/* Constant PPN values for each entry of DTLB way set 0 (because PPN_CONSTMASK is non-zero): */ +#define XCHAL_DTLB_SET0_E0_PPN_CONST 0x00000000 +#define XCHAL_DTLB_SET0_E1_PPN_CONST 0x20000000 +#define XCHAL_DTLB_SET0_E2_PPN_CONST 0x40000000 +#define XCHAL_DTLB_SET0_E3_PPN_CONST 0x60000000 +#define XCHAL_DTLB_SET0_E4_PPN_CONST 0x80000000 +#define XCHAL_DTLB_SET0_E5_PPN_CONST 0xA0000000 +#define XCHAL_DTLB_SET0_E6_PPN_CONST 0xC0000000 +#define XCHAL_DTLB_SET0_E7_PPN_CONST 0xE0000000 +/* Reset CA values for each entry of DTLB way set 0 (because SET0_CA_RESET is non-zero): */ +#define XCHAL_DTLB_SET0_E0_CA_RESET 0x02 +#define XCHAL_DTLB_SET0_E1_CA_RESET 0x02 +#define XCHAL_DTLB_SET0_E2_CA_RESET 0x02 +#define XCHAL_DTLB_SET0_E3_CA_RESET 0x02 +#define XCHAL_DTLB_SET0_E4_CA_RESET 0x02 +#define XCHAL_DTLB_SET0_E5_CA_RESET 0x02 +#define XCHAL_DTLB_SET0_E6_CA_RESET 0x02 +#define XCHAL_DTLB_SET0_E7_CA_RESET 0x02 + + + + +#endif /*XTENSA_CONFIG_CORE_MATMAP_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/config/core.h b/tools/sdk/include/esp32/xtensa/config/core.h new file mode 100644 index 00000000..98f1b196 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/config/core.h @@ -0,0 +1,1405 @@ +/* + * xtensa/config/core.h -- HAL definitions dependent on CORE configuration + * + * This header file is sometimes referred to as the "compile-time HAL" or CHAL. + * It pulls definitions tailored for a specific Xtensa processor configuration. + * + * Sources for binaries meant to be configuration-independent generally avoid + * including this file (they may use the configuration-specific HAL library). + * It is normal for the HAL library source itself to include this file. + */ + +/* + * Copyright (c) 2005-2014 Cadence Design Systems, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef XTENSA_CONFIG_CORE_H +#define XTENSA_CONFIG_CORE_H + +/* CONFIGURATION INDEPENDENT DEFINITIONS: */ +#ifdef __XTENSA__ +#include +#include +#else +#include "../hal.h" +#include "../xtensa-versions.h" +#endif + +/* CONFIGURATION SPECIFIC DEFINITIONS: */ +#ifdef __XTENSA__ +#include +#include +#include +#else +#include "core-isa.h" +#include "core-matmap.h" +#include "tie.h" +#endif + +#if defined (_ASMLANGUAGE) || defined (__ASSEMBLER__) +#ifdef __XTENSA__ +#include +#else +#include "tie-asm.h" +#endif +#endif /*_ASMLANGUAGE or __ASSEMBLER__*/ + + +/*---------------------------------------------------------------------- + GENERAL + ----------------------------------------------------------------------*/ + +/* + * Separators for macros that expand into arrays. + * These can be predefined by files that #include this one, + * when different separators are required. + */ +/* Element separator for macros that expand into 1-dimensional arrays: */ +#ifndef XCHAL_SEP +#define XCHAL_SEP , +#endif +/* Array separator for macros that expand into 2-dimensional arrays: */ +#ifndef XCHAL_SEP2 +#define XCHAL_SEP2 },{ +#endif + + + +/*---------------------------------------------------------------------- + ISA + ----------------------------------------------------------------------*/ + +#if XCHAL_HAVE_BE +# define XCHAL_HAVE_LE 0 +# define XCHAL_MEMORY_ORDER XTHAL_BIGENDIAN +#else +# define XCHAL_HAVE_LE 1 +# define XCHAL_MEMORY_ORDER XTHAL_LITTLEENDIAN +#endif + + + +/*---------------------------------------------------------------------- + INTERRUPTS + ----------------------------------------------------------------------*/ + +/* Indexing macros: */ +#define _XCHAL_INTLEVEL_MASK(n) XCHAL_INTLEVEL ## n ## _MASK +#define XCHAL_INTLEVEL_MASK(n) _XCHAL_INTLEVEL_MASK(n) /* n = 0 .. 15 */ +#define _XCHAL_INTLEVEL_ANDBELOWMASK(n) XCHAL_INTLEVEL ## n ## _ANDBELOW_MASK +#define XCHAL_INTLEVEL_ANDBELOW_MASK(n) _XCHAL_INTLEVEL_ANDBELOWMASK(n) /* n = 0 .. 15 */ +#define _XCHAL_INTLEVEL_NUM(n) XCHAL_INTLEVEL ## n ## _NUM +#define XCHAL_INTLEVEL_NUM(n) _XCHAL_INTLEVEL_NUM(n) /* n = 0 .. 15 */ +#define _XCHAL_INT_LEVEL(n) XCHAL_INT ## n ## _LEVEL +#define XCHAL_INT_LEVEL(n) _XCHAL_INT_LEVEL(n) /* n = 0 .. 31 */ +#define _XCHAL_INT_TYPE(n) XCHAL_INT ## n ## _TYPE +#define XCHAL_INT_TYPE(n) _XCHAL_INT_TYPE(n) /* n = 0 .. 31 */ +#define _XCHAL_TIMER_INTERRUPT(n) XCHAL_TIMER ## n ## _INTERRUPT +#define XCHAL_TIMER_INTERRUPT(n) _XCHAL_TIMER_INTERRUPT(n) /* n = 0 .. 3 */ + + +#define XCHAL_HAVE_HIGHLEVEL_INTERRUPTS XCHAL_HAVE_HIGHPRI_INTERRUPTS +#define XCHAL_NUM_LOWPRI_LEVELS 1 /* number of low-priority interrupt levels (always 1) */ +#define XCHAL_FIRST_HIGHPRI_LEVEL (XCHAL_NUM_LOWPRI_LEVELS+1) /* level of first high-priority interrupt (always 2) */ +/* Note: 1 <= LOWPRI_LEVELS <= EXCM_LEVEL < DEBUGLEVEL <= NUM_INTLEVELS < NMILEVEL <= 15 */ + +/* These values are constant for existing Xtensa processor implementations: */ +#define XCHAL_INTLEVEL0_MASK 0x00000000 +#define XCHAL_INTLEVEL8_MASK 0x00000000 +#define XCHAL_INTLEVEL9_MASK 0x00000000 +#define XCHAL_INTLEVEL10_MASK 0x00000000 +#define XCHAL_INTLEVEL11_MASK 0x00000000 +#define XCHAL_INTLEVEL12_MASK 0x00000000 +#define XCHAL_INTLEVEL13_MASK 0x00000000 +#define XCHAL_INTLEVEL14_MASK 0x00000000 +#define XCHAL_INTLEVEL15_MASK 0x00000000 + +/* Array of masks of interrupts at each interrupt level: */ +#define XCHAL_INTLEVEL_MASKS XCHAL_INTLEVEL0_MASK \ + XCHAL_SEP XCHAL_INTLEVEL1_MASK \ + XCHAL_SEP XCHAL_INTLEVEL2_MASK \ + XCHAL_SEP XCHAL_INTLEVEL3_MASK \ + XCHAL_SEP XCHAL_INTLEVEL4_MASK \ + XCHAL_SEP XCHAL_INTLEVEL5_MASK \ + XCHAL_SEP XCHAL_INTLEVEL6_MASK \ + XCHAL_SEP XCHAL_INTLEVEL7_MASK \ + XCHAL_SEP XCHAL_INTLEVEL8_MASK \ + XCHAL_SEP XCHAL_INTLEVEL9_MASK \ + XCHAL_SEP XCHAL_INTLEVEL10_MASK \ + XCHAL_SEP XCHAL_INTLEVEL11_MASK \ + XCHAL_SEP XCHAL_INTLEVEL12_MASK \ + XCHAL_SEP XCHAL_INTLEVEL13_MASK \ + XCHAL_SEP XCHAL_INTLEVEL14_MASK \ + XCHAL_SEP XCHAL_INTLEVEL15_MASK + +/* These values are constant for existing Xtensa processor implementations: */ +#define XCHAL_INTLEVEL0_ANDBELOW_MASK 0x00000000 +#define XCHAL_INTLEVEL8_ANDBELOW_MASK XCHAL_INTLEVEL7_ANDBELOW_MASK +#define XCHAL_INTLEVEL9_ANDBELOW_MASK XCHAL_INTLEVEL7_ANDBELOW_MASK +#define XCHAL_INTLEVEL10_ANDBELOW_MASK XCHAL_INTLEVEL7_ANDBELOW_MASK +#define XCHAL_INTLEVEL11_ANDBELOW_MASK XCHAL_INTLEVEL7_ANDBELOW_MASK +#define XCHAL_INTLEVEL12_ANDBELOW_MASK XCHAL_INTLEVEL7_ANDBELOW_MASK +#define XCHAL_INTLEVEL13_ANDBELOW_MASK XCHAL_INTLEVEL7_ANDBELOW_MASK +#define XCHAL_INTLEVEL14_ANDBELOW_MASK XCHAL_INTLEVEL7_ANDBELOW_MASK +#define XCHAL_INTLEVEL15_ANDBELOW_MASK XCHAL_INTLEVEL7_ANDBELOW_MASK + +/* Mask of all low-priority interrupts: */ +#define XCHAL_LOWPRI_MASK XCHAL_INTLEVEL1_ANDBELOW_MASK + +/* Mask of all interrupts masked by PS.EXCM (or CEXCM): */ +#define XCHAL_EXCM_MASK XCHAL_INTLEVEL_ANDBELOW_MASK(XCHAL_EXCM_LEVEL) + +/* Array of masks of interrupts at each range 1..n of interrupt levels: */ +#define XCHAL_INTLEVEL_ANDBELOW_MASKS XCHAL_INTLEVEL0_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL1_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL2_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL3_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL4_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL5_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL6_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL7_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL8_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL9_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL10_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL11_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL12_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL13_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL14_ANDBELOW_MASK \ + XCHAL_SEP XCHAL_INTLEVEL15_ANDBELOW_MASK + +#if 0 /*XCHAL_HAVE_NMI*/ +/* NMI "interrupt level" (for use with EXCSAVE_n, EPS_n, EPC_n, RFI n): */ +# define XCHAL_NMILEVEL (XCHAL_NUM_INTLEVELS+1) +#endif + +/* Array of levels of each possible interrupt: */ +#define XCHAL_INT_LEVELS XCHAL_INT0_LEVEL \ + XCHAL_SEP XCHAL_INT1_LEVEL \ + XCHAL_SEP XCHAL_INT2_LEVEL \ + XCHAL_SEP XCHAL_INT3_LEVEL \ + XCHAL_SEP XCHAL_INT4_LEVEL \ + XCHAL_SEP XCHAL_INT5_LEVEL \ + XCHAL_SEP XCHAL_INT6_LEVEL \ + XCHAL_SEP XCHAL_INT7_LEVEL \ + XCHAL_SEP XCHAL_INT8_LEVEL \ + XCHAL_SEP XCHAL_INT9_LEVEL \ + XCHAL_SEP XCHAL_INT10_LEVEL \ + XCHAL_SEP XCHAL_INT11_LEVEL \ + XCHAL_SEP XCHAL_INT12_LEVEL \ + XCHAL_SEP XCHAL_INT13_LEVEL \ + XCHAL_SEP XCHAL_INT14_LEVEL \ + XCHAL_SEP XCHAL_INT15_LEVEL \ + XCHAL_SEP XCHAL_INT16_LEVEL \ + XCHAL_SEP XCHAL_INT17_LEVEL \ + XCHAL_SEP XCHAL_INT18_LEVEL \ + XCHAL_SEP XCHAL_INT19_LEVEL \ + XCHAL_SEP XCHAL_INT20_LEVEL \ + XCHAL_SEP XCHAL_INT21_LEVEL \ + XCHAL_SEP XCHAL_INT22_LEVEL \ + XCHAL_SEP XCHAL_INT23_LEVEL \ + XCHAL_SEP XCHAL_INT24_LEVEL \ + XCHAL_SEP XCHAL_INT25_LEVEL \ + XCHAL_SEP XCHAL_INT26_LEVEL \ + XCHAL_SEP XCHAL_INT27_LEVEL \ + XCHAL_SEP XCHAL_INT28_LEVEL \ + XCHAL_SEP XCHAL_INT29_LEVEL \ + XCHAL_SEP XCHAL_INT30_LEVEL \ + XCHAL_SEP XCHAL_INT31_LEVEL + +/* Array of types of each possible interrupt: */ +#define XCHAL_INT_TYPES XCHAL_INT0_TYPE \ + XCHAL_SEP XCHAL_INT1_TYPE \ + XCHAL_SEP XCHAL_INT2_TYPE \ + XCHAL_SEP XCHAL_INT3_TYPE \ + XCHAL_SEP XCHAL_INT4_TYPE \ + XCHAL_SEP XCHAL_INT5_TYPE \ + XCHAL_SEP XCHAL_INT6_TYPE \ + XCHAL_SEP XCHAL_INT7_TYPE \ + XCHAL_SEP XCHAL_INT8_TYPE \ + XCHAL_SEP XCHAL_INT9_TYPE \ + XCHAL_SEP XCHAL_INT10_TYPE \ + XCHAL_SEP XCHAL_INT11_TYPE \ + XCHAL_SEP XCHAL_INT12_TYPE \ + XCHAL_SEP XCHAL_INT13_TYPE \ + XCHAL_SEP XCHAL_INT14_TYPE \ + XCHAL_SEP XCHAL_INT15_TYPE \ + XCHAL_SEP XCHAL_INT16_TYPE \ + XCHAL_SEP XCHAL_INT17_TYPE \ + XCHAL_SEP XCHAL_INT18_TYPE \ + XCHAL_SEP XCHAL_INT19_TYPE \ + XCHAL_SEP XCHAL_INT20_TYPE \ + XCHAL_SEP XCHAL_INT21_TYPE \ + XCHAL_SEP XCHAL_INT22_TYPE \ + XCHAL_SEP XCHAL_INT23_TYPE \ + XCHAL_SEP XCHAL_INT24_TYPE \ + XCHAL_SEP XCHAL_INT25_TYPE \ + XCHAL_SEP XCHAL_INT26_TYPE \ + XCHAL_SEP XCHAL_INT27_TYPE \ + XCHAL_SEP XCHAL_INT28_TYPE \ + XCHAL_SEP XCHAL_INT29_TYPE \ + XCHAL_SEP XCHAL_INT30_TYPE \ + XCHAL_SEP XCHAL_INT31_TYPE + +/* Array of masks of interrupts for each type of interrupt: */ +#define XCHAL_INTTYPE_MASKS XCHAL_INTTYPE_MASK_UNCONFIGURED \ + XCHAL_SEP XCHAL_INTTYPE_MASK_SOFTWARE \ + XCHAL_SEP XCHAL_INTTYPE_MASK_EXTERN_EDGE \ + XCHAL_SEP XCHAL_INTTYPE_MASK_EXTERN_LEVEL \ + XCHAL_SEP XCHAL_INTTYPE_MASK_TIMER \ + XCHAL_SEP XCHAL_INTTYPE_MASK_NMI \ + XCHAL_SEP XCHAL_INTTYPE_MASK_WRITE_ERROR + +/* Interrupts that can be cleared using the INTCLEAR special register: */ +#define XCHAL_INTCLEARABLE_MASK (XCHAL_INTTYPE_MASK_SOFTWARE+XCHAL_INTTYPE_MASK_EXTERN_EDGE+XCHAL_INTTYPE_MASK_WRITE_ERROR) +/* Interrupts that can be triggered using the INTSET special register: */ +#define XCHAL_INTSETTABLE_MASK XCHAL_INTTYPE_MASK_SOFTWARE + +/* Array of interrupts assigned to each timer (CCOMPARE0 to CCOMPARE3): */ +#define XCHAL_TIMER_INTERRUPTS XCHAL_TIMER0_INTERRUPT \ + XCHAL_SEP XCHAL_TIMER1_INTERRUPT \ + XCHAL_SEP XCHAL_TIMER2_INTERRUPT \ + XCHAL_SEP XCHAL_TIMER3_INTERRUPT + + + +/* For backward compatibility and for the array macros, define macros for + * each unconfigured interrupt number (unfortunately, the value of + * XTHAL_INTTYPE_UNCONFIGURED is not zero): */ +#if XCHAL_NUM_INTERRUPTS == 0 +# define XCHAL_INT0_LEVEL 0 +# define XCHAL_INT0_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 1 +# define XCHAL_INT1_LEVEL 0 +# define XCHAL_INT1_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 2 +# define XCHAL_INT2_LEVEL 0 +# define XCHAL_INT2_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 3 +# define XCHAL_INT3_LEVEL 0 +# define XCHAL_INT3_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 4 +# define XCHAL_INT4_LEVEL 0 +# define XCHAL_INT4_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 5 +# define XCHAL_INT5_LEVEL 0 +# define XCHAL_INT5_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 6 +# define XCHAL_INT6_LEVEL 0 +# define XCHAL_INT6_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 7 +# define XCHAL_INT7_LEVEL 0 +# define XCHAL_INT7_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 8 +# define XCHAL_INT8_LEVEL 0 +# define XCHAL_INT8_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 9 +# define XCHAL_INT9_LEVEL 0 +# define XCHAL_INT9_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 10 +# define XCHAL_INT10_LEVEL 0 +# define XCHAL_INT10_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 11 +# define XCHAL_INT11_LEVEL 0 +# define XCHAL_INT11_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 12 +# define XCHAL_INT12_LEVEL 0 +# define XCHAL_INT12_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 13 +# define XCHAL_INT13_LEVEL 0 +# define XCHAL_INT13_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 14 +# define XCHAL_INT14_LEVEL 0 +# define XCHAL_INT14_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 15 +# define XCHAL_INT15_LEVEL 0 +# define XCHAL_INT15_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 16 +# define XCHAL_INT16_LEVEL 0 +# define XCHAL_INT16_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 17 +# define XCHAL_INT17_LEVEL 0 +# define XCHAL_INT17_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 18 +# define XCHAL_INT18_LEVEL 0 +# define XCHAL_INT18_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 19 +# define XCHAL_INT19_LEVEL 0 +# define XCHAL_INT19_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 20 +# define XCHAL_INT20_LEVEL 0 +# define XCHAL_INT20_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 21 +# define XCHAL_INT21_LEVEL 0 +# define XCHAL_INT21_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 22 +# define XCHAL_INT22_LEVEL 0 +# define XCHAL_INT22_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 23 +# define XCHAL_INT23_LEVEL 0 +# define XCHAL_INT23_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 24 +# define XCHAL_INT24_LEVEL 0 +# define XCHAL_INT24_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 25 +# define XCHAL_INT25_LEVEL 0 +# define XCHAL_INT25_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 26 +# define XCHAL_INT26_LEVEL 0 +# define XCHAL_INT26_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 27 +# define XCHAL_INT27_LEVEL 0 +# define XCHAL_INT27_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 28 +# define XCHAL_INT28_LEVEL 0 +# define XCHAL_INT28_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 29 +# define XCHAL_INT29_LEVEL 0 +# define XCHAL_INT29_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 30 +# define XCHAL_INT30_LEVEL 0 +# define XCHAL_INT30_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif +#if XCHAL_NUM_INTERRUPTS <= 31 +# define XCHAL_INT31_LEVEL 0 +# define XCHAL_INT31_TYPE XTHAL_INTTYPE_UNCONFIGURED +#endif + + +/* + * Masks and levels corresponding to each *external* interrupt. + */ + +#define XCHAL_EXTINT0_MASK (1 << XCHAL_EXTINT0_NUM) +#define XCHAL_EXTINT0_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT0_NUM) +#define XCHAL_EXTINT1_MASK (1 << XCHAL_EXTINT1_NUM) +#define XCHAL_EXTINT1_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT1_NUM) +#define XCHAL_EXTINT2_MASK (1 << XCHAL_EXTINT2_NUM) +#define XCHAL_EXTINT2_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT2_NUM) +#define XCHAL_EXTINT3_MASK (1 << XCHAL_EXTINT3_NUM) +#define XCHAL_EXTINT3_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT3_NUM) +#define XCHAL_EXTINT4_MASK (1 << XCHAL_EXTINT4_NUM) +#define XCHAL_EXTINT4_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT4_NUM) +#define XCHAL_EXTINT5_MASK (1 << XCHAL_EXTINT5_NUM) +#define XCHAL_EXTINT5_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT5_NUM) +#define XCHAL_EXTINT6_MASK (1 << XCHAL_EXTINT6_NUM) +#define XCHAL_EXTINT6_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT6_NUM) +#define XCHAL_EXTINT7_MASK (1 << XCHAL_EXTINT7_NUM) +#define XCHAL_EXTINT7_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT7_NUM) +#define XCHAL_EXTINT8_MASK (1 << XCHAL_EXTINT8_NUM) +#define XCHAL_EXTINT8_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT8_NUM) +#define XCHAL_EXTINT9_MASK (1 << XCHAL_EXTINT9_NUM) +#define XCHAL_EXTINT9_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT9_NUM) +#define XCHAL_EXTINT10_MASK (1 << XCHAL_EXTINT10_NUM) +#define XCHAL_EXTINT10_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT10_NUM) +#define XCHAL_EXTINT11_MASK (1 << XCHAL_EXTINT11_NUM) +#define XCHAL_EXTINT11_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT11_NUM) +#define XCHAL_EXTINT12_MASK (1 << XCHAL_EXTINT12_NUM) +#define XCHAL_EXTINT12_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT12_NUM) +#define XCHAL_EXTINT13_MASK (1 << XCHAL_EXTINT13_NUM) +#define XCHAL_EXTINT13_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT13_NUM) +#define XCHAL_EXTINT14_MASK (1 << XCHAL_EXTINT14_NUM) +#define XCHAL_EXTINT14_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT14_NUM) +#define XCHAL_EXTINT15_MASK (1 << XCHAL_EXTINT15_NUM) +#define XCHAL_EXTINT15_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT15_NUM) +#define XCHAL_EXTINT16_MASK (1 << XCHAL_EXTINT16_NUM) +#define XCHAL_EXTINT16_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT16_NUM) +#define XCHAL_EXTINT17_MASK (1 << XCHAL_EXTINT17_NUM) +#define XCHAL_EXTINT17_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT17_NUM) +#define XCHAL_EXTINT18_MASK (1 << XCHAL_EXTINT18_NUM) +#define XCHAL_EXTINT18_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT18_NUM) +#define XCHAL_EXTINT19_MASK (1 << XCHAL_EXTINT19_NUM) +#define XCHAL_EXTINT19_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT19_NUM) +#define XCHAL_EXTINT20_MASK (1 << XCHAL_EXTINT20_NUM) +#define XCHAL_EXTINT20_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT20_NUM) +#define XCHAL_EXTINT21_MASK (1 << XCHAL_EXTINT21_NUM) +#define XCHAL_EXTINT21_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT21_NUM) +#define XCHAL_EXTINT22_MASK (1 << XCHAL_EXTINT22_NUM) +#define XCHAL_EXTINT22_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT22_NUM) +#define XCHAL_EXTINT23_MASK (1 << XCHAL_EXTINT23_NUM) +#define XCHAL_EXTINT23_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT23_NUM) +#define XCHAL_EXTINT24_MASK (1 << XCHAL_EXTINT24_NUM) +#define XCHAL_EXTINT24_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT24_NUM) +#define XCHAL_EXTINT25_MASK (1 << XCHAL_EXTINT25_NUM) +#define XCHAL_EXTINT25_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT25_NUM) +#define XCHAL_EXTINT26_MASK (1 << XCHAL_EXTINT26_NUM) +#define XCHAL_EXTINT26_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT26_NUM) +#define XCHAL_EXTINT27_MASK (1 << XCHAL_EXTINT27_NUM) +#define XCHAL_EXTINT27_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT27_NUM) +#define XCHAL_EXTINT28_MASK (1 << XCHAL_EXTINT28_NUM) +#define XCHAL_EXTINT28_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT28_NUM) +#define XCHAL_EXTINT29_MASK (1 << XCHAL_EXTINT29_NUM) +#define XCHAL_EXTINT29_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT29_NUM) +#define XCHAL_EXTINT30_MASK (1 << XCHAL_EXTINT30_NUM) +#define XCHAL_EXTINT30_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT30_NUM) +#define XCHAL_EXTINT31_MASK (1 << XCHAL_EXTINT31_NUM) +#define XCHAL_EXTINT31_LEVEL XCHAL_INT_LEVEL(XCHAL_EXTINT31_NUM) + + +/*---------------------------------------------------------------------- + EXCEPTIONS and VECTORS + ----------------------------------------------------------------------*/ + +/* For backward compatibility ONLY -- DO NOT USE (will be removed in future release): */ +#define XCHAL_HAVE_OLD_EXC_ARCH XCHAL_HAVE_XEA1 /* (DEPRECATED) 1 if old exception architecture (XEA1), 0 otherwise (eg. XEA2) */ +#define XCHAL_HAVE_EXCM XCHAL_HAVE_XEA2 /* (DEPRECATED) 1 if PS.EXCM bit exists (currently equals XCHAL_HAVE_TLBS) */ +#ifdef XCHAL_USER_VECTOR_VADDR +#define XCHAL_PROGRAMEXC_VECTOR_VADDR XCHAL_USER_VECTOR_VADDR +#define XCHAL_USEREXC_VECTOR_VADDR XCHAL_USER_VECTOR_VADDR +#endif +#ifdef XCHAL_USER_VECTOR_PADDR +# define XCHAL_PROGRAMEXC_VECTOR_PADDR XCHAL_USER_VECTOR_PADDR +# define XCHAL_USEREXC_VECTOR_PADDR XCHAL_USER_VECTOR_PADDR +#endif +#ifdef XCHAL_KERNEL_VECTOR_VADDR +# define XCHAL_STACKEDEXC_VECTOR_VADDR XCHAL_KERNEL_VECTOR_VADDR +# define XCHAL_KERNELEXC_VECTOR_VADDR XCHAL_KERNEL_VECTOR_VADDR +#endif +#ifdef XCHAL_KERNEL_VECTOR_PADDR +# define XCHAL_STACKEDEXC_VECTOR_PADDR XCHAL_KERNEL_VECTOR_PADDR +# define XCHAL_KERNELEXC_VECTOR_PADDR XCHAL_KERNEL_VECTOR_PADDR +#endif + +#if 0 +#if XCHAL_HAVE_DEBUG +# define XCHAL_DEBUG_VECTOR_VADDR XCHAL_INTLEVEL_VECTOR_VADDR(XCHAL_DEBUGLEVEL) +/* This one should only get defined if the corresponding intlevel paddr macro exists: */ +# define XCHAL_DEBUG_VECTOR_PADDR XCHAL_INTLEVEL_VECTOR_PADDR(XCHAL_DEBUGLEVEL) +#endif +#endif + +/* Indexing macros: */ +#define _XCHAL_INTLEVEL_VECTOR_VADDR(n) XCHAL_INTLEVEL ## n ## _VECTOR_VADDR +#define XCHAL_INTLEVEL_VECTOR_VADDR(n) _XCHAL_INTLEVEL_VECTOR_VADDR(n) /* n = 0 .. 15 */ + +/* + * General Exception Causes + * (values of EXCCAUSE special register set by general exceptions, + * which vector to the user, kernel, or double-exception vectors). + * + * DEPRECATED. Please use the equivalent EXCCAUSE_xxx macros + * defined in . (Note that these have slightly + * different names, they don't just have the XCHAL_ prefix removed.) + */ +#define XCHAL_EXCCAUSE_ILLEGAL_INSTRUCTION 0 /* Illegal Instruction */ +#define XCHAL_EXCCAUSE_SYSTEM_CALL 1 /* System Call */ +#define XCHAL_EXCCAUSE_INSTRUCTION_FETCH_ERROR 2 /* Instruction Fetch Error */ +#define XCHAL_EXCCAUSE_LOAD_STORE_ERROR 3 /* Load Store Error */ +#define XCHAL_EXCCAUSE_LEVEL1_INTERRUPT 4 /* Level 1 Interrupt */ +#define XCHAL_EXCCAUSE_ALLOCA 5 /* Stack Extension Assist */ +#define XCHAL_EXCCAUSE_INTEGER_DIVIDE_BY_ZERO 6 /* Integer Divide by Zero */ +#define XCHAL_EXCCAUSE_SPECULATION 7 /* Speculation */ +#define XCHAL_EXCCAUSE_PRIVILEGED 8 /* Privileged Instruction */ +#define XCHAL_EXCCAUSE_UNALIGNED 9 /* Unaligned Load Store */ +/*10..15 reserved*/ +#define XCHAL_EXCCAUSE_ITLB_MISS 16 /* ITlb Miss Exception */ +#define XCHAL_EXCCAUSE_ITLB_MULTIHIT 17 /* ITlb Mutltihit Exception */ +#define XCHAL_EXCCAUSE_ITLB_PRIVILEGE 18 /* ITlb Privilege Exception */ +#define XCHAL_EXCCAUSE_ITLB_SIZE_RESTRICTION 19 /* ITlb Size Restriction Exception */ +#define XCHAL_EXCCAUSE_FETCH_CACHE_ATTRIBUTE 20 /* Fetch Cache Attribute Exception */ +/*21..23 reserved*/ +#define XCHAL_EXCCAUSE_DTLB_MISS 24 /* DTlb Miss Exception */ +#define XCHAL_EXCCAUSE_DTLB_MULTIHIT 25 /* DTlb Multihit Exception */ +#define XCHAL_EXCCAUSE_DTLB_PRIVILEGE 26 /* DTlb Privilege Exception */ +#define XCHAL_EXCCAUSE_DTLB_SIZE_RESTRICTION 27 /* DTlb Size Restriction Exception */ +#define XCHAL_EXCCAUSE_LOAD_CACHE_ATTRIBUTE 28 /* Load Cache Attribute Exception */ +#define XCHAL_EXCCAUSE_STORE_CACHE_ATTRIBUTE 29 /* Store Cache Attribute Exception */ +/*30..31 reserved*/ +#define XCHAL_EXCCAUSE_COPROCESSOR0_DISABLED 32 /* Coprocessor 0 disabled */ +#define XCHAL_EXCCAUSE_COPROCESSOR1_DISABLED 33 /* Coprocessor 1 disabled */ +#define XCHAL_EXCCAUSE_COPROCESSOR2_DISABLED 34 /* Coprocessor 2 disabled */ +#define XCHAL_EXCCAUSE_COPROCESSOR3_DISABLED 35 /* Coprocessor 3 disabled */ +#define XCHAL_EXCCAUSE_COPROCESSOR4_DISABLED 36 /* Coprocessor 4 disabled */ +#define XCHAL_EXCCAUSE_COPROCESSOR5_DISABLED 37 /* Coprocessor 5 disabled */ +#define XCHAL_EXCCAUSE_COPROCESSOR6_DISABLED 38 /* Coprocessor 6 disabled */ +#define XCHAL_EXCCAUSE_COPROCESSOR7_DISABLED 39 /* Coprocessor 7 disabled */ +/*40..63 reserved*/ + + +/* + * Miscellaneous special register fields. + * + * For each special register, and each field within each register: + * XCHAL__VALIDMASK is the set of bits defined in the register. + * XCHAL___BITS is the number of bits in the field. + * XCHAL___NUM is 2^bits, the number of possible values + * of the field. + * XCHAL___SHIFT is the position of the field within + * the register, starting from the least significant bit. + * + * DEPRECATED. Please use the equivalent macros defined in + * . (Note that these have different names.) + */ + +/* DBREAKC (special register number 160): */ +#define XCHAL_DBREAKC_VALIDMASK 0xC000003F +#define XCHAL_DBREAKC_MASK_BITS 6 +#define XCHAL_DBREAKC_MASK_NUM 64 +#define XCHAL_DBREAKC_MASK_SHIFT 0 +#define XCHAL_DBREAKC_MASK_MASK 0x0000003F +#define XCHAL_DBREAKC_LOADBREAK_BITS 1 +#define XCHAL_DBREAKC_LOADBREAK_NUM 2 +#define XCHAL_DBREAKC_LOADBREAK_SHIFT 30 +#define XCHAL_DBREAKC_LOADBREAK_MASK 0x40000000 +#define XCHAL_DBREAKC_STOREBREAK_BITS 1 +#define XCHAL_DBREAKC_STOREBREAK_NUM 2 +#define XCHAL_DBREAKC_STOREBREAK_SHIFT 31 +#define XCHAL_DBREAKC_STOREBREAK_MASK 0x80000000 +/* PS (special register number 230): */ +#define XCHAL_PS_VALIDMASK 0x00070F3F +#define XCHAL_PS_INTLEVEL_BITS 4 +#define XCHAL_PS_INTLEVEL_NUM 16 +#define XCHAL_PS_INTLEVEL_SHIFT 0 +#define XCHAL_PS_INTLEVEL_MASK 0x0000000F +#define XCHAL_PS_EXCM_BITS 1 +#define XCHAL_PS_EXCM_NUM 2 +#define XCHAL_PS_EXCM_SHIFT 4 +#define XCHAL_PS_EXCM_MASK 0x00000010 +#define XCHAL_PS_UM_BITS 1 +#define XCHAL_PS_UM_NUM 2 +#define XCHAL_PS_UM_SHIFT 5 +#define XCHAL_PS_UM_MASK 0x00000020 +#define XCHAL_PS_RING_BITS 2 +#define XCHAL_PS_RING_NUM 4 +#define XCHAL_PS_RING_SHIFT 6 +#define XCHAL_PS_RING_MASK 0x000000C0 +#define XCHAL_PS_OWB_BITS 4 +#define XCHAL_PS_OWB_NUM 16 +#define XCHAL_PS_OWB_SHIFT 8 +#define XCHAL_PS_OWB_MASK 0x00000F00 +#define XCHAL_PS_CALLINC_BITS 2 +#define XCHAL_PS_CALLINC_NUM 4 +#define XCHAL_PS_CALLINC_SHIFT 16 +#define XCHAL_PS_CALLINC_MASK 0x00030000 +#define XCHAL_PS_WOE_BITS 1 +#define XCHAL_PS_WOE_NUM 2 +#define XCHAL_PS_WOE_SHIFT 18 +#define XCHAL_PS_WOE_MASK 0x00040000 +/* EXCCAUSE (special register number 232): */ +#define XCHAL_EXCCAUSE_VALIDMASK 0x0000003F +#define XCHAL_EXCCAUSE_BITS 6 +#define XCHAL_EXCCAUSE_NUM 64 +#define XCHAL_EXCCAUSE_SHIFT 0 +#define XCHAL_EXCCAUSE_MASK 0x0000003F +/* DEBUGCAUSE (special register number 233): */ +#define XCHAL_DEBUGCAUSE_VALIDMASK 0x0000003F +#define XCHAL_DEBUGCAUSE_ICOUNT_BITS 1 +#define XCHAL_DEBUGCAUSE_ICOUNT_NUM 2 +#define XCHAL_DEBUGCAUSE_ICOUNT_SHIFT 0 +#define XCHAL_DEBUGCAUSE_ICOUNT_MASK 0x00000001 +#define XCHAL_DEBUGCAUSE_IBREAK_BITS 1 +#define XCHAL_DEBUGCAUSE_IBREAK_NUM 2 +#define XCHAL_DEBUGCAUSE_IBREAK_SHIFT 1 +#define XCHAL_DEBUGCAUSE_IBREAK_MASK 0x00000002 +#define XCHAL_DEBUGCAUSE_DBREAK_BITS 1 +#define XCHAL_DEBUGCAUSE_DBREAK_NUM 2 +#define XCHAL_DEBUGCAUSE_DBREAK_SHIFT 2 +#define XCHAL_DEBUGCAUSE_DBREAK_MASK 0x00000004 +#define XCHAL_DEBUGCAUSE_BREAK_BITS 1 +#define XCHAL_DEBUGCAUSE_BREAK_NUM 2 +#define XCHAL_DEBUGCAUSE_BREAK_SHIFT 3 +#define XCHAL_DEBUGCAUSE_BREAK_MASK 0x00000008 +#define XCHAL_DEBUGCAUSE_BREAKN_BITS 1 +#define XCHAL_DEBUGCAUSE_BREAKN_NUM 2 +#define XCHAL_DEBUGCAUSE_BREAKN_SHIFT 4 +#define XCHAL_DEBUGCAUSE_BREAKN_MASK 0x00000010 +#define XCHAL_DEBUGCAUSE_DEBUGINT_BITS 1 +#define XCHAL_DEBUGCAUSE_DEBUGINT_NUM 2 +#define XCHAL_DEBUGCAUSE_DEBUGINT_SHIFT 5 +#define XCHAL_DEBUGCAUSE_DEBUGINT_MASK 0x00000020 + + + + +/*---------------------------------------------------------------------- + TIMERS + ----------------------------------------------------------------------*/ + +/*#define XCHAL_HAVE_TIMERS XCHAL_HAVE_CCOUNT*/ + + + +/*---------------------------------------------------------------------- + INTERNAL I/D RAM/ROMs and XLMI + ----------------------------------------------------------------------*/ + +#define XCHAL_NUM_IROM XCHAL_NUM_INSTROM /* (DEPRECATED) */ +#define XCHAL_NUM_IRAM XCHAL_NUM_INSTRAM /* (DEPRECATED) */ +#define XCHAL_NUM_DROM XCHAL_NUM_DATAROM /* (DEPRECATED) */ +#define XCHAL_NUM_DRAM XCHAL_NUM_DATARAM /* (DEPRECATED) */ + +#define XCHAL_IROM0_VADDR XCHAL_INSTROM0_VADDR /* (DEPRECATED) */ +#define XCHAL_IROM0_PADDR XCHAL_INSTROM0_PADDR /* (DEPRECATED) */ +#define XCHAL_IROM0_SIZE XCHAL_INSTROM0_SIZE /* (DEPRECATED) */ +#define XCHAL_IROM1_VADDR XCHAL_INSTROM1_VADDR /* (DEPRECATED) */ +#define XCHAL_IROM1_PADDR XCHAL_INSTROM1_PADDR /* (DEPRECATED) */ +#define XCHAL_IROM1_SIZE XCHAL_INSTROM1_SIZE /* (DEPRECATED) */ +#define XCHAL_IRAM0_VADDR XCHAL_INSTRAM0_VADDR /* (DEPRECATED) */ +#define XCHAL_IRAM0_PADDR XCHAL_INSTRAM0_PADDR /* (DEPRECATED) */ +#define XCHAL_IRAM0_SIZE XCHAL_INSTRAM0_SIZE /* (DEPRECATED) */ +#define XCHAL_IRAM1_VADDR XCHAL_INSTRAM1_VADDR /* (DEPRECATED) */ +#define XCHAL_IRAM1_PADDR XCHAL_INSTRAM1_PADDR /* (DEPRECATED) */ +#define XCHAL_IRAM1_SIZE XCHAL_INSTRAM1_SIZE /* (DEPRECATED) */ +#define XCHAL_DROM0_VADDR XCHAL_DATAROM0_VADDR /* (DEPRECATED) */ +#define XCHAL_DROM0_PADDR XCHAL_DATAROM0_PADDR /* (DEPRECATED) */ +#define XCHAL_DROM0_SIZE XCHAL_DATAROM0_SIZE /* (DEPRECATED) */ +#define XCHAL_DROM1_VADDR XCHAL_DATAROM1_VADDR /* (DEPRECATED) */ +#define XCHAL_DROM1_PADDR XCHAL_DATAROM1_PADDR /* (DEPRECATED) */ +#define XCHAL_DROM1_SIZE XCHAL_DATAROM1_SIZE /* (DEPRECATED) */ +#define XCHAL_DRAM0_VADDR XCHAL_DATARAM0_VADDR /* (DEPRECATED) */ +#define XCHAL_DRAM0_PADDR XCHAL_DATARAM0_PADDR /* (DEPRECATED) */ +#define XCHAL_DRAM0_SIZE XCHAL_DATARAM0_SIZE /* (DEPRECATED) */ +#define XCHAL_DRAM1_VADDR XCHAL_DATARAM1_VADDR /* (DEPRECATED) */ +#define XCHAL_DRAM1_PADDR XCHAL_DATARAM1_PADDR /* (DEPRECATED) */ +#define XCHAL_DRAM1_SIZE XCHAL_DATARAM1_SIZE /* (DEPRECATED) */ + + + +/*---------------------------------------------------------------------- + CACHE + ----------------------------------------------------------------------*/ + + +/* Default PREFCTL value to enable prefetch. */ +#if XCHAL_HW_MIN_VERSION < XTENSA_HWVERSION_RE_2012_0 +#define XCHAL_CACHE_PREFCTL_DEFAULT 0x00044 /* enabled, not aggressive */ +#elif XCHAL_HW_MIN_VERSION < XTENSA_HWVERSION_RF_2014_0 +#define XCHAL_CACHE_PREFCTL_DEFAULT 0x01044 /* + enable prefetch to L1 */ +#elif XCHAL_PREFETCH_ENTRIES >= 16 +#define XCHAL_CACHE_PREFCTL_DEFAULT 0x81044 /* 12 entries for block ops */ +#elif XCHAL_PREFETCH_ENTRIES >= 8 +#define XCHAL_CACHE_PREFCTL_DEFAULT 0x51044 /* 5 entries for block ops */ +#else +#define XCHAL_CACHE_PREFCTL_DEFAULT 0x01044 /* 0 entries for block ops */ +#endif + + +/* Max for both I-cache and D-cache (used for general alignment): */ +#if XCHAL_ICACHE_LINESIZE > XCHAL_DCACHE_LINESIZE +# define XCHAL_CACHE_LINEWIDTH_MAX XCHAL_ICACHE_LINEWIDTH +# define XCHAL_CACHE_LINESIZE_MAX XCHAL_ICACHE_LINESIZE +#else +# define XCHAL_CACHE_LINEWIDTH_MAX XCHAL_DCACHE_LINEWIDTH +# define XCHAL_CACHE_LINESIZE_MAX XCHAL_DCACHE_LINESIZE +#endif + +#define XCHAL_ICACHE_SETSIZE (1< XCHAL_DCACHE_SETWIDTH +# define XCHAL_CACHE_SETWIDTH_MAX XCHAL_ICACHE_SETWIDTH +# define XCHAL_CACHE_SETSIZE_MAX XCHAL_ICACHE_SETSIZE +#else +# define XCHAL_CACHE_SETWIDTH_MAX XCHAL_DCACHE_SETWIDTH +# define XCHAL_CACHE_SETSIZE_MAX XCHAL_DCACHE_SETSIZE +#endif + +/* Instruction cache tag bits: */ +#define XCHAL_ICACHE_TAG_V_SHIFT 0 +#define XCHAL_ICACHE_TAG_V 0x1 /* valid bit */ +#if XCHAL_ICACHE_WAYS > 1 +# define XCHAL_ICACHE_TAG_F_SHIFT 1 +# define XCHAL_ICACHE_TAG_F 0x2 /* fill (LRU) bit */ +#else +# define XCHAL_ICACHE_TAG_F_SHIFT 0 +# define XCHAL_ICACHE_TAG_F 0 /* no fill (LRU) bit */ +#endif +#if XCHAL_ICACHE_LINE_LOCKABLE +# define XCHAL_ICACHE_TAG_L_SHIFT (XCHAL_ICACHE_TAG_F_SHIFT+1) +# define XCHAL_ICACHE_TAG_L (1 << XCHAL_ICACHE_TAG_L_SHIFT) /* lock bit */ +#else +# define XCHAL_ICACHE_TAG_L_SHIFT XCHAL_ICACHE_TAG_F_SHIFT +# define XCHAL_ICACHE_TAG_L 0 /* no lock bit */ +#endif +/* Data cache tag bits: */ +#define XCHAL_DCACHE_TAG_V_SHIFT 0 +#define XCHAL_DCACHE_TAG_V 0x1 /* valid bit */ +#if XCHAL_DCACHE_WAYS > 1 +# define XCHAL_DCACHE_TAG_F_SHIFT 1 +# define XCHAL_DCACHE_TAG_F 0x2 /* fill (LRU) bit */ +#else +# define XCHAL_DCACHE_TAG_F_SHIFT 0 +# define XCHAL_DCACHE_TAG_F 0 /* no fill (LRU) bit */ +#endif +#if XCHAL_DCACHE_IS_WRITEBACK +# define XCHAL_DCACHE_TAG_D_SHIFT (XCHAL_DCACHE_TAG_F_SHIFT+1) +# define XCHAL_DCACHE_TAG_D (1 << XCHAL_DCACHE_TAG_D_SHIFT) /* dirty bit */ +#else +# define XCHAL_DCACHE_TAG_D_SHIFT XCHAL_DCACHE_TAG_F_SHIFT +# define XCHAL_DCACHE_TAG_D 0 /* no dirty bit */ +#endif +#if XCHAL_DCACHE_LINE_LOCKABLE +# define XCHAL_DCACHE_TAG_L_SHIFT (XCHAL_DCACHE_TAG_D_SHIFT+1) +# define XCHAL_DCACHE_TAG_L (1 << XCHAL_DCACHE_TAG_L_SHIFT) /* lock bit */ +#else +# define XCHAL_DCACHE_TAG_L_SHIFT XCHAL_DCACHE_TAG_D_SHIFT +# define XCHAL_DCACHE_TAG_L 0 /* no lock bit */ +#endif + +/* Whether MEMCTL register has anything useful */ +#define XCHAL_USE_MEMCTL (((XCHAL_LOOP_BUFFER_SIZE > 0) || \ + XCHAL_DCACHE_IS_COHERENT || \ + XCHAL_HAVE_ICACHE_DYN_WAYS || \ + XCHAL_HAVE_DCACHE_DYN_WAYS) && \ + (XCHAL_HW_MIN_VERSION >= XTENSA_HWVERSION_RE_2012_0)) + +/* Default MEMCTL values: */ +#if XCHAL_HAVE_ICACHE_DYN_WAYS || XCHAL_HAVE_DCACHE_DYN_WAYS +/* NOTE: constant defined this way to allow movi instead of l32r in reset code. */ +#define XCHAL_CACHE_MEMCTL_DEFAULT 0xFFFFFF00 /* Init all possible ways */ +#else +#define XCHAL_CACHE_MEMCTL_DEFAULT 0x00000000 /* Nothing to do */ +#endif + +#if XCHAL_DCACHE_IS_COHERENT +#define _MEMCTL_SNOOP_EN 0x02 /* Enable snoop */ +#else +#define _MEMCTL_SNOOP_EN 0x00 /* Don't enable snoop */ +#endif + +#if (XCHAL_LOOP_BUFFER_SIZE == 0) || XCHAL_ERRATUM_453 +#define _MEMCTL_L0IBUF_EN 0x00 /* No loop buffer or don't enable */ +#else +#define _MEMCTL_L0IBUF_EN 0x01 /* Enable loop buffer */ +#endif + +#define XCHAL_SNOOP_LB_MEMCTL_DEFAULT (_MEMCTL_SNOOP_EN | _MEMCTL_L0IBUF_EN) + + +/*---------------------------------------------------------------------- + MMU + ----------------------------------------------------------------------*/ + +/* See for more details. */ + +/* Has different semantic in open source headers (where it means HAVE_PTP_MMU), + so comment out starting with RB-2008.3 release; later, might get + get reintroduced as a synonym for XCHAL_HAVE_PTP_MMU instead: */ +/*#define XCHAL_HAVE_MMU XCHAL_HAVE_TLBS*/ /* (DEPRECATED; use XCHAL_HAVE_TLBS instead) */ + +/* Indexing macros: */ +#define _XCHAL_ITLB_SET(n,_what) XCHAL_ITLB_SET ## n ## _what +#define XCHAL_ITLB_SET(n,what) _XCHAL_ITLB_SET(n, _ ## what ) +#define _XCHAL_ITLB_SET_E(n,i,_what) XCHAL_ITLB_SET ## n ## _E ## i ## _what +#define XCHAL_ITLB_SET_E(n,i,what) _XCHAL_ITLB_SET_E(n,i, _ ## what ) +#define _XCHAL_DTLB_SET(n,_what) XCHAL_DTLB_SET ## n ## _what +#define XCHAL_DTLB_SET(n,what) _XCHAL_DTLB_SET(n, _ ## what ) +#define _XCHAL_DTLB_SET_E(n,i,_what) XCHAL_DTLB_SET ## n ## _E ## i ## _what +#define XCHAL_DTLB_SET_E(n,i,what) _XCHAL_DTLB_SET_E(n,i, _ ## what ) +/* + * Example use: XCHAL_ITLB_SET(XCHAL_ITLB_ARF_SET0,ENTRIES) + * to get the value of XCHAL_ITLB_SET_ENTRIES where is the first auto-refill set. + */ + +/* Number of entries per autorefill way: */ +#define XCHAL_ITLB_ARF_ENTRIES (1< 0 && XCHAL_DTLB_ARF_WAYS > 0 && XCHAL_MMU_RINGS >= 2 +# define XCHAL_HAVE_PTP_MMU 1 /* have full MMU (with page table [autorefill] and protection) */ +#else +# define XCHAL_HAVE_PTP_MMU 0 /* don't have full MMU */ +#endif +#endif + +/* + * For full MMUs, report kernel RAM segment and kernel I/O segment static page mappings: + */ +#if XCHAL_HAVE_PTP_MMU && !XCHAL_HAVE_SPANNING_WAY +#define XCHAL_KSEG_CACHED_VADDR 0xD0000000 /* virt.addr of kernel RAM cached static map */ +#define XCHAL_KSEG_CACHED_PADDR 0x00000000 /* phys.addr of kseg_cached */ +#define XCHAL_KSEG_CACHED_SIZE 0x08000000 /* size in bytes of kseg_cached (assumed power of 2!!!) */ +#define XCHAL_KSEG_BYPASS_VADDR 0xD8000000 /* virt.addr of kernel RAM bypass (uncached) static map */ +#define XCHAL_KSEG_BYPASS_PADDR 0x00000000 /* phys.addr of kseg_bypass */ +#define XCHAL_KSEG_BYPASS_SIZE 0x08000000 /* size in bytes of kseg_bypass (assumed power of 2!!!) */ + +#define XCHAL_KIO_CACHED_VADDR 0xE0000000 /* virt.addr of kernel I/O cached static map */ +#define XCHAL_KIO_CACHED_PADDR 0xF0000000 /* phys.addr of kio_cached */ +#define XCHAL_KIO_CACHED_SIZE 0x10000000 /* size in bytes of kio_cached (assumed power of 2!!!) */ +#define XCHAL_KIO_BYPASS_VADDR 0xF0000000 /* virt.addr of kernel I/O bypass (uncached) static map */ +#define XCHAL_KIO_BYPASS_PADDR 0xF0000000 /* phys.addr of kio_bypass */ +#define XCHAL_KIO_BYPASS_SIZE 0x10000000 /* size in bytes of kio_bypass (assumed power of 2!!!) */ + +#define XCHAL_SEG_MAPPABLE_VADDR 0x00000000 /* start of largest non-static-mapped virtual addr area */ +#define XCHAL_SEG_MAPPABLE_SIZE 0xD0000000 /* size in bytes of " */ +/* define XCHAL_SEG_MAPPABLE2_xxx if more areas present, sorted in order of descending size. */ +#endif + + +/*---------------------------------------------------------------------- + MISC + ----------------------------------------------------------------------*/ + +/* Data alignment required if used for instructions: */ +#if XCHAL_INST_FETCH_WIDTH > XCHAL_DATA_WIDTH +# define XCHAL_ALIGN_MAX XCHAL_INST_FETCH_WIDTH +#else +# define XCHAL_ALIGN_MAX XCHAL_DATA_WIDTH +#endif + +/* + * Names kept for backward compatibility. + * (Here "RELEASE" is now a misnomer; these are product *versions*, not the releases + * under which they are released. In the T10##.# era there was no distinction.) + */ +#define XCHAL_HW_RELEASE_MAJOR XCHAL_HW_VERSION_MAJOR +#define XCHAL_HW_RELEASE_MINOR XCHAL_HW_VERSION_MINOR +#define XCHAL_HW_RELEASE_NAME XCHAL_HW_VERSION_NAME + + + + +/*---------------------------------------------------------------------- + COPROCESSORS and EXTRA STATE + ----------------------------------------------------------------------*/ + +#define XCHAL_EXTRA_SA_SIZE XCHAL_NCP_SA_SIZE +#define XCHAL_EXTRA_SA_ALIGN XCHAL_NCP_SA_ALIGN +#define XCHAL_CPEXTRA_SA_SIZE XCHAL_TOTAL_SA_SIZE +#define XCHAL_CPEXTRA_SA_ALIGN XCHAL_TOTAL_SA_ALIGN + +#if defined (_ASMLANGUAGE) || defined (__ASSEMBLER__) + + /* Invoked at start of save area load/store sequence macro to setup macro + * internal offsets. Not usually invoked directly. + * continue 0 for 1st sequence, 1 for subsequent consecutive ones. + * totofs offset from original ptr to next load/store location. + */ + .macro xchal_sa_start continue totofs + .ifeq \continue + .set .Lxchal_pofs_, 0 /* offset from original ptr to current \ptr */ + .set .Lxchal_ofs_, 0 /* offset from current \ptr to next load/store location */ + .endif + .if \totofs + 1 /* if totofs specified (not -1) */ + .set .Lxchal_ofs_, \totofs - .Lxchal_pofs_ /* specific offset from original ptr */ + .endif + .endm + + /* Align portion of save area and bring ptr in range if necessary. + * Used by save area load/store sequences. Not usually invoked directly. + * Allows combining multiple (sub-)sequences arbitrarily. + * ptr pointer to save area (may be off, see .Lxchal_pofs_) + * minofs,maxofs range of offset from cur ptr to next load/store loc; + * minofs <= 0 <= maxofs (0 must always be valid offset) + * range must be within +/- 30kB or so. + * ofsalign alignment granularity of minofs .. maxofs (pow of 2) + * (restriction on offset from ptr to next load/store loc) + * totalign align from orig ptr to next load/store loc (pow of 2) + */ + .macro xchal_sa_align ptr minofs maxofs ofsalign totalign + /* First align where we start accessing the next register + * per \totalign relative to original ptr (i.e. start of the save area): + */ + .set .Lxchal_ofs_, ((.Lxchal_pofs_ + .Lxchal_ofs_ + \totalign - 1) & -\totalign) - .Lxchal_pofs_ + /* If necessary, adjust \ptr to bring .Lxchal_ofs_ in acceptable range: */ + .if (((\maxofs) - .Lxchal_ofs_) & 0xC0000000) | ((.Lxchal_ofs_ - (\minofs)) & 0xC0000000) | (.Lxchal_ofs_ & (\ofsalign-1)) + .set .Ligmask, 0xFFFFFFFF /* TODO: optimize to addmi, per aligns and .Lxchal_ofs_ */ + addi \ptr, \ptr, (.Lxchal_ofs_ & .Ligmask) + .set .Lxchal_pofs_, .Lxchal_pofs_ + (.Lxchal_ofs_ & .Ligmask) + .set .Lxchal_ofs_, (.Lxchal_ofs_ & ~.Ligmask) + .endif + .endm + /* + * We could optimize for addi to expand to only addmi instead of + * "addmi;addi", where possible. Here's a partial example how: + * .set .Lmaxmask, -(\ofsalign) & -(\totalign) + * .if (((\maxofs) + ~.Lmaxmask + 1) & 0xFFFFFF00) && ((.Lxchal_ofs_ & ~.Lmaxmask) == 0) + * .set .Ligmask, 0xFFFFFF00 + * .elif ... ditto for negative ofs range ... + * .set .Ligmask, 0xFFFFFF00 + * .set ... adjust per offset ... + * .else + * .set .Ligmask, 0xFFFFFFFF + * .endif + */ + + /* Invoke this after xchal_XXX_{load,store} macros to restore \ptr. */ + .macro xchal_sa_ptr_restore ptr + .if .Lxchal_pofs_ + addi \ptr, \ptr, - .Lxchal_pofs_ + .set .Lxchal_ofs_, .Lxchal_ofs_ + .Lxchal_pofs_ + .set .Lxchal_pofs_, 0 + .endif + .endm + + /* + * Use as eg: + * xchal_atmps_store a1, SOMEOFS, XCHAL_SA_NUM_ATMPS, a4, a5 + * xchal_ncp_load a2, a0,a3,a4,a5 + * xchal_atmps_load a1, SOMEOFS, XCHAL_SA_NUM_ATMPS, a4, a5 + * + * Specify only the ARs you *haven't* saved/restored already, up to 4. + * They *must* be the *last* ARs (in same order) specified to save area + * load/store sequences. In the example above, a0 and a3 were already + * saved/restored and unused (thus available) but a4 and a5 were not. + */ +#define xchal_atmps_store xchal_atmps_loadstore s32i, +#define xchal_atmps_load xchal_atmps_loadstore l32i, + .macro xchal_atmps_loadstore inst ptr offset nreq aa=0 ab=0 ac=0 ad=0 + .set .Lnsaved_, 0 + .irp reg,\aa,\ab,\ac,\ad + .ifeq 0x\reg ; .set .Lnsaved_,.Lnsaved_+1 ; .endif + .endr + .set .Laofs_, 0 + .irp reg,\aa,\ab,\ac,\ad + .ifgt (\nreq)-.Lnsaved_ + \inst \reg, \ptr, .Laofs_+\offset + .set .Laofs_,.Laofs_+4 + .set .Lnsaved_,.Lnsaved_+1 + .endif + .endr + .endm + +/*#define xchal_ncp_load_a2 xchal_ncp_load a2,a3,a4,a5,a6*/ +/*#define xchal_ncp_store_a2 xchal_ncp_store a2,a3,a4,a5,a6*/ +#define xchal_extratie_load xchal_ncptie_load +#define xchal_extratie_store xchal_ncptie_store +#define xchal_extratie_load_a2 xchal_ncptie_load a2,a3,a4,a5,a6 +#define xchal_extratie_store_a2 xchal_ncptie_store a2,a3,a4,a5,a6 +#define xchal_extra_load xchal_ncp_load +#define xchal_extra_store xchal_ncp_store +#define xchal_extra_load_a2 xchal_ncp_load a2,a3,a4,a5,a6 +#define xchal_extra_store_a2 xchal_ncp_store a2,a3,a4,a5,a6 +#define xchal_extra_load_funcbody xchal_ncp_load a2,a3,a4,a5,a6 +#define xchal_extra_store_funcbody xchal_ncp_store a2,a3,a4,a5,a6 +#define xchal_cp0_store_a2 xchal_cp0_store a2,a3,a4,a5,a6 +#define xchal_cp0_load_a2 xchal_cp0_load a2,a3,a4,a5,a6 +#define xchal_cp1_store_a2 xchal_cp1_store a2,a3,a4,a5,a6 +#define xchal_cp1_load_a2 xchal_cp1_load a2,a3,a4,a5,a6 +#define xchal_cp2_store_a2 xchal_cp2_store a2,a3,a4,a5,a6 +#define xchal_cp2_load_a2 xchal_cp2_load a2,a3,a4,a5,a6 +#define xchal_cp3_store_a2 xchal_cp3_store a2,a3,a4,a5,a6 +#define xchal_cp3_load_a2 xchal_cp3_load a2,a3,a4,a5,a6 +#define xchal_cp4_store_a2 xchal_cp4_store a2,a3,a4,a5,a6 +#define xchal_cp4_load_a2 xchal_cp4_load a2,a3,a4,a5,a6 +#define xchal_cp5_store_a2 xchal_cp5_store a2,a3,a4,a5,a6 +#define xchal_cp5_load_a2 xchal_cp5_load a2,a3,a4,a5,a6 +#define xchal_cp6_store_a2 xchal_cp6_store a2,a3,a4,a5,a6 +#define xchal_cp6_load_a2 xchal_cp6_load a2,a3,a4,a5,a6 +#define xchal_cp7_store_a2 xchal_cp7_store a2,a3,a4,a5,a6 +#define xchal_cp7_load_a2 xchal_cp7_load a2,a3,a4,a5,a6 + +/* Empty placeholder macros for undefined coprocessors: */ +#if (XCHAL_CP_MASK & ~XCHAL_CP_PORT_MASK) == 0 +# if XCHAL_CP0_SA_SIZE == 0 + .macro xchal_cp0_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp0_load p a b c d continue=0 ofs=-1 select=-1 ; .endm +# endif +# if XCHAL_CP1_SA_SIZE == 0 + .macro xchal_cp1_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp1_load p a b c d continue=0 ofs=-1 select=-1 ; .endm +# endif +# if XCHAL_CP2_SA_SIZE == 0 + .macro xchal_cp2_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp2_load p a b c d continue=0 ofs=-1 select=-1 ; .endm +# endif +# if XCHAL_CP3_SA_SIZE == 0 + .macro xchal_cp3_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp3_load p a b c d continue=0 ofs=-1 select=-1 ; .endm +# endif +# if XCHAL_CP4_SA_SIZE == 0 + .macro xchal_cp4_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp4_load p a b c d continue=0 ofs=-1 select=-1 ; .endm +# endif +# if XCHAL_CP5_SA_SIZE == 0 + .macro xchal_cp5_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp5_load p a b c d continue=0 ofs=-1 select=-1 ; .endm +# endif +# if XCHAL_CP6_SA_SIZE == 0 + .macro xchal_cp6_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp6_load p a b c d continue=0 ofs=-1 select=-1 ; .endm +# endif +# if XCHAL_CP7_SA_SIZE == 0 + .macro xchal_cp7_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp7_load p a b c d continue=0 ofs=-1 select=-1 ; .endm +# endif +#endif + + /******************** + * Macros to create functions that save and restore the state of *any* TIE + * coprocessor (by dynamic index). + */ + + /* + * Macro that expands to the body of a function + * that stores the selected coprocessor's state (registers etc). + * Entry: a2 = ptr to save area in which to save cp state + * a3 = coprocessor number + * Exit: any register a2-a15 (?) may have been clobbered. + */ + .macro xchal_cpi_store_funcbody +#if (XCHAL_CP_MASK & ~XCHAL_CP_PORT_MASK) +# if XCHAL_CP0_SA_SIZE + bnez a3, 99f + xchal_cp0_store_a2 + j 90f +99: +# endif +# if XCHAL_CP1_SA_SIZE + bnei a3, 1, 99f + xchal_cp1_store_a2 + j 90f +99: +# endif +# if XCHAL_CP2_SA_SIZE + bnei a3, 2, 99f + xchal_cp2_store_a2 + j 90f +99: +# endif +# if XCHAL_CP3_SA_SIZE + bnei a3, 3, 99f + xchal_cp3_store_a2 + j 90f +99: +# endif +# if XCHAL_CP4_SA_SIZE + bnei a3, 4, 99f + xchal_cp4_store_a2 + j 90f +99: +# endif +# if XCHAL_CP5_SA_SIZE + bnei a3, 5, 99f + xchal_cp5_store_a2 + j 90f +99: +# endif +# if XCHAL_CP6_SA_SIZE + bnei a3, 6, 99f + xchal_cp6_store_a2 + j 90f +99: +# endif +# if XCHAL_CP7_SA_SIZE + bnei a3, 7, 99f + xchal_cp7_store_a2 + j 90f +99: +# endif +90: +#endif + .endm + + /* + * Macro that expands to the body of a function + * that loads the selected coprocessor's state (registers etc). + * Entry: a2 = ptr to save area from which to restore cp state + * a3 = coprocessor number + * Exit: any register a2-a15 (?) may have been clobbered. + */ + .macro xchal_cpi_load_funcbody +#if (XCHAL_CP_MASK & ~XCHAL_CP_PORT_MASK) +# if XCHAL_CP0_SA_SIZE + bnez a3, 99f + xchal_cp0_load_a2 + j 90f +99: +# endif +# if XCHAL_CP1_SA_SIZE + bnei a3, 1, 99f + xchal_cp1_load_a2 + j 90f +99: +# endif +# if XCHAL_CP2_SA_SIZE + bnei a3, 2, 99f + xchal_cp2_load_a2 + j 90f +99: +# endif +# if XCHAL_CP3_SA_SIZE + bnei a3, 3, 99f + xchal_cp3_load_a2 + j 90f +99: +# endif +# if XCHAL_CP4_SA_SIZE + bnei a3, 4, 99f + xchal_cp4_load_a2 + j 90f +99: +# endif +# if XCHAL_CP5_SA_SIZE + bnei a3, 5, 99f + xchal_cp5_load_a2 + j 90f +99: +# endif +# if XCHAL_CP6_SA_SIZE + bnei a3, 6, 99f + xchal_cp6_load_a2 + j 90f +99: +# endif +# if XCHAL_CP7_SA_SIZE + bnei a3, 7, 99f + xchal_cp7_load_a2 + j 90f +99: +# endif +90: +#endif + .endm + +#endif /*_ASMLANGUAGE or __ASSEMBLER__*/ + + +/* Other default macros for undefined coprocessors: */ +#ifndef XCHAL_CP0_NAME +# define XCHAL_CP0_NAME 0 +# define XCHAL_CP0_SA_CONTENTS_LIBDB_NUM 0 +# define XCHAL_CP0_SA_CONTENTS_LIBDB /* empty */ +#endif +#ifndef XCHAL_CP1_NAME +# define XCHAL_CP1_NAME 0 +# define XCHAL_CP1_SA_CONTENTS_LIBDB_NUM 0 +# define XCHAL_CP1_SA_CONTENTS_LIBDB /* empty */ +#endif +#ifndef XCHAL_CP2_NAME +# define XCHAL_CP2_NAME 0 +# define XCHAL_CP2_SA_CONTENTS_LIBDB_NUM 0 +# define XCHAL_CP2_SA_CONTENTS_LIBDB /* empty */ +#endif +#ifndef XCHAL_CP3_NAME +# define XCHAL_CP3_NAME 0 +# define XCHAL_CP3_SA_CONTENTS_LIBDB_NUM 0 +# define XCHAL_CP3_SA_CONTENTS_LIBDB /* empty */ +#endif +#ifndef XCHAL_CP4_NAME +# define XCHAL_CP4_NAME 0 +# define XCHAL_CP4_SA_CONTENTS_LIBDB_NUM 0 +# define XCHAL_CP4_SA_CONTENTS_LIBDB /* empty */ +#endif +#ifndef XCHAL_CP5_NAME +# define XCHAL_CP5_NAME 0 +# define XCHAL_CP5_SA_CONTENTS_LIBDB_NUM 0 +# define XCHAL_CP5_SA_CONTENTS_LIBDB /* empty */ +#endif +#ifndef XCHAL_CP6_NAME +# define XCHAL_CP6_NAME 0 +# define XCHAL_CP6_SA_CONTENTS_LIBDB_NUM 0 +# define XCHAL_CP6_SA_CONTENTS_LIBDB /* empty */ +#endif +#ifndef XCHAL_CP7_NAME +# define XCHAL_CP7_NAME 0 +# define XCHAL_CP7_SA_CONTENTS_LIBDB_NUM 0 +# define XCHAL_CP7_SA_CONTENTS_LIBDB /* empty */ +#endif + +#if XCHAL_CP_MASK == 0 +/* Filler info for unassigned coprocessors, to simplify arrays etc: */ +#define XCHAL_CP0_SA_SIZE 0 +#define XCHAL_CP0_SA_ALIGN 1 +#define XCHAL_CP1_SA_SIZE 0 +#define XCHAL_CP1_SA_ALIGN 1 +#define XCHAL_CP2_SA_SIZE 0 +#define XCHAL_CP2_SA_ALIGN 1 +#define XCHAL_CP3_SA_SIZE 0 +#define XCHAL_CP3_SA_ALIGN 1 +#define XCHAL_CP4_SA_SIZE 0 +#define XCHAL_CP4_SA_ALIGN 1 +#define XCHAL_CP5_SA_SIZE 0 +#define XCHAL_CP5_SA_ALIGN 1 +#define XCHAL_CP6_SA_SIZE 0 +#define XCHAL_CP6_SA_ALIGN 1 +#define XCHAL_CP7_SA_SIZE 0 +#define XCHAL_CP7_SA_ALIGN 1 +#endif + + +/* Indexing macros: */ +#define _XCHAL_CP_SA_SIZE(n) XCHAL_CP ## n ## _SA_SIZE +#define XCHAL_CP_SA_SIZE(n) _XCHAL_CP_SA_SIZE(n) /* n = 0 .. 7 */ +#define _XCHAL_CP_SA_ALIGN(n) XCHAL_CP ## n ## _SA_ALIGN +#define XCHAL_CP_SA_ALIGN(n) _XCHAL_CP_SA_ALIGN(n) /* n = 0 .. 7 */ + +#define XCHAL_CPEXTRA_SA_SIZE_TOR2 XCHAL_CPEXTRA_SA_SIZE /* Tor2Beta only - do not use */ + +/* Link-time HAL global variables that report coprocessor numbers by name + (names are case-preserved from the original TIE): */ +#if !defined(_ASMLANGUAGE) && !defined(_NOCLANGUAGE) && !defined(__ASSEMBLER__) +# define _XCJOIN(a,b) a ## b +# define XCJOIN(a,b) _XCJOIN(a,b) +# ifdef XCHAL_CP0_NAME +extern const unsigned char XCJOIN(Xthal_cp_id_,XCHAL_CP0_IDENT); +extern const unsigned int XCJOIN(Xthal_cp_mask_,XCHAL_CP0_IDENT); +# endif +# ifdef XCHAL_CP1_NAME +extern const unsigned char XCJOIN(Xthal_cp_id_,XCHAL_CP1_IDENT); +extern const unsigned int XCJOIN(Xthal_cp_mask_,XCHAL_CP1_IDENT); +# endif +# ifdef XCHAL_CP2_NAME +extern const unsigned char XCJOIN(Xthal_cp_id_,XCHAL_CP2_IDENT); +extern const unsigned int XCJOIN(Xthal_cp_mask_,XCHAL_CP2_IDENT); +# endif +# ifdef XCHAL_CP3_NAME +extern const unsigned char XCJOIN(Xthal_cp_id_,XCHAL_CP3_IDENT); +extern const unsigned int XCJOIN(Xthal_cp_mask_,XCHAL_CP3_IDENT); +# endif +# ifdef XCHAL_CP4_NAME +extern const unsigned char XCJOIN(Xthal_cp_id_,XCHAL_CP4_IDENT); +extern const unsigned int XCJOIN(Xthal_cp_mask_,XCHAL_CP4_IDENT); +# endif +# ifdef XCHAL_CP5_NAME +extern const unsigned char XCJOIN(Xthal_cp_id_,XCHAL_CP5_IDENT); +extern const unsigned int XCJOIN(Xthal_cp_mask_,XCHAL_CP5_IDENT); +# endif +# ifdef XCHAL_CP6_NAME +extern const unsigned char XCJOIN(Xthal_cp_id_,XCHAL_CP6_IDENT); +extern const unsigned int XCJOIN(Xthal_cp_mask_,XCHAL_CP6_IDENT); +# endif +# ifdef XCHAL_CP7_NAME +extern const unsigned char XCJOIN(Xthal_cp_id_,XCHAL_CP7_IDENT); +extern const unsigned int XCJOIN(Xthal_cp_mask_,XCHAL_CP7_IDENT); +# endif +#endif + + + + +/*---------------------------------------------------------------------- + DERIVED + ----------------------------------------------------------------------*/ + +#if XCHAL_HAVE_BE +#define XCHAL_INST_ILLN 0xD60F /* 2-byte illegal instruction, msb-first */ +#define XCHAL_INST_ILLN_BYTE0 0xD6 /* 2-byte illegal instruction, 1st byte */ +#define XCHAL_INST_ILLN_BYTE1 0x0F /* 2-byte illegal instruction, 2nd byte */ +#else +#define XCHAL_INST_ILLN 0xF06D /* 2-byte illegal instruction, lsb-first */ +#define XCHAL_INST_ILLN_BYTE0 0x6D /* 2-byte illegal instruction, 1st byte */ +#define XCHAL_INST_ILLN_BYTE1 0xF0 /* 2-byte illegal instruction, 2nd byte */ +#endif +/* Belongs in xtensa/hal.h: */ +#define XTHAL_INST_ILL 0x000000 /* 3-byte illegal instruction */ + + +/* + * Because information as to exactly which hardware version is targeted + * by a given software build is not always available, compile-time HAL + * Hardware-Release "_AT" macros are fuzzy (return 0, 1, or XCHAL_MAYBE): + * (Here "RELEASE" is now a misnomer; these are product *versions*, not the releases + * under which they are released. In the T10##.# era there was no distinction.) + */ +#if XCHAL_HW_CONFIGID_RELIABLE +# define XCHAL_HW_RELEASE_AT_OR_BELOW(major,minor) (XTHAL_REL_LE( XCHAL_HW_VERSION_MAJOR,XCHAL_HW_VERSION_MINOR, major,minor ) ? 1 : 0) +# define XCHAL_HW_RELEASE_AT_OR_ABOVE(major,minor) (XTHAL_REL_GE( XCHAL_HW_VERSION_MAJOR,XCHAL_HW_VERSION_MINOR, major,minor ) ? 1 : 0) +# define XCHAL_HW_RELEASE_AT(major,minor) (XTHAL_REL_EQ( XCHAL_HW_VERSION_MAJOR,XCHAL_HW_VERSION_MINOR, major,minor ) ? 1 : 0) +# define XCHAL_HW_RELEASE_MAJOR_AT(major) ((XCHAL_HW_VERSION_MAJOR == (major)) ? 1 : 0) +#else +# define XCHAL_HW_RELEASE_AT_OR_BELOW(major,minor) ( ((major) < 1040 && XCHAL_HAVE_XEA2) ? 0 \ + : ((major) > 1050 && XCHAL_HAVE_XEA1) ? 1 \ + : XTHAL_MAYBE ) +# define XCHAL_HW_RELEASE_AT_OR_ABOVE(major,minor) ( ((major) >= 2000 && XCHAL_HAVE_XEA1) ? 0 \ + : (XTHAL_REL_LE(major,minor, 1040,0) && XCHAL_HAVE_XEA2) ? 1 \ + : XTHAL_MAYBE ) +# define XCHAL_HW_RELEASE_AT(major,minor) ( (((major) < 1040 && XCHAL_HAVE_XEA2) || \ + ((major) >= 2000 && XCHAL_HAVE_XEA1)) ? 0 : XTHAL_MAYBE) +# define XCHAL_HW_RELEASE_MAJOR_AT(major) XCHAL_HW_RELEASE_AT(major,0) +#endif + +/* + * Specific errata: + */ + +/* + * Erratum T1020.H13, T1030.H7, T1040.H10, T1050.H4 (fixed in T1040.3 and T1050.1; + * relevant only in XEA1, kernel-vector mode, level-one interrupts and overflows enabled): + */ +#define XCHAL_MAYHAVE_ERRATUM_XEA1KWIN (XCHAL_HAVE_XEA1 && \ + (XCHAL_HW_RELEASE_AT_OR_BELOW(1040,2) != 0 \ + || XCHAL_HW_RELEASE_AT(1050,0))) +/* + * Erratum 453 present in RE-2013.2 up to RF-2014.0, fixed in RF-2014.1. + * Applies to specific set of configuration options. + * Part of the workaround is to add ISYNC at certain points in the code. + * The workaround gated by this macro can be disabled if not needed, e.g. if + * zero-overhead loop buffer will be disabled, by defining _NO_ERRATUM_453. + */ +#if ( XCHAL_HW_MAX_VERSION >= XTENSA_HWVERSION_RE_2013_2 && \ + XCHAL_HW_MIN_VERSION <= XTENSA_HWVERSION_RF_2014_0 && \ + XCHAL_ICACHE_SIZE != 0 && XCHAL_HAVE_PIF /*covers also AXI/AHB*/ && \ + XCHAL_HAVE_LOOPS && XCHAL_LOOP_BUFFER_SIZE != 0 && \ + XCHAL_CLOCK_GATING_GLOBAL && !defined(_NO_ERRATUM_453) ) +#define XCHAL_ERRATUM_453 1 +#else +#define XCHAL_ERRATUM_453 0 +#endif + +/* + * Erratum 497 present in RE-2012.2 up to RG/RF-2015.2 + * Applies to specific set of configuration options. + * Workaround is to add MEMWs after at most 8 cache WB instructions + */ +#if ( ((XCHAL_HW_MAX_VERSION >= XTENSA_HWVERSION_RE_2012_0 && \ + XCHAL_HW_MIN_VERSION <= XTENSA_HWVERSION_RF_2015_2) || \ + (XCHAL_HW_MAX_VERSION >= XTENSA_HWVERSION_RG_2015_0 && \ + XCHAL_HW_MIN_VERSION <= XTENSA_HWVERSION_RG_2015_2) \ + ) && \ + XCHAL_DCACHE_IS_WRITEBACK && \ + XCHAL_HAVE_AXI && \ + XCHAL_HAVE_PIF_WR_RESP && \ + XCHAL_HAVE_PIF_REQ_ATTR && !defined(_NO_ERRATUM_497) \ + ) +#define XCHAL_ERRATUM_497 1 +#else +#define XCHAL_ERRATUM_497 0 +#endif + +#endif /*XTENSA_CONFIG_CORE_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/config/defs.h b/tools/sdk/include/esp32/xtensa/config/defs.h new file mode 100644 index 00000000..d7c48ea8 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/config/defs.h @@ -0,0 +1,38 @@ +/* Definitions for Xtensa instructions, types, and protos. */ + +/* Customer ID=11657; Build=0x5fe96; Copyright (c) 2003-2004 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +/* NOTE: This file exists only for backward compatibility with T1050 + and earlier Xtensa releases. It includes only a subset of the + available header files. */ + +#ifndef _XTENSA_BASE_HEADER +#define _XTENSA_BASE_HEADER + +#ifdef __XTENSA__ + +#include +#include +#include + +#endif /* __XTENSA__ */ +#endif /* !_XTENSA_BASE_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/config/specreg.h b/tools/sdk/include/esp32/xtensa/config/specreg.h new file mode 100644 index 00000000..0135d4c7 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/config/specreg.h @@ -0,0 +1,117 @@ +/* + * Xtensa Special Register symbolic names + */ + +/* $Id: //depot/rel/Eaglenest/Xtensa/SWConfig/hal/specreg.h.tpp#1 $ */ + +/* Customer ID=11657; Build=0x5fe96; Copyright (c) 1998-2002 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef XTENSA_SPECREG_H +#define XTENSA_SPECREG_H + +/* Include these special register bitfield definitions, for historical reasons: */ +#include + + +/* Special registers: */ +#define LBEG 0 +#define LEND 1 +#define LCOUNT 2 +#define SAR 3 +#define BR 4 +#define SCOMPARE1 12 +#define ACCLO 16 +#define ACCHI 17 +#define MR_0 32 +#define MR_1 33 +#define MR_2 34 +#define MR_3 35 +#define WINDOWBASE 72 +#define WINDOWSTART 73 +#define IBREAKENABLE 96 +#define MEMCTL 97 +#define ATOMCTL 99 +#define DDR 104 +#define IBREAKA_0 128 +#define IBREAKA_1 129 +#define DBREAKA_0 144 +#define DBREAKA_1 145 +#define DBREAKC_0 160 +#define DBREAKC_1 161 +#define EPC_1 177 +#define EPC_2 178 +#define EPC_3 179 +#define EPC_4 180 +#define EPC_5 181 +#define EPC_6 182 +#define EPC_7 183 +#define DEPC 192 +#define EPS_2 194 +#define EPS_3 195 +#define EPS_4 196 +#define EPS_5 197 +#define EPS_6 198 +#define EPS_7 199 +#define EXCSAVE_1 209 +#define EXCSAVE_2 210 +#define EXCSAVE_3 211 +#define EXCSAVE_4 212 +#define EXCSAVE_5 213 +#define EXCSAVE_6 214 +#define EXCSAVE_7 215 +#define CPENABLE 224 +#define INTERRUPT 226 +#define INTENABLE 228 +#define PS 230 +#define VECBASE 231 +#define EXCCAUSE 232 +#define DEBUGCAUSE 233 +#define CCOUNT 234 +#define PRID 235 +#define ICOUNT 236 +#define ICOUNTLEVEL 237 +#define EXCVADDR 238 +#define CCOMPARE_0 240 +#define CCOMPARE_1 241 +#define CCOMPARE_2 242 +#define MISC_REG_0 244 +#define MISC_REG_1 245 +#define MISC_REG_2 246 +#define MISC_REG_3 247 + +/* Special cases (bases of special register series): */ +#define MR 32 +#define IBREAKA 128 +#define DBREAKA 144 +#define DBREAKC 160 +#define EPC 176 +#define EPS 192 +#define EXCSAVE 208 +#define CCOMPARE 240 + +/* Special names for read-only and write-only interrupt registers: */ +#define INTREAD 226 +#define INTSET 226 +#define INTCLEAR 227 + +#endif /* XTENSA_SPECREG_H */ + diff --git a/tools/sdk/include/esp32/xtensa/config/system.h b/tools/sdk/include/esp32/xtensa/config/system.h new file mode 100644 index 00000000..0d56eef7 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/config/system.h @@ -0,0 +1,274 @@ +/* + * xtensa/config/system.h -- HAL definitions that are dependent on SYSTEM configuration + * + * NOTE: The location and contents of this file are highly subject to change. + * + * Source for configuration-independent binaries (which link in a + * configuration-specific HAL library) must NEVER include this file. + * The HAL itself has historically included this file in some instances, + * but this is not appropriate either, because the HAL is meant to be + * core-specific but system independent. + */ + +/* Customer ID=11657; Build=0x5fe96; Copyright (c) 2000-2010 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + + +#ifndef XTENSA_CONFIG_SYSTEM_H +#define XTENSA_CONFIG_SYSTEM_H + +/*#include */ + + + +/*---------------------------------------------------------------------- + CONFIGURED SOFTWARE OPTIONS + ----------------------------------------------------------------------*/ + +#define XSHAL_USE_ABSOLUTE_LITERALS 0 /* (sw-only option, whether software uses absolute literals) */ +#define XSHAL_HAVE_TEXT_SECTION_LITERALS 1 /* Set if there is some memory that allows both code and literals. */ + +#define XSHAL_ABI XTHAL_ABI_WINDOWED /* (sw-only option, selected ABI) */ +/* The above maps to one of the following constants: */ +#define XTHAL_ABI_WINDOWED 0 +#define XTHAL_ABI_CALL0 1 +/* Alternatives: */ +/*#define XSHAL_WINDOWED_ABI 1*/ /* set if windowed ABI selected */ +/*#define XSHAL_CALL0_ABI 0*/ /* set if call0 ABI selected */ + +#define XSHAL_CLIB XTHAL_CLIB_NEWLIB /* (sw-only option, selected C library) */ +/* The above maps to one of the following constants: */ +#define XTHAL_CLIB_NEWLIB 0 +#define XTHAL_CLIB_UCLIBC 1 +#define XTHAL_CLIB_XCLIB 2 +/* Alternatives: */ +/*#define XSHAL_NEWLIB 1*/ /* set if newlib C library selected */ +/*#define XSHAL_UCLIBC 0*/ /* set if uCLibC C library selected */ +/*#define XSHAL_XCLIB 0*/ /* set if Xtensa C library selected */ + +#define XSHAL_USE_FLOATING_POINT 1 + +#define XSHAL_FLOATING_POINT_ABI 0 + +/* SW workarounds enabled for HW errata: */ + +/*---------------------------------------------------------------------- + DEVICE ADDRESSES + ----------------------------------------------------------------------*/ + +/* + * Strange place to find these, but the configuration GUI + * allows moving these around to account for various core + * configurations. Specific boards (and their BSP software) + * will have specific meanings for these components. + */ + +/* I/O Block areas: */ +#define XSHAL_IOBLOCK_CACHED_VADDR 0x70000000 +#define XSHAL_IOBLOCK_CACHED_PADDR 0x70000000 +#define XSHAL_IOBLOCK_CACHED_SIZE 0x0E000000 + +#define XSHAL_IOBLOCK_BYPASS_VADDR 0x90000000 +#define XSHAL_IOBLOCK_BYPASS_PADDR 0x90000000 +#define XSHAL_IOBLOCK_BYPASS_SIZE 0x0E000000 + +/* System ROM: */ +#define XSHAL_ROM_VADDR 0x50000000 +#define XSHAL_ROM_PADDR 0x50000000 +#define XSHAL_ROM_SIZE 0x01000000 +/* Largest available area (free of vectors): */ +#define XSHAL_ROM_AVAIL_VADDR 0x50000000 +#define XSHAL_ROM_AVAIL_VSIZE 0x01000000 + +/* System RAM: */ +#define XSHAL_RAM_VADDR 0x60000000 +#define XSHAL_RAM_PADDR 0x60000000 +#define XSHAL_RAM_VSIZE 0x20000000 +#define XSHAL_RAM_PSIZE 0x20000000 +#define XSHAL_RAM_SIZE XSHAL_RAM_PSIZE +/* Largest available area (free of vectors): */ +#define XSHAL_RAM_AVAIL_VADDR 0x60000000 +#define XSHAL_RAM_AVAIL_VSIZE 0x20000000 + +/* + * Shadow system RAM (same device as system RAM, at different address). + * (Emulation boards need this for the SONIC Ethernet driver + * when data caches are configured for writeback mode.) + * NOTE: on full MMU configs, this points to the BYPASS virtual address + * of system RAM, ie. is the same as XSHAL_RAM_* except that virtual + * addresses are viewed through the BYPASS static map rather than + * the CACHED static map. + */ +#define XSHAL_RAM_BYPASS_VADDR 0xA0000000 +#define XSHAL_RAM_BYPASS_PADDR 0xA0000000 +#define XSHAL_RAM_BYPASS_PSIZE 0x20000000 + +/* Alternate system RAM (different device than system RAM): */ +/*#define XSHAL_ALTRAM_[VP]ADDR ...not configured...*/ +/*#define XSHAL_ALTRAM_SIZE ...not configured...*/ + +/* Some available location in which to place devices in a simulation (eg. XTMP): */ +#define XSHAL_SIMIO_CACHED_VADDR 0xC0000000 +#define XSHAL_SIMIO_BYPASS_VADDR 0xC0000000 +#define XSHAL_SIMIO_PADDR 0xC0000000 +#define XSHAL_SIMIO_SIZE 0x20000000 + + +/*---------------------------------------------------------------------- + * For use by reference testbench exit and diagnostic routines. + */ +#define XSHAL_MAGIC_EXIT 0x0 + +/*---------------------------------------------------------------------- + * DEVICE-ADDRESS DEPENDENT... + * + * Values written to CACHEATTR special register (or its equivalent) + * to enable and disable caches in various modes. + *----------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------- + BACKWARD COMPATIBILITY ... + ----------------------------------------------------------------------*/ + +/* + * NOTE: the following two macros are DEPRECATED. Use the latter + * board-specific macros instead, which are specially tuned for the + * particular target environments' memory maps. + */ +#define XSHAL_CACHEATTR_BYPASS XSHAL_XT2000_CACHEATTR_BYPASS /* disable caches in bypass mode */ +#define XSHAL_CACHEATTR_DEFAULT XSHAL_XT2000_CACHEATTR_DEFAULT /* default setting to enable caches (no writeback!) */ + +/*---------------------------------------------------------------------- + GENERIC + ----------------------------------------------------------------------*/ + +/* For the following, a 512MB region is used if it contains a system (PIF) RAM, + * system (PIF) ROM, local memory, or XLMI. */ + +/* These set any unused 512MB region to cache-BYPASS attribute: */ +#define XSHAL_ALLVALID_CACHEATTR_WRITEBACK 0x22221112 /* enable caches in write-back mode */ +#define XSHAL_ALLVALID_CACHEATTR_WRITEALLOC 0x22221112 /* enable caches in write-allocate mode */ +#define XSHAL_ALLVALID_CACHEATTR_WRITETHRU 0x22221112 /* enable caches in write-through mode */ +#define XSHAL_ALLVALID_CACHEATTR_BYPASS 0x22222222 /* disable caches in bypass mode */ +#define XSHAL_ALLVALID_CACHEATTR_DEFAULT XSHAL_ALLVALID_CACHEATTR_WRITEBACK /* default setting to enable caches */ + +/* These set any unused 512MB region to ILLEGAL attribute: */ +#define XSHAL_STRICT_CACHEATTR_WRITEBACK 0xFFFF111F /* enable caches in write-back mode */ +#define XSHAL_STRICT_CACHEATTR_WRITEALLOC 0xFFFF111F /* enable caches in write-allocate mode */ +#define XSHAL_STRICT_CACHEATTR_WRITETHRU 0xFFFF111F /* enable caches in write-through mode */ +#define XSHAL_STRICT_CACHEATTR_BYPASS 0xFFFF222F /* disable caches in bypass mode */ +#define XSHAL_STRICT_CACHEATTR_DEFAULT XSHAL_STRICT_CACHEATTR_WRITEBACK /* default setting to enable caches */ + +/* These set the first 512MB, if unused, to ILLEGAL attribute to help catch + * NULL-pointer dereference bugs; all other unused 512MB regions are set + * to cache-BYPASS attribute: */ +#define XSHAL_TRAPNULL_CACHEATTR_WRITEBACK 0x2222111F /* enable caches in write-back mode */ +#define XSHAL_TRAPNULL_CACHEATTR_WRITEALLOC 0x2222111F /* enable caches in write-allocate mode */ +#define XSHAL_TRAPNULL_CACHEATTR_WRITETHRU 0x2222111F /* enable caches in write-through mode */ +#define XSHAL_TRAPNULL_CACHEATTR_BYPASS 0x2222222F /* disable caches in bypass mode */ +#define XSHAL_TRAPNULL_CACHEATTR_DEFAULT XSHAL_TRAPNULL_CACHEATTR_WRITEBACK /* default setting to enable caches */ + +/*---------------------------------------------------------------------- + ISS (Instruction Set Simulator) SPECIFIC ... + ----------------------------------------------------------------------*/ + +/* For now, ISS defaults to the TRAPNULL settings: */ +#define XSHAL_ISS_CACHEATTR_WRITEBACK XSHAL_TRAPNULL_CACHEATTR_WRITEBACK +#define XSHAL_ISS_CACHEATTR_WRITEALLOC XSHAL_TRAPNULL_CACHEATTR_WRITEALLOC +#define XSHAL_ISS_CACHEATTR_WRITETHRU XSHAL_TRAPNULL_CACHEATTR_WRITETHRU +#define XSHAL_ISS_CACHEATTR_BYPASS XSHAL_TRAPNULL_CACHEATTR_BYPASS +#define XSHAL_ISS_CACHEATTR_DEFAULT XSHAL_TRAPNULL_CACHEATTR_WRITEBACK + +#define XSHAL_ISS_PIPE_REGIONS 0 +#define XSHAL_ISS_SDRAM_REGIONS 0 + + +/*---------------------------------------------------------------------- + XT2000 BOARD SPECIFIC ... + ----------------------------------------------------------------------*/ + +/* For the following, a 512MB region is used if it contains any system RAM, + * system ROM, local memory, XLMI, or other XT2000 board device or memory. + * Regions containing devices are forced to cache-BYPASS mode regardless + * of whether the macro is _WRITEBACK vs. _BYPASS etc. */ + +/* These set any 512MB region unused on the XT2000 to ILLEGAL attribute: */ +#define XSHAL_XT2000_CACHEATTR_WRITEBACK 0xFF22111F /* enable caches in write-back mode */ +#define XSHAL_XT2000_CACHEATTR_WRITEALLOC 0xFF22111F /* enable caches in write-allocate mode */ +#define XSHAL_XT2000_CACHEATTR_WRITETHRU 0xFF22111F /* enable caches in write-through mode */ +#define XSHAL_XT2000_CACHEATTR_BYPASS 0xFF22222F /* disable caches in bypass mode */ +#define XSHAL_XT2000_CACHEATTR_DEFAULT XSHAL_XT2000_CACHEATTR_WRITEBACK /* default setting to enable caches */ + +#define XSHAL_XT2000_PIPE_REGIONS 0x00000000 /* BusInt pipeline regions */ +#define XSHAL_XT2000_SDRAM_REGIONS 0x00000440 /* BusInt SDRAM regions */ + + +/*---------------------------------------------------------------------- + VECTOR INFO AND SIZES + ----------------------------------------------------------------------*/ + +#define XSHAL_VECTORS_PACKED 0 +#define XSHAL_STATIC_VECTOR_SELECT 1 +#define XSHAL_RESET_VECTOR_VADDR 0x40000400 +#define XSHAL_RESET_VECTOR_PADDR 0x40000400 + +/* + * Sizes allocated to vectors by the system (memory map) configuration. + * These sizes are constrained by core configuration (eg. one vector's + * code cannot overflow into another vector) but are dependent on the + * system or board (or LSP) memory map configuration. + * + * Whether or not each vector happens to be in a system ROM is also + * a system configuration matter, sometimes useful, included here also: + */ +#define XSHAL_RESET_VECTOR_SIZE 0x00000300 +#define XSHAL_RESET_VECTOR_ISROM 0 +#define XSHAL_USER_VECTOR_SIZE 0x00000038 +#define XSHAL_USER_VECTOR_ISROM 0 +#define XSHAL_PROGRAMEXC_VECTOR_SIZE XSHAL_USER_VECTOR_SIZE /* for backward compatibility */ +#define XSHAL_USEREXC_VECTOR_SIZE XSHAL_USER_VECTOR_SIZE /* for backward compatibility */ +#define XSHAL_KERNEL_VECTOR_SIZE 0x00000038 +#define XSHAL_KERNEL_VECTOR_ISROM 0 +#define XSHAL_STACKEDEXC_VECTOR_SIZE XSHAL_KERNEL_VECTOR_SIZE /* for backward compatibility */ +#define XSHAL_KERNELEXC_VECTOR_SIZE XSHAL_KERNEL_VECTOR_SIZE /* for backward compatibility */ +#define XSHAL_DOUBLEEXC_VECTOR_SIZE 0x00000040 +#define XSHAL_DOUBLEEXC_VECTOR_ISROM 0 +#define XSHAL_WINDOW_VECTORS_SIZE 0x00000178 +#define XSHAL_WINDOW_VECTORS_ISROM 0 +#define XSHAL_INTLEVEL2_VECTOR_SIZE 0x00000038 +#define XSHAL_INTLEVEL2_VECTOR_ISROM 0 +#define XSHAL_INTLEVEL3_VECTOR_SIZE 0x00000038 +#define XSHAL_INTLEVEL3_VECTOR_ISROM 0 +#define XSHAL_INTLEVEL4_VECTOR_SIZE 0x00000038 +#define XSHAL_INTLEVEL4_VECTOR_ISROM 0 +#define XSHAL_INTLEVEL5_VECTOR_SIZE 0x00000038 +#define XSHAL_INTLEVEL5_VECTOR_ISROM 0 +#define XSHAL_INTLEVEL6_VECTOR_SIZE 0x00000038 +#define XSHAL_INTLEVEL6_VECTOR_ISROM 0 +#define XSHAL_DEBUG_VECTOR_SIZE XSHAL_INTLEVEL6_VECTOR_SIZE +#define XSHAL_DEBUG_VECTOR_ISROM XSHAL_INTLEVEL6_VECTOR_ISROM +#define XSHAL_NMI_VECTOR_SIZE 0x00000038 +#define XSHAL_NMI_VECTOR_ISROM 0 +#define XSHAL_INTLEVEL7_VECTOR_SIZE XSHAL_NMI_VECTOR_SIZE + + +#endif /*XTENSA_CONFIG_SYSTEM_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/config/tie-asm.h b/tools/sdk/include/esp32/xtensa/config/tie-asm.h new file mode 100644 index 00000000..831d8676 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/config/tie-asm.h @@ -0,0 +1,323 @@ +/* + * tie-asm.h -- compile-time HAL assembler definitions dependent on CORE & TIE + * + * NOTE: This header file is not meant to be included directly. + */ + +/* This header file contains assembly-language definitions (assembly + macros, etc.) for this specific Xtensa processor's TIE extensions + and options. It is customized to this Xtensa processor configuration. + + Customer ID=11657; Build=0x5fe96; Copyright (c) 1999-2016 Cadence Design Systems Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef _XTENSA_CORE_TIE_ASM_H +#define _XTENSA_CORE_TIE_ASM_H + +/* Selection parameter values for save-area save/restore macros: */ +/* Option vs. TIE: */ +#define XTHAL_SAS_TIE 0x0001 /* custom extension or coprocessor */ +#define XTHAL_SAS_OPT 0x0002 /* optional (and not a coprocessor) */ +#define XTHAL_SAS_ANYOT 0x0003 /* both of the above */ +/* Whether used automatically by compiler: */ +#define XTHAL_SAS_NOCC 0x0004 /* not used by compiler w/o special opts/code */ +#define XTHAL_SAS_CC 0x0008 /* used by compiler without special opts/code */ +#define XTHAL_SAS_ANYCC 0x000C /* both of the above */ +/* ABI handling across function calls: */ +#define XTHAL_SAS_CALR 0x0010 /* caller-saved */ +#define XTHAL_SAS_CALE 0x0020 /* callee-saved */ +#define XTHAL_SAS_GLOB 0x0040 /* global across function calls (in thread) */ +#define XTHAL_SAS_ANYABI 0x0070 /* all of the above three */ +/* Misc */ +#define XTHAL_SAS_ALL 0xFFFF /* include all default NCP contents */ +#define XTHAL_SAS3(optie,ccuse,abi) ( ((optie) & XTHAL_SAS_ANYOT) \ + | ((ccuse) & XTHAL_SAS_ANYCC) \ + | ((abi) & XTHAL_SAS_ANYABI) ) + + + /* + * Macro to store all non-coprocessor (extra) custom TIE and optional state + * (not including zero-overhead loop registers). + * Required parameters: + * ptr Save area pointer address register (clobbered) + * (register must contain a 4 byte aligned address). + * at1..at4 Four temporary address registers (first XCHAL_NCP_NUM_ATMPS + * registers are clobbered, the remaining are unused). + * Optional parameters: + * continue If macro invoked as part of a larger store sequence, set to 1 + * if this is not the first in the sequence. Defaults to 0. + * ofs Offset from start of larger sequence (from value of first ptr + * in sequence) at which to store. Defaults to next available space + * (or 0 if is 0). + * select Select what category(ies) of registers to store, as a bitmask + * (see XTHAL_SAS_xxx constants). Defaults to all registers. + * alloc Select what category(ies) of registers to allocate; if any + * category is selected here that is not in , space for + * the corresponding registers is skipped without doing any load. + */ + .macro xchal_ncp_load ptr at1 at2 at3 at4 continue=0 ofs=-1 select=XTHAL_SAS_ALL alloc=0 + xchal_sa_start \continue, \ofs + // Optional global registers used by default by the compiler: + .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~(\select) + xchal_sa_align \ptr, 0, 1016, 4, 4 + l32i \at1, \ptr, .Lxchal_ofs_+0 + wur.THREADPTR \at1 // threadptr option + .set .Lxchal_ofs_, .Lxchal_ofs_ + 4 + .elseif ((XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~(\alloc)) == 0 + xchal_sa_align \ptr, 0, 1016, 4, 4 + .set .Lxchal_ofs_, .Lxchal_ofs_ + 4 + .endif + // Optional caller-saved registers used by default by the compiler: + .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_CALR) & ~(\select) + xchal_sa_align \ptr, 0, 1012, 4, 4 + l32i \at1, \ptr, .Lxchal_ofs_+0 + wsr.ACCLO \at1 // MAC16 option + l32i \at1, \ptr, .Lxchal_ofs_+4 + wsr.ACCHI \at1 // MAC16 option + .set .Lxchal_ofs_, .Lxchal_ofs_ + 8 + .elseif ((XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_CALR) & ~(\alloc)) == 0 + xchal_sa_align \ptr, 0, 1012, 4, 4 + .set .Lxchal_ofs_, .Lxchal_ofs_ + 8 + .endif + // Optional caller-saved registers not used by default by the compiler: + .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select) + xchal_sa_align \ptr, 0, 996, 4, 4 + l32i \at1, \ptr, .Lxchal_ofs_+0 + wsr.BR \at1 // boolean option + l32i \at1, \ptr, .Lxchal_ofs_+4 + wsr.SCOMPARE1 \at1 // conditional store option + l32i \at1, \ptr, .Lxchal_ofs_+8 + wsr.M0 \at1 // MAC16 option + l32i \at1, \ptr, .Lxchal_ofs_+12 + wsr.M1 \at1 // MAC16 option + l32i \at1, \ptr, .Lxchal_ofs_+16 + wsr.M2 \at1 // MAC16 option + l32i \at1, \ptr, .Lxchal_ofs_+20 + wsr.M3 \at1 // MAC16 option + .set .Lxchal_ofs_, .Lxchal_ofs_ + 24 + .elseif ((XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0 + xchal_sa_align \ptr, 0, 996, 4, 4 + .set .Lxchal_ofs_, .Lxchal_ofs_ + 24 + .endif + // Custom caller-saved registers not used by default by the compiler: + .ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select) + xchal_sa_align \ptr, 0, 1008, 4, 4 + l32i \at1, \ptr, .Lxchal_ofs_+0 + wur.F64R_LO \at1 // ureg 234 + l32i \at1, \ptr, .Lxchal_ofs_+4 + wur.F64R_HI \at1 // ureg 235 + l32i \at1, \ptr, .Lxchal_ofs_+8 + wur.F64S \at1 // ureg 236 + .set .Lxchal_ofs_, .Lxchal_ofs_ + 12 + .elseif ((XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0 + xchal_sa_align \ptr, 0, 1008, 4, 4 + .set .Lxchal_ofs_, .Lxchal_ofs_ + 12 + .endif + .endm // xchal_ncp_load + + +#define XCHAL_NCP_NUM_ATMPS 1 + + /* + * Macro to store the state of TIE coprocessor FPU. + * Required parameters: + * ptr Save area pointer address register (clobbered) + * (register must contain a 4 byte aligned address). + * at1..at4 Four temporary address registers (first XCHAL_CP0_NUM_ATMPS + * registers are clobbered, the remaining are unused). + * Optional parameters are the same as for xchal_ncp_store. + */ +#define xchal_cp_FPU_store xchal_cp0_store + .macro xchal_cp0_store ptr at1 at2 at3 at4 continue=0 ofs=-1 select=XTHAL_SAS_ALL alloc=0 + xchal_sa_start \continue, \ofs + // Custom caller-saved registers not used by default by the compiler: + .ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select) + xchal_sa_align \ptr, 0, 948, 4, 4 + rur.FCR \at1 // ureg 232 + s32i \at1, \ptr, .Lxchal_ofs_+0 + rur.FSR \at1 // ureg 233 + s32i \at1, \ptr, .Lxchal_ofs_+4 + ssi f0, \ptr, .Lxchal_ofs_+8 + ssi f1, \ptr, .Lxchal_ofs_+12 + ssi f2, \ptr, .Lxchal_ofs_+16 + ssi f3, \ptr, .Lxchal_ofs_+20 + ssi f4, \ptr, .Lxchal_ofs_+24 + ssi f5, \ptr, .Lxchal_ofs_+28 + ssi f6, \ptr, .Lxchal_ofs_+32 + ssi f7, \ptr, .Lxchal_ofs_+36 + ssi f8, \ptr, .Lxchal_ofs_+40 + ssi f9, \ptr, .Lxchal_ofs_+44 + ssi f10, \ptr, .Lxchal_ofs_+48 + ssi f11, \ptr, .Lxchal_ofs_+52 + ssi f12, \ptr, .Lxchal_ofs_+56 + ssi f13, \ptr, .Lxchal_ofs_+60 + ssi f14, \ptr, .Lxchal_ofs_+64 + ssi f15, \ptr, .Lxchal_ofs_+68 + .set .Lxchal_ofs_, .Lxchal_ofs_ + 72 + .elseif ((XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0 + xchal_sa_align \ptr, 0, 948, 4, 4 + .set .Lxchal_ofs_, .Lxchal_ofs_ + 72 + .endif + .endm // xchal_cp0_store + + /* + * Macro to load the state of TIE coprocessor FPU. + * Required parameters: + * ptr Save area pointer address register (clobbered) + * (register must contain a 4 byte aligned address). + * at1..at4 Four temporary address registers (first XCHAL_CP0_NUM_ATMPS + * registers are clobbered, the remaining are unused). + * Optional parameters are the same as for xchal_ncp_load. + */ +#define xchal_cp_FPU_load xchal_cp0_load + .macro xchal_cp0_load ptr at1 at2 at3 at4 continue=0 ofs=-1 select=XTHAL_SAS_ALL alloc=0 + xchal_sa_start \continue, \ofs + // Custom caller-saved registers not used by default by the compiler: + .ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select) + xchal_sa_align \ptr, 0, 948, 4, 4 + l32i \at1, \ptr, .Lxchal_ofs_+0 + wur.FCR \at1 // ureg 232 + l32i \at1, \ptr, .Lxchal_ofs_+4 + wur.FSR \at1 // ureg 233 + lsi f0, \ptr, .Lxchal_ofs_+8 + lsi f1, \ptr, .Lxchal_ofs_+12 + lsi f2, \ptr, .Lxchal_ofs_+16 + lsi f3, \ptr, .Lxchal_ofs_+20 + lsi f4, \ptr, .Lxchal_ofs_+24 + lsi f5, \ptr, .Lxchal_ofs_+28 + lsi f6, \ptr, .Lxchal_ofs_+32 + lsi f7, \ptr, .Lxchal_ofs_+36 + lsi f8, \ptr, .Lxchal_ofs_+40 + lsi f9, \ptr, .Lxchal_ofs_+44 + lsi f10, \ptr, .Lxchal_ofs_+48 + lsi f11, \ptr, .Lxchal_ofs_+52 + lsi f12, \ptr, .Lxchal_ofs_+56 + lsi f13, \ptr, .Lxchal_ofs_+60 + lsi f14, \ptr, .Lxchal_ofs_+64 + lsi f15, \ptr, .Lxchal_ofs_+68 + .set .Lxchal_ofs_, .Lxchal_ofs_ + 72 + .elseif ((XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0 + xchal_sa_align \ptr, 0, 948, 4, 4 + .set .Lxchal_ofs_, .Lxchal_ofs_ + 72 + .endif + .endm // xchal_cp0_load + +#define XCHAL_CP0_NUM_ATMPS 1 +#define XCHAL_SA_NUM_ATMPS 1 + + /* Empty macros for unconfigured coprocessors: */ + .macro xchal_cp1_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp1_load p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp2_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp2_load p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp3_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp3_load p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp4_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp4_load p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp5_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp5_load p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp6_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp6_load p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp7_store p a b c d continue=0 ofs=-1 select=-1 ; .endm + .macro xchal_cp7_load p a b c d continue=0 ofs=-1 select=-1 ; .endm + +#endif /*_XTENSA_CORE_TIE_ASM_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/config/tie.h b/tools/sdk/include/esp32/xtensa/config/tie.h new file mode 100644 index 00000000..e1787997 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/config/tie.h @@ -0,0 +1,182 @@ +/* + * tie.h -- compile-time HAL definitions dependent on CORE & TIE configuration + * + * NOTE: This header file is not meant to be included directly. + */ + +/* This header file describes this specific Xtensa processor's TIE extensions + that extend basic Xtensa core functionality. It is customized to this + Xtensa processor configuration. + + Customer ID=11657; Build=0x5fe96; Copyright (c) 1999-2016 Cadence Design Systems Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef _XTENSA_CORE_TIE_H +#define _XTENSA_CORE_TIE_H + +#define XCHAL_CP_NUM 1 /* number of coprocessors */ +#define XCHAL_CP_MAX 1 /* max CP ID + 1 (0 if none) */ +#define XCHAL_CP_MASK 0x01 /* bitmask of all CPs by ID */ +#define XCHAL_CP_PORT_MASK 0x00 /* bitmask of only port CPs */ + +/* Basic parameters of each coprocessor: */ +#define XCHAL_CP0_NAME "FPU" +#define XCHAL_CP0_IDENT FPU +#define XCHAL_CP0_SA_SIZE 72 /* size of state save area */ +#define XCHAL_CP0_SA_ALIGN 4 /* min alignment of save area */ +#define XCHAL_CP_ID_FPU 0 /* coprocessor ID (0..7) */ + +/* Filler info for unassigned coprocessors, to simplify arrays etc: */ +#define XCHAL_CP1_SA_SIZE 0 +#define XCHAL_CP1_SA_ALIGN 1 +#define XCHAL_CP2_SA_SIZE 0 +#define XCHAL_CP2_SA_ALIGN 1 +#define XCHAL_CP3_SA_SIZE 0 +#define XCHAL_CP3_SA_ALIGN 1 +#define XCHAL_CP4_SA_SIZE 0 +#define XCHAL_CP4_SA_ALIGN 1 +#define XCHAL_CP5_SA_SIZE 0 +#define XCHAL_CP5_SA_ALIGN 1 +#define XCHAL_CP6_SA_SIZE 0 +#define XCHAL_CP6_SA_ALIGN 1 +#define XCHAL_CP7_SA_SIZE 0 +#define XCHAL_CP7_SA_ALIGN 1 + +/* Save area for non-coprocessor optional and custom (TIE) state: */ +#define XCHAL_NCP_SA_SIZE 48 +#define XCHAL_NCP_SA_ALIGN 4 + +/* Total save area for optional and custom state (NCP + CPn): */ +#define XCHAL_TOTAL_SA_SIZE 128 /* with 16-byte align padding */ +#define XCHAL_TOTAL_SA_ALIGN 4 /* actual minimum alignment */ + +/* + * Detailed contents of save areas. + * NOTE: caller must define the XCHAL_SA_REG macro (not defined here) + * before expanding the XCHAL_xxx_SA_LIST() macros. + * + * XCHAL_SA_REG(s,ccused,abikind,kind,opt,name,galign,align,asize, + * dbnum,base,regnum,bitsz,gapsz,reset,x...) + * + * s = passed from XCHAL_*_LIST(s), eg. to select how to expand + * ccused = set if used by compiler without special options or code + * abikind = 0 (caller-saved), 1 (callee-saved), or 2 (thread-global) + * kind = 0 (special reg), 1 (TIE user reg), or 2 (TIE regfile reg) + * opt = 0 (custom TIE extension or coprocessor), or 1 (optional reg) + * name = lowercase reg name (no quotes) + * galign = group byte alignment (power of 2) (galign >= align) + * align = register byte alignment (power of 2) + * asize = allocated size in bytes (asize*8 == bitsz + gapsz + padsz) + * (not including any pad bytes required to galign this or next reg) + * dbnum = unique target number f/debug (see ) + * base = reg shortname w/o index (or sr=special, ur=TIE user reg) + * regnum = reg index in regfile, or special/TIE-user reg number + * bitsz = number of significant bits (regfile width, or ur/sr mask bits) + * gapsz = intervening bits, if bitsz bits not stored contiguously + * (padsz = pad bits at end [TIE regfile] or at msbits [ur,sr] of asize) + * reset = register reset value (or 0 if undefined at reset) + * x = reserved for future use (0 until then) + * + * To filter out certain registers, e.g. to expand only the non-global + * registers used by the compiler, you can do something like this: + * + * #define XCHAL_SA_REG(s,ccused,p...) SELCC##ccused(p) + * #define SELCC0(p...) + * #define SELCC1(abikind,p...) SELAK##abikind(p) + * #define SELAK0(p...) REG(p) + * #define SELAK1(p...) REG(p) + * #define SELAK2(p...) + * #define REG(kind,tie,name,galn,aln,asz,csz,dbnum,base,rnum,bsz,rst,x...) \ + * ...what you want to expand... + */ + +#define XCHAL_NCP_SA_NUM 12 +#define XCHAL_NCP_SA_LIST(s) \ + XCHAL_SA_REG(s,1,2,1,1, threadptr, 4, 4, 4,0x03E7, ur,231, 32,0,0,0) \ + XCHAL_SA_REG(s,1,0,0,1, acclo, 4, 4, 4,0x0210, sr,16 , 32,0,0,0) \ + XCHAL_SA_REG(s,1,0,0,1, acchi, 4, 4, 4,0x0211, sr,17 , 8,0,0,0) \ + XCHAL_SA_REG(s,0,0,0,1, br, 4, 4, 4,0x0204, sr,4 , 16,0,0,0) \ + XCHAL_SA_REG(s,0,0,0,1, scompare1, 4, 4, 4,0x020C, sr,12 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,0,1, m0, 4, 4, 4,0x0220, sr,32 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,0,1, m1, 4, 4, 4,0x0221, sr,33 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,0,1, m2, 4, 4, 4,0x0222, sr,34 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,0,1, m3, 4, 4, 4,0x0223, sr,35 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,1,0, f64r_lo, 4, 4, 4,0x03EA, ur,234, 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,1,0, f64r_hi, 4, 4, 4,0x03EB, ur,235, 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,1,0, f64s, 4, 4, 4,0x03EC, ur,236, 32,0,0,0) + +#define XCHAL_CP0_SA_NUM 18 +#define XCHAL_CP0_SA_LIST(s) \ + XCHAL_SA_REG(s,0,0,1,0, fcr, 4, 4, 4,0x03E8, ur,232, 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,1,0, fsr, 4, 4, 4,0x03E9, ur,233, 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f0, 4, 4, 4,0x0030, f,0 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f1, 4, 4, 4,0x0031, f,1 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f2, 4, 4, 4,0x0032, f,2 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f3, 4, 4, 4,0x0033, f,3 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f4, 4, 4, 4,0x0034, f,4 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f5, 4, 4, 4,0x0035, f,5 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f6, 4, 4, 4,0x0036, f,6 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f7, 4, 4, 4,0x0037, f,7 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f8, 4, 4, 4,0x0038, f,8 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f9, 4, 4, 4,0x0039, f,9 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f10, 4, 4, 4,0x003A, f,10 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f11, 4, 4, 4,0x003B, f,11 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f12, 4, 4, 4,0x003C, f,12 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f13, 4, 4, 4,0x003D, f,13 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f14, 4, 4, 4,0x003E, f,14 , 32,0,0,0) \ + XCHAL_SA_REG(s,0,0,2,0, f15, 4, 4, 4,0x003F, f,15 , 32,0,0,0) + +#define XCHAL_CP1_SA_NUM 0 +#define XCHAL_CP1_SA_LIST(s) /* empty */ + +#define XCHAL_CP2_SA_NUM 0 +#define XCHAL_CP2_SA_LIST(s) /* empty */ + +#define XCHAL_CP3_SA_NUM 0 +#define XCHAL_CP3_SA_LIST(s) /* empty */ + +#define XCHAL_CP4_SA_NUM 0 +#define XCHAL_CP4_SA_LIST(s) /* empty */ + +#define XCHAL_CP5_SA_NUM 0 +#define XCHAL_CP5_SA_LIST(s) /* empty */ + +#define XCHAL_CP6_SA_NUM 0 +#define XCHAL_CP6_SA_LIST(s) /* empty */ + +#define XCHAL_CP7_SA_NUM 0 +#define XCHAL_CP7_SA_LIST(s) /* empty */ + +/* Byte length of instruction from its first nibble (op0 field), per FLIX. */ +#define XCHAL_OP0_FORMAT_LENGTHS 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3 +/* Byte length of instruction from its first byte, per FLIX. */ +#define XCHAL_BYTE0_FORMAT_LENGTHS \ + 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3, 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,\ + 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3, 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,\ + 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3, 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,\ + 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3, 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,\ + 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3, 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,\ + 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3, 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,\ + 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3, 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,\ + 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3, 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3 + +#endif /*_XTENSA_CORE_TIE_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/core-macros.h b/tools/sdk/include/esp32/xtensa/core-macros.h new file mode 100755 index 00000000..663d2947 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/core-macros.h @@ -0,0 +1,456 @@ +/* + * xtensa/core-macros.h -- C specific definitions + * that depend on CORE configuration + */ + +/* + * Copyright (c) 2012 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef XTENSA_CACHE_H +#define XTENSA_CACHE_H + +#include + +/* Only define things for C code. */ +#if !defined(_ASMLANGUAGE) && !defined(_NOCLANGUAGE) && !defined(__ASSEMBLER__) + + + +/*************************** CACHE ***************************/ + +/* All the macros are in the lower case now and some of them + * share the name with the existing functions from hal.h. + * Including this header file will define XTHAL_USE_CACHE_MACROS + * which directs hal.h not to use the functions. + * + +/* + * Single-cache-line operations in C-callable inline assembly. + * Essentially macro versions (uppercase) of: + * + * xthal_icache_line_invalidate(void *addr); + * xthal_icache_line_lock(void *addr); + * xthal_icache_line_unlock(void *addr); + * xthal_icache_sync(void); + * + * NOTE: unlike the above functions, the following macros do NOT + * execute the xthal_icache_sync() as part of each line operation. + * This sync must be called explicitly by the caller. This is to + * allow better optimization when operating on more than one line. + * + * xthal_dcache_line_invalidate(void *addr); + * xthal_dcache_line_writeback(void *addr); + * xthal_dcache_line_writeback_inv(void *addr); + * xthal_dcache_line_lock(void *addr); + * xthal_dcache_line_unlock(void *addr); + * xthal_dcache_sync(void); + * xthal_dcache_line_prefetch_for_write(void *addr); + * xthal_dcache_line_prefetch_for_read(void *addr); + * + * All are made memory-barriers, given that's how they're typically used + * (ops operate on a whole line, so clobbers all memory not just *addr). + * + * NOTE: All the block block cache ops and line prefetches are implemented + * using intrinsics so they are better optimized regarding memory barriers etc. + * + * All block downgrade functions exist in two forms: with and without + * the 'max' parameter: This parameter allows compiler to optimize + * the functions whenever the parameter is smaller than the cache size. + * + * xthal_dcache_block_invalidate(void *addr, unsigned size); + * xthal_dcache_block_writeback(void *addr, unsigned size); + * xthal_dcache_block_writeback_inv(void *addr, unsigned size); + * xthal_dcache_block_invalidate_max(void *addr, unsigned size, unsigned max); + * xthal_dcache_block_writeback_max(void *addr, unsigned size, unsigned max); + * xthal_dcache_block_writeback_inv_max(void *addr, unsigned size, unsigned max); + * + * xthal_dcache_block_prefetch_for_read(void *addr, unsigned size); + * xthal_dcache_block_prefetch_for_write(void *addr, unsigned size); + * xthal_dcache_block_prefetch_modify(void *addr, unsigned size); + * xthal_dcache_block_prefetch_read_write(void *addr, unsigned size); + * xthal_dcache_block_prefetch_for_read_grp(void *addr, unsigned size); + * xthal_dcache_block_prefetch_for_write_grp(void *addr, unsigned size); + * xthal_dcache_block_prefetch_modify_grp(void *addr, unsigned size); + * xthal_dcache_block_prefetch_read_write_grp(void *addr, unsigned size) + * + * xthal_dcache_block_wait(); + * xthal_dcache_block_required_wait(); + * xthal_dcache_block_abort(); + * xthal_dcache_block_prefetch_end(); + * xthal_dcache_block_newgrp(); + */ + +/*** INSTRUCTION CACHE ***/ + +#define XTHAL_USE_CACHE_MACROS + +#if XCHAL_ICACHE_SIZE > 0 +# define xthal_icache_line_invalidate(addr) do { void *__a = (void*)(addr); \ + __asm__ __volatile__("ihi %0, 0" :: "a"(__a) : "memory"); \ + } while(0) +#else +# define xthal_icache_line_invalidate(addr) do {/*nothing*/} while(0) +#endif + +#if XCHAL_ICACHE_SIZE > 0 && XCHAL_ICACHE_LINE_LOCKABLE +# define xthal_icache_line_lock(addr) do { void *__a = (void*)(addr); \ + __asm__ __volatile__("ipfl %0, 0" :: "a"(__a) : "memory"); \ + } while(0) +# define xthal_icache_line_unlock(addr) do { void *__a = (void*)(addr); \ + __asm__ __volatile__("ihu %0, 0" :: "a"(__a) : "memory"); \ + } while(0) +#else +# define xthal_icache_line_lock(addr) do {/*nothing*/} while(0) +# define xthal_icache_line_unlock(addr) do {/*nothing*/} while(0) +#endif + +/* + * Even if a config doesn't have caches, an isync is still needed + * when instructions in any memory are modified, whether by a loader + * or self-modifying code. Therefore, this macro always produces + * an isync, whether or not an icache is present. + */ +#define xthal_icache_sync() \ + __asm__ __volatile__("isync":::"memory") + + +/*** DATA CACHE ***/ + +#if XCHAL_DCACHE_SIZE > 0 + +# include + +# define xthal_dcache_line_invalidate(addr) do { void *__a = (void*)(addr); \ + __asm__ __volatile__("dhi %0, 0" :: "a"(__a) : "memory"); \ + } while(0) +# define xthal_dcache_line_writeback(addr) do { void *__a = (void*)(addr); \ + __asm__ __volatile__("dhwb %0, 0" :: "a"(__a) : "memory"); \ + } while(0) +# define xthal_dcache_line_writeback_inv(addr) do { void *__a = (void*)(addr); \ + __asm__ __volatile__("dhwbi %0, 0" :: "a"(__a) : "memory"); \ + } while(0) +# define xthal_dcache_sync() \ + __asm__ __volatile__("" /*"dsync"?*/:::"memory") +# define xthal_dcache_line_prefetch_for_read(addr) do { \ + XT_DPFR((const int*)addr, 0); \ + } while(0) +#else +# define xthal_dcache_line_invalidate(addr) do {/*nothing*/} while(0) +# define xthal_dcache_line_writeback(addr) do {/*nothing*/} while(0) +# define xthal_dcache_line_writeback_inv(addr) do {/*nothing*/} while(0) +# define xthal_dcache_sync() __asm__ __volatile__("":::"memory") +# define xthal_dcache_line_prefetch_for_read(addr) do {/*nothing*/} while(0) +#endif + +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_DCACHE_LINE_LOCKABLE +# define xthal_dcache_line_lock(addr) do { void *__a = (void*)(addr); \ + __asm__ __volatile__("dpfl %0, 0" :: "a"(__a) : "memory"); \ + } while(0) +# define xthal_dcache_line_unlock(addr) do { void *__a = (void*)(addr); \ + __asm__ __volatile__("dhu %0, 0" :: "a"(__a) : "memory"); \ + } while(0) +#else +# define xthal_dcache_line_lock(addr) do {/*nothing*/} while(0) +# define xthal_dcache_line_unlock(addr) do {/*nothing*/} while(0) +#endif + +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_DCACHE_IS_WRITEBACK + +# define xthal_dcache_line_prefetch_for_write(addr) do { \ + XT_DPFW((const int*)addr, 0); \ + } while(0) +#else +# define xthal_dcache_line_prefetch_for_write(addr) do {/*nothing*/} while(0) +#endif + + +/***** Block Operations *****/ + +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_HAVE_CACHE_BLOCKOPS + +/* upgrades */ + +# define _XTHAL_DCACHE_BLOCK_UPGRADE(addr, size, type) \ + { \ + type((const int*)addr, size); \ + } + +/*downgrades */ + +# define _XTHAL_DCACHE_BLOCK_DOWNGRADE(addr, size, type) \ + unsigned _s = size; \ + unsigned _a = addr; \ + do { \ + unsigned __s = (_s > XCHAL_DCACHE_SIZE) ? \ + XCHAL_DCACHE_SIZE : _s; \ + type((const int*)_a, __s); \ + _s -= __s; \ + _a += __s; \ + } while(_s > 0); + +# define _XTHAL_DCACHE_BLOCK_DOWNGRADE_MAX(addr, size, type, max) \ + if (max <= XCHAL_DCACHE_SIZE) { \ + unsigned _s = size; \ + unsigned _a = addr; \ + type((const int*)_a, _s); \ + } \ + else { \ + _XTHAL_DCACHE_BLOCK_DOWNGRADE(addr, size, type); \ + } + +# define xthal_dcache_block_invalidate(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_DOWNGRADE(addr, size, XT_DHI_B); \ + } while(0) +# define xthal_dcache_block_writeback(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_DOWNGRADE(addr, size, XT_DHWB_B); \ + } while(0) +# define xthal_dcache_block_writeback_inv(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_DOWNGRADE(addr, size, XT_DHWBI_B); \ + } while(0) + +# define xthal_dcache_block_invalidate_max(addr, size, max) do { \ + _XTHAL_DCACHE_BLOCK_DOWNGRADE_MAX(addr, size, XT_DHI_B, max); \ + } while(0) +# define xthal_dcache_block_writeback_max(addr, size, max) do { \ + _XTHAL_DCACHE_BLOCK_DOWNGRADE_MAX(addr, size, XT_DHWB_B, max); \ + } while(0) +# define xthal_dcache_block_writeback_inv_max(addr, size, max) do { \ + _XTHAL_DCACHE_BLOCK_DOWNGRADE_MAX(addr, size, XT_DHWBI_B, max); \ + } while(0) + +/* upgrades that are performed even with write-thru caches */ + +# define xthal_dcache_block_prefetch_read_write(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_UPGRADE(addr, size, XT_DPFW_B); \ + } while(0) +# define xthal_dcache_block_prefetch_read_write_grp(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_UPGRADE(addr, size, XT_DPFW_BF); \ + } while(0) +# define xthal_dcache_block_prefetch_for_read(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_UPGRADE(addr, size, XT_DPFR_B); \ + } while(0) +# define xthal_dcache_block_prefetch_for_read_grp(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_UPGRADE(addr, size, XT_DPFR_BF); \ + } while(0) + +/* abort all or end optional block cache operations */ +# define xthal_dcache_block_abort() do { \ + XT_PFEND_A(); \ + } while(0) +# define xthal_dcache_block_end() do { \ + XT_PFEND_O(); \ + } while(0) + +/* wait for all/required block cache operations to finish */ +# define xthal_dcache_block_wait() do { \ + XT_PFWAIT_A(); \ + } while(0) +# define xthal_dcache_block_required_wait() do { \ + XT_PFWAIT_R(); \ + } while(0) +/* Start a new group */ +# define xthal_dcache_block_newgrp() do { \ + XT_PFNXT_F(); \ + } while(0) +#else +# define xthal_dcache_block_invalidate(addr, size) do {/*nothing*/} while(0) +# define xthal_dcache_block_writeback(addr, size) do {/*nothing*/} while(0) +# define xthal_dcache_block_writeback_inv(addr, size) do {/*nothing*/} while(0) +# define xthal_dcache_block_invalidate_max(addr, size, max) do {/*nothing*/} while(0) +# define xthal_dcache_block_writeback_max(addr, size, max) do {/*nothing*/} while(0) +# define xthal_dcache_block_writeback_inv_max(addr, size, max) do {/*nothing*/} while(0) +# define xthal_dcache_block_prefetch_read_write(addr, size) do {/*nothing*/} while(0) +# define xthal_dcache_block_prefetch_read_write_grp(addr, size) do {/*nothing*/} while(0) +# define xthal_dcache_block_prefetch_for_read(addr, size) do {/*nothing*/} while(0) +# define xthal_dcache_block_prefetch_for_read_grp(addr, size) do {/*nothing*/} while(0) +# define xthal_dcache_block_end() do {/*nothing*/} while(0) +# define xthal_dcache_block_abort() do {/*nothing*/} while(0) +# define xthal_dcache_block_wait() do {/*nothing*/} while(0) +# define xthal_dcache_block_required_wait() do {/*nothing*/} while(0) +# define xthal_dcache_block_newgrp() do {/*nothing*/} while(0) +#endif + +#if XCHAL_DCACHE_SIZE > 0 && XCHAL_HAVE_CACHE_BLOCKOPS && XCHAL_DCACHE_IS_WRITEBACK + +# define xthal_dcache_block_prefetch_for_write(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_UPGRADE(addr, size, XT_DPFW_B); \ + } while(0) +# define xthal_dcache_block_prefetch_modify(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_UPGRADE(addr, size, XT_DPFM_B); \ + } while(0) +# define xthal_dcache_block_prefetch_for_write_grp(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_UPGRADE(addr, size, XT_DPFW_BF); \ + } while(0) +# define xthal_dcache_block_prefetch_modify_grp(addr, size) do { \ + _XTHAL_DCACHE_BLOCK_UPGRADE(addr, size, XT_DPFM_BF); \ + } while(0) +#else +# define xthal_dcache_block_prefetch_for_write(addr, size) do {/*nothing*/} while(0) +# define xthal_dcache_block_prefetch_modify(addr, size) do {/*nothing*/} while(0) +# define xthal_dcache_block_prefetch_for_write_grp(addr, size) do {/*nothing*/} while(0) +# define xthal_dcache_block_prefetch_modify_grp(addr, size) do {/*nothing*/} while(0) +#endif + +/*************************** INTERRUPTS ***************************/ + +/* + * Macro versions of: + * unsigned xthal_get_intenable( void ); + * void xthal_set_intenable( unsigned ); + * unsigned xthal_get_interrupt( void ); + * void xthal_set_intset( unsigned ); + * void xthal_set_intclear( unsigned ); + * unsigned xthal_get_ccount(void); + * void xthal_set_ccompare(int, unsigned); + * unsigned xthal_get_ccompare(int); + * + * NOTE: for {set,get}_ccompare, the first argument MUST be a decimal constant. + */ + +#if XCHAL_HAVE_INTERRUPTS +# define XTHAL_GET_INTENABLE() ({ int __intenable; \ + __asm__("rsr.intenable %0" : "=a"(__intenable)); \ + __intenable; }) +# define XTHAL_SET_INTENABLE(v) do { int __intenable = (int)(v); \ + __asm__ __volatile__("wsr.intenable %0" :: "a"(__intenable):"memory"); \ + } while(0) +# define XTHAL_GET_INTERRUPT() ({ int __interrupt; \ + __asm__("rsr.interrupt %0" : "=a"(__interrupt)); \ + __interrupt; }) +# define XTHAL_SET_INTSET(v) do { int __interrupt = (int)(v); \ + __asm__ __volatile__("wsr.intset %0" :: "a"(__interrupt):"memory"); \ + } while(0) +# define XTHAL_SET_INTCLEAR(v) do { int __interrupt = (int)(v); \ + __asm__ __volatile__("wsr.intclear %0" :: "a"(__interrupt):"memory"); \ + } while(0) +# define XTHAL_GET_CCOUNT() ({ int __ccount; \ + __asm__("rsr.ccount %0" : "=a"(__ccount)); \ + __ccount; }) +# define XTHAL_SET_CCOUNT(v) do { int __ccount = (int)(v); \ + __asm__ __volatile__("wsr.ccount %0" :: "a"(__ccount):"memory"); \ + } while(0) +# define _XTHAL_GET_CCOMPARE(n) ({ int __ccompare; \ + __asm__("rsr.ccompare" #n " %0" : "=a"(__ccompare)); \ + __ccompare; }) +# define XTHAL_GET_CCOMPARE(n) _XTHAL_GET_CCOMPARE(n) +# define _XTHAL_SET_CCOMPARE(n,v) do { int __ccompare = (int)(v); \ + __asm__ __volatile__("wsr.ccompare" #n " %0 ; esync" :: "a"(__ccompare):"memory"); \ + } while(0) +# define XTHAL_SET_CCOMPARE(n,v) _XTHAL_SET_CCOMPARE(n,v) +#else +# define XTHAL_GET_INTENABLE() 0 +# define XTHAL_SET_INTENABLE(v) do {/*nothing*/} while(0) +# define XTHAL_GET_INTERRUPT() 0 +# define XTHAL_SET_INTSET(v) do {/*nothing*/} while(0) +# define XTHAL_SET_INTCLEAR(v) do {/*nothing*/} while(0) +# define XTHAL_GET_CCOUNT() 0 +# define XTHAL_SET_CCOUNT(v) do {/*nothing*/} while(0) +# define XTHAL_GET_CCOMPARE(n) 0 +# define XTHAL_SET_CCOMPARE(n,v) do {/*nothing*/} while(0) +#endif + + +/*************************** MISC ***************************/ + +/* + * Macro or inline versions of: + * void xthal_clear_regcached_code( void ); + * unsigned xthal_get_prid( void ); + * unsigned xthal_compare_and_set( int *addr, int testval, int setval ); + */ + +#if XCHAL_HAVE_LOOPS +# define XTHAL_CLEAR_REGCACHED_CODE() \ + __asm__ __volatile__("wsr.lcount %0" :: "a"(0) : "memory") +#else +# define XTHAL_CLEAR_REGCACHED_CODE() do {/*nothing*/} while(0) +#endif + +#if XCHAL_HAVE_PRID +# define XTHAL_GET_PRID() ({ int __prid; \ + __asm__("rsr.prid %0" : "=a"(__prid)); \ + __prid; }) +#else +# define XTHAL_GET_PRID() 0 +#endif + + +static inline unsigned XTHAL_COMPARE_AND_SET( int *addr, int testval, int setval ) +{ + int result; + +#if XCHAL_HAVE_S32C1I && XCHAL_HW_MIN_VERSION_MAJOR >= 2200 + __asm__ __volatile__ ( + " wsr.scompare1 %2 \n" + " s32c1i %0, %3, 0 \n" + : "=a"(result) : "0" (setval), "a" (testval), "a" (addr) + : "memory"); +#elif XCHAL_HAVE_INTERRUPTS + int tmp; + __asm__ __volatile__ ( + " rsil %4, 15 \n" // %4 == saved ps + " l32i %0, %3, 0 \n" // %0 == value to test, return val + " bne %2, %0, 9f \n" // test + " s32i %1, %3, 0 \n" // write the new value + "9: wsr.ps %4 ; rsync \n" // restore the PS + : "=a"(result) + : "0" (setval), "a" (testval), "a" (addr), "a" (tmp) + : "memory"); +#else + __asm__ __volatile__ ( + " l32i %0, %3, 0 \n" // %0 == value to test, return val + " bne %2, %0, 9f \n" // test + " s32i %1, %3, 0 \n" // write the new value + "9: \n" + : "=a"(result) : "0" (setval), "a" (testval), "a" (addr) + : "memory"); +#endif + return result; +} + +#if XCHAL_HAVE_EXTERN_REGS + +static inline unsigned XTHAL_RER (unsigned int reg) +{ + unsigned result; + + __asm__ __volatile__ ( + " rer %0, %1" + : "=a" (result) : "a" (reg) : "memory"); + + return result; +} + +static inline void XTHAL_WER (unsigned reg, unsigned value) +{ + __asm__ __volatile__ ( + " wer %0, %1" + : : "a" (value), "a" (reg) : "memory"); +} + +#endif /* XCHAL_HAVE_EXTERN_REGS */ + +#endif /* C code */ + +#endif /*XTENSA_CACHE_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/coreasm.h b/tools/sdk/include/esp32/xtensa/coreasm.h new file mode 100755 index 00000000..e41e04d1 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/coreasm.h @@ -0,0 +1,939 @@ +/* + * xtensa/coreasm.h -- assembler-specific definitions that depend on CORE configuration + * + * Source for configuration-independent binaries (which link in a + * configuration-specific HAL library) must NEVER include this file. + * It is perfectly normal, however, for the HAL itself to include this file. + * + * This file must NOT include xtensa/config/system.h. Any assembler + * header file that depends on system information should likely go + * in a new systemasm.h (or sysasm.h) header file. + * + * NOTE: macro beqi32 is NOT configuration-dependent, and is placed + * here until we have a proper configuration-independent header file. + */ + +/* $Id: //depot/rel/Eaglenest/Xtensa/OS/include/xtensa/coreasm.h#3 $ */ + +/* + * Copyright (c) 2000-2014 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef XTENSA_COREASM_H +#define XTENSA_COREASM_H + +/* + * Tell header files this is assembly source, so they can avoid non-assembler + * definitions (eg. C types etc): + */ +#ifndef _ASMLANGUAGE /* conditionalize to avoid cpp warnings (3rd parties might use same macro) */ +#define _ASMLANGUAGE +#endif + +#include +#include +#include + +/* + * Assembly-language specific definitions (assembly macros, etc.). + */ + +/*---------------------------------------------------------------------- + * find_ms_setbit + * + * This macro finds the most significant bit that is set in + * and return its index + in , or - 1 if is zero. + * The index counts starting at zero for the lsbit, so the return + * value ranges from -1 (no bit set) to +31 (msbit set). + * + * Parameters: + * destination address register (any register) + * source address register + * temporary address register (must be different than ) + * constant value added to result (usually 0 or 1) + * On entry: + * = undefined if different than + * = value whose most significant set bit is to be found + * = undefined + * no other registers are used by this macro. + * On exit: + * = + index of msbit set in original , + * = - 1 if original was zero. + * clobbered (if not ) + * clobbered (if not ) + * Example: + * find_ms_setbit a0, a4, a0, 0 -- return in a0 index of msbit set in a4 + */ + + .macro find_ms_setbit ad, as, at, base +#if XCHAL_HAVE_NSA + movi \at, 31+\base + nsau \as, \as // get index of \as, numbered from msbit (32 if absent) + sub \ad, \at, \as // get numbering from lsbit (0..31, -1 if absent) +#else /* XCHAL_HAVE_NSA */ + movi \at, \base // start with result of 0 (point to lsbit of 32) + + beqz \as, 2f // special case for zero argument: return -1 + bltui \as, 0x10000, 1f // is it one of the 16 lsbits? (if so, check lower 16 bits) + addi \at, \at, 16 // no, increment result to upper 16 bits (of 32) + //srli \as, \as, 16 // check upper half (shift right 16 bits) + extui \as, \as, 16, 16 // check upper half (shift right 16 bits) +1: bltui \as, 0x100, 1f // is it one of the 8 lsbits? (if so, check lower 8 bits) + addi \at, \at, 8 // no, increment result to upper 8 bits (of 16) + srli \as, \as, 8 // shift right to check upper 8 bits +1: bltui \as, 0x10, 1f // is it one of the 4 lsbits? (if so, check lower 4 bits) + addi \at, \at, 4 // no, increment result to upper 4 bits (of 8) + srli \as, \as, 4 // shift right 4 bits to check upper half +1: bltui \as, 0x4, 1f // is it one of the 2 lsbits? (if so, check lower 2 bits) + addi \at, \at, 2 // no, increment result to upper 2 bits (of 4) + srli \as, \as, 2 // shift right 2 bits to check upper half +1: bltui \as, 0x2, 1f // is it the lsbit? + addi \at, \at, 2 // no, increment result to upper bit (of 2) +2: addi \at, \at, -1 // (from just above: add 1; from beqz: return -1) + //srli \as, \as, 1 +1: // done! \at contains index of msbit set (or -1 if none set) + .if 0x\ad - 0x\at // destination different than \at ? (works because regs are a0-a15) + mov \ad, \at // then move result to \ad + .endif +#endif /* XCHAL_HAVE_NSA */ + .endm // find_ms_setbit + +/*---------------------------------------------------------------------- + * find_ls_setbit + * + * This macro finds the least significant bit that is set in , + * and return its index in . + * Usage is the same as for the find_ms_setbit macro. + * Example: + * find_ls_setbit a0, a4, a0, 0 -- return in a0 index of lsbit set in a4 + */ + + .macro find_ls_setbit ad, as, at, base + neg \at, \as // keep only the least-significant bit that is set... + and \as, \at, \as // ... in \as + find_ms_setbit \ad, \as, \at, \base + .endm // find_ls_setbit + +/*---------------------------------------------------------------------- + * find_ls_one + * + * Same as find_ls_setbit with base zero. + * Source (as) and destination (ad) registers must be different. + * Provided for backward compatibility. + */ + + .macro find_ls_one ad, as + find_ls_setbit \ad, \as, \ad, 0 + .endm // find_ls_one + +/*---------------------------------------------------------------------- + * floop, floopnez, floopgtz, floopend + * + * These macros are used for fast inner loops that + * work whether or not the Loops options is configured. + * If the Loops option is configured, they simply use + * the zero-overhead LOOP instructions; otherwise + * they use explicit decrement and branch instructions. + * + * They are used in pairs, with floop, floopnez or floopgtz + * at the beginning of the loop, and floopend at the end. + * + * Each pair of loop macro calls must be given the loop count + * address register and a unique label for that loop. + * + * Example: + * + * movi a3, 16 // loop 16 times + * floop a3, myloop1 + * : + * bnez a7, end1 // exit loop if a7 != 0 + * : + * floopend a3, myloop1 + * end1: + * + * Like the LOOP instructions, these macros cannot be + * nested, must include at least one instruction, + * cannot call functions inside the loop, etc. + * The loop can be exited by jumping to the instruction + * following floopend (or elsewhere outside the loop), + * or continued by jumping to a NOP instruction placed + * immediately before floopend. + * + * Unlike LOOP instructions, the register passed to floop* + * cannot be used inside the loop, because it is used as + * the loop counter if the Loops option is not configured. + * And its value is undefined after exiting the loop. + * And because the loop counter register is active inside + * the loop, you can't easily use this construct to loop + * across a register file using ROTW as you might with LOOP + * instructions, unless you copy the loop register along. + */ + + /* Named label version of the macros: */ + + .macro floop ar, endlabel + floop_ \ar, .Lfloopstart_\endlabel, .Lfloopend_\endlabel + .endm + + .macro floopnez ar, endlabel + floopnez_ \ar, .Lfloopstart_\endlabel, .Lfloopend_\endlabel + .endm + + .macro floopgtz ar, endlabel + floopgtz_ \ar, .Lfloopstart_\endlabel, .Lfloopend_\endlabel + .endm + + .macro floopend ar, endlabel + floopend_ \ar, .Lfloopstart_\endlabel, .Lfloopend_\endlabel + .endm + + /* Numbered local label version of the macros: */ +#if 0 /*UNTESTED*/ + .macro floop89 ar + floop_ \ar, 8, 9f + .endm + + .macro floopnez89 ar + floopnez_ \ar, 8, 9f + .endm + + .macro floopgtz89 ar + floopgtz_ \ar, 8, 9f + .endm + + .macro floopend89 ar + floopend_ \ar, 8b, 9 + .endm +#endif /*0*/ + + /* Underlying version of the macros: */ + + .macro floop_ ar, startlabel, endlabelref + .ifdef _infloop_ + .if _infloop_ + .err // Error: floop cannot be nested + .endif + .endif + .set _infloop_, 1 +#if XCHAL_HAVE_LOOPS + loop \ar, \endlabelref +#else /* XCHAL_HAVE_LOOPS */ +\startlabel: + addi \ar, \ar, -1 +#endif /* XCHAL_HAVE_LOOPS */ + .endm // floop_ + + .macro floopnez_ ar, startlabel, endlabelref + .ifdef _infloop_ + .if _infloop_ + .err // Error: floopnez cannot be nested + .endif + .endif + .set _infloop_, 1 +#if XCHAL_HAVE_LOOPS + loopnez \ar, \endlabelref +#else /* XCHAL_HAVE_LOOPS */ + beqz \ar, \endlabelref +\startlabel: + addi \ar, \ar, -1 +#endif /* XCHAL_HAVE_LOOPS */ + .endm // floopnez_ + + .macro floopgtz_ ar, startlabel, endlabelref + .ifdef _infloop_ + .if _infloop_ + .err // Error: floopgtz cannot be nested + .endif + .endif + .set _infloop_, 1 +#if XCHAL_HAVE_LOOPS + loopgtz \ar, \endlabelref +#else /* XCHAL_HAVE_LOOPS */ + bltz \ar, \endlabelref + beqz \ar, \endlabelref +\startlabel: + addi \ar, \ar, -1 +#endif /* XCHAL_HAVE_LOOPS */ + .endm // floopgtz_ + + + .macro floopend_ ar, startlabelref, endlabel + .ifndef _infloop_ + .err // Error: floopend without matching floopXXX + .endif + .ifeq _infloop_ + .err // Error: floopend without matching floopXXX + .endif + .set _infloop_, 0 +#if ! XCHAL_HAVE_LOOPS + bnez \ar, \startlabelref +#endif /* XCHAL_HAVE_LOOPS */ +\endlabel: + .endm // floopend_ + +/*---------------------------------------------------------------------- + * crsil -- conditional RSIL (read/set interrupt level) + * + * Executes the RSIL instruction if it exists, else just reads PS. + * The RSIL instruction does not exist in the new exception architecture + * if the interrupt option is not selected. + */ + + .macro crsil ar, newlevel +#if XCHAL_HAVE_OLD_EXC_ARCH || XCHAL_HAVE_INTERRUPTS + rsil \ar, \newlevel +#else + rsr \ar, PS +#endif + .endm // crsil + +/*---------------------------------------------------------------------- + * safe_movi_a0 -- move constant into a0 when L32R is not safe + * + * This macro is typically used by interrupt/exception handlers. + * Loads a 32-bit constant in a0, without using any other register, + * and without corrupting the LITBASE register, even when the + * value of the LITBASE register is unknown (eg. when application + * code and interrupt/exception handling code are built independently, + * and thus with independent values of the LITBASE register; + * debug monitors are one example of this). + * + * Worst-case size of resulting code: 17 bytes. + */ + + .macro safe_movi_a0 constant +#if XCHAL_HAVE_ABSOLUTE_LITERALS + /* Contort a PC-relative literal load even though we may be in litbase-relative mode: */ + j 1f + .begin no-transform // ensure what follows is assembled exactly as-is + .align 4 // ensure constant and call0 target ... + .byte 0 // ... are 4-byte aligned (call0 instruction is 3 bytes long) +1: call0 2f // read PC (that follows call0) in a0 + .long \constant // 32-bit constant to load into a0 +2: + .end no-transform + l32i a0, a0, 0 // load constant +#else + movi a0, \constant // no LITBASE, can assume PC-relative L32R +#endif + .endm + + + + +/*---------------------------------------------------------------------- + * window_spill{4,8,12} + * + * These macros spill callers' register windows to the stack. + * They work for both privileged and non-privileged tasks. + * Must be called from a windowed ABI context, eg. within + * a windowed ABI function (ie. valid stack frame, window + * exceptions enabled, not in exception mode, etc). + * + * This macro requires a single invocation of the window_spill_common + * macro in the same assembly unit and section. + * + * Note that using window_spill{4,8,12} macros is more efficient + * than calling a function implemented using window_spill_function, + * because the latter needs extra code to figure out the size of + * the call to the spilling function. + * + * Example usage: + * + * .text + * .align 4 + * .global some_function + * .type some_function,@function + * some_function: + * entry a1, 16 + * : + * : + * + * window_spill4 // Spill windows of some_function's callers; preserves a0..a3 only; + * // to use window_spill{8,12} in this example function we'd have + * // to increase space allocated by the entry instruction, because + * // 16 bytes only allows call4; 32 or 48 bytes (+locals) are needed + * // for call8/window_spill8 or call12/window_spill12 respectively. + * + * : + * + * retw + * + * window_spill_common // instantiates code used by window_spill4 + * + * + * On entry: + * none (if window_spill4) + * stack frame has enough space allocated for call8 (if window_spill8) + * stack frame has enough space allocated for call12 (if window_spill12) + * On exit: + * a4..a15 clobbered (if window_spill4) + * a8..a15 clobbered (if window_spill8) + * a12..a15 clobbered (if window_spill12) + * no caller windows are in live registers + */ + + .macro window_spill4 +#if XCHAL_HAVE_WINDOWED +# if XCHAL_NUM_AREGS == 16 + movi a15, 0 // for 16-register files, no need to call to reach the end +# elif XCHAL_NUM_AREGS == 32 + call4 .L__wdwspill_assist28 // call deep enough to clear out any live callers +# elif XCHAL_NUM_AREGS == 64 + call4 .L__wdwspill_assist60 // call deep enough to clear out any live callers +# endif +#endif + .endm // window_spill4 + + .macro window_spill8 +#if XCHAL_HAVE_WINDOWED +# if XCHAL_NUM_AREGS == 16 + movi a15, 0 // for 16-register files, no need to call to reach the end +# elif XCHAL_NUM_AREGS == 32 + call8 .L__wdwspill_assist24 // call deep enough to clear out any live callers +# elif XCHAL_NUM_AREGS == 64 + call8 .L__wdwspill_assist56 // call deep enough to clear out any live callers +# endif +#endif + .endm // window_spill8 + + .macro window_spill12 +#if XCHAL_HAVE_WINDOWED +# if XCHAL_NUM_AREGS == 16 + movi a15, 0 // for 16-register files, no need to call to reach the end +# elif XCHAL_NUM_AREGS == 32 + call12 .L__wdwspill_assist20 // call deep enough to clear out any live callers +# elif XCHAL_NUM_AREGS == 64 + call12 .L__wdwspill_assist52 // call deep enough to clear out any live callers +# endif +#endif + .endm // window_spill12 + + +/*---------------------------------------------------------------------- + * window_spill_function + * + * This macro outputs a function that will spill its caller's callers' + * register windows to the stack. Eg. it could be used to implement + * a version of xthal_window_spill() that works in non-privileged tasks. + * This works for both privileged and non-privileged tasks. + * + * Typical usage: + * + * .text + * .align 4 + * .global my_spill_function + * .type my_spill_function,@function + * my_spill_function: + * window_spill_function + * + * On entry to resulting function: + * none + * On exit from resulting function: + * none (no caller windows are in live registers) + */ + + .macro window_spill_function +#if XCHAL_HAVE_WINDOWED +# if XCHAL_NUM_AREGS == 32 + entry sp, 48 + bbci.l a0, 31, 1f // branch if called with call4 + bbsi.l a0, 30, 2f // branch if called with call12 + call8 .L__wdwspill_assist16 // called with call8, only need another 8 + retw +1: call12 .L__wdwspill_assist16 // called with call4, only need another 12 + retw +2: call4 .L__wdwspill_assist16 // called with call12, only need another 4 + retw +# elif XCHAL_NUM_AREGS == 64 + entry sp, 48 + bbci.l a0, 31, 1f // branch if called with call4 + bbsi.l a0, 30, 2f // branch if called with call12 + call4 .L__wdwspill_assist52 // called with call8, only need a call4 + retw +1: call8 .L__wdwspill_assist52 // called with call4, only need a call8 + retw +2: call12 .L__wdwspill_assist40 // called with call12, can skip a call12 + retw +# elif XCHAL_NUM_AREGS == 16 + entry sp, 16 + bbci.l a0, 31, 1f // branch if called with call4 + bbsi.l a0, 30, 2f // branch if called with call12 + movi a7, 0 // called with call8 + retw +1: movi a11, 0 // called with call4 +2: retw // if called with call12, everything already spilled + +// movi a15, 0 // trick to spill all but the direct caller +// j 1f +// // The entry instruction is magical in the assembler (gets auto-aligned) +// // so we have to jump to it to avoid falling through the padding. +// // We need entry/retw to know where to return. +//1: entry sp, 16 +// retw +# else +# error "unrecognized address register file size" +# endif + +#endif /* XCHAL_HAVE_WINDOWED */ + window_spill_common + .endm // window_spill_function + +/*---------------------------------------------------------------------- + * window_spill_common + * + * Common code used by any number of invocations of the window_spill## + * and window_spill_function macros. + * + * Must be instantiated exactly once within a given assembly unit, + * within call/j range of and same section as window_spill## + * macro invocations for that assembly unit. + * (Is automatically instantiated by the window_spill_function macro.) + */ + + .macro window_spill_common +#if XCHAL_HAVE_WINDOWED && (XCHAL_NUM_AREGS == 32 || XCHAL_NUM_AREGS == 64) + .ifndef .L__wdwspill_defined +# if XCHAL_NUM_AREGS >= 64 +.L__wdwspill_assist60: + entry sp, 32 + call8 .L__wdwspill_assist52 + retw +.L__wdwspill_assist56: + entry sp, 16 + call4 .L__wdwspill_assist52 + retw +.L__wdwspill_assist52: + entry sp, 48 + call12 .L__wdwspill_assist40 + retw +.L__wdwspill_assist40: + entry sp, 48 + call12 .L__wdwspill_assist28 + retw +# endif +.L__wdwspill_assist28: + entry sp, 48 + call12 .L__wdwspill_assist16 + retw +.L__wdwspill_assist24: + entry sp, 32 + call8 .L__wdwspill_assist16 + retw +.L__wdwspill_assist20: + entry sp, 16 + call4 .L__wdwspill_assist16 + retw +.L__wdwspill_assist16: + entry sp, 16 + movi a15, 0 + retw + .set .L__wdwspill_defined, 1 + .endif +#endif /* XCHAL_HAVE_WINDOWED with 32 or 64 aregs */ + .endm // window_spill_common + +/*---------------------------------------------------------------------- + * beqi32 + * + * macro implements version of beqi for arbitrary 32-bit immediate value + * + * beqi32 ax, ay, imm32, label + * + * Compares value in register ax with imm32 value and jumps to label if + * equal. Clobbers register ay if needed + * + */ + .macro beqi32 ax, ay, imm, label + .ifeq ((\imm-1) & ~7) // 1..8 ? + beqi \ax, \imm, \label + .else + .ifeq (\imm+1) // -1 ? + beqi \ax, \imm, \label + .else + .ifeq (\imm) // 0 ? + beqz \ax, \label + .else + // We could also handle immediates 10,12,16,32,64,128,256 + // but it would be a long macro... + movi \ay, \imm + beq \ax, \ay, \label + .endif + .endif + .endif + .endm // beqi32 + +/*---------------------------------------------------------------------- + * isync_retw_nop + * + * This macro must be invoked immediately after ISYNC if ISYNC + * would otherwise be immediately followed by RETW (or other instruction + * modifying WindowBase or WindowStart), in a context where + * kernel vector mode may be selected, and level-one interrupts + * and window overflows may be enabled, on an XEA1 configuration. + * + * On hardware with erratum "XEA1KWIN" (see for details), + * XEA1 code must have at least one instruction between ISYNC and RETW if + * run in kernel vector mode with interrupts and window overflows enabled. + */ + .macro isync_retw_nop +#if XCHAL_MAYHAVE_ERRATUM_XEA1KWIN + nop +#endif + .endm + +/*---------------------------------------------------------------------- + * isync_erratum453 + * + * This macro must be invoked at certain points in the code, + * such as in exception and interrupt vectors in particular, + * to work around erratum 453. + */ + .macro isync_erratum453 +#if XCHAL_ERRATUM_453 + isync +#endif + .endm + + + +/*---------------------------------------------------------------------- + * abs + * + * implements abs on machines that do not have it configured + */ + +#if !XCHAL_HAVE_ABS + .macro abs arr, ars + .ifc \arr, \ars + //src equal dest is less efficient + bgez \arr, 1f + neg \arr, \arr +1: + .else + neg \arr, \ars + movgez \arr, \ars, \ars + .endif + .endm +#endif /* !XCHAL_HAVE_ABS */ + + +/*---------------------------------------------------------------------- + * addx2 + * + * implements addx2 on machines that do not have it configured + * + */ + +#if !XCHAL_HAVE_ADDX + .macro addx2 arr, ars, art + .ifc \arr, \art + .ifc \arr, \ars + // addx2 a, a, a (not common) + .err + .else + add \arr, \ars, \art + add \arr, \ars, \art + .endif + .else + //addx2 a, b, c + //addx2 a, a, b + //addx2 a, b, b + slli \arr, \ars, 1 + add \arr, \arr, \art + .endif + .endm +#endif /* !XCHAL_HAVE_ADDX */ + +/*---------------------------------------------------------------------- + * addx4 + * + * implements addx4 on machines that do not have it configured + * + */ + +#if !XCHAL_HAVE_ADDX + .macro addx4 arr, ars, art + .ifc \arr, \art + .ifc \arr, \ars + // addx4 a, a, a (not common) + .err + .else + //# addx4 a, b, a + add \arr, \ars, \art + add \arr, \ars, \art + add \arr, \ars, \art + add \arr, \ars, \art + .endif + .else + //addx4 a, b, c + //addx4 a, a, b + //addx4 a, b, b + slli \arr, \ars, 2 + add \arr, \arr, \art + .endif + .endm +#endif /* !XCHAL_HAVE_ADDX */ + +/*---------------------------------------------------------------------- + * addx8 + * + * implements addx8 on machines that do not have it configured + * + */ + +#if !XCHAL_HAVE_ADDX + .macro addx8 arr, ars, art + .ifc \arr, \art + .ifc \arr, \ars + //addx8 a, a, a (not common) + .err + .else + //addx8 a, b, a + add \arr, \ars, \art + add \arr, \ars, \art + add \arr, \ars, \art + add \arr, \ars, \art + add \arr, \ars, \art + add \arr, \ars, \art + add \arr, \ars, \art + add \arr, \ars, \art + .endif + .else + //addx8 a, b, c + //addx8 a, a, b + //addx8 a, b, b + slli \arr, \ars, 3 + add \arr, \arr, \art + .endif + .endm +#endif /* !XCHAL_HAVE_ADDX */ + + +/*---------------------------------------------------------------------- + * rfe_rfue + * + * Maps to RFUE on XEA1, and RFE on XEA2. No mapping on XEAX. + */ + +#if XCHAL_HAVE_XEA1 + .macro rfe_rfue + rfue + .endm +#elif XCHAL_HAVE_XEA2 + .macro rfe_rfue + rfe + .endm +#endif + + +/*---------------------------------------------------------------------- + * abi_entry + * + * Generate proper function entry sequence for the current ABI + * (windowed or call0). Takes care of allocating stack space (up to 1kB) + * and saving the return PC, if necessary. The corresponding abi_return + * macro does the corresponding stack deallocation and restoring return PC. + * + * Parameters are: + * + * locsize Number of bytes to allocate on the stack + * for local variables (and for args to pass to + * callees, if any calls are made). Defaults to zero. + * The macro rounds this up to a multiple of 16. + * NOTE: large values are allowed (e.g. up to 1 GB). + * + * callsize Maximum call size made by this function. + * Leave zero (default) for leaf functions, i.e. if + * this function makes no calls to other functions. + * Otherwise must be set to 4, 8, or 12 according + * to whether the "largest" call made is a call[x]4, + * call[x]8, or call[x]12 (for call0 ABI, it makes + * no difference whether this is set to 4, 8 or 12, + * but it must be set to one of these values). + * + * NOTE: It is up to the caller to align the entry point, declare the + * function symbol, make it global, etc. + * + * NOTE: This macro relies on assembler relaxation for large values + * of locsize. It might not work with the no-transform directive. + * NOTE: For the call0 ABI, this macro ensures SP is allocated or + * de-allocated cleanly, i.e. without temporarily allocating too much + * (or allocating negatively!) due to addi relaxation. + * + * NOTE: Generating the proper sequence and register allocation for + * making calls in an ABI independent manner is a separate topic not + * covered by this macro. + * + * NOTE: To access arguments, you can't use a fixed offset from SP. + * The offset depends on the ABI, whether the function is leaf, etc. + * The simplest method is probably to use the .locsz symbol, which + * is set by this macro to the actual number of bytes allocated on + * the stack, in other words, to the offset from SP to the arguments. + * E.g. for a function whose arguments are all 32-bit integers, you + * can get the 7th and 8th arguments (1st and 2nd args stored on stack) + * using: + * l32i a2, sp, .locsz + * l32i a3, sp, .locsz+4 + * (this example works as long as locsize is under L32I's offset limit + * of 1020 minus up to 48 bytes of ABI-specific stack usage; + * otherwise you might first need to do "addi a?, sp, .locsz" + * or similar sequence). + * + * NOTE: For call0 ABI, this macro (and abi_return) may clobber a9 + * (a caller-saved register). + * + * Examples: + * abi_entry + * abi_entry 5 + * abi_entry 22, 8 + * abi_entry 0, 4 + */ + + /* + * Compute .locsz and .callsz without emitting any instructions. + * Used by both abi_entry and abi_return. + * Assumes locsize >= 0. + */ + .macro abi_entry_size locsize=0, callsize=0 +#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__ + .ifeq \callsize + .set .callsz, 16 + .else + .ifeq \callsize-4 + .set .callsz, 16 + .else + .ifeq \callsize-8 + .set .callsz, 32 + .else + .ifeq \callsize-12 + .set .callsz, 48 + .else + .error "abi_entry: invalid call size \callsize" + .endif + .endif + .endif + .endif + .set .locsz, .callsz + ((\locsize + 15) & -16) +#else + .set .callsz, \callsize + .if .callsz /* if calls, need space for return PC */ + .set .locsz, (\locsize + 4 + 15) & -16 + .else + .set .locsz, (\locsize + 15) & -16 + .endif +#endif + .endm + + .macro abi_entry locsize=0, callsize=0 + .iflt \locsize + .error "abi_entry: invalid negative size of locals (\locsize)" + .endif + abi_entry_size \locsize, \callsize +#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__ + .ifgt .locsz - 32760 /* .locsz > 32760 (ENTRY's max range)? */ + /* Funky computation to try to have assembler use addmi efficiently if possible: */ + entry sp, 0x7F00 + (.locsz & 0xF0) + addi a12, sp, - ((.locsz & -0x100) - 0x7F00) + movsp sp, a12 + .else + entry sp, .locsz + .endif +#else + .if .locsz + .ifle .locsz - 128 /* if locsz <= 128 */ + addi sp, sp, -.locsz + .if .callsz + s32i a0, sp, .locsz - 4 + .endif + .elseif .callsz /* locsz > 128, with calls: */ + movi a9, .locsz - 16 /* note: a9 is caller-saved */ + addi sp, sp, -16 + s32i a0, sp, 12 + sub sp, sp, a9 + .else /* locsz > 128, no calls: */ + movi a9, .locsz + sub sp, sp, a9 + .endif /* end */ + .endif +#endif + .endm + + + +/*---------------------------------------------------------------------- + * abi_return + * + * Generate proper function exit sequence for the current ABI + * (windowed or call0). Takes care of freeing stack space and + * restoring the return PC, if necessary. + * NOTE: This macro MUST be invoked following a corresponding + * abi_entry macro invocation. For call0 ABI in particular, + * all stack and PC restoration are done according to the last + * abi_entry macro invoked before this macro in the assembly file. + * + * Normally this macro takes no arguments. However to allow + * for placing abi_return *before* abi_entry (as must be done + * for some highly optimized assembly), it optionally takes + * exactly the same arguments as abi_entry. + */ + + .macro abi_return locsize=-1, callsize=0 + .ifge \locsize + abi_entry_size \locsize, \callsize + .endif +#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__ + retw +#else + .if .locsz + .iflt .locsz - 128 /* if locsz < 128 */ + .if .callsz + l32i a0, sp, .locsz - 4 + .endif + addi sp, sp, .locsz + .elseif .callsz /* locsz >= 128, with calls: */ + addi a9, sp, .locsz - 16 + l32i a0, a9, 12 + addi sp, a9, 16 + .else /* locsz >= 128, no calls: */ + movi a9, .locsz + add sp, sp, a9 + .endif /* end */ + .endif + ret +#endif + .endm + + +/* + * HW erratum fixes. + */ + + .macro hw_erratum_487_fix +#if defined XSHAL_ERRATUM_487_FIX + isync +#endif + .endm + + +#endif /*XTENSA_COREASM_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/corebits.h b/tools/sdk/include/esp32/xtensa/corebits.h new file mode 100755 index 00000000..0ac0c801 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/corebits.h @@ -0,0 +1,185 @@ +/* + * xtensa/corebits.h - Xtensa Special Register field positions, masks, values. + * + * (In previous releases, these were defined in specreg.h, a generated file. + * This file is not generated, ie. it is processor configuration independent.) + */ + +/* $Id: //depot/rel/Eaglenest/Xtensa/OS/include/xtensa/corebits.h#2 $ */ + +/* + * Copyright (c) 2005-2011 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef XTENSA_COREBITS_H +#define XTENSA_COREBITS_H + +/* EXCCAUSE register fields: */ +#define EXCCAUSE_EXCCAUSE_SHIFT 0 +#define EXCCAUSE_EXCCAUSE_MASK 0x3F +/* EXCCAUSE register values: */ +/* + * General Exception Causes + * (values of EXCCAUSE special register set by general exceptions, + * which vector to the user, kernel, or double-exception vectors). + */ +#define EXCCAUSE_ILLEGAL 0 /* Illegal Instruction */ +#define EXCCAUSE_SYSCALL 1 /* System Call (SYSCALL instruction) */ +#define EXCCAUSE_INSTR_ERROR 2 /* Instruction Fetch Error */ +# define EXCCAUSE_IFETCHERROR 2 /* (backward compatibility macro, deprecated, avoid) */ +#define EXCCAUSE_LOAD_STORE_ERROR 3 /* Load Store Error */ +# define EXCCAUSE_LOADSTOREERROR 3 /* (backward compatibility macro, deprecated, avoid) */ +#define EXCCAUSE_LEVEL1_INTERRUPT 4 /* Level 1 Interrupt */ +# define EXCCAUSE_LEVEL1INTERRUPT 4 /* (backward compatibility macro, deprecated, avoid) */ +#define EXCCAUSE_ALLOCA 5 /* Stack Extension Assist (MOVSP instruction) for alloca */ +#define EXCCAUSE_DIVIDE_BY_ZERO 6 /* Integer Divide by Zero */ +#define EXCCAUSE_SPECULATION 7 /* Use of Failed Speculative Access (not implemented) */ +#define EXCCAUSE_PRIVILEGED 8 /* Privileged Instruction */ +#define EXCCAUSE_UNALIGNED 9 /* Unaligned Load or Store */ +/* Reserved 10..11 */ +#define EXCCAUSE_INSTR_DATA_ERROR 12 /* PIF Data Error on Instruction Fetch (RB-200x and later) */ +#define EXCCAUSE_LOAD_STORE_DATA_ERROR 13 /* PIF Data Error on Load or Store (RB-200x and later) */ +#define EXCCAUSE_INSTR_ADDR_ERROR 14 /* PIF Address Error on Instruction Fetch (RB-200x and later) */ +#define EXCCAUSE_LOAD_STORE_ADDR_ERROR 15 /* PIF Address Error on Load or Store (RB-200x and later) */ +#define EXCCAUSE_ITLB_MISS 16 /* ITLB Miss (no ITLB entry matches, hw refill also missed) */ +#define EXCCAUSE_ITLB_MULTIHIT 17 /* ITLB Multihit (multiple ITLB entries match) */ +#define EXCCAUSE_INSTR_RING 18 /* Ring Privilege Violation on Instruction Fetch */ +/* Reserved 19 */ /* Size Restriction on IFetch (not implemented) */ +#define EXCCAUSE_INSTR_PROHIBITED 20 /* Cache Attribute does not allow Instruction Fetch */ +/* Reserved 21..23 */ +#define EXCCAUSE_DTLB_MISS 24 /* DTLB Miss (no DTLB entry matches, hw refill also missed) */ +#define EXCCAUSE_DTLB_MULTIHIT 25 /* DTLB Multihit (multiple DTLB entries match) */ +#define EXCCAUSE_LOAD_STORE_RING 26 /* Ring Privilege Violation on Load or Store */ +/* Reserved 27 */ /* Size Restriction on Load/Store (not implemented) */ +#define EXCCAUSE_LOAD_PROHIBITED 28 /* Cache Attribute does not allow Load */ +#define EXCCAUSE_STORE_PROHIBITED 29 /* Cache Attribute does not allow Store */ +/* Reserved 30..31 */ +#define EXCCAUSE_CP_DISABLED(n) (32+(n)) /* Access to Coprocessor 'n' when disabled */ +#define EXCCAUSE_CP0_DISABLED 32 /* Access to Coprocessor 0 when disabled */ +#define EXCCAUSE_CP1_DISABLED 33 /* Access to Coprocessor 1 when disabled */ +#define EXCCAUSE_CP2_DISABLED 34 /* Access to Coprocessor 2 when disabled */ +#define EXCCAUSE_CP3_DISABLED 35 /* Access to Coprocessor 3 when disabled */ +#define EXCCAUSE_CP4_DISABLED 36 /* Access to Coprocessor 4 when disabled */ +#define EXCCAUSE_CP5_DISABLED 37 /* Access to Coprocessor 5 when disabled */ +#define EXCCAUSE_CP6_DISABLED 38 /* Access to Coprocessor 6 when disabled */ +#define EXCCAUSE_CP7_DISABLED 39 /* Access to Coprocessor 7 when disabled */ +/* Reserved 40..63 */ + +/* PS register fields: */ +#define PS_WOE_SHIFT 18 +#define PS_WOE_MASK 0x00040000 +#define PS_WOE PS_WOE_MASK +#define PS_CALLINC_SHIFT 16 +#define PS_CALLINC_MASK 0x00030000 +#define PS_CALLINC(n) (((n)&3)< +#include +#include + +int xt_dbfs_open(const char *pathname, int flags, mode_t mode); +int xt_dbfs_ftruncate(int fd, off_t length); +int xt_dbfs_truncate(const char * filename, off_t length); +int xt_dbfs_creat(const char *pathname, mode_t mode); +int xt_dbfs_errno(void); +int xt_dbfs_lseek(int fd, off_t offset, int whence); +ssize_t xt_dbfs_write(int fd, const void * buf, size_t bytes); + ssize_t xt_dbfs_open_append_close(const char * filename, int align, + const void * buf, size_t bytes); +ssize_t xt_dbfs_read(int fd, void * buf, size_t bytes); +int xt_dbfs_close(int fd); +int xt_dbfs_unlink(const char *pathname); + +/* By default, this function is a wrapper around sbrk, and follows + sbrk semantics: + + On success, it returns increment bytes of memory allocated from + system memory. + + On failure, it returns 0xFFFFFFFF + + + If you want to use a method of allocating memory other than sbrk, + implement xt_dbfs_sbrk in your own sources, and the linker will + automatically use that copy. +*/ +void * xt_dbfs_sbrk(int increment); + + + +#ifdef REPLACE_FS_WITH_DBFS +#define open xt_dbfs_open +#define close xt_dbfs_close +#define creat xt_dbfs_creat +#define lseek xt_dbfs_lseek +#define write xt_dbfs_write +#define read xt_dbfs_read +#define close xt_dbfs_close +#define unlink xt_dbfs_unlink + +#define rmdir NOT_IMPLEMENTED_IN_DBFS +#define opendir NOT_IMPLEMENTED_IN_DBFS +#define closedir NOT_IMPLEMENTED_IN_DBFS +#define dirfs NOT_IMPLEMENTED_IN_DBFS +#define readdir NOT_IMPLEMENTED_IN_DBFS +#define scandir NOT_IMPLEMENTED_IN_DBFS +#define seekdir NOT_IMPLEMENTED_IN_DBFS +#define telldir NOT_IMPLEMENTED_IN_DBFS + +#define fcntl NOT_IMPLEMENTED_IN_DBFS +#define dup2 NOT_IMPLEMENTED_IN_DBFS +#define dup NOT_IMPLEMENTED_IN_DBFS +#define flock NOT_IMPLEMENTED_IN_DBFS +#define lockf NOT_IMPLEMENTED_IN_DBFS +#define link NOT_IMPLEMENTED_IN_DBFS +#define stat NOT_IMPLEMENTED_IN_DBFS +#define fstat NOT_IMPLEMENTED_IN_DBFS +#define lstat NOT_IMPLEMENTED_IN_DBFS +#define chmod NOT_IMPLEMENTED_IN_DBFS +#define fchmod NOT_IMPLEMENTED_IN_DBFS +#define chmown NOT_IMPLEMENTED_IN_DBFS +#define lchown NOT_IMPLEMENTED_IN_DBFS +#define fchown NOT_IMPLEMENTED_IN_DBFS + +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/esp32/xtensa/feedback.h b/tools/sdk/include/esp32/xtensa/feedback.h new file mode 100755 index 00000000..aecb7453 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/feedback.h @@ -0,0 +1,45 @@ + +/* + * Copyright (c) 2013 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +#ifndef __XT_FEEDBACK_INCLUDED__ +#define __XT_FEEDBACK_INCLUDED__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* xt_feedback_save_and_reset + + Save and reset the accumulated feedback data. +*/ +extern void xt_feedback_save_and_reset(void); + +/* xt_feedback_enable + + Turn on feedback accumulation. Ordinarily, feedback accumulation is on + by default. If you turn it off using xt_feedback_disable, You can turn + it on again via this function. +*/ +extern void xt_feedback_enable (void); + +/* xt_feedback_disable + + Turn off feedback accumulation. If you don't want to gather feedback for a + portion of your code, use this function and then xt_feedback_enable when + you want to start again. +*/ +extern void xt_feedback_disable (void); + +#ifdef __cplusplus +} +#endif + +#endif /* __XT_FEEDBACK_INCLUDED__ */ + diff --git a/tools/sdk/include/esp32/xtensa/gdbio.h b/tools/sdk/include/esp32/xtensa/gdbio.h new file mode 100755 index 00000000..784a8629 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/gdbio.h @@ -0,0 +1,80 @@ +/* Xtensa Debug-FileSystem definitions + * + * Copyright (c) 2006-2009 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +#ifndef __DEBUGFS_H__ +#define __DEBUGFS_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + + int _gdbio_open_r(void * ptr, const char *pathname, int flags, mode_t mode); + int _gdbio_creat_r(void * ptr, const char *pathname, mode_t mode); + int _gdbio_lseek_r(void * ptr, int fd, off_t offset, int whence); + ssize_t _gdbio_write_r(void * ptr, int fd, const void * buf, size_t bytes); + ssize_t _gdbio_read_r(void * ptr, int fd, void * buf, size_t bytes); + int _gdbio_close_r(void * ptr, int fd); + int _gdbio_unlink_r(void * ptr, const char * pathname); + + static inline + int gdbio_open(const char *pathname, int flags, mode_t mode) { + return _gdbio_open_r(&errno, pathname, flags, mode); + } + static inline int + gdbio_creat(const char *pathname, mode_t mode) { + return _gdbio_open_r(&errno, pathname, O_CREAT|O_WRONLY|O_TRUNC, mode); + } + static inline int + gdbio_errno(void) { + return errno; + } + static inline int + gdbio_lseek(int fd, off_t offset, int whence) { + return _gdbio_lseek_r(&errno, fd, offset, whence); + } + static inline + ssize_t gdbio_write(int fd, const void * buf, size_t bytes) { + return _gdbio_write_r(&errno, fd, buf, bytes); + } + static inline + ssize_t gdbio_read(int fd, void * buf, size_t bytes) { + return _gdbio_read_r(&errno, fd, buf, bytes); + } + static inline int + gdbio_close(int fd) { + return _gdbio_close_r(&errno, fd); + } + static inline int + gdbio_unlink(const char * pathname) { + return _gdbio_unlink_r(&errno, pathname); + } + +#ifdef REPLACE_FS_WITH_GDBIO +#define open gdbio_open +#define close gdbio_close +#define creat gdbio_creat +#define lseek gdbio_lseek +#define write gdbio_write +#define read gdbio_read +#define close gdbio_close +#define unlink gdbio_unlink + +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/esp32/xtensa/hal.h b/tools/sdk/include/esp32/xtensa/hal.h new file mode 100755 index 00000000..d4d95d9f --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/hal.h @@ -0,0 +1,1024 @@ +/* + xtensa/hal.h -- contains a definition of the Core HAL interface + + All definitions in this header file are independent of any specific + Xtensa processor configuration. Thus software (eg. OS, application, + etc) can include this header file and be compiled into configuration- + independent objects that can be distributed and eventually linked + to the HAL library (libhal.a) to create a configuration-specific + final executable. + + Certain definitions, however, are release/version-specific -- such as + the XTHAL_RELEASE_xxx macros (or additions made in later versions). + + + $Id: //depot/rel/Eaglenest/Xtensa/OS/target-os-src/hal.h.tpp#4 $ + + Copyright (c) 1999-2014 Cadence Design Systems, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef XTENSA_HAL_H +#define XTENSA_HAL_H + + +/**************************************************************************** + Definitions Useful for Any Code, USER or PRIVILEGED + ****************************************************************************/ + + +/*---------------------------------------------------------------------- + Constant Definitions (shared with assembly) + ----------------------------------------------------------------------*/ + +/* + * Software (Xtensa Tools) version information. Not configuration-specific! + * + * NOTE: "release" is a misnomer here, these are really product "version" + * numbers. A "release" is a collection of product versions + * made available at once (together) to customers. + * In the past, release and version names all matched in T####.# form, + * making the distinction irrelevant. This is no longer the case. + */ +#define XTHAL_RELEASE_MAJOR 11000 +#define XTHAL_RELEASE_MINOR 3 +#define XTHAL_RELEASE_NAME "11.0.3" +#define XTHAL_REL_11 1 +#define XTHAL_REL_11_0 1 +#define XTHAL_REL_11_0_3 1 + +/* HAL version numbers (these names are for backward compatibility): */ +#define XTHAL_MAJOR_REV XTHAL_RELEASE_MAJOR +#define XTHAL_MINOR_REV XTHAL_RELEASE_MINOR +/* + * A bit of software release/version history on values of XTHAL_{MAJOR,MINOR}_REV: + * + * SW Version MAJOR MINOR Comment + * ======= ===== ===== ======= + * T1015.n n/a n/a (HAL not yet available) + * T1020.{0,1,2} 0 1 (HAL beta) + * T1020.{3,4} 0 2 First release. + * T1020.n (n>4) 0 2 or >3 (TBD) + * T1030.0 0 1 (HAL beta) + * T1030.{1,2} 0 3 Equivalent to first release. + * T1030.n (n>=3) 0 >= 3 (TBD) + * T1040.n 1040 n Full CHAL available from T1040.2 + * T1050.n 1050 n . + * 6.0.n 6000 n Xtensa Tools v6 (RA-200x.n) + * 7.0.n 7000 n Xtensa Tools v7 (RB-200x.n) + * 7.1.n 7010 n Xtensa Tools v7.1 (RB-200x.(n+2)) + * 8.0.n 8000 n Xtensa Tools v8 (RC-20xx.n) + * 9.0.n 9000 n Xtensa Tools v9 (RD-201x.n) + * 10.0.n 10000 n Xtensa Tools v10 (RE-201x.n) + * + * + * Note: there is a distinction between the software version with + * which something is compiled (accessible using XTHAL_RELEASE_* macros) + * and the software version with which the HAL library was compiled + * (accessible using Xthal_release_* global variables). This + * distinction is particularly relevant for vendors that distribute + * configuration-independent binaries (eg. an OS), where their customer + * might link it with a HAL of a different Xtensa software version. + * In this case, it may be appropriate for the OS to verify at run-time + * whether XTHAL_RELEASE_* and Xthal_release_* are compatible. + * [Guidelines as to which version is compatible with which are not + * currently provided explicitly, but might be inferred from reading + * OSKit documentation for all releases -- compatibility is also highly + * dependent on which HAL features are used. Each version is usually + * backward compatible, with very few exceptions if any.] + */ + +/* Version comparison operators (among major/minor pairs): */ +#define XTHAL_REL_GE(maja,mina, majb,minb) ((maja) > (majb) || \ + ((maja) == (majb) && (mina) >= (minb))) +#define XTHAL_REL_GT(maja,mina, majb,minb) ((maja) > (majb) || \ + ((maja) == (majb) && (mina) > (minb))) +#define XTHAL_REL_LE(maja,mina, majb,minb) ((maja) < (majb) || \ + ((maja) == (majb) && (mina) <= (minb))) +#define XTHAL_REL_LT(maja,mina, majb,minb) ((maja) < (majb) || \ + ((maja) == (majb) && (mina) < (minb))) +#define XTHAL_REL_EQ(maja,mina, majb,minb) ((maja) == (majb) && (mina) == (minb)) + +/* Fuzzy (3-way) logic operators: */ +#define XTHAL_MAYBE -1 /* 0=NO, 1=YES, -1=MAYBE */ +#define XTHAL_FUZZY_AND(a,b) (((a)==0 || (b)==0) ? 0 : ((a)==1 && (b)==1) ? 1 : XTHAL_MAYBE) +#define XTHAL_FUZZY_OR(a,b) (((a)==1 || (b)==1) ? 1 : ((a)==0 && (b)==0) ? 0 : XTHAL_MAYBE) +#define XTHAL_FUZZY_NOT(a) (((a)==0 || (a)==1) ? (1-(a)) : XTHAL_MAYBE) + + +/* + * Architectural limit, independent of configuration: + */ +#define XTHAL_MAX_CPS 8 /* max number of coprocessors (0..7) */ + +/* Misc: */ +#define XTHAL_LITTLEENDIAN 0 +#define XTHAL_BIGENDIAN 1 + + + +#if !defined(_ASMLANGUAGE) && !defined(_NOCLANGUAGE) && !defined(__ASSEMBLER__) +#ifdef __cplusplus +extern "C" { +#endif + +/*---------------------------------------------------------------------- + HAL + ----------------------------------------------------------------------*/ + +/* Constant to be checked in build = (XTHAL_MAJOR_REV<<16)|XTHAL_MINOR_REV */ +extern const unsigned int Xthal_rev_no; + + +/*---------------------------------------------------------------------- + Optional/Custom Processor State + ----------------------------------------------------------------------*/ + +/* save & restore the extra processor state */ +extern void xthal_save_extra(void *base); +extern void xthal_restore_extra(void *base); + +extern void xthal_save_cpregs(void *base, int); +extern void xthal_restore_cpregs(void *base, int); +/* versions specific to each coprocessor id */ +extern void xthal_save_cp0(void *base); +extern void xthal_save_cp1(void *base); +extern void xthal_save_cp2(void *base); +extern void xthal_save_cp3(void *base); +extern void xthal_save_cp4(void *base); +extern void xthal_save_cp5(void *base); +extern void xthal_save_cp6(void *base); +extern void xthal_save_cp7(void *base); +extern void xthal_restore_cp0(void *base); +extern void xthal_restore_cp1(void *base); +extern void xthal_restore_cp2(void *base); +extern void xthal_restore_cp3(void *base); +extern void xthal_restore_cp4(void *base); +extern void xthal_restore_cp5(void *base); +extern void xthal_restore_cp6(void *base); +extern void xthal_restore_cp7(void *base); +/* pointers to each of the functions above */ +extern void* Xthal_cpregs_save_fn[XTHAL_MAX_CPS]; +extern void* Xthal_cpregs_restore_fn[XTHAL_MAX_CPS]; +/* similarly for non-windowed ABI (may be same or different) */ +extern void* Xthal_cpregs_save_nw_fn[XTHAL_MAX_CPS]; +extern void* Xthal_cpregs_restore_nw_fn[XTHAL_MAX_CPS]; + +/*extern void xthal_save_all_extra(void *base);*/ +/*extern void xthal_restore_all_extra(void *base);*/ + +/* space for processor state */ +extern const unsigned int Xthal_extra_size; +extern const unsigned int Xthal_extra_align; +extern const unsigned int Xthal_cpregs_size[XTHAL_MAX_CPS]; +extern const unsigned int Xthal_cpregs_align[XTHAL_MAX_CPS]; +extern const unsigned int Xthal_all_extra_size; +extern const unsigned int Xthal_all_extra_align; +/* coprocessor names */ +extern const char * const Xthal_cp_names[XTHAL_MAX_CPS]; + +/* initialize the extra processor */ +/*extern void xthal_init_extra(void);*/ +/* initialize the TIE coprocessor */ +/*extern void xthal_init_cp(int);*/ + +/* initialize the extra processor */ +extern void xthal_init_mem_extra(void *); +/* initialize the TIE coprocessor */ +extern void xthal_init_mem_cp(void *, int); + +/* the number of TIE coprocessors contiguous from zero (for Tor2) */ +extern const unsigned int Xthal_num_coprocessors; + +/* actual number of coprocessors */ +extern const unsigned char Xthal_cp_num; +/* index of highest numbered coprocessor, plus one */ +extern const unsigned char Xthal_cp_max; +/* index of highest allowed coprocessor number, per cfg, plus one */ +/*extern const unsigned char Xthal_cp_maxcfg;*/ +/* bitmask of which coprocessors are present */ +extern const unsigned int Xthal_cp_mask; + +/* read & write extra state register */ +/*extern int xthal_read_extra(void *base, unsigned reg, unsigned *value);*/ +/*extern int xthal_write_extra(void *base, unsigned reg, unsigned value);*/ + +/* read & write a TIE coprocessor register */ +/*extern int xthal_read_cpreg(void *base, int cp, unsigned reg, unsigned *value);*/ +/*extern int xthal_write_cpreg(void *base, int cp, unsigned reg, unsigned value);*/ + +/* return coprocessor number based on register */ +/*extern int xthal_which_cp(unsigned reg);*/ + + +/*---------------------------------------------------------------------- + Register Windows + ----------------------------------------------------------------------*/ + +/* number of registers in register window */ +extern const unsigned int Xthal_num_aregs; +extern const unsigned char Xthal_num_aregs_log2; + + +/*---------------------------------------------------------------------- + Cache + ----------------------------------------------------------------------*/ + +/* size of the cache lines in log2(bytes) */ +extern const unsigned char Xthal_icache_linewidth; +extern const unsigned char Xthal_dcache_linewidth; +/* size of the cache lines in bytes (2^linewidth) */ +extern const unsigned short Xthal_icache_linesize; +extern const unsigned short Xthal_dcache_linesize; + +/* size of the caches in bytes (ways * 2^(linewidth + setwidth)) */ +extern const unsigned int Xthal_icache_size; +extern const unsigned int Xthal_dcache_size; +/* cache features */ +extern const unsigned char Xthal_dcache_is_writeback; + +/* invalidate the caches */ + +extern void xthal_icache_region_invalidate( void *addr, unsigned size ); +extern void xthal_dcache_region_invalidate( void *addr, unsigned size ); +# ifndef XTHAL_USE_CACHE_MACROS +extern void xthal_icache_line_invalidate(void *addr); +extern void xthal_dcache_line_invalidate(void *addr); +# endif +/* write dirty data back */ +extern void xthal_dcache_region_writeback( void *addr, unsigned size ); +# ifndef XTHAL_USE_CACHE_MACROS +extern void xthal_dcache_line_writeback(void *addr); +# endif +/* write dirty data back and invalidate */ +extern void xthal_dcache_region_writeback_inv( void *addr, unsigned size ); +# ifndef XTHAL_USE_CACHE_MACROS +extern void xthal_dcache_line_writeback_inv(void *addr); +/* sync icache and memory */ +extern void xthal_icache_sync( void ); +/* sync dcache and memory */ +extern void xthal_dcache_sync( void ); +#endif + +/* get number of icache ways enabled */ +extern unsigned int xthal_icache_get_ways(void); +/* set number of icache ways enabled */ +extern void xthal_icache_set_ways(unsigned int ways); +/* get number of dcache ways enabled */ +extern unsigned int xthal_dcache_get_ways(void); +/* set number of dcache ways enabled */ +extern void xthal_dcache_set_ways(unsigned int ways); + +/* coherency (low-level -- not normally called directly) */ +extern void xthal_cache_coherence_on( void ); +extern void xthal_cache_coherence_off( void ); +/* coherency (high-level) */ +extern void xthal_cache_coherence_optin( void ); +extern void xthal_cache_coherence_optout( void ); + +/* + * Cache prefetch control. + * The parameter to xthal_set_cache_prefetch() contains both + * a PREFCTL register value and a mask of which bits to actually modify. + * This allows easily combining field macros (below) by ORing, + * leaving unspecified fields unmodified. + * + * For backward compatibility with the older version of this routine + * (that took 15-bit value and mask in a 32-bit parameter, for pre-RF + * cores with only the lower 15 bits of PREFCTL defined), the 32-bit + * value and mask are staggered as follows in a 64-bit parameter: + * param[63:48] are PREFCTL[31:16] if param[31] is set + * param[47:32] are mask[31:16] if param[31] is set + * param[31] is set if mask is used, 0 if not + * param[31:16] are mask[15:0] if param[31] is set + * param[31:16] are PREFCTL[31:16] if param[31] is clear + * param[15:0] are PREFCTL[15:0] + * + * Limitation: PREFCTL register bit 31 cannot be set without masking, + * and bit 15 must always be set when using masking, so it is hoped that + * these two bits will remain reserved, read-as-zero in PREFCTL. + */ +#define XTHAL_PREFETCH_ENABLE -1 /* enable inst+data prefetch */ +#define XTHAL_PREFETCH_DISABLE 0xFFFF0000 /* disab inst+data prefetch*/ +#define XTHAL_DCACHE_PREFETCH(n) (0x800F0000+((n)&0xF)) /* data-side */ +#define XTHAL_DCACHE_PREFETCH_OFF XTHAL_DCACHE_PREFETCH(0) /* disable */ +#define XTHAL_DCACHE_PREFETCH_LOW XTHAL_DCACHE_PREFETCH(4) /* less aggr.*/ +#define XTHAL_DCACHE_PREFETCH_MEDIUM XTHAL_DCACHE_PREFETCH(5) /* mid aggr. */ +#define XTHAL_DCACHE_PREFETCH_HIGH XTHAL_DCACHE_PREFETCH(8) /* more aggr.*/ +#define XTHAL_DCACHE_PREFETCH_L1_OFF 0x90000000 /* to prefetch buffers*/ +#define XTHAL_DCACHE_PREFETCH_L1 0x90001000 /* direct to L1 dcache*/ +#define XTHAL_ICACHE_PREFETCH(n) (0x80F00000+(((n)&0xF)<<4)) /* i-side */ +#define XTHAL_ICACHE_PREFETCH_OFF XTHAL_ICACHE_PREFETCH(0) /* disable */ +#define XTHAL_ICACHE_PREFETCH_LOW XTHAL_ICACHE_PREFETCH(4) /* less aggr.*/ +#define XTHAL_ICACHE_PREFETCH_MEDIUM XTHAL_ICACHE_PREFETCH(5) /* mid aggr. */ +#define XTHAL_ICACHE_PREFETCH_HIGH XTHAL_ICACHE_PREFETCH(8) /* more aggr.*/ +#define XTHAL_ICACHE_PREFETCH_L1_OFF 0xA0000000 /* (not implemented) */ +#define XTHAL_ICACHE_PREFETCH_L1 0xA0002000 /* (not implemented) */ +#define _XTHAL_PREFETCH_BLOCKS(n) ((n)<0?0:(n)<5?(n):(n)<15?((n)>>1)+2:9) +#define XTHAL_PREFETCH_BLOCKS(n) (0x0000000F80000000ULL + \ + (((unsigned long long)_XTHAL_PREFETCH_BLOCKS(n))<<48)) + +extern int xthal_get_cache_prefetch( void ); +extern int xthal_set_cache_prefetch( int ); +extern int xthal_set_cache_prefetch_long( unsigned long long ); +/* Only use the new extended function from now on: */ +#define xthal_set_cache_prefetch xthal_set_cache_prefetch_long +#define xthal_set_cache_prefetch_nw xthal_set_cache_prefetch_long_nw + + +/*---------------------------------------------------------------------- + Debug + ----------------------------------------------------------------------*/ + +/* 1 if debug option configured, 0 if not: */ +extern const int Xthal_debug_configured; + +/* Set (plant) and remove software breakpoint, both synchronizing cache: */ +extern unsigned int xthal_set_soft_break(void *addr); +extern void xthal_remove_soft_break(void *addr, unsigned int); + + +/*---------------------------------------------------------------------- + Disassembler + ----------------------------------------------------------------------*/ + +/* Max expected size of the return buffer for a disassembled instruction (hint only): */ +#define XTHAL_DISASM_BUFSIZE 80 + +/* Disassembly option bits for selecting what to return: */ +#define XTHAL_DISASM_OPT_ADDR 0x0001 /* display address */ +#define XTHAL_DISASM_OPT_OPHEX 0x0002 /* display opcode bytes in hex */ +#define XTHAL_DISASM_OPT_OPCODE 0x0004 /* display opcode name (mnemonic) */ +#define XTHAL_DISASM_OPT_PARMS 0x0008 /* display parameters */ +#define XTHAL_DISASM_OPT_ALL 0x0FFF /* display everything */ + +/* routine to get a string for the disassembled instruction */ +extern int xthal_disassemble( unsigned char *instr_buf, void *tgt_addr, + char *buffer, unsigned buflen, unsigned options ); + +/* routine to get the size of the next instruction. Returns 0 for + illegal instruction */ +extern int xthal_disassemble_size( unsigned char *instr_buf ); + + +/*---------------------------------------------------------------------- + Instruction/Data RAM/ROM Access + ----------------------------------------------------------------------*/ + +extern void* xthal_memcpy(void *dst, const void *src, unsigned len); +extern void* xthal_bcopy(const void *src, void *dst, unsigned len); + + +/*---------------------------------------------------------------------- + MP Synchronization + ----------------------------------------------------------------------*/ + +extern int xthal_compare_and_set( int *addr, int test_val, int compare_val ); + +/*extern const char Xthal_have_s32c1i;*/ + + +/*---------------------------------------------------------------------- + Miscellaneous + ----------------------------------------------------------------------*/ + +extern const unsigned int Xthal_release_major; +extern const unsigned int Xthal_release_minor; +extern const char * const Xthal_release_name; +extern const char * const Xthal_release_internal; + +extern const unsigned char Xthal_memory_order; +extern const unsigned char Xthal_have_windowed; +extern const unsigned char Xthal_have_density; +extern const unsigned char Xthal_have_booleans; +extern const unsigned char Xthal_have_loops; +extern const unsigned char Xthal_have_nsa; +extern const unsigned char Xthal_have_minmax; +extern const unsigned char Xthal_have_sext; +extern const unsigned char Xthal_have_clamps; +extern const unsigned char Xthal_have_mac16; +extern const unsigned char Xthal_have_mul16; +extern const unsigned char Xthal_have_fp; +extern const unsigned char Xthal_have_speculation; +extern const unsigned char Xthal_have_threadptr; + +extern const unsigned char Xthal_have_pif; +extern const unsigned short Xthal_num_writebuffer_entries; + +extern const unsigned int Xthal_build_unique_id; +/* Version info for hardware targeted by software upgrades: */ +extern const unsigned int Xthal_hw_configid0; +extern const unsigned int Xthal_hw_configid1; +extern const unsigned int Xthal_hw_release_major; +extern const unsigned int Xthal_hw_release_minor; +extern const char * const Xthal_hw_release_name; +extern const char * const Xthal_hw_release_internal; + +/* Clear any remnant code-dependent state (i.e. clear loop count regs). */ +extern void xthal_clear_regcached_code( void ); + +#ifdef __cplusplus +} +#endif +#endif /*!_ASMLANGUAGE && !_NOCLANGUAGE && !__ASSEMBLER__ */ + + + + + +/**************************************************************************** + Definitions Useful for PRIVILEGED (Supervisory or Non-Virtualized) Code + ****************************************************************************/ + + +#ifndef XTENSA_HAL_NON_PRIVILEGED_ONLY + +/*---------------------------------------------------------------------- + Constant Definitions (shared with assembly) + ----------------------------------------------------------------------*/ + +/* + * Architectural limits, independent of configuration. + * Note that these are ISA-defined limits, not micro-architecture implementation + * limits enforced by the Xtensa Processor Generator (which may be stricter than + * these below). + */ +#define XTHAL_MAX_INTERRUPTS 32 /* max number of interrupts (0..31) */ +#define XTHAL_MAX_INTLEVELS 16 /* max number of interrupt levels (0..15) */ + /* (as of T1040, implementation limit is 7: 0..6) */ +#define XTHAL_MAX_TIMERS 4 /* max number of timers (CCOMPARE0..CCOMPARE3) */ + /* (as of T1040, implementation limit is 3: 0..2) */ + +/* Interrupt types: */ +#define XTHAL_INTTYPE_UNCONFIGURED 0 +#define XTHAL_INTTYPE_SOFTWARE 1 +#define XTHAL_INTTYPE_EXTERN_EDGE 2 +#define XTHAL_INTTYPE_EXTERN_LEVEL 3 +#define XTHAL_INTTYPE_TIMER 4 +#define XTHAL_INTTYPE_NMI 5 +#define XTHAL_INTTYPE_WRITE_ERROR 6 +#define XTHAL_INTTYPE_PROFILING 7 +#define XTHAL_MAX_INTTYPES 8 /* number of interrupt types */ + +/* Timer related: */ +#define XTHAL_TIMER_UNCONFIGURED -1 /* Xthal_timer_interrupt[] value for non-existent timers */ +#define XTHAL_TIMER_UNASSIGNED XTHAL_TIMER_UNCONFIGURED /* (for backwards compatibility only) */ + +/* Local Memory ECC/Parity: */ +#define XTHAL_MEMEP_PARITY 1 +#define XTHAL_MEMEP_ECC 2 +/* Flags parameter to xthal_memep_inject_error(): */ +#define XTHAL_MEMEP_F_LOCAL 0 /* local memory (default) */ +#define XTHAL_MEMEP_F_DCACHE_DATA 4 /* data cache data */ +#define XTHAL_MEMEP_F_DCACHE_TAG 5 /* data cache tag */ +#define XTHAL_MEMEP_F_ICACHE_DATA 6 /* instruction cache data */ +#define XTHAL_MEMEP_F_ICACHE_TAG 7 /* instruction cache tag */ +#define XTHAL_MEMEP_F_CORRECTABLE 16 /* inject correctable error + (default is non-corr.) */ + + +/* Access Mode bits (tentative): */ /* bit abbr unit short_name PPC equ - Description */ +#define XTHAL_AMB_EXCEPTION 0 /* 001 E EX fls: EXception none + exception on any access (aka "illegal") */ +#define XTHAL_AMB_HITCACHE 1 /* 002 C CH fls: use Cache on Hit ~(I CI) + [or H HC] way from tag match; + [or U UC] (ISA: same except Isolate case) */ +#define XTHAL_AMB_ALLOCATE 2 /* 004 A AL fl?: ALlocate none + [or F FI fill] refill cache on miss, way from LRU + (ISA: Read/Write Miss Refill) */ +#define XTHAL_AMB_WRITETHRU 3 /* 008 W WT --s: WriteThrough W WT + store immediately to memory (ISA: same) */ +#define XTHAL_AMB_ISOLATE 4 /* 010 I IS fls: ISolate none + use cache regardless of hit-vs-miss, + way from vaddr (ISA: use-cache-on-miss+hit) */ +#define XTHAL_AMB_GUARD 5 /* 020 G GU ?l?: GUard G * + non-speculative; spec/replay refs not permitted */ +#define XTHAL_AMB_COHERENT 6 /* 040 M MC ?ls: Mem/MP Coherent M + on read, other CPU/bus-master may need to supply data; + on write, maybe redirect to or flush other CPU dirty line; etc */ +#if 0 +#define XTHAL_AMB_BUFFERABLE x /* 000 B BU --s: BUfferable ? + write response may return earlier than from final destination */ +#define XTHAL_AMB_ORDERED x /* 000 O OR fls: ORdered G * + mem accesses cannot be out of order */ +#define XTHAL_AMB_FUSEWRITES x /* 000 F FW --s: FuseWrites none + allow combining/merging/coalescing multiple writes + (to same datapath data unit) into one + (implied by writeback) */ +#define XTHAL_AMB_TRUSTED x /* 000 T TR ?l?: TRusted none + memory will not bus error (if it does, + handle as fatal imprecise interrupt) */ +#define XTHAL_AMB_PREFETCH x /* 000 P PR fl?: PRefetch none + on refill, read line+1 into prefetch buffers */ +#define XTHAL_AMB_STREAM x /* 000 S ST ???: STreaming none + access one of N stream buffers */ +#endif /*0*/ + +#define XTHAL_AM_EXCEPTION (1< = bit is set + * '-' = bit is clear + * '.' = bit is irrelevant / don't care, as follows: + * E=1 makes all others irrelevant + * W,F relevant only for stores + * "2345" + * Indicates which Xtensa releases support the corresponding + * access mode. Releases for each character column are: + * 2 = prior to T1020.2: T1015 (V1.5), T1020.0, T1020.1 + * 3 = T1020.2 and later: T1020.2+, T1030 + * 4 = T1040 + * 5 = T1050 (maybe), LX1, LX2, LX2.1 + * 7 = LX2.2 + * 8 = LX3, LX4 + * 9 = LX5 + * And the character column contents are: + * = supported by release(s) + * "." = unsupported by release(s) + * "?" = support unknown + */ + /* foMGIWACE 2345789 */ +/* For instruction fetch: */ +#define XTHAL_FAM_EXCEPTION 0x001 /* ........E 2345789 exception */ +/*efine XTHAL_FAM_ISOLATE*/ /*0x012*/ /* .---I.-C- ....... isolate */ +#define XTHAL_FAM_BYPASS 0x000 /* .----.--- 2345789 bypass */ +/*efine XTHAL_FAM_NACACHED*/ /*0x002*/ /* .----.-C- ....... cached no-allocate (frozen) */ +#define XTHAL_FAM_CACHED 0x006 /* .----.AC- 2345789 cached */ +/* For data load: */ +#define XTHAL_LAM_EXCEPTION 0x001 /* ........E 2345789 exception */ +#define XTHAL_LAM_ISOLATE 0x012 /* .---I.-C- 2345789 isolate */ +#define XTHAL_LAM_BYPASS 0x000 /* .O---.--- 2...... bypass speculative */ +#define XTHAL_LAM_BYPASSG 0x020 /* .O-G-.--- .345789 bypass guarded */ +#define XTHAL_LAM_CACHED_NOALLOC 0x002 /* .O---.-C- 2345789 cached no-allocate speculative */ +#define XTHAL_LAM_NACACHED XTHAL_LAM_CACHED_NOALLOC +#define XTHAL_LAM_NACACHEDG 0x022 /* .O-G-.-C- .?..... cached no-allocate guarded */ +#define XTHAL_LAM_CACHED 0x006 /* .----.AC- 2345789 cached speculative */ +#define XTHAL_LAM_COHCACHED 0x046 /* .-M--.AC- ....*89 cached speculative MP-coherent */ +/* For data store: */ +#define XTHAL_SAM_EXCEPTION 0x001 /* ........E 2345789 exception */ +#define XTHAL_SAM_ISOLATE 0x032 /* .--GI--C- 2345789 isolate */ +#define XTHAL_SAM_BYPASS 0x028 /* -O-G-W--- 2345789 bypass */ +#define XTHAL_SAM_WRITETHRU 0x02A /* -O-G-W-C- 2345789 writethrough */ +/*efine XTHAL_SAM_WRITETHRU_ALLOC*/ /*0x02E*/ /* -O-G-WAC- ....... writethrough allocate */ +#define XTHAL_SAM_WRITEBACK 0x026 /* F--G--AC- ...5789 writeback */ +#define XTHAL_SAM_WRITEBACK_NOALLOC 0x022 /* ?--G---C- .....89 writeback no-allocate */ +#define XTHAL_SAM_COHWRITEBACK 0x066 /* F-MG--AC- ....*89 writeback MP-coherent */ +/* For PIF attributes: */ /* -PIwrWCBUUUU ...9 */ +#define XTHAL_PAM_BYPASS 0x000 /* xxx00000xxxx ...9 bypass non-bufferable */ +#define XTHAL_PAM_BYPASS_BUF 0x010 /* xxx0000bxxxx ...9 bypass */ +#define XTHAL_PAM_CACHED_NOALLOC 0x030 /* xxx0001bxxxx ...9 cached no-allocate */ +#define XTHAL_PAM_WRITETHRU 0x0B0 /* xxx0101bxxxx ...9 writethrough (WT) */ +#define XTHAL_PAM_WRITEBACK_NOALLOC 0x0F0 /* xxx0111bxxxx ...9 writeback no-alloc (WBNA) */ +#define XTHAL_PAM_WRITEBACK 0x1F0 /* xxx1111bxxxx ...9 writeback (WB) */ +/*efine XTHAL_PAM_NORMAL*/ /*0x050*/ /* xxx0010bxxxx .... (unimplemented) */ +/*efine XTHAL_PAM_WRITETHRU_WA*/ /*0x130*/ /* xxx1001bxxxx .... (unimplemented, less likely) */ +/*efine XTHAL_PAM_WRITETHRU_RWA*/ /*0x1B0*/ /* xxx1101bxxxx .... (unimplemented, less likely) */ +/*efine XTHAL_PAM_WRITEBACK_WA*/ /*0x170*/ /* xxx1011bxxxx .... (unimplemented, less likely) */ + + +#if 0 +/* + Cache attribute encoding for CACHEATTR (per ISA): + (Note: if this differs from ISA Ref Manual, ISA has precedence) + + Inst-fetches Loads Stores + ------------- ------------ ------------- +0x0 FCA_EXCEPTION LCA_NACACHED SCA_WRITETHRU cached no-allocate (previously misnamed "uncached") +0x1 FCA_CACHED LCA_CACHED SCA_WRITETHRU cached +0x2 FCA_BYPASS LCA_BYPASS_G* SCA_BYPASS bypass cache (what most people call uncached) +0x3 FCA_CACHED LCA_CACHED SCA_WRITEALLOCF write-allocate + or LCA_EXCEPTION SCA_EXCEPTION (if unimplemented) +0x4 FCA_CACHED LCA_CACHED SCA_WRITEBACK[M] write-back [MP-coherent] + or LCA_EXCEPTION SCA_EXCEPTION (if unimplemented) +0x5 FCA_CACHED LCA_CACHED SCA_WRITEBACK_NOALLOC write-back no-allocate + or FCA_EXCEPTION LCA_EXCEPTION SCA_EXCEPTION (if unimplemented) +0x6..D FCA_EXCEPTION LCA_EXCEPTION SCA_EXCEPTION (reserved) +0xE FCA_EXCEPTION LCA_ISOLATE SCA_ISOLATE isolate +0xF FCA_EXCEPTION LCA_EXCEPTION SCA_EXCEPTION illegal + * Prior to T1020.2?, guard feature not supported, this defaulted to speculative (no _G) +*/ +#endif /*0*/ + + +#if !defined(_ASMLANGUAGE) && !defined(_NOCLANGUAGE) && !defined(__ASSEMBLER__) +#ifdef __cplusplus +extern "C" { +#endif + + +/*---------------------------------------------------------------------- + Register Windows + ----------------------------------------------------------------------*/ + +/* This spill any live register windows (other than the caller's): + * (NOTE: current implementation require privileged code, but + * a user-callable implementation is possible.) */ +extern void xthal_window_spill( void ); + + +/*---------------------------------------------------------------------- + Optional/Custom Processor State + ----------------------------------------------------------------------*/ + +/* validate & invalidate the TIE register file */ +extern void xthal_validate_cp(int); +extern void xthal_invalidate_cp(int); + +/* read and write cpenable register */ +extern void xthal_set_cpenable(unsigned); +extern unsigned xthal_get_cpenable(void); + + +/*---------------------------------------------------------------------- + Interrupts + ----------------------------------------------------------------------*/ + +/* the number of interrupt levels */ +extern const unsigned char Xthal_num_intlevels; +/* the number of interrupts */ +extern const unsigned char Xthal_num_interrupts; +/* the highest level of interrupts masked by PS.EXCM */ +extern const unsigned char Xthal_excm_level; + +/* mask for level of interrupts */ +extern const unsigned int Xthal_intlevel_mask[XTHAL_MAX_INTLEVELS]; +/* mask for level 0 to N interrupts */ +extern const unsigned int Xthal_intlevel_andbelow_mask[XTHAL_MAX_INTLEVELS]; + +/* level of each interrupt */ +extern const unsigned char Xthal_intlevel[XTHAL_MAX_INTERRUPTS]; + +/* type per interrupt */ +extern const unsigned char Xthal_inttype[XTHAL_MAX_INTERRUPTS]; + +/* masks of each type of interrupt */ +extern const unsigned int Xthal_inttype_mask[XTHAL_MAX_INTTYPES]; + +/* interrupt numbers assigned to each timer interrupt */ +extern const int Xthal_timer_interrupt[XTHAL_MAX_TIMERS]; + +/* INTENABLE,INTERRUPT,INTSET,INTCLEAR register access functions: */ +extern unsigned xthal_get_intenable( void ); +extern void xthal_set_intenable( unsigned ); +extern unsigned xthal_get_interrupt( void ); +#define xthal_get_intread xthal_get_interrupt /* backward compatibility */ +extern void xthal_set_intset( unsigned ); +extern void xthal_set_intclear( unsigned ); + + +/*---------------------------------------------------------------------- + Debug + ----------------------------------------------------------------------*/ + +/* Number of instruction and data break registers: */ +extern const int Xthal_num_ibreak; +extern const int Xthal_num_dbreak; + + +/*---------------------------------------------------------------------- + Core Counter + ----------------------------------------------------------------------*/ + +/* counter info */ +extern const unsigned char Xthal_have_ccount; /* set if CCOUNT register present */ +extern const unsigned char Xthal_num_ccompare; /* number of CCOMPAREn registers */ + +/* get CCOUNT register (if not present return 0) */ +extern unsigned xthal_get_ccount(void); + +/* set and get CCOMPAREn registers (if not present, get returns 0) */ +extern void xthal_set_ccompare(int, unsigned); +extern unsigned xthal_get_ccompare(int); + + +/*---------------------------------------------------------------------- + Miscellaneous + ----------------------------------------------------------------------*/ + +extern const unsigned char Xthal_have_prid; +extern const unsigned char Xthal_have_exceptions; +extern const unsigned char Xthal_xea_version; +extern const unsigned char Xthal_have_interrupts; +extern const unsigned char Xthal_have_highlevel_interrupts; +extern const unsigned char Xthal_have_nmi; + +extern unsigned xthal_get_prid( void ); + + +/*---------------------------------------------------------------------- + Virtual interrupt prioritization (DEPRECATED) + ----------------------------------------------------------------------*/ + +/* Convert between interrupt levels (as per PS.INTLEVEL) and virtual interrupt priorities: */ +extern unsigned xthal_vpri_to_intlevel(unsigned vpri); +extern unsigned xthal_intlevel_to_vpri(unsigned intlevel); + +/* Enables/disables given set (mask) of interrupts; returns previous enabled-mask of all ints: */ +extern unsigned xthal_int_enable(unsigned); +extern unsigned xthal_int_disable(unsigned); + +/* Set/get virtual priority of an interrupt: */ +extern int xthal_set_int_vpri(int intnum, int vpri); +extern int xthal_get_int_vpri(int intnum); + +/* Set/get interrupt lockout level for exclusive access to virtual priority data structures: */ +extern void xthal_set_vpri_locklevel(unsigned intlevel); +extern unsigned xthal_get_vpri_locklevel(void); + +/* Set/get current virtual interrupt priority: */ +extern unsigned xthal_set_vpri(unsigned vpri); +extern unsigned xthal_get_vpri(void); +extern unsigned xthal_set_vpri_intlevel(unsigned intlevel); +extern unsigned xthal_set_vpri_lock(void); + + +/*---------------------------------------------------------------------- + Generic Interrupt Trampolining Support (DEPRECATED) + ----------------------------------------------------------------------*/ + +typedef void (XtHalVoidFunc)(void); + +/* Bitmask of interrupts currently trampolining down: */ +extern unsigned Xthal_tram_pending; + +/* + * Bitmask of which interrupts currently trampolining down synchronously are + * actually enabled; this bitmask is necessary because INTENABLE cannot hold + * that state (sync-trampolining interrupts must be kept disabled while + * trampolining); in the current implementation, any bit set here is not set + * in INTENABLE, and vice-versa; once a sync-trampoline is handled (at level + * one), its enable bit must be moved from here to INTENABLE: + */ +extern unsigned Xthal_tram_enabled; + +/* Bitmask of interrupts configured for sync trampolining: */ +extern unsigned Xthal_tram_sync; + +/* Trampoline support functions: */ +extern unsigned xthal_tram_pending_to_service( void ); +extern void xthal_tram_done( unsigned serviced_mask ); +extern int xthal_tram_set_sync( int intnum, int sync ); +extern XtHalVoidFunc* xthal_set_tram_trigger_func( XtHalVoidFunc *trigger_fn ); + + +/*---------------------------------------------------------------------- + Internal Memories + ----------------------------------------------------------------------*/ + +extern const unsigned char Xthal_num_instrom; +extern const unsigned char Xthal_num_instram; +extern const unsigned char Xthal_num_datarom; +extern const unsigned char Xthal_num_dataram; +extern const unsigned char Xthal_num_xlmi; + +/* Each of the following arrays contains at least one entry, + * or as many entries as needed if more than one: */ +extern const unsigned int Xthal_instrom_vaddr[]; +extern const unsigned int Xthal_instrom_paddr[]; +extern const unsigned int Xthal_instrom_size []; +extern const unsigned int Xthal_instram_vaddr[]; +extern const unsigned int Xthal_instram_paddr[]; +extern const unsigned int Xthal_instram_size []; +extern const unsigned int Xthal_datarom_vaddr[]; +extern const unsigned int Xthal_datarom_paddr[]; +extern const unsigned int Xthal_datarom_size []; +extern const unsigned int Xthal_dataram_vaddr[]; +extern const unsigned int Xthal_dataram_paddr[]; +extern const unsigned int Xthal_dataram_size []; +extern const unsigned int Xthal_xlmi_vaddr[]; +extern const unsigned int Xthal_xlmi_paddr[]; +extern const unsigned int Xthal_xlmi_size []; + + +/*---------------------------------------------------------------------- + Cache + ----------------------------------------------------------------------*/ + +/* number of cache sets in log2(lines per way) */ +extern const unsigned char Xthal_icache_setwidth; +extern const unsigned char Xthal_dcache_setwidth; +/* cache set associativity (number of ways) */ +extern const unsigned int Xthal_icache_ways; +extern const unsigned int Xthal_dcache_ways; +/* cache features */ +extern const unsigned char Xthal_icache_line_lockable; +extern const unsigned char Xthal_dcache_line_lockable; + +/* cache attribute register control (used by other HAL routines) */ +extern unsigned xthal_get_cacheattr( void ); +extern unsigned xthal_get_icacheattr( void ); +extern unsigned xthal_get_dcacheattr( void ); +extern void xthal_set_cacheattr( unsigned ); +extern void xthal_set_icacheattr( unsigned ); +extern void xthal_set_dcacheattr( unsigned ); +/* set cache attribute (access modes) for a range of memory */ +extern int xthal_set_region_attribute( void *addr, unsigned size, + unsigned cattr, unsigned flags ); +/* Bits of flags parameter to xthal_set_region_attribute(): */ +#define XTHAL_CAFLAG_EXPAND 0x000100 /* only expand allowed access to range, don't reduce it */ +#define XTHAL_CAFLAG_EXACT 0x000200 /* return error if can't apply change to exact range specified */ +#define XTHAL_CAFLAG_NO_PARTIAL 0x000400 /* don't apply change to regions partially covered by range */ +#define XTHAL_CAFLAG_NO_AUTO_WB 0x000800 /* don't writeback data after leaving writeback attribute */ +#define XTHAL_CAFLAG_NO_AUTO_INV 0x001000 /* don't invalidate after disabling cache (entering bypass) */ + +/* enable caches */ +extern void xthal_icache_enable( void ); /* DEPRECATED */ +extern void xthal_dcache_enable( void ); /* DEPRECATED */ +/* disable caches */ +extern void xthal_icache_disable( void ); /* DEPRECATED */ +extern void xthal_dcache_disable( void ); /* DEPRECATED */ + +/* invalidate the caches */ +extern void xthal_icache_all_invalidate( void ); +extern void xthal_dcache_all_invalidate( void ); +/* write dirty data back */ +extern void xthal_dcache_all_writeback( void ); +/* write dirty data back and invalidate */ +extern void xthal_dcache_all_writeback_inv( void ); +/* prefetch and lock specified memory range into cache */ +extern void xthal_icache_region_lock( void *addr, unsigned size ); +extern void xthal_dcache_region_lock( void *addr, unsigned size ); +# ifndef XTHAL_USE_CACHE_MACROS +extern void xthal_icache_line_lock(void *addr); +extern void xthal_dcache_line_lock(void *addr); +# endif +/* unlock from cache */ +extern void xthal_icache_all_unlock( void ); +extern void xthal_dcache_all_unlock( void ); +extern void xthal_icache_region_unlock( void *addr, unsigned size ); +extern void xthal_dcache_region_unlock( void *addr, unsigned size ); +# ifndef XTHAL_USE_CACHE_MACROS +extern void xthal_icache_line_unlock(void *addr); +extern void xthal_dcache_line_unlock(void *addr); +# endif + + + +/*---------------------------------------------------------------------- + Local Memory ECC/Parity + ----------------------------------------------------------------------*/ + +/* Inject memory errors; flags is bit combination of XTHAL_MEMEP_F_xxx: */ +extern void xthal_memep_inject_error(void *addr, int size, int flags); + + + +/*---------------------------------------------------------------------- + Memory Management Unit + ----------------------------------------------------------------------*/ + +extern const unsigned char Xthal_have_spanning_way; +extern const unsigned char Xthal_have_identity_map; +extern const unsigned char Xthal_have_mimic_cacheattr; +extern const unsigned char Xthal_have_xlt_cacheattr; +extern const unsigned char Xthal_have_cacheattr; +extern const unsigned char Xthal_have_tlbs; + +extern const unsigned char Xthal_mmu_asid_bits; /* 0 .. 8 */ +extern const unsigned char Xthal_mmu_asid_kernel; +extern const unsigned char Xthal_mmu_rings; /* 1 .. 4 (perhaps 0 if no MMU and/or no protection?) */ +extern const unsigned char Xthal_mmu_ring_bits; +extern const unsigned char Xthal_mmu_sr_bits; +extern const unsigned char Xthal_mmu_ca_bits; +extern const unsigned int Xthal_mmu_max_pte_page_size; +extern const unsigned int Xthal_mmu_min_pte_page_size; + +extern const unsigned char Xthal_itlb_way_bits; +extern const unsigned char Xthal_itlb_ways; +extern const unsigned char Xthal_itlb_arf_ways; +extern const unsigned char Xthal_dtlb_way_bits; +extern const unsigned char Xthal_dtlb_ways; +extern const unsigned char Xthal_dtlb_arf_ways; + +/* Convert between virtual and physical addresses (through static maps only): */ +/*** WARNING: these two functions may go away in a future release; don't depend on them! ***/ +extern int xthal_static_v2p( unsigned vaddr, unsigned *paddrp ); +extern int xthal_static_p2v( unsigned paddr, unsigned *vaddrp, unsigned cached ); + +#define XCHAL_SUCCESS 0 +#define XCHAL_ADDRESS_MISALIGNED -1 +#define XCHAL_INEXACT -2 +#define XCHAL_INVALID_ADDRESS -3 +#define XCHAL_UNSUPPORTED_ON_THIS_ARCH -4 +#define XCHAL_NO_PAGES_MAPPED -5 +#define XTHAL_NO_MAPPING -6 + +#define XCHAL_CA_R (0xC0 | 0x40000000) +#define XCHAL_CA_RX (0xD0 | 0x40000000) +#define XCHAL_CA_RW (0xE0 | 0x40000000) +#define XCHAL_CA_RWX (0xF0 | 0x40000000) + +extern int xthal_set_region_translation(void* vaddr, void* paddr, unsigned size, unsigned cache_atr, unsigned flags); +extern int xthal_v2p(void*, void**, unsigned*, unsigned*); +extern int xthal_invalidate_region(void* addr); +extern int xthal_set_region_translation_raw(void *vaddr, void *paddr, unsigned cattr); + +#ifdef __cplusplus +} +#endif +#endif /*!_ASMLANGUAGE && !_NOCLANGUAGE && !__ASSEMBLER__ */ + +#endif /* !XTENSA_HAL_NON_PRIVILEGED_ONLY */ + + + + +/**************************************************************************** + EXPERIMENTAL and DEPRECATED Definitions + ****************************************************************************/ + + +#if !defined(_ASMLANGUAGE) && !defined(_NOCLANGUAGE) && !defined(__ASSEMBLER__) +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef INCLUDE_DEPRECATED_HAL_CODE +extern const unsigned char Xthal_have_old_exc_arch; +extern const unsigned char Xthal_have_mmu; +extern const unsigned int Xthal_num_regs; +extern const unsigned char Xthal_num_iroms; +extern const unsigned char Xthal_num_irams; +extern const unsigned char Xthal_num_droms; +extern const unsigned char Xthal_num_drams; +extern const unsigned int Xthal_configid0; +extern const unsigned int Xthal_configid1; +#endif + +#ifdef INCLUDE_DEPRECATED_HAL_DEBUG_CODE +#define XTHAL_24_BIT_BREAK 0x80000000 +#define XTHAL_16_BIT_BREAK 0x40000000 +extern const unsigned short Xthal_ill_inst_16[16]; +#define XTHAL_DEST_REG 0xf0000000 /* Mask for destination register */ +#define XTHAL_DEST_REG_INST 0x08000000 /* Branch address is in register */ +#define XTHAL_DEST_REL_INST 0x04000000 /* Branch address is relative */ +#define XTHAL_RFW_INST 0x00000800 +#define XTHAL_RFUE_INST 0x00000400 +#define XTHAL_RFI_INST 0x00000200 +#define XTHAL_RFE_INST 0x00000100 +#define XTHAL_RET_INST 0x00000080 +#define XTHAL_BREAK_INST 0x00000040 +#define XTHAL_SYSCALL_INST 0x00000020 +#define XTHAL_LOOP_END 0x00000010 /* Not set by xthal_inst_type */ +#define XTHAL_JUMP_INST 0x00000008 /* Call or jump instruction */ +#define XTHAL_BRANCH_INST 0x00000004 /* Branch instruction */ +#define XTHAL_24_BIT_INST 0x00000002 +#define XTHAL_16_BIT_INST 0x00000001 +typedef struct xthal_state { + unsigned pc; + unsigned ar[16]; + unsigned lbeg; + unsigned lend; + unsigned lcount; + unsigned extra_ptr; + unsigned cpregs_ptr[XTHAL_MAX_CPS]; +} XTHAL_STATE; +extern unsigned int xthal_inst_type(void *addr); +extern unsigned int xthal_branch_addr(void *addr); +extern unsigned int xthal_get_npc(XTHAL_STATE *user_state); +#endif /* INCLUDE_DEPRECATED_HAL_DEBUG_CODE */ + +#ifdef __cplusplus +} +#endif +#endif /*!_ASMLANGUAGE && !_NOCLANGUAGE && !__ASSEMBLER__ */ + +#endif /*XTENSA_HAL_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/jtag-xtensa.h b/tools/sdk/include/esp32/xtensa/jtag-xtensa.h new file mode 100755 index 00000000..45ac1caa --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/jtag-xtensa.h @@ -0,0 +1,99 @@ +/* Copyright (c) 2011-2012 Tensilica Inc. ALL RIGHTS RESERVED. +// These coded instructions, statements, and computer programs are the +// copyrighted works and confidential proprietary information of Tensilica Inc. +// They may not be modified, copied, reproduced, distributed, or disclosed to +// third parties in any manner, medium, or form, in whole or in part, without +// the prior written consent of Tensilica Inc. +*/ + +#ifndef _JTAG_XTENSA_H_ +#define _JTAG_XTENSA_H_ + + +/* ---------------- JTAG registers ------------------ */ + +/* -- ER and later JTAG registers */ +typedef enum { + regIR, + regBypass, + regNAR, + regNDR, + regIdcode, + regPWRCTL, + regPWRSTAT, + regJtagMAX, +} xtensaJtagReg; + +/* -- pre-ER JTAG registers */ +typedef enum { + regOldIR, + regOldBypass, + regOldDIRW, + regOldDIR, + regOldDDR, + regOldDOSR, + regOldESR, + regOldDCR, + regOldTraxNDR, + regOldTraxNAR, + regOldMAX +} xtensaOldJtagReg; + + +/* ---------------- JTAG Instructions ------------------ */ + +/* -- pre-ER JTAG instructions */ +typedef enum { + ji_EnableOCD = 0x11, + ji_DebugInt, + ji_RetDebugInt, // TBD: remove + ji_DisRetOCD, // TBD: remove + ji_ExecuteDI, + ji_LoadDI, + ji_ScanDDR, + ji_ReadDOSR, + ji_ScanDCR, + ji_LoadWDI, + ji_TRAX = 0x1c, + ji_BYPASS = 0x1f, +} xtensaJtagInstruction; + +typedef enum { + OCDNormalMode, + OCDRunMode, + OCDHaltMode, + OCDStepMode +} xtensaMode; + +typedef struct { + xtensaMode mode; + int DRsel; + XTMP_core core; + XTMP_tap tap; + int core_num; + jtagReg_t *jtagRegs; + void *dap; // used for ARM DAP only + bool isBig; + int dir_array_option; // used by pre-ER devices only + // for testing, below - FIXME - delete later + int ocdReg; + unsigned int wr_data; + XTMP_event start_OCD_trans; + bool data_cycle; + bool data_pending; +} coreSlaveData_t; + + +enum OCD_ACCESS_TYPE{ + NEXUS_ACCESS, + CS_ACCESS, +}; + +// pre-ER Xtensa initializiation +EXTERN XTMP_deviceStatus +XTMP_jtagCoreSlaveEX(XTMP_component component, XTMP_jtagSlave slave, void* mydata); + +extern char *OCDrd; +extern char *OCDwr; + +#endif diff --git a/tools/sdk/include/esp32/xtensa/lcd-splc780d-4bitmode-board.h b/tools/sdk/include/esp32/xtensa/lcd-splc780d-4bitmode-board.h new file mode 100755 index 00000000..f4db5885 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/lcd-splc780d-4bitmode-board.h @@ -0,0 +1,62 @@ +/******************************************************************************* +Copyright (c) 2009-2013 by Tensilica Inc. ALL RIGHTS RESERVED. +These coded instructions, statements, and computer programs are the +copyrighted works and confidential proprietary information of Tensilica Inc. +They may not be modified, copied, reproduced, distributed, or disclosed to +third parties in any manner, medium, or form, in whole or in part, without +the prior written consent of Tensilica Inc. +-------------------------------------------------------------------------------- + +lcd-splc780d-4bitmode-board.h Board-specific LCD info for these boards: + Avnet AV110 (XT-AV110) + Xilinx ML605 (XT-ML605) + Xilinx KC705 (XT-KC705) + +Interface between board-independent driver and board-specific header. + +This is used by a board-independent SPLC780D LCD controller (4 bit mode) +driver to obtain board-specific information about LCD displays on the board, +such as the controller register base address and spacing (a function of how +the address lines are connected on the board) and length of the visible window +of the display (a function of the LCD panel the controller drives). +The driver doesnot refer directly to the board-specific header, which therefore is not +constrained to use macro names consistent with other boards. + +!! Must not contain any board-specific macro names (only controller specific) !! + +Included at compile-time via an include path specific to the board. + +The listed boards contain a single MYTech MOC-16216B-B display driven by +a Sunplus SPLC870D controller. + +*******************************************************************************/ + +#ifndef _LCD_SPLC780D_4BIT_BOARD_H +#define _LCD_SPLC780D_4BIT_BOARD_H + +#include /* Board info */ + + +/* Base address of the controller's registers. */ +#ifdef SPLC780D_4BIT_VADDR +#define SPLC780D_4BIT_REGBASE SPLC780D_4BIT_VADDR +#endif + +/* +The controller's registers are connected at word addresses on these boards. +Each byte-wide register appears as the least-significant-byte (LSB) of the +word regardless of the endianness of the processor (so if using word accesses +then endianness doesn't matter). +*/ +#define SPLC780D_4BIT_REGSPACING 4 +typedef unsigned splc780d_4bit_reg_t; + +/* Include generic information shared by all boards that use this device. */ +#include + + +/* Display limits of the LCD panel. */ +#define DISPLAY_VISIBLE_LEN 16 /* length (chars) of visible window */ + +#endif /* _LCD_SPLC780D_4BIT_BOARD_H */ + diff --git a/tools/sdk/include/esp32/xtensa/lcd-splc780d-4bitmode.h b/tools/sdk/include/esp32/xtensa/lcd-splc780d-4bitmode.h new file mode 100755 index 00000000..0a214bb4 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/lcd-splc780d-4bitmode.h @@ -0,0 +1,105 @@ +/******************************************************************************* + +Copyright (c) 2009-2010 by Tensilica Inc. ALL RIGHTS RESERVED. +These coded instructions, statements, and computer programs are the +copyrighted works and confidential proprietary information of Tensilica Inc. +They may not be modified, copied, reproduced, distributed, or disclosed to +third parties in any manner, medium, or form, in whole or in part, without +the prior written consent of Tensilica Inc. +-------------------------------------------------------------------------------- + +lcd-SPLC780D-4bitmode.h Generic definitions for Sunplus SPLC780D LCD Controller +operating in 4 bit mode. + +This is used by board-support-packages with one or more LCD displays that use +a SPLC780D controller in 4 bit mode. A BSP provides a base address for each +instance of an SPLC780D LCD controller on the board. + +Note that LCD display operation is almost totally independent of the LCD +display, depending almost entirely on the controller. However the display +may limit the number of characters of the controller's RAM buffer that are +actually visible at one time. The length of the display's visible window +is not specifified in this controller-specific header, but comes to the +driver from the board-specific "display.h" header. + +*******************************************************************************/ + +#ifndef _LCD_SPLC780D_4BIT_H_ +#define _LCD_SPLC780D_4BIT_H_ + + +/* Offsets to controller registers from base. */ +#define SPLC780D_4BIT_INST 0 +#define SPLC780D_4BIT_DATA (SPLC780D_4BIT_INST + SPLC780D_4BIT_REGSPACING) + + +#define SPLC780D_4BIT_INST_INIT1 0xFF /* First command in + init sequence */ +#define SPLC780D_4BIT_INST_INIT2 0x30 /* Second command in + init sequence, + issued 3 times */ +#define SPLC780D_4BIT_INST_INIT3 0x20 /* Third and last command + in init sequence */ +#define SPLC780D_4BIT_INST_CLEAR 0x01 /* clear (blank) display) */ +#define SPLC780D_4BIT_INST_SET_MODE 0x28 /* Set LCD mode. Supported + setting is 4 bit data + length, 2 lines, 5*8 */ +#define SPLC780D_4BIT_INST_DSPLY_ON 0x0C /* Set Display ON */ +#define SPLC780D_4BIT_INST_CRSR_INC 0x06 /* Set cursor moving direction + as increment */ + +#define SPLC780D_4BIT_LINET_ADDR 0x80 /* clear (blank) display) */ +#define SPLC780D_4BIT_LINEB_ADDR 0xC0 /* clear (blank) display) */ + +#ifndef __ASSEMBLER__ + +/* C interface to controller registers. */ +struct splc780d_4bit_s { + splc780d_4bit_reg_t inst; /* instruction register */ + splc780d_4bit_reg_t data; /* data register */ +}; + +typedef volatile struct splc780d_4bit_s splc780d_4bit_t; + +/* +Prototypes of high level driver functions. +*/ + +/* Write an instruction byte to LCD, result in two back to back writes since the + * LCD is hooked up in 4 bit mode*/ +extern void lcd_write_inst_byte(splc780d_4bit_t *lcd, unsigned char inst); + +/* Write a data byte to LCD, result in two back to back writes since the + * LCD is hooked up in 4 bit mode*/ +extern void lcd_write_data_byte(splc780d_4bit_t *lcd, unsigned char data); + +/* +Initialize the display with default settings. +*/ +extern void splc780d_4bit_init_default(splc780d_4bit_t *lcd); + +/* +Write a single character at a given position (chars from left, starting at 0). +Wait long enough afterward for the controller to be ready for more input. +Positions beyond the end of the display are ignored. +*/ +extern void splc780d_4bit_write_char(splc780d_4bit_t *lcd, unsigned pos, const char c); + +/* +Write a string to the display starting at the left (position 0). +Blank-pad to or truncate at the end of the display (overwrites any previous +string so don't need to blank the display first). +Wait long enough after each char for the controller to be ready for more input. +*/ +extern void splc780d_4bit_write_string(splc780d_4bit_t *lcd, const char *s); + +/* +Blank (clear) the entire display. +Wait long enough afterward for the controller to be ready for more input. +*/ +extern void splc780d_4bit_blank(splc780d_4bit_t *lcd); + +#endif /* __ASSEMBLER__ */ + +#endif /* _LCD_SPLC780D_4BIT_H_ */ + diff --git a/tools/sdk/include/esp32/xtensa/lcd-splc780d.h b/tools/sdk/include/esp32/xtensa/lcd-splc780d.h new file mode 100755 index 00000000..4e878e90 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/lcd-splc780d.h @@ -0,0 +1,151 @@ +/******************************************************************************* + +Copyright (c) 2006-2007 by Tensilica Inc. ALL RIGHTS RESERVED. +These coded instructions, statements, and computer programs are the +copyrighted works and confidential proprietary information of Tensilica Inc. +They may not be modified, copied, reproduced, distributed, or disclosed to +third parties in any manner, medium, or form, in whole or in part, without +the prior written consent of Tensilica Inc. +-------------------------------------------------------------------------------- + +lcd-SPLC780D.h Generic definitions for Sunplus SPLC780D LCD Controller + +This is used by board-support-packages with one or more LCD displays that use +a SPLC780D controller. A BSP provides a base address for each instance of an +SPLC780D LCD controller on the board. + +Note that LCD display operation is almost totally independent of the LCD +display, depending almost entirely on the controller. However the display +may limit the number of characters of the controller's RAM buffer that are +actually visible at one time. The length of the display's visible window +is not specifified in this controller-specific header, but comes to the +driver from the board-specific "display.h" header. + +*******************************************************************************/ + +#ifndef _LCD_SPLC780D_H_ +#define _LCD_SPLC780D_H_ + + +/* Offsets to controller registers from base. */ +#define SPLC780D_INST 0 +#define SPLC780D_DATA (SPLC780D_INST + SPLC780D_REGSPACING) + +/* +Bit fields and their values in the instruction register. +These fields are NOT orthogonal - they overlap! +Thus only one field may be written at a time, determined by the +most-significant 1 bit in the pattern (the field selector). +All less significant bits are part of the value of the selected field. +The fields and their values are grouped together to emphasize this format. +Field selector macro names end in '_' (implying something more needs +to be ORed) and the value macros are indented. The pattern written to a +bitfield is a bitwise OR of a field selector and one or more values, eg. + (SPLC780D_INST_ON_ | SPLC780D_INST_ON_DISPLAY | SPLC780D_INST_ON_CURSOR) +A single bit field (eg. SPCL780D_INST_HOME) need not have a value. + +NOTE: Controller requires a software delay after writing to the control +or data registers. For the data register it is 38us. For the control +register it is 38us for most bit fields, with the following exceptions: + SPLC780D_FUNC_ 100us. + SPLC780D_INST_CLEAR, SPLC780D_INST_HOME 1520us. +For more details and reset timing, see the SUNPLUS SPLC780D data sheet. +*/ + +#define SPLC780D_INST_CLEAR_ 0x1 /* clear (blank) display) */ + +#define SPLC780D_INST_HOME_ 0x2 /* home cursor and shift pos */ + +#define SPLC780D_INST_ENTRY_ 0x4 /* combine *ENTRY_* flags below */ +#define SPLC780D_INST_ENTRY_SHIFT 0x1 /* display shift on entry / not */ +#define SPLC780D_INST_ENTRY_INCR 0x2 /* cursor incr / decr */ +#define SPLC780D_INST_ENTRY_DECR 0 /* cursor incr / decr */ + +#define SPLC780D_INST_ON_ 0x8 /* combine *ON_* flags below */ +#define SPLC780D_INST_ON_DISPLAY 0x4 /* display on / off */ +#define SPLC780D_INST_ON_CURSOR 0x2 /* cursor on / off */ +#define SPLC780D_INST_ON_BLINK 0x1 /* blink on / off */ + +#define SPLC780D_INST_SHIFT_ 0x10 /* combine *SHIFT_* flags below */ +#define SPLC780D_INST_SHIFT_DISP 0x8 /* shift display / move cursor */ +#define SPLC780D_INST_SHIFT_CURS 0 /* shift display / move cursor */ +#define SPLC780D_INST_SHIFT_RIGHT 0x4 /* shift right / left */ +#define SPLC780D_INST_SHIFT_LEFT 0 /* shift right / left */ + +#define SPLC780D_INST_FUNC_ 0x20 /* combine *FUNC_* flags below */ +#define SPLC780D_INST_FUNC_8BIT 0x10 /* data length 8 bit / 4 bit */ +#define SPLC780D_INST_FUNC_4BIT 0 /* data length 8 bit / 4 bit */ +#define SPLC780D_INST_FUNC_2LINE 0x08 /* display lines 2 / 1 */ +#define SPLC780D_INST_FUNC_1LINE 0 /* display lines 2 / 1 */ +#define SPLC780D_INST_FUNC_F5x10 0x04 /* character font 5x10 / 5x8 */ +#define SPLC780D_INST_FUNC_F5x8 0 /* character font 5x10 / 5x8 */ + /* font must be 5x8 for 2 lines */ +#define SPLC780D_INST_CGEN_ 0x40 /* set char generator address */ +#define SPLC780D_INST_CGEN_ADDR 0x3F /* to address in this field */ +#define SPLC780D_INST_DRAM_ 0x80 /* set display data RAM address */ +#define SPLC780D_INST_DRAM_ADDR 0x7F /* to address in this field */ +#define SPLC780D_INST_DRAM_LINE2 0x40 /* address offset to line 2 */ +/* Controller limits */ +#define SPLC780D_RAMLEN_1LINE 0x50 /* length of line in RAM (1 line) */ +#define SPLC780D_RAMLEN_2LINE 0x28 /* length of line in RAM (2 line) */ + + +#ifndef __ASSEMBLER__ + +/* C interface to controller registers. */ +struct splc780d_s { + splc780d_reg_t inst; /* instruction register */ + splc780d_reg_t data; /* data register */ +}; + +typedef volatile struct splc780d_s splc780d_t; + +/* +Prototypes of high level driver functions. +*/ + +/* +Initialize the display with the FUNC_, ENTRY_ and ON_ fields as specified in +terms of the values above. The splc780d_init_default() macro is an example. +*/ +extern void splc780d_init(splc780d_t *lcd, + unsigned func, unsigned entry, unsigned on); + +/* +Initialize the display to default mode: 8-bit interface, 2 line, 5x8 font, +increment cursor on entry, display on (cursor and blinking off). +*/ +#define splc780d_init_default(lcd) \ + splc780d_init( lcd, \ + SPLC780D_INST_FUNC_8BIT \ + | SPLC780D_INST_FUNC_2LINE \ + | SPLC780D_INST_FUNC_F5x8, \ + SPLC780D_INST_ENTRY_INCR, \ + SPLC780D_INST_ON_DISPLAY \ + ) + +/* +Write a single character at a given position (chars from left, starting at 0). +Wait long enough afterward for the controller to be ready for more input. +Positions beyond the end of the display are ignored. +*/ +extern void splc780d_write_char(splc780d_t *lcd, unsigned pos, const char c); + +/* +Write a string to the display starting at the left (position 0). +Blank-pad to or truncate at the end of the display (overwrites any previous +string so don't need to blank the display first). +Wait long enough after each char for the controller to be ready for more input. +*/ +extern void splc780d_write_string(splc780d_t *lcd, const char *s); + +/* +Blank (clear) the entire display. +Wait long enough afterward for the controller to be ready for more input. +*/ +extern void splc780d_blank(splc780d_t *lcd); + +#endif /* __ASSEMBLER__ */ + +#endif /* _LCD_SPLC780D_H_ */ + diff --git a/tools/sdk/include/esp32/xtensa/overlay.h b/tools/sdk/include/esp32/xtensa/overlay.h new file mode 100755 index 00000000..e959cf51 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/overlay.h @@ -0,0 +1,184 @@ +// overlay.h -- Overlay manager header file +// $Id$ + +// Copyright (c) 2013 Tensilica Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +#ifndef OVERLAY_H +#define OVERLAY_H + + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +// Define this to turn off overlay support +#ifdef XT_DISABLE_OVERLAYS + +#define OVERLAY(n) +#define DECLARE_OVERLAY(n) + +#define xt_overlay_map(ov_id) +#define xt_overlay_map_async(ov_id) 0 +#define xt_overlay_map_in_progress() 0 +#define xt_overlay_get_id() 0 +#define xt_overlay_get_state(pc) 0 +#define xt_overlay_check_map(pc,ps,ovstate,sp) 0 + +#else + +// Shorthand for convenience and portability. +#define OVERLAY(n) __attribute__((overlay(n))) + +// Structure of the overlay table required by gdb and the overlay +// manager. Should not be accessed by user code unless overriding +// the load process. +struct ovly_table { + void * vma; // The overlay's mapped address. + unsigned int size; // The size of the overlay, in bytes. + void * lma; // The overlay's load address. + unsigned int mapped; // Non-zero if overlay is currently mapped; zero otherwise. +}; + +// Constructed by the linker. Required for gdb and for the overlay +// manager. Should not be accessed by user code unless overriding +// the load process. +extern struct ovly_table _ovly_table[]; + +// Functions. +void xt_overlay_map(int ov_id); +int xt_overlay_map_async(int ov_id); +int xt_overlay_map_in_progress(void); +unsigned int xt_overlay_get_state(unsigned int pc); +unsigned int xt_overlay_check_map(unsigned int * pc, unsigned int * ps, + unsigned int ovstate, unsigned int sp); +int xt_overlay_start_map(void * dst, void * src, unsigned int len, int ov_id); +int xt_overlay_is_mapping(int ov_id); +void xt_overlay_fatal_error(int ov_id); + + +// Returns the current overlay ID. If no overlay is mapped or an overlay +// is in the middle of being mapped, returns -1. Inlined to avoid calling +// out of overlay (wastes cycles, can end up reading wrong ID on interrupt +// activity). +// +static inline int xt_overlay_get_id(void) +{ +#pragma always_inline +extern short _mapping_id; +extern short _ovly_id; + + int ret; + unsigned int flags = XTOS_SET_INTLEVEL(15); + + if (_mapping_id >= 0) { + ret = -1; + } + else { + ret = _ovly_id; + } + + XTOS_RESTORE_INTLEVEL(flags); + return ret; +} + + +// The following macros are used to declare numbered overlays and generate +// the corresponding call stubs. Use as follows: +// +// DECLARE_OVERLAY(n) +// +// See documentation for more details. + +//#include + +// At this time overlays are not supported without windowing. +#if defined(__XTENSA_WINDOWED_ABI__) + +#define xstr(x) str(x) +#define str(x) #x + +// At entry, register a8 holds the return address and a9 holds the target +// function address. This stub saves a8 on the stack at (SP - 20) which +// is the only location that is safe for us to use. Then it allocates 32 +// bytes on the stack for working storage, loads the overlay number into +// a8, and jumps to the common handler. The common handler will make sure +// that the called function is loaded into memory before calling it. +// NOTE: we are using the stack area normally reserved for nested functions. +// This means nested functions cannot be used when overlays are in use. + +#define CALL_IN(num) \ + asm(".section .gnu.linkonce.t.overlay.call." xstr(num) ".text, \"ax\"\n" \ + ".global _overlay_call_in_" xstr(num) "_\n" \ + ".align 4\n" \ + "_overlay_call_in_" xstr(num) "_:\n" \ + "s32e a8, a1, -20\n" \ + "addi a8, a1, -32\n" \ + "movsp a1, a8\n" \ + "movi a8, " xstr(num) "\n" \ + "j _overlay_call_in_common\n" \ + ".size _overlay_call_in_" xstr(num) "_, . - _overlay_call_in_" xstr(num) "_\n"); + +// The call-out stub first calls the target function, then loads the overlay +// number into register a14 and jumps to the common handler. The handler will +// make sure that the caller function is present in memory before returning. +// Note that registers a10-a13 may contain return values so must be preserved. +// +// Because we came here via a call4, the return address is in a4, and the top +// 2 bits are set to the window increment. We'll restore the top 2 bits of +// the return address from the called function's address, assuming that both +// are in the same 1 GB segment. For now this is always true. + +#define CALL_OUT(num) \ + asm(".section .gnu.linkonce.t.overlay.call." xstr(num) ".text, \"ax\"\n" \ + ".global _overlay_call_out_" xstr(num) "_\n" \ + ".align 4\n" \ + "_overlay_call_out_" xstr(num) "_:\n" \ + "slli a4, a4, 2\n" \ + "srli a4, a4, 2\n" \ + "extui a8, a9, 30, 2\n" \ + "slli a8, a8, 30\n" \ + "or a4, a4, a8\n" \ + "callx8 a9\n" \ + "movi a14, " xstr(num) "\n" \ + "j _overlay_call_out_common\n" \ + ".size _overlay_call_out_" xstr(num) "_, . - _overlay_call_out_" xstr(num) "_\n"); + +// Generate a call-in and a call-out stub for each overlay. + +#define DECLARE_OVERLAY(num) \ + CALL_IN(num) \ + CALL_OUT(num) + +#endif // defined(__XTENSA_WINDOWED_ABI__) + +#endif // XT_DISABLE_OVERLAYS + +#ifdef __cplusplus +} +#endif + +#endif // OVERLAY_H + diff --git a/tools/sdk/include/esp32/xtensa/overlay_os_asm.h b/tools/sdk/include/esp32/xtensa/overlay_os_asm.h new file mode 100755 index 00000000..4adc044e --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/overlay_os_asm.h @@ -0,0 +1,140 @@ +// overlay_os_asm.h -- Overlay manager assembly macros for OS use. +// $Id$ + +// Copyright (c) 2013 Tensilica Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +#ifndef OVERLAY_OS_ASM_H +#define OVERLAY_OS_ASM_H + +// The macros in here are intended to be used by RTOS task switch code +// to check overlay status. Such code is usually in assembly and cannot +// call C code without penalty. For C code usage, it is best to use the +// corresponding C functions from the library. + + +// Inline assembly version of xt_overlay_get_state(). The arguments are +// three AR registers (a0-a15): +// +// "pcreg" - should contain the outgoing task's PC, i.e. the point at +// which the task got interrupted. The return value is also +// returned in this register. +// "sr1/2" - Scratch registers. These must be distinct from "pcreg". +// +// The return value is a 32-bit result that should be saved with the +// task context and passed as-is to xt_overlay_check_map. + + .macro _xt_overlay_get_state pcreg sr1 sr2 + + movi \sr1, _mapping_id + movi \sr2, _ovly_id + l16si \sr1, \sr1, 0 + l16ui \sr2, \sr2, 0 + slli \sr1, \sr1, 16 + or \pcreg, \sr1, \sr2 + + .endm + + +// Inline assembly version of xt_overlay_check_map(). It requires 5 AR +// registers (a0-a15) as arguments. +// +// "pcreg" - should contain the interrupted task's PC, i.e. the point +// at which the task got interrupted. This will be adjusted +// if required. +// "psreg" - should contain the interrupted task's PS. This will be +// adjusted if required. +// "ovreg" - should contain the overlay state on entry. Contents may +// be clobbered. +// "spreg" - should contain the tasks stack pointer on entry. +// "sr1" - Scratch register. Must be distinct from any of the above. +// +// The return values are "pcreg" and "psreg" and these must be used +// to update the task's PC and PS. +// Note that this macro may store data below the "spreg" pointer. If +// it does, then it will also disable interrupts via the PS, so that +// the task resumes with all interrupts disabled (to avoid corrupting +// this data). +// +// (SP - 24) Overlay ID to restore +// (SP - 28) Task PC +// (SP - 32) Task PS + + .macro _xt_overlay_check_map pcreg psreg ovreg spreg sr1 + +// There are four cases to deal with: +// +// _ovly_id = -1, _mapping_id = -1 +// No overlay is mapped or mapping, nothing to do. +// +// _ovly_id >= 0, _mapping_id = -1 +// An overlay was mapped, check PC to see if we need a restore. +// +// _ovly_id = -1, _mapping_id >= 0 +// An overlay is being mapped. Either it belongs to this task, which +// implies that the PC is in the mapping function, or it does not +// belong to this task. Either way there is nothing to do. +// +// _ovly_id >= 0, _mapping_id >= 0 +// Illegal, cannot happen by design. Don't need to handle this. +// +// So, the logic is to check _ovly_id first. If this is >= 0, then +// we check the task PC. If the PC is in the regions of interest then +// we'll patch the return PC to invoke xt_overlay_restore. + +.L1: + extui \sr1, \ovreg, 0, 16 // Extract _ovly_id + bbsi.l \sr1, 15, .Lno // If -1 then we're done + mov \ovreg, \sr1 // Restore this one + +// Next check the PC to see if it falls within the ranges of interest. + +.L2: + movi \sr1, _overlay_vma // Is PC < VMA range ? + bltu \pcreg, \sr1, .L3 + movi \sr1, _overlay_vma_end // Is PC > VMA range ? + bgeu \pcreg, \sr1, .L3 + j .L4 // PC is in VMA range +.L3: + movi \sr1, _overlay_call_stubs_start // Is PC < call stubs range ? + bltu \pcreg, \sr1, .Lno + movi \sr1, _overlay_call_stubs_end // Is PC > call stubs range ? + bgeu \pcreg, \sr1, .Lno + +// If we get here then a restore is needed. Save the overlay ID, PC and PS. +// Return modified PC and PS so that xt_overlay_restore() will execute in +// the context of the task when resumed. Note that the OS resumption code +// may expect PS.EXCM to be set so we leave it as is in the return value. + +.L4: + s32e \ovreg, \spreg, -24 // Save overlay ID + s32e \pcreg, \spreg, -28 // Save task PC + s32e \psreg, \spreg, -32 // Save task PS + movi \pcreg, xt_overlay_restore // Adjust resumption PC + movi \sr1, 15 + or \psreg, \psreg, \sr1 // Set intlevel to highest +.Lno: + + .endm + +#endif // OVERLAY_OS_ASM_H + diff --git a/tools/sdk/include/esp32/xtensa/sim.h b/tools/sdk/include/esp32/xtensa/sim.h new file mode 100755 index 00000000..e02087c5 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/sim.h @@ -0,0 +1,60 @@ +/* Copyright (c) 2004-2006 by Tensilica Inc. ALL RIGHTS RESERVED. +/ These coded instructions, statements, and computer programs are the +/ copyrighted works and confidential proprietary information of Tensilica Inc. +/ They may not be modified, copied, reproduced, distributed, or disclosed to +/ third parties in any manner, medium, or form, in whole or in part, without +/ the prior written consent of Tensilica Inc. +*/ + +/* sim.h + * + * Definitions and prototypes for specific ISS SIMCALLs + * (ie. outside the standard C library). + */ + +#ifndef _INC_SIM_H_ +#define _INC_SIM_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Shortcuts for enabling/disabling profiling in the Xtensa ISS */ +extern void xt_iss_profile_enable(void); +extern void xt_iss_profile_disable(void); + +/* Shortcut for setting the trace level in the Xtensa ISS */ +extern void xt_iss_trace_level(unsigned level); + +/* Generic interface for passing client commands in the Xtensa ISS: + * returns 0 on success, -1 on failure. + */ +extern int xt_iss_client_command(const char *client, const char *command); + +/* Interface for switching simulation modes in the Xtensa ISS: + * returns 0 on success, -1 on failure. + */ +#define XT_ISS_CYCLE_ACCURATE 0 +#define XT_ISS_FUNCTIONAL 1 +extern int xt_iss_switch_mode(int mode); + + +/* Interface for waiting on a system synchronization event */ +extern void xt_iss_event_wait(unsigned event_id); + +/* Interface for firing a system synchronization event */ +extern void xt_iss_event_fire(unsigned event_id); + +/* Interface for invoking a user simcall action, + * which can be registered in XTMP or XTSC. + */ +extern int xt_iss_simcall(int arg1, int arg2, int arg3, + int arg4, int arg5, int arg6); + + +#ifdef __cplusplus +} +#endif + +#endif /*_INC_SIM_H_*/ + diff --git a/tools/sdk/include/esp32/xtensa/simboard.h b/tools/sdk/include/esp32/xtensa/simboard.h new file mode 100755 index 00000000..980b0b75 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/simboard.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2001 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* simboard.h - Xtensa ISS "Board" specific definitions */ + +#ifndef _INC_SIMBOARD_H_ +#define _INC_SIMBOARD_H_ + +#include +#include + + +/* + * Device addresses. + */ + +/* System ROM: */ +#define XTBOARD_ROM_SIZE XSHAL_ROM_SIZE +#ifdef XSHAL_ROM_VADDR +#define XTBOARD_ROM_VADDR XSHAL_ROM_VADDR +#endif +#ifdef XSHAL_ROM_PADDR +#define XTBOARD_ROM_PADDR XSHAL_ROM_PADDR +#endif + +/* System RAM: */ +#define XTBOARD_RAM_SIZE XSHAL_RAM_SIZE +#ifdef XSHAL_RAM_VADDR +#define XTBOARD_RAM_VADDR XSHAL_RAM_VADDR +#endif +#ifdef XSHAL_RAM_PADDR +#define XTBOARD_RAM_PADDR XSHAL_RAM_PADDR +#endif + + +/* + * Things that depend on device addresses. + */ + +#define XTBOARD_CACHEATTR_WRITEBACK XSHAL_ISS_CACHEATTR_WRITEBACK +#define XTBOARD_CACHEATTR_WRITEALLOC XSHAL_ISS_CACHEATTR_WRITEALLOC +#define XTBOARD_CACHEATTR_WRITETHRU XSHAL_ISS_CACHEATTR_WRITETHRU +#define XTBOARD_CACHEATTR_BYPASS XSHAL_ISS_CACHEATTR_BYPASS +#define XTBOARD_CACHEATTR_DEFAULT XSHAL_ISS_CACHEATTR_DEFAULT + +#define XTBOARD_BUSINT_PIPE_REGIONS 0 +#define XTBOARD_BUSINT_SDRAM_REGIONS 0 + + +#endif /*_INC_SIMBOARD_H_*/ + diff --git a/tools/sdk/include/esp32/xtensa/simcall-errno.h b/tools/sdk/include/esp32/xtensa/simcall-errno.h new file mode 100755 index 00000000..445ec901 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/simcall-errno.h @@ -0,0 +1,139 @@ +/* Error numbers for Xtensa ISS semihosting. */ + +/* Copyright (c) 2003 by Tensilica Inc. ALL RIGHTS RESERVED. + These coded instructions, statements, and computer programs are the + copyrighted works and confidential proprietary information of Tensilica Inc. + They may not be modified, copied, reproduced, distributed, or disclosed to + third parties in any manner, medium, or form, in whole or in part, without + the prior written consent of Tensilica Inc. */ + +#ifndef _SIMCALL_ERRNO_H +#define _SIMCALL_ERRNO_H + +/* Define the error numbers (using the default newlib values) with prefixes + so they can be used in ISS without conflicting with the host values. */ + +#define _SIMC_EPERM 1 +#define _SIMC_ENOENT 2 +#define _SIMC_ESRCH 3 +#define _SIMC_EINTR 4 +#define _SIMC_EIO 5 +#define _SIMC_ENXIO 6 +#define _SIMC_E2BIG 7 +#define _SIMC_ENOEXEC 8 +#define _SIMC_EBADF 9 +#define _SIMC_ECHILD 10 +#define _SIMC_EAGAIN 11 +#define _SIMC_ENOMEM 12 +#define _SIMC_EACCES 13 +#define _SIMC_EFAULT 14 +#define _SIMC_ENOTBLK 15 +#define _SIMC_EBUSY 16 +#define _SIMC_EEXIST 17 +#define _SIMC_EXDEV 18 +#define _SIMC_ENODEV 19 +#define _SIMC_ENOTDIR 20 +#define _SIMC_EISDIR 21 +#define _SIMC_EINVAL 22 +#define _SIMC_ENFILE 23 +#define _SIMC_EMFILE 24 +#define _SIMC_ENOTTY 25 +#define _SIMC_ETXTBSY 26 +#define _SIMC_EFBIG 27 +#define _SIMC_ENOSPC 28 +#define _SIMC_ESPIPE 29 +#define _SIMC_EROFS 30 +#define _SIMC_EMLINK 31 +#define _SIMC_EPIPE 32 +#define _SIMC_EDOM 33 +#define _SIMC_ERANGE 34 +#define _SIMC_ENOMSG 35 +#define _SIMC_EIDRM 36 +#define _SIMC_ECHRNG 37 +#define _SIMC_EL2NSYNC 38 +#define _SIMC_EL3HLT 39 +#define _SIMC_EL3RST 40 +#define _SIMC_ELNRNG 41 +#define _SIMC_EUNATCH 42 +#define _SIMC_ENOCSI 43 +#define _SIMC_EL2HLT 44 +#define _SIMC_EDEADLK 45 +#define _SIMC_ENOLCK 46 +#define _SIMC_EBADE 50 +#define _SIMC_EBADR 51 +#define _SIMC_EXFULL 52 +#define _SIMC_ENOANO 53 +#define _SIMC_EBADRQC 54 +#define _SIMC_EBADSLT 55 +#define _SIMC_EDEADLOCK 56 +#define _SIMC_EBFONT 57 +#define _SIMC_ENOSTR 60 +#define _SIMC_ENODATA 61 +#define _SIMC_ETIME 62 +#define _SIMC_ENOSR 63 +#define _SIMC_ENONET 64 +#define _SIMC_ENOPKG 65 +#define _SIMC_EREMOTE 66 +#define _SIMC_ENOLINK 67 +#define _SIMC_EADV 68 +#define _SIMC_ESRMNT 69 +#define _SIMC_ECOMM 70 +#define _SIMC_EPROTO 71 +#define _SIMC_EMULTIHOP 74 +#define _SIMC_ELBIN 75 +#define _SIMC_EDOTDOT 76 +#define _SIMC_EBADMSG 77 +#define _SIMC_EFTYPE 79 +#define _SIMC_ENOTUNIQ 80 +#define _SIMC_EBADFD 81 +#define _SIMC_EREMCHG 82 +#define _SIMC_ELIBACC 83 +#define _SIMC_ELIBBAD 84 +#define _SIMC_ELIBSCN 85 +#define _SIMC_ELIBMAX 86 +#define _SIMC_ELIBEXEC 87 +#define _SIMC_ENOSYS 88 +#define _SIMC_ENMFILE 89 +#define _SIMC_ENOTEMPTY 90 +#define _SIMC_ENAMETOOLONG 91 +#define _SIMC_ELOOP 92 +#define _SIMC_EOPNOTSUPP 95 +#define _SIMC_EPFNOSUPPORT 96 +#define _SIMC_ECONNRESET 104 +#define _SIMC_ENOBUFS 105 +#define _SIMC_EAFNOSUPPORT 106 +#define _SIMC_EPROTOTYPE 107 +#define _SIMC_ENOTSOCK 108 +#define _SIMC_ENOPROTOOPT 109 +#define _SIMC_ESHUTDOWN 110 +#define _SIMC_ECONNREFUSED 111 +#define _SIMC_EADDRINUSE 112 +#define _SIMC_ECONNABORTED 113 +#define _SIMC_ENETUNREACH 114 +#define _SIMC_ENETDOWN 115 +#define _SIMC_ETIMEDOUT 116 +#define _SIMC_EHOSTDOWN 117 +#define _SIMC_EHOSTUNREACH 118 +#define _SIMC_EINPROGRESS 119 +#define _SIMC_EALREADY 120 +#define _SIMC_EDESTADDRREQ 121 +#define _SIMC_EMSGSIZE 122 +#define _SIMC_EPROTONOSUPPORT 123 +#define _SIMC_ESOCKTNOSUPPORT 124 +#define _SIMC_EADDRNOTAVAIL 125 +#define _SIMC_ENETRESET 126 +#define _SIMC_EISCONN 127 +#define _SIMC_ENOTCONN 128 +#define _SIMC_ETOOMANYREFS 129 +#define _SIMC_EPROCLIM 130 +#define _SIMC_EUSERS 131 +#define _SIMC_EDQUOT 132 +#define _SIMC_ESTALE 133 +#define _SIMC_ENOTSUP 134 +#define _SIMC_ENOMEDIUM 135 +#define _SIMC_ENOSHARE 136 +#define _SIMC_ECASECLASH 137 +#define _SIMC_EILSEQ 138 +#define _SIMC_EOVERFLOW 139 + +#endif /* ! _SIMCALL_ERRNO_H */ diff --git a/tools/sdk/include/esp32/xtensa/simcall-fcntl.h b/tools/sdk/include/esp32/xtensa/simcall-fcntl.h new file mode 100755 index 00000000..1c03f559 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/simcall-fcntl.h @@ -0,0 +1,21 @@ +/* File control operations for Xtensa ISS semihosting. */ + +/* Copyright (c) 2003 by Tensilica Inc. ALL RIGHTS RESERVED. + These coded instructions, statements, and computer programs are the + copyrighted works and confidential proprietary information of Tensilica Inc. + They may not be modified, copied, reproduced, distributed, or disclosed to + third parties in any manner, medium, or form, in whole or in part, without + the prior written consent of Tensilica Inc. */ + +#ifndef _SIMCALL_FCNTL_H +#define _SIMCALL_FCNTL_H + +#define _SIMC_O_APPEND 0x0008 +#define _SIMC_O_NONBLOCK 0x0080 +#define _SIMC_O_CREAT 0x0100 +#define _SIMC_O_TRUNC 0x0200 +#define _SIMC_O_EXCL 0x0400 +#define _SIMC_O_TEXT 0x4000 +#define _SIMC_O_BINARY 0x8000 + +#endif /* ! _SIMCALL_FCNTL_H */ diff --git a/tools/sdk/include/esp32/xtensa/simcall.h b/tools/sdk/include/esp32/xtensa/simcall.h new file mode 100755 index 00000000..d71959ee --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/simcall.h @@ -0,0 +1,189 @@ +/* + * simcall.h - Simulator call numbers + * + * Software that runs on a simulated Xtensa processor using + * the instruction set simulator (ISS) can invoke simulator + * services using the SIMCALL instruction. The a2 register + * is set prior to executing SIMCALL to a "simcall number", + * indicating which service to invoke. This file defines the + * simcall numbers defined and/or supported by the Xtensa ISS. + * + * IMPORTANT NOTE: These numbers are highly subject to change! + * + * Copyright (c) 2002-2007 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +#ifndef SIMCALL_INCLUDED +#define SIMCALL_INCLUDED + +/* + * System call like services offered by the simulator host. + * These are modeled after the Linux 2.4 kernel system calls + * for Xtensa processors. However not all system calls and + * not all functionality of a given system call are implemented, + * or necessarily have well defined or equivalent semantics in + * the context of a simulation (as opposed to a Unix kernel). + * + * These services behave largely as if they had been invoked + * as a task in the simulator host's operating system + * (eg. files accessed are those of the simulator host). + * However, these SIMCALLs model a virtual operating system + * so that various definitions, bit assignments etc + * (eg. open mode bits, errno values, etc) are independent + * of the host operating system used to run the simulation. + * Rather these definitions are specific to the Xtensa ISS. + * This way Xtensa ISA code written to use these SIMCALLs + * can (in principle) be simulated on any host. + * + * Up to 6 parameters are passed in registers a3 to a8 + * (note the 6th parameter isn't passed on the stack, + * unlike windowed function calling conventions). + * The return value is in a2. A negative value in the + * range -4096 to -1 indicates a negated error code to be + * reported in errno with a return value of -1, otherwise + * the value in a2 is returned as is. + */ + +/* These #defines need to match what's in Xtensa/OS/vxworks/xtiss/simcalls.c */ + +#define SYS_nop 0 /* n/a - setup; used to flush register windows */ +#define SYS_exit 1 /*x*/ +#define SYS_fork 2 +#define SYS_read 3 /*x*/ +#define SYS_write 4 /*x*/ +#define SYS_open 5 /*x*/ +#define SYS_close 6 /*x*/ +#define SYS_rename 7 /*x 38 - waitpid */ +#define SYS_creat 8 /*x*/ +#define SYS_link 9 /*x (not implemented on WIN32) */ +#define SYS_unlink 10 /*x*/ +#define SYS_execv 11 /* n/a - execve */ +#define SYS_execve 12 /* 11 - chdir */ +#define SYS_pipe 13 /* 42 - time */ +#define SYS_stat 14 /* 106 - mknod */ +#define SYS_chmod 15 +#define SYS_chown 16 /* 202 - lchown */ +#define SYS_utime 17 /* 30 - break */ +#define SYS_wait 18 /* n/a - oldstat */ +#define SYS_lseek 19 /*x*/ +#define SYS_getpid 20 +#define SYS_isatty 21 /* n/a - mount */ +#define SYS_fstat 22 /* 108 - oldumount */ +#define SYS_time 23 /* 13 - setuid */ +#define SYS_gettimeofday 24 /*x 78 - getuid (not implemented on WIN32) */ +#define SYS_times 25 /*X 43 - stime (Xtensa-specific implementation) */ +#define SYS_socket 26 +#define SYS_sendto 27 +#define SYS_recvfrom 28 +#define SYS_select_one 29 /* not compitible select, one file descriptor at the time */ +#define SYS_bind 30 +#define SYS_ioctl 31 + +/* + * Other... + */ +#define SYS_iss_argc 1000 /* returns value of argc */ +#define SYS_iss_argv_size 1001 /* bytes needed for argv & arg strings */ +#define SYS_iss_set_argv 1002 /* saves argv & arg strings at given addr */ + +#define SYS_memset 1004 /* fill a range of memory (fast) */ + +/* + * SIMCALLs for the ferret memory debugger. All are invoked by + * libferret.a ... ( Xtensa/Target-Libs/ferret ) + */ +#define SYS_ferret 1010 +#define SYS_malloc 1011 +#define SYS_free 1012 +#define SYS_more_heap 1013 +#define SYS_no_heap 1014 +#define SYS_enter_ferret 1015 +#define SYS_leave_ferret 1016 + +/* + * SIMCALLs for ISS client commands + */ +#define SYS_profile_enable 1020 +#define SYS_profile_disable 1021 +#define SYS_trace_level 1022 +#define SYS_client_command 1023 + +/* + * SIMCALL for simulation mode switching + */ +#define SYS_sim_mode_switch 1030 + +/* + * SIMCALLs for XTMP/XTSC event notify and core stall + */ +#define SYS_event_fire 1040 +#define SYS_event_stall 1041 + +/* + * SIMCALLs for callbacks registered in XTMP/XTSC + */ +#define SYS_callback_first 100 +#define SYS_callback_last 999 + +/* + * User defined simcall + */ +#define SYS_user_simcall 100 + +#define SYS_xmpa_errinfo 200 +#define SYS_xmpa_proc_status 201 +#define SYS_xmpa_proc_start 202 +#define SYS_xmpa_proc_stop 203 +#define SYS_xmpa_proc_mem_read 204 +#define SYS_xmpa_proc_mem_write 205 +#define SYS_xmpa_proc_mem_fill 206 +#define SYS_xmpa_proc_reg_read 207 +#define SYS_xmpa_proc_reg_write 208 + + +/* + * Extra SIMCALLs for GDB: + */ +#define SYS_gdb_break -1 /* invoked by XTOS on user exceptions if EPC points + to a break.n/break, regardless of cause! */ +#define SYS_xmon_out -2 /* invoked by XMON: ... */ +#define SYS_xmon_in -3 /* invoked by XMON: ... */ +#define SYS_xmon_flush -4 /* invoked by XMON: ... */ +#define SYS_gdb_abort -5 /* invoked by XTOS in _xtos_panic() */ +#define SYS_gdb_illegal_inst -6 /* invoked by XTOS for illegal instructions (too deeply) */ +#define SYS_xmon_init -7 /* invoked by XMON: ... */ +#define SYS_gdb_enter_sktloop -8 /* invoked by XTOS on debug exceptions */ +#define SYS_unhandled_kernel_exc -9 /* invoked by XTOS for unhandled kernel exceptions */ +#define SYS_unhandled_user_exc -10 /* invoked by XTOS for unhandled user exceptions */ +#define SYS_unhandled_double_exc -11 /* invoked by XTOS for unhandled double exceptions */ +#define SYS_unhandled_highpri_interrupt -12 /* invoked by XTOS for unhandled high-priority interrupts */ +#define SYS_xmon_close -13 /* invoked by XMON: ... */ + +/* + * SIMCALLs for vxWorks xtiss BSP: + */ +#define SYS_setup_ppp_pipes -83 +#define SYS_log_msg -84 + +/* + * SYS_select_one specifiers + */ +#define XTISS_SELECT_ONE_READ 1 +#define XTISS_SELECT_ONE_WRITE 2 +#define XTISS_SELECT_ONE_EXCEPT 3 + +/* + * SIMCALL for client calling arbitrary code in a client plug in. + * see clients/xcc_instr to see how this works. + */ + +#define SYS_client 0xC0DECAFE + + + +#endif /* !SIMCALL_INCLUDED */ diff --git a/tools/sdk/include/esp32/xtensa/specreg.h b/tools/sdk/include/esp32/xtensa/specreg.h new file mode 100755 index 00000000..0b2edee0 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/specreg.h @@ -0,0 +1,143 @@ +/* + * Xtensa Special Register symbolic names + */ + +/* $Id: //depot/rel/Eaglenest/Xtensa/OS/include/xtensa/specreg.h#2 $ */ + +/* + * Copyright (c) 2005-2011 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef XTENSA_SPECREG_H +#define XTENSA_SPECREG_H + +/* Special registers: */ +#define LBEG 0 +#define LEND 1 +#define LCOUNT 2 +#define SAR 3 +#define BR 4 +#define LITBASE 5 +#define SCOMPARE1 12 +#define ACCLO 16 +#define ACCHI 17 +#define MR_0 32 +#define MR_1 33 +#define MR_2 34 +#define MR_3 35 +#define PREFCTL 40 +#define WINDOWBASE 72 +#define WINDOWSTART 73 +#define PTEVADDR 83 +#define RASID 90 +#define ITLBCFG 91 +#define DTLBCFG 92 +#define IBREAKENABLE 96 +#define MEMCTL 97 +#define CACHEATTR 98 +#define ATOMCTL 99 +#define DDR 104 +#define MECR 110 +#define IBREAKA_0 128 +#define IBREAKA_1 129 +#define DBREAKA_0 144 +#define DBREAKA_1 145 +#define DBREAKC_0 160 +#define DBREAKC_1 161 +#define CONFIGID0 176 +#define EPC_1 177 +#define EPC_2 178 +#define EPC_3 179 +#define EPC_4 180 +#define EPC_5 181 +#define EPC_6 182 +#define EPC_7 183 +#define DEPC 192 +#define EPS_2 194 +#define EPS_3 195 +#define EPS_4 196 +#define EPS_5 197 +#define EPS_6 198 +#define EPS_7 199 +#define CONFIGID1 208 +#define EXCSAVE_1 209 +#define EXCSAVE_2 210 +#define EXCSAVE_3 211 +#define EXCSAVE_4 212 +#define EXCSAVE_5 213 +#define EXCSAVE_6 214 +#define EXCSAVE_7 215 +#define CPENABLE 224 +#define INTERRUPT 226 +#define INTREAD INTERRUPT /* alternate name for backward compatibility */ +#define INTSET INTERRUPT /* alternate name for backward compatibility */ +#define INTCLEAR 227 +#define INTENABLE 228 +#define PS 230 +#define VECBASE 231 +#define EXCCAUSE 232 +#define DEBUGCAUSE 233 +#define CCOUNT 234 +#define PRID 235 +#define ICOUNT 236 +#define ICOUNTLEVEL 237 +#define EXCVADDR 238 +#define CCOMPARE_0 240 +#define CCOMPARE_1 241 +#define CCOMPARE_2 242 +#define MISC_REG_0 244 +#define MISC_REG_1 245 +#define MISC_REG_2 246 +#define MISC_REG_3 247 + +/* Special cases (bases of special register series): */ +#define MR 32 +#define IBREAKA 128 +#define DBREAKA 144 +#define DBREAKC 160 +#define EPC 176 +#define EPS 192 +#define EXCSAVE 208 +#define CCOMPARE 240 +#define MISC_REG 244 + +/* Tensilica-defined user registers: */ +#if 0 +/*#define ... 21..24 */ /* (545CK) */ +/*#define ... 140..143 */ /* (545CK) */ +#define EXPSTATE 230 /* Diamond */ +#define THREADPTR 231 /* threadptr option */ +#define FCR 232 /* FPU */ +#define FSR 233 /* FPU */ +#define AE_OVF_SAR 240 /* HiFi2 */ +#define AE_BITHEAD 241 /* HiFi2 */ +#define AE_TS_FTS_BU_BP 242 /* HiFi2 */ +#define AE_SD_NO 243 /* HiFi2 */ +#define VSAR 240 /* VectraLX */ +#define ROUND_LO 242 /* VectraLX */ +#define ROUND_HI 243 /* VectraLX */ +#define CBEGIN 246 /* VectraLX */ +#define CEND 247 /* VectraLX */ +#endif + +#endif /* XTENSA_SPECREG_H */ + diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_DFP_assist.h b/tools/sdk/include/esp32/xtensa/tie/xt_DFP_assist.h new file mode 100644 index 00000000..4d529ebd --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_DFP_assist.h @@ -0,0 +1,96 @@ +/* Definitions for the xt_DFP_assist TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_DFP_assist_HEADER +#define _XTENSA_xt_DFP_assist_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern void _TIE_xt_DFP_assist_F64ITER(unsigned arr /*inout*/, unsigned ars, unsigned art, immediate oper, immediate noshift); +extern unsigned _TIE_xt_DFP_assist_F64RND(unsigned ars, unsigned art, immediate mode); +extern void _TIE_xt_DFP_assist_F64ADDC(unsigned art /*inout*/, unsigned ars, immediate immZ, immediate immC); +extern void _TIE_xt_DFP_assist_F64SUBC(unsigned art /*inout*/, unsigned ars, immediate immZ, immediate immC); +extern unsigned _TIE_xt_DFP_assist_F64SIG(unsigned ars); +extern unsigned _TIE_xt_DFP_assist_F64CMPL(unsigned ars, unsigned art); +extern unsigned _TIE_xt_DFP_assist_F64CMPH(unsigned ars, unsigned art, immediate oper); +extern unsigned _TIE_xt_DFP_assist_F64NORM(unsigned ars, unsigned art, immediate mode); +extern unsigned _TIE_xt_DFP_assist_F64SEXP(unsigned ars, unsigned art); +extern unsigned _TIE_xt_DFP_assist_RF64R(immediate hilo); +extern void _TIE_xt_DFP_assist_WF64R(unsigned ars, unsigned art, immediate hilo); +extern unsigned _TIE_xt_DFP_assist_RUR_F64R_LO(void); +extern unsigned _TIE_xt_DFP_assist_RUR_F64R_HI(void); +extern void _TIE_xt_DFP_assist_WUR_F64R_LO(unsigned art); +extern void _TIE_xt_DFP_assist_WUR_F64R_HI(unsigned art); +extern unsigned _TIE_xt_DFP_assist_RUR_F64S(void); +extern void _TIE_xt_DFP_assist_WUR_F64S(unsigned art); +#define F64ITER _TIE_xt_DFP_assist_F64ITER +#define F64RND _TIE_xt_DFP_assist_F64RND +#define F64ADDC _TIE_xt_DFP_assist_F64ADDC +#define F64SUBC _TIE_xt_DFP_assist_F64SUBC +#define F64SIG _TIE_xt_DFP_assist_F64SIG +#define F64CMPL _TIE_xt_DFP_assist_F64CMPL +#define F64CMPH _TIE_xt_DFP_assist_F64CMPH +#define F64NORM _TIE_xt_DFP_assist_F64NORM +#define F64SEXP _TIE_xt_DFP_assist_F64SEXP +#define RF64R _TIE_xt_DFP_assist_RF64R +#define WF64R _TIE_xt_DFP_assist_WF64R +#define RUR_F64R_LO _TIE_xt_DFP_assist_RUR_F64R_LO +#define RF64R_LO _TIE_xt_DFP_assist_RUR_F64R_LO +#define RUR234 _TIE_xt_DFP_assist_RUR_F64R_LO +#define RUR_F64R_HI _TIE_xt_DFP_assist_RUR_F64R_HI +#define RF64R_HI _TIE_xt_DFP_assist_RUR_F64R_HI +#define RUR235 _TIE_xt_DFP_assist_RUR_F64R_HI +#define WUR_F64R_LO _TIE_xt_DFP_assist_WUR_F64R_LO +#define WF64R_LO _TIE_xt_DFP_assist_WUR_F64R_LO +#define WUR234 _TIE_xt_DFP_assist_WUR_F64R_LO +#define WUR_F64R_HI _TIE_xt_DFP_assist_WUR_F64R_HI +#define WF64R_HI _TIE_xt_DFP_assist_WUR_F64R_HI +#define WUR235 _TIE_xt_DFP_assist_WUR_F64R_HI +#define RUR_F64S _TIE_xt_DFP_assist_RUR_F64S +#define RF64S _TIE_xt_DFP_assist_RUR_F64S +#define RUR236 _TIE_xt_DFP_assist_RUR_F64S +#define WUR_F64S _TIE_xt_DFP_assist_WUR_F64S +#define WF64S _TIE_xt_DFP_assist_WUR_F64S +#define WUR236 _TIE_xt_DFP_assist_WUR_F64S + +#ifndef RUR +#define RUR(NUM) RUR##NUM() +#endif + +#ifndef WUR +#define WUR(VAL, NUM) WUR##NUM(VAL) +#endif + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_DFP_assist_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_FP.h b/tools/sdk/include/esp32/xtensa/tie/xt_FP.h new file mode 100644 index 00000000..229a108a --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_FP.h @@ -0,0 +1,197 @@ +/* Definitions for the xt_FP TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_FP_HEADER +#define _XTENSA_xt_FP_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include +#include +typedef float _TIE_xt_FP_xtfloat; +typedef _TIE_xt_FP_xtfloat xtfloat; + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern unsigned _TIE_xt_FP_RUR_FCR(void); +extern void _TIE_xt_FP_WUR_FCR(unsigned v); +extern unsigned _TIE_xt_FP_RUR_FSR(void); +extern void _TIE_xt_FP_WUR_FSR(unsigned v); +extern xtfloat _TIE_xt_FP_xtfloat_loadi(const xtfloat * p, immediate imm8x4); +extern void _TIE_xt_FP_xtfloat_storei(xtfloat t, xtfloat * p, immediate imm8x4); +extern void _TIE_xt_FP_xtfloat_loadip(xtfloat t /*out*/, const xtfloat * p /*inout*/, immediate imm8x4); +extern void _TIE_xt_FP_xtfloat_storeip(xtfloat t, xtfloat * p /*inout*/, immediate imm8x4); +extern xtfloat _TIE_xt_FP_xtfloat_loadx(const xtfloat * p, int imm8x4); +extern void _TIE_xt_FP_xtfloat_storex(xtfloat t, xtfloat * p, int imm8x4); +extern void _TIE_xt_FP_xtfloat_loadxp(xtfloat t /*out*/, const xtfloat * p /*inout*/, int imm8x4); +extern void _TIE_xt_FP_xtfloat_storexp(xtfloat t, xtfloat * p /*inout*/, int imm8x4); +extern xtfloat _TIE_xt_FP_xtfloat_move(xtfloat r); +extern int _TIE_xt_FP_ROUND_S(xtfloat s, immediate t); +extern int _TIE_xt_FP_TRUNC_S(xtfloat s, immediate t); +extern unsigned _TIE_xt_FP_UTRUNC_S(xtfloat s, immediate t); +extern int _TIE_xt_FP_FLOOR_S(xtfloat s, immediate t); +extern int _TIE_xt_FP_CEIL_S(xtfloat s, immediate t); +extern xtfloat _TIE_xt_FP_LSI(const xtfloat * p, immediate imm8x4); +extern void _TIE_xt_FP_SSI(xtfloat t, xtfloat * p, immediate imm8x4); +extern void _TIE_xt_FP_LSIP(xtfloat t /*out*/, const xtfloat * p /*inout*/, immediate imm8x4); +extern void _TIE_xt_FP_SSIP(xtfloat t, xtfloat * p /*inout*/, immediate imm8x4); +extern xtfloat _TIE_xt_FP_LSX(const xtfloat * p, int imm8x4); +extern void _TIE_xt_FP_SSX(xtfloat t, xtfloat * p, int imm8x4); +extern void _TIE_xt_FP_LSXP(xtfloat t /*out*/, const xtfloat * p /*inout*/, int imm8x4); +extern void _TIE_xt_FP_SSXP(xtfloat t, xtfloat * p /*inout*/, int imm8x4); +extern xtfloat _TIE_xt_FP_ABS_S(xtfloat s); +extern xtfloat _TIE_xt_FP_NEG_S(xtfloat s); +extern xtfloat _TIE_xt_FP_MOV_S(xtfloat s); +extern void _TIE_xt_FP_MOVEQZ_S(xtfloat r /*inout*/, xtfloat s, int t); +extern void _TIE_xt_FP_MOVNEZ_S(xtfloat r /*inout*/, xtfloat s, int t); +extern void _TIE_xt_FP_MOVLTZ_S(xtfloat r /*inout*/, xtfloat s, int t); +extern void _TIE_xt_FP_MOVGEZ_S(xtfloat r /*inout*/, xtfloat s, int t); +extern void _TIE_xt_FP_MOVF_S(xtfloat r /*inout*/, xtfloat s, xtbool t); +extern void _TIE_xt_FP_MOVT_S(xtfloat r /*inout*/, xtfloat s, xtbool t); +extern unsigned _TIE_xt_FP_RFR(xtfloat s); +extern xtfloat _TIE_xt_FP_WFR(unsigned s); +extern xtfloat _TIE_xt_FP_FLOAT_S(int s, immediate t); +extern xtfloat _TIE_xt_FP_UFLOAT_S(unsigned s, immediate t); +extern xtbool _TIE_xt_FP_OEQ_S(xtfloat s, xtfloat t); +extern xtbool _TIE_xt_FP_OLE_S(xtfloat s, xtfloat t); +extern xtbool _TIE_xt_FP_OLT_S(xtfloat s, xtfloat t); +extern xtbool _TIE_xt_FP_UEQ_S(xtfloat s, xtfloat t); +extern xtbool _TIE_xt_FP_ULE_S(xtfloat s, xtfloat t); +extern xtbool _TIE_xt_FP_ULT_S(xtfloat s, xtfloat t); +extern xtbool _TIE_xt_FP_UN_S(xtfloat s, xtfloat t); +extern xtfloat _TIE_xt_FP_ADD_S(xtfloat s, xtfloat t); +extern xtfloat _TIE_xt_FP_SUB_S(xtfloat s, xtfloat t); +extern xtfloat _TIE_xt_FP_MUL_S(xtfloat s, xtfloat t); +extern void _TIE_xt_FP_MADD_S(xtfloat r /*inout*/, xtfloat s, xtfloat t); +extern void _TIE_xt_FP_MSUB_S(xtfloat r /*inout*/, xtfloat s, xtfloat t); +extern xtfloat _TIE_xt_FP_RECIP0_S(xtfloat s); +extern xtfloat _TIE_xt_FP_DIV0_S(xtfloat s); +extern xtfloat _TIE_xt_FP_NEXP01_S(xtfloat s); +extern xtfloat _TIE_xt_FP_CONST_S(immediate s); +extern void _TIE_xt_FP_MKDADJ_S(xtfloat r /*inout*/, xtfloat s); +extern xtfloat _TIE_xt_FP_MKSADJ_S(xtfloat s); +extern void _TIE_xt_FP_ADDEXPM_S(xtfloat r /*inout*/, xtfloat s); +extern void _TIE_xt_FP_ADDEXP_S(xtfloat r /*inout*/, xtfloat s); +extern void _TIE_xt_FP_DIVN_S(xtfloat r /*inout*/, xtfloat s, xtfloat t); +extern xtfloat _TIE_xt_FP_RSQRT0_S(xtfloat s); +extern xtfloat _TIE_xt_FP_SQRT0_S(xtfloat s); +extern void _TIE_xt_FP_MADDN_S(xtfloat r /*inout*/, xtfloat s, xtfloat t); +extern xtfloat _TIE_xt_FP_DIV_S(xtfloat s, xtfloat t); +extern xtfloat _TIE_xt_FP_SQRT_S(xtfloat s); +extern xtfloat _TIE_xt_FP_RECIP_S(xtfloat s); +extern xtfloat _TIE_xt_FP_RSQRT_S(xtfloat s); +extern xtfloat _TIE_xt_FP_FSQRT_S(xtfloat s); +#define XT_RUR_FCR _TIE_xt_FP_RUR_FCR +#define RFCR _TIE_xt_FP_RUR_FCR +#define RUR232 _TIE_xt_FP_RUR_FCR +#define XT_WUR_FCR _TIE_xt_FP_WUR_FCR +#define WFCR _TIE_xt_FP_WUR_FCR +#define WUR232 _TIE_xt_FP_WUR_FCR +#define XT_RUR_FSR _TIE_xt_FP_RUR_FSR +#define RFSR _TIE_xt_FP_RUR_FSR +#define RUR233 _TIE_xt_FP_RUR_FSR +#define XT_WUR_FSR _TIE_xt_FP_WUR_FSR +#define WFSR _TIE_xt_FP_WUR_FSR +#define WUR233 _TIE_xt_FP_WUR_FSR +#define XT_xtfloat_loadi _TIE_xt_FP_xtfloat_loadi +#define XT_xtfloat_storei _TIE_xt_FP_xtfloat_storei +#define XT_xtfloat_loadip _TIE_xt_FP_xtfloat_loadip +#define XT_xtfloat_storeip _TIE_xt_FP_xtfloat_storeip +#define XT_xtfloat_loadx _TIE_xt_FP_xtfloat_loadx +#define XT_xtfloat_storex _TIE_xt_FP_xtfloat_storex +#define XT_xtfloat_loadxp _TIE_xt_FP_xtfloat_loadxp +#define XT_xtfloat_storexp _TIE_xt_FP_xtfloat_storexp +#define XT_xtfloat_move _TIE_xt_FP_xtfloat_move +#define XT_ROUND_S _TIE_xt_FP_ROUND_S +#define XT_TRUNC_S _TIE_xt_FP_TRUNC_S +#define XT_UTRUNC_S _TIE_xt_FP_UTRUNC_S +#define XT_FLOOR_S _TIE_xt_FP_FLOOR_S +#define XT_CEIL_S _TIE_xt_FP_CEIL_S +#define XT_LSI _TIE_xt_FP_LSI +#define XT_SSI _TIE_xt_FP_SSI +#define XT_LSIP _TIE_xt_FP_LSIP +#define XT_SSIP _TIE_xt_FP_SSIP +#define XT_LSX _TIE_xt_FP_LSX +#define XT_SSX _TIE_xt_FP_SSX +#define XT_LSXP _TIE_xt_FP_LSXP +#define XT_SSXP _TIE_xt_FP_SSXP +#define XT_ABS_S _TIE_xt_FP_ABS_S +#define XT_NEG_S _TIE_xt_FP_NEG_S +#define XT_MOV_S _TIE_xt_FP_MOV_S +#define XT_MOVEQZ_S _TIE_xt_FP_MOVEQZ_S +#define XT_MOVNEZ_S _TIE_xt_FP_MOVNEZ_S +#define XT_MOVLTZ_S _TIE_xt_FP_MOVLTZ_S +#define XT_MOVGEZ_S _TIE_xt_FP_MOVGEZ_S +#define XT_MOVF_S _TIE_xt_FP_MOVF_S +#define XT_MOVT_S _TIE_xt_FP_MOVT_S +#define XT_RFR _TIE_xt_FP_RFR +#define XT_WFR _TIE_xt_FP_WFR +#define XT_FLOAT_S _TIE_xt_FP_FLOAT_S +#define XT_UFLOAT_S _TIE_xt_FP_UFLOAT_S +#define XT_OEQ_S _TIE_xt_FP_OEQ_S +#define XT_OLE_S _TIE_xt_FP_OLE_S +#define XT_OLT_S _TIE_xt_FP_OLT_S +#define XT_UEQ_S _TIE_xt_FP_UEQ_S +#define XT_ULE_S _TIE_xt_FP_ULE_S +#define XT_ULT_S _TIE_xt_FP_ULT_S +#define XT_UN_S _TIE_xt_FP_UN_S +#define XT_ADD_S _TIE_xt_FP_ADD_S +#define XT_SUB_S _TIE_xt_FP_SUB_S +#define XT_MUL_S _TIE_xt_FP_MUL_S +#define XT_MADD_S _TIE_xt_FP_MADD_S +#define XT_MSUB_S _TIE_xt_FP_MSUB_S +#define XT_RECIP0_S _TIE_xt_FP_RECIP0_S +#define XT_DIV0_S _TIE_xt_FP_DIV0_S +#define XT_NEXP01_S _TIE_xt_FP_NEXP01_S +#define XT_CONST_S _TIE_xt_FP_CONST_S +#define XT_MKDADJ_S _TIE_xt_FP_MKDADJ_S +#define XT_MKSADJ_S _TIE_xt_FP_MKSADJ_S +#define XT_ADDEXPM_S _TIE_xt_FP_ADDEXPM_S +#define XT_ADDEXP_S _TIE_xt_FP_ADDEXP_S +#define XT_DIVN_S _TIE_xt_FP_DIVN_S +#define XT_RSQRT0_S _TIE_xt_FP_RSQRT0_S +#define XT_SQRT0_S _TIE_xt_FP_SQRT0_S +#define XT_MADDN_S _TIE_xt_FP_MADDN_S +#define XT_DIV_S _TIE_xt_FP_DIV_S +#define XT_SQRT_S _TIE_xt_FP_SQRT_S +#define XT_RECIP_S _TIE_xt_FP_RECIP_S +#define XT_RSQRT_S _TIE_xt_FP_RSQRT_S +#define XT_FSQRT_S _TIE_xt_FP_FSQRT_S + +#ifndef RUR +#define RUR(NUM) RUR##NUM() +#endif + +#ifndef WUR +#define WUR(VAL, NUM) WUR##NUM(VAL) +#endif + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_FP_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_MAC16.h b/tools/sdk/include/esp32/xtensa/tie/xt_MAC16.h new file mode 100644 index 00000000..b46a1db7 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_MAC16.h @@ -0,0 +1,239 @@ +/* Definitions for the xt_MAC16 TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_MAC16_HEADER +#define _XTENSA_xt_MAC16_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern void _TIE_xt_MAC16_UMUL_AA_HH(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_UMUL_AA_LH(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_UMUL_AA_HL(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_UMUL_AA_LL(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MUL_AA_HH(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MUL_AA_LH(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MUL_AA_HL(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MUL_AA_LL(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MUL_AD_HH(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MUL_AD_LH(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MUL_AD_HL(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MUL_AD_LL(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MUL_DA_HH(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MUL_DA_LH(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MUL_DA_HL(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MUL_DA_LL(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MUL_DD_HH(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MUL_DD_LH(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MUL_DD_HL(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MUL_DD_LL(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MULS_AA_HH(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MULS_AA_LH(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MULS_AA_HL(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MULS_AA_LL(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MULA_AA_HH(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MULA_AA_LH(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MULA_AA_HL(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MULA_AA_LL(unsigned ars, unsigned art); +extern void _TIE_xt_MAC16_MULS_AD_HH(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MULS_AD_LH(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MULS_AD_HL(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MULS_AD_LL(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MULA_AD_HH(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MULA_AD_LH(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MULA_AD_HL(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MULA_AD_LL(unsigned ars, immediate my); +extern void _TIE_xt_MAC16_MULS_DA_HH(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MULS_DA_LH(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MULS_DA_HL(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MULS_DA_LL(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MULA_DA_HH(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MULA_DA_LH(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MULA_DA_HL(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MULA_DA_LL(immediate mx, unsigned art); +extern void _TIE_xt_MAC16_MULS_DD_HH(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MULS_DD_LH(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MULS_DD_HL(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MULS_DD_LL(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MULA_DD_HH(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MULA_DD_LH(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MULA_DD_HL(immediate mx, immediate my); +extern void _TIE_xt_MAC16_MULA_DD_LL(immediate mx, immediate my); +extern unsigned _TIE_xt_MAC16_RSR_M0(void); +extern void _TIE_xt_MAC16_WSR_M0(unsigned art); +extern void _TIE_xt_MAC16_XSR_M0(unsigned art /*inout*/); +extern unsigned _TIE_xt_MAC16_RSR_M1(void); +extern void _TIE_xt_MAC16_WSR_M1(unsigned art); +extern void _TIE_xt_MAC16_XSR_M1(unsigned art /*inout*/); +extern unsigned _TIE_xt_MAC16_RSR_M2(void); +extern void _TIE_xt_MAC16_WSR_M2(unsigned art); +extern void _TIE_xt_MAC16_XSR_M2(unsigned art /*inout*/); +extern unsigned _TIE_xt_MAC16_RSR_M3(void); +extern void _TIE_xt_MAC16_WSR_M3(unsigned art); +extern void _TIE_xt_MAC16_XSR_M3(unsigned art /*inout*/); +extern unsigned _TIE_xt_MAC16_RSR_ACCLO(void); +extern void _TIE_xt_MAC16_WSR_ACCLO(unsigned art); +extern void _TIE_xt_MAC16_XSR_ACCLO(unsigned art /*inout*/); +extern unsigned _TIE_xt_MAC16_RSR_ACCHI(void); +extern void _TIE_xt_MAC16_WSR_ACCHI(unsigned art); +extern void _TIE_xt_MAC16_XSR_ACCHI(unsigned art /*inout*/); +extern void _TIE_xt_MAC16_MULA_DA_LL_LDDEC(immediate w, const short * s /*inout*/, immediate x, int t); +extern void _TIE_xt_MAC16_MULA_DA_LL_LDINC(immediate w, const short * s /*inout*/, immediate x, int t); +extern void _TIE_xt_MAC16_MULA_DA_HL_LDDEC(immediate w, const short * s /*inout*/, immediate x, int t); +extern void _TIE_xt_MAC16_MULA_DA_HL_LDINC(immediate w, const short * s /*inout*/, immediate x, int t); +extern void _TIE_xt_MAC16_MULA_DA_LH_LDDEC(immediate w, const short * s /*inout*/, immediate x, int t); +extern void _TIE_xt_MAC16_MULA_DA_LH_LDINC(immediate w, const short * s /*inout*/, immediate x, int t); +extern void _TIE_xt_MAC16_MULA_DA_HH_LDDEC(immediate w, const short * s /*inout*/, immediate x, int t); +extern void _TIE_xt_MAC16_MULA_DA_HH_LDINC(immediate w, const short * s /*inout*/, immediate x, int t); +extern void _TIE_xt_MAC16_MULA_DD_LL_LDDEC(immediate w, const short * s /*inout*/, immediate x, immediate y); +extern void _TIE_xt_MAC16_MULA_DD_LL_LDINC(immediate w, const short * s /*inout*/, immediate x, immediate y); +extern void _TIE_xt_MAC16_MULA_DD_HL_LDDEC(immediate w, const short * s /*inout*/, immediate x, immediate y); +extern void _TIE_xt_MAC16_MULA_DD_HL_LDINC(immediate w, const short * s /*inout*/, immediate x, immediate y); +extern void _TIE_xt_MAC16_MULA_DD_LH_LDDEC(immediate w, const short * s /*inout*/, immediate x, immediate y); +extern void _TIE_xt_MAC16_MULA_DD_LH_LDINC(immediate w, const short * s /*inout*/, immediate x, immediate y); +extern void _TIE_xt_MAC16_MULA_DD_HH_LDDEC(immediate w, const short * s /*inout*/, immediate x, immediate y); +extern void _TIE_xt_MAC16_MULA_DD_HH_LDINC(immediate w, const short * s /*inout*/, immediate x, immediate y); +extern void _TIE_xt_MAC16_LDDEC(immediate w, const short * p /*inout*/); +extern void _TIE_xt_MAC16_ULDDEC(immediate w, const unsigned short * p /*inout*/); +extern void _TIE_xt_MAC16_SLDDEC(immediate w, const short * p /*inout*/); +extern void _TIE_xt_MAC16_LDINC(immediate w, const short * p /*inout*/); +extern void _TIE_xt_MAC16_ULDINC(immediate w, const unsigned short * p /*inout*/); +extern void _TIE_xt_MAC16_SLDINC(immediate w, const short * p /*inout*/); +extern int _TIE_xt_MAC16_RSR16(void); +extern void _TIE_xt_MAC16_WSR16(int t); +extern void _TIE_xt_MAC16_XSR16(int t /*inout*/); +extern int _TIE_xt_MAC16_RSR17(void); +extern void _TIE_xt_MAC16_WSR17(int t); +extern void _TIE_xt_MAC16_XSR17(int t /*inout*/); +#define XT_UMUL_AA_HH _TIE_xt_MAC16_UMUL_AA_HH +#define XT_UMUL_AA_LH _TIE_xt_MAC16_UMUL_AA_LH +#define XT_UMUL_AA_HL _TIE_xt_MAC16_UMUL_AA_HL +#define XT_UMUL_AA_LL _TIE_xt_MAC16_UMUL_AA_LL +#define XT_MUL_AA_HH _TIE_xt_MAC16_MUL_AA_HH +#define XT_MUL_AA_LH _TIE_xt_MAC16_MUL_AA_LH +#define XT_MUL_AA_HL _TIE_xt_MAC16_MUL_AA_HL +#define XT_MUL_AA_LL _TIE_xt_MAC16_MUL_AA_LL +#define XT_MUL_AD_HH _TIE_xt_MAC16_MUL_AD_HH +#define XT_MUL_AD_LH _TIE_xt_MAC16_MUL_AD_LH +#define XT_MUL_AD_HL _TIE_xt_MAC16_MUL_AD_HL +#define XT_MUL_AD_LL _TIE_xt_MAC16_MUL_AD_LL +#define XT_MUL_DA_HH _TIE_xt_MAC16_MUL_DA_HH +#define XT_MUL_DA_LH _TIE_xt_MAC16_MUL_DA_LH +#define XT_MUL_DA_HL _TIE_xt_MAC16_MUL_DA_HL +#define XT_MUL_DA_LL _TIE_xt_MAC16_MUL_DA_LL +#define XT_MUL_DD_HH _TIE_xt_MAC16_MUL_DD_HH +#define XT_MUL_DD_LH _TIE_xt_MAC16_MUL_DD_LH +#define XT_MUL_DD_HL _TIE_xt_MAC16_MUL_DD_HL +#define XT_MUL_DD_LL _TIE_xt_MAC16_MUL_DD_LL +#define XT_MULS_AA_HH _TIE_xt_MAC16_MULS_AA_HH +#define XT_MULS_AA_LH _TIE_xt_MAC16_MULS_AA_LH +#define XT_MULS_AA_HL _TIE_xt_MAC16_MULS_AA_HL +#define XT_MULS_AA_LL _TIE_xt_MAC16_MULS_AA_LL +#define XT_MULA_AA_HH _TIE_xt_MAC16_MULA_AA_HH +#define XT_MULA_AA_LH _TIE_xt_MAC16_MULA_AA_LH +#define XT_MULA_AA_HL _TIE_xt_MAC16_MULA_AA_HL +#define XT_MULA_AA_LL _TIE_xt_MAC16_MULA_AA_LL +#define XT_MULS_AD_HH _TIE_xt_MAC16_MULS_AD_HH +#define XT_MULS_AD_LH _TIE_xt_MAC16_MULS_AD_LH +#define XT_MULS_AD_HL _TIE_xt_MAC16_MULS_AD_HL +#define XT_MULS_AD_LL _TIE_xt_MAC16_MULS_AD_LL +#define XT_MULA_AD_HH _TIE_xt_MAC16_MULA_AD_HH +#define XT_MULA_AD_LH _TIE_xt_MAC16_MULA_AD_LH +#define XT_MULA_AD_HL _TIE_xt_MAC16_MULA_AD_HL +#define XT_MULA_AD_LL _TIE_xt_MAC16_MULA_AD_LL +#define XT_MULS_DA_HH _TIE_xt_MAC16_MULS_DA_HH +#define XT_MULS_DA_LH _TIE_xt_MAC16_MULS_DA_LH +#define XT_MULS_DA_HL _TIE_xt_MAC16_MULS_DA_HL +#define XT_MULS_DA_LL _TIE_xt_MAC16_MULS_DA_LL +#define XT_MULA_DA_HH _TIE_xt_MAC16_MULA_DA_HH +#define XT_MULA_DA_LH _TIE_xt_MAC16_MULA_DA_LH +#define XT_MULA_DA_HL _TIE_xt_MAC16_MULA_DA_HL +#define XT_MULA_DA_LL _TIE_xt_MAC16_MULA_DA_LL +#define XT_MULS_DD_HH _TIE_xt_MAC16_MULS_DD_HH +#define XT_MULS_DD_LH _TIE_xt_MAC16_MULS_DD_LH +#define XT_MULS_DD_HL _TIE_xt_MAC16_MULS_DD_HL +#define XT_MULS_DD_LL _TIE_xt_MAC16_MULS_DD_LL +#define XT_MULA_DD_HH _TIE_xt_MAC16_MULA_DD_HH +#define XT_MULA_DD_LH _TIE_xt_MAC16_MULA_DD_LH +#define XT_MULA_DD_HL _TIE_xt_MAC16_MULA_DD_HL +#define XT_MULA_DD_LL _TIE_xt_MAC16_MULA_DD_LL +#define XT_RSR_M0 _TIE_xt_MAC16_RSR_M0 +#define XT_WSR_M0 _TIE_xt_MAC16_WSR_M0 +#define XT_XSR_M0 _TIE_xt_MAC16_XSR_M0 +#define XT_RSR_M1 _TIE_xt_MAC16_RSR_M1 +#define XT_WSR_M1 _TIE_xt_MAC16_WSR_M1 +#define XT_XSR_M1 _TIE_xt_MAC16_XSR_M1 +#define XT_RSR_M2 _TIE_xt_MAC16_RSR_M2 +#define XT_WSR_M2 _TIE_xt_MAC16_WSR_M2 +#define XT_XSR_M2 _TIE_xt_MAC16_XSR_M2 +#define XT_RSR_M3 _TIE_xt_MAC16_RSR_M3 +#define XT_WSR_M3 _TIE_xt_MAC16_WSR_M3 +#define XT_XSR_M3 _TIE_xt_MAC16_XSR_M3 +#define XT_RSR_ACCLO _TIE_xt_MAC16_RSR_ACCLO +#define XT_WSR_ACCLO _TIE_xt_MAC16_WSR_ACCLO +#define XT_XSR_ACCLO _TIE_xt_MAC16_XSR_ACCLO +#define XT_RSR_ACCHI _TIE_xt_MAC16_RSR_ACCHI +#define XT_WSR_ACCHI _TIE_xt_MAC16_WSR_ACCHI +#define XT_XSR_ACCHI _TIE_xt_MAC16_XSR_ACCHI +#define XT_MULA_DA_LL_LDDEC _TIE_xt_MAC16_MULA_DA_LL_LDDEC +#define XT_MULA_DA_LL_LDINC _TIE_xt_MAC16_MULA_DA_LL_LDINC +#define XT_MULA_DA_HL_LDDEC _TIE_xt_MAC16_MULA_DA_HL_LDDEC +#define XT_MULA_DA_HL_LDINC _TIE_xt_MAC16_MULA_DA_HL_LDINC +#define XT_MULA_DA_LH_LDDEC _TIE_xt_MAC16_MULA_DA_LH_LDDEC +#define XT_MULA_DA_LH_LDINC _TIE_xt_MAC16_MULA_DA_LH_LDINC +#define XT_MULA_DA_HH_LDDEC _TIE_xt_MAC16_MULA_DA_HH_LDDEC +#define XT_MULA_DA_HH_LDINC _TIE_xt_MAC16_MULA_DA_HH_LDINC +#define XT_MULA_DD_LL_LDDEC _TIE_xt_MAC16_MULA_DD_LL_LDDEC +#define XT_MULA_DD_LL_LDINC _TIE_xt_MAC16_MULA_DD_LL_LDINC +#define XT_MULA_DD_HL_LDDEC _TIE_xt_MAC16_MULA_DD_HL_LDDEC +#define XT_MULA_DD_HL_LDINC _TIE_xt_MAC16_MULA_DD_HL_LDINC +#define XT_MULA_DD_LH_LDDEC _TIE_xt_MAC16_MULA_DD_LH_LDDEC +#define XT_MULA_DD_LH_LDINC _TIE_xt_MAC16_MULA_DD_LH_LDINC +#define XT_MULA_DD_HH_LDDEC _TIE_xt_MAC16_MULA_DD_HH_LDDEC +#define XT_MULA_DD_HH_LDINC _TIE_xt_MAC16_MULA_DD_HH_LDINC +#define XT_LDDEC _TIE_xt_MAC16_LDDEC +#define XT_ULDDEC _TIE_xt_MAC16_ULDDEC +#define XT_SLDDEC _TIE_xt_MAC16_SLDDEC +#define XT_LDINC _TIE_xt_MAC16_LDINC +#define XT_ULDINC _TIE_xt_MAC16_ULDINC +#define XT_SLDINC _TIE_xt_MAC16_SLDINC +#define XT_RSR16 _TIE_xt_MAC16_RSR16 +#define XT_WSR16 _TIE_xt_MAC16_WSR16 +#define XT_XSR16 _TIE_xt_MAC16_XSR16 +#define XT_RSR17 _TIE_xt_MAC16_RSR17 +#define XT_WSR17 _TIE_xt_MAC16_WSR17 +#define XT_XSR17 _TIE_xt_MAC16_XSR17 + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_MAC16_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_MUL32.h b/tools/sdk/include/esp32/xtensa/tie/xt_MUL32.h new file mode 100644 index 00000000..91b3c329 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_MUL32.h @@ -0,0 +1,24 @@ +/* Definitions for the 32-bit Integer Multiply Option. */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2009 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* NOTE: This file exists only for backward compatibility with RB-200X.x + and earlier Xtensa releases. Starting with RC-2009.0 you should use + . */ + +#ifndef _XTENSA_xt_MUL32_HEADER +#define _XTENSA_xt_MUL32_HEADER + +#ifdef __XTENSA__ + +#include + +#endif /* __XTENSA__ */ +#endif /* !_XTENSA_xt_MUL32_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_booleans.h b/tools/sdk/include/esp32/xtensa/tie/xt_booleans.h new file mode 100644 index 00000000..94b5b468 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_booleans.h @@ -0,0 +1,69 @@ +/* Definitions for the xt_booleans TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_booleans_HEADER +#define _XTENSA_xt_booleans_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include +typedef _TIE_xtbool xtbool; +typedef _TIE_xtbool2 xtbool2; +typedef _TIE_xtbool4 xtbool4; +typedef _TIE_xtbool8 xtbool8; +typedef _TIE_xtbool16 xtbool16; + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern xtbool _TIE_xt_booleans_XORB(xtbool bs, xtbool bt); +extern xtbool _TIE_xt_booleans_ORBC(xtbool bs, xtbool bt); +extern xtbool _TIE_xt_booleans_ORB(xtbool bs, xtbool bt); +extern xtbool _TIE_xt_booleans_ANDBC(xtbool bs, xtbool bt); +extern xtbool _TIE_xt_booleans_ANDB(xtbool bs, xtbool bt); +extern xtbool _TIE_xt_booleans_ALL4(xtbool4 bs4); +extern xtbool _TIE_xt_booleans_ANY4(xtbool4 bs4); +extern xtbool _TIE_xt_booleans_ALL8(xtbool8 bs8); +extern xtbool _TIE_xt_booleans_ANY8(xtbool8 bs8); +extern void _TIE_xt_booleans_MOVT(unsigned arr /*inout*/, unsigned ars, xtbool bt); +extern void _TIE_xt_booleans_MOVF(unsigned arr /*inout*/, unsigned ars, xtbool bt); +#define XT_XORB _TIE_xt_booleans_XORB +#define XT_ORBC _TIE_xt_booleans_ORBC +#define XT_ORB _TIE_xt_booleans_ORB +#define XT_ANDBC _TIE_xt_booleans_ANDBC +#define XT_ANDB _TIE_xt_booleans_ANDB +#define XT_ALL4 _TIE_xt_booleans_ALL4 +#define XT_ANY4 _TIE_xt_booleans_ANY4 +#define XT_ALL8 _TIE_xt_booleans_ALL8 +#define XT_ANY8 _TIE_xt_booleans_ANY8 +#define XT_MOVT _TIE_xt_booleans_MOVT +#define XT_MOVF _TIE_xt_booleans_MOVF + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_booleans_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_coprocessors.h b/tools/sdk/include/esp32/xtensa/tie/xt_coprocessors.h new file mode 100644 index 00000000..27215cf1 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_coprocessors.h @@ -0,0 +1,48 @@ +/* Definitions for the xt_coprocessors TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_coprocessors_HEADER +#define _XTENSA_xt_coprocessors_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern unsigned _TIE_xt_coprocessors_RSR_CPENABLE(void); +extern void _TIE_xt_coprocessors_WSR_CPENABLE(unsigned art); +extern void _TIE_xt_coprocessors_XSR_CPENABLE(unsigned art /*inout*/); +#define XT_RSR_CPENABLE _TIE_xt_coprocessors_RSR_CPENABLE +#define XT_WSR_CPENABLE _TIE_xt_coprocessors_WSR_CPENABLE +#define XT_XSR_CPENABLE _TIE_xt_coprocessors_XSR_CPENABLE + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_coprocessors_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_core.h b/tools/sdk/include/esp32/xtensa/tie/xt_core.h new file mode 100644 index 00000000..469b199e --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_core.h @@ -0,0 +1,395 @@ +/* Definitions for the xt_core TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_core_HEADER +#define _XTENSA_xt_core_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern void _TIE_xt_core_ILL(void); +extern void _TIE_xt_core_NOP(void); +extern void _TIE_xt_core_SIMCALL(void); +extern void _TIE_xt_core_MEMW(void); +extern void _TIE_xt_core_EXTW(void); +extern void _TIE_xt_core_ISYNC(void); +extern void _TIE_xt_core_DSYNC(void); +extern void _TIE_xt_core_ESYNC(void); +extern void _TIE_xt_core_RSYNC(void); +extern unsigned _TIE_xt_core_RSR_LBEG(void); +extern void _TIE_xt_core_WSR_LBEG(unsigned art); +extern void _TIE_xt_core_XSR_LBEG(unsigned art /*inout*/); +extern unsigned _TIE_xt_core_RSR_CONFIGID0(void); +extern void _TIE_xt_core_WSR_CONFIGID0(unsigned art); +extern unsigned _TIE_xt_core_RSR_CONFIGID1(void); +extern unsigned _TIE_xt_core_RUR_THREADPTR(void); +extern void _TIE_xt_core_WUR_THREADPTR(unsigned v); +extern unsigned _TIE_xt_core_uint32_loadi(const unsigned * p, immediate o); +extern void _TIE_xt_core_uint32_storei(unsigned c, unsigned * p, immediate o); +extern unsigned _TIE_xt_core_uint32_move(unsigned b); +extern int _TIE_xt_core_ADDI(int s, immediate i); +extern int _TIE_xt_core_OR(int s, int t); +extern int _TIE_xt_core_L32I(const int * p, immediate i); +extern void _TIE_xt_core_S32I(int r, int * p, immediate i); +extern void _TIE_xt_core_S32NB(int r, int * p, immediate i); +extern unsigned char _TIE_xt_core_L8UI(const unsigned char * p, immediate i); +extern void _TIE_xt_core_S8I(signed char r, signed char * p, immediate i); +extern unsigned short _TIE_xt_core_L16UI(const unsigned short * p, immediate i); +extern short _TIE_xt_core_L16SI(const short * p, immediate i); +extern void _TIE_xt_core_S16I(short r, short * p, immediate i); +extern int _TIE_xt_core_ADDMI(int s, immediate i); +extern int _TIE_xt_core_ADD(int s, int t); +extern int _TIE_xt_core_ADDX2(int s, int t); +extern int _TIE_xt_core_ADDX4(int s, int t); +extern int _TIE_xt_core_ADDX8(int s, int t); +extern int _TIE_xt_core_SUB(int s, int t); +extern int _TIE_xt_core_SUBX2(int s, int t); +extern int _TIE_xt_core_SUBX4(int s, int t); +extern int _TIE_xt_core_SUBX8(int s, int t); +extern int _TIE_xt_core_AND(int s, int t); +extern int _TIE_xt_core_XOR(int s, int t); +extern unsigned _TIE_xt_core_EXTUI(unsigned t, immediate i, immediate o); +extern int _TIE_xt_core_MOVI(immediate i); +extern void _TIE_xt_core_MOVEQZ(int r /*inout*/, int s, int t); +extern void _TIE_xt_core_MOVNEZ(int r /*inout*/, int s, int t); +extern void _TIE_xt_core_MOVLTZ(int r /*inout*/, int s, int t); +extern void _TIE_xt_core_MOVGEZ(int r /*inout*/, int s, int t); +extern int _TIE_xt_core_NEG(int t); +extern int _TIE_xt_core_ABS(int t); +extern void _TIE_xt_core_SSR(int s); +extern void _TIE_xt_core_SSL(int s); +extern void _TIE_xt_core_SSA8L(int s); +extern void _TIE_xt_core_SSA8B(int s); +extern void _TIE_xt_core_SSAI(immediate i); +extern int _TIE_xt_core_SLL(int s); +extern int _TIE_xt_core_SRC(int s, int t); +extern unsigned _TIE_xt_core_SRL(unsigned t); +extern int _TIE_xt_core_SRA(int t); +extern int _TIE_xt_core_SLLI(int s, immediate i); +extern int _TIE_xt_core_SRAI(int t, immediate i); +extern unsigned _TIE_xt_core_SRLI(unsigned t, immediate i); +extern int _TIE_xt_core_SSAI_SRC(int src1, int src2, immediate amount); +extern int _TIE_xt_core_SSR_SRC(int src1, int src2, int amount); +extern int _TIE_xt_core_WSR_SAR_SRC(int src1, int src2, int amount); +extern int _TIE_xt_core_SSR_SRA(int src, int amount); +extern unsigned _TIE_xt_core_SSR_SRL(unsigned src, int amount); +extern int _TIE_xt_core_SSL_SLL(int src, int amount); +extern int _TIE_xt_core_RSIL(immediate t); +extern int _TIE_xt_core_RSR_LEND(void); +extern void _TIE_xt_core_WSR_LEND(int t); +extern void _TIE_xt_core_XSR_LEND(int t /*inout*/); +extern int _TIE_xt_core_RSR_LCOUNT(void); +extern void _TIE_xt_core_WSR_LCOUNT(int t); +extern void _TIE_xt_core_XSR_LCOUNT(int t /*inout*/); +extern unsigned _TIE_xt_core_RSR_SAR(void); +extern void _TIE_xt_core_WSR_SAR(unsigned t); +extern void _TIE_xt_core_XSR_SAR(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_MEMCTL(void); +extern void _TIE_xt_core_WSR_MEMCTL(unsigned t); +extern void _TIE_xt_core_XSR_MEMCTL(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_LITBASE(void); +extern void _TIE_xt_core_WSR_LITBASE(unsigned t); +extern void _TIE_xt_core_XSR_LITBASE(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_PS(void); +extern void _TIE_xt_core_WSR_PS(unsigned t); +extern void _TIE_xt_core_XSR_PS(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPC1(void); +extern void _TIE_xt_core_WSR_EPC1(unsigned t); +extern void _TIE_xt_core_XSR_EPC1(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EXCSAVE1(void); +extern void _TIE_xt_core_WSR_EXCSAVE1(unsigned t); +extern void _TIE_xt_core_XSR_EXCSAVE1(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPC2(void); +extern void _TIE_xt_core_WSR_EPC2(unsigned t); +extern void _TIE_xt_core_XSR_EPC2(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EXCSAVE2(void); +extern void _TIE_xt_core_WSR_EXCSAVE2(unsigned t); +extern void _TIE_xt_core_XSR_EXCSAVE2(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPC3(void); +extern void _TIE_xt_core_WSR_EPC3(unsigned t); +extern void _TIE_xt_core_XSR_EPC3(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EXCSAVE3(void); +extern void _TIE_xt_core_WSR_EXCSAVE3(unsigned t); +extern void _TIE_xt_core_XSR_EXCSAVE3(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPC4(void); +extern void _TIE_xt_core_WSR_EPC4(unsigned t); +extern void _TIE_xt_core_XSR_EPC4(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EXCSAVE4(void); +extern void _TIE_xt_core_WSR_EXCSAVE4(unsigned t); +extern void _TIE_xt_core_XSR_EXCSAVE4(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPC5(void); +extern void _TIE_xt_core_WSR_EPC5(unsigned t); +extern void _TIE_xt_core_XSR_EPC5(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EXCSAVE5(void); +extern void _TIE_xt_core_WSR_EXCSAVE5(unsigned t); +extern void _TIE_xt_core_XSR_EXCSAVE5(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPC6(void); +extern void _TIE_xt_core_WSR_EPC6(unsigned t); +extern void _TIE_xt_core_XSR_EPC6(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EXCSAVE6(void); +extern void _TIE_xt_core_WSR_EXCSAVE6(unsigned t); +extern void _TIE_xt_core_XSR_EXCSAVE6(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPC7(void); +extern void _TIE_xt_core_WSR_EPC7(unsigned t); +extern void _TIE_xt_core_XSR_EPC7(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EXCSAVE7(void); +extern void _TIE_xt_core_WSR_EXCSAVE7(unsigned t); +extern void _TIE_xt_core_XSR_EXCSAVE7(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_VECBASE(void); +extern void _TIE_xt_core_WSR_VECBASE(unsigned t); +extern void _TIE_xt_core_XSR_VECBASE(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPS2(void); +extern void _TIE_xt_core_WSR_EPS2(unsigned t); +extern void _TIE_xt_core_XSR_EPS2(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPS3(void); +extern void _TIE_xt_core_WSR_EPS3(unsigned t); +extern void _TIE_xt_core_XSR_EPS3(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPS4(void); +extern void _TIE_xt_core_WSR_EPS4(unsigned t); +extern void _TIE_xt_core_XSR_EPS4(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPS5(void); +extern void _TIE_xt_core_WSR_EPS5(unsigned t); +extern void _TIE_xt_core_XSR_EPS5(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPS6(void); +extern void _TIE_xt_core_WSR_EPS6(unsigned t); +extern void _TIE_xt_core_XSR_EPS6(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EPS7(void); +extern void _TIE_xt_core_WSR_EPS7(unsigned t); +extern void _TIE_xt_core_XSR_EPS7(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EXCCAUSE(void); +extern void _TIE_xt_core_WSR_EXCCAUSE(unsigned t); +extern void _TIE_xt_core_XSR_EXCCAUSE(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_EXCVADDR(void); +extern void _TIE_xt_core_WSR_EXCVADDR(unsigned t); +extern void _TIE_xt_core_XSR_EXCVADDR(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_DEPC(void); +extern void _TIE_xt_core_WSR_DEPC(unsigned t); +extern void _TIE_xt_core_XSR_DEPC(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_MISC0(void); +extern void _TIE_xt_core_WSR_MISC0(unsigned t); +extern void _TIE_xt_core_XSR_MISC0(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_MISC1(void); +extern void _TIE_xt_core_WSR_MISC1(unsigned t); +extern void _TIE_xt_core_XSR_MISC1(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_MISC2(void); +extern void _TIE_xt_core_WSR_MISC2(unsigned t); +extern void _TIE_xt_core_XSR_MISC2(unsigned t /*inout*/); +extern unsigned _TIE_xt_core_RSR_MISC3(void); +extern void _TIE_xt_core_WSR_MISC3(unsigned t); +extern void _TIE_xt_core_XSR_MISC3(unsigned t /*inout*/); +extern int _TIE_xt_core_RSR_PRID(void); +#define XT_ILL _TIE_xt_core_ILL +#define XT_NOP _TIE_xt_core_NOP +#define XT_SIMCALL _TIE_xt_core_SIMCALL +#define XT_MEMW _TIE_xt_core_MEMW +#define XT_EXTW _TIE_xt_core_EXTW +#define XT_ISYNC _TIE_xt_core_ISYNC +#define XT_DSYNC _TIE_xt_core_DSYNC +#define XT_ESYNC _TIE_xt_core_ESYNC +#define XT_RSYNC _TIE_xt_core_RSYNC +#define XT_RSR_LBEG _TIE_xt_core_RSR_LBEG +#define XT_WSR_LBEG _TIE_xt_core_WSR_LBEG +#define XT_XSR_LBEG _TIE_xt_core_XSR_LBEG +#define XT_RSR_CONFIGID0 _TIE_xt_core_RSR_CONFIGID0 +#define XT_WSR_CONFIGID0 _TIE_xt_core_WSR_CONFIGID0 +#define XT_RSR_CONFIGID1 _TIE_xt_core_RSR_CONFIGID1 +#define XT_RUR_THREADPTR _TIE_xt_core_RUR_THREADPTR +#define RTHREADPTR _TIE_xt_core_RUR_THREADPTR +#define RUR231 _TIE_xt_core_RUR_THREADPTR +#define XT_WUR_THREADPTR _TIE_xt_core_WUR_THREADPTR +#define WTHREADPTR _TIE_xt_core_WUR_THREADPTR +#define WUR231 _TIE_xt_core_WUR_THREADPTR +#define XT_uint32_loadi _TIE_xt_core_uint32_loadi +#define XT_uint32_storei _TIE_xt_core_uint32_storei +#define XT_uint32_move _TIE_xt_core_uint32_move +#define XT_ADDI _TIE_xt_core_ADDI +#define XT_OR _TIE_xt_core_OR +#define XT_L32I _TIE_xt_core_L32I +#define XT_S32I _TIE_xt_core_S32I +#define XT_S32NB _TIE_xt_core_S32NB +#define XT_L8UI _TIE_xt_core_L8UI +#define XT_S8I _TIE_xt_core_S8I +#define XT_L16UI _TIE_xt_core_L16UI +#define XT_L16SI _TIE_xt_core_L16SI +#define XT_S16I _TIE_xt_core_S16I +#define XT_ADDMI _TIE_xt_core_ADDMI +#define XT_ADD _TIE_xt_core_ADD +#define XT_ADDX2 _TIE_xt_core_ADDX2 +#define XT_ADDX4 _TIE_xt_core_ADDX4 +#define XT_ADDX8 _TIE_xt_core_ADDX8 +#define XT_SUB _TIE_xt_core_SUB +#define XT_SUBX2 _TIE_xt_core_SUBX2 +#define XT_SUBX4 _TIE_xt_core_SUBX4 +#define XT_SUBX8 _TIE_xt_core_SUBX8 +#define XT_AND _TIE_xt_core_AND +#define XT_XOR _TIE_xt_core_XOR +#define XT_EXTUI _TIE_xt_core_EXTUI +#define XT_MOVI _TIE_xt_core_MOVI +#define XT_MOVEQZ _TIE_xt_core_MOVEQZ +#define XT_MOVNEZ _TIE_xt_core_MOVNEZ +#define XT_MOVLTZ _TIE_xt_core_MOVLTZ +#define XT_MOVGEZ _TIE_xt_core_MOVGEZ +#define XT_NEG _TIE_xt_core_NEG +#define XT_ABS _TIE_xt_core_ABS +#define XT_SSR _TIE_xt_core_SSR +#define XT_SSL _TIE_xt_core_SSL +#define XT_SSA8L _TIE_xt_core_SSA8L +#define XT_SSA8B _TIE_xt_core_SSA8B +#define XT_SSAI _TIE_xt_core_SSAI +#define XT_SLL _TIE_xt_core_SLL +#define XT_SRC _TIE_xt_core_SRC +#define XT_SRL _TIE_xt_core_SRL +#define XT_SRA _TIE_xt_core_SRA +#define XT_SLLI _TIE_xt_core_SLLI +#define XT_SRAI _TIE_xt_core_SRAI +#define XT_SRLI _TIE_xt_core_SRLI +#define XT_SSAI_SRC _TIE_xt_core_SSAI_SRC +#define XT_SSR_SRC _TIE_xt_core_SSR_SRC +#define XT_WSR_SAR_SRC _TIE_xt_core_WSR_SAR_SRC +#define XT_SSR_SRA _TIE_xt_core_SSR_SRA +#define XT_SSR_SRL _TIE_xt_core_SSR_SRL +#define XT_SSL_SLL _TIE_xt_core_SSL_SLL +#define XT_RSIL _TIE_xt_core_RSIL +#define XT_RSR_LEND _TIE_xt_core_RSR_LEND +#define XT_WSR_LEND _TIE_xt_core_WSR_LEND +#define XT_XSR_LEND _TIE_xt_core_XSR_LEND +#define XT_RSR_LCOUNT _TIE_xt_core_RSR_LCOUNT +#define XT_WSR_LCOUNT _TIE_xt_core_WSR_LCOUNT +#define XT_XSR_LCOUNT _TIE_xt_core_XSR_LCOUNT +#define XT_RSR_SAR _TIE_xt_core_RSR_SAR +#define XT_WSR_SAR _TIE_xt_core_WSR_SAR +#define XT_XSR_SAR _TIE_xt_core_XSR_SAR +#define XT_RSR_MEMCTL _TIE_xt_core_RSR_MEMCTL +#define XT_WSR_MEMCTL _TIE_xt_core_WSR_MEMCTL +#define XT_XSR_MEMCTL _TIE_xt_core_XSR_MEMCTL +#define XT_RSR_LITBASE _TIE_xt_core_RSR_LITBASE +#define XT_WSR_LITBASE _TIE_xt_core_WSR_LITBASE +#define XT_XSR_LITBASE _TIE_xt_core_XSR_LITBASE +#define XT_RSR_PS _TIE_xt_core_RSR_PS +#define XT_WSR_PS _TIE_xt_core_WSR_PS +#define XT_XSR_PS _TIE_xt_core_XSR_PS +#define XT_RSR_EPC1 _TIE_xt_core_RSR_EPC1 +#define XT_WSR_EPC1 _TIE_xt_core_WSR_EPC1 +#define XT_XSR_EPC1 _TIE_xt_core_XSR_EPC1 +#define XT_RSR_EXCSAVE1 _TIE_xt_core_RSR_EXCSAVE1 +#define XT_WSR_EXCSAVE1 _TIE_xt_core_WSR_EXCSAVE1 +#define XT_XSR_EXCSAVE1 _TIE_xt_core_XSR_EXCSAVE1 +#define XT_RSR_EPC2 _TIE_xt_core_RSR_EPC2 +#define XT_WSR_EPC2 _TIE_xt_core_WSR_EPC2 +#define XT_XSR_EPC2 _TIE_xt_core_XSR_EPC2 +#define XT_RSR_EXCSAVE2 _TIE_xt_core_RSR_EXCSAVE2 +#define XT_WSR_EXCSAVE2 _TIE_xt_core_WSR_EXCSAVE2 +#define XT_XSR_EXCSAVE2 _TIE_xt_core_XSR_EXCSAVE2 +#define XT_RSR_EPC3 _TIE_xt_core_RSR_EPC3 +#define XT_WSR_EPC3 _TIE_xt_core_WSR_EPC3 +#define XT_XSR_EPC3 _TIE_xt_core_XSR_EPC3 +#define XT_RSR_EXCSAVE3 _TIE_xt_core_RSR_EXCSAVE3 +#define XT_WSR_EXCSAVE3 _TIE_xt_core_WSR_EXCSAVE3 +#define XT_XSR_EXCSAVE3 _TIE_xt_core_XSR_EXCSAVE3 +#define XT_RSR_EPC4 _TIE_xt_core_RSR_EPC4 +#define XT_WSR_EPC4 _TIE_xt_core_WSR_EPC4 +#define XT_XSR_EPC4 _TIE_xt_core_XSR_EPC4 +#define XT_RSR_EXCSAVE4 _TIE_xt_core_RSR_EXCSAVE4 +#define XT_WSR_EXCSAVE4 _TIE_xt_core_WSR_EXCSAVE4 +#define XT_XSR_EXCSAVE4 _TIE_xt_core_XSR_EXCSAVE4 +#define XT_RSR_EPC5 _TIE_xt_core_RSR_EPC5 +#define XT_WSR_EPC5 _TIE_xt_core_WSR_EPC5 +#define XT_XSR_EPC5 _TIE_xt_core_XSR_EPC5 +#define XT_RSR_EXCSAVE5 _TIE_xt_core_RSR_EXCSAVE5 +#define XT_WSR_EXCSAVE5 _TIE_xt_core_WSR_EXCSAVE5 +#define XT_XSR_EXCSAVE5 _TIE_xt_core_XSR_EXCSAVE5 +#define XT_RSR_EPC6 _TIE_xt_core_RSR_EPC6 +#define XT_WSR_EPC6 _TIE_xt_core_WSR_EPC6 +#define XT_XSR_EPC6 _TIE_xt_core_XSR_EPC6 +#define XT_RSR_EXCSAVE6 _TIE_xt_core_RSR_EXCSAVE6 +#define XT_WSR_EXCSAVE6 _TIE_xt_core_WSR_EXCSAVE6 +#define XT_XSR_EXCSAVE6 _TIE_xt_core_XSR_EXCSAVE6 +#define XT_RSR_EPC7 _TIE_xt_core_RSR_EPC7 +#define XT_WSR_EPC7 _TIE_xt_core_WSR_EPC7 +#define XT_XSR_EPC7 _TIE_xt_core_XSR_EPC7 +#define XT_RSR_EXCSAVE7 _TIE_xt_core_RSR_EXCSAVE7 +#define XT_WSR_EXCSAVE7 _TIE_xt_core_WSR_EXCSAVE7 +#define XT_XSR_EXCSAVE7 _TIE_xt_core_XSR_EXCSAVE7 +#define XT_RSR_VECBASE _TIE_xt_core_RSR_VECBASE +#define XT_WSR_VECBASE _TIE_xt_core_WSR_VECBASE +#define XT_XSR_VECBASE _TIE_xt_core_XSR_VECBASE +#define XT_RSR_EPS2 _TIE_xt_core_RSR_EPS2 +#define XT_WSR_EPS2 _TIE_xt_core_WSR_EPS2 +#define XT_XSR_EPS2 _TIE_xt_core_XSR_EPS2 +#define XT_RSR_EPS3 _TIE_xt_core_RSR_EPS3 +#define XT_WSR_EPS3 _TIE_xt_core_WSR_EPS3 +#define XT_XSR_EPS3 _TIE_xt_core_XSR_EPS3 +#define XT_RSR_EPS4 _TIE_xt_core_RSR_EPS4 +#define XT_WSR_EPS4 _TIE_xt_core_WSR_EPS4 +#define XT_XSR_EPS4 _TIE_xt_core_XSR_EPS4 +#define XT_RSR_EPS5 _TIE_xt_core_RSR_EPS5 +#define XT_WSR_EPS5 _TIE_xt_core_WSR_EPS5 +#define XT_XSR_EPS5 _TIE_xt_core_XSR_EPS5 +#define XT_RSR_EPS6 _TIE_xt_core_RSR_EPS6 +#define XT_WSR_EPS6 _TIE_xt_core_WSR_EPS6 +#define XT_XSR_EPS6 _TIE_xt_core_XSR_EPS6 +#define XT_RSR_EPS7 _TIE_xt_core_RSR_EPS7 +#define XT_WSR_EPS7 _TIE_xt_core_WSR_EPS7 +#define XT_XSR_EPS7 _TIE_xt_core_XSR_EPS7 +#define XT_RSR_EXCCAUSE _TIE_xt_core_RSR_EXCCAUSE +#define XT_WSR_EXCCAUSE _TIE_xt_core_WSR_EXCCAUSE +#define XT_XSR_EXCCAUSE _TIE_xt_core_XSR_EXCCAUSE +#define XT_RSR_EXCVADDR _TIE_xt_core_RSR_EXCVADDR +#define XT_WSR_EXCVADDR _TIE_xt_core_WSR_EXCVADDR +#define XT_XSR_EXCVADDR _TIE_xt_core_XSR_EXCVADDR +#define XT_RSR_DEPC _TIE_xt_core_RSR_DEPC +#define XT_WSR_DEPC _TIE_xt_core_WSR_DEPC +#define XT_XSR_DEPC _TIE_xt_core_XSR_DEPC +#define XT_RSR_MISC0 _TIE_xt_core_RSR_MISC0 +#define XT_WSR_MISC0 _TIE_xt_core_WSR_MISC0 +#define XT_XSR_MISC0 _TIE_xt_core_XSR_MISC0 +#define XT_RSR_MISC1 _TIE_xt_core_RSR_MISC1 +#define XT_WSR_MISC1 _TIE_xt_core_WSR_MISC1 +#define XT_XSR_MISC1 _TIE_xt_core_XSR_MISC1 +#define XT_RSR_MISC2 _TIE_xt_core_RSR_MISC2 +#define XT_WSR_MISC2 _TIE_xt_core_WSR_MISC2 +#define XT_XSR_MISC2 _TIE_xt_core_XSR_MISC2 +#define XT_RSR_MISC3 _TIE_xt_core_RSR_MISC3 +#define XT_WSR_MISC3 _TIE_xt_core_WSR_MISC3 +#define XT_XSR_MISC3 _TIE_xt_core_XSR_MISC3 +#define XT_RSR_PRID _TIE_xt_core_RSR_PRID + +#ifndef RUR +#define RUR(NUM) RUR##NUM() +#endif + +#ifndef WUR +#define WUR(VAL, NUM) WUR##NUM(VAL) +#endif + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_core_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_debug.h b/tools/sdk/include/esp32/xtensa/tie/xt_debug.h new file mode 100644 index 00000000..676fd33c --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_debug.h @@ -0,0 +1,116 @@ +/* Definitions for the xt_debug TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_debug_HEADER +#define _XTENSA_xt_debug_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern void _TIE_xt_debug_BREAK(immediate imms, immediate immt); +extern void _TIE_xt_debug_BREAK_N(immediate imms); +extern unsigned _TIE_xt_debug_RSR_DBREAKA0(void); +extern void _TIE_xt_debug_WSR_DBREAKA0(unsigned art); +extern void _TIE_xt_debug_XSR_DBREAKA0(unsigned art /*inout*/); +extern unsigned _TIE_xt_debug_RSR_DBREAKC0(void); +extern void _TIE_xt_debug_WSR_DBREAKC0(unsigned art); +extern void _TIE_xt_debug_XSR_DBREAKC0(unsigned art /*inout*/); +extern unsigned _TIE_xt_debug_RSR_DBREAKA1(void); +extern void _TIE_xt_debug_WSR_DBREAKA1(unsigned art); +extern void _TIE_xt_debug_XSR_DBREAKA1(unsigned art /*inout*/); +extern unsigned _TIE_xt_debug_RSR_DBREAKC1(void); +extern void _TIE_xt_debug_WSR_DBREAKC1(unsigned art); +extern void _TIE_xt_debug_XSR_DBREAKC1(unsigned art /*inout*/); +extern unsigned _TIE_xt_debug_RSR_IBREAKA0(void); +extern void _TIE_xt_debug_WSR_IBREAKA0(unsigned art); +extern void _TIE_xt_debug_XSR_IBREAKA0(unsigned art /*inout*/); +extern unsigned _TIE_xt_debug_RSR_IBREAKA1(void); +extern void _TIE_xt_debug_WSR_IBREAKA1(unsigned art); +extern void _TIE_xt_debug_XSR_IBREAKA1(unsigned art /*inout*/); +extern unsigned _TIE_xt_debug_RSR_IBREAKENABLE(void); +extern void _TIE_xt_debug_WSR_IBREAKENABLE(unsigned art); +extern void _TIE_xt_debug_XSR_IBREAKENABLE(unsigned art /*inout*/); +extern unsigned _TIE_xt_debug_RSR_DEBUGCAUSE(void); +extern void _TIE_xt_debug_WSR_DEBUGCAUSE(unsigned art); +extern void _TIE_xt_debug_XSR_DEBUGCAUSE(unsigned art /*inout*/); +extern unsigned _TIE_xt_debug_RSR_ICOUNT(void); +extern void _TIE_xt_debug_WSR_ICOUNT(unsigned art); +extern void _TIE_xt_debug_XSR_ICOUNT(unsigned art /*inout*/); +extern unsigned _TIE_xt_debug_RSR_ICOUNTLEVEL(void); +extern void _TIE_xt_debug_WSR_ICOUNTLEVEL(unsigned art); +extern void _TIE_xt_debug_XSR_ICOUNTLEVEL(unsigned art /*inout*/); +extern unsigned _TIE_xt_debug_RSR_DDR(void); +extern void _TIE_xt_debug_WSR_DDR(unsigned art); +extern void _TIE_xt_debug_XSR_DDR(unsigned art /*inout*/); +extern void _TIE_xt_debug_LDDR32_P(const void * ars /*inout*/); +extern void _TIE_xt_debug_SDDR32_P(void * ars /*inout*/); +#define XT_BREAK _TIE_xt_debug_BREAK +#define XT_BREAK_N _TIE_xt_debug_BREAK_N +#define XT_RSR_DBREAKA0 _TIE_xt_debug_RSR_DBREAKA0 +#define XT_WSR_DBREAKA0 _TIE_xt_debug_WSR_DBREAKA0 +#define XT_XSR_DBREAKA0 _TIE_xt_debug_XSR_DBREAKA0 +#define XT_RSR_DBREAKC0 _TIE_xt_debug_RSR_DBREAKC0 +#define XT_WSR_DBREAKC0 _TIE_xt_debug_WSR_DBREAKC0 +#define XT_XSR_DBREAKC0 _TIE_xt_debug_XSR_DBREAKC0 +#define XT_RSR_DBREAKA1 _TIE_xt_debug_RSR_DBREAKA1 +#define XT_WSR_DBREAKA1 _TIE_xt_debug_WSR_DBREAKA1 +#define XT_XSR_DBREAKA1 _TIE_xt_debug_XSR_DBREAKA1 +#define XT_RSR_DBREAKC1 _TIE_xt_debug_RSR_DBREAKC1 +#define XT_WSR_DBREAKC1 _TIE_xt_debug_WSR_DBREAKC1 +#define XT_XSR_DBREAKC1 _TIE_xt_debug_XSR_DBREAKC1 +#define XT_RSR_IBREAKA0 _TIE_xt_debug_RSR_IBREAKA0 +#define XT_WSR_IBREAKA0 _TIE_xt_debug_WSR_IBREAKA0 +#define XT_XSR_IBREAKA0 _TIE_xt_debug_XSR_IBREAKA0 +#define XT_RSR_IBREAKA1 _TIE_xt_debug_RSR_IBREAKA1 +#define XT_WSR_IBREAKA1 _TIE_xt_debug_WSR_IBREAKA1 +#define XT_XSR_IBREAKA1 _TIE_xt_debug_XSR_IBREAKA1 +#define XT_RSR_IBREAKENABLE _TIE_xt_debug_RSR_IBREAKENABLE +#define XT_WSR_IBREAKENABLE _TIE_xt_debug_WSR_IBREAKENABLE +#define XT_XSR_IBREAKENABLE _TIE_xt_debug_XSR_IBREAKENABLE +#define XT_RSR_DEBUGCAUSE _TIE_xt_debug_RSR_DEBUGCAUSE +#define XT_WSR_DEBUGCAUSE _TIE_xt_debug_WSR_DEBUGCAUSE +#define XT_XSR_DEBUGCAUSE _TIE_xt_debug_XSR_DEBUGCAUSE +#define XT_RSR_ICOUNT _TIE_xt_debug_RSR_ICOUNT +#define XT_WSR_ICOUNT _TIE_xt_debug_WSR_ICOUNT +#define XT_XSR_ICOUNT _TIE_xt_debug_XSR_ICOUNT +#define XT_RSR_ICOUNTLEVEL _TIE_xt_debug_RSR_ICOUNTLEVEL +#define XT_WSR_ICOUNTLEVEL _TIE_xt_debug_WSR_ICOUNTLEVEL +#define XT_XSR_ICOUNTLEVEL _TIE_xt_debug_XSR_ICOUNTLEVEL +#define XT_RSR_DDR _TIE_xt_debug_RSR_DDR +#define XT_WSR_DDR _TIE_xt_debug_WSR_DDR +#define XT_XSR_DDR _TIE_xt_debug_XSR_DDR +#define XT_LDDR32_P _TIE_xt_debug_LDDR32_P +#define XT_SDDR32_P _TIE_xt_debug_SDDR32_P + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_debug_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_density.h b/tools/sdk/include/esp32/xtensa/tie/xt_density.h new file mode 100644 index 00000000..da5c51cc --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_density.h @@ -0,0 +1,58 @@ +/* Definitions for the xt_density TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_density_HEADER +#define _XTENSA_xt_density_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern void _TIE_xt_density_ILL_N(void); +extern void _TIE_xt_density_NOP_N(void); +extern int _TIE_xt_density_L32I_N(const int * p, immediate i); +extern void _TIE_xt_density_S32I_N(int t, int * p, immediate i); +extern int _TIE_xt_density_ADD_N(int s, int t); +extern int _TIE_xt_density_ADDI_N(int s, immediate i); +extern int _TIE_xt_density_MOV_N(int s); +extern int _TIE_xt_density_MOVI_N(immediate i); +#define XT_ILL_N _TIE_xt_density_ILL_N +#define XT_NOP_N _TIE_xt_density_NOP_N +#define XT_L32I_N _TIE_xt_density_L32I_N +#define XT_S32I_N _TIE_xt_density_S32I_N +#define XT_ADD_N _TIE_xt_density_ADD_N +#define XT_ADDI_N _TIE_xt_density_ADDI_N +#define XT_MOV_N _TIE_xt_density_MOV_N +#define XT_MOVI_N _TIE_xt_density_MOVI_N + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_density_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_exceptions.h b/tools/sdk/include/esp32/xtensa/tie/xt_exceptions.h new file mode 100644 index 00000000..64fb3930 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_exceptions.h @@ -0,0 +1,45 @@ +/* Definitions for the xt_exceptions TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_exceptions_HEADER +#define _XTENSA_xt_exceptions_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern void _TIE_xt_exceptions_EXCW(void); +extern void _TIE_xt_exceptions_SYSCALL(void); +#define XT_EXCW _TIE_xt_exceptions_EXCW +#define XT_SYSCALL _TIE_xt_exceptions_SYSCALL + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_exceptions_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_externalregisters.h b/tools/sdk/include/esp32/xtensa/tie/xt_externalregisters.h new file mode 100644 index 00000000..3196527c --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_externalregisters.h @@ -0,0 +1,46 @@ +/* Definitions for the xt_externalregisters TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_externalregisters_HEADER +#define _XTENSA_xt_externalregisters_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern unsigned _TIE_xt_externalregisters_RER(unsigned ars); +extern void _TIE_xt_externalregisters_WER(unsigned art, unsigned ars); +#define XT_RER _TIE_xt_externalregisters_RER +#define XT_WER _TIE_xt_externalregisters_WER + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_externalregisters_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_integerdivide.h b/tools/sdk/include/esp32/xtensa/tie/xt_integerdivide.h new file mode 100644 index 00000000..9fbe9615 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_integerdivide.h @@ -0,0 +1,50 @@ +/* Definitions for the xt_integerdivide TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_integerdivide_HEADER +#define _XTENSA_xt_integerdivide_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern unsigned _TIE_xt_integerdivide_REMS(unsigned ars, unsigned art); +extern unsigned _TIE_xt_integerdivide_REMU(unsigned ars, unsigned art); +extern unsigned _TIE_xt_integerdivide_QUOS(unsigned ars, unsigned art); +extern unsigned _TIE_xt_integerdivide_QUOU(unsigned ars, unsigned art); +#define XT_REMS _TIE_xt_integerdivide_REMS +#define XT_REMU _TIE_xt_integerdivide_REMU +#define XT_QUOS _TIE_xt_integerdivide_QUOS +#define XT_QUOU _TIE_xt_integerdivide_QUOU + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_integerdivide_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_interrupt.h b/tools/sdk/include/esp32/xtensa/tie/xt_interrupt.h new file mode 100644 index 00000000..b20c94f4 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_interrupt.h @@ -0,0 +1,56 @@ +/* Definitions for the xt_interrupt TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_interrupt_HEADER +#define _XTENSA_xt_interrupt_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern void _TIE_xt_interrupt_WAITI(immediate s); +extern unsigned _TIE_xt_interrupt_RSR_INTERRUPT(void); +extern void _TIE_xt_interrupt_WSR_INTSET(unsigned art); +extern void _TIE_xt_interrupt_WSR_INTCLEAR(unsigned art); +extern unsigned _TIE_xt_interrupt_RSR_INTENABLE(void); +extern void _TIE_xt_interrupt_WSR_INTENABLE(unsigned art); +extern void _TIE_xt_interrupt_XSR_INTENABLE(unsigned art /*inout*/); +#define XT_WAITI _TIE_xt_interrupt_WAITI +#define XT_RSR_INTERRUPT _TIE_xt_interrupt_RSR_INTERRUPT +#define XT_WSR_INTSET _TIE_xt_interrupt_WSR_INTSET +#define XT_WSR_INTCLEAR _TIE_xt_interrupt_WSR_INTCLEAR +#define XT_RSR_INTENABLE _TIE_xt_interrupt_RSR_INTENABLE +#define XT_WSR_INTENABLE _TIE_xt_interrupt_WSR_INTENABLE +#define XT_XSR_INTENABLE _TIE_xt_interrupt_XSR_INTENABLE + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_interrupt_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_ioports.h b/tools/sdk/include/esp32/xtensa/tie/xt_ioports.h new file mode 100644 index 00000000..0253bea4 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_ioports.h @@ -0,0 +1,66 @@ +/* Definitions for the xt_ioports TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_ioports_HEADER +#define _XTENSA_xt_ioports_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern unsigned _TIE_xt_ioports_READ_IMPWIRE(void); +extern void _TIE_xt_ioports_SETB_EXPSTATE(immediate bitindex); +extern void _TIE_xt_ioports_CLRB_EXPSTATE(immediate bitindex); +extern void _TIE_xt_ioports_WRMSK_EXPSTATE(unsigned art, unsigned ars); +extern unsigned _TIE_xt_ioports_RUR_EXPSTATE(void); +extern void _TIE_xt_ioports_WUR_EXPSTATE(unsigned v); +#define READ_IMPWIRE _TIE_xt_ioports_READ_IMPWIRE +#define SETB_EXPSTATE _TIE_xt_ioports_SETB_EXPSTATE +#define CLRB_EXPSTATE _TIE_xt_ioports_CLRB_EXPSTATE +#define WRMSK_EXPSTATE _TIE_xt_ioports_WRMSK_EXPSTATE +#define RUR_EXPSTATE _TIE_xt_ioports_RUR_EXPSTATE +#define REXPSTATE _TIE_xt_ioports_RUR_EXPSTATE +#define RUR230 _TIE_xt_ioports_RUR_EXPSTATE +#define WUR_EXPSTATE _TIE_xt_ioports_WUR_EXPSTATE +#define WEXPSTATE _TIE_xt_ioports_WUR_EXPSTATE +#define WUR230 _TIE_xt_ioports_WUR_EXPSTATE + +#ifndef RUR +#define RUR(NUM) RUR##NUM() +#endif + +#ifndef WUR +#define WUR(VAL, NUM) WUR##NUM(VAL) +#endif + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_ioports_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_misc.h b/tools/sdk/include/esp32/xtensa/tie/xt_misc.h new file mode 100644 index 00000000..a0b36f4e --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_misc.h @@ -0,0 +1,58 @@ +/* Definitions for the xt_misc TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_misc_HEADER +#define _XTENSA_xt_misc_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern int _TIE_xt_misc_CLAMPS(int s, immediate i); +extern int _TIE_xt_misc_MIN(int s, int t); +extern int _TIE_xt_misc_MAX(int s, int t); +extern unsigned _TIE_xt_misc_MINU(unsigned s, unsigned t); +extern unsigned _TIE_xt_misc_MAXU(unsigned s, unsigned t); +extern int _TIE_xt_misc_NSA(int s); +extern unsigned _TIE_xt_misc_NSAU(unsigned s); +extern int _TIE_xt_misc_SEXT(int s, immediate i); +#define XT_CLAMPS _TIE_xt_misc_CLAMPS +#define XT_MIN _TIE_xt_misc_MIN +#define XT_MAX _TIE_xt_misc_MAX +#define XT_MINU _TIE_xt_misc_MINU +#define XT_MAXU _TIE_xt_misc_MAXU +#define XT_NSA _TIE_xt_misc_NSA +#define XT_NSAU _TIE_xt_misc_NSAU +#define XT_SEXT _TIE_xt_misc_SEXT + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_misc_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_mmu.h b/tools/sdk/include/esp32/xtensa/tie/xt_mmu.h new file mode 100644 index 00000000..ce786c0f --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_mmu.h @@ -0,0 +1,62 @@ +/* Definitions for the xt_mmu TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_mmu_HEADER +#define _XTENSA_xt_mmu_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern void _TIE_xt_mmu_IDTLB(unsigned ars); +extern unsigned _TIE_xt_mmu_RDTLB1(unsigned ars); +extern unsigned _TIE_xt_mmu_RDTLB0(unsigned ars); +extern unsigned _TIE_xt_mmu_PDTLB(unsigned ars); +extern void _TIE_xt_mmu_WDTLB(unsigned art, unsigned ars); +extern void _TIE_xt_mmu_IITLB(unsigned ars); +extern unsigned _TIE_xt_mmu_RITLB1(unsigned ars); +extern unsigned _TIE_xt_mmu_RITLB0(unsigned ars); +extern unsigned _TIE_xt_mmu_PITLB(unsigned ars); +extern void _TIE_xt_mmu_WITLB(unsigned art, unsigned ars); +#define XT_IDTLB _TIE_xt_mmu_IDTLB +#define XT_RDTLB1 _TIE_xt_mmu_RDTLB1 +#define XT_RDTLB0 _TIE_xt_mmu_RDTLB0 +#define XT_PDTLB _TIE_xt_mmu_PDTLB +#define XT_WDTLB _TIE_xt_mmu_WDTLB +#define XT_IITLB _TIE_xt_mmu_IITLB +#define XT_RITLB1 _TIE_xt_mmu_RITLB1 +#define XT_RITLB0 _TIE_xt_mmu_RITLB0 +#define XT_PITLB _TIE_xt_mmu_PITLB +#define XT_WITLB _TIE_xt_mmu_WITLB + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_mmu_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_mul.h b/tools/sdk/include/esp32/xtensa/tie/xt_mul.h new file mode 100644 index 00000000..e2086206 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_mul.h @@ -0,0 +1,52 @@ +/* Definitions for the xt_mul TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_mul_HEADER +#define _XTENSA_xt_mul_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern int _TIE_xt_mul_MUL16S(short s, short t); +extern unsigned _TIE_xt_mul_MUL16U(unsigned short s, unsigned short t); +extern int _TIE_xt_mul_MULL(int s, int t); +extern unsigned _TIE_xt_mul_MULUH(unsigned s, unsigned t); +extern int _TIE_xt_mul_MULSH(int s, int t); +#define XT_MUL16S _TIE_xt_mul_MUL16S +#define XT_MUL16U _TIE_xt_mul_MUL16U +#define XT_MULL _TIE_xt_mul_MULL +#define XT_MULUH _TIE_xt_mul_MULUH +#define XT_MULSH _TIE_xt_mul_MULSH + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_mul_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_regwin.h b/tools/sdk/include/esp32/xtensa/tie/xt_regwin.h new file mode 100644 index 00000000..7bce471a --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_regwin.h @@ -0,0 +1,64 @@ +/* Definitions for the xt_regwin TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_regwin_HEADER +#define _XTENSA_xt_regwin_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern void _TIE_xt_regwin_ENTRY(unsigned ars /*inout*/, immediate uimm12x8); +extern void _TIE_xt_regwin_ROTW(immediate simm4); +extern int _TIE_xt_regwin_MOVSP(int s); +extern int _TIE_xt_regwin_L32E(const int * s, immediate o); +extern void _TIE_xt_regwin_S32E(int t, int * s, immediate o); +extern unsigned _TIE_xt_regwin_RSR_WINDOWBASE(void); +extern void _TIE_xt_regwin_WSR_WINDOWBASE(unsigned t); +extern void _TIE_xt_regwin_XSR_WINDOWBASE(unsigned t /*inout*/); +extern unsigned _TIE_xt_regwin_RSR_WINDOWSTART(void); +extern void _TIE_xt_regwin_WSR_WINDOWSTART(unsigned t); +extern void _TIE_xt_regwin_XSR_WINDOWSTART(unsigned t /*inout*/); +#define XT_ENTRY _TIE_xt_regwin_ENTRY +#define XT_ROTW _TIE_xt_regwin_ROTW +#define XT_MOVSP _TIE_xt_regwin_MOVSP +#define XT_L32E _TIE_xt_regwin_L32E +#define XT_S32E _TIE_xt_regwin_S32E +#define XT_RSR_WINDOWBASE _TIE_xt_regwin_RSR_WINDOWBASE +#define XT_WSR_WINDOWBASE _TIE_xt_regwin_WSR_WINDOWBASE +#define XT_XSR_WINDOWBASE _TIE_xt_regwin_XSR_WINDOWBASE +#define XT_RSR_WINDOWSTART _TIE_xt_regwin_RSR_WINDOWSTART +#define XT_WSR_WINDOWSTART _TIE_xt_regwin_WSR_WINDOWSTART +#define XT_XSR_WINDOWSTART _TIE_xt_regwin_XSR_WINDOWSTART + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_regwin_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_scmpr.h b/tools/sdk/include/esp32/xtensa/tie/xt_scmpr.h new file mode 100644 index 00000000..337c7762 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_scmpr.h @@ -0,0 +1,22 @@ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_scmpr_h_HEADER +#define _XTENSA_xt_scmpr_h_HEADER + + +/* Header includes start */ + + +/* Header includes end */ + +#endif /* !_XTENSA_xt_scmpr_h_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_sync.h b/tools/sdk/include/esp32/xtensa/tie/xt_sync.h new file mode 100644 index 00000000..9323dfe4 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_sync.h @@ -0,0 +1,60 @@ +/* Definitions for the xt_sync TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_sync_HEADER +#define _XTENSA_xt_sync_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern unsigned _TIE_xt_sync_RSR_SCOMPARE1(void); +extern void _TIE_xt_sync_WSR_SCOMPARE1(unsigned art); +extern void _TIE_xt_sync_XSR_SCOMPARE1(unsigned art /*inout*/); +extern unsigned _TIE_xt_sync_RSR_ATOMCTL(void); +extern void _TIE_xt_sync_WSR_ATOMCTL(unsigned art); +extern void _TIE_xt_sync_XSR_ATOMCTL(unsigned art /*inout*/); +extern unsigned _TIE_xt_sync_L32AI(const unsigned * p, immediate o); +extern void _TIE_xt_sync_S32RI(unsigned c, unsigned * p, immediate o); +extern void _TIE_xt_sync_S32C1I(unsigned c /*inout*/, const unsigned * p, immediate o); +#define XT_RSR_SCOMPARE1 _TIE_xt_sync_RSR_SCOMPARE1 +#define XT_WSR_SCOMPARE1 _TIE_xt_sync_WSR_SCOMPARE1 +#define XT_XSR_SCOMPARE1 _TIE_xt_sync_XSR_SCOMPARE1 +#define XT_RSR_ATOMCTL _TIE_xt_sync_RSR_ATOMCTL +#define XT_WSR_ATOMCTL _TIE_xt_sync_WSR_ATOMCTL +#define XT_XSR_ATOMCTL _TIE_xt_sync_XSR_ATOMCTL +#define XT_L32AI _TIE_xt_sync_L32AI +#define XT_S32RI _TIE_xt_sync_S32RI +#define XT_S32C1I _TIE_xt_sync_S32C1I + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_sync_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_timer.h b/tools/sdk/include/esp32/xtensa/tie/xt_timer.h new file mode 100644 index 00000000..64db45c1 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_timer.h @@ -0,0 +1,66 @@ +/* Definitions for the xt_timer TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_timer_HEADER +#define _XTENSA_xt_timer_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern unsigned _TIE_xt_timer_RSR_CCOUNT(void); +extern void _TIE_xt_timer_WSR_CCOUNT(unsigned art); +extern void _TIE_xt_timer_XSR_CCOUNT(unsigned art /*inout*/); +extern unsigned _TIE_xt_timer_RSR_CCOMPARE0(void); +extern void _TIE_xt_timer_WSR_CCOMPARE0(unsigned art); +extern void _TIE_xt_timer_XSR_CCOMPARE0(unsigned art /*inout*/); +extern unsigned _TIE_xt_timer_RSR_CCOMPARE1(void); +extern void _TIE_xt_timer_WSR_CCOMPARE1(unsigned art); +extern void _TIE_xt_timer_XSR_CCOMPARE1(unsigned art /*inout*/); +extern unsigned _TIE_xt_timer_RSR_CCOMPARE2(void); +extern void _TIE_xt_timer_WSR_CCOMPARE2(unsigned art); +extern void _TIE_xt_timer_XSR_CCOMPARE2(unsigned art /*inout*/); +#define XT_RSR_CCOUNT _TIE_xt_timer_RSR_CCOUNT +#define XT_WSR_CCOUNT _TIE_xt_timer_WSR_CCOUNT +#define XT_XSR_CCOUNT _TIE_xt_timer_XSR_CCOUNT +#define XT_RSR_CCOMPARE0 _TIE_xt_timer_RSR_CCOMPARE0 +#define XT_WSR_CCOMPARE0 _TIE_xt_timer_WSR_CCOMPARE0 +#define XT_XSR_CCOMPARE0 _TIE_xt_timer_XSR_CCOMPARE0 +#define XT_RSR_CCOMPARE1 _TIE_xt_timer_RSR_CCOMPARE1 +#define XT_WSR_CCOMPARE1 _TIE_xt_timer_WSR_CCOMPARE1 +#define XT_XSR_CCOMPARE1 _TIE_xt_timer_XSR_CCOMPARE1 +#define XT_RSR_CCOMPARE2 _TIE_xt_timer_RSR_CCOMPARE2 +#define XT_WSR_CCOMPARE2 _TIE_xt_timer_WSR_CCOMPARE2 +#define XT_XSR_CCOMPARE2 _TIE_xt_timer_XSR_CCOMPARE2 + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_timer_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/tie/xt_trace.h b/tools/sdk/include/esp32/xtensa/tie/xt_trace.h new file mode 100644 index 00000000..8d8d07fa --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/tie/xt_trace.h @@ -0,0 +1,44 @@ +/* Definitions for the xt_trace TIE package */ + +/* + * Customer ID=11657; Build=0x5fe96; Copyright (c) 2004-2010 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +/* Do not modify. This is automatically generated.*/ + +#ifndef _XTENSA_xt_trace_HEADER +#define _XTENSA_xt_trace_HEADER + +#ifdef __XTENSA__ +#ifdef __XCC__ + +#include + +/* + * The following prototypes describe intrinsic functions + * corresponding to TIE instructions. Some TIE instructions + * may produce multiple results (designated as "out" operands + * in the iclass section) or may have operands used as both + * inputs and outputs (designated as "inout"). However, the C + * and C++ languages do not provide syntax that can express + * the in/out/inout constraints of TIE intrinsics. + * Nevertheless, the compiler understands these constraints + * and will check that the intrinsic functions are used + * correctly. To improve the readability of these prototypes, + * the "out" and "inout" parameters are marked accordingly + * with comments. + */ + +extern void _TIE_xt_trace_WSR_MMID(unsigned art); +#define XT_WSR_MMID _TIE_xt_trace_WSR_MMID + +#endif /* __XCC__ */ + +#endif /* __XTENSA__ */ + +#endif /* !_XTENSA_xt_trace_HEADER */ diff --git a/tools/sdk/include/esp32/xtensa/trax-api.h b/tools/sdk/include/esp32/xtensa/trax-api.h new file mode 100755 index 00000000..aa158435 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/trax-api.h @@ -0,0 +1,93 @@ +/* Misc TRAX API function definitions. + + Copyright (c) 2007-2012 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef _TRAX_API_H_ +#define _TRAX_API_H_ + +#include +#include +#include "tpack.h" +#include "traxreg.h" + +#include "xdm-regs.h" + +/* Flags for trax_stop(): */ +#define TRAX_STOP_HALT 0x0001 /* halt immediately, don't wait for post-stop-trigger capture */ +#define TRAX_STOP_QUIET 0x0002 /* don't display informative messages */ + + +/* + * Describes a TRAX channel (based on tpack). + */ +typedef struct { + tpack_channel chan; /* channel structure header */ + /* Per TRAX unit information: */ + int trax_version; /* TRAX_ID_VER(id), one of TRAX_VER_xxx macros */ + unsigned long trax_tram_size; /* size of trace RAM in bytes */ + int trax_erratum10; /* set if TRAX 1.0 erratum workarounds needed */ + int trax_erratum20; /* set if TRAX 2.0 erratum workaround needed (PR 22161)*/ + int trax_erratum20_size; + int trax_has_busy; /* has trace-busy feature */ + int trax_has_atb; /* has ATB feature */ + /*FIXME: add various features: coresight regs (don't call it that), APB, ATB, TRAM, ... */ +} trax_channel; + + +/* Prototypes: */ + +/* TRAX Protocol API: */ +extern int trax_read_register(tpack_channel *tchan, int regno, unsigned *value); +extern int trax_write_register(tpack_channel *tchan, int regno, unsigned value); +extern int trax_read_memory(tpack_channel *tchan, int address, int size, unsigned char *pdata); +extern int trax_fill_memory(tpack_channel *tchan, int address, int size, tpack_u32 pattern); +extern int trax_enumerate_devices(tpack_channel *tchan, int * buf, int * size); + +/* TRAX Network API: */ +extern unsigned long trax_ram_size(tpack_channel *traxchan); +extern unsigned long trax_ram_size_addr(tpack_channel *traxchan); +extern int trax_create_tracefile(tpack_channel *traxchan, int size, unsigned char * data, + char *filename, int hflags, const char *toolver); +extern int trax_memaccess_safe(tpack_channel *traxchan, const char *what); +extern int trax_start(tpack_channel *traxchan, int flags); +extern int trax_stop(tpack_channel *traxchan, int flags); +extern int trax_halt(tpack_channel *traxchan, int flags); +extern int trax_save(tpack_channel *traxchan, char *filename, int flags, const char *toolver, int erratum); + +/* TRAX Misc API (no network dependencies): */ +int trax_fixed_hw(unsigned * regs); +extern int trax_display_id(unsigned id, const char *prefix); +extern int trax_display_summary(unsigned id, + unsigned status, + unsigned control, + unsigned address, + unsigned delay, + unsigned trigger, + unsigned match, + unsigned startaddr, + unsigned endaddr, + const char *prefix); + +/* Other: */ + +#endif /* _TRAX_API_H_ */ + diff --git a/tools/sdk/include/esp32/xtensa/trax-core-config.h b/tools/sdk/include/esp32/xtensa/trax-core-config.h new file mode 100755 index 00000000..42a03334 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/trax-core-config.h @@ -0,0 +1,144 @@ +/* Definitions for Xtensa processor config info needed for TRAX. + + Copyright (c) 2005-2011 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef TRAX_CORE_CONFIG_H +#define TRAX_CORE_CONFIG_H + +#include "xtensa-params.h" + +/* + * Vector Enumerations. + */ + +/* These must match the LX2.0 and later traceport spec: */ +#define VEC_NO_VECTOR 0 +#define VEC_FIRST VEC_RESET /* first valid vector */ +#define VEC_RESET 1 +#define VEC_DEBUG 2 +#define VEC_NMI 3 +#define VEC_USER 4 +#define VEC_KERNEL 5 +#define VEC_DOUBLE 6 +#define VEC_MEMERR 7 +#define VEC_RESERVED8 8 +#define VEC_RESERVED9 9 +#define VEC_WINO4 10 +#define VEC_WINU4 11 +#define VEC_WINO8 12 +#define VEC_WINU8 13 +#define VEC_WINO12 14 +#define VEC_WINU12 15 +#define VEC_INTLEVEL2 16 +#define VEC_INTLEVEL3 17 +#define VEC_INTLEVEL4 18 +#define VEC_INTLEVEL5 19 +#define VEC_INTLEVEL6 20 +/* These are internal, i.e. don't appear like this on traceport: */ +#define VEC_DEBUG_OCD 21 +#define VEC_UNKNOWN 22 +/* Enumerations 23 through 31 are also reserved, but putting */ +/* placeholders here seems wasteful and unnecessary. */ +#define VEC_COUNT 23 + +/* Other branch (change-of-PC-flow) type encodings; + * if PC changes due to an exception or interrupt vector, + * one of the VEC_* values above is used, otherwise + * (or if it's unknown whether it's due to an exception/interrupt) + * one of the following is used: */ + +#define BRANCH_IS_VEC(n) ((n) < VEC_COUNT) /* is known to be except/interrupt? */ +#define BRANCH_OR_VEC 24 /* unknown type of branch (branch/exception/interrupt/etc) */ +#define BRANCH_UNKNOWN 25 /* unknown type of branch (anything but except/interrupt) */ +#define BRANCH_UNKNOWN_ERR 26 /* like BRANCH_UNKNOWN with known error (non-branch instr) */ +#define BRANCH_LOOPBACK 28 /* zero-overhead loopback (from LEND to LBEG) */ +#define BRANCH_CONDTAKEN 29 /* conditional branch taken (or LOOP{NEZ,GTZ} loop skip) */ +#define BRANCH_JUMP 30 /* jump (unconditional branch, i.e. J or JX) */ +#define BRANCH_IS_CALL(n) (((n) & ~3) == 32) /* is a function call? */ +#define BRANCH_CALL0 32 /* non-windowed function call (CALL0, CALLX0) */ +#define BRANCH_CALL4 33 /* windowed function call (CALL4, CALLX4) */ +#define BRANCH_CALL8 34 /* windowed function call (CALL8, CALLX8) */ +#define BRANCH_CALL12 35 /* windowed function call (CALL12, CALLX12) */ +#define BRANCH_IS_RETURN(n) ((n) >= 36) /* is any kind of return? */ +#define BRANCH_IS_CALLRETURN(n) (((n) & ~1) == 36) /* is a function return? */ +#define BRANCH_RET 36 /* non-windowed function return (RET or RET.N) */ +#define BRANCH_RETW 37 /* windowed function return (RETW or RETW.N) */ +#define BRANCH_IS_EIRETURN(n) ((n) >= 38) /* is an except/inter. return? */ +#define BRANCH_RFE 38 /* RFE or RFUE */ +#define BRANCH_RFDE 39 /* RFDE */ +#define BRANCH_RFWO 40 /* RFWO */ +#define BRANCH_RFWU 41 /* RFWU */ +#define BRANCH_RFI_2 42 /* RFI 2 */ +#define BRANCH_RFI_3 43 /* RFI 3 */ +#define BRANCH_RFI_4 44 /* RFI 4 */ +#define BRANCH_RFI_5 45 /* RFI 5 */ +#define BRANCH_RFI_6 46 /* RFI 6 */ +#define BRANCH_RFI_NMI 47 /* RFI NMILEVEL */ +#define BRANCH_RFI_DEBUG 48 /* RFI DEBUGLEVEL */ +#define BRANCH_RFME 49 /* RFME */ +#define BRANCH_COUNT 50 /* (number of defined BRANCH_xxx values) */ + + + +typedef struct { + unsigned vaddr; + unsigned vaddr2; /* for static vectors only (reloc vectors option) */ + int is_configured; +} trax_vector_t; + + +/* + * This structure describes those portion of a Tensilica processor's + * configuration that are useful for trace. + */ +typedef struct { + char ** isa_dlls; + char * core_name; /* (XPG core name, not necessarily same as XTENSA_CORE) */ + int big_endian; /* 0 = little-endian, 1 = big-endian */ + int has_loops; /* 1 = zero overhead loops configured */ + int has_autorefill; /* 1 = TLB autorefill (MMU) configured */ + unsigned max_instr_size; /* in bytes (eg. 3, 4, 8, ...) */ + unsigned int_level_max; /* number of interrupt levels configured (without NMI) */ + int debug_level; /* debug intlevel, 0 if debug not configured */ + int nmi_level; /* NMI intlevel, 0 if NMI not configured */ + unsigned targethw_min; /* min. targeted hardware version (XTENSA_HWVERSION_) */ + unsigned targethw_max; /* max. targeted hardware version (XTENSA_HWVERSION_) */ + int reloc_vectors; /* 0 = fixed vectors, 1 = relocatable vectors */ + int statvec_select; /* 0 = stat vec base 0, 1 = stat vec base 1 (SW default) */ + int vecbase_align; /* number of bits to align VECBASE (32 - bits in VECBASE) */ + unsigned statvec_base0; /* static vector base 0 */ + unsigned statvec_base1; /* static vector base 1 */ + unsigned vecbase_reset; /* reset value of VECBASE */ + trax_vector_t vectors[VEC_COUNT]; /* all vectors... */ +} trax_core_config_t; + + +/* Globals: */ +//extern const char * const trax_vector_short_names[/*VEC_COUNT*/]; // nobody uses this one +extern const char * const trax_vector_names[/*VEC_COUNT*/]; + +/* Prototypes: */ +extern int trax_read_params (trax_core_config_t *c, xtensa_params p); +extern int trax_vector_from_address(trax_core_config_t *config, unsigned long vaddr, unsigned long *vecbases); + +#endif /* TRAX_CORE_CONFIG_H */ + diff --git a/tools/sdk/include/esp32/xtensa/trax-proto.h b/tools/sdk/include/esp32/xtensa/trax-proto.h new file mode 100755 index 00000000..41d5c9fd --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/trax-proto.h @@ -0,0 +1,91 @@ +/* This file contains functions that are hidden from the user. These are + * protocol specific functions used to read and write TRAX registers + * and the trace memory + */ + +/* + * Copyright (c) 2012-2013 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef _TRAX_PROTO_H +#define _TRAX_PROTO_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Function to read register + * + * regno : The register number to be read (not ERI addressed) + * data : Location where the read value is kept + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_read_register_eri (int regno, unsigned *data); + +/* Function to write a value into a register + * + * regno : The register number to be written (not ERI addressed) + * value : The value to be written at that register location + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_write_register_eri (int regno, unsigned value); + +/* Function to read memory + * + * address : Address of the TraceRAM memory, each location has a word + * len : Amount of memory in bytes, to be read + * data : buffer in which the read memory is stored + * final_address: Next address to be read in the following call to this + * function (trace save mechanism) + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_read_memory_eri (unsigned address, int len, int *data, + unsigned *final_address); + +/* Function to write a value to the memory address + * + * address : Address of the TraceRAM memory + * value : The value to be written inside that location + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_write_memory_eri (int address, unsigned value); + +/* Function to write to a subfield of the register. + * Called by set and show parameter functions. + * + * regno : Register number + * regmask : Mask in order to toggle appropriate bits + * value : Value to be written in the masked location + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_write_register_field_eri (int regno, unsigned regmask, + unsigned value); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/esp32/xtensa/trax-util.h b/tools/sdk/include/esp32/xtensa/trax-util.h new file mode 100755 index 00000000..123ac366 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/trax-util.h @@ -0,0 +1,63 @@ +/* This file contains utility functions that can be used for polling TRAX + * or executing higher level save functionality + * It assumes that print subroutines and file I/O routines are available + * on the system + */ + +/* + * Copyright (c) 2012-2013 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _TRAX_UTIL_H +#define _TRAX_UTIL_H + + +#ifdef __cplusplus +extern "C" { +#endif + +/* User can use this function if he wants to generate a tracefile output. + * Internally it calls trax_get_trace in a loop until it realizes that + * the entire trace has been read. + * + * context : pointer to structure which contains information about the + * current TRAX session + * filename : user specified output trace file name. If the file does not + * exist, it would create the new file, else would append to it + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_save (trax_context *context, char *filename); + +/* Displays a brief machine readable status. + * + * context : pointer to structure which contains information about the + * current TRAX session + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_poll (trax_context *context); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/esp32/xtensa/trax.h b/tools/sdk/include/esp32/xtensa/trax.h new file mode 100755 index 00000000..47049c51 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/trax.h @@ -0,0 +1,409 @@ +/* Header file for TRAX control Library */ + +/* + * Copyright (c) 2012-2013 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _TRAX_H +#define _TRAX_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define TRAX_STOP_HALT 0x0001 +#define TRAX_STOP_QUIET 0x0002 + +/* Flag values to indicate if the user wanted to reverse the pcstop + * parameters */ +#define TRAX_PCSTOP_REVERSE 0x0001 +#define TRAX_PCSTOP_NO_REVERSE 0x0000 + +/* Indicating whether postsize should be in terms of bytes, instructions + * or percentage of trace size captured */ +#define TRAX_POSTSIZE_BYTES 0x0000 +#define TRAX_POSTSIZE_INSTR 0x0001 +#define TRAX_POSTSIZE_PERCENT 0x0002 + +/* Size of the header inside the trace file */ +#define TRAX_HEADER_SIZE 256 + +/* Minimum size between start and end addresses */ +#define TRAX_MIN_TRACEMEM 64 + +/* For basic debugging */ +#define DEBUG 0 + +#include + +#define ffs(i) __builtin_ffs(i) + +/* Data structures */ + +/* Represents the context of the TRAX unit and the current TRAX session. + * To be used by set and show function calls to set and show appropriate + * parameters of appropriate TRAX unit. + */ + +typedef struct { + int trax_version; /* TRAX PC version information */ + unsigned long trax_tram_size; /* If trace RAM is present,size of it */ + int hflags; /* Flags that can be used to debug, + print info, etc. */ + int address_read_last; /* During saving of the trace, this + indicates the address from which + the current trace reading must + resume */ + unsigned long bytes_read; /* bytes read uptil now */ + unsigned long total_memlen; /* Total bytes to be read based on the + trace collected in the trace RAM */ + bool get_trace_started; /* indicates that the first chunk of + bytes (which include the header) has + been read */ +} trax_context; + + +/* -----------------------TRAX Initialization ------------------------------*/ + +/* Initializing the trax context. Reads registers and sets values for version, + * trace RAM size, total memory length, etc. Most of the other values are + * initialized to their default case. + * + * context : pointer to structure which contains information about the + * current TRAX session + * + * returns : 0 if successful, -1 if unsuccessful, -2 if ram_size if + * incorrect + */ +int trax_context_init_eri (trax_context *context); + +/* -----------------Starting/Stopping TRAX session -------------------------*/ + +/* Start tracing with current parameter setting. If tracing is already in + * progress, an error is reported. Otherwise, tracing starts and any unsaved + * contents of the TraceRAM is discarded + * + * context : pointer to structure which contains information about the + * current TRAX session + * returns : 0 if successful, 1 if trace is already active, + * -1 if unsuccessful + */ +int trax_start (trax_context *context); + +/* This command initiates a stop trigger or halts a trace session based of the + * value of the flag parameter passed. In case stop trigger is initiated, any + * selected post-stop-trigger capture proceeds normally. + * If trace capture was not in progress, or a stop was already triggered, the + * return value indicates appropriately. + * + * context : pointer to structure which contains information about the + * current TRAX session + * flags : To differentiate between stopping trace without any + * post-size-trigger capture (trax_halt) or with that. + * A zero value would stop the trace based on trigger and a + * value of one would halt it + * + * returns : 0 if successful, 1 if already stopped, -1 if unsuccessful + */ +int trax_stop_halt (trax_context *context, int flags); + +/* Resets the TRAX parameters to their default values which would internally + * involve resetting the TRAX registers. To invoke another trace session or + * reset the current tracing mechanism, this function needs to be called as + * it resets parameters of the context that deal with tracing information + * + * context : pointer to structure which contains information about the + * current TRAX session + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_reset (trax_context *context); + +/* ---------------Set/Get several TRAX parameters --------------------------*/ + +/* Sets the start address and end address (word aligned) of the trace in the + * TraceRAM. Care must be taken to ensure that the difference between the + * start and the end addresses is atleast TRAX_MIN_TRACEMEM bytes. If not, + * the values are reset to default, which is 0 for startaddr and + * traceRAM_words -1 for endaddr + * + * context : pointer to structure which contains information about the + * current TRAX session + * startaddr : value to which the start address must be set. Can be + * any value between 0 - (traceRAM_words - 1) + * endaddr : value to which the end address must be set. Can be any value + * between 0 - (traceRAM_words - 1) + * + * returns : 0 if successful, -1 if unsuccessful, -2 if the difference + * between the start and end addresses is less than + * TRAX_MIN_TRACEMEM bytes or if they are passed incorrect + * values, -3 if memory shared option is not configured, in + * which case, start and end addresses are set to default + * values instead of those passed by the user + */ +int trax_set_ram_boundaries (trax_context *context, unsigned startaddr, + unsigned endaddr); + +/* Shows the start address and end address(word aligned) of the trace in the + * TraceRAM. If incorrect, the startaddress and the endaddress values are + * set to default, i.e. 0 for startaddr and traceRAM_words - 1 for endaddr + * + * context : pointer to structure which contains information about the + * current TRAX session + * startaddr : pointer to value which will contain the start address + * endaddr : pointer to value which will contain the end address + * + * returns : 0 if successful, -1 if unsuccessful + * + */ +int trax_get_ram_boundaries (trax_context *context, unsigned *startaddr, + unsigned *endaddr); + +/* Selects stop trigger via cross-trigger input + * + * context : pointer to structure which contains information about the + * current TRAX session + * value : 0 = off (reset value), 1 = on + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_set_ctistop (trax_context *context, unsigned value); + +/* Shows if stop-trigger via cross-trigger input is off or on + * + * context : pointer to structure which contains information about the + * current TRAX session + * returns : 0 if off, 1 if on, -1 if unsuccessful + */ +int trax_get_ctistop (trax_context *context); + +/* Selects stop trigger via processor-trigger input + * + * context : pointer to structure which contains information about the + * current TRAX session + * value : 0 = off (reset value), 1 = on + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_set_ptistop (trax_context *context, unsigned value); + +/* Shows if stop trigger visa processor-trigger input is off or on + * + * context : pointer to structure which contains information about the + * current TRAX session + * returns : 0 if off, 1 if on, -1 if unsuccessful + */ +int trax_get_ptistop (trax_context *context); + +/* Reports cross trigger output state + * + * context : pointer to structure which contains information about the + * current TRAX session + * returns : 0 if CTO bit is reset, 1 if CTO bit is set + */ +int trax_get_cto (trax_context *context); + +/* Reports processor trigger output state + * + * context : pointer to structure which contains information about the + * current TRAX session + * returns : 0 if PTO bit is reset, 1 if PTO bit is set + */ +int trax_get_pto (trax_context *context); + +/* Selects condition that asserts cross trigger output + * + * context : pointer to structure which contains information about the + * current TRAX session + * option : 0 = off(reset value)/1 = ontrig/2 = onhalt + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_set_ctowhen (trax_context *context, int option); + +/* Shows condition that asserted cross trigger output. It can be + * any of: ontrig or onhalt or even off + * + * context : pointer to structure which contains information about the + * current TRAX session + * + * returns : 0 if off, 1 if ontrig, 2 if onhalt, -1 if unsuccessful + */ +int trax_get_ctowhen (trax_context *context); + +/* Selects condition that asserts processor trigger output + * + * context : pointer to structure which contains information about the + * current TRAX session + * option : 0 = off(reset value)/1 = ontrig/2 = onhalt + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_set_ptowhen (trax_context *context, int option); + + +/* Shows condition that asserted processor trigger output. It can be + * any of: ontrig or onhalt or even off + * + * context : pointer to structure which contains information about the + * current TRAX session + * returns : 0 if off, 1 if ontrig, 2 if onhalt, -1 if unsuccessful + */ +int trax_get_ptowhen (trax_context *context); + +/* Selects the trace synchronization message period. + * If ATEN enabled, we cannot allow syncper to be off, set it to reset value. + * Also, if no trace RAM, and ATEN enabled, set syncper to be reset value + * i.e. 256. A value of 1 i.e. on indicates that internally the message + * frequency is set to an optimal value. This option should be preferred + * if the user is not sure what message frequency option to set for the + * trace session. + * + * context : pointer to structure which contains information about the + * current TRAX session + * option : 0 = off, 1 = on, -1 = auto, 8, 16, 32, 64, 128, + * 256 (reset value) + * + * returns : 0 if successful, -1 if unsuccessful, -2 if incorrect + * arguments + */ +int trax_set_syncper (trax_context *context, int option); + +/* Shows trace synchronization message period. Can be one of: + * off, on, auto, 8, 16, 32, 64, 128, 256 (reset value) + * + * context : pointer to structure which contains information about the + * current TRAX session + * returns : value of sync period, 0 if off, -1 if unsuccessful + */ +int trax_get_syncper (trax_context *context); + +/* Selects stop trigger via PC match. Specifies the address or + * address range to match against program counter. Trace stops when the + * processor executes an instruction matching the specified address + * or range. + * + * context : pointer to structure which contains information about the + * current TRAX session + * index : indicates the number of stop trigger (currently there is + * only one i.e. index = 0) + * startaddress : start range of the address at which the stop trigger + * should be activated + * enaddress : end range of the address at which the stop trigger should + * be activated + * flags : If non-zero, this inverts the range. i.e. trace stops + * when the processor executes an instruction that does not + * match the specified address or range + * + * returns : 0 if successful, -1 if unsuccessful, -2 if incorrect + * arguments (unaligned) + * + * Note : For the current version of TRAX library, the endaddress and + * startaddress can differ by at most 31 bytes and the total + * range i.e. (endaddress - startaddress + 1) has to be a power + * of two + */ +int trax_set_pcstop (trax_context *context, int index, unsigned long startaddress, + unsigned long endaddress, int flags); + +/* Shows the stop trigger via PC match + * + * context : pointer to structure which contains information about the + * current TRAX session + * index : container of information about the number of stop triggers + * startaddress : container of start range of stop trigger + * endaddress : container of end range of stop trigger + * flags : container of information whcih indicates whether the + * pc stop range is inverted or not. + * + * returns : 0 if successful, -1 if unsuccessful + */ +int trax_get_pcstop (trax_context *context, int *index, + unsigned long *startaddress, + unsigned long *endaddress, int *flags); + +/* This function is used to set the amount of trace to be captured past + * the stop trigger. + * + * context : pointer to structure which contains information about the + * current TRAX session + * count_unit : contains the count of units (instructions or bytes) to be + * captured post trigger. If 0, it implies that this is off + * unit : unit of measuring the count. 0 is bytes, 1 is instructions + * 2 is percentage of trace + * + * returns : 0 if successful, -1 if unsuccessful, -2 if incorrect + * arguments + * + */ +int trax_set_postsize (trax_context *context, int count_unit, int unit); + +/* This function shows the amount of TraceRAM in terms of the number of + * instructions or bytes, captured post the stop trigger + * + * context : pointer to structure which contains information about the + * current TRAX session + * count_unit : will contain the count of units(instructions or bytes) post + * trigger + * unit : will contain information about the events that are counted + * 0 implies that the traceRAM words consumed are counted and + * 1 implies that the target processor instructions executed and + * excpetions/interrupts taken are counted + * + * returns : 0 if postsize was got successfully, -1 if unsuccessful + */ +int trax_get_postsize (trax_context *context, int *count_unit, int *unit); + +/* -------------------------- TRAX save routines ---------------------------*/ + +/* This function should be called by the user to return a chunk of + * bytes in buf. It can be a lower layer function of save, or can be + * called by the user explicitly. If bytes_actually_read contains a 0 + * after a call to this function has been made, it implies that the entire + * trace has been read successfully. + * + * context : pointer to structure which contains information about + * the current TRAX session + * buf : Buffer that is allocated by the user, all the trace + * data read would be put in this buffer, which can then + * be used to generate a tracefile. + * The first TRAX_HEADER_SIZE of the buffer will always + * contain the header information. + * bytes_to_be_read : Indicates the bytes the user wants to read. The first + * invocation would need this parameter to be + * TRAX_HEADER_SIZE at least. + * + * returns : bytes actually read during the call to this function. + * 0 implies that all the bytes in the trace have been + * read, -1 if unsuccessful read/write of + * registers or memory, -2 if trace was active while + * this function was called, -3 if user enters + * bytes_to_be_read < TRAX_HEADER_SIZE in the first + * pass + */ +int trax_get_trace (trax_context *context, void *buf, + int bytes_to_be_read); +#ifdef __cplusplus +} +#endif + +#endif /* _TRAX_H */ diff --git a/tools/sdk/include/esp32/xtensa/traxfile.h b/tools/sdk/include/esp32/xtensa/traxfile.h new file mode 100755 index 00000000..4afc926a --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/traxfile.h @@ -0,0 +1,62 @@ +/* TRAX file header definition. + + Copyright (c) 2007-2012 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + + +#define TRAX_FHEAD_MAGIC "TRAXdmp" +#define TRAX_FHEAD_VERSION 1 + +/* Header flags: */ +#define TRAX_FHEADF_OCD_ENABLED 0x00000001 /* set if OCD was enabled while capturing trace */ +#define TRAX_FHEADF_TESTDUMP 0x00000002 /* set if is a test file + (from 'memsave' instead of 'save') */ +#define TRAX_FHEADF_OCD_ENABLED_WHILE_EXIT 0x00000004 /* set if OCD was enabled while capturing trace and + we were exiting the OCD mode */ + +/* Header at the start of a TRAX dump file. */ +typedef struct { + char magic[8]; /* 00: "TRAXdmp\0" (TRAX_FHEAD_MAGIC) */ + char endianness; /* 08: 0=little-endian, 1=big-endian */ + char version; /* 09: TRAX_FHEAD_VERSION */ + char reserved0[2]; /* 0A: ... */ + unsigned filesize; /* 0C: size of the trace file, including this header */ + unsigned trace_ofs; /* 10: start of trace output, byte offset from start of header */ + unsigned trace_size; /* 14: size of trace output in bytes */ + unsigned dumptime; /* 18: date/time of capture save (secs since 1970-01-01), 0 if unknown */ + unsigned flags; /* 1C: misc flags (TRAX_FHEAD_F_xxx) */ + char username[16]; /* 20: user doing the capture/save (up to 15 chars) */ + char toolver[24]; /* 30: tool + version used for capture/save (up to 23 chars) */ + char reserved2[40]; /* 48: (reserved - could be hostname used for dump (up to 39 chars)) */ + unsigned configid[2]; /* 70: processor ConfigID values, 0 if unknown */ + unsigned ts_freq; /* 78: timestamp frequency, 0 if not specified */ + unsigned reserved3; /* 7C: (reserved) */ + unsigned id; /* 80: TRAX registers at time of save (0 if not read) */ + unsigned control; + unsigned status; + unsigned reserved4; /* Data register (should not be read) */ + unsigned address; + unsigned trigger; + unsigned match; + unsigned delay; + unsigned trax_regs[24]; /*100: (total size) -- dummy allocation (FIXME) */ +} trax_file_header; + diff --git a/tools/sdk/include/esp32/xtensa/traxreg.h b/tools/sdk/include/esp32/xtensa/traxreg.h new file mode 100755 index 00000000..282ba1fe --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/traxreg.h @@ -0,0 +1,199 @@ +/* TRAX register definitions + + Copyright (c) 2006-2012 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef _TRAX_REGISTERS_H_ +#define _TRAX_REGISTERS_H_ + +#define SHOW 1 +#define HIDE 0 + +#define RO 0 +#define RW 1 + +/* TRAX Register Numbers (from possible range of 0..127) */ +#if 0 +#define TRAXREG_ID 0 +#define TRAXREG_CONTROL 1 +#define TRAXREG_STATUS 2 +#define TRAXREG_DATA 3 +#define TRAXREG_ADDRESS 4 +#define TRAXREG_TRIGGER 5 +#define TRAXREG_MATCH 6 +#define TRAXREG_DELAY 7 +#define TRAXREG_STARTADDR 8 +#define TRAXREG_ENDADDR 9 +/* Internal use only (unpublished): */ +#define TRAXREG_P4CHANGE 16 +#define TRAXREG_P4REV 17 +#define TRAXREG_P4DATE 18 +#define TRAXREG_P4TIME 19 +#define TRAXREG_PDSTATUS 20 +#define TRAXREG_PDDATA 21 +#define TRAXREG_STOP_PC 22 +#define TRAXREG_STOP_ICNT 23 +#define TRAXREG_MSG_STATUS 24 +#define TRAXREG_FSM_STATUS 25 +#define TRAXREG_IB_STATUS 26 +#define TRAXREG_MAX 27 +#define TRAXREG_ITCTRL 96 +#endif +/* The registers above match the NAR addresses. So, their values are used for NAR access */ + +/* TRAX Register Fields */ + +/* TRAX ID register fields: */ +#define TRAX_ID_PRODNO 0xf0000000 /* product number (0=TRAX) */ +#define TRAX_ID_PRODOPT 0x0f000000 /* product options */ +#define TRAX_ID_MIW64 0x08000000 /* opt: instruction width */ +#define TRAX_ID_AMTRAX 0x04000000 /* opt: collection of options, + internal (VER_2_0 or later)*/ +#define TRAX_ID_MAJVER(id) (((id) >> 20) & 0x0f) +#define TRAX_ID_MINVER(id) (((id) >> 17) & 0x07) +#define TRAX_ID_VER(id) ((TRAX_ID_MAJVER(id)<<4)|TRAX_ID_MINVER(id)) +#define TRAX_ID_STDCFG 0x00010000 /* standard config */ +#define TRAX_ID_CFGID 0x0000ffff /* TRAX configuration ID */ +#define TRAX_ID_MEMSHARED 0x00001000 /* Memshared option in TRAX */ +#define TRAX_ID_FROM_VER(ver) ((((ver) & 0xf0) << 16) | (((ver) & 0x7) << 17)) +/* Other TRAX ID register macros: */ +/* TRAX versions of interest (TRAX_ID_VER(), ie. MAJVER*16 + MINVER): */ +#define TRAX_VER_1_0 0x10 /* RA */ +#define TRAX_VER_1_1 0x11 /* RB thru RC-2010.1 */ +#define TRAX_VER_2_0 0x20 /* RC-2010.2, RD-2010.0, + RD-2011.1 */ +#define TRAX_VER_2_1 0x21 /* RC-2011.3 / RD-2011.2 and + later */ +#define TRAX_VER_3_0 0x30 /* RE-2012.0 */ +#define TRAX_VER_3_1 0x31 /* RE-2012.1 */ +#define TRAX_VER_HUAWEI_3 TRAX_VER_3_0 /* For Huawei, PRs: 25223, 25224 + , 24880 */ + + +/* TRAX version 1.0 requires a couple software workarounds: */ +#define TRAX_ID_1_0_ERRATUM(id) (TRAX_ID_VER(id) == TRAX_VER_1_0) +/* TRAX version 2.0 requires software workaround for PR 22161: */ +#define TRAX_ID_MEMSZ_ERRATUM(id) (TRAX_ID_VER(id) == TRAX_VER_2_0) + +/* TRAX Control register fields: */ +#define TRAX_CONTROL_TREN 0x00000001 +#define TRAX_CONTROL_TRSTP 0x00000002 +#define TRAX_CONTROL_PCMEN 0x00000004 +#define TRAX_CONTROL_PTIEN 0x00000010 +#define TRAX_CONTROL_CTIEN 0x00000020 +#define TRAX_CONTROL_TMEN 0x00000080 /* 2.0+ */ +#define TRAX_CONTROL_CNTU 0x00000200 +#define TRAX_CONTROL_BIEN 0x00000400 +#define TRAX_CONTROL_BOEN 0x00000800 +#define TRAX_CONTROL_TSEN 0x00000800 +#define TRAX_CONTROL_SMPER 0x00007000 +#define TRAX_CONTROL_SMPER_SHIFT 12 +#define TRAX_CONTROL_PTOWT 0x00010000 +#define TRAX_CONTROL_CTOWT 0x00020000 +#define TRAX_CONTROL_PTOWS 0x00100000 +#define TRAX_CONTROL_CTOWS 0x00200000 +#define TRAX_CONTROL_ATID 0x7F000000 /* 2.0+, amtrax */ +#define TRAX_CONTROL_ATID_SHIFT 24 +#define TRAX_CONTROL_ATEN 0x80000000 /* 2.0+, amtrax */ + +#define TRAX_CONTROL_PTOWS_ER 0x00020000 /* For 3.0 */ +#define TRAX_CONTROL_CTOWT_ER 0x00100000 /* For 3.0 */ + +#define TRAX_CONTROL_ITCTO 0x00400000 /* For 3.0 */ +#define TRAX_CONTROL_ITCTIA 0x00800000 /* For 3.0 */ +#define TRAX_CONTROL_ITATV 0x01000000 /* For 3.0 */ + + +/* TRAX Status register fields: */ +#define TRAX_STATUS_TRACT 0x00000001 +#define TRAX_STATUS_TRIG 0x00000002 +#define TRAX_STATUS_PCMTG 0x00000004 +#define TRAX_STATUS_BUSY 0x00000008 /* ER ??? */ +#define TRAX_STATUS_PTITG 0x00000010 +#define TRAX_STATUS_CTITG 0x00000020 +#define TRAX_STATUS_MEMSZ 0x00001F00 +#define TRAX_STATUS_MEMSZ_SHIFT 8 +#define TRAX_STATUS_PTO 0x00010000 +#define TRAX_STATUS_CTO 0x00020000 + +#define TRAX_STATUS_ITCTOA 0x00400000 /* For 3.0 */ +#define TRAX_STATUS_ITCTI 0x00800000 /* For 3.0 */ +#define TRAX_STATUS_ITATR 0x01000000 /* For 3.0 */ + + +/* TRAX Address register fields: */ +#define TRAX_ADDRESS_TWSAT 0x80000000 +#define TRAX_ADDRESS_TWSAT_SHIFT 31 +#define TRAX_ADDRESS_TOTALMASK 0x00FFFFFF +// !!! VUakiVU. added for new TRAX: +#define TRAX_ADDRESS_WRAPCNT 0x7FE00000 /* version ???... */ +#define TRAX_ADDRESS_WRAP_SHIFT 21 + +/* TRAX PCMatch register fields: */ +#define TRAX_PCMATCH_PCML 0x0000001F +#define TRAX_PCMATCH_PCML_SHIFT 0 +#define TRAX_PCMATCH_PCMS 0x80000000 + +/* Compute trace ram buffer size (in bytes) from status register: */ +#define TRAX_MEM_SIZE(status) (1L << (((status) & TRAX_STATUS_MEMSZ) >> TRAX_STATUS_MEMSZ_SHIFT)) + +#if 0 +/* Describes a field within a register: */ +typedef struct { + const char* name; +// unsigned width; +// unsigned shift; + char width; + char shift; + char visible; /* 0 = internal use only, 1 = shown */ + char reserved; +} trax_regfield_t; +#endif + +/* Describes a TRAX register: */ +typedef struct { + const char* name; + unsigned id; + char width; + char visible; + char writable; + char reserved; + //const trax_regfield_t * fieldset; +} trax_regdef_t; + + +extern const trax_regdef_t trax_reglist[]; +extern const signed char trax_readable_regs[]; + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prototypes: */ +extern int trax_find_reg(char * regname, char **errmsg); +extern const char * trax_regname(int regno); + +#ifdef __cplusplus +} +#endif + +#endif /* _TRAX_REGISTERS_H_ */ + diff --git a/tools/sdk/include/esp32/xtensa/uart-16550-board.h b/tools/sdk/include/esp32/xtensa/uart-16550-board.h new file mode 100755 index 00000000..8ef8af16 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/uart-16550-board.h @@ -0,0 +1,69 @@ +/******************************************************************************* +Copyright (c) 2006-2013 by Tensilica Inc. ALL RIGHTS RESERVED. +These coded instructions, statements, and computer programs are the +copyrighted works and confidential proprietary information of Tensilica Inc. +They may not be modified, copied, reproduced, distributed, or disclosed to +third parties in any manner, medium, or form, in whole or in part, without +the prior written consent of Tensilica Inc. +-------------------------------------------------------------------------------- + +uart-16550-board.h Board-specific UART info on these boards: + Avnet AV60 (XT-AV60) + Avnet AV110 (XT-AV110) + Avnet AV200 (XT-AV200) + Xilinx ML605 (XT-ML605) + Xilinx KC705 (XT-KC705) + +Interface between board-independent driver and board-specific header. + +This is used by a board-independent 16550 UART driver to obtain board-specific +information about 1 instance of the 16550 UART on the board, such as the device +register base address and spacing (a function of how the address lines are +connected on the board) and the frequency of the UART clock. The driver does +not refer directly to the board-specific header, which therefore is not +constrained to use macro names consistent with other boards. + +!! Must not contain any board-specific macro names (only UART specific). !! + +Included at compile-time via an include path specific to the board. + +These boards contain a single 16550 UART implemented on the FPGA. +Their clock frequency comes from the board's core clock (not its own crystal) +which depends on the core config so is not a constant. Obtained via the BSP. + +*******************************************************************************/ + +#ifndef _UART_16550_BOARD_H +#define _UART_16550_BOARD_H + +#include /* BSP API */ +#include /* Board info */ + + +/* Base address of UART's registers. */ +#ifdef UART16550_VADDR +#define UART_16550_REGBASE UART16550_VADDR +#endif + +/* +The UART's registers are connected at word addresses on these boards. +Each byte-wide register appears as the least-significant-byte (LSB) of the +word regardless of the endianness of the processor. +*/ +#define UART_16550_REGSPACING 4 +typedef unsigned uart16550_reg_t; + +/* UART Clock Frequency in Hz */ +#define UART_16550_XTAL_FREQ xtbsp_clock_freq_hz() + +/* UART Interrupt Number */ +#ifdef UART16550_INTNUM +#define UART_16550_INTNUM UART16550_INTNUM +#endif + + +/* Include generic information shared by all boards that use this device. */ +#include + +#endif /* _UART_16550_BOARD_H */ + diff --git a/tools/sdk/include/esp32/xtensa/uart-16550.h b/tools/sdk/include/esp32/xtensa/uart-16550.h new file mode 100755 index 00000000..c551c64c --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/uart-16550.h @@ -0,0 +1,152 @@ +/******************************************************************************* + + Copyright (c) 2006-2007 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- + +uart-16550.h Generic definitions for National Semiconductor 16550 UART + +This is used by board-support-packages with one or more 16550 compatible UARTs. +A BSP provides a base address for each instance of a 16550 UART on the board. + +Note that a 16552 DUART (Dual UART) is simply two instances of a 16550 UART. + +*******************************************************************************/ + +#ifndef _UART_16550_H_ +#define _UART_16550_H_ + +/* C interface to UART registers. */ +struct uart_dev_s { + union { + uart16550_reg_t rxb; /* DLAB=0: receive buffer, read-only */ + uart16550_reg_t txb; /* DLAB=0: transmit buffer, write-only */ + uart16550_reg_t dll; /* DLAB=1: divisor, LS byte latch */ + } w0; + union { + uart16550_reg_t ier; /* DLAB=0: interrupt-enable register */ + uart16550_reg_t dlm; /* DLAB=1: divisor, MS byte latch */ + } w1; + + union { + uart16550_reg_t isr; /* DLAB=0: interrupt status register, read-only */ + uart16550_reg_t fcr; /* DLAB=0: FIFO control register, write-only */ + uart16550_reg_t afr; /* DLAB=1: alternate function register */ + } w2; + + uart16550_reg_t lcr; /* line control-register, write-only */ + uart16550_reg_t mcr; /* modem control-regsiter, write-only */ + uart16550_reg_t lsr; /* line status register, read-only */ + uart16550_reg_t msr; /* modem status register, read-only */ + uart16550_reg_t scr; /* scratch regsiter, read/write */ +}; + + +#define _RXB(u) ((u)->w0.rxb) +#define _TXB(u) ((u)->w0.txb) +#define _DLL(u) ((u)->w0.dll) +#define _IER(u) ((u)->w1.ier) +#define _DLM(u) ((u)->w1.dlm) +#define _ISR(u) ((u)->w2.isr) +#define _FCR(u) ((u)->w2.fcr) +#define _AFR(u) ((u)->w2.afr) +#define _LCR(u) ((u)->lcr) +#define _MCR(u) ((u)->mcr) +#define _LSR(u) ((u)->lsr) +#define _MSR(u) ((u)->msr) +#define _SCR(u) ((u)->scr) + +typedef volatile struct uart_dev_s uart_dev_t; + +/* IER bits */ +#define RCVR_DATA_REG_INTENABLE 0x01 +#define XMIT_HOLD_REG_INTENABLE 0x02 +#define RCVR_STATUS_INTENABLE 0x04 +#define MODEM_STATUS_INTENABLE 0x08 + +/* FCR bits */ +#define _FIFO_ENABLE 0x01 +#define RCVR_FIFO_RESET 0x02 +#define XMIT_FIFO_RESET 0x04 +#define DMA_MODE_SELECT 0x08 +#define RCVR_TRIGGER_LSB 0x40 +#define RCVR_TRIGGER_MSB 0x80 + +/* AFR bits */ +#define AFR_CONC_WRITE 0x01 +#define AFR_BAUDOUT_SEL 0x02 +#define AFR_RXRDY_SEL 0x04 + +/* ISR bits */ +#define INT_STATUS(r) ((r)&1) +#define INT_PRIORITY(r) (((r)>>1)&0x7) + +/* LCR bits */ +#define WORD_LENGTH(n) (((n)-5)&0x3) +#define STOP_BIT_ENABLE 0x04 +#define PARITY_ENABLE 0x08 +#define EVEN_PARITY 0x10 +#define FORCE_PARITY 0x20 +#define XMIT_BREAK 0x40 +#define DLAB_ENABLE 0x80 + +/* MCR bits */ +#define _DTR 0x01 +#define _RTS 0x02 +#define _OP1 0x04 +#define _OP2 0x08 +#define LOOP_BACK 0x10 + +/* LSR Bits */ +#define RCVR_DATA_READY 0x01 +#define OVERRUN_ERROR 0x02 +#define PARITY_ERROR 0x04 +#define FRAMING_ERROR 0x08 +#define BREAK_INTERRUPT 0x10 +#define XMIT_HOLD_EMPTY 0x20 +#define XMIT_EMPTY 0x40 +#define FIFO_ERROR 0x80 +#define RCVR_READY(u) (_LSR(u)&RCVR_DATA_READY) +#define XMIT_READY(u) (_LSR(u)&XMIT_HOLD_EMPTY) + +/* MSR bits */ +#define _RDR 0x01 +#define DELTA_DSR 0x02 +#define DELTA_RI 0x04 +#define DELTA_CD 0x08 +#define _CTS 0x10 +#define _DSR 0x20 +#define _RI 0x40 +#define _CD 0x80 + + +/* Compute 16-bit divisor for baudrate generator, with rounding: */ +#define UART_DIVISOR(clock,baud) (((clock)/16 + (baud)/2)/(baud)) + +/* Prototypes of driver functions */ +extern void uart16550_init( uart_dev_t *u, unsigned baud, unsigned ndata, + unsigned parity, unsigned nstop ); +extern void uart16550_out( uart_dev_t *u, char c ); +extern char uart16550_in( uart_dev_t *u ); +extern unsigned uart16550_measure_sys_clk( uart_dev_t *u ); + +#endif /* _UART_16550_H_ */ diff --git a/tools/sdk/include/esp32/xtensa/udma.h b/tools/sdk/include/esp32/xtensa/udma.h new file mode 100755 index 00000000..a5feb777 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/udma.h @@ -0,0 +1,276 @@ +/* Customer ID=11656; Build=0x5f626; Copyright (c) 2005-2014 by Cadence Design Systems, Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of + * Cadence Design Systems, Inc. They may not be modified, copied, reproduced, + * distributed, or disclosed to third parties in any manner, medium, or form, + * in whole or in part, without the prior written consent of Cadence Design + * Systems Inc. + */ +#ifndef __UDMA_H__ +#define __UDMA_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Size of the uDMA descriptor */ +#define UDMA_DESC_STRUCT_SIZE 32 + +/* Request attribute is a bit vector passed to the udma functions - udma_copy, + * udma_2d_copy, udma_add_descs. + * Bit 0 : 1 - trigger an interrupt when done, else do nothing + * Bit 1 : 0 - retry the failed request; abort after programmer specified + * number of retries. Defaults to abort with no retries. + * 1 - abort the failed request (after retries) and all pending requests + */ +#define UDMA_DONE_INTERRUPT 0x1 +#define UDMA_ERROR_ABORT 0x0 +#define UDMA_ERROR_ABORT_ALL 0x2 + +/* Enum representing various udma error conditions, udma status, and + * return values + */ +typedef enum { + UDMA_OK = 0, + UDMA_ERROR_QUEUE_FULL = 1, + UDMA_ERROR_BAD_DESC = 2, + UDMA_ERROR_DRAM_CROSSING = 3, + UDMA_ERROR_PIF_ADDR_BUS = 4, + UDMA_ERROR_PIF_DATA_BUS = 5, + UDMA_REQ_PENDING = 6, + UDMA_REQ_DONE = 7, + UDMA_ERROR_BAD_REQUEST = 8, + UDMA_ERROR_INVALID_ARG = 11, + UDMA_ERROR_INIT = 12, + UDMA_ERROR_INTERNAL = -1 +} udma_status_t; + +#ifndef __UDMA_INTERNAL_H__ +/* Opaque structure describing a uDMA descriptor */ +struct udma_desc_struct { + char _[UDMA_DESC_STRUCT_SIZE]; +} __attribute__ ((aligned (UDMA_DESC_STRUCT_SIZE))); +#endif + +typedef struct udma_desc_struct udma_desc_t; + +/* Initialize the udma control structure, the uDMA registers with + * the descriptor queue addresses, and the uDMA sync and error interrupt + * handler. This function needs to be invoked prior to using the uDMA. + * + * xmp_udma_sync_intr : Processor interrupt number to flag udma done + * xmp_udma_error_intr : Processor interrupt number to flag udma error + * + * Returns UDMA_ERROR_INIT if there was an error during initialization else + * returns UDMA_OK. + */ +extern udma_status_t +udma_init(uint32_t xmp_udma_sync_intr, uint32_t xmp_udma_error_intr); + +/* Performs a copy of a linear block of size bytes from the src + * to the dest address. If the call returns UDMA_OK, status is set to + * UDMA_REQ_PENDING or UDMA_REQ_DONE. If there is a dma error, the error code, + * which could be one of UDMA_ERROR_BAD_DESC, UDMA_ERROR_DRAM_CROSSING, + * UDMA_ERROR_PIF_ADDR_BUS, UDMA_ERROR_PIF_DATA_BUS is returned in the status. + * Status is set to UDMA_REQ_DONE if the dma completes normally. + * On completion, the callback function is invoked with the callback_data + * and status as parameters. Note, the callback is always invoked even if + * there is a dma error. + * + * src : src address of the copy + * dest : dest address of the copy + * size : number of bytes to copy + * callback_data : optional data to be passed to callback_func + * callback_func : optional callback after copy is done + * request_attr : attribute defining how to process this request + * (see description of the request attribute in top of udma.h) + * status : track status of the copy; this gets also passed + * as the second argument to the callback_func + * + * Returns UDMA_ERROR_QUEUE_FULL if no more requests can be added, else + * returns UDMA_OK. + */ +extern udma_status_t +udma_copy(void *dest, + void *src, + size_t size, + void *callback_data, + void (*callback_func)(void *, udma_status_t *status), + uint32_t request_attr, + udma_status_t *status); + +/* Performs a copy of a 2D block of data from the src to the dest + * address. If the call returns UDMA_OK, status is set to UDMA_REQ_PENDING or + * UDMA_REQ_DONE. If there is a dma error, the error code, + * which could be one of UDMA_ERROR_BAD_DESC, UDMA_ERROR_DRAM_CROSSING, + * UDMA_ERROR_PIF_ADDR_BUS, UDMA_ERROR_PIF_DATA_BUS is returned in the status. + * Status is set to UDMA_REQ_DONE if the dma completes normally. + * On completion, the callback function is invoked with the callback_data + * and status as parameters. Note, the callback is always invoked even if + * there is a dma error. + * + * src : src address of the copy + * dest : dest address of the copy + * row_size : number of bytes per row to copy + * num_rows : number of rows to copy + * src_pitch : src pitch + * dest_pitch : dest pitch + * callback_data : optional data to be passed to callback_func + * callback_func : optional callback after copy is done + * request_attr : attribute defining how to process this request + * (see description of the request attribute in top of udma.h) + * status : track status of the copy; this gets also passed + * as the second argument to the callback_func + * + * Returns UDMA_ERROR_QUEUE_FULL if no more requests can be added, else + * returns UDMA_OK. + */ +extern udma_status_t +udma_2d_copy(void *dest, + void *src, + size_t row_size, + uint32_t num_rows, + uint32_t src_pitch, + uint32_t dest_pitch, + void *callback_data, + void (*callback_func)(void *, udma_status_t *status), + uint32_t request_attr, + udma_status_t *status); + +/* Process requests that are done. Any callbacks associated + * with the completed requests gets invoked. If there are any errors, + * the error request is (and any pending request based on the request attribute) + * cancelled and the error code is returned in the status associated with + * all such cancelled requests. Callbacks associated with the cancelled + * requests are also invoked. If all requests terminate normally, the status + * of the completed requests are set to UDMA_REQ_DONE. + * + * Returns void + */ +extern void +udma_process_requests(); + +/* Sets the udma max PIF block size + * + * max_block_size : max block size to be set + * + * Returns UDMA_ERROR_INVALID_ARG if block_size is > 3, else returns UDMA_OK + */ +udma_status_t +udma_set_max_block_size(uint32_t block_size); + +/* Sets the udma max outstanding PIF requests + * + * max_outstanding : max outstanding PIF requests + * + * Returns UDMA_ERROR_INVALID_ARG if max_outstanding is not between 1 and 16 + * else returns UDMA_OK + */ +udma_status_t +udma_set_max_outstanding(uint32_t max_outstanding); + +/* Initialize a uDMA descriptor using the copy parameters. The descriptor + * is then queued separately using udma_add_desc + * + * src : src address of the copy + * dest : dest address of the copy + * row_size : number of bytes per row to copy + * num_rows : number of rows to copy + * src_pitch : src pitch + * dest_pitch : dest pitch + * notify_with_interrupt : If 1, interrupt when dma is done with this descriptor + * if 0, do nothing, else undefined + * + * Returns void + */ +extern void +udma_set_desc(void *src, + void *dest, + size_t row_size, + uint32_t num_rows, + uint32_t src_pitch, + uint32_t dest_pitch, + uint32_t notify_with_interrupt, + udma_desc_t *desc); + +/* Add multiple uDMA descriptors to the descriptor queue. If the call returns + * UDMA_OK, the status is set to UDMA_REQ_PENDING or UDMA_REQ_DONE. + * If there is a dma error, the error code, which could be one of + * UDMA_ERROR_BAD_DESC, UDMA_ERROR_DRAM_CROSSING, UDMA_ERROR_PIF_ADDR_BUS, + * UDMA_ERROR_PIF_DATA_BUS is returned in the status. Status is set + * to UDMA_REQ_DONE, if the dma completes normally. + * On completion, the callback function is invoked with the callback_data + * and status as parameters. Note, the callback is always invoked even if + * there is a dma error. + * + * desc : descriptors to be added + * num_desc : number of descriptors to be added + * callback_data : optional data to be passed to callback_func + * callback_func : optional callback after copy is done + * request_attr : attribute defining how to process this request + * (see description of the request attribute in top of udma.h) + * Note, bit 0 (for enabling interrupt) is ignored in this call. + * To interrupt on dma completion, set the + * notify_with_interrupt parameter when creating descriptors + * using udma_set_desc. + * status : track status of the copy; this gets also passed + * as the second argument to the callback_func + * + * Returns UDMA_ERROR_QUEUE_FULL if no more descriptors can be added, + * UDMA_ERROR_INVALID_ARG if num_descs == 0, else return UDMA_OK + */ +udma_status_t +udma_add_descs(udma_desc_t *descs, + uint32_t num_descs, + void *callback_data, + void (*callback_func)(void *, udma_status_t *status), + uint32_t request_attr, + udma_status_t *status); + +/* Wait for udma copy request to complete. Could spin wait or goto waiti + * based on the sleep_wait parameter. Once the request is done, the callback + * associated with this request and any prior completed requests are handled. + * Error code, if any, is returned in the status s, else s is set to + * UDMA_REQ_DONE. + * + * s : status to wait for + * sleep_wait : sleep wait if true, else spin waits + * + * Returns void + */ +extern void +udma_wait_request(volatile udma_status_t *s, uint32_t sleep_wait); + +/* Inlined function to set the src, dest address of the descriptor + * + * src : src address of the uDMA + * dest : dest address of the uDMA + * desc : descriptor to be modified + * + * Returns void + */ +void static inline +udma_set_desc_addrs(void *src, void *dest, udma_desc_t *desc) { + uint32_t *d = (uint32_t *)desc; + *d = (uintptr_t)src; + *(d+1) = (uintptr_t)dest; +} + +/* Sets the number of retries for a failed dma request + * + * max_retries : max number of retries + * + * Sets the max number of retries for a failed dma request. The default is 0, + * i.e, no retries + */ +void +udma_set_max_retries(uint32_t max_retries); + +#ifdef __cplusplus +} +#endif + +#endif /* __UDMA_H__ */ diff --git a/tools/sdk/include/esp32/xtensa/xdm-regs.h b/tools/sdk/include/esp32/xtensa/xdm-regs.h new file mode 100755 index 00000000..50ee0293 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xdm-regs.h @@ -0,0 +1,530 @@ +/* xdm-regs.h - Common register and related definitions for the XDM + (Xtensa Debug Module) */ + +/* Copyright (c) 2011-2012 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + + +#ifndef _XDM_REGS_H_ +#define _XDM_REGS_H_ + +/* NOTE: This header file is included by C, assembler, and other sources. + So any C-specific or asm-specific content must be appropriately #ifdef'd. */ + + +/* + * XDM registers can be accessed using APB, ERI, or JTAG (via NAR). + * Address offsets for APB and ERI are the same, and for JTAG + * is different (due to the limited 7-bit NAR addressing). + * + * Here, we first provide the constants as APB / ERI address offsets. + * This is necessary for assembler code (which accesses XDM via ERI), + * because complex conversion macros between the two address maps + * don't work in the assembler. + * Conversion macros are used to convert these to/from JTAG (NAR), + * addresses, for software using JTAG. + */ +/* FIXME: maybe provide only MISC+CS registers here, and leave specific + subsystem registers in separate headers? eg. for TRAX, PERF, OCD */ + +/* XDM_.... ERI addr [NAR addr] Description...... */ + +/* TRAX */ +#define XDM_TRAX_ID 0x0000 /*[0x00] ID */ +#define XDM_TRAX_CONTROL 0x0004 /*[0x01] Control */ +#define XDM_TRAX_STATUS 0x0008 /*[0x02] Status */ +#define XDM_TRAX_DATA 0x000C /*[0x03] Data */ +#define XDM_TRAX_ADDRESS 0x0010 /*[0x04] Address */ +#define XDM_TRAX_TRIGGER 0x0014 /*[0x05] Stop PC */ +#define XDM_TRAX_MATCH 0x0018 /*[0x06] Stop PC Range */ +#define XDM_TRAX_DELAY 0x001C /*[0x07] Post Stop Trigger Capture Size */ +#define XDM_TRAX_STARTADDR 0x0020 /*[0x08] Trace Memory Start */ +#define XDM_TRAX_ENDADDR 0x0024 /*[0x09] Trace Memory End */ +#define XDM_TRAX_DEBUGPC 0x003C /*[0x0F] Debug PC */ +#define XDM_TRAX_P4CHANGE 0x0040 /*[0x10] X */ +#define XDM_TRAX_TIME0 0x0040 /*[0x10] First Time Register */ +#define XDM_TRAX_P4REV 0x0044 /*[0x11] X */ +#define XDM_TRAX_TIME1 0x0044 /*[0x11] Second Time Register */ +#define XDM_TRAX_P4DATE 0x0048 /*[0x12] X */ +#define XDM_TRAX_INTTIME_MAX 0x0048 /*[0x12] maximal Value of Timestamp IntTime */ +#define XDM_TRAX_P4TIME 0x004C /*[0x13] X */ +#define XDM_TRAX_PDSTATUS 0x0050 /*[0x14] Sample of PDebugStatus */ +#define XDM_TRAX_PDDATA 0x0054 /*[0x15] Sample of PDebugData */ +#define XDM_TRAX_STOP_PC 0x0058 /*[0x16] X */ +#define XDM_TRAX_STOP_ICNT 0x005C /*[0x16] X */ +#define XDM_TRAX_MSG_STATUS 0x0060 /*[0x17] X */ +#define XDM_TRAX_FSM_STATUS 0x0064 /*[0x18] X */ +#define XDM_TRAX_IB_STATUS 0x0068 /*[0x19] X */ +#define XDM_TRAX_STOPCNT 0x006C /*[0x1A] X */ + +/* Performance Monitoring Counters */ +#define XDM_PERF_PMG 0x1000 /*[0x20] perf. mon. global control register */ +#define XDM_PERF_INTPC 0x1010 /*[0x24] perf. mon. interrupt PC */ +#define XDM_PERF_PM0 0x1080 /*[0x28] perf. mon. counter 0 value */ +#define XDM_PERF_PM1 0x1084 /*[0x29] perf. mon. counter 1 value */ +#define XDM_PERF_PM2 0x1088 /*[0x2A] perf. mon. counter 2 value */ +#define XDM_PERF_PM3 0x108C /*[0x2B] perf. mon. counter 3 value */ +#define XDM_PERF_PM4 0x1090 /*[0x2C] perf. mon. counter 4 value */ +#define XDM_PERF_PM5 0x1094 /*[0x2D] perf. mon. counter 5 value */ +#define XDM_PERF_PM6 0x1098 /*[0x2E] perf. mon. counter 6 value */ +#define XDM_PERF_PM7 0x109C /*[0x2F] perf. mon. counter 7 value */ +#define XDM_PERF_PM(n) (0x1080+((n)<<2)) /* perfmon cnt n=0..7 value */ +#define XDM_PERF_PMCTRL0 0x1100 /*[0x30] perf. mon. counter 0 control */ +#define XDM_PERF_PMCTRL1 0x1104 /*[0x31] perf. mon. counter 1 control */ +#define XDM_PERF_PMCTRL2 0x1108 /*[0x32] perf. mon. counter 2 control */ +#define XDM_PERF_PMCTRL3 0x110C /*[0x33] perf. mon. counter 3 control */ +#define XDM_PERF_PMCTRL4 0x1110 /*[0x34] perf. mon. counter 4 control */ +#define XDM_PERF_PMCTRL5 0x1114 /*[0x35] perf. mon. counter 5 control */ +#define XDM_PERF_PMCTRL6 0x1118 /*[0x36] perf. mon. counter 6 control */ +#define XDM_PERF_PMCTRL7 0x111C /*[0x37] perf. mon. counter 7 control */ +#define XDM_PERF_PMCTRL(n) (0x1100+((n)<<2)) /* perfmon cnt n=0..7 control */ +#define XDM_PERF_PMSTAT0 0x1180 /*[0x38] perf. mon. counter 0 status */ +#define XDM_PERF_PMSTAT1 0x1184 /*[0x39] perf. mon. counter 1 status */ +#define XDM_PERF_PMSTAT2 0x1188 /*[0x3A] perf. mon. counter 2 status */ +#define XDM_PERF_PMSTAT3 0x118C /*[0x3B] perf. mon. counter 3 status */ +#define XDM_PERF_PMSTAT4 0x1190 /*[0x3C] perf. mon. counter 4 status */ +#define XDM_PERF_PMSTAT5 0x1194 /*[0x3D] perf. mon. counter 5 status */ +#define XDM_PERF_PMSTAT6 0x1198 /*[0x3E] perf. mon. counter 6 status */ +#define XDM_PERF_PMSTAT7 0x119C /*[0x3F] perf. mon. counter 7 status */ +#define XDM_PERF_PMSTAT(n) (0x1180+((n)<<2)) /* perfmon cnt n=0..7 status */ + +/* On-Chip-Debug (OCD) */ +#define XDM_OCD_ID 0x2000 /*[0x40] ID register */ +#define XDM_OCD_DCR_CLR 0x2008 /*[0x42] Debug Control reg clear */ +#define XDM_OCD_DCR_SET 0x200C /*[0x43] Debug Control reg set */ +#define XDM_OCD_DSR 0x2010 /*[0x44] Debug Status reg */ +#define XDM_OCD_DDR 0x2014 /*[0x45] Debug Data reg */ +#define XDM_OCD_DDREXEC 0x2018 /*[0x46] Debug Data reg + execute-DIR */ +#define XDM_OCD_DIR0EXEC 0x201C /*[0x47] Debug Instruction reg, word 0 + execute-DIR */ +#define XDM_OCD_DIR0 0x2020 /*[0x48] Debug Instruction reg, word 1 */ +#define XDM_OCD_DIR1 0x2024 /*[0x49] Debug Instruction reg, word 2 */ +#define XDM_OCD_DIR2 0x2028 /*[0x4A] Debug Instruction reg, word 3 */ +#define XDM_OCD_DIR3 0x202C /*[0x49] Debug Instruction reg, word 4 */ +#define XDM_OCD_DIR4 0x2030 /*[0x4C] Debug Instruction reg, word 5 */ +#define XDM_OCD_DIR5 0x2034 /*[0x4D] Debug Instruction reg, word 5 */ +#define XDM_OCD_DIR6 0x2038 /*[0x4E] Debug Instruction reg, word 6 */ +#define XDM_OCD_DIR7 0x203C /*[0x4F] Debug Instruction reg, word 7 */ + +/* Miscellaneous Registers */ +#define XDM_MISC_PWRCTL 0x3020 /*[0x58] Power and Reset Control */ +#define XDM_MISC_PWRSTAT 0x3024 /*[0x59] Power and Reset Status */ +#define XDM_MISC_ERISTAT 0x3028 /*[0x5A] ERI Transaction Status */ +#define XDM_MISC_DATETIME 0x3034 /*[0x5D] [INTERNAL] Timestamps of build */ +#define XDM_MISC_UBID 0x3038 /*[0x5E] [INTERNAL] Build Unique ID */ +#define XDM_MISC_CID 0x303C /*[0x5F] [INTERNAL] Customer ID */ + +/* CoreSight compatibility */ +#define XDM_CS_ITCTRL 0x3F00 /*[0x60] InTegration Mode control reg */ +#define XDM_CS_CLAIMSET 0x3FA0 /*[0x68] Claim Tag Set reg */ +#define XDM_CS_CLAIMCLR 0x3FA4 /*[0x69] Claim Tag Clear reg */ +#define XDM_CS_LOCK_ACCESS 0x3FB0 /*[0x6B] Lock Access (writing 0xC5ACCE55 unlocks) */ +#define XDM_CS_LOCK_STATUS 0x3FB4 /*[0x6D] Lock Status */ +#define XDM_CS_AUTH_STATUS 0x3FB8 /*[0x6E] Authentication Status */ +#define XDM_CS_DEV_ID 0x3FC8 /*[0x72] Device ID */ +#define XDM_CS_DEV_TYPE 0x3FCC /*[0x73] Device Type */ +#define XDM_CS_PER_ID4 0x3FD0 /*[0x74] Peripheral ID reg byte 4 */ +#define XDM_CS_PER_ID5 0x3FD4 /*[0x75] Peripheral ID reg byte 5 */ +#define XDM_CS_PER_ID6 0x3FD8 /*[0x76] Peripheral ID reg byte 6 */ +#define XDM_CS_PER_ID7 0x3FDC /*[0x77] Peripheral ID reg byte 7 */ +#define XDM_CS_PER_ID0 0x3FE0 /*[0x78] Peripheral ID reg byte 0 */ +#define XDM_CS_PER_ID1 0x3FE4 /*[0x79] Peripheral ID reg byte 1 */ +#define XDM_CS_PER_ID2 0x3FE8 /*[0x7A] Peripheral ID reg byte 2 */ +#define XDM_CS_PER_ID3 0x3FEC /*[0x7B] Peripheral ID reg byte 3 */ +#define XDM_CS_COMP_ID0 0x3FF0 /*[0x7C] Component ID reg byte 0 */ +#define XDM_CS_COMP_ID1 0x3FF4 /*[0x7D] Component ID reg byte 1 */ +#define XDM_CS_COMP_ID2 0x3FF8 /*[0x7E] Component ID reg byte 2 */ +#define XDM_CS_COMP_ID3 0x3FFC /*[0x7F] Component ID reg byte 3 */ + +#define CS_PER_ID0 0x00000003 +#define CS_PER_ID1 0x00000021 +#define CS_PER_ID2 0x0000000f +#define CS_PER_ID3 0x00000000 +#define CS_PER_ID4 0x00000024 + +#define CS_COMP_ID0 0x0000000d +#define CS_COMP_ID1 0x00000090 +#define CS_COMP_ID2 0x00000005 +#define CS_COMP_ID3 0x000000b1 + +#define CS_DEV_TYPE 0x00000015 + +#define XTENSA_IDCODE 0x120034e5 // FIXME (upper bits not spec. out but BE is !) +#define XTENSA_MFC_ID (XTENSA_IDCODE & 0xFFF) +#define CS_DEV_ID XTENSA_IDCODE + +#define NXS_OCD_REG(val) ((val >= 0x40) && (val <= 0x5F)) +#define NXS_TRAX_REG(val) val <= 0x3F + +#define ERI_TRAX_REG(val) ((val & 0xFFFF) < 0x1000) +#define ERI_OCD_REG(val) ((val & 0xFFFF) >= 0x2000) && ((val & 0xFFFF) < 0x4000)) + +/* Convert above 14-bit ERI/APB address/offset to 7-bit NAR address: */ +#define _XDM_ERI_TO_NAR(a) ( ((a)&0x3F80)==0x0000 ? (((a)>>2) & 0x1F) \ + : ((a)&0x3E00)==0x1000 ? (0x20 | (((a)>>2) & 7) | (((a)>>4) & 0x18)) \ + : ((a)&0x3FC0)==0x2000 ? (0x40 | (((a)>>2) & 0xF)) \ + : ((a)&0x3FE0)==0x3020 ? (0x50 | (((a)>>2) & 0xF)) \ + : ((a)&0x3FFC)==0x3F00 ? 0x60 \ + : ((a)&0x3F80)==0x3F80 ? (0x60 | (((a)>>2) & 0x1F)) \ + : -1 ) + +#define XDM_ERI_TO_NAR(a) _XDM_ERI_TO_NAR(a & 0xFFFF) + +/* Convert 7-bit NAR address back to ERI/APB address/offset: */ +#define _XDM_NAR_TO_APB(a) ((a) <= 0x1f ? ((a) << 2) \ + :(a) >= 0x20 && (a) <= 0x3F ? (0x1000 | (((a)& 7) << 2) | (((a)&0x18)<<4)) \ + :(a) >= 0x40 && (a) <= 0x4F ? (0x2000 | (((a)&0xF) << 2)) \ + :(a) >= 0x58 && (a) <= 0x5F ? (0x3000 | (((a)&0xF) << 2)) \ + :(a) == 0x60 ? (0x3F00) \ + :(a) >= 0x68 && (a) <= 0x7F ? (0x3F80 | (((a)&0x1F) << 2)) \ + : -1) + +#define XDM_NAR_TO_APB(a) _XDM_NAR_TO_APB((a & 0xFFFF)) +#define XDM_NAR_TO_ERI(a) _XDM_NAR_TO_APB((a & 0xFFFF)) | 0x000000 + +/* Convert APB to ERI address */ +#define XDM_APB_TO_ERI(a) ((a) | (0x100000)) +#define XDM_ERI_TO_APB(a) ((a) & (0x0FFFFF)) + +/*********** Bit definitions within some of the above registers ***********/ +#define OCD_ID_LSDDRP 0x01000000 +#define OCD_ID_LSDDRP_SHIFT 24 +#define OCD_ID_ENDIANESS 0x00000001 +#define OCD_ID_ENDIANESS_SHIFT 0 +#define OCD_ID_PSO 0x0000000C +#define OCD_ID_PSO_SHIFT 2 +#define OCD_ID_TRACEPORT 0x00000080 +#define OCD_ID_TRACEPORT_SHIFT 7 + +/* Power Status register. NOTE: different bit positions in JTAG vs. ERI/APB !! */ +/* ERI/APB: */ +#define PWRSTAT_CORE_DOMAIN_ON 0x00000001 /* set if core is powered on */ +#define PWRSTAT_CORE_DOMAIN_ON_SHIFT 0 +#define PWRSTAT_WAKEUP_RESET 0x00000002 /* [ERI only] 0=cold start, 1=PSO wakeup */ +#define PWRSTAT_WAKEUP_RESET_SHIFT 1 +#define PWRSTAT_CACHES_LOST_POWER 0x00000004 /* [ERI only] set if caches (/localmems?) lost power */ + /* FIXME: does this include local memories? */ +#define PWRSTAT_CACHES_LOST_POWER_SHIFT 2 +#define PWRSTAT_CORE_STILL_NEEDED 0x00000010 /* set if others keeping core awake */ +#define PWRSTAT_CORE_STILL_NEEDED_SHIFT 4 +#define PWRSTAT_MEM_DOMAIN_ON 0x00000100 /* set if memory domain is powered on */ +#define PWRSTAT_MEM_DOMAIN_ON_SHIFT 8 +#define PWRSTAT_DEBUG_DOMAIN_ON 0x00001000 /* set if debug domain is powered on */ +#define PWRSTAT_DEBUG_DOMAIN_ON_SHIFT 12 +#define PWRSTAT_ALL_ON PWRSTAT_CORE_DOMAIN_ON | PWRSTAT_MEM_DOMAIN_ON | PWRSTAT_DEBUG_DOMAIN_ON +#define PWRSTAT_CORE_WAS_RESET 0x00010000 /* [APB only] set if core got reset */ +#define PWRSTAT_CORE_WAS_RESET_SHIFT 16 +#define PWRSTAT_DEBUG_WAS_RESET 0x10000000 /* set if debug module got reset */ +#define PWRSTAT_DEBUG_WAS_RESET_SHIFT 28 +/* JTAG: */ +#define J_PWRSTAT_CORE_DOMAIN_ON 0x01 /* set if core is powered on */ +#define J_PWRSTAT_MEM_DOMAIN_ON 0x02 /* set if memory domain is powered on */ +#define J_PWRSTAT_DEBUG_DOMAIN_ON 0x04 /* set if debug domain is powered on */ +#define J_PWRSTAT_ALL_ON J_PWRSTAT_CORE_DOMAIN_ON | J_PWRSTAT_MEM_DOMAIN_ON | J_PWRSTAT_DEBUG_DOMAIN_ON +#define J_PWRSTAT_CORE_STILL_NEEDED 0x08 /* set if others keeping core awake */ +#define J_PWRSTAT_CORE_WAS_RESET 0x10 /* set if core got reset */ +#define J_PWRSTAT_DEBUG_WAS_RESET 0x40 /* set if debug module got reset */ + +/* Power Control register. NOTE: different bit positions in JTAG vs. ERI/APB !! */ +/* ERI/APB: */ +#define PWRCTL_CORE_SHUTOFF 0x00000001 /* [ERI only] core wants to shut off on WAITI */ +#define PWRCTL_CORE_SHUTOFF_SHIFT 0 +#define PWRCTL_CORE_WAKEUP 0x00000001 /* [APB only] set to force core to stay powered on */ +#define PWRCTL_CORE_WAKEUP_SHIFT 0 +#define PWRCTL_MEM_WAKEUP 0x00000100 /* set to force memory domain to stay powered on */ +#define PWRCTL_MEM_WAKEUP_SHIFT 8 +#define PWRCTL_DEBUG_WAKEUP 0x00001000 /* set to force debug domain to stay powered on */ +#define PWRCTL_DEBUG_WAKEUP_SHIFT 12 +#define PWRCTL_ALL_ON PWRCTL_CORE_WAKEUP | PWRCTL_MEM_WAKEUP | PWRCTL_DEBUG_WAKEUP +#define PWRCTL_CORE_RESET 0x00010000 /* [APB only] set to assert core reset */ +#define PWRCTL_CORE_RESET_SHIFT 16 +#define PWRCTL_DEBUG_RESET 0x10000000 /* set to assert debug module reset */ +#define PWRCTL_DEBUG_RESET_SHIFT 28 +/* JTAG: */ +#define J_PWRCTL_CORE_WAKEUP 0x01 /* set to force core to stay powered on */ +#define J_PWRCTL_MEM_WAKEUP 0x02 /* set to force memory domain to stay powered on */ +#define J_PWRCTL_DEBUG_WAKEUP 0x04 /* set to force debug domain to stay powered on */ +#define J_DEBUG_USE 0x80 /* */ +#define J_PWRCTL_ALL_ON J_DEBUG_USE | J_PWRCTL_CORE_WAKEUP | J_PWRCTL_MEM_WAKEUP | J_PWRCTL_DEBUG_WAKEUP +#define J_PWRCTL_DEBUG_ON J_DEBUG_USE | J_PWRCTL_DEBUG_WAKEUP +#define J_PWRCTL_CORE_RESET 0x10 /* set to assert core reset */ +#define J_PWRCTL_DEBUG_RESET 0x40 /* set to assert debug module reset */ + +#define J_PWRCTL_WRITE_MASK 0xFF +#define J_PWRSTAT_WRITE_MASK 0xFF + +#define PWRCTL_WRITE_MASK ~0 +#define PWRSTAT_WRITE_MASK ~0 + +/************ The following are only relevant for JTAG, so perhaps belong in OCD only **************/ + +/* XDM 5-bit JTAG Instruction Register (IR) values: */ +#define XDM_IR_PWRCTL 0x08 /* select 8-bit Power/Reset Control (PRC) */ +#define XDM_IR_PWRSTAT 0x09 /* select 8-bit Power/Reset Status (PRS) */ +#define XDM_IR_NAR_SEL 0x1c /* select altern. 8-bit NAR / 32-bit NDR (Nexus-style) */ +#define XDM_IR_NDR_SEL 0x1d /* select altern. 32-bit NDR / 8-bit NAR + (FIXME - functionality not yet in HW) */ +#define XDM_IR_IDCODE 0x1e /* select 32-bit JTAG IDCODE */ +#define XDM_IR_BYPASS 0x1f /* select 1-bit bypass */ + +#define XDM_IR_WIDTH 5 /* width of IR for Xtensa TAP */ + +/* NAR register bits: */ +#define XDM_NAR_WRITE 0x01 +#define XDM_NAR_ADDR_MASK 0xFE +#define XDM_NAR_ADDR_SHIFT 1 + +#define XDM_NAR_BUSY 0x02 +#define XDM_NAR_ERROR 0x01 + +#define NEXUS_DIR_READ 0x00 +#define NEXUS_DIR_WRITE 0x01 + +/************ Define DCR register bits **************/ + +#define DCR_ENABLEOCD 0x0000001 +#define DCR_ENABLEOCD_SHIFT 0 +#define DCR_DEBUG_INT 0x0000002 +#define DCR_DEBUG_INT_SHIFT 1 +#define DCR_DEBUG_OVERRIDE 0x0000004 +#define DCR_DEBUG_OVERRIDE_SHIFT 2 +#define DCR_DEBUG_INTERCEPT 0x0000008 +#define DCR_DEBUG_INTERCEPT_SHIFT 3 +#define DCR_MASK_NMI 0x0000020 +#define DCR_MASK_NMI_SHIFT 5 +#define DCR_STEP_ENABLE 0x0000040 +#define DCR_STEP_ENABLE_SHIFT 6 +#define DCR_BREAK_IN_EN 0x0010000 +#define DCR_BREAK_IN_EN_SHIFT 16 +#define DCR_BREAK_OUT_EN 0x0020000 +#define DCR_BREAK_OUT_EN_SHIFT 17 +#define DCR_DEBUG_INT_EN 0x0040000 +#define DCR_DEBUG_INT_EN_SHIFT 18 +#define DCR_DBG_SW_ACTIVE 0x0100000 +#define DCR_DBG_SW_ACTIVE_SHIFT 20 +#define DCR_STALL_IN_EN 0x0200000 +#define DCR_STALL_IN_EN_SHIFT 21 +#define DCR_DEBUG_OUT_EN 0x0400000 +#define DCR_DEBUG_OUT_EN_SHIFT 22 +#define DCR_BREAK_OUT_ITO 0x1000000 +#define DCR_STALL_OUT_ITO 0x2000000 +#define DCR_STALL_OUT_ITO_SHIFT 25 + +/************ Define DSR register bits **************/ + +#define DOSR_EXECDONE_ER 0x01 +#define DOSR_EXECDONE_SHIFT 0 +#define DOSR_EXCEPTION_ER 0x02 +#define DOSR_EXCEPTION_SHIFT 1 +#define DOSR_BUSY 0x04 +#define DOSR_BUSY_SHIFT 2 +#define DOSR_OVERRUN 0x08 +#define DOSR_OVERRUN_SHIFT 3 +#define DOSR_INOCDMODE_ER 0x10 +#define DOSR_INOCDMODE_SHIFT 4 +#define DOSR_CORE_WROTE_DDR_ER 0x400 +#define DOSR_CORE_WROTE_DDR_SHIFT 10 +#define DOSR_CORE_READ_DDR_ER 0x800 +#define DOSR_CORE_READ_DDR_SHIFT 11 +#define DOSR_HOST_WROTE_DDR_ER 0x4000 +#define DOSR_HOST_WROTE_DDR_SHIFT 14 +#define DOSR_HOST_READ_DDR_ER 0x8000 +#define DOSR_HOST_READ_DDR_SHIFT 15 + +#define DOSR_DEBUG_PEND_BIN 0x10000 +#define DOSR_DEBUG_PEND_HOST 0x20000 +#define DOSR_DEBUG_PEND_TRAX 0x40000 +#define DOSR_DEBUG_BIN 0x100000 +#define DOSR_DEBUG_HOST 0x200000 +#define DOSR_DEBUG_TRAX 0x400000 +#define DOSR_DEBUG_PEND_BIN_SHIFT 16 +#define DOSR_DEBUG_PEND_HOST_SHIFT 17 +#define DOSR_DEBUG_PEND_TRAX_SHIFT 18 +#define DOSR_DEBUG_BREAKIN 0x0100000 +#define DOSR_DEBUG_BREAKIN_SHIFT 20 +#define DOSR_DEBUG_HOST_SHIFT 21 +#define DOSR_DEBUG_TRAX_SHIFT 22 + +#define DOSR_DEBUG_STALL 0x1000000 +#define DOSR_DEBUG_STALL_SHIFT 24 + +#define DOSR_CORE_ON 0x40000000 +#define DOSR_CORE_ON_SHIFT 30 +#define DOSR_DEBUG_ON 0x80000000 +#define DOSR_DEBUG_ON_SHIFT 31 + +/********** Performance monitor registers bits **********/ + +#define PERF_PMG_ENABLE 0x00000001 /* global enable bit */ +#define PERF_PMG_ENABLE_SHIFT 0 + +#define PERF_PMCTRL_INT_ENABLE 0x00000001 /* assert interrupt on overflow */ +#define PERF_PMCTRL_INT_ENABLE_SHIFT 0 +#define PERF_PMCTRL_KRNLCNT 0x00000008 /* ignore TRACELEVEL */ +#define PERF_PMCTRL_KRNLCNT_SHIFT 3 +#define PERF_PMCTRL_TRACELEVEL 0x000000F0 /* count when CINTLEVEL <= TRACELEVEL */ +#define PERF_PMCTRL_TRACELEVEL_SHIFT 4 +#define PERF_PMCTRL_SELECT 0x00001F00 /* events group selector */ +#define PERF_PMCTRL_SELECT_SHIFT 8 +#define PERF_PMCTRL_MASK 0xFFFF0000 /* events mask */ +#define PERF_PMCTRL_MASK_SHIFT 16 + +#define PERF_PMSTAT_OVERFLOW 0x00000001 /* counter overflowed */ +#define PERF_PMSTAT_OVERFLOW_SHIFT 0 +#define PERF_PMSTAT_INT 0x00000010 /* interrupt asserted */ +#define PERF_PMSTAT_INT_SHIFT 4 + +#if defined (USE_XDM_REGNAME) || defined (USE_DAP_REGNAME) +/* Describes XDM register: */ +typedef struct { + int reg; + char* name; +} regdef_t; + +/*char* regname(regdef_t* list, int regno) +{ + unsigned i; + for(i = 0 ; i < (sizeof(list) / sizeof(regdef_t)); i++){ + if(list[i].reg == regno) + return list[i].name; + } + return "???"; +}*/ + +/* + * Returns the name of the specified XDM register number, + * or simply "???" if the register number is not recognized. + * FIXME - requires -1 as the last entry - change to compare the name to ??? + * or even better, make the code above to work. + */ +static char * regname(regdef_t* list, int reg) +{ + int i = 0; + while (list[i].reg != -1){ + if (list[i].reg == reg) + break; + i++; + } + return list[i].name; +} + +#if defined (USE_XDM_REGNAME) +regdef_t xdm_reglist[] = +{ + {XDM_TRAX_ID ,"TRAX_ID" }, + {XDM_TRAX_CONTROL ,"CONTROL" }, + {XDM_TRAX_STATUS ,"STATUS" }, + {XDM_TRAX_DATA ,"DATA" }, + {XDM_TRAX_ADDRESS ,"ADDRESS" }, + {XDM_TRAX_TRIGGER ,"TRIGGER PC" }, + {XDM_TRAX_MATCH ,"PC MATCH" }, + {XDM_TRAX_DELAY ,"DELAY CNT." }, + {XDM_TRAX_STARTADDR ,"START ADDRESS"}, + {XDM_TRAX_ENDADDR ,"END ADDRESS" }, + {XDM_TRAX_DEBUGPC ,"DEBUG PC" }, + {XDM_TRAX_P4CHANGE ,"P4 CHANGE" }, + {XDM_TRAX_P4REV ,"P4 REV." }, + {XDM_TRAX_P4DATE ,"P4 DATE" }, + {XDM_TRAX_P4TIME ,"P4 TIME" }, + {XDM_TRAX_PDSTATUS ,"PD STATUS" }, + {XDM_TRAX_PDDATA ,"PD DATA" }, + {XDM_TRAX_STOP_PC ,"STOP PC" }, + {XDM_TRAX_STOP_ICNT ,"STOP ICNT" }, + {XDM_TRAX_MSG_STATUS ,"MSG STAT." }, + {XDM_TRAX_FSM_STATUS ,"FSM STAT." }, + {XDM_TRAX_IB_STATUS ,"IB STAT." }, + + {XDM_OCD_ID ,"OCD_ID" }, + {XDM_OCD_DCR_CLR ,"DCR_CLR" }, + {XDM_OCD_DCR_SET ,"DCR_SET" }, + {XDM_OCD_DSR ,"DOSR" }, + {XDM_OCD_DDR ,"DDR" }, + {XDM_OCD_DDREXEC ,"DDREXEC" }, + {XDM_OCD_DIR0EXEC ,"DIR0EXEC"}, + {XDM_OCD_DIR0 ,"DIR0" }, + {XDM_OCD_DIR1 ,"DIR1" }, + {XDM_OCD_DIR2 ,"DIR2" }, + {XDM_OCD_DIR3 ,"DIR3" }, + {XDM_OCD_DIR4 ,"DIR4" }, + {XDM_OCD_DIR5 ,"DIR5" }, + {XDM_OCD_DIR6 ,"DIR6" }, + {XDM_OCD_DIR7 ,"DIR7" }, + + {XDM_PERF_PMG ,"PMG" }, + {XDM_PERF_INTPC ,"INTPC" }, + {XDM_PERF_PM0 ,"PM0 " }, + {XDM_PERF_PM1 ,"PM1 " }, + {XDM_PERF_PM2 ,"PM2 " }, + {XDM_PERF_PM3 ,"PM3 " }, + {XDM_PERF_PM4 ,"PM4 " }, + {XDM_PERF_PM5 ,"PM5 " }, + {XDM_PERF_PM6 ,"PM6 " }, + {XDM_PERF_PM7 ,"PM7 " }, + {XDM_PERF_PMCTRL0 ,"PMCTRL0"}, + {XDM_PERF_PMCTRL1 ,"PMCTRL1"}, + {XDM_PERF_PMCTRL2 ,"PMCTRL2"}, + {XDM_PERF_PMCTRL3 ,"PMCTRL3"}, + {XDM_PERF_PMCTRL4 ,"PMCTRL4"}, + {XDM_PERF_PMCTRL5 ,"PMCTRL5"}, + {XDM_PERF_PMCTRL6 ,"PMCTRL6"}, + {XDM_PERF_PMCTRL7 ,"PMCTRL7"}, + {XDM_PERF_PMSTAT0 ,"PMSTAT0"}, + {XDM_PERF_PMSTAT1 ,"PMSTAT1"}, + {XDM_PERF_PMSTAT2 ,"PMSTAT2"}, + {XDM_PERF_PMSTAT3 ,"PMSTAT3"}, + {XDM_PERF_PMSTAT4 ,"PMSTAT4"}, + {XDM_PERF_PMSTAT5 ,"PMSTAT5"}, + {XDM_PERF_PMSTAT6 ,"PMSTAT6"}, + {XDM_PERF_PMSTAT7 ,"PMSTAT7"}, + + {XDM_MISC_PWRCTL ,"PWRCTL" }, + {XDM_MISC_PWRSTAT ,"PWRSTAT" }, + {XDM_MISC_ERISTAT ,"ERISTAT" }, + {XDM_MISC_DATETIME ,"DATETIME"}, + {XDM_MISC_UBID ,"UBID" }, + {XDM_MISC_CID ,"CID" }, + + {XDM_CS_ITCTRL ,"ITCTRL" }, + {XDM_CS_CLAIMSET ,"CLAIMSET" }, + {XDM_CS_CLAIMCLR ,"CLAIMCLR" }, + {XDM_CS_LOCK_ACCESS ,"LOCK_ACCESS"}, + {XDM_CS_LOCK_STATUS ,"LOCK_STATUS"}, + {XDM_CS_AUTH_STATUS ,"AUTH_STATUS"}, + {XDM_CS_DEV_ID ,"DEV_ID" }, + {XDM_CS_DEV_TYPE ,"DEV_TYPE" }, + {XDM_CS_PER_ID4 ,"PER_ID4" }, + {XDM_CS_PER_ID5 ,"PER_ID5" }, + {XDM_CS_PER_ID6 ,"PER_ID6" }, + {XDM_CS_PER_ID7 ,"PER_ID7" }, + {XDM_CS_PER_ID0 ,"PER_ID0" }, + {XDM_CS_PER_ID1 ,"PER_ID1" }, + {XDM_CS_PER_ID2 ,"PER_ID2" }, + {XDM_CS_PER_ID3 ,"PER_ID3" }, + {XDM_CS_COMP_ID0 ,"COMP_ID0" }, + {XDM_CS_COMP_ID1 ,"COMP_ID1" }, + {XDM_CS_COMP_ID2 ,"COMP_ID2" }, + {XDM_CS_COMP_ID3 ,"COMP_ID3" }, + {-1 ,"???" }, +}; +#endif + +#endif + +#endif /* _XDM_REGS_H_ */ diff --git a/tools/sdk/include/esp32/xtensa/xmon.h b/tools/sdk/include/esp32/xtensa/xmon.h new file mode 100755 index 00000000..12a757a2 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xmon.h @@ -0,0 +1,97 @@ +/* xmon.h - XMON definitions + * + * $Id: //depot/rel/Eaglenest/Xtensa/OS/xmon/xmon.h#3 $ + * + * Copyright (c) 2001-2013 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __H_XMON +#define __H_XMON + +/* Default GDB packet size */ +#define GDB_PKT_SIZE 4096 + +/*XMON signals */ +#define XMON_SIGINT 2 /*target was interrupted */ +#define XMON_SIGILL 4 /*illegal instruction */ +#define XMON_SIGTRAP 5 /*general exception */ +#define XMON_SIGSEGV 11 /*page faults */ + + +/* Type of log message from XMON to the application */ +typedef enum { + XMON_LOG, + XMON_TRACE, + XMON_ERR, + XMON_APP, + XMON_GDB +} xmon_log_t; + +/* Return value type for xmon_proc() (see below) */ +typedef enum { + XMON_GDB_PEND, + XMON_GDB_PKT, + XMON_NOT_GDB +} xmon_gdb_pkt_t; + +#ifdef _cplusplus +extern "C" { +#endif + +/* + * THE FOLLOWING ROUTINES ARE USED BY USER + */ +extern int _xmon_init(char* gdbBuf, int gdbPktSize, + void(*xlog)(xmon_log_t type, const char* str)); +//Initialize GDB communication and logging to the main app. +//For the logging to work, xlog function needs to be provided. +//gdbBuf - pointer to a buffer XMON can use to comm. with GDB +//gdbPktSize - Size of the allocated buffer for GDB communication. +//xlog - logger handle. + + +extern void _xmon_close(void); +//Main application can detach from xmon at any time + + +extern xmon_gdb_pkt_t _xmon_proc(char); +// Give character to XMON to check if GDB message +// Application is supposed to accumulate all the +// character in case the recognition fails and chars +// have to be sent to the original handler +// Return: XMON_GDB_PEND - send me more chars +// XMON_GDB_PKT - GDB message confirmed, C) not +// XMON_NOT_GDB - not GDB message + + +/* + * THE FOLLOWING ROUTINES NEED TO BE PROVIDED BY USER + */ +extern int _xmon_in(); // wait for character from GDB +extern void _xmon_out(char); // output a character to GDB +extern int _xmon_flush(void); // flush output characters + +#ifdef _cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/esp32/xtensa/xmp-library.h b/tools/sdk/include/esp32/xtensa/xmp-library.h new file mode 100755 index 00000000..62427207 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xmp-library.h @@ -0,0 +1,789 @@ +/* Customer ID=11656; Build=0x5f626; Copyright (c) 2008-2009 by Tensilica Inc. ALL RIGHTS RESERVED. + These coded instructions, statements, and computer programs are the + copyrighted works and confidential proprietary information of Tensilica Inc. + They may not be modified, copied, reproduced, distributed, or disclosed to + third parties in any manner, medium, or form, in whole or in part, without + the prior written consent of Tensilica Inc. */ + +#ifndef _XMP_LIBRARY_H +#define _XMP_LIBRARY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#if XCHAL_HAVE_RELEASE_SYNC +#include +#endif +#if XCHAL_HAVE_EXTERN_REGS +#include +#endif +#include +#include + +#include "xtensa/system/mpsystem.h" + +/* + W A R N I N G: + + xmp library clients should treat all data structures in this file + as opaque. They are only public to enable users to declare them + statically. +*/ + + +/* ------------------------------------------------------------------------- + When using XMP on cache-incoherent systems, these macros are helpful + to ensure that you are not reading stale data, and to ensure that + the data you write makes it all the way back to main memory. + */ + +#if !XCHAL_DCACHE_IS_COHERENT +#define XMP_WRITE_BACK_ELEMENT(x) xthal_dcache_region_writeback((void *)x, sizeof(*x)) +#define XMP_INVALIDATE_ELEMENT(x) xthal_dcache_region_invalidate((void *)x, sizeof(*x)) +#define XMP_WRITE_BACK_INVALIDATE_ELEMENT(x) xthal_dcache_region_writeback_inv((void *)x, sizeof(*x)) +#define XMP_WRITE_BACK_ARRAY(x) xthal_dcache_region_writeback((void *)x, sizeof(x)) +#define XMP_INVALIDATE_ARRAY(x) xthal_dcache_region_invalidate((void *)x, sizeof(x)) +#define XMP_WRITE_BACK_INVALIDATE_ARRAY(x) xthal_dcache_region_writeback_inv((void *)x, sizeof(x)) +#define XMP_WRITE_BACK_ARRAY_ELEMENTS(x, num_elements) xthal_dcache_region_writeback((void *)x, sizeof(*x) * num_elements) +#define XMP_INVALIDATE_ARRAY_ELEMENTS(x, num_elements) xthal_dcache_region_invalidate((void *)x, sizeof(*x) * num_elements) +#define XMP_WRITE_BACK_INVALIDATE_ARRAY_ELEMENTS(x, num_elements) xthal_dcache_region_writeback_inv((void *)x, sizeof(*x) * num_elements) +#else +#define XMP_WRITE_BACK_ELEMENT(x) +#define XMP_INVALIDATE_ELEMENT(x) +#define XMP_WRITE_BACK_INVALIDATE_ELEMENT(x) +#define XMP_WRITE_BACK_ARRAY(x) +#define XMP_INVALIDATE_ARRAY(x) +#define XMP_WRITE_BACK_INVALIDATE_ARRAY(x) +#define XMP_WRITE_BACK_ARRAY_ELEMENTS(x, num_elements) +#define XMP_INVALIDATE_ARRAY_ELEMENTS(x, num_elements) +#define XMP_WRITE_BACK_INVALIDATE_ARRAY_ELEMENTS(x, num_elements) +#endif + +/* ------------------------------------------------------------------------- + Initialization, error codes, constants and house-keeping + + Every core should call xmp_init with the number of cores in the + system. + + xmp_init should be called before you use any global synchronization + primitive or shared data. + + Further, before you use a dynamically allocated synchronization + primitives, you need to both initialize it by calling the + xmp_*_init function, and you need to have called xmp_init, which + sets up interrupt handlers and interrupt routing. + + The second parameter sets the interprocessor interrupt + routing. Passing zero instructs the library to use the default + routing, which will be suitable for most users. + +*/ + +extern void xmp_init (int num_cores, unsigned int interrupt_routing); + + +/* If you want finer-grained control than that provided by xmp_init, + you can the functions below individually--however, this is more + inconvenient and requires greater understanding of the library's + internals. Don't use them directly unless you have a good reason. +*/ + +extern void xmp_unpack_shared (void); +extern void xmp_route_interrupts (unsigned int routing); + +#if XCHAL_HAVE_MP_INTERRUPTS +extern void xmp_enable_ipi_interrupts (void); + +/* Turn off certain things enabled by xmp_init */ +extern void xmp_disable_ipi_interrupts (void); +#endif + +extern void xmp_end (void); + +/* Only valid after xmp_init. */ +extern int xmp_num_cores (void); + +/* How many cycles should a core wait before rechecking a + synchronization variable? Higher values will reduce memory + transactions, but will also result in higher latency in returning + from synchronization. +*/ +extern void xmp_spin_wait_set_cycles (unsigned int limit); + +/* If you would prefer to provide your own spin wait function, + to go to sleep, etc. Declare a function of this type, then call + this function. */ +typedef void (*xmp_spin_wait_function_t)(void); +extern void xmp_spin_wait_set_function (xmp_spin_wait_function_t func); +extern void xmp_spin(void); + +#define XMP_NO_OWNER 0x07 +#define XMP_MUTEX_DESTROYED 0xFE +#define XMP_ERROR_FATAL 0xFD + +#define XMP_MAX_CORES 0x4 + + +static inline unsigned int xmp_prid (void) +{ +#if XCHAL_HAVE_PRID + return XT_RSR_PRID() & 0xFF; +#else + return 0; +#endif +} + + +/* ------------------------------------------------------------------------- + Tracing + + A core must set a trace_file if it wants any synchronization + tracing to occur. Sharing file descriptors among cores is very + messy, so don't do it. This, unfortunately, means that two cores + contending for a mutex are not able to trace to the same file. + + Any object (except the atomic integer) can have tracing off or on. +*/ + +extern void xmp_set_trace_file (FILE * file); +extern void xmp_trace (const char * fmt, ...); + + +/* ------------------------------------------------------------------------- + Memory Allocation Functions. + + These do what you would expect, only from shared memory instead of + private memory. +*/ + +#if XCHAL_DCACHE_IS_COHERENT +extern void * xmp_malloc (size_t size); +extern void * xmp_calloc (size_t nmemb, size_t size); +extern void xmp_free (void * ptr); +#endif +extern void * xmp_sbrk(int size); + +/* ------------------------------------------------------------------------- + xmp_atomic_int_t + + The most basic synchronization primitive in the xmp library. + Atomic ints are sharable among processors, and even interrupt + levels on the same processor. However, their semantics are fairly + rudimentary. All other primitives are based on these, therefore, + changing this implementation affects all other primitives. + +*/ + +typedef unsigned int xmp_atomic_int_t; + +static inline xmp_atomic_int_t +xmp_coherent_l32ai(xmp_atomic_int_t * address) +{ + XMP_INVALIDATE_ELEMENT (address); + return XT_L32AI(address, 0); +} + +static inline void +xmp_coherent_s32ri(xmp_atomic_int_t value, xmp_atomic_int_t * address) +{ + XT_S32RI (value, address, 0); + XMP_WRITE_BACK_ELEMENT (address); +} + +#define XMP_ATOMIC_INT_INITIALIZER(value) (value) + +/* xmp_atomic_int_init - Initialize an int prior to use + + Nonsynchronizing, Nonblocking + + Usage: + value - initial value + integer - points to an uninitialized integer + + On exit: + initialized to given value + + Errors: none +*/ + +static inline void +xmp_atomic_int_init (xmp_atomic_int_t * integer, int value) +{ + xmp_coherent_s32ri (value, integer); +} + + +/* xmp_atomic_int_value - Read the value + + Nonsynchronizing, Nonblocking + + Usage: + integer - points to an int + + Returns: + the value +*/ + +static inline int +xmp_atomic_int_value (xmp_atomic_int_t * integer) +{ + return xmp_coherent_l32ai (integer); +} + + +/* xmp_atomic_int_conditional_increment - Conditionally increment integer + + Synchronizing, nonblocking + + Usage: + integer - points to an initialized integer + amount - how much to increment + prev - believed value of the integer + eg: prev = xmp_atomic_int_value (integer); + success = xmp_atomic_int_increment (integer, 1, prev); + + Returns: current value of integer - user should check if it matches + the previous value of the integer. If it does, then the update + was successful. + +*/ + +#define USE_ASSEMBLY_IMPLEMENTATION 0 + +static inline int +xmp_atomic_int_conditional_increment (xmp_atomic_int_t * integer, int amount, int prev) +{ + int val; + int saved; + +#if USE_ASSEMBLY_IMPLEMENTATION + /* %0 = prev + %1 = saved + %2 = atomic integer pointer + %3 = amount + */ + + asm volatile ("wsr.scompare1 %0\n" + "mov %1, %0\n" + "add %0, %0, %3\n" + "s32c1i %0, %2, 0\n" + : "+&a" (prev), "+&a"(saved) : "a" (integer), "a" (amount)); + + return prev; + +#else + + XT_WSR_SCOMPARE1 (prev); + val = prev + amount; + saved = val; + XT_S32C1I (val, integer, 0); + + return val; +#endif +} + + +/* xmp_atomic_int_increment - Increment integer + + Synchronizing, blocking + + Usage: + integer - points to an initialized integer + amount - how much to increment + + Returns: new value of integer + +*/ + +static inline int +xmp_atomic_int_increment (xmp_atomic_int_t * integer, int amount) +{ + int val; + int saved; +#if USE_ASSEMBLY_IMPLEMENTATION + /* %0 = val + %1 = saved + %2 = atomic integer pointer + %3 = amount + */ + + asm volatile ("l32ai %0, %2, 0\n" + "1:\n" + "wsr.scompare1 %0\n" + "mov %1, %0\n" + "add %0, %0, %3\n" + "s32c1i %0, %2, 0\n" + "bne %0, %1, 1b\n" + : "+&a" (val), "+&a"(saved) : "a" (integer), "a" (amount)); +#else + /* Accurately naming "val" is tricky. Sometimes it will be what we + want to be the new value, but sometimes it contains the value + that is currently at the location. */ + + /* Load location's current value */ + val = xmp_coherent_l32ai (integer); + + do { + XT_WSR_SCOMPARE1 (val); + saved = val; + /* Change it to what we would like to store there--"new_val" */ + val = val + amount; + /* Possibly store new_val, but reload location's current value no + matter what. */ + XT_S32C1I (val, integer, 0); + if (val != saved) + xmp_spin(); + } while (val != saved); + +#endif + return val + amount; +} + + +/* xmp_atomic_int_conditional_set - Set the value of an atomic integer + + Synchronizing, nonblocking + + Usage: + integer - points to an initialized integer + from - believed value of the integer + eg: prev = xmp_atomic_int_value (integer); + success = xmp_atomic_int_conditional_set (integer, 1, prev); + to - new value + + Returns: current value of integer - user should check if it matches + the previous value of the integer. If it does, then the update + was successful. + +*/ + +static inline int +xmp_atomic_int_conditional_set (xmp_atomic_int_t * integer, int from, int to) +{ + int val; + + /* Don't even try to update if the integer's value isn't what we + think it should be. This prevents acquiring this cache-line for + writing and therefore prevents bus transactions when various + cores contend. */ + val = xmp_coherent_l32ai(integer); + if (val == from) { + XT_WSR_SCOMPARE1 (from); + val = to; + /* Possibly store to, but reload location's current value no + matter what. */ + XT_S32C1I (val, integer, 0); + } + return val; +} + + +/* Macros to implement trivial spin locks. These are very primitive, but + can be useful when you don't need the higher-overhead synchronization. + + To use an xmp_atomic_int_t as a trivial spin lock, you should + initialize it to zero first. +*/ + +#define XMP_SIMPLE_SPINLOCK_ACQUIRE(atomic_int_ptr) \ + { while (xmp_atomic_int_conditional_set (atomic_int_ptr, 0, xmp_prid() + 1) != 0) \ + xmp_spin(); } +#define XMP_SIMPLE_SPINLOCK_RELEASE(atomic_int_ptr) \ + { while (xmp_atomic_int_conditional_set (atomic_int_ptr, xmp_prid() + 1, 0) != xmp_prid() + 1) \ + xmp_spin(); } + +#define XMP_SIMPLE_SPINLOCK_OWNER(atomic_int_ptr) (xmp_atomic_int_value(atomic_int_ptr) - 1) + + +/* ------------------------------------------------------------------------- + xmp_mutex_t - An even higher-level data structure to enforce + mutual exclusion between cores. A core which waits on a mutex might + sleep with a waiti and be interrupted by an interrupt. + + Mutexes can be normal or recursive. For a normal mutex, a core + attempting to acquire a mutex it already holds will result in + deadlock. For a recursive mutex, a core will succeed in acquiring a + mutex it already holds, and must release it as many times as it + acquired it. + + Mutexes are not sharable between interrupt levels--because + ownership is tracked by core, not thread. + + Like all xmp data structures, an object of type xmp_mutex_t + should be treated by the programmer as opaque. They are only + public in this header file to allow them to be declared statically. + + For configurations with 16-byte cache lines, this has the most + frequently used and changed data in the first line. + +*/ + +#if XCHAL_DCACHE_IS_COHERENT +typedef struct xmp_mutex_t { + xmp_atomic_int_t qlock; + unsigned int qhead; + unsigned int qtail; + unsigned char queue[XMP_MAX_CORES]; + unsigned short held; + + unsigned char owner; + unsigned char recursive : 1; + unsigned char trace : 1; + unsigned char system : 1; + unsigned char unused : 5; + const char * name; +} xmp_mutex_t __attribute__ ((aligned (XMP_MAX_DCACHE_LINESIZE))); + + +#define XMP_MUTEX_INITIALIZER(name) \ + { 0, 0, -1, {XMP_NO_OWNER, XMP_NO_OWNER, XMP_NO_OWNER, XMP_NO_OWNER}, \ + 0, XMP_NO_OWNER, XMP_MUTEX_FLAG_NORMAL, 0, 0, 0, name } + +#define XMP_RECURSIVE_MUTEX_INITIALIZER(name) \ + { 0, 0, -1, {XMP_NO_OWNER, XMP_NO_OWNER, XMP_NO_OWNER, XMP_NO_OWNER}, \ + 0, XMP_NO_OWNER, XMP_MUTEX_FLAG_RECURSIVE, 0, 0, 0, name } + +#define XMP_MUTEX_FLAG_NORMAL 0 +#define XMP_MUTEX_FLAG_RECURSIVE 1 + +#define XMP_MUTEX_ACQUIRE_FAILED -1 +#define XMP_MUTEX_ERROR_DESTROY_OWNED -2 +#define XMP_MUTEX_ERROR_NOT_OWNED -3 +#define XMP_MUTEX_ERROR_ALREADY_OWNED -4 + +/* + xmp_mutex_init + + Nonsynchronizing + Nonblocking + + Usage: + mutex - points to an uninitialized mutex + name - name if you want one, NULL if not. + recursive - use recursive semantices + + Returns + zero on success (always succeeds) + +*/ + +extern int xmp_mutex_init (xmp_mutex_t * mutex, + const char * name, + unsigned int recursive); + +/* + int xmp_mutex_destroy (xmp_mutex_t * mutex); + + Synchronizing - will fail if mutex is held by anyone -- including + current processor + Nonblocking + + Usage: + mutex - points to a mutex + + Returns + zero on success + non-zero if mutex is held +*/ + +extern int xmp_mutex_destroy (xmp_mutex_t * mutex); + + +/* + xmp_mutex_lock -- Synchronizing + xmp_mutex_trylock + + Usage: + mutex - points to a mutex + + Returns + zero on success +*/ + +extern int xmp_mutex_lock (xmp_mutex_t * mutex); +extern int xmp_mutex_trylock (xmp_mutex_t * mutex); + + +/* + xmp_mutex_unlock + + Synchronizing + Nonblocking + + Usage: + mutex - points to a mutex + + Returns + zero on success - mutex is released + non-zero on failure - mutex is owned by another core + - prid of processor that does own it + note that by the time this function + returns, the owner of the core may + have changed. +*/ + +extern int xmp_mutex_unlock (xmp_mutex_t * mutex); + + +/* + xmp_mutex_name + + Nonsynchronizing + Nonblocking + + Usage: + mutex - points to a mutex + + Returns the name of the given mutex, which may be NULL. + +*/ + +const char * xmp_mutex_name (const xmp_mutex_t * mutex); + + +/* + xmp_mutex_trace_on + xmp_mutex_trace_off + + Nonsynchronizing + Nonblocking + + Turn off and on tracing for the mutex. + + These functions are only present in the debug version of the library. +*/ + +extern void xmp_mutex_trace_on (xmp_mutex_t * mutex); +extern void xmp_mutex_trace_off (xmp_mutex_t * mutex); + + +/* ------------------------------------------------------------------------- + xmp_condition_t + + Condition Variables following Mesa semantics. + + Condition variables are not sharable among interrupt levels. + +*/ + + +typedef struct xmp_condition_t { + unsigned int qhead; + unsigned int qtail; + unsigned char queue[XMP_MAX_CORES]; + unsigned int waiting[XMP_MAX_CORES]; + + unsigned char trace : 1; + unsigned char unused : 7; + const char * name; +} xmp_condition_t __attribute__ ((aligned (XMP_MAX_DCACHE_LINESIZE))); + + +#define XMP_CONDITION_INITIALIZER(name) \ + { 0, -1, {XMP_NO_OWNER, XMP_NO_OWNER, XMP_NO_OWNER, XMP_NO_OWNER}, \ + {0, 0, 0, 0}, 0, 0, name} + + +/* xmp_condition_init - Initialize a condition variable + + Nonsynchronizing, Nonblocking + + Usage: + condition - pointer to an xmp_condition_t + + On exit: + condition initialized + + Errors: none +*/ + +extern int xmp_condition_init (xmp_condition_t * condition, + const char * name); +extern int xmp_condition_destroy (xmp_condition_t * condition); + + +/* xmp_condition_wait - Wait for a condition variable + + Synchronizing, blocking + + Usage: + condition - pointer to an xmp_condition_t + mutex - pointer to an xmp_mutex_t already acquired by the calling + process + + Errors: if the mutex isn't held by this core +*/ + +extern int xmp_condition_wait (xmp_condition_t * condition, + xmp_mutex_t * mutex); + +/* xmp_condition_signal + + - Signal the first (if any) core waiting on a condition variable + + You must hold the mutex you passed to xmp_condition_wait before + calling this function. + + Synchronizing, nonblocking + + Usage: + condition - pointer to an xmp_condition_t + + Errors: none +*/ + +extern int xmp_condition_signal (xmp_condition_t * condition); + + +/* xmp_condition_broadcast + + - Signal all cores waiting on a condition variable + + Synchronizing, nonblocking + + You must hold the mutex you passed to xmp_condition_wait before + calling this function. + + Usage: + condition - pointer to an xmp_condition_t + + Errors: none +*/ + +extern int xmp_condition_broadcast (xmp_condition_t * condition); + + +static inline const char * xmp_condition_name (const xmp_condition_t * condition) +{ + return condition->name; +} + +/* + xmp_condition_trace_on + xmp_condition_trace_off + + Nonsynchronizing + Nonblocking + + Turn off and on statistics and tracing for the condition. For + tracing you must also set a trace file for the core. + + These functions are only present in the debug-version of the library. +*/ + +extern void xmp_condition_trace_on (xmp_condition_t * condition); +extern void xmp_condition_trace_off (xmp_condition_t * condition); + +#endif /* XCHAL_DCACHE_IS_COHERENT */ + +/* ------------------------------------------------------------------------- + xmp_barrier_t + + Classic barriers that stop any core from continuing until a + specified number of cores reach that point. Once the barrier allows + cores through, the barrier is reset and will stop cores from + progressing again. + + Barriers are not sharable among interrupt levels. + +*/ + + +typedef struct xmp_barrier_t +{ + xmp_atomic_int_t count; + xmp_atomic_int_t state; + xmp_atomic_int_t sleeping; + unsigned short num_cores; + unsigned short trace : 1; + unsigned short system : 1; + const char * name; +} xmp_barrier_t __attribute__ ((aligned (XMP_MAX_DCACHE_LINESIZE))); + +#define XMP_BARRIER_INITIALIZER(number, name) \ + { 0, 0, 0, number, 0, 0, name } + + +/* xmp_barrier_init - Initialize a barrier + + Nonsynchronizing, Nonblocking + + Usage: + barrier - pointer to an xmp_barrier_t + num_cores - number of cores needed to arrive at the + barrier before any are allowed through + On exit: + barrier initialized + + Always returns zero. + + Errors: none +*/ + +extern int xmp_barrier_init (xmp_barrier_t * barrier, int num_cores, + const char * name); + + +/* xmp_barrier_wait - Wait on a barrier + + Nonsynchronizing, Nonblocking + + Usage: + barrier - pointer to an xmp_barrier_t + On exit: + Enough cores (as determined at the barrier's initialization) + have reached the barrier. + + Errors: none +*/ + +extern int xmp_barrier_wait (xmp_barrier_t * barrier); + + +static inline const char * xmp_barrier_name (const xmp_barrier_t * barrier) +{ + return barrier->name; +} + + +/* + xmp_barrier_trace_on + xmp_barrier_trace_off + + Nonsynchronizing + Nonblocking + + Turn on and off tracing for the barrier. For + tracing you must also set a trace file for the core. + + These functions are only present in the debug-version of the library. +*/ + +extern void xmp_barrier_trace_on (xmp_barrier_t * barrier); +extern void xmp_barrier_trace_off (xmp_barrier_t * barrier); + + +/* ------------------------------------------------------------------------- + Portions of the library that are internal, but belong here for + convenience. +*/ + +extern xmp_atomic_int_t _ResetSync; + +static inline void +xmp_initial_sync (int num_cores) +{ + xmp_atomic_int_increment (&_ResetSync, 1); + while (xmp_coherent_l32ai (&_ResetSync) != num_cores) + xmp_spin (); +} + +#ifdef __cplusplus +} +#endif + +#endif /* _XMP_LIBRARY_H */ diff --git a/tools/sdk/include/esp32/xtensa/xos.h b/tools/sdk/include/esp32/xtensa/xos.h new file mode 100755 index 00000000..883a9c97 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos.h @@ -0,0 +1,524 @@ +/** @file */ + +// xos.h - XOS API interface and data structures visible to user code. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +#ifndef __XOS_H__ +#define __XOS_H__ + +#ifdef __cplusplus +extern "C" { +#endif + + +#include "xos_types.h" + +#include +#if XCHAL_HAVE_INTERRUPTS +#include +#include +#endif + +#include "xos_common.h" +#include "xos_errors.h" +#include "xos_regaccess.h" + + +//----------------------------------------------------------------------------- +// Convert x into a literal string. +//----------------------------------------------------------------------------- +#define _XOS_STR(x) __XOS_STR(x) +#define __XOS_STR(x) #x + + +//----------------------------------------------------------------------------- +// XOS version. +//----------------------------------------------------------------------------- +#define XOS_VERSION_MAJOR 1 +#define XOS_VERSION_MINOR 10 +#define XOS_VERSION_STRING "1.10" ///< XOS version string. + + +//----------------------------------------------------------------------------- +// Runtime error handling. +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +/// +/// Reports a fatal error and halts XOS operation, i.e. halts the system. This +/// function will call a user-registered error handler (if one has been set) +/// and then halt the system. The user handler may do system-specific things +/// such as record the error reason in nonvolatile memory etc. +/// +/// \param errcode Error code. May be any user defined value < 0. +/// Values >=0 are reserved for use by the system. +/// +/// \param errmsg Optional text string describing the error. +/// +/// \return This function does not return. +/// +//----------------------------------------------------------------------------- +void +xos_fatal_error(int32_t errcode, const char * errmsg); + + +#if XOS_DEBUG + +// Do not call directly. +void +xos_assert(const char * file, int32_t line); + +//----------------------------------------------------------------------------- +/// +/// Check condition and fail if condition expression is false. +/// In debug builds, an assertion failure will cause a fatal error to be +/// reported. In non-debug builds, assertions are compiled out. +/// +/// NOTE: Remember that any code in XOS_ASSERT() statements gets compiled out +/// for non-debug builds. +/// +//----------------------------------------------------------------------------- + +#define XOS_ASSERT(expr) if ((expr) == 0) xos_assert(__FILE__, __LINE__) + +#else + +#define XOS_ASSERT(expr) + +#endif + + +//----------------------------------------------------------------------------- +/// +/// Interrupt handler function pointer type. +/// +//----------------------------------------------------------------------------- +typedef void (XosIntFunc)(void * arg); + +//----------------------------------------------------------------------------- +/// +/// Print handler function pointer type. +/// +//----------------------------------------------------------------------------- +typedef int32_t (XosPrintFunc)(void * arg, const char * fmt, ...); + +//----------------------------------------------------------------------------- +/// +/// Fatal error handler function pointer type. +/// +//----------------------------------------------------------------------------- +typedef void (XosFatalErrFunc)(int32_t errcode, const char * errmsg); + +//----------------------------------------------------------------------------- +/// +/// Exception handler function pointer type. +/// +//----------------------------------------------------------------------------- +typedef void (XosExcHandlerFunc)(XosExcFrame * frame); + + +//----------------------------------------------------------------------------- +/// +/// Install a user defined exception handler for the specified exception type. +/// This will override the default XOS exception handler. The handler is a C +/// function that is passed one parameter -- a pointer to the exception frame. +/// The exception frame is allocated on the stack of the thread that caused the +/// exception, and contains saved state and exception information. For details +/// of the exception frame see the structure XosExcFrame. +/// +/// \param exc Exception type (number) to override. The exception +/// numbers are enumerated in . +/// +/// \param handler Pointer to handler function to be installed. +/// To revert to the default handler, pass NULL. +/// +/// \return Returns a pointer to previous handler installed, if any. +/// +//----------------------------------------------------------------------------- +XosExcHandlerFunc * +xos_register_exception_handler(int32_t exc, XosExcHandlerFunc * handler); + + +//----------------------------------------------------------------------------- +/// +/// Install a user defined fatal error handler. This function will be called if +/// a fatal error is reported either by user code or by XOS itself. It will be +/// passed the same arguments that are passed to xos_fatal_error(). +/// +/// The handler need not return. It should make minimal assumptions about the +/// state of the system. In particular, it should not assume that further XOS +/// system calls will succeed. +/// +/// \param handler Pointer to handler function to be installed. +/// +/// \return Returns a pointer to previous handler installed, if any. +/// +//----------------------------------------------------------------------------- +XosFatalErrFunc * +xos_register_fatal_error_handler(XosFatalErrFunc * handler); + + +#ifdef _XOS_INCLUDE_INTERNAL_ +# include "xos_internal.h" +#endif + + +#include "xos_thread.h" +#include "xos_timer.h" +#include "xos_cond.h" +#include "xos_event.h" +#include "xos_mutex.h" +#include "xos_msgq.h" +#include "xos_semaphore.h" +#include "xos_stopwatch.h" + + +//----------------------------------------------------------------------------- +/// +/// Register a handler function to call when interrupt "num" occurs. +/// +/// For level-triggered and timer interrupts, the handler function will have +/// to clear the source of the interrupt before returning, to avoid infinitely +/// retaking the interrupt. Edge-triggered and software interrupts are +/// automatically cleared by the OS interrupt dispatcher (see xos_handlers.S). +/// +/// \param num Xtensa internal interrupt number (0..31). To +/// refer to a specific external interrupt number +/// (BInterrupt pin), use HAL macro XCHAL_EXTINTx_NUM +/// where 'x' is the external number. +/// +/// \param handler Pointer to handler function. +/// +/// \param arg Argument passed to handler. +/// +/// \return Returns XOS_OK if successful, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_register_interrupt_handler(int32_t num, XosIntFunc * handler, void * arg); + + +//----------------------------------------------------------------------------- +/// +/// Unregister a handler function for interrupt "num". If no handler was +/// installed, this function will have no effect. +/// +/// \param num Xtensa internal interrupt number (0..31). To +/// refer to a specific external interrupt number +/// (BInterrupt pin), use HAL macro XCHAL_EXTINTx_NUM +/// where 'x' is the external number. +/// +/// \return Returns XOS_OK if successful, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_unregister_interrupt_handler(int32_t num); + + +//----------------------------------------------------------------------------- +/// +/// Register a high priority interrupt handler for interrupt level "level". +/// +/// Unlike low and medium priority interrupt handlers, high priority handlers +/// are not installed for a specific interrupt number, but for an interrupt +/// level. The level must be above XCHAL_EXCM_LEVEL. The handler function must +/// be written in assembly since C handlers are not supported for levels above +/// XCHAL_EXCM_LEVEL. The handler function must preserve all registers except +/// a0, and must return to the dispatcher via a "ret" instruction, not "rfi". +/// +/// NOTE: This method of dispatch takes a few cycles of overhead. If you wish +/// to save even these cycles, then you can define your own dispatch function +/// to override the built-in dispatcher. See xos_handlers.S for more details. +/// +/// \param level The interrupt level to be handled. +/// +/// \param handler Pointer to handler function. +/// +/// \return Returns XOS_OK if successful, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_register_hp_interrupt_handler(int32_t level, void * handler); + + +//----------------------------------------------------------------------------- +/// +/// Enable a specific interrupt, by interrupt number. +/// The state (enabled vs. disabled) of individual interrupts is global, i.e. +/// not associated with any specific thread. Depending on system options and +/// implementation, this state may be stored in one of two ways: +/// - directly in the INTENABLE register, or +/// - in a global variable (this is generally the case when INTENABLE is used +/// not just to control what interrupts are enabled globally, but also for +/// software interrupt prioritization within an interrupt level, effectively +/// providing finer grained levels; in this case XOS takes care to update +/// INTENABLE whenever either the global enabled-state variable or the +/// per-thread fine-grained-level variable change). +/// Thus it is best to never access the INTENABLE register directly. +/// +/// To modify thread-specific interrupt priority level, use one of: +/// - xos_set_int_pri_level() +/// - xos_restore_int_pri_level() +/// - xos_disable_interrupts() +/// - xos_restore_interrupts() +/// +/// NOTE: To refer to a specific external interrupt number (BInterrupt pin), +/// use HAL macro XCHAL_EXTINTx_NUM where 'x' is the external interrupt +/// number. For example, to enable external interrupt 3 (BInterrupt[3]), +/// you can use: +/// +/// xos_interrupt_enable( XCHAL_EXTINT3_NUM ); +/// +/// \param intnum Interrupt number to enable. Must range between 0-31. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +void +xos_interrupt_enable(uint32_t intnum); + + +//----------------------------------------------------------------------------- +/// +/// Disable a specific individual interrupt, by interrupt number. +/// +/// This is the counterpart to xos_interrupt_enable(). See the description +/// of xos_interrupt_enable() for further comments and notes. +/// +/// \param intnum Interrupt number to disable. Must range between 0-31. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +void +xos_interrupt_disable(uint32_t intnum); + + +//----------------------------------------------------------------------------- +/// +/// Get the CPU's current interrupt priority level. Interrupts at or below this +/// priority level are blocked. +/// +/// \return Returns the current IPL, ranging from 0 to XCHAL_NUM_INTLEVELS. +/// +//----------------------------------------------------------------------------- +static inline uint32_t +xos_get_int_pri_level(void) +{ +#if XCHAL_HAVE_INTERRUPTS + return XT_RSR_PS() & 0xF; +#else + return 0; +#endif +} + + +//----------------------------------------------------------------------------- +/// +/// Set the CPU's interrupt priority level to the specified level, but only if +/// the current IPL is below the one requested. This function will never cause +/// the interrupt priority level to be lowered from the current level. +/// Call this function to block interrupts at or below the specified priority +/// level. +/// +/// When setting the IPL temporarily (such as in a critical section), call +/// xos_set_int_pri_level(), execute the critical code section, and then call +/// xos_restore_int_pri_level(). +/// +/// The interrupt priority level is part of the thread context, so it is saved +/// and restored across context switches. To enable and disable individual +/// interrupts globally, use the functions xos_interrupt_enable() and +/// xos_interrupt_disable() instead. +/// +/// NOTE: It is usually not required to disable interrupts at a level higher +/// than that of the highest priority interrupt that interacts with the OS +/// (i.e. calls into XOS such that threads may be woken / blocked / +/// reprioritized / switched, or otherwise access XOS data structures). +/// In XOS, that maximum level is XOS_MAX_OS_INTLEVEL, which defaults to +/// XCHAL_EXCM_LEVEL. This may be modified by editing xos_params.h and +/// rebuilding XOS. +/// +/// \param level The new interrupt priority level (IPL). +/// +/// \return Returns a value that can be used to restore the previous +/// priority level by calling xos_restore_int_pri_level(). This +/// value should be treated as opaque by application code, and +/// should be passed unchanged to the restore function. +/// +//----------------------------------------------------------------------------- +__attribute__((always_inline)) +static inline uint32_t +xos_set_int_pri_level(uint32_t level) +{ +#if XCHAL_HAVE_INTERRUPTS +#pragma no_reorder + uint32_t ps = XT_RSR_PS(); + + if (level > (ps & 0xF)) { + level = (ps & ~0xF) | level; + XT_WSR_PS(level); + XT_RSYNC(); + } + + return ps; +#else + return 0; +#endif +} + + +//----------------------------------------------------------------------------- +/// +/// Restores the CPU to a previously saved interrupt priority level. This level +/// must have been obtained by calling xos_set_int_pri_level(). +/// +/// \param oldval Return value from xos_set_int_pri_level(). +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +__attribute__((always_inline)) +static inline void +xos_restore_int_pri_level(const uint32_t oldval) +{ +#if XCHAL_HAVE_INTERRUPTS +#pragma no_reorder + XT_WSR_PS(oldval); + XT_RSYNC(); +#else + // Nothing +#endif +} + + +//----------------------------------------------------------------------------- +/// +/// Disable all interrupts that can interact directly with the OS. This is a +/// convenience function, shorthand for setting the IPL to XOS_MAX_OS_INTLEVEL. +/// +/// Returns: A value that can be used to restore the previous priority level +/// by calling xos_restore_interrupts(). This value should be treated as +/// opaque by application code, and should be passed unchanged to the restore +/// function. +/// +//----------------------------------------------------------------------------- +static inline uint32_t +xos_disable_interrupts(void) +{ + return xos_set_int_pri_level(XOS_MAX_OS_INTLEVEL); +} + + +//----------------------------------------------------------------------------- +/// +/// Restore the CPU's previously saved interrupt status. This is a convenience +/// function, the counterpart to xos_disable_interrupts(). +/// +/// \return rval Return value from xos_disable_interrupts(). +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +static inline void +xos_restore_interrupts(uint32_t rval) +{ + xos_restore_int_pri_level(rval); +} + + +#ifdef _XOS_INCLUDE_INTERNAL_ + +//----------------------------------------------------------------------------- +// Enter an OS critical section, i.e. get exclusive access to OS critical +// state and data structures. Code that manipulates the state of OS objects +// or modifies internal OS state must call this function first, to ensure +// that it has exclusive access. On a single-core system, this is equivalent +// to blocking all interrupts that can interact directly with the OS, i.e. +// all interrupts at or below XOS_MAX_OS_INTLEVEL. In a multi-core system +// this is likely to be implemented differently to achieve the same effect. +// +// Returns: A value that is to be used to restore the state of the CPU when +// exiting the critical section. This must be treated as opaque and passed +// unmodified to xos_critical_exit(). +// +// NOTE: This function is meant for use in OS code, not in applications. +//----------------------------------------------------------------------------- +__attribute__((always_inline)) +static inline uint32_t +xos_critical_enter(void) +{ +#if XCHAL_HAVE_INTERRUPTS + // This function cannot be called by high-level interrupt handlers, + // i.e. it can never be called with intlevel > XOS_MAX_OS_INTLEVEL. + // So, we do not need to check current intlevel because we will not + // ever be lowering it by setting it to XOS_MAX_OS_INTLEVEL. + // NOTE: sync after RSIL not needed. + return XT_RSIL(XOS_MAX_OS_INTLEVEL); +#else + return 0; +#endif +} + + +//----------------------------------------------------------------------------- +// Exit an OS critical section and restore CPU state. See the documentation +// for xos_critical_enter(). +// +// cflags Return value from xos_critical_enter(). +// Must be treated as an opaque value. +// +// Returns: Nothing. +// +// NOTE: This function is meant for use in OS code, not in applications. +//----------------------------------------------------------------------------- +__attribute__((always_inline)) +static inline void +xos_critical_exit(uint32_t cflags) +{ + xos_restore_int_pri_level(cflags); +} + +#endif // _XOS_INCLUDE_INTERNAL_ + + +// This file uses things defined above +#include "xos_syslog.h" + + +// Misc + +//----------------------------------------------------------------------------- +// Helper function to list all threads in system. Useful for debug. +//----------------------------------------------------------------------------- +void +xos_display_threads(void * arg, XosPrintFunc * print_fn); + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_common.h b/tools/sdk/include/esp32/xtensa/xos_common.h new file mode 100755 index 00000000..647cb7f4 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_common.h @@ -0,0 +1,362 @@ + +// xos_common.h - Macros and definitions common to C and assembly code. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +#ifndef __XOS_COMMON_H__ +#define __XOS_COMMON_H__ + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include + +#include "xos_params.h" + + +//----------------------------------------------------------------------------- +// Macros that help define structures for both C and assembler. +// These are somewhat different from the XTOS version in xtruntime-frames.h. +//----------------------------------------------------------------------------- +#if defined(_ASMLANGUAGE) || defined(__ASSEMBLER__) + +#define STRUCT_BEGIN .pushsection .text; .struct 0 +#define STRUCT_FIELD(ctype,size,asname,name) asname: .space size +#define STRUCT_AFIELD(ctype,size,asname,name,n) asname: .space (size)*(n) +#define STRUCT_END(sname) sname##Size:; .popsection + +#else + +#define STRUCT_BEGIN typedef struct { +#define STRUCT_FIELD(ctype,size,asname,name) ctype name; +#define STRUCT_AFIELD(ctype,size,asname,name,n) ctype name[n]; +#define STRUCT_END(sname) } sname; + +#endif //_ASMLANGUAGE || __ASSEMBLER__ + + +//----------------------------------------------------------------------------- +// Offsets relative to xos_globals. +//----------------------------------------------------------------------------- +#define XOS_INTLEVEL_MASK 0 // offset to the level mask +#define XOS_INTENABLE_MASK 4 // offset to the enable mask +#define XOS_CURR_THREADPTR 8 // offset to the current thread ptr +#define XOS_NEXT_THREADPTR 12 // offset to the next thread ptr +#define XOS_INTERRUPT_TABLE 16 // offset to the interrupt table + + +//----------------------------------------------------------------------------- +// Offsets for xos_interrupt_table[] entries. +//----------------------------------------------------------------------------- +#define XOS_INTTAB_HANDLER (XOS_INTERRUPT_TABLE+0) // ofs to interrupt handler +#define XOS_INTTAB_ARG (XOS_INTERRUPT_TABLE+4) // ofs to interrupt handler arg +#define XOS_INTTAB_PS (XOS_INTERRUPT_TABLE+8) // (hwpri) PS for interrupt level +#define XOS_INTTAB_LEVEL (XOS_INTERRUPT_TABLE+8) // (swpri) interrupt level (1..7) +#define XOS_INTTAB_PRI (XOS_INTERRUPT_TABLE+9) // (swpri) interrupt priority (0..255) +#define XOS_INTTAB_PRIMASK (XOS_INTERRUPT_TABLE+12) // (swpri) mask of higher pri. interrupts + + +//----------------------------------------------------------------------------- +// Exception/interrupt stack frame layout for a pre-empted thread +// tcb->resume_fn == &xos_resume_preempted_thread). +// Pointed to by thread->esf. Located just below thread's current stack ptr. +// Thread's a1 == thread->esf + XosExcFrameSize. +// NOTE: exception frame size is a multiple of 16. +//----------------------------------------------------------------------------- +STRUCT_BEGIN +STRUCT_AFIELD(long,4,FRAME_AREG,areg, 12) // a4-a15 (offsets 0 thru 44) + // (a1 is computed, a0,a2-a3 are in s32e range of a1) +//#if XCHAL_HAVE_LOOPS +STRUCT_FIELD (long,4,FRAME_LBEG,lbeg) +STRUCT_FIELD (long,4,FRAME_LEND,lend) +STRUCT_FIELD (long,4,FRAME_LCOUNT,lcount) +//#endif +//#if XCHAL_HAVE_MAC16 +STRUCT_FIELD (long,4,FRAME_ACCLO,acclo) +STRUCT_FIELD (char,1,FRAME_ACCHI,acchi) +//#endif +STRUCT_FIELD (char,1,FRAME_SAR,sar) +STRUCT_FIELD (short,2,FRAME_PAD0,pad0) // unused +STRUCT_FIELD (long,4,FRAME_EXCCAUSE,exccause) +STRUCT_FIELD (long,4,FRAME_EXCVADDR,excvaddr) +STRUCT_FIELD (long,4,FRAME_PAD1,pad1) // unused -- pad to make multiple of 16 bytes +STRUCT_FIELD (long,4,FRAME_PAD2,pad2) +STRUCT_FIELD (long,4,FRAME_PS,ps) // (XOS_FRAME_SIZE-44) in S32E range of end +STRUCT_FIELD (long,4,FRAME_PC,pc) // (XOS_FRAME_SIZE-40) in S32E range of end +STRUCT_FIELD (long,4,FRAME_A0,a0) +STRUCT_FIELD (long,4,FRAME_A2,a2) // (XOS_FRAME_SIZE-32) in S32E range of end +STRUCT_FIELD (long,4,FRAME_A3,a3) // (XOS_FRAME_SIZE-28) in S32E range of end +STRUCT_FIELD (long,4,FRAME_LEVELMASK,levelmask) // +STRUCT_FIELD (long,4,FRAME_NESTCHAIN,nestchain) // nested C function call chain ptr +// Caller's a0-a3 save area below SP. These fields MUST be the last ones in the +// struct so that they are guaranteed to be just under the original SP (before +// we allocate the exception frame). +STRUCT_AFIELD (long,4,FRAME_CWINSAVE,cwinsave, 4) // (XOS_FRAME_SIZE-16) +STRUCT_END(XosExcFrame) // NOTE: exception frame size is 128 + +#define FRAME_AR(x) (FRAME_AREG + x*4 - 16) + +#if defined(_ASMLANGUAGE) || defined(__ASSEMBLER__) +#define XOS_FRAME_SIZE XosExcFrameSize +#else +#define XOS_FRAME_SIZE sizeof(XosExcFrame) +#endif + + +//----------------------------------------------------------------------------- +// Stack frame layout for a cooperatively switched out thread +// (tcb->resume_fn == &xos_resume_cooperative_thread). +// Pointed to by thread->esf. This is a function frame. +// Thread's a1 == thread->esf. +//----------------------------------------------------------------------------- +STRUCT_BEGIN +STRUCT_FIELD (long,4,CFRAME_A0,a0) // return PC +STRUCT_FIELD (long,4,CFRAME_LEVELMASK,levelmask) +STRUCT_FIELD (long,4,CFRAME_PS,ps) +#ifdef __XTENSA_CALL0_ABI__ +STRUCT_FIELD (long,4,CFRAME_PAD0,pad0) +STRUCT_AFIELD(long,4,CFRAME_AREG,areg,4) // callee-saved regs a12-a15 +#endif +STRUCT_END(XosCoopFrame) + + +//----------------------------------------------------------------------------- +// Offsets into thread control block (must match xos_thread.h !!) +//----------------------------------------------------------------------------- +#define TCB_RESUME_FN 12 // ptr to thread resume asm sequence +#define TCB_STACK_ESF 16 // saved stack ptr (actually, ptr to ESF) +#define TCB_TIE_SAVE 20 // ptr to TIE save area +#define TCB_RETVALUE 24 // ptr to xos_block return value +#define TCB_STACK_END 36 // ptr to end of stack (thread's initial stack ptr) +#define TCB_STARTUP_ENTRY 40 // ptr to thread entry function +#define TCB_STARTUP_ARG 44 // ptr to thread entry function's arg +#define TCB_READY 48 // thread ready state (1 byte) +#define TCB_CLIB_PTR 108 // thread C lib context pointer + +#define TCB_RESUME_CCOUNT 116 // cycle count at last resume +#define TCB_CYCLE_COUNT 120 // number of cycles consumed +#define TCB_NORMAL_RESUMES 128 // number of cooperative/restart thread resumes +#define TCB_PREEMPT_RESUMES 132 // number of pre-emptive thread resumes + + +//----------------------------------------------------------------------------- +// Coprocessor state handling: +// The coprocessor state save area is allocated on the thread stack. The stack +// must be sized appropriately. Threads that do not use coprocessors need not +// allocate the storage area. +// +// Along with the save area for each coprocessor, two bitmasks with flags per +// coprocessor (laid out as in the CPENABLE reg) help manage context switching +// coprocessors as efficiently as possible: +// +// XT_CPENABLE +// The contents of a non-running thread's CPENABLE register. +// It represents the coprocessors owned (and whose state is still needed) +// by the thread. When a thread is preempted, its CPENABLE is saved here. +// When a thread solicits a context switch, its CPENABLE is cleared - the +// compiler has saved the (caller-saved) coprocessor state if needed. +// When a non-running thread loses ownership of a CP, its bit is cleared. +// When a thread runs, it's XT_CPENABLE is loaded into the CPENABLE reg. +// Avoids coprocessor exceptions when no change of ownership is needed. +// +// XT_CPSTORED +// A bitmask with the same layout as CPENABLE, a bit per coprocessor. +// Indicates whether the state of each coprocessor is saved in the state +// save area. When a thread enters the kernel, only the state of coprocs +// still enabled in CPENABLE is saved. When the coprocessor exception +// handler assigns ownership of a coprocessor to a thread, it restores +// the saved state only if this bit is set, and clears this bit. +// +// XT_CP_CS_ST +// A bitmask with the same layout as CPENABLE, a bit per co-processor. +// Indicates whether callee-saved state is saved in the state save area. +// Callee-saved state is saved by itself on a solicited context switch, +// and restored when needed by the coprocessor exception handler. +// Unsolicited switches will cause the entire coprocessor to be saved +// when necessary. +// +// XT_NCP_ASA +// Pointer to aligned save area for non-CP state. This is always filled +// in, even if there is no non-CP state to be saved. If there is no state +// to be saved then no space is actually allocated and this pointer is +// not used. +// +// XT_CP_ASA +// Pointer to aligned save area for coprocessor state. This is filled in +// only if coprocessor state is to be saved for the thread. Allows it to be +// aligned more than the overall save area (which might be stack-aligned +// or TCB-aligned). Especially relevant for Xtensa cores configured with a +// very large data path that requires alignment greater than 16 bytes (ABI +// stack alignment). +//----------------------------------------------------------------------------- + +#define ALIGNUP(n, val) (((val) + (n)-1) & -(n)) + +// Offsets of each coprocessor save area within the 'aligned save area'. +// The non-CP TIE state save area is at offset 0, so that it does not +// move around if some or all coprocessors are not to be saved. + +#define XT_NCP_SA 0 +#define XT_CP0_SA ALIGNUP(XCHAL_CP0_SA_ALIGN, XT_NCP_SA + XCHAL_NCP_SA_SIZE) +#define XT_CP1_SA ALIGNUP(XCHAL_CP1_SA_ALIGN, XT_CP0_SA + XCHAL_CP0_SA_SIZE) +#define XT_CP2_SA ALIGNUP(XCHAL_CP2_SA_ALIGN, XT_CP1_SA + XCHAL_CP1_SA_SIZE) +#define XT_CP3_SA ALIGNUP(XCHAL_CP3_SA_ALIGN, XT_CP2_SA + XCHAL_CP2_SA_SIZE) +#define XT_CP4_SA ALIGNUP(XCHAL_CP4_SA_ALIGN, XT_CP3_SA + XCHAL_CP3_SA_SIZE) +#define XT_CP5_SA ALIGNUP(XCHAL_CP5_SA_ALIGN, XT_CP4_SA + XCHAL_CP4_SA_SIZE) +#define XT_CP6_SA ALIGNUP(XCHAL_CP6_SA_ALIGN, XT_CP5_SA + XCHAL_CP5_SA_SIZE) +#define XT_CP7_SA ALIGNUP(XCHAL_CP7_SA_ALIGN, XT_CP6_SA + XCHAL_CP6_SA_SIZE) + +#define XT_TOT_SA_SIZE ALIGNUP(16, XT_CP7_SA + XCHAL_CP7_SA_SIZE) +#define XT_NCP_SA_SIZE XCHAL_NCP_SA_SIZE + +// Offsets within the overall save area + +#define XT_CPENABLE 0 // (2 bytes) coprocessors active for this thread +#define XT_CPSTORED 2 // (2 bytes) coprocessors saved for this thread +#define XT_CP_CS_ST 4 // (2 bytes) coprocessor callee-saved regs for this thread +#define XT_NCP_ASA 8 // (4 bytes) ptr to aligned save area for nonCP state +#define XT_CP_ASA 12 // (4 bytes) ptr to aligned save area for CP state + +// Overall size allows for dynamic alignment, make sure multiple of 4 bytes. +// XT_CP_SIZE - total space needed for all coprocessors + nonCP state + hdr +// XT_NCP_SIZE - total space needed for nonCP state + hdr + +#define XT_CP_SIZE ALIGNUP(4, (16 + XT_TOT_SA_SIZE + XCHAL_TOTAL_SA_ALIGN)) +#define XT_NCP_SIZE ALIGNUP(4, (16 + XT_NCP_SA_SIZE + XCHAL_TOTAL_SA_ALIGN)) + + +//----------------------------------------------------------------------------- +// Stack size computation. +// +// XOS_STACK_MIN_SIZE +// The minimum recommended stack size for any XOS thread. If you want to +// use a stack size smaller than this, you will have to verify that the +// smaller size will work under all operating conditions. +// +// XOS_STACK_MIN_SIZE_NO_CP +// The minimum recommended atack size for threads that will not use any +// coprocessor resources. No coprocessor state will be saved/restored +// for these threads. Non-CP TIE state will still be saved/restored. +// These threads must be created with the flag XOS_THREAD_NO_CP. +// +// XOS_STACK_EXTRA +// The amount of stack space used by the system to: +// - save coprocessor state +// - save non-coprocessor TIE state +// - allocate an interrupt/exception frame +// +// XOS_STACK_EXTRA_NO_CP +// The amount of stack space used by the system to: +// - save non-coprocessor TIE state +// - allocate an interrupt/exception frame +//----------------------------------------------------------------------------- + +#define XOS_STACK_EXTRA (XOS_FRAME_SIZE + XT_CP_SIZE) +#define XOS_STACK_EXTRA_NO_CP (XOS_FRAME_SIZE + XT_NCP_SIZE) + +#ifdef __XTENSA_CALL0_ABI__ +#define XOS_STACK_MIN_SIZE (XOS_STACK_EXTRA + 0x180) +#define XOS_STACK_MIN_SIZE_NO_CP (XOS_STACK_EXTRA_NO_CP + 0x180) +#else +#define XOS_STACK_MIN_SIZE (XOS_STACK_EXTRA + 0x200) +#define XOS_STACK_MIN_SIZE_NO_CP (XOS_STACK_EXTRA_NO_CP + 0x200) +#endif + + +//----------------------------------------------------------------------------- +// Items related to C library thread safety. +//----------------------------------------------------------------------------- +#if XOS_OPT_THREAD_SAFE_CLIB + +#if XSHAL_CLIB == XTHAL_CLIB_XCLIB + #if !defined(_ASMLANGUAGE) && !defined(__ASSEMBLER__) + #include + #endif + #define CLIB_THREAD_STRUCT struct _reent xclib_reent + #define GLOBAL_CLIB_PTR _reent_ptr +#elif XSHAL_CLIB == XTHAL_CLIB_NEWLIB + #if !defined(_ASMLANGUAGE) && !defined(__ASSEMBLER__) + #include + #endif + #define CLIB_THREAD_STRUCT struct _reent newlib_reent + #define GLOBAL_CLIB_PTR _impure_ptr +#else + #error The selected C runtime library is not thread safe. +#endif + +#endif // XOS_OPT_THREAD_SAFE_CLIB + + +//----------------------------------------------------------------------------- +// Check (MAX_OS_INTLEVEL,EXCM_LEVEL) +//----------------------------------------------------------------------------- +#if XOS_MAX_OS_INTLEVEL >= XCHAL_EXCM_LEVEL +# define XOS_MAX_OSEXCM_LEVEL XOS_MAX_OS_INTLEVEL +#else +# warning "XOS_MAX_OS_INTLEVEL was set below XCHAL_EXCM_LEVEL: this was never tested" +# define XOS_MAX_OSEXCM_LEVEL XCHAL_EXCM_LEVEL +#endif + + +//----------------------------------------------------------------------------- +// Detect if in interrupt context. +//----------------------------------------------------------------------------- +#if XCHAL_HAVE_INTERRUPTS +#define INTERRUPT_CONTEXT ((XT_RSR_PS() & PS_UM) == 0) +#else +#define INTERRUPT_CONTEXT 0 +#endif + + +//----------------------------------------------------------------------------- +// Xtensa tools version. +//----------------------------------------------------------------------------- +#if defined __XCC__ +#define XTTOOLS_VERSION (__XCC__ + __XCC_MINOR__) +#else +#define XTTOOLS_VERSION (0) +#endif + + +//----------------------------------------------------------------------------- +// Erratum workarounds. +//----------------------------------------------------------------------------- + +// Erratum 487 fix is available in version RF.3 onwards and RG.2 onwards. +#if ((__XCC__ == 11000) && (__XCC_MINOR__ >= 3)) || (XTTOOLS_VERSION >= 12002) +#define HWERR_487_FIX hw_erratum_487_fix +#else +#define HWERR_487_FIX +#endif + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_COMMON_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_cond.h b/tools/sdk/include/esp32/xtensa/xos_cond.h new file mode 100755 index 00000000..8116947d --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_cond.h @@ -0,0 +1,145 @@ +/** @file */ + +// xos_cond.h - XOS condition variables API interface and data structures. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + +#ifndef __XOS_COND_H__ +#define __XOS_COND_H__ + +#include "xos_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +//----------------------------------------------------------------------------- +// +// Function pointer type for condition callbacks (defined in xos_thread.h) +// +// typedef int32_t (XosCondFunc)(void * arg, int32_t sig_value, XosThread * thread); +// +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +/// +/// Condition object. +/// +//----------------------------------------------------------------------------- +typedef struct XosCond { + XosThreadQueue queue; ///< Queue of waiters. +#if XOS_COND_DEBUG + uint32_t sig; // Signature indicates valid object. +#endif +} XosCond; + + +//----------------------------------------------------------------------------- +/// +/// Initialize a condition object before first use. The object must be +/// allocated by the caller. +/// +/// \param cond Pointer to condition object. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +void +xos_cond_create(XosCond * cond); + + +//----------------------------------------------------------------------------- +/// +/// Destroy a condition object. Must have been previously created by calling +/// xos_cond_create(). +/// +/// \param cond Pointer to condition object. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +void +xos_cond_delete(XosCond * cond); + + +//----------------------------------------------------------------------------- +/// +/// Wait on a condition: block until the condition is satisfied. The condition +/// is satisfied when xos_cond_signal() is called on this condition *and* the +/// condition callback function returns non-zero. If there is no callback +/// function, then the condition is automatically satisfied. +/// +/// The condition structure must have been initialized before first use by +/// calling xos_cond_create(). +/// +/// \param cond Pointer to condition object. +/// +/// \param cond_fn Pointer to a function, called by xos_cond_signal(), +/// that should return non-zero if this thread is to +/// be resumed. The function is invoked as: +/// `(*cond_fn)(cond_arg, sig_value)`. +/// +/// \param cond_arg Argument passed to cond_fn. +/// +/// \return Returns the value passed to xos_cond_signal(). +/// +//----------------------------------------------------------------------------- +int32_t +xos_cond_wait(XosCond * cond, XosCondFunc * cond_fn, void * cond_arg); + + +//----------------------------------------------------------------------------- +/// +/// Trigger the condition: wake all threads waiting on the condition, if their +/// condition function evaluates to true (non-zero). If there is no condition +/// function for a thread then it is automatically awakened. +/// +/// The condition structure must have been initialized before first use by +/// calling xos_cond_create(). +/// +/// \param cond Pointer to condition object. +/// +/// \param sig_value Value passed to all waiters, returned by +/// xos_cond_wait(). +/// +/// \return Returns the number of waiting threads that were resumed. +/// +/// NOTE: Signaling a condition that has no waiters has no effect on it, and +/// the signal is not remembered. Any thread that waits on it later must be +/// woken by another call to xos_cond_signal(). +/// +//----------------------------------------------------------------------------- +int32_t +xos_cond_signal(XosCond * cond, int32_t sig_value); + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_COND_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_errors.h b/tools/sdk/include/esp32/xtensa/xos_errors.h new file mode 100755 index 00000000..790cdde3 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_errors.h @@ -0,0 +1,107 @@ +/** @file */ + +// xos_errors.h - XOS error codes. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + + +#ifndef __XOS_ERRORS_H__ +#define __XOS_ERRORS_H__ + +#include "xos_types.h" + + +#define _XOS_ERR_FIRST (-65536) +#define _XOS_ERR_LAST (-1) + + +//----------------------------------------------------------------------------- +/// +/// List of XOS error codes. All error codes are negative integers, except for +/// XOS_OK which is zero. +/// XOS error codes occupy the range from -65536 up to -1. +/// The function IS_XOS_ERRCODE() can be used to check if a value lies within +/// the error code range. +/// +//----------------------------------------------------------------------------- +typedef enum xos_err_t { + XOS_OK = 0, + + XOS_ERR_NOT_FOUND = _XOS_ERR_FIRST, ///< Object not found + XOS_ERR_INVALID_PARAMETER, ///< Function parameter is invalid + XOS_ERR_LIMIT, ///< Limit exceeded + XOS_ERR_NOT_OWNED, ///< Object not owned by caller + XOS_ERR_MUTEX_LOCKED, ///< Mutex is already locked + XOS_ERR_MUTEX_NOT_OWNED, ///< Mutex not owned by caller + XOS_ERR_MUTEX_ALREADY_OWNED, ///< Mutex already owned by caller + XOS_ERR_MUTEX_DELETE, ///< Mutex being waited on has been deleted + XOS_ERR_COND_DELETE, ///< Condition being waited on has been deleted + XOS_ERR_SEM_DELETE, ///< Semaphore being waited on has been deleted + XOS_ERR_SEM_BUSY, ///< Semaphore is not available + XOS_ERR_EVENT_DELETE, ///< Event being waited on has been deleted + XOS_ERR_MSGQ_FULL, ///< Message queue is full + XOS_ERR_MSGQ_EMPTY, ///< Message queue is empty + XOS_ERR_MSGQ_DELETE, ///< Message queue being waited on has been deleted + XOS_ERR_TIMER_DELETE, ///< Timer being waited on has been deleted + XOS_ERR_CONTAINER_NOT_RTC, ///< Containing thread not of RTC type + XOS_ERR_CONTAINER_NOT_SAME_PRI, ///< Containing thread not at same priority + XOS_ERR_STACK_TOO_SMALL, ///< Thread stack is too small + XOS_ERR_CONTAINER_ILLEGAL, ///< Illegal container thread + XOS_ERR_ILLEGAL_OPERATION, ///< This operation is not allowed + XOS_ERR_THREAD_EXITED, ///< The thread has already exited + XOS_ERR_NO_TIMER, ///< No suitable timer found + XOS_ERR_FEATURE_NOT_PRESENT, ///< This feature is disabled or not implemented + XOS_ERR_TIMEOUT, ///< Wait timed out + + XOS_ERR_UNHANDLED_INTERRUPT, ///< No handler for interrupt + XOS_ERR_UNHANDLED_EXCEPTION, ///< No handler for exception + XOS_ERR_INTERRUPT_CONTEXT, ///< Operation is illegal in interrupt context + XOS_ERR_THREAD_BLOCKED, ///< Thread already blocked + XOS_ERR_ASSERT_FAILED, ///< Runtime assertion failure + XOS_ERR_CLIB_ERR, ///< Error in C library thread safety module + XOS_ERR_INTERNAL_ERROR, ///< XOS internal error + + XOS_ERR_LAST = _XOS_ERR_LAST, +} xos_err_t; + + +//----------------------------------------------------------------------------- +/// +/// Check if a value is a valid XOS error code. +/// +/// \param val Value to check +/// +/// \return Returns nonzero if 'val' is in the XOS error code range. +/// +//----------------------------------------------------------------------------- +static inline int32_t +IS_XOS_ERRCODE(xos_err_t val) +{ + return ((val >= _XOS_ERR_FIRST) && (val <= _XOS_ERR_LAST)); +} + + +#endif // __XOS_ERRORS_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_event.h b/tools/sdk/include/esp32/xtensa/xos_event.h new file mode 100755 index 00000000..43219a24 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_event.h @@ -0,0 +1,281 @@ +/** @file */ + +// xos_event.h - XOS Event API interface and data structures. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + +#ifndef __XOS_EVENT_H__ +#define __XOS_EVENT_H__ + +#include "xos_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +//----------------------------------------------------------------------------- +// Defines. +//----------------------------------------------------------------------------- +#define XOS_EVENT_BITS_ALL 0xFFFFFFFF +#define XOS_EVENT_BITS_NONE 0 + + +//----------------------------------------------------------------------------- +// Event flags. +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +/// +/// Event object. +/// +//----------------------------------------------------------------------------- +typedef struct XosEvent { + XosThreadQueue waitq; ///< Queue of waiters. + uint32_t bits; ///< Event bits + uint32_t mask; ///< Specifies which bits are valid + uint16_t flags; ///< Properties. + uint16_t pad; ///< Padding +#if XOS_EVENT_DEBUG + uint32_t sig; // Valid signature indicates inited. +#endif +} XosEvent; + + +//----------------------------------------------------------------------------- +/// +/// Initialize an event object before first use. +/// +/// \param event Pointer to event object. +/// +/// \param mask Mask of active bits. Only these bits can be signaled. +/// +/// \param flags Creation flags (currently ignored, should be zero). +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +void +xos_event_create(XosEvent * event, uint32_t mask, uint32_t flags); + + +//----------------------------------------------------------------------------- +/// +/// Destroy an event object. Must have been previously created by calling +/// xos_event_create(). +/// +/// \param event Pointer to event object. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +void +xos_event_delete(XosEvent * event); + + +//----------------------------------------------------------------------------- +/// +/// Set the specified bits in the specified event. Propagates the bit states +/// to all waiting threads and wakes them if needed. +/// +/// \param event Pointer to event object. +/// +/// \param bits Mask of bits to set. Bits not set in the mask +/// will not be modified by this call. To set all +/// the bits in the event, use the constant +/// XOS_EVENT_BITS_ALL. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_event_set(XosEvent * event, uint32_t bits); + + +//----------------------------------------------------------------------------- +/// +/// Clear the specified bits in the specified event. Propagates the bit states +/// to all waiting threads and wakes them if needed. +/// +/// \param event Pointer to event object. +/// +/// \param bits Mask of bits to clear. Every bit that is set in +/// the mask will be cleared from the event. Bits +/// not set in the mask will not be modified by this +/// call. To clear all the bits in an event use the +/// constant XOS_EVENT_BITS_ALL. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_event_clear(XosEvent * event, uint32_t bits); + + +//----------------------------------------------------------------------------- +/// +/// Clear and set the specified bits in the specified event. The two steps are +/// combined into one update, so this is faster than calling xos_event_clear() +/// and xos_event_set() separately. Only one update is sent out to waiting +/// threads. +/// +/// \param event Pointer to event object. +/// +/// \param clr_bits Mask of bits to clear. The clear operation +/// happens before the set operation. +/// +/// \param set_bits Mask of bits to set. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_event_clear_and_set(XosEvent * event, uint32_t clr_bits, uint32_t set_bits); + + +//----------------------------------------------------------------------------- +/// +/// Get the current state of the event object. This is a snapshot of the state +/// of the event at this time. +/// +/// \param event Pointer to event object. +/// +/// \param pstate Pointer to a uint32_t variable where the state +/// will be returned. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_event_get(XosEvent * event, uint32_t * pstate); + + +//----------------------------------------------------------------------------- +/// +/// Wait until all the specified bits in the wait mask become set in the given +/// event object. +/// +/// \param event Pointer to event object. +/// +/// \param bits Mask of bits to test. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_event_wait_all(XosEvent * event, uint32_t bits); + + +//----------------------------------------------------------------------------- +/// +/// Wait until all the specified bits in the wait mask become set in the given +/// event object, or the timeout expires. +/// +/// \param event Pointer to event object. +/// +/// \param bits Mask of bits to test. +/// +/// \param to_cycles Timeout in cycles. Convert from time to cycles +/// using the helper functions provided in xos_timer. +/// A value of zero indicates no timeout. +/// +/// \return Returns XOS_OK on success, XOS_ERR_TIMEOUT on timeout, else +/// error code. +/// +/// NOTE: If XOS_OPT_WAIT_TIMEOUT is not enabled, then the timeout value is +/// ignored, and no timeout will occur. +/// +//----------------------------------------------------------------------------- +int32_t +xos_event_wait_all_timeout(XosEvent * event, uint32_t bits, uint64_t to_cycles); + + +//----------------------------------------------------------------------------- +/// +/// Wait until any of the specified bits in the wait mask become set in the +/// given event object. +/// +/// \param event Pointer to event object. +/// +/// \param bits Mask of bits to test. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_event_wait_any(XosEvent * event, uint32_t bits); + + +//----------------------------------------------------------------------------- +/// +/// Wait until any of the specified bits in the wait mask become set in the +/// event object, or the timeout expires. +/// +/// \param event Pointer to event object. +/// +/// \param bits Mask of bits to test. +/// +/// \param to_cycles Timeout in cycles. Convert from time to cycles +/// using the helper functions provided in xos_timer. +/// A value of zero indicates no timeout. +/// +/// \return Returns XOS_OK on success, XOS_ERR_TIMEOUT on timeout, else +/// error code. +/// +/// NOTE: If XOS_OPT_WAIT_TIMEOUT is not enabled, then the timeout value is +/// ignored, and no timeout will occur. +/// +//----------------------------------------------------------------------------- +int32_t +xos_event_wait_any_timeout(XosEvent * event, uint32_t bits, uint64_t to_cycles); + + +//----------------------------------------------------------------------------- +/// +/// Atomically set a specified group of bits, then wait for another specified +/// group of bits to become set. +/// +/// \param event Pointer to event object. +/// +/// \param set_bits Group of bits to set. +/// +/// \param wait_bits Group of bits to wait on. All the bits in the +/// group will have to get set before the wait is +/// satisfied. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_event_set_and_wait(XosEvent * event, uint32_t set_bits, uint32_t wait_bits); + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_EVENT_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_internal.h b/tools/sdk/include/esp32/xtensa/xos_internal.h new file mode 100755 index 00000000..5b8c8b46 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_internal.h @@ -0,0 +1,120 @@ + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +#ifndef __XOS_INTERNAL_H__ +#define __XOS_INTERNAL_H__ + +#if !defined(__XOS_H__) || !defined(_XOS_INCLUDE_INTERNAL_) + #error "xos_internal.h must be included by defining _XOS_INCLUDE_INTERNAL_ before including xos.h" +#endif + +#include +#include "xos_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +// Use this macro to suppress compiler warnings for unused variables. + +#define UNUSED(x) (void)(x) + + +#if XOS_DEBUG + +#include +#include +# define DPRINTF printf + +#else + +# define DPRINTF(x...) do {} while(0) + +#endif + + +//----------------------------------------------------------------------------- +// Internal flags for thread creation. +//----------------------------------------------------------------------------- +#define XOS_THREAD_FAKE 0x8000 // Don't allocate stack (init and idle threads). + + +//----------------------------------------------------------------------------- +// Interrupt handler table entry. This structure defines one entry in the XOS +// interrupt handler table. +//----------------------------------------------------------------------------- +typedef struct XosIntEntry { + XosIntFunc * handler; // Pointer to handler function. + void * arg; // Argument passed to handler function. +#if XOS_OPT_INTERRUPT_SWPRI + unsigned char level; // Interrupt level. + unsigned char priority; // Interrupt priority. + short reserved; // Reserved. + unsigned int primask; // Mask of interrupts at higher priority. +#else + unsigned int ps; // Value of PS when running the handler. +#endif +} XosIntEntry; + + +//----------------------------------------------------------------------------- +// Extern variables. +//----------------------------------------------------------------------------- +extern unsigned xos_intlevel_mask; +extern unsigned xos_intenable_mask; +extern XosIntEntry xos_interrupt_table[XCHAL_NUM_INTERRUPTS]; + +extern uint32_t xos_clock_freq; +extern uint32_t xos_tick_period; +extern uint64_t xos_system_ticks; +extern uint64_t xos_system_cycles; +extern uint32_t xos_num_ctx_switches; + + +/* + +One thing I noticed is different between my initial idea of stack +assignments to RTC threads, when comparing to interrupts, is that I +expected each RTC thread priority to have its own stack, whereas +interrupts of different priorities share an interrupt stack. + +It's not really a difference in memory usage, because when assigning +multiple priorities to a stack, you have to add-up worst-case for +all priorities. One possible functional difference is that with +separate stacks per priority, it's possible to dynamically change +the priority of an RTC thread (while it's running). Not sure how +valuable that might be -- changing priority is useful with priority +inheritance, to avoid priority inversion, but I don't know how often +an RTC thread might acquire a lock (it couldn't block on acquiring a +lock in the usual sense -- it could get queued waiting and be restarted +when it becomes available, or use try_lock instead of lock). + +*/ + +#ifdef __cplusplus +} +#endif + +#endif /* __XOS_INTERNAL_H__ */ + diff --git a/tools/sdk/include/esp32/xtensa/xos_msgq.h b/tools/sdk/include/esp32/xtensa/xos_msgq.h new file mode 100755 index 00000000..30b9aa90 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_msgq.h @@ -0,0 +1,278 @@ +/** @file */ + +// xos_msgq.h - XOS Message Queue API and data structures. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + + +#ifndef __XOS_MSGQ_H__ +#define __XOS_MSGQ_H__ + +#include "xos_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +//----------------------------------------------------------------------------- +// XosMsgQueue is a multi-writer multi-reader message queue implementation. +// It is completely thread-safe and can be used by interrupt handlers. +// Interrupt handlers are guaranteed not to block when trying to send or +// receive a message. Messages are copied into the queue. The queue contains +// storage for a fixed number of messages defined at queue creation time. +// Messages must be a multiple of 4 bytes long (padded if necessary) and the +// message buffers must be 4-byte aligned. +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +// Message Queue flags. +//----------------------------------------------------------------------------- +#define XOS_MSGQ_WAIT_PRIORITY 0x0000 ///< Wake waiters in priority order (default) +#define XOS_MSGQ_WAIT_FIFO 0x0001 ///< Wake waiters in FIFO order +#define XOS_MSGQ_FULL 0x0002 // Queue is full +#define XOS_MSGQ_DELETED 0x8000 // Queue is deleted + + +//----------------------------------------------------------------------------- +/// +/// XosMsgQueue object. +/// +//----------------------------------------------------------------------------- +typedef struct XosMsgQueue { + uint16_t flags; ///< queue flags + uint16_t count; ///< # of messages queue can hold + uint32_t msize; ///< message size in bytes + uint16_t head; ///< write pointer + uint16_t tail; ///< read pointer + XosThreadQueue readq; ///< reader wait queue + XosThreadQueue writeq; ///< writer wait queue +#if XOS_MSGQ_DEBUG + uint32_t sig; // debug signature +#endif +#if XOS_OPT_MSGQ_STATS + uint32_t num_send; ///< # of messages put to queue + uint32_t num_recv; ///< # of messages taken from queue + uint32_t num_send_blks; ///< # of times thread blocked on send + uint32_t num_recv_blks; ///< # of times thread blocked on recv +#endif + uint32_t msg[1]; ///< first word of message buffer +} XosMsgQueue; + + +//----------------------------------------------------------------------------- +/// +/// Use these macros to statically or dynamically allocate a message queue. +/// XOS_MSGQ_ALLOC allocates a static queue, while XOS_MSGQ_SIZE can be used +/// to allocate memory via malloc() etc. +/// +/// Static: this allocates a queue named "testq", containing 10 messages, +/// each 16 bytes long. +/// +/// XOS_MSGQ_ALLOC(testq, 10, 16); +/// +/// Dynamic: this allocates a queue named "testq", containing 10 messages, +/// each 16 bytes long. +/// +/// XosMsgQueue * testq = malloc( XOS_MSGQ_SIZE(10, 16) ); +/// +/// \param name The queue name, i.e. the name of the pointer +/// to the queue. Used as the queue handle in +/// queue API calls. +/// +/// \param num Number of messages to allocate in queue. Must be > 0. +/// +/// \param size Message size in bytes. Must be > 0 and multiple of 4. +/// +//----------------------------------------------------------------------------- + +#define XOS_MSGQ_ALLOC(name, num, size) \ + static uint8_t name ## _buf[ sizeof(XosMsgQueue) + ((num) * (size)) ]; \ + XosMsgQueue * name = (XosMsgQueue *) name ## _buf; + +#define XOS_MSGQ_SIZE(num, size) \ + (sizeof(XosMsgQueue) + ((num) * (size))) + + +//----------------------------------------------------------------------------- +/// +/// Create the message queue object. Memory for the queue must be allocated by +/// the caller, either statically or via dynamic allocation. See the macros +/// XOS_MSGQ_ALLOC and XOS_MSGQ_SIZE for examples. +/// +/// \param msgq Handle (pointer) to message queue. +/// +/// \param num Number of messages allocated in queue. Must be > 0. +/// +/// \param size Message size in bytes. Must be > 0 and multiple of 4. +/// +/// \param flags Queue flags: +/// - XOS_MSGQ_WAIT_FIFO - blocked threads will be +/// woken in FIFO order. +/// - XOS_MSGQ_WAIT_PRIORITY - blocked threads will +/// be woken in priority order (default). +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_msgq_create(XosMsgQueue * msgq, uint16_t num, uint32_t size, uint16_t flags); + + +//----------------------------------------------------------------------------- +/// +/// Destroys the specified queue. Any waiting threads are unblocked with an +/// error return. Any messages in the queue will be lost. +/// +/// \param msgq Pointer to message queue. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_msgq_delete(XosMsgQueue * msgq); + + +//----------------------------------------------------------------------------- +/// +/// Put a message into the queue. The message contents are copied into the next +/// available message slot. If no space is available, this function will block +/// if called from a thread, but will return immediately if called from an +/// interrupt handler. +/// +/// \param msgq Pointer to message queue. +/// +/// \param msg Pointer to message buffer. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_msgq_put(XosMsgQueue * msgq, const uint32_t * msg); + + +//----------------------------------------------------------------------------- +/// +/// Put a message into the queue. The message contents are copied into the next +/// available message slot. If no space is available, this function will block +/// if called from a thread, but will return immediately if called from an +/// interrupt handler. The thread will be unblocked when space frees up in the +/// queue or the timeout expires. +/// +/// \param msgq Pointer to message queue. +/// +/// \param msg Pointer to message buffer. +/// +/// \param to_cycles Timeout in cycles. Convert from time to cycles +/// using the helper functions provided in xos_timer. +/// A value of zero indicates no timeout. +/// +/// \return Returns XOS_OK on success, XOS_ERR_TIMEOUT on timeout, else error code. +/// +/// NOTE: If XOS_OPT_WAIT_TIMEOUT is not enabled, then the timeout value is +/// ignored, and no timeout will occur. +/// +//----------------------------------------------------------------------------- +int32_t +xos_msgq_put_timeout(XosMsgQueue * msgq, const uint32_t * msg, uint64_t to_cycles); + + +//----------------------------------------------------------------------------- +/// +/// Get a message from the queue. The message contents are copied into the +/// buffer that must be provided. If no message is available, this function +/// will block if called from a thread, but will return immediately if called +/// from an interrupt handler. +/// +/// \param msgq Pointer to message queue. +/// +/// \param msg Pointer to message buffer. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_msgq_get(XosMsgQueue * msgq, uint32_t * msg); + + +//----------------------------------------------------------------------------- +/// +/// Get a message from the queue. The message contents are copied into the +/// buffer that must be provided. If no message is available, this function +/// will block if called from a thread, but will return immediately if called +/// from an interrupt handler. The thread will be unblocked when a message +/// arrives in the queue or the timeout expires. +/// +/// \param msgq Pointer to message queue. +/// +/// \param msg Pointer to message buffer. +/// +/// \param to_cycles Timeout in cycles. Convert from time to cycles +/// using the helper functions provided in xos_timer. +/// A value of zero indicates no timeout. +/// +/// \return Returns XOS_OK on success, XOS_ERR_TIMEOUT on timeout, else error code. +/// +/// NOTE: If XOS_OPT_WAIT_TIMEOUT is not enabled, then the timeout value is +/// ignored, and no timeout will occur. +/// +//----------------------------------------------------------------------------- +int32_t +xos_msgq_get_timeout(XosMsgQueue * msgq, uint32_t * msg, uint64_t to_cycles); + + +//----------------------------------------------------------------------------- +/// +/// Check if the queue is empty. +/// +/// \param msgq Pointer to message queue. +/// +/// \return Returns nonzero if queue is empty, zero if queue is not empty. +/// +//----------------------------------------------------------------------------- +int32_t +xos_msgq_empty(XosMsgQueue * msgq); + + +//----------------------------------------------------------------------------- +/// +/// Check if the queue is full. +/// +/// \param msgq Pointer to message queue. +/// +/// \return Returns nonzero if queue is full, zero if queue is not full. +/// +//----------------------------------------------------------------------------- +int32_t +xos_msgq_full(XosMsgQueue * msgq); + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_MSGQ_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_mutex.h b/tools/sdk/include/esp32/xtensa/xos_mutex.h new file mode 100755 index 00000000..9df5f975 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_mutex.h @@ -0,0 +1,205 @@ +/** @file */ + +// xos_mutex.h - XOS Mutex API interface and data structures. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + +#ifndef __XOS_MUTEX_H__ +#define __XOS_MUTEX_H__ + +#include "xos_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +//----------------------------------------------------------------------------- +// Mutex flags. +//----------------------------------------------------------------------------- +#define XOS_MUTEX_WAIT_PRIORITY 0x0000 ///< Wake waiters in priority order (default) +#define XOS_MUTEX_WAIT_FIFO 0x0001 ///< Wake waiters in FIFO order +#define XOS_MUTEX_PRIORITY_CLG 0x0004 // Use priority ceiling +#define XOS_MUTEX_PRIORITY_INV 0x0008 // Protect against priority inversion + + +//----------------------------------------------------------------------------- +/// +/// XosMutex object. +/// +//----------------------------------------------------------------------------- +typedef struct XosMutex { + XosThread * owner; ///< Owning thread (null if unlocked). + XosThreadQueue waitq; ///< Queue of waiters. + uint32_t flags; ///< Properties. + uint32_t priority; + int32_t lock_count; ///< For recursive locking. +#if XOS_MUTEX_DEBUG + uint32_t sig; // Valid signature indicates inited. +#endif +} XosMutex; + + +//----------------------------------------------------------------------------- +/// +/// Initialize a mutex object before first use. +/// +/// \param mutex Pointer to mutex object. +/// +/// \param flags Creation flags: +/// - XOS_MUTEX_WAIT_FIFO -- Queue waiting threads +/// in fifo order. +/// - XOS_MUTEX_WAIT_PRIORITY -- Queue waiting threads +/// by priority. This is the default. +/// - XOS_MUTEX_PRIORITY_CLG -- Use specified priority +/// value as the mutex's priority ceiling. If the +/// owning thread has a priority lower than the mutex's +/// priority, then the thread will have its priority +/// raised to the higher value as long as it owns the +/// mutex. +/// - XOS_MUTEX_PRIORITY_INV -- Protect against priority +/// inversion. If there is a waiting thread with a +/// higher priority than the current owner thread, +/// then the owner thread's priority is raised to the +/// higher value for as long as it owns the mutex. +/// +/// \param priority Mutex's priority ceiling. This is used only if the +/// XOS_MUTEX_PRIORITY_CLG flag is set. +/// +/// \return Returns XOS_OK on success, else error code. +/// +/// NOTE: XOS_MUTEX_PRIORITY_CLG and XOS_MUTEX_PRIORITY_INV are NOT supported +/// in the current release. They will be supported in a future release. +/// +//----------------------------------------------------------------------------- +int32_t +xos_mutex_create(XosMutex * mutex, uint32_t flags, uint8_t priority); + + +//----------------------------------------------------------------------------- +/// +/// Destroy a mutex object. Must have been previously initialized by calling +/// xos_mutex_create(). +/// +/// \param mutex Pointer to mutex object. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_mutex_delete(XosMutex * mutex); + + +//----------------------------------------------------------------------------- +/// +/// Take ownership of the mutex: block until the mutex is owned. +/// The mutex must have been initialized. +/// +/// \param mutex Pointer to mutex object. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_mutex_lock(XosMutex * mutex); + + +//----------------------------------------------------------------------------- +/// +/// Take ownership of the mutex: block until the mutex is owned or the timeout +/// expires. The mutex must have been initialized. +/// +/// \param mutex Pointer to mutex object. +/// +/// \param to_cycles Timeout in cycles. Convert from time to cycles +/// using the helper functions provided in xos_timer. +/// A value of zero indicates no timeout. +/// +/// \return Returns XOS_OK on success, XOS_ERR_TIMEOUT on timeout, else error code. +/// +/// NOTE: If XOS_OPT_WAIT_TIMEOUT is not enabled, then the timeout value is +/// ignored, and no timeout will occur. +/// +//----------------------------------------------------------------------------- +int32_t +xos_mutex_lock_timeout(XosMutex * mutex, uint64_t to_cycles); + + +//----------------------------------------------------------------------------- +/// +/// Release ownership of the mutex. The mutex must have been initialized and +/// must be owned by the calling thread. +/// +/// \param mutex Pointer to mutex object. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_mutex_unlock(XosMutex * mutex); + + +//----------------------------------------------------------------------------- +/// +/// Try to take ownership of the mutex, but do not block if the mutex is taken. +/// Return immediately. The mutex must have been initialized. +/// +/// \param mutex Pointer to mutex object. +/// +/// \return Returns XOS_OK on success (mutex owned), else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_mutex_trylock(XosMutex * mutex); + + +//----------------------------------------------------------------------------- +/// +/// Return the state of the mutex (locked or unlocked) but do not attempt to +/// take ownership. The mutex must have been initialized. +/// +/// \param mutex Pointer to mutex object. +/// +/// \return Returns 0 if the mutex is unlocked, 1 if it is locked, -1 on error. +/// +//----------------------------------------------------------------------------- +static inline int32_t +xos_mutex_test(XosMutex * mutex) +{ + XOS_ASSERT(mutex); + + if (mutex != XOS_NULL) { + return (mutex->owner != XOS_NULL) ? 1 : 0; + } + return -1; +} + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_MUTEX_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_params.h b/tools/sdk/include/esp32/xtensa/xos_params.h new file mode 100755 index 00000000..3fca11f2 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_params.h @@ -0,0 +1,276 @@ +/** @file */ + +// xos_params.h - user-settable compile time parameters for XOS. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +#ifndef __XOS_PARAMS_H__ +#define __XOS_PARAMS_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +//----------------------------------------------------------------------------- +/// +/// Number of thread priority levels. At this time XOS supports a maximum of +/// 32 priority levels (0 - 31). +/// +//----------------------------------------------------------------------------- +#ifndef XOS_NUM_PRIORITY +#define XOS_NUM_PRIORITY 16 // Default is 16 +#endif + + +//----------------------------------------------------------------------------- +/// +/// Debug flags - Set to 1 to enable debug mode (and more verbose operation). +/// Can be set individually, or define XOS_DEBUG_ALL to enable all of them. +/// +/// - XOS_DEBUG -- Generic OS debug +/// - XOS_COND_DEBUG -- Condition objects debug +/// - XOS_EVENT_DEBUG -- Event objects debug +/// - XOS_MSGQ_DEBUG -- Message queue debug +/// - XOS_MUTEX_DEBUG -- Mutex objects debug +/// - XOS_SEM_DEBUG -- Semaphore objects debug +/// - XOS_THREAD_DEBUG -- Thread module debug +/// - XOS_TIMER_DEBUG -- Timer module debug +/// +/// WARNING: Enabling one or more of these flags will affect system performance +/// and timing. +/// +/// NOTE: Not all of these have been fully implemented. +/// +//----------------------------------------------------------------------------- +#if defined XOS_DEBUG_ALL + +#define XOS_DEBUG 1 +#define XOS_THREAD_DEBUG 1 +#define XOS_TIMER_DEBUG 1 +#define XOS_COND_DEBUG 1 +#define XOS_MUTEX_DEBUG 1 +#define XOS_SEM_DEBUG 1 +#define XOS_EVENT_DEBUG 1 +#define XOS_MSGQ_DEBUG 1 + +#else + +#ifndef XOS_DEBUG +#define XOS_DEBUG 0 +#endif +#ifndef XOS_THREAD_DEBUG +#define XOS_THREAD_DEBUG 0 +#endif +#ifndef XOS_TIMER_DEBUG +#define XOS_TIMER_DEBUG 0 +#endif +#ifndef XOS_COND_DEBUG +#define XOS_COND_DEBUG 0 +#endif +#ifndef XOS_MUTEX_DEBUG +#define XOS_MUTEX_DEBUG 0 +#endif +#ifndef XOS_SEM_DEBUG +#define XOS_SEM_DEBUG 0 +#endif +#ifndef XOS_EVENT_DEBUG +#define XOS_EVENT_DEBUG 0 +#endif +#ifndef XOS_MSGQ_DEBUG +#define XOS_MSGQ_DEBUG 0 +#endif + +#endif + + +//----------------------------------------------------------------------------- +/// +/// Set this option to 1 to enable runtime statistics collection for XOS. +/// NOTE: Enabling this option does have some impact on runtime performance +/// and OS footprint. +/// +//----------------------------------------------------------------------------- +#ifndef XOS_OPT_STATS +#define XOS_OPT_STATS 1 +#endif + + +//----------------------------------------------------------------------------- +/// +/// Set this option to 1 to enable statistics tracking for message queues. +/// enabling this will cause message queue objects to increase in size, and add +/// some overhead to message queue processing. +/// +//----------------------------------------------------------------------------- +#ifndef XOS_OPT_MSGQ_STATS +#define XOS_OPT_MSGQ_STATS 0 +#endif + + +//----------------------------------------------------------------------------- +/// +/// Size of interrupt stack in bytes. Shared by all interrupt handlers. Must be +/// sized to handle worst case nested interrupts. This is also used by the idle +/// thread so must exist even if interrupts are not configured. +/// +//----------------------------------------------------------------------------- +#ifndef XOS_INT_STACK_SIZE +#if XCHAL_HAVE_INTERRUPTS +#define XOS_INT_STACK_SIZE 8192 +#else +#define XOS_INT_STACK_SIZE 32 +#endif +#endif + + +//----------------------------------------------------------------------------- +/// +/// Default maximum interrupt level at which XOS primitives may be called. +/// It is the level at which interrupts are disabled by default. +/// See also description of xos_set_int_pri_level(). +/// +//----------------------------------------------------------------------------- +#ifndef XOS_MAX_OS_INTLEVEL +#define XOS_MAX_OS_INTLEVEL XCHAL_EXCM_LEVEL +#endif + + +//----------------------------------------------------------------------------- +/// +/// Set this to 1 to enable stack checking. The stack is filled with a pattern +/// on thread creation, and the stack is checked at certain times during system +/// operation. +/// WARNING: Enabling this option can have some impact on runtime performance. +/// +//----------------------------------------------------------------------------- +#ifndef XOS_OPT_STACK_CHECK +#if XOS_DEBUG +#define XOS_OPT_STACK_CHECK 1 +#else +#define XOS_OPT_STACK_CHECK 0 +#endif +#endif + + +//----------------------------------------------------------------------------- +/// +/// Set XOS_CLOCK_FREQ to the system clock frequency if this is known ahead of +/// time. Otherwise, call xos_set_clock_freq() to set it at run time. +/// +//----------------------------------------------------------------------------- +#ifndef XOS_CLOCK_FREQ +#define XOS_CLOCK_FREQ 1000000 +#endif +#define XOS_DEFAULT_CLOCK_FREQ XOS_CLOCK_FREQ + + +//----------------------------------------------------------------------------- +/// +/// Set this option to 1 to enable software prioritization of interrupts. The +/// priority scheme applied is that a higher interrupt number at the same level +/// will have higher priority. +/// +//----------------------------------------------------------------------------- +#ifndef XOS_OPT_INTERRUPT_SWPRI +#define XOS_OPT_INTERRUPT_SWPRI 1 +#endif + + +//----------------------------------------------------------------------------- +/// +/// Set this option to 1 to use the thread-safe version of the C runtime library. +/// You may need to enable this if you call C library functions from multiple +/// threads -- see the documentation for the relevant C library to determine if +/// this is necessary. This option increases the size of the TCB. +/// NOTE: At this time only the newlib and xclib libraries are supported for +/// thread safety. +/// +//----------------------------------------------------------------------------- +#include + +#ifndef XOS_OPT_THREAD_SAFE_CLIB + +#if XSHAL_CLIB == XTHAL_CLIB_XCLIB +#define XOS_OPT_THREAD_SAFE_CLIB 1 +#elif XSHAL_CLIB == XTHAL_CLIB_NEWLIB +#define XOS_OPT_THREAD_SAFE_CLIB 1 +#else +#define XOS_OPT_THREAD_SAFE_CLIB 0 +#endif + +#endif + + +//----------------------------------------------------------------------------- +/// +/// Set this option to 1 to enable the wait timeout feature. This allows waits +/// on waitable objects to expire after a specified timeout. +/// +//----------------------------------------------------------------------------- +#ifndef XOS_OPT_WAIT_TIMEOUT +#define XOS_OPT_WAIT_TIMEOUT 1 +#endif + + +//----------------------------------------------------------------------------- +/// +/// Set this option to 1 to enable threads waiting on timer objects. If this +/// feature is not used, turning it off will make timer objects smaller, and +/// reduce the time taken by timer expiry processing (by a small amount). +/// +//----------------------------------------------------------------------------- +#ifndef XOS_OPT_TIMER_WAIT +#define XOS_OPT_TIMER_WAIT 1 +#endif + + +//----------------------------------------------------------------------------- +/// +/// Set this option to 1 to enable time-slicing between multiple threads at the +/// same priority. If this option is enabled then on every timer tick the timer +/// handler will switch out the current thread if there is another ready thread +/// at the same priority, and allow the latter thread to run. Execution will be +/// round robin switched among all the threads at the same priority. +/// +/// Currently the time slice interval is fixed to be one timer tick. +/// +/// This feature is most useful if fixed duration timer ticks are used. +/// If dynamic ticking is enabled, then time slicing will work unpredictably +/// because the interval between ticks will vary. In some cases it may be +/// better to turn time slicing off. +/// +//----------------------------------------------------------------------------- +#ifndef XOS_OPT_TIME_SLICE +#define XOS_OPT_TIME_SLICE 1 +#endif + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_PARAMS_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_regaccess.h b/tools/sdk/include/esp32/xtensa/xos_regaccess.h new file mode 100755 index 00000000..1fea5ddc --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_regaccess.h @@ -0,0 +1,201 @@ + +// xos_regaccess.h - Access routines for various processor special registers. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#ifndef __REGACCESS_H__ +#define __REGACCESS_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "xos_types.h" + +#include + +#if defined (__XCC__) +#if XCHAL_HAVE_CCOUNT +#include +#endif +#endif + + +//----------------------------------------------------------------------------- +// Read CCOUNT register. +//----------------------------------------------------------------------------- +static __inline__ uint32_t xos_get_ccount(void) +{ +#if XCHAL_HAVE_CCOUNT + +#if defined (__XCC__) + return XT_RSR_CCOUNT(); +#else + uint32_t ccount; + + __asm__ __volatile__ ( "rsr %0, ccount" : "=a" (ccount) ); + return ccount; +#endif + +#else + + return 0; + +#endif +} + + +//----------------------------------------------------------------------------- +// Read CCOMPARE0 +//----------------------------------------------------------------------------- +static __inline__ uint32_t xos_get_ccompare0(void) +{ +#if XCHAL_HAVE_CCOUNT + +#if defined (__XCC__) + return XT_RSR_CCOMPARE0(); +#else + uint32_t ccompare0; + + __asm__ __volatile__ ( "rsr %0, ccompare0" : "=a" (ccompare0)); + return ccompare0; +#endif + +#else + + return 0; + +#endif +} + + +//----------------------------------------------------------------------------- +// Read CCOMPARE1 +//----------------------------------------------------------------------------- +#if (XCHAL_NUM_TIMERS > 1) +static __inline__ uint32_t xos_get_ccompare1(void) +{ +#if defined (__XCC__) + return XT_RSR_CCOMPARE1(); +#else + uint32_t ccompare1; + + __asm__ __volatile__ ( "rsr %0, ccompare1" : "=a" (ccompare1)); + return ccompare1; +#endif +} +#endif + + +//----------------------------------------------------------------------------- +// Read CCOMPARE2 +//----------------------------------------------------------------------------- +#if (XCHAL_NUM_TIMERS > 2) +static __inline__ uint32_t xos_get_ccompare2(void) +{ +#if defined (__XCC__) + return XT_RSR_CCOMPARE2(); +#else + uint32_t ccompare2; + + __asm__ __volatile__ ( "rsr %0, ccompare2" : "=a" (ccompare2)); + return ccompare2; +#endif +} +#endif + + +//----------------------------------------------------------------------------- +// Write CCOMPARE0 +//----------------------------------------------------------------------------- +static __inline__ void xos_set_ccompare0(uint32_t val) +{ +#if XCHAL_HAVE_CCOUNT + +#if defined (__XCC__) + XT_WSR_CCOMPARE0(val); + XT_ISYNC(); +#else + __asm__ __volatile__ ( + "wsr %0, ccompare0\n" + "isync" + : + : "a" (val) + ); +#endif + +#else + + // Empty + +#endif +} + + +//----------------------------------------------------------------------------- +// Write CCOMPARE1 +//----------------------------------------------------------------------------- +#if (XCHAL_NUM_TIMERS > 1) +static __inline__ void xos_set_ccompare1(uint32_t val) +{ +#if defined (__XCC__) + XT_WSR_CCOMPARE1(val); + XT_ISYNC(); +#else + __asm__ __volatile__ ( + "wsr %0, ccompare1\n" + "isync" + : + : "a" (val) + ); +#endif +} +#endif + + +//----------------------------------------------------------------------------- +// Write CCOMPARE2 +//----------------------------------------------------------------------------- +#if (XCHAL_NUM_TIMERS > 2) +static __inline__ void xos_set_ccompare2(uint32_t val) +{ +#if defined (__XCC__) + XT_WSR_CCOMPARE2(val); + XT_ISYNC(); +#else + __asm__ __volatile__ ( + "wsr %0, ccompare2\n" + "isync" + : + : "a" (val) + ); +#endif +} +#endif + + +#ifdef __cplusplus +} +#endif + +#endif // __REGACCESS_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_semaphore.h b/tools/sdk/include/esp32/xtensa/xos_semaphore.h new file mode 100755 index 00000000..42b7914e --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_semaphore.h @@ -0,0 +1,190 @@ +/** @file */ + +// xos_semaphore.h - XOS Semaphore API interface and data structures. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + +#ifndef __XOS_SEMAPHORE_H__ +#define __XOS_SEMAPHORE_H__ + +#include "xos_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +//----------------------------------------------------------------------------- +// Semaphore flags. +//----------------------------------------------------------------------------- +#define XOS_SEM_WAIT_PRIORITY 0x0000 ///< Wake waiters in priority order (default) +#define XOS_SEM_WAIT_FIFO 0x0001 ///< Wake waiters in FIFO order +#define XOS_SEM_PRIORITY_INV 0x0004 // Protect against priority inversion + + +//----------------------------------------------------------------------------- +/// +/// XosSem object. +/// +//----------------------------------------------------------------------------- +typedef struct XosSem { + uint32_t count; ///< Current count + XosThreadQueue waitq; ///< Queue of waiters. + uint32_t flags; ///< Properties. +#if XOS_SEM_DEBUG + uint32_t sig; // Valid signature indicates inited. +#endif +} XosSem; + + +//----------------------------------------------------------------------------- +/// +/// Initialize a semaphore object before first use. +/// +/// \param sem Pointer to semaphore object. +/// +/// \param flags Creation flags: +/// - XOS_SEM_WAIT_FIFO -- queue waiting threads in +/// fifo order. +/// - XOS_SEM_WAIT_PRIORITY -- queue waiting threads +/// by priority. This is the default. +/// - XOS_SEM_PRIORITY_INV -- protect against priority +/// inversion. +/// +/// \param initial_count Initial count for semaphore on creation. +/// +/// \return Returns XOS_OK on success, else error code. +/// +/// NOTE: XOS_SEM_PRIORITY_INV is NOT supported in the current release. It will +/// be supported in a future release. +/// +//----------------------------------------------------------------------------- +int32_t +xos_sem_create(XosSem * sem, uint32_t flags, uint32_t initial_count); + + +//----------------------------------------------------------------------------- +/// +/// Destroy a semaphore object. Must have been previously created by calling +/// xos_sem_create(). +/// +/// \param sem Pointer to semaphore object. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_sem_delete(XosSem * sem); + + +//----------------------------------------------------------------------------- +/// +/// Decrement the semaphore count: block until the decrement is possible. +/// The semaphore must have been initialized. +/// +/// \param sem Pointer to semaphore object. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_sem_get(XosSem * sem); + + +//----------------------------------------------------------------------------- +/// +/// Decrement the semaphore count: block until the decrement is possible or +/// the timeout expires. The semaphore must have been initialized. +/// +/// \param sem Pointer to semaphore object. +/// +/// \param to_cycles Timeout in cycles. Convert from time to cycles +/// using the helper functions provided in xos_timer. +/// A value of zero indicates no timeout. +/// +/// \return Returns XOS_OK on success, XOS_ERR_TIMEOUT on timeout, else error code. +/// +/// NOTE: If XOS_OPT_WAIT_TIMEOUT is not enabled, then the timeout value is +/// ignored, and no timeout will occur. +/// +//----------------------------------------------------------------------------- +int32_t +xos_sem_get_timeout(XosSem * sem, uint64_t to_cycles); + + +//----------------------------------------------------------------------------- +/// +/// Increment the semaphore count. The semaphore must have been initialized. +/// Remember that this action may wake up a waiting thread, and if that thread +/// is higher priority then there will be an immediate context switch. +/// +/// \param sem Pointer to semaphore object. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_sem_put(XosSem * sem); + + +//----------------------------------------------------------------------------- +/// +/// Try to decrement the semaphore, but do not block if the semaphore count is +/// zero. Return immediately. The semaphore must have been initialized. +/// +/// \param sem Pointer to semaphore object. +/// +/// \return Returns XOS_OK on success (semaphore decremented), else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_sem_tryget(XosSem * sem); + + +//----------------------------------------------------------------------------- +/// +/// Return the count of the semaphore but do not attempt to decrement it. +/// The semaphore must have been initialized. +/// +/// \param sem Pointer to semaphore object. +/// +/// \return Returns semaphore count, -1 on error. +/// +//----------------------------------------------------------------------------- +static inline int32_t +xos_sem_test(XosSem * sem) +{ + XOS_ASSERT(sem); + + return sem ? sem->count : -1; +} + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_SEMAPHORE_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_stopwatch.h b/tools/sdk/include/esp32/xtensa/xos_stopwatch.h new file mode 100755 index 00000000..bf71cc38 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_stopwatch.h @@ -0,0 +1,175 @@ +/** @file */ + +// xos_stopwatch.h - XOS Stopwatch objects and related API. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + + +#ifndef __XOS_STOPWATCH_H__ +#define __XOS_STOPWATCH_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "xos_types.h" +#include "xos_params.h" + + +//----------------------------------------------------------------------------- +// A stopwatch object can be used to track elapsed time and accumulate total +// elapsed time over multiple execution periods. The stopwatch records the +// time whenever its start function is called, and stops recording the time +// when the stop function is called and updates its cumulative time counter. +// The stopwatch keeps time in cycles. This can be converted to seconds etc. +// by using the XOS conversion calls such as xos_cycles_to_secs(). +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +/// +/// XosStopwatch object. +/// +//----------------------------------------------------------------------------- +typedef struct XosStopwatch { + uint64_t total; ///< Total accumulated cycle count + uint64_t start; ///< Starting system cycle count + uint16_t active; ///< Active flag (nonzero when active) +} XosStopwatch; + + +//----------------------------------------------------------------------------- +/// +/// Initialize a stopwatch object. +/// +/// \param sw Pointer to a stopwatch object. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +static inline void +xos_stopwatch_init(XosStopwatch * sw) +{ + sw->total = 0; + sw->start = 0; + sw->active = 0; +} + + +//----------------------------------------------------------------------------- +/// +/// Start a stopwatch. Starts cycle counting. +/// Note that this does not necessarily start counting from zero. The current +/// run (start-to-stop interval) will just get added to the accumulated count +/// in the stopwatch if any. +/// To reset the accumulated count, use xos_stopwatch_clear(). +/// +/// \param sw Pointer to a stopwatch object. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +static inline void +xos_stopwatch_start(XosStopwatch * sw) +{ + XOS_ASSERT(!sw->active); + sw->active = 1; + sw->start = xos_get_system_cycles(); +} + + +//----------------------------------------------------------------------------- +/// +/// Stop a stopwatch. Stops cycle counting and updates total. +/// +/// \param sw Pointer to a stopwatch object. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +static inline void +xos_stopwatch_stop(XosStopwatch * sw) +{ + XOS_ASSERT(sw->active); + sw->active = 0; + sw->total += xos_get_system_cycles() - sw->start; +} + + +//----------------------------------------------------------------------------- +/// +/// Get stopwatch accumulated count. +/// +/// \param sw Pointer to a stopwatch object. +/// +/// \return Returns the accumulated count. +/// +//----------------------------------------------------------------------------- +static inline uint64_t +xos_stopwatch_count(XosStopwatch * sw) +{ + return sw->total; +} + + +//----------------------------------------------------------------------------- +/// +/// Get elapsed time since stopwatch was started. If not started, returns zero. +/// +/// \param sw Pointer to a stopwatch object. +/// +/// \return Returns elapsed time in cycles. +/// +//----------------------------------------------------------------------------- +static inline uint64_t +xos_stopwatch_elapsed(XosStopwatch * sw) +{ + return sw->active ? xos_get_system_cycles() - sw->start : 0; +} + + +//----------------------------------------------------------------------------- +/// +/// Clears a stopwatch. Resets the accumulated count to zero, and deactivates +/// it if active. +/// +/// \param sw Pointer to a stopwatch object. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +static inline void +xos_stopwatch_clear(XosStopwatch * sw) +{ + xos_stopwatch_init(sw); +} + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_STOPWATCH_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_syslog.h b/tools/sdk/include/esp32/xtensa/xos_syslog.h new file mode 100755 index 00000000..be56968f --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_syslog.h @@ -0,0 +1,330 @@ +/** @file */ + +// xos_syslog.h - XOS Event logging module. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + + +#ifndef __XOS_SYSLOG_H__ +#define __XOS_SYSLOG_H__ + +#include "xos_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +//----------------------------------------------------------------------------- +// The XOS system log is an array of fixed size entries. The size of the log +// is determined by the application, and memory for the log must be provided +// at init time. Every time the log function is called, an entry is made in +// the log and the next pointer advanced. When the log is full, it will wrap +// around and start overwriting the oldest entries. +// Logging can be done from C/C++ code as well as assembly code, and at any +// interrupt level, even from high level interrupt handlers. +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +// Defines. +//----------------------------------------------------------------------------- +#define XOS_SYSLOG_ENABLED 0x0001 + + +///---------------------------------------------------------------------------- +/// +/// Use this macro to compute how much memory to allocate for the syslog. +/// +///---------------------------------------------------------------------------- +#define XOS_SYSLOG_SIZE(num_entries) \ + ( sizeof(XosSysLog) + ((num_entries - 1) * sizeof(XosSysLogEntry)) ) + + +///---------------------------------------------------------------------------- +/// +/// System log entry structure. +/// +///---------------------------------------------------------------------------- +typedef struct XosSysLogEntry { + uint32_t timestamp; ///< Timestamp in clock cycles + uint32_t param1; ///< User defined value + uint32_t param2; ///< User defined value + struct XosSysLogEntry * next; ///< Link to next entry +} XosSysLogEntry; + + +///---------------------------------------------------------------------------- +/// +/// System log structure. +/// +///---------------------------------------------------------------------------- +typedef struct XosSysLog { + uint16_t flags; ///< Flags + uint16_t size; ///< Number of entries + XosSysLogEntry * next; ///< Next write position + XosSysLogEntry entries[1]; ///< First entry +} XosSysLog; + + +//----------------------------------------------------------------------------- +// Pointer to syslog area. +//----------------------------------------------------------------------------- +extern XosSysLog * xos_syslog; + + +//---------------------------------------------------------------------------- +/// +/// Initialize the syslog. Initializing the log also enables it. The system +/// log always wraps around when full and overwrites the oldest entries. +/// +/// \param log_mem Pointer to allocated memory for the log. +/// +/// \param num_entries The number of entries that the log can contain. +/// +/// \return Returns nothing. +/// +//---------------------------------------------------------------------------- +static inline void +xos_syslog_init(void * log_mem, uint16_t num_entries) +{ + uint16_t i; + + xos_syslog = (XosSysLog *) log_mem; + xos_syslog->size = num_entries; + xos_syslog->next = xos_syslog->entries; + + for (i = 0; i < num_entries - 1; i++) { + xos_syslog->entries[i].next = &(xos_syslog->entries[i+1]); + xos_syslog->entries[i].timestamp = 0; + } + xos_syslog->entries[i].next = xos_syslog->entries; + xos_syslog->entries[i].timestamp = 0; + + xos_syslog->flags = XOS_SYSLOG_ENABLED; +} + + +///---------------------------------------------------------------------------- +/// +/// Reset the syslog. All entries made up to now are abandoned and the write +/// pointer is set to the first entry location. +/// +/// No parameters. +/// +/// \return Returns nothing. +/// +///---------------------------------------------------------------------------- +static inline void +xos_syslog_clear() +{ +#if XCHAL_HAVE_INTERRUPTS + uint32_t ps = XT_RSIL(XCHAL_NUM_INTLEVELS); +#endif + + xos_syslog_init(xos_syslog, xos_syslog->size); +#if XCHAL_HAVE_INTERRUPTS + xos_restore_int_pri_level(ps); +#endif +} + + +///---------------------------------------------------------------------------- +/// +/// Enable logging to the syslog. This function needs to be called only if +/// logging had been previously disabled via xos_syslog_disable(), since +/// initializing the syslog automatically enables it. +/// +/// No parameters. +/// +/// \return Returns nothing. +/// +///---------------------------------------------------------------------------- +static inline void +xos_syslog_enable() +{ +#if XCHAL_HAVE_INTERRUPTS + uint32_t ps = XT_RSIL(XCHAL_NUM_INTLEVELS); +#endif + + xos_syslog->flags |= XOS_SYSLOG_ENABLED; +#if XCHAL_HAVE_INTERRUPTS + xos_restore_int_pri_level(ps); +#endif +} + + +///---------------------------------------------------------------------------- +/// +/// Disable logging to the syslog. It is sometimes useful to disable logging +/// while the log is being examined or dumped. +/// +/// No parameters. +/// +/// \return Returns nothing. +/// +///---------------------------------------------------------------------------- +static inline void +xos_syslog_disable() +{ +#if XCHAL_HAVE_INTERRUPTS + uint32_t ps = XT_RSIL(XCHAL_NUM_INTLEVELS); +#endif + xos_syslog->flags &= ~XOS_SYSLOG_ENABLED; +#if XCHAL_HAVE_INTERRUPTS + xos_restore_int_pri_level(ps); +#endif +} + + +///---------------------------------------------------------------------------- +/// +/// Write an entry into the syslog. This function does disable all interrupts +/// since logging can be done from interrupt handlers as well. It will write +/// into the log only if the log exists and is enabled. +/// +/// \param param1 User defined value. +/// +/// \param param2 User defined value. +/// +/// \return Returns nothing. +/// +///---------------------------------------------------------------------------- +static inline void +xos_syslog_write(uint32_t param1, uint32_t param2) +{ + if (xos_syslog != XOS_NULL) { +#if XCHAL_HAVE_INTERRUPTS + uint32_t ps = XT_RSIL(XCHAL_NUM_INTLEVELS); +#endif + + if ((xos_syslog->flags & XOS_SYSLOG_ENABLED) != 0) { + XosSysLogEntry * next = xos_syslog->next; + + next->timestamp = xos_get_ccount(); + next->param1 = param1; + next->param2 = param2; + + xos_syslog->next = next->next; + } + +#if XCHAL_HAVE_INTERRUPTS + xos_restore_int_pri_level(ps); +#endif + } +} + + +///---------------------------------------------------------------------------- +/// +/// Read the first (oldest) entry in the syslog. Will return an error if the +/// log has not been created or is empty. Storage to copy the entry must be +/// provided by the caller. +/// +/// \param entry Pointer to storage where the entry data will be +/// copied. This pointer must be passed to +/// xos_syslog_get_next(). +/// +/// \return Returns XOS_OK on success, else error code. +/// +///---------------------------------------------------------------------------- +static inline int32_t +xos_syslog_get_first(XosSysLogEntry * entry) +{ + if (xos_syslog == XOS_NULL) { + return XOS_ERR_NOT_FOUND; + } + + if (entry != XOS_NULL) { +#if XCHAL_HAVE_INTERRUPTS + uint32_t ps = XT_RSIL(XCHAL_NUM_INTLEVELS); +#endif + XosSysLogEntry * next = xos_syslog->next; + + // 'next' should be pointing to the next entry to be overwritten, if we + // have wrapped. This means it is the oldest entry. However if this entry + // has a zero timestamp then we have not wrapped, in which case we must + // look at the first entry in the list. + if (next->timestamp == 0) { + next = xos_syslog->entries; + } + + *entry = *next; +#if XCHAL_HAVE_INTERRUPTS + xos_restore_int_pri_level(ps); +#endif + return entry->timestamp ? XOS_OK : XOS_ERR_NOT_FOUND; + } + + return XOS_ERR_INVALID_PARAMETER; +} + + +///---------------------------------------------------------------------------- +/// +/// Get the next sequential entry from the syslog. This function must be called +/// only after xos_syslog_get_first() has been called. +/// +/// \param entry Pointer to storage where entry data will be copied. +/// Must be the same pointer that was passed in the call +/// to xos_syslog_get_first(), as it is used to keep track +/// of the current position. +/// +/// \return Returns XOS_OK on success, else error code. +/// +///---------------------------------------------------------------------------- +static inline int32_t +xos_syslog_get_next(XosSysLogEntry * entry) +{ + if (entry != XOS_NULL) { +#if XCHAL_HAVE_INTERRUPTS + uint32_t ps = XT_RSIL(XCHAL_NUM_INTLEVELS); +#endif + XosSysLogEntry * next = entry->next; + int32_t ret = XOS_OK; + + // Make sure we're not pointing past the last entry. + if ((next != XOS_NULL) && (next != xos_syslog->next) && (next->timestamp != 0)) { + *entry = *next; + } + else { + ret = XOS_ERR_NOT_FOUND; + } +#if XCHAL_HAVE_INTERRUPTS + xos_restore_int_pri_level(ps); +#endif + return ret; + } + + return XOS_ERR_INVALID_PARAMETER; +} + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_SYSLOG_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_thread.h b/tools/sdk/include/esp32/xtensa/xos_thread.h new file mode 100755 index 00000000..8bc5077e --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_thread.h @@ -0,0 +1,1086 @@ +/** @file */ + +// xos_thread.h - XOS Thread API interface and data structures. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + + +#ifndef __XOS_THREAD_H__ +#define __XOS_THREAD_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "xos_types.h" +#include "xos_params.h" + + +//----------------------------------------------------------------------------- +// Number of thread priority levels. +//----------------------------------------------------------------------------- +#ifndef XOS_NUM_PRIORITY +#error "XOS_NUM_PRIORITY must be defined (in xos_params.h)." +#endif +#if XOS_NUM_PRIORITY > 32 +#error "The number of thread priority levels (XOS_NUM_PRIORITY) must be <= 32." +#endif +#define XOS_MAX_PRIORITY (XOS_NUM_PRIORITY) + + +//----------------------------------------------------------------------------- +// Macro for thread self pointer. +//----------------------------------------------------------------------------- +#define XOS_THREAD_SELF (xos_thread_id()) + + +//----------------------------------------------------------------------------- +/// +/// Thread entry function pointer type. +/// +//----------------------------------------------------------------------------- +typedef int32_t (XosThreadFunc)(void * arg, int32_t wake_value); + + +//----------------------------------------------------------------------------- +// Thread switcher function signature. +//----------------------------------------------------------------------------- +typedef struct XosThread XosThread; +typedef int32_t (XosSwitchFunc)(XosThread *); + + +//----------------------------------------------------------------------------- +/// +/// Condition evaluation callback function pointer type. +/// +//----------------------------------------------------------------------------- +typedef int32_t (XosCondFunc)(void * arg, int32_t sig_value, XosThread * thread); + + +//----------------------------------------------------------------------------- +/// +/// Thread exit handler function pointer type. +/// +//----------------------------------------------------------------------------- +typedef int32_t (XosThdExitFunc)(int32_t exitcode); + + +//----------------------------------------------------------------------------- +// Thread queue structure. Used to implement the ready queues as well +// as the wait queues. +//----------------------------------------------------------------------------- +typedef struct XosThreadQueue { + XosThread * head; // Pointer to first thread in queue, or 0 if none. + XosThread ** tail; // Pointer to last thread's r_next pointer, or + // to "head" if none. +} XosThreadQueue; + + +//----------------------------------------------------------------------------- +// Stack frame for a thread that is not running. That is, it has either +// been preempted or has yielded. +//----------------------------------------------------------------------------- +typedef union XosFrame { + XosExcFrame e; // resume_fn == &xos_resume_preempted_thread + XosCoopFrame c; // resume_fn == &xos_resume_cooperative_thread + // nothing for resume_fn == &xos_resume_idle_thread + // nothing for resume_fn == &xos_resume_by_restart +} XosFrame; + + +//----------------------------------------------------------------------------- +// Thread Control Block. Tracks the state and control information associated +// with a thread. +// +// IMPORTANT: keep this in sync with TCB_*** offsets in xos_common.h . +//----------------------------------------------------------------------------- +struct XosThread { + XosThread * r_next; // 00 Next thread in queue (eg. ready queue of + // its priority, or some queue of blocked threads) + // Should be NULL if not in any queue. + + XosThread ** r_pprev; // 04 Points to previous queue entry's r_next + // pointer (i.e. to itself), or to queue head + // if first in queue. NULL if not in any queue. + + XosThread * all_next; // 08 Next in list of all threads. + + void * resume_fn; // 12 Pointer to the routine to be called to + // resume this thread. On entry to such code: + // a2 == xos_curr_threadptr (thread being resumed) + // a3 == &xos_globals + + XosFrame * esf; // 16 Pointer to saved exception stack frame, + // just below thread's current stack pointer. + // For RTC threads, this is valid only while the + // thread is preempted, not when it is blocked. + + void * tie_save; // 20 TIE state save area. May be NULL if there + // is not TIE state saved for this thread. + + int32_t wake_value; // 24 Value returned from block call (by wake call) + // (for RTC: pass this to start function??) + + XosSwitchFunc * switch_fn; // 28 Pointer to a function that + // can be called from within this thread, to save + // this thread's state and switch to a specified + // other thread. Returns wake value. + + void * stack_base; // 32 Base of stack as specified by thread creator. + + void * stack_end; // 36 End of stack (adjusted for TIE state save area + // if any). + + XosThreadFunc * entry; // 40 Pointer to thread entry function. Used for + // RTC thread restart. + + void * arg; // 44 Argument value passed to entry function. + + bool ready; // 48 Set when thread is ready to run, and is in + // its priority queue (i.e. r_pprev is set when + // this flag is set). + + bool in_exit; // Exit flag, nonzero when in exit processing. + + int8_t priority; // Thread priority, 0 .. (XOS_MAX_PRI - 1). Higher + // numbers have higher priority. This must only be + // changed when thread is not ready, or by calling + // xos_thread_set_priority(). + + int8_t preempt_pri; // This thread's preemption blocking priority. + // (preempt_pri >= priority). A thread's priority + // must be higher than another's preempt_pri to be + // able to preempt it. Note that preempt_pri can + // change during runtime e.g. due to priority + // inheritance. + + uint32_t flags; // 52 Thread creation flags. + + const char * name; // 56 Thread name (mainly for debug). + + const char * block_cause; // 60 Reason for blocking. Valid only when thread + // not ready (r_pprev == 0). + + XosThread * container; // 64 Thread whose stack will be used to run + // this thread. Valid for RTC threads only, else NULL. + + XosThdExitFunc * exit_func; // 68 Thread exit handler function pointer. + + XosThreadQueue exit_waiters; // 72 Queue of threads waiting for this one to exit. + + XosThreadQueue * wq_ptr; // 80 If this thread is in a wait queue, this + // points to the queue. Must be NULL when + // thread not in a queue. + + XosCondFunc * cond_fn; // 84 Condition function. Valid only while thread + // is blocked on condition. + + void * cond_arg; // 88 Argument to be passed to condition function. + + uint16_t cp_mask; // 92 Mask of coprocessors used. + uint16_t cp_saved; // 94 Mask of coprocessors saved. + + uint32_t event_bits; // 96 event bits + uint32_t event_mask; // 100 event bit mask + uint32_t event_flags; // 104 event flags + + void * clib_ptr; // 108 Pointer to C lib context struct. + + uint32_t sig; // 112 Signature of valid TCB + + uint32_t resume_ccount; // 116 cycle count at resume + uint64_t cycle_count; // 120 number of cycles consumed (approx). + // NOTE: must be 8-byte aligned + uint32_t normal_resumes; // 128 Number of non-preemptive resumptions. + uint32_t preempt_resumes;// 132 Number of preemptive resumptions. + +#if XOS_OPT_THREAD_SAFE_CLIB + CLIB_THREAD_STRUCT; // C library context area. +#endif +}; + + +//----------------------------------------------------------------------------- +// User-visible flags for xos_thread_create(). +//----------------------------------------------------------------------------- +#define XOS_THREAD_SUSPEND 0x0001 ///< Create suspended instead of ready +#define XOS_THREAD_RTC 0x0002 ///< Run-to-completion thread +#define XOS_THREAD_NO_CP 0x0004 ///< Thread does not use coprocessors + + +//----------------------------------------------------------------------------- +// Flags used by thread creation extra parameters. +//----------------------------------------------------------------------------- +#define XOS_TP_COPROC_MASK 0x0001 +#define XOS_TP_PREEMPT_PRI 0x0002 +#define XOS_TP_EXIT_HANDLER 0x0004 + + +//----------------------------------------------------------------------------- +// Thread creation extra parameters. +//----------------------------------------------------------------------------- +typedef struct XosThreadParm { + uint32_t parms_mask; // Combination of XOS_TP_xxx flags indicating + // which parameters are valid. + + uint16_t cp_mask; // Mask of coprocessors the thread can access. + + uint32_t preempt_pri; // Initial preemption blocking priority. Can be + // changed later via xos_thread_set_priority(). + + XosThdExitFunc * handler; // Exit handler function. + +} XosThreadParm; + + +//----------------------------------------------------------------------------- +// Wrapper struct for RTC (run to completion) thread. +//----------------------------------------------------------------------------- +typedef struct XosRtcThread { + struct XosThread thread; +} XosRtcThread; + + +//----------------------------------------------------------------------------- +// External variables. +//----------------------------------------------------------------------------- +extern XosThread * xos_curr_threadptr; // Current active thread +extern XosThread * xos_next_threadptr; // Next ready thread +extern XosThread * xos_all_threads; // List of all threads + + +//----------------------------------------------------------------------------- +/// +/// Set thread creation parameter: the group of coprocessors that this thread +/// will use. This must be set during thread creation, and cannot be changed +/// after the thread has been created. Defining this allows reduction of +/// memory usage (for CP state saving) in some circumstances, and can also +/// speed up the context switch time. +/// +/// NOTE: Support for this is not currently implemented. If a thread uses +/// any coprocessor, space for all coprocessors must be reserved. +/// +/// \param parms Thread creation parameter structure. Must be +/// allocated by the caller. +/// +/// \param cp_mask Bitmask of coprocessors thread is allowed to +/// use. Bit 0 for coprocessor 0, etc. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +static inline void +xos_threadp_set_cp_mask(XosThreadParm * parms, uint16_t cp_mask) +{ + if (parms != XOS_NULL) { + parms->parms_mask |= XOS_TP_COPROC_MASK; + parms->cp_mask = cp_mask; + } +} + + +//----------------------------------------------------------------------------- +/// +/// Set thread creation parameter: thread pre-emption priority. +/// +/// \param parms Thread creation parameter structure. Must be +/// allocated by caller. +/// +/// \param preempt_pri Thread pre-emption blocking priority. +/// From 0 .. XOS_NUM_PRIORITY - 1. +/// Must be greater or equal to the thread priority +/// (if not, is automatically set to thread priority). +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +static inline void +xos_threadp_set_preemption_priority(XosThreadParm * parms, int8_t preempt_pri) +{ + if (parms != XOS_NULL) { + parms->parms_mask |= XOS_TP_PREEMPT_PRI; + parms->preempt_pri = preempt_pri; + } +} + + +//----------------------------------------------------------------------------- +/// +/// Set thread creation parameter: thread exit handler. +/// +/// \param parms Thread creation parameter structure. Must be +/// allocated by caller. +/// +/// \param handler Exit handler function. +/// +/// \return Returns nothing. +//----------------------------------------------------------------------------- +static inline void +xos_threadp_set_exit_handler(XosThreadParm * parms, XosThdExitFunc * handler) +{ + if (parms != XOS_NULL) { + parms->parms_mask |= XOS_TP_EXIT_HANDLER; + parms->handler = handler; + } +} + + +//----------------------------------------------------------------------------- +/// +/// Create a new thread. If the thread is not created suspended, then it will +/// be made ready as soon as it is created, and will immediately run if it is +/// the highest priority non-blocked thread in the system. +/// +/// \param thread Pointer to the thread descriptor (an otherwise +/// unused XosThread structure, usually allocated +/// by the caller for the lifetime of the thread, +/// for example as a global variable). +/// +/// \param container Pointer to separate thread acting as "container" +/// for this one. At the moment, this is only meaningful +/// for run-to-completion (RTC) threads (identified with +/// the XOS_THREAD_RTC flag), in which case the container +/// must have the same priority and also be an RTC thread. +/// (The priority restriction may be lifted in a future +/// implementation, with appropriate constraints on dynamic +/// reprioritization of the created thread). +/// +/// \param entry Thread entry function, takes one argument. +/// +/// \param arg Argument "void*" that is passed to the thread function. +/// +/// \param name Unique name of the thread, for debug/display purposes. +/// This string must be valid for the lifetime of the thread +/// (only a pointer to it is stored in the thread control block). +/// Typically consists of identifier chars with no spaces. +/// +/// \param stack Base of initial stack for the thread, allocated by the +/// caller. Need not be aligned (initial stack pointer will be +/// computed and aligned from given stack base and size). +/// Required argument, except for run-to-completion threads +/// when container is non-NULL, in which case the container's +/// stack is used and this argument must be NULL. +/// +/// \param stack_size Size of the stack, in bytes. +/// NOTE: stack should be at least XOS_STACK_EXTRA bytes plus +/// whatever the thread actually needs if the thread will use +/// coprocessors/TIE state. If the thread will not touch the +/// coprocessors, then it should be XOS_STACK_EXTRA_NO_CP +/// plus whatever the thread actually needs. +/// Recommended minimum stack sizes are defined by the constants +/// XOS_STACK_MIN_SIZE and XOS_STACK_MIN_SIZE_NO_CP. +/// +/// For run-to-completion threads where container is non-NULL, +/// stack_size specifies the minimum stack size required for +/// the thread; it should be smaller or equal to the container's +/// stack. +/// +/// \param priority Initial thread priority. From 0 .. XOS_MAX_PRI - 1. +/// Higher numbers are higher priority. +/// +/// \param parms Pointer to extra parameters structure, or 0 if none given. +/// Use xos_thread_p_***() functions to set parameters in the +/// structure. +/// +/// \param flags Option flags: +/// - XOS_THREAD_SUSPEND -- Leave thread suspended instead of +/// making it ready. The thread can be made ready to run later +/// by calling xos_thread_resume(). +/// - XOS_THREAD_RTC -- Run-to-completion thread. +/// - XOS_THREAD_NO_CP -- Thread does not use coprocessors. +/// No coprocessor state will be saved for this thread. +/// Threads that have this flag set will not allocate any +/// storage for saving coprocessor state and so can have +/// smaller stacks. +/// +/// NOTE: xos_start_main() calls xos_thread_create() to convert main() into the 'main' +/// thread. +/// +/// \return Returns XOS_OK if successful, error code otherwise. +/// +//----------------------------------------------------------------------------- +int32_t +xos_thread_create(XosThread * thread, + XosThread * container, + XosThreadFunc * entry, + void * arg, + const char * name, + void * stack, + uint32_t stack_size, + int32_t priority, + XosThreadParm * parms, + uint32_t flags ); + + +//----------------------------------------------------------------------------- +/// +/// Remove thread and free up all resources. Thread must have exited already. +/// After this call returns, all resources allocated to the thread (e.g. TCB, +/// stack space, etc.) can be reused. +/// +/// \param thread Handle of thread to be deleted. +/// +/// \return Returns XOS_OK on success, else error code. +/// +/// NOTE: A thread cannot call this on itself. +/// +//----------------------------------------------------------------------------- +int32_t +xos_thread_delete(XosThread * thread); + + +//----------------------------------------------------------------------------- +/// +/// Force the thread to terminate. The thread execution is aborted, but exit +/// processing will still happen, i.e. the exit handler (if any) will be run. +/// After termination, any other threads waiting on this thread are notified. +/// This function cannot be called on the current thread. +/// +/// \param thread Handle of thread to be aborted. +/// +/// \param exitcode Exit code returned to any waiting threads. +/// +/// \return Returns XOS_OK on success, else error code. +/// +/// NOTE: If the thread is blocked waiting for something, the wait is aborted +/// and the thread is made ready. +/// NOTE: The thread is not guaranteed to have exited when this call returns. +/// It will be made ready and set up for exit processing, but when the exit +/// processing will actually happen depends on the state of the system and +/// the priority of the thread being aborted. +/// +//----------------------------------------------------------------------------- +int32_t +xos_thread_abort(XosThread * thread, int32_t exitcode); + + +//----------------------------------------------------------------------------- +/// +/// Exit the current thread. The exit handler (if any) will be run before the +/// thread terminates. +/// +/// \param exitcode Exit code to be returned to any waiting threads. +/// +/// \return This function does not return. +/// +/// NOTE: This is automatically called if the thread returns from its entry +/// function. The entry function's return value will be passed as the exit +/// code. +/// +//----------------------------------------------------------------------------- +void +xos_thread_exit(int32_t exitcode); + + +//----------------------------------------------------------------------------- +/// +/// Wait until the specified thread exits and get its exit code. If the thread +/// has exited already, an error will be returned. +/// +/// \param thread The thread to wait for. Cannot be "self", i.e. +/// one cannot wait on one's own exit. +/// +/// \param p_exitcode If not null, the exit code will be returned here. +/// +/// \return Returns XOS_OK on sucess, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_thread_join(XosThread * thread, int32_t * p_exitcode); + + +//----------------------------------------------------------------------------- +/// +/// Yield the CPU to the next thread in line. The calling thread remains ready +/// and is placed at the tail of the ready queue at its current priority level. +/// If there are no threads at the same priority level that are ready to run, +/// then this call will return immediately. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +void +xos_thread_yield(); + + +//----------------------------------------------------------------------------- +/// +/// Suspend the specified thread. The thread will remain suspended until +/// xos_thread_resume() has been called on it. If the thread is already blocked +/// on some other condition, then this function will return an error. +/// +/// \param thread Handle of thread being suspended. A thread can +/// use the special handle XOS_THREAD_SELF to suspend +/// itself. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_thread_suspend(XosThread * thread); + + +//----------------------------------------------------------------------------- +/// +/// Resume a suspended thread. If the thread is not suspended or is blocked on +/// some other condition then this function will do nothing. Otherwise, it will +/// be made ready, and this can cause an immediate context switch if the thread +/// is at a higher priority than the calling thread. +/// +/// \param thread Handle of thread being resumed. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_thread_resume(XosThread * thread); + + +//----------------------------------------------------------------------------- +/// +/// Get the priority of the specified thread. This returns the priority of the +/// queried thread at this instant, however this can change at any time due to +/// other activity in the system. +/// +/// \param thread Handle of thread being queried. A thread can use +/// the special handle XOS_THREAD_SELF to query itself. +/// +/// \return Returns the thread's current priority, or -1 if the thread handle +/// is not valid. +/// +//----------------------------------------------------------------------------- +static inline int32_t +xos_thread_get_priority(XosThread * thread) +{ + XOS_ASSERT(thread); + return thread ? thread->priority : -1; +} + + +//----------------------------------------------------------------------------- +/// +/// Set the priority of the specified thread. The thread must exist. +/// +/// \param thread Handle of thread being affected. A thread can +/// use the special handle XOS_THREAD_SELF to specify +/// itself. +/// +/// \param priority The new priority level to be set. +/// +/// \return Returns XOS_OK on success, else error code. +/// +/// NOTE: Calling this function can result in a scheduler activation, and the +/// caller may be suspended as a result. +/// +//----------------------------------------------------------------------------- +int32_t +xos_thread_set_priority(XosThread * thread, int32_t priority); + + +//----------------------------------------------------------------------------- +/// +/// Return the name of the specified thread. +/// +/// \param thread Handle of thread being queried. A thread can use +/// the special handle XOS_THREAD_SELF to specify +/// itself. +/// +/// \return Returns a pointer to the name string if available, else NULL. +/// +//----------------------------------------------------------------------------- +static inline const char * +xos_thread_get_name(XosThread * thread) +{ + XOS_ASSERT(thread); + return thread ? thread->name : 0; +} + + +//----------------------------------------------------------------------------- +/// +/// Set the name of the specified thread. +/// +/// \param thread Handle of thread whose name is to be set. A thread +/// can use the special handle XOS_THREAD_SELF to specify +/// itself. +/// +/// \param name Pointer to the new name string. The string is not +/// copied, only the pointer is saved. So the string +/// must be persistent for the life of the thread. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +static inline int32_t +xos_thread_set_name(XosThread * thread, const char * name) +{ + XOS_ASSERT(thread); + if (thread != XOS_NULL) { + thread->name = name; + return XOS_OK; + } + + return XOS_ERR_INVALID_PARAMETER; +} + + +//----------------------------------------------------------------------------- +/// +/// Set an exit handler for the specified thread. The exit handler is run when +/// the thread terminates, either by calling xos_thread_exit() or by returning +/// from its entry function. It will also be called if the thread is being +/// terminated due to e.g. an unhandled exception. +/// +/// The handler must be a function defined as e.g.: +/// +/// int32_t exit_handler(int32_t exitcode); +/// +/// The exit handler runs in the context of the exiting thread, and can call +/// system services. It is provided with a single parameter which is the +/// thread's exit code (the exit code may be set to an error code if the +/// thread is being terminated due to an error or exception). The handler +/// must return a value which will be set as the thread's exit code. +/// +/// \param thread Handle of the thread for which the handler is +/// to be installed. A thread can use the special +/// handle XOS_THREAD_SELF to specify itself. +/// +/// \param func Pointer to exit handler function. To clear an +/// existing handler, pass NULL as the pointer. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_thread_set_exit_handler(XosThread * thread, XosThdExitFunc * func); + + +//----------------------------------------------------------------------------- +/// +/// Return the ID (handle) of the current thread. +/// +/// \return Returns the handle of the current thread. This handle can be +/// used in all XOS system calls. +/// +/// NOTE: If called from interrupt context, returns the handle of the thread +/// that was preempted. +/// +//----------------------------------------------------------------------------- +static inline XosThread * +xos_thread_id() +{ + return xos_curr_threadptr; +} + + +//----------------------------------------------------------------------------- +/// +/// Return the coprocessor mask for the specified thread. +/// +/// \param thread Handle of thread being queried. +/// +/// \return Returns the mask for the specified thread if available, else 0. +/// +//----------------------------------------------------------------------------- +static inline uint16_t +xos_thread_cp_mask(XosThread * thread) +{ + XOS_ASSERT(thread); + return thread ? thread->cp_mask : 0; +} + + +//----------------------------------------------------------------------------- +/// +/// Return the wake value for the specified thread. +/// +/// \return thread Handle of thread being queried. +/// +/// \return Returns The last set wake value. There is no way to detect what +/// action set the wake value and when. +/// +//----------------------------------------------------------------------------- +static inline int32_t +xos_thread_get_wake_value(XosThread * thread) +{ + XOS_ASSERT(thread); + return thread ? thread->wake_value : 0; +} + + +//----------------------------------------------------------------------------- +/// +/// Return the current value of the event bits for the current thread. +/// This function takes no parameters. +/// +/// \return Returns the current value of the event bits. The event bits +/// are set when the thread is woken from an event wait. They will +/// not change while the thread is running. There is no way to +/// determine when the event bits were last updated. +/// +//----------------------------------------------------------------------------- +static inline uint32_t +xos_thread_get_event_bits(void) +{ + XosThread * thread = xos_thread_id(); + return thread ? thread->event_bits : 0; +} + + +//----------------------------------------------------------------------------- +/// +/// Enum values for thread state. +/// +//----------------------------------------------------------------------------- +typedef enum xos_thread_state_t { + XOS_THREAD_STATE_INVALID = 0, ///< Invalid thread + XOS_THREAD_STATE_BLOCKED, ///< Thread is blocked + XOS_THREAD_STATE_READY, ///< Thread is ready to run + XOS_THREAD_STATE_RUNNING, ///< Thread is running + XOS_THREAD_STATE_EXITED, ///< Thread has exited +} xos_thread_state_t; + + +//----------------------------------------------------------------------------- +/// +/// Return the state of the specified thread. +/// +/// \param thread Handle of thread being queried. +/// +/// \return Returns one of the following values: +/// - XOS_THREAD_STATE_RUNNING -- The thread is currently running. +/// - XOS_THREAD_STATE_READY -- The thread is ready to run. +/// - XOS_THREAD_STATE_BLOCKED -- The thread is blocked on something. +/// - XOS_THREAD_STATE_INVALID -- The thread handle is invalid. +/// - XOS_THREAD_STATE_EXITED -- The thread has exited. +/// +//----------------------------------------------------------------------------- +xos_thread_state_t +xos_thread_get_state(XosThread * thread); + + +//----------------------------------------------------------------------------- +/// +/// Disable thread preemption. Prevents context switching to another thread. +/// However, interrupt handlers will still continue to be run. Multiple calls +/// will nest, and the same number of calls to xos_preemption_enable() will be +/// required to re-enable preemption. If the calling thread yields the CPU or +/// exits without enabling preemption, it will cause a system halt. +/// If the calling thread encounters a fatal error, preemption will be enabled +/// during fatal error handling. +/// +/// \return Returns the new value of preemption disable flag after this call. +/// +/// NOTE: Cannot be called from interrupt context. +/// +//----------------------------------------------------------------------------- +uint32_t +xos_preemption_disable(void); + + +//----------------------------------------------------------------------------- +/// +/// Enable thread preemption. Has no effect if preemption was already enabled. +/// Otherwise, it decrements the value of the preemption disable flag and if +/// the value goes to zero, enables preemption. +/// +/// \return Returns the new value of preemption disable flag after this call. +/// +/// NOTE: If scheduling gets enabled, it may cause an immediate context switch +/// if higher priority threads are ready. +/// +//----------------------------------------------------------------------------- +uint32_t +xos_preemption_enable(void); + + +//----------------------------------------------------------------------------- +/// +/// Initialize XOS thread support and start scheduler. +/// +/// Must be called from main() before calling any other thread function. +/// This function initializes thread support, creates the idle thread, and +/// starts the scheduler. It does not return to its caller. This means that +/// at least one user thread must be created before calling xos_start(). +/// Otherwise, the scheduler will run the idle thread since it will be the +/// only thread in the system, and no other thread can be created. +/// +/// NOTE: This function does not initialize timer/tick support. For timer +/// services to be available xos_start_system_timer() must be called. +/// +/// NOTE: xos_start() and xos_start_main() are exclusive, both cannot be +/// called within the same application. +/// +/// \param flags Currently unused (pass 0). +/// +/// \return Does not return. +/// +//----------------------------------------------------------------------------- +void +xos_start(uint32_t flags); + + +//----------------------------------------------------------------------------- +/// +/// Initialize XOS thread support and create init (main) thread. +/// +/// Must be called from main() before calling any other thread function. +/// This function converts the caller into the 'main' or 'init' thread, and +/// returns to the caller after completing initialization. +/// +/// NOTE: This function does not initialize timer/tick support. For timer +/// services to be available xos_start_system_timer() must be called. +/// +/// NOTE: xos_start_main() and xos_start() are exclusive, both cannot be +/// called within the same application. +/// +/// \param name Name of main thread (see xos_thread_create()). +/// +/// \param priority Initial priority of main thread. +/// +/// \param flags Currently unused (pass 0). +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +void +xos_start_main(const char * name, int8_t priority, uint32_t flags); + + +//----------------------------------------------------------------------------- +/// +/// Per-thread stats structure. +/// Note that the CPU use % is approximate, both because of cycle counting +/// and because of integer division. So all the threads' CPU % will not add +/// up to exactly 100%. +/// +//----------------------------------------------------------------------------- +typedef struct XosThreadStats { + XosThread * thread; ///< Thread handle (or pseudo-handle) + uint32_t cpu_pct; ///< CPU use % for this thread + uint32_t normal_switches; ///< Number of non-preemptive switches. + uint32_t preempt_switches; ///< Number of preemptive switches. + uint64_t cycle_count; ///< Number of cycles consumed. +} XosThreadStats; + + +//----------------------------------------------------------------------------- +// Thread pseudo-handles. +//----------------------------------------------------------------------------- +#define XOS_THD_STATS_IDLE ((XosThread *) 1) +#define XOS_THD_STATS_INTR ((XosThread *) 2) + + +//----------------------------------------------------------------------------- +/// +/// Get the thread statistics for the specified thread. Statistics are only +/// available if XOS_OPT_STATS has been enabled. Otherwise, the function +/// will return XOS_OK, but the structure contents will be undefined. +/// +/// \param thread Handle of thread being queried. The following +/// special pseudo-handles can be used: +/// - XOS_THD_STATS_IDLE -- stats for idle thread +/// - XOS_THD_STATS_INTR -- stats for interrupt processing +/// +/// \param stats Pointer to XosThreadStats struct to be filled in. +/// +/// \return Returns XOS_OK on success, else error code. +/// +/// NOTE: Can be called from interrupt context. +/// NOTE: This call will not fill in the "thread" and "cpu_pct" fields in the +/// "stats" structure. The thread handle is already known, and calculating the +/// CPU loading can take quite a bit of time so is not done here. +/// +//----------------------------------------------------------------------------- +int32_t +xos_thread_get_stats(XosThread * thread, XosThreadStats * stats); + + +//----------------------------------------------------------------------------- +/// +/// Get CPU loading statistics for the system. This function computes the CPU +/// percentage use for all threads in the system (including the idle thread and +/// the 'interrupt thread' (interrupt context). It also returns the cycle count +/// and number of context switches for each thread. +/// Statistics are only available if XOS_OPT_STATS has been enabled. +/// Otherwise, the function will return XOS_OK, but the structure contents will +/// be undefined. +/// +/// IMPORTANT: The entry for interrupt context does not contain a real thread +/// handle. It uses the pseudo-handle XOS_THD_STATS_INTR to indicate that this +/// entry reports interrupt statistics. This pseudo-handle cannot be used for +/// any other thread operations or queries. +/// +/// NOTE: This function disables interrupts while traversing the thread list. +/// It does not leave interrupts disabled during the computations, as that can +/// take a fair amount of time. +/// +/// \param stats Pointer to an array of XosThreadStats structures. +/// The array must be large enough to accommodate all +/// threads in the system. +/// +/// \param size The number of elements available in the array. If +/// this is smaller than the number of threads plus one +/// (for the interrupt context) then XOS_ERR_INVALID_PARAMETER +/// will be returned and '*size' will be set to the +/// minimum number of elements required. On a successful +/// return, '*size' is set to the number of elements +/// actually filled in. +/// +/// \param reset If nonzero, then thread stats counters are reset +/// after reading. This is useful if you want to track +/// the stats so as to get a better idea of current +/// system loading. E.g. calling this function once a +/// second with 'reset' nonzero will provide CPU load +/// information for the last second on each call. +/// +/// \return Returns XOS_OK on success, else error code. In particular, +/// XOS_ERR_INVALID_PARAMETER will be returned if the output buffer +/// is too small. +/// +//----------------------------------------------------------------------------- +int32_t +xos_get_cpu_load(XosThreadStats * stats, int32_t * size, int32_t reset); + + +#ifdef _XOS_INCLUDE_INTERNAL_ + +// Signature of valid thread object +#define XOS_THREAD_SIG 0x54485244 + + +// Extern functions +void +xos_init(void); + +bool +xos_init_done(void); + +bool +xos_started(void); + +int32_t +xos_schedule(XosThread * curr_thread); + +void +xos_q_remove(XosThreadQueue * queue, XosThread * thread); + +XosThread * +xos_q_pop(XosThreadQueue * queue); + +int32_t +xos_wake_queue(XosThreadQueue * queue, const char * expected_cause, int32_t wake_value); + +// Well known block causes +extern const char * const xos_blkon_idle; // (for idle thread only) +extern const char * const xos_blkon_suspend; +extern const char * const xos_blkon_delay; +extern const char * const xos_blkon_exited; +extern const char * const xos_blkon_join; +extern const char * const xos_blkon_event; +extern const char * const xos_blkon_condition; +extern const char * const xos_blkon_mutex; +extern const char * const xos_blkon_sem; +extern const char * const xos_blkon_msgq; + + +//----------------------------------------------------------------------------- +// Blocks the current active thread. +// +// Currently, this can be called from an interrupt handler to block the thread +// that was interrupted. Note that in interrupt context the current thread can +// already be in the blocked state, due to a previous call to this function. +// Can be called with interrupts enabled. +// +// block_cause Reason for blocking. +// +// block_queue Queue on to which this thread should be pushed once it +// is blocked. Can be NULL. +// +// must_schedule If nonzero, then forces a scheduling operation to pick +// the next thread to run, even if there are ready threads +// at the same priority level as the blocked thread. +// +// use_priority If nonzero, then the blocked thread will be queued in +// priority order in the specified block queue. If zero, +// the thread is queued in FIFO order. If no queue has +// been specified, this parameter is ignored. +// +// Returns: The value passed by xos_thread_wake(). +//----------------------------------------------------------------------------- +int32_t +xos_block(const char * block_cause, + XosThreadQueue * block_queue, + int32_t must_schedule, + int32_t use_priority); + + +//----------------------------------------------------------------------------- +// Unblocks the specified blocked thread and puts it at the tail end of its +// ready queue. Schedules it if it is higher priority than the current thread. +// No effect if the thread is not blocked with the specified cause. +// +// thread The thread to wake up (make ready). +// +// expected_cause The expected block cause of the thread. Thread will be +// woken only if its block cause matches this cause, or if +// expected_cause is zero. +// +// wake_value The value to be passed to the woken thread as a return +// value from xos_thread_block(). +// +// Returns: nothing. +// +// The target thread can be woken at a different priority by changing its +// priority while the thread is blocked. +// Can be called with interrupts enabled. Can be called in interrupt context. +//----------------------------------------------------------------------------- +void +xos_thread_wake(XosThread * thread, const char * expected_cause, int32_t wakevalue); + + +//----------------------------------------------------------------------------- +// Function to init C library per-thread and reentrancy support. +//----------------------------------------------------------------------------- +#if XOS_OPT_THREAD_SAFE_CLIB +void +xos_clib_init(void); + +void +xos_clib_thread_init(XosThread * thread); + +void +xos_clib_thread_cleanup(XosThread * thread); +#endif + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_THREAD_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_timer.h b/tools/sdk/include/esp32/xtensa/xos_timer.h new file mode 100755 index 00000000..0d89a219 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_timer.h @@ -0,0 +1,592 @@ +/** @file */ + +// xos_timer.h - XOS Timer API interface and data structures. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + + +#ifndef __XOS_TIMER_H__ +#define __XOS_TIMER_H__ + +#include "xos_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +//----------------------------------------------------------------------------- +/// +/// Function pointer type for timer callbacks. +/// +//----------------------------------------------------------------------------- +typedef void (XosTimerFunc)(void * arg); + + +//----------------------------------------------------------------------------- +/// +/// Timer event structure. Used to track pending timer events. +/// +//----------------------------------------------------------------------------- +typedef struct XosTimer { + struct XosTimer * next; ///< Pointer to next event in list. + uint64_t when; ///< Time (clock cycles) at which to trigger. + uint64_t delta; ///< Delta for next re-trigger, 0 if none. + XosTimerFunc * fn; ///< Function to call when timer expires. + void * arg; ///< Argument to pass to called function. + bool active; ///< Set if active (in some list of events). +#if XOS_OPT_TIMER_WAIT + XosThreadQueue waitq; ///< Queue of threads waiting on this timer. +#endif +#if XOS_TIMER_DEBUG + uint32_t signature; +#endif +} XosTimer; + + +//----------------------------------------------------------------------------- +// Extern declarations. +//----------------------------------------------------------------------------- + +// System clock frequency in cycles per second. +extern uint32_t xos_clock_freq; + + +///@{ +//----------------------------------------------------------------------------- +// Functions to convert from clock cycles to time units and vice versa. +// +// Note that these are integer conversions so for example a cycle count of less +// than one second will convert to zero seconds. +//----------------------------------------------------------------------------- + +/// Converts CPU cycles to time in seconds. +/// +/// \param cycles Number of CPU cycles. +/// +/// \return Equivalent number of seconds (truncated to integer). +static inline uint64_t +xos_cycles_to_secs(uint64_t cycles) +{ + return cycles / xos_clock_freq; +} + +/// Converts CPU cycles to time in milliseconds. +/// +/// \param cycles Number of CPU cycles. +/// +/// \return Equivalent number of milliseconds (truncated to integer). +static inline uint64_t +xos_cycles_to_msecs(uint64_t cycles) +{ + return (cycles * 1000) / xos_clock_freq; +} + +/// Converts CPU cycles to time in microseconds. +/// +/// \param cycles Number of CPU cycles. +/// +/// \return Equivalent number of microseconds (truncated to integer). +static inline uint64_t +xos_cycles_to_usecs(uint64_t cycles) +{ + return (cycles * 1000000) / xos_clock_freq; +} + +/// Converts time in seconds to CPU cycle count. +/// +/// \param secs Number of seconds. +/// +/// \return Equivalent number of CPU cycles. +static inline uint64_t +xos_secs_to_cycles(uint64_t secs) +{ + return secs * xos_clock_freq; +} + +/// Converts time in milliseconds to CPU cycle count. +/// +/// \param msecs Number of milliseconds. +/// +/// \return Equivalent number of CPU cycles. +static inline uint64_t +xos_msecs_to_cycles(uint64_t msecs) +{ + return (msecs * xos_clock_freq) / 1000; +} + +/// Converts time in microseconds to CPU cycle count. +/// +/// \param usecs Number of microseconds. +/// +/// \return Equivalent number of CPU cycles. +static inline uint64_t +xos_usecs_to_cycles(uint64_t usecs) +{ + return (usecs * xos_clock_freq) / 1000000; +} +///@} + + +//----------------------------------------------------------------------------- +/// +/// Set system clock frequency. This is expected to be set only once, and only +/// if the clock frequency is not known at compile time. +/// +/// \param freq Frequency in cycles per second. +/// +/// \return Returns nothing. +/// +//----------------------------------------------------------------------------- +static inline void +xos_set_clock_freq(uint32_t freq) +{ + xos_clock_freq = freq; +} + + +//----------------------------------------------------------------------------- +/// +/// Get current system clock frequency. +/// +/// \return Returns current system clock frequency in cycles per second. +/// +//----------------------------------------------------------------------------- +static inline uint32_t +xos_get_clock_freq() +{ + return xos_clock_freq; +} + + +//----------------------------------------------------------------------------- +/// +/// Initialize timer support and start the system timer. +/// This function must be called before calling any other timer function. +/// +/// NOTE: The smaller the tick period, the more precisely delays can be +/// specified using timers. However, we also need to make the tick period +/// large enough to allow time both to execute the tick timer interrupt handler +/// and for the application to make reasonable forward progress. If tick_period +/// is too small, the timer interrupt may re-trigger before the timer interrupt +/// handler has returned to the application, thus keeping the processor busy in +/// constantly executing the timer interrupt handler without leaving any cycles +/// for the application. Or, the application might get some cycles but only a +/// fraction of what is spent in the timer interrupt handler, thus severely +/// impacting application performance. +/// +/// The exact number of cycles needed to execute the timer interrupt handler +/// is not specified here. It depends on many factors (e.g. use of caches, +/// various processor configuration options, etc) and can vary by orders of +/// magnitude. Also note that the time to execute this handler is variable: +/// when timers expire upon a given tick timer interrupt, their respective +/// timer handler functions are called from within the interrupt handler. +/// +/// \param timer_num Which Xtensa timer to use (0..2). This timer +/// must exist and be configured at level 1 or at a +/// medium-priority interrupt level (<=EXCM_LEVEL). +/// If 'timer_num' is -1, then this function will +/// automatically choose the highest priority timer +/// that is suitable for use. This value will be +/// passed to xos_system_timer_select(). +/// +/// \param tick_period Number of clock (CCOUNT) cycles between ticks. +/// Must range between 0 and UINT32_MAX. +/// Zero is used to specify dynamic tick (tickless) +/// mode. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_start_system_timer(int32_t timer_num, uint32_t tick_period); + + +//----------------------------------------------------------------------------- +/// +/// Get the timer number of the system timer. Useful mainly when XOS has been +/// allowed to choose its own timer via xos_start_system_timer(). Not valid if +/// called before the system timer has been started. +/// +/// \return Returns one of XOS_SYS_TIMER_0, XOS_SYS_TIMER_1, XOS_SYS_TIMER_2 +/// or XOS_SYS_TIMER_EXTERNAL, or XOS_SYS_TIMER_NONE. +/// +//----------------------------------------------------------------------------- +int32_t +xos_get_system_timer_num(void); + + +//----------------------------------------------------------------------------- +/// +/// Initialize timer object. +/// +/// \param timer Pointer to timer event structure. +/// +/// \return Returns nothing. +/// +/// NOTE: This function should not be called on a timer object once it has +/// been activated. +/// +//----------------------------------------------------------------------------- +void xos_timer_init(XosTimer * timer); + + +//----------------------------------------------------------------------------- +// Flags for xos_timer_start(). +//----------------------------------------------------------------------------- +#define XOS_TIMER_DELTA 0x0000 +#define XOS_TIMER_PERIODIC 0x0001 +#define XOS_TIMER_ABSOLUTE 0x0002 +#define XOS_TIMER_FROM_NOW 0x0000 +#define XOS_TIMER_FROM_LAST 0x0010 + + +//----------------------------------------------------------------------------- +/// +/// Start the timer, and when the timer expires, call the specified function +/// (invoke (*fn)(arg)). If the timer is periodic, it will be automatically +/// restarted when it expires. +/// +/// The specified timer event structure must have been initialized before +/// first use by calling xos_timer_init(). +/// +/// The callback function will be called in an interrupt context. Hence it is +/// NOT safe to use any coprocessors in the function, including the FPU. If a +/// coprocessor must be used, then its state must be saved and restored across +/// its use. +/// +/// NOTE: If you are using the timer only to wait on (via xos_timer_wait()) +/// then it is not necessary to specify a callback function. You should pass +/// NULL for the callback function and zero for the callback argument. +/// +/// \param timer Pointer to timer event structure. Must have been +/// initialized. May be active or not. +/// +/// \param when When to call the function (see flags). +/// +/// \param flags Set of option flags XOS_TIMER_* \n +/// The following flags are mutually exclusive: +/// - XOS_TIMER_DELTA -- when is number of cycles from +/// [see below] (default) +/// - XOS_TIMER_PERIODIC -- when is number of cycles +/// from [see below], and timer continually +/// re-triggers at that interval +/// - XOS_TIMER_ABSOLUTE -- when is absolute value of +/// cycle count \n +/// \n +/// The following flags are mutually exclusive: +/// - XOS_TIMER_FROM_NOW -- *DELTA and *PERIODIC are +/// relative to now (default) +/// - XOS_TIMER_FROM_LAST -- *DELTA and *PERIODIC are +/// relative to the timer event's last specified expiry +/// time (usually in the future if active, in the past +/// if not, absolute 0 if was never activated). +/// +/// \param func Function to call (called in timer interrupt context). +/// This argument is optional. Specify NULL if no function +/// is to be called. +/// +/// \param arg Argument passed to callback function. Only relevant if +/// 'func' is not NULL. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_timer_start(XosTimer * timer, + uint64_t when, + uint32_t flags, + XosTimerFunc * func, + void * arg); + + +//----------------------------------------------------------------------------- +/// +/// Stop the timer and remove it from the list of active timers. Has no effect +/// if the timer is not active. Any waiting threads are woken up. +/// +/// The timer structure must have been initialized at least once, else its +/// contents are undefined and can lead to unpredictable results. +/// +/// \param timer Pointer to timer object. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_timer_stop(XosTimer * timer); + + +//----------------------------------------------------------------------------- +/// +/// Reset and restart the timer. +/// +/// The timer is reset to go off at time "when" from now. If the timer was not +/// active, it will be activated. If the timer was active, it will be restarted. +/// If the timer is periodic, the period will be set to "when". +/// The timer object must have been initialized at some point before this call. +/// +/// \param timer Pointer to timer object. +/// +/// \param when Number of cycles from now that the timer will expire. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_timer_restart(XosTimer * timer, uint64_t when); + + +//----------------------------------------------------------------------------- +/// +/// Check if the timer is active. The timer is active if it has been started +/// and not yet expired or canceled. +/// +/// \param timer Pointer to timer object. +/// +/// \return Returns non-zero if the timer is active, else zero. +/// +//----------------------------------------------------------------------------- +static inline int32_t +xos_timer_is_active(XosTimer * timer) +{ + return timer ? timer->active : 0; +} + + +//----------------------------------------------------------------------------- +/// +/// Get the repeat period for a periodic timer. For a one-shot timer this will +/// return zero. The period is reported in system clock cycles. +/// +/// \param timer Pointer to timer object. +/// +/// \return Returns period in cycles, or zero for non-periodic timers. +/// +//----------------------------------------------------------------------------- +static inline uint64_t +xos_timer_get_period(XosTimer * timer) +{ + return timer ? timer->delta : 0; +} + + +//----------------------------------------------------------------------------- +/// +/// Set the repeat period for a periodic timer. The period must be specified +/// in system clock cycles. +/// +/// If the timer is active, the change in period does not take effect until +/// the timer expires at least once after this call. +/// Note that setting a period of zero will effectively turn a periodic timer +/// into a one-shot timer. Similarly, a one-shot timer can be turned into a +/// periodic timer. +/// +/// \param timer Pointer to timer object. +/// +/// \param period Repeat period in system clock cycles. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_timer_set_period(XosTimer * timer, uint64_t period); + + +//----------------------------------------------------------------------------- +/// +/// Get the current system cycle count. This accounts for the periodic rollover +/// of the 32-bit CCOUNT cycle counter and returns a 64-bit value. +/// +/// \return Returns the current system cycle count. +/// +//----------------------------------------------------------------------------- +static inline uint64_t +xos_get_system_cycles(void) +{ + extern uint64_t xos_system_cycles; + extern uint32_t xos_last_ccount; + + // xos_last_ccount was updated when xos_system_cycles was last updated. + // We need to add in the number of cycles elapsed since then. + return xos_system_cycles + (xos_get_ccount() - xos_last_ccount); +} + + +//----------------------------------------------------------------------------- +/// +/// Put calling thread to sleep for at least the specified number of cycles. +/// The actual number of cycles spent sleeping may be larger depending upon +/// the granularity of the system timer. Once the specified time has elapsed +/// the thread will be woken and made ready. +/// +/// \param cycles Number of system clock cycles to sleep. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_thread_sleep(uint64_t cycles); + + +//----------------------------------------------------------------------------- +/// +/// Put calling thread to sleep for at least the specified number of msec. +/// The actual amount of time spent sleeping may be larger depending upon +/// the granularity of the system timer. Once the specified time has elapsed +/// the thread will be woken and made ready. +/// +/// \return msecs The number of milliseconds to sleep. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +static inline int32_t +xos_thread_sleep_msec(uint64_t msecs) +{ + return xos_thread_sleep(xos_msecs_to_cycles(msecs)); +} + + +//----------------------------------------------------------------------------- +/// +/// Put calling thread to sleep for at least the specified number of usec. +/// The actual amount of time spent sleeping may be larger depending upon +/// the granularity of the system timer. Once the specified time has elapsed +/// the thread will be woken and made ready. +/// +/// \return usecs The number of microseconds to sleep. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +static inline int32_t +xos_thread_sleep_usec(uint64_t usecs) +{ + return xos_thread_sleep(xos_usecs_to_cycles(usecs)); +} + + +//----------------------------------------------------------------------------- +/// +/// Wait on a timer until it expires or is cancelled. The calling thread will +/// be blocked. The timer must be active. +/// NOTE: This operation is only available if XOS_OPT_TIMER_WAIT is set +/// to 1 in the configuration options. +/// +/// \param timer Pointer to timer object. +/// +/// \return Returns XOS_OK on normal timeout, else an error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_timer_wait(XosTimer * timer); + + +//----------------------------------------------------------------------------- +// System timer control interface. +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +// Defines for system timer ID. +//----------------------------------------------------------------------------- +#define XOS_SYS_TIMER_0 0 ///< Internal timer 0 +#define XOS_SYS_TIMER_1 1 ///< Internal timer 1 +#define XOS_SYS_TIMER_2 2 ///< Internal timer 2 +#define XOS_SYS_TIMER_EXTERNAL -2 ///< External timer +#define XOS_SYS_TIMER_NONE -1 ///< No system timer selected + + +//----------------------------------------------------------------------------- +/// +/// This function handles XOS timer tick processing. It must be called by the +/// timer interrupt handler on every timer interrupt. This function computes +/// the time to the next tick and sets it up by calling xos_system_timer_set(). +/// +//----------------------------------------------------------------------------- +void +xos_tick_handler(void); + + +//----------------------------------------------------------------------------- +/// +/// Selects the timer to use. The selection may be one of the internal timers +/// or an external timer. The default implementation selects an internal timer. +/// This function can be overridden to provide custom timer processing or to +/// support an external timer. +/// +/// \param timer_num The internal timer number to select (0-2) or +/// -1 to auto-select a timer. This parameter can +/// be ignored by custom implementations that use +/// an external timer. +/// +/// \param psel Pointer to a location where the selected timer +/// ID must be returned. The timer ID must be one +/// of XOS_SYS_TIMER_0, XOS_SYS_TIMER_1, XOS_SYS_TIMER_2 +/// or XOS_SYS_TIMER_EXTERNAL. +/// +/// \return Returns XOS_OK on success, else error code. +/// +//----------------------------------------------------------------------------- +int32_t +xos_system_timer_select(int32_t timer_num, int32_t *psel); + + +//----------------------------------------------------------------------------- +/// +/// Starts the system timer and sets up the first interrupt. This function can +/// be overridden to provide custom timer processing or to support an external +/// timer. +/// +/// \param cycles The number of CPU cycles from now when the +/// first interrupt must occur. +/// +//----------------------------------------------------------------------------- +void +xos_system_timer_init(uint32_t cycles); + + +//----------------------------------------------------------------------------- +/// +/// Sets the next trigger value of the system timer. The parameter 'cycles' is +/// the number of CPU cycles from now when the interrupt must occur. +/// This function can be overridden to provide custom timer processing or to +/// support an external timer. +/// +/// \param cycles The number of CPU cycles from now when the +/// next interrupt must occur. +/// +//----------------------------------------------------------------------------- +void +xos_system_timer_set(uint32_t cycles); + + +#ifdef __cplusplus +} +#endif + +#endif // __XOS_TIMER_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xos_types.h b/tools/sdk/include/esp32/xtensa/xos_types.h new file mode 100755 index 00000000..a913b94a --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xos_types.h @@ -0,0 +1,75 @@ +/** @file */ +// xos_types.h - XOS type definitions. + +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: Do not include this file directly in your application. Including +// xos.h will automatically include this file. + + +#ifndef __XOS_TYPES_H__ +#define __XOS_TYPES_H__ + +#if !defined(_ASMLANGUAGE) && !defined(__ASSEMBLER__) + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +//----------------------------------------------------------------------------- +// The following are defined here because of the variations in the C libraries +// that we need to work with. +// - Not all of them have stdbool.h +// - Not all of them define NULL as (void *)0 +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +/// +/// XOS define for NULL value. This makes the NULL value independent of the +/// C library (not all of them define NULL the same way). +/// +//----------------------------------------------------------------------------- +#define XOS_NULL ((void *)0) + + +//----------------------------------------------------------------------------- +/// +/// XOS definition of 'bool' type. Some C libraries do not support stdbool.h. +/// +//----------------------------------------------------------------------------- +#ifndef bool +#define bool int8_t +#define false 0 ///< XOS definition of 'false' +#define true 1 ///< XOS definition of 'true' +#endif + +#ifdef __cplusplus +} +#endif + +#endif // !defined(_ASMLANGUAGE) && !defined(__ASSEMBLER__) + +#endif // __XOS_TYPES_H__ + diff --git a/tools/sdk/include/esp32/xtensa/xt_perf_consts.h b/tools/sdk/include/esp32/xtensa/xt_perf_consts.h new file mode 100755 index 00000000..f063a31f --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xt_perf_consts.h @@ -0,0 +1,283 @@ +/* + * Customer ID=11656; Build=0x5f626; Copyright (c) 2012 by Tensilica Inc. ALL RIGHTS RESERVED. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef __XT_PERF_CONSTS_H__ +#define __XT_PERF_CONSTS_H__ + +/* + * Performance monitor counter selectors + */ + +#define XTPERF_CNT_COMMITTED_INSN 0x8002 /* Instructions committed */ +#define XTPERF_CNT_BRANCH_PENALTY 0x8003 /* Branch penalty cycles */ +#define XTPERF_CNT_PIPELINE_INTERLOCKS 0x8004 /* Pipeline interlocks cycles */ +#define XTPERF_CNT_ICACHE_MISSES 0x8005 /* ICache misses penalty in cycles */ +#define XTPERF_CNT_DCACHE_MISSES 0x8006 /* DCache misses penalty in cycles */ + +#define XTPERF_CNT_CYCLES 0 /* Count cycles */ +#define XTPERF_CNT_OVERFLOW 1 /* Overflow of counter n-1 (assuming this is counter n) */ +#define XTPERF_CNT_INSN 2 /* Successfully completed instructions */ +#define XTPERF_CNT_D_STALL 3 /* Data-related GlobalStall cycles */ +#define XTPERF_CNT_I_STALL 4 /* Instruction-related and other GlobalStall cycles */ +#define XTPERF_CNT_EXR 5 /* Exceptions and pipeline replays */ +#define XTPERF_CNT_BUBBLES 6 /* Hold and other bubble cycles */ +#define XTPERF_CNT_I_TLB 7 /* Instruction TLB Accesses (per instruction retiring) */ +#define XTPERF_CNT_I_MEM 8 /* Instruction memory accesses (per instruction retiring) */ +#define XTPERF_CNT_D_TLB 9 /* Data TLB accesses */ +#define XTPERF_CNT_D_LOAD_U1 10 /* Data memory load instruction (load-store unit 1) */ +#define XTPERF_CNT_D_STORE_U1 11 /* Data memory store instruction (load-store unit 1) */ +#define XTPERF_CNT_D_ACCESS_U1 12 /* Data memory accesses (load, store, S32C1I, etc; load-store unit 1) */ +#define XTPERF_CNT_D_LOAD_U2 13 /* Data memory load instruction (load-store unit 2) */ +#define XTPERF_CNT_D_STORE_U2 14 /* Data memory store instruction (load-store unit 2) */ +#define XTPERF_CNT_D_ACCESS_U2 15 /* Data memory accesses (load, store, S32C1I, etc; load-store unit 2) */ +#define XTPERF_CNT_D_LOAD_U3 16 /* Data memory load instruction (load-store unit 3) */ +#define XTPERF_CNT_D_STORE_U3 17 /* Data memory store instruction (load-store unit 3) */ +#define XTPERF_CNT_D_ACCESS_U3 18 /* Data memory accesses (load, store, S32C1I, etc; load-store unit 3) */ +#define XTPERF_CNT_MULTIPLE_LS 22 /* Multiple Load/Store */ +#define XTPERF_CNT_OUTBOUND_PIF 23 /* Outbound PIF transactions */ +#define XTPERF_CNT_INBOUND_PIF 24 /* Inbound PIF transactions */ +#define XTPERF_CNT_PREFETCH 26 /* Prefetch events */ + + +/* + * Masks for each of the selector listed above + */ + +/* XTPERF_CNT_COMMITTED_INSN selector mask */ + +#define XTPERF_MASK_COMMITTED_INSN 0x0001 + +/* XTPERF_CNT_BRANCH_PENALTY selector mask */ + +#define XTPERF_MASK_BRANCH_PENALTY 0x0001 + +/* XTPERF_CNT_PIPELINE_INTERLOCKS selector mask */ + +#define XTPERF_MASK_PIPELINE_INTERLOCKS 0x0001 + +/* XTPERF_CNT_ICACHE_MISSES selector mask */ + +#define XTPERF_MASK_ICACHE_MISSES 0x0001 + +/* XTPERF_CNT_DCACHE_MISSES selector mask */ + +#define XTPERF_MASK_DCACHE_MISSES 0x0001 + +/* XTPERF_CNT_CYCLES selector mask */ + +#define XTPERF_MASK_CYCLES 0x0001 + +/* XTPERF_CNT_OVERFLOW selector mask */ + +#define XTPERF_MASK_OVERFLOW 0x0001 + +/* + * XTPERF_CNT_INSN selector mask + */ + +#define XTPERF_MASK_INSN_ALL 0x8DFF + +#define XTPERF_MASK_INSN_JX 0x0001 /* JX */ +#define XTPERF_MASK_INSN_CALLX 0x0002 /* CALLXn */ +#define XTPERF_MASK_INSN_RET 0x0004 /* call return i.e. RET, RETW */ +#define XTPERF_MASK_INSN_RF 0x0008 /* supervisor return i.e. RFDE, RFE, RFI, RFWO, RFWU */ +#define XTPERF_MASK_INSN_BRANCH_TAKEN 0x0010 /* Conditional branch taken, or loopgtz/loopnez skips loop */ +#define XTPERF_MASK_INSN_J 0x0020 /* J */ +#define XTPERF_MASK_INSN_CALL 0x0040 /* CALLn */ +#define XTPERF_MASK_INSN_BRANCH_NOT_TAKEN 0x0080 /* Conditional branch fall through (aka. not-taken branch) */ +#define XTPERF_MASK_INSN_LOOP_TAKEN 0x0100 /* Loop instr falls into loop (aka. taken loop) */ +#define XTPERF_MASK_INSN_LOOP_BEG 0x0400 /* Loopback taken to LBEG */ +#define XTPERF_MASK_INSN_LOOP_END 0x0800 /* Loopback falls through to LEND */ +#define XTPERF_MASK_INSN_NON_BRANCH 0x8000 /* Non-branch instruction (aka. non-CTI) */ + +/* + * XTPERF_CNT_D_STALL selector mask + */ + +#define XTPERF_MASK_D_STALL_ALL 0x01FE + +#define XTPERF_MASK_D_STALL_STORE_BUF_FULL 0x0002 /* Store buffer full stall */ +#define XTPERF_MASK_D_STALL_STORE_BUF_CONFLICT 0x0004 /* Store buffer conflict stall */ +#define XTPERF_MASK_D_STALL_CACHE_MISS 0x0008 /* DCache-miss stall */ +#define XTPERF_MASK_D_STALL_BUSY 0x0010 /* Data RAM/ROM/XLMI busy stall */ +#define XTPERF_MASK_D_STALL_IN_PIF 0x0020 /* Data inbound-PIF request stall (incl s32c1i) */ +#define XTPERF_MASK_D_STALL_MHT_LOOKUP 0x0040 /* MHT lookup stall */ +#define XTPERF_MASK_D_STALL_UNCACHED_LOAD 0x0080 /* Uncached load stall (included in MHT lookup stall) */ +#define XTPERF_MASK_D_STALL_BANK_CONFLICT 0x0100 /* Bank-conflict stall */ + +/* + * XTPERF_CNT_I_STALL selector mask + */ + +#define XTPERF_MASK_I_STALL_ALL 0x01FF + +#define XTPERF_MASK_I_STALL_CACHE_MISS 0x0001 /* ICache-miss stall */ +#define XTPERF_MASK_I_STALL_BUSY 0x0002 /* Instruction RAM/ROM busy stall */ +#define XTPERF_MASK_I_STALL_IN_PIF 0x0004 /* Instruction RAM inbound-PIF request stall */ +#define XTPERF_MASK_I_STALL_TIE_PORT 0x0008 /* TIE port stall */ +#define XTPERF_MASK_I_STALL_EXTERNAL_SIGNAL 0x0010 /* External RunStall signal status */ +#define XTPERF_MASK_I_STALL_UNCACHED_FETCH 0x0020 /* Uncached fetch stall */ +#define XTPERF_MASK_I_STALL_FAST_L32R 0x0040 /* FastL32R stall */ +#define XTPERF_MASK_I_STALL_ITERATIVE_MUL 0x0080 /* Iterative multiply stall */ +#define XTPERF_MASK_I_STALL_ITERATIVE_DIV 0x0100 /* Iterative divide stall */ + +/* + * XTPERF_CNT_EXR selector mask + */ + +#define XTPERF_MASK_EXR_ALL 0x01FF + +#define XTPERF_MASK_EXR_REPLAYS 0x0001 /* Other Pipeline Replay (i.e. excludes $ miss etc.) */ +#define XTPERF_MASK_EXR_LEVEL1_INT 0x0002 /* Level-1 interrupt */ +#define XTPERF_MASK_EXR_LEVELH_INT 0x0004 /* Greater-than-level-1 interrupt */ +#define XTPERF_MASK_EXR_DEBUG 0x0008 /* Debug exception */ +#define XTPERF_MASK_EXR_NMI 0x0010 /* NMI */ +#define XTPERF_MASK_EXR_WINDOW 0x0020 /* Window exception */ +#define XTPERF_MASK_EXR_ALLOCA 0x0040 /* Alloca exception */ +#define XTPERF_MASK_EXR_OTHER 0x0080 /* Other exceptions */ +#define XTPERF_MASK_EXR_MEM_ERR 0x0100 /* HW-corrected memory error */ + +/* + * XTPERF_CNT_BUBBLES selector mask + */ + +#define XTPERF_MASK_BUBBLES_ALL 0x01FD + +#define XTPERF_MASK_BUBBLES_PSO 0x0001 /* Processor domain PSO bubble */ +#define XTPERF_MASK_BUBBLES_R_HOLD_D_CACHE_MISS 0x0004 /* R hold caused by DCache miss */ +#define XTPERF_MASK_BUBBLES_R_HOLD_STORE_RELEASE 0x0008 /* R hold caused by Store release */ +#define XTPERF_MASK_BUBBLES_R_HOLD_REG_DEP 0x0010 /* R hold caused by register dependency */ +#define XTPERF_MASK_BUBBLES_R_HOLD_WAIT 0x0020 /* R hold caused by MEMW, EXTW or EXCW */ +#define XTPERF_MASK_BUBBLES_R_HOLD_HALT 0x0040 /* R hold caused by Halt instruction (TX only) */ +#define XTPERF_MASK_BUBBLES_CTI 0x0080 /* CTI bubble (e.g. branch delay slot) */ +#define XTPERF_MASK_BUBBLES_WAITI 0x0100 /* WAITI bubble */ + +/* + * XTPERF_CNT_I_TLB selector mask + */ + +#define XTPERF_MASK_I_TLB_ALL 0x000F + +#define XTPERF_MASK_I_TLB_HITS 0x0001 /* Hit */ +#define XTPERF_MASK_I_TLB_REPLAYS 0x0002 /* Replay of instruction due to ITLB miss */ +#define XTPERF_MASK_I_TLB_REFILLS 0x0004 /* HW-assisted TLB Refill completes */ +#define XTPERF_MASK_I_TLB_MISSES 0x0008 /* ITLB Miss Exception */ + +/* + * XTPERF_CNT_I_MEM selector mask + */ + +#define XTPERF_MASK_I_MEM_ALL 0x000F + +#define XTPERF_MASK_I_MEM_CACHE_HITS 0x0001 /* ICache Hit */ +#define XTPERF_MASK_I_MEM_CACHE_MISSES 0x0002 /* ICache Miss (includes uncached) */ +#define XTPERF_MASK_I_MEM_IRAM 0x0004 /* InstRAM or InstROM */ +#define XTPERF_MASK_I_MEM_BYPASS 0x0008 /* Bypass (i.e. uncached) fetch */ + +/* + * XTPERF_CNT_D_TLB selector mask + */ + +#define XTPERF_MASK_D_TLB_ALL 0x000F + +#define XTPERF_MASK_D_TLB_HITS 0x0001 /* Hit */ +#define XTPERF_MASK_D_TLB_REPLAYS 0x0002 /* Replay of instruction due to DTLB miss */ +#define XTPERF_MASK_D_TLB_REFILLS 0x0004 /* HW-assisted TLB Refill completes */ +#define XTPERF_MASK_D_TLB_MISSES 0x0008 /* DTLB Miss Exception */ + +/* + * XTPERF_CNT_D_LOAD_U* selector mask + */ + +#define XTPERF_MASK_D_LOAD_ALL 0x000F + +#define XTPERF_MASK_D_LOAD_CACHE_HITS 0x0001 /* Cache Hit */ +#define XTPERF_MASK_D_LOAD_CACHE_MISSES 0x0002 /* Cache Miss */ +#define XTPERF_MASK_D_LOAD_LOCAL_MEM 0x0004 /* Local memory hit */ +#define XTPERF_MASK_D_LOAD_BYPASS 0x0008 /* Bypass (i.e. uncached) load */ + +/* + * XTPERF_CNT_D_STORE_U* selector mask + */ + +#define XTPERF_MASK_D_STORE_ALL 0x000F + +#define XTPERF_MASK_D_STORE_CACHE_HITS 0x0001 /* DCache Hit */ +#define XTPERF_MASK_D_STORE_CACHE_MISSES 0x0002 /* DCache Miss */ +#define XTPERF_MASK_D_STORE_LOCAL_MEM 0x0004 /* Local memory hit */ +#define XTPERF_MASK_D_STORE_PIF 0x0008 /* PIF Store */ + +/* + * XTPERF_CNT_D_ACCESS_U* selector mask + */ + +#define XTPERF_MASK_D_ACCESS_ALL 0x000F + +#define XTPERF_MASK_D_ACCESS_CACHE_MISSES 0x0001 /* DCache Miss */ +#define XTPERF_MASK_D_ACCESS_HITS_SHARED 0x0002 /* Hit Shared */ +#define XTPERF_MASK_D_ACCESS_HITS_EXCLUSIVE 0x0004 /* Hit Exclusive */ +#define XTPERF_MASK_D_ACCESS_HITS_MODIFIED 0x0008 /* Hit Modified */ + +/* + * XTPERF_CNT_MULTIPLE_LS selector mask + */ + +#define XTPERF_MASK_MULTIPLE_LS_ALL 0x003F + +#define XTPERF_MASK_MULTIPLE_LS_0S_0L 0x0001 /* 0 stores and 0 loads */ +#define XTPERF_MASK_MULTIPLE_LS_0S_1L 0x0002 /* 0 stores and 1 loads */ +#define XTPERF_MASK_MULTIPLE_LS_1S_0L 0x0004 /* 1 stores and 0 loads */ +#define XTPERF_MASK_MULTIPLE_LS_1S_1L 0x0008 /* 1 stores and 1 loads */ +#define XTPERF_MASK_MULTIPLE_LS_0S_2L 0x0010 /* 0 stores and 2 loads */ +#define XTPERF_MASK_MULTIPLE_LS_2S_0L 0x0020 /* 2 stores and 0 loads */ + +/* + * XTPERF_CNT_OUTBOUND_PIF selector mask + */ + +#define XTPERF_MASK_OUTBOUND_PIF_ALL 0x0003 + +#define XTPERF_MASK_OUTBOUND_PIF_CASTOUT 0x0001 /* Castout */ +#define XTPERF_MASK_OUTBOUND_PIF_PREFETCH 0x0002 /* Prefetch */ + +/* + * XTPERF_CNT_INBOUND_PIF selector mask + */ + +#define XTPERF_MASK_INBOUND_PIF_ALL 0x0003 + +#define XTPERF_MASK_INBOUND_PIF_I_DMA 0x0001 /* Instruction DMA */ +#define XTPERF_MASK_INBOUND_PIF_D_DMA 0x0002 /* Data DMA */ + +/* + * XTPERF_CNT_PREFETCH selector mask + */ + +#define XTPERF_MASK_PREFETCH_ALL 0x002F + +#define XTPERF_MASK_PREFETCH_I_HIT 0x0001 /* I prefetch-buffer-lookup hit */ +#define XTPERF_MASK_PREFETCH_D_HIT 0x0002 /* D prefetch-buffer-lookup hit */ +#define XTPERF_MASK_PREFETCH_I_MISS 0x0004 /* I prefetch-buffer-lookup miss */ +#define XTPERF_MASK_PREFETCH_D_MISS 0x0008 /* D prefetch-buffer-lookup miss */ +#define XTPERF_MASK_PREFETCH_D_L1_FILL 0x0020 /* Fill directly to DCache L1 */ + +#endif /* __XT_PERF_CONSTS_H__ */ diff --git a/tools/sdk/include/esp32/xtensa/xt_perfmon.h b/tools/sdk/include/esp32/xtensa/xt_perfmon.h new file mode 100755 index 00000000..959052b1 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xt_perfmon.h @@ -0,0 +1,183 @@ +/* + * Customer ID=11656; Build=0x5f626; Copyright (c) 2012 by Tensilica Inc. ALL RIGHTS RESERVED. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef __XT_PERFMON_H__ +#define __XT_PERFMON_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int counter_id_t; + +/* xt_perf_init + + Initialize the performance monitor library. Ordinarily, this + function is called automatically via the .init section. If your + environment does not support the .init section, you will need to + call this function from your code. +*/ + +extern void xt_perf_init(void); + +/* xt_perf_enable + + Turn on the performance monitor. Ordinarily, counting is off by + default. If you turn off performance monitor using xt_perf_disable or + by call to a function that disables performance monitor, you can turn + it on again via this function. +*/ + +extern void xt_perf_enable(void); + +/* xt_perf_disable + + Turn off the performance monitor. If you want to suspend counting + events for a portion of your code, use this function and then call + xt_perf_enable when you want to start again. +*/ + +extern void xt_perf_disable(void); + +/* xt_perf_clear + + Disable performance monitor and clear all initialized hardware counters. + All counter ids are invalid after call to this function and all hardware + counters available for initialization. +*/ + +extern void xt_perf_clear (void); + +/* xt_perf_counters_num + + Returns number of free hardware performance counters. After call to xt_perf_clear + all counters are free and available for initialization. With each successful + xt_perf_init_counter/xt_perf_init_event call this number is decreasing until + no free counters available. +*/ + +extern int xt_perf_counters_num (void); + +/* xt_perf_init_counter32 + + Setup 32 bit performance counter. This function disables performance monitor + if it was enabled. + + Returns zero based counter id on success or negative value if failed. + This function may fail if there is insufficient number of free hardware + counters or function arguments are invalid. + + The counter id returned on success can be used with xt_perf_reset_counter + and xt_perf_counter32 functions. + + - events group, one of XTPERF_CNT constants defined in + xt_perf_consts.h; + - events mask for selected group. Mask bit fields for each + selector defined with XTPERF_MASK prefix in xt_perf_consts.h; + - specifies interrupt levels at which to count events; + if trace_level is greater or equal to zero events are + counted only at interrupt levels below or equal to + trace_level; if trace_level is negative events are + counted only at (-trace_level) interrupt level or higher. +*/ + + +extern counter_id_t xt_perf_init_counter32 ( unsigned int selector, + unsigned int mask, + int trace_level); + +/* xt_perf_init_counter64 + + Setup 64 bit performance counter. Library emulates 64 bit counters by handling + profiling interrupt and recording overflows of 32 bit hardware counters. + This function disables performance monitor if it was enabled. + + Returns zero based counter id on success or negative value if failed. + This function may fail if there is insufficient number of free hardware + counters or function arguments are invalid. + + The counter id returned on success can be used with xt_perf_reset_counter + and xt_perf_counter64 functions. + + - events group, one of XTPERF_CNT constants defined in + xt_perf_consts.h; + - events mask for selected group. Mask bit fields for each + selector defined with XTPERF_MASK prefix in xt_perf_consts.h; + - specifies interrupt levels at which to count events; + if trace_level is greater or equal to zero events are + counted only at interrupt levels below or equal to + trace_level; if trace_level is negative events are + counted only at (-trace_level) interrupt level or higher. +*/ + +extern counter_id_t xt_perf_init_counter64 ( unsigned int selector, + unsigned int mask, + int trace_level); + +/* xt_perf_reset_counter + + Reset counter value to 0. + Returns zero on success or non zero if failed. +*/ + +extern int xt_perf_reset_counter (counter_id_t counter_id); + +/* xt_perf_counter32 + + Read 32 bit counter value. + + Returns zero if counter id is not valid. +*/ + +extern unsigned int xt_perf_counter32 (counter_id_t counter_id); + +/* xt_perf_counter64 + + Read 64 bit counter value. + + Counter must be initialized using xt_perf_init_counter64 function. + + Returns zero if counter id is not valid. +*/ + +extern unsigned long long xt_perf_counter64 (counter_id_t counter_id); + + /* xt_perf_overflow32 + + Read overflow flag of 32 bit counter. This flag is dropped when + counter initialized or reset. Once counter overflows and wraps + around the flag is set and stays set until counter reset. + + Returns negative value if counter id is invalid, zero if counter + not overflowed, positive if in overflowed state. + */ + +extern int xt_perf_overflow32 (counter_id_t counter_id); + +#ifdef __cplusplus +} +#endif + +#endif /* __XT_PERFMON_H__ */ diff --git a/tools/sdk/include/esp32/xtensa/xt_profiling.h b/tools/sdk/include/esp32/xtensa/xt_profiling.h new file mode 100755 index 00000000..650713a4 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xt_profiling.h @@ -0,0 +1,233 @@ +/* + * Customer ID=11656; Build=0x5f626; Copyright (c) 2005-2012 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +#ifndef __XT_PROFILER_H__ +#define __XT_PROFILER_H__ + +#include + +#if XCHAL_NUM_PERF_COUNTERS +/* Performance monitor counters constants */ +#include + +#endif /* XCHAL_NUM_PERF_COUNTERS */ + + +#ifdef __cplusplus +extern "C" { +#endif + +/* This file defines an interface that allows a program being profiled + to control when and how it is profiled, whether it is running under + the instruction set simulator or under the hardware profiler. + + Both ISS and HWP implement this interface, although in different + ways. Both also do the right thing if you don't call any of these + functions. +*/ + + +/* +xt_profile_init + + ISS: a no op. + + HWP: Initialize the profiler. Ordinarily, this function is called + automatically via the .init section. If your environment does not + support the .init section, you will need to call this function + by hand. +*/ +extern void xt_profile_init(void); + +/* +xt_profile_add_memory + + ISS: a no op. + + HWP: + Makes "buf_size" bytes at "buf" available to the hardware profiler. + This buffer should be initialized to zeros prior to this call. + + The hardware profiler has already estimated the amount of memory it needs, + but under certain circumstances may still run out of memory. If so, you can + provide more memory with this routine. + +*/ +extern void xt_profile_add_memory(void * buf, unsigned int buf_size); + + +/* xt_profile_enable + + Turn on the profiler. Ordinarily, profiling is on by default. + If you turn off profiling using xt_profile_disable, You can turn + it on again via this function. +*/ +extern void xt_profile_enable(void); + +/* xt_profile_disable + + Turn off the profiler. If you don't want to profile a portion of your code, + use this function and then xt_profile_enable when you want to start again. +*/ +extern void xt_profile_disable(void); + +/* xt_profile_save_and_reset + + Save and reset the profiler's data. + If there were errors, either during profiling or while attempting to + write the data, no data will be written and this function will + return non-zero. + +*/ +extern int xt_profile_save_and_reset(void); + +/* xt_profile_get_frequency + + ISS: always returns 1. + + HWP: + Returns the number of cycles between samples for timer based profiler. + In performance counters based profiler always returns 1. +*/ +extern unsigned int xt_profile_get_frequency(void); + +/* xt_profile_set_frequency + + ISS: a no op. + + HWP: + Set the number of cycles between samples for timer based profiler. + Ignored in performance counters based profiler. + + sample frequency is the number of cycles to wait between samples. It should + be a multiple of 1024. + + If you set the sample frequency to a different value than was passed in xt_profile_init, + then the labels in the output will reflect the later frequency, even though some samples may + have been taken at the earlier frequency. Typically this does not make a significant difference + in the results if this function is called early enough. +*/ +extern void xt_profile_set_frequency(unsigned int sample_frequency); + +/* xt_profile_num_errors + + ISS: always returns 0 + + HWP: + Returns the number of errors that occured while taking samples. Typically these + are out of memory errors and you need to pass a bigger buffer to + xt_profile_add_memory +*/ +extern int xt_profile_num_errors(void); + + +#if XCHAL_NUM_PERF_COUNTERS + + +/* xt_profile_randomize + + ISS: not available + + HWP: Available in performance monitor based profiler. + + Turns on or off sampling period randomization mode. Period randomization + helps to avoid aliasing problems when code being profiled is highly periodic. + Profiler maintains same average sampling period but individual sampling + steps may vary. + Period randomization is turned off by default. + + - non zero turns randomization on, + zero turns randomization off. +*/ + +extern void xt_profile_randomization(int value); + +/* xt_profile_config_clear + + ISS: not available + + HWP: Available in performance monitor based profiler. + + Stops profiling if it was enabled and clears performance counters + parameters. Accumulated profile data stays in memory and will be + saved when xt_profile_save_and_reset is called or at program exit. + Number of configured performance counters is zero after this + function call. +*/ + +extern void xt_profile_config_clear(void); + + +/* xt_profile_config_num + + ISS: not available + + HWP: Available in performance monitor based profiler. + + Returns number of free performance counters. +*/ + +extern int xt_profile_config_num(void); + + +/* xt_profile_config_counter error codes +*/ + +#define XTPROF_ERR_OUT_OF_MEM -1 +#define XTPROF_ERR_INVALID_ARGS -2 +#define XTPROF_ERR_NOT_ENOUGH_COUNTERS -3 +#define XTPROF_ERR_DEFUNCT -4 + +/* xt_profile_config_counter + + ISS: not available + + HWP: Available in performance monitor based profiler. + + Allocating and initializing one or more performance counter for sampling. + Even though event may require multiple performance counters allocated the + profile data for event is merged and dumped into single gmon file. + This function disables profiling if it was enabled. + + Returns 0 on success, non zero if failed: + XTPROF_ERR_OUT_OF_MEM - memory allocation failed; + XTPROF_ERR_INVALID_ARGS - invalid function parameters; + XTPROF_ERR_NOT_ENOUGH_COUNTERS - not enough free performance counters available; + XTPROF_ERR_DEFUNCT - profiling is disabled because of previous errors + (xt_profile_num_errors() is non zero) + + - events group, one of XTPERF_CNT constants defined in xt_perf_consts.h + - events mask for selected group. Mask bit fields for each + selector defined with XTPERF_MASK prefix in xt_perf_consts.h + - specifies interrupt levels at which to take samples; + if trace_level is greater or equal to zero samples are + taken only at interrupt levels below or equal to + trace_level; if trace_level is negative samples are taken + only at (-trace_level) interrupt level or higher. + - sampling period; 1 - record every event, 2 - record every + other event and so on; + Please note - there is overhead associated with events recording, + high frequency events may produce incorrect profile when period + is too small. +*/ + +extern int xt_profile_config_counter ( unsigned int selector, + unsigned int mask, + int trace_level, + unsigned int period); + + + +#endif /* XCHAL_NUM_PERF_COUNTERS */ + +#ifdef __cplusplus +} +#endif + +#endif /* __XT_PROFILER_H__ */ diff --git a/tools/sdk/include/esp32/xtensa/xt_reftb.h b/tools/sdk/include/esp32/xtensa/xt_reftb.h new file mode 100755 index 00000000..358c39f7 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xt_reftb.h @@ -0,0 +1,86 @@ +/* + * Customer ID=11656; Build=0x5f626; Copyright (c) 2009-2013 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of + * Tensilica Inc. They may be adapted and modified by bona fide + * purchasers for internal use, but neither the original nor any + * adapted or modified version may be disclosed or distributed to + * third parties in any manner, medium, or form, in whole or in part, + * without the prior written consent of Tensilica Inc. + * + * This software and its derivatives are to be executed solely on + * products incorporating a Tensilica processor. + */ + +// Utility routines for returning pass/fail status in HW simulations + +#ifndef XT_REF_TESTBENCH_H +#define XT_REF_TESTBENCH_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +// Exit routines for HW simulation +extern int diag_pass(); +extern int diag_fail(); + +// Set exit status for HW simulation +int set_diag_status(int stat); + +// Setup for user power toggling +extern int setup_power_toggle(); + +// Return exit status location +extern unsigned int* testbench_exit_location(); +// Return power toggle location +extern unsigned int* testbench_power_toggle_location(); + + +// Change exit status location +// You must also change the plusarg "+DVMagicExit" sent to the HW simulator +// or change the argument "--exit_location" sent to the ISS +extern unsigned int* set_testbench_exit_location(unsigned int*); +// Change power toggle location +// You must also change the plusarg "+DVPowerLoc" sent to the HW simulator +extern unsigned int* set_testbench_power_toggle_location(unsigned int*); + +// Exit routines with status message +// +static inline +int pass(const char *msg) +{ + return diag_pass(); +} + +static inline +int fail(const char *msg) +{ + return diag_fail(); +} + +#define POWER_TOGGLE_ON 1 +#define POWER_TOGGLE_OFF 0 + +// Routine to turn on and off power toggle +// Does a magic write that Monitors.v intercepts and appropriately turns +// SAIF dumping on and offf +// +extern volatile unsigned int *_reftb_power_toggle; + +__attribute__ ((always_inline)) +static inline +int set_power_toggle(int val) +{ +#ifdef __XTENSA__ + *_reftb_power_toggle = val; +#endif + return val; +} + +#ifdef __cplusplus +} +#endif + +#endif // XT_REF_TESTBENCH_H + diff --git a/tools/sdk/include/esp32/xtensa/xtav110.h b/tools/sdk/include/esp32/xtensa/xtav110.h new file mode 100755 index 00000000..23421f0b --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtav110.h @@ -0,0 +1,313 @@ +/* Copyright (c) 2007-2013 by Tensilica Inc. ALL RIGHTS RESERVED. +/ These coded instructions, statements, and computer programs are the +/ copyrighted works and confidential proprietary information of Tensilica Inc. +/ They may not be modified, copied, reproduced, distributed, or disclosed to +/ third parties in any manner, medium, or form, in whole or in part, without +/ the prior written consent of Tensilica Inc. +*/ + +/* xtav110.h - Xtensa Avnet LX110 (XT-AV110) board specific definitions */ + +#ifndef _INC_XTAV110_H_ +#define _INC_XTAV110_H_ + +#include +#include + +#define XTBOARD_NAME "XT-AV110" + + +/* + * Default assignment of XTAV110 devices to external interrupts. + */ + +/* Ethernet interrupt: */ +#ifdef XCHAL_EXTINT1_NUM +#define ETHERNET_INTNUM XCHAL_EXTINT1_NUM +#define ETHERNET_INTLEVEL XCHAL_EXTINT1_LEVEL +#define ETHERNET_INTMASK XCHAL_EXTINT1_MASK +#else +#define ETHERNET_INTMASK 0 +#endif + +/* UART interrupt: */ +#ifdef XCHAL_EXTINT0_NUM +#define UART16550_INTNUM XCHAL_EXTINT0_NUM +#define UART16550_INTLEVEL XCHAL_EXTINT0_LEVEL +#define UART16550_INTMASK XCHAL_EXTINT0_MASK +#else +#define UART16550_INTMASK 0 +#endif + +/* Audio output interrupt (I2S transmitter FIFO): */ +#ifdef XCHAL_EXTINT2_NUM +#define AUDIO_I2S_OUT_INTNUM XCHAL_EXTINT2_NUM +#define AUDIO_I2S_OUT_INTLEVEL XCHAL_EXTINT2_LEVEL +#define AUDIO_I2S_OUT_INTMASK XCHAL_EXTINT2_MASK +#else +#define AUDIO_I2S_OUT_INTMASK 0 +#endif + +/* Audio input interrupt (I2S receiver FIFO): */ +#ifdef XCHAL_EXTINT3_NUM +#define AUDIO_I2S_IN_INTNUM XCHAL_EXTINT3_NUM +#define AUDIO_I2S_IN_INTLEVEL XCHAL_EXTINT3_LEVEL +#define AUDIO_I2S_IN_INTMASK XCHAL_EXTINT3_MASK +#else +#define AUDIO_I2S_IN_INTMASK 0 +#endif + +/* I2C interrupt */ +#ifdef XCHAL_EXTINT4_NUM +#define I2C_INTNUM XCHAL_EXTINT4_NUM +#define I2C_INTLEVEL XCHAL_EXTINT4_LEVEL +#define I2C_INTMASK XCHAL_EXTINT4_MASK +#else +#define I2C_INTMASK 0 +#endif + +/* USB interrupt */ +#ifdef XCHAL_EXTINT5_NUM +#define USB_INTNUM XCHAL_EXTINT5_NUM +#define USB_INTLEVEL XCHAL_EXTINT5_LEVEL +#define USB_INTMASK XCHAL_EXTINT5_MASK +#else +#define USB_INTMASK 0 +#endif + +/* + * Device addresses. + * + * Note: for endianness-independence, use 32-bit loads and stores for all + * register accesses to Ethernet, UART and LED devices. Undefined bits + * may need to be masked out if needed when reading if the actual register + * size is smaller than 32 bits. + * + * Note: XTAV110 bus byte lanes are defined in terms of msbyte and lsbyte + * relative to the processor. So 32-bit registers are accessed consistently + * from both big and little endian processors. However, this means byte + * sequences are not consistent between big and little endian processors. + * This is fine for RAM, and for ROM if ROM is created for a specific + * processor (and thus has correct byte sequences). However this may be + * unexpected for Flash, which might contain a file-system that one wants + * to use for multiple processor configurations (eg. the Flash might contain + * the Ethernet card's address, endianness-independent application data, etc). + * That is, byte sequences written in Flash by a core of a given endianness + * will be byte-swapped when seen by a core of the other endianness. + * Someone implementing an endianness-independent Flash file system will + * likely handle this byte-swapping issue in the Flash driver software. + */ + +#define XTBOARD_FLASH_MAXSIZE 0x1000000 /* 16 MB */ + +#ifdef XSHAL_IOBLOCK_BYPASS_PADDR + +/* Flash Memory: */ +# define XTBOARD_FLASH_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x08000000) + +/* FPGA registers: */ +# define XTBOARD_FPGAREGS_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D020000) + +/* Ethernet controller/transceiver SONIC SN83934: */ +# define ETHERNET_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D030000) + + +/* UART National-Semi PC16550D: */ +# define UART16550_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D050000) + +/* I2S transmitter */ +# define AUDIO_I2S_OUT_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D080000) + +/* I2S receiver */ +# define AUDIO_I2S_IN_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D088000) + +/* I2C master */ +# define I2C_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D090000) + +/* SPI controller */ +# define SPI_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D0A0000) + +/* Display controller Sunplus SPLC780D, 4bit mode, + * LCD Display MYTech MOC-16216B-B: */ +# define SPLC780D_4BIT_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D0C0000) + +/* USB Controller */ +# define USB_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D0D0000) + +/* Ethernet buffer: */ +# define ETHERNET_BUFFER_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D800000) + +#endif /* XSHAL_IOBLOCK_BYPASS_PADDR */ + +/* These devices might be accessed cached: */ +#ifdef XSHAL_IOBLOCK_CACHED_PADDR +# define XTBOARD_FLASH_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x08000000) +# define ETHERNET_BUFFER_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x0D800000) +#endif /* XSHAL_IOBLOCK_CACHED_PADDR */ + + +/*** Same thing over again, this time with virtual addresses: ***/ + +#ifdef XSHAL_IOBLOCK_BYPASS_VADDR + +/* Flash Memory: */ +# define XTBOARD_FLASH_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x08000000) + +/* FPGA registers: */ +# define XTBOARD_FPGAREGS_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D020000) + +/* Ethernet controller/transceiver SONIC SN83934: */ +# define ETHERNET_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D030000) + + +/* UART National-Semi PC16550D: */ +# define UART16550_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D050000) + +/* I2S transmitter */ +# define AUDIO_I2S_OUT_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D080000) + +/* I2S receiver */ +# define AUDIO_I2S_IN_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D088000) + +/* I2C master */ +# define I2C_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D090000) + +/* SPI controller */ +# define SPI_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D0A0000) + +/* Display controller Sunplus SPLC780D, 4bit mode, + * LCD Display MYTech MOC-16216B-B: */ +# define SPLC780D_4BIT_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D0C0000) + +/* USB Controller */ +# define USB_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D0D0000) + +/* Ethernet buffer: */ +# define ETHERNET_BUFFER_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D800000) + +#endif /* XSHAL_IOBLOCK_BYPASS_VADDR */ + +/* These devices might be accessed cached: */ +#ifdef XSHAL_IOBLOCK_CACHED_VADDR +# define XTBOARD_FLASH_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x08000000) +# define ETHERNET_BUFFER_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x0D800000) +#endif /* XSHAL_IOBLOCK_CACHED_VADDR */ + + +/* System ROM: */ +#define XTBOARD_ROM_SIZE XSHAL_ROM_SIZE +#ifdef XSHAL_ROM_VADDR +#define XTBOARD_ROM_VADDR XSHAL_ROM_VADDR +#endif +#ifdef XSHAL_ROM_PADDR +#define XTBOARD_ROM_PADDR XSHAL_ROM_PADDR +#endif + +/* System RAM: */ +#define XTBOARD_RAM_SIZE XSHAL_RAM_SIZE +#ifdef XSHAL_RAM_VADDR +#define XTBOARD_RAM_VADDR XSHAL_RAM_VADDR +#endif +#ifdef XSHAL_RAM_PADDR +#define XTBOARD_RAM_PADDR XSHAL_RAM_PADDR +#endif +#define XTBOARD_RAM_BYPASS_VADDR XSHAL_RAM_BYPASS_VADDR +#define XTBOARD_RAM_BYPASS_PADDR XSHAL_RAM_BYPASS_PADDR + + + +/* + * Things that depend on device addresses. + */ + + +#define XTBOARD_CACHEATTR_WRITEBACK XSHAL_XT2000_CACHEATTR_WRITEBACK +#define XTBOARD_CACHEATTR_WRITEALLOC XSHAL_XT2000_CACHEATTR_WRITEALLOC +#define XTBOARD_CACHEATTR_WRITETHRU XSHAL_XT2000_CACHEATTR_WRITETHRU +#define XTBOARD_CACHEATTR_BYPASS XSHAL_XT2000_CACHEATTR_BYPASS +#define XTBOARD_CACHEATTR_DEFAULT XSHAL_XT2000_CACHEATTR_DEFAULT + +#define XTBOARD_BUSINT_PIPE_REGIONS XSHAL_XT2000_PIPE_REGIONS +#define XTBOARD_BUSINT_SDRAM_REGIONS XSHAL_XT2000_SDRAM_REGIONS + + +/* + * FPGA registers. + * All these registers are normally accessed using 32-bit loads/stores. + */ + +/* Register offsets: */ +#define XTBOARD_DATECD_OFS 0x00 /* date code (read-only) */ +#define XTBOARD_CLKFRQ_OFS 0x04 /* clock frequency Hz (read-only) */ +#define XTBOARD_SYSLED_OFS 0x08 /* LEDs */ +#define XTBOARD_DIPSW_OFS 0x0C /* DIP switch bits (read-only) */ +#define XTBOARD_SWRST_OFS 0x10 /* software reset */ + +/* Physical register addresses: */ +#ifdef XTBOARD_FPGAREGS_PADDR +#define XTBOARD_DATECD_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DATECD_OFS) +#define XTBOARD_CLKFRQ_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_CLKFRQ_OFS) +#define XTBOARD_SYSLED_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_SYSLED_OFS) +#define XTBOARD_DIPSW_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DIPSW_OFS) +#define XTBOARD_SWRST_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_SWRST_OFS) +#endif + +/* Virtual register addresses: */ +#ifdef XTBOARD_FPGAREGS_VADDR +#define XTBOARD_DATECD_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DATECD_OFS) +#define XTBOARD_CLKFRQ_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_CLKFRQ_OFS) +#define XTBOARD_SYSLED_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_SYSLED_OFS) +#define XTBOARD_DIPSW_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DIPSW_OFS) +#define XTBOARD_SWRST_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_SWRST_OFS) +/* Register access (for C code): */ +#define XTBOARD_DATECD_REG (*(volatile unsigned*) XTBOARD_DATECD_VADDR) +#define XTBOARD_CLKFRQ_REG (*(volatile unsigned*) XTBOARD_CLKFRQ_VADDR) +#define XTBOARD_SYSLED_REG (*(volatile unsigned*) XTBOARD_SYSLED_VADDR) +#define XTBOARD_DIPSW_REG (*(volatile unsigned*) XTBOARD_DIPSW_VADDR) +#define XTBOARD_SWRST_REG (*(volatile unsigned*) XTBOARD_SWRST_VADDR) +#endif + +/* DATECD (date code; when core was built) bit fields: */ +/* BCD-coded month (01..12): */ +#define XTBOARD_DATECD_MONTH_SHIFT 24 +#define XTBOARD_DATECD_MONTH_BITS 8 +#define XTBOARD_DATECD_MONTH_MASK 0xFF000000 +/* BCD-coded day (01..31): */ +#define XTBOARD_DATECD_DAY_SHIFT 16 +#define XTBOARD_DATECD_DAY_BITS 8 +#define XTBOARD_DATECD_DAY_MASK 0x00FF0000 +/* BCD-coded year (2001..9999): */ +#define XTBOARD_DATECD_YEAR_SHIFT 0 +#define XTBOARD_DATECD_YEAR_BITS 16 +#define XTBOARD_DATECD_YEAR_MASK 0x0000FFFF + +/* SYSLED (system LED) bit fields: */ + +/* LED control bits (off=0, on=1): */ +#define XTBOARD_SYSLED_USER_SHIFT 0 +#define XTBOARD_SYSLED_USER_BITS 2 +#define XTBOARD_SYSLED_USER_MASK 0x00000003 + +/* DIP Switch SW5 (left=sw1=lsb=bit0, right=sw4=msb=bit3; off=0, on=1): */ +/* DIP switch bit fields (bit2/sw3 is reserved and presently unused): */ +#define XTBOARD_DIPSW_USER_SHIFT 0 /* labeled 1-2 (1=lsb) */ +#define XTBOARD_DIPSW_USER_BITS 2 +#define XTBOARD_DIPSW_USER_MASK 0x00000003 +#define XTBOARD_DIPSW_BOOT_SHIFT 3 /* labeled 8 (msb) */ +#define XTBOARD_DIPSW_BOOT_BITS 1 +#define XTBOARD_DIPSW_BOOT_MASK 0x00000008 +/* Boot settings: bit3/sw4, off=0, on=1 (this switch controls hardware): */ +#define XTBOARD_DIPSW_BOOT_RAM (0< + diff --git a/tools/sdk/include/esp32/xtensa/xtav200.h b/tools/sdk/include/esp32/xtensa/xtav200.h new file mode 100755 index 00000000..f3d837ef --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtav200.h @@ -0,0 +1,280 @@ +/* Copyright (c) 2007-2013 by Tensilica Inc. ALL RIGHTS RESERVED. +/ These coded instructions, statements, and computer programs are the +/ copyrighted works and confidential proprietary information of Tensilica Inc. +/ They may not be modified, copied, reproduced, distributed, or disclosed to +/ third parties in any manner, medium, or form, in whole or in part, without +/ the prior written consent of Tensilica Inc. +*/ + +/* xtav200.h - Xtensa Avnet LX200 (XT-AV200) board specific definitions */ + +#ifndef _INC_XTAV200_H_ +#define _INC_XTAV200_H_ + +#include +#include + +#define XTBOARD_NAME "XT-AV200" + + +/* + * Default assignment of XTAV200 devices to external interrupts. + */ + +/* Ethernet interrupt: */ +#ifdef XCHAL_EXTINT1_NUM +#define ETHERNET_INTNUM XCHAL_EXTINT1_NUM +#define ETHERNET_INTLEVEL XCHAL_EXTINT1_LEVEL +#define ETHERNET_INTMASK XCHAL_EXTINT1_MASK +#else +#define ETHERNET_INTMASK 0 +#endif + +/* UART interrupt: */ +#ifdef XCHAL_EXTINT0_NUM +#define UART16550_INTNUM XCHAL_EXTINT0_NUM +#define UART16550_INTLEVEL XCHAL_EXTINT0_LEVEL +#define UART16550_INTMASK XCHAL_EXTINT0_MASK +#else +#define UART16550_INTMASK 0 +#endif + +/* Audio output interrupt (I2S FIFO underrun): */ +#ifdef XCHAL_EXTINT2_NUM +#define AUDIO_INTNUM XCHAL_EXTINT2_NUM +#define AUDIO_INTLEVEL XCHAL_EXTINT2_LEVEL +#define AUDIO_INTMASK XCHAL_EXTINT2_MASK +#else +#define AUDIO_INTMASK 0 +#endif + +/* Audio output (I2S FIFO level) interrupt: */ +#ifdef XCHAL_EXTINT3_NUM +#define AUDIO_I2SLVL_INTNUM XCHAL_EXTINT3_NUM +#define AUDIO_I2SLVL_INTLEVEL XCHAL_EXTINT3_LEVEL +#define AUDIO_I2SLVL_INTMASK XCHAL_EXTINT3_MASK +#else +#define AUDIO_I2SLVL_INTMASK 0 +#endif + +/* Audio input (ADC FIFO level) interrupt: */ +#ifdef XCHAL_EXTINT4_NUM +#define AUDIO_ADCLVL_INTNUM XCHAL_EXTINT4_NUM +#define AUDIO_ADCLVL_INTLEVEL XCHAL_EXTINT4_LEVEL +#define AUDIO_ADCLVL_INTMASK XCHAL_EXTINT4_MASK +#else +#define AUDIO_ADCLVL_INTMASK 0 +#endif + + +/* + * Device addresses. + * + * Note: for endianness-independence, use 32-bit loads and stores for all + * register accesses to Ethernet, UART and LED devices. Undefined bits + * may need to be masked out if needed when reading if the actual register + * size is smaller than 32 bits. + * + * Note: XTAV200 bus byte lanes are defined in terms of msbyte and lsbyte + * relative to the processor. So 32-bit registers are accessed consistently + * from both big and little endian processors. However, this means byte + * sequences are not consistent between big and little endian processors. + * This is fine for RAM, and for ROM if ROM is created for a specific + * processor (and thus has correct byte sequences). However this may be + * unexpected for Flash, which might contain a file-system that one wants + * to use for multiple processor configurations (eg. the Flash might contain + * the Ethernet card's address, endianness-independent application data, etc). + * That is, byte sequences written in Flash by a core of a given endianness + * will be byte-swapped when seen by a core of the other endianness. + * Someone implementing an endianness-independent Flash file system will + * likely handle this byte-swapping issue in the Flash driver software. + */ + +#define XTBOARD_FLASH_MAXSIZE 0x1000000 /* 16 MB */ + +#ifdef XSHAL_IOBLOCK_BYPASS_PADDR + +/* Flash Memory: */ +# define XTBOARD_FLASH_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x08000000) + +/* FPGA registers: */ +# define XTBOARD_FPGAREGS_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D020000) + +/* Ethernet controller/transceiver SONIC SN83934: */ +# define ETHERNET_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D030000) + +/* UART National-Semi PC16550D: */ +# define UART16550_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D050000) + +/* TI 320AIC23/28-TSSOP Stereo Audio Codec: */ +# define AUDIO_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D070000) + +/* Boot 128K Sram address: */ +# define BOOT_SRAM_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D400000) + +/* Ethernet buffer: */ +# define ETHERNET_BUFFER_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D800000) + +#endif /* XSHAL_IOBLOCK_BYPASS_PADDR */ + +/* These devices might be accessed cached: */ +#ifdef XSHAL_IOBLOCK_CACHED_PADDR +# define XTBOARD_FLASH_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x08000000) +# define ETHERNET_BUFFER_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x0D800000) +# define BOOT_SRAM_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x0D400000) +#endif /* XSHAL_IOBLOCK_CACHED_PADDR */ + + +/*** Same thing over again, this time with virtual addresses: ***/ + +#ifdef XSHAL_IOBLOCK_BYPASS_VADDR + +/* Flash Memory: */ +# define XTBOARD_FLASH_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x08000000) + +/* FPGA registers: */ +# define XTBOARD_FPGAREGS_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D020000) + +/* Ethernet controller/transceiver SONIC SN83934: */ +# define ETHERNET_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D030000) + +/* UART National-Semi PC16550D: */ +# define UART16550_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D050000) + +/* TI 320AIC23/28-TSSOP Stereo Audio Codec: */ +# define AUDIO_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D070000) + +/* 128K Sram address: */ +# define BOOT_SRAM_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D400000) + +/* Ethernet buffer: */ +# define ETHERNET_BUFFER_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D800000) + +#endif /* XSHAL_IOBLOCK_BYPASS_VADDR */ + +/* These devices might be accessed cached: */ +#ifdef XSHAL_IOBLOCK_CACHED_VADDR +# define XTBOARD_FLASH_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x08000000) +# define AUDIO_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x0D070000) +# define ETHERNET_BUFFER_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x0D800000) +# define BOOT_SRAM_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x0D400000) +#endif /* XSHAL_IOBLOCK_CACHED_VADDR */ + + +/* System ROM: */ +#define XTBOARD_ROM_SIZE XSHAL_ROM_SIZE +#ifdef XSHAL_ROM_VADDR +#define XTBOARD_ROM_VADDR XSHAL_ROM_VADDR +#endif +#ifdef XSHAL_ROM_PADDR +#define XTBOARD_ROM_PADDR XSHAL_ROM_PADDR +#endif + +/* System RAM: */ +#define XTBOARD_RAM_SIZE XSHAL_RAM_SIZE +#ifdef XSHAL_RAM_VADDR +#define XTBOARD_RAM_VADDR XSHAL_RAM_VADDR +#endif +#ifdef XSHAL_RAM_PADDR +#define XTBOARD_RAM_PADDR XSHAL_RAM_PADDR +#endif +#define XTBOARD_RAM_BYPASS_VADDR XSHAL_RAM_BYPASS_VADDR +#define XTBOARD_RAM_BYPASS_PADDR XSHAL_RAM_BYPASS_PADDR + + + +/* + * Things that depend on device addresses. + */ + + +#define XTBOARD_CACHEATTR_WRITEBACK XSHAL_XT2000_CACHEATTR_WRITEBACK +#define XTBOARD_CACHEATTR_WRITEALLOC XSHAL_XT2000_CACHEATTR_WRITEALLOC +#define XTBOARD_CACHEATTR_WRITETHRU XSHAL_XT2000_CACHEATTR_WRITETHRU +#define XTBOARD_CACHEATTR_BYPASS XSHAL_XT2000_CACHEATTR_BYPASS +#define XTBOARD_CACHEATTR_DEFAULT XSHAL_XT2000_CACHEATTR_DEFAULT + +#define XTBOARD_BUSINT_PIPE_REGIONS XSHAL_XT2000_PIPE_REGIONS +#define XTBOARD_BUSINT_SDRAM_REGIONS XSHAL_XT2000_SDRAM_REGIONS + + +/* + * FPGA registers. + * All these registers are normally accessed using 32-bit loads/stores. + */ + +/* Register offsets: */ +#define XTBOARD_DATECD_OFS 0x00 /* date code (read-only) */ +#define XTBOARD_CLKFRQ_OFS 0x04 /* clock frequency Hz (read-only) */ +#define XTBOARD_SYSLED_OFS 0x08 /* LEDs */ +#define XTBOARD_DIPSW_OFS 0x0C /* DIP switch bits (read-only) */ +#define XTBOARD_SWRST_OFS 0x10 /* software reset */ + +/* Physical register addresses: */ +#ifdef XTBOARD_FPGAREGS_PADDR +#define XTBOARD_DATECD_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DATECD_OFS) +#define XTBOARD_CLKFRQ_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_CLKFRQ_OFS) +#define XTBOARD_SYSLED_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_SYSLED_OFS) +#define XTBOARD_DIPSW_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DIPSW_OFS) +#define XTBOARD_SWRST_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_SWRST_OFS) +#endif + +/* Virtual register addresses: */ +#ifdef XTBOARD_FPGAREGS_VADDR +#define XTBOARD_DATECD_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DATECD_OFS) +#define XTBOARD_CLKFRQ_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_CLKFRQ_OFS) +#define XTBOARD_SYSLED_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_SYSLED_OFS) +#define XTBOARD_DIPSW_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DIPSW_OFS) +#define XTBOARD_SWRST_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_SWRST_OFS) +/* Register access (for C code): */ +#define XTBOARD_DATECD_REG (*(volatile unsigned*) XTBOARD_DATECD_VADDR) +#define XTBOARD_CLKFRQ_REG (*(volatile unsigned*) XTBOARD_CLKFRQ_VADDR) +#define XTBOARD_SYSLED_REG (*(volatile unsigned*) XTBOARD_SYSLED_VADDR) +#define XTBOARD_DIPSW_REG (*(volatile unsigned*) XTBOARD_DIPSW_VADDR) +#define XTBOARD_SWRST_REG (*(volatile unsigned*) XTBOARD_SWRST_VADDR) +#endif + +/* DATECD (date code; when core was built) bit fields: */ +/* BCD-coded month (01..12): */ +#define XTBOARD_DATECD_MONTH_SHIFT 24 +#define XTBOARD_DATECD_MONTH_BITS 8 +#define XTBOARD_DATECD_MONTH_MASK 0xFF000000 +/* BCD-coded day (01..31): */ +#define XTBOARD_DATECD_DAY_SHIFT 16 +#define XTBOARD_DATECD_DAY_BITS 8 +#define XTBOARD_DATECD_DAY_MASK 0x00FF0000 +/* BCD-coded year (2001..9999): */ +#define XTBOARD_DATECD_YEAR_SHIFT 0 +#define XTBOARD_DATECD_YEAR_BITS 16 +#define XTBOARD_DATECD_YEAR_MASK 0x0000FFFF + +/* SYSLED (system LED) bit fields: */ + +/* LED control bits (off=0, on=1): */ +#define XTBOARD_SYSLED_USER_SHIFT 0 +#define XTBOARD_SYSLED_USER_BITS 4 +#define XTBOARD_SYSLED_USER_MASK 0x0000000F + +/* DIP Switch (left=sw1=lsb=bit0, right=sw8=msb=bit7; off=0, on=1): */ +/* DIP switch bit fields (bit6/sw7 is reserved and presently unused): */ +#define XTBOARD_DIPSW_USER_SHIFT 0 /* labeled 1-6 (1=lsb) */ +#define XTBOARD_DIPSW_USER_BITS 6 +#define XTBOARD_DIPSW_USER_MASK 0x0000003F +#define XTBOARD_DIPSW_BOOT_SHIFT 7 /* labeled 8 (msb) */ +#define XTBOARD_DIPSW_BOOT_BITS 1 +#define XTBOARD_DIPSW_BOOT_MASK 0x00000080 +/* Boot settings: bit7/sw8, off=0, on=1 (this switch controls hardware): */ +#define XTBOARD_DIPSW_BOOT_RAM (0< + diff --git a/tools/sdk/include/esp32/xtensa/xtav60.h b/tools/sdk/include/esp32/xtensa/xtav60.h new file mode 100755 index 00000000..d7c8e3ae --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtav60.h @@ -0,0 +1,241 @@ +/* Copyright (c) 2002-2013 by Tensilica Inc. ALL RIGHTS RESERVED. +/ These coded instructions, statements, and computer programs are the +/ copyrighted works and confidential proprietary information of Tensilica Inc. +/ They may not be modified, copied, reproduced, distributed, or disclosed to +/ third parties in any manner, medium, or form, in whole or in part, without +/ the prior written consent of Tensilica Inc. +*/ + +/* xtav60.h - Xtensa Avnet LX60 (XT-AV60) board specific definitions */ + +#ifndef _INC_XTAV60_H_ +#define _INC_XTAV60_H_ + +#include +#include + +#define XTBOARD_NAME "XT-AV60" + + +/* + * Default assignment of XTAV60 devices to external interrupts. + */ + +/* Ethernet interrupt: */ +#ifdef XCHAL_EXTINT1_NUM +#define ETHERNET_INTNUM XCHAL_EXTINT1_NUM +#define ETHERNET_INTLEVEL XCHAL_EXTINT1_LEVEL +#define ETHERNET_INTMASK XCHAL_EXTINT1_MASK +#else +#define ETHERNET_INTMASK 0 +#endif + +/* UART interrupt: */ +#ifdef XCHAL_EXTINT0_NUM +#define UART16550_INTNUM XCHAL_EXTINT0_NUM +#define UART16550_INTLEVEL XCHAL_EXTINT0_LEVEL +#define UART16550_INTMASK XCHAL_EXTINT0_MASK +#else +#define UART16550_INTMASK 0 +#endif + +/* + * Device addresses. + * + * Note: for endianness-independence, use 32-bit loads and stores for all + * register accesses to Ethernet, UART and LED devices. Undefined bits + * may need to be masked out if needed when reading if the actual register + * size is smaller than 32 bits. + * + * Note: XTAV60 bus byte lanes are defined in terms of msbyte and lsbyte + * relative to the processor. So 32-bit registers are accessed consistently + * from both big and little endian processors. However, this means byte + * sequences are not consistent between big and little endian processors. + * This is fine for RAM, and for ROM if ROM is created for a specific + * processor (and thus has correct byte sequences). However this may be + * unexpected for Flash, which might contain a file-system that one wants + * to use for multiple processor configurations (eg. the Flash might contain + * the Ethernet card's address, endianness-independent application data, etc). + * That is, byte sequences written in Flash by a core of a given endianness + * will be byte-swapped when seen by a core of the other endianness. + * Someone implementing an endianness-independent Flash file system will + * likely handle this byte-swapping issue in the Flash driver software. + */ + +#define XTBOARD_FLASH_MAXSIZE 0x400000 /* 4 MB */ + +#ifdef XSHAL_IOBLOCK_BYPASS_PADDR + +/* Flash Memory: */ +# define XTBOARD_FLASH_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x08000000) + +/* FPGA registers: */ +# define XTBOARD_FPGAREGS_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D020000) + +/* Ethernet controller/transceiver SONIC SN83934: */ +# define ETHERNET_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D030000) +# define ETHERNET_CONTROLLER_PADDR ETHERNET_PADDR /* legacy macro */ + +/* Display controller Sunplus SPLC780D, LCD Display MYTech MOC-16216B-B: */ +# define SPLC780D_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D040000) + +/* UART National-Semi PC16550D: */ +# define UART16550_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D050000) + +/* Boot 128K Sram address: */ +# define BOOT_SRAM_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D400000) + +/* Ethernet buffer: */ +# define ETHERNET_BUFFER_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D800000) + +#endif /* XSHAL_IOBLOCK_BYPASS_PADDR */ + +/* These devices might be accessed cached: */ +#ifdef XSHAL_IOBLOCK_CACHED_PADDR +# define XTBOARD_FLASH_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x08000000) +# define ETHERNET_BUFFER_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x0D800000) +# define BOOT_SRAM_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x0D400000) +#endif /* XSHAL_IOBLOCK_CACHED_PADDR */ + + +/*** Same thing over again, this time with virtual addresses: ***/ + +#ifdef XSHAL_IOBLOCK_BYPASS_VADDR + +/* Flash Memory: */ +# define XTBOARD_FLASH_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x08000000) + +/* FPGA registers: */ +# define XTBOARD_FPGAREGS_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D020000) + +/* Ethernet controller/transceiver SONIC SN83934: */ +# define ETHERNET_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D030000) + +/* Display controller Sunplus SPLC780D, LCD Display MYTech MOC-16216B-B: */ +# define SPLC780D_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D040000) + +/* UART National-Semi PC16550D: */ +# define UART16550_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D050000) + +/* 128K Sram address: */ +# define BOOT_SRAM_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D400000) + +/* Ethernet buffer: */ +# define ETHERNET_BUFFER_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D800000) + +#endif /* XSHAL_IOBLOCK_BYPASS_VADDR */ + +/* These devices might be accessed cached: */ +#ifdef XSHAL_IOBLOCK_CACHED_VADDR +# define XTBOARD_FLASH_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x08000000) +# define ETHERNET_BUFFER_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x0D800000) +# define BOOT_SRAM_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x0D400000) +#endif /* XSHAL_IOBLOCK_CACHED_VADDR */ + + +/* System ROM: */ +#define XTBOARD_ROM_SIZE XSHAL_ROM_SIZE +#ifdef XSHAL_ROM_VADDR +#define XTBOARD_ROM_VADDR XSHAL_ROM_VADDR +#endif +#ifdef XSHAL_ROM_PADDR +#define XTBOARD_ROM_PADDR XSHAL_ROM_PADDR +#endif + +/* System RAM: */ +#define XTBOARD_RAM_SIZE XSHAL_RAM_SIZE +#ifdef XSHAL_RAM_VADDR +#define XTBOARD_RAM_VADDR XSHAL_RAM_VADDR +#endif +#ifdef XSHAL_RAM_PADDR +#define XTBOARD_RAM_PADDR XSHAL_RAM_PADDR +#endif +#define XTBOARD_RAM_BYPASS_VADDR XSHAL_RAM_BYPASS_VADDR +#define XTBOARD_RAM_BYPASS_PADDR XSHAL_RAM_BYPASS_PADDR + + + +/* + * Things that depend on device addresses. + */ + + +#define XTBOARD_CACHEATTR_WRITEBACK XSHAL_XT2000_CACHEATTR_WRITEBACK +#define XTBOARD_CACHEATTR_WRITEALLOC XSHAL_XT2000_CACHEATTR_WRITEALLOC +#define XTBOARD_CACHEATTR_WRITETHRU XSHAL_XT2000_CACHEATTR_WRITETHRU +#define XTBOARD_CACHEATTR_BYPASS XSHAL_XT2000_CACHEATTR_BYPASS +#define XTBOARD_CACHEATTR_DEFAULT XSHAL_XT2000_CACHEATTR_DEFAULT + +#define XTBOARD_BUSINT_PIPE_REGIONS XSHAL_XT2000_PIPE_REGIONS +#define XTBOARD_BUSINT_SDRAM_REGIONS XSHAL_XT2000_SDRAM_REGIONS + + +/* + * FPGA registers. + * All these registers are normally accessed using 32-bit loads/stores. + */ + +/* Register offsets: */ +#define XTBOARD_DATECD_OFS 0x00 /* date code (read-only) */ +#define XTBOARD_CLKFRQ_OFS 0x04 /* clock frequency Hz (read-only) */ +#define XTBOARD_DIPSW_OFS 0x0C /* DIP switch bits (read-only) */ +#define XTBOARD_SWRST_OFS 0x10 /* software reset */ + +/* Physical register addresses: */ +#ifdef XTBOARD_FPGAREGS_PADDR +#define XTBOARD_DATECD_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DATECD_OFS) +#define XTBOARD_CLKFRQ_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_CLKFRQ_OFS) +#define XTBOARD_DIPSW_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DIPSW_OFS) +#define XTBOARD_SWRST_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_SWRST_OFS) +#endif + +/* Virtual register addresses: */ +#ifdef XTBOARD_FPGAREGS_VADDR +#define XTBOARD_DATECD_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DATECD_OFS) +#define XTBOARD_CLKFRQ_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_CLKFRQ_OFS) +#define XTBOARD_DIPSW_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DIPSW_OFS) +#define XTBOARD_SWRST_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_SWRST_OFS) +/* Register access (for C code): */ +#define XTBOARD_DATECD_REG (*(volatile unsigned*) XTBOARD_DATECD_VADDR) +#define XTBOARD_CLKFRQ_REG (*(volatile unsigned*) XTBOARD_CLKFRQ_VADDR) +#define XTBOARD_DIPSW_REG (*(volatile unsigned*) XTBOARD_DIPSW_VADDR) +#define XTBOARD_SWRST_REG (*(volatile unsigned*) XTBOARD_SWRST_VADDR) +#endif + +/* DATECD (date code; when core was built) bit fields: */ +/* BCD-coded month (01..12): */ +#define XTBOARD_DATECD_MONTH_SHIFT 24 +#define XTBOARD_DATECD_MONTH_BITS 8 +#define XTBOARD_DATECD_MONTH_MASK 0xFF000000 +/* BCD-coded day (01..31): */ +#define XTBOARD_DATECD_DAY_SHIFT 16 +#define XTBOARD_DATECD_DAY_BITS 8 +#define XTBOARD_DATECD_DAY_MASK 0x00FF0000 +/* BCD-coded year (2001..9999): */ +#define XTBOARD_DATECD_YEAR_SHIFT 0 +#define XTBOARD_DATECD_YEAR_BITS 16 +#define XTBOARD_DATECD_YEAR_MASK 0x0000FFFF + +/* DIP Switch (left=sw1=lsb=bit0, right=sw8=msb=bit7; off=0, on=1): */ +/* DIP switch bit fields (bit6/sw7 is reserved and presently unused): */ +#define XTBOARD_DIPSW_USER_SHIFT 0 /* labeled 1-6 (1=lsb) */ +#define XTBOARD_DIPSW_USER_BITS 6 +#define XTBOARD_DIPSW_USER_MASK 0x0000003F +#define XTBOARD_DIPSW_BOOT_SHIFT 7 /* labeled 8 (msb) */ +#define XTBOARD_DIPSW_BOOT_BITS 1 +#define XTBOARD_DIPSW_BOOT_MASK 0x00000080 +/* Boot settings: bit7/sw8, off=0, on=1 (this switch controls hardware): */ +#define XTBOARD_DIPSW_BOOT_RAM (0< + diff --git a/tools/sdk/include/esp32/xtensa/xtav60/xtensa/lcd-splc780d-board.h b/tools/sdk/include/esp32/xtensa/xtav60/xtensa/lcd-splc780d-board.h new file mode 100755 index 00000000..629a3258 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtav60/xtensa/lcd-splc780d-board.h @@ -0,0 +1,60 @@ +/******************************************************************************* + +Copyright (c) 2006-2007 by Tensilica Inc. ALL RIGHTS RESERVED. +These coded instructions, statements, and computer programs are the +copyrighted works and confidential proprietary information of Tensilica Inc. +They may not be modified, copied, reproduced, distributed, or disclosed to +third parties in any manner, medium, or form, in whole or in part, without +the prior written consent of Tensilica Inc. +-------------------------------------------------------------------------------- + +lcd-splc780d-board.h Board-specific LCD info on Avnet AV60 (XT-AV60) board. + +Interface between board-independent driver and board-specific header. + +This is used by a board-independent SPLC780D LCD controller driver to obtain +board-specific information about LCD displays on the board, such as the +controller register base address and spacing (a function of how the address +lines are connected on the board) and length of the visible window of the +display (a function of the LCD panel the controller drives). The driver does +not refer directly to the board-specific header, which therefore is not +constrained to use macro names consistent with other boards. + +!! Must not contain any board-specific macro names (only controller specific) !! + +Included at compile-time via an include path specific to the board. + +The XT-AV60 board contains a single MYTech MOC-16216B-B display driven by +a Sunplus SPLC870D controller. + +*******************************************************************************/ + +#ifndef _LCD_SPLC780D_BOARD_H +#define _LCD_SPLC780D_BOARD_H + +#include /* Board info */ + + +/* Base address of the controller's registers. */ +#ifdef SPLC780D_VADDR +#define SPLC780D_REGBASE SPLC780D_VADDR +#endif + +/* +The controller's registers are connected at word addresses on the XT-AV60. +Each byte-wide register appears as the least-significant-byte (LSB) of the +word regardless of the endianness of the processor (so if using word accesses +then endianness doesn't matter). +*/ +#define SPLC780D_REGSPACING 4 +typedef unsigned splc780d_reg_t; + +/* Include generic information shared by all boards that use this device. */ +#include + + +/* Display limits of the LCD panel. */ +#define DISPLAY_VISIBLE_LEN 16 /* length (chars) of visible window */ + +#endif /* _LCD_SPLC780D_BOARD_H */ + diff --git a/tools/sdk/include/esp32/xtensa/xtbsp.h b/tools/sdk/include/esp32/xtensa/xtbsp.h new file mode 100755 index 00000000..62356dd8 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtbsp.h @@ -0,0 +1,269 @@ +/******************************************************************************* + + Copyright (c) 2006-2009 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- + +xtbsp.h Xtensa Board Support Package API + +This API defines a minimal set of board-support functions that every supported +Xtensa board is expected to provide in the board-support-package (BSP) library +associated with the board-specific LSP. Only basic board functions are provided +in this board-independent API. API functions not applicable to a board must be +stubbed in its BSP library. More complex operations must use a board-specific +interface. Functions are grouped by type of peripheral device. + +*******************************************************************************/ + +#ifndef _XTBSP_H_ +#define _XTBSP_H_ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* +BOARD INITIALIZATION. +The board with all its devices is initialized by xtbsp_board_init(). +Individual devices represented by this API can be reinitialized at any +time by calling their inidividual device init functions (grouped with +other device functions). This might be useful to (say) change the baud +rate of the UART. +*/ + + +/* +Initialize the board. Must call before any other API function. +Iniitializes BSP, board in general, and all devices on the board. +*/ +extern void xtbsp_board_init(void); + + +/******************************************************************************* +BOARD CHARACTERISTICS and CONVENIENCE FUNCTIONS. +Board support functions not associated with a particular peripheral device. +*/ + +/* +Return a short string representing the type of board. +If the board has a display, the string must fit on a single line. +*/ +extern const char * xtbsp_board_name(void); + +/* +Hardware reset the entire board (if possible). Does not return if successful. +If this function returns, it is stubbed out or not possible with this board. +*/ +extern void xtbsp_board_reset(void); + +/* +Return the clock frequency in Hertz. May be constant or computed. +*/ +extern unsigned xtbsp_clock_freq_hz(void); + +/* +Return the clock period in picoseconds. May be constant or computed. +*/ +extern unsigned xtbsp_clock_period_ps(void); + +/* +Spin (at least) a number of cycles per the processor's CCOUNT register. +Unlike a s/w delay loop, the duration is not affected by compiler +optimization or interrupts completed within the delay period. +If the processor doesn't have CCOUNT, a s/w delay loop is used to obtain +a rough approximation of the cycle count. +*/ +extern void xtbsp_delay_cycles(unsigned cycles); + +/* +Spin at least a number of nanoseconds (approximate and err in the high side). +BSP implementation should do this efficiently, avoiding integer overflow or +excessive loss of precision, run-time division or floating point. +Function implementation (vs. macro) allows BSP to optimize for the clock +frequency by pre-computing (or using constant) scale factors. +*/ +extern void xtbsp_delay_ns(unsigned ns); + + +/******************************************************************************* +C LIBRARY SUPPORT. +These functions are called by the C library libgloss interface. +Their names are predetermined apart from this BSP API. +*/ + +/* +Initialize the board. Called by C library initialization code. +Usually simply calls xtbsp_board_init(). +*/ +extern void board_init(void); + +/* +(Wait for and) Input a single byte from the default character I/O +device. Return -1 if there is no input device. +This device is usually a UART and this function calls xtbsp_uart_getchar(). +On some boards (eg.) it might be a directly connected keyboard. +*/ +extern int inbyte(void); + +/* +Output a single char to the default character I/O device (and wait +until it's been taken). +This device is usually a UART and this function calls xtbsp_uart_putchar(). +On some boards (eg.) it might be a directly connected bit-mapped screen. +*/ +extern void outbyte(int c); + + +/******************************************************************************* +UART (SERIAL I/O). +Supports a single UART in a simple polling mode and provides control of +receiver and transmitter data interrupts (client must provide handler). +Provides a mapping to processor interrupt number which can be used with +the HAL to control processor interrupt enable (INTENABLE) etc. +*/ + +/* Bitmasks to identify UART interrupts. */ +typedef enum xtbsp_uart_int { + xtbsp_uart_int_rx = 1<<0, + xtbsp_uart_int_tx = 1<<1, + /* mask of all valid interrupt bits */ + xtbsp_uart_int_all = (1<<2)-1 +} xtbsp_uart_int; + +/* +Return non-zero if the board has a UART. +*/ +extern int xtbsp_uart_exists(void); + +/* +Initialize the UART: + parity = 0 (none), 1 (odd), or 2 (even). + nstop = 1 or 2 (stop bits). + ndata = 7 or 8 (data bits). +Disables all UART interrupts. +Returns non-zero if failed (perhaps due to unsupported parameter values). +Must call before any of the following functions. +*/ +extern int xtbsp_uart_init(unsigned baud, unsigned ndata, + unsigned parity, unsigned nstop); +#define xtbsp_uart_init_default() xtbsp_uart_init(38400, 8, 0, 1) + +/* +(Wait for and) Input a single char from the UART. +Any pending xtbsp_uart_int_rx interrupt is cleared. +*/ +extern char xtbsp_uart_getchar(void); + +/* +(Wait for transmitter ready and) Output a single char to the UART. +Any pending xtbsp_uart_int_tx interrupt is cleared. +*/ +extern void xtbsp_uart_putchar(const char c); + +/* +Return true (non-zero) if a character has been received and is ready +to be input by xtbsp_uart_getchar() without waiting, else return 0. +*/ +extern int xtbsp_uart_get_isready(void); + +/* +Return non-zero if a character may be output by xtbsp_uart_putchar() +without waiting, else return 0. +Any pending xtbsp_uart_int_tx interrupt is cleared. +*/ +extern int xtbsp_uart_put_isready(void); + +/* +Return the enable status of all UART interrupts represented by this API, +that is those with bits defined in type xtbsp_uart_int (1 bit = enabled). +This is the enable status at the device, not the processor's INTENABLE. +*/ +extern xtbsp_uart_int xtbsp_uart_int_enable_status(void); + +/* +Enable selected UART interrupts at the device. +*/ +extern void xtbsp_uart_int_enable(const xtbsp_uart_int mask); + +/* +Disable selected UART interrupts at the device. +*/ +extern void xtbsp_uart_int_disable(const xtbsp_uart_int mask); + +/* +Return the interrupt number (0..31) to which the selected UART interrupt +is connected. May be used with the link-time HAL to obtain more information, +eg. Xthal_intlevel_mask[xtbsp_uart_int_number(xtbsp_uart_int_rx)] +This information can be used to control the processor's INTENABLE, etc. +Result is -1 if not connected, undefined if mask has more than 1 bit set. +*/ +extern int xtbsp_uart_int_number(const xtbsp_uart_int mask); + + +/******************************************************************************* +DISPLAY. +Supports a single display that can render a series of ASCII characters. +Functions are provided to perform generic display tasks such as display +a string, display character by character, or blank the display. +Chars are 7-bit printable ASCII. Strings are C style NUL \0 terminated. +These functions busy-wait for any required timing delays so the caller does +not have to deal with timing. Some displays require long delays which in +some client applications warrant a board and RTOS specific approach to +driving the display, however that is beyond the scope of this API. +*/ + +/* +Return non-zero if board has a display. +*/ +extern int xtbsp_display_exists(void); + +/* +Initialize the display. Must call before any of the following functions. +*/ +extern void xtbsp_display_init(void); + +/* +Display a single char at position pos (0 is leftmost). Other positions are +left untouched. Positions beyond the width of the display are ignored. +*/ +extern void xtbsp_display_char(unsigned pos, const char c); + +/* +Display a string. Blank-pad to or truncate at the end of the display +(overwrites any previous string so don't need to blank display first). +*/ +extern void xtbsp_display_string(const char *s); + +/* +Blank (clear) the entire display. +*/ +extern void xtbsp_display_blank(void); + + + +#ifdef __cplusplus +} +#endif + +#endif /* _XTBSP_H_ */ diff --git a/tools/sdk/include/esp32/xtensa/xtensa-libdb-macros.h b/tools/sdk/include/esp32/xtensa/xtensa-libdb-macros.h new file mode 100755 index 00000000..fbbe5096 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtensa-libdb-macros.h @@ -0,0 +1,161 @@ +/* + * xtensa-libdb-macros.h + */ + +/* $Id: //depot/rel/Eaglenest/Xtensa/Software/libdb/xtensa-libdb-macros.h#1 $ */ + +/* Copyright (c) 2004-2008 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef __H_LIBDB_MACROS +#define __H_LIBDB_MACROS + +/* + * This header file provides macros used to construct, identify and use + * "target numbers" that are assigned to various types of Xtensa processor + * registers and states. These target numbers are used by GDB in the remote + * protocol, and are thus used by all GDB debugger agents (targets). + * They are also used in ELF debugger information sections (stabs, dwarf, etc). + * + * These macros are separated from xtensa-libdb.h because they are needed + * by certain debugger agents that do not use or have access to libdb, + * e.g. the OCD daemon, RedBoot, XMON, etc. + * + * For the time being, for compatibility with certain 3rd party debugger + * software vendors, target numbers are limited to 16 bits. It is + * conceivable that this will be extended in the future to 32 bits. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef uint32 + #define uint32 unsigned int +#endif +#ifndef int32 + #define int32 int +#endif + + +/* + * Macros to form register "target numbers" for various standard registers/states: + */ +#define XTENSA_DBREGN_INVALID -1 /* not a valid target number */ +#define XTENSA_DBREGN_A(n) (0x0000+(n)) /* address registers a0..a15 */ +#define XTENSA_DBREGN_B(n) (0x0010+(n)) /* boolean bits b0..b15 */ +#define XTENSA_DBREGN_PC 0x0020 /* program counter */ + /* 0x0021 RESERVED for use by Tensilica */ +#define XTENSA_DBREGN_BO(n) (0x0022+(n)) /* boolean octuple-bits bo0..bo1 */ +#define XTENSA_DBREGN_BQ(n) (0x0024+(n)) /* boolean quadruple-bits bq0..bq3 */ +#define XTENSA_DBREGN_BD(n) (0x0028+(n)) /* boolean double-bits bd0..bd7 */ +#define XTENSA_DBREGN_F(n) (0x0030+(n)) /* floating point registers f0..f15 */ +#define XTENSA_DBREGN_VEC(n) (0x0040+(n)) /* Vectra vec regs v0..v15 */ +#define XTENSA_DBREGN_VSEL(n) (0x0050+(n)) /* Vectra sel s0..s3 (V1) ..s7 (V2) */ +#define XTENSA_DBREGN_VALIGN(n) (0x0058+(n)) /* Vectra valign regs u0..u3 */ +#define XTENSA_DBREGN_VCOEFF(n) (0x005C+(n)) /* Vectra I vcoeff regs c0..c1 */ + /* 0x005E..0x005F RESERVED for use by Tensilica */ +#define XTENSA_DBREGN_AEP(n) (0x0060+(n)) /* HiFi2 Audio Engine regs aep0..aep7 */ +#define XTENSA_DBREGN_AEQ(n) (0x0068+(n)) /* HiFi2 Audio Engine regs aeq0..aeq3 */ + /* 0x006C..0x00FF RESERVED for use by Tensilica */ +#define XTENSA_DBREGN_AR(n) (0x0100+(n)) /* physical address regs ar0..ar63 + (note: only with window option) */ + /* 0x0140..0x01FF RESERVED for use by Tensilica */ +#define XTENSA_DBREGN_SREG(n) (0x0200+(n)) /* special registers 0..255 (core) */ +#define XTENSA_DBREGN_BR XTENSA_DBREGN_SREG(0x04) /* all 16 boolean bits, BR */ +#define XTENSA_DBREGN_MR(n) XTENSA_DBREGN_SREG(0x20+(n)) /* MAC16 registers m0..m3 */ +#define XTENSA_DBREGN_UREG(n) (0x0300+(n)) /* user registers 0..255 (TIE) */ + /* 0x0400..0x0FFF RESERVED for use by Tensilica */ + /* 0x1000..0x1FFF user-defined regfiles */ + /* 0x2000..0xEFFF other states (and regfiles) */ +#define XTENSA_DBREGN_DBAGENT(n) (0xF000+(n)) /* non-processor "registers" 0..4095 for + 3rd-party debugger agent defined use */ + /* > 0xFFFF (32-bit) RESERVED for use by Tensilica */ +/*#define XTENSA_DBREGN_CONTEXT(n) (0x02000000+((n)<<20))*/ /* add this macro's value to a target + number to identify a specific context 0..31 + for context-replicated registers */ +#define XTENSA_DBREGN_MASK 0xFFFF /* mask of valid target_number bits */ +#define XTENSA_DBREGN_WRITE_SIDE 0x04000000 /* flag to request write half of a register + split into distinct read and write entries + with the same target number (currently only + valid in a couple of libdb API functions; + see xtensa-libdb.h for details) */ + +/* + * Macros to identify specific ranges of target numbers (formed above): + * NOTE: any context number (or other upper 12 bits) are considered + * modifiers and are thus stripped out for identification purposes. + */ +#define XTENSA_DBREGN_IS_VALID(tn) (((tn) & ~0xFFFF) == 0) /* just tests it's 16-bit unsigned */ +#define XTENSA_DBREGN_IS_A(tn) (((tn) & 0xFFF0)==0x0000) /* is a0..a15 */ +#define XTENSA_DBREGN_IS_B(tn) (((tn) & 0xFFF0)==0x0010) /* is b0..b15 */ +#define XTENSA_DBREGN_IS_PC(tn) (((tn) & 0xFFFF)==0x0020) /* is program counter */ +#define XTENSA_DBREGN_IS_BO(tn) (((tn) & 0xFFFE)==0x0022) /* is bo0..bo1 */ +#define XTENSA_DBREGN_IS_BQ(tn) (((tn) & 0xFFFC)==0x0024) /* is bq0..bq3 */ +#define XTENSA_DBREGN_IS_BD(tn) (((tn) & 0xFFF8)==0x0028) /* is bd0..bd7 */ +#define XTENSA_DBREGN_IS_F(tn) (((tn) & 0xFFF0)==0x0030) /* is f0..f15 */ +#define XTENSA_DBREGN_IS_VEC(tn) (((tn) & 0xFFF0)==0x0040) /* is v0..v15 */ +#define XTENSA_DBREGN_IS_VSEL(tn) (((tn) & 0xFFF8)==0x0050) /* is s0..s7 (s0..s3 in V1) */ +#define XTENSA_DBREGN_IS_VALIGN(tn) (((tn) & 0xFFFC)==0x0058) /* is u0..u3 */ +#define XTENSA_DBREGN_IS_VCOEFF(tn) (((tn) & 0xFFFE)==0x005C) /* is c0..c1 */ +#define XTENSA_DBREGN_IS_AEP(tn) (((tn) & 0xFFF8)==0x0060) /* is aep0..aep7 */ +#define XTENSA_DBREGN_IS_AEQ(tn) (((tn) & 0xFFFC)==0x0068) /* is aeq0..aeq3 */ +#define XTENSA_DBREGN_IS_AR(tn) (((tn) & 0xFFC0)==0x0100) /* is ar0..ar63 */ +#define XTENSA_DBREGN_IS_SREG(tn) (((tn) & 0xFF00)==0x0200) /* is special register */ +#define XTENSA_DBREGN_IS_BR(tn) (((tn) & 0xFFFF)==XTENSA_DBREGN_SREG(0x04)) /* is BR */ +#define XTENSA_DBREGN_IS_MR(tn) (((tn) & 0xFFFC)==XTENSA_DBREGN_SREG(0x20)) /* m0..m3 */ +#define XTENSA_DBREGN_IS_UREG(tn) (((tn) & 0xFF00)==0x0300) /* is user register */ +#define XTENSA_DBREGN_IS_DBAGENT(tn) (((tn) & 0xF000)==0xF000) /* is non-processor */ +/*#define XTENSA_DBREGN_IS_CONTEXT(tn) (((tn) & 0x02000000) != 0)*/ /* specifies context # */ + +/* + * Macros to extract register index from a register "target number" + * when a specific range has been identified using one of the _IS_ macros above. + * These macros only return a useful value if the corresponding _IS_ macro returns true. + */ +#define XTENSA_DBREGN_A_INDEX(tn) ((tn) & 0x0F) /* 0..15 for a0..a15 */ +#define XTENSA_DBREGN_B_INDEX(tn) ((tn) & 0x0F) /* 0..15 for b0..b15 */ +#define XTENSA_DBREGN_BO_INDEX(tn) ((tn) & 0x01) /* 0..1 for bo0..bo1 */ +#define XTENSA_DBREGN_BQ_INDEX(tn) ((tn) & 0x03) /* 0..3 for bq0..bq3 */ +#define XTENSA_DBREGN_BD_INDEX(tn) ((tn) & 0x07) /* 0..7 for bd0..bd7 */ +#define XTENSA_DBREGN_F_INDEX(tn) ((tn) & 0x0F) /* 0..15 for f0..f15 */ +#define XTENSA_DBREGN_VEC_INDEX(tn) ((tn) & 0x0F) /* 0..15 for v0..v15 */ +#define XTENSA_DBREGN_VSEL_INDEX(tn) ((tn) & 0x07) /* 0..7 for s0..s7 */ +#define XTENSA_DBREGN_VALIGN_INDEX(tn) ((tn) & 0x03) /* 0..3 for u0..u3 */ +#define XTENSA_DBREGN_VCOEFF_INDEX(tn) ((tn) & 0x01) /* 0..1 for c0..c1 */ +#define XTENSA_DBREGN_AEP_INDEX(tn) ((tn) & 0x07) /* 0..7 for aep0..aep7 */ +#define XTENSA_DBREGN_AEQ_INDEX(tn) ((tn) & 0x03) /* 0..3 for aeq0..aeq3 */ +#define XTENSA_DBREGN_AR_INDEX(tn) ((tn) & 0x3F) /* 0..63 for ar0..ar63 */ +#define XTENSA_DBREGN_SREG_INDEX(tn) ((tn) & 0xFF) /* 0..255 for special registers */ +#define XTENSA_DBREGN_MR_INDEX(tn) ((tn) & 0x03) /* 0..3 for m0..m3 */ +#define XTENSA_DBREGN_UREG_INDEX(tn) ((tn) & 0xFF) /* 0..255 for user registers */ +#define XTENSA_DBREGN_DBAGENT_INDEX(tn) ((tn) & 0xFFF) /* 0..4095 for non-processor */ +/*#define XTENSA_DBREGN_CONTEXT_INDEX(tn) (((tn) >> 20) & 0x1F)*/ /* 0..31 context numbers */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __H_LIBDB_MACROS */ + diff --git a/tools/sdk/include/esp32/xtensa/xtensa-versions.h b/tools/sdk/include/esp32/xtensa/xtensa-versions.h new file mode 100755 index 00000000..abed3a18 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtensa-versions.h @@ -0,0 +1,347 @@ +/* + xtensa-versions.h -- definitions of Xtensa version and release numbers + + This file defines most Xtensa-related product versions and releases + that exist so far. + It also provides a bit of information about which ones are current. + This file changes every release, as versions/releases get added. + + + $Id: //depot/rel/Eaglenest/Xtensa/Software/misc/xtensa-versions.h.tpp#2 $ + + Copyright (c) 2006-2010 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef XTENSA_VERSIONS_H +#define XTENSA_VERSIONS_H + + +/* + * NOTE: A "release" is a collection of product versions + * made available at once (together) to customers. + * In the past, release and version names all matched in T####.# form, + * making the distinction irrelevant. + * Starting with the RA-2004.1 release, this is no longer the case. + */ + + +/* Hardware (Xtensa/Diamond processor) versions: */ +#define XTENSA_HWVERSION_T1020_0 102000 /* versions T1020.0 */ +#define XTENSA_HWCIDSCHEME_T1020_0 10 +#define XTENSA_HWCIDVERS_T1020_0 2 +#define XTENSA_HWVERSION_T1020_1 102001 /* versions T1020.1 */ +#define XTENSA_HWCIDSCHEME_T1020_1 10 +#define XTENSA_HWCIDVERS_T1020_1 3 +#define XTENSA_HWVERSION_T1020_2B 102002 /* versions T1020.2b */ +#define XTENSA_HWCIDSCHEME_T1020_2B 10 +#define XTENSA_HWCIDVERS_T1020_2B 5 +#define XTENSA_HWVERSION_T1020_2 102002 /* versions T1020.2 */ +#define XTENSA_HWCIDSCHEME_T1020_2 10 +#define XTENSA_HWCIDVERS_T1020_2 4 +#define XTENSA_HWVERSION_T1020_3 102003 /* versions T1020.3 */ +#define XTENSA_HWCIDSCHEME_T1020_3 10 +#define XTENSA_HWCIDVERS_T1020_3 6 +#define XTENSA_HWVERSION_T1020_4 102004 /* versions T1020.4 */ +#define XTENSA_HWCIDSCHEME_T1020_4 10 +#define XTENSA_HWCIDVERS_T1020_4 7 +#define XTENSA_HWVERSION_T1030_0 103000 /* versions T1030.0 */ +#define XTENSA_HWCIDSCHEME_T1030_0 10 +#define XTENSA_HWCIDVERS_T1030_0 9 +#define XTENSA_HWVERSION_T1030_1 103001 /* versions T1030.1 */ +#define XTENSA_HWCIDSCHEME_T1030_1 10 +#define XTENSA_HWCIDVERS_T1030_1 10 +#define XTENSA_HWVERSION_T1030_2 103002 /* versions T1030.2 */ +#define XTENSA_HWCIDSCHEME_T1030_2 10 +#define XTENSA_HWCIDVERS_T1030_2 11 +#define XTENSA_HWVERSION_T1030_3 103003 /* versions T1030.3 */ +#define XTENSA_HWCIDSCHEME_T1030_3 10 +#define XTENSA_HWCIDVERS_T1030_3 12 +#define XTENSA_HWVERSION_T1040_0 104000 /* versions T1040.0 */ +#define XTENSA_HWCIDSCHEME_T1040_0 10 +#define XTENSA_HWCIDVERS_T1040_0 15 +#define XTENSA_HWVERSION_T1040_1 104001 /* versions T1040.1 */ +#define XTENSA_HWCIDSCHEME_T1040_1 01 +#define XTENSA_HWCIDVERS_T1040_1 32 +#define XTENSA_HWVERSION_T1040_1P 104001 /* versions T1040.1-prehotfix */ +#define XTENSA_HWCIDSCHEME_T1040_1P 10 +#define XTENSA_HWCIDVERS_T1040_1P 16 +#define XTENSA_HWVERSION_T1040_2 104002 /* versions T1040.2 */ +#define XTENSA_HWCIDSCHEME_T1040_2 01 +#define XTENSA_HWCIDVERS_T1040_2 33 +#define XTENSA_HWVERSION_T1040_3 104003 /* versions T1040.3 */ +#define XTENSA_HWCIDSCHEME_T1040_3 01 +#define XTENSA_HWCIDVERS_T1040_3 34 +#define XTENSA_HWVERSION_T1050_0 105000 /* versions T1050.0 */ +#define XTENSA_HWCIDSCHEME_T1050_0 1100 +#define XTENSA_HWCIDVERS_T1050_0 1 +#define XTENSA_HWVERSION_T1050_1 105001 /* versions T1050.1 */ +#define XTENSA_HWCIDSCHEME_T1050_1 1100 +#define XTENSA_HWCIDVERS_T1050_1 2 +#define XTENSA_HWVERSION_T1050_2 105002 /* versions T1050.2 */ +#define XTENSA_HWCIDSCHEME_T1050_2 1100 +#define XTENSA_HWCIDVERS_T1050_2 4 +#define XTENSA_HWVERSION_T1050_3 105003 /* versions T1050.3 */ +#define XTENSA_HWCIDSCHEME_T1050_3 1100 +#define XTENSA_HWCIDVERS_T1050_3 6 +#define XTENSA_HWVERSION_T1050_4 105004 /* versions T1050.4 */ +#define XTENSA_HWCIDSCHEME_T1050_4 1100 +#define XTENSA_HWCIDVERS_T1050_4 7 +#define XTENSA_HWVERSION_T1050_5 105005 /* versions T1050.5 */ +#define XTENSA_HWCIDSCHEME_T1050_5 1100 +#define XTENSA_HWCIDVERS_T1050_5 8 +#define XTENSA_HWVERSION_RA_2004_1 210000 /* versions LX1.0.0 */ +#define XTENSA_HWCIDSCHEME_RA_2004_1 1100 +#define XTENSA_HWCIDVERS_RA_2004_1 3 +#define XTENSA_HWVERSION_RA_2005_1 210001 /* versions LX1.0.1 */ +#define XTENSA_HWCIDSCHEME_RA_2005_1 1100 +#define XTENSA_HWCIDVERS_RA_2005_1 20 +#define XTENSA_HWVERSION_RA_2005_2 210002 /* versions LX1.0.2 */ +#define XTENSA_HWCIDSCHEME_RA_2005_2 1100 +#define XTENSA_HWCIDVERS_RA_2005_2 21 +#define XTENSA_HWVERSION_RA_2005_3 210003 /* versions LX1.0.3, X6.0.3 */ +#define XTENSA_HWCIDSCHEME_RA_2005_3 1100 +#define XTENSA_HWCIDVERS_RA_2005_3 22 +#define XTENSA_HWVERSION_RA_2006_4 210004 /* versions LX1.0.4, X6.0.4 */ +#define XTENSA_HWCIDSCHEME_RA_2006_4 1100 +#define XTENSA_HWCIDVERS_RA_2006_4 23 +#define XTENSA_HWVERSION_RA_2006_5 210005 /* versions LX1.0.5, X6.0.5 */ +#define XTENSA_HWCIDSCHEME_RA_2006_5 1100 +#define XTENSA_HWCIDVERS_RA_2006_5 24 +#define XTENSA_HWVERSION_RA_2006_6 210006 /* versions LX1.0.6, X6.0.6 */ +#define XTENSA_HWCIDSCHEME_RA_2006_6 1100 +#define XTENSA_HWCIDVERS_RA_2006_6 25 +#define XTENSA_HWVERSION_RA_2007_7 210007 /* versions LX1.0.7, X6.0.7 */ +#define XTENSA_HWCIDSCHEME_RA_2007_7 1100 +#define XTENSA_HWCIDVERS_RA_2007_7 26 +#define XTENSA_HWVERSION_RA_2008_8 210008 /* versions LX1.0.8, X6.0.8 */ +#define XTENSA_HWCIDSCHEME_RA_2008_8 1100 +#define XTENSA_HWCIDVERS_RA_2008_8 27 +#define XTENSA_HWVERSION_RB_2006_0 220000 /* versions LX2.0.0, X7.0.0 */ +#define XTENSA_HWCIDSCHEME_RB_2006_0 1100 +#define XTENSA_HWCIDVERS_RB_2006_0 48 +#define XTENSA_HWVERSION_RB_2007_1 220001 /* versions LX2.0.1, X7.0.1 */ +#define XTENSA_HWCIDSCHEME_RB_2007_1 1100 +#define XTENSA_HWCIDVERS_RB_2007_1 49 +#define XTENSA_HWVERSION_RB_2007_2 221000 /* versions LX2.1.0, X7.1.0 */ +#define XTENSA_HWCIDSCHEME_RB_2007_2 1100 +#define XTENSA_HWCIDVERS_RB_2007_2 52 +#define XTENSA_HWVERSION_RB_2008_3 221001 /* versions LX2.1.1, X7.1.1 */ +#define XTENSA_HWCIDSCHEME_RB_2008_3 1100 +#define XTENSA_HWCIDVERS_RB_2008_3 53 +#define XTENSA_HWVERSION_RB_2008_4 221002 /* versions LX2.1.2, X7.1.2 */ +#define XTENSA_HWCIDSCHEME_RB_2008_4 1100 +#define XTENSA_HWCIDVERS_RB_2008_4 54 +#define XTENSA_HWVERSION_RB_2009_5 221003 /* versions LX2.1.3, X7.1.3 */ +#define XTENSA_HWCIDSCHEME_RB_2009_5 1100 +#define XTENSA_HWCIDVERS_RB_2009_5 55 +#define XTENSA_HWVERSION_RB_2007_2_MP 221100 /* versions LX2.1.8-MP, X7.1.8-MP */ +#define XTENSA_HWCIDSCHEME_RB_2007_2_MP 1100 +#define XTENSA_HWCIDVERS_RB_2007_2_MP 64 +#define XTENSA_HWVERSION_RC_2009_0 230000 /* versions LX3.0.0, X8.0.0, MX1.0.0 */ +#define XTENSA_HWCIDSCHEME_RC_2009_0 1100 +#define XTENSA_HWCIDVERS_RC_2009_0 65 +#define XTENSA_HWVERSION_RC_2010_1 230001 /* versions LX3.0.1, X8.0.1, MX1.0.1 */ +#define XTENSA_HWCIDSCHEME_RC_2010_1 1100 +#define XTENSA_HWCIDVERS_RC_2010_1 66 +#define XTENSA_HWVERSION_RC_2010_2 230002 /* versions LX3.0.2, X8.0.2, MX1.0.2 */ +#define XTENSA_HWCIDSCHEME_RC_2010_2 1100 +#define XTENSA_HWCIDVERS_RC_2010_2 67 +#define XTENSA_HWVERSION_RC_2011_3 230003 /* versions LX3.0.3, X8.0.3, MX1.0.3 */ +#define XTENSA_HWCIDSCHEME_RC_2011_3 1100 +#define XTENSA_HWCIDVERS_RC_2011_3 68 +#define XTENSA_HWVERSION_RD_2010_0 240000 /* versions LX4.0.0, X9.0.0, MX1.1.0, TX1.0.0 */ +#define XTENSA_HWCIDSCHEME_RD_2010_0 1100 +#define XTENSA_HWCIDVERS_RD_2010_0 80 +#define XTENSA_HWVERSION_RD_2011_1 240001 /* versions LX4.0.1, X9.0.1, MX1.1.1, TX1.0.1 */ +#define XTENSA_HWCIDSCHEME_RD_2011_1 1100 +#define XTENSA_HWCIDVERS_RD_2011_1 81 +#define XTENSA_HWVERSION_RD_2011_2 240002 /* versions LX4.0.2, X9.0.2, MX1.1.2, TX1.0.2 */ +#define XTENSA_HWCIDSCHEME_RD_2011_2 1100 +#define XTENSA_HWCIDVERS_RD_2011_2 82 +#define XTENSA_HWVERSION_RD_2011_3 240003 /* versions LX4.0.3, X9.0.3, MX1.1.3, TX1.0.3 */ +#define XTENSA_HWCIDSCHEME_RD_2011_3 1100 +#define XTENSA_HWCIDVERS_RD_2011_3 83 +#define XTENSA_HWVERSION_RD_2012_4 240004 /* versions LX4.0.4, X9.0.4, MX1.1.4, TX1.0.4 */ +#define XTENSA_HWCIDSCHEME_RD_2012_4 1100 +#define XTENSA_HWCIDVERS_RD_2012_4 84 +#define XTENSA_HWVERSION_RD_2012_5 240005 /* versions LX4.0.5, X9.0.5, MX1.1.5, TX1.0.5 */ +#define XTENSA_HWCIDSCHEME_RD_2012_5 1100 +#define XTENSA_HWCIDVERS_RD_2012_5 85 +#define XTENSA_HWVERSION_RE_2012_0 250000 /* versions LX5.0.0, X10.0.0, MX1.2.0, TX2.0.0 */ +#define XTENSA_HWCIDSCHEME_RE_2012_0 1100 +#define XTENSA_HWCIDVERS_RE_2012_0 96 +#define XTENSA_HWVERSION_RE_2012_1 250001 /* versions LX5.0.1, X10.0.1, MX1.2.1, TX2.0.1 */ +#define XTENSA_HWCIDSCHEME_RE_2012_1 1100 +#define XTENSA_HWCIDVERS_RE_2012_1 97 +#define XTENSA_HWVERSION_RE_2013_2 250002 /* versions LX5.0.2, X10.0.2, MX1.2.2, TX2.0.2 */ +#define XTENSA_HWCIDSCHEME_RE_2013_2 1100 +#define XTENSA_HWCIDVERS_RE_2013_2 98 +#define XTENSA_HWVERSION_RE_2013_3 250003 /* versions LX5.0.3, X10.0.3, MX1.2.3, TX2.0.3 */ +#define XTENSA_HWCIDSCHEME_RE_2013_3 1100 +#define XTENSA_HWCIDVERS_RE_2013_3 99 +#define XTENSA_HWVERSION_RE_2013_4 250004 /* versions LX5.0.4, X10.0.4, MX1.2.4, TX2.0.4 */ +#define XTENSA_HWCIDSCHEME_RE_2013_4 1100 +#define XTENSA_HWCIDVERS_RE_2013_4 100 +#define XTENSA_HWVERSION_RE_2014_5 250005 /* versions LX5.0.5, X10.0.5, MX1.2.5, TX2.0.5 */ +#define XTENSA_HWCIDSCHEME_RE_2014_5 1100 +#define XTENSA_HWCIDVERS_RE_2014_5 101 +#define XTENSA_HWVERSION_RE_2015_6 250006 /* versions LX5.0.6, X10.0.6, MX1.2.6, TX2.0.6 */ +#define XTENSA_HWCIDSCHEME_RE_2015_6 1100 +#define XTENSA_HWCIDVERS_RE_2015_6 102 +#define XTENSA_HWVERSION_RF_2014_0 260000 /* versions LX6.0.0, X11.0.0, MX1.3.0, TX3.0.0 */ +#define XTENSA_HWCIDSCHEME_RF_2014_0 1100 +#define XTENSA_HWCIDVERS_RF_2014_0 112 +#define XTENSA_HWVERSION_RF_2014_1 260001 /* versions LX6.0.1, X11.0.1 */ +#define XTENSA_HWCIDSCHEME_RF_2014_1 1100 +#define XTENSA_HWCIDVERS_RF_2014_1 113 +#define XTENSA_HWVERSION_RF_2015_2 260002 /* versions LX6.0.2, X11.0.2 */ +#define XTENSA_HWCIDSCHEME_RF_2015_2 1100 +#define XTENSA_HWCIDVERS_RF_2015_2 114 +#define XTENSA_HWVERSION_RF_2015_3 260003 /* versions LX6.0.3, X11.0.3 */ +#define XTENSA_HWCIDSCHEME_RF_2015_3 1100 +#define XTENSA_HWCIDVERS_RF_2015_3 115 +#define XTENSA_HWVERSION_RG_2015_0 270000 /* versions LX7.0.0, X12.0.0, NX1.0.0, SX1.0.0, MX1.4.0, TX4.0.0 */ +#define XTENSA_HWCIDSCHEME_RG_2015_0 1100 +#define XTENSA_HWCIDVERS_RG_2015_0 128 + +/* Software (Xtensa Tools) versions: */ +#define XTENSA_SWVERSION_T1020_0 102000 /* versions T1020.0 */ +#define XTENSA_SWVERSION_T1020_1 102001 /* versions T1020.1 */ +#define XTENSA_SWVERSION_T1020_2B 102002 /* versions T1020.2b */ +#define XTENSA_SWVERSION_T1020_2 102002 /* versions T1020.2 */ +#define XTENSA_SWVERSION_T1020_3 102003 /* versions T1020.3 */ +#define XTENSA_SWVERSION_T1020_4 102004 /* versions T1020.4 */ +#define XTENSA_SWVERSION_T1030_0 103000 /* versions T1030.0 */ +#define XTENSA_SWVERSION_T1030_1 103001 /* versions T1030.1 */ +#define XTENSA_SWVERSION_T1030_2 103002 /* versions T1030.2 */ +#define XTENSA_SWVERSION_T1030_3 103003 /* versions T1030.3 */ +#define XTENSA_SWVERSION_T1040_0 104000 /* versions T1040.0 */ +#define XTENSA_SWVERSION_T1040_1 104001 /* versions T1040.1 */ +#define XTENSA_SWVERSION_T1040_1P 104001 /* versions T1040.1-prehotfix */ +#define XTENSA_SWVERSION_T1040_2 104002 /* versions T1040.2 */ +#define XTENSA_SWVERSION_T1040_3 104003 /* versions T1040.3 */ +#define XTENSA_SWVERSION_T1050_0 105000 /* versions T1050.0 */ +#define XTENSA_SWVERSION_T1050_1 105001 /* versions T1050.1 */ +#define XTENSA_SWVERSION_T1050_2 105002 /* versions T1050.2 */ +#define XTENSA_SWVERSION_T1050_3 105003 /* versions T1050.3 */ +#define XTENSA_SWVERSION_T1050_4 105004 /* versions T1050.4 */ +#define XTENSA_SWVERSION_T1050_5 105005 /* versions T1050.5 */ +#define XTENSA_SWVERSION_RA_2004_1 600000 /* versions 6.0.0 */ +#define XTENSA_SWVERSION_RA_2005_1 600001 /* versions 6.0.1 */ +#define XTENSA_SWVERSION_RA_2005_2 600002 /* versions 6.0.2 */ +#define XTENSA_SWVERSION_RA_2005_3 600003 /* versions 6.0.3 */ +#define XTENSA_SWVERSION_RA_2006_4 600004 /* versions 6.0.4 */ +#define XTENSA_SWVERSION_RA_2006_5 600005 /* versions 6.0.5 */ +#define XTENSA_SWVERSION_RA_2006_6 600006 /* versions 6.0.6 */ +#define XTENSA_SWVERSION_RA_2007_7 600007 /* versions 6.0.7 */ +#define XTENSA_SWVERSION_RA_2008_8 600008 /* versions 6.0.8 */ +#define XTENSA_SWVERSION_RB_2006_0 700000 /* versions 7.0.0 */ +#define XTENSA_SWVERSION_RB_2007_1 700001 /* versions 7.0.1 */ +#define XTENSA_SWVERSION_RB_2007_2 701000 /* versions 7.1.0 */ +#define XTENSA_SWVERSION_RB_2008_3 701001 /* versions 7.1.1 */ +#define XTENSA_SWVERSION_RB_2008_4 701002 /* versions 7.1.2 */ +#define XTENSA_SWVERSION_RB_2009_5 701003 /* versions 7.1.3 */ +#define XTENSA_SWVERSION_RB_2007_2_MP 701100 /* versions 7.1.8-MP */ +#define XTENSA_SWVERSION_RC_2009_0 800000 /* versions 8.0.0 */ +#define XTENSA_SWVERSION_RC_2010_1 800001 /* versions 8.0.1 */ +#define XTENSA_SWVERSION_RC_2010_2 800002 /* versions 8.0.2 */ +#define XTENSA_SWVERSION_RC_2011_3 800003 /* versions 8.0.3 */ +#define XTENSA_SWVERSION_RD_2010_0 900000 /* versions 9.0.0 */ +#define XTENSA_SWVERSION_RD_2011_1 900001 /* versions 9.0.1 */ +#define XTENSA_SWVERSION_RD_2011_2 900002 /* versions 9.0.2 */ +#define XTENSA_SWVERSION_RD_2011_3 900003 /* versions 9.0.3 */ +#define XTENSA_SWVERSION_RD_2012_4 900004 /* versions 9.0.4 */ +#define XTENSA_SWVERSION_RD_2012_5 900005 /* versions 9.0.5 */ +#define XTENSA_SWVERSION_RE_2012_0 1000000 /* versions 10.0.0 */ +#define XTENSA_SWVERSION_RE_2012_1 1000001 /* versions 10.0.1 */ +#define XTENSA_SWVERSION_RE_2013_2 1000002 /* versions 10.0.2 */ +#define XTENSA_SWVERSION_RE_2013_3 1000003 /* versions 10.0.3 */ +#define XTENSA_SWVERSION_RE_2013_4 1000004 /* versions 10.0.4 */ +#define XTENSA_SWVERSION_RE_2014_5 1000005 /* versions 10.0.5 */ +#define XTENSA_SWVERSION_RE_2015_6 1000006 /* versions 10.0.6 */ +#define XTENSA_SWVERSION_RF_2014_0 1100000 /* versions 11.0.0 */ +#define XTENSA_SWVERSION_RF_2014_1 1100001 /* versions 11.0.1 */ +#define XTENSA_SWVERSION_RF_2015_2 1100002 /* versions 11.0.2 */ +#define XTENSA_SWVERSION_RF_2015_3 1100003 /* versions 11.0.3 */ +#define XTENSA_SWVERSION_RG_2015_0 1200000 /* versions 12.0.0 */ +#define XTENSA_SWVERSION_T1040_1_PREHOTFIX XTENSA_SWVERSION_T1040_1P /* T1040.1-prehotfix */ +#define XTENSA_SWVERSION_6_0_0 XTENSA_SWVERSION_RA_2004_1 /* 6.0.0 */ +#define XTENSA_SWVERSION_6_0_1 XTENSA_SWVERSION_RA_2005_1 /* 6.0.1 */ +#define XTENSA_SWVERSION_6_0_2 XTENSA_SWVERSION_RA_2005_2 /* 6.0.2 */ +#define XTENSA_SWVERSION_6_0_3 XTENSA_SWVERSION_RA_2005_3 /* 6.0.3 */ +#define XTENSA_SWVERSION_6_0_4 XTENSA_SWVERSION_RA_2006_4 /* 6.0.4 */ +#define XTENSA_SWVERSION_6_0_5 XTENSA_SWVERSION_RA_2006_5 /* 6.0.5 */ +#define XTENSA_SWVERSION_6_0_6 XTENSA_SWVERSION_RA_2006_6 /* 6.0.6 */ +#define XTENSA_SWVERSION_6_0_7 XTENSA_SWVERSION_RA_2007_7 /* 6.0.7 */ +#define XTENSA_SWVERSION_6_0_8 XTENSA_SWVERSION_RA_2008_8 /* 6.0.8 */ +#define XTENSA_SWVERSION_7_0_0 XTENSA_SWVERSION_RB_2006_0 /* 7.0.0 */ +#define XTENSA_SWVERSION_7_0_1 XTENSA_SWVERSION_RB_2007_1 /* 7.0.1 */ +#define XTENSA_SWVERSION_7_1_0 XTENSA_SWVERSION_RB_2007_2 /* 7.1.0 */ +#define XTENSA_SWVERSION_7_1_1 XTENSA_SWVERSION_RB_2008_3 /* 7.1.1 */ +#define XTENSA_SWVERSION_7_1_2 XTENSA_SWVERSION_RB_2008_4 /* 7.1.2 */ +#define XTENSA_SWVERSION_7_1_3 XTENSA_SWVERSION_RB_2009_5 /* 7.1.3 */ +#define XTENSA_SWVERSION_7_1_8_MP XTENSA_SWVERSION_RB_2007_2_MP /* 7.1.8-MP */ +#define XTENSA_SWVERSION_8_0_0 XTENSA_SWVERSION_RC_2009_0 /* 8.0.0 */ +#define XTENSA_SWVERSION_8_0_1 XTENSA_SWVERSION_RC_2010_1 /* 8.0.1 */ +#define XTENSA_SWVERSION_8_0_2 XTENSA_SWVERSION_RC_2010_2 /* 8.0.2 */ +#define XTENSA_SWVERSION_8_0_3 XTENSA_SWVERSION_RC_2011_3 /* 8.0.3 */ +#define XTENSA_SWVERSION_9_0_0 XTENSA_SWVERSION_RD_2010_0 /* 9.0.0 */ +#define XTENSA_SWVERSION_9_0_1 XTENSA_SWVERSION_RD_2011_1 /* 9.0.1 */ +#define XTENSA_SWVERSION_9_0_2 XTENSA_SWVERSION_RD_2011_2 /* 9.0.2 */ +#define XTENSA_SWVERSION_9_0_3 XTENSA_SWVERSION_RD_2011_3 /* 9.0.3 */ +#define XTENSA_SWVERSION_9_0_4 XTENSA_SWVERSION_RD_2012_4 /* 9.0.4 */ +#define XTENSA_SWVERSION_9_0_5 XTENSA_SWVERSION_RD_2012_5 /* 9.0.5 */ +#define XTENSA_SWVERSION_10_0_0 XTENSA_SWVERSION_RE_2012_0 /* 10.0.0 */ +#define XTENSA_SWVERSION_10_0_1 XTENSA_SWVERSION_RE_2012_1 /* 10.0.1 */ +#define XTENSA_SWVERSION_10_0_2 XTENSA_SWVERSION_RE_2013_2 /* 10.0.2 */ +#define XTENSA_SWVERSION_10_0_3 XTENSA_SWVERSION_RE_2013_3 /* 10.0.3 */ +#define XTENSA_SWVERSION_10_0_4 XTENSA_SWVERSION_RE_2013_4 /* 10.0.4 */ +#define XTENSA_SWVERSION_10_0_5 XTENSA_SWVERSION_RE_2014_5 /* 10.0.5 */ +#define XTENSA_SWVERSION_10_0_6 XTENSA_SWVERSION_RE_2015_6 /* 10.0.6 */ +#define XTENSA_SWVERSION_11_0_0 XTENSA_SWVERSION_RF_2014_0 /* 11.0.0 */ +#define XTENSA_SWVERSION_11_0_1 XTENSA_SWVERSION_RF_2014_1 /* 11.0.1 */ +#define XTENSA_SWVERSION_11_0_2 XTENSA_SWVERSION_RF_2015_2 /* 11.0.2 */ +#define XTENSA_SWVERSION_11_0_3 XTENSA_SWVERSION_RF_2015_3 /* 11.0.3 */ +#define XTENSA_SWVERSION_12_0_0 XTENSA_SWVERSION_RG_2015_0 /* 12.0.0 */ + + +/* The current release: */ +#define XTENSA_RELEASE_NAME "RF-2015.3" +#define XTENSA_RELEASE_CANONICAL_NAME "RF-2015.3" + +/* The product versions within the current release: */ +#define XTENSA_SWVERSION XTENSA_SWVERSION_RF_2015_3 +#define XTENSA_SWVERSION_NAME "11.0.3" +#define XTENSA_SWVERSION_CANONICAL_NAME "11.0.3" +#define XTENSA_SWVERSION_MAJORMID_NAME "11.0" +#define XTENSA_SWVERSION_MAJOR_NAME "11" +/* For product licensing (not necessarily same as *_MAJORMID_NAME): */ +#define XTENSA_SWVERSION_LICENSE_NAME "11.0" + +/* Note: there may be multiple hardware products in one release, + and software can target older hardware, so the notion of + "current" hardware versions is partially configuration dependent. + For now, "current" hardware product version info is left out + to avoid confusion. */ + +#endif /*XTENSA_VERSIONS_H*/ + diff --git a/tools/sdk/include/esp32/xtensa/xtensa-xer.h b/tools/sdk/include/esp32/xtensa/xtensa-xer.h new file mode 100755 index 00000000..900bda33 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtensa-xer.h @@ -0,0 +1,149 @@ +/* xer-constants.h -- various constants describing external registers accessed + via wer and rer. + + TODO: find a better prefix. Also conditionalize certain constants based + on number of cores and interrupts actually present. +*/ + +/* + * Copyright (c) 1999-2008 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include + +#define NUM_INTERRUPTS 27 +#define NUM_CORES 4 + +/* Routing of NMI (BInterrupt2) and interrupts 0..n-1 (BInterrupt3+) + RER reads + WER writes + */ + +#define XER_MIROUT 0x0000 +#define XER_MIROUT_LAST (XER_MIROUT + NUM_INTERRUPTS) + + +/* IPI to core M (all 16 causes). + + RER reads + WER clears + */ +#define XER_MIPICAUSE 0x0100 +#define XER_MIPICAUSE_FIELD_A_FIRST 0x0 +#define XER_MIPICAUSE_FIELD_A_LAST 0x0 +#define XER_MIPICAUSE_FIELD_B_FIRST 0x1 +#define XER_MIPICAUSE_FIELD_B_LAST 0x3 +#define XER_MIPICAUSE_FIELD_C_FIRST 0x4 +#define XER_MIPICAUSE_FIELD_C_LAST 0x7 +#define XER_MIPICAUSE_FIELD_D_FIRST 0x8 +#define XER_MIPICAUSE_FIELD_D_LAST 0xF + + +/* IPI from cause bit 0..15 + + RER invalid + WER sets +*/ +#define XER_MIPISET 0x0140 +#define XER_MIPISET_LAST 0x014F + + +/* Global enable + + RER read + WER clear +*/ +#define XER_MIENG 0x0180 + + +/* Global enable + + RER invalid + WER set +*/ +#define XER_MIENG_SET 0x0184 + +/* Global assert + + RER read + WER clear +*/ +#define XER_MIASG 0x0188 + + +/* Global enable + + RER invalid + WER set +*/ +#define XER_MIASG_SET 0x018C + + +/* IPI partition register + + RER read + WER write +*/ +#define XER_PART 0x0190 +#define XER_IPI0 0x0 +#define XER_IPI1 0x1 +#define XER_IPI2 0x2 +#define XER_IPI3 0x3 + +#define XER_PART_ROUTE_IPI(NUM, FIELD) ((NUM) << ((FIELD) << 2)) + +#define XER_PART_ROUTE_IPI_CAUSE(TO_A, TO_B, TO_C, TO_D) \ + (XER_PART_ROUTE_IPI(TO_A, XER_IPI0) | \ + XER_PART_ROUTE_IPI(TO_B, XER_IPI1) | \ + XER_PART_ROUTE_IPI(TO_C, XER_IPI2) | \ + XER_PART_ROUTE_IPI(TO_D, XER_IPI3)) + +#define XER_IPI_WAKE_EXT_INTERRUPT XCHAL_EXTINT0_NUM +#define XER_IPI_WAKE_CAUSE XER_MIPICAUSE_FIELD_C_FIRST +#define XER_IPI_WAKE_ADDRESS (XER_MIPISET + XER_IPI_WAKE_CAUSE) +#define XER_DEFAULT_IPI_ROUTING XER_PART_ROUTE_IPI_CAUSE(XER_IPI1, XER_IPI0, XER_IPI2, XER_IPI3) + + +/* System configuration ID + + RER read + WER invalid +*/ +#define XER_SYSCFGID 0x01A0 + + +/* RunStall to slave processors + + RER read + WER write +*/ +#define XER_MPSCORE 0x0200 + + +/* Cache coherency ON + + RER read + WER write +*/ +#define XER_CCON 0x0220 + + diff --git a/tools/sdk/include/esp32/xtensa/xtkc705.h b/tools/sdk/include/esp32/xtensa/xtkc705.h new file mode 100755 index 00000000..831c15d5 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtkc705.h @@ -0,0 +1,14 @@ +/* Copyright (c) 2006-2013 by Tensilica Inc. ALL RIGHTS RESERVED. +/ These coded instructions, statements, and computer programs are the +/ copyrighted works and confidential proprietary information of Tensilica Inc. +/ They may not be modified, copied, reproduced, distributed, or disclosed to +/ third parties in any manner, medium, or form, in whole or in part, without +/ the prior written consent of Tensilica Inc. +*/ + +/* xtkc705.h - Xtensa Xilinx KC705 (XT-KC705) board specific definitions */ + +/* 99.9% same as ML605, just indicate we're KC705 and include ML605 header: */ +#define XTBOARD_IS_KC705 1 +#include + diff --git a/tools/sdk/include/esp32/xtensa/xtkc705/xtensa/board.h b/tools/sdk/include/esp32/xtensa/xtkc705/xtensa/board.h new file mode 100755 index 00000000..5d2d8348 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtkc705/xtensa/board.h @@ -0,0 +1,13 @@ +/* + * board.h - Include board-specific definitions + * + * Copyright (c) 2013 by Tensilica Inc. ALL RIGHTS RESERVED. + * These coded instructions, statements, and computer programs are the + * copyrighted works and confidential proprietary information of Tensilica Inc. + * They may not be modified, copied, reproduced, distributed, or disclosed to + * third parties in any manner, medium, or form, in whole or in part, without + * the prior written consent of Tensilica Inc. + */ + +#include + diff --git a/tools/sdk/include/esp32/xtensa/xtload-api.h b/tools/sdk/include/esp32/xtensa/xtload-api.h new file mode 100755 index 00000000..4e2297f5 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtload-api.h @@ -0,0 +1,77 @@ +/* Customer ID=11656; Build=0x5f626; Copyright (c) 2003-2012 Tensilica Inc. ALL RIGHTS RESERVED. + These coded instructions, statements, and computer programs are the + copyrighted works and confidential proprietary information of Tensilica Inc. + They may not be modified, copied, reproduced, distributed, or disclosed to + third parties in any manner, medium, or form, in whole or in part, without + the prior written consent of Tensilica Inc. */ + +#ifndef _XTLOAD_API_H +#define _XTLOAD_API_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XTENSA_BYTES_PER_WORD 4 +#define XLOAD_ALL_CORES -1 + +typedef int core_number_t; +typedef uint32_t xtload_address_t; +typedef uint32_t xtload_word_count_t; +typedef uint32_t * xtload_word_ptr_t; + +/* These functions correspond one-to-one with xt-load script + commands. See the documentation for xt-load for their usage. + + There are however, several higher-level script commands--such as + load-elf-file--which don't have direct analogues here. These + "missing" commands are essentially just macros that result in + several of these commands below. Note that you can execute several + of these commands, then the results of a script, or vice-versa. + */ + +void xtload_bootloader_wake (void); +void xtload_bootloader_sleep (void); +void xtload_bootloader_done (void); +void xtload_bootloader_not_done (void); +void xtload_reset_and_cont (core_number_t core); +void xtload_stall_and_reset (core_number_t core); +#define xtload_reset_and_stall xtload_stall_and_reset +void xtload_stall_and_target (core_number_t core); +void xtload_ignore_and_stall (core_number_t core); +void xtload_ignore_and_cont (core_number_t core); +#define xtload_ignore_and_continue xtload_ignore_and_cont +void xtload_read_words (xtload_address_t addr, xtload_word_count_t count); +void xtload_zero_words (xtload_address_t addr, xtload_word_count_t count); +void xtload_write_words (int swap, xtload_address_t addr, + xtload_word_ptr_t ptr, xtload_word_count_t count); +void xtload_setup_write_words (xtload_address_t addr, xtload_word_count_t count); +void xtload_read_register (core_number_t core); + +/* *I M P O R T A N T* + + The bootloader API calls this function whenever it outputs a word + to the bootloader hardware chain. + + Because the API has no information about how the bootloader + hardware is connected to the host hardware, the user must + implement this function to write a word to the bootloader's register. + + A user's implementation might write the bytes to an Xtensa queue or + to a memory-mapped register. + + For example, xt-load uses this API just like any other client. Its + implementation of this function simply writes this word to an + output file. +*/ + +void xtload_user_output_word (uint32_t word); + +#ifdef __cplusplus +} +#endif + +#endif /* _XTLOAD_API_H */ + diff --git a/tools/sdk/include/esp32/xtensa/xtml605.h b/tools/sdk/include/esp32/xtensa/xtml605.h new file mode 100755 index 00000000..5f54d700 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtml605.h @@ -0,0 +1,338 @@ +/* Copyright (c) 2007-2013 by Tensilica Inc. ALL RIGHTS RESERVED. +/ These coded instructions, statements, and computer programs are the +/ copyrighted works and confidential proprietary information of Tensilica Inc. +/ They may not be modified, copied, reproduced, distributed, or disclosed to +/ third parties in any manner, medium, or form, in whole or in part, without +/ the prior written consent of Tensilica Inc. +*/ + +/* xtml605.h - Xtensa Xilinx ML605 (XT-ML605) board specific definitions */ +/* xtkc705.h - Also includes this, for the Xilinx KC705 (XT-KC705). */ + +#ifndef _INC_ML605_H_ +#define _INC_ML605_H_ + +#include +#include + +#if XTBOARD_IS_KC705 +#define XTBOARD_NAME "XT-KC705" +#else +#define XTBOARD_NAME "XT-ML605" +#endif + + +/* + * Default assignment of ML605 devices to external interrupts. + */ + +/* Ethernet interrupt: */ +#ifdef XCHAL_EXTINT1_NUM +#define ETHERNET_INTNUM XCHAL_EXTINT1_NUM +#define ETHERNET_INTLEVEL XCHAL_EXTINT1_LEVEL +#define ETHERNET_INTMASK XCHAL_EXTINT1_MASK +#else +#define ETHERNET_INTMASK 0 +#endif + +/* UART interrupt: */ +#ifdef XCHAL_EXTINT0_NUM +#define UART16550_INTNUM XCHAL_EXTINT0_NUM +#define UART16550_INTLEVEL XCHAL_EXTINT0_LEVEL +#define UART16550_INTMASK XCHAL_EXTINT0_MASK +#else +#define UART16550_INTMASK 0 +#endif + +/* Audio output interrupt (I2S transmitter FIFO): */ +#ifdef XCHAL_EXTINT2_NUM +#define AUDIO_I2S_OUT_INTNUM XCHAL_EXTINT2_NUM +#define AUDIO_I2S_OUT_INTLEVEL XCHAL_EXTINT2_LEVEL +#define AUDIO_I2S_OUT_INTMASK XCHAL_EXTINT2_MASK +#else +#define AUDIO_I2S_OUT_INTMASK 0 +#endif + +/* Audio input interrupt (I2S receiver FIFO): */ +#ifdef XCHAL_EXTINT3_NUM +#define AUDIO_I2S_IN_INTNUM XCHAL_EXTINT3_NUM +#define AUDIO_I2S_IN_INTLEVEL XCHAL_EXTINT3_LEVEL +#define AUDIO_I2S_IN_INTMASK XCHAL_EXTINT3_MASK +#else +#define AUDIO_I2S_IN_INTMASK 0 +#endif + +/* I2C interrupt */ +#ifdef XCHAL_EXTINT4_NUM +#define I2C_INTNUM XCHAL_EXTINT4_NUM +#define I2C_INTLEVEL XCHAL_EXTINT4_LEVEL +#define I2C_INTMASK XCHAL_EXTINT4_MASK +#else +#define I2C_INTMASK 0 +#endif + +/* USB interrupt */ +#ifdef XCHAL_EXTINT5_NUM +#define USB_INTNUM XCHAL_EXTINT5_NUM +#define USB_INTLEVEL XCHAL_EXTINT5_LEVEL +#define USB_INTMASK XCHAL_EXTINT5_MASK +#else +#define USB_INTMASK 0 +#endif + +/* + * Device addresses. + * + * Note: for endianness-independence, use 32-bit loads and stores for all + * register accesses to Ethernet, UART and LED devices. Undefined bits + * may need to be masked out if needed when reading if the actual register + * size is smaller than 32 bits. + * + * Note: ML605 bus byte lanes are defined in terms of msbyte and lsbyte + * relative to the processor. So 32-bit registers are accessed consistently + * from both big and little endian processors. However, this means byte + * sequences are not consistent between big and little endian processors. + * This is fine for RAM, and for ROM if ROM is created for a specific + * processor (and thus has correct byte sequences). However this may be + * unexpected for Flash, which might contain a file-system that one wants + * to use for multiple processor configurations (eg. the Flash might contain + * the Ethernet card's address, endianness-independent application data, etc). + * That is, byte sequences written in Flash by a core of a given endianness + * will be byte-swapped when seen by a core of the other endianness. + * Someone implementing an endianness-independent Flash file system will + * likely handle this byte-swapping issue in the Flash driver software. + */ + +#define ML605_FLASH_MAXSIZE 0x01000000 /* 16 MB */ +#define ML605_FLASH_IOBLOCK_OFS 0x08000000 + +#define KC705_FLASH_MAXSIZE 0x08000000 /* 128 MB */ +#define KC705_FLASH_IOBLOCK_OFS 0x00000000 + +#if XTBOARD_IS_KC705 +#define XTBOARD_FLASH_MAXSIZE KC705_FLASH_MAXSIZE +#define XTBOARD_FLASH_IO_OFS KC705_FLASH_IOBLOCK_OFS +#else +#define XTBOARD_FLASH_MAXSIZE ML605_FLASH_MAXSIZE +#define XTBOARD_FLASH_IO_OFS ML605_FLASH_IOBLOCK_OFS +#endif + +#ifdef XSHAL_IOBLOCK_BYPASS_PADDR + +/* Flash Memory: */ +# define XTBOARD_FLASH_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+XTBOARD_FLASH_IO_OFS) + +/* FPGA registers: */ +# define XTBOARD_FPGAREGS_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D020000) + +/* Ethernet controller/transceiver SONIC SN83934: */ +# define ETHERNET_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D030000) + + +/* UART National-Semi PC16550D: */ +# define UART16550_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D050000) + +/* I2S transmitter */ +# define AUDIO_I2S_OUT_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D080000) + +/* I2S receiver */ +# define AUDIO_I2S_IN_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D088000) + +/* I2C master */ +# define I2C_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D090000) + +/* SPI controller */ +# define SPI_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D0A0000) + +/* Display controller Sunplus SPLC780D, 4bit mode, + * LCD Display MYTech MOC-16216B-B: */ +# define SPLC780D_4BIT_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D0C0000) + +/* USB Controller */ +# define USB_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D0D0000) + +/* Ethernet buffer: */ +# define ETHERNET_BUFFER_PADDR (XSHAL_IOBLOCK_BYPASS_PADDR+0x0D800000) + +#endif /* XSHAL_IOBLOCK_BYPASS_PADDR */ + +/* These devices might be accessed cached: */ +#ifdef XSHAL_IOBLOCK_CACHED_PADDR +# define XTBOARD_FLASH_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+XTBOARD_FLASH_IO_OFS) +# define ETHERNET_BUFFER_CACHED_PADDR (XSHAL_IOBLOCK_CACHED_PADDR+0x0D800000) +#endif /* XSHAL_IOBLOCK_CACHED_PADDR */ + + +/*** Same thing over again, this time with virtual addresses: ***/ + +#ifdef XSHAL_IOBLOCK_BYPASS_VADDR + +/* Flash Memory: */ +# define XTBOARD_FLASH_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+XTBOARD_FLASH_IO_OFS) + +/* FPGA registers: */ +# define XTBOARD_FPGAREGS_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D020000) + +/* Ethernet controller/transceiver SONIC SN83934: */ +# define ETHERNET_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D030000) + + +/* UART National-Semi PC16550D: */ +# define UART16550_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D050000) + +/* I2S transmitter */ +# define AUDIO_I2S_OUT_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D080000) + +/* I2S receiver */ +# define AUDIO_I2S_IN_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D088000) + +/* I2C master */ +# define I2C_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D090000) + +/* SPI controller */ +# define SPI_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D0A0000) + +/* Display controller Sunplus SPLC780D, 4bit mode, + * LCD Display MYTech MOC-16216B-B: */ +# define SPLC780D_4BIT_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D0C0000) + +/* USB Controller */ +# define USB_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D0D0000) + +/* Ethernet buffer: */ +# define ETHERNET_BUFFER_VADDR (XSHAL_IOBLOCK_BYPASS_VADDR+0x0D800000) + +#endif /* XSHAL_IOBLOCK_BYPASS_VADDR */ + +/* These devices might be accessed cached: */ +#ifdef XSHAL_IOBLOCK_CACHED_VADDR +# define XTBOARD_FLASH_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+XTBOARD_FLASH_IO_OFS) +# define ETHERNET_BUFFER_CACHED_VADDR (XSHAL_IOBLOCK_CACHED_VADDR+0x0D800000) +#endif /* XSHAL_IOBLOCK_CACHED_VADDR */ + + +/* System ROM: */ +#define XTBOARD_ROM_SIZE XSHAL_ROM_SIZE +#ifdef XSHAL_ROM_VADDR +#define XTBOARD_ROM_VADDR XSHAL_ROM_VADDR +#endif +#ifdef XSHAL_ROM_PADDR +#define XTBOARD_ROM_PADDR XSHAL_ROM_PADDR +#endif + +/* System RAM: */ +#define XTBOARD_RAM_SIZE XSHAL_RAM_SIZE +#ifdef XSHAL_RAM_VADDR +#define XTBOARD_RAM_VADDR XSHAL_RAM_VADDR +#endif +#ifdef XSHAL_RAM_PADDR +#define XTBOARD_RAM_PADDR XSHAL_RAM_PADDR +#endif +#define XTBOARD_RAM_BYPASS_VADDR XSHAL_RAM_BYPASS_VADDR +#define XTBOARD_RAM_BYPASS_PADDR XSHAL_RAM_BYPASS_PADDR + + + +/* + * Things that depend on device addresses. + */ + + +#define XTBOARD_CACHEATTR_WRITEBACK XSHAL_XT2000_CACHEATTR_WRITEBACK +#define XTBOARD_CACHEATTR_WRITEALLOC XSHAL_XT2000_CACHEATTR_WRITEALLOC +#define XTBOARD_CACHEATTR_WRITETHRU XSHAL_XT2000_CACHEATTR_WRITETHRU +#define XTBOARD_CACHEATTR_BYPASS XSHAL_XT2000_CACHEATTR_BYPASS +#define XTBOARD_CACHEATTR_DEFAULT XSHAL_XT2000_CACHEATTR_DEFAULT + +#define XTBOARD_BUSINT_PIPE_REGIONS XSHAL_XT2000_PIPE_REGIONS +#define XTBOARD_BUSINT_SDRAM_REGIONS XSHAL_XT2000_SDRAM_REGIONS + + +/* + * FPGA registers. + * All these registers are normally accessed using 32-bit loads/stores. + */ + +/* Register offsets: */ +#define XTBOARD_DATECD_OFS 0x00 /* date code (read-only) */ +#define XTBOARD_CLKFRQ_OFS 0x04 /* clock frequency Hz (read-only) */ +#define XTBOARD_SYSLED_OFS 0x08 /* LEDs */ +#define XTBOARD_DIPSW_OFS 0x0C /* DIP switch bits (read-only) */ +#define XTBOARD_SWRST_OFS 0x10 /* software reset */ + +/* Physical register addresses: */ +#ifdef XTBOARD_FPGAREGS_PADDR +#define XTBOARD_DATECD_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DATECD_OFS) +#define XTBOARD_CLKFRQ_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_CLKFRQ_OFS) +#define XTBOARD_SYSLED_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_SYSLED_OFS) +#define XTBOARD_DIPSW_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_DIPSW_OFS) +#define XTBOARD_SWRST_PADDR (XTBOARD_FPGAREGS_PADDR+XTBOARD_SWRST_OFS) +#endif + +/* Virtual register addresses: */ +#ifdef XTBOARD_FPGAREGS_VADDR +#define XTBOARD_DATECD_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DATECD_OFS) +#define XTBOARD_CLKFRQ_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_CLKFRQ_OFS) +#define XTBOARD_SYSLED_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_SYSLED_OFS) +#define XTBOARD_DIPSW_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_DIPSW_OFS) +#define XTBOARD_SWRST_VADDR (XTBOARD_FPGAREGS_VADDR+XTBOARD_SWRST_OFS) +/* Register access (for C code): */ +#define XTBOARD_DATECD_REG (*(volatile unsigned*) XTBOARD_DATECD_VADDR) +#define XTBOARD_CLKFRQ_REG (*(volatile unsigned*) XTBOARD_CLKFRQ_VADDR) +#define XTBOARD_SYSLED_REG (*(volatile unsigned*) XTBOARD_SYSLED_VADDR) +#define XTBOARD_DIPSW_REG (*(volatile unsigned*) XTBOARD_DIPSW_VADDR) +#define XTBOARD_SWRST_REG (*(volatile unsigned*) XTBOARD_SWRST_VADDR) +#endif + +/* DATECD (date code; when core was built) bit fields: */ +/* BCD-coded month (01..12): */ +#define XTBOARD_DATECD_MONTH_SHIFT 24 +#define XTBOARD_DATECD_MONTH_BITS 8 +#define XTBOARD_DATECD_MONTH_MASK 0xFF000000 +/* BCD-coded day (01..31): */ +#define XTBOARD_DATECD_DAY_SHIFT 16 +#define XTBOARD_DATECD_DAY_BITS 8 +#define XTBOARD_DATECD_DAY_MASK 0x00FF0000 +/* BCD-coded year (2001..9999): */ +#define XTBOARD_DATECD_YEAR_SHIFT 0 +#define XTBOARD_DATECD_YEAR_BITS 16 +#define XTBOARD_DATECD_YEAR_MASK 0x0000FFFF + +/* SYSLED (system LED) bit fields: */ + +/* LED control bits (off=0, on=1): */ +#define XTBOARD_SYSLED_USER_SHIFT 0 +#define XTBOARD_SYSLED_USER_BITS 2 +#define XTBOARD_SYSLED_USER_MASK 0x00000003 + +/* DIP Switch SW? (left=sw1=lsb=bit0, right=sw4=msb=bit3; off=0, on=1): */ +/* DIP switch bit fields (bit2/sw3 is reserved and presently unused): */ +#if XTBOARD_IS_KC705 +#define XTBOARD_DIPSW_USER_SHIFT 0 +#define XTBOARD_DIPSW_USER_BITS 2 +#define XTBOARD_DIPSW_USER_MASK 0x00000003 +#define XTBOARD_DIPSW_BOOT_SHIFT 3 +#define XTBOARD_DIPSW_BOOT_BITS 1 +#define XTBOARD_DIPSW_BOOT_MASK 0x00000008 +#else /* ML605: */ +#define XTBOARD_DIPSW_USER_SHIFT 0 +#define XTBOARD_DIPSW_USER_BITS 6 +#define XTBOARD_DIPSW_USER_MASK 0x0000003F +#define XTBOARD_DIPSW_BOOT_SHIFT 7 +#define XTBOARD_DIPSW_BOOT_BITS 1 +#define XTBOARD_DIPSW_BOOT_MASK 0x00000080 +#endif /*ML605*/ +#define XTBOARD_DIPSW_BOOT_RAM (0< + diff --git a/tools/sdk/include/esp32/xtensa/xtruntime-core-state.h b/tools/sdk/include/esp32/xtensa/xtruntime-core-state.h new file mode 100755 index 00000000..37d203c2 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtruntime-core-state.h @@ -0,0 +1,212 @@ +/* xtruntime-core-state.h - core state save area (used eg. by PSO) */ +/* $Id: //depot/rel/Eaglenest/Xtensa/OS/include/xtensa/xtruntime-core-state.h#1 $ */ + +/* + * Copyright (c) 2012-2013 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _XTOS_CORE_STATE_H_ +#define _XTOS_CORE_STATE_H_ + +/* Import STRUCT_xxx macros for defining structures: */ +#include +#include +#include + +//#define XTOS_PSO_TEST 1 // uncommented for internal PSO testing only + +#define CORE_STATE_SIGNATURE 0xB1C5AFED // pattern that indicates state was saved + + +/* + * Save area for saving entire core state, such as across Power Shut-Off (PSO). + */ + +STRUCT_BEGIN +STRUCT_FIELD (long,4,CS_SA_,signature) // for checking whether state was saved +STRUCT_FIELD (long,4,CS_SA_,restore_label) +STRUCT_FIELD (long,4,CS_SA_,aftersave_label) +STRUCT_AFIELD(long,4,CS_SA_,areg,XCHAL_NUM_AREGS) +#if XCHAL_HAVE_WINDOWED +STRUCT_AFIELD(long,4,CS_SA_,caller_regs,16) // save a max of 16 caller regs +STRUCT_FIELD (long,4,CS_SA_,caller_regs_saved) // flag to show if caller regs saved +#endif +#if XCHAL_HAVE_PSO_CDM +STRUCT_FIELD (long,4,CS_SA_,pwrctl) +#endif +#if XCHAL_HAVE_WINDOWED +STRUCT_FIELD (long,4,CS_SA_,windowbase) +STRUCT_FIELD (long,4,CS_SA_,windowstart) +#endif +STRUCT_FIELD (long,4,CS_SA_,sar) +#if XCHAL_HAVE_EXCEPTIONS +STRUCT_FIELD (long,4,CS_SA_,epc1) +STRUCT_FIELD (long,4,CS_SA_,ps) +STRUCT_FIELD (long,4,CS_SA_,excsave1) +# ifdef XCHAL_DOUBLEEXC_VECTOR_VADDR +STRUCT_FIELD (long,4,CS_SA_,depc) +# endif +#endif +#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 2 +STRUCT_AFIELD(long,4,CS_SA_,epc, XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI - 1) +STRUCT_AFIELD(long,4,CS_SA_,eps, XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI - 1) +STRUCT_AFIELD(long,4,CS_SA_,excsave,XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI - 1) +#endif +#if XCHAL_HAVE_LOOPS +STRUCT_FIELD (long,4,CS_SA_,lcount) +STRUCT_FIELD (long,4,CS_SA_,lbeg) +STRUCT_FIELD (long,4,CS_SA_,lend) +#endif +#if XCHAL_HAVE_ABSOLUTE_LITERALS +STRUCT_FIELD (long,4,CS_SA_,litbase) +#endif +#if XCHAL_HAVE_VECBASE +STRUCT_FIELD (long,4,CS_SA_,vecbase) +#endif +#if XCHAL_HAVE_S32C1I && (XCHAL_HW_MIN_VERSION >= XTENSA_HWVERSION_RC_2009_0) /* have ATOMCTL ? */ +STRUCT_FIELD (long,4,CS_SA_,atomctl) +#endif +#if XCHAL_HAVE_PREFETCH +STRUCT_FIELD (long,4,CS_SA_,prefctl) +#endif +#if XCHAL_USE_MEMCTL +STRUCT_FIELD (long,4,CS_SA_,memctl) +#endif +#if XCHAL_HAVE_CCOUNT +STRUCT_FIELD (long,4,CS_SA_,ccount) +STRUCT_AFIELD(long,4,CS_SA_,ccompare, XCHAL_NUM_TIMERS) +#endif +#if XCHAL_HAVE_INTERRUPTS +STRUCT_FIELD (long,4,CS_SA_,intenable) +STRUCT_FIELD (long,4,CS_SA_,interrupt) +#endif +#if XCHAL_HAVE_DEBUG +STRUCT_FIELD (long,4,CS_SA_,icount) +STRUCT_FIELD (long,4,CS_SA_,icountlevel) +STRUCT_FIELD (long,4,CS_SA_,debugcause) +// DDR not saved +# if XCHAL_NUM_DBREAK +STRUCT_AFIELD(long,4,CS_SA_,dbreakc, XCHAL_NUM_DBREAK) +STRUCT_AFIELD(long,4,CS_SA_,dbreaka, XCHAL_NUM_DBREAK) +# endif +# if XCHAL_NUM_IBREAK +STRUCT_AFIELD(long,4,CS_SA_,ibreaka, XCHAL_NUM_IBREAK) +STRUCT_FIELD (long,4,CS_SA_,ibreakenable) +# endif +#endif +#if XCHAL_NUM_MISC_REGS +STRUCT_AFIELD(long,4,CS_SA_,misc,XCHAL_NUM_MISC_REGS) +#endif +#if XCHAL_HAVE_MEM_ECC_PARITY +STRUCT_FIELD (long,4,CS_SA_,mepc) +STRUCT_FIELD (long,4,CS_SA_,meps) +STRUCT_FIELD (long,4,CS_SA_,mesave) +STRUCT_FIELD (long,4,CS_SA_,mesr) +STRUCT_FIELD (long,4,CS_SA_,mecr) +STRUCT_FIELD (long,4,CS_SA_,mevaddr) +#endif + +/* We put this ahead of TLB and other TIE state, + to keep it within S32I/L32I offset range. */ +#if XCHAL_HAVE_CP +STRUCT_FIELD (long,4,CS_SA_,cpenable) +#endif + +/* TLB state */ +#if XCHAL_HAVE_MIMIC_CACHEATTR || XCHAL_HAVE_XLT_CACHEATTR +STRUCT_AFIELD(long,4,CS_SA_,tlbs,8*2) +#endif +#if XCHAL_HAVE_PTP_MMU +/* Compute number of auto-refill (ARF) entries as max of I and D, + to simplify TLB save logic. On the unusual configs with + ITLB ARF != DTLB ARF entries, we'll just end up + saving/restoring some extra entries redundantly. */ +# if XCHAL_DTLB_ARF_ENTRIES_LOG2 + XCHAL_ITLB_ARF_ENTRIES_LOG2 > 4 +# define ARF_ENTRIES 8 +# else +# define ARF_ENTRIES 4 +# endif +STRUCT_FIELD (long,4,CS_SA_,ptevaddr) +STRUCT_FIELD (long,4,CS_SA_,rasid) +STRUCT_FIELD (long,4,CS_SA_,dtlbcfg) +STRUCT_FIELD (long,4,CS_SA_,itlbcfg) +/*** WARNING: past this point, field offsets may be larger than S32I/L32I range ***/ +STRUCT_AFIELD(long,4,CS_SA_,tlbs,((4*ARF_ENTRIES+4)*2+3)*2) +# if XCHAL_HAVE_SPANNING_WAY /* MMU v3 */ +STRUCT_AFIELD(long,4,CS_SA_,tlbs_ways56,(4+8)*2*2) +# endif +#endif + +/* TIE state */ +/* NOTE: NCP area is aligned to XCHAL_TOTAL_SA_ALIGN not XCHAL_NCP_SA_ALIGN, + because the offsets of all subsequent coprocessor save areas are relative + to the NCP save area. */ +STRUCT_AFIELD_A(char,1,XCHAL_TOTAL_SA_ALIGN,CS_SA_,ncp,XCHAL_NCP_SA_SIZE) +#if XCHAL_HAVE_CP +STRUCT_AFIELD_A(char,1,XCHAL_CP0_SA_ALIGN,CS_SA_,cp0,XCHAL_CP0_SA_SIZE) +STRUCT_AFIELD_A(char,1,XCHAL_CP1_SA_ALIGN,CS_SA_,cp1,XCHAL_CP1_SA_SIZE) +STRUCT_AFIELD_A(char,1,XCHAL_CP2_SA_ALIGN,CS_SA_,cp2,XCHAL_CP2_SA_SIZE) +STRUCT_AFIELD_A(char,1,XCHAL_CP3_SA_ALIGN,CS_SA_,cp3,XCHAL_CP3_SA_SIZE) +STRUCT_AFIELD_A(char,1,XCHAL_CP4_SA_ALIGN,CS_SA_,cp4,XCHAL_CP4_SA_SIZE) +STRUCT_AFIELD_A(char,1,XCHAL_CP5_SA_ALIGN,CS_SA_,cp5,XCHAL_CP5_SA_SIZE) +STRUCT_AFIELD_A(char,1,XCHAL_CP6_SA_ALIGN,CS_SA_,cp6,XCHAL_CP6_SA_SIZE) +STRUCT_AFIELD_A(char,1,XCHAL_CP7_SA_ALIGN,CS_SA_,cp7,XCHAL_CP7_SA_SIZE) +//STRUCT_AFIELD_A(char,1,XCHAL_CP8_SA_ALIGN,CS_SA_,cp8,XCHAL_CP8_SA_SIZE) +//STRUCT_AFIELD_A(char,1,XCHAL_CP9_SA_ALIGN,CS_SA_,cp9,XCHAL_CP9_SA_SIZE) +//STRUCT_AFIELD_A(char,1,XCHAL_CP10_SA_ALIGN,CS_SA_,cp10,XCHAL_CP10_SA_SIZE) +//STRUCT_AFIELD_A(char,1,XCHAL_CP11_SA_ALIGN,CS_SA_,cp11,XCHAL_CP11_SA_SIZE) +//STRUCT_AFIELD_A(char,1,XCHAL_CP12_SA_ALIGN,CS_SA_,cp12,XCHAL_CP12_SA_SIZE) +//STRUCT_AFIELD_A(char,1,XCHAL_CP13_SA_ALIGN,CS_SA_,cp13,XCHAL_CP13_SA_SIZE) +//STRUCT_AFIELD_A(char,1,XCHAL_CP14_SA_ALIGN,CS_SA_,cp14,XCHAL_CP14_SA_SIZE) +//STRUCT_AFIELD_A(char,1,XCHAL_CP15_SA_ALIGN,CS_SA_,cp15,XCHAL_CP15_SA_SIZE) +#endif + +STRUCT_END(XtosCoreState) + + + +// These are part of non-coprocessor state (ncp): +#if XCHAL_HAVE_MAC16 +//STRUCT_FIELD (long,4,CS_SA_,acclo) +//STRUCT_FIELD (long,4,CS_SA_,acchi) +//STRUCT_AFIELD(long,4,CS_SA_,mr, 4) +#endif +#if XCHAL_HAVE_THREADPTR +//STRUCT_FIELD (long,4,CS_SA_,threadptr) +#endif +#if XCHAL_HAVE_S32C1I +//STRUCT_FIELD (long,4,CS_SA_,scompare1) +#endif +#if XCHAL_HAVE_BOOLEANS +//STRUCT_FIELD (long,4,CS_SA_,br) +#endif + +// Not saved: +// EXCCAUSE ?? +// DEBUGCAUSE ?? +// EXCVADDR ?? +// DDR +// INTERRUPT +// ... locked cache lines ... + +#endif /* _XTOS_CORE_STATE_H_ */ + diff --git a/tools/sdk/include/esp32/xtensa/xtruntime-frames.h b/tools/sdk/include/esp32/xtensa/xtruntime-frames.h new file mode 100755 index 00000000..8b5a7463 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtruntime-frames.h @@ -0,0 +1,162 @@ +/* xtruntime-frames.h - exception stack frames for single-threaded run-time */ +/* $Id: //depot/rel/Eaglenest/Xtensa/OS/include/xtensa/xtruntime-frames.h#1 $ */ + +/* + * Copyright (c) 2002-2012 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _XTRUNTIME_FRAMES_H_ +#define _XTRUNTIME_FRAMES_H_ + +#include + +/* Macros that help define structures for both C and assembler: */ +#if defined(_ASMLANGUAGE) || defined(__ASSEMBLER__) +#define STRUCT_BEGIN .pushsection .text; .struct 0 +#define STRUCT_FIELD(ctype,size,pre,name) pre##name: .space size +#define STRUCT_AFIELD(ctype,size,pre,name,n) pre##name: .if n ; .space (size)*(n) ; .endif +#define STRUCT_AFIELD_A(ctype,size,align,pre,name,n) .balign align ; pre##name: .if n ; .space (size)*(n) ; .endif +#define STRUCT_END(sname) sname##Size:; .popsection +#else /*_ASMLANGUAGE||__ASSEMBLER__*/ +#define STRUCT_BEGIN typedef struct { +#define STRUCT_FIELD(ctype,size,pre,name) ctype name; +#define STRUCT_AFIELD(ctype,size,pre,name,n) ctype name[n]; +#define STRUCT_AFIELD_A(ctype,size,align,pre,name,n) ctype name[n] __attribute__((aligned(align))); +#define STRUCT_END(sname) } sname; +#endif /*_ASMLANGUAGE||__ASSEMBLER__*/ + + +/* + * Kernel vector mode exception stack frame. + * + * NOTE: due to the limited range of addi used in the current + * kernel exception vector, and the fact that historically + * the vector is limited to 12 bytes, the size of this + * stack frame is limited to 128 bytes (currently at 64). + */ +STRUCT_BEGIN +STRUCT_FIELD (long,4,KEXC_,pc) /* "parm" */ +STRUCT_FIELD (long,4,KEXC_,ps) +STRUCT_AFIELD(long,4,KEXC_,areg, 4) /* a12 .. a15 */ +STRUCT_FIELD (long,4,KEXC_,sar) /* "save" */ +#if XCHAL_HAVE_LOOPS +STRUCT_FIELD (long,4,KEXC_,lcount) +STRUCT_FIELD (long,4,KEXC_,lbeg) +STRUCT_FIELD (long,4,KEXC_,lend) +#endif +#if XCHAL_HAVE_MAC16 +STRUCT_FIELD (long,4,KEXC_,acclo) +STRUCT_FIELD (long,4,KEXC_,acchi) +STRUCT_AFIELD(long,4,KEXC_,mr, 4) +#endif +STRUCT_END(KernelFrame) + + +/* + * User vector mode exception stack frame: + * + * WARNING: if you modify this structure, you MUST modify the + * computation of the pad size (ALIGNPAD) accordingly. + */ +STRUCT_BEGIN +STRUCT_FIELD (long,4,UEXC_,pc) +STRUCT_FIELD (long,4,UEXC_,ps) +STRUCT_FIELD (long,4,UEXC_,sar) +STRUCT_FIELD (long,4,UEXC_,vpri) +#ifdef __XTENSA_CALL0_ABI__ +STRUCT_FIELD (long,4,UEXC_,a0) +#endif +STRUCT_FIELD (long,4,UEXC_,a2) +STRUCT_FIELD (long,4,UEXC_,a3) +STRUCT_FIELD (long,4,UEXC_,a4) +STRUCT_FIELD (long,4,UEXC_,a5) +#ifdef __XTENSA_CALL0_ABI__ +STRUCT_FIELD (long,4,UEXC_,a6) +STRUCT_FIELD (long,4,UEXC_,a7) +STRUCT_FIELD (long,4,UEXC_,a8) +STRUCT_FIELD (long,4,UEXC_,a9) +STRUCT_FIELD (long,4,UEXC_,a10) +STRUCT_FIELD (long,4,UEXC_,a11) +STRUCT_FIELD (long,4,UEXC_,a12) +STRUCT_FIELD (long,4,UEXC_,a13) +STRUCT_FIELD (long,4,UEXC_,a14) +STRUCT_FIELD (long,4,UEXC_,a15) +#endif +STRUCT_FIELD (long,4,UEXC_,exccause) /* NOTE: can probably rid of this one (pass direct) */ +#if XCHAL_HAVE_LOOPS +STRUCT_FIELD (long,4,UEXC_,lcount) +STRUCT_FIELD (long,4,UEXC_,lbeg) +STRUCT_FIELD (long,4,UEXC_,lend) +#endif +#if XCHAL_HAVE_MAC16 +STRUCT_FIELD (long,4,UEXC_,acclo) +STRUCT_FIELD (long,4,UEXC_,acchi) +STRUCT_AFIELD(long,4,UEXC_,mr, 4) +#endif +/* ALIGNPAD is the 16-byte alignment padding. */ +#ifdef __XTENSA_CALL0_ABI__ +# define CALL0_ABI 1 +#else +# define CALL0_ABI 0 +#endif +#define ALIGNPAD ((3 + XCHAL_HAVE_LOOPS*1 + XCHAL_HAVE_MAC16*2 + CALL0_ABI*1) & 3) +#if ALIGNPAD +STRUCT_AFIELD(long,4,UEXC_,pad, ALIGNPAD) /* 16-byte alignment padding */ +#endif +/*STRUCT_AFIELD_A(char,1,XCHAL_CPEXTRA_SA_ALIGN,UEXC_,ureg, (XCHAL_CPEXTRA_SA_SIZE+3)&-4)*/ /* not used */ +STRUCT_END(UserFrame) + + +#if defined(_ASMLANGUAGE) || defined(__ASSEMBLER__) + + +/* Check for UserFrameSize small enough not to require rounding...: */ + /* Skip 16-byte save area, then 32-byte space for 8 regs of call12 + * (which overlaps with 16-byte GCC nested func chaining area), + * then exception stack frame: */ + .set UserFrameTotalSize, 16+32+UserFrameSize + /* Greater than 112 bytes? (max range of ADDI, both signs, when aligned to 16 bytes): */ + .ifgt UserFrameTotalSize-112 + /* Round up to 256-byte multiple to accelerate immediate adds: */ + .set UserFrameTotalSize, ((UserFrameTotalSize+255) & 0xFFFFFF00) + .endif +# define ESF_TOTALSIZE UserFrameTotalSize + +#endif /* _ASMLANGUAGE || __ASSEMBLER__ */ + + +#if XCHAL_NUM_CONTEXTS > 1 +/* Structure of info stored on new context's stack for setup: */ +STRUCT_BEGIN +STRUCT_FIELD (long,4,INFO_,sp) +STRUCT_FIELD (long,4,INFO_,arg1) +STRUCT_FIELD (long,4,INFO_,funcpc) +STRUCT_FIELD (long,4,INFO_,prevps) +STRUCT_END(SetupInfo) +#endif + + +#define KERNELSTACKSIZE 1024 + + +#endif /* _XTRUNTIME_FRAMES_H_ */ + diff --git a/tools/sdk/include/esp32/xtensa/xtruntime.h b/tools/sdk/include/esp32/xtensa/xtruntime.h new file mode 100755 index 00000000..9dae1f4b --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtruntime.h @@ -0,0 +1,221 @@ +/* + * xtruntime.h -- general C definitions for single-threaded run-time + * + * Copyright (c) 2002-2013 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef XTRUNTIME_H +#define XTRUNTIME_H + +#include +#include +#include + +#ifndef XTSTR +#define _XTSTR(x) # x +#define XTSTR(x) _XTSTR(x) +#endif + +/* _xtos_core_shutoff() flags parameter values: */ +#define XTOS_KEEPON_MEM 0x00000100 /* ==PWRCTL_MEM_WAKEUP */ +#define XTOS_KEEPON_MEM_SHIFT 8 +#define XTOS_KEEPON_DEBUG 0x00001000 /* ==PWRCTL_DEBUG_WAKEUP */ +#define XTOS_KEEPON_DEBUG_SHIFT 12 + +#define XTOS_COREF_PSO 0x00000001 /* do power shutoff */ +#define XTOS_COREF_PSO_SHIFT 0 + +#define _xtos_set_execption_handler _xtos_set_exception_handler /* backward compatibility */ +#define _xtos_set_saved_intenable _xtos_ints_on /* backward compatibility */ +#define _xtos_clear_saved_intenable _xtos_ints_off /* backward compatibility */ + +#if !defined(_ASMLANGUAGE) && !defined(__ASSEMBLER__) + +#ifdef __cplusplus +extern "C" { +#endif + +/*typedef void (_xtos_timerdelta_func)(int);*/ +#ifdef __cplusplus +typedef void (_xtos_handler_func)(...); +#else +typedef void (_xtos_handler_func)(); +#endif +typedef _xtos_handler_func *_xtos_handler; + +/* + * unsigned XTOS_SET_INTLEVEL(int intlevel); + * This macro sets the current interrupt level. + * The 'intlevel' parameter must be a constant. + * This macro returns a 32-bit value that must be passed to + * XTOS_RESTORE_INTLEVEL() to restore the previous interrupt level. + * XTOS_RESTORE_JUST_INTLEVEL() also does this, but in XEA2 configs + * it restores only PS.INTLEVEL rather than the entire PS register + * and thus is slower. + */ +#if !XCHAL_HAVE_INTERRUPTS +# define XTOS_SET_INTLEVEL(intlevel) 0 +# define XTOS_SET_MIN_INTLEVEL(intlevel) 0 +# define XTOS_RESTORE_INTLEVEL(restoreval) +# define XTOS_RESTORE_JUST_INTLEVEL(restoreval) +#elif XCHAL_HAVE_XEA2 +/* In XEA2, we can simply safely set PS.INTLEVEL directly: */ +/* NOTE: these asm macros don't modify memory, but they are marked + * as such to act as memory access barriers to the compiler because + * these macros are sometimes used to delineate critical sections; + * function calls are natural barriers (the compiler does not know + * whether a function modifies memory) unless declared to be inlined. */ +# define XTOS_SET_INTLEVEL(intlevel) ({ unsigned __tmp; \ + __asm__ __volatile__( "rsil %0, " XTSTR(intlevel) "\n" \ + : "=a" (__tmp) : : "memory" ); \ + __tmp;}) +# define XTOS_SET_MIN_INTLEVEL(intlevel) ({ unsigned __tmp, __tmp2, __tmp3; \ + __asm__ __volatile__( "rsr %0, " XTSTR(PS) "\n" /* get old (current) PS.INTLEVEL */ \ + "movi %2, " XTSTR(intlevel) "\n" \ + "extui %1, %0, 0, 4\n" /* keep only INTLEVEL bits of parameter */ \ + "blt %2, %1, 1f\n" \ + "rsil %0, " XTSTR(intlevel) "\n" \ + "1:\n" \ + : "=a" (__tmp), "=&a" (__tmp2), "=&a" (__tmp3) : : "memory" ); \ + __tmp;}) +# define XTOS_RESTORE_INTLEVEL(restoreval) do{ unsigned __tmp = (restoreval); \ + __asm__ __volatile__( "wsr %0, " XTSTR(PS) " ; rsync\n" \ + : : "a" (__tmp) : "memory" ); \ + }while(0) +# define XTOS_RESTORE_JUST_INTLEVEL(restoreval) _xtos_set_intlevel(restoreval) +#else +/* In XEA1, we have to rely on INTENABLE register virtualization: */ +extern unsigned _xtos_set_vpri( unsigned vpri ); +extern unsigned _xtos_vpri_enabled; /* current virtual priority */ +# define XTOS_SET_INTLEVEL(intlevel) _xtos_set_vpri(~XCHAL_INTLEVEL_ANDBELOW_MASK(intlevel)) +# define XTOS_SET_MIN_INTLEVEL(intlevel) _xtos_set_vpri(_xtos_vpri_enabled & ~XCHAL_INTLEVEL_ANDBELOW_MASK(intlevel)) +# define XTOS_RESTORE_INTLEVEL(restoreval) _xtos_set_vpri(restoreval) +# define XTOS_RESTORE_JUST_INTLEVEL(restoreval) _xtos_set_vpri(restoreval) +#endif + +/* + * The following macros build upon the above. They are generally used + * instead of invoking the SET_INTLEVEL and SET_MIN_INTLEVEL macros directly. + * They all return a value that can be used with XTOS_RESTORE_INTLEVEL() + * or _xtos_restore_intlevel() or _xtos_restore_just_intlevel() to restore + * the effective interrupt level to what it was before the macro was invoked. + * In XEA2, the DISABLE macros are much faster than the MASK macros + * (in all configs, DISABLE sets the effective interrupt level, whereas MASK + * makes ensures the effective interrupt level is at least the level given + * without lowering it; in XEA2 with INTENABLE virtualization, these macros + * affect PS.INTLEVEL only, not the virtual priority, so DISABLE has partial + * MASK semantics). + * + * A typical critical section sequence might be: + * unsigned rval = XTOS_DISABLE_EXCM_INTERRUPTS; + * ... critical section ... + * XTOS_RESTORE_INTLEVEL(rval); + */ +/* Enable all interrupts (those activated with _xtos_ints_on()): */ +#define XTOS_ENABLE_INTERRUPTS XTOS_SET_INTLEVEL(0) +/* Disable low priority level interrupts (they can interact with the OS): */ +#define XTOS_DISABLE_LOWPRI_INTERRUPTS XTOS_SET_INTLEVEL(XCHAL_NUM_LOWPRI_LEVELS) +#define XTOS_MASK_LOWPRI_INTERRUPTS XTOS_SET_MIN_INTLEVEL(XCHAL_NUM_LOWPRI_LEVELS) +/* Disable interrupts that can interact with the OS: */ +#define XTOS_DISABLE_EXCM_INTERRUPTS XTOS_SET_INTLEVEL(XCHAL_EXCM_LEVEL) +#define XTOS_MASK_EXCM_INTERRUPTS XTOS_SET_MIN_INTLEVEL(XCHAL_EXCM_LEVEL) +#if 0 /* XTOS_LOCK_LEVEL is not exported to applications */ +/* Disable interrupts that can interact with the OS, or manipulate virtual INTENABLE: */ +#define XTOS_DISABLE_LOCK_INTERRUPTS XTOS_SET_INTLEVEL(XTOS_LOCK_LEVEL) +#define XTOS_MASK_LOCK_INTERRUPTS XTOS_SET_MIN_INTLEVEL(XTOS_LOCK_LEVEL) +#endif +/* Disable ALL interrupts (not for common use, particularly if one's processor + * configuration has high-level interrupts and one cares about their latency): */ +#define XTOS_DISABLE_ALL_INTERRUPTS XTOS_SET_INTLEVEL(15) + + +extern unsigned int _xtos_ints_off( unsigned int mask ); +extern unsigned int _xtos_ints_on( unsigned int mask ); +extern unsigned _xtos_set_intlevel( int intlevel ); +extern unsigned _xtos_set_min_intlevel( int intlevel ); +extern unsigned _xtos_restore_intlevel( unsigned restoreval ); +extern unsigned _xtos_restore_just_intlevel( unsigned restoreval ); +extern _xtos_handler _xtos_set_interrupt_handler( int n, _xtos_handler f ); +extern _xtos_handler _xtos_set_interrupt_handler_arg( int n, _xtos_handler f, void *arg ); +extern _xtos_handler _xtos_set_exception_handler( int n, _xtos_handler f ); + +extern void _xtos_memep_initrams( void ); +extern void _xtos_memep_enable( int flags ); + +/* For use with the tiny LSP (see LSP reference manual). */ +#if XCHAL_NUM_INTLEVELS >= 1 +extern void _xtos_dispatch_level1_interrupts( void ); +#endif +#if XCHAL_NUM_INTLEVELS >= 2 +extern void _xtos_dispatch_level2_interrupts( void ); +#endif +#if XCHAL_NUM_INTLEVELS >= 3 +extern void _xtos_dispatch_level3_interrupts( void ); +#endif +#if XCHAL_NUM_INTLEVELS >= 4 +extern void _xtos_dispatch_level4_interrupts( void ); +#endif +#if XCHAL_NUM_INTLEVELS >= 5 +extern void _xtos_dispatch_level5_interrupts( void ); +#endif +#if XCHAL_NUM_INTLEVELS >= 6 +extern void _xtos_dispatch_level6_interrupts( void ); +#endif + +/* Deprecated (but kept because they were documented): */ +extern unsigned int _xtos_read_ints( void ); /* use xthal_get_interrupt() instead */ +extern void _xtos_clear_ints( unsigned int mask ); /* use xthal_set_intclear() instead */ + + +/* Power shut-off related routines. */ +extern int _xtos_core_shutoff(unsigned flags); +extern int _xtos_core_save(unsigned flags, XtosCoreState *savearea, void *code); +extern void _xtos_core_restore(unsigned retvalue, XtosCoreState *savearea); + + +#if XCHAL_NUM_CONTEXTS > 1 +extern unsigned _xtos_init_context(int context_num, int stack_size, + _xtos_handler_func *start_func, int arg1); +#endif + +/* Deprecated: */ +#if XCHAL_NUM_TIMERS > 0 +extern void _xtos_timer_0_delta( int cycles ); +#endif +#if XCHAL_NUM_TIMERS > 1 +extern void _xtos_timer_1_delta( int cycles ); +#endif +#if XCHAL_NUM_TIMERS > 2 +extern void _xtos_timer_2_delta( int cycles ); +#endif +#if XCHAL_NUM_TIMERS > 3 +extern void _xtos_timer_3_delta( int cycles ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* !_ASMLANGUAGE && !__ASSEMBLER__ */ + +#endif /* XTRUNTIME_H */ + diff --git a/tools/sdk/include/esp32/xtensa/xtutil.h b/tools/sdk/include/esp32/xtensa/xtutil.h new file mode 100755 index 00000000..fb05c370 --- /dev/null +++ b/tools/sdk/include/esp32/xtensa/xtutil.h @@ -0,0 +1,61 @@ + +/* $Id$ */ +/*******************************************************************************/ +/* Copyright (c) 2001-2013 by Tensilica Inc. ALL RIGHTS RESERVED. */ +/* These coded instructions, statements, and computer programs are the */ +/* copyrighted works and confidential proprietary information of Tensilica Inc.*/ +/* They may not be modified, copied, reproduced, distributed, or disclosed to */ +/* third parties in any manner, medium, or form, in whole or in part, without */ +/* the prior written consent of Tensilica Inc. */ +/*******************************************************************************/ + +#ifndef XTUTIL_H +#define XTUTIL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +extern int xt_putchar(int c); +extern int xt_puts(const char * s); +extern void xt_putn(unsigned n); +extern int xt_atoi(const char * s); +extern int xt_printf(const char *fmt, ...); +extern int xt_sprintf(char * buf, const char * fmt, ...); + +typedef int xt_output_fn(int *, int, const void *, int); +extern xt_output_fn * xt_set_output_fn(xt_output_fn * fn); + +#ifdef XTUTIL_LIB + +// Only defined if building library + +typedef void (xt_outbuf_fn)(void *, char *, int); + +extern int xt_vprintf(xt_outbuf_fn * out, void * outarg, const char * fmt, va_list ap); + +#else + +// Only defined if building application and overriding + +#ifndef XTUTIL_NO_OVERRIDE + +#define putchar xt_putchar +#define puts xt_puts +#define putn xt_putn +#define atoi xt_atoi +#define printf xt_printf +#define sprintf xt_sprintf + +#endif // XTUTIL_NO_OVERRIDE + +#endif // XTUTIL_LIB + +#ifdef __cplusplus +} +#endif + +#endif // XTUTIL_H + diff --git a/tools/sdk/include/expat/ascii.h b/tools/sdk/include/expat/ascii.h new file mode 100644 index 00000000..d10530b0 --- /dev/null +++ b/tools/sdk/include/expat/ascii.h @@ -0,0 +1,92 @@ +/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#define ASCII_A 0x41 +#define ASCII_B 0x42 +#define ASCII_C 0x43 +#define ASCII_D 0x44 +#define ASCII_E 0x45 +#define ASCII_F 0x46 +#define ASCII_G 0x47 +#define ASCII_H 0x48 +#define ASCII_I 0x49 +#define ASCII_J 0x4A +#define ASCII_K 0x4B +#define ASCII_L 0x4C +#define ASCII_M 0x4D +#define ASCII_N 0x4E +#define ASCII_O 0x4F +#define ASCII_P 0x50 +#define ASCII_Q 0x51 +#define ASCII_R 0x52 +#define ASCII_S 0x53 +#define ASCII_T 0x54 +#define ASCII_U 0x55 +#define ASCII_V 0x56 +#define ASCII_W 0x57 +#define ASCII_X 0x58 +#define ASCII_Y 0x59 +#define ASCII_Z 0x5A + +#define ASCII_a 0x61 +#define ASCII_b 0x62 +#define ASCII_c 0x63 +#define ASCII_d 0x64 +#define ASCII_e 0x65 +#define ASCII_f 0x66 +#define ASCII_g 0x67 +#define ASCII_h 0x68 +#define ASCII_i 0x69 +#define ASCII_j 0x6A +#define ASCII_k 0x6B +#define ASCII_l 0x6C +#define ASCII_m 0x6D +#define ASCII_n 0x6E +#define ASCII_o 0x6F +#define ASCII_p 0x70 +#define ASCII_q 0x71 +#define ASCII_r 0x72 +#define ASCII_s 0x73 +#define ASCII_t 0x74 +#define ASCII_u 0x75 +#define ASCII_v 0x76 +#define ASCII_w 0x77 +#define ASCII_x 0x78 +#define ASCII_y 0x79 +#define ASCII_z 0x7A + +#define ASCII_0 0x30 +#define ASCII_1 0x31 +#define ASCII_2 0x32 +#define ASCII_3 0x33 +#define ASCII_4 0x34 +#define ASCII_5 0x35 +#define ASCII_6 0x36 +#define ASCII_7 0x37 +#define ASCII_8 0x38 +#define ASCII_9 0x39 + +#define ASCII_TAB 0x09 +#define ASCII_SPACE 0x20 +#define ASCII_EXCL 0x21 +#define ASCII_QUOT 0x22 +#define ASCII_AMP 0x26 +#define ASCII_APOS 0x27 +#define ASCII_MINUS 0x2D +#define ASCII_PERIOD 0x2E +#define ASCII_COLON 0x3A +#define ASCII_SEMI 0x3B +#define ASCII_LT 0x3C +#define ASCII_EQUALS 0x3D +#define ASCII_GT 0x3E +#define ASCII_LSQB 0x5B +#define ASCII_RSQB 0x5D +#define ASCII_UNDERSCORE 0x5F +#define ASCII_LPAREN 0x28 +#define ASCII_RPAREN 0x29 +#define ASCII_FF 0x0C +#define ASCII_SLASH 0x2F +#define ASCII_HASH 0x23 +#define ASCII_PIPE 0x7C +#define ASCII_COMMA 0x2C diff --git a/tools/sdk/include/expat/asciitab.h b/tools/sdk/include/expat/asciitab.h new file mode 100644 index 00000000..79a15c28 --- /dev/null +++ b/tools/sdk/include/expat/asciitab.h @@ -0,0 +1,36 @@ +/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, +/* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML, +/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, +/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, +/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, +/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, +/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, +/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, +/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, +/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, +/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, +/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, +/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, +/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, +/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, +/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, +/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, +/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, diff --git a/tools/sdk/include/expat/chardata.h b/tools/sdk/include/expat/chardata.h new file mode 100644 index 00000000..e8dc4ce2 --- /dev/null +++ b/tools/sdk/include/expat/chardata.h @@ -0,0 +1,40 @@ +/* chardata.h + + Interface to some helper routines used to accumulate and check text + and attribute content. +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XML_CHARDATA_H +#define XML_CHARDATA_H 1 + +#ifndef XML_VERSION +#include "expat.h" /* need XML_Char */ +#endif + + +typedef struct { + int count; /* # of chars, < 0 if not set */ + XML_Char data[1024]; +} CharData; + + +void CharData_Init(CharData *storage); + +void CharData_AppendString(CharData *storage, const char *s); + +void CharData_AppendXMLChars(CharData *storage, const XML_Char *s, int len); + +int CharData_CheckString(CharData *storage, const char *s); + +int CharData_CheckXMLChars(CharData *storage, const XML_Char *s); + + +#endif /* XML_CHARDATA_H */ + +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/include/expat/expat.h b/tools/sdk/include/expat/expat.h new file mode 100644 index 00000000..086e24b3 --- /dev/null +++ b/tools/sdk/include/expat/expat.h @@ -0,0 +1,1048 @@ +/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#ifndef Expat_INCLUDED +#define Expat_INCLUDED 1 + +#ifdef __VMS +/* 0 1 2 3 0 1 2 3 + 1234567890123456789012345678901 1234567890123456789012345678901 */ +#define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler +#define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler +#define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler +#define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg +#endif + +#include +#include "expat_external.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct XML_ParserStruct; +typedef struct XML_ParserStruct *XML_Parser; + +/* Should this be defined using stdbool.h when C99 is available? */ +typedef unsigned char XML_Bool; +#define XML_TRUE ((XML_Bool) 1) +#define XML_FALSE ((XML_Bool) 0) + +/* The XML_Status enum gives the possible return values for several + API functions. The preprocessor #defines are included so this + stanza can be added to code that still needs to support older + versions of Expat 1.95.x: + + #ifndef XML_STATUS_OK + #define XML_STATUS_OK 1 + #define XML_STATUS_ERROR 0 + #endif + + Otherwise, the #define hackery is quite ugly and would have been + dropped. +*/ +enum XML_Status { + XML_STATUS_ERROR = 0, +#define XML_STATUS_ERROR XML_STATUS_ERROR + XML_STATUS_OK = 1, +#define XML_STATUS_OK XML_STATUS_OK + XML_STATUS_SUSPENDED = 2 +#define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED +}; + +enum XML_Error { + XML_ERROR_NONE, + XML_ERROR_NO_MEMORY, + XML_ERROR_SYNTAX, + XML_ERROR_NO_ELEMENTS, + XML_ERROR_INVALID_TOKEN, + XML_ERROR_UNCLOSED_TOKEN, + XML_ERROR_PARTIAL_CHAR, + XML_ERROR_TAG_MISMATCH, + XML_ERROR_DUPLICATE_ATTRIBUTE, + XML_ERROR_JUNK_AFTER_DOC_ELEMENT, + XML_ERROR_PARAM_ENTITY_REF, + XML_ERROR_UNDEFINED_ENTITY, + XML_ERROR_RECURSIVE_ENTITY_REF, + XML_ERROR_ASYNC_ENTITY, + XML_ERROR_BAD_CHAR_REF, + XML_ERROR_BINARY_ENTITY_REF, + XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, + XML_ERROR_MISPLACED_XML_PI, + XML_ERROR_UNKNOWN_ENCODING, + XML_ERROR_INCORRECT_ENCODING, + XML_ERROR_UNCLOSED_CDATA_SECTION, + XML_ERROR_EXTERNAL_ENTITY_HANDLING, + XML_ERROR_NOT_STANDALONE, + XML_ERROR_UNEXPECTED_STATE, + XML_ERROR_ENTITY_DECLARED_IN_PE, + XML_ERROR_FEATURE_REQUIRES_XML_DTD, + XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, + /* Added in 1.95.7. */ + XML_ERROR_UNBOUND_PREFIX, + /* Added in 1.95.8. */ + XML_ERROR_UNDECLARING_PREFIX, + XML_ERROR_INCOMPLETE_PE, + XML_ERROR_XML_DECL, + XML_ERROR_TEXT_DECL, + XML_ERROR_PUBLICID, + XML_ERROR_SUSPENDED, + XML_ERROR_NOT_SUSPENDED, + XML_ERROR_ABORTED, + XML_ERROR_FINISHED, + XML_ERROR_SUSPEND_PE, + /* Added in 2.0. */ + XML_ERROR_RESERVED_PREFIX_XML, + XML_ERROR_RESERVED_PREFIX_XMLNS, + XML_ERROR_RESERVED_NAMESPACE_URI +}; + +enum XML_Content_Type { + XML_CTYPE_EMPTY = 1, + XML_CTYPE_ANY, + XML_CTYPE_MIXED, + XML_CTYPE_NAME, + XML_CTYPE_CHOICE, + XML_CTYPE_SEQ +}; + +enum XML_Content_Quant { + XML_CQUANT_NONE, + XML_CQUANT_OPT, + XML_CQUANT_REP, + XML_CQUANT_PLUS +}; + +/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be + XML_CQUANT_NONE, and the other fields will be zero or NULL. + If type == XML_CTYPE_MIXED, then quant will be NONE or REP and + numchildren will contain number of elements that may be mixed in + and children point to an array of XML_Content cells that will be + all of XML_CTYPE_NAME type with no quantification. + + If type == XML_CTYPE_NAME, then the name points to the name, and + the numchildren field will be zero and children will be NULL. The + quant fields indicates any quantifiers placed on the name. + + CHOICE and SEQ will have name NULL, the number of children in + numchildren and children will point, recursively, to an array + of XML_Content cells. + + The EMPTY, ANY, and MIXED types will only occur at top level. +*/ + +typedef struct XML_cp XML_Content; + +struct XML_cp { + enum XML_Content_Type type; + enum XML_Content_Quant quant; + XML_Char * name; + unsigned int numchildren; + XML_Content * children; +}; + + +/* This is called for an element declaration. See above for + description of the model argument. It's the caller's responsibility + to free model when finished with it. +*/ +typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData, + const XML_Char *name, + XML_Content *model); + +XMLPARSEAPI(void) +XML_SetElementDeclHandler(XML_Parser parser, + XML_ElementDeclHandler eldecl); + +/* The Attlist declaration handler is called for *each* attribute. So + a single Attlist declaration with multiple attributes declared will + generate multiple calls to this handler. The "default" parameter + may be NULL in the case of the "#IMPLIED" or "#REQUIRED" + keyword. The "isrequired" parameter will be true and the default + value will be NULL in the case of "#REQUIRED". If "isrequired" is + true and default is non-NULL, then this is a "#FIXED" default. +*/ +typedef void (XMLCALL *XML_AttlistDeclHandler) ( + void *userData, + const XML_Char *elname, + const XML_Char *attname, + const XML_Char *att_type, + const XML_Char *dflt, + int isrequired); + +XMLPARSEAPI(void) +XML_SetAttlistDeclHandler(XML_Parser parser, + XML_AttlistDeclHandler attdecl); + +/* The XML declaration handler is called for *both* XML declarations + and text declarations. The way to distinguish is that the version + parameter will be NULL for text declarations. The encoding + parameter may be NULL for XML declarations. The standalone + parameter will be -1, 0, or 1 indicating respectively that there + was no standalone parameter in the declaration, that it was given + as no, or that it was given as yes. +*/ +typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData, + const XML_Char *version, + const XML_Char *encoding, + int standalone); + +XMLPARSEAPI(void) +XML_SetXmlDeclHandler(XML_Parser parser, + XML_XmlDeclHandler xmldecl); + + +typedef struct { + void *(*malloc_fcn)(size_t size); + void *(*realloc_fcn)(void *ptr, size_t size); + void (*free_fcn)(void *ptr); +} XML_Memory_Handling_Suite; + +/* Constructs a new parser; encoding is the encoding specified by the + external protocol or NULL if there is none specified. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreate(const XML_Char *encoding); + +/* Constructs a new parser and namespace processor. Element type + names and attribute names that belong to a namespace will be + expanded; unprefixed attribute names are never expanded; unprefixed + element type names are expanded only if there is a default + namespace. The expanded name is the concatenation of the namespace + URI, the namespace separator character, and the local part of the + name. If the namespace separator is '\0' then the namespace URI + and the local part will be concatenated without any separator. + It is a programming error to use the separator '\0' with namespace + triplets (see XML_SetReturnNSTriplet). +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); + + +/* Constructs a new parser using the memory management suite referred to + by memsuite. If memsuite is NULL, then use the standard library memory + suite. If namespaceSeparator is non-NULL it creates a parser with + namespace processing as described above. The character pointed at + will serve as the namespace separator. + + All further memory operations used for the created parser will come from + the given suite. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreate_MM(const XML_Char *encoding, + const XML_Memory_Handling_Suite *memsuite, + const XML_Char *namespaceSeparator); + +/* Prepare a parser object to be re-used. This is particularly + valuable when memory allocation overhead is disproportionatly high, + such as when a large number of small documnents need to be parsed. + All handlers are cleared from the parser, except for the + unknownEncodingHandler. The parser's external state is re-initialized + except for the values of ns and ns_triplets. + + Added in Expat 1.95.3. +*/ +XMLPARSEAPI(XML_Bool) +XML_ParserReset(XML_Parser parser, const XML_Char *encoding); + +/* atts is array of name/value pairs, terminated by 0; + names and values are 0 terminated. +*/ +typedef void (XMLCALL *XML_StartElementHandler) (void *userData, + const XML_Char *name, + const XML_Char **atts); + +typedef void (XMLCALL *XML_EndElementHandler) (void *userData, + const XML_Char *name); + + +/* s is not 0 terminated. */ +typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData, + const XML_Char *s, + int len); + +/* target and data are 0 terminated */ +typedef void (XMLCALL *XML_ProcessingInstructionHandler) ( + void *userData, + const XML_Char *target, + const XML_Char *data); + +/* data is 0 terminated */ +typedef void (XMLCALL *XML_CommentHandler) (void *userData, + const XML_Char *data); + +typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData); +typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData); + +/* This is called for any characters in the XML document for which + there is no applicable handler. This includes both characters that + are part of markup which is of a kind that is not reported + (comments, markup declarations), or characters that are part of a + construct which could be reported but for which no handler has been + supplied. The characters are passed exactly as they were in the XML + document except that they will be encoded in UTF-8 or UTF-16. + Line boundaries are not normalized. Note that a byte order mark + character is not passed to the default handler. There are no + guarantees about how characters are divided between calls to the + default handler: for example, a comment might be split between + multiple calls. +*/ +typedef void (XMLCALL *XML_DefaultHandler) (void *userData, + const XML_Char *s, + int len); + +/* This is called for the start of the DOCTYPE declaration, before + any DTD or internal subset is parsed. +*/ +typedef void (XMLCALL *XML_StartDoctypeDeclHandler) ( + void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid, + int has_internal_subset); + +/* This is called for the start of the DOCTYPE declaration when the + closing > is encountered, but after processing any external + subset. +*/ +typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); + +/* This is called for entity declarations. The is_parameter_entity + argument will be non-zero if the entity is a parameter entity, zero + otherwise. + + For internal entities (), value will + be non-NULL and systemId, publicID, and notationName will be NULL. + The value string is NOT nul-terminated; the length is provided in + the value_length argument. Since it is legal to have zero-length + values, do not use this argument to test for internal entities. + + For external entities, value will be NULL and systemId will be + non-NULL. The publicId argument will be NULL unless a public + identifier was provided. The notationName argument will have a + non-NULL value only for unparsed entity declarations. + + Note that is_parameter_entity can't be changed to XML_Bool, since + that would break binary compatibility. +*/ +typedef void (XMLCALL *XML_EntityDeclHandler) ( + void *userData, + const XML_Char *entityName, + int is_parameter_entity, + const XML_Char *value, + int value_length, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName); + +XMLPARSEAPI(void) +XML_SetEntityDeclHandler(XML_Parser parser, + XML_EntityDeclHandler handler); + +/* OBSOLETE -- OBSOLETE -- OBSOLETE + This handler has been superseded by the EntityDeclHandler above. + It is provided here for backward compatibility. + + This is called for a declaration of an unparsed (NDATA) entity. + The base argument is whatever was set by XML_SetBase. The + entityName, systemId and notationName arguments will never be + NULL. The other arguments may be. +*/ +typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) ( + void *userData, + const XML_Char *entityName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName); + +/* This is called for a declaration of notation. The base argument is + whatever was set by XML_SetBase. The notationName will never be + NULL. The other arguments can be. +*/ +typedef void (XMLCALL *XML_NotationDeclHandler) ( + void *userData, + const XML_Char *notationName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* When namespace processing is enabled, these are called once for + each namespace declaration. The call to the start and end element + handlers occur between the calls to the start and end namespace + declaration handlers. For an xmlns attribute, prefix will be + NULL. For an xmlns="" attribute, uri will be NULL. +*/ +typedef void (XMLCALL *XML_StartNamespaceDeclHandler) ( + void *userData, + const XML_Char *prefix, + const XML_Char *uri); + +typedef void (XMLCALL *XML_EndNamespaceDeclHandler) ( + void *userData, + const XML_Char *prefix); + +/* This is called if the document is not standalone, that is, it has an + external subset or a reference to a parameter entity, but does not + have standalone="yes". If this handler returns XML_STATUS_ERROR, + then processing will not continue, and the parser will return a + XML_ERROR_NOT_STANDALONE error. + If parameter entity parsing is enabled, then in addition to the + conditions above this handler will only be called if the referenced + entity was actually read. +*/ +typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData); + +/* This is called for a reference to an external parsed general + entity. The referenced entity is not automatically parsed. The + application can parse it immediately or later using + XML_ExternalEntityParserCreate. + + The parser argument is the parser parsing the entity containing the + reference; it can be passed as the parser argument to + XML_ExternalEntityParserCreate. The systemId argument is the + system identifier as specified in the entity declaration; it will + not be NULL. + + The base argument is the system identifier that should be used as + the base for resolving systemId if systemId was relative; this is + set by XML_SetBase; it may be NULL. + + The publicId argument is the public identifier as specified in the + entity declaration, or NULL if none was specified; the whitespace + in the public identifier will have been normalized as required by + the XML spec. + + The context argument specifies the parsing context in the format + expected by the context argument to XML_ExternalEntityParserCreate; + context is valid only until the handler returns, so if the + referenced entity is to be parsed later, it must be copied. + context is NULL only when the entity is a parameter entity. + + The handler should return XML_STATUS_ERROR if processing should not + continue because of a fatal error in the handling of the external + entity. In this case the calling parser will return an + XML_ERROR_EXTERNAL_ENTITY_HANDLING error. + + Note that unlike other handlers the first argument is the parser, + not userData. +*/ +typedef int (XMLCALL *XML_ExternalEntityRefHandler) ( + XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* This is called in two situations: + 1) An entity reference is encountered for which no declaration + has been read *and* this is not an error. + 2) An internal entity reference is read, but not expanded, because + XML_SetDefaultHandler has been called. + Note: skipped parameter entities in declarations and skipped general + entities in attribute values cannot be reported, because + the event would be out of sync with the reporting of the + declarations or attribute values +*/ +typedef void (XMLCALL *XML_SkippedEntityHandler) ( + void *userData, + const XML_Char *entityName, + int is_parameter_entity); + +/* This structure is filled in by the XML_UnknownEncodingHandler to + provide information to the parser about encodings that are unknown + to the parser. + + The map[b] member gives information about byte sequences whose + first byte is b. + + If map[b] is c where c is >= 0, then b by itself encodes the + Unicode scalar value c. + + If map[b] is -1, then the byte sequence is malformed. + + If map[b] is -n, where n >= 2, then b is the first byte of an + n-byte sequence that encodes a single Unicode scalar value. + + The data member will be passed as the first argument to the convert + function. + + The convert function is used to convert multibyte sequences; s will + point to a n-byte sequence where map[(unsigned char)*s] == -n. The + convert function must return the Unicode scalar value represented + by this byte sequence or -1 if the byte sequence is malformed. + + The convert function may be NULL if the encoding is a single-byte + encoding, that is if map[b] >= -1 for all bytes b. + + When the parser is finished with the encoding, then if release is + not NULL, it will call release passing it the data member; once + release has been called, the convert function will not be called + again. + + Expat places certain restrictions on the encodings that are supported + using this mechanism. + + 1. Every ASCII character that can appear in a well-formed XML document, + other than the characters + + $@\^`{}~ + + must be represented by a single byte, and that byte must be the + same byte that represents that character in ASCII. + + 2. No character may require more than 4 bytes to encode. + + 3. All characters encoded must have Unicode scalar values <= + 0xFFFF, (i.e., characters that would be encoded by surrogates in + UTF-16 are not allowed). Note that this restriction doesn't + apply to the built-in support for UTF-8 and UTF-16. + + 4. No Unicode character may be encoded by more than one distinct + sequence of bytes. +*/ +typedef struct { + int map[256]; + void *data; + int (XMLCALL *convert)(void *data, const char *s); + void (XMLCALL *release)(void *data); +} XML_Encoding; + +/* This is called for an encoding that is unknown to the parser. + + The encodingHandlerData argument is that which was passed as the + second argument to XML_SetUnknownEncodingHandler. + + The name argument gives the name of the encoding as specified in + the encoding declaration. + + If the callback can provide information about the encoding, it must + fill in the XML_Encoding structure, and return XML_STATUS_OK. + Otherwise it must return XML_STATUS_ERROR. + + If info does not describe a suitable encoding, then the parser will + return an XML_UNKNOWN_ENCODING error. +*/ +typedef int (XMLCALL *XML_UnknownEncodingHandler) ( + void *encodingHandlerData, + const XML_Char *name, + XML_Encoding *info); + +XMLPARSEAPI(void) +XML_SetElementHandler(XML_Parser parser, + XML_StartElementHandler start, + XML_EndElementHandler end); + +XMLPARSEAPI(void) +XML_SetStartElementHandler(XML_Parser parser, + XML_StartElementHandler handler); + +XMLPARSEAPI(void) +XML_SetEndElementHandler(XML_Parser parser, + XML_EndElementHandler handler); + +XMLPARSEAPI(void) +XML_SetCharacterDataHandler(XML_Parser parser, + XML_CharacterDataHandler handler); + +XMLPARSEAPI(void) +XML_SetProcessingInstructionHandler(XML_Parser parser, + XML_ProcessingInstructionHandler handler); +XMLPARSEAPI(void) +XML_SetCommentHandler(XML_Parser parser, + XML_CommentHandler handler); + +XMLPARSEAPI(void) +XML_SetCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start, + XML_EndCdataSectionHandler end); + +XMLPARSEAPI(void) +XML_SetStartCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start); + +XMLPARSEAPI(void) +XML_SetEndCdataSectionHandler(XML_Parser parser, + XML_EndCdataSectionHandler end); + +/* This sets the default handler and also inhibits expansion of + internal entities. These entity references will be passed to the + default handler, or to the skipped entity handler, if one is set. +*/ +XMLPARSEAPI(void) +XML_SetDefaultHandler(XML_Parser parser, + XML_DefaultHandler handler); + +/* This sets the default handler but does not inhibit expansion of + internal entities. The entity reference will not be passed to the + default handler. +*/ +XMLPARSEAPI(void) +XML_SetDefaultHandlerExpand(XML_Parser parser, + XML_DefaultHandler handler); + +XMLPARSEAPI(void) +XML_SetDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start, + XML_EndDoctypeDeclHandler end); + +XMLPARSEAPI(void) +XML_SetStartDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start); + +XMLPARSEAPI(void) +XML_SetEndDoctypeDeclHandler(XML_Parser parser, + XML_EndDoctypeDeclHandler end); + +XMLPARSEAPI(void) +XML_SetUnparsedEntityDeclHandler(XML_Parser parser, + XML_UnparsedEntityDeclHandler handler); + +XMLPARSEAPI(void) +XML_SetNotationDeclHandler(XML_Parser parser, + XML_NotationDeclHandler handler); + +XMLPARSEAPI(void) +XML_SetNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start, + XML_EndNamespaceDeclHandler end); + +XMLPARSEAPI(void) +XML_SetStartNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start); + +XMLPARSEAPI(void) +XML_SetEndNamespaceDeclHandler(XML_Parser parser, + XML_EndNamespaceDeclHandler end); + +XMLPARSEAPI(void) +XML_SetNotStandaloneHandler(XML_Parser parser, + XML_NotStandaloneHandler handler); + +XMLPARSEAPI(void) +XML_SetExternalEntityRefHandler(XML_Parser parser, + XML_ExternalEntityRefHandler handler); + +/* If a non-NULL value for arg is specified here, then it will be + passed as the first argument to the external entity ref handler + instead of the parser object. +*/ +XMLPARSEAPI(void) +XML_SetExternalEntityRefHandlerArg(XML_Parser parser, + void *arg); + +XMLPARSEAPI(void) +XML_SetSkippedEntityHandler(XML_Parser parser, + XML_SkippedEntityHandler handler); + +XMLPARSEAPI(void) +XML_SetUnknownEncodingHandler(XML_Parser parser, + XML_UnknownEncodingHandler handler, + void *encodingHandlerData); + +/* This can be called within a handler for a start element, end + element, processing instruction or character data. It causes the + corresponding markup to be passed to the default handler. +*/ +XMLPARSEAPI(void) +XML_DefaultCurrent(XML_Parser parser); + +/* If do_nst is non-zero, and namespace processing is in effect, and + a name has a prefix (i.e. an explicit namespace qualifier) then + that name is returned as a triplet in a single string separated by + the separator character specified when the parser was created: URI + + sep + local_name + sep + prefix. + + If do_nst is zero, then namespace information is returned in the + default manner (URI + sep + local_name) whether or not the name + has a prefix. + + Note: Calling XML_SetReturnNSTriplet after XML_Parse or + XML_ParseBuffer has no effect. +*/ + +XMLPARSEAPI(void) +XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); + +/* This value is passed as the userData argument to callbacks. */ +XMLPARSEAPI(void) +XML_SetUserData(XML_Parser parser, void *userData); + +/* Returns the last value set by XML_SetUserData or NULL. */ +#define XML_GetUserData(parser) (*(void **)(parser)) + +/* This is equivalent to supplying an encoding argument to + XML_ParserCreate. On success XML_SetEncoding returns non-zero, + zero otherwise. + Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer + has no effect and returns XML_STATUS_ERROR. +*/ +XMLPARSEAPI(enum XML_Status) +XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); + +/* If this function is called, then the parser will be passed as the + first argument to callbacks instead of userData. The userData will + still be accessible using XML_GetUserData. +*/ +XMLPARSEAPI(void) +XML_UseParserAsHandlerArg(XML_Parser parser); + +/* If useDTD == XML_TRUE is passed to this function, then the parser + will assume that there is an external subset, even if none is + specified in the document. In such a case the parser will call the + externalEntityRefHandler with a value of NULL for the systemId + argument (the publicId and context arguments will be NULL as well). + Note: For the purpose of checking WFC: Entity Declared, passing + useDTD == XML_TRUE will make the parser behave as if the document + had a DTD with an external subset. + Note: If this function is called, then this must be done before + the first call to XML_Parse or XML_ParseBuffer, since it will + have no effect after that. Returns + XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. + Note: If the document does not have a DOCTYPE declaration at all, + then startDoctypeDeclHandler and endDoctypeDeclHandler will not + be called, despite an external subset being parsed. + Note: If XML_DTD is not defined when Expat is compiled, returns + XML_ERROR_FEATURE_REQUIRES_XML_DTD. +*/ +XMLPARSEAPI(enum XML_Error) +XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); + + +/* Sets the base to be used for resolving relative URIs in system + identifiers in declarations. Resolving relative identifiers is + left to the application: this value will be passed through as the + base argument to the XML_ExternalEntityRefHandler, + XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base + argument will be copied. Returns XML_STATUS_ERROR if out of memory, + XML_STATUS_OK otherwise. +*/ +XMLPARSEAPI(enum XML_Status) +XML_SetBase(XML_Parser parser, const XML_Char *base); + +XMLPARSEAPI(const XML_Char *) +XML_GetBase(XML_Parser parser); + +/* Returns the number of the attribute/value pairs passed in last call + to the XML_StartElementHandler that were specified in the start-tag + rather than defaulted. Each attribute/value pair counts as 2; thus + this correspondds to an index into the atts array passed to the + XML_StartElementHandler. +*/ +XMLPARSEAPI(int) +XML_GetSpecifiedAttributeCount(XML_Parser parser); + +/* Returns the index of the ID attribute passed in the last call to + XML_StartElementHandler, or -1 if there is no ID attribute. Each + attribute/value pair counts as 2; thus this correspondds to an + index into the atts array passed to the XML_StartElementHandler. +*/ +XMLPARSEAPI(int) +XML_GetIdAttributeIndex(XML_Parser parser); + +#ifdef XML_ATTR_INFO +/* Source file byte offsets for the start and end of attribute names and values. + The value indices are exclusive of surrounding quotes; thus in a UTF-8 source + file an attribute value of "blah" will yield: + info->valueEnd - info->valueStart = 4 bytes. +*/ +typedef struct { + XML_Index nameStart; /* Offset to beginning of the attribute name. */ + XML_Index nameEnd; /* Offset after the attribute name's last byte. */ + XML_Index valueStart; /* Offset to beginning of the attribute value. */ + XML_Index valueEnd; /* Offset after the attribute value's last byte. */ +} XML_AttrInfo; + +/* Returns an array of XML_AttrInfo structures for the attribute/value pairs + passed in last call to the XML_StartElementHandler that were specified + in the start-tag rather than defaulted. Each attribute/value pair counts + as 1; thus the number of entries in the array is + XML_GetSpecifiedAttributeCount(parser) / 2. +*/ +XMLPARSEAPI(const XML_AttrInfo *) +XML_GetAttributeInfo(XML_Parser parser); +#endif + +/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is + detected. The last call to XML_Parse must have isFinal true; len + may be zero for this call (or any other). + + Though the return values for these functions has always been + described as a Boolean value, the implementation, at least for the + 1.95.x series, has always returned exactly one of the XML_Status + values. +*/ +XMLPARSEAPI(enum XML_Status) +XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); + +XMLPARSEAPI(void *) +XML_GetBuffer(XML_Parser parser, int len); + +XMLPARSEAPI(enum XML_Status) +XML_ParseBuffer(XML_Parser parser, int len, int isFinal); + +/* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return. + Must be called from within a call-back handler, except when aborting + (resumable = 0) an already suspended parser. Some call-backs may + still follow because they would otherwise get lost. Examples: + - endElementHandler() for empty elements when stopped in + startElementHandler(), + - endNameSpaceDeclHandler() when stopped in endElementHandler(), + and possibly others. + + Can be called from most handlers, including DTD related call-backs, + except when parsing an external parameter entity and resumable != 0. + Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. + Possible error codes: + - XML_ERROR_SUSPENDED: when suspending an already suspended parser. + - XML_ERROR_FINISHED: when the parser has already finished. + - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE. + + When resumable != 0 (true) then parsing is suspended, that is, + XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED. + Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer() + return XML_STATUS_ERROR with error code XML_ERROR_ABORTED. + + *Note*: + This will be applied to the current parser instance only, that is, if + there is a parent parser then it will continue parsing when the + externalEntityRefHandler() returns. It is up to the implementation of + the externalEntityRefHandler() to call XML_StopParser() on the parent + parser (recursively), if one wants to stop parsing altogether. + + When suspended, parsing can be resumed by calling XML_ResumeParser(). +*/ +XMLPARSEAPI(enum XML_Status) +XML_StopParser(XML_Parser parser, XML_Bool resumable); + +/* Resumes parsing after it has been suspended with XML_StopParser(). + Must not be called from within a handler call-back. Returns same + status codes as XML_Parse() or XML_ParseBuffer(). + Additional error code XML_ERROR_NOT_SUSPENDED possible. + + *Note*: + This must be called on the most deeply nested child parser instance + first, and on its parent parser only after the child parser has finished, + to be applied recursively until the document entity's parser is restarted. + That is, the parent parser will not resume by itself and it is up to the + application to call XML_ResumeParser() on it at the appropriate moment. +*/ +XMLPARSEAPI(enum XML_Status) +XML_ResumeParser(XML_Parser parser); + +enum XML_Parsing { + XML_INITIALIZED, + XML_PARSING, + XML_FINISHED, + XML_SUSPENDED +}; + +typedef struct { + enum XML_Parsing parsing; + XML_Bool finalBuffer; +} XML_ParsingStatus; + +/* Returns status of parser with respect to being initialized, parsing, + finished, or suspended and processing the final buffer. + XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus, + XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED +*/ +XMLPARSEAPI(void) +XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); + +/* Creates an XML_Parser object that can parse an external general + entity; context is a '\0'-terminated string specifying the parse + context; encoding is a '\0'-terminated string giving the name of + the externally specified encoding, or NULL if there is no + externally specified encoding. The context string consists of a + sequence of tokens separated by formfeeds (\f); a token consisting + of a name specifies that the general entity of the name is open; a + token of the form prefix=uri specifies the namespace for a + particular prefix; a token of the form =uri specifies the default + namespace. This can be called at any point after the first call to + an ExternalEntityRefHandler so longer as the parser has not yet + been freed. The new parser is completely independent and may + safely be used in a separate thread. The handlers and userData are + initialized from the parser argument. Returns NULL if out of memory. + Otherwise returns a new XML_Parser object. +*/ +XMLPARSEAPI(XML_Parser) +XML_ExternalEntityParserCreate(XML_Parser parser, + const XML_Char *context, + const XML_Char *encoding); + +enum XML_ParamEntityParsing { + XML_PARAM_ENTITY_PARSING_NEVER, + XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, + XML_PARAM_ENTITY_PARSING_ALWAYS +}; + +/* Controls parsing of parameter entities (including the external DTD + subset). If parsing of parameter entities is enabled, then + references to external parameter entities (including the external + DTD subset) will be passed to the handler set with + XML_SetExternalEntityRefHandler. The context passed will be 0. + + Unlike external general entities, external parameter entities can + only be parsed synchronously. If the external parameter entity is + to be parsed, it must be parsed during the call to the external + entity ref handler: the complete sequence of + XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and + XML_ParserFree calls must be made during this call. After + XML_ExternalEntityParserCreate has been called to create the parser + for the external parameter entity (context must be 0 for this + call), it is illegal to make any calls on the old parser until + XML_ParserFree has been called on the newly created parser. + If the library has been compiled without support for parameter + entity parsing (ie without XML_DTD being defined), then + XML_SetParamEntityParsing will return 0 if parsing of parameter + entities is requested; otherwise it will return non-zero. + Note: If XML_SetParamEntityParsing is called after XML_Parse or + XML_ParseBuffer, then it has no effect and will always return 0. +*/ +XMLPARSEAPI(int) +XML_SetParamEntityParsing(XML_Parser parser, + enum XML_ParamEntityParsing parsing); + +/* Sets the hash salt to use for internal hash calculations. + Helps in preventing DoS attacks based on predicting hash + function behavior. This must be called before parsing is started. + Returns 1 if successful, 0 when called after parsing has started. +*/ +XMLPARSEAPI(int) +XML_SetHashSalt(XML_Parser parser, + unsigned long hash_salt); + +/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then + XML_GetErrorCode returns information about the error. +*/ +XMLPARSEAPI(enum XML_Error) +XML_GetErrorCode(XML_Parser parser); + +/* These functions return information about the current parse + location. They may be called from any callback called to report + some parse event; in this case the location is the location of the + first of the sequence of characters that generated the event. When + called from callbacks generated by declarations in the document + prologue, the location identified isn't as neatly defined, but will + be within the relevant markup. When called outside of the callback + functions, the position indicated will be just past the last parse + event (regardless of whether there was an associated callback). + + They may also be called after returning from a call to XML_Parse + or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then + the location is the location of the character at which the error + was detected; otherwise the location is the location of the last + parse event, as described above. +*/ +XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser); +XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser); +XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser); + +/* Return the number of bytes in the current event. + Returns 0 if the event is in an internal entity. +*/ +XMLPARSEAPI(int) +XML_GetCurrentByteCount(XML_Parser parser); + +/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets + the integer pointed to by offset to the offset within this buffer + of the current parse position, and sets the integer pointed to by size + to the size of this buffer (the number of input bytes). Otherwise + returns a NULL pointer. Also returns a NULL pointer if a parse isn't + active. + + NOTE: The character pointer returned should not be used outside + the handler that makes the call. +*/ +XMLPARSEAPI(const char *) +XML_GetInputContext(XML_Parser parser, + int *offset, + int *size); + +/* For backwards compatibility with previous versions. */ +#define XML_GetErrorLineNumber XML_GetCurrentLineNumber +#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber +#define XML_GetErrorByteIndex XML_GetCurrentByteIndex + +/* Frees the content model passed to the element declaration handler */ +XMLPARSEAPI(void) +XML_FreeContentModel(XML_Parser parser, XML_Content *model); + +/* Exposing the memory handling functions used in Expat */ +XMLPARSEAPI(void *) +XML_ATTR_MALLOC +XML_ATTR_ALLOC_SIZE(2) +XML_MemMalloc(XML_Parser parser, size_t size); + +XMLPARSEAPI(void *) +XML_ATTR_ALLOC_SIZE(3) +XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); + +XMLPARSEAPI(void) +XML_MemFree(XML_Parser parser, void *ptr); + +/* Frees memory used by the parser. */ +XMLPARSEAPI(void) +XML_ParserFree(XML_Parser parser); + +/* Returns a string describing the error. */ +XMLPARSEAPI(const XML_LChar *) +XML_ErrorString(enum XML_Error code); + +/* Return a string containing the version number of this expat */ +XMLPARSEAPI(const XML_LChar *) +XML_ExpatVersion(void); + +typedef struct { + int major; + int minor; + int micro; +} XML_Expat_Version; + +/* Return an XML_Expat_Version structure containing numeric version + number information for this version of expat. +*/ +XMLPARSEAPI(XML_Expat_Version) +XML_ExpatVersionInfo(void); + +/* Added in Expat 1.95.5. */ +enum XML_FeatureEnum { + XML_FEATURE_END = 0, + XML_FEATURE_UNICODE, + XML_FEATURE_UNICODE_WCHAR_T, + XML_FEATURE_DTD, + XML_FEATURE_CONTEXT_BYTES, + XML_FEATURE_MIN_SIZE, + XML_FEATURE_SIZEOF_XML_CHAR, + XML_FEATURE_SIZEOF_XML_LCHAR, + XML_FEATURE_NS, + XML_FEATURE_LARGE_SIZE, + XML_FEATURE_ATTR_INFO + /* Additional features must be added to the end of this enum. */ +}; + +typedef struct { + enum XML_FeatureEnum feature; + const XML_LChar *name; + long int value; +} XML_Feature; + +XMLPARSEAPI(const XML_Feature *) +XML_GetFeatureList(void); + + +/* Expat follows the semantic versioning convention. + See http://semver.org. +*/ +#define XML_MAJOR_VERSION 2 +#define XML_MINOR_VERSION 2 +#define XML_MICRO_VERSION 0 + +#ifdef __cplusplus +} +#endif + +#endif /* not Expat_INCLUDED */ diff --git a/tools/sdk/include/expat/expat_config.h b/tools/sdk/include/expat/expat_config.h new file mode 100644 index 00000000..207d1a77 --- /dev/null +++ b/tools/sdk/include/expat/expat_config.h @@ -0,0 +1,103 @@ +/* expat_config.h. Generated from expat_config.h.in by configure. */ +/* expat_config.h.in. Generated from configure.ac by autoheader. */ + +/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ +#define BYTEORDER 1234 + +/* Define to 1 if you have the `bcopy' function. */ +#define HAVE_BCOPY 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `getpagesize' function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `memmove' function. */ +#define HAVE_MEMMOVE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "expat-bugs@libexpat.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "expat" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "expat 2.2.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "expat" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.2.0" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* whether byteorder is bigendian */ +/* #undef WORDS_BIGENDIAN */ + +/* Define to specify how much context to retain around the current parse + point. */ +#define XML_CONTEXT_BYTES 1024 + +/* Define to make parameter entity parsing functionality available. */ +#define XML_DTD 1 + +/* Define to make XML Namespaces functionality available. */ +#define XML_NS 1 + +/* Define to __FUNCTION__ or "" if `__func__' does not conform to ANSI C. */ +/* #undef __func__ */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to `long int' if does not define. */ +/* #undef off_t */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ diff --git a/tools/sdk/include/expat/expat_external.h b/tools/sdk/include/expat/expat_external.h new file mode 100644 index 00000000..aa08a2f8 --- /dev/null +++ b/tools/sdk/include/expat/expat_external.h @@ -0,0 +1,129 @@ +/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#ifndef Expat_External_INCLUDED +#define Expat_External_INCLUDED 1 + +/* External API definitions */ + +#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) +#define XML_USE_MSC_EXTENSIONS 1 +#endif + +/* Expat tries very hard to make the API boundary very specifically + defined. There are two macros defined to control this boundary; + each of these can be defined before including this header to + achieve some different behavior, but doing so it not recommended or + tested frequently. + + XMLCALL - The calling convention to use for all calls across the + "library boundary." This will default to cdecl, and + try really hard to tell the compiler that's what we + want. + + XMLIMPORT - Whatever magic is needed to note that a function is + to be imported from a dynamically loaded library + (.dll, .so, or .sl, depending on your platform). + + The XMLCALL macro was added in Expat 1.95.7. The only one which is + expected to be directly useful in client code is XMLCALL. + + Note that on at least some Unix versions, the Expat library must be + compiled with the cdecl calling convention as the default since + system headers may assume the cdecl convention. +*/ +#ifndef XMLCALL +#if defined(_MSC_VER) +#define XMLCALL __cdecl +#elif defined(__GNUC__) && defined(__i386) && !defined(__INTEL_COMPILER) +#define XMLCALL __attribute__((cdecl)) +#else +/* For any platform which uses this definition and supports more than + one calling convention, we need to extend this definition to + declare the convention used on that platform, if it's possible to + do so. + + If this is the case for your platform, please file a bug report + with information on how to identify your platform via the C + pre-processor and how to specify the same calling convention as the + platform's malloc() implementation. +*/ +#define XMLCALL +#endif +#endif /* not defined XMLCALL */ + + +#if !defined(XML_STATIC) && !defined(XMLIMPORT) +#ifndef XML_BUILDING_EXPAT +/* using Expat from an application */ + +#ifdef XML_USE_MSC_EXTENSIONS +#define XMLIMPORT __declspec(dllimport) +#endif + +#endif +#endif /* not defined XML_STATIC */ + +#if !defined(XMLIMPORT) && defined(__GNUC__) && (__GNUC__ >= 4) +#define XMLIMPORT __attribute__ ((visibility ("default"))) +#endif + +/* If we didn't define it above, define it away: */ +#ifndef XMLIMPORT +#define XMLIMPORT +#endif + +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)) +#define XML_ATTR_MALLOC __attribute__((__malloc__)) +#else +#define XML_ATTR_MALLOC +#endif + +#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) +#define XML_ATTR_ALLOC_SIZE(x) __attribute__((__alloc_size__(x))) +#else +#define XML_ATTR_ALLOC_SIZE(x) +#endif + +#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef XML_UNICODE_WCHAR_T +#define XML_UNICODE +#endif + +#ifdef XML_UNICODE /* Information is UTF-16 encoded. */ +#ifdef XML_UNICODE_WCHAR_T +typedef wchar_t XML_Char; +typedef wchar_t XML_LChar; +#else +typedef unsigned short XML_Char; +typedef char XML_LChar; +#endif /* XML_UNICODE_WCHAR_T */ +#else /* Information is UTF-8 encoded. */ +typedef char XML_Char; +typedef char XML_LChar; +#endif /* XML_UNICODE */ + +#ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */ +#if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 +typedef __int64 XML_Index; +typedef unsigned __int64 XML_Size; +#else +typedef long long XML_Index; +typedef unsigned long long XML_Size; +#endif +#else +typedef long XML_Index; +typedef unsigned long XML_Size; +#endif /* XML_LARGE_SIZE */ + +#ifdef __cplusplus +} +#endif + +#endif /* not Expat_External_INCLUDED */ diff --git a/tools/sdk/include/expat/iasciitab.h b/tools/sdk/include/expat/iasciitab.h new file mode 100644 index 00000000..24a1d5cc --- /dev/null +++ b/tools/sdk/include/expat/iasciitab.h @@ -0,0 +1,37 @@ +/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +/* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */ +/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, +/* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML, +/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, +/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, +/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, +/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, +/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, +/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, +/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, +/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, +/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, +/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, +/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, +/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, +/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, +/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, +/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, +/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, diff --git a/tools/sdk/include/expat/internal.h b/tools/sdk/include/expat/internal.h new file mode 100644 index 00000000..94cb98e1 --- /dev/null +++ b/tools/sdk/include/expat/internal.h @@ -0,0 +1,95 @@ +/* internal.h + + Internal definitions used by Expat. This is not needed to compile + client code. + + The following calling convention macros are defined for frequently + called functions: + + FASTCALL - Used for those internal functions that have a simple + body and a low number of arguments and local variables. + + PTRCALL - Used for functions called though function pointers. + + PTRFASTCALL - Like PTRCALL, but for low number of arguments. + + inline - Used for selected internal functions for which inlining + may improve performance on some platforms. + + Note: Use of these macros is based on judgement, not hard rules, + and therefore subject to change. +*/ + +#if defined(__GNUC__) && defined(__i386__) && !defined(__MINGW32__) +/* We'll use this version by default only where we know it helps. + + regparm() generates warnings on Solaris boxes. See SF bug #692878. + + Instability reported with egcs on a RedHat Linux 7.3. + Let's comment out: + #define FASTCALL __attribute__((stdcall, regparm(3))) + and let's try this: +*/ +#define FASTCALL __attribute__((regparm(3))) +#define PTRFASTCALL __attribute__((regparm(3))) +#endif + +/* Using __fastcall seems to have an unexpected negative effect under + MS VC++, especially for function pointers, so we won't use it for + now on that platform. It may be reconsidered for a future release + if it can be made more effective. + Likely reason: __fastcall on Windows is like stdcall, therefore + the compiler cannot perform stack optimizations for call clusters. +*/ + +/* Make sure all of these are defined if they aren't already. */ + +#ifndef FASTCALL +#define FASTCALL +#endif + +#ifndef PTRCALL +#define PTRCALL +#endif + +#ifndef PTRFASTCALL +#define PTRFASTCALL +#endif + +#ifndef XML_MIN_SIZE +#if !defined(__cplusplus) && !defined(inline) +#ifdef __GNUC__ +#define inline __inline +#endif /* __GNUC__ */ +#endif +#endif /* XML_MIN_SIZE */ + +#ifdef __cplusplus +#define inline inline +#else +#ifndef inline +#define inline +#endif +#endif + +#ifndef UNUSED_P +# ifdef __GNUC__ +# define UNUSED_P(p) UNUSED_ ## p __attribute__((__unused__)) +# else +# define UNUSED_P(p) UNUSED_ ## p +# endif +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +void +align_limit_to_full_utf8_characters(const char * from, const char ** fromLimRef); + + +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/include/expat/latin1tab.h b/tools/sdk/include/expat/latin1tab.h new file mode 100644 index 00000000..53c25d76 --- /dev/null +++ b/tools/sdk/include/expat/latin1tab.h @@ -0,0 +1,36 @@ +/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +/* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, +/* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME, +/* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, +/* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, +/* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, +/* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, diff --git a/tools/sdk/include/expat/minicheck.h b/tools/sdk/include/expat/minicheck.h new file mode 100644 index 00000000..d54801d1 --- /dev/null +++ b/tools/sdk/include/expat/minicheck.h @@ -0,0 +1,95 @@ +/* Miniature re-implementation of the "check" library. + * + * This is intended to support just enough of check to run the Expat + * tests. This interface is based entirely on the portion of the + * check library being used. + * + * This is *source* compatible, but not necessary *link* compatible. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#define CK_NOFORK 0 +#define CK_FORK 1 + +#define CK_SILENT 0 +#define CK_NORMAL 1 +#define CK_VERBOSE 2 + +/* Workaround for Microsoft's compiler and Tru64 Unix systems where the + C compiler has a working __func__, but the C++ compiler only has a + working __FUNCTION__. This could be fixed in configure.in, but it's + not worth it right now. */ +#if defined (_MSC_VER) || (defined(__osf__) && defined(__cplusplus)) +#define __func__ __FUNCTION__ +#endif + +/* ISO C90 does not support '__func__' predefined identifier */ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ < 199901) +# define __func__ "(unknown)" +#endif + +#define START_TEST(testname) static void testname(void) { \ + _check_set_test_info(__func__, __FILE__, __LINE__); \ + { +#define END_TEST + +#define fail(msg) _fail_unless(0, __FILE__, __LINE__, msg) + +typedef void (*tcase_setup_function)(void); +typedef void (*tcase_teardown_function)(void); +typedef void (*tcase_test_function)(void); + +typedef struct SRunner SRunner; +typedef struct Suite Suite; +typedef struct TCase TCase; + +struct SRunner { + Suite *suite; + int nchecks; + int nfailures; +}; + +struct Suite { + const char *name; + TCase *tests; +}; + +struct TCase { + const char *name; + tcase_setup_function setup; + tcase_teardown_function teardown; + tcase_test_function *tests; + int ntests; + int allocated; + TCase *next_tcase; +}; + + +/* Internal helper. */ +void _check_set_test_info(char const *function, + char const *filename, int lineno); + + +/* + * Prototypes for the actual implementation. + */ + +void _fail_unless(int condition, const char *file, int line, const char *msg); +Suite *suite_create(const char *name); +TCase *tcase_create(const char *name); +void suite_add_tcase(Suite *suite, TCase *tc); +void tcase_add_checked_fixture(TCase *, + tcase_setup_function, + tcase_teardown_function); +void tcase_add_test(TCase *tc, tcase_test_function test); +SRunner *srunner_create(Suite *suite); +void srunner_run_all(SRunner *runner, int verbosity); +int srunner_ntests_failed(SRunner *runner); +void srunner_free(SRunner *runner); + +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/include/expat/nametab.h b/tools/sdk/include/expat/nametab.h new file mode 100644 index 00000000..b05e62c7 --- /dev/null +++ b/tools/sdk/include/expat/nametab.h @@ -0,0 +1,150 @@ +static const unsigned namingBitmap[] = { +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, +0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE, +0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF, +0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF, +0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, +0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, +0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, +0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, +0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, +0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF, +0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000, +0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060, +0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003, +0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003, +0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, +0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001, +0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003, +0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000, +0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003, +0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003, +0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000, +0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000, +0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF, +0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB, +0x40000000, 0xF580C900, 0x00000007, 0x02010800, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, +0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, +0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, +0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, +0x00000000, 0x00004C40, 0x00000000, 0x00000000, +0x00000007, 0x00000000, 0x00000000, 0x00000000, +0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF, +0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF, +0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, +0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, +0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, +0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE, +0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF, +0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, +0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000, +0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003, +0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, +0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, +0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, +0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, +0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF, +0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF, +0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF, +0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF, +0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF, +0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0, +0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1, +0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3, +0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80, +0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3, +0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3, +0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000, +0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000, +0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF, +0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x1FFF0000, 0x00000002, +0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, +0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF, +}; +static const unsigned char nmstrtPages[] = { +0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, +0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, +0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, +0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static const unsigned char namePages[] = { +0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00, +0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, +0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, +0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; diff --git a/tools/sdk/include/expat/utf8tab.h b/tools/sdk/include/expat/utf8tab.h new file mode 100644 index 00000000..7bb3e776 --- /dev/null +++ b/tools/sdk/include/expat/utf8tab.h @@ -0,0 +1,37 @@ +/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + + +/* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, +/* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, +/* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, +/* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, +/* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4, +/* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM, diff --git a/tools/sdk/include/expat/xmlrole.h b/tools/sdk/include/expat/xmlrole.h new file mode 100644 index 00000000..4dd9f06f --- /dev/null +++ b/tools/sdk/include/expat/xmlrole.h @@ -0,0 +1,114 @@ +/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#ifndef XmlRole_INCLUDED +#define XmlRole_INCLUDED 1 + +#ifdef __VMS +/* 0 1 2 3 0 1 2 3 + 1234567890123456789012345678901 1234567890123456789012345678901 */ +#define XmlPrologStateInitExternalEntity XmlPrologStateInitExternalEnt +#endif + +#include "xmltok.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + XML_ROLE_ERROR = -1, + XML_ROLE_NONE = 0, + XML_ROLE_XML_DECL, + XML_ROLE_INSTANCE_START, + XML_ROLE_DOCTYPE_NONE, + XML_ROLE_DOCTYPE_NAME, + XML_ROLE_DOCTYPE_SYSTEM_ID, + XML_ROLE_DOCTYPE_PUBLIC_ID, + XML_ROLE_DOCTYPE_INTERNAL_SUBSET, + XML_ROLE_DOCTYPE_CLOSE, + XML_ROLE_GENERAL_ENTITY_NAME, + XML_ROLE_PARAM_ENTITY_NAME, + XML_ROLE_ENTITY_NONE, + XML_ROLE_ENTITY_VALUE, + XML_ROLE_ENTITY_SYSTEM_ID, + XML_ROLE_ENTITY_PUBLIC_ID, + XML_ROLE_ENTITY_COMPLETE, + XML_ROLE_ENTITY_NOTATION_NAME, + XML_ROLE_NOTATION_NONE, + XML_ROLE_NOTATION_NAME, + XML_ROLE_NOTATION_SYSTEM_ID, + XML_ROLE_NOTATION_NO_SYSTEM_ID, + XML_ROLE_NOTATION_PUBLIC_ID, + XML_ROLE_ATTRIBUTE_NAME, + XML_ROLE_ATTRIBUTE_TYPE_CDATA, + XML_ROLE_ATTRIBUTE_TYPE_ID, + XML_ROLE_ATTRIBUTE_TYPE_IDREF, + XML_ROLE_ATTRIBUTE_TYPE_IDREFS, + XML_ROLE_ATTRIBUTE_TYPE_ENTITY, + XML_ROLE_ATTRIBUTE_TYPE_ENTITIES, + XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN, + XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS, + XML_ROLE_ATTRIBUTE_ENUM_VALUE, + XML_ROLE_ATTRIBUTE_NOTATION_VALUE, + XML_ROLE_ATTLIST_NONE, + XML_ROLE_ATTLIST_ELEMENT_NAME, + XML_ROLE_IMPLIED_ATTRIBUTE_VALUE, + XML_ROLE_REQUIRED_ATTRIBUTE_VALUE, + XML_ROLE_DEFAULT_ATTRIBUTE_VALUE, + XML_ROLE_FIXED_ATTRIBUTE_VALUE, + XML_ROLE_ELEMENT_NONE, + XML_ROLE_ELEMENT_NAME, + XML_ROLE_CONTENT_ANY, + XML_ROLE_CONTENT_EMPTY, + XML_ROLE_CONTENT_PCDATA, + XML_ROLE_GROUP_OPEN, + XML_ROLE_GROUP_CLOSE, + XML_ROLE_GROUP_CLOSE_REP, + XML_ROLE_GROUP_CLOSE_OPT, + XML_ROLE_GROUP_CLOSE_PLUS, + XML_ROLE_GROUP_CHOICE, + XML_ROLE_GROUP_SEQUENCE, + XML_ROLE_CONTENT_ELEMENT, + XML_ROLE_CONTENT_ELEMENT_REP, + XML_ROLE_CONTENT_ELEMENT_OPT, + XML_ROLE_CONTENT_ELEMENT_PLUS, + XML_ROLE_PI, + XML_ROLE_COMMENT, +#ifdef XML_DTD + XML_ROLE_TEXT_DECL, + XML_ROLE_IGNORE_SECT, + XML_ROLE_INNER_PARAM_ENTITY_REF, +#endif /* XML_DTD */ + XML_ROLE_PARAM_ENTITY_REF +}; + +typedef struct prolog_state { + int (PTRCALL *handler) (struct prolog_state *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc); + unsigned level; + int role_none; +#ifdef XML_DTD + unsigned includeLevel; + int documentEntity; + int inEntityValue; +#endif /* XML_DTD */ +} PROLOG_STATE; + +void XmlPrologStateInit(PROLOG_STATE *); +#ifdef XML_DTD +void XmlPrologStateInitExternalEntity(PROLOG_STATE *); +#endif /* XML_DTD */ + +#define XmlTokenRole(state, tok, ptr, end, enc) \ + (((state)->handler)(state, tok, ptr, end, enc)) + +#ifdef __cplusplus +} +#endif + +#endif /* not XmlRole_INCLUDED */ diff --git a/tools/sdk/include/expat/xmltok.h b/tools/sdk/include/expat/xmltok.h new file mode 100644 index 00000000..752007e8 --- /dev/null +++ b/tools/sdk/include/expat/xmltok.h @@ -0,0 +1,322 @@ +/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#ifndef XmlTok_INCLUDED +#define XmlTok_INCLUDED 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* The following token may be returned by XmlContentTok */ +#define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be + start of illegal ]]> sequence */ +/* The following tokens may be returned by both XmlPrologTok and + XmlContentTok. +*/ +#define XML_TOK_NONE -4 /* The string to be scanned is empty */ +#define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan; + might be part of CRLF sequence */ +#define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */ +#define XML_TOK_PARTIAL -1 /* only part of a token */ +#define XML_TOK_INVALID 0 + +/* The following tokens are returned by XmlContentTok; some are also + returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok. +*/ +#define XML_TOK_START_TAG_WITH_ATTS 1 +#define XML_TOK_START_TAG_NO_ATTS 2 +#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag */ +#define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4 +#define XML_TOK_END_TAG 5 +#define XML_TOK_DATA_CHARS 6 +#define XML_TOK_DATA_NEWLINE 7 +#define XML_TOK_CDATA_SECT_OPEN 8 +#define XML_TOK_ENTITY_REF 9 +#define XML_TOK_CHAR_REF 10 /* numeric character reference */ + +/* The following tokens may be returned by both XmlPrologTok and + XmlContentTok. +*/ +#define XML_TOK_PI 11 /* processing instruction */ +#define XML_TOK_XML_DECL 12 /* XML decl or text decl */ +#define XML_TOK_COMMENT 13 +#define XML_TOK_BOM 14 /* Byte order mark */ + +/* The following tokens are returned only by XmlPrologTok */ +#define XML_TOK_PROLOG_S 15 +#define XML_TOK_DECL_OPEN 16 /* */ +#define XML_TOK_NAME 18 +#define XML_TOK_NMTOKEN 19 +#define XML_TOK_POUND_NAME 20 /* #name */ +#define XML_TOK_OR 21 /* | */ +#define XML_TOK_PERCENT 22 +#define XML_TOK_OPEN_PAREN 23 +#define XML_TOK_CLOSE_PAREN 24 +#define XML_TOK_OPEN_BRACKET 25 +#define XML_TOK_CLOSE_BRACKET 26 +#define XML_TOK_LITERAL 27 +#define XML_TOK_PARAM_ENTITY_REF 28 +#define XML_TOK_INSTANCE_START 29 + +/* The following occur only in element type declarations */ +#define XML_TOK_NAME_QUESTION 30 /* name? */ +#define XML_TOK_NAME_ASTERISK 31 /* name* */ +#define XML_TOK_NAME_PLUS 32 /* name+ */ +#define XML_TOK_COND_SECT_OPEN 33 /* */ +#define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */ +#define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */ +#define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */ +#define XML_TOK_COMMA 38 + +/* The following token is returned only by XmlAttributeValueTok */ +#define XML_TOK_ATTRIBUTE_VALUE_S 39 + +/* The following token is returned only by XmlCdataSectionTok */ +#define XML_TOK_CDATA_SECT_CLOSE 40 + +/* With namespace processing this is returned by XmlPrologTok for a + name with a colon. +*/ +#define XML_TOK_PREFIXED_NAME 41 + +#ifdef XML_DTD +#define XML_TOK_IGNORE_SECT 42 +#endif /* XML_DTD */ + +#ifdef XML_DTD +#define XML_N_STATES 4 +#else /* not XML_DTD */ +#define XML_N_STATES 3 +#endif /* not XML_DTD */ + +#define XML_PROLOG_STATE 0 +#define XML_CONTENT_STATE 1 +#define XML_CDATA_SECTION_STATE 2 +#ifdef XML_DTD +#define XML_IGNORE_SECTION_STATE 3 +#endif /* XML_DTD */ + +#define XML_N_LITERAL_TYPES 2 +#define XML_ATTRIBUTE_VALUE_LITERAL 0 +#define XML_ENTITY_VALUE_LITERAL 1 + +/* The size of the buffer passed to XmlUtf8Encode must be at least this. */ +#define XML_UTF8_ENCODE_MAX 4 +/* The size of the buffer passed to XmlUtf16Encode must be at least this. */ +#define XML_UTF16_ENCODE_MAX 2 + +typedef struct position { + /* first line and first column are 0 not 1 */ + XML_Size lineNumber; + XML_Size columnNumber; +} POSITION; + +typedef struct { + const char *name; + const char *valuePtr; + const char *valueEnd; + char normalized; +} ATTRIBUTE; + +struct encoding; +typedef struct encoding ENCODING; + +typedef int (PTRCALL *SCANNER)(const ENCODING *, + const char *, + const char *, + const char **); + +enum XML_Convert_Result { + XML_CONVERT_COMPLETED = 0, + XML_CONVERT_INPUT_INCOMPLETE = 1, + XML_CONVERT_OUTPUT_EXHAUSTED = 2 /* and therefore potentially input remaining as well */ +}; + +struct encoding { + SCANNER scanners[XML_N_STATES]; + SCANNER literalScanners[XML_N_LITERAL_TYPES]; + int (PTRCALL *sameName)(const ENCODING *, + const char *, + const char *); + int (PTRCALL *nameMatchesAscii)(const ENCODING *, + const char *, + const char *, + const char *); + int (PTRFASTCALL *nameLength)(const ENCODING *, const char *); + const char *(PTRFASTCALL *skipS)(const ENCODING *, const char *); + int (PTRCALL *getAtts)(const ENCODING *enc, + const char *ptr, + int attsMax, + ATTRIBUTE *atts); + int (PTRFASTCALL *charRefNumber)(const ENCODING *enc, const char *ptr); + int (PTRCALL *predefinedEntityName)(const ENCODING *, + const char *, + const char *); + void (PTRCALL *updatePosition)(const ENCODING *, + const char *ptr, + const char *end, + POSITION *); + int (PTRCALL *isPublicId)(const ENCODING *enc, + const char *ptr, + const char *end, + const char **badPtr); + enum XML_Convert_Result (PTRCALL *utf8Convert)(const ENCODING *enc, + const char **fromP, + const char *fromLim, + char **toP, + const char *toLim); + enum XML_Convert_Result (PTRCALL *utf16Convert)(const ENCODING *enc, + const char **fromP, + const char *fromLim, + unsigned short **toP, + const unsigned short *toLim); + int minBytesPerChar; + char isUtf8; + char isUtf16; +}; + +/* Scan the string starting at ptr until the end of the next complete + token, but do not scan past eptr. Return an integer giving the + type of token. + + Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set. + + Return XML_TOK_PARTIAL when the string does not contain a complete + token; nextTokPtr will not be set. + + Return XML_TOK_INVALID when the string does not start a valid + token; nextTokPtr will be set to point to the character which made + the token invalid. + + Otherwise the string starts with a valid token; nextTokPtr will be + set to point to the character following the end of that token. + + Each data character counts as a single token, but adjacent data + characters may be returned together. Similarly for characters in + the prolog outside literals, comments and processing instructions. +*/ + + +#define XmlTok(enc, state, ptr, end, nextTokPtr) \ + (((enc)->scanners[state])(enc, ptr, end, nextTokPtr)) + +#define XmlPrologTok(enc, ptr, end, nextTokPtr) \ + XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr) + +#define XmlContentTok(enc, ptr, end, nextTokPtr) \ + XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr) + +#define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \ + XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr) + +#ifdef XML_DTD + +#define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \ + XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr) + +#endif /* XML_DTD */ + +/* This is used for performing a 2nd-level tokenization on the content + of a literal that has already been returned by XmlTok. +*/ +#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \ + (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr)) + +#define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \ + XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr) + +#define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \ + XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr) + +#define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2)) + +#define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \ + (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2)) + +#define XmlNameLength(enc, ptr) \ + (((enc)->nameLength)(enc, ptr)) + +#define XmlSkipS(enc, ptr) \ + (((enc)->skipS)(enc, ptr)) + +#define XmlGetAttributes(enc, ptr, attsMax, atts) \ + (((enc)->getAtts)(enc, ptr, attsMax, atts)) + +#define XmlCharRefNumber(enc, ptr) \ + (((enc)->charRefNumber)(enc, ptr)) + +#define XmlPredefinedEntityName(enc, ptr, end) \ + (((enc)->predefinedEntityName)(enc, ptr, end)) + +#define XmlUpdatePosition(enc, ptr, end, pos) \ + (((enc)->updatePosition)(enc, ptr, end, pos)) + +#define XmlIsPublicId(enc, ptr, end, badPtr) \ + (((enc)->isPublicId)(enc, ptr, end, badPtr)) + +#define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \ + (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim)) + +#define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \ + (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim)) + +typedef struct { + ENCODING initEnc; + const ENCODING **encPtr; +} INIT_ENCODING; + +int XmlParseXmlDecl(int isGeneralTextEntity, + const ENCODING *enc, + const char *ptr, + const char *end, + const char **badPtr, + const char **versionPtr, + const char **versionEndPtr, + const char **encodingNamePtr, + const ENCODING **namedEncodingPtr, + int *standalonePtr); + +int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name); +const ENCODING *XmlGetUtf8InternalEncoding(void); +const ENCODING *XmlGetUtf16InternalEncoding(void); +int FASTCALL XmlUtf8Encode(int charNumber, char *buf); +int FASTCALL XmlUtf16Encode(int charNumber, unsigned short *buf); +int XmlSizeOfUnknownEncoding(void); + + +typedef int (XMLCALL *CONVERTER) (void *userData, const char *p); + +ENCODING * +XmlInitUnknownEncoding(void *mem, + int *table, + CONVERTER convert, + void *userData); + +int XmlParseXmlDeclNS(int isGeneralTextEntity, + const ENCODING *enc, + const char *ptr, + const char *end, + const char **badPtr, + const char **versionPtr, + const char **versionEndPtr, + const char **encodingNamePtr, + const ENCODING **namedEncodingPtr, + int *standalonePtr); + +int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name); +const ENCODING *XmlGetUtf8InternalEncodingNS(void); +const ENCODING *XmlGetUtf16InternalEncodingNS(void); +ENCODING * +XmlInitUnknownEncodingNS(void *mem, + int *table, + CONVERTER convert, + void *userData); +#ifdef __cplusplus +} +#endif + +#endif /* not XmlTok_INCLUDED */ diff --git a/tools/sdk/include/expat/xmltok_impl.h b/tools/sdk/include/expat/xmltok_impl.h new file mode 100644 index 00000000..da0ea60a --- /dev/null +++ b/tools/sdk/include/expat/xmltok_impl.h @@ -0,0 +1,46 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +enum { + BT_NONXML, + BT_MALFORM, + BT_LT, + BT_AMP, + BT_RSQB, + BT_LEAD2, + BT_LEAD3, + BT_LEAD4, + BT_TRAIL, + BT_CR, + BT_LF, + BT_GT, + BT_QUOT, + BT_APOS, + BT_EQUALS, + BT_QUEST, + BT_EXCL, + BT_SOL, + BT_SEMI, + BT_NUM, + BT_LSQB, + BT_S, + BT_NMSTRT, + BT_COLON, + BT_HEX, + BT_DIGIT, + BT_NAME, + BT_MINUS, + BT_OTHER, /* known not to be a name or name start character */ + BT_NONASCII, /* might be a name or name start character */ + BT_PERCNT, + BT_LPAR, + BT_RPAR, + BT_AST, + BT_PLUS, + BT_COMMA, + BT_VERBAR +}; + +#include diff --git a/tools/sdk/include/freertos/freertos/FreeRTOS.h b/tools/sdk/include/freertos/freertos/FreeRTOS.h new file mode 100644 index 00000000..04b39b65 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/FreeRTOS.h @@ -0,0 +1,799 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef INC_FREERTOS_H +#define INC_FREERTOS_H + +/* + * Include the generic headers required for the FreeRTOS port being used. + */ +#include + +/* + * If stdint.h cannot be located then: + * + If using GCC ensure the -nostdint options is *not* being used. + * + Ensure the project's include path includes the directory in which your + * compiler stores stdint.h. + * + Set any compiler options necessary for it to support C99, as technically + * stdint.h is only mandatory with C99 (FreeRTOS does not require C99 in any + * other way). + * + The FreeRTOS download includes a simple stdint.h definition that can be + * used in cases where none is provided by the compiler. The files only + * contains the typedefs required to build FreeRTOS. Read the instructions + * in FreeRTOS/source/stdint.readme for more information. + */ +#include /* READ COMMENT ABOVE. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Application specific configuration options. */ +#include "FreeRTOSConfig.h" + +/* Basic FreeRTOS definitions. */ +#include "projdefs.h" + +/* Definitions specific to the port being used. */ +#include "portable.h" + +/* + * Check all the required application specific macros have been defined. + * These macros are application specific and (as downloaded) are defined + * within FreeRTOSConfig.h. + */ + +#ifndef configMINIMAL_STACK_SIZE + #error Missing definition: configMINIMAL_STACK_SIZE must be defined in FreeRTOSConfig.h. configMINIMAL_STACK_SIZE defines the size (in words) of the stack allocated to the idle task. Refer to the demo project provided for your port for a suitable value. +#endif + +#ifndef configMAX_PRIORITIES + #error Missing definition: configMAX_PRIORITIES must be defined in FreeRTOSConfig.h. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef configUSE_PREEMPTION + #error Missing definition: configUSE_PREEMPTION must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef configUSE_IDLE_HOOK + #error Missing definition: configUSE_IDLE_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef configUSE_TICK_HOOK + #error Missing definition: configUSE_TICK_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef configUSE_CO_ROUTINES + #error Missing definition: configUSE_CO_ROUTINES must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef INCLUDE_vTaskPrioritySet + #error Missing definition: INCLUDE_vTaskPrioritySet must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef INCLUDE_uxTaskPriorityGet + #error Missing definition: INCLUDE_uxTaskPriorityGet must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef INCLUDE_vTaskDelete + #error Missing definition: INCLUDE_vTaskDelete must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef INCLUDE_vTaskSuspend + #error Missing definition: INCLUDE_vTaskSuspend must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef INCLUDE_vTaskDelayUntil + #error Missing definition: INCLUDE_vTaskDelayUntil must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef INCLUDE_vTaskDelay + #error Missing definition: INCLUDE_vTaskDelay must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef configUSE_16_BIT_TICKS + #error Missing definition: configUSE_16_BIT_TICKS must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#if configUSE_CO_ROUTINES != 0 + #ifndef configMAX_CO_ROUTINE_PRIORITIES + #error configMAX_CO_ROUTINE_PRIORITIES must be greater than or equal to 1. + #endif +#endif + +#ifndef configMAX_PRIORITIES + #error configMAX_PRIORITIES must be defined to be greater than or equal to 1. +#endif + +#ifndef INCLUDE_xTaskGetIdleTaskHandle + #define INCLUDE_xTaskGetIdleTaskHandle 0 +#endif + +#ifndef INCLUDE_xTimerGetTimerDaemonTaskHandle + #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 +#endif + +#ifndef INCLUDE_xQueueGetMutexHolder + #define INCLUDE_xQueueGetMutexHolder 0 +#endif + +#ifndef INCLUDE_xSemaphoreGetMutexHolder + #define INCLUDE_xSemaphoreGetMutexHolder INCLUDE_xQueueGetMutexHolder +#endif + +#ifndef INCLUDE_pcTaskGetTaskName +#if ( configENABLE_MEMORY_DEBUG == 1) + #define INCLUDE_pcTaskGetTaskName 1 +#else + #define INCLUDE_pcTaskGetTaskName 0 +#endif +#endif + +#ifndef configUSE_APPLICATION_TASK_TAG + #define configUSE_APPLICATION_TASK_TAG 0 +#endif + +#ifndef INCLUDE_uxTaskGetStackHighWaterMark + #define INCLUDE_uxTaskGetStackHighWaterMark 0 +#endif + +#ifndef INCLUDE_eTaskGetState + #define INCLUDE_eTaskGetState 0 +#endif + +#ifndef configUSE_RECURSIVE_MUTEXES + #define configUSE_RECURSIVE_MUTEXES 0 +#endif + +#ifndef configUSE_MUTEXES + #define configUSE_MUTEXES 0 +#endif + +#ifndef configUSE_TIMERS + #define configUSE_TIMERS 0 +#endif + +#ifndef configUSE_COUNTING_SEMAPHORES + #define configUSE_COUNTING_SEMAPHORES 0 +#endif + +#ifndef configUSE_ALTERNATIVE_API + #define configUSE_ALTERNATIVE_API 0 +#endif + +#ifndef portCRITICAL_NESTING_IN_TCB + #define portCRITICAL_NESTING_IN_TCB 0 +#endif + +#ifndef configMAX_TASK_NAME_LEN + #define configMAX_TASK_NAME_LEN 16 +#endif + +#ifndef configIDLE_SHOULD_YIELD + #define configIDLE_SHOULD_YIELD 1 +#endif + +#if configMAX_TASK_NAME_LEN < 1 + #error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h +#endif + +#ifndef INCLUDE_xTaskResumeFromISR + #define INCLUDE_xTaskResumeFromISR 1 +#endif + +#ifndef INCLUDE_xEventGroupSetBitFromISR + #define INCLUDE_xEventGroupSetBitFromISR 0 +#endif + +#ifndef INCLUDE_xTimerPendFunctionCall + #define INCLUDE_xTimerPendFunctionCall 0 +#endif + +#ifndef configASSERT + #define configASSERT( x ) + #define configASSERT_DEFINED 0 +#else + #define configASSERT_DEFINED 1 +#endif + +/* The timers module relies on xTaskGetSchedulerState(). */ +#if configUSE_TIMERS == 1 + + #ifndef configTIMER_TASK_PRIORITY + #error If configUSE_TIMERS is set to 1 then configTIMER_TASK_PRIORITY must also be defined. + #endif /* configTIMER_TASK_PRIORITY */ + + #ifndef configTIMER_QUEUE_LENGTH + #error If configUSE_TIMERS is set to 1 then configTIMER_QUEUE_LENGTH must also be defined. + #endif /* configTIMER_QUEUE_LENGTH */ + + #ifndef configTIMER_TASK_STACK_DEPTH + #error If configUSE_TIMERS is set to 1 then configTIMER_TASK_STACK_DEPTH must also be defined. + #endif /* configTIMER_TASK_STACK_DEPTH */ + +#endif /* configUSE_TIMERS */ + +#ifndef INCLUDE_xTaskGetSchedulerState + #define INCLUDE_xTaskGetSchedulerState 0 +#endif + +#ifndef INCLUDE_xTaskGetCurrentTaskHandle + #define INCLUDE_xTaskGetCurrentTaskHandle 0 +#endif + + +#ifndef portSET_INTERRUPT_MASK_FROM_ISR + #define portSET_INTERRUPT_MASK_FROM_ISR() 0 +#endif + +#ifndef portCLEAR_INTERRUPT_MASK_FROM_ISR + #define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue ) ( void ) uxSavedStatusValue +#endif + +#ifndef portCLEAN_UP_TCB + #define portCLEAN_UP_TCB( pxTCB ) ( void ) pxTCB +#endif + +#ifndef portPRE_TASK_DELETE_HOOK + #define portPRE_TASK_DELETE_HOOK( pvTaskToDelete, pxYieldPending ) +#endif + +#ifndef portSETUP_TCB + #define portSETUP_TCB( pxTCB ) ( void ) pxTCB +#endif + +#ifndef configQUEUE_REGISTRY_SIZE + #define configQUEUE_REGISTRY_SIZE 0U +#endif + +#if ( configQUEUE_REGISTRY_SIZE < 1 ) + #define vQueueAddToRegistry( xQueue, pcName ) + #define vQueueUnregisterQueue( xQueue ) +#endif + +#ifndef portPOINTER_SIZE_TYPE + #define portPOINTER_SIZE_TYPE uint32_t +#endif + +/* Remove any unused trace macros. */ +#ifndef traceSTART + /* Used to perform any necessary initialisation - for example, open a file + into which trace is to be written. */ + #define traceSTART() +#endif + +#ifndef traceEND + /* Use to close a trace, for example close a file into which trace has been + written. */ + #define traceEND() +#endif + +#ifndef traceTASK_SWITCHED_IN + /* Called after a task has been selected to run. pxCurrentTCB holds a pointer + to the task control block of the selected task. */ + #define traceTASK_SWITCHED_IN() +#endif + +#ifndef traceINCREASE_TICK_COUNT + /* Called before stepping the tick count after waking from tickless idle + sleep. */ + #define traceINCREASE_TICK_COUNT( x ) +#endif + +#ifndef traceLOW_POWER_IDLE_BEGIN + /* Called immediately before entering tickless idle. */ + #define traceLOW_POWER_IDLE_BEGIN() +#endif + +#ifndef traceLOW_POWER_IDLE_END + /* Called when returning to the Idle task after a tickless idle. */ + #define traceLOW_POWER_IDLE_END() +#endif + +#ifndef traceTASK_SWITCHED_OUT + /* Called before a task has been selected to run. pxCurrentTCB holds a pointer + to the task control block of the task being switched out. */ + #define traceTASK_SWITCHED_OUT() +#endif + +#ifndef traceTASK_PRIORITY_INHERIT + /* Called when a task attempts to take a mutex that is already held by a + lower priority task. pxTCBOfMutexHolder is a pointer to the TCB of the task + that holds the mutex. uxInheritedPriority is the priority the mutex holder + will inherit (the priority of the task that is attempting to obtain the + muted. */ + #define traceTASK_PRIORITY_INHERIT( pxTCBOfMutexHolder, uxInheritedPriority ) +#endif + +#ifndef traceTASK_PRIORITY_DISINHERIT + /* Called when a task releases a mutex, the holding of which had resulted in + the task inheriting the priority of a higher priority task. + pxTCBOfMutexHolder is a pointer to the TCB of the task that is releasing the + mutex. uxOriginalPriority is the task's configured (base) priority. */ + #define traceTASK_PRIORITY_DISINHERIT( pxTCBOfMutexHolder, uxOriginalPriority ) +#endif + +#ifndef traceBLOCKING_ON_QUEUE_RECEIVE + /* Task is about to block because it cannot read from a + queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore + upon which the read was attempted. pxCurrentTCB points to the TCB of the + task that attempted the read. */ + #define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue ) +#endif + +#ifndef traceBLOCKING_ON_QUEUE_SEND + /* Task is about to block because it cannot write to a + queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore + upon which the write was attempted. pxCurrentTCB points to the TCB of the + task that attempted the write. */ + #define traceBLOCKING_ON_QUEUE_SEND( pxQueue ) +#endif + +#ifndef configCHECK_FOR_STACK_OVERFLOW + #define configCHECK_FOR_STACK_OVERFLOW 0 +#endif + +/* The following event macros are embedded in the kernel API calls. */ + +#ifndef traceMOVED_TASK_TO_READY_STATE + #define traceMOVED_TASK_TO_READY_STATE( pxTCB ) +#endif + +#ifndef traceQUEUE_CREATE + #define traceQUEUE_CREATE( pxNewQueue ) +#endif + +#ifndef traceQUEUE_CREATE_FAILED + #define traceQUEUE_CREATE_FAILED( ucQueueType ) +#endif + +#ifndef traceCREATE_MUTEX + #define traceCREATE_MUTEX( pxNewQueue ) +#endif + +#ifndef traceCREATE_MUTEX_FAILED + #define traceCREATE_MUTEX_FAILED() +#endif + +#ifndef traceGIVE_MUTEX_RECURSIVE + #define traceGIVE_MUTEX_RECURSIVE( pxMutex ) +#endif + +#ifndef traceGIVE_MUTEX_RECURSIVE_FAILED + #define traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex ) +#endif + +#ifndef traceTAKE_MUTEX_RECURSIVE + #define traceTAKE_MUTEX_RECURSIVE( pxMutex ) +#endif + +#ifndef traceTAKE_MUTEX_RECURSIVE_FAILED + #define traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex ) +#endif + +#ifndef traceCREATE_COUNTING_SEMAPHORE + #define traceCREATE_COUNTING_SEMAPHORE() +#endif + +#ifndef traceCREATE_COUNTING_SEMAPHORE_FAILED + #define traceCREATE_COUNTING_SEMAPHORE_FAILED() +#endif + +#ifndef traceQUEUE_SEND + #define traceQUEUE_SEND( pxQueue ) +#endif + +#ifndef traceQUEUE_SEND_FAILED + #define traceQUEUE_SEND_FAILED( pxQueue ) +#endif + +#ifndef traceQUEUE_RECEIVE + #define traceQUEUE_RECEIVE( pxQueue ) +#endif + +#ifndef traceQUEUE_PEEK + #define traceQUEUE_PEEK( pxQueue ) +#endif + +#ifndef traceQUEUE_PEEK_FROM_ISR + #define traceQUEUE_PEEK_FROM_ISR( pxQueue ) +#endif + +#ifndef traceQUEUE_RECEIVE_FAILED + #define traceQUEUE_RECEIVE_FAILED( pxQueue ) +#endif + +#ifndef traceQUEUE_SEND_FROM_ISR + #define traceQUEUE_SEND_FROM_ISR( pxQueue ) +#endif + +#ifndef traceQUEUE_SEND_FROM_ISR_FAILED + #define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ) +#endif + +#ifndef traceQUEUE_RECEIVE_FROM_ISR + #define traceQUEUE_RECEIVE_FROM_ISR( pxQueue ) +#endif + +#ifndef traceQUEUE_RECEIVE_FROM_ISR_FAILED + #define traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue ) +#endif + +#ifndef traceQUEUE_PEEK_FROM_ISR_FAILED + #define traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue ) +#endif + +#ifndef traceQUEUE_DELETE + #define traceQUEUE_DELETE( pxQueue ) +#endif + +#ifndef traceTASK_CREATE + #define traceTASK_CREATE( pxNewTCB ) +#endif + +#ifndef traceTASK_CREATE_FAILED + #define traceTASK_CREATE_FAILED() +#endif + +#ifndef traceTASK_DELETE + #define traceTASK_DELETE( pxTaskToDelete ) +#endif + +#ifndef traceTASK_DELAY_UNTIL + #define traceTASK_DELAY_UNTIL() +#endif + +#ifndef traceTASK_DELAY + #define traceTASK_DELAY() +#endif + +#ifndef traceTASK_PRIORITY_SET + #define traceTASK_PRIORITY_SET( pxTask, uxNewPriority ) +#endif + +#ifndef traceTASK_SUSPEND + #define traceTASK_SUSPEND( pxTaskToSuspend ) +#endif + +#ifndef traceTASK_RESUME + #define traceTASK_RESUME( pxTaskToResume ) +#endif + +#ifndef traceTASK_RESUME_FROM_ISR + #define traceTASK_RESUME_FROM_ISR( pxTaskToResume ) +#endif + +#ifndef traceTASK_INCREMENT_TICK + #define traceTASK_INCREMENT_TICK( xTickCount ) +#endif + +#ifndef traceTIMER_CREATE + #define traceTIMER_CREATE( pxNewTimer ) +#endif + +#ifndef traceTIMER_CREATE_FAILED + #define traceTIMER_CREATE_FAILED() +#endif + +#ifndef traceTIMER_COMMAND_SEND + #define traceTIMER_COMMAND_SEND( xTimer, xMessageID, xMessageValueValue, xReturn ) +#endif + +#ifndef traceTIMER_EXPIRED + #define traceTIMER_EXPIRED( pxTimer ) +#endif + +#ifndef traceTIMER_COMMAND_RECEIVED + #define traceTIMER_COMMAND_RECEIVED( pxTimer, xMessageID, xMessageValue ) +#endif + +#ifndef traceMALLOC + #define traceMALLOC( pvAddress, uiSize ) +#endif + +#ifndef traceFREE + #define traceFREE( pvAddress, uiSize ) +#endif + +#ifndef traceEVENT_GROUP_CREATE + #define traceEVENT_GROUP_CREATE( xEventGroup ) +#endif + +#ifndef traceEVENT_GROUP_CREATE_FAILED + #define traceEVENT_GROUP_CREATE_FAILED() +#endif + +#ifndef traceEVENT_GROUP_SYNC_BLOCK + #define traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor ) +#endif + +#ifndef traceEVENT_GROUP_SYNC_END + #define traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred ) ( void ) xTimeoutOccurred +#endif + +#ifndef traceEVENT_GROUP_WAIT_BITS_BLOCK + #define traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor ) +#endif + +#ifndef traceEVENT_GROUP_WAIT_BITS_END + #define traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred ) ( void ) xTimeoutOccurred +#endif + +#ifndef traceEVENT_GROUP_CLEAR_BITS + #define traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear ) +#endif + +#ifndef traceEVENT_GROUP_CLEAR_BITS_FROM_ISR + #define traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear ) +#endif + +#ifndef traceEVENT_GROUP_SET_BITS + #define traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet ) +#endif + +#ifndef traceEVENT_GROUP_SET_BITS_FROM_ISR + #define traceEVENT_GROUP_SET_BITS_FROM_ISR( xEventGroup, uxBitsToSet ) +#endif + +#ifndef traceEVENT_GROUP_DELETE + #define traceEVENT_GROUP_DELETE( xEventGroup ) +#endif + +#ifndef tracePEND_FUNC_CALL + #define tracePEND_FUNC_CALL(xFunctionToPend, pvParameter1, ulParameter2, ret) +#endif + +#ifndef tracePEND_FUNC_CALL_FROM_ISR + #define tracePEND_FUNC_CALL_FROM_ISR(xFunctionToPend, pvParameter1, ulParameter2, ret) +#endif + +#ifndef traceQUEUE_REGISTRY_ADD + #define traceQUEUE_REGISTRY_ADD(xQueue, pcQueueName) +#endif + +#ifndef configGENERATE_RUN_TIME_STATS + #define configGENERATE_RUN_TIME_STATS 0 +#endif + +#if ( configGENERATE_RUN_TIME_STATS == 1 ) + + #ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS + #error If configGENERATE_RUN_TIME_STATS is defined then portCONFIGURE_TIMER_FOR_RUN_TIME_STATS must also be defined. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS should call a port layer function to setup a peripheral timer/counter that can then be used as the run time counter time base. + #endif /* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS */ + + #ifndef portGET_RUN_TIME_COUNTER_VALUE + #ifndef portALT_GET_RUN_TIME_COUNTER_VALUE + #error If configGENERATE_RUN_TIME_STATS is defined then either portGET_RUN_TIME_COUNTER_VALUE or portALT_GET_RUN_TIME_COUNTER_VALUE must also be defined. See the examples provided and the FreeRTOS web site for more information. + #endif /* portALT_GET_RUN_TIME_COUNTER_VALUE */ + #endif /* portGET_RUN_TIME_COUNTER_VALUE */ + +#endif /* configGENERATE_RUN_TIME_STATS */ + +#ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS + #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() +#endif + +#ifndef configUSE_MALLOC_FAILED_HOOK + #define configUSE_MALLOC_FAILED_HOOK 0 +#endif + +#ifndef portPRIVILEGE_BIT + #define portPRIVILEGE_BIT ( ( UBaseType_t ) 0x00 ) +#endif + +#ifndef portYIELD_WITHIN_API + #define portYIELD_WITHIN_API portYIELD +#endif + +#ifndef pvPortMallocAligned + #define pvPortMallocAligned( x, puxStackBuffer ) ( ( ( puxStackBuffer ) == NULL ) ? ( pvPortMalloc( ( x ) ) ) : ( puxStackBuffer ) ) +#endif + +#ifndef vPortFreeAligned + #define vPortFreeAligned( pvBlockToFree ) vPortFree( pvBlockToFree ) +#endif + +#ifndef portSUPPRESS_TICKS_AND_SLEEP + #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) +#endif + +#ifndef configEXPECTED_IDLE_TIME_BEFORE_SLEEP + #define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 2 +#endif + +#if configEXPECTED_IDLE_TIME_BEFORE_SLEEP < 2 + #error configEXPECTED_IDLE_TIME_BEFORE_SLEEP must not be less than 2 +#endif + +#ifndef configUSE_TICKLESS_IDLE + #define configUSE_TICKLESS_IDLE 0 +#endif + +#ifndef configPRE_SLEEP_PROCESSING + #define configPRE_SLEEP_PROCESSING( x ) +#endif + +#ifndef configPOST_SLEEP_PROCESSING + #define configPOST_SLEEP_PROCESSING( x ) +#endif + +#ifndef configUSE_QUEUE_SETS + #define configUSE_QUEUE_SETS 0 +#endif + +#ifndef portTASK_USES_FLOATING_POINT + #define portTASK_USES_FLOATING_POINT() +#endif + +#ifndef configUSE_TIME_SLICING + #define configUSE_TIME_SLICING 1 +#endif + +#ifndef configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS + #define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0 +#endif + +#ifndef configUSE_NEWLIB_REENTRANT + #define configUSE_NEWLIB_REENTRANT 0 +#endif + +#ifndef configUSE_STATS_FORMATTING_FUNCTIONS + #define configUSE_STATS_FORMATTING_FUNCTIONS 0 +#endif + +#ifndef portASSERT_IF_INTERRUPT_PRIORITY_INVALID + #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() +#endif + +#ifndef configUSE_TRACE_FACILITY + #define configUSE_TRACE_FACILITY 0 +#endif + +#ifndef mtCOVERAGE_TEST_MARKER + #define mtCOVERAGE_TEST_MARKER() +#endif + +#ifndef portASSERT_IF_IN_ISR + #define portASSERT_IF_IN_ISR() +#endif + +#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION + #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 +#endif + +#ifndef configAPPLICATION_ALLOCATED_HEAP + #define configAPPLICATION_ALLOCATED_HEAP 0 +#endif + +#ifndef configUSE_TASK_NOTIFICATIONS + #define configUSE_TASK_NOTIFICATIONS 1 +#endif + +#ifndef portTICK_TYPE_IS_ATOMIC + #define portTICK_TYPE_IS_ATOMIC 0 +#endif + +#if( portTICK_TYPE_IS_ATOMIC == 0 ) + /* Either variables of tick type cannot be read atomically, or + portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when + the tick count is returned to the standard critical section macros. */ + #define portTICK_TYPE_ENTER_CRITICAL(mux) portENTER_CRITICAL(mux) + #define portTICK_TYPE_EXIT_CRITICAL(mux) portEXIT_CRITICAL(mux) + #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR() + #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( ( x ) ) +#else + /* The tick type can be read atomically, so critical sections used when the + tick count is returned can be defined away. */ + #define portTICK_TYPE_ENTER_CRITICAL() + #define portTICK_TYPE_EXIT_CRITICAL() + #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() 0 + #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) ( void ) x +#endif + +/* Definitions to allow backward compatibility with FreeRTOS versions prior to +V8 if desired. */ +#ifndef configENABLE_BACKWARD_COMPATIBILITY + #define configENABLE_BACKWARD_COMPATIBILITY 1 +#endif + +#if configENABLE_BACKWARD_COMPATIBILITY == 1 + #define eTaskStateGet eTaskGetState + #define portTickType TickType_t + #define xTaskHandle TaskHandle_t + #define xQueueHandle QueueHandle_t + #define xSemaphoreHandle SemaphoreHandle_t + #define xQueueSetHandle QueueSetHandle_t + #define xQueueSetMemberHandle QueueSetMemberHandle_t + #define xTimeOutType TimeOut_t + #define xMemoryRegion MemoryRegion_t + #define xTaskParameters TaskParameters_t + #define xTaskStatusType TaskStatus_t + #define xTimerHandle TimerHandle_t + #define xCoRoutineHandle CoRoutineHandle_t + #define pdTASK_HOOK_CODE TaskHookFunction_t + #define portTICK_RATE_MS portTICK_PERIOD_MS + + /* Backward compatibility within the scheduler code only - these definitions + are not really required but are included for completeness. */ + #define tmrTIMER_CALLBACK TimerCallbackFunction_t + #define pdTASK_CODE TaskFunction_t + #define xListItem ListItem_t + #define xList List_t +#endif /* configENABLE_BACKWARD_COMPATIBILITY */ + +#ifndef configESP32_PER_TASK_DATA + #define configESP32_PER_TASK_DATA 1 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* INC_FREERTOS_H */ + diff --git a/tools/sdk/include/freertos/freertos/FreeRTOSConfig.h b/tools/sdk/include/freertos/freertos/FreeRTOSConfig.h new file mode 100644 index 00000000..d1958e77 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/FreeRTOSConfig.h @@ -0,0 +1,279 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H + +#include "sdkconfig.h" + + +/* ESP31 and ESP32 are dualcore processors. */ +#ifndef CONFIG_FREERTOS_UNICORE +#define portNUM_PROCESSORS 2 +#else +#define portNUM_PROCESSORS 1 +#endif + +#define XT_USE_THREAD_SAFE_CLIB 0 +#define configASSERT_2 0 +#define portUSING_MPU_WRAPPERS 0 +#define configUSE_MUTEX 1 +#undef XT_USE_SWPRI + +#if CONFIG_FREERTOS_CORETIMER_0 +#define XT_TIMER_INDEX 0 +#elif CONFIG_FREERTOS_CORETIMER_1 +#define XT_TIMER_INDEX 1 +#elif CONFIG_FREERTOS_CORETIMER_2 +#define XT_TIMER_INDEX 2 +#elif CONFIG_FREERTOS_CORETIMER_3 +#define XT_TIMER_INDEX 3 +#endif + +#define configNUM_THREAD_LOCAL_STORAGE_POINTERS CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS +#define configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS 1 + +/* TODO: config freq by menuconfig */ +#define XT_CLOCK_FREQ (CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ * 1000000) + +/* Required for configuration-dependent settings */ +#include "xtensa_config.h" + + +/* configASSERT behaviour */ +#ifndef __ASSEMBLER__ +#include "rom/ets_sys.h" + +#if defined(CONFIG_FREERTOS_ASSERT_DISABLE) +#define configASSERT(a) /* assertions disabled */ +#elif defined(CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE) +#define configASSERT(a) if (!(a)) { \ + ets_printf("%s:%d (%s)- assert failed!\n", __FILE__, __LINE__, \ + __FUNCTION__); \ + } +#else /* CONFIG_FREERTOS_ASSERT_FAIL_ABORT */ +#define configASSERT(a) if (!(a)) { \ + ets_printf("%s:%d (%s)- assert failed!\n", __FILE__, __LINE__, \ + __FUNCTION__); \ + abort(); \ + } +#endif + +#if CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION +#include +#include "rom/ets_sys.h" +#define UNTESTED_FUNCTION() { ets_printf("Untested FreeRTOS function %s\r\n", __FUNCTION__); configASSERT(false); } while(0) +#else +#define UNTESTED_FUNCTION() +#endif + + +#endif /* def __ASSEMBLER__ */ + + +/*----------------------------------------------------------- + * Application specific definitions. + * + * These definitions should be adjusted for your particular hardware and + * application requirements. + * + * Note that the default heap size is deliberately kept small so that + * the build is more likely to succeed for configurations with limited + * memory. + * + * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE + * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. + *----------------------------------------------------------*/ + +#define configUSE_PREEMPTION 1 +#define configUSE_IDLE_HOOK 0 + +#define configUSE_TICK_HOOK 0 + +#define configTICK_RATE_HZ ( CONFIG_FREERTOS_HZ ) + +/* Default clock rate for simulator */ +//#define configCPU_CLOCK_HZ 80000000 + +/* This has impact on speed of search for highest priority */ +#ifdef SMALL_TEST +#define configMAX_PRIORITIES ( 7 ) +#else +#define configMAX_PRIORITIES ( 25 ) +#endif + +/* Minimal stack size. This may need to be increased for your application */ +/* NOTE: The FreeRTOS demos may not work reliably with stack size < 4KB. */ +/* The Xtensa-specific examples should be fine with XT_STACK_MIN_SIZE. */ +#if !(defined XT_STACK_MIN_SIZE) +#error XT_STACK_MIN_SIZE not defined, did you include xtensa_config.h ? +#endif + +#define configMINIMAL_STACK_SIZE (XT_STACK_MIN_SIZE > 1024 ? XT_STACK_MIN_SIZE : 1024) + +/* The Xtensa port uses a separate interrupt stack. Adjust the stack size */ +/* to suit the needs of your specific application. */ +#ifndef configISR_STACK_SIZE +#define configISR_STACK_SIZE 1024//2048 +#endif + +/* Minimal heap size to make sure examples can run on memory limited + configs. Adjust this to suit your system. */ + + +//We define the heap to span all of the non-statically-allocated shared RAM. ToDo: Make sure there +//is some space left for the app and main cpu when running outside of a thread. +#define configAPPLICATION_ALLOCATED_HEAP 1 +#define configTOTAL_HEAP_SIZE (&_heap_end - &_heap_start)//( ( size_t ) (64 * 1024) ) + +#define configMAX_TASK_NAME_LEN ( 16 ) +#define configUSE_TRACE_FACILITY 0 /* Used by vTaskList in main.c */ +#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* Used by vTaskList in main.c */ +#define configUSE_TRACE_FACILITY_2 0 /* Provided by Xtensa port patch */ +#define configBENCHMARK 0 /* Provided by Xtensa port patch */ +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 0 +#define configQUEUE_REGISTRY_SIZE 0 + +#define configUSE_MUTEXES 1 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_COUNTING_SEMAPHORES 1 + +#if CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE +#define configCHECK_FOR_STACK_OVERFLOW 0 +#elif CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL +#define configCHECK_FOR_STACK_OVERFLOW 1 +#elif CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY +#define configCHECK_FOR_STACK_OVERFLOW 2 +#endif + + + + +/* Co-routine definitions. */ +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) + +/* Set the following definitions to 1 to include the API function, or zero + to exclude the API function. */ + +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_uxTaskGetStackHighWaterMark 1 + +#if CONFIG_ENABLE_MEMORY_DEBUG +#define configENABLE_MEMORY_DEBUG 1 +#else +#define configENABLE_MEMORY_DEBUG 0 +#endif + +#define INCLUDE_xSemaphoreGetMutexHolder 1 + +/* The priority at which the tick interrupt runs. This should probably be + kept at 1. */ +#define configKERNEL_INTERRUPT_PRIORITY 1 + +/* The maximum interrupt priority from which FreeRTOS.org API functions can + be called. Only API functions that end in ...FromISR() can be used within + interrupts. */ +#define configMAX_SYSCALL_INTERRUPT_PRIORITY XCHAL_EXCM_LEVEL + +#define configUSE_NEWLIB_REENTRANT 1 + +/* Test FreeRTOS timers (with timer task) and more. */ +/* Some files don't compile if this flag is disabled */ +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY 1 +#define configTIMER_QUEUE_LENGTH 10 +#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE + +#define INCLUDE_xTimerPendFunctionCall 1 +#define INCLUDE_eTaskGetState 1 +#define configUSE_QUEUE_SETS 1 + +#if (!defined XT_INTEXC_HOOKS) +#define configXT_INTEXC_HOOKS 1 /* Exception hooks used by certain tests */ +#if configUSE_TRACE_FACILITY_2 +#define configASSERT_2 1 /* Specific to Xtensa port */ +#endif +#endif + +#define configXT_BOARD 1 /* Board mode */ +#define configXT_SIMULATOR 0 + + + + +#endif /* FREERTOS_CONFIG_H */ + diff --git a/tools/sdk/include/freertos/freertos/StackMacros.h b/tools/sdk/include/freertos/freertos/StackMacros.h new file mode 100644 index 00000000..50d2e198 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/StackMacros.h @@ -0,0 +1,184 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef STACK_MACROS_H +#define STACK_MACROS_H + +/* + * Call the stack overflow hook function if the stack of the task being swapped + * out is currently overflowed, or looks like it might have overflowed in the + * past. + * + * Setting configCHECK_FOR_STACK_OVERFLOW to 1 will cause the macro to check + * the current stack state only - comparing the current top of stack value to + * the stack limit. Setting configCHECK_FOR_STACK_OVERFLOW to greater than 1 + * will also cause the last few stack bytes to be checked to ensure the value + * to which the bytes were set when the task was created have not been + * overwritten. Note this second test does not guarantee that an overflowed + * stack will always be recognised. + */ + +/*-----------------------------------------------------------*/ + +#if( configCHECK_FOR_STACK_OVERFLOW == 0 ) + + /* FreeRTOSConfig.h is not set to check for stack overflows. */ + #define taskFIRST_CHECK_FOR_STACK_OVERFLOW() + #define taskSECOND_CHECK_FOR_STACK_OVERFLOW() + +#endif /* configCHECK_FOR_STACK_OVERFLOW == 0 */ +/*-----------------------------------------------------------*/ + +#if( configCHECK_FOR_STACK_OVERFLOW == 1 ) + + /* FreeRTOSConfig.h is only set to use the first method of + overflow checking. */ + #define taskSECOND_CHECK_FOR_STACK_OVERFLOW() + +#endif +/*-----------------------------------------------------------*/ + +#if( ( configCHECK_FOR_STACK_OVERFLOW > 0 ) && ( portSTACK_GROWTH < 0 ) ) + + /* Only the current stack state is to be checked. */ + #define taskFIRST_CHECK_FOR_STACK_OVERFLOW() \ + { \ + /* Is the currently saved stack pointer within the stack limit? */ \ + if( pxCurrentTCB[ xPortGetCoreID() ]->pxTopOfStack <= pxCurrentTCB[ xPortGetCoreID() ]->pxStack ) \ + { \ + vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB[ xPortGetCoreID() ], pxCurrentTCB[ xPortGetCoreID() ]->pcTaskName ); \ + } \ + } + +#endif /* configCHECK_FOR_STACK_OVERFLOW > 0 */ +/*-----------------------------------------------------------*/ + +#if( ( configCHECK_FOR_STACK_OVERFLOW > 0 ) && ( portSTACK_GROWTH > 0 ) ) + + /* Only the current stack state is to be checked. */ + #define taskFIRST_CHECK_FOR_STACK_OVERFLOW() \ + { \ + \ + /* Is the currently saved stack pointer within the stack limit? */ \ + if( pxCurrentTCB[ xPortGetCoreID() ]->pxTopOfStack >= pxCurrentTCB[ xPortGetCoreID() ]->pxEndOfStack ) \ + { \ + vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB[ xPortGetCoreID() ], pxCurrentTCB[ xPortGetCoreID() ]->pcTaskName ); \ + } \ + } + +#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */ +/*-----------------------------------------------------------*/ + +#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) ) + + #define taskSECOND_CHECK_FOR_STACK_OVERFLOW() \ + { \ + static const uint8_t ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \ + \ + \ + /* Has the extremity of the task stack ever been written over? */ \ + if( memcmp( ( void * ) pxCurrentTCB[ xPortGetCoreID() ]->pxStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \ + { \ + vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB[ xPortGetCoreID() ], pxCurrentTCB[ xPortGetCoreID() ]->pcTaskName ); \ + } \ + } + +#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */ +/*-----------------------------------------------------------*/ + +#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH > 0 ) ) + + #define taskSECOND_CHECK_FOR_STACK_OVERFLOW() \ + { \ + int8_t *pcEndOfStack = ( int8_t * ) pxCurrentTCB[ xPortGetCoreID() ]->pxEndOfStack; \ + static const uint8_t ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \ + \ + \ + pcEndOfStack -= sizeof( ucExpectedStackBytes ); \ + \ + /* Has the extremity of the task stack ever been written over? */ \ + if( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \ + { \ + vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB[ xPortGetCoreID() ], pxCurrentTCB[ xPortGetCoreID() ]->pcTaskName ); \ + } \ + } + +#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */ +/*-----------------------------------------------------------*/ + +#endif /* STACK_MACROS_H */ + diff --git a/tools/sdk/include/freertos/freertos/croutine.h b/tools/sdk/include/freertos/freertos/croutine.h new file mode 100644 index 00000000..7dfd4b8c --- /dev/null +++ b/tools/sdk/include/freertos/freertos/croutine.h @@ -0,0 +1,762 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef CO_ROUTINE_H +#define CO_ROUTINE_H + +#ifndef INC_FREERTOS_H + #error "include FreeRTOS.h must appear in source files before include croutine.h" +#endif + +#include "list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Used to hide the implementation of the co-routine control block. The +control block structure however has to be included in the header due to +the macro implementation of the co-routine functionality. */ +typedef void * CoRoutineHandle_t; + +/* Defines the prototype to which co-routine functions must conform. */ +typedef void (*crCOROUTINE_CODE)( CoRoutineHandle_t, UBaseType_t ); + +typedef struct corCoRoutineControlBlock +{ + crCOROUTINE_CODE pxCoRoutineFunction; + ListItem_t xGenericListItem; /*< List item used to place the CRCB in ready and blocked queues. */ + ListItem_t xEventListItem; /*< List item used to place the CRCB in event lists. */ + UBaseType_t uxPriority; /*< The priority of the co-routine in relation to other co-routines. */ + UBaseType_t uxIndex; /*< Used to distinguish between co-routines when multiple co-routines use the same co-routine function. */ + uint16_t uxState; /*< Used internally by the co-routine implementation. */ +} CRCB_t; /* Co-routine control block. Note must be identical in size down to uxPriority with TCB_t. */ + +/** + * croutine. h + *
+ BaseType_t xCoRoutineCreate(
+                                 crCOROUTINE_CODE pxCoRoutineCode,
+                                 UBaseType_t uxPriority,
+                                 UBaseType_t uxIndex
+                               );
+ * + * Create a new co-routine and add it to the list of co-routines that are + * ready to run. + * + * @param pxCoRoutineCode Pointer to the co-routine function. Co-routine + * functions require special syntax - see the co-routine section of the WEB + * documentation for more information. + * + * @param uxPriority The priority with respect to other co-routines at which + * the co-routine will run. + * + * @param uxIndex Used to distinguish between different co-routines that + * execute the same function. See the example below and the co-routine section + * of the WEB documentation for further information. + * + * @return pdPASS if the co-routine was successfully created and added to a ready + * list, otherwise an error code defined with ProjDefs.h. + * + * Example usage: +
+ // Co-routine to be created.
+ void vFlashCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ // This may not be necessary for const variables.
+ static const char cLedToFlash[ 2 ] = { 5, 6 };
+ static const TickType_t uxFlashRates[ 2 ] = { 200, 400 };
+
+     // Must start every co-routine with a call to crSTART();
+     crSTART( xHandle );
+
+     for( ;; )
+     {
+         // This co-routine just delays for a fixed period, then toggles
+         // an LED.  Two co-routines are created using this function, so
+         // the uxIndex parameter is used to tell the co-routine which
+         // LED to flash and how int32_t to delay.  This assumes xQueue has
+         // already been created.
+         vParTestToggleLED( cLedToFlash[ uxIndex ] );
+         crDELAY( xHandle, uxFlashRates[ uxIndex ] );
+     }
+
+     // Must end every co-routine with a call to crEND();
+     crEND();
+ }
+
+ // Function that creates two co-routines.
+ void vOtherFunction( void )
+ {
+ uint8_t ucParameterToPass;
+ TaskHandle_t xHandle;
+
+     // Create two co-routines at priority 0.  The first is given index 0
+     // so (from the code above) toggles LED 5 every 200 ticks.  The second
+     // is given index 1 so toggles LED 6 every 400 ticks.
+     for( uxIndex = 0; uxIndex < 2; uxIndex++ )
+     {
+         xCoRoutineCreate( vFlashCoRoutine, 0, uxIndex );
+     }
+ }
+   
+ * \defgroup xCoRoutineCreate xCoRoutineCreate + * \ingroup Tasks + */ +BaseType_t xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex ); + + +/** + * croutine. h + *
+ void vCoRoutineSchedule( void );
+ * + * Run a co-routine. + * + * vCoRoutineSchedule() executes the highest priority co-routine that is able + * to run. The co-routine will execute until it either blocks, yields or is + * preempted by a task. Co-routines execute cooperatively so one + * co-routine cannot be preempted by another, but can be preempted by a task. + * + * If an application comprises of both tasks and co-routines then + * vCoRoutineSchedule should be called from the idle task (in an idle task + * hook). + * + * Example usage: +
+ // This idle task hook will schedule a co-routine each time it is called.
+ // The rest of the idle task will execute between co-routine calls.
+ void vApplicationIdleHook( void )
+ {
+	vCoRoutineSchedule();
+ }
+
+ // Alternatively, if you do not require any other part of the idle task to
+ // execute, the idle task hook can call vCoRoutineScheduler() within an
+ // infinite loop.
+ void vApplicationIdleHook( void )
+ {
+    for( ;; )
+    {
+        vCoRoutineSchedule();
+    }
+ }
+ 
+ * \defgroup vCoRoutineSchedule vCoRoutineSchedule + * \ingroup Tasks + */ +void vCoRoutineSchedule( void ); + +/** + * croutine. h + *
+ crSTART( CoRoutineHandle_t xHandle );
+ * + * This macro MUST always be called at the start of a co-routine function. + * + * Example usage: +
+ // Co-routine to be created.
+ void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ static int32_t ulAVariable;
+
+     // Must start every co-routine with a call to crSTART();
+     crSTART( xHandle );
+
+     for( ;; )
+     {
+          // Co-routine functionality goes here.
+     }
+
+     // Must end every co-routine with a call to crEND();
+     crEND();
+ }
+ * \defgroup crSTART crSTART + * \ingroup Tasks + */ +#define crSTART( pxCRCB ) switch( ( ( CRCB_t * )( pxCRCB ) )->uxState ) { case 0: + +/** + * croutine. h + *
+ crEND();
+ * + * This macro MUST always be called at the end of a co-routine function. + * + * Example usage: +
+ // Co-routine to be created.
+ void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ static int32_t ulAVariable;
+
+     // Must start every co-routine with a call to crSTART();
+     crSTART( xHandle );
+
+     for( ;; )
+     {
+          // Co-routine functionality goes here.
+     }
+
+     // Must end every co-routine with a call to crEND();
+     crEND();
+ }
+ * \defgroup crSTART crSTART + * \ingroup Tasks + */ +#define crEND() } + +/* + * These macros are intended for internal use by the co-routine implementation + * only. The macros should not be used directly by application writers. + */ +#define crSET_STATE0( xHandle ) ( ( CRCB_t * )( xHandle ) )->uxState = (__LINE__ * 2); return; case (__LINE__ * 2): +#define crSET_STATE1( xHandle ) ( ( CRCB_t * )( xHandle ) )->uxState = ((__LINE__ * 2)+1); return; case ((__LINE__ * 2)+1): + +/** + * croutine. h + *
+ crDELAY( CoRoutineHandle_t xHandle, TickType_t xTicksToDelay );
+ * + * Delay a co-routine for a fixed period of time. + * + * crDELAY can only be called from the co-routine function itself - not + * from within a function called by the co-routine function. This is because + * co-routines do not maintain their own stack. + * + * @param xHandle The handle of the co-routine to delay. This is the xHandle + * parameter of the co-routine function. + * + * @param xTickToDelay The number of ticks that the co-routine should delay + * for. The actual amount of time this equates to is defined by + * configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant portTICK_PERIOD_MS + * can be used to convert ticks to milliseconds. + * + * Example usage: +
+ // Co-routine to be created.
+ void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ // This may not be necessary for const variables.
+ // We are to delay for 200ms.
+ static const xTickType xDelayTime = 200 / portTICK_PERIOD_MS;
+
+     // Must start every co-routine with a call to crSTART();
+     crSTART( xHandle );
+
+     for( ;; )
+     {
+        // Delay for 200ms.
+        crDELAY( xHandle, xDelayTime );
+
+        // Do something here.
+     }
+
+     // Must end every co-routine with a call to crEND();
+     crEND();
+ }
+ * \defgroup crDELAY crDELAY + * \ingroup Tasks + */ +#define crDELAY( xHandle, xTicksToDelay ) \ + if( ( xTicksToDelay ) > 0 ) \ + { \ + vCoRoutineAddToDelayedList( ( xTicksToDelay ), NULL ); \ + } \ + crSET_STATE0( ( xHandle ) ); + +/** + *
+ crQUEUE_SEND(
+                  CoRoutineHandle_t xHandle,
+                  QueueHandle_t pxQueue,
+                  void *pvItemToQueue,
+                  TickType_t xTicksToWait,
+                  BaseType_t *pxResult
+             )
+ * + * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine + * equivalent to the xQueueSend() and xQueueReceive() functions used by tasks. + * + * crQUEUE_SEND and crQUEUE_RECEIVE can only be used from a co-routine whereas + * xQueueSend() and xQueueReceive() can only be used from tasks. + * + * crQUEUE_SEND can only be called from the co-routine function itself - not + * from within a function called by the co-routine function. This is because + * co-routines do not maintain their own stack. + * + * See the co-routine section of the WEB documentation for information on + * passing data between tasks and co-routines and between ISR's and + * co-routines. + * + * @param xHandle The handle of the calling co-routine. This is the xHandle + * parameter of the co-routine function. + * + * @param pxQueue The handle of the queue on which the data will be posted. + * The handle is obtained as the return value when the queue is created using + * the xQueueCreate() API function. + * + * @param pvItemToQueue A pointer to the data being posted onto the queue. + * The number of bytes of each queued item is specified when the queue is + * created. This number of bytes is copied from pvItemToQueue into the queue + * itself. + * + * @param xTickToDelay The number of ticks that the co-routine should block + * to wait for space to become available on the queue, should space not be + * available immediately. The actual amount of time this equates to is defined + * by configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant + * portTICK_PERIOD_MS can be used to convert ticks to milliseconds (see example + * below). + * + * @param pxResult The variable pointed to by pxResult will be set to pdPASS if + * data was successfully posted onto the queue, otherwise it will be set to an + * error defined within ProjDefs.h. + * + * Example usage: +
+ // Co-routine function that blocks for a fixed period then posts a number onto
+ // a queue.
+ static void prvCoRoutineFlashTask( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ static BaseType_t xNumberToPost = 0;
+ static BaseType_t xResult;
+
+    // Co-routines must begin with a call to crSTART().
+    crSTART( xHandle );
+
+    for( ;; )
+    {
+        // This assumes the queue has already been created.
+        crQUEUE_SEND( xHandle, xCoRoutineQueue, &xNumberToPost, NO_DELAY, &xResult );
+
+        if( xResult != pdPASS )
+        {
+            // The message was not posted!
+        }
+
+        // Increment the number to be posted onto the queue.
+        xNumberToPost++;
+
+        // Delay for 100 ticks.
+        crDELAY( xHandle, 100 );
+    }
+
+    // Co-routines must end with a call to crEND().
+    crEND();
+ }
+ * \defgroup crQUEUE_SEND crQUEUE_SEND + * \ingroup Tasks + */ +#define crQUEUE_SEND( xHandle, pxQueue, pvItemToQueue, xTicksToWait, pxResult ) \ +{ \ + *( pxResult ) = xQueueCRSend( ( pxQueue) , ( pvItemToQueue) , ( xTicksToWait ) ); \ + if( *( pxResult ) == errQUEUE_BLOCKED ) \ + { \ + crSET_STATE0( ( xHandle ) ); \ + *pxResult = xQueueCRSend( ( pxQueue ), ( pvItemToQueue ), 0 ); \ + } \ + if( *pxResult == errQUEUE_YIELD ) \ + { \ + crSET_STATE1( ( xHandle ) ); \ + *pxResult = pdPASS; \ + } \ +} + +/** + * croutine. h + *
+  crQUEUE_RECEIVE(
+                     CoRoutineHandle_t xHandle,
+                     QueueHandle_t pxQueue,
+                     void *pvBuffer,
+                     TickType_t xTicksToWait,
+                     BaseType_t *pxResult
+                 )
+ * + * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine + * equivalent to the xQueueSend() and xQueueReceive() functions used by tasks. + * + * crQUEUE_SEND and crQUEUE_RECEIVE can only be used from a co-routine whereas + * xQueueSend() and xQueueReceive() can only be used from tasks. + * + * crQUEUE_RECEIVE can only be called from the co-routine function itself - not + * from within a function called by the co-routine function. This is because + * co-routines do not maintain their own stack. + * + * See the co-routine section of the WEB documentation for information on + * passing data between tasks and co-routines and between ISR's and + * co-routines. + * + * @param xHandle The handle of the calling co-routine. This is the xHandle + * parameter of the co-routine function. + * + * @param pxQueue The handle of the queue from which the data will be received. + * The handle is obtained as the return value when the queue is created using + * the xQueueCreate() API function. + * + * @param pvBuffer The buffer into which the received item is to be copied. + * The number of bytes of each queued item is specified when the queue is + * created. This number of bytes is copied into pvBuffer. + * + * @param xTickToDelay The number of ticks that the co-routine should block + * to wait for data to become available from the queue, should data not be + * available immediately. The actual amount of time this equates to is defined + * by configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant + * portTICK_PERIOD_MS can be used to convert ticks to milliseconds (see the + * crQUEUE_SEND example). + * + * @param pxResult The variable pointed to by pxResult will be set to pdPASS if + * data was successfully retrieved from the queue, otherwise it will be set to + * an error code as defined within ProjDefs.h. + * + * Example usage: +
+ // A co-routine receives the number of an LED to flash from a queue.  It
+ // blocks on the queue until the number is received.
+ static void prvCoRoutineFlashWorkTask( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ {
+ // Variables in co-routines must be declared static if they must maintain value across a blocking call.
+ static BaseType_t xResult;
+ static UBaseType_t uxLEDToFlash;
+
+    // All co-routines must start with a call to crSTART().
+    crSTART( xHandle );
+
+    for( ;; )
+    {
+        // Wait for data to become available on the queue.
+        crQUEUE_RECEIVE( xHandle, xCoRoutineQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );
+
+        if( xResult == pdPASS )
+        {
+            // We received the LED to flash - flash it!
+            vParTestToggleLED( uxLEDToFlash );
+        }
+    }
+
+    crEND();
+ }
+ * \defgroup crQUEUE_RECEIVE crQUEUE_RECEIVE + * \ingroup Tasks + */ +#define crQUEUE_RECEIVE( xHandle, pxQueue, pvBuffer, xTicksToWait, pxResult ) \ +{ \ + *( pxResult ) = xQueueCRReceive( ( pxQueue) , ( pvBuffer ), ( xTicksToWait ) ); \ + if( *( pxResult ) == errQUEUE_BLOCKED ) \ + { \ + crSET_STATE0( ( xHandle ) ); \ + *( pxResult ) = xQueueCRReceive( ( pxQueue) , ( pvBuffer ), 0 ); \ + } \ + if( *( pxResult ) == errQUEUE_YIELD ) \ + { \ + crSET_STATE1( ( xHandle ) ); \ + *( pxResult ) = pdPASS; \ + } \ +} + +/** + * croutine. h + *
+  crQUEUE_SEND_FROM_ISR(
+                            QueueHandle_t pxQueue,
+                            void *pvItemToQueue,
+                            BaseType_t xCoRoutinePreviouslyWoken
+                       )
+ * + * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the + * co-routine equivalent to the xQueueSendFromISR() and xQueueReceiveFromISR() + * functions used by tasks. + * + * crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() can only be used to + * pass data between a co-routine and and ISR, whereas xQueueSendFromISR() and + * xQueueReceiveFromISR() can only be used to pass data between a task and and + * ISR. + * + * crQUEUE_SEND_FROM_ISR can only be called from an ISR to send data to a queue + * that is being used from within a co-routine. + * + * See the co-routine section of the WEB documentation for information on + * passing data between tasks and co-routines and between ISR's and + * co-routines. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @param xCoRoutinePreviouslyWoken This is included so an ISR can post onto + * the same queue multiple times from a single interrupt. The first call + * should always pass in pdFALSE. Subsequent calls should pass in + * the value returned from the previous call. + * + * @return pdTRUE if a co-routine was woken by posting onto the queue. This is + * used by the ISR to determine if a context switch may be required following + * the ISR. + * + * Example usage: +
+ // A co-routine that blocks on a queue waiting for characters to be received.
+ static void vReceivingCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ {
+ char cRxedChar;
+ BaseType_t xResult;
+
+     // All co-routines must start with a call to crSTART().
+     crSTART( xHandle );
+
+     for( ;; )
+     {
+         // Wait for data to become available on the queue.  This assumes the
+         // queue xCommsRxQueue has already been created!
+         crQUEUE_RECEIVE( xHandle, xCommsRxQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );
+
+         // Was a character received?
+         if( xResult == pdPASS )
+         {
+             // Process the character here.
+         }
+     }
+
+     // All co-routines must end with a call to crEND().
+     crEND();
+ }
+
+ // An ISR that uses a queue to send characters received on a serial port to
+ // a co-routine.
+ void vUART_ISR( void )
+ {
+ char cRxedChar;
+ BaseType_t xCRWokenByPost = pdFALSE;
+
+     // We loop around reading characters until there are none left in the UART.
+     while( UART_RX_REG_NOT_EMPTY() )
+     {
+         // Obtain the character from the UART.
+         cRxedChar = UART_RX_REG;
+
+         // Post the character onto a queue.  xCRWokenByPost will be pdFALSE
+         // the first time around the loop.  If the post causes a co-routine
+         // to be woken (unblocked) then xCRWokenByPost will be set to pdTRUE.
+         // In this manner we can ensure that if more than one co-routine is
+         // blocked on the queue only one is woken by this ISR no matter how
+         // many characters are posted to the queue.
+         xCRWokenByPost = crQUEUE_SEND_FROM_ISR( xCommsRxQueue, &cRxedChar, xCRWokenByPost );
+     }
+ }
+ * \defgroup crQUEUE_SEND_FROM_ISR crQUEUE_SEND_FROM_ISR + * \ingroup Tasks + */ +#define crQUEUE_SEND_FROM_ISR( pxQueue, pvItemToQueue, xCoRoutinePreviouslyWoken ) xQueueCRSendFromISR( ( pxQueue ), ( pvItemToQueue ), ( xCoRoutinePreviouslyWoken ) ) + + +/** + * croutine. h + *
+  crQUEUE_SEND_FROM_ISR(
+                            QueueHandle_t pxQueue,
+                            void *pvBuffer,
+                            BaseType_t * pxCoRoutineWoken
+                       )
+ * + * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the + * co-routine equivalent to the xQueueSendFromISR() and xQueueReceiveFromISR() + * functions used by tasks. + * + * crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() can only be used to + * pass data between a co-routine and and ISR, whereas xQueueSendFromISR() and + * xQueueReceiveFromISR() can only be used to pass data between a task and and + * ISR. + * + * crQUEUE_RECEIVE_FROM_ISR can only be called from an ISR to receive data + * from a queue that is being used from within a co-routine (a co-routine + * posted to the queue). + * + * See the co-routine section of the WEB documentation for information on + * passing data between tasks and co-routines and between ISR's and + * co-routines. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvBuffer A pointer to a buffer into which the received item will be + * placed. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from the queue into + * pvBuffer. + * + * @param pxCoRoutineWoken A co-routine may be blocked waiting for space to become + * available on the queue. If crQUEUE_RECEIVE_FROM_ISR causes such a + * co-routine to unblock *pxCoRoutineWoken will get set to pdTRUE, otherwise + * *pxCoRoutineWoken will remain unchanged. + * + * @return pdTRUE an item was successfully received from the queue, otherwise + * pdFALSE. + * + * Example usage: +
+ // A co-routine that posts a character to a queue then blocks for a fixed
+ // period.  The character is incremented each time.
+ static void vSendingCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ {
+ // cChar holds its value while this co-routine is blocked and must therefore
+ // be declared static.
+ static char cCharToTx = 'a';
+ BaseType_t xResult;
+
+     // All co-routines must start with a call to crSTART().
+     crSTART( xHandle );
+
+     for( ;; )
+     {
+         // Send the next character to the queue.
+         crQUEUE_SEND( xHandle, xCoRoutineQueue, &cCharToTx, NO_DELAY, &xResult );
+
+         if( xResult == pdPASS )
+         {
+             // The character was successfully posted to the queue.
+         }
+		 else
+		 {
+			// Could not post the character to the queue.
+		 }
+
+         // Enable the UART Tx interrupt to cause an interrupt in this
+		 // hypothetical UART.  The interrupt will obtain the character
+		 // from the queue and send it.
+		 ENABLE_RX_INTERRUPT();
+
+		 // Increment to the next character then block for a fixed period.
+		 // cCharToTx will maintain its value across the delay as it is
+		 // declared static.
+		 cCharToTx++;
+		 if( cCharToTx > 'x' )
+		 {
+			cCharToTx = 'a';
+		 }
+		 crDELAY( 100 );
+     }
+
+     // All co-routines must end with a call to crEND().
+     crEND();
+ }
+
+ // An ISR that uses a queue to receive characters to send on a UART.
+ void vUART_ISR( void )
+ {
+ char cCharToTx;
+ BaseType_t xCRWokenByPost = pdFALSE;
+
+     while( UART_TX_REG_EMPTY() )
+     {
+         // Are there any characters in the queue waiting to be sent?
+		 // xCRWokenByPost will automatically be set to pdTRUE if a co-routine
+		 // is woken by the post - ensuring that only a single co-routine is
+		 // woken no matter how many times we go around this loop.
+         if( crQUEUE_RECEIVE_FROM_ISR( pxQueue, &cCharToTx, &xCRWokenByPost ) )
+		 {
+			 SEND_CHARACTER( cCharToTx );
+		 }
+     }
+ }
+ * \defgroup crQUEUE_RECEIVE_FROM_ISR crQUEUE_RECEIVE_FROM_ISR + * \ingroup Tasks + */ +#define crQUEUE_RECEIVE_FROM_ISR( pxQueue, pvBuffer, pxCoRoutineWoken ) xQueueCRReceiveFromISR( ( pxQueue ), ( pvBuffer ), ( pxCoRoutineWoken ) ) + +/* + * This function is intended for internal use by the co-routine macros only. + * The macro nature of the co-routine implementation requires that the + * prototype appears here. The function should not be used by application + * writers. + * + * Removes the current co-routine from its ready list and places it in the + * appropriate delayed list. + */ +void vCoRoutineAddToDelayedList( TickType_t xTicksToDelay, List_t *pxEventList ); + +/* + * This function is intended for internal use by the queue implementation only. + * The function should not be used by application writers. + * + * Removes the highest priority co-routine from the event list and places it in + * the pending ready list. + */ +BaseType_t xCoRoutineRemoveFromEventList( const List_t *pxEventList ); + +#ifdef __cplusplus +} +#endif + +#endif /* CO_ROUTINE_H */ diff --git a/tools/sdk/include/freertos/freertos/deprecated_definitions.h b/tools/sdk/include/freertos/freertos/deprecated_definitions.h new file mode 100644 index 00000000..fb031cdd --- /dev/null +++ b/tools/sdk/include/freertos/freertos/deprecated_definitions.h @@ -0,0 +1,321 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef DEPRECATED_DEFINITIONS_H +#define DEPRECATED_DEFINITIONS_H + + +/* Each FreeRTOS port has a unique portmacro.h header file. Originally a +pre-processor definition was used to ensure the pre-processor found the correct +portmacro.h file for the port being used. That scheme was deprecated in favour +of setting the compiler's include path such that it found the correct +portmacro.h file - removing the need for the constant and allowing the +portmacro.h file to be located anywhere in relation to the port being used. The +definitions below remain in the code for backward compatibility only. New +projects should not use them. */ + +#ifdef OPEN_WATCOM_INDUSTRIAL_PC_PORT + #include "..\..\Source\portable\owatcom\16bitdos\pc\portmacro.h" + typedef void ( __interrupt __far *pxISR )(); +#endif + +#ifdef OPEN_WATCOM_FLASH_LITE_186_PORT + #include "..\..\Source\portable\owatcom\16bitdos\flsh186\portmacro.h" + typedef void ( __interrupt __far *pxISR )(); +#endif + +#ifdef GCC_MEGA_AVR + #include "../portable/GCC/ATMega323/portmacro.h" +#endif + +#ifdef IAR_MEGA_AVR + #include "../portable/IAR/ATMega323/portmacro.h" +#endif + +#ifdef MPLAB_PIC24_PORT + #include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h" +#endif + +#ifdef MPLAB_DSPIC_PORT + #include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h" +#endif + +#ifdef MPLAB_PIC18F_PORT + #include "../../Source/portable/MPLAB/PIC18F/portmacro.h" +#endif + +#ifdef MPLAB_PIC32MX_PORT + #include "../../Source/portable/MPLAB/PIC32MX/portmacro.h" +#endif + +#ifdef _FEDPICC + #include "libFreeRTOS/Include/portmacro.h" +#endif + +#ifdef SDCC_CYGNAL + #include "../../Source/portable/SDCC/Cygnal/portmacro.h" +#endif + +#ifdef GCC_ARM7 + #include "../../Source/portable/GCC/ARM7_LPC2000/portmacro.h" +#endif + +#ifdef GCC_ARM7_ECLIPSE + #include "portmacro.h" +#endif + +#ifdef ROWLEY_LPC23xx + #include "../../Source/portable/GCC/ARM7_LPC23xx/portmacro.h" +#endif + +#ifdef IAR_MSP430 + #include "..\..\Source\portable\IAR\MSP430\portmacro.h" +#endif + +#ifdef GCC_MSP430 + #include "../../Source/portable/GCC/MSP430F449/portmacro.h" +#endif + +#ifdef ROWLEY_MSP430 + #include "../../Source/portable/Rowley/MSP430F449/portmacro.h" +#endif + +#ifdef ARM7_LPC21xx_KEIL_RVDS + #include "..\..\Source\portable\RVDS\ARM7_LPC21xx\portmacro.h" +#endif + +#ifdef SAM7_GCC + #include "../../Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h" +#endif + +#ifdef SAM7_IAR + #include "..\..\Source\portable\IAR\AtmelSAM7S64\portmacro.h" +#endif + +#ifdef SAM9XE_IAR + #include "..\..\Source\portable\IAR\AtmelSAM9XE\portmacro.h" +#endif + +#ifdef LPC2000_IAR + #include "..\..\Source\portable\IAR\LPC2000\portmacro.h" +#endif + +#ifdef STR71X_IAR + #include "..\..\Source\portable\IAR\STR71x\portmacro.h" +#endif + +#ifdef STR75X_IAR + #include "..\..\Source\portable\IAR\STR75x\portmacro.h" +#endif + +#ifdef STR75X_GCC + #include "..\..\Source\portable\GCC\STR75x\portmacro.h" +#endif + +#ifdef STR91X_IAR + #include "..\..\Source\portable\IAR\STR91x\portmacro.h" +#endif + +#ifdef GCC_H8S + #include "../../Source/portable/GCC/H8S2329/portmacro.h" +#endif + +#ifdef GCC_AT91FR40008 + #include "../../Source/portable/GCC/ARM7_AT91FR40008/portmacro.h" +#endif + +#ifdef RVDS_ARMCM3_LM3S102 + #include "../../Source/portable/RVDS/ARM_CM3/portmacro.h" +#endif + +#ifdef GCC_ARMCM3_LM3S102 + #include "../../Source/portable/GCC/ARM_CM3/portmacro.h" +#endif + +#ifdef GCC_ARMCM3 + #include "../../Source/portable/GCC/ARM_CM3/portmacro.h" +#endif + +#ifdef IAR_ARM_CM3 + #include "../../Source/portable/IAR/ARM_CM3/portmacro.h" +#endif + +#ifdef IAR_ARMCM3_LM + #include "../../Source/portable/IAR/ARM_CM3/portmacro.h" +#endif + +#ifdef HCS12_CODE_WARRIOR + #include "../../Source/portable/CodeWarrior/HCS12/portmacro.h" +#endif + +#ifdef MICROBLAZE_GCC + #include "../../Source/portable/GCC/MicroBlaze/portmacro.h" +#endif + +#ifdef TERN_EE + #include "..\..\Source\portable\Paradigm\Tern_EE\small\portmacro.h" +#endif + +#ifdef GCC_HCS12 + #include "../../Source/portable/GCC/HCS12/portmacro.h" +#endif + +#ifdef GCC_MCF5235 + #include "../../Source/portable/GCC/MCF5235/portmacro.h" +#endif + +#ifdef COLDFIRE_V2_GCC + #include "../../../Source/portable/GCC/ColdFire_V2/portmacro.h" +#endif + +#ifdef COLDFIRE_V2_CODEWARRIOR + #include "../../Source/portable/CodeWarrior/ColdFire_V2/portmacro.h" +#endif + +#ifdef GCC_PPC405 + #include "../../Source/portable/GCC/PPC405_Xilinx/portmacro.h" +#endif + +#ifdef GCC_PPC440 + #include "../../Source/portable/GCC/PPC440_Xilinx/portmacro.h" +#endif + +#ifdef _16FX_SOFTUNE + #include "..\..\Source\portable\Softune\MB96340\portmacro.h" +#endif + +#ifdef BCC_INDUSTRIAL_PC_PORT + /* A short file name has to be used in place of the normal + FreeRTOSConfig.h when using the Borland compiler. */ + #include "frconfig.h" + #include "..\portable\BCC\16BitDOS\PC\prtmacro.h" + typedef void ( __interrupt __far *pxISR )(); +#endif + +#ifdef BCC_FLASH_LITE_186_PORT + /* A short file name has to be used in place of the normal + FreeRTOSConfig.h when using the Borland compiler. */ + #include "frconfig.h" + #include "..\portable\BCC\16BitDOS\flsh186\prtmacro.h" + typedef void ( __interrupt __far *pxISR )(); +#endif + +#ifdef __GNUC__ + #ifdef __AVR32_AVR32A__ + #include "portmacro.h" + #endif +#endif + +#ifdef __ICCAVR32__ + #ifdef __CORE__ + #if __CORE__ == __AVR32A__ + #include "portmacro.h" + #endif + #endif +#endif + +#ifdef __91467D + #include "portmacro.h" +#endif + +#ifdef __96340 + #include "portmacro.h" +#endif + + +#ifdef __IAR_V850ES_Fx3__ + #include "../../Source/portable/IAR/V850ES/portmacro.h" +#endif + +#ifdef __IAR_V850ES_Jx3__ + #include "../../Source/portable/IAR/V850ES/portmacro.h" +#endif + +#ifdef __IAR_V850ES_Jx3_L__ + #include "../../Source/portable/IAR/V850ES/portmacro.h" +#endif + +#ifdef __IAR_V850ES_Jx2__ + #include "../../Source/portable/IAR/V850ES/portmacro.h" +#endif + +#ifdef __IAR_V850ES_Hx2__ + #include "../../Source/portable/IAR/V850ES/portmacro.h" +#endif + +#ifdef __IAR_78K0R_Kx3__ + #include "../../Source/portable/IAR/78K0R/portmacro.h" +#endif + +#ifdef __IAR_78K0R_Kx3L__ + #include "../../Source/portable/IAR/78K0R/portmacro.h" +#endif + +#endif /* DEPRECATED_DEFINITIONS_H */ + diff --git a/tools/sdk/include/freertos/freertos/event_groups.h b/tools/sdk/include/freertos/freertos/event_groups.h new file mode 100644 index 00000000..c7d0156a --- /dev/null +++ b/tools/sdk/include/freertos/freertos/event_groups.h @@ -0,0 +1,730 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef EVENT_GROUPS_H +#define EVENT_GROUPS_H + +#ifndef INC_FREERTOS_H + #error "include FreeRTOS.h" must appear in source files before "include event_groups.h" +#endif + +#include "timers.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * An event group is a collection of bits to which an application can assign a + * meaning. For example, an application may create an event group to convey + * the status of various CAN bus related events in which bit 0 might mean "A CAN + * message has been received and is ready for processing", bit 1 might mean "The + * application has queued a message that is ready for sending onto the CAN + * network", and bit 2 might mean "It is time to send a SYNC message onto the + * CAN network" etc. A task can then test the bit values to see which events + * are active, and optionally enter the Blocked state to wait for a specified + * bit or a group of specified bits to be active. To continue the CAN bus + * example, a CAN controlling task can enter the Blocked state (and therefore + * not consume any processing time) until either bit 0, bit 1 or bit 2 are + * active, at which time the bit that was actually active would inform the task + * which action it had to take (process a received message, send a message, or + * send a SYNC). + * + * The event groups implementation contains intelligence to avoid race + * conditions that would otherwise occur were an application to use a simple + * variable for the same purpose. This is particularly important with respect + * to when a bit within an event group is to be cleared, and when bits have to + * be set and then tested atomically - as is the case where event groups are + * used to create a synchronisation point between multiple tasks (a + * 'rendezvous'). + * + * \defgroup EventGroup + */ + + + +/** + * event_groups.h + * + * Type by which event groups are referenced. For example, a call to + * xEventGroupCreate() returns an EventGroupHandle_t variable that can then + * be used as a parameter to other event group functions. + * + * \defgroup EventGroupHandle_t EventGroupHandle_t + * \ingroup EventGroup + */ +typedef void * EventGroupHandle_t; + +/* + * The type that holds event bits always matches TickType_t - therefore the + * number of bits it holds is set by configUSE_16_BIT_TICKS (16 bits if set to 1, + * 32 bits if set to 0. + * + * \defgroup EventBits_t EventBits_t + * \ingroup EventGroup + */ +typedef TickType_t EventBits_t; + +/** + * event_groups.h + *
+ EventGroupHandle_t xEventGroupCreate( void );
+ 
+ * + * Create a new event group. This function cannot be called from an interrupt. + * + * Although event groups are not related to ticks, for internal implementation + * reasons the number of bits available for use in an event group is dependent + * on the configUSE_16_BIT_TICKS setting in FreeRTOSConfig.h. If + * configUSE_16_BIT_TICKS is 1 then each event group contains 8 usable bits (bit + * 0 to bit 7). If configUSE_16_BIT_TICKS is set to 0 then each event group has + * 24 usable bits (bit 0 to bit 23). The EventBits_t type is used to store + * event bits within an event group. + * + * @return If the event group was created then a handle to the event group is + * returned. If there was insufficient FreeRTOS heap available to create the + * event group then NULL is returned. See http://www.freertos.org/a00111.html + * + * Example usage: +
+	// Declare a variable to hold the created event group.
+	EventGroupHandle_t xCreatedEventGroup;
+
+	// Attempt to create the event group.
+	xCreatedEventGroup = xEventGroupCreate();
+
+	// Was the event group created successfully?
+	if( xCreatedEventGroup == NULL )
+	{
+		// The event group was not created because there was insufficient
+		// FreeRTOS heap available.
+	}
+	else
+	{
+		// The event group was created.
+	}
+   
+ * \defgroup xEventGroupCreate xEventGroupCreate + * \ingroup EventGroup + */ +EventGroupHandle_t xEventGroupCreate( void ) PRIVILEGED_FUNCTION; + +/** + * event_groups.h + *
+	EventBits_t xEventGroupWaitBits( 	EventGroupHandle_t xEventGroup,
+										const EventBits_t uxBitsToWaitFor,
+										const BaseType_t xClearOnExit,
+										const BaseType_t xWaitForAllBits,
+										const TickType_t xTicksToWait );
+ 
+ * + * [Potentially] block to wait for one or more bits to be set within a + * previously created event group. + * + * This function cannot be called from an interrupt. + * + * @param xEventGroup The event group in which the bits are being tested. The + * event group must have previously been created using a call to + * xEventGroupCreate(). + * + * @param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test + * inside the event group. For example, to wait for bit 0 and/or bit 2 set + * uxBitsToWaitFor to 0x05. To wait for bits 0 and/or bit 1 and/or bit 2 set + * uxBitsToWaitFor to 0x07. Etc. + * + * @param xClearOnExit If xClearOnExit is set to pdTRUE then any bits within + * uxBitsToWaitFor that are set within the event group will be cleared before + * xEventGroupWaitBits() returns if the wait condition was met (if the function + * returns for a reason other than a timeout). If xClearOnExit is set to + * pdFALSE then the bits set in the event group are not altered when the call to + * xEventGroupWaitBits() returns. + * + * @param xWaitForAllBits If xWaitForAllBits is set to pdTRUE then + * xEventGroupWaitBits() will return when either all the bits in uxBitsToWaitFor + * are set or the specified block time expires. If xWaitForAllBits is set to + * pdFALSE then xEventGroupWaitBits() will return when any one of the bits set + * in uxBitsToWaitFor is set or the specified block time expires. The block + * time is specified by the xTicksToWait parameter. + * + * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait + * for one/all (depending on the xWaitForAllBits value) of the bits specified by + * uxBitsToWaitFor to become set. + * + * @return The value of the event group at the time either the bits being waited + * for became set, or the block time expired. Test the return value to know + * which bits were set. If xEventGroupWaitBits() returned because its timeout + * expired then not all the bits being waited for will be set. If + * xEventGroupWaitBits() returned because the bits it was waiting for were set + * then the returned value is the event group value before any bits were + * automatically cleared in the case that xClearOnExit parameter was set to + * pdTRUE. + * + * Example usage: +
+   #define BIT_0	( 1 << 0 )
+   #define BIT_4	( 1 << 4 )
+
+   void aFunction( EventGroupHandle_t xEventGroup )
+   {
+   EventBits_t uxBits;
+   const TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;
+
+		// Wait a maximum of 100ms for either bit 0 or bit 4 to be set within
+		// the event group.  Clear the bits before exiting.
+		uxBits = xEventGroupWaitBits(
+					xEventGroup,	// The event group being tested.
+					BIT_0 | BIT_4,	// The bits within the event group to wait for.
+					pdTRUE,			// BIT_0 and BIT_4 should be cleared before returning.
+					pdFALSE,		// Don't wait for both bits, either bit will do.
+					xTicksToWait );	// Wait a maximum of 100ms for either bit to be set.
+
+		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
+		{
+			// xEventGroupWaitBits() returned because both bits were set.
+		}
+		else if( ( uxBits & BIT_0 ) != 0 )
+		{
+			// xEventGroupWaitBits() returned because just BIT_0 was set.
+		}
+		else if( ( uxBits & BIT_4 ) != 0 )
+		{
+			// xEventGroupWaitBits() returned because just BIT_4 was set.
+		}
+		else
+		{
+			// xEventGroupWaitBits() returned because xTicksToWait ticks passed
+			// without either BIT_0 or BIT_4 becoming set.
+		}
+   }
+   
+ * \defgroup xEventGroupWaitBits xEventGroupWaitBits + * \ingroup EventGroup + */ +EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; + +/** + * event_groups.h + *
+	EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear );
+ 
+ * + * Clear bits within an event group. This function cannot be called from an + * interrupt. + * + * @param xEventGroup The event group in which the bits are to be cleared. + * + * @param uxBitsToClear A bitwise value that indicates the bit or bits to clear + * in the event group. For example, to clear bit 3 only, set uxBitsToClear to + * 0x08. To clear bit 3 and bit 0 set uxBitsToClear to 0x09. + * + * @return The value of the event group before the specified bits were cleared. + * + * Example usage: +
+   #define BIT_0	( 1 << 0 )
+   #define BIT_4	( 1 << 4 )
+
+   void aFunction( EventGroupHandle_t xEventGroup )
+   {
+   EventBits_t uxBits;
+
+		// Clear bit 0 and bit 4 in xEventGroup.
+		uxBits = xEventGroupClearBits(
+								xEventGroup,	// The event group being updated.
+								BIT_0 | BIT_4 );// The bits being cleared.
+
+		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
+		{
+			// Both bit 0 and bit 4 were set before xEventGroupClearBits() was
+			// called.  Both will now be clear (not set).
+		}
+		else if( ( uxBits & BIT_0 ) != 0 )
+		{
+			// Bit 0 was set before xEventGroupClearBits() was called.  It will
+			// now be clear.
+		}
+		else if( ( uxBits & BIT_4 ) != 0 )
+		{
+			// Bit 4 was set before xEventGroupClearBits() was called.  It will
+			// now be clear.
+		}
+		else
+		{
+			// Neither bit 0 nor bit 4 were set in the first place.
+		}
+   }
+   
+ * \defgroup xEventGroupClearBits xEventGroupClearBits + * \ingroup EventGroup + */ +EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION; + +/** + * event_groups.h + *
+	BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );
+ 
+ * + * A version of xEventGroupClearBits() that can be called from an interrupt. + * + * Setting bits in an event group is not a deterministic operation because there + * are an unknown number of tasks that may be waiting for the bit or bits being + * set. FreeRTOS does not allow nondeterministic operations to be performed + * while interrupts are disabled, so protects event groups that are accessed + * from tasks by suspending the scheduler rather than disabling interrupts. As + * a result event groups cannot be accessed directly from an interrupt service + * routine. Therefore xEventGroupClearBitsFromISR() sends a message to the + * timer task to have the clear operation performed in the context of the timer + * task. + * + * @param xEventGroup The event group in which the bits are to be cleared. + * + * @param uxBitsToClear A bitwise value that indicates the bit or bits to clear. + * For example, to clear bit 3 only, set uxBitsToClear to 0x08. To clear bit 3 + * and bit 0 set uxBitsToClear to 0x09. + * + * @return If the request to execute the function was posted successfully then + * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned + * if the timer service queue was full. + * + * Example usage: +
+   #define BIT_0	( 1 << 0 )
+   #define BIT_4	( 1 << 4 )
+
+   // An event group which it is assumed has already been created by a call to
+   // xEventGroupCreate().
+   EventGroupHandle_t xEventGroup;
+
+   void anInterruptHandler( void )
+   {
+		// Clear bit 0 and bit 4 in xEventGroup.
+		xResult = xEventGroupClearBitsFromISR(
+							xEventGroup,	 // The event group being updated.
+							BIT_0 | BIT_4 ); // The bits being set.
+
+		if( xResult == pdPASS )
+		{
+			// The message was posted successfully.
+		}
+  }
+   
+ * \defgroup xEventGroupSetBitsFromISR xEventGroupSetBitsFromISR + * \ingroup EventGroup + */ +#if( configUSE_TRACE_FACILITY == 1 ) + BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ); +#else + #define xEventGroupClearBitsFromISR( xEventGroup, uxBitsToClear ) xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL ) +#endif + +/** + * event_groups.h + *
+	EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );
+ 
+ * + * Set bits within an event group. + * This function cannot be called from an interrupt. xEventGroupSetBitsFromISR() + * is a version that can be called from an interrupt. + * + * Setting bits in an event group will automatically unblock tasks that are + * blocked waiting for the bits. + * + * @param xEventGroup The event group in which the bits are to be set. + * + * @param uxBitsToSet A bitwise value that indicates the bit or bits to set. + * For example, to set bit 3 only, set uxBitsToSet to 0x08. To set bit 3 + * and bit 0 set uxBitsToSet to 0x09. + * + * @return The value of the event group at the time the call to + * xEventGroupSetBits() returns. There are two reasons why the returned value + * might have the bits specified by the uxBitsToSet parameter cleared. First, + * if setting a bit results in a task that was waiting for the bit leaving the + * blocked state then it is possible the bit will be cleared automatically + * (see the xClearBitOnExit parameter of xEventGroupWaitBits()). Second, any + * unblocked (or otherwise Ready state) task that has a priority above that of + * the task that called xEventGroupSetBits() will execute and may change the + * event group value before the call to xEventGroupSetBits() returns. + * + * Example usage: +
+   #define BIT_0	( 1 << 0 )
+   #define BIT_4	( 1 << 4 )
+
+   void aFunction( EventGroupHandle_t xEventGroup )
+   {
+   EventBits_t uxBits;
+
+		// Set bit 0 and bit 4 in xEventGroup.
+		uxBits = xEventGroupSetBits(
+							xEventGroup,	// The event group being updated.
+							BIT_0 | BIT_4 );// The bits being set.
+
+		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
+		{
+			// Both bit 0 and bit 4 remained set when the function returned.
+		}
+		else if( ( uxBits & BIT_0 ) != 0 )
+		{
+			// Bit 0 remained set when the function returned, but bit 4 was
+			// cleared.  It might be that bit 4 was cleared automatically as a
+			// task that was waiting for bit 4 was removed from the Blocked
+			// state.
+		}
+		else if( ( uxBits & BIT_4 ) != 0 )
+		{
+			// Bit 4 remained set when the function returned, but bit 0 was
+			// cleared.  It might be that bit 0 was cleared automatically as a
+			// task that was waiting for bit 0 was removed from the Blocked
+			// state.
+		}
+		else
+		{
+			// Neither bit 0 nor bit 4 remained set.  It might be that a task
+			// was waiting for both of the bits to be set, and the bits were
+			// cleared as the task left the Blocked state.
+		}
+   }
+   
+ * \defgroup xEventGroupSetBits xEventGroupSetBits + * \ingroup EventGroup + */ +EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) PRIVILEGED_FUNCTION; + +/** + * event_groups.h + *
+	BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken );
+ 
+ * + * A version of xEventGroupSetBits() that can be called from an interrupt. + * + * Setting bits in an event group is not a deterministic operation because there + * are an unknown number of tasks that may be waiting for the bit or bits being + * set. FreeRTOS does not allow nondeterministic operations to be performed in + * interrupts or from critical sections. Therefore xEventGroupSetBitFromISR() + * sends a message to the timer task to have the set operation performed in the + * context of the timer task - where a scheduler lock is used in place of a + * critical section. + * + * @param xEventGroup The event group in which the bits are to be set. + * + * @param uxBitsToSet A bitwise value that indicates the bit or bits to set. + * For example, to set bit 3 only, set uxBitsToSet to 0x08. To set bit 3 + * and bit 0 set uxBitsToSet to 0x09. + * + * @param pxHigherPriorityTaskWoken As mentioned above, calling this function + * will result in a message being sent to the timer daemon task. If the + * priority of the timer daemon task is higher than the priority of the + * currently running task (the task the interrupt interrupted) then + * *pxHigherPriorityTaskWoken will be set to pdTRUE by + * xEventGroupSetBitsFromISR(), indicating that a context switch should be + * requested before the interrupt exits. For that reason + * *pxHigherPriorityTaskWoken must be initialised to pdFALSE. See the + * example code below. + * + * @return If the request to execute the function was posted successfully then + * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned + * if the timer service queue was full. + * + * Example usage: +
+   #define BIT_0	( 1 << 0 )
+   #define BIT_4	( 1 << 4 )
+
+   // An event group which it is assumed has already been created by a call to
+   // xEventGroupCreate().
+   EventGroupHandle_t xEventGroup;
+
+   void anInterruptHandler( void )
+   {
+   BaseType_t xHigherPriorityTaskWoken, xResult;
+
+		// xHigherPriorityTaskWoken must be initialised to pdFALSE.
+		xHigherPriorityTaskWoken = pdFALSE;
+
+		// Set bit 0 and bit 4 in xEventGroup.
+		xResult = xEventGroupSetBitsFromISR(
+							xEventGroup,	// The event group being updated.
+							BIT_0 | BIT_4   // The bits being set.
+							&xHigherPriorityTaskWoken );
+
+		// Was the message posted successfully?
+		if( xResult == pdPASS )
+		{
+			// If xHigherPriorityTaskWoken is now set to pdTRUE then a context
+			// switch should be requested.  The macro used is port specific and 
+			// will be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() - 
+			// refer to the documentation page for the port being used.
+			portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+		}
+  }
+   
+ * \defgroup xEventGroupSetBitsFromISR xEventGroupSetBitsFromISR + * \ingroup EventGroup + */ +#if( configUSE_TRACE_FACILITY == 1 ) + BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken ); +#else + #define xEventGroupSetBitsFromISR( xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken ) xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken ) +#endif + +/** + * event_groups.h + *
+	EventBits_t xEventGroupSync(	EventGroupHandle_t xEventGroup,
+									const EventBits_t uxBitsToSet,
+									const EventBits_t uxBitsToWaitFor,
+									TickType_t xTicksToWait );
+ 
+ * + * Atomically set bits within an event group, then wait for a combination of + * bits to be set within the same event group. This functionality is typically + * used to synchronise multiple tasks, where each task has to wait for the other + * tasks to reach a synchronisation point before proceeding. + * + * This function cannot be used from an interrupt. + * + * The function will return before its block time expires if the bits specified + * by the uxBitsToWait parameter are set, or become set within that time. In + * this case all the bits specified by uxBitsToWait will be automatically + * cleared before the function returns. + * + * @param xEventGroup The event group in which the bits are being tested. The + * event group must have previously been created using a call to + * xEventGroupCreate(). + * + * @param uxBitsToSet The bits to set in the event group before determining + * if, and possibly waiting for, all the bits specified by the uxBitsToWait + * parameter are set. + * + * @param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test + * inside the event group. For example, to wait for bit 0 and bit 2 set + * uxBitsToWaitFor to 0x05. To wait for bits 0 and bit 1 and bit 2 set + * uxBitsToWaitFor to 0x07. Etc. + * + * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait + * for all of the bits specified by uxBitsToWaitFor to become set. + * + * @return The value of the event group at the time either the bits being waited + * for became set, or the block time expired. Test the return value to know + * which bits were set. If xEventGroupSync() returned because its timeout + * expired then not all the bits being waited for will be set. If + * xEventGroupSync() returned because all the bits it was waiting for were + * set then the returned value is the event group value before any bits were + * automatically cleared. + * + * Example usage: +
+ // Bits used by the three tasks.
+ #define TASK_0_BIT		( 1 << 0 )
+ #define TASK_1_BIT		( 1 << 1 )
+ #define TASK_2_BIT		( 1 << 2 )
+
+ #define ALL_SYNC_BITS ( TASK_0_BIT | TASK_1_BIT | TASK_2_BIT )
+
+ // Use an event group to synchronise three tasks.  It is assumed this event
+ // group has already been created elsewhere.
+ EventGroupHandle_t xEventBits;
+
+ void vTask0( void *pvParameters )
+ {
+ EventBits_t uxReturn;
+ TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;
+
+	 for( ;; )
+	 {
+		// Perform task functionality here.
+
+		// Set bit 0 in the event flag to note this task has reached the
+		// sync point.  The other two tasks will set the other two bits defined
+		// by ALL_SYNC_BITS.  All three tasks have reached the synchronisation
+		// point when all the ALL_SYNC_BITS are set.  Wait a maximum of 100ms
+		// for this to happen.
+		uxReturn = xEventGroupSync( xEventBits, TASK_0_BIT, ALL_SYNC_BITS, xTicksToWait );
+
+		if( ( uxReturn & ALL_SYNC_BITS ) == ALL_SYNC_BITS )
+		{
+			// All three tasks reached the synchronisation point before the call
+			// to xEventGroupSync() timed out.
+		}
+	}
+ }
+
+ void vTask1( void *pvParameters )
+ {
+	 for( ;; )
+	 {
+		// Perform task functionality here.
+
+		// Set bit 1 in the event flag to note this task has reached the
+		// synchronisation point.  The other two tasks will set the other two
+		// bits defined by ALL_SYNC_BITS.  All three tasks have reached the
+		// synchronisation point when all the ALL_SYNC_BITS are set.  Wait
+		// indefinitely for this to happen.
+		xEventGroupSync( xEventBits, TASK_1_BIT, ALL_SYNC_BITS, portMAX_DELAY );
+
+		// xEventGroupSync() was called with an indefinite block time, so
+		// this task will only reach here if the syncrhonisation was made by all
+		// three tasks, so there is no need to test the return value.
+	 }
+ }
+
+ void vTask2( void *pvParameters )
+ {
+	 for( ;; )
+	 {
+		// Perform task functionality here.
+
+		// Set bit 2 in the event flag to note this task has reached the
+		// synchronisation point.  The other two tasks will set the other two
+		// bits defined by ALL_SYNC_BITS.  All three tasks have reached the
+		// synchronisation point when all the ALL_SYNC_BITS are set.  Wait
+		// indefinitely for this to happen.
+		xEventGroupSync( xEventBits, TASK_2_BIT, ALL_SYNC_BITS, portMAX_DELAY );
+
+		// xEventGroupSync() was called with an indefinite block time, so
+		// this task will only reach here if the syncrhonisation was made by all
+		// three tasks, so there is no need to test the return value.
+	}
+ }
+
+ 
+ * \defgroup xEventGroupSync xEventGroupSync + * \ingroup EventGroup + */ +EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; + + +/** + * event_groups.h + *
+	EventBits_t xEventGroupGetBits( EventGroupHandle_t xEventGroup );
+ 
+ * + * Returns the current value of the bits in an event group. This function + * cannot be used from an interrupt. + * + * @param xEventGroup The event group being queried. + * + * @return The event group bits at the time xEventGroupGetBits() was called. + * + * \defgroup xEventGroupGetBits xEventGroupGetBits + * \ingroup EventGroup + */ +#define xEventGroupGetBits( xEventGroup ) xEventGroupClearBits( xEventGroup, 0 ) + +/** + * event_groups.h + *
+	EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup );
+ 
+ * + * A version of xEventGroupGetBits() that can be called from an ISR. + * + * @param xEventGroup The event group being queried. + * + * @return The event group bits at the time xEventGroupGetBitsFromISR() was called. + * + * \defgroup xEventGroupGetBitsFromISR xEventGroupGetBitsFromISR + * \ingroup EventGroup + */ +EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ); + +/** + * event_groups.h + *
+	void xEventGroupDelete( EventGroupHandle_t xEventGroup );
+ 
+ * + * Delete an event group that was previously created by a call to + * xEventGroupCreate(). Tasks that are blocked on the event group will be + * unblocked and obtain 0 as the event group's value. + * + * @param xEventGroup The event group being deleted. + */ +void vEventGroupDelete( EventGroupHandle_t xEventGroup ); + +/* For internal use only. */ +void vEventGroupSetBitsCallback( void *pvEventGroup, const uint32_t ulBitsToSet ); +void vEventGroupClearBitsCallback( void *pvEventGroup, const uint32_t ulBitsToClear ); + +#if (configUSE_TRACE_FACILITY == 1) + UBaseType_t uxEventGroupGetNumber( void* xEventGroup ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* EVENT_GROUPS_H */ + + diff --git a/tools/sdk/include/freertos/freertos/heap_regions.h b/tools/sdk/include/freertos/freertos/heap_regions.h new file mode 100644 index 00000000..aedea42a --- /dev/null +++ b/tools/sdk/include/freertos/freertos/heap_regions.h @@ -0,0 +1,34 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef _HEAP_REGIONS_H +#define _HEAP_REGIONS_H + +#include "freertos/FreeRTOS.h" + + +typedef struct HeapRegionTagged +{ + uint8_t *pucStartAddress; + size_t xSizeInBytes; + BaseType_t xTag; + uint32_t xExecAddr; +} HeapRegionTagged_t; + + +void vPortDefineHeapRegionsTagged( const HeapRegionTagged_t * const pxHeapRegions ); +void *pvPortMallocTagged( size_t xWantedSize, BaseType_t tag ); + + + +#endif \ No newline at end of file diff --git a/tools/sdk/include/freertos/freertos/heap_regions_debug.h b/tools/sdk/include/freertos/freertos/heap_regions_debug.h new file mode 100644 index 00000000..81bf1d6c --- /dev/null +++ b/tools/sdk/include/freertos/freertos/heap_regions_debug.h @@ -0,0 +1,78 @@ +#ifndef _HEAP_REGION_DEBUG_H +#define _HEAP_REGION_DEBUG_H + +#include "FreeRTOS.h" + +#if (configENABLE_MEMORY_DEBUG == 1) + +#define DEBUG_DOG_VALUE 0x1a2b3c4d +#define DEBUG_MAX_INFO_NUM 20 +#define DEBUG_TYPE_MALLOC 1 +#define DEBUG_TYPE_FREE 2 + +typedef struct { + unsigned int dog; + char task[4]; + unsigned int pc; +}block_head_t; + +typedef struct { + unsigned int dog; +}block_tail_t; + +/* Please keep this definition same as BlockLink_t */ +typedef struct _os_block_t { + struct _os_block_t *next; + size_t size; + unsigned int xtag; +}os_block_t; + +typedef struct { + block_head_t head; + os_block_t os_block; +}debug_block_t; + +typedef struct _mem_dbg_info{ + void *addr; + char *task; + uint32_t pc; + uint32_t time; + uint8_t type; +}mem_dbg_info_t; + +typedef struct _mem_dbg_ctl{ + mem_dbg_info_t info[DEBUG_MAX_INFO_NUM]; + uint32_t cnt; +}mem_dbg_ctl_t; + +#define BLOCK_HEAD_LEN sizeof(block_head_t) +#define BLOCK_TAIL_LEN sizeof(block_tail_t) +#define OS_BLOCK(_b) ((os_block_t*)((debug_block_t*)((char*)(_b) + BLOCK_HEAD_LEN))) +#define DEBUG_BLOCK(_b) ((debug_block_t*)((char*)(_b) - BLOCK_HEAD_LEN)) +#define HEAD_DOG(_b) ((_b)->head.dog) +#define TAIL_DOG(_b) (*(unsigned int*)((char*)(_b) + (((_b)->os_block.size & (~g_alloc_bit) ) - BLOCK_TAIL_LEN))) + +#define DOG_ASSERT()\ +{\ + mem_debug_show();\ + abort();\ +} + +extern void mem_check_block(void * data); +extern void mem_init_dog(void *data); +extern void mem_debug_init(size_t size, void *start, void *end, portMUX_TYPE *mutex, unsigned int alloc_bit); +extern void mem_malloc_block(void *data); +extern void mem_free_block(void *data); +extern void mem_check_all(void* pv); + +#else + +#define mem_check_block(...) +#define mem_init_dog(...) + +#define BLOCK_HEAD_LEN 0 +#define BLOCK_TAIL_LEN 0 + +#endif + +#endif diff --git a/tools/sdk/include/freertos/freertos/list.h b/tools/sdk/include/freertos/freertos/list.h new file mode 100644 index 00000000..b63df7f7 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/list.h @@ -0,0 +1,453 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +/* + * This is the list implementation used by the scheduler. While it is tailored + * heavily for the schedulers needs, it is also available for use by + * application code. + * + * list_ts can only store pointers to list_item_ts. Each ListItem_t contains a + * numeric value (xItemValue). Most of the time the lists are sorted in + * descending item value order. + * + * Lists are created already containing one list item. The value of this + * item is the maximum possible that can be stored, it is therefore always at + * the end of the list and acts as a marker. The list member pxHead always + * points to this marker - even though it is at the tail of the list. This + * is because the tail contains a wrap back pointer to the true head of + * the list. + * + * In addition to it's value, each list item contains a pointer to the next + * item in the list (pxNext), a pointer to the list it is in (pxContainer) + * and a pointer to back to the object that contains it. These later two + * pointers are included for efficiency of list manipulation. There is + * effectively a two way link between the object containing the list item and + * the list item itself. + * + * + * \page ListIntroduction List Implementation + * \ingroup FreeRTOSIntro + */ + +#ifndef INC_FREERTOS_H + #error FreeRTOS.h must be included before list.h +#endif + +#ifndef LIST_H +#define LIST_H + +/* + * The list structure members are modified from within interrupts, and therefore + * by rights should be declared volatile. However, they are only modified in a + * functionally atomic way (within critical sections of with the scheduler + * suspended) and are either passed by reference into a function or indexed via + * a volatile variable. Therefore, in all use cases tested so far, the volatile + * qualifier can be omitted in order to provide a moderate performance + * improvement without adversely affecting functional behaviour. The assembly + * instructions generated by the IAR, ARM and GCC compilers when the respective + * compiler's options were set for maximum optimisation has been inspected and + * deemed to be as intended. That said, as compiler technology advances, and + * especially if aggressive cross module optimisation is used (a use case that + * has not been exercised to any great extend) then it is feasible that the + * volatile qualifier will be needed for correct optimisation. It is expected + * that a compiler removing essential code because, without the volatile + * qualifier on the list structure members and with aggressive cross module + * optimisation, the compiler deemed the code unnecessary will result in + * complete and obvious failure of the scheduler. If this is ever experienced + * then the volatile qualifier can be inserted in the relevant places within the + * list structures by simply defining configLIST_VOLATILE to volatile in + * FreeRTOSConfig.h (as per the example at the bottom of this comment block). + * If configLIST_VOLATILE is not defined then the preprocessor directives below + * will simply #define configLIST_VOLATILE away completely. + * + * To use volatile list structure members then add the following line to + * FreeRTOSConfig.h (without the quotes): + * "#define configLIST_VOLATILE volatile" + */ +#ifndef configLIST_VOLATILE + #define configLIST_VOLATILE +#endif /* configSUPPORT_CROSS_MODULE_OPTIMISATION */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Macros that can be used to place known values within the list structures, +then check that the known values do not get corrupted during the execution of +the application. These may catch the list data structures being overwritten in +memory. They will not catch data errors caused by incorrect configuration or +use of FreeRTOS.*/ +#if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 ) + /* Define the macros to do nothing. */ + #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE + #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE + #define listFIRST_LIST_INTEGRITY_CHECK_VALUE + #define listSECOND_LIST_INTEGRITY_CHECK_VALUE + #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) + #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) + #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) + #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) + #define listTEST_LIST_ITEM_INTEGRITY( pxItem ) + #define listTEST_LIST_INTEGRITY( pxList ) +#else + /* Define macros that add new members into the list structures. */ + #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue1; + #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue2; + #define listFIRST_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue1; + #define listSECOND_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue2; + + /* Define macros that set the new structure members to known values. */ + #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue1 = pdINTEGRITY_CHECK_VALUE + #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue2 = pdINTEGRITY_CHECK_VALUE + #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE + #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) ( pxList )->xListIntegrityValue2 = pdINTEGRITY_CHECK_VALUE + + /* Define macros that will assert if one of the structure members does not + contain its expected value. */ + #define listTEST_LIST_ITEM_INTEGRITY( pxItem ) configASSERT( ( ( pxItem )->xListItemIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxItem )->xListItemIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) ) + #define listTEST_LIST_INTEGRITY( pxList ) configASSERT( ( ( pxList )->xListIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxList )->xListIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) ) +#endif /* configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES */ + + +/* + * Definition of the only type of object that a list can contain. + */ +struct xLIST_ITEM +{ + listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ + configLIST_VOLATILE TickType_t xItemValue; /*< The value being listed. In most cases this is used to sort the list in descending order. */ + struct xLIST_ITEM * configLIST_VOLATILE pxNext; /*< Pointer to the next ListItem_t in the list. */ + struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /*< Pointer to the previous ListItem_t in the list. */ + void * pvOwner; /*< Pointer to the object (normally a TCB) that contains the list item. There is therefore a two way link between the object containing the list item and the list item itself. */ + void * configLIST_VOLATILE pvContainer; /*< Pointer to the list in which this list item is placed (if any). */ + listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ +}; +typedef struct xLIST_ITEM ListItem_t; /* For some reason lint wants this as two separate definitions. */ + +struct xMINI_LIST_ITEM +{ + listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ + configLIST_VOLATILE TickType_t xItemValue; + struct xLIST_ITEM * configLIST_VOLATILE pxNext; + struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; +}; +typedef struct xMINI_LIST_ITEM MiniListItem_t; + +/* + * Definition of the type of queue used by the scheduler. + */ +typedef struct xLIST +{ + listFIRST_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ + configLIST_VOLATILE UBaseType_t uxNumberOfItems; + ListItem_t * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */ + MiniListItem_t xListEnd; /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */ + listSECOND_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ +} List_t; + +/* + * Access macro to set the owner of a list item. The owner of a list item + * is the object (usually a TCB) that contains the list item. + * + * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER + * \ingroup LinkedList + */ +#define listSET_LIST_ITEM_OWNER( pxListItem, pxOwner ) ( ( pxListItem )->pvOwner = ( void * ) ( pxOwner ) ) + +/* + * Access macro to get the owner of a list item. The owner of a list item + * is the object (usually a TCB) that contains the list item. + * + * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER + * \ingroup LinkedList + */ +#define listGET_LIST_ITEM_OWNER( pxListItem ) ( ( pxListItem )->pvOwner ) + +/* + * Access macro to set the value of the list item. In most cases the value is + * used to sort the list in descending order. + * + * \page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE + * \ingroup LinkedList + */ +#define listSET_LIST_ITEM_VALUE( pxListItem, xValue ) ( ( pxListItem )->xItemValue = ( xValue ) ) + +/* + * Access macro to retrieve the value of the list item. The value can + * represent anything - for example the priority of a task, or the time at + * which a task should be unblocked. + * + * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE + * \ingroup LinkedList + */ +#define listGET_LIST_ITEM_VALUE( pxListItem ) ( ( pxListItem )->xItemValue ) + +/* + * Access macro to retrieve the value of the list item at the head of a given + * list. + * + * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE + * \ingroup LinkedList + */ +#define listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext->xItemValue ) + +/* + * Return the list item at the head of the list. + * + * \page listGET_HEAD_ENTRY listGET_HEAD_ENTRY + * \ingroup LinkedList + */ +#define listGET_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext ) + +/* + * Return the list item at the head of the list. + * + * \page listGET_NEXT listGET_NEXT + * \ingroup LinkedList + */ +#define listGET_NEXT( pxListItem ) ( ( pxListItem )->pxNext ) + +/* + * Return the list item that marks the end of the list + * + * \page listGET_END_MARKER listGET_END_MARKER + * \ingroup LinkedList + */ +#define listGET_END_MARKER( pxList ) ( ( ListItem_t const * ) ( &( ( pxList )->xListEnd ) ) ) + +/* + * Access macro to determine if a list contains any items. The macro will + * only have the value true if the list is empty. + * + * \page listLIST_IS_EMPTY listLIST_IS_EMPTY + * \ingroup LinkedList + */ +#define listLIST_IS_EMPTY( pxList ) ( ( BaseType_t ) ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ) + +/* + * Access macro to return the number of items in the list. + */ +#define listCURRENT_LIST_LENGTH( pxList ) ( ( pxList )->uxNumberOfItems ) + +/* + * Access function to obtain the owner of the next entry in a list. + * + * The list member pxIndex is used to walk through a list. Calling + * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list + * and returns that entry's pxOwner parameter. Using multiple calls to this + * function it is therefore possible to move through every item contained in + * a list. + * + * The pxOwner parameter of a list item is a pointer to the object that owns + * the list item. In the scheduler this is normally a task control block. + * The pxOwner parameter effectively creates a two way link between the list + * item and its owner. + * + * @param pxTCB pxTCB is set to the address of the owner of the next list item. + * @param pxList The list from which the next item owner is to be returned. + * + * \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY + * \ingroup LinkedList + */ +#define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList ) \ +{ \ +List_t * const pxConstList = ( pxList ); \ + /* Increment the index to the next item and return the item, ensuring */ \ + /* we don't return the marker used at the end of the list. */ \ + ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \ + if( ( void * ) ( pxConstList )->pxIndex == ( void * ) &( ( pxConstList )->xListEnd ) ) \ + { \ + ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \ + } \ + ( pxTCB ) = ( pxConstList )->pxIndex->pvOwner; \ +} + + +/* + * Access function to obtain the owner of the first entry in a list. Lists + * are normally sorted in ascending item value order. + * + * This function returns the pxOwner member of the first item in the list. + * The pxOwner parameter of a list item is a pointer to the object that owns + * the list item. In the scheduler this is normally a task control block. + * The pxOwner parameter effectively creates a two way link between the list + * item and its owner. + * + * @param pxList The list from which the owner of the head item is to be + * returned. + * + * \page listGET_OWNER_OF_HEAD_ENTRY listGET_OWNER_OF_HEAD_ENTRY + * \ingroup LinkedList + */ +#define listGET_OWNER_OF_HEAD_ENTRY( pxList ) ( (&( ( pxList )->xListEnd ))->pxNext->pvOwner ) + +/* + * Check to see if a list item is within a list. The list item maintains a + * "container" pointer that points to the list it is in. All this macro does + * is check to see if the container and the list match. + * + * @param pxList The list we want to know if the list item is within. + * @param pxListItem The list item we want to know if is in the list. + * @return pdTRUE if the list item is in the list, otherwise pdFALSE. + */ +#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( BaseType_t ) ( ( pxListItem )->pvContainer == ( void * ) ( pxList ) ) ) + +/* + * Return the list a list item is contained within (referenced from). + * + * @param pxListItem The list item being queried. + * @return A pointer to the List_t object that references the pxListItem + */ +#define listLIST_ITEM_CONTAINER( pxListItem ) ( ( pxListItem )->pvContainer ) + +/* + * This provides a crude means of knowing if a list has been initialised, as + * pxList->xListEnd.xItemValue is set to portMAX_DELAY by the vListInitialise() + * function. + */ +#define listLIST_IS_INITIALISED( pxList ) ( ( pxList )->xListEnd.xItemValue == portMAX_DELAY ) + +/* + * Must be called before a list is used! This initialises all the members + * of the list structure and inserts the xListEnd item into the list as a + * marker to the back of the list. + * + * @param pxList Pointer to the list being initialised. + * + * \page vListInitialise vListInitialise + * \ingroup LinkedList + */ +void vListInitialise( List_t * const pxList ); + +/* + * Must be called before a list item is used. This sets the list container to + * null so the item does not think that it is already contained in a list. + * + * @param pxItem Pointer to the list item being initialised. + * + * \page vListInitialiseItem vListInitialiseItem + * \ingroup LinkedList + */ +void vListInitialiseItem( ListItem_t * const pxItem ); + +/* + * Insert a list item into a list. The item will be inserted into the list in + * a position determined by its item value (descending item value order). + * + * @param pxList The list into which the item is to be inserted. + * + * @param pxNewListItem The item that is to be placed in the list. + * + * \page vListInsert vListInsert + * \ingroup LinkedList + */ +void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ); + +/* + * Insert a list item into a list. The item will be inserted in a position + * such that it will be the last item within the list returned by multiple + * calls to listGET_OWNER_OF_NEXT_ENTRY. + * + * The list member pvIndex is used to walk through a list. Calling + * listGET_OWNER_OF_NEXT_ENTRY increments pvIndex to the next item in the list. + * Placing an item in a list using vListInsertEnd effectively places the item + * in the list position pointed to by pvIndex. This means that every other + * item within the list will be returned by listGET_OWNER_OF_NEXT_ENTRY before + * the pvIndex parameter again points to the item being inserted. + * + * @param pxList The list into which the item is to be inserted. + * + * @param pxNewListItem The list item to be inserted into the list. + * + * \page vListInsertEnd vListInsertEnd + * \ingroup LinkedList + */ +void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ); + +/* + * Remove an item from a list. The list item has a pointer to the list that + * it is in, so only the list item need be passed into the function. + * + * @param uxListRemove The item to be removed. The item will remove itself from + * the list pointed to by it's pxContainer parameter. + * + * @return The number of items that remain in the list after the list item has + * been removed. + * + * \page uxListRemove uxListRemove + * \ingroup LinkedList + */ +UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/tools/sdk/include/freertos/freertos/mpu_wrappers.h b/tools/sdk/include/freertos/freertos/mpu_wrappers.h new file mode 100644 index 00000000..504f6d93 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/mpu_wrappers.h @@ -0,0 +1,157 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef MPU_WRAPPERS_H +#define MPU_WRAPPERS_H + +/* This file redefines API functions to be called through a wrapper macro, but +only for ports that are using the MPU. */ +#if portUSING_MPU_WRAPPERS + + /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is + included from queue.c or task.c to prevent it from having an effect within + those files. */ + #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE + + #define xTaskGenericCreate MPU_xTaskGenericCreate + #define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions + #define vTaskDelete MPU_vTaskDelete + #define vTaskDelayUntil MPU_vTaskDelayUntil + #define vTaskDelay MPU_vTaskDelay + #define uxTaskPriorityGet MPU_uxTaskPriorityGet + #define vTaskPrioritySet MPU_vTaskPrioritySet + #define eTaskGetState MPU_eTaskGetState + #define vTaskSuspend MPU_vTaskSuspend + #define vTaskResume MPU_vTaskResume + #define vTaskSuspendAll MPU_vTaskSuspendAll + #define xTaskResumeAll MPU_xTaskResumeAll + #define xTaskGetTickCount MPU_xTaskGetTickCount + #define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks + #define vTaskList MPU_vTaskList + #define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats + #define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag + #define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag + #define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook + #define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark + #define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle + #define xTaskGetSchedulerState MPU_xTaskGetSchedulerState + #define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle + #define uxTaskGetSystemState MPU_uxTaskGetSystemState + + #define xQueueGenericCreate MPU_xQueueGenericCreate + #define xQueueCreateMutex MPU_xQueueCreateMutex + #define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive + #define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive + #define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore + #define xQueueGenericSend MPU_xQueueGenericSend + #define xQueueAltGenericSend MPU_xQueueAltGenericSend + #define xQueueAltGenericReceive MPU_xQueueAltGenericReceive + #define xQueueGenericReceive MPU_xQueueGenericReceive + #define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting + #define vQueueDelete MPU_vQueueDelete + #define xQueueGenericReset MPU_xQueueGenericReset + #define xQueueCreateSet MPU_xQueueCreateSet + #define xQueueSelectFromSet MPU_xQueueSelectFromSet + #define xQueueAddToSet MPU_xQueueAddToSet + #define xQueueRemoveFromSet MPU_xQueueRemoveFromSet + #define xQueuePeekFromISR MPU_xQueuePeekFromISR + #define xQueueGetMutexHolder MPU_xQueueGetMutexHolder + + #define pvPortMalloc MPU_pvPortMalloc + #define vPortFree MPU_vPortFree + #define xPortGetFreeHeapSize MPU_xPortGetFreeHeapSize + #define vPortInitialiseBlocks MPU_vPortInitialiseBlocks + + #if configQUEUE_REGISTRY_SIZE > 0 + #define vQueueAddToRegistry MPU_vQueueAddToRegistry + #define vQueueUnregisterQueue MPU_vQueueUnregisterQueue + #endif + + /* Remove the privileged function macro. */ + #define PRIVILEGED_FUNCTION + + #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ + + /* Ensure API functions go in the privileged execution section. */ + #define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions"))) + #define PRIVILEGED_DATA __attribute__((section("privileged_data"))) + + #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ + +#else /* portUSING_MPU_WRAPPERS */ + + #define PRIVILEGED_FUNCTION + #define PRIVILEGED_DATA + #define portUSING_MPU_WRAPPERS 0 + +#endif /* portUSING_MPU_WRAPPERS */ + + +#endif /* MPU_WRAPPERS_H */ + diff --git a/tools/sdk/include/freertos/freertos/panic.h b/tools/sdk/include/freertos/freertos/panic.h new file mode 100644 index 00000000..9e902ed2 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/panic.h @@ -0,0 +1,7 @@ +#ifndef PANIC_H +#define PANIC_H + +void setBreakpointIfJtag(void *fn); + + +#endif \ No newline at end of file diff --git a/tools/sdk/include/freertos/freertos/portable.h b/tools/sdk/include/freertos/freertos/portable.h new file mode 100644 index 00000000..4030ca0c --- /dev/null +++ b/tools/sdk/include/freertos/freertos/portable.h @@ -0,0 +1,203 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +/*----------------------------------------------------------- + * Portable layer API. Each function must be defined for each port. + *----------------------------------------------------------*/ + +#ifndef PORTABLE_H +#define PORTABLE_H + +/* Each FreeRTOS port has a unique portmacro.h header file. Originally a +pre-processor definition was used to ensure the pre-processor found the correct +portmacro.h file for the port being used. That scheme was deprecated in favour +of setting the compiler's include path such that it found the correct +portmacro.h file - removing the need for the constant and allowing the +portmacro.h file to be located anywhere in relation to the port being used. +Purely for reasons of backward compatibility the old method is still valid, but +to make it clear that new projects should not use it, support for the port +specific constants has been moved into the deprecated_definitions.h header +file. */ +#include "deprecated_definitions.h" + +/* If portENTER_CRITICAL is not defined then including deprecated_definitions.h +did not result in a portmacro.h header file being included - and it should be +included here. In this case the path to the correct portmacro.h header file +must be set in the compiler's include path. */ +#ifndef portENTER_CRITICAL + #include "portmacro.h" +#endif + +#if portBYTE_ALIGNMENT == 8 + #define portBYTE_ALIGNMENT_MASK ( 0x0007U ) +#endif + +#if portBYTE_ALIGNMENT == 4 + #define portBYTE_ALIGNMENT_MASK ( 0x0003 ) +#endif + +#if portBYTE_ALIGNMENT == 2 + #define portBYTE_ALIGNMENT_MASK ( 0x0001 ) +#endif + +#if portBYTE_ALIGNMENT == 1 + #define portBYTE_ALIGNMENT_MASK ( 0x0000 ) +#endif + +#ifndef portBYTE_ALIGNMENT_MASK + #error "Invalid portBYTE_ALIGNMENT definition" +#endif + +#ifndef portNUM_CONFIGURABLE_REGIONS + #define portNUM_CONFIGURABLE_REGIONS 1 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "mpu_wrappers.h" + +/* + * Setup the stack of a new task so it is ready to be placed under the + * scheduler control. The registers have to be placed on the stack in + * the order that the port expects to find them. + * + */ +#if( portUSING_MPU_WRAPPERS == 1 ) + StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION; +#else + StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; +#endif + +/* Used by heap_5.c. */ +typedef struct HeapRegion +{ + uint8_t *pucStartAddress; + size_t xSizeInBytes; +} HeapRegion_t; + +/* + * Used to define multiple heap regions for use by heap_5.c. This function + * must be called before any calls to pvPortMalloc() - not creating a task, + * queue, semaphore, mutex, software timer, event group, etc. will result in + * pvPortMalloc being called. + * + * pxHeapRegions passes in an array of HeapRegion_t structures - each of which + * defines a region of memory that can be used as the heap. The array is + * terminated by a HeapRegions_t structure that has a size of 0. The region + * with the lowest start address must appear first in the array. + */ +void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ); + + +/* + * Map to the memory management routines required for the port. + */ +void *pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION; +void vPortFree( void *pv ) PRIVILEGED_FUNCTION; +void vPortInitialiseBlocks( void ) PRIVILEGED_FUNCTION; +size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION; +size_t xPortGetMinimumEverFreeHeapSize( void ) PRIVILEGED_FUNCTION; + +/* + * Setup the hardware ready for the scheduler to take control. This generally + * sets up a tick interrupt and sets timers for the correct tick frequency. + */ +BaseType_t xPortStartScheduler( void ) PRIVILEGED_FUNCTION; + +/* + * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so + * the hardware is left in its original condition after the scheduler stops + * executing. + */ +void vPortEndScheduler( void ) PRIVILEGED_FUNCTION; + +/* + * The structures and methods of manipulating the MPU are contained within the + * port layer. + * + * Fills the xMPUSettings structure with the memory region information + * contained in xRegions. + */ +#if( portUSING_MPU_WRAPPERS == 1 ) + struct xMEMORY_REGION; + void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint16_t usStackDepth ) PRIVILEGED_FUNCTION; +#endif + +/* Multi-core: get current core ID */ +int xPortGetCoreID( void ); + + +#ifdef __cplusplus +} +#endif + +#endif /* PORTABLE_H */ + diff --git a/tools/sdk/include/freertos/freertos/portbenchmark.h b/tools/sdk/include/freertos/freertos/portbenchmark.h new file mode 100644 index 00000000..4ce41d3d --- /dev/null +++ b/tools/sdk/include/freertos/freertos/portbenchmark.h @@ -0,0 +1,46 @@ +/******************************************************************************* +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +*/ + +/* + * This utility helps benchmarking interrupt latency and context switches. + * In order to enable it, set configBENCHMARK to 1 in FreeRTOSConfig.h. + * You will also need to download the FreeRTOS_trace patch that contains + * portbenchmark.c and the complete version of portbenchmark.h + */ + +#ifndef PORTBENCHMARK_H +#define PORTBENCHMARK_H + +#if configBENCHMARK + #error "You need to download the FreeRTOS_trace patch that overwrites this file" +#endif + +#define portbenchmarkINTERRUPT_DISABLE() +#define portbenchmarkINTERRUPT_RESTORE(newstate) +#define portbenchmarkIntLatency() +#define portbenchmarkIntWait() +#define portbenchmarkReset() +#define portbenchmarkPrint() + +#endif /* PORTBENCHMARK */ diff --git a/tools/sdk/include/freertos/freertos/portmacro.h b/tools/sdk/include/freertos/freertos/portmacro.h new file mode 100644 index 00000000..ab83b0e0 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/portmacro.h @@ -0,0 +1,302 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef PORTMACRO_H +#define PORTMACRO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __ASSEMBLER__ + +#include + +#include +#include +#include +#include /* required for XSHAL_CLIB */ +#include + +//#include "xtensa_context.h" + +/*----------------------------------------------------------- + * Port specific definitions. + * + * The settings in this file configure FreeRTOS correctly for the + * given hardware and compiler. + * + * These settings should not be altered. + *----------------------------------------------------------- + */ + +/* Type definitions. */ + +#define portCHAR int8_t +#define portFLOAT float +#define portDOUBLE double +#define portLONG int32_t +#define portSHORT int16_t +#define portSTACK_TYPE uint8_t +#define portBASE_TYPE int + +typedef portSTACK_TYPE StackType_t; +typedef portBASE_TYPE BaseType_t; +typedef unsigned portBASE_TYPE UBaseType_t; + +#if( configUSE_16_BIT_TICKS == 1 ) + typedef uint16_t TickType_t; + #define portMAX_DELAY ( TickType_t ) 0xffff +#else + typedef uint32_t TickType_t; + #define portMAX_DELAY ( TickType_t ) 0xffffffffUL +#endif +/*-----------------------------------------------------------*/ + +// portbenchmark +#include "portbenchmark.h" + +#include "sdkconfig.h" + +#define portFIRST_TASK_HOOK CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG + + +typedef struct { + volatile uint32_t mux; +#ifdef CONFIG_FREERTOS_PORTMUX_DEBUG + const char *lastLockedFn; + int lastLockedLine; +#endif +} portMUX_TYPE; + + /* + * Kernel mux values can be: + * 0 - Uninitialized + * (0-portNUM_PROCESSORS)|(recCnt<<8)|0xB33F0000 - taken by core (val), recurse count is (recCnt) + * 0xB33FFFFF - free + * + * The magic number in the top 16 bits is there so we can detect uninitialized and corrupted muxes. + */ + +#define portMUX_MAGIC_VAL 0xB33F0000 +#define portMUX_FREE_VAL 0xB33FFFFF +#define portMUX_MAGIC_MASK 0xFFFF0000 +#define portMUX_MAGIC_SHIFT 16 +#define portMUX_CNT_MASK 0x0000FF00 +#define portMUX_CNT_SHIFT 8 +#define portMUX_VAL_MASK 0x000000FF +#define portMUX_VAL_SHIFT 0 + +//Keep this in sync with the portMUX_TYPE struct definition please. +#ifndef CONFIG_FREERTOS_PORTMUX_DEBUG +#define portMUX_INITIALIZER_UNLOCKED { \ + .mux = portMUX_MAGIC_VAL|portMUX_FREE_VAL \ + } +#else +#define portMUX_INITIALIZER_UNLOCKED { \ + .mux = portMUX_MAGIC_VAL|portMUX_FREE_VAL, \ + .lastLockedFn = "(never locked)", \ + .lastLockedLine = -1 \ + } +#endif + +/* Critical section management. NW-TODO: replace XTOS_SET_INTLEVEL with more efficient version, if any? */ +// These cannot be nested. They should be used with a lot of care and cannot be called from interrupt level. +#define portDISABLE_INTERRUPTS() do { XTOS_SET_INTLEVEL(XCHAL_EXCM_LEVEL); portbenchmarkINTERRUPT_DISABLE(); } while (0) +#define portENABLE_INTERRUPTS() do { portbenchmarkINTERRUPT_RESTORE(0); XTOS_SET_INTLEVEL(0); } while (0) + +#define portASSERT_IF_IN_ISR() vPortAssertIfInISR() +void vPortAssertIfInISR(); + +#define portCRITICAL_NESTING_IN_TCB 1 + +/* +Modifications to portENTER_CRITICAL: + +The original portENTER_CRITICAL only disabled the ISRs. This is enough for single-CPU operation: by +disabling the interrupts, there is no task switch so no other tasks can meddle in the data, and because +interrupts are disabled, ISRs can't corrupt data structures either. + +For multiprocessing, things get a bit more hairy. First of all, disabling the interrupts doesn't stop +the tasks or ISRs on the other processors meddling with our CPU. For tasks, this is solved by adding +a spinlock to the portENTER_CRITICAL macro. A task running on the other CPU accessing the same data will +spinlock in the portENTER_CRITICAL code until the first CPU is done. + +For ISRs, we now also need muxes: while portENTER_CRITICAL disabling interrupts will stop ISRs on the same +CPU from meddling with the data, it does not stop interrupts on the other cores from interfering with the +data. For this, we also use a spinlock in the routines called by the ISR, but these spinlocks +do not disable the interrupts (because they already are). + +This all assumes that interrupts are either entirely disabled or enabled. Interrupr priority levels +will break this scheme. +*/ +void vPortCPUInitializeMutex(portMUX_TYPE *mux); +#ifdef CONFIG_FREERTOS_PORTMUX_DEBUG +void vPortCPUAcquireMutex(portMUX_TYPE *mux, const char *function, int line); +portBASE_TYPE vPortCPUReleaseMutex(portMUX_TYPE *mux, const char *function, int line); +void vTaskEnterCritical( portMUX_TYPE *mux, const char *function, int line ); +void vTaskExitCritical( portMUX_TYPE *mux, const char *function, int line ); +#define portENTER_CRITICAL(mux) vTaskEnterCritical(mux, __FUNCTION__, __LINE__) +#define portEXIT_CRITICAL(mux) vTaskExitCritical(mux, __FUNCTION__, __LINE__) +#define portENTER_CRITICAL_ISR(mux) vPortCPUAcquireMutex(mux, __FUNCTION__, __LINE__) +#define portEXIT_CRITICAL_ISR(mux) vPortCPUReleaseMutex(mux, __FUNCTION__, __LINE__) +#else +void vTaskExitCritical( portMUX_TYPE *mux ); +void vTaskEnterCritical( portMUX_TYPE *mux ); +void vPortCPUAcquireMutex(portMUX_TYPE *mux); +portBASE_TYPE vPortCPUReleaseMutex(portMUX_TYPE *mux); +#define portENTER_CRITICAL(mux) vTaskEnterCritical(mux) +#define portEXIT_CRITICAL(mux) vTaskExitCritical(mux) +#define portENTER_CRITICAL_ISR(mux) vPortCPUAcquireMutex(mux) +#define portEXIT_CRITICAL_ISR(mux) vPortCPUReleaseMutex(mux) +#endif + + +// Cleaner and preferred solution allows nested interrupts disabling and restoring via local registers or stack. +// They can be called from interrupts too. +//NOT SMP-COMPATIBLE! Use only if all you want is to disable the interrupts locally! +static inline unsigned portENTER_CRITICAL_NESTED() { unsigned state = XTOS_SET_INTLEVEL(XCHAL_EXCM_LEVEL); portbenchmarkINTERRUPT_DISABLE(); return state; } +#define portEXIT_CRITICAL_NESTED(state) do { portbenchmarkINTERRUPT_RESTORE(state); XTOS_RESTORE_JUST_INTLEVEL(state); } while (0) + +// These FreeRTOS versions are similar to the nested versions above +#define portSET_INTERRUPT_MASK_FROM_ISR() portENTER_CRITICAL_NESTED() +#define portCLEAR_INTERRUPT_MASK_FROM_ISR(state) portEXIT_CRITICAL_NESTED(state) + + +/*-----------------------------------------------------------*/ + +/* Architecture specifics. */ +#define portSTACK_GROWTH ( -1 ) +#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) +#define portBYTE_ALIGNMENT 4 +#define portNOP() XT_NOP() +/*-----------------------------------------------------------*/ + +/* Fine resolution time */ +#define portGET_RUN_TIME_COUNTER_VALUE() xthal_get_ccount() + +/* Kernel utilities. */ +void vPortYield( void ); +void _frxt_setup_switch( void ); +#define portYIELD() vPortYield() +#define portYIELD_FROM_ISR() _frxt_setup_switch() +/*-----------------------------------------------------------*/ + +/* Task function macros as described on the FreeRTOS.org WEB site. */ +#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) +#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) + +// When coprocessors are defined, we to maintain a pointer to coprocessors area. +// We currently use a hack: redefine field xMPU_SETTINGS in TCB block as a structure that can hold: +// MPU wrappers, coprocessor area pointer, trace code structure, and more if needed. +// The field is normally used for memory protection. FreeRTOS should create another general purpose field. +typedef struct { + #if XCHAL_CP_NUM > 0 + volatile StackType_t* coproc_area; // Pointer to coprocessor save area; MUST BE FIRST + #endif + + #if portUSING_MPU_WRAPPERS + // Define here mpu_settings, which is port dependent + int mpu_setting; // Just a dummy example here; MPU not ported to Xtensa yet + #endif + + #if configUSE_TRACE_FACILITY_2 + struct { + // Cf. porttraceStamp() + int taskstamp; /* Stamp from inside task to see where we are */ + int taskstampcount; /* A counter usually incremented when we restart the task's loop */ + } porttrace; + #endif +} xMPU_SETTINGS; + +// Main hack to use MPU_wrappers even when no MPU is defined (warning: mpu_setting should not be accessed; otherwise move this above xMPU_SETTINGS) +#if (XCHAL_CP_NUM > 0 || configUSE_TRACE_FACILITY_2) && !portUSING_MPU_WRAPPERS // If MPU wrappers not used, we still need to allocate coproc area + #undef portUSING_MPU_WRAPPERS + #define portUSING_MPU_WRAPPERS 1 // Enable it to allocate coproc area + #define MPU_WRAPPERS_H // Override mpu_wrapper.h to disable unwanted code + #define PRIVILEGED_FUNCTION + #define PRIVILEGED_DATA +#endif + +// porttrace +#if configUSE_TRACE_FACILITY_2 +#include "porttrace.h" +#endif + +// configASSERT_2 if requested +#if configASSERT_2 +#include +void exit(int); +#define configASSERT( x ) if (!(x)) { porttracePrint(-1); printf("\nAssertion failed in %s:%d\n", __FILE__, __LINE__); exit(-1); } +#endif + +#endif // __ASSEMBLER__ + +#ifdef __cplusplus +} +#endif + +#endif /* PORTMACRO_H */ + diff --git a/tools/sdk/include/freertos/freertos/porttrace.h b/tools/sdk/include/freertos/freertos/porttrace.h new file mode 100644 index 00000000..bf2fb412 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/porttrace.h @@ -0,0 +1,42 @@ +/******************************************************************************* +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- + +/* + * This utility helps tracing the entering and exiting from tasks. It maintains a circular buffer + * of tasks in the order they execute, and their execution time. + * In order to enable it, set configUSE_TRACE_FACILITY_2 to 1 in FreeRTOSConfig.h. + * You will also need to download the FreeRTOS_trace patch that contains + * porttrace.c and the complete version of porttrace.h + */ + +#ifndef PORTTRACE_H +#define PORTTRACE_H + +#if configUSE_TRACE_FACILITY_2 + #error "You need to download the FreeRTOS_trace patch that overwrites this file" +#endif + +#define porttracePrint(nelements) +#define porttraceStamp(stamp, count_incr) + +#endif /* PORTTRACE_H */ diff --git a/tools/sdk/include/freertos/freertos/projdefs.h b/tools/sdk/include/freertos/freertos/projdefs.h new file mode 100644 index 00000000..1bd39c58 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/projdefs.h @@ -0,0 +1,109 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef PROJDEFS_H +#define PROJDEFS_H + +/* + * Defines the prototype to which task functions must conform. Defined in this + * file to ensure the type is known before portable.h is included. + */ +typedef void (*TaskFunction_t)( void * ); + +/* Converts a time in milliseconds to a time in ticks. */ +#define pdMS_TO_TICKS( xTimeInMs ) ( ( ( TickType_t ) ( xTimeInMs ) * configTICK_RATE_HZ ) / ( TickType_t ) 1000 ) + +#define pdFALSE ( ( BaseType_t ) 0 ) +#define pdTRUE ( ( BaseType_t ) 1 ) + +#define pdPASS ( pdTRUE ) +#define pdFAIL ( pdFALSE ) +#define errQUEUE_EMPTY ( ( BaseType_t ) 0 ) +#define errQUEUE_FULL ( ( BaseType_t ) 0 ) + +/* Error definitions. */ +#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ( -1 ) +#define errQUEUE_BLOCKED ( -4 ) +#define errQUEUE_YIELD ( -5 ) + +/* Macros used for basic data corruption checks. */ +#ifndef configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES + #define configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES 0 +#endif + +#if( configUSE_16_BIT_TICKS == 1 ) + #define pdINTEGRITY_CHECK_VALUE 0x5a5a +#else + #define pdINTEGRITY_CHECK_VALUE 0x5a5a5a5aUL +#endif + +#endif /* PROJDEFS_H */ + + + diff --git a/tools/sdk/include/freertos/freertos/queue.h b/tools/sdk/include/freertos/freertos/queue.h new file mode 100644 index 00000000..2095c59b --- /dev/null +++ b/tools/sdk/include/freertos/freertos/queue.h @@ -0,0 +1,1693 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + + +#ifndef QUEUE_H +#define QUEUE_H + +#ifndef INC_FREERTOS_H + #error "include FreeRTOS.h" must appear in source files before "include queue.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * Type by which queues are referenced. For example, a call to xQueueCreate() + * returns an QueueHandle_t variable that can then be used as a parameter to + * xQueueSend(), xQueueReceive(), etc. + */ +typedef void * QueueHandle_t; + +/** + * Type by which queue sets are referenced. For example, a call to + * xQueueCreateSet() returns an xQueueSet variable that can then be used as a + * parameter to xQueueSelectFromSet(), xQueueAddToSet(), etc. + */ +typedef void * QueueSetHandle_t; + +/** + * Queue sets can contain both queues and semaphores, so the + * QueueSetMemberHandle_t is defined as a type to be used where a parameter or + * return value can be either an QueueHandle_t or an SemaphoreHandle_t. + */ +typedef void * QueueSetMemberHandle_t; + +/* For internal use only. */ +#define queueSEND_TO_BACK ( ( BaseType_t ) 0 ) +#define queueSEND_TO_FRONT ( ( BaseType_t ) 1 ) +#define queueOVERWRITE ( ( BaseType_t ) 2 ) + +/* For internal use only. These definitions *must* match those in queue.c. */ +#define queueQUEUE_TYPE_BASE ( ( uint8_t ) 0U ) +#define queueQUEUE_TYPE_SET ( ( uint8_t ) 0U ) +#define queueQUEUE_TYPE_MUTEX ( ( uint8_t ) 1U ) +#define queueQUEUE_TYPE_COUNTING_SEMAPHORE ( ( uint8_t ) 2U ) +#define queueQUEUE_TYPE_BINARY_SEMAPHORE ( ( uint8_t ) 3U ) +#define queueQUEUE_TYPE_RECURSIVE_MUTEX ( ( uint8_t ) 4U ) + +/** + * queue. h + *
+ QueueHandle_t xQueueCreate(
+							  UBaseType_t uxQueueLength,
+							  UBaseType_t uxItemSize
+						  );
+ * 
+ * + * Creates a new queue instance. This allocates the storage required by the + * new queue and returns a handle for the queue. + * + * @param uxQueueLength The maximum number of items that the queue can contain. + * + * @param uxItemSize The number of bytes each item in the queue will require. + * Items are queued by copy, not by reference, so this is the number of bytes + * that will be copied for each posted item. Each item on the queue must be + * the same size. + * + * @return If the queue is successfully create then a handle to the newly + * created queue is returned. If the queue cannot be created then 0 is + * returned. + * + * Example usage: +
+ struct AMessage
+ {
+	char ucMessageID;
+	char ucData[ 20 ];
+ };
+
+ void vATask( void *pvParameters )
+ {
+ QueueHandle_t xQueue1, xQueue2;
+
+	// Create a queue capable of containing 10 uint32_t values.
+	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
+	if( xQueue1 == 0 )
+	{
+		// Queue was not created and must not be used.
+	}
+
+	// Create a queue capable of containing 10 pointers to AMessage structures.
+	// These should be passed by pointer as they contain a lot of data.
+	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
+	if( xQueue2 == 0 )
+	{
+		// Queue was not created and must not be used.
+	}
+
+	// ... Rest of task code.
+ }
+ 
+ * \defgroup xQueueCreate xQueueCreate + * \ingroup QueueManagement + */ +#define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( uxQueueLength, uxItemSize, queueQUEUE_TYPE_BASE ) + +/** + * queue. h + *
+ BaseType_t xQueueSendToToFront(
+								   QueueHandle_t	xQueue,
+								   const void		*pvItemToQueue,
+								   TickType_t		xTicksToWait
+							   );
+ * 
+ * + * This is a macro that calls xQueueGenericSend(). + * + * Post an item to the front of a queue. The item is queued by copy, not by + * reference. This function must not be called from an interrupt service + * routine. See xQueueSendFromISR () for an alternative which may be used + * in an ISR. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @param xTicksToWait The maximum amount of time the task should block + * waiting for space to become available on the queue, should it already + * be full. The call will return immediately if this is set to 0 and the + * queue is full. The time is defined in tick periods so the constant + * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * + * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. + * + * Example usage: +
+ struct AMessage
+ {
+	char ucMessageID;
+	char ucData[ 20 ];
+ } xMessage;
+
+ uint32_t ulVar = 10UL;
+
+ void vATask( void *pvParameters )
+ {
+ QueueHandle_t xQueue1, xQueue2;
+ struct AMessage *pxMessage;
+
+	// Create a queue capable of containing 10 uint32_t values.
+	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
+
+	// Create a queue capable of containing 10 pointers to AMessage structures.
+	// These should be passed by pointer as they contain a lot of data.
+	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
+
+	// ...
+
+	if( xQueue1 != 0 )
+	{
+		// Send an uint32_t.  Wait for 10 ticks for space to become
+		// available if necessary.
+		if( xQueueSendToFront( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )
+		{
+			// Failed to post the message, even after 10 ticks.
+		}
+	}
+
+	if( xQueue2 != 0 )
+	{
+		// Send a pointer to a struct AMessage object.  Don't block if the
+		// queue is already full.
+		pxMessage = & xMessage;
+		xQueueSendToFront( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );
+	}
+
+	// ... Rest of task code.
+ }
+ 
+ * \defgroup xQueueSend xQueueSend + * \ingroup QueueManagement + */ +#define xQueueSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_FRONT ) + +/** + * queue. h + *
+ BaseType_t xQueueSendToBack(
+								   QueueHandle_t	xQueue,
+								   const void		*pvItemToQueue,
+								   TickType_t		xTicksToWait
+							   );
+ * 
+ * + * This is a macro that calls xQueueGenericSend(). + * + * Post an item to the back of a queue. The item is queued by copy, not by + * reference. This function must not be called from an interrupt service + * routine. See xQueueSendFromISR () for an alternative which may be used + * in an ISR. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @param xTicksToWait The maximum amount of time the task should block + * waiting for space to become available on the queue, should it already + * be full. The call will return immediately if this is set to 0 and the queue + * is full. The time is defined in tick periods so the constant + * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * + * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. + * + * Example usage: +
+ struct AMessage
+ {
+	char ucMessageID;
+	char ucData[ 20 ];
+ } xMessage;
+
+ uint32_t ulVar = 10UL;
+
+ void vATask( void *pvParameters )
+ {
+ QueueHandle_t xQueue1, xQueue2;
+ struct AMessage *pxMessage;
+
+	// Create a queue capable of containing 10 uint32_t values.
+	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
+
+	// Create a queue capable of containing 10 pointers to AMessage structures.
+	// These should be passed by pointer as they contain a lot of data.
+	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
+
+	// ...
+
+	if( xQueue1 != 0 )
+	{
+		// Send an uint32_t.  Wait for 10 ticks for space to become
+		// available if necessary.
+		if( xQueueSendToBack( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )
+		{
+			// Failed to post the message, even after 10 ticks.
+		}
+	}
+
+	if( xQueue2 != 0 )
+	{
+		// Send a pointer to a struct AMessage object.  Don't block if the
+		// queue is already full.
+		pxMessage = & xMessage;
+		xQueueSendToBack( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );
+	}
+
+	// ... Rest of task code.
+ }
+ 
+ * \defgroup xQueueSend xQueueSend + * \ingroup QueueManagement + */ +#define xQueueSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK ) + +/** + * queue. h + *
+ BaseType_t xQueueSend(
+							  QueueHandle_t xQueue,
+							  const void * pvItemToQueue,
+							  TickType_t xTicksToWait
+						 );
+ * 
+ * + * This is a macro that calls xQueueGenericSend(). It is included for + * backward compatibility with versions of FreeRTOS.org that did not + * include the xQueueSendToFront() and xQueueSendToBack() macros. It is + * equivalent to xQueueSendToBack(). + * + * Post an item on a queue. The item is queued by copy, not by reference. + * This function must not be called from an interrupt service routine. + * See xQueueSendFromISR () for an alternative which may be used in an ISR. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @param xTicksToWait The maximum amount of time the task should block + * waiting for space to become available on the queue, should it already + * be full. The call will return immediately if this is set to 0 and the + * queue is full. The time is defined in tick periods so the constant + * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * + * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. + * + * Example usage: +
+ struct AMessage
+ {
+	char ucMessageID;
+	char ucData[ 20 ];
+ } xMessage;
+
+ uint32_t ulVar = 10UL;
+
+ void vATask( void *pvParameters )
+ {
+ QueueHandle_t xQueue1, xQueue2;
+ struct AMessage *pxMessage;
+
+	// Create a queue capable of containing 10 uint32_t values.
+	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
+
+	// Create a queue capable of containing 10 pointers to AMessage structures.
+	// These should be passed by pointer as they contain a lot of data.
+	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
+
+	// ...
+
+	if( xQueue1 != 0 )
+	{
+		// Send an uint32_t.  Wait for 10 ticks for space to become
+		// available if necessary.
+		if( xQueueSend( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )
+		{
+			// Failed to post the message, even after 10 ticks.
+		}
+	}
+
+	if( xQueue2 != 0 )
+	{
+		// Send a pointer to a struct AMessage object.  Don't block if the
+		// queue is already full.
+		pxMessage = & xMessage;
+		xQueueSend( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );
+	}
+
+	// ... Rest of task code.
+ }
+ 
+ * \defgroup xQueueSend xQueueSend + * \ingroup QueueManagement + */ +#define xQueueSend( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK ) + +/** + * queue. h + *
+ BaseType_t xQueueOverwrite(
+							  QueueHandle_t xQueue,
+							  const void * pvItemToQueue
+						 );
+ * 
+ * + * Only for use with queues that have a length of one - so the queue is either + * empty or full. + * + * Post an item on a queue. If the queue is already full then overwrite the + * value held in the queue. The item is queued by copy, not by reference. + * + * This function must not be called from an interrupt service routine. + * See xQueueOverwriteFromISR () for an alternative which may be used in an ISR. + * + * @param xQueue The handle of the queue to which the data is being sent. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @return xQueueOverwrite() is a macro that calls xQueueGenericSend(), and + * therefore has the same return values as xQueueSendToFront(). However, pdPASS + * is the only value that can be returned because xQueueOverwrite() will write + * to the queue even when the queue is already full. + * + * Example usage: +
+
+ void vFunction( void *pvParameters )
+ {
+ QueueHandle_t xQueue;
+ uint32_t ulVarToSend, ulValReceived;
+
+	// Create a queue to hold one uint32_t value.  It is strongly
+	// recommended *not* to use xQueueOverwrite() on queues that can
+	// contain more than one value, and doing so will trigger an assertion
+	// if configASSERT() is defined.
+	xQueue = xQueueCreate( 1, sizeof( uint32_t ) );
+
+	// Write the value 10 to the queue using xQueueOverwrite().
+	ulVarToSend = 10;
+	xQueueOverwrite( xQueue, &ulVarToSend );
+
+	// Peeking the queue should now return 10, but leave the value 10 in
+	// the queue.  A block time of zero is used as it is known that the
+	// queue holds a value.
+	ulValReceived = 0;
+	xQueuePeek( xQueue, &ulValReceived, 0 );
+
+	if( ulValReceived != 10 )
+	{
+		// Error unless the item was removed by a different task.
+	}
+
+	// The queue is still full.  Use xQueueOverwrite() to overwrite the
+	// value held in the queue with 100.
+	ulVarToSend = 100;
+	xQueueOverwrite( xQueue, &ulVarToSend );
+
+	// This time read from the queue, leaving the queue empty once more.
+	// A block time of 0 is used again.
+	xQueueReceive( xQueue, &ulValReceived, 0 );
+
+	// The value read should be the last value written, even though the
+	// queue was already full when the value was written.
+	if( ulValReceived != 100 )
+	{
+		// Error!
+	}
+
+	// ...
+}
+ 
+ * \defgroup xQueueOverwrite xQueueOverwrite + * \ingroup QueueManagement + */ +#define xQueueOverwrite( xQueue, pvItemToQueue ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), 0, queueOVERWRITE ) + + +/** + * queue. h + *
+ BaseType_t xQueueGenericSend(
+									QueueHandle_t xQueue,
+									const void * pvItemToQueue,
+									TickType_t xTicksToWait
+									BaseType_t xCopyPosition
+								);
+ * 
+ * + * It is preferred that the macros xQueueSend(), xQueueSendToFront() and + * xQueueSendToBack() are used in place of calling this function directly. + * + * Post an item on a queue. The item is queued by copy, not by reference. + * This function must not be called from an interrupt service routine. + * See xQueueSendFromISR () for an alternative which may be used in an ISR. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @param xTicksToWait The maximum amount of time the task should block + * waiting for space to become available on the queue, should it already + * be full. The call will return immediately if this is set to 0 and the + * queue is full. The time is defined in tick periods so the constant + * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * + * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the + * item at the back of the queue, or queueSEND_TO_FRONT to place the item + * at the front of the queue (for high priority messages). + * + * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. + * + * Example usage: +
+ struct AMessage
+ {
+	char ucMessageID;
+	char ucData[ 20 ];
+ } xMessage;
+
+ uint32_t ulVar = 10UL;
+
+ void vATask( void *pvParameters )
+ {
+ QueueHandle_t xQueue1, xQueue2;
+ struct AMessage *pxMessage;
+
+	// Create a queue capable of containing 10 uint32_t values.
+	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
+
+	// Create a queue capable of containing 10 pointers to AMessage structures.
+	// These should be passed by pointer as they contain a lot of data.
+	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
+
+	// ...
+
+	if( xQueue1 != 0 )
+	{
+		// Send an uint32_t.  Wait for 10 ticks for space to become
+		// available if necessary.
+		if( xQueueGenericSend( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10, queueSEND_TO_BACK ) != pdPASS )
+		{
+			// Failed to post the message, even after 10 ticks.
+		}
+	}
+
+	if( xQueue2 != 0 )
+	{
+		// Send a pointer to a struct AMessage object.  Don't block if the
+		// queue is already full.
+		pxMessage = & xMessage;
+		xQueueGenericSend( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0, queueSEND_TO_BACK );
+	}
+
+	// ... Rest of task code.
+ }
+ 
+ * \defgroup xQueueSend xQueueSend + * \ingroup QueueManagement + */ +BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; + +/** + * queue. h + *
+ BaseType_t xQueuePeek(
+							 QueueHandle_t xQueue,
+							 void *pvBuffer,
+							 TickType_t xTicksToWait
+						 );
+ * + * This is a macro that calls the xQueueGenericReceive() function. + * + * Receive an item from a queue without removing the item from the queue. + * The item is received by copy so a buffer of adequate size must be + * provided. The number of bytes copied into the buffer was defined when + * the queue was created. + * + * Successfully received items remain on the queue so will be returned again + * by the next call, or a call to xQueueReceive(). + * + * This macro must not be used in an interrupt service routine. See + * xQueuePeekFromISR() for an alternative that can be called from an interrupt + * service routine. + * + * @param xQueue The handle to the queue from which the item is to be + * received. + * + * @param pvBuffer Pointer to the buffer into which the received item will + * be copied. + * + * @param xTicksToWait The maximum amount of time the task should block + * waiting for an item to receive should the queue be empty at the time + * of the call. The time is defined in tick periods so the constant + * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * xQueuePeek() will return immediately if xTicksToWait is 0 and the queue + * is empty. + * + * @return pdTRUE if an item was successfully received from the queue, + * otherwise pdFALSE. + * + * Example usage: +
+ struct AMessage
+ {
+	char ucMessageID;
+	char ucData[ 20 ];
+ } xMessage;
+
+ QueueHandle_t xQueue;
+
+ // Task to create a queue and post a value.
+ void vATask( void *pvParameters )
+ {
+ struct AMessage *pxMessage;
+
+	// Create a queue capable of containing 10 pointers to AMessage structures.
+	// These should be passed by pointer as they contain a lot of data.
+	xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
+	if( xQueue == 0 )
+	{
+		// Failed to create the queue.
+	}
+
+	// ...
+
+	// Send a pointer to a struct AMessage object.  Don't block if the
+	// queue is already full.
+	pxMessage = & xMessage;
+	xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );
+
+	// ... Rest of task code.
+ }
+
+ // Task to peek the data from the queue.
+ void vADifferentTask( void *pvParameters )
+ {
+ struct AMessage *pxRxedMessage;
+
+	if( xQueue != 0 )
+	{
+		// Peek a message on the created queue.  Block for 10 ticks if a
+		// message is not immediately available.
+		if( xQueuePeek( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )
+		{
+			// pcRxedMessage now points to the struct AMessage variable posted
+			// by vATask, but the item still remains on the queue.
+		}
+	}
+
+	// ... Rest of task code.
+ }
+ 
+ * \defgroup xQueueReceive xQueueReceive + * \ingroup QueueManagement + */ +#define xQueuePeek( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdTRUE ) + +/** + * queue. h + *
+ BaseType_t xQueuePeekFromISR(
+									QueueHandle_t xQueue,
+									void *pvBuffer,
+								);
+ * + * A version of xQueuePeek() that can be called from an interrupt service + * routine (ISR). + * + * Receive an item from a queue without removing the item from the queue. + * The item is received by copy so a buffer of adequate size must be + * provided. The number of bytes copied into the buffer was defined when + * the queue was created. + * + * Successfully received items remain on the queue so will be returned again + * by the next call, or a call to xQueueReceive(). + * + * @param xQueue The handle to the queue from which the item is to be + * received. + * + * @param pvBuffer Pointer to the buffer into which the received item will + * be copied. + * + * @return pdTRUE if an item was successfully received from the queue, + * otherwise pdFALSE. + * + * \defgroup xQueuePeekFromISR xQueuePeekFromISR + * \ingroup QueueManagement + */ +BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION; + +/** + * queue. h + *
+ BaseType_t xQueueReceive(
+								 QueueHandle_t xQueue,
+								 void *pvBuffer,
+								 TickType_t xTicksToWait
+							);
+ * + * This is a macro that calls the xQueueGenericReceive() function. + * + * Receive an item from a queue. The item is received by copy so a buffer of + * adequate size must be provided. The number of bytes copied into the buffer + * was defined when the queue was created. + * + * Successfully received items are removed from the queue. + * + * This function must not be used in an interrupt service routine. See + * xQueueReceiveFromISR for an alternative that can. + * + * @param xQueue The handle to the queue from which the item is to be + * received. + * + * @param pvBuffer Pointer to the buffer into which the received item will + * be copied. + * + * @param xTicksToWait The maximum amount of time the task should block + * waiting for an item to receive should the queue be empty at the time + * of the call. xQueueReceive() will return immediately if xTicksToWait + * is zero and the queue is empty. The time is defined in tick periods so the + * constant portTICK_PERIOD_MS should be used to convert to real time if this is + * required. + * + * @return pdTRUE if an item was successfully received from the queue, + * otherwise pdFALSE. + * + * Example usage: +
+ struct AMessage
+ {
+	char ucMessageID;
+	char ucData[ 20 ];
+ } xMessage;
+
+ QueueHandle_t xQueue;
+
+ // Task to create a queue and post a value.
+ void vATask( void *pvParameters )
+ {
+ struct AMessage *pxMessage;
+
+	// Create a queue capable of containing 10 pointers to AMessage structures.
+	// These should be passed by pointer as they contain a lot of data.
+	xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
+	if( xQueue == 0 )
+	{
+		// Failed to create the queue.
+	}
+
+	// ...
+
+	// Send a pointer to a struct AMessage object.  Don't block if the
+	// queue is already full.
+	pxMessage = & xMessage;
+	xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );
+
+	// ... Rest of task code.
+ }
+
+ // Task to receive from the queue.
+ void vADifferentTask( void *pvParameters )
+ {
+ struct AMessage *pxRxedMessage;
+
+	if( xQueue != 0 )
+	{
+		// Receive a message on the created queue.  Block for 10 ticks if a
+		// message is not immediately available.
+		if( xQueueReceive( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )
+		{
+			// pcRxedMessage now points to the struct AMessage variable posted
+			// by vATask.
+		}
+	}
+
+	// ... Rest of task code.
+ }
+ 
+ * \defgroup xQueueReceive xQueueReceive + * \ingroup QueueManagement + */ +#define xQueueReceive( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdFALSE ) + + +/** + * queue. h + *
+ BaseType_t xQueueGenericReceive(
+									   QueueHandle_t	xQueue,
+									   void	*pvBuffer,
+									   TickType_t	xTicksToWait
+									   BaseType_t	xJustPeek
+									);
+ * + * It is preferred that the macro xQueueReceive() be used rather than calling + * this function directly. + * + * Receive an item from a queue. The item is received by copy so a buffer of + * adequate size must be provided. The number of bytes copied into the buffer + * was defined when the queue was created. + * + * This function must not be used in an interrupt service routine. See + * xQueueReceiveFromISR for an alternative that can. + * + * @param xQueue The handle to the queue from which the item is to be + * received. + * + * @param pvBuffer Pointer to the buffer into which the received item will + * be copied. + * + * @param xTicksToWait The maximum amount of time the task should block + * waiting for an item to receive should the queue be empty at the time + * of the call. The time is defined in tick periods so the constant + * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * xQueueGenericReceive() will return immediately if the queue is empty and + * xTicksToWait is 0. + * + * @param xJustPeek When set to true, the item received from the queue is not + * actually removed from the queue - meaning a subsequent call to + * xQueueReceive() will return the same item. When set to false, the item + * being received from the queue is also removed from the queue. + * + * @return pdTRUE if an item was successfully received from the queue, + * otherwise pdFALSE. + * + * Example usage: +
+ struct AMessage
+ {
+	char ucMessageID;
+	char ucData[ 20 ];
+ } xMessage;
+
+ QueueHandle_t xQueue;
+
+ // Task to create a queue and post a value.
+ void vATask( void *pvParameters )
+ {
+ struct AMessage *pxMessage;
+
+	// Create a queue capable of containing 10 pointers to AMessage structures.
+	// These should be passed by pointer as they contain a lot of data.
+	xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
+	if( xQueue == 0 )
+	{
+		// Failed to create the queue.
+	}
+
+	// ...
+
+	// Send a pointer to a struct AMessage object.  Don't block if the
+	// queue is already full.
+	pxMessage = & xMessage;
+	xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );
+
+	// ... Rest of task code.
+ }
+
+ // Task to receive from the queue.
+ void vADifferentTask( void *pvParameters )
+ {
+ struct AMessage *pxRxedMessage;
+
+	if( xQueue != 0 )
+	{
+		// Receive a message on the created queue.  Block for 10 ticks if a
+		// message is not immediately available.
+		if( xQueueGenericReceive( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )
+		{
+			// pcRxedMessage now points to the struct AMessage variable posted
+			// by vATask.
+		}
+	}
+
+	// ... Rest of task code.
+ }
+ 
+ * \defgroup xQueueReceive xQueueReceive + * \ingroup QueueManagement + */ +BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeek ) PRIVILEGED_FUNCTION; + +/** + * queue. h + *
UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue );
+ * + * Return the number of messages stored in a queue. + * + * @param xQueue A handle to the queue being queried. + * + * @return The number of messages available in the queue. + * + * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting + * \ingroup QueueManagement + */ +UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; + +/** + * queue. h + *
UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue );
+ * + * Return the number of free spaces available in a queue. This is equal to the + * number of items that can be sent to the queue before the queue becomes full + * if no items are removed. + * + * @param xQueue A handle to the queue being queried. + * + * @return The number of spaces available in the queue. + * + * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting + * \ingroup QueueManagement + */ +UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; + +/** + * queue. h + *
void vQueueDelete( QueueHandle_t xQueue );
+ * + * Delete a queue - freeing all the memory allocated for storing of items + * placed on the queue. + * + * @param xQueue A handle to the queue to be deleted. + * + * \defgroup vQueueDelete vQueueDelete + * \ingroup QueueManagement + */ +void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; + +/** + * queue. h + *
+ BaseType_t xQueueSendToFrontFromISR(
+										 QueueHandle_t xQueue,
+										 const void *pvItemToQueue,
+										 BaseType_t *pxHigherPriorityTaskWoken
+									  );
+ 
+ * + * This is a macro that calls xQueueGenericSendFromISR(). + * + * Post an item to the front of a queue. It is safe to use this macro from + * within an interrupt service routine. + * + * Items are queued by copy not reference so it is preferable to only + * queue small items, especially when called from an ISR. In most cases + * it would be preferable to store a pointer to the item being queued. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @param pxHigherPriorityTaskWoken xQueueSendToFrontFromISR() will set + * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task + * to unblock, and the unblocked task has a priority higher than the currently + * running task. If xQueueSendToFromFromISR() sets this value to pdTRUE then + * a context switch should be requested before the interrupt is exited. + * + * @return pdTRUE if the data was successfully sent to the queue, otherwise + * errQUEUE_FULL. + * + * Example usage for buffered IO (where the ISR can obtain more than one value + * per call): +
+ void vBufferISR( void )
+ {
+ char cIn;
+ BaseType_t xHigherPrioritTaskWoken;
+
+	// We have not woken a task at the start of the ISR.
+	xHigherPriorityTaskWoken = pdFALSE;
+
+	// Loop until the buffer is empty.
+	do
+	{
+		// Obtain a byte from the buffer.
+		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
+
+		// Post the byte.
+		xQueueSendToFrontFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
+
+	} while( portINPUT_BYTE( BUFFER_COUNT ) );
+
+	// Now the buffer is empty we can switch context if necessary.
+	if( xHigherPriorityTaskWoken )
+	{
+		taskYIELD ();
+	}
+ }
+ 
+ * + * \defgroup xQueueSendFromISR xQueueSendFromISR + * \ingroup QueueManagement + */ +#define xQueueSendToFrontFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_FRONT ) + + +/** + * queue. h + *
+ BaseType_t xQueueSendToBackFromISR(
+										 QueueHandle_t xQueue,
+										 const void *pvItemToQueue,
+										 BaseType_t *pxHigherPriorityTaskWoken
+									  );
+ 
+ * + * This is a macro that calls xQueueGenericSendFromISR(). + * + * Post an item to the back of a queue. It is safe to use this macro from + * within an interrupt service routine. + * + * Items are queued by copy not reference so it is preferable to only + * queue small items, especially when called from an ISR. In most cases + * it would be preferable to store a pointer to the item being queued. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @param pxHigherPriorityTaskWoken xQueueSendToBackFromISR() will set + * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task + * to unblock, and the unblocked task has a priority higher than the currently + * running task. If xQueueSendToBackFromISR() sets this value to pdTRUE then + * a context switch should be requested before the interrupt is exited. + * + * @return pdTRUE if the data was successfully sent to the queue, otherwise + * errQUEUE_FULL. + * + * Example usage for buffered IO (where the ISR can obtain more than one value + * per call): +
+ void vBufferISR( void )
+ {
+ char cIn;
+ BaseType_t xHigherPriorityTaskWoken;
+
+	// We have not woken a task at the start of the ISR.
+	xHigherPriorityTaskWoken = pdFALSE;
+
+	// Loop until the buffer is empty.
+	do
+	{
+		// Obtain a byte from the buffer.
+		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
+
+		// Post the byte.
+		xQueueSendToBackFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
+
+	} while( portINPUT_BYTE( BUFFER_COUNT ) );
+
+	// Now the buffer is empty we can switch context if necessary.
+	if( xHigherPriorityTaskWoken )
+	{
+		taskYIELD ();
+	}
+ }
+ 
+ * + * \defgroup xQueueSendFromISR xQueueSendFromISR + * \ingroup QueueManagement + */ +#define xQueueSendToBackFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK ) + +/** + * queue. h + *
+ BaseType_t xQueueOverwriteFromISR(
+							  QueueHandle_t xQueue,
+							  const void * pvItemToQueue,
+							  BaseType_t *pxHigherPriorityTaskWoken
+						 );
+ * 
+ * + * A version of xQueueOverwrite() that can be used in an interrupt service + * routine (ISR). + * + * Only for use with queues that can hold a single item - so the queue is either + * empty or full. + * + * Post an item on a queue. If the queue is already full then overwrite the + * value held in the queue. The item is queued by copy, not by reference. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @param pxHigherPriorityTaskWoken xQueueOverwriteFromISR() will set + * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task + * to unblock, and the unblocked task has a priority higher than the currently + * running task. If xQueueOverwriteFromISR() sets this value to pdTRUE then + * a context switch should be requested before the interrupt is exited. + * + * @return xQueueOverwriteFromISR() is a macro that calls + * xQueueGenericSendFromISR(), and therefore has the same return values as + * xQueueSendToFrontFromISR(). However, pdPASS is the only value that can be + * returned because xQueueOverwriteFromISR() will write to the queue even when + * the queue is already full. + * + * Example usage: +
+
+ QueueHandle_t xQueue;
+
+ void vFunction( void *pvParameters )
+ {
+ 	// Create a queue to hold one uint32_t value.  It is strongly
+	// recommended *not* to use xQueueOverwriteFromISR() on queues that can
+	// contain more than one value, and doing so will trigger an assertion
+	// if configASSERT() is defined.
+	xQueue = xQueueCreate( 1, sizeof( uint32_t ) );
+}
+
+void vAnInterruptHandler( void )
+{
+// xHigherPriorityTaskWoken must be set to pdFALSE before it is used.
+BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+uint32_t ulVarToSend, ulValReceived;
+
+	// Write the value 10 to the queue using xQueueOverwriteFromISR().
+	ulVarToSend = 10;
+	xQueueOverwriteFromISR( xQueue, &ulVarToSend, &xHigherPriorityTaskWoken );
+
+	// The queue is full, but calling xQueueOverwriteFromISR() again will still
+	// pass because the value held in the queue will be overwritten with the
+	// new value.
+	ulVarToSend = 100;
+	xQueueOverwriteFromISR( xQueue, &ulVarToSend, &xHigherPriorityTaskWoken );
+
+	// Reading from the queue will now return 100.
+
+	// ...
+
+	if( xHigherPrioritytaskWoken == pdTRUE )
+	{
+		// Writing to the queue caused a task to unblock and the unblocked task
+		// has a priority higher than or equal to the priority of the currently
+		// executing task (the task this interrupt interrupted).  Perform a context
+		// switch so this interrupt returns directly to the unblocked task.
+		portYIELD_FROM_ISR(); // or portEND_SWITCHING_ISR() depending on the port.
+	}
+}
+ 
+ * \defgroup xQueueOverwriteFromISR xQueueOverwriteFromISR + * \ingroup QueueManagement + */ +#define xQueueOverwriteFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueOVERWRITE ) + +/** + * queue. h + *
+ BaseType_t xQueueSendFromISR(
+									 QueueHandle_t xQueue,
+									 const void *pvItemToQueue,
+									 BaseType_t *pxHigherPriorityTaskWoken
+								);
+ 
+ * + * This is a macro that calls xQueueGenericSendFromISR(). It is included + * for backward compatibility with versions of FreeRTOS.org that did not + * include the xQueueSendToBackFromISR() and xQueueSendToFrontFromISR() + * macros. + * + * Post an item to the back of a queue. It is safe to use this function from + * within an interrupt service routine. + * + * Items are queued by copy not reference so it is preferable to only + * queue small items, especially when called from an ISR. In most cases + * it would be preferable to store a pointer to the item being queued. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @param pxHigherPriorityTaskWoken xQueueSendFromISR() will set + * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task + * to unblock, and the unblocked task has a priority higher than the currently + * running task. If xQueueSendFromISR() sets this value to pdTRUE then + * a context switch should be requested before the interrupt is exited. + * + * @return pdTRUE if the data was successfully sent to the queue, otherwise + * errQUEUE_FULL. + * + * Example usage for buffered IO (where the ISR can obtain more than one value + * per call): +
+ void vBufferISR( void )
+ {
+ char cIn;
+ BaseType_t xHigherPriorityTaskWoken;
+
+	// We have not woken a task at the start of the ISR.
+	xHigherPriorityTaskWoken = pdFALSE;
+
+	// Loop until the buffer is empty.
+	do
+	{
+		// Obtain a byte from the buffer.
+		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
+
+		// Post the byte.
+		xQueueSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
+
+	} while( portINPUT_BYTE( BUFFER_COUNT ) );
+
+	// Now the buffer is empty we can switch context if necessary.
+	if( xHigherPriorityTaskWoken )
+	{
+		// Actual macro used here is port specific.
+		portYIELD_FROM_ISR ();
+	}
+ }
+ 
+ * + * \defgroup xQueueSendFromISR xQueueSendFromISR + * \ingroup QueueManagement + */ +#define xQueueSendFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK ) + +/** + * queue. h + *
+ BaseType_t xQueueGenericSendFromISR(
+										   QueueHandle_t		xQueue,
+										   const	void	*pvItemToQueue,
+										   BaseType_t	*pxHigherPriorityTaskWoken,
+										   BaseType_t	xCopyPosition
+									   );
+ 
+ * + * It is preferred that the macros xQueueSendFromISR(), + * xQueueSendToFrontFromISR() and xQueueSendToBackFromISR() be used in place + * of calling this function directly. xQueueGiveFromISR() is an + * equivalent for use by semaphores that don't actually copy any data. + * + * Post an item on a queue. It is safe to use this function from within an + * interrupt service routine. + * + * Items are queued by copy not reference so it is preferable to only + * queue small items, especially when called from an ISR. In most cases + * it would be preferable to store a pointer to the item being queued. + * + * @param xQueue The handle to the queue on which the item is to be posted. + * + * @param pvItemToQueue A pointer to the item that is to be placed on the + * queue. The size of the items the queue will hold was defined when the + * queue was created, so this many bytes will be copied from pvItemToQueue + * into the queue storage area. + * + * @param pxHigherPriorityTaskWoken xQueueGenericSendFromISR() will set + * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task + * to unblock, and the unblocked task has a priority higher than the currently + * running task. If xQueueGenericSendFromISR() sets this value to pdTRUE then + * a context switch should be requested before the interrupt is exited. + * + * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the + * item at the back of the queue, or queueSEND_TO_FRONT to place the item + * at the front of the queue (for high priority messages). + * + * @return pdTRUE if the data was successfully sent to the queue, otherwise + * errQUEUE_FULL. + * + * Example usage for buffered IO (where the ISR can obtain more than one value + * per call): +
+ void vBufferISR( void )
+ {
+ char cIn;
+ BaseType_t xHigherPriorityTaskWokenByPost;
+
+	// We have not woken a task at the start of the ISR.
+	xHigherPriorityTaskWokenByPost = pdFALSE;
+
+	// Loop until the buffer is empty.
+	do
+	{
+		// Obtain a byte from the buffer.
+		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
+
+		// Post each byte.
+		xQueueGenericSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWokenByPost, queueSEND_TO_BACK );
+
+	} while( portINPUT_BYTE( BUFFER_COUNT ) );
+
+	// Now the buffer is empty we can switch context if necessary.  Note that the
+	// name of the yield function required is port specific.
+	if( xHigherPriorityTaskWokenByPost )
+	{
+		taskYIELD_YIELD_FROM_ISR();
+	}
+ }
+ 
+ * + * \defgroup xQueueSendFromISR xQueueSendFromISR + * \ingroup QueueManagement + */ +BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; +BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; + +/** + * queue. h + *
+ BaseType_t xQueueReceiveFromISR(
+									   QueueHandle_t	xQueue,
+									   void	*pvBuffer,
+									   BaseType_t *pxTaskWoken
+								   );
+ * 
+ * + * Receive an item from a queue. It is safe to use this function from within an + * interrupt service routine. + * + * @param xQueue The handle to the queue from which the item is to be + * received. + * + * @param pvBuffer Pointer to the buffer into which the received item will + * be copied. + * + * @param pxTaskWoken A task may be blocked waiting for space to become + * available on the queue. If xQueueReceiveFromISR causes such a task to + * unblock *pxTaskWoken will get set to pdTRUE, otherwise *pxTaskWoken will + * remain unchanged. + * + * @return pdTRUE if an item was successfully received from the queue, + * otherwise pdFALSE. + * + * Example usage: +
+
+ QueueHandle_t xQueue;
+
+ // Function to create a queue and post some values.
+ void vAFunction( void *pvParameters )
+ {
+ char cValueToPost;
+ const TickType_t xTicksToWait = ( TickType_t )0xff;
+
+	// Create a queue capable of containing 10 characters.
+	xQueue = xQueueCreate( 10, sizeof( char ) );
+	if( xQueue == 0 )
+	{
+		// Failed to create the queue.
+	}
+
+	// ...
+
+	// Post some characters that will be used within an ISR.  If the queue
+	// is full then this task will block for xTicksToWait ticks.
+	cValueToPost = 'a';
+	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
+	cValueToPost = 'b';
+	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
+
+	// ... keep posting characters ... this task may block when the queue
+	// becomes full.
+
+	cValueToPost = 'c';
+	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
+ }
+
+ // ISR that outputs all the characters received on the queue.
+ void vISR_Routine( void )
+ {
+ BaseType_t xTaskWokenByReceive = pdFALSE;
+ char cRxedChar;
+
+	while( xQueueReceiveFromISR( xQueue, ( void * ) &cRxedChar, &xTaskWokenByReceive) )
+	{
+		// A character was received.  Output the character now.
+		vOutputCharacter( cRxedChar );
+
+		// If removing the character from the queue woke the task that was
+		// posting onto the queue cTaskWokenByReceive will have been set to
+		// pdTRUE.  No matter how many times this loop iterates only one
+		// task will be woken.
+	}
+
+	if( cTaskWokenByPost != ( char ) pdFALSE;
+	{
+		taskYIELD ();
+	}
+ }
+ 
+ * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR + * \ingroup QueueManagement + */ +BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; + +/* + * Utilities to query queues that are safe to use from an ISR. These utilities + * should be used only from witin an ISR, or within a critical section. + */ +BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; +BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; +UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; + + +/* + * xQueueAltGenericSend() is an alternative version of xQueueGenericSend(). + * Likewise xQueueAltGenericReceive() is an alternative version of + * xQueueGenericReceive(). + * + * The source code that implements the alternative (Alt) API is much + * simpler because it executes everything from within a critical section. + * This is the approach taken by many other RTOSes, but FreeRTOS.org has the + * preferred fully featured API too. The fully featured API has more + * complex code that takes longer to execute, but makes much less use of + * critical sections. Therefore the alternative API sacrifices interrupt + * responsiveness to gain execution speed, whereas the fully featured API + * sacrifices execution speed to ensure better interrupt responsiveness. + */ +BaseType_t xQueueAltGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, BaseType_t xCopyPosition ); +BaseType_t xQueueAltGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, BaseType_t xJustPeeking ); +#define xQueueAltSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_FRONT ) +#define xQueueAltSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK ) +#define xQueueAltReceive( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdFALSE ) +#define xQueueAltPeek( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdTRUE ) + +/* + * The functions defined above are for passing data to and from tasks. The + * functions below are the equivalents for passing data to and from + * co-routines. + * + * These functions are called from the co-routine macro implementation and + * should not be called directly from application code. Instead use the macro + * wrappers defined within croutine.h. + */ +BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken ); +BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxTaskWoken ); +BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait ); +BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait ); + +/* + * For internal use only. Use xSemaphoreCreateMutex(), + * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling + * these functions directly. + */ +QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; +QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION; +void* xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION; + +/* + * For internal use only. Use xSemaphoreTakeMutexRecursive() or + * xSemaphoreGiveMutexRecursive() instead of calling these functions directly. + */ +BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION; + +/* + * Reset a queue back to its original empty state. pdPASS is returned if the + * queue is successfully reset. pdFAIL is returned if the queue could not be + * reset because there are tasks blocked on the queue waiting to either + * receive from the queue or send to the queue. + */ +#define xQueueReset( xQueue ) xQueueGenericReset( xQueue, pdFALSE ) + +/* + * The registry is provided as a means for kernel aware debuggers to + * locate queues, semaphores and mutexes. Call vQueueAddToRegistry() add + * a queue, semaphore or mutex handle to the registry if you want the handle + * to be available to a kernel aware debugger. If you are not using a kernel + * aware debugger then this function can be ignored. + * + * configQUEUE_REGISTRY_SIZE defines the maximum number of handles the + * registry can hold. configQUEUE_REGISTRY_SIZE must be greater than 0 + * within FreeRTOSConfig.h for the registry to be available. Its value + * does not effect the number of queues, semaphores and mutexes that can be + * created - just the number that the registry can hold. + * + * @param xQueue The handle of the queue being added to the registry. This + * is the handle returned by a call to xQueueCreate(). Semaphore and mutex + * handles can also be passed in here. + * + * @param pcName The name to be associated with the handle. This is the + * name that the kernel aware debugger will display. The queue registry only + * stores a pointer to the string - so the string must be persistent (global or + * preferably in ROM/Flash), not on the stack. + */ +#if configQUEUE_REGISTRY_SIZE > 0 + void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcName ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ +#endif + +/* + * The registry is provided as a means for kernel aware debuggers to + * locate queues, semaphores and mutexes. Call vQueueAddToRegistry() add + * a queue, semaphore or mutex handle to the registry if you want the handle + * to be available to a kernel aware debugger, and vQueueUnregisterQueue() to + * remove the queue, semaphore or mutex from the register. If you are not using + * a kernel aware debugger then this function can be ignored. + * + * @param xQueue The handle of the queue being removed from the registry. + */ +#if configQUEUE_REGISTRY_SIZE > 0 + void vQueueUnregisterQueue( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; +#endif + +/* + * Generic version of the queue creation function, which is in turn called by + * any queue, semaphore or mutex creation function or macro. + */ +QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; + +/* + * Queue sets provide a mechanism to allow a task to block (pend) on a read + * operation from multiple queues or semaphores simultaneously. + * + * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this + * function. + * + * A queue set must be explicitly created using a call to xQueueCreateSet() + * before it can be used. Once created, standard FreeRTOS queues and semaphores + * can be added to the set using calls to xQueueAddToSet(). + * xQueueSelectFromSet() is then used to determine which, if any, of the queues + * or semaphores contained in the set is in a state where a queue read or + * semaphore take operation would be successful. + * + * Note 1: See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html + * for reasons why queue sets are very rarely needed in practice as there are + * simpler methods of blocking on multiple objects. + * + * Note 2: Blocking on a queue set that contains a mutex will not cause the + * mutex holder to inherit the priority of the blocked task. + * + * Note 3: An additional 4 bytes of RAM is required for each space in a every + * queue added to a queue set. Therefore counting semaphores that have a high + * maximum count value should not be added to a queue set. + * + * Note 4: A receive (in the case of a queue) or take (in the case of a + * semaphore) operation must not be performed on a member of a queue set unless + * a call to xQueueSelectFromSet() has first returned a handle to that set member. + * + * @param uxEventQueueLength Queue sets store events that occur on + * the queues and semaphores contained in the set. uxEventQueueLength specifies + * the maximum number of events that can be queued at once. To be absolutely + * certain that events are not lost uxEventQueueLength should be set to the + * total sum of the length of the queues added to the set, where binary + * semaphores and mutexes have a length of 1, and counting semaphores have a + * length set by their maximum count value. Examples: + * + If a queue set is to hold a queue of length 5, another queue of length 12, + * and a binary semaphore, then uxEventQueueLength should be set to + * (5 + 12 + 1), or 18. + * + If a queue set is to hold three binary semaphores then uxEventQueueLength + * should be set to (1 + 1 + 1 ), or 3. + * + If a queue set is to hold a counting semaphore that has a maximum count of + * 5, and a counting semaphore that has a maximum count of 3, then + * uxEventQueueLength should be set to (5 + 3), or 8. + * + * @return If the queue set is created successfully then a handle to the created + * queue set is returned. Otherwise NULL is returned. + */ +QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION; + +/* + * Adds a queue or semaphore to a queue set that was previously created by a + * call to xQueueCreateSet(). + * + * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this + * function. + * + * Note 1: A receive (in the case of a queue) or take (in the case of a + * semaphore) operation must not be performed on a member of a queue set unless + * a call to xQueueSelectFromSet() has first returned a handle to that set member. + * + * @param xQueueOrSemaphore The handle of the queue or semaphore being added to + * the queue set (cast to an QueueSetMemberHandle_t type). + * + * @param xQueueSet The handle of the queue set to which the queue or semaphore + * is being added. + * + * @return If the queue or semaphore was successfully added to the queue set + * then pdPASS is returned. If the queue could not be successfully added to the + * queue set because it is already a member of a different queue set then pdFAIL + * is returned. + */ +BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; + +/* + * Removes a queue or semaphore from a queue set. A queue or semaphore can only + * be removed from a set if the queue or semaphore is empty. + * + * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this + * function. + * + * @param xQueueOrSemaphore The handle of the queue or semaphore being removed + * from the queue set (cast to an QueueSetMemberHandle_t type). + * + * @param xQueueSet The handle of the queue set in which the queue or semaphore + * is included. + * + * @return If the queue or semaphore was successfully removed from the queue set + * then pdPASS is returned. If the queue was not in the queue set, or the + * queue (or semaphore) was not empty, then pdFAIL is returned. + */ +BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; + +/* + * xQueueSelectFromSet() selects from the members of a queue set a queue or + * semaphore that either contains data (in the case of a queue) or is available + * to take (in the case of a semaphore). xQueueSelectFromSet() effectively + * allows a task to block (pend) on a read operation on all the queues and + * semaphores in a queue set simultaneously. + * + * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this + * function. + * + * Note 1: See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html + * for reasons why queue sets are very rarely needed in practice as there are + * simpler methods of blocking on multiple objects. + * + * Note 2: Blocking on a queue set that contains a mutex will not cause the + * mutex holder to inherit the priority of the blocked task. + * + * Note 3: A receive (in the case of a queue) or take (in the case of a + * semaphore) operation must not be performed on a member of a queue set unless + * a call to xQueueSelectFromSet() has first returned a handle to that set member. + * + * @param xQueueSet The queue set on which the task will (potentially) block. + * + * @param xTicksToWait The maximum time, in ticks, that the calling task will + * remain in the Blocked state (with other tasks executing) to wait for a member + * of the queue set to be ready for a successful queue read or semaphore take + * operation. + * + * @return xQueueSelectFromSet() will return the handle of a queue (cast to + * a QueueSetMemberHandle_t type) contained in the queue set that contains data, + * or the handle of a semaphore (cast to a QueueSetMemberHandle_t type) contained + * in the queue set that is available, or NULL if no such queue or semaphore + * exists before before the specified block time expires. + */ +QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; + +/* + * A version of xQueueSelectFromSet() that can be used from an ISR. + */ +QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; + +/* Not public API functions. */ +void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) PRIVILEGED_FUNCTION; +void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION; +UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; +uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; + + +#ifdef __cplusplus +} +#endif + +#endif /* QUEUE_H */ + diff --git a/tools/sdk/include/freertos/freertos/ringbuf.h b/tools/sdk/include/freertos/freertos/ringbuf.h new file mode 100644 index 00000000..7884e985 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/ringbuf.h @@ -0,0 +1,206 @@ +#ifndef FREERTOS_RINGBUF_H +#define FREERTOS_RINGBUF_H + +/* +Header definitions for a FreeRTOS ringbuffer object + +A ringbuffer instantiated by these functions essentially acts like a FreeRTOS queue, with the +difference that it's strictly FIFO and with the main advantage that you can put in randomly-sized +items. The capacity, accordingly, isn't measured in the amount of items, but the amount of memory +that is used for storing the items. Dependent on the size of the items, more or less of them will +fit in the ring buffer. + +This ringbuffer tries to be efficient with memory: when inserting an item, the item data will +be copied to the ringbuffer memory. When retrieving an item, however, a reference to ringbuffer +memory will be returned. The returned memory is guaranteed to be 32-bit aligned and contiguous. +The application can use this memory, but as long as it does, ringbuffer writes that would write +to this bit of memory will block. + +The requirement for items to be contiguous is slightly problematic when the only way to place +the next item would involve a wraparound from the end to the beginning of the ringbuffer. This can +be solved in two ways: +- allow_split_items = pdTRUE: The insertion code will split the item in two items; one which fits +in the space left at the end of the ringbuffer, one that contains the remaining data which is placed +in the beginning. Two xRingbufferReceive calls will be needed to retrieve the data. +- allow_split_items = pdFALSE: The insertion code will leave the room at the end of the ringbuffer +unused and instead will put the entire item at the start of the ringbuffer, as soon as there is +enough free space. + +The maximum size of an item will be affected by this decision. When split items are allowed, it's +acceptable to push items of (buffer_size)-16 bytes into the buffer. When it's not allowed, the +maximum size is (buffer_size/2)-8 bytes. +*/ + +//An opaque handle for a ringbuff object. +typedef void * RingbufHandle_t; + + +/** + * @brief Create a ring buffer + * + * @param buf_length : Length of circular buffer, in bytes. Each entry will take up its own length, plus a header + * that at the moment is equal to sizeof(size_t). + * @param allow_split_items : pdTRUE if it is acceptable that item data is inserted as two + * items instead of one. + * + * @return A RingbufHandle_t handle to the created ringbuffer, or NULL in case of error. + */ +RingbufHandle_t xRingbufferCreate(size_t buf_length, BaseType_t allow_split_items); + + +/** + * @brief Delete a ring buffer + * + * @param ringbuf - Ring buffer to delete + * + * @return void + */ +void vRingbufferDelete(RingbufHandle_t ringbuf); + + +/** + * @brief Get maximum size of an item that can be placed in the ring buffer + * + * @param ringbuf - Ring buffer to query + * + * @return Maximum size, in bytes, of an item that can be placed in a ring buffer. + */ +size_t xRingbufferGetMaxItemSize(RingbufHandle_t ringbuf); + + +/** + * @brief Insert an item into the ring buffer + * + * @param ringbuf - Ring buffer to insert the item into + * @param data - Pointer to data to insert. NULL is allowed if data_size is 0. + * @param data_size - Size of data to insert. A value of 0 is allowed. + * @param xTicksToWait - Ticks to wait for room in the ringbuffer. + * + * @return pdTRUE if succeeded, pdFALSE on time-out or when the buffer is larger + * than indicated by xRingbufferGetMaxItemSize(ringbuf). + */ +BaseType_t xRingbufferSend(RingbufHandle_t ringbuf, void *data, size_t data_size, TickType_t ticks_to_wait); + + +/** + * @brief Insert an item into the ring buffer from an ISR + * + * @param ringbuf - Ring buffer to insert the item into + * @param data - Pointer to data to insert. NULL is allowed if data_size is 0. + * @param data_size - Size of data to insert. A value of 0 is allowed. + * @param higher_prio_task_awoken - Value pointed to will be set to pdTRUE if the push woke up a higher + * priority task. + * + * @return pdTRUE if succeeded, pdFALSE when the ring buffer does not have space. + */ +BaseType_t xRingbufferSendFromISR(RingbufHandle_t ringbuf, void *data, size_t data_size, BaseType_t *higher_prio_task_awoken); + +/** + * @brief Retrieve an item from the ring buffer + * + * @param ringbuf - Ring buffer to retrieve the item from + * @param item_size - Pointer to a variable to which the size of the retrieved item will be written. + * @param xTicksToWait - Ticks to wait for items in the ringbuffer. + * + * @return Pointer to the retrieved item on success; *item_size filled with the length of the + * item. NULL on timeout, *item_size is untouched in that case. + */ +void *xRingbufferReceive(RingbufHandle_t ringbuf, size_t *item_size, TickType_t ticks_to_wait); + + +/** + * @brief Retrieve an item from the ring buffer from an ISR + * + * @param ringbuf - Ring buffer to retrieve the item from + * @param item_size - Pointer to a variable to which the size of the retrieved item will be written. + * + * @return Pointer to the retrieved item on success; *item_size filled with the length of the + * item. NULL when the ringbuffer is empty, *item_size is untouched in that case. + */ +void *xRingbufferReceiveFromISR(RingbufHandle_t ringbuf, size_t *item_size); + + +/** + * @brief Return a previously-retrieved item to the ringbuffer + * + * @param ringbuf - Ring buffer the item was retrieved from + * @param item - Item that was received earlier + * + * @return void + */ +void vRingbufferReturnItem(RingbufHandle_t ringbuf, void *item); + + + +/** + * @brief Return a previously-retrieved item to the ringbuffer from an ISR + * + * @param ringbuf - Ring buffer the item was retrieved from + * @param item - Item that was received earlier + * @param higher_prio_task_awoken - Value pointed to will be set to pdTRUE if the push woke up a higher + * priority task. + * + * @return void + */ +void vRingbufferReturnItemFromISR(RingbufHandle_t ringbuf, void *item, BaseType_t *higher_prio_task_awoken); + + +/** + * @brief Add the ringbuffer to a queue set. This specifically adds the semaphore that indicates + * more space has become available in the ringbuffer. + * + * @param ringbuf - Ring buffer to add to the queue set + * @param xQueueSet - Queue set to add the ringbuffer to + * + * @return pdTRUE on success, pdFALSE otherwise + */ +BaseType_t xRingbufferAddToQueueSetRead(RingbufHandle_t ringbuf, QueueSetHandle_t xQueueSet); + + +/** + * @brief Add the ringbuffer to a queue set. This specifically adds the semaphore that indicates + * something has been written into the ringbuffer. + * + * @param ringbuf - Ring buffer to add to the queue set + * @param xQueueSet - Queue set to add the ringbuffer to + * + * @return pdTRUE on success, pdFALSE otherwise + */ +BaseType_t xRingbufferAddToQueueSetWrite(RingbufHandle_t ringbuf, QueueSetHandle_t xQueueSet); + + +/** + * @brief Remove the ringbuffer from a queue set. This specifically removes the semaphore that indicates + * more space has become available in the ringbuffer. + * + * @param ringbuf - Ring buffer to remove from the queue set + * @param xQueueSet - Queue set to remove the ringbuffer from + * + * @return pdTRUE on success, pdFALSE otherwise + */ +BaseType_t xRingbufferRemoveFromQueueSetRead(RingbufHandle_t ringbuf, QueueSetHandle_t xQueueSet); + + +/** + * @brief Remove the ringbuffer from a queue set. This specifically removes the semaphore that indicates + * something has been written to the ringbuffer. + * + * @param ringbuf - Ring buffer to remove from the queue set + * @param xQueueSet - Queue set to remove the ringbuffer from + * + * @return pdTRUE on success, pdFALSE otherwise + */ +BaseType_t xRingbufferRemoveFromQueueSetWrite(RingbufHandle_t ringbuf, QueueSetHandle_t xQueueSet); + + +/** + * @brief Debugging function to print the internal pointers in the ring buffer + * + * @param ringbuf - Ring buffer to show + * + * @return void + */ +void xRingbufferPrintInfo(RingbufHandle_t ringbuf); + + +#endif diff --git a/tools/sdk/include/freertos/freertos/semphr.h b/tools/sdk/include/freertos/freertos/semphr.h new file mode 100644 index 00000000..5866ab1e --- /dev/null +++ b/tools/sdk/include/freertos/freertos/semphr.h @@ -0,0 +1,844 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef SEMAPHORE_H +#define SEMAPHORE_H + +#ifndef INC_FREERTOS_H + #error "include FreeRTOS.h" must appear in source files before "include semphr.h" +#endif + +#include "queue.h" + +typedef QueueHandle_t SemaphoreHandle_t; + +#define semBINARY_SEMAPHORE_QUEUE_LENGTH ( ( uint8_t ) 1U ) +#define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( uint8_t ) 0U ) +#define semGIVE_BLOCK_TIME ( ( TickType_t ) 0U ) + + +/** + * semphr. h + *
vSemaphoreCreateBinary( SemaphoreHandle_t xSemaphore )
+ * + * This old vSemaphoreCreateBinary() macro is now deprecated in favour of the + * xSemaphoreCreateBinary() function. Note that binary semaphores created using + * the vSemaphoreCreateBinary() macro are created in a state such that the + * first call to 'take' the semaphore would pass, whereas binary semaphores + * created using xSemaphoreCreateBinary() are created in a state such that the + * the semaphore must first be 'given' before it can be 'taken'. + * + * Macro that implements a semaphore by using the existing queue mechanism. + * The queue length is 1 as this is a binary semaphore. The data size is 0 + * as we don't want to actually store any data - we just want to know if the + * queue is empty or full. + * + * This type of semaphore can be used for pure synchronisation between tasks or + * between an interrupt and a task. The semaphore need not be given back once + * obtained, so one task/interrupt can continuously 'give' the semaphore while + * another continuously 'takes' the semaphore. For this reason this type of + * semaphore does not use a priority inheritance mechanism. For an alternative + * that does use priority inheritance see xSemaphoreCreateMutex(). + * + * @param xSemaphore Handle to the created semaphore. Should be of type SemaphoreHandle_t. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore = NULL;
+
+ void vATask( void * pvParameters )
+ {
+    // Semaphore cannot be used before a call to vSemaphoreCreateBinary ().
+    // This is a macro so pass the variable in directly.
+    vSemaphoreCreateBinary( xSemaphore );
+
+    if( xSemaphore != NULL )
+    {
+        // The semaphore was created successfully.
+        // The semaphore can now be used.
+    }
+ }
+ 
+ * \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary + * \ingroup Semaphores + */ +#define vSemaphoreCreateBinary( xSemaphore ) \ + { \ + ( xSemaphore ) = xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ); \ + if( ( xSemaphore ) != NULL ) \ + { \ + ( void ) xSemaphoreGive( ( xSemaphore ) ); \ + } \ + } + +/** + * semphr. h + *
SemaphoreHandle_t xSemaphoreCreateBinary( void )
+ * + * The old vSemaphoreCreateBinary() macro is now deprecated in favour of this + * xSemaphoreCreateBinary() function. Note that binary semaphores created using + * the vSemaphoreCreateBinary() macro are created in a state such that the + * first call to 'take' the semaphore would pass, whereas binary semaphores + * created using xSemaphoreCreateBinary() are created in a state such that the + * the semaphore must first be 'given' before it can be 'taken'. + * + * Function that creates a semaphore by using the existing queue mechanism. + * The queue length is 1 as this is a binary semaphore. The data size is 0 + * as nothing is actually stored - all that is important is whether the queue is + * empty or full (the binary semaphore is available or not). + * + * This type of semaphore can be used for pure synchronisation between tasks or + * between an interrupt and a task. The semaphore need not be given back once + * obtained, so one task/interrupt can continuously 'give' the semaphore while + * another continuously 'takes' the semaphore. For this reason this type of + * semaphore does not use a priority inheritance mechanism. For an alternative + * that does use priority inheritance see xSemaphoreCreateMutex(). + * + * @return Handle to the created semaphore. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore = NULL;
+
+ void vATask( void * pvParameters )
+ {
+    // Semaphore cannot be used before a call to vSemaphoreCreateBinary ().
+    // This is a macro so pass the variable in directly.
+    xSemaphore = xSemaphoreCreateBinary();
+
+    if( xSemaphore != NULL )
+    {
+        // The semaphore was created successfully.
+        // The semaphore can now be used.
+    }
+ }
+ 
+ * \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary + * \ingroup Semaphores + */ +#define xSemaphoreCreateBinary() xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ) + +/** + * semphr. h + *
xSemaphoreTake(
+ *                   SemaphoreHandle_t xSemaphore,
+ *                   TickType_t xBlockTime
+ *               )
+ * + * Macro to obtain a semaphore. The semaphore must have previously been + * created with a call to vSemaphoreCreateBinary(), xSemaphoreCreateMutex() or + * xSemaphoreCreateCounting(). + * + * @param xSemaphore A handle to the semaphore being taken - obtained when + * the semaphore was created. + * + * @param xBlockTime The time in ticks to wait for the semaphore to become + * available. The macro portTICK_PERIOD_MS can be used to convert this to a + * real time. A block time of zero can be used to poll the semaphore. A block + * time of portMAX_DELAY can be used to block indefinitely (provided + * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h). + * + * @return pdTRUE if the semaphore was obtained. pdFALSE + * if xBlockTime expired without the semaphore becoming available. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore = NULL;
+
+ // A task that creates a semaphore.
+ void vATask( void * pvParameters )
+ {
+    // Create the semaphore to guard a shared resource.
+    vSemaphoreCreateBinary( xSemaphore );
+ }
+
+ // A task that uses the semaphore.
+ void vAnotherTask( void * pvParameters )
+ {
+    // ... Do other things.
+
+    if( xSemaphore != NULL )
+    {
+        // See if we can obtain the semaphore.  If the semaphore is not available
+        // wait 10 ticks to see if it becomes free.
+        if( xSemaphoreTake( xSemaphore, ( TickType_t ) 10 ) == pdTRUE )
+        {
+            // We were able to obtain the semaphore and can now access the
+            // shared resource.
+
+            // ...
+
+            // We have finished accessing the shared resource.  Release the
+            // semaphore.
+            xSemaphoreGive( xSemaphore );
+        }
+        else
+        {
+            // We could not obtain the semaphore and can therefore not access
+            // the shared resource safely.
+        }
+    }
+ }
+ 
+ * \defgroup xSemaphoreTake xSemaphoreTake + * \ingroup Semaphores + */ +#define xSemaphoreTake( xSemaphore, xBlockTime ) xQueueGenericReceive( ( QueueHandle_t ) ( xSemaphore ), NULL, ( xBlockTime ), pdFALSE ) + +/** + * semphr. h + * xSemaphoreTakeRecursive( + * SemaphoreHandle_t xMutex, + * TickType_t xBlockTime + * ) + * + * Macro to recursively obtain, or 'take', a mutex type semaphore. + * The mutex must have previously been created using a call to + * xSemaphoreCreateRecursiveMutex(); + * + * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this + * macro to be available. + * + * This macro must not be used on mutexes created using xSemaphoreCreateMutex(). + * + * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex + * doesn't become available again until the owner has called + * xSemaphoreGiveRecursive() for each successful 'take' request. For example, + * if a task successfully 'takes' the same mutex 5 times then the mutex will + * not be available to any other task until it has also 'given' the mutex back + * exactly five times. + * + * @param xMutex A handle to the mutex being obtained. This is the + * handle returned by xSemaphoreCreateRecursiveMutex(); + * + * @param xBlockTime The time in ticks to wait for the semaphore to become + * available. The macro portTICK_PERIOD_MS can be used to convert this to a + * real time. A block time of zero can be used to poll the semaphore. If + * the task already owns the semaphore then xSemaphoreTakeRecursive() will + * return immediately no matter what the value of xBlockTime. + * + * @return pdTRUE if the semaphore was obtained. pdFALSE if xBlockTime + * expired without the semaphore becoming available. + * + * Example usage: +
+ SemaphoreHandle_t xMutex = NULL;
+
+ // A task that creates a mutex.
+ void vATask( void * pvParameters )
+ {
+    // Create the mutex to guard a shared resource.
+    xMutex = xSemaphoreCreateRecursiveMutex();
+ }
+
+ // A task that uses the mutex.
+ void vAnotherTask( void * pvParameters )
+ {
+    // ... Do other things.
+
+    if( xMutex != NULL )
+    {
+        // See if we can obtain the mutex.  If the mutex is not available
+        // wait 10 ticks to see if it becomes free.
+        if( xSemaphoreTakeRecursive( xSemaphore, ( TickType_t ) 10 ) == pdTRUE )
+        {
+            // We were able to obtain the mutex and can now access the
+            // shared resource.
+
+            // ...
+            // For some reason due to the nature of the code further calls to
+			// xSemaphoreTakeRecursive() are made on the same mutex.  In real
+			// code these would not be just sequential calls as this would make
+			// no sense.  Instead the calls are likely to be buried inside
+			// a more complex call structure.
+            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
+            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
+
+            // The mutex has now been 'taken' three times, so will not be
+			// available to another task until it has also been given back
+			// three times.  Again it is unlikely that real code would have
+			// these calls sequentially, but instead buried in a more complex
+			// call structure.  This is just for illustrative purposes.
+            xSemaphoreGiveRecursive( xMutex );
+			xSemaphoreGiveRecursive( xMutex );
+			xSemaphoreGiveRecursive( xMutex );
+
+			// Now the mutex can be taken by other tasks.
+        }
+        else
+        {
+            // We could not obtain the mutex and can therefore not access
+            // the shared resource safely.
+        }
+    }
+ }
+ 
+ * \defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive + * \ingroup Semaphores + */ +#define xSemaphoreTakeRecursive( xMutex, xBlockTime ) xQueueTakeMutexRecursive( ( xMutex ), ( xBlockTime ) ) + + +/* + * xSemaphoreAltTake() is an alternative version of xSemaphoreTake(). + * + * The source code that implements the alternative (Alt) API is much + * simpler because it executes everything from within a critical section. + * This is the approach taken by many other RTOSes, but FreeRTOS.org has the + * preferred fully featured API too. The fully featured API has more + * complex code that takes longer to execute, but makes much less use of + * critical sections. Therefore the alternative API sacrifices interrupt + * responsiveness to gain execution speed, whereas the fully featured API + * sacrifices execution speed to ensure better interrupt responsiveness. + */ +#define xSemaphoreAltTake( xSemaphore, xBlockTime ) xQueueAltGenericReceive( ( QueueHandle_t ) ( xSemaphore ), NULL, ( xBlockTime ), pdFALSE ) + +/** + * semphr. h + *
xSemaphoreGive( SemaphoreHandle_t xSemaphore )
+ * + * Macro to release a semaphore. The semaphore must have previously been + * created with a call to vSemaphoreCreateBinary(), xSemaphoreCreateMutex() or + * xSemaphoreCreateCounting(). and obtained using sSemaphoreTake(). + * + * This macro must not be used from an ISR. See xSemaphoreGiveFromISR () for + * an alternative which can be used from an ISR. + * + * This macro must also not be used on semaphores created using + * xSemaphoreCreateRecursiveMutex(). + * + * @param xSemaphore A handle to the semaphore being released. This is the + * handle returned when the semaphore was created. + * + * @return pdTRUE if the semaphore was released. pdFALSE if an error occurred. + * Semaphores are implemented using queues. An error can occur if there is + * no space on the queue to post a message - indicating that the + * semaphore was not first obtained correctly. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore = NULL;
+
+ void vATask( void * pvParameters )
+ {
+    // Create the semaphore to guard a shared resource.
+    vSemaphoreCreateBinary( xSemaphore );
+
+    if( xSemaphore != NULL )
+    {
+        if( xSemaphoreGive( xSemaphore ) != pdTRUE )
+        {
+            // We would expect this call to fail because we cannot give
+            // a semaphore without first "taking" it!
+        }
+
+        // Obtain the semaphore - don't block if the semaphore is not
+        // immediately available.
+        if( xSemaphoreTake( xSemaphore, ( TickType_t ) 0 ) )
+        {
+            // We now have the semaphore and can access the shared resource.
+
+            // ...
+
+            // We have finished accessing the shared resource so can free the
+            // semaphore.
+            if( xSemaphoreGive( xSemaphore ) != pdTRUE )
+            {
+                // We would not expect this call to fail because we must have
+                // obtained the semaphore to get here.
+            }
+        }
+    }
+ }
+ 
+ * \defgroup xSemaphoreGive xSemaphoreGive + * \ingroup Semaphores + */ +#define xSemaphoreGive( xSemaphore ) xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK ) + +/** + * semphr. h + *
xSemaphoreGiveRecursive( SemaphoreHandle_t xMutex )
+ * + * Macro to recursively release, or 'give', a mutex type semaphore. + * The mutex must have previously been created using a call to + * xSemaphoreCreateRecursiveMutex(); + * + * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this + * macro to be available. + * + * This macro must not be used on mutexes created using xSemaphoreCreateMutex(). + * + * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex + * doesn't become available again until the owner has called + * xSemaphoreGiveRecursive() for each successful 'take' request. For example, + * if a task successfully 'takes' the same mutex 5 times then the mutex will + * not be available to any other task until it has also 'given' the mutex back + * exactly five times. + * + * @param xMutex A handle to the mutex being released, or 'given'. This is the + * handle returned by xSemaphoreCreateMutex(); + * + * @return pdTRUE if the semaphore was given. + * + * Example usage: +
+ SemaphoreHandle_t xMutex = NULL;
+
+ // A task that creates a mutex.
+ void vATask( void * pvParameters )
+ {
+    // Create the mutex to guard a shared resource.
+    xMutex = xSemaphoreCreateRecursiveMutex();
+ }
+
+ // A task that uses the mutex.
+ void vAnotherTask( void * pvParameters )
+ {
+    // ... Do other things.
+
+    if( xMutex != NULL )
+    {
+        // See if we can obtain the mutex.  If the mutex is not available
+        // wait 10 ticks to see if it becomes free.
+        if( xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 ) == pdTRUE )
+        {
+            // We were able to obtain the mutex and can now access the
+            // shared resource.
+
+            // ...
+            // For some reason due to the nature of the code further calls to
+			// xSemaphoreTakeRecursive() are made on the same mutex.  In real
+			// code these would not be just sequential calls as this would make
+			// no sense.  Instead the calls are likely to be buried inside
+			// a more complex call structure.
+            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
+            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
+
+            // The mutex has now been 'taken' three times, so will not be
+			// available to another task until it has also been given back
+			// three times.  Again it is unlikely that real code would have
+			// these calls sequentially, it would be more likely that the calls
+			// to xSemaphoreGiveRecursive() would be called as a call stack
+			// unwound.  This is just for demonstrative purposes.
+            xSemaphoreGiveRecursive( xMutex );
+			xSemaphoreGiveRecursive( xMutex );
+			xSemaphoreGiveRecursive( xMutex );
+
+			// Now the mutex can be taken by other tasks.
+        }
+        else
+        {
+            // We could not obtain the mutex and can therefore not access
+            // the shared resource safely.
+        }
+    }
+ }
+ 
+ * \defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive + * \ingroup Semaphores + */ +#define xSemaphoreGiveRecursive( xMutex ) xQueueGiveMutexRecursive( ( xMutex ) ) + +/* + * xSemaphoreAltGive() is an alternative version of xSemaphoreGive(). + * + * The source code that implements the alternative (Alt) API is much + * simpler because it executes everything from within a critical section. + * This is the approach taken by many other RTOSes, but FreeRTOS.org has the + * preferred fully featured API too. The fully featured API has more + * complex code that takes longer to execute, but makes much less use of + * critical sections. Therefore the alternative API sacrifices interrupt + * responsiveness to gain execution speed, whereas the fully featured API + * sacrifices execution speed to ensure better interrupt responsiveness. + */ +#define xSemaphoreAltGive( xSemaphore ) xQueueAltGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK ) + +/** + * semphr. h + *
+ xSemaphoreGiveFromISR(
+                          SemaphoreHandle_t xSemaphore,
+                          BaseType_t *pxHigherPriorityTaskWoken
+                      )
+ * + * Macro to release a semaphore. The semaphore must have previously been + * created with a call to vSemaphoreCreateBinary() or xSemaphoreCreateCounting(). + * + * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) + * must not be used with this macro. + * + * This macro can be used from an ISR. + * + * @param xSemaphore A handle to the semaphore being released. This is the + * handle returned when the semaphore was created. + * + * @param pxHigherPriorityTaskWoken xSemaphoreGiveFromISR() will set + * *pxHigherPriorityTaskWoken to pdTRUE if giving the semaphore caused a task + * to unblock, and the unblocked task has a priority higher than the currently + * running task. If xSemaphoreGiveFromISR() sets this value to pdTRUE then + * a context switch should be requested before the interrupt is exited. + * + * @return pdTRUE if the semaphore was successfully given, otherwise errQUEUE_FULL. + * + * Example usage: +
+ \#define LONG_TIME 0xffff
+ \#define TICKS_TO_WAIT	10
+ SemaphoreHandle_t xSemaphore = NULL;
+
+ // Repetitive task.
+ void vATask( void * pvParameters )
+ {
+    for( ;; )
+    {
+        // We want this task to run every 10 ticks of a timer.  The semaphore
+        // was created before this task was started.
+
+        // Block waiting for the semaphore to become available.
+        if( xSemaphoreTake( xSemaphore, LONG_TIME ) == pdTRUE )
+        {
+            // It is time to execute.
+
+            // ...
+
+            // We have finished our task.  Return to the top of the loop where
+            // we will block on the semaphore until it is time to execute
+            // again.  Note when using the semaphore for synchronisation with an
+			// ISR in this manner there is no need to 'give' the semaphore back.
+        }
+    }
+ }
+
+ // Timer ISR
+ void vTimerISR( void * pvParameters )
+ {
+ static uint8_t ucLocalTickCount = 0;
+ static BaseType_t xHigherPriorityTaskWoken;
+
+    // A timer tick has occurred.
+
+    // ... Do other time functions.
+
+    // Is it time for vATask () to run?
+	xHigherPriorityTaskWoken = pdFALSE;
+    ucLocalTickCount++;
+    if( ucLocalTickCount >= TICKS_TO_WAIT )
+    {
+        // Unblock the task by releasing the semaphore.
+        xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );
+
+        // Reset the count so we release the semaphore again in 10 ticks time.
+        ucLocalTickCount = 0;
+    }
+
+    if( xHigherPriorityTaskWoken != pdFALSE )
+    {
+        // We can force a context switch here.  Context switching from an
+        // ISR uses port specific syntax.  Check the demo task for your port
+        // to find the syntax required.
+    }
+ }
+ 
+ * \defgroup xSemaphoreGiveFromISR xSemaphoreGiveFromISR + * \ingroup Semaphores + */ +#define xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueGiveFromISR( ( QueueHandle_t ) ( xSemaphore ), ( pxHigherPriorityTaskWoken ) ) + +/** + * semphr. h + *
+ xSemaphoreTakeFromISR(
+                          SemaphoreHandle_t xSemaphore,
+                          BaseType_t *pxHigherPriorityTaskWoken
+                      )
+ * + * Macro to take a semaphore from an ISR. The semaphore must have + * previously been created with a call to vSemaphoreCreateBinary() or + * xSemaphoreCreateCounting(). + * + * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) + * must not be used with this macro. + * + * This macro can be used from an ISR, however taking a semaphore from an ISR + * is not a common operation. It is likely to only be useful when taking a + * counting semaphore when an interrupt is obtaining an object from a resource + * pool (when the semaphore count indicates the number of resources available). + * + * @param xSemaphore A handle to the semaphore being taken. This is the + * handle returned when the semaphore was created. + * + * @param pxHigherPriorityTaskWoken xSemaphoreTakeFromISR() will set + * *pxHigherPriorityTaskWoken to pdTRUE if taking the semaphore caused a task + * to unblock, and the unblocked task has a priority higher than the currently + * running task. If xSemaphoreTakeFromISR() sets this value to pdTRUE then + * a context switch should be requested before the interrupt is exited. + * + * @return pdTRUE if the semaphore was successfully taken, otherwise + * pdFALSE + */ +#define xSemaphoreTakeFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueReceiveFromISR( ( QueueHandle_t ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ) ) + +/** + * semphr. h + *
SemaphoreHandle_t xSemaphoreCreateMutex( void )
+ * + * Macro that implements a mutex semaphore by using the existing queue + * mechanism. + * + * Mutexes created using this macro can be accessed using the xSemaphoreTake() + * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and + * xSemaphoreGiveRecursive() macros should not be used. + * + * This type of semaphore uses a priority inheritance mechanism so a task + * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the + * semaphore it is no longer required. + * + * Mutex type semaphores cannot be used from within interrupt service routines. + * + * See vSemaphoreCreateBinary() for an alternative implementation that can be + * used for pure synchronisation (where one task or interrupt always 'gives' the + * semaphore and another always 'takes' the semaphore) and from within interrupt + * service routines. + * + * @return xSemaphore Handle to the created mutex semaphore. Should be of type + * SemaphoreHandle_t. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore;
+
+ void vATask( void * pvParameters )
+ {
+    // Semaphore cannot be used before a call to xSemaphoreCreateMutex().
+    // This is a macro so pass the variable in directly.
+    xSemaphore = xSemaphoreCreateMutex();
+
+    if( xSemaphore != NULL )
+    {
+        // The semaphore was created successfully.
+        // The semaphore can now be used.
+    }
+ }
+ 
+ * \defgroup vSemaphoreCreateMutex vSemaphoreCreateMutex + * \ingroup Semaphores + */ +#define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX ) + + +/** + * semphr. h + *
SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void )
+ * + * Macro that implements a recursive mutex by using the existing queue + * mechanism. + * + * Mutexes created using this macro can be accessed using the + * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The + * xSemaphoreTake() and xSemaphoreGive() macros should not be used. + * + * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex + * doesn't become available again until the owner has called + * xSemaphoreGiveRecursive() for each successful 'take' request. For example, + * if a task successfully 'takes' the same mutex 5 times then the mutex will + * not be available to any other task until it has also 'given' the mutex back + * exactly five times. + * + * This type of semaphore uses a priority inheritance mechanism so a task + * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the + * semaphore it is no longer required. + * + * Mutex type semaphores cannot be used from within interrupt service routines. + * + * See vSemaphoreCreateBinary() for an alternative implementation that can be + * used for pure synchronisation (where one task or interrupt always 'gives' the + * semaphore and another always 'takes' the semaphore) and from within interrupt + * service routines. + * + * @return xSemaphore Handle to the created mutex semaphore. Should be of type + * SemaphoreHandle_t. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore;
+
+ void vATask( void * pvParameters )
+ {
+    // Semaphore cannot be used before a call to xSemaphoreCreateMutex().
+    // This is a macro so pass the variable in directly.
+    xSemaphore = xSemaphoreCreateRecursiveMutex();
+
+    if( xSemaphore != NULL )
+    {
+        // The semaphore was created successfully.
+        // The semaphore can now be used.
+    }
+ }
+ 
+ * \defgroup vSemaphoreCreateMutex vSemaphoreCreateMutex + * \ingroup Semaphores + */ +#define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX ) + +/** + * semphr. h + *
SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount )
+ * + * Macro that creates a counting semaphore by using the existing + * queue mechanism. + * + * Counting semaphores are typically used for two things: + * + * 1) Counting events. + * + * In this usage scenario an event handler will 'give' a semaphore each time + * an event occurs (incrementing the semaphore count value), and a handler + * task will 'take' a semaphore each time it processes an event + * (decrementing the semaphore count value). The count value is therefore + * the difference between the number of events that have occurred and the + * number that have been processed. In this case it is desirable for the + * initial count value to be zero. + * + * 2) Resource management. + * + * In this usage scenario the count value indicates the number of resources + * available. To obtain control of a resource a task must first obtain a + * semaphore - decrementing the semaphore count value. When the count value + * reaches zero there are no free resources. When a task finishes with the + * resource it 'gives' the semaphore back - incrementing the semaphore count + * value. In this case it is desirable for the initial count value to be + * equal to the maximum count value, indicating that all resources are free. + * + * @param uxMaxCount The maximum count value that can be reached. When the + * semaphore reaches this value it can no longer be 'given'. + * + * @param uxInitialCount The count value assigned to the semaphore when it is + * created. + * + * @return Handle to the created semaphore. Null if the semaphore could not be + * created. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore;
+
+ void vATask( void * pvParameters )
+ {
+ SemaphoreHandle_t xSemaphore = NULL;
+
+    // Semaphore cannot be used before a call to xSemaphoreCreateCounting().
+    // The max value to which the semaphore can count should be 10, and the
+    // initial value assigned to the count should be 0.
+    xSemaphore = xSemaphoreCreateCounting( 10, 0 );
+
+    if( xSemaphore != NULL )
+    {
+        // The semaphore was created successfully.
+        // The semaphore can now be used.
+    }
+ }
+ 
+ * \defgroup xSemaphoreCreateCounting xSemaphoreCreateCounting + * \ingroup Semaphores + */ +#define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) ) + +/** + * semphr. h + *
void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );
+ * + * Delete a semaphore. This function must be used with care. For example, + * do not delete a mutex type semaphore if the mutex is held by a task. + * + * @param xSemaphore A handle to the semaphore to be deleted. + * + * \defgroup vSemaphoreDelete vSemaphoreDelete + * \ingroup Semaphores + */ +#define vSemaphoreDelete( xSemaphore ) vQueueDelete( ( QueueHandle_t ) ( xSemaphore ) ) + +/** + * semphr.h + *
TaskHandle_t xSemaphoreGetMutexHolder( SemaphoreHandle_t xMutex );
+ * + * If xMutex is indeed a mutex type semaphore, return the current mutex holder. + * If xMutex is not a mutex type semaphore, or the mutex is available (not held + * by a task), return NULL. + * + * Note: This is a good way of determining if the calling task is the mutex + * holder, but not a good way of determining the identity of the mutex holder as + * the holder may change between the function exiting and the returned value + * being tested. + */ +#define xSemaphoreGetMutexHolder( xSemaphore ) xQueueGetMutexHolder( ( xSemaphore ) ) + +#endif /* SEMAPHORE_H */ + + diff --git a/tools/sdk/include/freertos/freertos/task.h b/tools/sdk/include/freertos/freertos/task.h new file mode 100644 index 00000000..9f3f3d65 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/task.h @@ -0,0 +1,2032 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + + +#ifndef INC_TASK_H +#define INC_TASK_H + +#ifndef INC_FREERTOS_H + #error "include FreeRTOS.h must appear in source files before include task.h" +#endif + +#include + +#include "list.h" +#include "portmacro.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*----------------------------------------------------------- + * MACROS AND DEFINITIONS + *----------------------------------------------------------*/ + +#define tskKERNEL_VERSION_NUMBER "V8.2.0" +#define tskKERNEL_VERSION_MAJOR 8 +#define tskKERNEL_VERSION_MINOR 2 +#define tskKERNEL_VERSION_BUILD 0 + +#define tskNO_AFFINITY INT_MAX + +/** + * task. h + * + * Type by which tasks are referenced. For example, a call to xTaskCreate + * returns (via a pointer parameter) an TaskHandle_t variable that can then + * be used as a parameter to vTaskDelete to delete the task. + * + * \defgroup TaskHandle_t TaskHandle_t + * \ingroup Tasks + */ +typedef void * TaskHandle_t; + +/* + * Defines the prototype to which the application task hook function must + * conform. + */ +typedef BaseType_t (*TaskHookFunction_t)( void * ); + +/* Task states returned by eTaskGetState. */ +typedef enum +{ + eRunning = 0, /* A task is querying the state of itself, so must be running. */ + eReady, /* The task being queried is in a read or pending ready list. */ + eBlocked, /* The task being queried is in the Blocked state. */ + eSuspended, /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */ + eDeleted /* The task being queried has been deleted, but its TCB has not yet been freed. */ +} eTaskState; + +/* Actions that can be performed when vTaskNotify() is called. */ +typedef enum +{ + eNoAction = 0, /* Notify the task without updating its notify value. */ + eSetBits, /* Set bits in the task's notification value. */ + eIncrement, /* Increment the task's notification value. */ + eSetValueWithOverwrite, /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */ + eSetValueWithoutOverwrite /* Set the task's notification value if the previous value has been read by the task. */ +} eNotifyAction; + +/* + * Used internally only. + */ +typedef struct xTIME_OUT +{ + BaseType_t xOverflowCount; + TickType_t xTimeOnEntering; +} TimeOut_t; + +/* + * Defines the memory ranges allocated to the task when an MPU is used. + */ +typedef struct xMEMORY_REGION +{ + void *pvBaseAddress; + uint32_t ulLengthInBytes; + uint32_t ulParameters; +} MemoryRegion_t; + +/* + * Parameters required to create an MPU protected task. + */ +typedef struct xTASK_PARAMETERS +{ + TaskFunction_t pvTaskCode; + const char * const pcName; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + uint16_t usStackDepth; + void *pvParameters; + UBaseType_t uxPriority; + StackType_t *puxStackBuffer; + MemoryRegion_t xRegions[ portNUM_CONFIGURABLE_REGIONS ]; +} TaskParameters_t; + +/* Used with the uxTaskGetSystemState() function to return the state of each task +in the system. */ +typedef struct xTASK_STATUS +{ + TaskHandle_t xHandle; /* The handle of the task to which the rest of the information in the structure relates. */ + const char *pcTaskName; /* A pointer to the task's name. This value will be invalid if the task was deleted since the structure was populated! */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + UBaseType_t xTaskNumber; /* A number unique to the task. */ + eTaskState eCurrentState; /* The state in which the task existed when the structure was populated. */ + UBaseType_t uxCurrentPriority; /* The priority at which the task was running (may be inherited) when the structure was populated. */ + UBaseType_t uxBasePriority; /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex. Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */ + uint32_t ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock. See http://www.freertos.org/rtos-run-time-stats.html. Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */ + uint16_t usStackHighWaterMark; /* The minimum amount of stack space that has remained for the task since the task was created. The closer this value is to zero the closer the task has come to overflowing its stack. */ +} TaskStatus_t; + +/* Possible return values for eTaskConfirmSleepModeStatus(). */ +typedef enum +{ + eAbortSleep = 0, /* A task has been made ready or a context switch pended since portSUPPORESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */ + eStandardSleep, /* Enter a sleep mode that will not last any longer than the expected idle time. */ + eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */ +} eSleepModeStatus; + + +/** + * Defines the priority used by the idle task. This must not be modified. + * + * \ingroup TaskUtils + */ +#define tskIDLE_PRIORITY ( ( UBaseType_t ) 0U ) + +/** + * task. h + * + * Macro for forcing a context switch. + * + * \defgroup taskYIELD taskYIELD + * \ingroup SchedulerControl + */ +#define taskYIELD() portYIELD() + +/** + * task. h + * + * Macro to mark the start of a critical code region. Preemptive context + * switches cannot occur when in a critical region. + * + * NOTE: This may alter the stack (depending on the portable implementation) + * so must be used with care! + * + * \defgroup taskENTER_CRITICAL taskENTER_CRITICAL + * \ingroup SchedulerControl + */ +#define taskENTER_CRITICAL(mux) portENTER_CRITICAL(mux) +#define taskENTER_CRITICAL_ISR(mux) portENTER_CRITICAL_ISR(mux) + +/** + * task. h + * + * Macro to mark the end of a critical code region. Preemptive context + * switches cannot occur when in a critical region. + * + * NOTE: This may alter the stack (depending on the portable implementation) + * so must be used with care! + * + * \defgroup taskEXIT_CRITICAL taskEXIT_CRITICAL + * \ingroup SchedulerControl + */ +#define taskEXIT_CRITICAL(mux) portEXIT_CRITICAL(mux) +#define taskEXIT_CRITICAL_ISR(mux) portEXIT_CRITICAL_ISR(mux) + +/** + * task. h + * + * Macro to disable all maskable interrupts. + * + * \defgroup taskDISABLE_INTERRUPTS taskDISABLE_INTERRUPTS + * \ingroup SchedulerControl + */ +#define taskDISABLE_INTERRUPTS() portDISABLE_INTERRUPTS() + +/** + * task. h + * + * Macro to enable microcontroller interrupts. + * + * \defgroup taskENABLE_INTERRUPTS taskENABLE_INTERRUPTS + * \ingroup SchedulerControl + */ +#define taskENABLE_INTERRUPTS() portENABLE_INTERRUPTS() + +/* Definitions returned by xTaskGetSchedulerState(). taskSCHEDULER_SUSPENDED is +0 to generate more optimal code when configASSERT() is defined as the constant +is used in assert() statements. */ +#define taskSCHEDULER_SUSPENDED ( ( BaseType_t ) 0 ) +#define taskSCHEDULER_NOT_STARTED ( ( BaseType_t ) 1 ) +#define taskSCHEDULER_RUNNING ( ( BaseType_t ) 2 ) + + +/*----------------------------------------------------------- + * TASK CREATION API + *----------------------------------------------------------*/ + +/** + * task. h + *
+ BaseType_t xTaskCreate(
+							  TaskFunction_t pvTaskCode,
+							  const char * const pcName,
+							  uint16_t usStackDepth,
+							  void *pvParameters,
+							  UBaseType_t uxPriority,
+							  TaskHandle_t *pvCreatedTask
+						  );
+ * + * Create a new task and add it to the list of tasks that are ready to run. + * On multicore environments, this will give no specific affinity to the task. + * Use xTaskCreatePinnedToCore to give affinity. + * + * xTaskCreate() can only be used to create a task that has unrestricted + * access to the entire microcontroller memory map. Systems that include MPU + * support can alternatively create an MPU constrained task using + * xTaskCreateRestricted(). + * + * @param pvTaskCode Pointer to the task entry function. Tasks + * must be implemented to never return (i.e. continuous loop). + * + * @param pcName A descriptive name for the task. This is mainly used to + * facilitate debugging. Max length defined by configMAX_TASK_NAME_LEN - default + * is 16. + * + * @param usStackDepth The size of the task stack specified as the number of + * variables the stack can hold - not the number of bytes. For example, if + * the stack is 16 bits wide and usStackDepth is defined as 100, 200 bytes + * will be allocated for stack storage. + * + * @param pvParameters Pointer that will be used as the parameter for the task + * being created. + * + * @param uxPriority The priority at which the task should run. Systems that + * include MPU support can optionally create tasks in a privileged (system) + * mode by setting bit portPRIVILEGE_BIT of the priority parameter. For + * example, to create a privileged task at priority 2 the uxPriority parameter + * should be set to ( 2 | portPRIVILEGE_BIT ). + * + * @param pvCreatedTask Used to pass back a handle by which the created task + * can be referenced. + * + * @return pdPASS if the task was successfully created and added to a ready + * list, otherwise an error code defined in the file projdefs.h + * + * Example usage: +
+ // Task to be created.
+ void vTaskCode( void * pvParameters )
+ {
+	 for( ;; )
+	 {
+		 // Task code goes here.
+	 }
+ }
+
+ // Function that creates a task.
+ void vOtherFunction( void )
+ {
+ static uint8_t ucParameterToPass;
+ TaskHandle_t xHandle = NULL;
+
+	 // Create the task, storing the handle.  Note that the passed parameter ucParameterToPass
+	 // must exist for the lifetime of the task, so in this case is declared static.  If it was just an
+	 // an automatic stack variable it might no longer exist, or at least have been corrupted, by the time
+	 // the new task attempts to access it.
+	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
+     configASSERT( xHandle );
+
+	 // Use the handle to delete the task.
+     if( xHandle != NULL )
+     {
+	     vTaskDelete( xHandle );
+     }
+ }
+   
+ * \defgroup xTaskCreate xTaskCreate + * \ingroup Tasks + */ +#define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ), tskNO_AFFINITY ) +#define xTaskCreatePinnedToCore( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask, xCoreID ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ), xCoreID ) + +/** + * task. h + *
+ BaseType_t xTaskCreateRestricted( TaskParameters_t *pxTaskDefinition, TaskHandle_t *pxCreatedTask );
+ * + * xTaskCreateRestricted() should only be used in systems that include an MPU + * implementation. + * + * Create a new task and add it to the list of tasks that are ready to run. + * The function parameters define the memory regions and associated access + * permissions allocated to the task. + * + * @param pxTaskDefinition Pointer to a structure that contains a member + * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API + * documentation) plus an optional stack buffer and the memory region + * definitions. + * + * @param pxCreatedTask Used to pass back a handle by which the created task + * can be referenced. + * + * @return pdPASS if the task was successfully created and added to a ready + * list, otherwise an error code defined in the file projdefs.h + * + * Example usage: +
+// Create an TaskParameters_t structure that defines the task to be created.
+static const TaskParameters_t xCheckTaskParameters =
+{
+	vATask,		// pvTaskCode - the function that implements the task.
+	"ATask",	// pcName - just a text name for the task to assist debugging.
+	100,		// usStackDepth	- the stack size DEFINED IN WORDS.
+	NULL,		// pvParameters - passed into the task function as the function parameters.
+	( 1UL | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state.
+	cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack.
+
+	// xRegions - Allocate up to three separate memory regions for access by
+	// the task, with appropriate access permissions.  Different processors have
+	// different memory alignment requirements - refer to the FreeRTOS documentation
+	// for full information.
+	{
+		// Base address					Length	Parameters
+        { cReadWriteArray,				32,		portMPU_REGION_READ_WRITE },
+        { cReadOnlyArray,				32,		portMPU_REGION_READ_ONLY },
+        { cPrivilegedOnlyAccessArray,	128,	portMPU_REGION_PRIVILEGED_READ_WRITE }
+	}
+};
+
+int main( void )
+{
+TaskHandle_t xHandle;
+
+	// Create a task from the const structure defined above.  The task handle
+	// is requested (the second parameter is not NULL) but in this case just for
+	// demonstration purposes as its not actually used.
+	xTaskCreateRestricted( &xRegTest1Parameters, &xHandle );
+
+	// Start the scheduler.
+	vTaskStartScheduler();
+
+	// Will only get here if there was insufficient memory to create the idle
+	// and/or timer task.
+	for( ;; );
+}
+   
+ * \defgroup xTaskCreateRestricted xTaskCreateRestricted + * \ingroup Tasks + */ +#define xTaskCreateRestricted( x, pxCreatedTask ) xTaskGenericCreate( ((x)->pvTaskCode), ((x)->pcName), ((x)->usStackDepth), ((x)->pvParameters), ((x)->uxPriority), (pxCreatedTask), ((x)->puxStackBuffer), ((x)->xRegions) ) + +/** + * task. h + *
+ void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions );
+ * + * Memory regions are assigned to a restricted task when the task is created by + * a call to xTaskCreateRestricted(). These regions can be redefined using + * vTaskAllocateMPURegions(). + * + * @param xTask The handle of the task being updated. + * + * @param xRegions A pointer to an MemoryRegion_t structure that contains the + * new memory region definitions. + * + * Example usage: +
+// Define an array of MemoryRegion_t structures that configures an MPU region
+// allowing read/write access for 1024 bytes starting at the beginning of the
+// ucOneKByte array.  The other two of the maximum 3 definable regions are
+// unused so set to zero.
+static const MemoryRegion_t xAltRegions[ portNUM_CONFIGURABLE_REGIONS ] =
+{
+	// Base address		Length		Parameters
+	{ ucOneKByte,		1024,		portMPU_REGION_READ_WRITE },
+	{ 0,				0,			0 },
+	{ 0,				0,			0 }
+};
+
+void vATask( void *pvParameters )
+{
+	// This task was created such that it has access to certain regions of
+	// memory as defined by the MPU configuration.  At some point it is
+	// desired that these MPU regions are replaced with that defined in the
+	// xAltRegions const struct above.  Use a call to vTaskAllocateMPURegions()
+	// for this purpose.  NULL is used as the task handle to indicate that this
+	// function should modify the MPU regions of the calling task.
+	vTaskAllocateMPURegions( NULL, xAltRegions );
+
+	// Now the task can continue its function, but from this point on can only
+	// access its stack and the ucOneKByte array (unless any other statically
+	// defined or shared regions have been declared elsewhere).
+}
+   
+ * \defgroup xTaskCreateRestricted xTaskCreateRestricted + * \ingroup Tasks + */ +void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
void vTaskDelete( TaskHandle_t xTask );
+ * + * INCLUDE_vTaskDelete must be defined as 1 for this function to be available. + * See the configuration section for more information. + * + * Remove a task from the RTOS real time kernel's management. The task being + * deleted will be removed from all ready, blocked, suspended and event lists. + * + * NOTE: The idle task is responsible for freeing the kernel allocated + * memory from tasks that have been deleted. It is therefore important that + * the idle task is not starved of microcontroller processing time if your + * application makes any calls to vTaskDelete (). Memory allocated by the + * task code is not automatically freed, and should be freed before the task + * is deleted. + * + * See the demo application file death.c for sample code that utilises + * vTaskDelete (). + * + * @param xTask The handle of the task to be deleted. Passing NULL will + * cause the calling task to be deleted. + * + * Example usage: +
+ void vOtherFunction( void )
+ {
+ TaskHandle_t xHandle;
+
+	 // Create the task, storing the handle.
+	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
+
+	 // Use the handle to delete the task.
+	 vTaskDelete( xHandle );
+ }
+   
+ * \defgroup vTaskDelete vTaskDelete + * \ingroup Tasks + */ +void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION; + +/*----------------------------------------------------------- + * TASK CONTROL API + *----------------------------------------------------------*/ + +/** + * task. h + *
void vTaskDelay( const TickType_t xTicksToDelay );
+ * + * Delay a task for a given number of ticks. The actual time that the + * task remains blocked depends on the tick rate. The constant + * portTICK_PERIOD_MS can be used to calculate real time from the tick + * rate - with the resolution of one tick period. + * + * INCLUDE_vTaskDelay must be defined as 1 for this function to be available. + * See the configuration section for more information. + * + * + * vTaskDelay() specifies a time at which the task wishes to unblock relative to + * the time at which vTaskDelay() is called. For example, specifying a block + * period of 100 ticks will cause the task to unblock 100 ticks after + * vTaskDelay() is called. vTaskDelay() does not therefore provide a good method + * of controlling the frequency of a periodic task as the path taken through the + * code, as well as other task and interrupt activity, will effect the frequency + * at which vTaskDelay() gets called and therefore the time at which the task + * next executes. See vTaskDelayUntil() for an alternative API function designed + * to facilitate fixed frequency execution. It does this by specifying an + * absolute time (rather than a relative time) at which the calling task should + * unblock. + * + * @param xTicksToDelay The amount of time, in tick periods, that + * the calling task should block. + * + * Example usage: + + void vTaskFunction( void * pvParameters ) + { + // Block for 500ms. + const TickType_t xDelay = 500 / portTICK_PERIOD_MS; + + for( ;; ) + { + // Simply toggle the LED every 500ms, blocking between each toggle. + vToggleLED(); + vTaskDelay( xDelay ); + } + } + + * \defgroup vTaskDelay vTaskDelay + * \ingroup TaskCtrl + */ +void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
void vTaskDelayUntil( TickType_t *pxPreviousWakeTime, const TickType_t xTimeIncrement );
+ * + * INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available. + * See the configuration section for more information. + * + * Delay a task until a specified time. This function can be used by periodic + * tasks to ensure a constant execution frequency. + * + * This function differs from vTaskDelay () in one important aspect: vTaskDelay () will + * cause a task to block for the specified number of ticks from the time vTaskDelay () is + * called. It is therefore difficult to use vTaskDelay () by itself to generate a fixed + * execution frequency as the time between a task starting to execute and that task + * calling vTaskDelay () may not be fixed [the task may take a different path though the + * code between calls, or may get interrupted or preempted a different number of times + * each time it executes]. + * + * Whereas vTaskDelay () specifies a wake time relative to the time at which the function + * is called, vTaskDelayUntil () specifies the absolute (exact) time at which it wishes to + * unblock. + * + * The constant portTICK_PERIOD_MS can be used to calculate real time from the tick + * rate - with the resolution of one tick period. + * + * @param pxPreviousWakeTime Pointer to a variable that holds the time at which the + * task was last unblocked. The variable must be initialised with the current time + * prior to its first use (see the example below). Following this the variable is + * automatically updated within vTaskDelayUntil (). + * + * @param xTimeIncrement The cycle time period. The task will be unblocked at + * time *pxPreviousWakeTime + xTimeIncrement. Calling vTaskDelayUntil with the + * same xTimeIncrement parameter value will cause the task to execute with + * a fixed interface period. + * + * Example usage: +
+ // Perform an action every 10 ticks.
+ void vTaskFunction( void * pvParameters )
+ {
+ TickType_t xLastWakeTime;
+ const TickType_t xFrequency = 10;
+
+	 // Initialise the xLastWakeTime variable with the current time.
+	 xLastWakeTime = xTaskGetTickCount ();
+	 for( ;; )
+	 {
+		 // Wait for the next cycle.
+		 vTaskDelayUntil( &xLastWakeTime, xFrequency );
+
+		 // Perform action here.
+	 }
+ }
+   
+ * \defgroup vTaskDelayUntil vTaskDelayUntil + * \ingroup TaskCtrl + */ +void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask );
+ * + * INCLUDE_uxTaskPriorityGet must be defined as 1 for this function to be available. + * See the configuration section for more information. + * + * Obtain the priority of any task. + * + * @param xTask Handle of the task to be queried. Passing a NULL + * handle results in the priority of the calling task being returned. + * + * @return The priority of xTask. + * + * Example usage: +
+ void vAFunction( void )
+ {
+ TaskHandle_t xHandle;
+
+	 // Create a task, storing the handle.
+	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
+
+	 // ...
+
+	 // Use the handle to obtain the priority of the created task.
+	 // It was created with tskIDLE_PRIORITY, but may have changed
+	 // it itself.
+	 if( uxTaskPriorityGet( xHandle ) != tskIDLE_PRIORITY )
+	 {
+		 // The task has changed it's priority.
+	 }
+
+	 // ...
+
+	 // Is our priority higher than the created task?
+	 if( uxTaskPriorityGet( xHandle ) < uxTaskPriorityGet( NULL ) )
+	 {
+		 // Our priority (obtained using NULL handle) is higher.
+	 }
+ }
+   
+ * \defgroup uxTaskPriorityGet uxTaskPriorityGet + * \ingroup TaskCtrl + */ +UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
UBaseType_t uxTaskPriorityGetFromISR( TaskHandle_t xTask );
+ * + * A version of uxTaskPriorityGet() that can be used from an ISR. + */ +UBaseType_t uxTaskPriorityGetFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
eTaskState eTaskGetState( TaskHandle_t xTask );
+ * + * INCLUDE_eTaskGetState must be defined as 1 for this function to be available. + * See the configuration section for more information. + * + * Obtain the state of any task. States are encoded by the eTaskState + * enumerated type. + * + * @param xTask Handle of the task to be queried. + * + * @return The state of xTask at the time the function was called. Note the + * state of the task might change between the function being called, and the + * functions return value being tested by the calling task. + */ +eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority );
+ * + * INCLUDE_vTaskPrioritySet must be defined as 1 for this function to be available. + * See the configuration section for more information. + * + * Set the priority of any task. + * + * A context switch will occur before the function returns if the priority + * being set is higher than the currently executing task. + * + * @param xTask Handle to the task for which the priority is being set. + * Passing a NULL handle results in the priority of the calling task being set. + * + * @param uxNewPriority The priority to which the task will be set. + * + * Example usage: +
+ void vAFunction( void )
+ {
+ TaskHandle_t xHandle;
+
+	 // Create a task, storing the handle.
+	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
+
+	 // ...
+
+	 // Use the handle to raise the priority of the created task.
+	 vTaskPrioritySet( xHandle, tskIDLE_PRIORITY + 1 );
+
+	 // ...
+
+	 // Use a NULL handle to raise our priority to the same value.
+	 vTaskPrioritySet( NULL, tskIDLE_PRIORITY + 1 );
+ }
+   
+ * \defgroup vTaskPrioritySet vTaskPrioritySet + * \ingroup TaskCtrl + */ +void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
void vTaskSuspend( TaskHandle_t xTaskToSuspend );
+ * + * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. + * See the configuration section for more information. + * + * Suspend any task. When suspended a task will never get any microcontroller + * processing time, no matter what its priority. + * + * Calls to vTaskSuspend are not accumulative - + * i.e. calling vTaskSuspend () twice on the same task still only requires one + * call to vTaskResume () to ready the suspended task. + * + * @param xTaskToSuspend Handle to the task being suspended. Passing a NULL + * handle will cause the calling task to be suspended. + * + * Example usage: +
+ void vAFunction( void )
+ {
+ TaskHandle_t xHandle;
+
+	 // Create a task, storing the handle.
+	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
+
+	 // ...
+
+	 // Use the handle to suspend the created task.
+	 vTaskSuspend( xHandle );
+
+	 // ...
+
+	 // The created task will not run during this period, unless
+	 // another task calls vTaskResume( xHandle ).
+
+	 //...
+
+
+	 // Suspend ourselves.
+	 vTaskSuspend( NULL );
+
+	 // We cannot get here unless another task calls vTaskResume
+	 // with our handle as the parameter.
+ }
+   
+ * \defgroup vTaskSuspend vTaskSuspend + * \ingroup TaskCtrl + */ +void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
void vTaskResume( TaskHandle_t xTaskToResume );
+ * + * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. + * See the configuration section for more information. + * + * Resumes a suspended task. + * + * A task that has been suspended by one or more calls to vTaskSuspend () + * will be made available for running again by a single call to + * vTaskResume (). + * + * @param xTaskToResume Handle to the task being readied. + * + * Example usage: +
+ void vAFunction( void )
+ {
+ TaskHandle_t xHandle;
+
+	 // Create a task, storing the handle.
+	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
+
+	 // ...
+
+	 // Use the handle to suspend the created task.
+	 vTaskSuspend( xHandle );
+
+	 // ...
+
+	 // The created task will not run during this period, unless
+	 // another task calls vTaskResume( xHandle ).
+
+	 //...
+
+
+	 // Resume the suspended task ourselves.
+	 vTaskResume( xHandle );
+
+	 // The created task will once again get microcontroller processing
+	 // time in accordance with its priority within the system.
+ }
+   
+ * \defgroup vTaskResume vTaskResume + * \ingroup TaskCtrl + */ +void vTaskResume( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
void xTaskResumeFromISR( TaskHandle_t xTaskToResume );
+ * + * INCLUDE_xTaskResumeFromISR must be defined as 1 for this function to be + * available. See the configuration section for more information. + * + * An implementation of vTaskResume() that can be called from within an ISR. + * + * A task that has been suspended by one or more calls to vTaskSuspend () + * will be made available for running again by a single call to + * xTaskResumeFromISR (). + * + * xTaskResumeFromISR() should not be used to synchronise a task with an + * interrupt if there is a chance that the interrupt could arrive prior to the + * task being suspended - as this can lead to interrupts being missed. Use of a + * semaphore as a synchronisation mechanism would avoid this eventuality. + * + * @param xTaskToResume Handle to the task being readied. + * + * @return pdTRUE if resuming the task should result in a context switch, + * otherwise pdFALSE. This is used by the ISR to determine if a context switch + * may be required following the ISR. + * + * \defgroup vTaskResumeFromISR vTaskResumeFromISR + * \ingroup TaskCtrl + */ +BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION; + +/*----------------------------------------------------------- + * SCHEDULER CONTROL + *----------------------------------------------------------*/ + +/** + * task. h + *
void vTaskStartScheduler( void );
+ * + * Starts the real time kernel tick processing. After calling the kernel + * has control over which tasks are executed and when. + * + * See the demo application file main.c for an example of creating + * tasks and starting the kernel. + * + * Example usage: +
+ void vAFunction( void )
+ {
+	 // Create at least one task before starting the kernel.
+	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+
+	 // Start the real time kernel with preemption.
+	 vTaskStartScheduler ();
+
+	 // Will not get here unless a task calls vTaskEndScheduler ()
+ }
+   
+ * + * \defgroup vTaskStartScheduler vTaskStartScheduler + * \ingroup SchedulerControl + */ +void vTaskStartScheduler( void ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
void vTaskEndScheduler( void );
+ * + * NOTE: At the time of writing only the x86 real mode port, which runs on a PC + * in place of DOS, implements this function. + * + * Stops the real time kernel tick. All created tasks will be automatically + * deleted and multitasking (either preemptive or cooperative) will + * stop. Execution then resumes from the point where vTaskStartScheduler () + * was called, as if vTaskStartScheduler () had just returned. + * + * See the demo application file main. c in the demo/PC directory for an + * example that uses vTaskEndScheduler (). + * + * vTaskEndScheduler () requires an exit function to be defined within the + * portable layer (see vPortEndScheduler () in port. c for the PC port). This + * performs hardware specific operations such as stopping the kernel tick. + * + * vTaskEndScheduler () will cause all of the resources allocated by the + * kernel to be freed - but will not free resources allocated by application + * tasks. + * + * Example usage: +
+ void vTaskCode( void * pvParameters )
+ {
+	 for( ;; )
+	 {
+		 // Task code goes here.
+
+		 // At some point we want to end the real time kernel processing
+		 // so call ...
+		 vTaskEndScheduler ();
+	 }
+ }
+
+ void vAFunction( void )
+ {
+	 // Create at least one task before starting the kernel.
+	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+
+	 // Start the real time kernel with preemption.
+	 vTaskStartScheduler ();
+
+	 // Will only get here when the vTaskCode () task has called
+	 // vTaskEndScheduler ().  When we get here we are back to single task
+	 // execution.
+ }
+   
+ * + * \defgroup vTaskEndScheduler vTaskEndScheduler + * \ingroup SchedulerControl + */ +void vTaskEndScheduler( void ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
void vTaskSuspendAll( void );
+ * + * Suspends the scheduler without disabling interrupts. Context switches will + * not occur while the scheduler is suspended. + * + * After calling vTaskSuspendAll () the calling task will continue to execute + * without risk of being swapped out until a call to xTaskResumeAll () has been + * made. + * + * API functions that have the potential to cause a context switch (for example, + * vTaskDelayUntil(), xQueueSend(), etc.) must not be called while the scheduler + * is suspended. + * + * Example usage: +
+ void vTask1( void * pvParameters )
+ {
+	 for( ;; )
+	 {
+		 // Task code goes here.
+
+		 // ...
+
+		 // At some point the task wants to perform a long operation during
+		 // which it does not want to get swapped out.  It cannot use
+		 // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
+		 // operation may cause interrupts to be missed - including the
+		 // ticks.
+
+		 // Prevent the real time kernel swapping out the task.
+		 vTaskSuspendAll ();
+
+		 // Perform the operation here.  There is no need to use critical
+		 // sections as we have all the microcontroller processing time.
+		 // During this time interrupts will still operate and the kernel
+		 // tick count will be maintained.
+
+		 // ...
+
+		 // The operation is complete.  Restart the kernel.
+		 xTaskResumeAll ();
+	 }
+ }
+   
+ * \defgroup vTaskSuspendAll vTaskSuspendAll + * \ingroup SchedulerControl + */ +void vTaskSuspendAll( void ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
BaseType_t xTaskResumeAll( void );
+ * + * Resumes scheduler activity after it was suspended by a call to + * vTaskSuspendAll(). + * + * xTaskResumeAll() only resumes the scheduler. It does not unsuspend tasks + * that were previously suspended by a call to vTaskSuspend(). + * + * @return If resuming the scheduler caused a context switch then pdTRUE is + * returned, otherwise pdFALSE is returned. + * + * Example usage: +
+ void vTask1( void * pvParameters )
+ {
+	 for( ;; )
+	 {
+		 // Task code goes here.
+
+		 // ...
+
+		 // At some point the task wants to perform a long operation during
+		 // which it does not want to get swapped out.  It cannot use
+		 // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
+		 // operation may cause interrupts to be missed - including the
+		 // ticks.
+
+		 // Prevent the real time kernel swapping out the task.
+		 vTaskSuspendAll ();
+
+		 // Perform the operation here.  There is no need to use critical
+		 // sections as we have all the microcontroller processing time.
+		 // During this time interrupts will still operate and the real
+		 // time kernel tick count will be maintained.
+
+		 // ...
+
+		 // The operation is complete.  Restart the kernel.  We want to force
+		 // a context switch - but there is no point if resuming the scheduler
+		 // caused a context switch already.
+		 if( !xTaskResumeAll () )
+		 {
+			  taskYIELD ();
+		 }
+	 }
+ }
+   
+ * \defgroup xTaskResumeAll xTaskResumeAll + * \ingroup SchedulerControl + */ +BaseType_t xTaskResumeAll( void ) PRIVILEGED_FUNCTION; + +/*----------------------------------------------------------- + * TASK UTILITIES + *----------------------------------------------------------*/ + +/** + * task. h + *
TickType_t xTaskGetTickCount( void );
+ * + * @return The count of ticks since vTaskStartScheduler was called. + * + * \defgroup xTaskGetTickCount xTaskGetTickCount + * \ingroup TaskUtils + */ +TickType_t xTaskGetTickCount( void ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
TickType_t xTaskGetTickCountFromISR( void );
+ * + * @return The count of ticks since vTaskStartScheduler was called. + * + * This is a version of xTaskGetTickCount() that is safe to be called from an + * ISR - provided that TickType_t is the natural word size of the + * microcontroller being used or interrupt nesting is either not supported or + * not being used. + * + * \defgroup xTaskGetTickCountFromISR xTaskGetTickCountFromISR + * \ingroup TaskUtils + */ +TickType_t xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
uint16_t uxTaskGetNumberOfTasks( void );
+ * + * @return The number of tasks that the real time kernel is currently managing. + * This includes all ready, blocked and suspended tasks. A task that + * has been deleted but not yet freed by the idle task will also be + * included in the count. + * + * \defgroup uxTaskGetNumberOfTasks uxTaskGetNumberOfTasks + * \ingroup TaskUtils + */ +UBaseType_t uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
char *pcTaskGetTaskName( TaskHandle_t xTaskToQuery );
+ * + * @return The text (human readable) name of the task referenced by the handle + * xTaskToQuery. A task can query its own name by either passing in its own + * handle, or by setting xTaskToQuery to NULL. INCLUDE_pcTaskGetTaskName must be + * set to 1 in FreeRTOSConfig.h for pcTaskGetTaskName() to be available. + * + * \defgroup pcTaskGetTaskName pcTaskGetTaskName + * \ingroup TaskUtils + */ +char *pcTaskGetTaskName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + +/** + * task.h + *
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );
+ * + * INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for + * this function to be available. + * + * Returns the high water mark of the stack associated with xTask. That is, + * the minimum free stack space there has been (in words, so on a 32 bit machine + * a value of 1 means 4 bytes) since the task started. The smaller the returned + * number the closer the task has come to overflowing its stack. + * + * @param xTask Handle of the task associated with the stack to be checked. + * Set xTask to NULL to check the stack of the calling task. + * + * @return The smallest amount of free stack space there has been (in words, so + * actual spaces on the stack rather than bytes) since the task referenced by + * xTask was created. + */ +UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + +/* When using trace macros it is sometimes necessary to include task.h before +FreeRTOS.h. When this is done TaskHookFunction_t will not yet have been defined, +so the following two prototypes will cause a compilation error. This can be +fixed by simply guarding against the inclusion of these two prototypes unless +they are explicitly required by the configUSE_APPLICATION_TASK_TAG configuration +constant. */ +#ifdef configUSE_APPLICATION_TASK_TAG + #if configUSE_APPLICATION_TASK_TAG == 1 + /** + * task.h + *
void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction );
+ * + * Sets pxHookFunction to be the task hook function used by the task xTask. + * Passing xTask as NULL has the effect of setting the calling tasks hook + * function. + */ + void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ) PRIVILEGED_FUNCTION; + + /** + * task.h + *
void xTaskGetApplicationTaskTag( TaskHandle_t xTask );
+ * + * Returns the pxHookFunction value assigned to the task xTask. + */ + TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + #endif /* configUSE_APPLICATION_TASK_TAG ==1 */ +#endif /* ifdef configUSE_APPLICATION_TASK_TAG */ +#if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) + + /* Each task contains an array of pointers that is dimensioned by the + configNUM_THREAD_LOCAL_STORAGE_POINTERS setting in FreeRTOSConfig.h. The + kernel does not use the pointers itself, so the application writer can use + the pointers for any purpose they wish. The following two functions are + used to set and query a pointer respectively. */ + void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ) PRIVILEGED_FUNCTION; + void *pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ) PRIVILEGED_FUNCTION; + + #if ( configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS ) + typedef void (*TlsDeleteCallbackFunction_t)( int, void * ); + void vTaskSetThreadLocalStoragePointerAndDelCallback( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue , TlsDeleteCallbackFunction_t xDelCallback); + #endif + +#endif + +/** + * task.h + *
BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );
+ * + * Calls the hook function associated with xTask. Passing xTask as NULL has + * the effect of calling the Running tasks (the calling task) hook function. + * + * pvParameter is passed to the hook function for the task to interpret as it + * wants. The return value is the value returned by the task hook function + * registered by the user. + */ +BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) PRIVILEGED_FUNCTION; + +/** + * xTaskGetIdleTaskHandle() is only available if + * INCLUDE_xTaskGetIdleTaskHandle is set to 1 in FreeRTOSConfig.h. + * + * Simply returns the handle of the idle task. It is not valid to call + * xTaskGetIdleTaskHandle() before the scheduler has been started. + */ +TaskHandle_t xTaskGetIdleTaskHandle( void ); + +/** + * configUSE_TRACE_FACILITY must be defined as 1 in FreeRTOSConfig.h for + * uxTaskGetSystemState() to be available. + * + * uxTaskGetSystemState() populates an TaskStatus_t structure for each task in + * the system. TaskStatus_t structures contain, among other things, members + * for the task handle, task name, task priority, task state, and total amount + * of run time consumed by the task. See the TaskStatus_t structure + * definition in this file for the full member list. + * + * NOTE: This function is intended for debugging use only as its use results in + * the scheduler remaining suspended for an extended period. + * + * @param pxTaskStatusArray A pointer to an array of TaskStatus_t structures. + * The array must contain at least one TaskStatus_t structure for each task + * that is under the control of the RTOS. The number of tasks under the control + * of the RTOS can be determined using the uxTaskGetNumberOfTasks() API function. + * + * @param uxArraySize The size of the array pointed to by the pxTaskStatusArray + * parameter. The size is specified as the number of indexes in the array, or + * the number of TaskStatus_t structures contained in the array, not by the + * number of bytes in the array. + * + * @param pulTotalRunTime If configGENERATE_RUN_TIME_STATS is set to 1 in + * FreeRTOSConfig.h then *pulTotalRunTime is set by uxTaskGetSystemState() to the + * total run time (as defined by the run time stats clock, see + * http://www.freertos.org/rtos-run-time-stats.html) since the target booted. + * pulTotalRunTime can be set to NULL to omit the total run time information. + * + * @return The number of TaskStatus_t structures that were populated by + * uxTaskGetSystemState(). This should equal the number returned by the + * uxTaskGetNumberOfTasks() API function, but will be zero if the value passed + * in the uxArraySize parameter was too small. + * + * Example usage: +
+    // This example demonstrates how a human readable table of run time stats
+	// information is generated from raw data provided by uxTaskGetSystemState().
+	// The human readable table is written to pcWriteBuffer
+	void vTaskGetRunTimeStats( char *pcWriteBuffer )
+	{
+	TaskStatus_t *pxTaskStatusArray;
+	volatile UBaseType_t uxArraySize, x;
+	uint32_t ulTotalRunTime, ulStatsAsPercentage;
+
+		// Make sure the write buffer does not contain a string.
+		*pcWriteBuffer = 0x00;
+
+		// Take a snapshot of the number of tasks in case it changes while this
+		// function is executing.
+		uxArraySize = uxTaskGetNumberOfTasks();
+
+		// Allocate a TaskStatus_t structure for each task.  An array could be
+		// allocated statically at compile time.
+		pxTaskStatusArray = pvPortMalloc( uxArraySize * sizeof( TaskStatus_t ) );
+
+		if( pxTaskStatusArray != NULL )
+		{
+			// Generate raw status information about each task.
+			uxArraySize = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, &ulTotalRunTime );
+
+			// For percentage calculations.
+			ulTotalRunTime /= 100UL;
+
+			// Avoid divide by zero errors.
+			if( ulTotalRunTime > 0 )
+			{
+				// For each populated position in the pxTaskStatusArray array,
+				// format the raw data as human readable ASCII data
+				for( x = 0; x < uxArraySize; x++ )
+				{
+					// What percentage of the total run time has the task used?
+					// This will always be rounded down to the nearest integer.
+					// ulTotalRunTimeDiv100 has already been divided by 100.
+					ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalRunTime;
+
+					if( ulStatsAsPercentage > 0UL )
+					{
+						sprintf( pcWriteBuffer, "%s\t\t%lu\t\t%lu%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage );
+					}
+					else
+					{
+						// If the percentage is zero here then the task has
+						// consumed less than 1% of the total run time.
+						sprintf( pcWriteBuffer, "%s\t\t%lu\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter );
+					}
+
+					pcWriteBuffer += strlen( ( char * ) pcWriteBuffer );
+				}
+			}
+
+			// The array is no longer needed, free the memory it consumes.
+			vPortFree( pxTaskStatusArray );
+		}
+	}
+	
+ */ +UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ); + +/** + * task. h + *
void vTaskList( char *pcWriteBuffer );
+ * + * configUSE_TRACE_FACILITY and configUSE_STATS_FORMATTING_FUNCTIONS must + * both be defined as 1 for this function to be available. See the + * configuration section of the FreeRTOS.org website for more information. + * + * NOTE 1: This function will disable interrupts for its duration. It is + * not intended for normal application runtime use but as a debug aid. + * + * Lists all the current tasks, along with their current state and stack + * usage high water mark. + * + * Tasks are reported as blocked ('B'), ready ('R'), deleted ('D') or + * suspended ('S'). + * + * PLEASE NOTE: + * + * This function is provided for convenience only, and is used by many of the + * demo applications. Do not consider it to be part of the scheduler. + * + * vTaskList() calls uxTaskGetSystemState(), then formats part of the + * uxTaskGetSystemState() output into a human readable table that displays task + * names, states and stack usage. + * + * vTaskList() has a dependency on the sprintf() C library function that might + * bloat the code size, use a lot of stack, and provide different results on + * different platforms. An alternative, tiny, third party, and limited + * functionality implementation of sprintf() is provided in many of the + * FreeRTOS/Demo sub-directories in a file called printf-stdarg.c (note + * printf-stdarg.c does not provide a full snprintf() implementation!). + * + * It is recommended that production systems call uxTaskGetSystemState() + * directly to get access to raw stats data, rather than indirectly through a + * call to vTaskList(). + * + * @param pcWriteBuffer A buffer into which the above mentioned details + * will be written, in ASCII form. This buffer is assumed to be large + * enough to contain the generated report. Approximately 40 bytes per + * task should be sufficient. + * + * \defgroup vTaskList vTaskList + * \ingroup TaskUtils + */ +void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + +/** + * task. h + *
void vTaskGetRunTimeStats( char *pcWriteBuffer );
+ * + * configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS + * must both be defined as 1 for this function to be available. The application + * must also then provide definitions for + * portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE() + * to configure a peripheral timer/counter and return the timers current count + * value respectively. The counter should be at least 10 times the frequency of + * the tick count. + * + * NOTE 1: This function will disable interrupts for its duration. It is + * not intended for normal application runtime use but as a debug aid. + * + * Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total + * accumulated execution time being stored for each task. The resolution + * of the accumulated time value depends on the frequency of the timer + * configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro. + * Calling vTaskGetRunTimeStats() writes the total execution time of each + * task into a buffer, both as an absolute count value and as a percentage + * of the total system execution time. + * + * NOTE 2: + * + * This function is provided for convenience only, and is used by many of the + * demo applications. Do not consider it to be part of the scheduler. + * + * vTaskGetRunTimeStats() calls uxTaskGetSystemState(), then formats part of the + * uxTaskGetSystemState() output into a human readable table that displays the + * amount of time each task has spent in the Running state in both absolute and + * percentage terms. + * + * vTaskGetRunTimeStats() has a dependency on the sprintf() C library function + * that might bloat the code size, use a lot of stack, and provide different + * results on different platforms. An alternative, tiny, third party, and + * limited functionality implementation of sprintf() is provided in many of the + * FreeRTOS/Demo sub-directories in a file called printf-stdarg.c (note + * printf-stdarg.c does not provide a full snprintf() implementation!). + * + * It is recommended that production systems call uxTaskGetSystemState() directly + * to get access to raw stats data, rather than indirectly through a call to + * vTaskGetRunTimeStats(). + * + * @param pcWriteBuffer A buffer into which the execution times will be + * written, in ASCII form. This buffer is assumed to be large enough to + * contain the generated report. Approximately 40 bytes per task should + * be sufficient. + * + * \defgroup vTaskGetRunTimeStats vTaskGetRunTimeStats + * \ingroup TaskUtils + */ +void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + +/** + * task. h + *
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );
+ * + * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this + * function to be available. + * + * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private + * "notification value", which is a 32-bit unsigned integer (uint32_t). + * + * Events can be sent to a task using an intermediary object. Examples of such + * objects are queues, semaphores, mutexes and event groups. Task notifications + * are a method of sending an event directly to a task without the need for such + * an intermediary object. + * + * A notification sent to a task can optionally perform an action, such as + * update, overwrite or increment the task's notification value. In that way + * task notifications can be used to send data to a task, or be used as light + * weight and fast binary or counting semaphores. + * + * A notification sent to a task will remain pending until it is cleared by the + * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was + * already in the Blocked state to wait for a notification when the notification + * arrives then the task will automatically be removed from the Blocked state + * (unblocked) and the notification cleared. + * + * A task can use xTaskNotifyWait() to [optionally] block to wait for a + * notification to be pending, or ulTaskNotifyTake() to [optionally] block + * to wait for its notification value to have a non-zero value. The task does + * not consume any CPU time while it is in the Blocked state. + * + * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. + * + * @param xTaskToNotify The handle of the task being notified. The handle to a + * task can be returned from the xTaskCreate() API function used to create the + * task, and the handle of the currently running task can be obtained by calling + * xTaskGetCurrentTaskHandle(). + * + * @param ulValue Data that can be sent with the notification. How the data is + * used depends on the value of the eAction parameter. + * + * @param eAction Specifies how the notification updates the task's notification + * value, if at all. Valid values for eAction are as follows: + * + * eSetBits - + * The task's notification value is bitwise ORed with ulValue. xTaskNofify() + * always returns pdPASS in this case. + * + * eIncrement - + * The task's notification value is incremented. ulValue is not used and + * xTaskNotify() always returns pdPASS in this case. + * + * eSetValueWithOverwrite - + * The task's notification value is set to the value of ulValue, even if the + * task being notified had not yet processed the previous notification (the + * task already had a notification pending). xTaskNotify() always returns + * pdPASS in this case. + * + * eSetValueWithoutOverwrite - + * If the task being notified did not already have a notification pending then + * the task's notification value is set to ulValue and xTaskNotify() will + * return pdPASS. If the task being notified already had a notification + * pending then no action is performed and pdFAIL is returned. + * + * eNoAction - + * The task receives a notification without its notification value being + * updated. ulValue is not used and xTaskNotify() always returns pdPASS in + * this case. + * + * @return Dependent on the value of eAction. See the description of the + * eAction parameter. + * + * \defgroup xTaskNotify xTaskNotify + * \ingroup TaskNotifications + */ +BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction ); + +/** + * task. h + *
BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, BaseType_t *pxHigherPriorityTaskWoken );
+ * + * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this + * function to be available. + * + * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private + * "notification value", which is a 32-bit unsigned integer (uint32_t). + * + * A version of xTaskNotify() that can be used from an interrupt service routine + * (ISR). + * + * Events can be sent to a task using an intermediary object. Examples of such + * objects are queues, semaphores, mutexes and event groups. Task notifications + * are a method of sending an event directly to a task without the need for such + * an intermediary object. + * + * A notification sent to a task can optionally perform an action, such as + * update, overwrite or increment the task's notification value. In that way + * task notifications can be used to send data to a task, or be used as light + * weight and fast binary or counting semaphores. + * + * A notification sent to a task will remain pending until it is cleared by the + * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was + * already in the Blocked state to wait for a notification when the notification + * arrives then the task will automatically be removed from the Blocked state + * (unblocked) and the notification cleared. + * + * A task can use xTaskNotifyWait() to [optionally] block to wait for a + * notification to be pending, or ulTaskNotifyTake() to [optionally] block + * to wait for its notification value to have a non-zero value. The task does + * not consume any CPU time while it is in the Blocked state. + * + * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. + * + * @param xTaskToNotify The handle of the task being notified. The handle to a + * task can be returned from the xTaskCreate() API function used to create the + * task, and the handle of the currently running task can be obtained by calling + * xTaskGetCurrentTaskHandle(). + * + * @param ulValue Data that can be sent with the notification. How the data is + * used depends on the value of the eAction parameter. + * + * @param eAction Specifies how the notification updates the task's notification + * value, if at all. Valid values for eAction are as follows: + * + * eSetBits - + * The task's notification value is bitwise ORed with ulValue. xTaskNofify() + * always returns pdPASS in this case. + * + * eIncrement - + * The task's notification value is incremented. ulValue is not used and + * xTaskNotify() always returns pdPASS in this case. + * + * eSetValueWithOverwrite - + * The task's notification value is set to the value of ulValue, even if the + * task being notified had not yet processed the previous notification (the + * task already had a notification pending). xTaskNotify() always returns + * pdPASS in this case. + * + * eSetValueWithoutOverwrite - + * If the task being notified did not already have a notification pending then + * the task's notification value is set to ulValue and xTaskNotify() will + * return pdPASS. If the task being notified already had a notification + * pending then no action is performed and pdFAIL is returned. + * + * eNoAction - + * The task receives a notification without its notification value being + * updated. ulValue is not used and xTaskNotify() always returns pdPASS in + * this case. + * + * @param pxHigherPriorityTaskWoken xTaskNotifyFromISR() will set + * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the + * task to which the notification was sent to leave the Blocked state, and the + * unblocked task has a priority higher than the currently running task. If + * xTaskNotifyFromISR() sets this value to pdTRUE then a context switch should + * be requested before the interrupt is exited. How a context switch is + * requested from an ISR is dependent on the port - see the documentation page + * for the port in use. + * + * @return Dependent on the value of eAction. See the description of the + * eAction parameter. + * + * \defgroup xTaskNotify xTaskNotify + * \ingroup TaskNotifications + */ +BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, BaseType_t *pxHigherPriorityTaskWoken ); + +/** + * task. h + *
BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );
+ * + * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this + * function to be available. + * + * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private + * "notification value", which is a 32-bit unsigned integer (uint32_t). + * + * Events can be sent to a task using an intermediary object. Examples of such + * objects are queues, semaphores, mutexes and event groups. Task notifications + * are a method of sending an event directly to a task without the need for such + * an intermediary object. + * + * A notification sent to a task can optionally perform an action, such as + * update, overwrite or increment the task's notification value. In that way + * task notifications can be used to send data to a task, or be used as light + * weight and fast binary or counting semaphores. + * + * A notification sent to a task will remain pending until it is cleared by the + * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was + * already in the Blocked state to wait for a notification when the notification + * arrives then the task will automatically be removed from the Blocked state + * (unblocked) and the notification cleared. + * + * A task can use xTaskNotifyWait() to [optionally] block to wait for a + * notification to be pending, or ulTaskNotifyTake() to [optionally] block + * to wait for its notification value to have a non-zero value. The task does + * not consume any CPU time while it is in the Blocked state. + * + * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. + * + * @param ulBitsToClearOnEntry Bits that are set in ulBitsToClearOnEntry value + * will be cleared in the calling task's notification value before the task + * checks to see if any notifications are pending, and optionally blocks if no + * notifications are pending. Setting ulBitsToClearOnEntry to ULONG_MAX (if + * limits.h is included) or 0xffffffffUL (if limits.h is not included) will have + * the effect of resetting the task's notification value to 0. Setting + * ulBitsToClearOnEntry to 0 will leave the task's notification value unchanged. + * + * @param ulBitsToClearOnExit If a notification is pending or received before + * the calling task exits the xTaskNotifyWait() function then the task's + * notification value (see the xTaskNotify() API function) is passed out using + * the pulNotificationValue parameter. Then any bits that are set in + * ulBitsToClearOnExit will be cleared in the task's notification value (note + * *pulNotificationValue is set before any bits are cleared). Setting + * ulBitsToClearOnExit to ULONG_MAX (if limits.h is included) or 0xffffffffUL + * (if limits.h is not included) will have the effect of resetting the task's + * notification value to 0 before the function exits. Setting + * ulBitsToClearOnExit to 0 will leave the task's notification value unchanged + * when the function exits (in which case the value passed out in + * pulNotificationValue will match the task's notification value). + * + * @param pulNotificationValue Used to pass the task's notification value out + * of the function. Note the value passed out will not be effected by the + * clearing of any bits caused by ulBitsToClearOnExit being non-zero. + * + * @param xTicksToWait The maximum amount of time that the task should wait in + * the Blocked state for a notification to be received, should a notification + * not already be pending when xTaskNotifyWait() was called. The task + * will not consume any processing time while it is in the Blocked state. This + * is specified in kernel ticks, the macro pdMS_TO_TICSK( value_in_ms ) can be + * used to convert a time specified in milliseconds to a time specified in + * ticks. + * + * @return If a notification was received (including notifications that were + * already pending when xTaskNotifyWait was called) then pdPASS is + * returned. Otherwise pdFAIL is returned. + * + * \defgroup xTaskNotifyWait xTaskNotifyWait + * \ingroup TaskNotifications + */ +BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ); + +/** + * task. h + *
BaseType_t xTaskNotifyGive( TaskHandle_t xTaskToNotify );
+ * + * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro + * to be available. + * + * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private + * "notification value", which is a 32-bit unsigned integer (uint32_t). + * + * Events can be sent to a task using an intermediary object. Examples of such + * objects are queues, semaphores, mutexes and event groups. Task notifications + * are a method of sending an event directly to a task without the need for such + * an intermediary object. + * + * A notification sent to a task can optionally perform an action, such as + * update, overwrite or increment the task's notification value. In that way + * task notifications can be used to send data to a task, or be used as light + * weight and fast binary or counting semaphores. + * + * xTaskNotifyGive() is a helper macro intended for use when task notifications + * are used as light weight and faster binary or counting semaphore equivalents. + * Actual FreeRTOS semaphores are given using the xSemaphoreGive() API function, + * the equivalent action that instead uses a task notification is + * xTaskNotifyGive(). + * + * When task notifications are being used as a binary or counting semaphore + * equivalent then the task being notified should wait for the notification + * using the ulTaskNotificationTake() API function rather than the + * xTaskNotifyWait() API function. + * + * See http://www.FreeRTOS.org/RTOS-task-notifications.html for more details. + * + * @param xTaskToNotify The handle of the task being notified. The handle to a + * task can be returned from the xTaskCreate() API function used to create the + * task, and the handle of the currently running task can be obtained by calling + * xTaskGetCurrentTaskHandle(). + * + * @return xTaskNotifyGive() is a macro that calls xTaskNotify() with the + * eAction parameter set to eIncrement - so pdPASS is always returned. + * + * \defgroup xTaskNotifyGive xTaskNotifyGive + * \ingroup TaskNotifications + */ +#define xTaskNotifyGive( xTaskToNotify ) xTaskNotify( ( xTaskToNotify ), 0, eIncrement ); + +/** + * task. h + *
void vTaskNotifyGiveFromISR( TaskHandle_t xTaskHandle, BaseType_t *pxHigherPriorityTaskWoken );
+ *
+ * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro
+ * to be available.
+ *
+ * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private
+ * "notification value", which is a 32-bit unsigned integer (uint32_t).
+ *
+ * A version of xTaskNotifyGive() that can be called from an interrupt service
+ * routine (ISR).
+ *
+ * Events can be sent to a task using an intermediary object.  Examples of such
+ * objects are queues, semaphores, mutexes and event groups.  Task notifications
+ * are a method of sending an event directly to a task without the need for such
+ * an intermediary object.
+ *
+ * A notification sent to a task can optionally perform an action, such as
+ * update, overwrite or increment the task's notification value.  In that way
+ * task notifications can be used to send data to a task, or be used as light
+ * weight and fast binary or counting semaphores.
+ *
+ * vTaskNotifyGiveFromISR() is intended for use when task notifications are
+ * used as light weight and faster binary or counting semaphore equivalents.
+ * Actual FreeRTOS semaphores are given from an ISR using the
+ * xSemaphoreGiveFromISR() API function, the equivalent action that instead uses
+ * a task notification is vTaskNotifyGiveFromISR().
+ *
+ * When task notifications are being used as a binary or counting semaphore
+ * equivalent then the task being notified should wait for the notification
+ * using the ulTaskNotificationTake() API function rather than the
+ * xTaskNotifyWait() API function.
+ *
+ * See http://www.FreeRTOS.org/RTOS-task-notifications.html for more details.
+ *
+ * @param xTaskToNotify The handle of the task being notified.  The handle to a
+ * task can be returned from the xTaskCreate() API function used to create the
+ * task, and the handle of the currently running task can be obtained by calling
+ * xTaskGetCurrentTaskHandle().
+ *
+ * @param pxHigherPriorityTaskWoken  vTaskNotifyGiveFromISR() will set
+ * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the
+ * task to which the notification was sent to leave the Blocked state, and the
+ * unblocked task has a priority higher than the currently running task.  If
+ * vTaskNotifyGiveFromISR() sets this value to pdTRUE then a context switch
+ * should be requested before the interrupt is exited.  How a context switch is
+ * requested from an ISR is dependent on the port - see the documentation page
+ * for the port in use.
+ *
+ * \defgroup xTaskNotifyWait xTaskNotifyWait
+ * \ingroup TaskNotifications
+ */
+void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken );
+
+/**
+ * task. h
+ * 
uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait );
+ * + * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this + * function to be available. + * + * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private + * "notification value", which is a 32-bit unsigned integer (uint32_t). + * + * Events can be sent to a task using an intermediary object. Examples of such + * objects are queues, semaphores, mutexes and event groups. Task notifications + * are a method of sending an event directly to a task without the need for such + * an intermediary object. + * + * A notification sent to a task can optionally perform an action, such as + * update, overwrite or increment the task's notification value. In that way + * task notifications can be used to send data to a task, or be used as light + * weight and fast binary or counting semaphores. + * + * ulTaskNotifyTake() is intended for use when a task notification is used as a + * faster and lighter weight binary or counting semaphore alternative. Actual + * FreeRTOS semaphores are taken using the xSemaphoreTake() API function, the + * equivalent action that instead uses a task notification is + * ulTaskNotifyTake(). + * + * When a task is using its notification value as a binary or counting semaphore + * other tasks should send notifications to it using the xTaskNotifyGive() + * macro, or xTaskNotify() function with the eAction parameter set to + * eIncrement. + * + * ulTaskNotifyTake() can either clear the task's notification value to + * zero on exit, in which case the notification value acts like a binary + * semaphore, or decrement the task's notification value on exit, in which case + * the notification value acts like a counting semaphore. + * + * A task can use ulTaskNotifyTake() to [optionally] block to wait for a + * the task's notification value to be non-zero. The task does not consume any + * CPU time while it is in the Blocked state. + * + * Where as xTaskNotifyWait() will return when a notification is pending, + * ulTaskNotifyTake() will return when the task's notification value is + * not zero. + * + * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. + * + * @param xClearCountOnExit if xClearCountOnExit is pdFALSE then the task's + * notification value is decremented when the function exits. In this way the + * notification value acts like a counting semaphore. If xClearCountOnExit is + * not pdFALSE then the task's notification value is cleared to zero when the + * function exits. In this way the notification value acts like a binary + * semaphore. + * + * @param xTicksToWait The maximum amount of time that the task should wait in + * the Blocked state for the task's notification value to be greater than zero, + * should the count not already be greater than zero when + * ulTaskNotifyTake() was called. The task will not consume any processing + * time while it is in the Blocked state. This is specified in kernel ticks, + * the macro pdMS_TO_TICSK( value_in_ms ) can be used to convert a time + * specified in milliseconds to a time specified in ticks. + * + * @return The task's notification count before it is either cleared to zero or + * decremented (see the xClearCountOnExit parameter). + * + * \defgroup ulTaskNotifyTake ulTaskNotifyTake + * \ingroup TaskNotifications + */ +uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ); + +/*----------------------------------------------------------- + * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES + *----------------------------------------------------------*/ + +/* + * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY + * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS + * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. + * + * Called from the real time kernel tick (either preemptive or cooperative), + * this increments the tick count and checks if any tasks that are blocked + * for a finite period required removing from a blocked list and placing on + * a ready list. If a non-zero value is returned then a context switch is + * required because either: + * + A task was removed from a blocked list because its timeout had expired, + * or + * + Time slicing is in use and there is a task of equal priority to the + * currently running task. + */ +BaseType_t xTaskIncrementTick( void ) PRIVILEGED_FUNCTION; + +/* + * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN + * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. + * + * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. + * + * Removes the calling task from the ready list and places it both + * on the list of tasks waiting for a particular event, and the + * list of delayed tasks. The task will be removed from both lists + * and replaced on the ready list should either the event occur (and + * there be no higher priority tasks waiting on the same event) or + * the delay period expires. + * + * The 'unordered' version replaces the event list item value with the + * xItemValue value, and inserts the list item at the end of the list. + * + * The 'ordered' version uses the existing event list item value (which is the + * owning tasks priority) to insert the list item into the event list is task + * priority order. + * + * @param pxEventList The list containing tasks that are blocked waiting + * for the event to occur. + * + * @param xItemValue The item value to use for the event list item when the + * event list is not ordered by task priority. + * + * @param xTicksToWait The maximum amount of time that the task should wait + * for the event to occur. This is specified in kernel ticks,the constant + * portTICK_PERIOD_MS can be used to convert kernel ticks into a real time + * period. + */ +void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xItemValue, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; + +/* + * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN + * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. + * + * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. + * + * This function performs nearly the same function as vTaskPlaceOnEventList(). + * The difference being that this function does not permit tasks to block + * indefinitely, whereas vTaskPlaceOnEventList() does. + * + */ +void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; + +/* + * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN + * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. + * + * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. + * + * Removes a task from both the specified event list and the list of blocked + * tasks, and places it on a ready queue. + * + * xTaskRemoveFromEventList()/xTaskRemoveFromUnorderedEventList() will be called + * if either an event occurs to unblock a task, or the block timeout period + * expires. + * + * xTaskRemoveFromEventList() is used when the event list is in task priority + * order. It removes the list item from the head of the event list as that will + * have the highest priority owning task of all the tasks on the event list. + * xTaskRemoveFromUnorderedEventList() is used when the event list is not + * ordered and the event list items hold something other than the owning tasks + * priority. In this case the event list item value is updated to the value + * passed in the xItemValue parameter. + * + * @return pdTRUE if the task being removed has a higher priority than the task + * making the call, otherwise pdFALSE. + */ +BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList ) PRIVILEGED_FUNCTION; +BaseType_t xTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem, const TickType_t xItemValue ) PRIVILEGED_FUNCTION; + +/* + * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY + * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS + * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. + * + * Sets the pointer to the current TCB to the TCB of the highest priority task + * that is ready to run. + */ +void vTaskSwitchContext( void ) PRIVILEGED_FUNCTION; + +/* + * THESE FUNCTIONS MUST NOT BE USED FROM APPLICATION CODE. THEY ARE USED BY + * THE EVENT BITS MODULE. + */ +TickType_t uxTaskResetEventItemValue( void ) PRIVILEGED_FUNCTION; + +/* + * Return the handle of the calling task. + */ +TaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; + +/* + * Capture the current time status for future reference. + */ +void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION; + +/* + * Compare the time status now with that previously captured to see if the + * timeout has expired. + */ +BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) PRIVILEGED_FUNCTION; + +/* + * Shortcut used by the queue implementation to prevent unnecessary call to + * taskYIELD(); + */ +void vTaskMissedYield( void ) PRIVILEGED_FUNCTION; + +/* + * Returns the scheduler state as taskSCHEDULER_RUNNING, + * taskSCHEDULER_NOT_STARTED or taskSCHEDULER_SUSPENDED. + */ +BaseType_t xTaskGetSchedulerState( void ) PRIVILEGED_FUNCTION; + +/* + * Raises the priority of the mutex holder to that of the calling task should + * the mutex holder have a priority less than the calling task. + */ +void vTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; + +/* + * Set the priority of a task back to its proper priority in the case that it + * inherited a higher priority while it was holding a semaphore. + */ +BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; + +/* + * Generic version of the task creation function which is in turn called by the + * xTaskCreate() and xTaskCreateRestricted() macros. + */ +BaseType_t xTaskGenericCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask, StackType_t * const puxStackBuffer, const MemoryRegion_t * const xRegions, const BaseType_t xCoreID) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + +/* + * Get the uxTCBNumber assigned to the task referenced by the xTask parameter. + */ +UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + + +/* + * Get the current core affinity of a task + */ +BaseType_t xTaskGetAffinity( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + +/* + * Set the uxTaskNumber of the task referenced by the xTask parameter to + * uxHandle. + */ +void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle ) PRIVILEGED_FUNCTION; + +/* + * Only available when configUSE_TICKLESS_IDLE is set to 1. + * If tickless mode is being used, or a low power mode is implemented, then + * the tick interrupt will not execute during idle periods. When this is the + * case, the tick count value maintained by the scheduler needs to be kept up + * to date with the actual execution time by being skipped forward by a time + * equal to the idle period. + */ +void vTaskStepTick( const TickType_t xTicksToJump ) PRIVILEGED_FUNCTION; + +/* + * Only avilable when configUSE_TICKLESS_IDLE is set to 1. + * Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port + * specific sleep function to determine if it is ok to proceed with the sleep, + * and if it is ok to proceed, if it is ok to sleep indefinitely. + * + * This function is necessary because portSUPPRESS_TICKS_AND_SLEEP() is only + * called with the scheduler suspended, not from within a critical section. It + * is therefore possible for an interrupt to request a context switch between + * portSUPPRESS_TICKS_AND_SLEEP() and the low power mode actually being + * entered. eTaskConfirmSleepModeStatus() should be called from a short + * critical section between the timer being stopped and the sleep mode being + * entered to ensure it is ok to proceed into the sleep mode. + */ +eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION; + +/* + * For internal use only. Increment the mutex held count when a mutex is + * taken and return the handle of the task that has taken the mutex. + */ +void *pvTaskIncrementMutexHeldCount( void ); + +#ifdef __cplusplus +} +#endif +#endif /* INC_TASK_H */ + + + diff --git a/tools/sdk/include/freertos/freertos/timers.h b/tools/sdk/include/freertos/freertos/timers.h new file mode 100644 index 00000000..f89cd1d7 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/timers.h @@ -0,0 +1,1125 @@ +/* + FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + + +#ifndef TIMERS_H +#define TIMERS_H + +#ifndef INC_FREERTOS_H + #error "include FreeRTOS.h must appear in source files before include timers.h" +#endif + +/*lint -e537 This headers are only multiply included if the application code +happens to also be including task.h. */ +#include "task.h" +/*lint +e537 */ + +#ifdef __cplusplus +extern "C" { +#endif + +/*----------------------------------------------------------- + * MACROS AND DEFINITIONS + *----------------------------------------------------------*/ + +/* IDs for commands that can be sent/received on the timer queue. These are to +be used solely through the macros that make up the public software timer API, +as defined below. The commands that are sent from interrupts must use the +highest numbers as tmrFIRST_FROM_ISR_COMMAND is used to determine if the task +or interrupt version of the queue send function should be used. */ +#define tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR ( ( BaseType_t ) -2 ) +#define tmrCOMMAND_EXECUTE_CALLBACK ( ( BaseType_t ) -1 ) +#define tmrCOMMAND_START_DONT_TRACE ( ( BaseType_t ) 0 ) +#define tmrCOMMAND_START ( ( BaseType_t ) 1 ) +#define tmrCOMMAND_RESET ( ( BaseType_t ) 2 ) +#define tmrCOMMAND_STOP ( ( BaseType_t ) 3 ) +#define tmrCOMMAND_CHANGE_PERIOD ( ( BaseType_t ) 4 ) +#define tmrCOMMAND_DELETE ( ( BaseType_t ) 5 ) + +#define tmrFIRST_FROM_ISR_COMMAND ( ( BaseType_t ) 6 ) +#define tmrCOMMAND_START_FROM_ISR ( ( BaseType_t ) 6 ) +#define tmrCOMMAND_RESET_FROM_ISR ( ( BaseType_t ) 7 ) +#define tmrCOMMAND_STOP_FROM_ISR ( ( BaseType_t ) 8 ) +#define tmrCOMMAND_CHANGE_PERIOD_FROM_ISR ( ( BaseType_t ) 9 ) + + +/** + * Type by which software timers are referenced. For example, a call to + * xTimerCreate() returns an TimerHandle_t variable that can then be used to + * reference the subject timer in calls to other software timer API functions + * (for example, xTimerStart(), xTimerReset(), etc.). + */ +typedef void * TimerHandle_t; + +/* + * Defines the prototype to which timer callback functions must conform. + */ +typedef void (*TimerCallbackFunction_t)( TimerHandle_t xTimer ); + +/* + * Defines the prototype to which functions used with the + * xTimerPendFunctionCallFromISR() function must conform. + */ +typedef void (*PendedFunction_t)( void *, uint32_t ); + +/** + * TimerHandle_t xTimerCreate( const char * const pcTimerName, + * TickType_t xTimerPeriodInTicks, + * UBaseType_t uxAutoReload, + * void * pvTimerID, + * TimerCallbackFunction_t pxCallbackFunction ); + * + * Creates a new software timer instance. This allocates the storage required + * by the new timer, initialises the new timers internal state, and returns a + * handle by which the new timer can be referenced. + * + * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), + * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and + * xTimerChangePeriodFromISR() API functions can all be used to transition a + * timer into the active state. + * + * @param pcTimerName A text name that is assigned to the timer. This is done + * purely to assist debugging. The kernel itself only ever references a timer + * by its handle, and never by its name. + * + * @param xTimerPeriodInTicks The timer period. The time is defined in tick + * periods so the constant portTICK_PERIOD_MS can be used to convert a time that + * has been specified in milliseconds. For example, if the timer must expire + * after 100 ticks, then xTimerPeriodInTicks should be set to 100. + * Alternatively, if the timer must expire after 500ms, then xPeriod can be set + * to ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than or + * equal to 1000. + * + * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will + * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter. + * If uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and + * enter the dormant state after it expires. + * + * @param pvTimerID An identifier that is assigned to the timer being created. + * Typically this would be used in the timer callback function to identify which + * timer expired when the same callback function is assigned to more than one + * timer. + * + * @param pxCallbackFunction The function to call when the timer expires. + * Callback functions must have the prototype defined by TimerCallbackFunction_t, + * which is "void vCallbackFunction( TimerHandle_t xTimer );". + * + * @return If the timer is successfully created then a handle to the newly + * created timer is returned. If the timer cannot be created (because either + * there is insufficient FreeRTOS heap remaining to allocate the timer + * structures, or the timer period was set to 0) then NULL is returned. + * + * Example usage: + * @verbatim + * #define NUM_TIMERS 5 + * + * // An array to hold handles to the created timers. + * TimerHandle_t xTimers[ NUM_TIMERS ]; + * + * // An array to hold a count of the number of times each timer expires. + * int32_t lExpireCounters[ NUM_TIMERS ] = { 0 }; + * + * // Define a callback function that will be used by multiple timer instances. + * // The callback function does nothing but count the number of times the + * // associated timer expires, and stop the timer once the timer has expired + * // 10 times. + * void vTimerCallback( TimerHandle_t pxTimer ) + * { + * int32_t lArrayIndex; + * const int32_t xMaxExpiryCountBeforeStopping = 10; + * + * // Optionally do something if the pxTimer parameter is NULL. + * configASSERT( pxTimer ); + * + * // Which timer expired? + * lArrayIndex = ( int32_t ) pvTimerGetTimerID( pxTimer ); + * + * // Increment the number of times that pxTimer has expired. + * lExpireCounters[ lArrayIndex ] += 1; + * + * // If the timer has expired 10 times then stop it from running. + * if( lExpireCounters[ lArrayIndex ] == xMaxExpiryCountBeforeStopping ) + * { + * // Do not use a block time if calling a timer API function from a + * // timer callback function, as doing so could cause a deadlock! + * xTimerStop( pxTimer, 0 ); + * } + * } + * + * void main( void ) + * { + * int32_t x; + * + * // Create then start some timers. Starting the timers before the scheduler + * // has been started means the timers will start running immediately that + * // the scheduler starts. + * for( x = 0; x < NUM_TIMERS; x++ ) + * { + * xTimers[ x ] = xTimerCreate( "Timer", // Just a text name, not used by the kernel. + * ( 100 * x ), // The timer period in ticks. + * pdTRUE, // The timers will auto-reload themselves when they expire. + * ( void * ) x, // Assign each timer a unique id equal to its array index. + * vTimerCallback // Each timer calls the same callback when it expires. + * ); + * + * if( xTimers[ x ] == NULL ) + * { + * // The timer was not created. + * } + * else + * { + * // Start the timer. No block time is specified, and even if one was + * // it would be ignored because the scheduler has not yet been + * // started. + * if( xTimerStart( xTimers[ x ], 0 ) != pdPASS ) + * { + * // The timer could not be set into the Active state. + * } + * } + * } + * + * // ... + * // Create tasks here. + * // ... + * + * // Starting the scheduler will start the timers running as they have already + * // been set into the active state. + * xTaskStartScheduler(); + * + * // Should not reach here. + * for( ;; ); + * } + * @endverbatim + */ +TimerHandle_t xTimerCreate( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + +/** + * void *pvTimerGetTimerID( TimerHandle_t xTimer ); + * + * Returns the ID assigned to the timer. + * + * IDs are assigned to timers using the pvTimerID parameter of the call to + * xTimerCreated() that was used to create the timer. + * + * If the same callback function is assigned to multiple timers then the timer + * ID can be used within the callback function to identify which timer actually + * expired. + * + * @param xTimer The timer being queried. + * + * @return The ID assigned to the timer being queried. + * + * Example usage: + * + * See the xTimerCreate() API function example usage scenario. + */ +void *pvTimerGetTimerID( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; + +/** + * BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ); + * + * Queries a timer to see if it is active or dormant. + * + * A timer will be dormant if: + * 1) It has been created but not started, or + * 2) It is an expired one-shot timer that has not been restarted. + * + * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), + * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and + * xTimerChangePeriodFromISR() API functions can all be used to transition a timer into the + * active state. + * + * @param xTimer The timer being queried. + * + * @return pdFALSE will be returned if the timer is dormant. A value other than + * pdFALSE will be returned if the timer is active. + * + * Example usage: + * @verbatim + * // This function assumes xTimer has already been created. + * void vAFunction( TimerHandle_t xTimer ) + * { + * if( xTimerIsTimerActive( xTimer ) != pdFALSE ) // or more simply and equivalently "if( xTimerIsTimerActive( xTimer ) )" + * { + * // xTimer is active, do something. + * } + * else + * { + * // xTimer is not active, do something else. + * } + * } + * @endverbatim + */ +BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; + +/** + * TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ); + * + * xTimerGetTimerDaemonTaskHandle() is only available if + * INCLUDE_xTimerGetTimerDaemonTaskHandle is set to 1 in FreeRTOSConfig.h. + * + * Simply returns the handle of the timer service/daemon task. It it not valid + * to call xTimerGetTimerDaemonTaskHandle() before the scheduler has been started. + */ +TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ); + +/** + * BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait ); + * + * Timer functionality is provided by a timer service/daemon task. Many of the + * public FreeRTOS timer API functions send commands to the timer service task + * through a queue called the timer command queue. The timer command queue is + * private to the kernel itself and is not directly accessible to application + * code. The length of the timer command queue is set by the + * configTIMER_QUEUE_LENGTH configuration constant. + * + * xTimerStart() starts a timer that was previously created using the + * xTimerCreate() API function. If the timer had already been started and was + * already in the active state, then xTimerStart() has equivalent functionality + * to the xTimerReset() API function. + * + * Starting a timer ensures the timer is in the active state. If the timer + * is not stopped, deleted, or reset in the mean time, the callback function + * associated with the timer will get called 'n' ticks after xTimerStart() was + * called, where 'n' is the timers defined period. + * + * It is valid to call xTimerStart() before the scheduler has been started, but + * when this is done the timer will not actually start until the scheduler is + * started, and the timers expiry time will be relative to when the scheduler is + * started, not relative to when xTimerStart() was called. + * + * The configUSE_TIMERS configuration constant must be set to 1 for xTimerStart() + * to be available. + * + * @param xTimer The handle of the timer being started/restarted. + * + * @param xTicksToWait Specifies the time, in ticks, that the calling task should + * be held in the Blocked state to wait for the start command to be successfully + * sent to the timer command queue, should the queue already be full when + * xTimerStart() was called. xTicksToWait is ignored if xTimerStart() is called + * before the scheduler is started. + * + * @return pdFAIL will be returned if the start command could not be sent to + * the timer command queue even after xTicksToWait ticks had passed. pdPASS will + * be returned if the command was successfully sent to the timer command queue. + * When the command is actually processed will depend on the priority of the + * timer service/daemon task relative to other tasks in the system, although the + * timers expiry time is relative to when xTimerStart() is actually called. The + * timer service/daemon task priority is set by the configTIMER_TASK_PRIORITY + * configuration constant. + * + * Example usage: + * + * See the xTimerCreate() API function example usage scenario. + * + */ +#define xTimerStart( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) ) + +/** + * BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait ); + * + * Timer functionality is provided by a timer service/daemon task. Many of the + * public FreeRTOS timer API functions send commands to the timer service task + * through a queue called the timer command queue. The timer command queue is + * private to the kernel itself and is not directly accessible to application + * code. The length of the timer command queue is set by the + * configTIMER_QUEUE_LENGTH configuration constant. + * + * xTimerStop() stops a timer that was previously started using either of the + * The xTimerStart(), xTimerReset(), xTimerStartFromISR(), xTimerResetFromISR(), + * xTimerChangePeriod() or xTimerChangePeriodFromISR() API functions. + * + * Stopping a timer ensures the timer is not in the active state. + * + * The configUSE_TIMERS configuration constant must be set to 1 for xTimerStop() + * to be available. + * + * @param xTimer The handle of the timer being stopped. + * + * @param xTicksToWait Specifies the time, in ticks, that the calling task should + * be held in the Blocked state to wait for the stop command to be successfully + * sent to the timer command queue, should the queue already be full when + * xTimerStop() was called. xTicksToWait is ignored if xTimerStop() is called + * before the scheduler is started. + * + * @return pdFAIL will be returned if the stop command could not be sent to + * the timer command queue even after xTicksToWait ticks had passed. pdPASS will + * be returned if the command was successfully sent to the timer command queue. + * When the command is actually processed will depend on the priority of the + * timer service/daemon task relative to other tasks in the system. The timer + * service/daemon task priority is set by the configTIMER_TASK_PRIORITY + * configuration constant. + * + * Example usage: + * + * See the xTimerCreate() API function example usage scenario. + * + */ +#define xTimerStop( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP, 0U, NULL, ( xTicksToWait ) ) + +/** + * BaseType_t xTimerChangePeriod( TimerHandle_t xTimer, + * TickType_t xNewPeriod, + * TickType_t xTicksToWait ); + * + * Timer functionality is provided by a timer service/daemon task. Many of the + * public FreeRTOS timer API functions send commands to the timer service task + * through a queue called the timer command queue. The timer command queue is + * private to the kernel itself and is not directly accessible to application + * code. The length of the timer command queue is set by the + * configTIMER_QUEUE_LENGTH configuration constant. + * + * xTimerChangePeriod() changes the period of a timer that was previously + * created using the xTimerCreate() API function. + * + * xTimerChangePeriod() can be called to change the period of an active or + * dormant state timer. + * + * The configUSE_TIMERS configuration constant must be set to 1 for + * xTimerChangePeriod() to be available. + * + * @param xTimer The handle of the timer that is having its period changed. + * + * @param xNewPeriod The new period for xTimer. Timer periods are specified in + * tick periods, so the constant portTICK_PERIOD_MS can be used to convert a time + * that has been specified in milliseconds. For example, if the timer must + * expire after 100 ticks, then xNewPeriod should be set to 100. Alternatively, + * if the timer must expire after 500ms, then xNewPeriod can be set to + * ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than + * or equal to 1000. + * + * @param xTicksToWait Specifies the time, in ticks, that the calling task should + * be held in the Blocked state to wait for the change period command to be + * successfully sent to the timer command queue, should the queue already be + * full when xTimerChangePeriod() was called. xTicksToWait is ignored if + * xTimerChangePeriod() is called before the scheduler is started. + * + * @return pdFAIL will be returned if the change period command could not be + * sent to the timer command queue even after xTicksToWait ticks had passed. + * pdPASS will be returned if the command was successfully sent to the timer + * command queue. When the command is actually processed will depend on the + * priority of the timer service/daemon task relative to other tasks in the + * system. The timer service/daemon task priority is set by the + * configTIMER_TASK_PRIORITY configuration constant. + * + * Example usage: + * @verbatim + * // This function assumes xTimer has already been created. If the timer + * // referenced by xTimer is already active when it is called, then the timer + * // is deleted. If the timer referenced by xTimer is not active when it is + * // called, then the period of the timer is set to 500ms and the timer is + * // started. + * void vAFunction( TimerHandle_t xTimer ) + * { + * if( xTimerIsTimerActive( xTimer ) != pdFALSE ) // or more simply and equivalently "if( xTimerIsTimerActive( xTimer ) )" + * { + * // xTimer is already active - delete it. + * xTimerDelete( xTimer ); + * } + * else + * { + * // xTimer is not active, change its period to 500ms. This will also + * // cause the timer to start. Block for a maximum of 100 ticks if the + * // change period command cannot immediately be sent to the timer + * // command queue. + * if( xTimerChangePeriod( xTimer, 500 / portTICK_PERIOD_MS, 100 ) == pdPASS ) + * { + * // The command was successfully sent. + * } + * else + * { + * // The command could not be sent, even after waiting for 100 ticks + * // to pass. Take appropriate action here. + * } + * } + * } + * @endverbatim + */ + #define xTimerChangePeriod( xTimer, xNewPeriod, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD, ( xNewPeriod ), NULL, ( xTicksToWait ) ) + +/** + * BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait ); + * + * Timer functionality is provided by a timer service/daemon task. Many of the + * public FreeRTOS timer API functions send commands to the timer service task + * through a queue called the timer command queue. The timer command queue is + * private to the kernel itself and is not directly accessible to application + * code. The length of the timer command queue is set by the + * configTIMER_QUEUE_LENGTH configuration constant. + * + * xTimerDelete() deletes a timer that was previously created using the + * xTimerCreate() API function. + * + * The configUSE_TIMERS configuration constant must be set to 1 for + * xTimerDelete() to be available. + * + * @param xTimer The handle of the timer being deleted. + * + * @param xTicksToWait Specifies the time, in ticks, that the calling task should + * be held in the Blocked state to wait for the delete command to be + * successfully sent to the timer command queue, should the queue already be + * full when xTimerDelete() was called. xTicksToWait is ignored if xTimerDelete() + * is called before the scheduler is started. + * + * @return pdFAIL will be returned if the delete command could not be sent to + * the timer command queue even after xTicksToWait ticks had passed. pdPASS will + * be returned if the command was successfully sent to the timer command queue. + * When the command is actually processed will depend on the priority of the + * timer service/daemon task relative to other tasks in the system. The timer + * service/daemon task priority is set by the configTIMER_TASK_PRIORITY + * configuration constant. + * + * Example usage: + * + * See the xTimerChangePeriod() API function example usage scenario. + */ +#define xTimerDelete( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xTicksToWait ) ) + +/** + * BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait ); + * + * Timer functionality is provided by a timer service/daemon task. Many of the + * public FreeRTOS timer API functions send commands to the timer service task + * through a queue called the timer command queue. The timer command queue is + * private to the kernel itself and is not directly accessible to application + * code. The length of the timer command queue is set by the + * configTIMER_QUEUE_LENGTH configuration constant. + * + * xTimerReset() re-starts a timer that was previously created using the + * xTimerCreate() API function. If the timer had already been started and was + * already in the active state, then xTimerReset() will cause the timer to + * re-evaluate its expiry time so that it is relative to when xTimerReset() was + * called. If the timer was in the dormant state then xTimerReset() has + * equivalent functionality to the xTimerStart() API function. + * + * Resetting a timer ensures the timer is in the active state. If the timer + * is not stopped, deleted, or reset in the mean time, the callback function + * associated with the timer will get called 'n' ticks after xTimerReset() was + * called, where 'n' is the timers defined period. + * + * It is valid to call xTimerReset() before the scheduler has been started, but + * when this is done the timer will not actually start until the scheduler is + * started, and the timers expiry time will be relative to when the scheduler is + * started, not relative to when xTimerReset() was called. + * + * The configUSE_TIMERS configuration constant must be set to 1 for xTimerReset() + * to be available. + * + * @param xTimer The handle of the timer being reset/started/restarted. + * + * @param xTicksToWait Specifies the time, in ticks, that the calling task should + * be held in the Blocked state to wait for the reset command to be successfully + * sent to the timer command queue, should the queue already be full when + * xTimerReset() was called. xTicksToWait is ignored if xTimerReset() is called + * before the scheduler is started. + * + * @return pdFAIL will be returned if the reset command could not be sent to + * the timer command queue even after xTicksToWait ticks had passed. pdPASS will + * be returned if the command was successfully sent to the timer command queue. + * When the command is actually processed will depend on the priority of the + * timer service/daemon task relative to other tasks in the system, although the + * timers expiry time is relative to when xTimerStart() is actually called. The + * timer service/daemon task priority is set by the configTIMER_TASK_PRIORITY + * configuration constant. + * + * Example usage: + * @verbatim + * // When a key is pressed, an LCD back-light is switched on. If 5 seconds pass + * // without a key being pressed, then the LCD back-light is switched off. In + * // this case, the timer is a one-shot timer. + * + * TimerHandle_t xBacklightTimer = NULL; + * + * // The callback function assigned to the one-shot timer. In this case the + * // parameter is not used. + * void vBacklightTimerCallback( TimerHandle_t pxTimer ) + * { + * // The timer expired, therefore 5 seconds must have passed since a key + * // was pressed. Switch off the LCD back-light. + * vSetBacklightState( BACKLIGHT_OFF ); + * } + * + * // The key press event handler. + * void vKeyPressEventHandler( char cKey ) + * { + * // Ensure the LCD back-light is on, then reset the timer that is + * // responsible for turning the back-light off after 5 seconds of + * // key inactivity. Wait 10 ticks for the command to be successfully sent + * // if it cannot be sent immediately. + * vSetBacklightState( BACKLIGHT_ON ); + * if( xTimerReset( xBacklightTimer, 100 ) != pdPASS ) + * { + * // The reset command was not executed successfully. Take appropriate + * // action here. + * } + * + * // Perform the rest of the key processing here. + * } + * + * void main( void ) + * { + * int32_t x; + * + * // Create then start the one-shot timer that is responsible for turning + * // the back-light off if no keys are pressed within a 5 second period. + * xBacklightTimer = xTimerCreate( "BacklightTimer", // Just a text name, not used by the kernel. + * ( 5000 / portTICK_PERIOD_MS), // The timer period in ticks. + * pdFALSE, // The timer is a one-shot timer. + * 0, // The id is not used by the callback so can take any value. + * vBacklightTimerCallback // The callback function that switches the LCD back-light off. + * ); + * + * if( xBacklightTimer == NULL ) + * { + * // The timer was not created. + * } + * else + * { + * // Start the timer. No block time is specified, and even if one was + * // it would be ignored because the scheduler has not yet been + * // started. + * if( xTimerStart( xBacklightTimer, 0 ) != pdPASS ) + * { + * // The timer could not be set into the Active state. + * } + * } + * + * // ... + * // Create tasks here. + * // ... + * + * // Starting the scheduler will start the timer running as it has already + * // been set into the active state. + * xTaskStartScheduler(); + * + * // Should not reach here. + * for( ;; ); + * } + * @endverbatim + */ +#define xTimerReset( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) ) + +/** + * BaseType_t xTimerStartFromISR( TimerHandle_t xTimer, + * BaseType_t *pxHigherPriorityTaskWoken ); + * + * A version of xTimerStart() that can be called from an interrupt service + * routine. + * + * @param xTimer The handle of the timer being started/restarted. + * + * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most + * of its time in the Blocked state, waiting for messages to arrive on the timer + * command queue. Calling xTimerStartFromISR() writes a message to the timer + * command queue, so has the potential to transition the timer service/daemon + * task out of the Blocked state. If calling xTimerStartFromISR() causes the + * timer service/daemon task to leave the Blocked state, and the timer service/ + * daemon task has a priority equal to or greater than the currently executing + * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will + * get set to pdTRUE internally within the xTimerStartFromISR() function. If + * xTimerStartFromISR() sets this value to pdTRUE then a context switch should + * be performed before the interrupt exits. + * + * @return pdFAIL will be returned if the start command could not be sent to + * the timer command queue. pdPASS will be returned if the command was + * successfully sent to the timer command queue. When the command is actually + * processed will depend on the priority of the timer service/daemon task + * relative to other tasks in the system, although the timers expiry time is + * relative to when xTimerStartFromISR() is actually called. The timer + * service/daemon task priority is set by the configTIMER_TASK_PRIORITY + * configuration constant. + * + * Example usage: + * @verbatim + * // This scenario assumes xBacklightTimer has already been created. When a + * // key is pressed, an LCD back-light is switched on. If 5 seconds pass + * // without a key being pressed, then the LCD back-light is switched off. In + * // this case, the timer is a one-shot timer, and unlike the example given for + * // the xTimerReset() function, the key press event handler is an interrupt + * // service routine. + * + * // The callback function assigned to the one-shot timer. In this case the + * // parameter is not used. + * void vBacklightTimerCallback( TimerHandle_t pxTimer ) + * { + * // The timer expired, therefore 5 seconds must have passed since a key + * // was pressed. Switch off the LCD back-light. + * vSetBacklightState( BACKLIGHT_OFF ); + * } + * + * // The key press interrupt service routine. + * void vKeyPressEventInterruptHandler( void ) + * { + * BaseType_t xHigherPriorityTaskWoken = pdFALSE; + * + * // Ensure the LCD back-light is on, then restart the timer that is + * // responsible for turning the back-light off after 5 seconds of + * // key inactivity. This is an interrupt service routine so can only + * // call FreeRTOS API functions that end in "FromISR". + * vSetBacklightState( BACKLIGHT_ON ); + * + * // xTimerStartFromISR() or xTimerResetFromISR() could be called here + * // as both cause the timer to re-calculate its expiry time. + * // xHigherPriorityTaskWoken was initialised to pdFALSE when it was + * // declared (in this function). + * if( xTimerStartFromISR( xBacklightTimer, &xHigherPriorityTaskWoken ) != pdPASS ) + * { + * // The start command was not executed successfully. Take appropriate + * // action here. + * } + * + * // Perform the rest of the key processing here. + * + * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch + * // should be performed. The syntax required to perform a context switch + * // from inside an ISR varies from port to port, and from compiler to + * // compiler. Inspect the demos for the port you are using to find the + * // actual syntax required. + * if( xHigherPriorityTaskWoken != pdFALSE ) + * { + * // Call the interrupt safe yield function here (actual function + * // depends on the FreeRTOS port being used). + * } + * } + * @endverbatim + */ +#define xTimerStartFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U ) + +/** + * BaseType_t xTimerStopFromISR( TimerHandle_t xTimer, + * BaseType_t *pxHigherPriorityTaskWoken ); + * + * A version of xTimerStop() that can be called from an interrupt service + * routine. + * + * @param xTimer The handle of the timer being stopped. + * + * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most + * of its time in the Blocked state, waiting for messages to arrive on the timer + * command queue. Calling xTimerStopFromISR() writes a message to the timer + * command queue, so has the potential to transition the timer service/daemon + * task out of the Blocked state. If calling xTimerStopFromISR() causes the + * timer service/daemon task to leave the Blocked state, and the timer service/ + * daemon task has a priority equal to or greater than the currently executing + * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will + * get set to pdTRUE internally within the xTimerStopFromISR() function. If + * xTimerStopFromISR() sets this value to pdTRUE then a context switch should + * be performed before the interrupt exits. + * + * @return pdFAIL will be returned if the stop command could not be sent to + * the timer command queue. pdPASS will be returned if the command was + * successfully sent to the timer command queue. When the command is actually + * processed will depend on the priority of the timer service/daemon task + * relative to other tasks in the system. The timer service/daemon task + * priority is set by the configTIMER_TASK_PRIORITY configuration constant. + * + * Example usage: + * @verbatim + * // This scenario assumes xTimer has already been created and started. When + * // an interrupt occurs, the timer should be simply stopped. + * + * // The interrupt service routine that stops the timer. + * void vAnExampleInterruptServiceRoutine( void ) + * { + * BaseType_t xHigherPriorityTaskWoken = pdFALSE; + * + * // The interrupt has occurred - simply stop the timer. + * // xHigherPriorityTaskWoken was set to pdFALSE where it was defined + * // (within this function). As this is an interrupt service routine, only + * // FreeRTOS API functions that end in "FromISR" can be used. + * if( xTimerStopFromISR( xTimer, &xHigherPriorityTaskWoken ) != pdPASS ) + * { + * // The stop command was not executed successfully. Take appropriate + * // action here. + * } + * + * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch + * // should be performed. The syntax required to perform a context switch + * // from inside an ISR varies from port to port, and from compiler to + * // compiler. Inspect the demos for the port you are using to find the + * // actual syntax required. + * if( xHigherPriorityTaskWoken != pdFALSE ) + * { + * // Call the interrupt safe yield function here (actual function + * // depends on the FreeRTOS port being used). + * } + * } + * @endverbatim + */ +#define xTimerStopFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP_FROM_ISR, 0, ( pxHigherPriorityTaskWoken ), 0U ) + +/** + * BaseType_t xTimerChangePeriodFromISR( TimerHandle_t xTimer, + * TickType_t xNewPeriod, + * BaseType_t *pxHigherPriorityTaskWoken ); + * + * A version of xTimerChangePeriod() that can be called from an interrupt + * service routine. + * + * @param xTimer The handle of the timer that is having its period changed. + * + * @param xNewPeriod The new period for xTimer. Timer periods are specified in + * tick periods, so the constant portTICK_PERIOD_MS can be used to convert a time + * that has been specified in milliseconds. For example, if the timer must + * expire after 100 ticks, then xNewPeriod should be set to 100. Alternatively, + * if the timer must expire after 500ms, then xNewPeriod can be set to + * ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than + * or equal to 1000. + * + * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most + * of its time in the Blocked state, waiting for messages to arrive on the timer + * command queue. Calling xTimerChangePeriodFromISR() writes a message to the + * timer command queue, so has the potential to transition the timer service/ + * daemon task out of the Blocked state. If calling xTimerChangePeriodFromISR() + * causes the timer service/daemon task to leave the Blocked state, and the + * timer service/daemon task has a priority equal to or greater than the + * currently executing task (the task that was interrupted), then + * *pxHigherPriorityTaskWoken will get set to pdTRUE internally within the + * xTimerChangePeriodFromISR() function. If xTimerChangePeriodFromISR() sets + * this value to pdTRUE then a context switch should be performed before the + * interrupt exits. + * + * @return pdFAIL will be returned if the command to change the timers period + * could not be sent to the timer command queue. pdPASS will be returned if the + * command was successfully sent to the timer command queue. When the command + * is actually processed will depend on the priority of the timer service/daemon + * task relative to other tasks in the system. The timer service/daemon task + * priority is set by the configTIMER_TASK_PRIORITY configuration constant. + * + * Example usage: + * @verbatim + * // This scenario assumes xTimer has already been created and started. When + * // an interrupt occurs, the period of xTimer should be changed to 500ms. + * + * // The interrupt service routine that changes the period of xTimer. + * void vAnExampleInterruptServiceRoutine( void ) + * { + * BaseType_t xHigherPriorityTaskWoken = pdFALSE; + * + * // The interrupt has occurred - change the period of xTimer to 500ms. + * // xHigherPriorityTaskWoken was set to pdFALSE where it was defined + * // (within this function). As this is an interrupt service routine, only + * // FreeRTOS API functions that end in "FromISR" can be used. + * if( xTimerChangePeriodFromISR( xTimer, &xHigherPriorityTaskWoken ) != pdPASS ) + * { + * // The command to change the timers period was not executed + * // successfully. Take appropriate action here. + * } + * + * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch + * // should be performed. The syntax required to perform a context switch + * // from inside an ISR varies from port to port, and from compiler to + * // compiler. Inspect the demos for the port you are using to find the + * // actual syntax required. + * if( xHigherPriorityTaskWoken != pdFALSE ) + * { + * // Call the interrupt safe yield function here (actual function + * // depends on the FreeRTOS port being used). + * } + * } + * @endverbatim + */ +#define xTimerChangePeriodFromISR( xTimer, xNewPeriod, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD_FROM_ISR, ( xNewPeriod ), ( pxHigherPriorityTaskWoken ), 0U ) + +/** + * BaseType_t xTimerResetFromISR( TimerHandle_t xTimer, + * BaseType_t *pxHigherPriorityTaskWoken ); + * + * A version of xTimerReset() that can be called from an interrupt service + * routine. + * + * @param xTimer The handle of the timer that is to be started, reset, or + * restarted. + * + * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most + * of its time in the Blocked state, waiting for messages to arrive on the timer + * command queue. Calling xTimerResetFromISR() writes a message to the timer + * command queue, so has the potential to transition the timer service/daemon + * task out of the Blocked state. If calling xTimerResetFromISR() causes the + * timer service/daemon task to leave the Blocked state, and the timer service/ + * daemon task has a priority equal to or greater than the currently executing + * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will + * get set to pdTRUE internally within the xTimerResetFromISR() function. If + * xTimerResetFromISR() sets this value to pdTRUE then a context switch should + * be performed before the interrupt exits. + * + * @return pdFAIL will be returned if the reset command could not be sent to + * the timer command queue. pdPASS will be returned if the command was + * successfully sent to the timer command queue. When the command is actually + * processed will depend on the priority of the timer service/daemon task + * relative to other tasks in the system, although the timers expiry time is + * relative to when xTimerResetFromISR() is actually called. The timer service/daemon + * task priority is set by the configTIMER_TASK_PRIORITY configuration constant. + * + * Example usage: + * @verbatim + * // This scenario assumes xBacklightTimer has already been created. When a + * // key is pressed, an LCD back-light is switched on. If 5 seconds pass + * // without a key being pressed, then the LCD back-light is switched off. In + * // this case, the timer is a one-shot timer, and unlike the example given for + * // the xTimerReset() function, the key press event handler is an interrupt + * // service routine. + * + * // The callback function assigned to the one-shot timer. In this case the + * // parameter is not used. + * void vBacklightTimerCallback( TimerHandle_t pxTimer ) + * { + * // The timer expired, therefore 5 seconds must have passed since a key + * // was pressed. Switch off the LCD back-light. + * vSetBacklightState( BACKLIGHT_OFF ); + * } + * + * // The key press interrupt service routine. + * void vKeyPressEventInterruptHandler( void ) + * { + * BaseType_t xHigherPriorityTaskWoken = pdFALSE; + * + * // Ensure the LCD back-light is on, then reset the timer that is + * // responsible for turning the back-light off after 5 seconds of + * // key inactivity. This is an interrupt service routine so can only + * // call FreeRTOS API functions that end in "FromISR". + * vSetBacklightState( BACKLIGHT_ON ); + * + * // xTimerStartFromISR() or xTimerResetFromISR() could be called here + * // as both cause the timer to re-calculate its expiry time. + * // xHigherPriorityTaskWoken was initialised to pdFALSE when it was + * // declared (in this function). + * if( xTimerResetFromISR( xBacklightTimer, &xHigherPriorityTaskWoken ) != pdPASS ) + * { + * // The reset command was not executed successfully. Take appropriate + * // action here. + * } + * + * // Perform the rest of the key processing here. + * + * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch + * // should be performed. The syntax required to perform a context switch + * // from inside an ISR varies from port to port, and from compiler to + * // compiler. Inspect the demos for the port you are using to find the + * // actual syntax required. + * if( xHigherPriorityTaskWoken != pdFALSE ) + * { + * // Call the interrupt safe yield function here (actual function + * // depends on the FreeRTOS port being used). + * } + * } + * @endverbatim + */ +#define xTimerResetFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U ) + + +/** + * BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, + * void *pvParameter1, + * uint32_t ulParameter2, + * BaseType_t *pxHigherPriorityTaskWoken ); + * + * + * Used from application interrupt service routines to defer the execution of a + * function to the RTOS daemon task (the timer service task, hence this function + * is implemented in timers.c and is prefixed with 'Timer'). + * + * Ideally an interrupt service routine (ISR) is kept as short as possible, but + * sometimes an ISR either has a lot of processing to do, or needs to perform + * processing that is not deterministic. In these cases + * xTimerPendFunctionCallFromISR() can be used to defer processing of a function + * to the RTOS daemon task. + * + * A mechanism is provided that allows the interrupt to return directly to the + * task that will subsequently execute the pended callback function. This + * allows the callback function to execute contiguously in time with the + * interrupt - just as if the callback had executed in the interrupt itself. + * + * @param xFunctionToPend The function to execute from the timer service/ + * daemon task. The function must conform to the PendedFunction_t + * prototype. + * + * @param pvParameter1 The value of the callback function's first parameter. + * The parameter has a void * type to allow it to be used to pass any type. + * For example, unsigned longs can be cast to a void *, or the void * can be + * used to point to a structure. + * + * @param ulParameter2 The value of the callback function's second parameter. + * + * @param pxHigherPriorityTaskWoken As mentioned above, calling this function + * will result in a message being sent to the timer daemon task. If the + * priority of the timer daemon task (which is set using + * configTIMER_TASK_PRIORITY in FreeRTOSConfig.h) is higher than the priority of + * the currently running task (the task the interrupt interrupted) then + * *pxHigherPriorityTaskWoken will be set to pdTRUE within + * xTimerPendFunctionCallFromISR(), indicating that a context switch should be + * requested before the interrupt exits. For that reason + * *pxHigherPriorityTaskWoken must be initialised to pdFALSE. See the + * example code below. + * + * @return pdPASS is returned if the message was successfully sent to the + * timer daemon task, otherwise pdFALSE is returned. + * + * Example usage: + * @verbatim + * + * // The callback function that will execute in the context of the daemon task. + * // Note callback functions must all use this same prototype. + * void vProcessInterface( void *pvParameter1, uint32_t ulParameter2 ) + * { + * BaseType_t xInterfaceToService; + * + * // The interface that requires servicing is passed in the second + * // parameter. The first parameter is not used in this case. + * xInterfaceToService = ( BaseType_t ) ulParameter2; + * + * // ...Perform the processing here... + * } + * + * // An ISR that receives data packets from multiple interfaces + * void vAnISR( void ) + * { + * BaseType_t xInterfaceToService, xHigherPriorityTaskWoken; + * + * // Query the hardware to determine which interface needs processing. + * xInterfaceToService = prvCheckInterfaces(); + * + * // The actual processing is to be deferred to a task. Request the + * // vProcessInterface() callback function is executed, passing in the + * // number of the interface that needs processing. The interface to + * // service is passed in the second parameter. The first parameter is + * // not used in this case. + * xHigherPriorityTaskWoken = pdFALSE; + * xTimerPendFunctionCallFromISR( vProcessInterface, NULL, ( uint32_t ) xInterfaceToService, &xHigherPriorityTaskWoken ); + * + * // If xHigherPriorityTaskWoken is now set to pdTRUE then a context + * // switch should be requested. The macro used is port specific and will + * // be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() - refer to + * // the documentation page for the port being used. + * portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); + * + * } + * @endverbatim + */ +BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken ); + + /** + * BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, + * void *pvParameter1, + * uint32_t ulParameter2, + * TickType_t xTicksToWait ); + * + * + * Used to defer the execution of a function to the RTOS daemon task (the timer + * service task, hence this function is implemented in timers.c and is prefixed + * with 'Timer'). + * + * @param xFunctionToPend The function to execute from the timer service/ + * daemon task. The function must conform to the PendedFunction_t + * prototype. + * + * @param pvParameter1 The value of the callback function's first parameter. + * The parameter has a void * type to allow it to be used to pass any type. + * For example, unsigned longs can be cast to a void *, or the void * can be + * used to point to a structure. + * + * @param ulParameter2 The value of the callback function's second parameter. + * + * @param xTicksToWait Calling this function will result in a message being + * sent to the timer daemon task on a queue. xTicksToWait is the amount of + * time the calling task should remain in the Blocked state (so not using any + * processing time) for space to become available on the timer queue if the + * queue is found to be full. + * + * @return pdPASS is returned if the message was successfully sent to the + * timer daemon task, otherwise pdFALSE is returned. + * + */ +BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ); + +/** + * const char * const pcTimerGetTimerName( TimerHandle_t xTimer ); + * + * Returns the name that was assigned to a timer when the timer was created. + * + * @param xTimer The handle of the timer being queried. + * + * @return The name assigned to the timer specified by the xTimer parameter. + */ +const char * pcTimerGetTimerName( TimerHandle_t xTimer ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + +/* + * Functions beyond this part are not part of the public API and are intended + * for use by the kernel only. + */ +BaseType_t xTimerCreateTimerTask( void ) PRIVILEGED_FUNCTION; +BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; + +#ifdef __cplusplus +} +#endif +#endif /* TIMERS_H */ + + + diff --git a/tools/sdk/include/freertos/freertos/xtensa_api.h b/tools/sdk/include/freertos/freertos/xtensa_api.h new file mode 100644 index 00000000..04ad7d62 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/xtensa_api.h @@ -0,0 +1,118 @@ +/******************************************************************************* +Copyright (c) 2006-2015 Cadence Design Systems Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +******************************************************************************/ + +/****************************************************************************** + Xtensa-specific API for RTOS ports. +******************************************************************************/ + +#ifndef __XTENSA_API_H__ +#define __XTENSA_API_H__ + +#include + +#include "xtensa_context.h" + + +/* Typedef for C-callable interrupt handler function */ +typedef void (*xt_handler)(void *); + +/* Typedef for C-callable exception handler function */ +typedef void (*xt_exc_handler)(XtExcFrame *); + + +/* +------------------------------------------------------------------------------- + Call this function to set a handler for the specified exception. + + n - Exception number (type) + f - Handler function address, NULL to uninstall handler. + + The handler will be passed a pointer to the exception frame, which is created + on the stack of the thread that caused the exception. + + If the handler returns, the thread context will be restored and the faulting + instruction will be retried. Any values in the exception frame that are + modified by the handler will be restored as part of the context. For details + of the exception frame structure see xtensa_context.h. +------------------------------------------------------------------------------- +*/ +extern xt_exc_handler xt_set_exception_handler(int n, xt_exc_handler f); + + +/* +------------------------------------------------------------------------------- + Call this function to set a handler for the specified interrupt. + + n - Interrupt number. + f - Handler function address, NULL to uninstall handler. + arg - Argument to be passed to handler. +------------------------------------------------------------------------------- +*/ +extern xt_handler xt_set_interrupt_handler(int n, xt_handler f, void * arg); + + +/* +------------------------------------------------------------------------------- + Call this function to enable the specified interrupts. + + mask - Bit mask of interrupts to be enabled. +------------------------------------------------------------------------------- +*/ +extern void xt_ints_on(unsigned int mask); + + +/* +------------------------------------------------------------------------------- + Call this function to disable the specified interrupts. + + mask - Bit mask of interrupts to be disabled. +------------------------------------------------------------------------------- +*/ +extern void xt_ints_off(unsigned int mask); + + +/* +------------------------------------------------------------------------------- + Call this function to set the specified (s/w) interrupt. +------------------------------------------------------------------------------- +*/ +static inline void xt_set_intset(unsigned int arg) +{ + xthal_set_intset(arg); +} + + +/* +------------------------------------------------------------------------------- + Call this function to clear the specified (s/w or edge-triggered) + interrupt. +------------------------------------------------------------------------------- +*/ +static inline void xt_set_intclear(unsigned int arg) +{ + xthal_set_intclear(arg); +} + + +#endif /* __XTENSA_API_H__ */ + diff --git a/tools/sdk/include/freertos/freertos/xtensa_config.h b/tools/sdk/include/freertos/freertos/xtensa_config.h new file mode 100644 index 00000000..58baee2d --- /dev/null +++ b/tools/sdk/include/freertos/freertos/xtensa_config.h @@ -0,0 +1,146 @@ +/******************************************************************************* +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- + + Configuration-specific information for Xtensa build. This file must be + included in FreeRTOSConfig.h to properly set up the config-dependent + parameters correctly. + + NOTE: To enable thread-safe C library support, XT_USE_THREAD_SAFE_CLIB must + be defined to be > 0 somewhere above or on the command line. + +*******************************************************************************/ + +#ifndef XTENSA_CONFIG_H +#define XTENSA_CONFIG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include /* required for XSHAL_CLIB */ + +#include "xtensa_context.h" + + +/*----------------------------------------------------------------------------- +* STACK REQUIREMENTS +* +* This section defines the minimum stack size, and the extra space required to +* be allocated for saving coprocessor state and/or C library state information +* (if thread safety is enabled for the C library). The sizes are in bytes. +* +* Stack sizes for individual tasks should be derived from these minima based on +* the maximum call depth of the task and the maximum level of interrupt nesting. +* A minimum stack size is defined by XT_STACK_MIN_SIZE. This minimum is based +* on the requirement for a task that calls nothing else but can be interrupted. +* This assumes that interrupt handlers do not call more than a few levels deep. +* If this is not true, i.e. one or more interrupt handlers make deep calls then +* the minimum must be increased. +* +* If the Xtensa processor configuration includes coprocessors, then space is +* allocated to save the coprocessor state on the stack. +* +* If thread safety is enabled for the C runtime library, (XT_USE_THREAD_SAFE_CLIB +* is defined) then space is allocated to save the C library context in the TCB. +* +* Allocating insufficient stack space is a common source of hard-to-find errors. +* During development, it is best to enable the FreeRTOS stack checking features. +* +* Usage: +* +* XT_USE_THREAD_SAFE_CLIB -- Define this to a nonzero value to enable thread-safe +* use of the C library. This will require extra stack +* space to be allocated for tasks that use the C library +* reentrant functions. See below for more information. +* +* NOTE: The Xtensa toolchain supports multiple C libraries and not all of them +* support thread safety. Check your core configuration to see which C library +* was chosen for your system. +* +* XT_STACK_MIN_SIZE -- The minimum stack size for any task. It is recommended +* that you do not use a stack smaller than this for any +* task. In case you want to use stacks smaller than this +* size, you must verify that the smaller size(s) will work +* under all operating conditions. +* +* XT_STACK_EXTRA -- The amount of extra stack space to allocate for a task +* that does not make C library reentrant calls. Add this +* to the amount of stack space required by the task itself. +* +* XT_STACK_EXTRA_CLIB -- The amount of space to allocate for C library state. +* +-----------------------------------------------------------------------------*/ + +/* Extra space required for interrupt/exception hooks. */ +#ifdef XT_INTEXC_HOOKS + #ifdef __XTENSA_CALL0_ABI__ + #define STK_INTEXC_EXTRA 0x200 + #else + #define STK_INTEXC_EXTRA 0x180 + #endif +#else + #define STK_INTEXC_EXTRA 0 +#endif + +#define XT_CLIB_CONTEXT_AREA_SIZE 0 + +/*------------------------------------------------------------------------------ + Extra size -- interrupt frame plus coprocessor save area plus hook space. + NOTE: Make sure XT_INTEXC_HOOKS is undefined unless you really need the hooks. +------------------------------------------------------------------------------*/ +#ifdef __XTENSA_CALL0_ABI__ + #define XT_XTRA_SIZE (XT_STK_FRMSZ + STK_INTEXC_EXTRA + 0x10 + XT_CP_SIZE) +#else + #define XT_XTRA_SIZE (XT_STK_FRMSZ + STK_INTEXC_EXTRA + 0x20 + XT_CP_SIZE) +#endif + +/*------------------------------------------------------------------------------ + Space allocated for user code -- function calls and local variables. + NOTE: This number can be adjusted to suit your needs. You must verify that the + amount of space you reserve is adequate for the worst-case conditions in your + application. + NOTE: The windowed ABI requires more stack, since space has to be reserved + for spilling register windows. +------------------------------------------------------------------------------*/ +#ifdef __XTENSA_CALL0_ABI__ + #define XT_USER_SIZE 0x200 +#else + #define XT_USER_SIZE 0x400 +#endif + +/* Minimum recommended stack size. */ +#define XT_STACK_MIN_SIZE ((XT_XTRA_SIZE + XT_USER_SIZE) / sizeof(unsigned char)) + +/* OS overhead with and without C library thread context. */ +#define XT_STACK_EXTRA (XT_XTRA_SIZE) +#define XT_STACK_EXTRA_CLIB (XT_XTRA_SIZE + XT_CLIB_CONTEXT_AREA_SIZE) + + +#ifdef __cplusplus +} +#endif + +#endif /* XTENSA_CONFIG_H */ + diff --git a/tools/sdk/include/freertos/freertos/xtensa_context.h b/tools/sdk/include/freertos/freertos/xtensa_context.h new file mode 100644 index 00000000..3167c847 --- /dev/null +++ b/tools/sdk/include/freertos/freertos/xtensa_context.h @@ -0,0 +1,383 @@ +/******************************************************************************* +Copyright (c) 2006-2015 Cadence Design Systems Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- + + XTENSA CONTEXT FRAMES AND MACROS FOR RTOS ASSEMBLER SOURCES + +This header contains definitions and macros for use primarily by Xtensa +RTOS assembly coded source files. It includes and uses the Xtensa hardware +abstraction layer (HAL) to deal with config specifics. It may also be +included in C source files. + +!! Supports only Xtensa Exception Architecture 2 (XEA2). XEA1 not supported. !! + +NOTE: The Xtensa architecture requires stack pointer alignment to 16 bytes. + +*******************************************************************************/ + +#ifndef XTENSA_CONTEXT_H +#define XTENSA_CONTEXT_H + +#ifdef __ASSEMBLER__ +#include +#endif + +#include +#include +#include +#include + + +/* Align a value up to nearest n-byte boundary, where n is a power of 2. */ +#define ALIGNUP(n, val) (((val) + (n)-1) & -(n)) + + +/* +------------------------------------------------------------------------------- + Macros that help define structures for both C and assembler. +------------------------------------------------------------------------------- +*/ + +#ifdef STRUCT_BEGIN +#undef STRUCT_BEGIN +#undef STRUCT_FIELD +#undef STRUCT_AFIELD +#undef STRUCT_END +#endif + +#if defined(_ASMLANGUAGE) || defined(__ASSEMBLER__) + +#define STRUCT_BEGIN .pushsection .text; .struct 0 +#define STRUCT_FIELD(ctype,size,asname,name) asname: .space size +#define STRUCT_AFIELD(ctype,size,asname,name,n) asname: .space (size)*(n) +#define STRUCT_END(sname) sname##Size:; .popsection + +#else + +#define STRUCT_BEGIN typedef struct { +#define STRUCT_FIELD(ctype,size,asname,name) ctype name; +#define STRUCT_AFIELD(ctype,size,asname,name,n) ctype name[n]; +#define STRUCT_END(sname) } sname; + +#endif //_ASMLANGUAGE || __ASSEMBLER__ + + +/* +------------------------------------------------------------------------------- + INTERRUPT/EXCEPTION STACK FRAME FOR A THREAD OR NESTED INTERRUPT + + A stack frame of this structure is allocated for any interrupt or exception. + It goes on the current stack. If the RTOS has a system stack for handling + interrupts, every thread stack must allow space for just one interrupt stack + frame, then nested interrupt stack frames go on the system stack. + + The frame includes basic registers (explicit) and "extra" registers introduced + by user TIE or the use of the MAC16 option in the user's Xtensa config. + The frame size is minimized by omitting regs not applicable to user's config. + + For Windowed ABI, this stack frame includes the interruptee's base save area, + another base save area to manage gcc nested functions, and a little temporary + space to help manage the spilling of the register windows. +------------------------------------------------------------------------------- +*/ + +STRUCT_BEGIN +STRUCT_FIELD (long, 4, XT_STK_EXIT, exit) /* exit point for dispatch */ +STRUCT_FIELD (long, 4, XT_STK_PC, pc) /* return PC */ +STRUCT_FIELD (long, 4, XT_STK_PS, ps) /* return PS */ +STRUCT_FIELD (long, 4, XT_STK_A0, a0) +STRUCT_FIELD (long, 4, XT_STK_A1, a1) /* stack pointer before interrupt */ +STRUCT_FIELD (long, 4, XT_STK_A2, a2) +STRUCT_FIELD (long, 4, XT_STK_A3, a3) +STRUCT_FIELD (long, 4, XT_STK_A4, a4) +STRUCT_FIELD (long, 4, XT_STK_A5, a5) +STRUCT_FIELD (long, 4, XT_STK_A6, a6) +STRUCT_FIELD (long, 4, XT_STK_A7, a7) +STRUCT_FIELD (long, 4, XT_STK_A8, a8) +STRUCT_FIELD (long, 4, XT_STK_A9, a9) +STRUCT_FIELD (long, 4, XT_STK_A10, a10) +STRUCT_FIELD (long, 4, XT_STK_A11, a11) +STRUCT_FIELD (long, 4, XT_STK_A12, a12) +STRUCT_FIELD (long, 4, XT_STK_A13, a13) +STRUCT_FIELD (long, 4, XT_STK_A14, a14) +STRUCT_FIELD (long, 4, XT_STK_A15, a15) +STRUCT_FIELD (long, 4, XT_STK_SAR, sar) +STRUCT_FIELD (long, 4, XT_STK_EXCCAUSE, exccause) +STRUCT_FIELD (long, 4, XT_STK_EXCVADDR, excvaddr) +#if XCHAL_HAVE_LOOPS +STRUCT_FIELD (long, 4, XT_STK_LBEG, lbeg) +STRUCT_FIELD (long, 4, XT_STK_LEND, lend) +STRUCT_FIELD (long, 4, XT_STK_LCOUNT, lcount) +#endif +#ifndef __XTENSA_CALL0_ABI__ +/* Temporary space for saving stuff during window spill */ +STRUCT_FIELD (long, 4, XT_STK_TMP0, tmp0) +STRUCT_FIELD (long, 4, XT_STK_TMP1, tmp1) +STRUCT_FIELD (long, 4, XT_STK_TMP2, tmp2) +#endif +#ifdef XT_USE_SWPRI +/* Storage for virtual priority mask */ +STRUCT_FIELD (long, 4, XT_STK_VPRI, vpri) +#endif +#ifdef XT_USE_OVLY +/* Storage for overlay state */ +STRUCT_FIELD (long, 4, XT_STK_OVLY, ovly) +#endif +STRUCT_END(XtExcFrame) + +#if defined(_ASMLANGUAGE) || defined(__ASSEMBLER__) +#define XT_STK_NEXT1 XtExcFrameSize +#else +#define XT_STK_NEXT1 sizeof(XtExcFrame) +#endif + +/* Allocate extra storage if needed */ +#if XCHAL_EXTRA_SA_SIZE != 0 + +#if XCHAL_EXTRA_SA_ALIGN <= 16 +#define XT_STK_EXTRA ALIGNUP(XCHAL_EXTRA_SA_ALIGN, XT_STK_NEXT1) +#else +/* If need more alignment than stack, add space for dynamic alignment */ +#define XT_STK_EXTRA (ALIGNUP(XCHAL_EXTRA_SA_ALIGN, XT_STK_NEXT1) + XCHAL_EXTRA_SA_ALIGN) +#endif +#define XT_STK_NEXT2 (XT_STK_EXTRA + XCHAL_EXTRA_SA_SIZE) + +#else + +#define XT_STK_NEXT2 XT_STK_NEXT1 + +#endif + +/* +------------------------------------------------------------------------------- + This is the frame size. Add space for 4 registers (interruptee's base save + area) and some space for gcc nested functions if any. +------------------------------------------------------------------------------- +*/ +#define XT_STK_FRMSZ (ALIGNUP(0x10, XT_STK_NEXT2) + 0x20) + + +/* +------------------------------------------------------------------------------- + SOLICITED STACK FRAME FOR A THREAD + + A stack frame of this structure is allocated whenever a thread enters the + RTOS kernel intentionally (and synchronously) to submit to thread scheduling. + It goes on the current thread's stack. + + The solicited frame only includes registers that are required to be preserved + by the callee according to the compiler's ABI conventions, some space to save + the return address for returning to the caller, and the caller's PS register. + + For Windowed ABI, this stack frame includes the caller's base save area. + + Note on XT_SOL_EXIT field: + It is necessary to distinguish a solicited from an interrupt stack frame. + This field corresponds to XT_STK_EXIT in the interrupt stack frame and is + always at the same offset (0). It can be written with a code (usually 0) + to distinguish a solicted frame from an interrupt frame. An RTOS port may + opt to ignore this field if it has another way of distinguishing frames. +------------------------------------------------------------------------------- +*/ + +STRUCT_BEGIN +#ifdef __XTENSA_CALL0_ABI__ +STRUCT_FIELD (long, 4, XT_SOL_EXIT, exit) +STRUCT_FIELD (long, 4, XT_SOL_PC, pc) +STRUCT_FIELD (long, 4, XT_SOL_PS, ps) +STRUCT_FIELD (long, 4, XT_SOL_NEXT, next) +STRUCT_FIELD (long, 4, XT_SOL_A12, a12) /* should be on 16-byte alignment */ +STRUCT_FIELD (long, 4, XT_SOL_A13, a13) +STRUCT_FIELD (long, 4, XT_SOL_A14, a14) +STRUCT_FIELD (long, 4, XT_SOL_A15, a15) +#else +STRUCT_FIELD (long, 4, XT_SOL_EXIT, exit) +STRUCT_FIELD (long, 4, XT_SOL_PC, pc) +STRUCT_FIELD (long, 4, XT_SOL_PS, ps) +STRUCT_FIELD (long, 4, XT_SOL_NEXT, next) +STRUCT_FIELD (long, 4, XT_SOL_A0, a0) /* should be on 16-byte alignment */ +STRUCT_FIELD (long, 4, XT_SOL_A1, a1) +STRUCT_FIELD (long, 4, XT_SOL_A2, a2) +STRUCT_FIELD (long, 4, XT_SOL_A3, a3) +#endif +STRUCT_END(XtSolFrame) + +/* Size of solicited stack frame */ +#define XT_SOL_FRMSZ ALIGNUP(0x10, XtSolFrameSize) + + +/* +------------------------------------------------------------------------------- + CO-PROCESSOR STATE SAVE AREA FOR A THREAD + + The RTOS must provide an area per thread to save the state of co-processors + when that thread does not have control. Co-processors are context-switched + lazily (on demand) only when a new thread uses a co-processor instruction, + otherwise a thread retains ownership of the co-processor even when it loses + control of the processor. An Xtensa co-processor exception is triggered when + any co-processor instruction is executed by a thread that is not the owner, + and the context switch of that co-processor is then peformed by the handler. + Ownership represents which thread's state is currently in the co-processor. + + Co-processors may not be used by interrupt or exception handlers. If an + co-processor instruction is executed by an interrupt or exception handler, + the co-processor exception handler will trigger a kernel panic and freeze. + This restriction is introduced to reduce the overhead of saving and restoring + co-processor state (which can be quite large) and in particular remove that + overhead from interrupt handlers. + + The co-processor state save area may be in any convenient per-thread location + such as in the thread control block or above the thread stack area. It need + not be in the interrupt stack frame since interrupts don't use co-processors. + + Along with the save area for each co-processor, two bitmasks with flags per + co-processor (laid out as in the CPENABLE reg) help manage context-switching + co-processors as efficiently as possible: + + XT_CPENABLE + The contents of a non-running thread's CPENABLE register. + It represents the co-processors owned (and whose state is still needed) + by the thread. When a thread is preempted, its CPENABLE is saved here. + When a thread solicits a context-swtich, its CPENABLE is cleared - the + compiler has saved the (caller-saved) co-proc state if it needs to. + When a non-running thread loses ownership of a CP, its bit is cleared. + When a thread runs, it's XT_CPENABLE is loaded into the CPENABLE reg. + Avoids co-processor exceptions when no change of ownership is needed. + + XT_CPSTORED + A bitmask with the same layout as CPENABLE, a bit per co-processor. + Indicates whether the state of each co-processor is saved in the state + save area. When a thread enters the kernel, only the state of co-procs + still enabled in CPENABLE is saved. When the co-processor exception + handler assigns ownership of a co-processor to a thread, it restores + the saved state only if this bit is set, and clears this bit. + + XT_CP_CS_ST + A bitmask with the same layout as CPENABLE, a bit per co-processor. + Indicates whether callee-saved state is saved in the state save area. + Callee-saved state is saved by itself on a solicited context switch, + and restored when needed by the coprocessor exception handler. + Unsolicited switches will cause the entire coprocessor to be saved + when necessary. + + XT_CP_ASA + Pointer to the aligned save area. Allows it to be aligned more than + the overall save area (which might only be stack-aligned or TCB-aligned). + Especially relevant for Xtensa cores configured with a very large data + path that requires alignment greater than 16 bytes (ABI stack alignment). +------------------------------------------------------------------------------- +*/ + +#if XCHAL_CP_NUM > 0 + +/* Offsets of each coprocessor save area within the 'aligned save area': */ +#define XT_CP0_SA 0 +#define XT_CP1_SA ALIGNUP(XCHAL_CP1_SA_ALIGN, XT_CP0_SA + XCHAL_CP0_SA_SIZE) +#define XT_CP2_SA ALIGNUP(XCHAL_CP2_SA_ALIGN, XT_CP1_SA + XCHAL_CP1_SA_SIZE) +#define XT_CP3_SA ALIGNUP(XCHAL_CP3_SA_ALIGN, XT_CP2_SA + XCHAL_CP2_SA_SIZE) +#define XT_CP4_SA ALIGNUP(XCHAL_CP4_SA_ALIGN, XT_CP3_SA + XCHAL_CP3_SA_SIZE) +#define XT_CP5_SA ALIGNUP(XCHAL_CP5_SA_ALIGN, XT_CP4_SA + XCHAL_CP4_SA_SIZE) +#define XT_CP6_SA ALIGNUP(XCHAL_CP6_SA_ALIGN, XT_CP5_SA + XCHAL_CP5_SA_SIZE) +#define XT_CP7_SA ALIGNUP(XCHAL_CP7_SA_ALIGN, XT_CP6_SA + XCHAL_CP6_SA_SIZE) +#define XT_CP_SA_SIZE ALIGNUP(16, XT_CP7_SA + XCHAL_CP7_SA_SIZE) + +/* Offsets within the overall save area: */ +#define XT_CPENABLE 0 /* (2 bytes) coprocessors active for this thread */ +#define XT_CPSTORED 2 /* (2 bytes) coprocessors saved for this thread */ +#define XT_CP_CS_ST 4 /* (2 bytes) coprocessor callee-saved regs stored for this thread */ +#define XT_CP_ASA 8 /* (4 bytes) ptr to aligned save area */ +/* Overall size allows for dynamic alignment: */ +#define XT_CP_SIZE (12 + XT_CP_SA_SIZE + XCHAL_TOTAL_SA_ALIGN) +#else +#define XT_CP_SIZE 0 +#endif + + +/* + Macro to get the current core ID. Only uses the reg given as an argument. + Reading PRID on the ESP108 architecture gives us 0xCDCD on the PRO processor + and 0xABAB on the APP CPU. We distinguish between the two by simply checking + bit 1: it's 1 on the APP and 0 on the PRO processor. +*/ + +#ifdef __ASSEMBLER__ + .macro getcoreid reg + rsr.prid \reg + bbci \reg,1,1f + movi \reg,1 + j 2f +1: + movi \reg,0 +2: + .endm +#endif + + + +/* +------------------------------------------------------------------------------- + MACROS TO HANDLE ABI SPECIFICS OF FUNCTION ENTRY AND RETURN + + Convenient where the frame size requirements are the same for both ABIs. + ENTRY(sz), RET(sz) are for framed functions (have locals or make calls). + ENTRY0, RET0 are for frameless functions (no locals, no calls). + + where size = size of stack frame in bytes (must be >0 and aligned to 16). + For framed functions the frame is created and the return address saved at + base of frame (Call0 ABI) or as determined by hardware (Windowed ABI). + For frameless functions, there is no frame and return address remains in a0. + Note: Because CPP macros expand to a single line, macros requiring multi-line + expansions are implemented as assembler macros. +------------------------------------------------------------------------------- +*/ + +#ifdef __ASSEMBLER__ +#ifdef __XTENSA_CALL0_ABI__ + /* Call0 */ + #define ENTRY(sz) entry1 sz + .macro entry1 size=0x10 + addi sp, sp, -\size + s32i a0, sp, 0 + .endm + #define ENTRY0 + #define RET(sz) ret1 sz + .macro ret1 size=0x10 + l32i a0, sp, 0 + addi sp, sp, \size + ret + .endm + #define RET0 ret +#else + /* Windowed */ + #define ENTRY(sz) entry sp, sz + #define ENTRY0 entry sp, 0x10 + #define RET(sz) retw + #define RET0 retw +#endif +#endif + + + + + +#endif /* XTENSA_CONTEXT_H */ + diff --git a/tools/sdk/include/freertos/freertos/xtensa_rtos.h b/tools/sdk/include/freertos/freertos/xtensa_rtos.h new file mode 100644 index 00000000..980cc92e --- /dev/null +++ b/tools/sdk/include/freertos/freertos/xtensa_rtos.h @@ -0,0 +1,233 @@ +/******************************************************************************* +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- + + RTOS-SPECIFIC INFORMATION FOR XTENSA RTOS ASSEMBLER SOURCES + (FreeRTOS Port) + +This header is the primary glue between generic Xtensa RTOS support +sources and a specific RTOS port for Xtensa. It contains definitions +and macros for use primarily by Xtensa assembly coded source files. + +Macros in this header map callouts from generic Xtensa files to specific +RTOS functions. It may also be included in C source files. + +Xtensa RTOS ports support all RTOS-compatible configurations of the Xtensa +architecture, using the Xtensa hardware abstraction layer (HAL) to deal +with configuration specifics. + +Should be included by all Xtensa generic and RTOS port-specific sources. + +*******************************************************************************/ + +#ifndef XTENSA_RTOS_H +#define XTENSA_RTOS_H + +#ifdef __ASSEMBLER__ +#include +#else +#include +#endif + +#include +#include +#include + +/* +Include any RTOS specific definitions that are needed by this header. +*/ +#include + +/* +Convert FreeRTOSConfig definitions to XTENSA definitions. +However these can still be overridden from the command line. +*/ + +#ifndef XT_SIMULATOR + #if configXT_SIMULATOR + #define XT_SIMULATOR 1 /* Simulator mode */ + #endif +#endif + +#ifndef XT_BOARD + #if configXT_BOARD + #define XT_BOARD 1 /* Board mode */ + #endif +#endif + +#ifndef XT_TIMER_INDEX + #if defined configXT_TIMER_INDEX + #define XT_TIMER_INDEX configXT_TIMER_INDEX /* Index of hardware timer to be used */ + #endif +#endif + +#ifndef XT_INTEXC_HOOKS + #if configXT_INTEXC_HOOKS + #define XT_INTEXC_HOOKS 1 /* Enables exception hooks */ + #endif +#endif + +#if !defined(XT_SIMULATOR) && !defined(XT_BOARD) + #error Either XT_SIMULATOR or XT_BOARD must be defined. +#endif + + +/* +Name of RTOS (for messages). +*/ +#define XT_RTOS_NAME FreeRTOS + +/* +Check some Xtensa configuration requirements and report error if not met. +Error messages can be customize to the RTOS port. +*/ + +#if !XCHAL_HAVE_XEA2 +#error "FreeRTOS/Xtensa requires XEA2 (exception architecture 2)." +#endif + + +/******************************************************************************* + +RTOS CALLOUT MACROS MAPPED TO RTOS PORT-SPECIFIC FUNCTIONS. + +Define callout macros used in generic Xtensa code to interact with the RTOS. +The macros are simply the function names for use in calls from assembler code. +Some of these functions may call back to generic functions in xtensa_context.h . + +*******************************************************************************/ + +/* +Inform RTOS of entry into an interrupt handler that will affect it. +Allows RTOS to manage switch to any system stack and count nesting level. +Called after minimal context has been saved, with interrupts disabled. +RTOS port can call0 _xt_context_save to save the rest of the context. +May only be called from assembly code by the 'call0' instruction. +*/ +// void XT_RTOS_INT_ENTER(void) +#define XT_RTOS_INT_ENTER _frxt_int_enter + +/* +Inform RTOS of completion of an interrupt handler, and give control to +RTOS to perform thread/task scheduling, switch back from any system stack +and restore the context, and return to the exit dispatcher saved in the +stack frame at XT_STK_EXIT. RTOS port can call0 _xt_context_restore +to save the context saved in XT_RTOS_INT_ENTER via _xt_context_save, +leaving only a minimal part of the context to be restored by the exit +dispatcher. This function does not return to the place it was called from. +May only be called from assembly code by the 'call0' instruction. +*/ +// void XT_RTOS_INT_EXIT(void) +#define XT_RTOS_INT_EXIT _frxt_int_exit + +/* +Inform RTOS of the occurrence of a tick timer interrupt. +If RTOS has no tick timer, leave XT_RTOS_TIMER_INT undefined. +May be coded in or called from C or assembly, per ABI conventions. +RTOS may optionally define XT_TICK_PER_SEC in its own way (eg. macro). +*/ +// void XT_RTOS_TIMER_INT(void) +#define XT_RTOS_TIMER_INT _frxt_timer_int +#define XT_TICK_PER_SEC configTICK_RATE_HZ + +/* +Return in a15 the base address of the co-processor state save area for the +thread that triggered a co-processor exception, or 0 if no thread was running. +The state save area is structured as defined in xtensa_context.h and has size +XT_CP_SIZE. Co-processor instructions should only be used in thread code, never +in interrupt handlers or the RTOS kernel. May only be called from assembly code +and by the 'call0' instruction. A result of 0 indicates an unrecoverable error. +The implementation may use only a2-4, a15 (all other regs must be preserved). +*/ +// void* XT_RTOS_CP_STATE(void) +#define XT_RTOS_CP_STATE _frxt_task_coproc_state + + +/******************************************************************************* + +HOOKS TO DYNAMICALLY INSTALL INTERRUPT AND EXCEPTION HANDLERS PER LEVEL. + +This Xtensa RTOS port provides hooks for dynamically installing exception +and interrupt handlers to facilitate automated testing where each test +case can install its own handler for user exceptions and each interrupt +priority (level). This consists of an array of function pointers indexed +by interrupt priority, with index 0 being the user exception handler hook. +Each entry in the array is initially 0, and may be replaced by a function +pointer of type XT_INTEXC_HOOK. A handler may be uninstalled by installing 0. + +The handler for low and medium priority obeys ABI conventions so may be coded +in C. For the exception handler, the cause is the contents of the EXCCAUSE +reg, and the result is -1 if handled, else the cause (still needs handling). +For interrupt handlers, the cause is a mask of pending enabled interrupts at +that level, and the result is the same mask with the bits for the handled +interrupts cleared (those not cleared still need handling). This allows a test +case to either pre-handle or override the default handling for the exception +or interrupt level (see xtensa_vectors.S). + +High priority handlers (including NMI) must be coded in assembly, are always +called by 'call0' regardless of ABI, must preserve all registers except a0, +and must not use or modify the interrupted stack. The hook argument 'cause' +is not passed and the result is ignored, so as not to burden the caller with +saving and restoring a2 (it assumes only one interrupt per level - see the +discussion in high priority interrupts in xtensa_vectors.S). The handler +therefore should be coded to prototype 'void h(void)' even though it plugs +into an array of handlers of prototype 'unsigned h(unsigned)'. + +To enable interrupt/exception hooks, compile the RTOS with '-DXT_INTEXC_HOOKS'. + +*******************************************************************************/ + +#define XT_INTEXC_HOOK_NUM (1 + XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI) + +#ifndef __ASSEMBLER__ +typedef unsigned (*XT_INTEXC_HOOK)(unsigned cause); +extern volatile XT_INTEXC_HOOK _xt_intexc_hooks[XT_INTEXC_HOOK_NUM]; +#endif + + +/******************************************************************************* + +CONVENIENCE INCLUSIONS. + +Ensures RTOS specific files need only include this one Xtensa-generic header. +These headers are included last so they can use the RTOS definitions above. + +*******************************************************************************/ + +#include "xtensa_context.h" + +#ifdef XT_RTOS_TIMER_INT +#include "xtensa_timer.h" +#endif + + +/******************************************************************************* + +Xtensa Port Version. + +*******************************************************************************/ + +#define XTENSA_PORT_VERSION 1.4.2 +#define XTENSA_PORT_VERSION_STRING "1.4.2" + +#endif /* XTENSA_RTOS_H */ + diff --git a/tools/sdk/include/freertos/freertos/xtensa_timer.h b/tools/sdk/include/freertos/freertos/xtensa_timer.h new file mode 100644 index 00000000..9bb8648f --- /dev/null +++ b/tools/sdk/include/freertos/freertos/xtensa_timer.h @@ -0,0 +1,159 @@ +/******************************************************************************* +// Copyright (c) 2003-2015 Cadence Design Systems, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- + + XTENSA INFORMATION FOR RTOS TICK TIMER AND CLOCK FREQUENCY + +This header contains definitions and macros for use primarily by Xtensa +RTOS assembly coded source files. It includes and uses the Xtensa hardware +abstraction layer (HAL) to deal with config specifics. It may also be +included in C source files. + +User may edit to modify timer selection and to specify clock frequency and +tick duration to match timer interrupt to the real-time tick duration. + +If the RTOS has no timer interrupt, then there is no tick timer and the +clock frequency is irrelevant, so all of these macros are left undefined +and the Xtensa core configuration need not have a timer. + +*******************************************************************************/ + +#ifndef XTENSA_TIMER_H +#define XTENSA_TIMER_H + +#ifdef __ASSEMBLER__ +#include +#endif + +#include +#include + +#include "xtensa_rtos.h" /* in case this wasn't included directly */ + +#include + +/* +Select timer to use for periodic tick, and determine its interrupt number +and priority. User may specify a timer by defining XT_TIMER_INDEX with -D, +in which case its validity is checked (it must exist in this core and must +not be on a high priority interrupt - an error will be reported in invalid). +Otherwise select the first low or medium priority interrupt timer available. +*/ +#if XCHAL_NUM_TIMERS == 0 + + #error "This Xtensa configuration is unsupported, it has no timers." + +#else + +#ifndef XT_TIMER_INDEX + #if XCHAL_TIMER3_INTERRUPT != XTHAL_TIMER_UNCONFIGURED + #if XCHAL_INT_LEVEL(XCHAL_TIMER3_INTERRUPT) <= XCHAL_EXCM_LEVEL + #undef XT_TIMER_INDEX + #define XT_TIMER_INDEX 3 + #endif + #endif + #if XCHAL_TIMER2_INTERRUPT != XTHAL_TIMER_UNCONFIGURED + #if XCHAL_INT_LEVEL(XCHAL_TIMER2_INTERRUPT) <= XCHAL_EXCM_LEVEL + #undef XT_TIMER_INDEX + #define XT_TIMER_INDEX 2 + #endif + #endif + #if XCHAL_TIMER1_INTERRUPT != XTHAL_TIMER_UNCONFIGURED + #if XCHAL_INT_LEVEL(XCHAL_TIMER1_INTERRUPT) <= XCHAL_EXCM_LEVEL + #undef XT_TIMER_INDEX + #define XT_TIMER_INDEX 1 + #endif + #endif + #if XCHAL_TIMER0_INTERRUPT != XTHAL_TIMER_UNCONFIGURED + #if XCHAL_INT_LEVEL(XCHAL_TIMER0_INTERRUPT) <= XCHAL_EXCM_LEVEL + #undef XT_TIMER_INDEX + #define XT_TIMER_INDEX 0 + #endif + #endif +#endif +#ifndef XT_TIMER_INDEX + #error "There is no suitable timer in this Xtensa configuration." +#endif + +#define XT_CCOMPARE (CCOMPARE + XT_TIMER_INDEX) +#define XT_TIMER_INTNUM XCHAL_TIMER_INTERRUPT(XT_TIMER_INDEX) +#define XT_TIMER_INTPRI XCHAL_INT_LEVEL(XT_TIMER_INTNUM) +#define XT_TIMER_INTEN (1 << XT_TIMER_INTNUM) + +#if XT_TIMER_INTNUM == XTHAL_TIMER_UNCONFIGURED + #error "The timer selected by XT_TIMER_INDEX does not exist in this core." +#elif XT_TIMER_INTPRI > XCHAL_EXCM_LEVEL + #error "The timer interrupt cannot be high priority (use medium or low)." +#endif + +#endif /* XCHAL_NUM_TIMERS */ + +/* +Set processor clock frequency, used to determine clock divisor for timer tick. +User should BE SURE TO ADJUST THIS for the Xtensa platform being used. +If using a supported board via the board-independent API defined in xtbsp.h, +this may be left undefined and frequency and tick divisor will be computed +and cached during run-time initialization. + +NOTE ON SIMULATOR: +Under the Xtensa instruction set simulator, the frequency can only be estimated +because it depends on the speed of the host and the version of the simulator. +Also because it runs much slower than hardware, it is not possible to achieve +real-time performance for most applications under the simulator. A frequency +too low does not allow enough time between timer interrupts, starving threads. +To obtain a more convenient but non-real-time tick duration on the simulator, +compile with xt-xcc option "-DXT_SIMULATOR". +Adjust this frequency to taste (it's not real-time anyway!). +*/ +#if defined(XT_SIMULATOR) && !defined(XT_CLOCK_FREQ) +#define XT_CLOCK_FREQ configCPU_CLOCK_HZ +#endif + +#if !defined(XT_CLOCK_FREQ) && !defined(XT_BOARD) + #error "XT_CLOCK_FREQ must be defined for the target platform." +#endif + +/* +Default number of timer "ticks" per second (default 100 for 10ms tick). +RTOS may define this in its own way (if applicable) in xtensa_rtos.h. +User may redefine this to an optimal value for the application, either by +editing this here or in xtensa_rtos.h, or compiling with xt-xcc option +"-DXT_TICK_PER_SEC=" where is a suitable number. +*/ +#ifndef XT_TICK_PER_SEC +#define XT_TICK_PER_SEC configTICK_RATE_HZ /* 10 ms tick = 100 ticks per second */ +#endif + +/* +Derivation of clock divisor for timer tick and interrupt (one per tick). +*/ +#ifdef XT_CLOCK_FREQ +#define XT_TICK_DIVISOR (XT_CLOCK_FREQ / XT_TICK_PER_SEC) +#endif + +#ifndef __ASSEMBLER__ +extern unsigned _xt_tick_divisor; +extern void _xt_tick_divisor_init(void); +#endif + +#endif /* XTENSA_TIMER_H */ + diff --git a/tools/sdk/include/json/cJSON.h b/tools/sdk/include/json/cJSON.h new file mode 100644 index 00000000..466d10db --- /dev/null +++ b/tools/sdk/include/json/cJSON.h @@ -0,0 +1,149 @@ +/* + Copyright (c) 2009 Dave Gamble + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef cJSON__h +#define cJSON__h + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* cJSON Types: */ +#define cJSON_False 0 +#define cJSON_True 1 +#define cJSON_NULL 2 +#define cJSON_Number 3 +#define cJSON_String 4 +#define cJSON_Array 5 +#define cJSON_Object 6 + +#define cJSON_IsReference 256 +#define cJSON_StringIsConst 512 + +/* The cJSON structure: */ +typedef struct cJSON { + struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ + struct cJSON *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ + + int type; /* The type of the item, as above. */ + + char *valuestring; /* The item's string, if type==cJSON_String */ + int valueint; /* The item's number, if type==cJSON_Number */ + double valuedouble; /* The item's number, if type==cJSON_Number */ + + char *string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ +} cJSON; + +typedef struct cJSON_Hooks { + void *(*malloc_fn)(size_t sz); + void (*free_fn)(void *ptr); +} cJSON_Hooks; + +/* Supply malloc, realloc and free functions to cJSON */ +extern void cJSON_InitHooks(cJSON_Hooks* hooks); + + +/* Supply a block of JSON, and this returns a cJSON object you can interrogate. Call cJSON_Delete when finished. */ +extern cJSON *cJSON_Parse(const char *value); +/* Render a cJSON entity to text for transfer/storage. Free the char* when finished. */ +extern char *cJSON_Print(cJSON *item); +/* Render a cJSON entity to text for transfer/storage without any formatting. Free the char* when finished. */ +extern char *cJSON_PrintUnformatted(cJSON *item); +/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */ +extern char *cJSON_PrintBuffered(cJSON *item,int prebuffer,int fmt); +/* Delete a cJSON entity and all subentities. */ +extern void cJSON_Delete(cJSON *c); + +/* Returns the number of items in an array (or object). */ +extern int cJSON_GetArraySize(cJSON *array); +/* Retrieve item number "item" from array "array". Returns NULL if unsuccessful. */ +extern cJSON *cJSON_GetArrayItem(cJSON *array,int item); +/* Get item "string" from object. Case insensitive. */ +extern cJSON *cJSON_GetObjectItem(cJSON *object,const char *string); + +/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */ +extern const char *cJSON_GetErrorPtr(void); + +/* These calls create a cJSON item of the appropriate type. */ +extern cJSON *cJSON_CreateNull(void); +extern cJSON *cJSON_CreateTrue(void); +extern cJSON *cJSON_CreateFalse(void); +extern cJSON *cJSON_CreateBool(int b); +extern cJSON *cJSON_CreateNumber(double num); +extern cJSON *cJSON_CreateString(const char *string); +extern cJSON *cJSON_CreateArray(void); +extern cJSON *cJSON_CreateObject(void); + +/* These utilities create an Array of count items. */ +extern cJSON *cJSON_CreateIntArray(const int *numbers,int count); +extern cJSON *cJSON_CreateFloatArray(const float *numbers,int count); +extern cJSON *cJSON_CreateDoubleArray(const double *numbers,int count); +extern cJSON *cJSON_CreateStringArray(const char **strings,int count); + +/* Append item to the specified array/object. */ +extern void cJSON_AddItemToArray(cJSON *array, cJSON *item); +extern void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item); +extern void cJSON_AddItemToObjectCS(cJSON *object,const char *string,cJSON *item); /* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object */ +/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */ +extern void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item); +extern void cJSON_AddItemReferenceToObject(cJSON *object,const char *string,cJSON *item); + +/* Remove/Detatch items from Arrays/Objects. */ +extern cJSON *cJSON_DetachItemFromArray(cJSON *array,int which); +extern void cJSON_DeleteItemFromArray(cJSON *array,int which); +extern cJSON *cJSON_DetachItemFromObject(cJSON *object,const char *string); +extern void cJSON_DeleteItemFromObject(cJSON *object,const char *string); + +/* Update array items. */ +extern void cJSON_InsertItemInArray(cJSON *array,int which,cJSON *newitem); /* Shifts pre-existing items to the right. */ +extern void cJSON_ReplaceItemInArray(cJSON *array,int which,cJSON *newitem); +extern void cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem); + +/* Duplicate a cJSON item */ +extern cJSON *cJSON_Duplicate(cJSON *item,int recurse); +/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will +need to be released. With recurse!=0, it will duplicate any children connected to the item. +The item->next and ->prev pointers are always zero on return from Duplicate. */ + +/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */ +extern cJSON *cJSON_ParseWithOpts(const char *value,const char **return_parse_end,int require_null_terminated); + +extern void cJSON_Minify(char *json); + +/* Macros for creating things quickly. */ +#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull()) +#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue()) +#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse()) +#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b)) +#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n)) +#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s)) + +/* When assigning an integer value, it needs to be propagated to valuedouble too. */ +#define cJSON_SetIntValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val)) +#define cJSON_SetNumberValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val)) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/json/cJSON_Utils.h b/tools/sdk/include/json/cJSON_Utils.h new file mode 100644 index 00000000..b129b062 --- /dev/null +++ b/tools/sdk/include/json/cJSON_Utils.h @@ -0,0 +1,30 @@ +#include "cJSON.h" + +/* Implement RFC6901 (https://tools.ietf.org/html/rfc6901) JSON Pointer spec. */ +cJSON *cJSONUtils_GetPointer(cJSON *object,const char *pointer); + +/* Implement RFC6902 (https://tools.ietf.org/html/rfc6902) JSON Patch spec. */ +cJSON* cJSONUtils_GeneratePatches(cJSON *from,cJSON *to); +void cJSONUtils_AddPatchToArray(cJSON *array,const char *op,const char *path,cJSON *val); /* Utility for generating patch array entries. */ +int cJSONUtils_ApplyPatches(cJSON *object,cJSON *patches); /* Returns 0 for success. */ + +/* +// Note that ApplyPatches is NOT atomic on failure. To implement an atomic ApplyPatches, use: +//int cJSONUtils_AtomicApplyPatches(cJSON **object, cJSON *patches) +//{ +// cJSON *modme=cJSON_Duplicate(*object,1); +// int error=cJSONUtils_ApplyPatches(modme,patches); +// if (!error) {cJSON_Delete(*object);*object=modme;} +// else cJSON_Delete(modme); +// return error; +//} +// Code not added to library since this strategy is a LOT slower. +*/ + +/* Implement RFC7386 (https://tools.ietf.org/html/rfc7396) JSON Merge Patch spec. */ +cJSON* cJSONUtils_MergePatch(cJSON *target, cJSON *patch); /* target will be modified by patch. return value is new ptr for target. */ +cJSON *cJSONUtils_GenerateMergePatch(cJSON *from,cJSON *to); /* generates a patch to move from -> to */ + +char *cJSONUtils_FindPointerFromObjectTo(cJSON *object,cJSON *target); /* Given a root object and a target object, construct a pointer from one to the other. */ + +void cJSONUtils_SortObject(cJSON *object); /* Sorts the members of the object into alphabetical order. */ diff --git a/tools/sdk/include/log/esp_log.h b/tools/sdk/include/log/esp_log.h new file mode 100644 index 00000000..8ca6e241 --- /dev/null +++ b/tools/sdk/include/log/esp_log.h @@ -0,0 +1,209 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef __ESP_LOG_H__ +#define __ESP_LOG_H__ + +#include +#include +#include "sdkconfig.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Logging library + * + * Log library has two ways of managing log verbosity: compile time, set via + * menuconfig, and runtime, using esp_log_set_level function. + * + * At compile time, filtering is done using CONFIG_LOG_DEFAULT_LEVEL macro, set via + * menuconfig. All logging statments for levels higher than CONFIG_LOG_DEFAULT_LEVEL + * will be removed by the preprocessor. + * + * At run time, all logs below CONFIG_LOG_DEFAULT_LEVEL are enabled by default. + * esp_log_set_level function may be used to set logging level per module. + * Modules are identified by their tags, which are human-readable ASCII + * zero-terminated strings. + * + * How to use this library: + * + * In each C file which uses logging functionality, define TAG variable like this: + * + * static const char* TAG = "MyModule"; + * + * then use one of logging macros to produce output, e.g: + * + * ESP_LOGW(TAG, "Baud rate error %.1f%%. Requested: %d baud, actual: %d baud", error * 100, baud_req, baud_real); + * + * Several macros are available for different verbosity levels: + * + * ESP_LOGE — error + * ESP_LOGW — warning + * ESP_LOGI — info + * ESP_LOGD - debug + * ESP_LOGV - verbose + * + * Additionally there is an _EARLY_ variant for each of these macros (e.g. ESP_EARLY_LOGE). + * These variants can run in startup code, before heap allocator and syscalls + * have been initialized. + * When compiling bootloader, normal ESP_LOGx macros fall back to the same implementation + * as ESP_EARLY_LOGx macros. So the only place where ESP_EARLY_LOGx have to be used explicitly + * is the early startup code, such as heap allocator initialization code. + * + * (Note that such distinction would not have been necessary if we would have an + * ets_vprintf function in the ROM. Then it would be possible to switch implementation + * from _EARLY version to normal version on the fly. Unfortunately, ets_vprintf in ROM + * has been inlined by the compiler into ets_printf, so it is not accessible outside.) + * + * To override default verbosity level at file or component scope, define LOG_LOCAL_LEVEL macro. + * At file scope, define it before including esp_log.h, e.g.: + * + * #define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE + * #include "esp_log.h" + * + * At component scope, define it in component makefile: + * + * CFLAGS += -D LOG_LOCAL_LEVEL=ESP_LOG_DEBUG + * + * To configure logging output per module at runtime, add calls to esp_log_set_level function: + * + * esp_log_set_level("*", ESP_LOG_ERROR); // set all components to ERROR level + * esp_log_set_level("wifi", ESP_LOG_WARN); // enable WARN logs from WiFi stack + * esp_log_set_level("dhcpc", ESP_LOG_INFO); // enable INFO logs from DHCP client + * + */ + + +typedef enum { + ESP_LOG_NONE, // No log output + ESP_LOG_ERROR, // Critical errors, software module can not recover on its own + ESP_LOG_WARN, // Error conditions from which recovery measures have been taken + ESP_LOG_INFO, // Information messages which describe normal flow of events + ESP_LOG_DEBUG, // Extra information which is not necessary for normal use (values, pointers, sizes, etc). + ESP_LOG_VERBOSE // Bigger chunks of debugging information, or frequent messages which can potentially flood the output. +} esp_log_level_t; + +typedef int (*vprintf_like_t)(const char *, va_list); + +/** + * @brief Set log level for given tag + * + * If logging for given component has already been enabled, changes previous setting. + * + * @param tag Tag of the log entries to enable. Must be a non-NULL zero terminated string. + * Value "*" resets log level for all tags to the given value. + * + * @param level Selects log level to enable. Only logs at this and lower levels will be shown. + */ +void esp_log_level_set(const char* tag, esp_log_level_t level); + +/** + * @brief Set function used to output log entries + * + * By default, log output goes to UART0. This function can be used to redirect log + * output to some other destination, such as file or network. + * + * @param func Function used for output. Must have same signature as vprintf. + */ +void esp_log_set_vprintf(vprintf_like_t func); + +/** + * @brief Write message into the log + * + * This function is not intended to be used directly. Instead, use one of + * ESP_LOGE, ESP_LOGW, ESP_LOGI, ESP_LOGD, ESP_LOGV macros. + * + * This function or these macros should not be used from an interrupt. + */ +void esp_log_write(esp_log_level_t level, const char* tag, const char* format, ...) __attribute__ ((format (printf, 3, 4))); + + +/** + * @brief Function which returns timestamp to be used in log output + * + * This function is used in expansion of ESP_LOGx macros. + * In the 2nd stage bootloader, and at early application startup stage + * this function uses CPU cycle counter as time source. Later when + * FreeRTOS scheduler start running, it switches to FreeRTOS tick count. + * + * For now, we ignore millisecond counter overflow. + * + * @return timestamp, in milliseconds + */ +uint32_t esp_log_timestamp(); + + +#if CONFIG_LOG_COLORS +#define LOG_COLOR_BLACK "30" +#define LOG_COLOR_RED "31" +#define LOG_COLOR_GREEN "32" +#define LOG_COLOR_BROWN "33" +#define LOG_COLOR_BLUE "34" +#define LOG_COLOR_PURPLE "35" +#define LOG_COLOR_CYAN "36" +#define LOG_COLOR(COLOR) "\033[0;" COLOR "m" +#define LOG_BOLD(COLOR) "\033[1;" COLOR "m" +#define LOG_RESET_COLOR "\033[0m" +#define LOG_COLOR_E LOG_COLOR(LOG_COLOR_RED) +#define LOG_COLOR_W LOG_COLOR(LOG_COLOR_BROWN) +#define LOG_COLOR_I LOG_COLOR(LOG_COLOR_GREEN) +#define LOG_COLOR_D +#define LOG_COLOR_V +#else //CONFIG_LOG_COLORS +#define LOG_COLOR_E +#define LOG_COLOR_W +#define LOG_COLOR_I +#define LOG_COLOR_D +#define LOG_COLOR_V +#define LOG_RESET_COLOR +#endif //CONFIG_LOG_COLORS + +#define LOG_FORMAT(letter, format) LOG_COLOR_ ## letter #letter " (%d) %s: " format LOG_RESET_COLOR "\n" + +#ifndef LOG_LOCAL_LEVEL +#ifndef BOOTLOADER_BUILD +#define LOG_LOCAL_LEVEL ((esp_log_level_t) CONFIG_LOG_DEFAULT_LEVEL) +#else +#define LOG_LOCAL_LEVEL ((esp_log_level_t) CONFIG_LOG_BOOTLOADER_LEVEL) +#endif +#endif + +#define ESP_EARLY_LOGE( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_ERROR) { ets_printf(LOG_FORMAT(E, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +#define ESP_EARLY_LOGW( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_WARN) { ets_printf(LOG_FORMAT(W, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +#define ESP_EARLY_LOGI( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_INFO) { ets_printf(LOG_FORMAT(I, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +#define ESP_EARLY_LOGD( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_DEBUG) { ets_printf(LOG_FORMAT(D, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +#define ESP_EARLY_LOGV( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_VERBOSE) { ets_printf(LOG_FORMAT(V, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } + +#ifndef BOOTLOADER_BUILD +#define ESP_LOGE( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_ERROR) { esp_log_write(ESP_LOG_ERROR, tag, LOG_FORMAT(E, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +#define ESP_LOGW( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_WARN) { esp_log_write(ESP_LOG_WARN, tag, LOG_FORMAT(W, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +#define ESP_LOGI( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_INFO) { esp_log_write(ESP_LOG_INFO, tag, LOG_FORMAT(I, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +#define ESP_LOGD( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_DEBUG) { esp_log_write(ESP_LOG_DEBUG, tag, LOG_FORMAT(D, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +#define ESP_LOGV( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_VERBOSE) { esp_log_write(ESP_LOG_VERBOSE, tag, LOG_FORMAT(V, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +#else +#define ESP_LOGE( tag, format, ... ) ESP_EARLY_LOGE(tag, format, ##__VA_ARGS__) +#define ESP_LOGW( tag, format, ... ) ESP_EARLY_LOGW(tag, format, ##__VA_ARGS__) +#define ESP_LOGI( tag, format, ... ) ESP_EARLY_LOGI(tag, format, ##__VA_ARGS__) +#define ESP_LOGD( tag, format, ... ) ESP_EARLY_LOGD(tag, format, ##__VA_ARGS__) +#define ESP_LOGV( tag, format, ... ) ESP_EARLY_LOGV(tag, format, ##__VA_ARGS__) +#endif // BOOTLOADER_BUILD + +#ifdef __cplusplus +} +#endif + + +#endif /* __ESP_LOG_H__ */ diff --git a/tools/sdk/include/lwip/apps/dhcpserver.h b/tools/sdk/include/lwip/apps/dhcpserver.h new file mode 100644 index 00000000..39781d96 --- /dev/null +++ b/tools/sdk/include/lwip/apps/dhcpserver.h @@ -0,0 +1,200 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef __DHCPS_H__ +#define __DHCPS_H__ + +#include "lwip/ip_addr.h" +//#include "esp_common.h" +#define USE_DNS + +typedef struct dhcps_state{ + s16_t state; +} dhcps_state; + +typedef struct dhcps_msg { + u8_t op, htype, hlen, hops; + u8_t xid[4]; + u16_t secs, flags; + u8_t ciaddr[4]; + u8_t yiaddr[4]; + u8_t siaddr[4]; + u8_t giaddr[4]; + u8_t chaddr[16]; + u8_t sname[64]; + u8_t file[128]; + u8_t options[312]; +}dhcps_msg; + +/** DHCP OPTIONS CODE **/ +typedef enum +{ + /* RFC 1497 Vendor Extensions */ + + PAD = 0, + END = 255, + + SUBNET_MASK = 1, + TIME_OFFSET = 2, + ROUTER = 3, + TIME_SERVER = 4, + NAME_SERVER = 5, + DOMAIN_NAME_SERVER = 6, + LOG_SERVER = 7, + COOKIE_SERVER = 8, + LPR_SERVER = 9, + IMPRESS_SERVER = 10, + RESOURCE_LOCATION_SERVER = 11, + HOST_NAME = 12, + BOOT_FILE_SIZE = 13, + MERIT_DUMP_FILE = 14, + DOMAIN_NAME = 15, + SWAP_SERVER = 16, + ROOT_PATH = 17, + EXTENSIONS_PATH = 18, + + /* IP Layer Parameters per Host */ + + IP_FORWARDING = 19, + NON_LOCAL_SOURCE_ROUTING = 20, + POLICY_FILTER = 21, + MAXIMUM_DATAGRAM_REASSEMBLY_SIZE = 22, + DEFAULT_IP_TIME_TO_LIVE = 23, + PATH_MTU_AGING_TIMEOUT = 24, + PATH_MTU_PLATEAU_TABLE = 25, + + /* IP Layer Parameters per Interface */ + + INTERFACE_MTU = 26, + ALL_SUBNETS_ARE_LOCAL = 27, + BROADCAST_ADDRESS = 28, + PERFORM_MASK_DISCOVERY = 29, + MASK_SUPPLIER = 30, + PERFORM_ROUTER_DISCOVERY = 31, + ROUTER_SOLICITATION_ADDRESS = 32, + STATIC_ROUTE = 33, + + /* Link Layer Parameters per Interface */ + + TRAILER_ENCAPSULATION = 34, + ARP_CACHE_TIMEOUT = 35, + ETHERNET_ENCAPSULATION = 36, + + /* TCP Parameters */ + + TCP_DEFAULT_TTL = 37, + TCP_KEEPALIVE_INTERVAL = 38, + TCP_KEEPALIVE_GARBAGE = 39, + + /* Application and Service Parameters */ + + NETWORK_INFORMATION_SERVICE_DOMAIN = 40, + NETWORK_INFORMATION_SERVERS = 41, + NETWORK_TIME_PROTOCOL_SERVERS = 42, + VENDOR_SPECIFIC_INFORMATION = 43, + NETBIOS_OVER_TCP_IP_NAME_SERVER = 44, + NETBIOS_OVER_TCP_IP_DATAGRAM_DISTRIBUTION_SERVER = 45, + NETBIOS_OVER_TCP_IP_NODE_TYPE = 46, + NETBIOS_OVER_TCP_IP_SCOPE = 47, + X_WINDOW_SYSTEM_FONT_SERVER = 48, + X_WINDOW_SYSTEM_DISPLAY_MANAGER = 49, + NETWORK_INFORMATION_SERVICE_PLUS_DOMAIN = 64, + NETWORK_INFORMATION_SERVICE_PLUS_SERVERS = 65, + MOBILE_IP_HOME_AGENT = 68, + SMTP_SERVER = 69, + POP3_SERVER = 70, + NNTP_SERVER = 71, + DEFAULT_WWW_SERVER = 72, + DEFAULT_FINGER_SERVER = 73, + DEFAULT_IRC_SERVER = 74, + STREETTALK_SERVER = 75, + STREETTALK_DIRECTORY_ASSISTANCE_SERVER = 76, + + /* DHCP Extensions */ + + REQUESTED_IP_ADDRESS = 50, + IP_ADDRESS_LEASE_TIME = 51, + OPTION_OVERLOAD = 52, + TFTP_SERVER_NAME = 66, + BOOTFILE_NAME = 67, + DHCP_MESSAGE_TYPE = 53, + SERVER_IDENTIFIER = 54, + PARAMETER_REQUEST_LIST = 55, + MESSAGE = 56, + MAXIMUM_DHCP_MESSAGE_SIZE = 57, + RENEWAL_T1_TIME_VALUE = 58, + REBINDING_T2_TIME_VALUE = 59, + VENDOR_CLASS_IDENTIFIER = 60, + CLIENT_IDENTIFIER = 61, + + USER_CLASS = 77, + FQDN = 81, + DHCP_AGENT_OPTIONS = 82, + NDS_SERVERS = 85, + NDS_TREE_NAME = 86, + NDS_CONTEXT = 87, + CLIENT_LAST_TRANSACTION_TIME = 91, + ASSOCIATED_IP = 92, + USER_AUTHENTICATION_PROTOCOL = 98, + AUTO_CONFIGURE = 116, + NAME_SERVICE_SEARCH = 117, + SUBNET_SELECTION = 118, + DOMAIN_SEARCH = 119, + CLASSLESS_ROUTE = 121, +} dhcp_msg_option; + +/* Defined in esp_misc.h */ +typedef struct { + bool enable; + ip4_addr_t start_ip; + ip4_addr_t end_ip; +} dhcps_lease_t; + +enum dhcps_offer_option{ + OFFER_START = 0x00, + OFFER_ROUTER = 0x01, + OFFER_END +}; + +#define DHCPS_MAX_LEASE 0x64 +#define DHCPS_LEASE_TIME_DEF (120) + +struct dhcps_pool{ + ip4_addr_t ip; + u8_t mac[6]; + u32_t lease_timer; +}; + +typedef struct _list_node{ + void *pnode; + struct _list_node *pnext; +}list_node; + +typedef u32_t dhcps_time_t; +typedef u8_t dhcps_offer_t; + +typedef struct { + dhcps_offer_t dhcps_offer; + dhcps_time_t dhcps_time; + dhcps_lease_t dhcps_poll; +} dhcps_options_t; + +#define dhcps_router_enabled(offer) ((offer & OFFER_ROUTER) != 0) + +void dhcps_start(struct netif *netif, ip4_addr_t ip); +void dhcps_stop(struct netif *netif); +void *dhcps_option_info(u8_t op_id, u32_t opt_len); +bool dhcp_search_ip_on_mac(u8_t *mac, ip4_addr_t *ip); + +#endif + diff --git a/tools/sdk/include/lwip/apps/sntp/sntp.h b/tools/sdk/include/lwip/apps/sntp/sntp.h new file mode 100644 index 00000000..b0086936 --- /dev/null +++ b/tools/sdk/include/lwip/apps/sntp/sntp.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2007-2009 Frédéric Bernon, Simon Goldschmidt + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Frédéric Bernon, Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_APPS_SNTP_H +#define LWIP_HDR_APPS_SNTP_H + +#include "apps/sntp/sntp_opts.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SNTP operating modes: default is to poll using unicast. + The mode has to be set before calling sntp_init(). */ +#define SNTP_OPMODE_POLL 0 +#define SNTP_OPMODE_LISTENONLY 1 +void sntp_setoperatingmode(u8_t operating_mode); +u8_t sntp_getoperatingmode(void); + +void sntp_init(void); +void sntp_stop(void); +u8_t sntp_enabled(void); + +void sntp_setserver(u8_t idx, const ip_addr_t *addr); +ip_addr_t sntp_getserver(u8_t idx); + +#if SNTP_SERVER_DNS +void sntp_setservername(u8_t idx, char *server); +char *sntp_getservername(u8_t idx); +#endif /* SNTP_SERVER_DNS */ + +#if SNTP_GET_SERVERS_FROM_DHCP +void sntp_servermode_dhcp(int set_servers_from_dhcp); +#else /* SNTP_GET_SERVERS_FROM_DHCP */ +#define sntp_servermode_dhcp(x) +#endif /* SNTP_GET_SERVERS_FROM_DHCP */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_SNTP_H */ diff --git a/tools/sdk/include/lwip/apps/sntp/sntp_opts.h b/tools/sdk/include/lwip/apps/sntp/sntp_opts.h new file mode 100644 index 00000000..c8a39649 --- /dev/null +++ b/tools/sdk/include/lwip/apps/sntp/sntp_opts.h @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2007-2009 Frédéric Bernon, Simon Goldschmidt + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Frédéric Bernon, Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_APPS_SNTP_OPTS_H +#define LWIP_HDR_APPS_SNTP_OPTS_H + +#include "lwip/opt.h" + +/** SNTP macro to change system time in seconds + * Define SNTP_SET_SYSTEM_TIME_US(sec, us) to set the time in microseconds instead of this one + * if you need the additional precision. + */ +#ifndef SNTP_SET_SYSTEM_TIME +#define SNTP_SET_SYSTEM_TIME(sec) LWIP_UNUSED_ARG(sec) +#endif + +/** The maximum number of SNTP servers that can be set */ +#ifndef SNTP_MAX_SERVERS +#define SNTP_MAX_SERVERS LWIP_DHCP_MAX_NTP_SERVERS +#endif + +/** Set this to 1 to implement the callback function called by dhcp when + * NTP servers are received. */ +#ifndef SNTP_GET_SERVERS_FROM_DHCP +#define SNTP_GET_SERVERS_FROM_DHCP LWIP_DHCP_GET_NTP_SRV +#endif + +/* Set this to 1 to support DNS names (or IP address strings) to set sntp servers */ +#ifndef SNTP_SERVER_DNS +#define SNTP_SERVER_DNS 1 +#endif + +/** One server address/name can be defined as default if SNTP_SERVER_DNS == 1: + * #define SNTP_SERVER_ADDRESS "pool.ntp.org" + */ + +/** + * SNTP_DEBUG: Enable debugging for SNTP. + */ +#ifndef SNTP_DEBUG +#define SNTP_DEBUG LWIP_DBG_OFF +#endif + +/** SNTP server port */ +#ifndef SNTP_PORT +#define SNTP_PORT 123 +#endif + +/** Set this to 1 to allow config of SNTP server(s) by DNS name */ +#ifndef SNTP_SERVER_DNS +#define SNTP_SERVER_DNS 0 +#endif + +/** Sanity check: + * Define this to + * - 0 to turn off sanity checks (default; smaller code) + * - >= 1 to check address and port of the response packet to ensure the + * response comes from the server we sent the request to. + * - >= 2 to check returned Originate Timestamp against Transmit Timestamp + * sent to the server (to ensure response to older request). + * - >= 3 @todo: discard reply if any of the LI, Stratum, or Transmit Timestamp + * fields is 0 or the Mode field is not 4 (unicast) or 5 (broadcast). + * - >= 4 @todo: to check that the Root Delay and Root Dispersion fields are each + * greater than or equal to 0 and less than infinity, where infinity is + * currently a cozy number like one second. This check avoids using a + * server whose synchronization source has expired for a very long time. + */ +#ifndef SNTP_CHECK_RESPONSE +#define SNTP_CHECK_RESPONSE 0 +#endif + +/** According to the RFC, this shall be a random delay + * between 1 and 5 minutes (in milliseconds) to prevent load peaks. + * This can be defined to a random generation function, + * which must return the delay in milliseconds as u32_t. + * Turned off by default. + */ +#ifndef SNTP_STARTUP_DELAY +#define SNTP_STARTUP_DELAY 0 +#endif + +/** If you want the startup delay to be a function, define this + * to a function (including the brackets) and define SNTP_STARTUP_DELAY to 1. + */ +#ifndef SNTP_STARTUP_DELAY_FUNC +#define SNTP_STARTUP_DELAY_FUNC SNTP_STARTUP_DELAY +#endif + +/** SNTP receive timeout - in milliseconds + * Also used as retry timeout - this shouldn't be too low. + * Default is 3 seconds. + */ +#ifndef SNTP_RECV_TIMEOUT +#define SNTP_RECV_TIMEOUT 3000 +#endif + +/** SNTP update delay - in milliseconds + * Default is 1 hour. Must not be beolw 15 seconds by specification (i.e. 15000) + */ +#ifndef SNTP_UPDATE_DELAY +#define SNTP_UPDATE_DELAY 3600000 +#endif + +/** SNTP macro to get system time, used with SNTP_CHECK_RESPONSE >= 2 + * to send in request and compare in response. + */ +#ifndef SNTP_GET_SYSTEM_TIME +#define SNTP_GET_SYSTEM_TIME(sec, us) do { (sec) = 0; (us) = 0; } while(0) +#endif + +/** Default retry timeout (in milliseconds) if the response + * received is invalid. + * This is doubled with each retry until SNTP_RETRY_TIMEOUT_MAX is reached. + */ +#ifndef SNTP_RETRY_TIMEOUT +#define SNTP_RETRY_TIMEOUT SNTP_RECV_TIMEOUT +#endif + +/** Maximum retry timeout (in milliseconds). */ +#ifndef SNTP_RETRY_TIMEOUT_MAX +#define SNTP_RETRY_TIMEOUT_MAX (SNTP_RETRY_TIMEOUT * 10) +#endif + +/** Increase retry timeout with every retry sent + * Default is on to conform to RFC. + */ +#ifndef SNTP_RETRY_TIMEOUT_EXP +#define SNTP_RETRY_TIMEOUT_EXP 1 +#endif + +#endif /* LWIP_HDR_APPS_SNTP_OPTS_H */ diff --git a/tools/sdk/include/lwip/arch/cc.h b/tools/sdk/include/lwip/arch/cc.h new file mode 100644 index 00000000..6fc1da18 --- /dev/null +++ b/tools/sdk/include/lwip/arch/cc.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * 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 the Institute 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 INSTITUTE 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 INSTITUTE 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __ARCH_CC_H__ +#define __ARCH_CC_H__ + +#include +#include + +#include "arch/sys_arch.h" + +#define BYTE_ORDER LITTLE_ENDIAN + +typedef uint8_t u8_t; +typedef int8_t s8_t; +typedef uint16_t u16_t; +typedef int16_t s16_t; +typedef uint32_t u32_t; +typedef int32_t s32_t; + +typedef unsigned long mem_ptr_t; +typedef int sys_prot_t; + +#define S16_F "d" +#define U16_F "d" +#define X16_F "x" + +#define S32_F "d" +#define U32_F "d" +#define X32_F "x" + +#define PACK_STRUCT_FIELD(x) x +#define PACK_STRUCT_STRUCT __attribute__((packed)) +#define PACK_STRUCT_BEGIN +#define PACK_STRUCT_END + +#include + +#define LWIP_PLATFORM_DIAG(x) do {printf x;} while(0) +#define LWIP_PLATFORM_ASSERT(x) do {printf(x); sys_arch_assert(__FILE__, __LINE__);} while(0) + +//#define LWIP_DEBUG +#define LWIP_NOASSERT +//#define LWIP_ERROR + +#endif /* __ARCH_CC_H__ */ diff --git a/tools/sdk/include/lwip/arch/perf.h b/tools/sdk/include/lwip/arch/perf.h new file mode 100644 index 00000000..089facac --- /dev/null +++ b/tools/sdk/include/lwip/arch/perf.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * 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 the Institute 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 INSTITUTE 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 INSTITUTE 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __PERF_H__ +#define __PERF_H__ + +#define PERF_START /* null definition */ +#define PERF_STOP(x) /* null definition */ + +#endif /* __PERF_H__ */ diff --git a/tools/sdk/include/lwip/arch/sys_arch.h b/tools/sdk/include/lwip/arch/sys_arch.h new file mode 100644 index 00000000..a8633482 --- /dev/null +++ b/tools/sdk/include/lwip/arch/sys_arch.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __SYS_ARCH_H__ +#define __SYS_ARCH_H__ + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "freertos/semphr.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef xSemaphoreHandle sys_sem_t; +typedef xSemaphoreHandle sys_mutex_t; +typedef xTaskHandle sys_thread_t; + +typedef struct sys_mbox_s { + xQueueHandle os_mbox; + sys_mutex_t lock; + uint8_t alive; +}* sys_mbox_t; + + +#define LWIP_COMPAT_MUTEX 0 + +#if !LWIP_COMPAT_MUTEX +#define sys_mutex_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) +#define sys_mutex_set_invalid( x ) ( ( *x ) = NULL ) +#endif + +#define sys_mbox_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) +#define sys_mbox_set_invalid( x ) ( ( *x ) = NULL ) + +#define sys_sem_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) +#define sys_sem_set_invalid( x ) ( ( *x ) = NULL ) + +void sys_arch_assert(const char *file, int line); +uint32_t system_get_time(void); +void sys_delay_ms(uint32_t ms); +sys_sem_t* sys_thread_sem_init(void); +void sys_thread_sem_deinit(void); +sys_sem_t* sys_thread_sem_get(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __SYS_ARCH_H__ */ + diff --git a/tools/sdk/include/lwip/lwip/api.h b/tools/sdk/include/lwip/lwip/api.h new file mode 100755 index 00000000..985eb76d --- /dev/null +++ b/tools/sdk/include/lwip/lwip/api.h @@ -0,0 +1,368 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_API_H +#define LWIP_HDR_API_H + +#include "lwip/opt.h" + +#if LWIP_NETCONN || LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ +/* Note: Netconn API is always available when sockets are enabled - + * sockets are implemented on top of them */ + +#include /* for size_t */ + +#include "lwip/netbuf.h" +#include "lwip/sys.h" +#include "lwip/ip_addr.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Throughout this file, IP addresses and port numbers are expected to be in + * the same byte order as in the corresponding pcb. + */ + +/* Flags for netconn_write (u8_t) */ +#define NETCONN_NOFLAG 0x00 +#define NETCONN_NOCOPY 0x00 /* Only for source code compatibility */ +#define NETCONN_COPY 0x01 +#define NETCONN_MORE 0x02 +#define NETCONN_DONTBLOCK 0x04 + +/* Flags for struct netconn.flags (u8_t) */ +/** Should this netconn avoid blocking? */ +#define NETCONN_FLAG_NON_BLOCKING 0x02 +/** Was the last connect action a non-blocking one? */ +#define NETCONN_FLAG_IN_NONBLOCKING_CONNECT 0x04 +/** If this is set, a TCP netconn must call netconn_recved() to update + the TCP receive window (done automatically if not set). */ +#define NETCONN_FLAG_NO_AUTO_RECVED 0x08 +/** If a nonblocking write has been rejected before, poll_tcp needs to + check if the netconn is writable again */ +#define NETCONN_FLAG_CHECK_WRITESPACE 0x10 +#if LWIP_IPV6 +/** If this flag is set then only IPv6 communication is allowed on the + netconn. As per RFC#3493 this features defaults to OFF allowing + dual-stack usage by default. */ +#define NETCONN_FLAG_IPV6_V6ONLY 0x20 +#endif /* LWIP_IPV6 */ + + + /* Helpers to process several netconn_types by the same code */ +#define NETCONNTYPE_GROUP(t) ((t)&0xF0) +#define NETCONNTYPE_DATAGRAM(t) ((t)&0xE0) +#if LWIP_IPV6 +#define NETCONN_TYPE_IPV6 0x08 +#define NETCONNTYPE_ISIPV6(t) (((t)&NETCONN_TYPE_IPV6) != 0) +#define NETCONNTYPE_ISUDPLITE(t) (((t)&0xF3) == NETCONN_UDPLITE) +#define NETCONNTYPE_ISUDPNOCHKSUM(t) (((t)&0xF3) == NETCONN_UDPNOCHKSUM) +#else /* LWIP_IPV6 */ +#define NETCONNTYPE_ISUDPLITE(t) ((t) == NETCONN_UDPLITE) +#define NETCONNTYPE_ISUDPNOCHKSUM(t) ((t) == NETCONN_UDPNOCHKSUM) +#endif /* LWIP_IPV6 */ + +/** Protocol family and type of the netconn */ +enum netconn_type { + NETCONN_INVALID = 0, + /* NETCONN_TCP Group */ + NETCONN_TCP = 0x10, +#if LWIP_IPV6 + NETCONN_TCP_IPV6 = NETCONN_TCP | NETCONN_TYPE_IPV6 /* 0x18 */, +#endif /* LWIP_IPV6 */ + /* NETCONN_UDP Group */ + NETCONN_UDP = 0x20, + NETCONN_UDPLITE = 0x21, + NETCONN_UDPNOCHKSUM = 0x22, + +#if LWIP_IPV6 + NETCONN_UDP_IPV6 = NETCONN_UDP | NETCONN_TYPE_IPV6 /* 0x28 */, + NETCONN_UDPLITE_IPV6 = NETCONN_UDPLITE | NETCONN_TYPE_IPV6 /* 0x29 */, + NETCONN_UDPNOCHKSUM_IPV6 = NETCONN_UDPNOCHKSUM | NETCONN_TYPE_IPV6 /* 0x2a */, +#endif /* LWIP_IPV6 */ + + /* NETCONN_RAW Group */ + NETCONN_RAW = 0x40 +#if LWIP_IPV6 + , NETCONN_RAW_IPV6 = NETCONN_RAW | NETCONN_TYPE_IPV6 /* 0x48 */ +#endif /* LWIP_IPV6 */ +}; + +/** Current state of the netconn. Non-TCP netconns are always + * in state NETCONN_NONE! */ +enum netconn_state { + NETCONN_NONE, + NETCONN_WRITE, + NETCONN_LISTEN, + NETCONN_CONNECT, + NETCONN_CLOSE +}; + +/** Use to inform the callback function about changes */ +enum netconn_evt { + NETCONN_EVT_RCVPLUS, + NETCONN_EVT_RCVMINUS, + NETCONN_EVT_SENDPLUS, + NETCONN_EVT_SENDMINUS, + NETCONN_EVT_ERROR +}; + +#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) +/** Used for netconn_join_leave_group() */ +enum netconn_igmp { + NETCONN_JOIN, + NETCONN_LEAVE +}; +#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ + +#if LWIP_DNS +/* Used for netconn_gethostbyname_addrtype(), these should match the DNS_ADDRTYPE defines in dns.h */ +#define NETCONN_DNS_DEFAULT NETCONN_DNS_IPV4_IPV6 +#define NETCONN_DNS_IPV4 0 +#define NETCONN_DNS_IPV6 1 +#define NETCONN_DNS_IPV4_IPV6 2 /* try to resolve IPv4 first, try IPv6 if IPv4 fails only */ +#define NETCONN_DNS_IPV6_IPV4 3 /* try to resolve IPv6 first, try IPv4 if IPv6 fails only */ +#endif /* LWIP_DNS */ + +/* forward-declare some structs to avoid to include their headers */ +struct ip_pcb; +struct tcp_pcb; +struct udp_pcb; +struct raw_pcb; +struct netconn; +struct api_msg_msg; + +/** A callback prototype to inform about events for a netconn */ +typedef void (* netconn_callback)(struct netconn *, enum netconn_evt, u16_t len); + +/** A netconn descriptor */ +struct netconn { + /** type of the netconn (TCP, UDP or RAW) */ + enum netconn_type type; + /** current state of the netconn */ + enum netconn_state state; + /** the lwIP internal protocol control block */ + union { + struct ip_pcb *ip; + struct tcp_pcb *tcp; + struct udp_pcb *udp; + struct raw_pcb *raw; + } pcb; + /** the last error this netconn had */ + err_t last_err; + +#if !LWIP_NETCONN_SEM_PER_THREAD + /** sem that is used to synchronously execute functions in the core context */ + sys_sem_t op_completed; + +#ifdef LWIP_ESP8266 + sys_sem_t snd_op_completed; //only for snd semphore +#endif + +#endif + + /** mbox where received packets are stored until they are fetched + by the netconn application thread (can grow quite big) */ + sys_mbox_t recvmbox; +#if LWIP_TCP + /** mbox where new connections are stored until processed + by the application thread */ + sys_mbox_t acceptmbox; +#endif /* LWIP_TCP */ + /** only used for socket layer */ +#if LWIP_SOCKET + int socket; +#endif /* LWIP_SOCKET */ +#if LWIP_SO_SNDTIMEO + /** timeout to wait for sending data (which means enqueueing data for sending + in internal buffers) in milliseconds */ + s32_t send_timeout; +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVTIMEO + /** timeout in milliseconds to wait for new data to be received + (or connections to arrive for listening netconns) */ + int recv_timeout; +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVBUF + /** maximum amount of bytes queued in recvmbox + not used for TCP: adjust TCP_WND instead! */ + int recv_bufsize; + /** number of bytes currently in recvmbox to be received, + tested against recv_bufsize to limit bytes on recvmbox + for UDP and RAW, used for FIONREAD */ + int recv_avail; +#endif /* LWIP_SO_RCVBUF */ +#if LWIP_SO_LINGER + /** values <0 mean linger is disabled, values > 0 are seconds to linger */ + s16_t linger; +#endif /* LWIP_SO_LINGER */ + /** flags holding more netconn-internal state, see NETCONN_FLAG_* defines */ + u8_t flags; +#if LWIP_TCP + /** TCP: when data passed to netconn_write doesn't fit into the send buffer, + this temporarily stores how much is already sent. */ + size_t write_offset; + /** TCP: when data passed to netconn_write doesn't fit into the send buffer, + this temporarily stores the message. + Also used during connect and close. */ + struct api_msg_msg *current_msg; +#endif /* LWIP_TCP */ + /** A callback function that is informed about events for this netconn */ + netconn_callback callback; +}; + +/** Register an Network connection event */ +#define API_EVENT(c,e,l) if (c->callback) { \ + (*c->callback)(c, e, l); \ + } + +/** Set conn->last_err to err but don't overwrite fatal errors */ +#define NETCONN_SET_SAFE_ERR(conn, err) do { if ((conn) != NULL) { \ + SYS_ARCH_DECL_PROTECT(netconn_set_safe_err_lev); \ + SYS_ARCH_PROTECT(netconn_set_safe_err_lev); \ + if (!ERR_IS_FATAL((conn)->last_err)) { \ + (conn)->last_err = err; \ + } \ + SYS_ARCH_UNPROTECT(netconn_set_safe_err_lev); \ +}} while(0); + +/* Network connection functions: */ +#define netconn_new(t) netconn_new_with_proto_and_callback(t, 0, NULL) +#define netconn_new_with_callback(t, c) netconn_new_with_proto_and_callback(t, 0, c) +struct netconn *netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, + netconn_callback callback); +err_t netconn_delete(struct netconn *conn); +/** Get the type of a netconn (as enum netconn_type). */ +#define netconn_type(conn) (conn->type) + +err_t netconn_getaddr(struct netconn *conn, ip_addr_t *addr, + u16_t *port, u8_t local); +#define netconn_peer(c,i,p) netconn_getaddr(c,i,p,0) +#define netconn_addr(c,i,p) netconn_getaddr(c,i,p,1) + +err_t netconn_bind(struct netconn *conn, const ip_addr_t *addr, u16_t port); +err_t netconn_connect(struct netconn *conn, const ip_addr_t *addr, u16_t port); +err_t netconn_disconnect (struct netconn *conn); +err_t netconn_listen_with_backlog(struct netconn *conn, u8_t backlog); +#define netconn_listen(conn) netconn_listen_with_backlog(conn, TCP_DEFAULT_LISTEN_BACKLOG) +err_t netconn_accept(struct netconn *conn, struct netconn **new_conn); +err_t netconn_recv(struct netconn *conn, struct netbuf **new_buf); +err_t netconn_recv_tcp_pbuf(struct netconn *conn, struct pbuf **new_buf); +void netconn_recved(struct netconn *conn, u32_t length); +err_t netconn_sendto(struct netconn *conn, struct netbuf *buf, + const ip_addr_t *addr, u16_t port); +err_t netconn_send(struct netconn *conn, struct netbuf *buf); +err_t netconn_write_partly(struct netconn *conn, const void *dataptr, size_t size, + u8_t apiflags, size_t *bytes_written); +#define netconn_write(conn, dataptr, size, apiflags) \ + netconn_write_partly(conn, dataptr, size, apiflags, NULL) +err_t netconn_close(struct netconn *conn); +err_t netconn_shutdown(struct netconn *conn, u8_t shut_rx, u8_t shut_tx); + +#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) +err_t netconn_join_leave_group(struct netconn *conn, const ip_addr_t *multiaddr, + const ip_addr_t *netif_addr, enum netconn_igmp join_or_leave); +#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ +#if LWIP_DNS +#if LWIP_IPV4 && LWIP_IPV6 +err_t netconn_gethostbyname_addrtype(const char *name, ip_addr_t *addr, u8_t dns_addrtype); +#define netconn_gethostbyname(name, addr) netconn_gethostbyname_addrtype(name, addr, NETCONN_DNS_DEFAULT) +#else /* LWIP_IPV4 && LWIP_IPV6 */ +err_t netconn_gethostbyname(const char *name, ip_addr_t *addr); +#define netconn_gethostbyname_addrtype(name, addr, dns_addrtype) netconn_gethostbyname(name, addr) +#endif /* LWIP_IPV4 && LWIP_IPV6 */ +#endif /* LWIP_DNS */ + +#define netconn_err(conn) ((conn)->last_err) +#define netconn_recv_bufsize(conn) ((conn)->recv_bufsize) + +/** Set the blocking status of netconn calls (@todo: write/send is missing) */ +#define netconn_set_nonblocking(conn, val) do { if(val) { \ + (conn)->flags |= NETCONN_FLAG_NON_BLOCKING; \ +} else { \ + (conn)->flags &= ~ NETCONN_FLAG_NON_BLOCKING; }} while(0) +/** Get the blocking status of netconn calls (@todo: write/send is missing) */ +#define netconn_is_nonblocking(conn) (((conn)->flags & NETCONN_FLAG_NON_BLOCKING) != 0) + +/** TCP: Set the no-auto-recved status of netconn calls (see NETCONN_FLAG_NO_AUTO_RECVED) */ +#define netconn_set_noautorecved(conn, val) do { if(val) { \ + (conn)->flags |= NETCONN_FLAG_NO_AUTO_RECVED; \ +} else { \ + (conn)->flags &= ~ NETCONN_FLAG_NO_AUTO_RECVED; }} while(0) +/** TCP: Get the no-auto-recved status of netconn calls (see NETCONN_FLAG_NO_AUTO_RECVED) */ +#define netconn_get_noautorecved(conn) (((conn)->flags & NETCONN_FLAG_NO_AUTO_RECVED) != 0) + +#if LWIP_IPV6 +/** TCP: Set the IPv6 ONLY status of netconn calls (see NETCONN_FLAG_IPV6_V6ONLY) */ +#define netconn_set_ipv6only(conn, val) do { if(val) { \ + (conn)->flags |= NETCONN_FLAG_IPV6_V6ONLY; \ +} else { \ + (conn)->flags &= ~ NETCONN_FLAG_IPV6_V6ONLY; }} while(0) +/** TCP: Get the IPv6 ONLY status of netconn calls (see NETCONN_FLAG_IPV6_V6ONLY) */ +#define netconn_get_ipv6only(conn) (((conn)->flags & NETCONN_FLAG_IPV6_V6ONLY) != 0) +#endif /* LWIP_IPV6 */ + +#if LWIP_SO_SNDTIMEO +/** Set the send timeout in milliseconds */ +#define netconn_set_sendtimeout(conn, timeout) ((conn)->send_timeout = (timeout)) +/** Get the send timeout in milliseconds */ +#define netconn_get_sendtimeout(conn) ((conn)->send_timeout) +#endif /* LWIP_SO_SNDTIMEO */ +#if LWIP_SO_RCVTIMEO +/** Set the receive timeout in milliseconds */ +#define netconn_set_recvtimeout(conn, timeout) ((conn)->recv_timeout = (timeout)) +/** Get the receive timeout in milliseconds */ +#define netconn_get_recvtimeout(conn) ((conn)->recv_timeout) +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVBUF +/** Set the receive buffer in bytes */ +#define netconn_set_recvbufsize(conn, recvbufsize) ((conn)->recv_bufsize = (recvbufsize)) +/** Get the receive buffer in bytes */ +#define netconn_get_recvbufsize(conn) ((conn)->recv_bufsize) +#endif /* LWIP_SO_RCVBUF*/ + +#if LWIP_NETCONN_SEM_PER_THREAD +void netconn_thread_init(void); +void netconn_thread_cleanup(void); +#else /* LWIP_NETCONN_SEM_PER_THREAD */ +#define netconn_thread_init() +#define netconn_thread_cleanup() +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETCONN || LWIP_SOCKET */ + +#endif /* LWIP_HDR_API_H */ diff --git a/tools/sdk/include/lwip/lwip/arch.h b/tools/sdk/include/lwip/lwip/arch.h new file mode 100755 index 00000000..7b99c260 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/arch.h @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_ARCH_H +#define LWIP_HDR_ARCH_H + +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 1234 +#endif + +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 4321 +#endif + +#include "arch/cc.h" + +/** Temporary: define format string for size_t if not defined in cc.h */ +#ifndef SZT_F +#define SZT_F U32_F +#endif /* SZT_F */ +/** Temporary upgrade helper: define format string for u8_t as hex if not + defined in cc.h */ +#ifndef X8_F +#define X8_F "02x" +#endif /* X8_F */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef PACK_STRUCT_BEGIN +#define PACK_STRUCT_BEGIN +#endif /* PACK_STRUCT_BEGIN */ + +#ifndef PACK_STRUCT_END +#define PACK_STRUCT_END +#endif /* PACK_STRUCT_END */ + +#ifndef PACK_STRUCT_STRUCT +#define PACK_STRUCT_STRUCT +#endif /* PACK_STRUCT_STRUCT */ + +#ifndef PACK_STRUCT_FIELD +#define PACK_STRUCT_FIELD(x) x +#endif /* PACK_STRUCT_FIELD */ + +/* Used for struct fields of u8_t, + * where some compilers warn that packing is not necessary */ +#ifndef PACK_STRUCT_FLD_8 +#define PACK_STRUCT_FLD_8(x) PACK_STRUCT_FIELD(x) +#endif /* PACK_STRUCT_FLD_8 */ + +/* Used for struct fields of that are packed structs themself, + * where some compilers warn that packing is not necessary */ +#ifndef PACK_STRUCT_FLD_S +#define PACK_STRUCT_FLD_S(x) PACK_STRUCT_FIELD(x) +#endif /* PACK_STRUCT_FLD_S */ + + +#ifndef LWIP_UNUSED_ARG +#define LWIP_UNUSED_ARG(x) (void)x +#endif /* LWIP_UNUSED_ARG */ + + +#ifdef LWIP_PROVIDE_ERRNO + +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Arg list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Math argument out of domain of func */ +#define ERANGE 34 /* Math result not representable */ +#define EDEADLK 35 /* Resource deadlock would occur */ +#define ENAMETOOLONG 36 /* File name too long */ +#define ENOLCK 37 /* No record locks available */ +#define ENOSYS 38 /* Function not implemented */ +#define ENOTEMPTY 39 /* Directory not empty */ +#define ELOOP 40 /* Too many symbolic links encountered */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ +#define ENOMSG 42 /* No message of desired type */ +#define EIDRM 43 /* Identifier removed */ +#define ECHRNG 44 /* Channel number out of range */ +#define EL2NSYNC 45 /* Level 2 not synchronized */ +#define EL3HLT 46 /* Level 3 halted */ +#define EL3RST 47 /* Level 3 reset */ +#define ELNRNG 48 /* Link number out of range */ +#define EUNATCH 49 /* Protocol driver not attached */ +#define ENOCSI 50 /* No CSI structure available */ +#define EL2HLT 51 /* Level 2 halted */ +#define EBADE 52 /* Invalid exchange */ +#define EBADR 53 /* Invalid request descriptor */ +#define EXFULL 54 /* Exchange full */ +#define ENOANO 55 /* No anode */ +#define EBADRQC 56 /* Invalid request code */ +#define EBADSLT 57 /* Invalid slot */ + +#define EDEADLOCK EDEADLK + +#define EBFONT 59 /* Bad font file format */ +#define ENOSTR 60 /* Device not a stream */ +#define ENODATA 61 /* No data available */ +#define ETIME 62 /* Timer expired */ +#define ENOSR 63 /* Out of streams resources */ +#define ENONET 64 /* Machine is not on the network */ +#define ENOPKG 65 /* Package not installed */ +#define EREMOTE 66 /* Object is remote */ +#define ENOLINK 67 /* Link has been severed */ +#define EADV 68 /* Advertise error */ +#define ESRMNT 69 /* Srmount error */ +#define ECOMM 70 /* Communication error on send */ +#define EPROTO 71 /* Protocol error */ +#define EMULTIHOP 72 /* Multihop attempted */ +#define EDOTDOT 73 /* RFS specific error */ +#define EBADMSG 74 /* Not a data message */ +#define EOVERFLOW 75 /* Value too large for defined data type */ +#define ENOTUNIQ 76 /* Name not unique on network */ +#define EBADFD 77 /* File descriptor in bad state */ +#define EREMCHG 78 /* Remote address changed */ +#define ELIBACC 79 /* Can not access a needed shared library */ +#define ELIBBAD 80 /* Accessing a corrupted shared library */ +#define ELIBSCN 81 /* .lib section in a.out corrupted */ +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#define ELIBEXEC 83 /* Cannot exec a shared library directly */ +#define EILSEQ 84 /* Illegal byte sequence */ +#define ERESTART 85 /* Interrupted system call should be restarted */ +#define ESTRPIPE 86 /* Streams pipe error */ +#define EUSERS 87 /* Too many users */ +#define ENOTSOCK 88 /* Socket operation on non-socket */ +#define EDESTADDRREQ 89 /* Destination address required */ +#define EMSGSIZE 90 /* Message too long */ +#define EPROTOTYPE 91 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 92 /* Protocol not available */ +#define EPROTONOSUPPORT 93 /* Protocol not supported */ +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ +#define EPFNOSUPPORT 96 /* Protocol family not supported */ +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ +#define EADDRINUSE 98 /* Address already in use */ +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ +#define ENETDOWN 100 /* Network is down */ +#define ENETUNREACH 101 /* Network is unreachable */ +#define ENETRESET 102 /* Network dropped connection because of reset */ +#define ECONNABORTED 103 /* Software caused connection abort */ +#define ECONNRESET 104 /* Connection reset by peer */ +#define ENOBUFS 105 /* No buffer space available */ +#define EISCONN 106 /* Transport endpoint is already connected */ +#define ENOTCONN 107 /* Transport endpoint is not connected */ +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ +#define ETOOMANYREFS 109 /* Too many references: cannot splice */ +#define ETIMEDOUT 110 /* Connection timed out */ +#define ECONNREFUSED 111 /* Connection refused */ +#define EHOSTDOWN 112 /* Host is down */ +#define EHOSTUNREACH 113 /* No route to host */ +#define EALREADY 114 /* Operation already in progress */ +#define EINPROGRESS 115 /* Operation now in progress */ +#define ESTALE 116 /* Stale NFS file handle */ +#define EUCLEAN 117 /* Structure needs cleaning */ +#define ENOTNAM 118 /* Not a XENIX named type file */ +#define ENAVAIL 119 /* No XENIX semaphores available */ +#define EISNAM 120 /* Is a named type file */ +#define EREMOTEIO 121 /* Remote I/O error */ +#define EDQUOT 122 /* Quota exceeded */ + +#define ENOMEDIUM 123 /* No medium found */ +#define EMEDIUMTYPE 124 /* Wrong medium type */ + +#ifndef errno +extern int errno; +#endif + +#endif /* LWIP_PROVIDE_ERRNO */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_ARCH_H */ diff --git a/tools/sdk/include/lwip/lwip/autoip.h b/tools/sdk/include/lwip/lwip/autoip.h new file mode 100755 index 00000000..c89fe3ff --- /dev/null +++ b/tools/sdk/include/lwip/lwip/autoip.h @@ -0,0 +1,124 @@ +/** + * @file + * + * AutoIP Automatic LinkLocal IP Configuration + */ + +/* + * + * Copyright (c) 2007 Dominik Spies + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * Author: Dominik Spies + * + * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform + * with RFC 3927. + * + * + * Please coordinate changes and requests with Dominik Spies + * + */ + +#ifndef LWIP_HDR_AUTOIP_H +#define LWIP_HDR_AUTOIP_H + +#include "lwip/opt.h" + +#if LWIP_IPV4 && LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netif.h" +/* #include "lwip/udp.h" */ +#include "netif/etharp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* AutoIP Timing */ +#define AUTOIP_TMR_INTERVAL 100 +#define AUTOIP_TICKS_PER_SECOND (1000 / AUTOIP_TMR_INTERVAL) + +/* RFC 3927 Constants */ +#define PROBE_WAIT 1 /* second (initial random delay) */ +#define PROBE_MIN 1 /* second (minimum delay till repeated probe) */ +#define PROBE_MAX 2 /* seconds (maximum delay till repeated probe) */ +#define PROBE_NUM 3 /* (number of probe packets) */ +#define ANNOUNCE_NUM 2 /* (number of announcement packets) */ +#define ANNOUNCE_INTERVAL 2 /* seconds (time between announcement packets) */ +#define ANNOUNCE_WAIT 2 /* seconds (delay before announcing) */ +#define MAX_CONFLICTS 10 /* (max conflicts before rate limiting) */ +#define RATE_LIMIT_INTERVAL 60 /* seconds (delay between successive attempts) */ +#define DEFEND_INTERVAL 10 /* seconds (min. wait between defensive ARPs) */ + +/* AutoIP client states */ +#define AUTOIP_STATE_OFF 0 +#define AUTOIP_STATE_PROBING 1 +#define AUTOIP_STATE_ANNOUNCING 2 +#define AUTOIP_STATE_BOUND 3 + +struct autoip +{ + ip4_addr_t llipaddr; /* the currently selected, probed, announced or used LL IP-Address */ + u8_t state; /* current AutoIP state machine state */ + u8_t sent_num; /* sent number of probes or announces, dependent on state */ + u16_t ttw; /* ticks to wait, tick is AUTOIP_TMR_INTERVAL long */ + u8_t lastconflict; /* ticks until a conflict can be solved by defending */ + u8_t tried_llipaddr; /* total number of probed/used Link Local IP-Addresses */ +}; + + +#define autoip_init() /* Compatibility define, no init needed. */ + +/** Set a struct autoip allocated by the application to work with */ +void autoip_set_struct(struct netif *netif, struct autoip *autoip); + +/** Remove a struct autoip previously set to the netif using autoip_set_struct() */ +#define autoip_remove_struct(netif) do { (netif)->autoip = NULL; } while (0) + +/** Start AutoIP client */ +err_t autoip_start(struct netif *netif); + +/** Stop AutoIP client */ +err_t autoip_stop(struct netif *netif); + +/** Handles every incoming ARP Packet, called by etharp_arp_input */ +void autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr); + +/** Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds */ +void autoip_tmr(void); + +/** Handle a possible change in the network configuration */ +void autoip_network_changed(struct netif *netif); + +/** check if AutoIP supplied netif->ip_addr */ +u8_t autoip_supplied_address(struct netif *netif); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 && LWIP_AUTOIP */ + +#endif /* LWIP_HDR_AUTOIP_H */ diff --git a/tools/sdk/include/lwip/lwip/debug.h b/tools/sdk/include/lwip/lwip/debug.h new file mode 100755 index 00000000..973a633d --- /dev/null +++ b/tools/sdk/include/lwip/lwip/debug.h @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_DEBUG_H +#define LWIP_HDR_DEBUG_H + +#include "lwip/arch.h" +#include "lwip/opt.h" + +/** lower two bits indicate debug level + * - 0 all + * - 1 warning + * - 2 serious + * - 3 severe + */ +#define LWIP_DBG_LEVEL_ALL 0x00 +#define LWIP_DBG_LEVEL_OFF LWIP_DBG_LEVEL_ALL /* compatibility define only */ +#define LWIP_DBG_LEVEL_WARNING 0x01 /* bad checksums, dropped packets, ... */ +#define LWIP_DBG_LEVEL_SERIOUS 0x02 /* memory allocation failures, ... */ +#define LWIP_DBG_LEVEL_SEVERE 0x03 +#define LWIP_DBG_MASK_LEVEL 0x03 + +/** flag for LWIP_DEBUGF to enable that debug message */ +#define LWIP_DBG_ON 0x80U +/** flag for LWIP_DEBUGF to disable that debug message */ +#define LWIP_DBG_OFF 0x00U + +/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */ +#define LWIP_DBG_TRACE 0x40U +/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */ +#define LWIP_DBG_STATE 0x20U +/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */ +#define LWIP_DBG_FRESH 0x10U +/** flag for LWIP_DEBUGF to halt after printing this debug message */ +#define LWIP_DBG_HALT 0x08U + +/** + * LWIP_NOASSERT: Disable LWIP_ASSERT checks. + * -- To disable assertions define LWIP_NOASSERT in arch/cc.h. + */ +#ifndef LWIP_NOASSERT +#define LWIP_ASSERT(message, assertion) do { if(!(assertion)) \ + LWIP_PLATFORM_ASSERT(message); } while(0) +#ifndef LWIP_PLATFORM_ASSERT +#error "If you want to use LWIP_ASSERT, LWIP_PLATFORM_ASSERT(message) needs to be defined in your arch/cc.h" +#endif +#else /* LWIP_NOASSERT */ +#define LWIP_ASSERT(message, assertion) +#endif /* LWIP_NOASSERT */ + +/** if "expression" isn't true, then print "message" and execute "handler" expression */ +#ifndef LWIP_ERROR +#ifndef LWIP_NOASSERT +#define LWIP_PLATFORM_ERROR(message) LWIP_PLATFORM_ASSERT(message) +#elif defined LWIP_DEBUG +#define LWIP_PLATFORM_ERROR(message) LWIP_PLATFORM_DIAG((message)) +#else +#define LWIP_PLATFORM_ERROR(message) +#endif + +#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ + LWIP_PLATFORM_ERROR(message); handler;}} while(0) +#endif /* LWIP_ERROR */ + +#ifdef LWIP_DEBUG +#ifndef LWIP_PLATFORM_DIAG +#error "If you want to use LWIP_DEBUG, LWIP_PLATFORM_DIAG(message) needs to be defined in your arch/cc.h" +#endif +/** print debug message only if debug message type is enabled... + * AND is of correct type AND is at least LWIP_DBG_LEVEL + */ +#define LWIP_DEBUGF(debug, message) do { \ + if ( \ + ((debug) & LWIP_DBG_ON) && \ + ((debug) & LWIP_DBG_TYPES_ON) && \ + ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \ + LWIP_PLATFORM_DIAG(message); \ + if ((debug) & LWIP_DBG_HALT) { \ + while(1); \ + } \ + } \ + } while(0) + +#else /* LWIP_DEBUG */ +#define LWIP_DEBUGF(debug, message) +#endif /* LWIP_DEBUG */ + +#endif /* LWIP_HDR_DEBUG_H */ + diff --git a/tools/sdk/include/lwip/lwip/def.h b/tools/sdk/include/lwip/lwip/def.h new file mode 100755 index 00000000..49571363 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/def.h @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_DEF_H +#define LWIP_HDR_DEF_H + +/* arch.h might define NULL already */ +#include "lwip/arch.h" +#include "lwip/opt.h" +#if LWIP_PERF +#include "arch/perf.h" +#else /* LWIP_PERF */ +#define PERF_START /* null definition */ +#define PERF_STOP(x) /* null definition */ +#endif /* LWIP_PERF */ + +#ifdef __cplusplus +extern "C" { +#endif + +#define LWIP_MAX(x , y) (((x) > (y)) ? (x) : (y)) +#define LWIP_MIN(x , y) (((x) < (y)) ? (x) : (y)) + +/* Get the number of entries in an array ('x' must NOT be a pointer!) */ +#define LWIP_ARRAYSIZE(x) (sizeof(x)/sizeof((x)[0])) + +#ifndef NULL +#define NULL ((void *)0) +#endif + +/* Endianess-optimized shifting of two u8_t to create one u16_t */ +#if BYTE_ORDER == LITTLE_ENDIAN +#define LWIP_MAKE_U16(a, b) ((a << 8) | b) +#else +#define LWIP_MAKE_U16(a, b) ((b << 8) | a) +#endif + +#ifndef LWIP_PLATFORM_BYTESWAP +#define LWIP_PLATFORM_BYTESWAP 0 +#endif + +#ifndef LWIP_PREFIX_BYTEORDER_FUNCS +/* workaround for naming collisions on some platforms */ + +#ifdef htons +#undef htons +#endif /* htons */ +#ifdef htonl +#undef htonl +#endif /* htonl */ +#ifdef ntohs +#undef ntohs +#endif /* ntohs */ +#ifdef ntohl +#undef ntohl +#endif /* ntohl */ + +#define htons(x) lwip_htons(x) +#define ntohs(x) lwip_ntohs(x) +#define htonl(x) lwip_htonl(x) +#define ntohl(x) lwip_ntohl(x) +#endif /* LWIP_PREFIX_BYTEORDER_FUNCS */ + +#if BYTE_ORDER == BIG_ENDIAN +#define lwip_htons(x) (x) +#define lwip_ntohs(x) (x) +#define lwip_htonl(x) (x) +#define lwip_ntohl(x) (x) +#define PP_HTONS(x) (x) +#define PP_NTOHS(x) (x) +#define PP_HTONL(x) (x) +#define PP_NTOHL(x) (x) +#else /* BYTE_ORDER != BIG_ENDIAN */ +#if LWIP_PLATFORM_BYTESWAP +#define lwip_htons(x) LWIP_PLATFORM_HTONS(x) +#define lwip_ntohs(x) LWIP_PLATFORM_HTONS(x) +#define lwip_htonl(x) LWIP_PLATFORM_HTONL(x) +#define lwip_ntohl(x) LWIP_PLATFORM_HTONL(x) +#else /* LWIP_PLATFORM_BYTESWAP */ +u16_t lwip_htons(u16_t x); +u16_t lwip_ntohs(u16_t x); +u32_t lwip_htonl(u32_t x); +u32_t lwip_ntohl(u32_t x); +#endif /* LWIP_PLATFORM_BYTESWAP */ + +/* These macros should be calculated by the preprocessor and are used + with compile-time constants only (so that there is no little-endian + overhead at runtime). */ +#define PP_HTONS(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8)) +#define PP_NTOHS(x) PP_HTONS(x) +#define PP_HTONL(x) ((((x) & 0xff) << 24) | \ + (((x) & 0xff00) << 8) | \ + (((x) & 0xff0000UL) >> 8) | \ + (((x) & 0xff000000UL) >> 24)) +#define PP_NTOHL(x) PP_HTONL(x) + +#endif /* BYTE_ORDER == BIG_ENDIAN */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_DEF_H */ + diff --git a/tools/sdk/include/lwip/lwip/dhcp.h b/tools/sdk/include/lwip/lwip/dhcp.h new file mode 100755 index 00000000..2d8926ec --- /dev/null +++ b/tools/sdk/include/lwip/lwip/dhcp.h @@ -0,0 +1,306 @@ +/* + * Copyright (c) 2001-2004 Leon Woestenberg + * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Leon Woestenberg + * + */ +#ifndef LWIP_HDR_DHCP_H +#define LWIP_HDR_DHCP_H + +#include "lwip/opt.h" + +#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netif.h" +#include "lwip/udp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** period (in seconds) of the application calling dhcp_coarse_tmr() */ +#define DHCP_COARSE_TIMER_SECS 60 +/** period (in milliseconds) of the application calling dhcp_coarse_tmr() */ +#define DHCP_COARSE_TIMER_MSECS (DHCP_COARSE_TIMER_SECS * 1000UL) +/** period (in milliseconds) of the application calling dhcp_fine_tmr() */ +#define DHCP_FINE_TIMER_MSECS 500 + +#define DHCP_CHADDR_LEN 16U +#define DHCP_SNAME_LEN 64U +#define DHCP_FILE_LEN 128U + +struct dhcp +{ + /** transaction identifier of last sent request */ + u32_t xid; + /** incoming msg */ + struct dhcp_msg *msg_in; + /** track PCB allocation state */ + u8_t pcb_allocated; + /** current DHCP state machine state */ + u8_t state; + /** retries of current request */ + u8_t tries; +#if LWIP_DHCP_AUTOIP_COOP + u8_t autoip_coop_state; +#endif + u8_t subnet_mask_given; + + struct pbuf *p_out; /* pbuf of outcoming msg */ + struct dhcp_msg *msg_out; /* outgoing msg */ + u16_t options_out_len; /* outgoing msg options length */ + u16_t request_timeout; /* #ticks with period DHCP_FINE_TIMER_SECS for request timeout */ + u16_t t1_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for renewal time */ + u16_t t2_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for rebind time */ + u16_t t1_renew_time; /* #ticks with period DHCP_COARSE_TIMER_SECS until next renew try */ + u16_t t2_rebind_time; /* #ticks with period DHCP_COARSE_TIMER_SECS until next rebind try */ + u16_t lease_used; /* #ticks with period DHCP_COARSE_TIMER_SECS since last received DHCP ack */ + u16_t t0_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for lease time */ + ip_addr_t server_ip_addr; /* dhcp server address that offered this lease (ip_addr_t because passed to UDP) */ + ip4_addr_t offered_ip_addr; + ip4_addr_t offered_sn_mask; + ip4_addr_t offered_gw_addr; + + u32_t offered_t0_lease; /* lease period (in seconds) */ + u32_t offered_t1_renew; /* recommended renew time (usually 50% of lease period) */ + u32_t offered_t2_rebind; /* recommended rebind time (usually 87.5 of lease period) */ +#if LWIP_DHCP_BOOTP_FILE + ip_addr_t offered_si_addr; + char boot_file_name[DHCP_FILE_LEN]; +#endif /* LWIP_DHCP_BOOTPFILE */ + + /* Espressif add start. */ + void (*cb)(void); /* callback for dhcp, add a parameter to show dhcp status if needed */ + /* Espressif add end. */ +}; + +/* MUST be compiled with "pack structs" or equivalent! */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** minimum set of fields of any DHCP message */ +struct dhcp_msg +{ + PACK_STRUCT_FLD_8(u8_t op); + PACK_STRUCT_FLD_8(u8_t htype); + PACK_STRUCT_FLD_8(u8_t hlen); + PACK_STRUCT_FLD_8(u8_t hops); + PACK_STRUCT_FIELD(u32_t xid); + PACK_STRUCT_FIELD(u16_t secs); + PACK_STRUCT_FIELD(u16_t flags); + PACK_STRUCT_FLD_S(ip4_addr_p_t ciaddr); + PACK_STRUCT_FLD_S(ip4_addr_p_t yiaddr); + PACK_STRUCT_FLD_S(ip4_addr_p_t siaddr); + PACK_STRUCT_FLD_S(ip4_addr_p_t giaddr); + PACK_STRUCT_FLD_8(u8_t chaddr[DHCP_CHADDR_LEN]); + PACK_STRUCT_FLD_8(u8_t sname[DHCP_SNAME_LEN]); + PACK_STRUCT_FLD_8(u8_t file[DHCP_FILE_LEN]); + PACK_STRUCT_FIELD(u32_t cookie); +#define DHCP_MIN_OPTIONS_LEN 68U +/** make sure user does not configure this too small */ +#if ((defined(DHCP_OPTIONS_LEN)) && (DHCP_OPTIONS_LEN < DHCP_MIN_OPTIONS_LEN)) +# undef DHCP_OPTIONS_LEN +#endif +/** allow this to be configured in lwipopts.h, but not too small */ +#if (!defined(DHCP_OPTIONS_LEN)) +/** set this to be sufficient for your options in outgoing DHCP msgs */ +# define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN +#endif + PACK_STRUCT_FLD_8(u8_t options[DHCP_OPTIONS_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +void dhcp_set_struct(struct netif *netif, struct dhcp *dhcp); +/** Remove a struct dhcp previously set to the netif using dhcp_set_struct() */ +#define dhcp_remove_struct(netif) do { (netif)->dhcp = NULL; } while(0) +void dhcp_cleanup(struct netif *netif); +/* Espressif add start. */ +/** set callback for DHCP */ +void dhcp_set_cb(struct netif *netif, void (*cb)(void)); +/* Espressif add end. */ +/** start DHCP configuration */ +err_t dhcp_start(struct netif *netif); +/** enforce early lease renewal (not needed normally)*/ +err_t dhcp_renew(struct netif *netif); +/** release the DHCP lease, usually called before dhcp_stop()*/ +err_t dhcp_release(struct netif *netif); +/** stop DHCP configuration */ +void dhcp_stop(struct netif *netif); +/** inform server of our manual IP address */ +void dhcp_inform(struct netif *netif); +/** Handle a possible change in the network configuration */ +void dhcp_network_changed(struct netif *netif); + +/** if enabled, check whether the offered IP address is not in use, using ARP */ +#if DHCP_DOES_ARP_CHECK +void dhcp_arp_reply(struct netif *netif, const ip4_addr_t *addr); +#endif + +/** check if DHCP supplied netif->ip_addr */ +u8_t dhcp_supplied_address(struct netif *netif); + +/** to be called every minute */ +void dhcp_coarse_tmr(void); +/** to be called every half second */ +void dhcp_fine_tmr(void); + +/** DHCP message item offsets and length */ +#define DHCP_OP_OFS 0 +#define DHCP_HTYPE_OFS 1 +#define DHCP_HLEN_OFS 2 +#define DHCP_HOPS_OFS 3 +#define DHCP_XID_OFS 4 +#define DHCP_SECS_OFS 8 +#define DHCP_FLAGS_OFS 10 +#define DHCP_CIADDR_OFS 12 +#define DHCP_YIADDR_OFS 16 +#define DHCP_SIADDR_OFS 20 +#define DHCP_GIADDR_OFS 24 +#define DHCP_CHADDR_OFS 28 +#define DHCP_SNAME_OFS 44 +#define DHCP_FILE_OFS 108 +#define DHCP_MSG_LEN 236 + +#define DHCP_COOKIE_OFS DHCP_MSG_LEN +#define DHCP_OPTIONS_OFS (DHCP_MSG_LEN + 4) + +#define DHCP_CLIENT_PORT 68 +#define DHCP_SERVER_PORT 67 + +/** DHCP client states */ +#define DHCP_STATE_OFF 0 +#define DHCP_STATE_REQUESTING 1 +#define DHCP_STATE_INIT 2 +#define DHCP_STATE_REBOOTING 3 +#define DHCP_STATE_REBINDING 4 +#define DHCP_STATE_RENEWING 5 +#define DHCP_STATE_SELECTING 6 +#define DHCP_STATE_INFORMING 7 +#define DHCP_STATE_CHECKING 8 +/** not yet implemented #define DHCP_STATE_PERMANENT 9 */ +#define DHCP_STATE_BOUND 10 +/** not yet implemented #define DHCP_STATE_RELEASING 11 */ +#define DHCP_STATE_BACKING_OFF 12 + +/** AUTOIP cooperation flags */ +#define DHCP_AUTOIP_COOP_STATE_OFF 0 +#define DHCP_AUTOIP_COOP_STATE_ON 1 + +#define DHCP_BOOTREQUEST 1 +#define DHCP_BOOTREPLY 2 + +/** DHCP message types */ +#define DHCP_DISCOVER 1 +#define DHCP_OFFER 2 +#define DHCP_REQUEST 3 +#define DHCP_DECLINE 4 +#define DHCP_ACK 5 +#define DHCP_NAK 6 +#define DHCP_RELEASE 7 +#define DHCP_INFORM 8 + +/** DHCP hardware type, currently only ethernet is supported */ +#define DHCP_HTYPE_ETH 1 + +#define DHCP_MAGIC_COOKIE 0x63825363UL + +/* This is a list of options for BOOTP and DHCP, see RFC 2132 for descriptions */ + +/** BootP options */ +#define DHCP_OPTION_PAD 0 +#define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */ +#define DHCP_OPTION_ROUTER 3 +#define DHCP_OPTION_DNS_SERVER 6 +#define DHCP_OPTION_HOSTNAME 12 +#define DHCP_OPTION_IP_TTL 23 +#define DHCP_OPTION_MTU 26 +#define DHCP_OPTION_BROADCAST 28 +#define DHCP_OPTION_TCP_TTL 37 +#define DHCP_OPTION_NTP 42 +#define DHCP_OPTION_END 255 + +#ifdef LWIP_ESP8266 +/**add options for support more router by liuHan**/ +#define DHCP_OPTION_DOMAIN_NAME 15 +#define DHCP_OPTION_PRD 31 +#define DHCP_OPTION_STATIC_ROUTER 33 +#define DHCP_OPTION_VSN 43 +#define DHCP_OPTION_NB_TINS 44 +#define DHCP_OPTION_NB_TINT 46 +#define DHCP_OPTION_NB_TIS 47 +#define DHCP_OPTION_CLASSLESS_STATIC_ROUTER 121 +#endif + + + +/** DHCP options */ +#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */ +#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */ +#define DHCP_OPTION_OVERLOAD 52 /* RFC2132 9.3, use file and/or sname field for options */ + +#define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */ +#define DHCP_OPTION_MESSAGE_TYPE_LEN 1 + +#define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */ +#define DHCP_OPTION_PARAMETER_REQUEST_LIST 55 /* RFC 2132 9.8, requested option types */ + +#define DHCP_OPTION_MAX_MSG_SIZE 57 /* RFC 2132 9.10, message size accepted >= 576 */ +#define DHCP_OPTION_MAX_MSG_SIZE_LEN 2 + +#define DHCP_OPTION_T1 58 /* T1 renewal time */ +#define DHCP_OPTION_T2 59 /* T2 rebinding time */ +#define DHCP_OPTION_US 60 +#define DHCP_OPTION_CLIENT_ID 61 +#define DHCP_OPTION_TFTP_SERVERNAME 66 +#define DHCP_OPTION_BOOTFILE 67 + +/** possible combinations of overloading the file and sname fields with options */ +#define DHCP_OVERLOAD_NONE 0 +#define DHCP_OVERLOAD_FILE 1 +#define DHCP_OVERLOAD_SNAME 2 +#define DHCP_OVERLOAD_SNAME_FILE 3 + +#if LWIP_DHCP_GET_NTP_SRV +/** This function must exist, in other to add offered NTP servers to + * the NTP (or SNTP) engine. + * See LWIP_DHCP_MAX_NTP_SERVERS */ +extern void dhcp_set_ntp_servers(u8_t num_ntp_servers, const ip4_addr_t* ntp_server_addrs); +#endif /* LWIP_DHCP_GET_NTP_SRV */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_DHCP */ + +#endif /*LWIP_HDR_DHCP_H*/ diff --git a/tools/sdk/include/lwip/lwip/dhcp6.h b/tools/sdk/include/lwip/lwip/dhcp6.h new file mode 100755 index 00000000..345bcf00 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/dhcp6.h @@ -0,0 +1,58 @@ +/** + * @file + * + * IPv6 address autoconfiguration as per RFC 4862. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * IPv6 address autoconfiguration as per RFC 4862. + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_IP6_DHCP6_H +#define LWIP_HDR_IP6_DHCP6_H + +#include "lwip/opt.h" + +#if LWIP_IPV6_DHCP6 /* don't build if not configured for use in lwipopts.h */ + + +struct dhcp6 +{ + /*TODO: implement DHCP6*/ +}; + +#endif /* LWIP_IPV6_DHCP6 */ + +#endif /* LWIP_HDR_IP6_DHCP6_H */ diff --git a/tools/sdk/include/lwip/lwip/dns.h b/tools/sdk/include/lwip/lwip/dns.h new file mode 100755 index 00000000..1ceed0d8 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/dns.h @@ -0,0 +1,118 @@ +/** + * lwip DNS resolver header file. + + * Author: Jim Pettinato + * April 2007 + + * ported from uIP resolv.c Copyright (c) 2002-2003, Adam Dunkels. + * + * 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. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + */ + +#ifndef LWIP_HDR_DNS_H +#define LWIP_HDR_DNS_H + +#include "lwip/opt.h" + +#ifdef LWIP_ESP8266 +#include "lwip/err.h" +#endif + + +#if LWIP_DNS + +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** DNS timer period */ +#define DNS_TMR_INTERVAL 1000 + +/* DNS resolve types: */ +#define LWIP_DNS_ADDRTYPE_IPV4 0 +#define LWIP_DNS_ADDRTYPE_IPV6 1 +#define LWIP_DNS_ADDRTYPE_IPV4_IPV6 2 /* try to resolve IPv4 first, try IPv6 if IPv4 fails only */ +#define LWIP_DNS_ADDRTYPE_IPV6_IPV4 3 /* try to resolve IPv6 first, try IPv4 if IPv6 fails only */ +#if LWIP_IPV4 && LWIP_IPV6 +#ifndef LWIP_DNS_ADDRTYPE_DEFAULT +#define LWIP_DNS_ADDRTYPE_DEFAULT LWIP_DNS_ADDRTYPE_IPV4_IPV6 +#endif +#elif defined(LWIP_IPV4) +#define LWIP_DNS_ADDRTYPE_DEFAULT LWIP_DNS_ADDRTYPE_IPV4 +#else +#define LWIP_DNS_ADDRTYPE_DEFAULT LWIP_DNS_ADDRTYPE_IPV6 +#endif + +#if DNS_LOCAL_HOSTLIST +/** struct used for local host-list */ +struct local_hostlist_entry { + /** static hostname */ + const char *name; + /** static host address in network byteorder */ + ip_addr_t addr; + struct local_hostlist_entry *next; +}; +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC +#ifndef DNS_LOCAL_HOSTLIST_MAX_NAMELEN +#define DNS_LOCAL_HOSTLIST_MAX_NAMELEN DNS_MAX_NAME_LENGTH +#endif +#define LOCALHOSTLIST_ELEM_SIZE ((sizeof(struct local_hostlist_entry) + DNS_LOCAL_HOSTLIST_MAX_NAMELEN + 1)) +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ +#endif /* DNS_LOCAL_HOSTLIST */ + +/** Callback which is invoked when a hostname is found. + * A function of this type must be implemented by the application using the DNS resolver. + * @param name pointer to the name that was looked up. + * @param ipaddr pointer to an ip_addr_t containing the IP address of the hostname, + * or NULL if the name could not be found (or on any other error). + * @param callback_arg a user-specified callback argument passed to dns_gethostbyname +*/ +typedef void (*dns_found_callback)(const char *name, const ip_addr_t *ipaddr, void *callback_arg); + +void dns_init(void); +void dns_tmr(void); +void dns_setserver(u8_t numdns, const ip_addr_t *dnsserver); +ip_addr_t dns_getserver(u8_t numdns); +err_t dns_gethostbyname(const char *hostname, ip_addr_t *addr, + dns_found_callback found, void *callback_arg); +err_t dns_gethostbyname_addrtype(const char *hostname, ip_addr_t *addr, + dns_found_callback found, void *callback_arg, + u8_t dns_addrtype); + + +#if DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC +int dns_local_removehost(const char *hostname, const ip_addr_t *addr); +err_t dns_local_addhost(const char *hostname, const ip_addr_t *addr); +#endif /* DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_DNS */ + +#endif /* LWIP_HDR_DNS_H */ diff --git a/tools/sdk/include/lwip/lwip/err.h b/tools/sdk/include/lwip/lwip/err.h new file mode 100755 index 00000000..26fb91db --- /dev/null +++ b/tools/sdk/include/lwip/lwip/err.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_ERR_H +#define LWIP_HDR_ERR_H + +#include "lwip/opt.h" +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Define LWIP_ERR_T in cc.h if you want to use + * a different type for your platform (must be signed). */ +#ifdef LWIP_ERR_T +typedef LWIP_ERR_T err_t; +#else /* LWIP_ERR_T */ +typedef s8_t err_t; +#endif /* LWIP_ERR_T*/ + +/* Definitions for error constants. */ + +#define ERR_OK 0 /* No error, everything OK. */ +#define ERR_MEM -1 /* Out of memory error. */ +#define ERR_BUF -2 /* Buffer error. */ +#define ERR_TIMEOUT -3 /* Timeout. */ +#define ERR_RTE -4 /* Routing problem. */ +#define ERR_INPROGRESS -5 /* Operation in progress */ +#define ERR_VAL -6 /* Illegal value. */ +#define ERR_WOULDBLOCK -7 /* Operation would block. */ +#define ERR_USE -8 /* Address in use. */ + + +#ifdef LWIP_ESP8266 +#define ERR_ALREADY -9 /* Already connected. */ +#define ERR_ISCONN -10 /* Conn already established.*/ +#define ERR_IS_FATAL(e) ((e) < ERR_ISCONN) +#define ERR_ABRT -11 /* Connection aborted. */ +#define ERR_RST -12 /* Connection reset. */ +#define ERR_CLSD -13 /* Connection closed. */ +#define ERR_CONN -14 /* Not connected. */ +#define ERR_ARG -15 /* Illegal argument. */ +#define ERR_IF -16 /* Low-level netif error */ +#else +#define ERR_ALREADY -9 /* Already connecting. */ +#define ERR_ISCONN -10 /* Conn already established.*/ +#define ERR_CONN -11 /* Not connected. */ +#define ERR_IF -12 /* Low-level netif error */ +#define ERR_IS_FATAL(e) ((e) <= ERR_ABRT) +#define ERR_ABRT -13 /* Connection aborted. */ +#define ERR_RST -14 /* Connection reset. */ +#define ERR_CLSD -15 /* Connection closed. */ +#define ERR_ARG -16 /* Illegal argument. */ +#endif + +#ifdef LWIP_DEBUG +extern const char *lwip_strerr(err_t err); +#else +#define lwip_strerr(x) "" +#endif /* LWIP_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_ERR_H */ diff --git a/tools/sdk/include/lwip/lwip/ethip6.h b/tools/sdk/include/lwip/lwip/ethip6.h new file mode 100755 index 00000000..5e88dffd --- /dev/null +++ b/tools/sdk/include/lwip/lwip/ethip6.h @@ -0,0 +1,68 @@ +/** + * @file + * + * Ethernet output for IPv6. Uses ND tables for link-layer addressing. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_ETHIP6_H +#define LWIP_HDR_ETHIP6_H + +#include "lwip/opt.h" + +#if LWIP_IPV6 && LWIP_ETHERNET /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +err_t ethip6_output(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 && LWIP_ETHERNET */ + +#endif /* LWIP_HDR_ETHIP6_H */ diff --git a/tools/sdk/include/lwip/lwip/icmp.h b/tools/sdk/include/lwip/lwip/icmp.h new file mode 100755 index 00000000..af3a4550 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/icmp.h @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_ICMP_H +#define LWIP_HDR_ICMP_H + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" + +#if LWIP_IPV6 && LWIP_ICMP6 +#include "lwip/icmp6.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define ICMP_ER 0 /* echo reply */ +#define ICMP_DUR 3 /* destination unreachable */ +#define ICMP_SQ 4 /* source quench */ +#define ICMP_RD 5 /* redirect */ +#define ICMP_ECHO 8 /* echo */ +#define ICMP_TE 11 /* time exceeded */ +#define ICMP_PP 12 /* parameter problem */ +#define ICMP_TS 13 /* timestamp */ +#define ICMP_TSR 14 /* timestamp reply */ +#define ICMP_IRQ 15 /* information request */ +#define ICMP_IR 16 /* information reply */ +#define ICMP_AM 17 /* address mask request */ +#define ICMP_AMR 18 /* address mask reply */ + +enum icmp_dur_type { + ICMP_DUR_NET = 0, /* net unreachable */ + ICMP_DUR_HOST = 1, /* host unreachable */ + ICMP_DUR_PROTO = 2, /* protocol unreachable */ + ICMP_DUR_PORT = 3, /* port unreachable */ + ICMP_DUR_FRAG = 4, /* fragmentation needed and DF set */ + ICMP_DUR_SR = 5 /* source route failed */ +}; + +enum icmp_te_type { + ICMP_TE_TTL = 0, /* time to live exceeded in transit */ + ICMP_TE_FRAG = 1 /* fragment reassembly time exceeded */ +}; + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +/** This is the standard ICMP header only that the u32_t data + * is split to two u16_t like ICMP echo needs it. + * This header is also used for other ICMP types that do not + * use the data part. + */ +PACK_STRUCT_BEGIN +struct icmp_echo_hdr { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FIELD(u16_t seqno); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define ICMPH_TYPE(hdr) ((hdr)->type) +#define ICMPH_CODE(hdr) ((hdr)->code) + +/** Combines type and code to an u16_t */ +#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t)) +#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c)) + + +#if LWIP_IPV4 && LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ + +void icmp_input(struct pbuf *p, struct netif *inp); +void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t); +void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t); + +#endif /* LWIP_IPV4 && LWIP_ICMP */ + +#if LWIP_IPV4 && LWIP_IPV6 +#if LWIP_ICMP && LWIP_ICMP6 +#define icmp_port_unreach(isipv6, pbuf) ((isipv6) ? \ + icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT) : \ + icmp_dest_unreach(pbuf, ICMP_DUR_PORT)) +#elif LWIP_ICMP +#define icmp_port_unreach(isipv6, pbuf) do{ if(!(isipv6)) { icmp_dest_unreach(pbuf, ICMP_DUR_PORT);}}while(0) +#elif LWIP_ICMP6 +#define icmp_port_unreach(isipv6, pbuf) do{ if(isipv6) { icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT);}}while(0) +#else +#define icmp_port_unreach(isipv6, pbuf) +#endif +#elif LWIP_IPV6 && LWIP_ICMP6 +#define icmp_port_unreach(isipv6, pbuf) icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT) +#elif LWIP_IPV4 && LWIP_ICMP +#define icmp_port_unreach(isipv6, pbuf) icmp_dest_unreach(pbuf, ICMP_DUR_PORT) +#else /* (LWIP_IPV6 && LWIP_ICMP6) || (LWIP_IPV4 && LWIP_ICMP) */ +#define icmp_port_unreach(isipv6, pbuf) +#endif /* (LWIP_IPV6 && LWIP_ICMP6) || (LWIP_IPV4 && LWIP_ICMP) LWIP_IPV4*/ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_ICMP_H */ diff --git a/tools/sdk/include/lwip/lwip/icmp6.h b/tools/sdk/include/lwip/lwip/icmp6.h new file mode 100755 index 00000000..9d57103f --- /dev/null +++ b/tools/sdk/include/lwip/lwip/icmp6.h @@ -0,0 +1,152 @@ +/** + * @file + * + * IPv6 version of ICMP, as per RFC 4443. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ +#ifndef LWIP_HDR_ICMP6_H +#define LWIP_HDR_ICMP6_H + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +enum icmp6_type { + ICMP6_TYPE_DUR = 1, /* Destination unreachable */ + ICMP6_TYPE_PTB = 2, /* Packet too big */ + ICMP6_TYPE_TE = 3, /* Time exceeded */ + ICMP6_TYPE_PP = 4, /* Parameter problem */ + ICMP6_TYPE_PE1 = 100, /* Private experimentation */ + ICMP6_TYPE_PE2 = 101, /* Private experimentation */ + ICMP6_TYPE_RSV_ERR = 127, /* Reserved for expansion of error messages */ + + ICMP6_TYPE_EREQ = 128, /* Echo request */ + ICMP6_TYPE_EREP = 129, /* Echo reply */ + ICMP6_TYPE_MLQ = 130, /* Multicast listener query */ + ICMP6_TYPE_MLR = 131, /* Multicast listener report */ + ICMP6_TYPE_MLD = 132, /* Multicast listener done */ + ICMP6_TYPE_RS = 133, /* Router solicitation */ + ICMP6_TYPE_RA = 134, /* Router advertisement */ + ICMP6_TYPE_NS = 135, /* Neighbor solicitation */ + ICMP6_TYPE_NA = 136, /* Neighbor advertisement */ + ICMP6_TYPE_RD = 137, /* Redirect */ + ICMP6_TYPE_MRA = 151, /* Multicast router advertisement */ + ICMP6_TYPE_MRS = 152, /* Multicast router solicitation */ + ICMP6_TYPE_MRT = 153, /* Multicast router termination */ + ICMP6_TYPE_PE3 = 200, /* Private experimentation */ + ICMP6_TYPE_PE4 = 201, /* Private experimentation */ + ICMP6_TYPE_RSV_INF = 255 /* Reserved for expansion of informational messages */ +}; + +enum icmp6_dur_code { + ICMP6_DUR_NO_ROUTE = 0, /* No route to destination */ + ICMP6_DUR_PROHIBITED = 1, /* Communication with destination administratively prohibited */ + ICMP6_DUR_SCOPE = 2, /* Beyond scope of source address */ + ICMP6_DUR_ADDRESS = 3, /* Address unreachable */ + ICMP6_DUR_PORT = 4, /* Port unreachable */ + ICMP6_DUR_POLICY = 5, /* Source address failed ingress/egress policy */ + ICMP6_DUR_REJECT_ROUTE = 6 /* Reject route to destination */ +}; + +enum icmp6_te_code { + ICMP6_TE_HL = 0, /* Hop limit exceeded in transit */ + ICMP6_TE_FRAG = 1 /* Fragment reassembly time exceeded */ +}; + +enum icmp6_pp_code { + ICMP6_PP_FIELD = 0, /* Erroneous header field encountered */ + ICMP6_PP_HEADER = 1, /* Unrecognized next header type encountered */ + ICMP6_PP_OPTION = 2 /* Unrecognized IPv6 option encountered */ +}; + +/** This is the standard ICMP6 header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct icmp6_hdr { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t data); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** This is the ICMP6 header adapted for echo req/resp. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct icmp6_echo_hdr { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FIELD(u16_t seqno); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + + +#if LWIP_ICMP6 && LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +void icmp6_input(struct pbuf *p, struct netif *inp); +void icmp6_dest_unreach(struct pbuf *p, enum icmp6_dur_code c); +void icmp6_packet_too_big(struct pbuf *p, u32_t mtu); +void icmp6_time_exceeded(struct pbuf *p, enum icmp6_te_code c); +void icmp6_param_problem(struct pbuf *p, enum icmp6_pp_code c, u32_t pointer); + +#endif /* LWIP_ICMP6 && LWIP_IPV6 */ + + +#ifdef __cplusplus +} +#endif + + +#endif /* LWIP_HDR_ICMP6_H */ diff --git a/tools/sdk/include/lwip/lwip/igmp.h b/tools/sdk/include/lwip/lwip/igmp.h new file mode 100755 index 00000000..bff1a613 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/igmp.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2002 CITEL Technologies Ltd. + * 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 CITEL Technologies Ltd 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 CITEL TECHNOLOGIES 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 CITEL TECHNOLOGIES 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. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. +*/ + +#ifndef LWIP_HDR_IGMP_H +#define LWIP_HDR_IGMP_H + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/pbuf.h" + +#if LWIP_IPV4 && LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ + +#ifdef __cplusplus +extern "C" { +#endif + + +/* IGMP timer */ +#define IGMP_TMR_INTERVAL 100 /* Milliseconds */ +#define IGMP_V1_DELAYING_MEMBER_TMR (1000/IGMP_TMR_INTERVAL) +#define IGMP_JOIN_DELAYING_MEMBER_TMR (500 /IGMP_TMR_INTERVAL) + +/* MAC Filter Actions, these are passed to a netif's + * igmp_mac_filter callback function. */ +#define IGMP_DEL_MAC_FILTER 0 +#define IGMP_ADD_MAC_FILTER 1 + + +/** + * igmp group structure - there is + * a list of groups for each interface + * these should really be linked from the interface, but + * if we keep them separate we will not affect the lwip original code + * too much + * + * There will be a group for the all systems group address but this + * will not run the state machine as it is used to kick off reports + * from all the other groups + */ +struct igmp_group { + /** next link */ + struct igmp_group *next; + /** interface on which the group is active */ + struct netif *netif; + /** multicast address */ + ip4_addr_t group_address; + /** signifies we were the last person to report */ + u8_t last_reporter_flag; + /** current state of the group */ + u8_t group_state; + /** timer for reporting, negative is OFF */ + u16_t timer; + /** counter of simultaneous uses */ + u8_t use; +}; + +/* Prototypes */ +void igmp_init(void); +err_t igmp_start(struct netif *netif); +err_t igmp_stop(struct netif *netif); +void igmp_report_groups(struct netif *netif); +struct igmp_group *igmp_lookfor_group(struct netif *ifp, const ip4_addr_t *addr); +void igmp_input(struct pbuf *p, struct netif *inp, const ip4_addr_t *dest); +err_t igmp_joingroup(const ip4_addr_t *ifaddr, const ip4_addr_t *groupaddr); +err_t igmp_joingroup_netif(struct netif *netif, const ip4_addr_t *groupaddr); +err_t igmp_leavegroup(const ip4_addr_t *ifaddr, const ip4_addr_t *groupaddr); +err_t igmp_leavegroup_netif(struct netif *netif, const ip4_addr_t *groupaddr); +void igmp_tmr(void); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 && LWIP_IGMP */ + +#endif /* LWIP_HDR_IGMP_H */ diff --git a/tools/sdk/include/lwip/lwip/inet.h b/tools/sdk/include/lwip/lwip/inet.h new file mode 100755 index 00000000..036cd988 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/inet.h @@ -0,0 +1,172 @@ +/** + * @file + * This file (together with sockets.h) aims to provide structs and functions from + * - arpa/inet.h + * - netinet/in.h + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_INET_H +#define LWIP_HDR_INET_H + +#include "lwip/opt.h" +#include "lwip/def.h" +#include "lwip/ip_addr.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* If your port already typedef's in_addr_t, define IN_ADDR_T_DEFINED + to prevent this code from redefining it. */ +#if !defined(in_addr_t) && !defined(IN_ADDR_T_DEFINED) +typedef u32_t in_addr_t; +#endif + +struct in_addr { + in_addr_t s_addr; +}; + +struct in6_addr { + union { + u32_t u32_addr[4]; + u8_t u8_addr[16]; + } un; +#define s6_addr un.u8_addr +}; + +/** 255.255.255.255 */ +#define INADDR_NONE IPADDR_NONE +/** 127.0.0.1 */ +#define INADDR_LOOPBACK IPADDR_LOOPBACK +/** 0.0.0.0 */ +#define INADDR_ANY IPADDR_ANY +/** 255.255.255.255 */ +#define INADDR_BROADCAST IPADDR_BROADCAST + +/** This macro can be used to initialize a variable of type struct in6_addr + to the IPv6 wildcard address. */ +#define IN6ADDR_ANY_INIT {{{0,0,0,0}}} +/** This macro can be used to initialize a variable of type struct in6_addr + to the IPv6 loopback address. */ +#define IN6ADDR_LOOPBACK_INIT {{{0,0,0,PP_HTONL(1)}}} +/** This variable is initialized by the system to contain the wildcard IPv6 address. */ +extern const struct in6_addr in6addr_any; + +/* Definitions of the bits in an (IPv4) Internet address integer. + + On subnets, host and network parts are found according to + the subnet mask, not these masks. */ +#define IN_CLASSA(a) IP_CLASSA(a) +#define IN_CLASSA_NET IP_CLASSA_NET +#define IN_CLASSA_NSHIFT IP_CLASSA_NSHIFT +#define IN_CLASSA_HOST IP_CLASSA_HOST +#define IN_CLASSA_MAX IP_CLASSA_MAX + +#define IN_CLASSB(b) IP_CLASSB(b) +#define IN_CLASSB_NET IP_CLASSB_NET +#define IN_CLASSB_NSHIFT IP_CLASSB_NSHIFT +#define IN_CLASSB_HOST IP_CLASSB_HOST +#define IN_CLASSB_MAX IP_CLASSB_MAX + +#define IN_CLASSC(c) IP_CLASSC(c) +#define IN_CLASSC_NET IP_CLASSC_NET +#define IN_CLASSC_NSHIFT IP_CLASSC_NSHIFT +#define IN_CLASSC_HOST IP_CLASSC_HOST +#define IN_CLASSC_MAX IP_CLASSC_MAX + +#define IN_CLASSD(d) IP_CLASSD(d) +#define IN_CLASSD_NET IP_CLASSD_NET /* These ones aren't really */ +#define IN_CLASSD_NSHIFT IP_CLASSD_NSHIFT /* net and host fields, but */ +#define IN_CLASSD_HOST IP_CLASSD_HOST /* routing needn't know. */ +#define IN_CLASSD_MAX IP_CLASSD_MAX + +#define IN_MULTICAST(a) IP_MULTICAST(a) + +#define IN_EXPERIMENTAL(a) IP_EXPERIMENTAL(a) +#define IN_BADCLASS(a) IP_BADCLASS(a) + +#define IN_LOOPBACKNET IP_LOOPBACKNET + + +#ifndef INET_ADDRSTRLEN +#define INET_ADDRSTRLEN IP4ADDR_STRLEN_MAX +#endif +#if LWIP_IPV6 +#ifndef INET6_ADDRSTRLEN +#define INET6_ADDRSTRLEN IP6ADDR_STRLEN_MAX +#endif +#endif + +#if LWIP_IPV4 + +#define inet_addr_from_ipaddr(target_inaddr, source_ipaddr) ((target_inaddr)->s_addr = ip4_addr_get_u32(source_ipaddr)) +#define inet_addr_to_ipaddr(target_ipaddr, source_inaddr) (ip4_addr_set_u32(target_ipaddr, (source_inaddr)->s_addr)) +/* ATTENTION: the next define only works because both s_addr and ip_addr_t are an u32_t effectively! */ +#define inet_addr_to_ipaddr_p(target_ipaddr_p, source_inaddr) ((target_ipaddr_p) = (ip_addr_t*)&((source_inaddr)->s_addr)) + +/* directly map this to the lwip internal functions */ +#define inet_addr(cp) ipaddr_addr(cp) +#define inet_aton(cp, addr) ip4addr_aton(cp, (ip4_addr_t*)addr) +#define inet_ntoa(addr) ip4addr_ntoa((const ip4_addr_t*)&(addr)) +#define inet_ntoa_r(addr, buf, buflen) ip4addr_ntoa_r((const ip4_addr_t*)&(addr), buf, buflen) + +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +#define inet6_addr_from_ip6addr(target_in6addr, source_ip6addr) {(target_in6addr)->un.u32_addr[0] = (source_ip6addr)->addr[0]; \ + (target_in6addr)->un.u32_addr[1] = (source_ip6addr)->addr[1]; \ + (target_in6addr)->un.u32_addr[2] = (source_ip6addr)->addr[2]; \ + (target_in6addr)->un.u32_addr[3] = (source_ip6addr)->addr[3];} +#define inet6_addr_to_ip6addr(target_ip6addr, source_in6addr) {(target_ip6addr)->addr[0] = (source_in6addr)->un.u32_addr[0]; \ + (target_ip6addr)->addr[1] = (source_in6addr)->un.u32_addr[1]; \ + (target_ip6addr)->addr[2] = (source_in6addr)->un.u32_addr[2]; \ + (target_ip6addr)->addr[3] = (source_in6addr)->un.u32_addr[3];} +/* ATTENTION: the next define only works because both in6_addr and ip6_addr_t are an u32_t[4] effectively! */ +#define inet6_addr_to_ip6addr_p(target_ip6addr_p, source_in6addr) ((target_ip6addr_p) = (ip6_addr_t*)(source_in6addr)) + +/* directly map this to the lwip internal functions */ +#define inet6_aton(cp, addr) ip6addr_aton(cp, (ip6_addr_t*)addr) +#define inet6_ntoa(addr) ip6addr_ntoa((const ip6_addr_t*)&(addr)) +#define inet6_ntoa_r(addr, buf, buflen) ip6addr_ntoa_r((const ip6_addr_t*)&(addr), buf, buflen) + +#endif /* LWIP_IPV6 */ + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_INET_H */ diff --git a/tools/sdk/include/lwip/lwip/inet_chksum.h b/tools/sdk/include/lwip/lwip/inet_chksum.h new file mode 100755 index 00000000..1766f4b5 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/inet_chksum.h @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_INET_CHKSUM_H +#define LWIP_HDR_INET_CHKSUM_H + +#include "lwip/opt.h" + +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" + +/** Swap the bytes in an u16_t: much like htons() for little-endian */ +#ifndef SWAP_BYTES_IN_WORD +#if LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) +/* little endian and PLATFORM_BYTESWAP defined */ +#define SWAP_BYTES_IN_WORD(w) LWIP_PLATFORM_HTONS(w) +#else /* LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) */ +/* can't use htons on big endian (or PLATFORM_BYTESWAP not defined)... */ +#define SWAP_BYTES_IN_WORD(w) (((w) & 0xff) << 8) | (((w) & 0xff00) >> 8) +#endif /* LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN)*/ +#endif /* SWAP_BYTES_IN_WORD */ + +/** Split an u32_t in two u16_ts and add them up */ +#ifndef FOLD_U32T +#define FOLD_U32T(u) (((u) >> 16) + ((u) & 0x0000ffffUL)) +#endif + +#if LWIP_CHECKSUM_ON_COPY +/** Function-like macro: same as MEMCPY but returns the checksum of copied data + as u16_t */ +# ifndef LWIP_CHKSUM_COPY +# define LWIP_CHKSUM_COPY(dst, src, len) lwip_chksum_copy(dst, src, len) +# ifndef LWIP_CHKSUM_COPY_ALGORITHM +# define LWIP_CHKSUM_COPY_ALGORITHM 1 +# endif /* LWIP_CHKSUM_COPY_ALGORITHM */ +# else /* LWIP_CHKSUM_COPY */ +# define LWIP_CHKSUM_COPY_ALGORITHM 0 +# endif /* LWIP_CHKSUM_COPY */ +#else /* LWIP_CHECKSUM_ON_COPY */ +# define LWIP_CHKSUM_COPY_ALGORITHM 0 +#endif /* LWIP_CHECKSUM_ON_COPY */ + +#ifdef __cplusplus +extern "C" { +#endif + +u16_t inet_chksum(const void *dataptr, u16_t len); +u16_t inet_chksum_pbuf(struct pbuf *p); +#if LWIP_CHKSUM_COPY_ALGORITHM +u16_t lwip_chksum_copy(void *dst, const void *src, u16_t len); +#endif /* LWIP_CHKSUM_COPY_ALGORITHM */ + +#if LWIP_IPV4 +u16_t inet_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, + const ip4_addr_t *src, const ip4_addr_t *dest); +u16_t inet_chksum_pseudo_partial(struct pbuf *p, u8_t proto, + u16_t proto_len, u16_t chksum_len, const ip4_addr_t *src, const ip4_addr_t *dest); +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +u16_t ip6_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, + const ip6_addr_t *src, const ip6_addr_t *dest); +u16_t ip6_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len, + u16_t chksum_len, const ip6_addr_t *src, const ip6_addr_t *dest); +#endif /* LWIP_IPV6 */ + + +u16_t ip_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, + const ip_addr_t *src, const ip_addr_t *dest); +u16_t ip_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len, + u16_t chksum_len, const ip_addr_t *src, const ip_addr_t *dest); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_INET_H */ + diff --git a/tools/sdk/include/lwip/lwip/init.h b/tools/sdk/include/lwip/lwip/init.h new file mode 100755 index 00000000..70351b86 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/init.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_INIT_H +#define LWIP_HDR_INIT_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** X.x.x: Major version of the stack */ +#define LWIP_VERSION_MAJOR 1U +/** x.X.x: Minor version of the stack */ +#define LWIP_VERSION_MINOR 5U +/** x.x.X: Revision of the stack */ +#define LWIP_VERSION_REVISION 0U +/** For release candidates, this is set to 1..254 + * For official releases, this is set to 255 (LWIP_RC_RELEASE) + * For development versions (Git), this is set to 0 (LWIP_RC_DEVELOPMENT) */ +#define LWIP_VERSION_RC 0U + +/** LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ +#define LWIP_RC_RELEASE 255U +/** LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for Git versions */ +#define LWIP_RC_DEVELOPMENT 0U + +#define LWIP_VERSION_IS_RELEASE (LWIP_VERSION_RC == LWIP_RC_RELEASE) +#define LWIP_VERSION_IS_DEVELOPMENT (LWIP_VERSION_RC == LWIP_RC_DEVELOPMENT) +#define LWIP_VERSION_IS_RC ((LWIP_VERSION_RC != LWIP_RC_RELEASE) && (LWIP_VERSION_RC != LWIP_RC_DEVELOPMENT)) + +/** Provides the version of the stack */ +#define LWIP_VERSION (LWIP_VERSION_MAJOR << 24 | LWIP_VERSION_MINOR << 16 | \ + LWIP_VERSION_REVISION << 8 | LWIP_VERSION_RC) + +/* Modules initialization */ +void lwip_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_INIT_H */ diff --git a/tools/sdk/include/lwip/lwip/ip.h b/tools/sdk/include/lwip/lwip/ip.h new file mode 100755 index 00000000..d42fe681 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/ip.h @@ -0,0 +1,304 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_IP_H__ +#define LWIP_HDR_IP_H__ + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/err.h" +#include "lwip/netif.h" +#include "lwip/ip4.h" +#include "lwip/ip6.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define IP_PROTO_ICMP 1 +#define IP_PROTO_IGMP 2 +#define IP_PROTO_UDP 17 +#define IP_PROTO_UDPLITE 136 +#define IP_PROTO_TCP 6 + +/** This operates on a void* by loading the first byte */ +#define IP_HDR_GET_VERSION(ptr) ((*(u8_t*)(ptr)) >> 4) + +/* This is passed as the destination address to ip_output_if (not + to ip_output), meaning that an IP header already is constructed + in the pbuf. This is used when TCP retransmits. */ +#ifdef IP_HDRINCL +#undef IP_HDRINCL +#endif /* IP_HDRINCL */ +#define IP_HDRINCL NULL + +/** pbufs passed to IP must have a ref-count of 1 as their payload pointer + gets altered as the packet is passed down the stack */ +#ifndef LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX +#define LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p) LWIP_ASSERT("p->ref == 1", (p)->ref == 1) +#endif + +#if LWIP_NETIF_HWADDRHINT +#define IP_PCB_ADDRHINT ;u8_t addr_hint +#else +#define IP_PCB_ADDRHINT +#endif /* LWIP_NETIF_HWADDRHINT */ + +/* This is the common part of all PCB types. It needs to be at the + beginning of a PCB type definition. It is located here so that + changes to this common part are made in one location instead of + having to change all PCB structs. */ +#define IP_PCB \ + /* ip addresses in network byte order */ \ + ip_addr_t local_ip; \ + ip_addr_t remote_ip; \ + /* Socket options */ \ + u8_t so_options; \ + /* Type Of Service */ \ + u8_t tos; \ + /* Time To Live */ \ + u8_t ttl \ + /* link layer address resolution hint */ \ + IP_PCB_ADDRHINT + +struct ip_pcb { +/* Common members of all PCB types */ + IP_PCB; +}; + +/* + * Option flags per-socket. These are the same like SO_XXX in sockets.h + */ +#define SOF_REUSEADDR 0x04U /* allow local address reuse */ +#define SOF_KEEPALIVE 0x08U /* keep connections alive */ +#define SOF_BROADCAST 0x20U /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ + +/* These flags are inherited (e.g. from a listen-pcb to a connection-pcb): */ +#define SOF_INHERITED (SOF_REUSEADDR|SOF_KEEPALIVE) + +/* Global variables of this module, kept in a struct for efficient access using base+index. */ +struct ip_globals +{ + /** The interface that accepted the packet for the current callback invocation. */ + struct netif *current_netif; + /** The interface that received the packet for the current callback invocation. */ + struct netif *current_input_netif; +#if LWIP_IPV4 + /** Header of the input packet currently being processed. */ + struct ip_hdr *current_ip4_header; +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + /** Header of the input IPv6 packet currently being processed. */ + struct ip6_hdr *current_ip6_header; +#endif /* LWIP_IPV6 */ + /** Total header length of current_ip4/6_header (i.e. after this, the UDP/TCP header starts) */ + u16_t current_ip_header_tot_len; + /** Source IP address of current_header */ + ip_addr_t current_iphdr_src; + /** Destination IP address of current_header */ + ip_addr_t current_iphdr_dest; +}; +extern struct ip_globals ip_data; + + +/** Get the interface that accepted the current packet. + * This may or may not be the receiving netif, depending on your netif/network setup. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip_current_netif() (ip_data.current_netif) +/** Get the interface that received the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip_current_input_netif() (ip_data.current_input_netif) +/** Total header length of ip(6)_current_header() (i.e. after this, the UDP/TCP header starts) */ +#define ip_current_header_tot_len() (ip_data.current_ip_header_tot_len) +/** Source IP address of current_header */ +#define ip_current_src_addr() (&ip_data.current_iphdr_src) +/** Destination IP address of current_header */ +#define ip_current_dest_addr() (&ip_data.current_iphdr_dest) + +#if LWIP_IPV4 && LWIP_IPV6 +/** Get the IPv4 header of the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip4_current_header() ((const struct ip_hdr*)(ip_data.current_ip4_header)) +/** Get the IPv6 header of the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip6_current_header() ((const struct ip6_hdr*)(ip_data.current_ip6_header)) +/** Returns TRUE if the current IP input packet is IPv6, FALSE if it is IPv4 */ +#define ip_current_is_v6() (ip6_current_header() != NULL) +/** Source IPv6 address of current_header */ +#define ip6_current_src_addr() (ip_2_ip6(&ip_data.current_iphdr_src)) +/** Destination IPv6 address of current_header */ +#define ip6_current_dest_addr() (ip_2_ip6(&ip_data.current_iphdr_dest)) +/** Get the transport layer protocol */ +#define ip_current_header_proto() (ip_current_is_v6() ? \ + IP6H_NEXTH(ip6_current_header()) :\ + IPH_PROTO(ip4_current_header())) +/** Get the transport layer header */ +#define ip_next_header_ptr() ((const void*)((ip_current_is_v6() ? \ + (const u8_t*)ip6_current_header() : (const u8_t*)ip4_current_header()) + ip_current_header_tot_len())) + +/** Source IP4 address of current_header */ +#define ip4_current_src_addr() (ip_2_ip4(&ip_data.current_iphdr_src)) +/** Destination IP4 address of current_header */ +#define ip4_current_dest_addr() (ip_2_ip4(&ip_data.current_iphdr_dest)) + +#elif LWIP_IPV4 /* LWIP_IPV4 && LWIP_IPV6 */ + +/** Get the IPv4 header of the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip4_current_header() ((const struct ip_hdr*)(ip_data.current_ip4_header)) +/** Always returns FALSE when only supporting IPv4 only */ +#define ip_current_is_v6() 0 +/** Get the transport layer protocol */ +#define ip_current_header_proto() IPH_PROTO(ip4_current_header()) +/** Get the transport layer header */ +#define ip_next_header_ptr() ((const void*)((const u8_t*)ip4_current_header() + ip_current_header_tot_len())) +/** Source IP4 address of current_header */ +#define ip4_current_src_addr() (&ip_data.current_iphdr_src) +/** Destination IP4 address of current_header */ +#define ip4_current_dest_addr() (&ip_data.current_iphdr_dest) + +#elif LWIP_IPV6 /* LWIP_IPV4 && LWIP_IPV6 */ + +/** Get the IPv6 header of the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip6_current_header() ((const struct ip6_hdr*)(ip_data.current_ip6_header)) +/** Always returns TRUE when only supporting IPv6 only */ +#define ip_current_is_v6() 1 +/** Get the transport layer protocol */ +#define ip_current_header_proto() IP6H_NEXTH(ip6_current_header()) +/** Get the transport layer header */ +#define ip_next_header_ptr() ((const void*)((const u8_t*)ip6_current_header())) +/** Source IP6 address of current_header */ +#define ip6_current_src_addr() (&ip_data.current_iphdr_src) +/** Destination IP6 address of current_header */ +#define ip6_current_dest_addr() (&ip_data.current_iphdr_dest) + +#endif /* LWIP_IPV6 */ + +/** Union source address of current_header */ +#define ip_current_src_addr() (&ip_data.current_iphdr_src) +/** Union destination address of current_header */ +#define ip_current_dest_addr() (&ip_data.current_iphdr_dest) + +/** Gets an IP pcb option (SOF_* flags) */ +#define ip_get_option(pcb, opt) ((pcb)->so_options & (opt)) +/** Sets an IP pcb option (SOF_* flags) */ +#define ip_set_option(pcb, opt) ((pcb)->so_options |= (opt)) +/** Resets an IP pcb option (SOF_* flags) */ +#define ip_reset_option(pcb, opt) ((pcb)->so_options &= ~(opt)) + +#if LWIP_IPV4 && LWIP_IPV6 +#define ip_output(p, src, dest, ttl, tos, proto) \ + (IP_IS_V6(dest) ? \ + ip6_output(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto) : \ + ip4_output(p, ip_2_ip4(src), ip_2_ip4(dest), ttl, tos, proto)) +#define ip_output_if(p, src, dest, ttl, tos, proto, netif) \ + (IP_IS_V6(dest) ? \ + ip6_output_if(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto, netif) : \ + ip4_output_if(p, ip_2_ip4(src), ip_2_ip4(dest), ttl, tos, proto, netif)) +#define ip_output_if_src(p, src, dest, ttl, tos, proto, netif) \ + (IP_IS_V6(dest) ? \ + ip6_output_if_src(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto, netif) : \ + ip4_output_if_src(p, ip_2_ip4(src), ip_2_ip4(dest), ttl, tos, proto, netif)) +#define ip_output_hinted(p, src, dest, ttl, tos, proto, addr_hint) \ + (IP_IS_V6(dest) ? \ + ip6_output_hinted(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto, addr_hint) : \ + ip4_output_hinted(p, ip_2_ip4(src), ip_2_ip4(dest), ttl, tos, proto, addr_hint)) +#define ip_route(src, dest) \ + (IP_IS_V6(dest) ? \ + ip6_route(ip_2_ip6(src), ip_2_ip6(dest)) : \ + ip4_route_src(ip_2_ip4(dest), ip_2_ip4(src))) +#define ip_netif_get_local_ip(netif, dest) (IP_IS_V6(dest) ? \ + ip6_netif_get_local_ip(netif, ip_2_ip6(dest)) : \ + ip4_netif_get_local_ip(netif)) +#define ip_debug_print(is_ipv6, p) ((is_ipv6) ? ip6_debug_print(p) : ip4_debug_print(p)) + +err_t ip_input(struct pbuf *p, struct netif *inp); + +#elif LWIP_IPV4 /* LWIP_IPV4 && LWIP_IPV6 */ + +#define ip_output(p, src, dest, ttl, tos, proto) \ + ip4_output(p, src, dest, ttl, tos, proto) +#define ip_output_if(p, src, dest, ttl, tos, proto, netif) \ + ip4_output_if(p, src, dest, ttl, tos, proto, netif) +#define ip_output_if_src(p, src, dest, ttl, tos, proto, netif) \ + ip4_output_if_src(p, src, dest, ttl, tos, proto, netif) +#define ip_output_hinted(p, src, dest, ttl, tos, proto, addr_hint) \ + ip4_output_hinted(p, src, dest, ttl, tos, proto, addr_hint) +#define ip_route(src, dest) \ + ip4_route_src(dest, src) +#define ip_netif_get_local_ip(netif, dest) \ + ip4_netif_get_local_ip(netif) +#define ip_debug_print(is_ipv6, p) ip4_debug_print(p) + +#define ip_input ip4_input + +#elif LWIP_IPV6 /* LWIP_IPV4 && LWIP_IPV6 */ + +#define ip_output(p, src, dest, ttl, tos, proto) \ + ip6_output(p, src, dest, ttl, tos, proto) +#define ip_output_if(p, src, dest, ttl, tos, proto, netif) \ + ip6_output_if(p, src, dest, ttl, tos, proto, netif) +#define ip_output_if_src(p, src, dest, ttl, tos, proto, netif) \ + ip6_output_if_src(p, src, dest, ttl, tos, proto, netif) +#define ip_output_hinted(p, src, dest, ttl, tos, proto, addr_hint) \ + ip6_output_hinted(p, src, dest, ttl, tos, proto, addr_hint) +#define ip_route(src, dest) \ + ip6_route(src, dest) +#define ip_netif_get_local_ip(netif, dest) \ + ip6_netif_get_local_ip(netif, dest) +#define ip_debug_print(is_ipv6, p) ip6_debug_print(p) + +#define ip_input ip6_input + +#endif /* LWIP_IPV6 */ + +#define ip_route_get_local_ip(src, dest, netif, ipaddr) do { \ + (netif) = ip_route(src, dest); \ + (ipaddr) = ip_netif_get_local_ip(netif, dest); \ +}while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_IP_H__ */ + + diff --git a/tools/sdk/include/lwip/lwip/ip4.h b/tools/sdk/include/lwip/lwip/ip4.h new file mode 100755 index 00000000..e69e55c7 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/ip4.h @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_IP4_H +#define LWIP_HDR_IP4_H + +#include "lwip/opt.h" + +#if LWIP_IPV4 + +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/ip4_addr.h" +#include "lwip/err.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef LWIP_HOOK_IP4_ROUTE_SRC +#define LWIP_IPV4_SRC_ROUTING 1 +#else +#define LWIP_IPV4_SRC_ROUTING 0 +#endif + +/** Currently, the function ip_output_if_opt() is only used with IGMP */ +#define IP_OPTIONS_SEND (LWIP_IPV4 && LWIP_IGMP) + +#define IP_HLEN 20 + + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_hdr { + /* version / header length */ + PACK_STRUCT_FLD_8(u8_t _v_hl); + /* type of service */ + PACK_STRUCT_FLD_8(u8_t _tos); + /* total length */ + PACK_STRUCT_FIELD(u16_t _len); + /* identification */ + PACK_STRUCT_FIELD(u16_t _id); + /* fragment offset field */ + PACK_STRUCT_FIELD(u16_t _offset); +#define IP_RF 0x8000U /* reserved fragment flag */ +#define IP_DF 0x4000U /* don't fragment flag */ +#define IP_MF 0x2000U /* more fragments flag */ +#define IP_OFFMASK 0x1fffU /* mask for fragmenting bits */ + /* time to live */ + PACK_STRUCT_FLD_8(u8_t _ttl); + /* protocol*/ + PACK_STRUCT_FLD_8(u8_t _proto); + /* checksum */ + PACK_STRUCT_FIELD(u16_t _chksum); + /* source and destination IP addresses */ + PACK_STRUCT_FLD_S(ip4_addr_p_t src); + PACK_STRUCT_FLD_S(ip4_addr_p_t dest); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define IPH_V(hdr) ((hdr)->_v_hl >> 4) +#define IPH_HL(hdr) ((hdr)->_v_hl & 0x0f) +#define IPH_TOS(hdr) ((hdr)->_tos) +#define IPH_LEN(hdr) ((hdr)->_len) +#define IPH_ID(hdr) ((hdr)->_id) +#define IPH_OFFSET(hdr) ((hdr)->_offset) +#define IPH_TTL(hdr) ((hdr)->_ttl) +#define IPH_PROTO(hdr) ((hdr)->_proto) +#define IPH_CHKSUM(hdr) ((hdr)->_chksum) + +#define IPH_VHL_SET(hdr, v, hl) (hdr)->_v_hl = (u8_t)((((v) << 4) | (hl))) +#define IPH_TOS_SET(hdr, tos) (hdr)->_tos = (tos) +#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len) +#define IPH_ID_SET(hdr, id) (hdr)->_id = (id) +#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off) +#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl = (u8_t)(ttl) +#define IPH_PROTO_SET(hdr, proto) (hdr)->_proto = (u8_t)(proto) +#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum) + +#define ip_init() /* Compatibility define, no init needed. */ +struct netif *ip4_route(const ip4_addr_t *dest); +#if LWIP_IPV4_SRC_ROUTING +struct netif *ip4_route_src(const ip4_addr_t *dest, const ip4_addr_t *src); +#else /* LWIP_IPV4_SRC_ROUTING */ +#define ip4_route_src(dest, src) ip4_route(dest) +#endif /* LWIP_IPV4_SRC_ROUTING */ +err_t ip4_input(struct pbuf *p, struct netif *inp); +err_t ip4_output(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto); +err_t ip4_output_if(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif); +err_t ip4_output_if_src(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif); +#if LWIP_NETIF_HWADDRHINT +err_t ip4_output_hinted(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint); +#endif /* LWIP_NETIF_HWADDRHINT */ +#if IP_OPTIONS_SEND +err_t ip4_output_if_opt(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, + u16_t optlen); +err_t ip4_output_if_opt_src(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, + u16_t optlen); +#endif /* IP_OPTIONS_SEND */ + +#if LWIP_MULTICAST_TX_OPTIONS +void ip4_set_default_multicast_netif(struct netif* default_multicast_netif); +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#define ip4_netif_get_local_ip(netif) (((netif) != NULL) ? netif_ip_addr4(netif) : NULL) + +#if IP_DEBUG +void ip4_debug_print(struct pbuf *p); +#else +#define ip4_debug_print(p) +#endif /* IP_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 */ + +#endif /* LWIP_HDR_IP_H */ + + diff --git a/tools/sdk/include/lwip/lwip/ip4_addr.h b/tools/sdk/include/lwip/lwip/ip4_addr.h new file mode 100755 index 00000000..9483a2f7 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/ip4_addr.h @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_IP4_ADDR_H +#define LWIP_HDR_IP4_ADDR_H + +#include "lwip/opt.h" +#include "lwip/def.h" + +#if LWIP_IPV4 + +#ifdef __cplusplus +extern "C" { +#endif + +/* This is the aligned version of ip4_addr_t, + used as local variable, on the stack, etc. */ +struct ip4_addr { + u32_t addr; +}; + +/* This is the packed version of ip4_addr_t, + used in network headers that are itself packed */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip4_addr_packed { + PACK_STRUCT_FIELD(u32_t addr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** ip4_addr_t uses a struct for convenience only, so that the same defines can + * operate both on ip4_addr_t as well as on ip4_addr_p_t. */ +typedef struct ip4_addr ip4_addr_t; +typedef struct ip4_addr_packed ip4_addr_p_t; + +/* + * struct ipaddr2 is used in the definition of the ARP packet format in + * order to support compilers that don't have structure packing. + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip4_addr2 { + PACK_STRUCT_FIELD(u16_t addrw[2]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* Forward declaration to not include netif.h */ +struct netif; + +/** 255.255.255.255 */ +#define IPADDR_NONE ((u32_t)0xffffffffUL) +/** 127.0.0.1 */ +#define IPADDR_LOOPBACK ((u32_t)0x7f000001UL) +/** 0.0.0.0 */ +#define IPADDR_ANY ((u32_t)0x00000000UL) +/** 255.255.255.255 */ +#define IPADDR_BROADCAST ((u32_t)0xffffffffUL) + +/* Definitions of the bits in an Internet address integer. + + On subnets, host and network parts are found according to + the subnet mask, not these masks. */ +#define IP_CLASSA(a) ((((u32_t)(a)) & 0x80000000UL) == 0) +#define IP_CLASSA_NET 0xff000000 +#define IP_CLASSA_NSHIFT 24 +#define IP_CLASSA_HOST (0xffffffff & ~IP_CLASSA_NET) +#define IP_CLASSA_MAX 128 + +#define IP_CLASSB(a) ((((u32_t)(a)) & 0xc0000000UL) == 0x80000000UL) +#define IP_CLASSB_NET 0xffff0000 +#define IP_CLASSB_NSHIFT 16 +#define IP_CLASSB_HOST (0xffffffff & ~IP_CLASSB_NET) +#define IP_CLASSB_MAX 65536 + +#define IP_CLASSC(a) ((((u32_t)(a)) & 0xe0000000UL) == 0xc0000000UL) +#define IP_CLASSC_NET 0xffffff00 +#define IP_CLASSC_NSHIFT 8 +#define IP_CLASSC_HOST (0xffffffff & ~IP_CLASSC_NET) + +#define IP_CLASSD(a) (((u32_t)(a) & 0xf0000000UL) == 0xe0000000UL) +#define IP_CLASSD_NET 0xf0000000 /* These ones aren't really */ +#define IP_CLASSD_NSHIFT 28 /* net and host fields, but */ +#define IP_CLASSD_HOST 0x0fffffff /* routing needn't know. */ +#define IP_MULTICAST(a) IP_CLASSD(a) + +#define IP_EXPERIMENTAL(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) +#define IP_BADCLASS(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) + +#define IP_LOOPBACKNET 127 /* official! */ + + +#if BYTE_ORDER == BIG_ENDIAN +/** Set an IP address given by the four byte-parts */ +#define IP4_ADDR(ipaddr, a,b,c,d) \ + (ipaddr)->addr = ((u32_t)((a) & 0xff) << 24) | \ + ((u32_t)((b) & 0xff) << 16) | \ + ((u32_t)((c) & 0xff) << 8) | \ + (u32_t)((d) & 0xff) +#else +/** Set an IP address given by the four byte-parts. + Little-endian version that prevents the use of htonl. */ +#define IP4_ADDR(ipaddr, a,b,c,d) \ + (ipaddr)->addr = ((u32_t)((d) & 0xff) << 24) | \ + ((u32_t)((c) & 0xff) << 16) | \ + ((u32_t)((b) & 0xff) << 8) | \ + (u32_t)((a) & 0xff) +#endif + +/** MEMCPY-like copying of IP addresses where addresses are known to be + * 16-bit-aligned if the port is correctly configured (so a port could define + * this to copying 2 u16_t's) - no NULL-pointer-checking needed. */ +#ifndef IPADDR2_COPY +#define IPADDR2_COPY(dest, src) SMEMCPY(dest, src, sizeof(ip4_addr_t)) +#endif + +/** Copy IP address - faster than ip4_addr_set: no NULL check */ +#define ip4_addr_copy(dest, src) ((dest).addr = (src).addr) +/** Safely copy one IP address to another (src may be NULL) */ +#define ip4_addr_set(dest, src) ((dest)->addr = \ + ((src) == NULL ? 0 : \ + (src)->addr)) +/** Set complete address to zero */ +#define ip4_addr_set_zero(ipaddr) ((ipaddr)->addr = 0) +/** Set address to IPADDR_ANY (no need for htonl()) */ +#define ip4_addr_set_any(ipaddr) ((ipaddr)->addr = IPADDR_ANY) +/** Set address to loopback address */ +#define ip4_addr_set_loopback(ipaddr) ((ipaddr)->addr = PP_HTONL(IPADDR_LOOPBACK)) +/** Check if an address is in the loopback region */ +#define ip4_addr_isloopback(ipaddr) (((ipaddr)->addr & PP_HTONL(IP_CLASSA_NET)) == PP_HTONL(((u32_t)IP_LOOPBACKNET) << 24)) +/** Safely copy one IP address to another and change byte order + * from host- to network-order. */ +#define ip4_addr_set_hton(dest, src) ((dest)->addr = \ + ((src) == NULL ? 0:\ + htonl((src)->addr))) +/** IPv4 only: set the IP address given as an u32_t */ +#define ip4_addr_set_u32(dest_ipaddr, src_u32) ((dest_ipaddr)->addr = (src_u32)) +/** IPv4 only: get the IP address as an u32_t */ +#define ip4_addr_get_u32(src_ipaddr) ((src_ipaddr)->addr) + +/** Get the network address by combining host address with netmask */ +#define ip4_addr_get_network(target, host, netmask) do { ((target)->addr = ((host)->addr) & ((netmask)->addr)); } while(0) + +/** + * Determine if two address are on the same network. + * + * @arg addr1 IP address 1 + * @arg addr2 IP address 2 + * @arg mask network identifier mask + * @return !0 if the network identifiers of both address match + */ +#define ip4_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \ + (mask)->addr) == \ + ((addr2)->addr & \ + (mask)->addr)) +#define ip4_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr) + +#define ip4_addr_isany_val(addr1) ((addr1).addr == IPADDR_ANY) +#define ip4_addr_isany(addr1) ((addr1) == NULL || ip4_addr_isany_val(*(addr1))) + +#define ip4_addr_isbroadcast(addr1, netif) ip4_addr_isbroadcast_u32((addr1)->addr, netif) +u8_t ip4_addr_isbroadcast_u32(u32_t addr, const struct netif *netif); + +#define ip_addr_netmask_valid(netmask) ip4_addr_netmask_valid((netmask)->addr) +u8_t ip4_addr_netmask_valid(u32_t netmask); + +#define ip4_addr_ismulticast(addr1) (((addr1)->addr & PP_HTONL(0xf0000000UL)) == PP_HTONL(0xe0000000UL)) + +#define ip4_addr_islinklocal(addr1) (((addr1)->addr & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xa9fe0000UL)) + +#define ip4_addr_debug_print_parts(debug, a, b, c, d) \ + LWIP_DEBUGF(debug, ("%" U16_F ".%" U16_F ".%" U16_F ".%" U16_F, a, b, c, d)) +#define ip4_addr_debug_print(debug, ipaddr) \ + ip4_addr_debug_print_parts(debug, \ + (ipaddr) != NULL ? ip4_addr1_16(ipaddr) : 0, \ + (ipaddr) != NULL ? ip4_addr2_16(ipaddr) : 0, \ + (ipaddr) != NULL ? ip4_addr3_16(ipaddr) : 0, \ + (ipaddr) != NULL ? ip4_addr4_16(ipaddr) : 0) +#define ip4_addr_debug_print_val(debug, ipaddr) \ + ip4_addr_debug_print_parts(debug, \ + ip4_addr1_16(&(ipaddr)), \ + ip4_addr2_16(&(ipaddr)), \ + ip4_addr3_16(&(ipaddr)), \ + ip4_addr4_16(&(ipaddr))) + +/* Get one byte from the 4-byte address */ +#define ip4_addr1(ipaddr) (((const u8_t*)(&(ipaddr)->addr))[0]) +#define ip4_addr2(ipaddr) (((const u8_t*)(&(ipaddr)->addr))[1]) +#define ip4_addr3(ipaddr) (((const u8_t*)(&(ipaddr)->addr))[2]) +#define ip4_addr4(ipaddr) (((const u8_t*)(&(ipaddr)->addr))[3]) +/* These are cast to u16_t, with the intent that they are often arguments + * to printf using the U16_F format from cc.h. */ +#define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr)) +#define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr)) +#define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr)) +#define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr)) + +#define IP4ADDR_STRLEN_MAX 16 +#define IPADDR_STRLEN_MAX IP4ADDR_STRLEN_MAX + +/** For backwards compatibility */ +#define ip_ntoa(ipaddr) ipaddr_ntoa(ipaddr) + +u32_t ipaddr_addr(const char *cp); +int ip4addr_aton(const char *cp, ip4_addr_t *addr); +/** returns ptr to static buffer; not reentrant! */ +char *ip4addr_ntoa(const ip4_addr_t *addr); +char *ip4addr_ntoa_r(const ip4_addr_t *addr, char *buf, int buflen); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 */ + +#endif /* LWIP_HDR_IP_ADDR_H */ diff --git a/tools/sdk/include/lwip/lwip/ip6.h b/tools/sdk/include/lwip/lwip/ip6.h new file mode 100755 index 00000000..f1ffb6b7 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/ip6.h @@ -0,0 +1,197 @@ +/** + * @file + * + * IPv6 layer. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ +#ifndef LWIP_HDR_IP6_H +#define LWIP_HDR_IP6_H + +#include "lwip/opt.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/ip6_addr.h" +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" + +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define IP6_HLEN 40 + +#define IP6_NEXTH_HOPBYHOP 0 +#define IP6_NEXTH_TCP 6 +#define IP6_NEXTH_UDP 17 +#define IP6_NEXTH_ENCAPS 41 +#define IP6_NEXTH_ROUTING 43 +#define IP6_NEXTH_FRAGMENT 44 +#define IP6_NEXTH_ICMP6 58 +#define IP6_NEXTH_NONE 59 +#define IP6_NEXTH_DESTOPTS 60 +#define IP6_NEXTH_UDPLITE 136 + + +/* The IPv6 header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_hdr { + /* version / traffic class / flow label */ + PACK_STRUCT_FIELD(u32_t _v_tc_fl); + /* payload length */ + PACK_STRUCT_FIELD(u16_t _plen); + /* next header */ + PACK_STRUCT_FLD_8(u8_t _nexth); + /* hop limit */ + PACK_STRUCT_FLD_8(u8_t _hoplim); + /* source and destination IP addresses */ + PACK_STRUCT_FLD_S(ip6_addr_p_t src); + PACK_STRUCT_FLD_S(ip6_addr_p_t dest); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* Hop-by-hop router alert option. */ +#define IP6_HBH_HLEN 8 +#define IP6_PAD1_OPTION 0 +#define IP6_PADN_ALERT_OPTION 1 +#define IP6_ROUTER_ALERT_OPTION 5 +#define IP6_ROUTER_ALERT_VALUE_MLD 0 +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_hbh_hdr { + /* next header */ + PACK_STRUCT_FLD_8(u8_t _nexth); + /* header length */ + PACK_STRUCT_FLD_8(u8_t _hlen); + /* router alert option type */ + PACK_STRUCT_FLD_8(u8_t _ra_opt_type); + /* router alert option data len */ + PACK_STRUCT_FLD_8(u8_t _ra_opt_dlen); + /* router alert option data */ + PACK_STRUCT_FIELD(u16_t _ra_opt_data); + /* PadN option type */ + PACK_STRUCT_FLD_8(u8_t _padn_opt_type); + /* PadN option data len */ + PACK_STRUCT_FLD_8(u8_t _padn_opt_dlen); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* Fragment header. */ +#define IP6_FRAG_HLEN 8 +#define IP6_FRAG_OFFSET_MASK 0xfff8 +#define IP6_FRAG_MORE_FLAG 0x0001 +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_frag_hdr { + /* next header */ + PACK_STRUCT_FLD_8(u8_t _nexth); + /* reserved */ + PACK_STRUCT_FLD_8(u8_t reserved); + /* fragment offset */ + PACK_STRUCT_FIELD(u16_t _fragment_offset); + /* fragmented packet identification */ + PACK_STRUCT_FIELD(u32_t _identification); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define IP6H_V(hdr) ((ntohl((hdr)->_v_tc_fl) >> 28) & 0x0f) +#define IP6H_TC(hdr) ((ntohl((hdr)->_v_tc_fl) >> 20) & 0xff) +#define IP6H_FL(hdr) (ntohl((hdr)->_v_tc_fl) & 0x000fffff) +#define IP6H_PLEN(hdr) (ntohs((hdr)->_plen)) +#define IP6H_NEXTH(hdr) ((hdr)->_nexth) +#define IP6H_NEXTH_P(hdr) ((u8_t *)(hdr) + 6) +#define IP6H_HOPLIM(hdr) ((hdr)->_hoplim) + +#define IP6H_VTCFL_SET(hdr, v, tc, fl) (hdr)->_v_tc_fl = (htonl((((u32_t)(v)) << 28) | (((u32_t)(tc)) << 20) | (fl))) +#define IP6H_PLEN_SET(hdr, plen) (hdr)->_plen = htons(plen) +#define IP6H_NEXTH_SET(hdr, nexth) (hdr)->_nexth = (nexth) +#define IP6H_HOPLIM_SET(hdr, hl) (hdr)->_hoplim = (u8_t)(hl) + + +struct netif *ip6_route(const ip6_addr_t *src, const ip6_addr_t *dest); +const ip_addr_t *ip6_select_source_address(struct netif *netif, const ip6_addr_t * dest); +err_t ip6_input(struct pbuf *p, struct netif *inp); +err_t ip6_output(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, u8_t nexth); +err_t ip6_output_if(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, u8_t nexth, struct netif *netif); +err_t ip6_output_if_src(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, u8_t nexth, struct netif *netif); +#if LWIP_NETIF_HWADDRHINT +err_t ip6_output_hinted(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, u8_t nexth, u8_t *addr_hint); +#endif /* LWIP_NETIF_HWADDRHINT */ +#if LWIP_IPV6_MLD +err_t ip6_options_add_hbh_ra(struct pbuf * p, u8_t nexth, u8_t value); +#endif /* LWIP_IPV6_MLD */ + +#define ip6_netif_get_local_ip(netif, dest) (((netif) != NULL) ? \ + ip6_select_source_address(netif, dest) : NULL) + +#if IP6_DEBUG +void ip6_debug_print(struct pbuf *p); +#else +#define ip6_debug_print(p) +#endif /* IP6_DEBUG */ + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 */ + +#endif /* LWIP_HDR_IP6_H */ diff --git a/tools/sdk/include/lwip/lwip/ip6_addr.h b/tools/sdk/include/lwip/lwip/ip6_addr.h new file mode 100755 index 00000000..a75d8948 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/ip6_addr.h @@ -0,0 +1,301 @@ +/** + * @file + * + * IPv6 addresses. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * Structs and macros for handling IPv6 addresses. + * + * Please coordinate changes and requests with Ivan Delamer + * + */ +#ifndef LWIP_HDR_IP6_ADDR_H +#define LWIP_HDR_IP6_ADDR_H + +#include "lwip/opt.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* This is the aligned version of ip6_addr_t, + used as local variable, on the stack, etc. */ +struct ip6_addr { + u32_t addr[4]; +}; + +/* This is the packed version of ip6_addr_t, + used in network headers that are itself packed */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_addr_packed { + PACK_STRUCT_FIELD(u32_t addr[4]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +typedef struct ip6_addr ip6_addr_t; +typedef struct ip6_addr_packed ip6_addr_p_t; + + +#if BYTE_ORDER == BIG_ENDIAN +/** Set an IPv6 partial address given by byte-parts. */ +#define IP6_ADDR_PART(ip6addr, index, a,b,c,d) \ + (ip6addr)->addr[index] = ((u32_t)((a) & 0xff) << 24) | \ + ((u32_t)((b) & 0xff) << 16) | \ + ((u32_t)((c) & 0xff) << 8) | \ + (u32_t)((d) & 0xff) +#else +/** Set an IPv6 partial address given by byte-parts. +Little-endian version, stored in network order (no htonl). */ +#define IP6_ADDR_PART(ip6addr, index, a,b,c,d) \ + (ip6addr)->addr[index] = ((u32_t)((d) & 0xff) << 24) | \ + ((u32_t)((c) & 0xff) << 16) | \ + ((u32_t)((b) & 0xff) << 8) | \ + (u32_t)((a) & 0xff) +#endif + +/** Set a full IPv6 address by passing the 4 u32_t indices in network byte order + (use PP_HTONL() for constants) */ +#define IP6_ADDR(ip6addr, idx0, idx1, idx2, idx3) do { \ + (ip6addr)->addr[0] = idx0; \ + (ip6addr)->addr[1] = idx1; \ + (ip6addr)->addr[2] = idx2; \ + (ip6addr)->addr[3] = idx3; } while(0) + +/** Access address in 16-bit block */ +#define IP6_ADDR_BLOCK1(ip6addr) ((u16_t)(htonl((ip6addr)->addr[0]) >> 16) & 0xffff) +#define IP6_ADDR_BLOCK2(ip6addr) ((u16_t)(htonl((ip6addr)->addr[0])) & 0xffff) +#define IP6_ADDR_BLOCK3(ip6addr) ((u16_t)(htonl((ip6addr)->addr[1]) >> 16) & 0xffff) +#define IP6_ADDR_BLOCK4(ip6addr) ((u16_t)(htonl((ip6addr)->addr[1])) & 0xffff) +#define IP6_ADDR_BLOCK5(ip6addr) ((u16_t)(htonl((ip6addr)->addr[2]) >> 16) & 0xffff) +#define IP6_ADDR_BLOCK6(ip6addr) ((u16_t)(htonl((ip6addr)->addr[2])) & 0xffff) +#define IP6_ADDR_BLOCK7(ip6addr) ((u16_t)(htonl((ip6addr)->addr[3]) >> 16) & 0xffff) +#define IP6_ADDR_BLOCK8(ip6addr) ((u16_t)(htonl((ip6addr)->addr[3])) & 0xffff) + +/** Copy IPv6 address - faster than ip6_addr_set: no NULL check */ +#define ip6_addr_copy(dest, src) do{(dest).addr[0] = (src).addr[0]; \ + (dest).addr[1] = (src).addr[1]; \ + (dest).addr[2] = (src).addr[2]; \ + (dest).addr[3] = (src).addr[3];}while(0) +/** Safely copy one IPv6 address to another (src may be NULL) */ +#define ip6_addr_set(dest, src) do{(dest)->addr[0] = (src) == NULL ? 0 : (src)->addr[0]; \ + (dest)->addr[1] = (src) == NULL ? 0 : (src)->addr[1]; \ + (dest)->addr[2] = (src) == NULL ? 0 : (src)->addr[2]; \ + (dest)->addr[3] = (src) == NULL ? 0 : (src)->addr[3];}while(0) + +/** Set complete address to zero */ +#define ip6_addr_set_zero(ip6addr) do{(ip6addr)->addr[0] = 0; \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[2] = 0; \ + (ip6addr)->addr[3] = 0;}while(0) + +/** Set address to ipv6 'any' (no need for htonl()) */ +#define ip6_addr_set_any(ip6addr) ip6_addr_set_zero(ip6addr) +/** Set address to ipv6 loopback address */ +#define ip6_addr_set_loopback(ip6addr) do{(ip6addr)->addr[0] = 0; \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[2] = 0; \ + (ip6addr)->addr[3] = PP_HTONL(0x00000001UL);}while(0) +/** Safely copy one IPv6 address to another and change byte order + * from host- to network-order. */ +#define ip6_addr_set_hton(dest, src) do{(dest)->addr[0] = (src) == NULL ? 0 : htonl((src)->addr[0]); \ + (dest)->addr[1] = (src) == NULL ? 0 : htonl((src)->addr[1]); \ + (dest)->addr[2] = (src) == NULL ? 0 : htonl((src)->addr[2]); \ + (dest)->addr[3] = (src) == NULL ? 0 : htonl((src)->addr[3]);}while(0) + + +/** + * Determine if two IPv6 address are on the same network. + * + * @arg addr1 IPv6 address 1 + * @arg addr2 IPv6 address 2 + * @return !0 if the network identifiers of both address match + */ +#define ip6_addr_netcmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \ + ((addr1)->addr[1] == (addr2)->addr[1])) + +#define ip6_addr_cmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \ + ((addr1)->addr[1] == (addr2)->addr[1]) && \ + ((addr1)->addr[2] == (addr2)->addr[2]) && \ + ((addr1)->addr[3] == (addr2)->addr[3])) + +#define ip6_get_subnet_id(ip6addr) (htonl((ip6addr)->addr[2]) & 0x0000ffffUL) + +#define ip6_addr_isany_val(ip6addr) (((ip6addr).addr[0] == 0) && \ + ((ip6addr).addr[1] == 0) && \ + ((ip6addr).addr[2] == 0) && \ + ((ip6addr).addr[3] == 0)) +#define ip6_addr_isany(ip6addr) (((ip6addr) == NULL) || ip6_addr_isany_val(*(ip6addr))) + +#define ip6_addr_isloopback(ip6addr) (((ip6addr)->addr[0] == 0UL) && \ + ((ip6addr)->addr[1] == 0UL) && \ + ((ip6addr)->addr[2] == 0UL) && \ + ((ip6addr)->addr[3] == PP_HTONL(0x00000001UL))) + +#define ip6_addr_isglobal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xe0000000UL)) == PP_HTONL(0x20000000UL)) + +#define ip6_addr_islinklocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffc00000UL)) == PP_HTONL(0xfe800000UL)) + +#define ip6_addr_issitelocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffc00000UL)) == PP_HTONL(0xfec00000UL)) + +#define ip6_addr_isuniquelocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xfe000000UL)) == PP_HTONL(0xfc000000UL)) + +#define ip6_addr_ismulticast(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xff000000UL)) +#define ip6_addr_multicast_transient_flag(ip6addr) ((ip6addr)->addr[0] & PP_HTONL(0x00100000UL)) +#define ip6_addr_multicast_prefix_flag(ip6addr) ((ip6addr)->addr[0] & PP_HTONL(0x00200000UL)) +#define ip6_addr_multicast_rendezvous_flag(ip6addr) ((ip6addr)->addr[0] & PP_HTONL(0x00400000UL)) +#define ip6_addr_multicast_scope(ip6addr) ((htonl((ip6addr)->addr[0]) >> 16) & 0xf) +#define IP6_MULTICAST_SCOPE_RESERVED 0x0 +#define IP6_MULTICAST_SCOPE_RESERVED0 0x0 +#define IP6_MULTICAST_SCOPE_INTERFACE_LOCAL 0x1 +#define IP6_MULTICAST_SCOPE_LINK_LOCAL 0x2 +#define IP6_MULTICAST_SCOPE_RESERVED3 0x3 +#define IP6_MULTICAST_SCOPE_ADMIN_LOCAL 0x4 +#define IP6_MULTICAST_SCOPE_SITE_LOCAL 0x5 +#define IP6_MULTICAST_SCOPE_ORGANIZATION_LOCAL 0x8 +#define IP6_MULTICAST_SCOPE_GLOBAL 0xe +#define IP6_MULTICAST_SCOPE_RESERVEDF 0xf +#define ip6_addr_ismulticast_iflocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff010000UL)) +#define ip6_addr_ismulticast_linklocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff020000UL)) +#define ip6_addr_ismulticast_adminlocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff040000UL)) +#define ip6_addr_ismulticast_sitelocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff050000UL)) +#define ip6_addr_ismulticast_orglocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff080000UL)) +#define ip6_addr_ismulticast_global(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff0e0000UL)) + +/* TODO define get/set for well-know multicast addresses, e.g. ff02::1 */ +#define ip6_addr_isallnodes_iflocal(ip6addr) (((ip6addr)->addr[0] == PP_HTONL(0xff010000UL)) && \ + ((ip6addr)->addr[1] == 0UL) && \ + ((ip6addr)->addr[2] == 0UL) && \ + ((ip6addr)->addr[3] == PP_HTONL(0x00000001UL))) + +#define ip6_addr_isallnodes_linklocal(ip6addr) (((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \ + ((ip6addr)->addr[1] == 0UL) && \ + ((ip6addr)->addr[2] == 0UL) && \ + ((ip6addr)->addr[3] == PP_HTONL(0x00000001UL))) +#define ip6_addr_set_allnodes_linklocal(ip6addr) do{(ip6addr)->addr[0] = PP_HTONL(0xff020000UL); \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[2] = 0; \ + (ip6addr)->addr[3] = PP_HTONL(0x00000001UL);}while(0) + +#define ip6_addr_isallrouters_linklocal(ip6addr) (((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \ + ((ip6addr)->addr[1] == 0UL) && \ + ((ip6addr)->addr[2] == 0UL) && \ + ((ip6addr)->addr[3] == PP_HTONL(0x00000002UL))) +#define ip6_addr_set_allrouters_linklocal(ip6addr) do{(ip6addr)->addr[0] = PP_HTONL(0xff020000UL); \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[2] = 0; \ + (ip6addr)->addr[3] = PP_HTONL(0x00000002UL);}while(0) + +#define ip6_addr_issolicitednode(ip6addr) ( ((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \ + ((ip6addr)->addr[2] == PP_HTONL(0x00000001UL)) && \ + (((ip6addr)->addr[3] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xff000000UL)) ) + +#define ip6_addr_set_solicitednode(ip6addr, if_id) do{(ip6addr)->addr[0] = PP_HTONL(0xff020000UL); \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[2] = PP_HTONL(0x00000001UL); \ + (ip6addr)->addr[3] = (PP_HTONL(0xff000000UL) | (if_id));}while(0) + +#define ip6_addr_cmp_solicitednode(ip6addr, sn_addr) (((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \ + ((ip6addr)->addr[1] == 0) && \ + ((ip6addr)->addr[2] == PP_HTONL(0x00000001UL)) && \ + ((ip6addr)->addr[3] == (PP_HTONL(0xff000000UL) | (sn_addr)->addr[3]))) + +/* IPv6 address states. */ +#define IP6_ADDR_INVALID 0x00 +#define IP6_ADDR_TENTATIVE 0x08 +#define IP6_ADDR_TENTATIVE_1 0x09 /* 1 probe sent */ +#define IP6_ADDR_TENTATIVE_2 0x0a /* 2 probes sent */ +#define IP6_ADDR_TENTATIVE_3 0x0b /* 3 probes sent */ +#define IP6_ADDR_TENTATIVE_4 0x0c /* 4 probes sent */ +#define IP6_ADDR_TENTATIVE_5 0x0d /* 5 probes sent */ +#define IP6_ADDR_TENTATIVE_6 0x0e /* 6 probes sent */ +#define IP6_ADDR_TENTATIVE_7 0x0f /* 7 probes sent */ +#define IP6_ADDR_VALID 0x10 +#define IP6_ADDR_PREFERRED 0x30 +#define IP6_ADDR_DEPRECATED 0x50 + +#define ip6_addr_isinvalid(addr_state) (addr_state == IP6_ADDR_INVALID) +#define ip6_addr_istentative(addr_state) (addr_state & IP6_ADDR_TENTATIVE) +#define ip6_addr_isvalid(addr_state) (addr_state & IP6_ADDR_VALID) /* Include valid, preferred, and deprecated. */ +#define ip6_addr_ispreferred(addr_state) (addr_state == IP6_ADDR_PREFERRED) +#define ip6_addr_isdeprecated(addr_state) (addr_state == IP6_ADDR_DEPRECATED) + +#define ip6_addr_debug_print_parts(debug, a, b, c, d, e, f, g, h) \ + LWIP_DEBUGF(debug, ("%" X16_F ":%" X16_F ":%" X16_F ":%" X16_F ":%" X16_F ":%" X16_F ":%" X16_F ":%" X16_F, \ + a, b, c, d, e, f, g, h)) +#define ip6_addr_debug_print(debug, ipaddr) \ + ip6_addr_debug_print_parts(debug, \ + (ipaddr) != NULL ? IP6_ADDR_BLOCK1(ipaddr) : 0, \ + (ipaddr) != NULL ? IP6_ADDR_BLOCK2(ipaddr) : 0, \ + (ipaddr) != NULL ? IP6_ADDR_BLOCK3(ipaddr) : 0, \ + (ipaddr) != NULL ? IP6_ADDR_BLOCK4(ipaddr) : 0, \ + (ipaddr) != NULL ? IP6_ADDR_BLOCK5(ipaddr) : 0, \ + (ipaddr) != NULL ? IP6_ADDR_BLOCK6(ipaddr) : 0, \ + (ipaddr) != NULL ? IP6_ADDR_BLOCK7(ipaddr) : 0, \ + (ipaddr) != NULL ? IP6_ADDR_BLOCK8(ipaddr) : 0) +#define ip6_addr_debug_print_val(debug, ipaddr) \ + ip6_addr_debug_print_parts(debug, \ + IP6_ADDR_BLOCK1(&(ipaddr)), \ + IP6_ADDR_BLOCK2(&(ipaddr)), \ + IP6_ADDR_BLOCK3(&(ipaddr)), \ + IP6_ADDR_BLOCK4(&(ipaddr)), \ + IP6_ADDR_BLOCK5(&(ipaddr)), \ + IP6_ADDR_BLOCK6(&(ipaddr)), \ + IP6_ADDR_BLOCK7(&(ipaddr)), \ + IP6_ADDR_BLOCK8(&(ipaddr))) + +#define IP6ADDR_STRLEN_MAX 46 + +int ip6addr_aton(const char *cp, ip6_addr_t *addr); +/** returns ptr to static buffer; not reentrant! */ +char *ip6addr_ntoa(const ip6_addr_t *addr); +char *ip6addr_ntoa_r(const ip6_addr_t *addr, char *buf, int buflen); + + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 */ + +#endif /* LWIP_HDR_IP6_ADDR_H */ diff --git a/tools/sdk/include/lwip/lwip/ip6_frag.h b/tools/sdk/include/lwip/lwip/ip6_frag.h new file mode 100755 index 00000000..16336e58 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/ip6_frag.h @@ -0,0 +1,120 @@ +/** + * @file + * + * IPv6 fragmentation and reassembly. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ +#ifndef LWIP_HDR_IP6_FRAG_H +#define LWIP_HDR_IP6_FRAG_H + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip6_addr.h" +#include "lwip/ip6.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#if LWIP_IPV6 && LWIP_IPV6_REASS /* don't build if not configured for use in lwipopts.h */ + +/** IP6_FRAG_COPYHEADER==1: for platforms where sizeof(void*) > 4, this needs to + * be enabled (to not overwrite part of the data). When enabled, the IPv6 header + * is copied instead of referencing it, which gives more room for struct ip6_reass_helper */ +#ifndef IPV6_FRAG_COPYHEADER +#define IPV6_FRAG_COPYHEADER 0 +#endif + +/* The IPv6 reassembly timer interval in milliseconds. */ +#define IP6_REASS_TMR_INTERVAL 1000 + +/* Copy the complete header of the first fragment to struct ip6_reassdata + or just point to its original location in the first pbuf? */ +#if IPV6_FRAG_COPYHEADER +#define IPV6_FRAG_HDRPTR +#define IPV6_FRAG_HDRREF(hdr) (&(hdr)) +#else /* IPV6_FRAG_COPYHEADER */ +#define IPV6_FRAG_HDRPTR * +#define IPV6_FRAG_HDRREF(hdr) (hdr) +#endif /* IPV6_FRAG_COPYHEADER */ + +/* IPv6 reassembly helper struct. + * This is exported because memp needs to know the size. + */ +struct ip6_reassdata { + struct ip6_reassdata *next; + struct pbuf *p; + struct ip6_hdr IPV6_FRAG_HDRPTR iphdr; + u32_t identification; + u16_t datagram_len; + u8_t nexth; + u8_t timer; +}; + +#define ip6_reass_init() /* Compatibility define */ +void ip6_reass_tmr(void); +struct pbuf * ip6_reass(struct pbuf *p); + +#endif /* LWIP_IPV6 && LWIP_IPV6_REASS */ + +#if LWIP_IPV6 && LWIP_IPV6_FRAG /* don't build if not configured for use in lwipopts.h */ + +/** A custom pbuf that holds a reference to another pbuf, which is freed + * when this custom pbuf is freed. This is used to create a custom PBUF_REF + * that points into the original pbuf. */ +#ifndef LWIP_PBUF_CUSTOM_REF_DEFINED +#define LWIP_PBUF_CUSTOM_REF_DEFINED +struct pbuf_custom_ref { + /** 'base class' */ + struct pbuf_custom pc; + /** pointer to the original pbuf that is referenced */ + struct pbuf *original; +}; +#endif /* LWIP_PBUF_CUSTOM_REF_DEFINED */ + +err_t ip6_frag(struct pbuf *p, struct netif *netif, const ip6_addr_t *dest); + +#endif /* LWIP_IPV6 && LWIP_IPV6_FRAG */ + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_IP6_FRAG_H */ diff --git a/tools/sdk/include/lwip/lwip/ip_addr.h b/tools/sdk/include/lwip/lwip/ip_addr.h new file mode 100755 index 00000000..1e1ffb3f --- /dev/null +++ b/tools/sdk/include/lwip/lwip/ip_addr.h @@ -0,0 +1,291 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_IP_ADDR_H__ +#define LWIP_HDR_IP_ADDR_H__ + +#include "lwip/opt.h" +#include "lwip/def.h" + +#include "lwip/ip4_addr.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** These are the values for ip_addr_t.type */ +#define IPADDR_TYPE_V4 0U +#define IPADDR_TYPE_V6 6U +#define IPADDR_TYPE_ANY 46U + +#if LWIP_IPV4 && LWIP_IPV6 +/** A union struct for both IP version's addresses. + * ATTENTION: watch out for its size when adding IPv6 address scope! + */ +typedef struct _ip_addr { + union { + ip6_addr_t ip6; + ip4_addr_t ip4; + } u_addr; + u8_t type; +} ip_addr_t; + +extern const ip_addr_t ip_addr_any_type; + +#define IPADDR4_INIT(u32val) { { { { u32val, 0ul, 0ul, 0ul } } }, IPADDR_TYPE_V4 } +#define IPADDR6_INIT(a, b, c, d) { { { { a, b, c, d } } }, IPADDR_TYPE_V6 } + +#define IP_IS_ANY_TYPE_VAL(ipaddr) (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_ANY) +#define IPADDR_ANY_TYPE_INIT { { { { 0ul, 0ul, 0ul, 0ul } } }, IPADDR_TYPE_ANY } + +#define IP_IS_V6_VAL(ipaddr) (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_V6) +#define IP_IS_V6(ipaddr) (((ipaddr) != NULL) && IP_IS_V6_VAL(*(ipaddr))) +#define IP_SET_TYPE_VAL(ipaddr, iptype) do { (ipaddr).type = (iptype); }while(0) +#define IP_SET_TYPE(ipaddr, iptype) do { if((ipaddr) != NULL) { IP_SET_TYPE_VAL(*(ipaddr), iptype); }}while(0) +#define IP_GET_TYPE(ipaddr) ((ipaddr)->type) + +#define IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ipaddr) (IP_GET_TYPE(&pcb->local_ip) == IP_GET_TYPE(ipaddr)) +#define IP_ADDR_PCB_VERSION_MATCH(pcb, ipaddr) (IP_IS_ANY_TYPE_VAL(pcb->local_ip) || IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ipaddr)) + +/* Convert generic ip address to specific protocol version */ +#define ip_2_ip6(ipaddr) (&((ipaddr)->u_addr.ip6)) +#define ip_2_ip4(ipaddr) (&((ipaddr)->u_addr.ip4)) + +#define IP_ADDR4(ipaddr,a,b,c,d) do { IP4_ADDR(ip_2_ip4(ipaddr),a,b,c,d); \ + IP_SET_TYPE_VAL(*(ipaddr), IPADDR_TYPE_V4); } while(0) +#define IP_ADDR6(ipaddr,i0,i1,i2,i3) do { IP6_ADDR(ip_2_ip6(ipaddr),i0,i1,i2,i3); \ + IP_SET_TYPE_VAL(*(ipaddr), IPADDR_TYPE_V6); } while(0) + +#define ip_addr_copy(dest, src) do{ IP_SET_TYPE_VAL(dest, IP_GET_TYPE(&src)); if(IP_IS_V6_VAL(src)){ \ + ip6_addr_copy(*ip_2_ip6(&(dest)), *ip_2_ip6(&(src))); }else{ \ + ip4_addr_copy(*ip_2_ip4(&(dest)), *ip_2_ip4(&(src))); }}while(0) +#define ip_addr_copy_from_ip6(dest, src) do{ \ + ip6_addr_copy(*ip_2_ip6(&(dest)), src); IP_SET_TYPE_VAL(dest, IPADDR_TYPE_V6); }while(0) +#define ip_addr_copy_from_ip4(dest, src) do{ \ + ip4_addr_copy(*ip_2_ip4(&(dest)), src); IP_SET_TYPE_VAL(dest, IPADDR_TYPE_V4); }while(0) +#define ip_addr_set_ip4_u32(ipaddr, val) do{if(ipaddr){ip4_addr_set_u32(ip_2_ip4(ipaddr), val); \ + IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }}while(0) +#define ip_addr_get_ip4_u32(ipaddr) (((ipaddr) && !IP_IS_V6(ipaddr)) ? \ + ip4_addr_get_u32(ip_2_ip4(ipaddr)) : 0) + +#define ip_addr_set(dest, src) do{ IP_SET_TYPE(dest, IP_GET_TYPE(src)); if(IP_IS_V6(src)){ \ + ip6_addr_set(ip_2_ip6(dest), ip_2_ip6(src)); }else{ \ + ip4_addr_set(ip_2_ip4(dest), ip_2_ip4(src)); }}while(0) + +#define ip_addr_set_ipaddr(dest, src) ip_addr_set(dest, src) +#define ip_addr_set_zero(ipaddr) do{ \ + ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, 0); }while(0) +#define ip_addr_set_zero_ip4(ipaddr) do{ \ + ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }while(0) +#define ip_addr_set_zero_ip6(ipaddr) do{ \ + ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }while(0) +#define ip_addr_set_any(is_ipv6, ipaddr) do{if(is_ipv6){ \ + ip6_addr_set_any(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }else{ \ + ip4_addr_set_any(ip_2_ip4(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }}while(0) +#define ip_addr_set_loopback(is_ipv6, ipaddr) do{if(is_ipv6){ \ + ip6_addr_set_loopback(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }else{ \ + ip4_addr_set_loopback(ip_2_ip4(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }}while(0) +#define ip_addr_set_hton(dest, src) do{if(IP_IS_V6(src)){ \ + ip6_addr_set_hton(ip_2_ip6(ipaddr), (src)); IP_SET_TYPE(dest, IPADDR_TYPE_V6); }else{ \ + ip4_addr_set_hton(ip_2_ip4(ipaddr), (src)); IP_SET_TYPE(dest, IPADDR_TYPE_V4); }}while(0) +#define ip_addr_get_network(target, host, netmask) do{if(IP_IS_V6(host)){ \ + ip4_addr_set_zero(ip_2_ip4(target)); IP_SET_TYPE(target, IPADDR_TYPE_V6); } else { \ + ip4_addr_get_network(ip_2_ip4(target), ip_2_ip4(host), ip_2_ip4(netmask)); IP_SET_TYPE(target, IPADDR_TYPE_V4); }}while(0) +#define ip_addr_netcmp(addr1, addr2, mask) ((IP_IS_V6(addr1) && IP_IS_V6(addr2)) ? \ + 0 : \ + ip4_addr_netcmp(ip_2_ip4(addr1), ip_2_ip4(addr2), mask)) +#define ip_addr_cmp(addr1, addr2) ((IP_GET_TYPE(addr1) != IP_GET_TYPE(addr2)) ? 0 : (IP_IS_V6_VAL(*(addr1)) ? \ + ip6_addr_cmp(ip_2_ip6(addr1), ip_2_ip6(addr2)) : \ + ip4_addr_cmp(ip_2_ip4(addr1), ip_2_ip4(addr2)))) +#define ip_addr_isany(ipaddr) ((IP_IS_V6(ipaddr)) ? \ + ip6_addr_isany(ip_2_ip6(ipaddr)) : \ + ip4_addr_isany(ip_2_ip4(ipaddr))) +#define ip_addr_isany_val(ipaddr) ((IP_IS_V6_VAL(ipaddr)) ? \ + ip6_addr_isany_val(*ip_2_ip6(&(ipaddr))) : \ + ip4_addr_isany_val(*ip_2_ip4(&(ipaddr)))) +#define ip_addr_isbroadcast(ipaddr, netif) ((IP_IS_V6(ipaddr)) ? \ + 0 : \ + ip4_addr_isbroadcast(ip_2_ip4(ipaddr), netif)) +#define ip_addr_ismulticast(ipaddr) ((IP_IS_V6(ipaddr)) ? \ + ip6_addr_ismulticast(ip_2_ip6(ipaddr)) : \ + ip4_addr_ismulticast(ip_2_ip4(ipaddr))) +#define ip_addr_isloopback(ipaddr) ((IP_IS_V6(ipaddr)) ? \ + ip6_addr_isloopback(ip_2_ip6(ipaddr)) : \ + ip4_addr_isloopback(ip_2_ip4(ipaddr))) +#define ip_addr_islinklocal(ipaddr) ((IP_IS_V6(ipaddr)) ? \ + ip6_addr_islinklocal(ip_2_ip6(ipaddr)) : \ + ip4_addr_islinklocal(ip_2_ip4(ipaddr))) +#define ip_addr_debug_print(debug, ipaddr) do { if(IP_IS_V6(ipaddr)) { \ + ip6_addr_debug_print(debug, ip_2_ip6(ipaddr)); } else { \ + ip4_addr_debug_print(debug, ip_2_ip4(ipaddr)); }}while(0) +#define ip_addr_debug_print_val(debug, ipaddr) do { if(IP_IS_V6_VAL(ipaddr)) { \ + ip6_addr_debug_print_val(debug, *ip_2_ip6(&(ipaddr))); } else { \ + ip4_addr_debug_print_val(debug, *ip_2_ip4(&(ipaddr))); }}while(0) +#define ipaddr_ntoa(addr) (((addr) == NULL) ? "NULL" : \ + ((IP_IS_V6(addr)) ? ip6addr_ntoa(ip_2_ip6(addr)) : ip4addr_ntoa(ip_2_ip4(addr)))) +#define ipaddr_ntoa_r(addr, buf, buflen) (((addr) == NULL) ? "NULL" : \ + ((IP_IS_V6(addr)) ? ip6addr_ntoa_r(ip_2_ip6(addr), buf, buflen) : ip4addr_ntoa_r(ip_2_ip4(addr), buf, buflen))) +int ipaddr_aton(const char *cp, ip_addr_t *addr); + +#else /* LWIP_IPV4 && LWIP_IPV6 */ + +#define IP_ADDR_PCB_VERSION_MATCH(addr, pcb) 1 +#define IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ipaddr) 1 + +#if LWIP_IPV4 + +typedef ip4_addr_t ip_addr_t; +#define IPADDR4_INIT(u32val) { u32val } +#define IP_IS_V6_VAL(ipaddr) 0 +#define IP_IS_V6(ipaddr) 0 +#define IP_IS_ANY_TYPE_VAL(ipaddr) 0 +#define IP_SET_TYPE_VAL(ipaddr, iptype) +#define IP_SET_TYPE(ipaddr, iptype) +#define IP_GET_TYPE(ipaddr) IPADDR_TYPE_V4 +#define ip_2_ip4(ipaddr) (ipaddr) +#define IP_ADDR4(ipaddr,a,b,c,d) IP4_ADDR(ipaddr,a,b,c,d) + +#define ip_addr_copy(dest, src) ip4_addr_copy(dest, src) +#define ip_addr_copy_from_ip4(dest, src) ip4_addr_copy(dest, src) +#define ip_addr_set_ip4_u32(ipaddr, val) ip4_addr_set_u32(ip_2_ip4(ipaddr), val) +#define ip_addr_get_ip4_u32(ipaddr) ip4_addr_get_u32(ip_2_ip4(ipaddr)) +#define ip_addr_set(dest, src) ip4_addr_set(dest, src) +#define ip_addr_set_ipaddr(dest, src) ip4_addr_set(dest, src) +#define ip_addr_set_zero(ipaddr) ip4_addr_set_zero(ipaddr) +#define ip_addr_set_zero_ip4(ipaddr) ip4_addr_set_zero(ipaddr) +#define ip_addr_set_any(is_ipv6, ipaddr) ip4_addr_set_any(ipaddr) +#define ip_addr_set_loopback(is_ipv6, ipaddr) ip4_addr_set_loopback(ipaddr) +#define ip_addr_set_hton(dest, src) ip4_addr_set_hton(dest, src) +#define ip_addr_get_network(target, host, mask) ip4_addr_get_network(target, host, mask) +#define ip_addr_netcmp(addr1, addr2, mask) ip4_addr_netcmp(addr1, addr2, mask) +#define ip_addr_cmp(addr1, addr2) ip4_addr_cmp(addr1, addr2) +#define ip_addr_isany(ipaddr) ip4_addr_isany(ipaddr) +#define ip_addr_isany_val(ipaddr) ip4_addr_isany_val(ipaddr) +#define ip_addr_isloopback(ipaddr) ip4_addr_isloopback(ipaddr) +#define ip_addr_islinklocal(ipaddr) ip4_addr_islinklocal(ipaddr) +#define ip_addr_isbroadcast(addr, netif) ip4_addr_isbroadcast(addr, netif) +#define ip_addr_ismulticast(ipaddr) ip4_addr_ismulticast(ipaddr) +#define ip_addr_debug_print(debug, ipaddr) ip4_addr_debug_print(debug, ipaddr) +#define ip_addr_debug_print_val(debug, ipaddr) ip4_addr_debug_print_val(debug, ipaddr) +#define ipaddr_ntoa(ipaddr) ip4addr_ntoa(ipaddr) +#define ipaddr_ntoa_r(ipaddr, buf, buflen) ip4addr_ntoa_r(ipaddr, buf, buflen) +#define ipaddr_aton(cp, addr) ip4addr_aton(cp, addr) + +#else /* LWIP_IPV4 */ + +typedef ip6_addr_t ip_addr_t; +#define IPADDR6_INIT(a, b, c, d) { { a, b, c, d } } +#define IP_IS_V6_VAL(ipaddr) 1 +#define IP_IS_V6(ipaddr) 1 +#define IP_IS_ANY_TYPE_VAL(ipaddr) 0 +#define IP_SET_TYPE_VAL(ipaddr, iptype) +#define IP_SET_TYPE(ipaddr, iptype) +#define IP_GET_TYPE(ipaddr) IPADDR_TYPE_V6 +#define ip_2_ip6(ipaddr) (ipaddr) +#define IP_ADDR6(ipaddr,i0,i1,i2,i3) IP6_ADDR(ipaddr,i0,i1,i2,i3) + +#define ip_addr_copy(dest, src) ip6_addr_copy(dest, src) +#define ip_addr_copy_from_ip6(dest, src) ip6_addr_copy(dest, src) +#define ip_addr_set(dest, src) ip6_addr_set(dest, src) +#define ip_addr_set_ipaddr(dest, src) ip6_addr_set(dest, src) +#define ip_addr_set_zero(ipaddr) ip6_addr_set_zero(ipaddr) +#define ip_addr_set_zero_ip6(ipaddr) ip6_addr_set_zero(ipaddr) +#define ip_addr_set_any(is_ipv6, ipaddr) ip6_addr_set_any(ipaddr) +#define ip_addr_set_loopback(is_ipv6, ipaddr) ip6_addr_set_loopback(ipaddr) +#define ip_addr_set_hton(dest, src) ip6_addr_set_hton(dest, src) +#define ip_addr_get_network(target, host, mask) ip6_addr_set_zero(target) +#define ip_addr_netcmp(addr1, addr2, mask) 0 +#define ip_addr_cmp(addr1, addr2) ip6_addr_cmp(addr1, addr2) +#define ip_addr_isany(ipaddr) ip6_addr_isany(ipaddr) +#define ip_addr_isany_val(ipaddr) ip6_addr_isany_val(ipaddr) +#define ip_addr_isloopback(ipaddr) ip6_addr_isloopback(ipaddr) +#define ip_addr_islinklocal(ipaddr) ip6_addr_islinklocal(ipaddr) +#define ip_addr_isbroadcast(addr, netif) 0 +#define ip_addr_ismulticast(ipaddr) ip6_addr_ismulticast(ipaddr) +#define ip_addr_debug_print(debug, ipaddr) ip6_addr_debug_print(debug, ipaddr) +#define ip_addr_debug_print_val(debug, ipaddr) ip6_addr_debug_print_val(debug, ipaddr) +#define ipaddr_ntoa(ipaddr) ip6addr_ntoa(ipaddr) +#define ipaddr_ntoa_r(ipaddr, buf, buflen) ip6addr_ntoa_r(ipaddr, buf, buflen) +#define ipaddr_aton(cp, addr) ip6addr_aton(cp, addr) + +#endif /* LWIP_IPV4 */ +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + +#if LWIP_IPV4 + +extern const ip_addr_t ip_addr_any; +extern const ip_addr_t ip_addr_broadcast; + +/** IP_ADDR_ can be used as a fixed/const ip_addr_t + * for the IPv4 wildcard and the broadcast address + */ +#define IP_ADDR_ANY (&ip_addr_any) +#define IP_ADDR_BROADCAST (&ip_addr_broadcast) +/** IP4_ADDR_ can be used as a fixed/const ip4_addr_t + * for the wildcard and the broadcast address + */ +#define IP4_ADDR_ANY (ip_2_ip4(&ip_addr_any)) +#define IP4_ADDR_BROADCAST (ip_2_ip4(&ip_addr_broadcast)) + +#endif /* LWIP_IPV4*/ + +#if LWIP_IPV6 + +extern const ip_addr_t ip6_addr_any; + +/** IP6_ADDR_ANY can be used as a fixed ip_addr_t + * for the IPv6 wildcard address + */ +#define IP6_ADDR_ANY (&ip6_addr_any) +/** IP6_ADDR_ANY6 can be used as a fixed ip6_addr_t + * for the IPv6 wildcard address + */ +#define IP6_ADDR_ANY6 (ip_2_ip6(&ip6_addr_any)) + +#if !LWIP_IPV4 +/** Just a little upgrade-helper for IPv6-only configurations: */ +#define IP_ADDR_ANY IP6_ADDR_ANY +#endif /* !LWIP_IPV4 */ + +#endif + +#if LWIP_IPV4 && LWIP_IPV6 +#define IP_ANY_TYPE (&ip_addr_any_type) +#else +#define IP_ANY_TYPE IP_ADDR_ANY +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_IP_ADDR_H__ */ diff --git a/tools/sdk/include/lwip/lwip/ip_frag.h b/tools/sdk/include/lwip/lwip/ip_frag.h new file mode 100755 index 00000000..deeb2f4e --- /dev/null +++ b/tools/sdk/include/lwip/lwip/ip_frag.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Jani Monoses + * + */ + +#ifndef LWIP_HDR_IP_FRAG_H +#define LWIP_HDR_IP_FRAG_H + +#include "lwip/opt.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/ip_addr.h" +#include "lwip/ip.h" + +#if LWIP_IPV4 + +#ifdef __cplusplus +extern "C" { +#endif + +#if IP_REASSEMBLY +/* The IP reassembly timer interval in milliseconds. */ +#define IP_TMR_INTERVAL 1000 + +/* IP reassembly helper struct. + * This is exported because memp needs to know the size. + */ +struct ip_reassdata { + struct ip_reassdata *next; + struct pbuf *p; + struct ip_hdr iphdr; + u16_t datagram_len; + u8_t flags; + u8_t timer; +}; + +void ip_reass_init(void); +void ip_reass_tmr(void); +struct pbuf * ip4_reass(struct pbuf *p); +#endif /* IP_REASSEMBLY */ + +#if IP_FRAG +#if !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF +/** A custom pbuf that holds a reference to another pbuf, which is freed + * when this custom pbuf is freed. This is used to create a custom PBUF_REF + * that points into the original pbuf. */ +#ifndef LWIP_PBUF_CUSTOM_REF_DEFINED +#define LWIP_PBUF_CUSTOM_REF_DEFINED +struct pbuf_custom_ref { + /** 'base class' */ + struct pbuf_custom pc; + /** pointer to the original pbuf that is referenced */ + struct pbuf *original; +}; +#endif /* LWIP_PBUF_CUSTOM_REF_DEFINED */ +#endif /* !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF */ + +err_t ip4_frag(struct pbuf *p, struct netif *netif, const ip4_addr_t *dest); +#endif /* IP_FRAG */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 */ + +#endif /* LWIP_HDR_IP_FRAG_H */ diff --git a/tools/sdk/include/lwip/lwip/lwip_debug.h b/tools/sdk/include/lwip/lwip/lwip_debug.h new file mode 100644 index 00000000..abfcd2c1 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/lwip_debug.h @@ -0,0 +1,24 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + + +#ifndef _LWIP_DEBUG_H +#define _LWIP_DEBUG_H + +void dbg_lwip_tcp_pcb_show(void); +void dbg_lwip_udp_pcb_show(void); +void dbg_lwip_tcp_rxtx_show(void); +void dbg_lwip_udp_rxtx_show(void); + +#endif diff --git a/tools/sdk/include/lwip/lwip/mem.h b/tools/sdk/include/lwip/lwip/mem.h new file mode 100755 index 00000000..ca76f663 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/mem.h @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_MEM_H +#define LWIP_HDR_MEM_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if MEM_LIBC_MALLOC + +#include /* for size_t */ + +typedef size_t mem_size_t; +#define MEM_SIZE_F SZT_F + +/* aliases for C library malloc() */ +#define mem_init() +/* in case C library malloc() needs extra protection, + * allow these defines to be overridden. + */ + +#ifndef MEMLEAK_DEBUG + +#ifndef mem_free +#define mem_free free +#endif +#ifndef mem_malloc +#define mem_malloc malloc +#endif +#ifndef mem_calloc +#define mem_calloc calloc +#endif + +/* DYC_NEED_TO_DO_LATER +#ifndef mem_realloc +#define mem_realloc +#endif +#ifndef mem_zalloc +#define mem_zalloc +#endif +*/ + +#else +/* +#ifndef mem_free +#define mem_free(s) \ + do{\ + const char *file = mem_debug_file;\ + vPortFree(s, file, __LINE__);\ + }while(0) +#endif +#ifndef mem_malloc +#define mem_malloc(s) ({const char *file = mem_debug_file; pvPortMalloc(s, file, __LINE__);}) +#endif +#ifndef mem_calloc +#define mem_calloc(s) ({const char *file = mem_debug_file; pvPortCalloc(s, file, __LINE__);}) +#endif +#ifndef mem_realloc +#define mem_realloc(p, s) ({const char *file = mem_debug_file; pvPortRealloc(p, s, file, __LINE__);}) +#endif +#ifndef mem_zalloc +#define mem_zalloc(s) ({const char *file = mem_debug_file; pvPortZalloc(s, file, __LINE__);}) +#endif +*/ +#endif + + + +/* Since there is no C library allocation function to shrink memory without + moving it, define this to nothing. */ +#ifndef mem_trim +#define mem_trim(mem, size) (mem) +#endif +#else /* MEM_LIBC_MALLOC */ + +/* MEM_SIZE would have to be aligned, but using 64000 here instead of + * 65535 leaves some room for alignment... + */ +#if MEM_SIZE > 64000L +typedef u32_t mem_size_t; +#define MEM_SIZE_F U32_F +#else +typedef u16_t mem_size_t; +#define MEM_SIZE_F U16_F +#endif /* MEM_SIZE > 64000 */ + +#if MEM_USE_POOLS +/** mem_init is not used when using pools instead of a heap */ +#define mem_init() +/** mem_trim is not used when using pools instead of a heap: + we can't free part of a pool element and don't want to copy the rest */ +#define mem_trim(mem, size) (mem) +#else /* MEM_USE_POOLS */ +/* lwIP alternative malloc */ +void mem_init(void); +void *mem_trim(void *mem, mem_size_t size); +#endif /* MEM_USE_POOLS */ +void *mem_malloc(mem_size_t size); +void *mem_calloc(mem_size_t count, mem_size_t size); +void mem_free(void *mem); +#endif /* MEM_LIBC_MALLOC */ + +/** Calculate memory size for an aligned buffer - returns the next highest + * multiple of MEM_ALIGNMENT (e.g. LWIP_MEM_ALIGN_SIZE(3) and + * LWIP_MEM_ALIGN_SIZE(4) will both yield 4 for MEM_ALIGNMENT == 4). + */ +#ifndef LWIP_MEM_ALIGN_SIZE +#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1U) & ~(MEM_ALIGNMENT-1U)) +#endif + +/** Calculate safe memory size for an aligned buffer when using an unaligned + * type as storage. This includes a safety-margin on (MEM_ALIGNMENT - 1) at the + * start (e.g. if buffer is u8_t[] and actual data will be u32_t*) + */ +#ifndef LWIP_MEM_ALIGN_BUFFER +#define LWIP_MEM_ALIGN_BUFFER(size) (((size) + MEM_ALIGNMENT - 1U)) +#endif + +/** Align a memory pointer to the alignment defined by MEM_ALIGNMENT + * so that ADDR % MEM_ALIGNMENT == 0 + */ +#ifndef LWIP_MEM_ALIGN +#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + MEM_ALIGNMENT - 1) & ~(mem_ptr_t)(MEM_ALIGNMENT-1))) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_MEM_H */ diff --git a/tools/sdk/include/lwip/lwip/memp.h b/tools/sdk/include/lwip/lwip/memp.h new file mode 100755 index 00000000..d7463f2b --- /dev/null +++ b/tools/sdk/include/lwip/lwip/memp.h @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef LWIP_HDR_MEMP_H +#define LWIP_HDR_MEMP_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* run once with empty definition to handle all custom includes in lwippools.h */ +#define LWIP_MEMPOOL(name,num,size,desc) +#include "lwip/priv/memp_std.h" + +/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */ +typedef enum { +#define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name, +#include "lwip/priv/memp_std.h" + MEMP_MAX +} memp_t; + +#include "lwip/priv/memp_priv.h" + +/* Private mempools example: + * .h: only when pool is used in multiple .c files: LWIP_MEMPOOL_PROTOTYPE(my_private_pool); + * .c: + * - in global variables section: LWIP_MEMPOOL_DECLARE(my_private_pool, 10, sizeof(foo), "Some description") + * - call ONCE before using pool (e.g. in some init() function): LWIP_MEMPOOL_INIT(my_private_pool); + * - allocate: void* my_new_mem = LWIP_MEMPOOL_ALLOC(my_private_pool); + * - free: LWIP_MEMPOOL_FREE(my_private_pool, my_new_mem); + * + * To relocate a pool, declare it as extern in cc.h. Example for GCC: + * extern u8_t __attribute__((section(".onchip_mem"))) memp_memory_my_private_pool[]; + */ + +extern const struct memp_desc* const memp_pools[MEMP_MAX]; + +#define LWIP_MEMPOOL_PROTOTYPE(name) extern const struct memp_desc memp_ ## name + +#if MEMP_MEM_MALLOC + +#include "lwip/mem.h" + +#define memp_init() +#define memp_malloc(type) mem_malloc(memp_pools[type]->size) +#define memp_free(type, mem) mem_free(mem) + +#define LWIP_MEMPOOL_DECLARE(name,num,size,desc) \ + const struct memp_desc memp_ ## name = { \ + LWIP_MEM_ALIGN_SIZE(size) \ + }; + +#define LWIP_MEMPOOL_INIT(name) +#define LWIP_MEMPOOL_ALLOC(name) mem_malloc(memp_ ## name.size) +#define LWIP_MEMPOOL_FREE(name, x) mem_free(x) + +#else /* MEMP_MEM_MALLOC */ + +#define LWIP_MEMPOOL_DECLARE(name,num,size,desc) u8_t memp_memory_ ## name ## _base \ + [((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))]; \ + \ + static struct memp *memp_tab_ ## name; \ + \ + const struct memp_desc memp_ ## name = { \ + LWIP_MEM_ALIGN_SIZE(size), \ + (num), \ + DECLARE_LWIP_MEMPOOL_DESC(desc) \ + memp_memory_ ## name ## _base, \ + &memp_tab_ ## name \ + }; + +#define LWIP_MEMPOOL_INIT(name) memp_init_pool(&memp_ ## name) +#define LWIP_MEMPOOL_ALLOC(name) memp_malloc_pool(&memp_ ## name) +#define LWIP_MEMPOOL_FREE(name, x) memp_free_pool(&memp_ ## name, (x)) + +#if MEM_USE_POOLS +/** This structure is used to save the pool one element came from. */ +struct memp_malloc_helper +{ + memp_t poolnr; +#if MEMP_OVERFLOW_CHECK + u16_t size; +#endif /* MEMP_OVERFLOW_CHECK */ +}; + +#endif /* MEM_USE_POOLS */ + +void memp_init(void); + +#if MEMP_OVERFLOW_CHECK +void *memp_malloc_fn(memp_t type, const char* file, const int line); +#define memp_malloc(t) memp_malloc_fn((t), __FILE__, __LINE__) +#else +void *memp_malloc(memp_t type); +#endif +void memp_free(memp_t type, void *mem); + +#endif /* MEMP_MEM_MALLOC */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_MEMP_H */ diff --git a/tools/sdk/include/lwip/lwip/mld6.h b/tools/sdk/include/lwip/lwip/mld6.h new file mode 100755 index 00000000..a54dd49e --- /dev/null +++ b/tools/sdk/include/lwip/lwip/mld6.h @@ -0,0 +1,119 @@ +/** + * @file + * + * Multicast listener discovery for IPv6. Aims to be compliant with RFC 2710. + * No support for MLDv2. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_MLD6_H +#define LWIP_HDR_MLD6_H + +#include "lwip/opt.h" + +#if LWIP_IPV6_MLD && LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/netif.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +struct mld_group { + /** next link */ + struct mld_group *next; + /** interface on which the group is active */ + struct netif *netif; + /** multicast address */ + ip6_addr_t group_address; + /** signifies we were the last person to report */ + u8_t last_reporter_flag; + /** current state of the group */ + u8_t group_state; + /** timer for reporting */ + u16_t timer; + /** counter of simultaneous uses */ + u8_t use; +}; + +/** Multicast listener report/query/done message header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct mld_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t max_resp_delay); + PACK_STRUCT_FIELD(u16_t reserved); + PACK_STRUCT_FLD_S(ip6_addr_p_t multicast_address); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define MLD6_TMR_INTERVAL 100 /* Milliseconds */ + +/* MAC Filter Actions, these are passed to a netif's + * mld_mac_filter callback function. */ +#define MLD6_DEL_MAC_FILTER 0 +#define MLD6_ADD_MAC_FILTER 1 + + +err_t mld6_stop(struct netif *netif); +void mld6_report_groups(struct netif *netif); +void mld6_tmr(void); +struct mld_group *mld6_lookfor_group(struct netif *ifp, const ip6_addr_t *addr); +void mld6_input(struct pbuf *p, struct netif *inp); +err_t mld6_joingroup(const ip6_addr_t *srcaddr, const ip6_addr_t *groupaddr); +err_t mld6_joingroup_netif(struct netif *netif, const ip6_addr_t *groupaddr); +err_t mld6_leavegroup(const ip6_addr_t *srcaddr, const ip6_addr_t *groupaddr); +err_t mld6_leavegroup_netif(struct netif *netif, const ip6_addr_t *groupaddr); + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6_MLD && LWIP_IPV6 */ + +#endif /* LWIP_HDR_MLD6_H */ diff --git a/tools/sdk/include/lwip/lwip/nd6.h b/tools/sdk/include/lwip/lwip/nd6.h new file mode 100755 index 00000000..d0646f1b --- /dev/null +++ b/tools/sdk/include/lwip/lwip/nd6.h @@ -0,0 +1,361 @@ +/** + * @file + * + * Neighbor discovery and stateless address autoconfiguration for IPv6. + * Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862 + * (Address autoconfiguration). + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_ND6_H +#define LWIP_HDR_ND6_H + +#include "lwip/opt.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +/* Struct for tables. */ +struct nd6_neighbor_cache_entry { + ip6_addr_t next_hop_address; + struct netif * netif; + u8_t lladdr[NETIF_MAX_HWADDR_LEN]; + /*u32_t pmtu;*/ +#if LWIP_ND6_QUEUEING + /** Pointer to queue of pending outgoing packets on this entry. */ + struct nd6_q_entry *q; +#else /* LWIP_ND6_QUEUEING */ + /** Pointer to a single pending outgoing packet on this entry. */ + struct pbuf *q; +#endif /* LWIP_ND6_QUEUEING */ + u8_t state; + u8_t isrouter; + union { + u32_t reachable_time; + u32_t delay_time; + u32_t probes_sent; + u32_t stale_time; + } counter; +}; + +struct nd6_destination_cache_entry { + ip6_addr_t destination_addr; + ip6_addr_t next_hop_addr; + u16_t pmtu; + u32_t age; +}; + +struct nd6_prefix_list_entry { + ip6_addr_t prefix; + struct netif * netif; + u32_t invalidation_timer; +#if LWIP_IPV6_AUTOCONFIG + u8_t flags; +#define ND6_PREFIX_AUTOCONFIG_AUTONOMOUS 0x01 +#define ND6_PREFIX_AUTOCONFIG_ADDRESS_GENERATED 0x02 +#define ND6_PREFIX_AUTOCONFIG_ADDRESS_DUPLICATE 0x04 +#endif /* LWIP_IPV6_AUTOCONFIG */ +}; + +struct nd6_router_list_entry { + struct nd6_neighbor_cache_entry * neighbor_entry; + u32_t invalidation_timer; + u8_t flags; +}; + + +enum nd6_neighbor_cache_entry_state { + ND6_NO_ENTRY = 0, + ND6_INCOMPLETE, + ND6_REACHABLE, + ND6_STALE, + ND6_DELAY, + ND6_PROBE +}; + +#if LWIP_ND6_QUEUEING +/** struct for queueing outgoing packets for unknown address + * defined here to be accessed by memp.h + */ +struct nd6_q_entry { + struct nd6_q_entry *next; + struct pbuf *p; +}; +#endif /* LWIP_ND6_QUEUEING */ + +/** Neighbor solicitation message header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ns_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t reserved); + PACK_STRUCT_FLD_S(ip6_addr_p_t target_address); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Neighbor advertisement message header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct na_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FLD_8(u8_t flags); + PACK_STRUCT_FLD_8(u8_t reserved[3]); + PACK_STRUCT_FLD_S(ip6_addr_p_t target_address); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define ND6_FLAG_ROUTER (0x80) +#define ND6_FLAG_SOLICITED (0x40) +#define ND6_FLAG_OVERRIDE (0x20) + +/** Router solicitation message header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct rs_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t reserved); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Router advertisement message header. */ +#define ND6_RA_FLAG_MANAGED_ADDR_CONFIG (0x80) +#define ND6_RA_FLAG_OTHER_CONFIG (0x40) +#define ND6_RA_FLAG_HOME_AGENT (0x20) +#define ND6_RA_PREFERENCE_MASK (0x18) +#define ND6_RA_PREFERENCE_HIGH (0x08) +#define ND6_RA_PREFERENCE_MEDIUM (0x00) +#define ND6_RA_PREFERENCE_LOW (0x18) +#define ND6_RA_PREFERENCE_DISABLED (0x10) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ra_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FLD_8(u8_t current_hop_limit); + PACK_STRUCT_FLD_8(u8_t flags); + PACK_STRUCT_FIELD(u16_t router_lifetime); + PACK_STRUCT_FIELD(u32_t reachable_time); + PACK_STRUCT_FIELD(u32_t retrans_timer); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Redirect message header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct redirect_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t reserved); + PACK_STRUCT_FLD_S(ip6_addr_p_t target_address); + PACK_STRUCT_FLD_S(ip6_addr_p_t destination_address); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Link-layer address option. */ +#define ND6_OPTION_TYPE_SOURCE_LLADDR (0x01) +#define ND6_OPTION_TYPE_TARGET_LLADDR (0x02) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct lladdr_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FLD_8(u8_t addr[NETIF_MAX_HWADDR_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Prefix information option. */ +#define ND6_OPTION_TYPE_PREFIX_INFO (0x03) +#define ND6_PREFIX_FLAG_ON_LINK (0x80) +#define ND6_PREFIX_FLAG_AUTONOMOUS (0x40) +#define ND6_PREFIX_FLAG_ROUTER_ADDRESS (0x20) +#define ND6_PREFIX_FLAG_SITE_PREFIX (0x10) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct prefix_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FLD_8(u8_t prefix_length); + PACK_STRUCT_FLD_8(u8_t flags); + PACK_STRUCT_FIELD(u32_t valid_lifetime); + PACK_STRUCT_FIELD(u32_t preferred_lifetime); + PACK_STRUCT_FLD_8(u8_t reserved2[3]); + PACK_STRUCT_FLD_8(u8_t site_prefix_length); + PACK_STRUCT_FLD_S(ip6_addr_p_t prefix); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Redirected header option. */ +#define ND6_OPTION_TYPE_REDIR_HDR (0x04) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct redirected_header_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FLD_8(u8_t reserved[6]); + /* Portion of redirected packet follows. */ + /* PACK_STRUCT_FLD_8(u8_t redirected[8]); */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** MTU option. */ +#define ND6_OPTION_TYPE_MTU (0x05) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct mtu_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FIELD(u16_t reserved); + PACK_STRUCT_FIELD(u32_t mtu); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Route information option. */ +#define ND6_OPTION_TYPE_ROUTE_INFO (24) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct route_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FLD_8(u8_t prefix_length); + PACK_STRUCT_FLD_8(u8_t preference); + PACK_STRUCT_FIELD(u32_t route_lifetime); + PACK_STRUCT_FLD_S(ip6_addr_p_t prefix); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** 1 second period */ +#define ND6_TMR_INTERVAL 1000 + +/* Router tables. */ +/* TODO make these static? and entries accessible through API? */ +extern struct nd6_neighbor_cache_entry neighbor_cache[]; +extern struct nd6_destination_cache_entry destination_cache[]; +extern struct nd6_prefix_list_entry prefix_list[]; +extern struct nd6_router_list_entry default_router_list[]; + +/* Default values, can be updated by a RA message. */ +extern u32_t reachable_time; +extern u32_t retrans_timer; + +void nd6_tmr(void); +void nd6_input(struct pbuf *p, struct netif *inp); +s8_t nd6_get_next_hop_entry(const ip6_addr_t * ip6addr, struct netif * netif); +s8_t nd6_select_router(const ip6_addr_t * ip6addr, struct netif * netif); +u16_t nd6_get_destination_mtu(const ip6_addr_t * ip6addr, struct netif * netif); +err_t nd6_queue_packet(s8_t neighbor_index, struct pbuf * p); +#if LWIP_ND6_TCP_REACHABILITY_HINTS +void nd6_reachability_hint(const ip6_addr_t * ip6addr); +#endif /* LWIP_ND6_TCP_REACHABILITY_HINTS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 */ + +#endif /* LWIP_HDR_ND6_H */ diff --git a/tools/sdk/include/lwip/lwip/netbuf.h b/tools/sdk/include/lwip/lwip/netbuf.h new file mode 100755 index 00000000..8875e12d --- /dev/null +++ b/tools/sdk/include/lwip/lwip/netbuf.h @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_NETBUF_H +#define LWIP_HDR_NETBUF_H + +#include "lwip/opt.h" + +#if LWIP_NETCONN || LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ +/* Note: Netconn API is always available when sockets are enabled - + * sockets are implemented on top of them */ + +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** This netbuf has dest-addr/port set */ +#define NETBUF_FLAG_DESTADDR 0x01 +/** This netbuf includes a checksum */ +#define NETBUF_FLAG_CHKSUM 0x02 + +struct netbuf { + struct pbuf *p, *ptr; + ip_addr_t addr; + u16_t port; +#if LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY +#if LWIP_CHECKSUM_ON_COPY + u8_t flags; +#endif /* LWIP_CHECKSUM_ON_COPY */ + u16_t toport_chksum; +#if LWIP_NETBUF_RECVINFO + ip_addr_t toaddr; +#endif /* LWIP_NETBUF_RECVINFO */ +#endif /* LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY */ +}; + +/* Network buffer functions: */ +struct netbuf * netbuf_new (void); +void netbuf_delete (struct netbuf *buf); +void * netbuf_alloc (struct netbuf *buf, u16_t size); +void netbuf_free (struct netbuf *buf); +err_t netbuf_ref (struct netbuf *buf, + const void *dataptr, u16_t size); +void netbuf_chain (struct netbuf *head, struct netbuf *tail); + +err_t netbuf_data (struct netbuf *buf, + void **dataptr, u16_t *len); +s8_t netbuf_next (struct netbuf *buf); +void netbuf_first (struct netbuf *buf); + + +#define netbuf_copy_partial(buf, dataptr, len, offset) \ + pbuf_copy_partial((buf)->p, (dataptr), (len), (offset)) +#define netbuf_copy(buf,dataptr,len) netbuf_copy_partial(buf, dataptr, len, 0) +#define netbuf_take(buf, dataptr, len) pbuf_take((buf)->p, dataptr, len) +#define netbuf_len(buf) ((buf)->p->tot_len) +#define netbuf_fromaddr(buf) (&((buf)->addr)) +#define netbuf_set_fromaddr(buf, fromaddr) ip_addr_set(&((buf)->addr), fromaddr) +#define netbuf_fromport(buf) ((buf)->port) +#if LWIP_NETBUF_RECVINFO +#define netbuf_destaddr(buf) (&((buf)->toaddr)) +#define netbuf_set_destaddr(buf, destaddr) ip_addr_set(&((buf)->toaddr), destaddr) +#if LWIP_CHECKSUM_ON_COPY +#define netbuf_destport(buf) (((buf)->flags & NETBUF_FLAG_DESTADDR) ? (buf)->toport_chksum : 0) +#else /* LWIP_CHECKSUM_ON_COPY */ +#define netbuf_destport(buf) ((buf)->toport_chksum) +#endif /* LWIP_CHECKSUM_ON_COPY */ +#endif /* LWIP_NETBUF_RECVINFO */ +#if LWIP_CHECKSUM_ON_COPY +#define netbuf_set_chksum(buf, chksum) do { (buf)->flags = NETBUF_FLAG_CHKSUM; \ + (buf)->toport_chksum = chksum; } while(0) +#endif /* LWIP_CHECKSUM_ON_COPY */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETCONN || LWIP_SOCKET */ + +#endif /* LWIP_HDR_NETBUF_H */ diff --git a/tools/sdk/include/lwip/lwip/netdb.h b/tools/sdk/include/lwip/lwip/netdb.h new file mode 100755 index 00000000..144a6e0b --- /dev/null +++ b/tools/sdk/include/lwip/lwip/netdb.h @@ -0,0 +1,142 @@ +/* + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_NETDB_H +#define LWIP_HDR_NETDB_H + +#include "lwip/opt.h" + +#if LWIP_DNS && LWIP_SOCKET + +#include /* for size_t */ + +#include "lwip/inet.h" +#include "lwip/sockets.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* some rarely used options */ +#ifndef LWIP_DNS_API_DECLARE_H_ERRNO +#define LWIP_DNS_API_DECLARE_H_ERRNO 1 +#endif + +#ifndef LWIP_DNS_API_DEFINE_ERRORS +#define LWIP_DNS_API_DEFINE_ERRORS 1 +#endif + +#ifndef LWIP_DNS_API_DEFINE_FLAGS +#define LWIP_DNS_API_DEFINE_FLAGS 1 +#endif + +#ifndef LWIP_DNS_API_DECLARE_STRUCTS +#define LWIP_DNS_API_DECLARE_STRUCTS 1 +#endif + +#if LWIP_DNS_API_DEFINE_ERRORS +/** Errors used by the DNS API functions, h_errno can be one of them */ +#define EAI_NONAME 200 +#define EAI_SERVICE 201 +#define EAI_FAIL 202 +#define EAI_MEMORY 203 +#define EAI_FAMILY 204 + +#define HOST_NOT_FOUND 210 +#define NO_DATA 211 +#define NO_RECOVERY 212 +#define TRY_AGAIN 213 +#endif /* LWIP_DNS_API_DEFINE_ERRORS */ + +#if LWIP_DNS_API_DEFINE_FLAGS +/* input flags for struct addrinfo */ +#define AI_PASSIVE 0x01 +#define AI_CANONNAME 0x02 +#define AI_NUMERICHOST 0x04 +#define AI_NUMERICSERV 0x08 +#define AI_V4MAPPED 0x10 +#define AI_ALL 0x20 +#define AI_ADDRCONFIG 0x40 +#endif /* LWIP_DNS_API_DEFINE_FLAGS */ + +#if LWIP_DNS_API_DECLARE_STRUCTS +struct hostent { + char *h_name; /* Official name of the host. */ + char **h_aliases; /* A pointer to an array of pointers to alternative host names, + terminated by a null pointer. */ + int h_addrtype; /* Address type. */ + int h_length; /* The length, in bytes, of the address. */ + char **h_addr_list; /* A pointer to an array of pointers to network addresses (in + network byte order) for the host, terminated by a null pointer. */ +#define h_addr h_addr_list[0] /* for backward compatibility */ +}; + +struct addrinfo { + int ai_flags; /* Input flags. */ + int ai_family; /* Address family of socket. */ + int ai_socktype; /* Socket type. */ + int ai_protocol; /* Protocol of socket. */ + socklen_t ai_addrlen; /* Length of socket address. */ + struct sockaddr *ai_addr; /* Socket address of socket. */ + char *ai_canonname; /* Canonical name of service location. */ + struct addrinfo *ai_next; /* Pointer to next in list. */ +}; +#endif /* LWIP_DNS_API_DECLARE_STRUCTS */ + +#define NETDB_ELEM_SIZE (sizeof(struct addrinfo) + sizeof(struct sockaddr_storage) + DNS_MAX_NAME_LENGTH + 1) + +#if LWIP_DNS_API_DECLARE_H_ERRNO +/* application accessible error code set by the DNS API functions */ +extern int h_errno; +#endif /* LWIP_DNS_API_DECLARE_H_ERRNO*/ + +struct hostent *lwip_gethostbyname(const char *name); +int lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf, + size_t buflen, struct hostent **result, int *h_errnop); +void lwip_freeaddrinfo(struct addrinfo *ai); +int lwip_getaddrinfo(const char *nodename, + const char *servname, + const struct addrinfo *hints, + struct addrinfo **res); + +#if LWIP_COMPAT_SOCKETS +#define gethostbyname(name) lwip_gethostbyname(name) +#define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \ + lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop) +#define freeaddrinfo(addrinfo) lwip_freeaddrinfo(addrinfo) +#define getaddrinfo(nodname, servname, hints, res) \ + lwip_getaddrinfo(nodname, servname, hints, res) +#endif /* LWIP_COMPAT_SOCKETS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_DNS && LWIP_SOCKET */ + +#endif /* LWIP_HDR_NETDB_H */ diff --git a/tools/sdk/include/lwip/lwip/netif.h b/tools/sdk/include/lwip/lwip/netif.h new file mode 100755 index 00000000..99066a5a --- /dev/null +++ b/tools/sdk/include/lwip/lwip/netif.h @@ -0,0 +1,447 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_NETIF_H +#define LWIP_HDR_NETIF_H + +#include "lwip/opt.h" + +#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) + +#include "lwip/err.h" + +#include "lwip/ip_addr.h" + +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/stats.h" + +#if LWIP_DHCP +struct dhcp; +#endif +#if LWIP_AUTOIP +struct autoip; +#endif +#if LWIP_IPV6_DHCP6 +struct dhcp6; +#endif /* LWIP_IPV6_DHCP6 */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Throughout this file, IP addresses are expected to be in + * the same byte order as in IP_PCB. */ + +/** Must be the maximum of all used hardware address lengths + across all types of interfaces in use. + This does not have to be changed, normally. */ +#ifndef NETIF_MAX_HWADDR_LEN +#define NETIF_MAX_HWADDR_LEN 6U +#endif + +/** Whether the network interface is 'up'. This is + * a software flag used to control whether this network + * interface is enabled and processes traffic. + * It must be set by the startup code before this netif can be used + * (also for dhcp/autoip). + */ +#define NETIF_FLAG_UP 0x01U +/** If set, the netif has broadcast capability. + * Set by the netif driver in its init function. */ +#define NETIF_FLAG_BROADCAST 0x02U +/** If set, the interface has an active link + * (set by the network interface driver). + * Either set by the netif driver in its init function (if the link + * is up at that time) or at a later point once the link comes up + * (if link detection is supported by the hardware). */ +#define NETIF_FLAG_LINK_UP 0x04U +/** If set, the netif is an ethernet device using ARP. + * Set by the netif driver in its init function. + * Used to check input packet types and use of DHCP. */ +#define NETIF_FLAG_ETHARP 0x08U +/** If set, the netif is an ethernet device. It might not use + * ARP or TCP/IP if it is used for PPPoE only. + */ +#define NETIF_FLAG_ETHERNET 0x10U +/** If set, the netif has IGMP capability. + * Set by the netif driver in its init function. */ +#define NETIF_FLAG_IGMP 0x20U +/** If set, the netif has MLD6 capability. + * Set by the netif driver in its init function. */ +#define NETIF_FLAG_MLD6 0x40U + +#if LWIP_CHECKSUM_CTRL_PER_NETIF +#define NETIF_CHECKSUM_GEN_IP 0x0001 +#define NETIF_CHECKSUM_GEN_UDP 0x0002 +#define NETIF_CHECKSUM_GEN_TCP 0x0004 +#define NETIF_CHECKSUM_GEN_ICMP 0x0008 +#define NETIF_CHECKSUM_GEN_ICMP6 0x0010 +#define NETIF_CHECKSUM_CHECK_IP 0x0100 +#define NETIF_CHECKSUM_CHECK_UDP 0x0200 +#define NETIF_CHECKSUM_CHECK_TCP 0x0400 +#define NETIF_CHECKSUM_CHECK_ICMP 0x0800 +#define NETIF_CHECKSUM_CHECK_ICMP6 0x1000 +#define NETIF_CHECKSUM_ENABLE_ALL 0xFFFF +#define NETIF_CHECKSUM_DISABLE_ALL 0x0000 +#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF */ + +struct netif; + +/** Function prototype for netif init functions. Set up flags and output/linkoutput + * callback functions in this function. + * + * @param netif The netif to initialize + */ +typedef err_t (*netif_init_fn)(struct netif *netif); +/** Function prototype for netif->input functions. This function is saved as 'input' + * callback function in the netif struct. Call it when a packet has been received. + * + * @param p The received packet, copied into a pbuf + * @param inp The netif which received the packet + */ +typedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp); + +#if LWIP_IPV4 +/** Function prototype for netif->output functions. Called by lwIP when a packet + * shall be sent. For ethernet netif, set this to 'etharp_output' and set + * 'linkoutput'. + * + * @param netif The netif which shall send a packet + * @param p The packet to send (p->payload points to IP header) + * @param ipaddr The IP address to which the packet shall be sent + */ +typedef err_t (*netif_output_fn)(struct netif *netif, struct pbuf *p, + const ip4_addr_t *ipaddr); +#endif /* LWIP_IPV4*/ + +#if LWIP_IPV6 +/** Function prototype for netif->output_ip6 functions. Called by lwIP when a packet + * shall be sent. For ethernet netif, set this to 'ethip6_output' and set + * 'linkoutput'. + * + * @param netif The netif which shall send a packet + * @param p The packet to send (p->payload points to IP header) + * @param ipaddr The IPv6 address to which the packet shall be sent + */ +typedef err_t (*netif_output_ip6_fn)(struct netif *netif, struct pbuf *p, + const ip6_addr_t *ipaddr); +#endif /* LWIP_IPV6 */ + +/** Function prototype for netif->linkoutput functions. Only used for ethernet + * netifs. This function is called by ARP when a packet shall be sent. + * + * @param netif The netif which shall send a packet + * @param p The packet to send (raw ethernet packet) + */ +typedef err_t (*netif_linkoutput_fn)(struct netif *netif, struct pbuf *p); +/** Function prototype for netif status- or link-callback functions. */ +typedef void (*netif_status_callback_fn)(struct netif *netif); +#if LWIP_IPV4 && LWIP_IGMP +/** Function prototype for netif igmp_mac_filter functions */ +typedef err_t (*netif_igmp_mac_filter_fn)(struct netif *netif, + const ip4_addr_t *group, u8_t action); +#endif /* LWIP_IPV4 && LWIP_IGMP */ +#if LWIP_IPV6 && LWIP_IPV6_MLD +/** Function prototype for netif mld_mac_filter functions */ +typedef err_t (*netif_mld_mac_filter_fn)(struct netif *netif, + const ip6_addr_t *group, u8_t action); +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + + +#ifdef LWIP_ESP8266 +/*add DHCP event processing by LiuHan*/ +typedef void (*dhcp_event_fn)(void); +#endif + + +/** Generic data structure used for all lwIP network interfaces. + * The following fields should be filled in by the initialization + * function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ +struct netif { + /** pointer to next in linked list */ + struct netif *next; + +#ifdef LWIP_ESP8266 +//ip_addr_t is changed by marco IPV4, IPV6 + ip_addr_t link_local_addr; +#endif + +#if LWIP_IPV4 + /** IP address configuration in network byte order */ + ip_addr_t ip_addr; + ip_addr_t netmask; + ip_addr_t gw; +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + /** Array of IPv6 addresses for this netif. */ + ip_addr_t ip6_addr[LWIP_IPV6_NUM_ADDRESSES]; + /** The state of each IPv6 address (Tentative, Preferred, etc). + * @see ip6_addr.h */ + u8_t ip6_addr_state[LWIP_IPV6_NUM_ADDRESSES]; +#endif /* LWIP_IPV6 */ + /** This function is called by the network device driver + * to pass a packet up the TCP/IP stack. */ + netif_input_fn input; +#if LWIP_IPV4 + /** This function is called by the IP module when it wants + * to send a packet on the interface. This function typically + * first resolves the hardware address, then sends the packet. */ + netif_output_fn output; +#endif /* LWIP_IPV4 */ + /** This function is called by the ARP module when it wants + * to send a packet on the interface. This function outputs + * the pbuf as-is on the link medium. */ + netif_linkoutput_fn linkoutput; +#if LWIP_IPV6 + /** This function is called by the IPv6 module when it wants + * to send a packet on the interface. This function typically + * first resolves the hardware address, then sends the packet. */ + netif_output_ip6_fn output_ip6; +#endif /* LWIP_IPV6 */ +#if LWIP_NETIF_STATUS_CALLBACK + /** This function is called when the netif state is set to up or down + */ + netif_status_callback_fn status_callback; +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_LINK_CALLBACK + /** This function is called when the netif link is set to up or down + */ + netif_status_callback_fn link_callback; +#endif /* LWIP_NETIF_LINK_CALLBACK */ +#if LWIP_NETIF_REMOVE_CALLBACK + /** This function is called when the netif has been removed */ + netif_status_callback_fn remove_callback; +#endif /* LWIP_NETIF_REMOVE_CALLBACK */ + /** This field can be set by the device driver and could point + * to state information for the device. */ + void *state; +#if LWIP_DHCP + /** the DHCP client state information for this netif */ + struct dhcp *dhcp; + +#ifdef LWIP_ESP8266 + struct udp_pcb *dhcps_pcb; + dhcp_event_fn dhcp_event; +#endif + +#endif /* LWIP_DHCP */ + +#if LWIP_AUTOIP + /** the AutoIP client state information for this netif */ + struct autoip *autoip; +#endif + +#if LWIP_IPV6_AUTOCONFIG + /** is this netif enabled for IPv6 autoconfiguration */ + u8_t ip6_autoconfig_enabled; +#endif /* LWIP_IPV6_AUTOCONFIG */ + +#if LWIP_IPV6_SEND_ROUTER_SOLICIT + /** Number of Router Solicitation messages that remain to be sent. */ + u8_t rs_count; +#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */ + +#if LWIP_IPV6_DHCP6 + /** the DHCPv6 client state information for this netif */ + struct dhcp6 *dhcp6; +#endif /* LWIP_IPV6_DHCP6 */ + +#if LWIP_NETIF_HOSTNAME + /* the hostname for this netif, NULL is a valid value */ + const char* hostname; +#endif /* LWIP_NETIF_HOSTNAME */ + +#if LWIP_CHECKSUM_CTRL_PER_NETIF + u16_t chksum_flags; +#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF*/ + + /** maximum transfer unit (in bytes) */ + u16_t mtu; + /** number of bytes used in hwaddr */ + u8_t hwaddr_len; + /** link level hardware address of this interface */ + u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; + /** flags (see NETIF_FLAG_ above) */ + u8_t flags; + /** descriptive abbreviation */ + char name[2]; + /** number of this interface */ + u8_t num; + +#if MIB2_STATS + /** link type (from "snmp_ifType" enum from snmp_mib2.h) */ + u8_t link_type; + /** (estimate) link speed */ + u32_t link_speed; + /** timestamp at last change made (up/down) */ + u32_t ts; + /** counters */ + struct stats_mib2_netif_ctrs mib2_counters; +#endif /* MIB2_STATS */ + +#if LWIP_IPV4 && LWIP_IGMP + /** This function could be called to add or delete an entry in the multicast + filter table of the ethernet MAC.*/ + netif_igmp_mac_filter_fn igmp_mac_filter; +#endif /* LWIP_IPV4 && LWIP_IGMP */ + +#if LWIP_IPV6 && LWIP_IPV6_MLD + /** This function could be called to add or delete an entry in the IPv6 multicast + filter table of the ethernet MAC. */ + netif_mld_mac_filter_fn mld_mac_filter; +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + +#if LWIP_NETIF_HWADDRHINT + u8_t *addr_hint; +#endif /* LWIP_NETIF_HWADDRHINT */ +#if ENABLE_LOOPBACK + /* List of packets to be queued for ourselves. */ + struct pbuf *loop_first; + struct pbuf *loop_last; +#if LWIP_LOOPBACK_MAX_PBUFS + u16_t loop_cnt_current; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ +#endif /* ENABLE_LOOPBACK */ +}; + +#if LWIP_CHECKSUM_CTRL_PER_NETIF +#define NETIF_SET_CHECKSUM_CTRL(netif, chksumflags) do { \ + (netif)->chksum_flags = chksumflags; } while(0) +#define IF__NETIF_CHECKSUM_ENABLED(netif, chksumflag) if (((netif) == NULL) || (((netif)->chksum_flags & (chksumflag)) != 0)) +#else /* LWIP_CHECKSUM_CTRL_PER_NETIF */ +#define NETIF_SET_CHECKSUM_CTRL(netif, chksumflags) +#define IF__NETIF_CHECKSUM_ENABLED(netif, chksumflag) +#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF */ + +/** The list of network interfaces. */ +extern struct netif *netif_list; +/** The default network interface. */ +extern struct netif *netif_default; + +void netif_init(void); + +struct netif *netif_add(struct netif *netif, +#if LWIP_IPV4 + const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw, +#endif /* LWIP_IPV4 */ + void *state, netif_init_fn init, netif_input_fn input); +#if LWIP_IPV4 +void netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, + const ip4_addr_t *gw); +#endif /* LWIP_IPV4 */ +void netif_remove(struct netif * netif); + +/* Returns a network interface given its name. The name is of the form + "et0", where the first two letters are the "name" field in the + netif structure, and the digit is in the num field in the same + structure. */ +struct netif *netif_find(const char *name); + +void netif_set_default(struct netif *netif); + +#if LWIP_IPV4 +void netif_set_ipaddr(struct netif *netif, const ip4_addr_t *ipaddr); +void netif_set_netmask(struct netif *netif, const ip4_addr_t *netmask); +void netif_set_gw(struct netif *netif, const ip4_addr_t *gw); +#define netif_ip4_addr(netif) ((const ip4_addr_t*)ip_2_ip4(&((netif)->ip_addr))) +#define netif_ip4_netmask(netif) ((const ip4_addr_t*)ip_2_ip4(&((netif)->netmask))) +#define netif_ip4_gw(netif) ((const ip4_addr_t*)ip_2_ip4(&((netif)->gw))) +#define netif_ip_addr4(netif) ((const ip_addr_t*)&((netif)->ip_addr)) +#define netif_ip_gw4(netif) ((const ip_addr_t*)&((netif)->gw)) +#endif /* LWIP_IPV4 */ + +void netif_set_up(struct netif *netif); +void netif_set_down(struct netif *netif); +/** Ask if an interface is up */ +#define netif_is_up(netif) (((netif)->flags & NETIF_FLAG_UP) ? (u8_t)1 : (u8_t)0) + +#if LWIP_NETIF_STATUS_CALLBACK +void netif_set_status_callback(struct netif *netif, netif_status_callback_fn status_callback); +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_REMOVE_CALLBACK +void netif_set_remove_callback(struct netif *netif, netif_status_callback_fn remove_callback); +#endif /* LWIP_NETIF_REMOVE_CALLBACK */ + +void netif_set_link_up(struct netif *netif); +void netif_set_link_down(struct netif *netif); +/** Ask if a link is up */ +#define netif_is_link_up(netif) (((netif)->flags & NETIF_FLAG_LINK_UP) ? (u8_t)1 : (u8_t)0) + +#if LWIP_NETIF_LINK_CALLBACK +void netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback); +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +#if LWIP_NETIF_HOSTNAME +#define netif_set_hostname(netif, name) do { if((netif) != NULL) { (netif)->hostname = name; }}while(0) +#define netif_get_hostname(netif) (((netif) != NULL) ? ((netif)->hostname) : NULL) +#endif /* LWIP_NETIF_HOSTNAME */ + +#if LWIP_IGMP +#define netif_set_igmp_mac_filter(netif, function) do { if((netif) != NULL) { (netif)->igmp_mac_filter = function; }}while(0) +#define netif_get_igmp_mac_filter(netif) (((netif) != NULL) ? ((netif)->igmp_mac_filter) : NULL) +#endif /* LWIP_IGMP */ + +#if LWIP_IPV6 && LWIP_IPV6_MLD +#define netif_set_mld_mac_filter(netif, function) do { if((netif) != NULL) { (netif)->mld_mac_filter = function; }}while(0) +#define netif_get_mld_mac_filter(netif) (((netif) != NULL) ? ((netif)->mld_mac_filter) : NULL) +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + +#if ENABLE_LOOPBACK +err_t netif_loop_output(struct netif *netif, struct pbuf *p); +void netif_poll(struct netif *netif); +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +void netif_poll_all(void); +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ + +#if LWIP_IPV6 +#define netif_ip_addr6(netif, i) ((const ip_addr_t*)(&((netif)->ip6_addr[i]))) +#define netif_ip6_addr(netif, i) ((const ip6_addr_t*)ip_2_ip6(&((netif)->ip6_addr[i]))) +#define netif_ip6_addr_set(netif, i, addr6) do { ip6_addr_set(ip_2_ip6(&((netif)->ip6_addr[i])), addr6); IP_SET_TYPE_VAL((netif)->ip6_addr[i], IPADDR_TYPE_V6); } while(0) +#define netif_ip6_addr_state(netif, i) ((netif)->ip6_addr_state[i]) +#define netif_ip6_addr_set_state(netif, i, state) ((netif)->ip6_addr_state[i] = (state)) +s8_t netif_get_ip6_addr_match(struct netif *netif, const ip6_addr_t *ip6addr); +void netif_create_ip6_linklocal_address(struct netif *netif, u8_t from_mac_48bit); +err_t netif_add_ip6_address(struct netif *netif, const ip6_addr_t *ip6addr, s8_t *chosen_idx); +#endif /* LWIP_IPV6 */ + +#if LWIP_NETIF_HWADDRHINT +#define NETIF_SET_HWADDRHINT(netif, hint) ((netif)->addr_hint = (hint)) +#else /* LWIP_NETIF_HWADDRHINT */ +#define NETIF_SET_HWADDRHINT(netif, hint) +#endif /* LWIP_NETIF_HWADDRHINT */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_NETIF_H */ diff --git a/tools/sdk/include/lwip/lwip/netifapi.h b/tools/sdk/include/lwip/lwip/netifapi.h new file mode 100755 index 00000000..b09316be --- /dev/null +++ b/tools/sdk/include/lwip/lwip/netifapi.h @@ -0,0 +1,108 @@ +/* + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + */ +#ifndef LWIP_HDR_NETIFAPI_H +#define LWIP_HDR_NETIFAPI_H + +#include "lwip/opt.h" + +#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/sys.h" +#include "lwip/netif.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" +#include "lwip/priv/tcpip_priv.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_MPU_COMPATIBLE +#define NETIFAPI_IPADDR_DEF(type, m) type m +#else /* LWIP_MPU_COMPATIBLE */ +#define NETIFAPI_IPADDR_DEF(type, m) const type * m +#endif /* LWIP_MPU_COMPATIBLE */ + +typedef void (*netifapi_void_fn)(struct netif *netif); +typedef err_t (*netifapi_errt_fn)(struct netif *netif); + +struct netifapi_msg { + struct tcpip_api_call call; + struct netif *netif; + union { + struct { +#if LWIP_IPV4 + NETIFAPI_IPADDR_DEF(ip4_addr_t, ipaddr); + NETIFAPI_IPADDR_DEF(ip4_addr_t, netmask); + NETIFAPI_IPADDR_DEF(ip4_addr_t, gw); +#endif /* LWIP_IPV4 */ + void *state; + netif_init_fn init; + netif_input_fn input; + } add; + struct { + netifapi_void_fn voidfunc; + netifapi_errt_fn errtfunc; + } common; + } msg; +}; + + +/* API for application */ +err_t netifapi_netif_add(struct netif *netif, +#if LWIP_IPV4 + const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw, +#endif /* LWIP_IPV4 */ + void *state, netif_init_fn init, netif_input_fn input); + +#if LWIP_IPV4 +err_t netifapi_netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr, + const ip4_addr_t *netmask, const ip4_addr_t *gw); +#endif /* LWIP_IPV4*/ + +err_t netifapi_netif_common(struct netif *netif, netifapi_void_fn voidfunc, + netifapi_errt_fn errtfunc); + +#define netifapi_netif_remove(n) netifapi_netif_common(n, netif_remove, NULL) +#define netifapi_netif_set_up(n) netifapi_netif_common(n, netif_set_up, NULL) +#define netifapi_netif_set_down(n) netifapi_netif_common(n, netif_set_down, NULL) +#define netifapi_netif_set_default(n) netifapi_netif_common(n, netif_set_default, NULL) +#define netifapi_dhcp_start(n) netifapi_netif_common(n, NULL, dhcp_start) +#define netifapi_dhcp_stop(n) netifapi_netif_common(n, dhcp_stop, NULL) +#define netifapi_dhcp_inform(n) netifapi_netif_common(n, dhcp_inform, NULL) +#define netifapi_dhcp_renew(n) netifapi_netif_common(n, NULL, dhcp_renew) +#define netifapi_dhcp_release(n) netifapi_netif_common(n, NULL, dhcp_release) +#define netifapi_autoip_start(n) netifapi_netif_common(n, NULL, autoip_start) +#define netifapi_autoip_stop(n) netifapi_netif_common(n, NULL, autoip_stop) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETIF_API */ + +#endif /* LWIP_HDR_NETIFAPI_H */ diff --git a/tools/sdk/include/lwip/lwip/opt.h b/tools/sdk/include/lwip/lwip/opt.h new file mode 100755 index 00000000..76fff880 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/opt.h @@ -0,0 +1,3015 @@ +/** + * @file + * + * lwIP Options Configuration + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_OPT_H +#define LWIP_HDR_OPT_H + +/* + * Include user defined options first. Anything not defined in these files + * will be set to standard values. Override anything you don't like! + */ +#include "lwipopts.h" +#include "lwip/debug.h" + +/* + ----------------------------------------------- + ---------- Platform specific locking ---------- + ----------------------------------------------- +*/ + +/** + * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain + * critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#ifndef SYS_LIGHTWEIGHT_PROT +#define SYS_LIGHTWEIGHT_PROT 0 +#endif + +/** + * NO_SYS==1: Provides VERY minimal functionality. Otherwise, + * use lwIP facilities. + */ +#ifndef NO_SYS +#define NO_SYS 0 +#endif + +/** + * NO_SYS_NO_TIMERS==1: Drop support for sys_timeout when NO_SYS==1 + * Mainly for compatibility to old versions. + */ +#ifndef NO_SYS_NO_TIMERS +#define NO_SYS_NO_TIMERS 0 +#endif + +/** + * MEMCPY: override this if you have a faster implementation at hand than the + * one included in your C library + */ +#ifndef MEMCPY +#define MEMCPY(dst,src,len) memcpy(dst,src,len) +#endif + +/** + * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a + * call to memcpy() if the length is known at compile time and is small. + */ +#ifndef SMEMCPY +#define SMEMCPY(dst,src,len) memcpy(dst,src,len) +#endif + +/** + * LWIP_MPU_COMPATIBLE: enables special memory management mechanism + * which makes lwip able to work on MPU (Memory Protection Unit) system + * by not passing stack-pointers to other threads + * (this decreases performance) + */ +#ifndef LWIP_MPU_COMPATIBLE +#define LWIP_MPU_COMPATIBLE 0 +#endif + +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library + * instead of the lwip internal allocator. Can save code size if you + * already use it. + */ +#ifndef MEM_LIBC_MALLOC +#define MEM_LIBC_MALLOC 0 +#endif + +/** +* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. +* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution +* speed and usage from interrupts! +*/ +#ifndef MEMP_MEM_MALLOC +#define MEMP_MEM_MALLOC 0 +#endif + +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 + */ +#ifndef MEM_ALIGNMENT +#define MEM_ALIGNMENT 1 +#endif + +/** + * MEM_SIZE: the size of the heap memory. If the application will send + * a lot of data that needs to be copied, this should be set high. + */ +#ifndef MEM_SIZE +#define MEM_SIZE 1600 +#endif + +/** + * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable + * amount of bytes before and after each memp element in every pool and fills + * it with a prominent default value. + * MEMP_OVERFLOW_CHECK == 0 no checking + * MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed + * MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time + * memp_malloc() or memp_free() is called (useful but slow!) + */ +#ifndef MEMP_OVERFLOW_CHECK +#define MEMP_OVERFLOW_CHECK 0 +#endif + +/** + * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make + * sure that there are no cycles in the linked lists. + */ +#ifndef MEMP_SANITY_CHECK +#define MEMP_SANITY_CHECK 0 +#endif + +/** + * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set + * of memory pools of various sizes. When mem_malloc is called, an element of + * the smallest pool that can provide the length needed is returned. + * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled. + */ +#ifndef MEM_USE_POOLS +#define MEM_USE_POOLS 0 +#endif + +/** + * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next + * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more + * reliable. */ +#ifndef MEM_USE_POOLS_TRY_BIGGER_POOL +#define MEM_USE_POOLS_TRY_BIGGER_POOL 0 +#endif + +/** + * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h + * that defines additional pools beyond the "standard" ones required + * by lwIP. If you set this to 1, you must have lwippools.h in your + * include path somewhere. + */ +#ifndef MEMP_USE_CUSTOM_POOLS +#define MEMP_USE_CUSTOM_POOLS 0 +#endif + +/** + * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from + * interrupt context (or another context that doesn't allow waiting for a + * semaphore). + * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT, + * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs + * with each loop so that mem_free can run. + * + * ATTENTION: As you can see from the above description, this leads to dis-/ + * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc + * can need longer. + * + * If you don't want that, at least for NO_SYS=0, you can still use the following + * functions to enqueue a deallocation call which then runs in the tcpip_thread + * context: + * - pbuf_free_callback(p); + * - mem_free_callback(m); + */ +#ifndef LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT +#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0 +#endif + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). + * If the application sends a lot of data out of ROM (or other static memory), + * this should be set high. + */ +#ifndef MEMP_NUM_PBUF +#define MEMP_NUM_PBUF 16 +#endif + +/** + * MEMP_NUM_RAW_PCB: Number of raw connection PCBs + * (requires the LWIP_RAW option) + */ +#ifndef MEMP_NUM_RAW_PCB +#define MEMP_NUM_RAW_PCB 4 +#endif + +/** + * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + * per active UDP "connection". + * (requires the LWIP_UDP option) + */ +#ifndef MEMP_NUM_UDP_PCB +#define MEMP_NUM_UDP_PCB 4 +#endif + +/** + * MEMP_NUM_TCP_PCB: the number of simultaneously active TCP connections. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_PCB +#define MEMP_NUM_TCP_PCB 5 +#endif + +/** + * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_PCB_LISTEN +#define MEMP_NUM_TCP_PCB_LISTEN 8 +#endif + +/** + * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_SEG +#define MEMP_NUM_TCP_SEG 16 +#endif + +/** + * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for + * reassembly (whole packets, not fragments!) + */ +#ifndef MEMP_NUM_REASSDATA +#define MEMP_NUM_REASSDATA 5 +#endif + +/** + * MEMP_NUM_FRAG_PBUF: the number of IP fragments simultaneously sent + * (fragments, not whole packets!). + * This is only used with IP_FRAG_USES_STATIC_BUF==0 and + * LWIP_NETIF_TX_SINGLE_PBUF==0 and only has to be > 1 with DMA-enabled MACs + * where the packet is not yet sent when netif->output returns. + */ +#ifndef MEMP_NUM_FRAG_PBUF +#define MEMP_NUM_FRAG_PBUF 15 +#endif + +/** + * MEMP_NUM_ARP_QUEUE: the number of simultaneously queued outgoing + * packets (pbufs) that are waiting for an ARP request (to resolve + * their destination address) to finish. + * (requires the ARP_QUEUEING option) + */ +#ifndef MEMP_NUM_ARP_QUEUE +#define MEMP_NUM_ARP_QUEUE 30 +#endif + +/** + * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces + * can be members at the same time (one per netif - allsystems group -, plus one + * per netif membership). + * (requires the LWIP_IGMP option) + */ +#ifndef MEMP_NUM_IGMP_GROUP +#define MEMP_NUM_IGMP_GROUP 8 +#endif + +/** + * MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active timeouts. + * The default number of timeouts is calculated here for all enabled modules. + * The formula expects settings to be either '0' or '1'. + */ +#ifndef MEMP_NUM_SYS_TIMEOUT +#define MEMP_NUM_SYS_TIMEOUT (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + (PPP_SUPPORT*6*MEMP_NUM_PPP_PCB) + (LWIP_IPV6 ? (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD) : 0)) +#endif + +/** + * MEMP_NUM_NETBUF: the number of struct netbufs. + * (only needed if you use the sequential API, like api_lib.c) + */ +#ifndef MEMP_NUM_NETBUF +#define MEMP_NUM_NETBUF 2 +#endif + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#ifndef MEMP_NUM_NETCONN +#define MEMP_NUM_NETCONN 4 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used + * for callback/timeout API communication. + * (only needed if you use tcpip.c) + */ +#ifndef MEMP_NUM_TCPIP_MSG_API +#define MEMP_NUM_TCPIP_MSG_API 8 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used + * for incoming packets. + * (only needed if you use tcpip.c) + */ +#ifndef MEMP_NUM_TCPIP_MSG_INPKT +#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#endif + +/** + * MEMP_NUM_NETDB: the number of concurrently running lwip_addrinfo() calls + * (before freeing the corresponding memory using lwip_freeaddrinfo()). + */ +#ifndef MEMP_NUM_NETDB +#define MEMP_NUM_NETDB 1 +#endif + +/** + * MEMP_NUM_LOCALHOSTLIST: the number of host entries in the local host list + * if DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1. + */ +#ifndef MEMP_NUM_LOCALHOSTLIST +#define MEMP_NUM_LOCALHOSTLIST 1 +#endif + +/** + * MEMP_NUM_PPP_PCB: the number of simultaneously active PPP + * connections (requires the PPP_SUPPORT option) + */ +#ifndef MEMP_NUM_PPP_PCB +#define MEMP_NUM_PPP_PCB 1 +#endif + +/** + * MEMP_NUM_PPPOS_INTERFACES: the number of concurrently active PPPoS + * interfaces (only used with PPPOS_SUPPORT==1) + */ +#ifndef MEMP_NUM_PPPOS_INTERFACES +#define MEMP_NUM_PPPOS_INTERFACES MEMP_NUM_PPP_PCB +#endif + +/** + * MEMP_NUM_PPPOE_INTERFACES: the number of concurrently active PPPoE + * interfaces (only used with PPPOE_SUPPORT==1) + */ +#ifndef MEMP_NUM_PPPOE_INTERFACES +#define MEMP_NUM_PPPOE_INTERFACES 1 +#endif + +/** + * MEMP_NUM_PPPOL2TP_INTERFACES: the number of concurrently active PPPoL2TP + * interfaces (only used with PPPOL2TP_SUPPORT==1) + */ +#ifndef MEMP_NUM_PPPOL2TP_INTERFACES +#define MEMP_NUM_PPPOL2TP_INTERFACES 1 +#endif + +/** + * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. + */ +#ifndef PBUF_POOL_SIZE +#define PBUF_POOL_SIZE 16 +#endif + +/** MEMP_NUM_API_MSG: the number of concurrently active calls to various + * socket, netconn, and tcpip functions + */ +#ifndef MEMP_NUM_API_MSG +#define MEMP_NUM_API_MSG MEMP_NUM_TCPIP_MSG_API +#endif + +/** MEMP_NUM_DNS_API_MSG: the number of concurrently active calls to netconn_gethostbyname + */ +#ifndef MEMP_NUM_DNS_API_MSG +#define MEMP_NUM_DNS_API_MSG MEMP_NUM_TCPIP_MSG_API +#endif + +/** MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA: the number of concurrently active calls + * to getsockopt/setsockopt + */ +#ifndef MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA +#define MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA MEMP_NUM_TCPIP_MSG_API +#endif + +/** MEMP_NUM_NETIFAPI_MSG: the number of concurrently active calls to the + * netifapi functions + */ +#ifndef MEMP_NUM_NETIFAPI_MSG +#define MEMP_NUM_NETIFAPI_MSG MEMP_NUM_TCPIP_MSG_API +#endif + +/* + --------------------------------- + ---------- ARP options ---------- + --------------------------------- +*/ +/** + * LWIP_ARP==1: Enable ARP functionality. + */ +#ifndef LWIP_ARP +#define LWIP_ARP 1 +#endif + +/** + * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached. + */ +#ifndef ARP_TABLE_SIZE +#define ARP_TABLE_SIZE 10 +#endif + +/** the time an ARP entry stays valid after its last update, + * for ARP_TMR_INTERVAL = 1000, this is + * (60 * 5) seconds = 5 minutes. + */ +#ifndef ARP_MAXAGE +#define ARP_MAXAGE 300 +#endif + +/** + * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address + * resolution. By default, only the most recent packet is queued per IP address. + * This is sufficient for most protocols and mainly reduces TCP connection + * startup time. Set this to 1 if you know your application sends more than one + * packet in a row to an IP address that is not in the ARP cache. + */ +#ifndef ARP_QUEUEING +#define ARP_QUEUEING 0 +#endif + +/** The maximum number of packets which may be queued for each + * unresolved address by other network layers. Defaults to 3, 0 means disabled. + * Old packets are dropped, new packets are queued. + */ +#ifndef ARP_QUEUE_LEN +#define ARP_QUEUE_LEN 3 +#endif + +/** + * ETHARP_TRUST_IP_MAC==1: Incoming IP packets cause the ARP table to be + * updated with the source MAC and IP addresses supplied in the packet. + * You may want to disable this if you do not trust LAN peers to have the + * correct addresses, or as a limited approach to attempt to handle + * spoofing. If disabled, lwIP will need to make a new ARP request if + * the peer is not already in the ARP table, adding a little latency. + * The peer *is* in the ARP table if it requested our address before. + * Also notice that this slows down input processing of every IP packet! + */ +#ifndef ETHARP_TRUST_IP_MAC +#define ETHARP_TRUST_IP_MAC 0 +#endif + +/** + * ETHARP_SUPPORT_VLAN==1: support receiving and sending ethernet packets with + * VLAN header. See the description of LWIP_HOOK_VLAN_CHECK and + * LWIP_HOOK_VLAN_SET hooks to check/set VLAN headers. + * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check. + * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted. + * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted. + * Alternatively, define a function/define ETHARP_VLAN_CHECK_FN(eth_hdr, vlan) + * that returns 1 to accept a packet or 0 to drop a packet. + */ +#ifndef ETHARP_SUPPORT_VLAN +#define ETHARP_SUPPORT_VLAN 0 +#endif + +/** LWIP_ETHERNET==1: enable ethernet support for PPPoE even though ARP + * might be disabled + */ +#ifndef LWIP_ETHERNET +#define LWIP_ETHERNET (LWIP_ARP || PPPOE_SUPPORT) +#endif + +/** ETH_PAD_SIZE: number of bytes added before the ethernet header to ensure + * alignment of payload after that header. Since the header is 14 bytes long, + * without this padding e.g. addresses in the IP header will not be aligned + * on a 32-bit boundary, so setting this to 2 can speed up 32-bit-platforms. + */ +#ifndef ETH_PAD_SIZE +#define ETH_PAD_SIZE 0 +#endif + +/** ETHARP_SUPPORT_STATIC_ENTRIES==1: enable code to support static ARP table + * entries (using etharp_add_static_entry/etharp_remove_static_entry). + */ +#ifndef ETHARP_SUPPORT_STATIC_ENTRIES +#define ETHARP_SUPPORT_STATIC_ENTRIES 0 +#endif + +/** ETHARP_TABLE_MATCH_NETIF==1: Match netif for ARP table entries. + * If disabled, duplicate IP address on multiple netifs are not supported + * (but this should only occur for AutoIP). + */ +#ifndef ETHARP_TABLE_MATCH_NETIF +#define ETHARP_TABLE_MATCH_NETIF 0 +#endif + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * LWIP_IPV4==1: Enable IPv4 + */ +#ifndef LWIP_IPV4 +#define LWIP_IPV4 1 +#endif + +/** + * IP_FORWARD==1: Enables the ability to forward IP packets across network + * interfaces. If you are going to run lwIP on a device with only one network + * interface, define this to 0. + */ +#ifndef IP_FORWARD +#define IP_FORWARD 0 +#endif + +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#ifndef IP_REASSEMBLY +#define IP_REASSEMBLY 1 +#endif + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#ifndef IP_FRAG +#define IP_FRAG 1 +#endif + +#if !LWIP_IPV4 +/* disable IPv4 extensions when IPv4 is disabled */ +#undef IP_FORWARD +#define IP_FORWARD 0 +#undef IP_REASSEMBLY +#define IP_REASSEMBLY 0 +#undef IP_FRAG +#define IP_FRAG 0 +#endif /* !LWIP_IPV4 */ + +/** + * IP_OPTIONS_ALLOWED: Defines the behavior for IP options. + * IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped. + * IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed). + */ +#ifndef IP_OPTIONS_ALLOWED +#define IP_OPTIONS_ALLOWED 1 +#endif + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#ifndef IP_REASS_MAXAGE +#define IP_REASS_MAXAGE 3 +#endif + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#ifndef IP_REASS_MAX_PBUFS +#define IP_REASS_MAX_PBUFS 10 +#endif + +/** + * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP + * fragmentation. Otherwise pbufs are allocated and reference the original + * packet data to be fragmented (or with LWIP_NETIF_TX_SINGLE_PBUF==1, + * new PBUF_RAM pbufs are used for fragments). + * ATTENTION: IP_FRAG_USES_STATIC_BUF==1 may not be used for DMA-enabled MACs! + */ +#ifndef IP_FRAG_USES_STATIC_BUF +#define IP_FRAG_USES_STATIC_BUF 0 +#endif + +/** + * IP_FRAG_MAX_MTU: Assumed max MTU on any interface for IP frag buffer + * (requires IP_FRAG_USES_STATIC_BUF==1) + */ +#if IP_FRAG_USES_STATIC_BUF && !defined(IP_FRAG_MAX_MTU) +#define IP_FRAG_MAX_MTU 1500 +#endif + +/** + * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. + */ +#ifndef IP_DEFAULT_TTL +#define IP_DEFAULT_TTL 255 +#endif + +/** + * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast + * filter per pcb on udp and raw send operations. To enable broadcast filter + * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1. + */ +#ifndef IP_SOF_BROADCAST +#define IP_SOF_BROADCAST 0 +#endif + +/** + * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast + * filter on recv operations. + */ +#ifndef IP_SOF_BROADCAST_RECV +#define IP_SOF_BROADCAST_RECV 0 +#endif + +/** + * IP_FORWARD_ALLOW_TX_ON_RX_NETIF==1: allow ip_forward() to send packets back + * out on the netif where it was received. This should only be used for + * wireless networks. + * ATTENTION: When this is 1, make sure your netif driver correctly marks incoming + * link-layer-broadcast/multicast packets as such using the corresponding pbuf flags! + */ +#ifndef IP_FORWARD_ALLOW_TX_ON_RX_NETIF +#define IP_FORWARD_ALLOW_TX_ON_RX_NETIF 0 +#endif + +/** + * LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS==1: randomize the local port for the first + * local TCP/UDP pcb (default==0). This can prevent creating predictable port + * numbers after booting a device. + */ +#ifndef LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS +#define LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS 0 +#endif + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_ICMP==1: Enable ICMP module inside the IP stack. + * Be careful, disable that make your product non-compliant to RFC1122 + */ +#ifndef LWIP_ICMP +#define LWIP_ICMP 1 +#endif + +/** + * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. + */ +#ifndef ICMP_TTL +#define ICMP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only) + */ +#ifndef LWIP_BROADCAST_PING +#define LWIP_BROADCAST_PING 0 +#endif + +/** + * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only) + */ +#ifndef LWIP_MULTICAST_PING +#define LWIP_MULTICAST_PING 0 +#endif + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#ifndef LWIP_RAW +#define LWIP_RAW 0 +#endif + +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#ifndef RAW_TTL +#define RAW_TTL (IP_DEFAULT_TTL) +#endif + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#ifndef LWIP_DHCP +#define LWIP_DHCP 0 +#endif +#if !LWIP_IPV4 +/* disable DHCP when IPv4 is disabled */ +#undef LWIP_DHCP +#define LWIP_DHCP 0 +#endif /* !LWIP_IPV4 */ + +/** + * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. + */ +#ifndef DHCP_DOES_ARP_CHECK +#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) +#endif + +/** + * LWIP_DHCP_CHECK_LINK_UP==1: dhcp_start() only really starts if the netif has + * NETIF_FLAG_LINK_UP set in its flags. As this is only an optimization and + * netif drivers might not set this flag, the default is off. If enabled, + * netif_set_link_up() must be called to continue dhcp starting. + */ +#ifndef LWIP_DHCP_CHECK_LINK_UP +#define LWIP_DHCP_CHECK_LINK_UP 0 +#endif + +/** + * LWIP_DHCP_BOOTP_FILE==1: Store offered_si_addr and boot_file_name. + */ +#ifndef LWIP_DHCP_BOOTP_FILE +#define LWIP_DHCP_BOOTP_FILE 0 +#endif + +/** + * LWIP_DHCP_GETS_NTP==1: Request NTP servers with discover/select. For each + * response packet, an callback is called, which has to be provided by the port: + * void dhcp_set_ntp_servers(u8_t num_ntp_servers, ip_addr_t* ntp_server_addrs); +*/ +#ifndef LWIP_DHCP_GET_NTP_SRV +#define LWIP_DHCP_GET_NTP_SRV 0 +#endif + +/** + * The maximum of NTP servers requested + */ +#ifndef LWIP_DHCP_MAX_NTP_SERVERS +#define LWIP_DHCP_MAX_NTP_SERVERS 1 +#endif + +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/** + * LWIP_AUTOIP==1: Enable AUTOIP module. + */ +#ifndef LWIP_AUTOIP +#define LWIP_AUTOIP 0 +#endif +#if !LWIP_IPV4 +/* disable AUTOIP when IPv4 is disabled */ +#undef LWIP_AUTOIP +#define LWIP_AUTOIP 0 +#endif /* !LWIP_IPV4 */ + +/** + * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on + * the same interface at the same time. + */ +#ifndef LWIP_DHCP_AUTOIP_COOP +#define LWIP_DHCP_AUTOIP_COOP 0 +#endif + +/** + * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes + * that should be sent before falling back on AUTOIP. This can be set + * as low as 1 to get an AutoIP address very quickly, but you should + * be prepared to handle a changing IP address when DHCP overrides + * AutoIP. + */ +#ifndef LWIP_DHCP_AUTOIP_COOP_TRIES +#define LWIP_DHCP_AUTOIP_COOP_TRIES 9 +#endif + +/* + ---------------------------------- + ----- SNMP MIB2 support ----- + ---------------------------------- +*/ +/** + * LWIP_MIB2_CALLBACKS==1: Turn on SNMP MIB2 callbacks. + * Turn this on to get callbacks needed to implement MIB2. + * Usually MIB2_STATS should be enabled, too. + */ +#ifndef LWIP_MIB2_CALLBACKS +#define LWIP_MIB2_CALLBACKS 0 +#endif + +/* + ---------------------------------- + ----- Multicast/IGMP options ----- + ---------------------------------- +*/ +/** + * LWIP_IGMP==1: Turn on IGMP module. + */ +#ifndef LWIP_IGMP +#define LWIP_IGMP 1 +#endif +#if !LWIP_IPV4 +#undef LWIP_IGMP +#define LWIP_IGMP 0 +#endif + +/** + * LWIP_MULTICAST_TX_OPTIONS==1: Enable multicast TX support like the socket options + * IP_MULTICAST_TTL/IP_MULTICAST_IF/IP_MULTICAST_LOOP + */ +#ifndef LWIP_MULTICAST_TX_OPTIONS +#define LWIP_MULTICAST_TX_OPTIONS LWIP_IGMP +#endif + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#ifndef LWIP_DNS +#define LWIP_DNS 0 +#endif + +/** DNS maximum number of entries to maintain locally. */ +#ifndef DNS_TABLE_SIZE +#define DNS_TABLE_SIZE 4 +#endif + +/** DNS maximum host name length supported in the name table. */ +#ifndef DNS_MAX_NAME_LENGTH +#define DNS_MAX_NAME_LENGTH 256 +#endif + +/** The maximum of DNS servers + * The first server can be initialized automatically by defining + * DNS_SERVER_ADDRESS(ipaddr), where 'ipaddr' is an 'ip_addr_t*' + */ +#ifndef DNS_MAX_SERVERS +#define DNS_MAX_SERVERS 2 +#endif + +/** DNS do a name checking between the query and the response. */ +#ifndef DNS_DOES_NAME_CHECK +#define DNS_DOES_NAME_CHECK 1 +#endif + +/** LWIP_DNS_SECURE: controls the security level of the DNS implementation + * Use all DNS security features by default. + * This is overridable but should only be needed by very small targets + * or when using against non standard DNS servers. */ +#ifndef LWIP_DNS_SECURE +#define LWIP_DNS_SECURE (LWIP_DNS_SECURE_RAND_XID | LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING | LWIP_DNS_SECURE_RAND_SRC_PORT) +#endif +/* A list of DNS security features follows */ +#define LWIP_DNS_SECURE_RAND_XID 1 +#define LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING 2 +#define LWIP_DNS_SECURE_RAND_SRC_PORT 4 + +/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, + * you have to define + * #define DNS_LOCAL_HOSTLIST_INIT {{"host1", 0x123}, {"host2", 0x234}} + * (an array of structs name/address, where address is an u32_t in network + * byte order). + * + * Instead, you can also use an external function: + * #define DNS_LOOKUP_LOCAL_EXTERN(x) extern u32_t my_lookup_function(const char *name) + * that returns the IP address or INADDR_NONE if not found. + */ +#ifndef DNS_LOCAL_HOSTLIST +#define DNS_LOCAL_HOSTLIST 0 +#endif /* DNS_LOCAL_HOSTLIST */ + +/** If this is turned on, the local host-list can be dynamically changed + * at runtime. */ +#ifndef DNS_LOCAL_HOSTLIST_IS_DYNAMIC +#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC 0 +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/** + * LWIP_UDP==1: Turn on UDP. + */ +#ifndef LWIP_UDP +#define LWIP_UDP 1 +#endif + +/** + * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) + */ +#ifndef LWIP_UDPLITE +#define LWIP_UDPLITE 0 +#endif + +/** + * UDP_TTL: Default Time-To-Live value. + */ +#ifndef UDP_TTL +#define UDP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf. + */ +#ifndef LWIP_NETBUF_RECVINFO +#define LWIP_NETBUF_RECVINFO 0 +#endif + +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * LWIP_TCP==1: Turn on TCP. + */ +#ifndef LWIP_TCP +#define LWIP_TCP 1 +#endif + +/** + * TCP_TTL: Default Time-To-Live value. + */ +#ifndef TCP_TTL +#define TCP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * TCP_WND: The size of a TCP window. This must be at least + * (2 * TCP_MSS) for things to work well + */ +#ifndef TCP_WND +#define TCP_WND (4 * TCP_MSS) +#endif + +/** + * TCP_MAXRTX: Maximum number of retransmissions of data segments. + */ +#ifndef TCP_MAXRTX +#define TCP_MAXRTX 12 +#endif + +/** + * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. + */ +#ifndef TCP_SYNMAXRTX +#define TCP_SYNMAXRTX 6 +#endif + +/** + * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. + * Define to 0 if your device is low on memory. + */ +#ifndef TCP_QUEUE_OOSEQ +#define TCP_QUEUE_OOSEQ (LWIP_TCP) +#endif + +/** + * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, + * you might want to increase this.) + * For the receive side, this MSS is advertised to the remote side + * when opening a connection. For the transmit size, this MSS sets + * an upper limit on the MSS advertised by the remote host. + */ +#ifndef TCP_MSS +#define TCP_MSS 536 +#endif + +/** + * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really + * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which + * reflects the available reassembly buffer size at the remote host) and the + * largest size permitted by the IP layer" (RFC 1122) + * Setting this to 1 enables code that checks TCP_MSS against the MTU of the + * netif used for a connection and limits the MSS if it would be too big otherwise. + */ +#ifndef TCP_CALCULATE_EFF_SEND_MSS +#define TCP_CALCULATE_EFF_SEND_MSS 1 +#endif + + +/** + * TCP_SND_BUF: TCP sender buffer space (bytes). + * To achieve good performance, this should be at least 2 * TCP_MSS. + */ +#ifndef TCP_SND_BUF +#define TCP_SND_BUF (2 * TCP_MSS) +#endif + +/** + * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least + * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. + */ +#ifndef TCP_SND_QUEUELEN +#define TCP_SND_QUEUELEN ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS)) +#endif + +/** + * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than + * TCP_SND_BUF. It is the amount of space which must be available in the + * TCP snd_buf for select to return writable (combined with TCP_SNDQUEUELOWAT). + */ +#ifndef TCP_SNDLOWAT +#define TCP_SNDLOWAT LWIP_MIN(LWIP_MAX(((TCP_SND_BUF)/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF) - 1) +#endif + +/** + * TCP_SNDQUEUELOWAT: TCP writable bufs (pbuf count). This must be less + * than TCP_SND_QUEUELEN. If the number of pbufs queued on a pcb drops below + * this number, select returns writable (combined with TCP_SNDLOWAT). + */ +#ifndef TCP_SNDQUEUELOWAT +#define TCP_SNDQUEUELOWAT LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5) +#endif + +/** + * TCP_OOSEQ_MAX_BYTES: The maximum number of bytes queued on ooseq per pcb. + * Default is 0 (no limit). Only valid for TCP_QUEUE_OOSEQ==0. + */ +#ifndef TCP_OOSEQ_MAX_BYTES +#define TCP_OOSEQ_MAX_BYTES 0 +#endif + +/** + * TCP_OOSEQ_MAX_PBUFS: The maximum number of pbufs queued on ooseq per pcb. + * Default is 0 (no limit). Only valid for TCP_QUEUE_OOSEQ==0. + */ +#ifndef TCP_OOSEQ_MAX_PBUFS +#define TCP_OOSEQ_MAX_PBUFS 0 +#endif + +/** + * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. + */ +#ifndef TCP_LISTEN_BACKLOG +#define TCP_LISTEN_BACKLOG 0 +#endif + +/** + * The maximum allowed backlog for TCP listen netconns. + * This backlog is used unless another is explicitly specified. + * 0xff is the maximum (u8_t). + */ +#ifndef TCP_DEFAULT_LISTEN_BACKLOG +#define TCP_DEFAULT_LISTEN_BACKLOG 0xff +#endif + +/** + * TCP_OVERSIZE: The maximum number of bytes that tcp_write may + * allocate ahead of time in an attempt to create shorter pbuf chains + * for transmission. The meaningful range is 0 to TCP_MSS. Some + * suggested values are: + * + * 0: Disable oversized allocation. Each tcp_write() allocates a new + pbuf (old behaviour). + * 1: Allocate size-aligned pbufs with minimal excess. Use this if your + * scatter-gather DMA requires aligned fragments. + * 128: Limit the pbuf/memory overhead to 20%. + * TCP_MSS: Try to create unfragmented TCP packets. + * TCP_MSS/4: Try to create 4 fragments or less per TCP packet. + */ +#ifndef TCP_OVERSIZE +#define TCP_OVERSIZE TCP_MSS +#endif + +/** + * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. + * The timestamp option is currently only used to help remote hosts, it is not + * really used locally. Therefore, it is only enabled when a TS option is + * received in the initial SYN packet from a remote host. + */ +#ifndef LWIP_TCP_TIMESTAMPS +#define LWIP_TCP_TIMESTAMPS 0 +#endif + +/** + * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an + * explicit window update + */ +#ifndef TCP_WND_UPDATE_THRESHOLD +#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4)) +#endif + +/** + * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1. + * LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all + * events (accept, sent, etc) that happen in the system. + * LWIP_CALLBACK_API==1: The PCB callback function is called directly + * for the event. This is the default. + */ +#if !defined(LWIP_EVENT_API) && !defined(LWIP_CALLBACK_API) +#define LWIP_EVENT_API 0 +#define LWIP_CALLBACK_API 1 +#endif + +/** + * LWIP_WND_SCALE and TCP_RCV_SCALE: + * Set LWIP_WND_SCALE to 1 to enable window scaling. + * Set TCP_RCV_SCALE to the desired scaling factor (shift count in the + * range of [0..14]). + * When LWIP_WND_SCALE is enabled but TCP_RCV_SCALE is 0, we can use a large + * send window while having a small receive window only. + */ +#ifndef LWIP_WND_SCALE +#define LWIP_WND_SCALE 0 +#define TCP_RCV_SCALE 0 +#endif + + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ +/** + * PBUF_LINK_HLEN: the number of bytes that should be allocated for a + * link level header. The default is 14, the standard value for + * Ethernet. + */ +#ifndef PBUF_LINK_HLEN +#ifdef LWIP_HOOK_VLAN_SET +#define PBUF_LINK_HLEN (18 + ETH_PAD_SIZE) +#else /* LWIP_HOOK_VLAN_SET */ +#define PBUF_LINK_HLEN (14 + ETH_PAD_SIZE) +#endif /* LWIP_HOOK_VLAN_SET */ +#endif + +/** + * PBUF_LINK_ENCAPSULATION_HLEN: the number of bytes that should be allocated + * for an additional encapsulation header before ethernet headers (e.g. 802.11) + */ +#ifndef PBUF_LINK_ENCAPSULATION_HLEN +#define PBUF_LINK_ENCAPSULATION_HLEN 0 +#endif + +/** + * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is + * designed to accommodate single full size TCP frame in one pbuf, including + * TCP_MSS, IP header, and link header. + */ +#ifndef PBUF_POOL_BUFSIZE +#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN) +#endif + +/* + ------------------------------------------------ + ---------- Network Interfaces options ---------- + ------------------------------------------------ +*/ +/** + * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname + * field. + */ +#ifndef LWIP_NETIF_HOSTNAME +#define LWIP_NETIF_HOSTNAME 0 +#endif + +/** + * LWIP_NETIF_API==1: Support netif api (in netifapi.c) + */ +#ifndef LWIP_NETIF_API +#define LWIP_NETIF_API 0 +#endif + +/** + * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface + * changes its up/down status (i.e., due to DHCP IP acquisition) + */ +#ifndef LWIP_NETIF_STATUS_CALLBACK +#define LWIP_NETIF_STATUS_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface + * whenever the link changes (i.e., link down) + */ +#ifndef LWIP_NETIF_LINK_CALLBACK +#define LWIP_NETIF_LINK_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_REMOVE_CALLBACK==1: Support a callback function that is called + * when a netif has been removed + */ +#ifndef LWIP_NETIF_REMOVE_CALLBACK +#define LWIP_NETIF_REMOVE_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table + * indices) in struct netif. TCP and UDP can make use of this to prevent + * scanning the ARP table for every sent packet. While this is faster for big + * ARP tables or many concurrent connections, it might be counterproductive + * if you have a tiny ARP table or if there never are concurrent connections. + */ +#ifndef LWIP_NETIF_HWADDRHINT +#define LWIP_NETIF_HWADDRHINT 0 +#endif + +/** + * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP + * address equal to the netif IP address, looping them back up the stack. + */ +#ifndef LWIP_NETIF_LOOPBACK +#define LWIP_NETIF_LOOPBACK 0 +#endif + +/** + * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback + * sending for each netif (0 = disabled) + */ +#ifndef LWIP_LOOPBACK_MAX_PBUFS +#define LWIP_LOOPBACK_MAX_PBUFS 0 +#endif + +/** + * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in + * the system, as netifs must change how they behave depending on this setting + * for the LWIP_NETIF_LOOPBACK option to work. + * Setting this is needed to avoid reentering non-reentrant functions like + * tcp_input(). + * LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a + * multithreaded environment like tcpip.c. In this case, netif->input() + * is called directly. + * LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. + * The packets are put on a list and netif_poll() must be called in + * the main application loop. + */ +#ifndef LWIP_NETIF_LOOPBACK_MULTITHREADING +#define LWIP_NETIF_LOOPBACK_MULTITHREADING (!NO_SYS) +#endif + +/** + * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data + * to be sent into one single pbuf. This is for compatibility with DMA-enabled + * MACs that do not support scatter-gather. + * Beware that this might involve CPU-memcpy before transmitting that would not + * be needed without this flag! Use this only if you need to! + * + * @todo: TCP and IP-frag do not work with this, yet: + */ +#ifndef LWIP_NETIF_TX_SINGLE_PBUF +#define LWIP_NETIF_TX_SINGLE_PBUF 0 +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ +/** + * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1). + * This is only needed when no real netifs are available. If at least one other + * netif is available, loopback traffic uses this netif. + */ +#ifndef LWIP_HAVE_LOOPIF +#define LWIP_HAVE_LOOPIF LWIP_NETIF_LOOPBACK +#endif + +/** + * LWIP_LOOPIF_MULTICAST==1: Support multicast/IGMP on loop interface (127.0.0.1). + */ +#ifndef LWIP_LOOPIF_MULTICAST +#define LWIP_LOOPIF_MULTICAST 0 +#endif + +/* + ------------------------------------ + ---------- SLIPIF options ---------- + ------------------------------------ +*/ +/** + * LWIP_HAVE_SLIPIF==1: Support slip interface and slipif.c + */ +#ifndef LWIP_HAVE_SLIPIF +#define LWIP_HAVE_SLIPIF 0 +#endif + +/* + ------------------------------------ + ---------- Thread options ---------- + ------------------------------------ +*/ +/** + * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. + */ +#ifndef TCPIP_THREAD_NAME +#define TCPIP_THREAD_NAME "tcpip_thread" +#endif + +/** + * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef TCPIP_THREAD_STACKSIZE +#define TCPIP_THREAD_STACKSIZE 0 +#endif + +/** + * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef TCPIP_THREAD_PRIO +#define TCPIP_THREAD_PRIO 1 +#endif + +/** + * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when tcpip_init is called. + */ +#ifndef TCPIP_MBOX_SIZE +#define TCPIP_MBOX_SIZE 0 +#endif + +/** + * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread. + */ +#ifndef SLIPIF_THREAD_NAME +#define SLIPIF_THREAD_NAME "slipif_loop" +#endif + +/** + * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef SLIPIF_THREAD_STACKSIZE +#define SLIPIF_THREAD_STACKSIZE 0 +#endif + +/** + * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef SLIPIF_THREAD_PRIO +#define SLIPIF_THREAD_PRIO 1 +#endif + +/** + * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread. + */ +#ifndef DEFAULT_THREAD_NAME +#define DEFAULT_THREAD_NAME "lwIP" +#endif + +/** + * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef DEFAULT_THREAD_STACKSIZE +#define DEFAULT_THREAD_STACKSIZE 0 +#endif + +/** + * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef DEFAULT_THREAD_PRIO +#define DEFAULT_THREAD_PRIO 1 +#endif + +/** + * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_RAW_RECVMBOX_SIZE +#define DEFAULT_RAW_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_UDP_RECVMBOX_SIZE +#define DEFAULT_UDP_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_TCP_RECVMBOX_SIZE +#define DEFAULT_TCP_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when the acceptmbox is created. + */ +#ifndef DEFAULT_ACCEPTMBOX_SIZE +#define DEFAULT_ACCEPTMBOX_SIZE 0 +#endif + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ +/** + * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!) + * Don't use it if you're not an active lwIP project member + */ +#ifndef LWIP_TCPIP_CORE_LOCKING +#define LWIP_TCPIP_CORE_LOCKING 0 +#endif + +/** + * LWIP_TCPIP_CORE_LOCKING_INPUT: (EXPERIMENTAL!) + * Don't use it if you're not an active lwIP project member + */ +#ifndef LWIP_TCPIP_CORE_LOCKING_INPUT +#define LWIP_TCPIP_CORE_LOCKING_INPUT 0 +#endif + +/** + * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) + */ +#ifndef LWIP_NETCONN +#define LWIP_NETCONN 1 +#endif + +/** LWIP_TCPIP_TIMEOUT==1: Enable tcpip_timeout/tcpip_untimeout to create + * timers running in tcpip_thread from another thread. + */ +#ifndef LWIP_TCPIP_TIMEOUT +#define LWIP_TCPIP_TIMEOUT 0 +#endif + +/** LWIP_NETCONN_SEM_PER_THREAD==1: Use one (thread-local) semaphore per + * thread calling socket/netconn functions instead of allocating one + * semaphore per netconn (and per select etc.) + * ATTENTION: a thread-local semaphore for API calls is needed: + * - LWIP_NETCONN_THREAD_SEM_GET() returning a sys_sem_t* + * - LWIP_NETCONN_THREAD_SEM_ALLOC() creating the semaphore + * - LWIP_NETCONN_THREAD_SEM_FREE() freeing the semaphore + * The latter 2 can be invoked up by calling netconn_thread_init()/netconn_thread_cleanup(). + * Ports may call these for threads created with sys_thread_new(). + */ +#ifndef LWIP_NETCONN_SEM_PER_THREAD +#define LWIP_NETCONN_SEM_PER_THREAD 0 +#endif + +/** LWIP_NETCONN_FULLDUPLEX==1: Enable code that allows reading from one thread, + * writing from a 2nd thread and closing from a 3rd thread at the same time. + * ATTENTION: This is currently really alpha! Some requirements: + * - LWIP_NETCONN_SEM_PER_THREAD==1 is required to use one socket/netconn from + * multiple threads at once + * - sys_mbox_free() has to unblock receive tasks waiting on recvmbox/acceptmbox + * and prevent a task pending on this during/after deletion + */ +#ifndef LWIP_NETCONN_FULLDUPLEX +#define LWIP_NETCONN_FULLDUPLEX 0 +#endif + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) + */ +#ifndef LWIP_SOCKET +#define LWIP_SOCKET 1 +#endif + +/* LWIP_SOCKET_SET_ERRNO==1: Set errno when socket functions cannot complete + * successfully, as required by POSIX. Default is POSIX-compliant. + */ +#ifndef LWIP_SOCKET_SET_ERRNO +#define LWIP_SOCKET_SET_ERRNO 1 +#endif + +/** + * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names through defines. + * LWIP_COMPAT_SOCKETS==2: Same as ==1 but correctly named functions are created. + * While this helps code completion, it might conflict with existing libraries. + * (only used if you use sockets.c) + */ +#ifndef LWIP_COMPAT_SOCKETS +#define LWIP_COMPAT_SOCKETS 1 +#endif + +/** + * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. + * Disable this option if you use a POSIX operating system that uses the same + * names (read, write & close). (only used if you use sockets.c) + */ +#ifndef LWIP_POSIX_SOCKETS_IO_NAMES +#define LWIP_POSIX_SOCKETS_IO_NAMES 1 +#endif + +/** + * LWIP_SOCKET_OFFSET==n: Increases the file descriptor number created by LwIP with n. + * This can be useful when there are multiple APIs which create file descriptors. + * When they all start with a different offset and you won't make them overlap you can + * re implement read/write/close/ioctl/fnctl to send the requested action to the right + * library (sharing select will need more work though). + */ +#ifndef LWIP_SOCKET_OFFSET +#define LWIP_SOCKET_OFFSET 0 +#endif + +/** + * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT + * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set + * in seconds. (does not require sockets.c, and will affect tcp.c) + */ +#ifndef LWIP_TCP_KEEPALIVE +#define LWIP_TCP_KEEPALIVE 0 +#endif + +/** + * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and + * SO_SNDTIMEO processing. + */ +#ifndef LWIP_SO_SNDTIMEO +#define LWIP_SO_SNDTIMEO 0 +#endif + +/** + * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and + * SO_RCVTIMEO processing. + */ +#ifndef LWIP_SO_RCVTIMEO +#define LWIP_SO_RCVTIMEO 0 +#endif + +/** + * LWIP_SO_SNDRCVTIMEO_NONSTANDARD==1: SO_RCVTIMEO/SO_SNDTIMEO take an int + * (milliseconds, much like winsock does) instead of a struct timeval (default). + */ +#ifndef LWIP_SO_SNDRCVTIMEO_NONSTANDARD +#define LWIP_SO_SNDRCVTIMEO_NONSTANDARD 0 +#endif + +/** + * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. + */ +#ifndef LWIP_SO_RCVBUF +#define LWIP_SO_RCVBUF 0 +#endif + +/** + * LWIP_SO_LINGER==1: Enable SO_LINGER processing. + */ +#ifndef LWIP_SO_LINGER +#define LWIP_SO_LINGER 0 +#endif + +/** + * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize. + */ +#ifndef RECV_BUFSIZE_DEFAULT +#define RECV_BUFSIZE_DEFAULT INT_MAX +#endif + +/** + * By default, TCP socket/netconn close waits 20 seconds max to send the FIN + */ +#ifndef LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT +#define LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT 20000 +#endif + +/** + * SO_REUSE==1: Enable SO_REUSEADDR option. + */ +#ifndef SO_REUSE +#define SO_REUSE 0 +#endif + +/** + * SO_REUSE_RXTOALL==1: Pass a copy of incoming broadcast/multicast packets + * to all local matches if SO_REUSEADDR is turned on. + * WARNING: Adds a memcpy for every packet if passing to more than one pcb! + */ +#ifndef SO_REUSE_RXTOALL +#define SO_REUSE_RXTOALL 0 +#endif + +/** + * LWIP_FIONREAD_LINUXMODE==0 (default): ioctl/FIONREAD returns the amount of + * pending data in the network buffer. This is the way windows does it. It's + * the default for lwIP since it is smaller. + * LWIP_FIONREAD_LINUXMODE==1: ioctl/FIONREAD returns the size of the next + * pending datagram in bytes. This is the way linux does it. This code is only + * here for compatibility. + */ +#ifndef LWIP_FIONREAD_LINUXMODE +#define LWIP_FIONREAD_LINUXMODE 0 +#endif + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#ifndef LWIP_STATS +#define LWIP_STATS 1 +#endif + +#if LWIP_STATS + +/** + * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. + */ +#ifndef LWIP_STATS_DISPLAY +#define LWIP_STATS_DISPLAY 0 +#endif + +/** + * LINK_STATS==1: Enable link stats. + */ +#ifndef LINK_STATS +#define LINK_STATS 1 +#endif + +/** + * ETHARP_STATS==1: Enable etharp stats. + */ +#ifndef ETHARP_STATS +#define ETHARP_STATS (LWIP_ARP) +#endif + +/** + * IP_STATS==1: Enable IP stats. + */ +#ifndef IP_STATS +#define IP_STATS 1 +#endif + +/** + * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is + * on if using either frag or reass. + */ +#ifndef IPFRAG_STATS +#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +#endif + +/** + * ICMP_STATS==1: Enable ICMP stats. + */ +#ifndef ICMP_STATS +#define ICMP_STATS 1 +#endif + +/** + * IGMP_STATS==1: Enable IGMP stats. + */ +#ifndef IGMP_STATS +#define IGMP_STATS (LWIP_IGMP) +#endif + +/** + * UDP_STATS==1: Enable UDP stats. Default is on if + * UDP enabled, otherwise off. + */ +#ifndef UDP_STATS +#define UDP_STATS (LWIP_UDP) +#endif + +/** + * TCP_STATS==1: Enable TCP stats. Default is on if TCP + * enabled, otherwise off. + */ +#ifndef TCP_STATS +#define TCP_STATS (LWIP_TCP) +#endif + +/** + * MEM_STATS==1: Enable mem.c stats. + */ +#ifndef MEM_STATS +#define MEM_STATS ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0)) +#endif + +/** + * MEMP_STATS==1: Enable memp.c pool stats. + */ +#ifndef MEMP_STATS +#define MEMP_STATS (MEMP_MEM_MALLOC == 0) +#endif + +/** + * SYS_STATS==1: Enable system stats (sem and mbox counts, etc). + */ +#ifndef SYS_STATS +#define SYS_STATS (NO_SYS == 0) +#endif + +/** + * IP6_STATS==1: Enable IPv6 stats. + */ +#ifndef IP6_STATS +#define IP6_STATS (LWIP_IPV6) +#endif + +/** + * ICMP6_STATS==1: Enable ICMP for IPv6 stats. + */ +#ifndef ICMP6_STATS +#define ICMP6_STATS (LWIP_IPV6 && LWIP_ICMP6) +#endif + +/** + * IP6_FRAG_STATS==1: Enable IPv6 fragmentation stats. + */ +#ifndef IP6_FRAG_STATS +#define IP6_FRAG_STATS (LWIP_IPV6 && (LWIP_IPV6_FRAG || LWIP_IPV6_REASS)) +#endif + +/** + * MLD6_STATS==1: Enable MLD for IPv6 stats. + */ +#ifndef MLD6_STATS +#define MLD6_STATS (LWIP_IPV6 && LWIP_IPV6_MLD) +#endif + +/** + * ND6_STATS==1: Enable Neighbor discovery for IPv6 stats. + */ +#ifndef ND6_STATS +#define ND6_STATS (LWIP_IPV6) +#endif + +/** + * MIB2_STATS==1: Stats for SNMP MIB2. + */ +#ifndef MIB2_STATS +#define MIB2_STATS 0 +#endif + +#else + +#define LINK_STATS 0 +#define ETHARP_STATS 0 +#define IP_STATS 0 +#define IPFRAG_STATS 0 +#define ICMP_STATS 0 +#define IGMP_STATS 0 +#define UDP_STATS 0 +#define TCP_STATS 0 +#define MEM_STATS 0 +#define MEMP_STATS 0 +#define SYS_STATS 0 +#define LWIP_STATS_DISPLAY 0 +#define IP6_STATS 0 +#define ICMP6_STATS 0 +#define IP6_FRAG_STATS 0 +#define MLD6_STATS 0 +#define ND6_STATS 0 +#define MIB2_STATS 0 + +#endif /* LWIP_STATS */ + +/* + --------------------------------- + ---------- PPP options ---------- + --------------------------------- +*/ + +/** + * PPP_SUPPORT==1: Enable PPP. + */ +#ifndef PPP_SUPPORT +#define PPP_SUPPORT 0 +#endif + +/** + * PPPOE_SUPPORT==1: Enable PPP Over Ethernet + */ +#ifndef PPPOE_SUPPORT +#define PPPOE_SUPPORT 0 +#endif + +/** + * PPPOL2TP_SUPPORT==1: Enable PPP Over L2TP + */ +#ifndef PPPOL2TP_SUPPORT +#define PPPOL2TP_SUPPORT 0 +#endif + +/** + * PPPOL2TP_AUTH_SUPPORT==1: Enable PPP Over L2TP Auth (enable MD5 support) + */ +#ifndef PPPOL2TP_AUTH_SUPPORT +#define PPPOL2TP_AUTH_SUPPORT PPPOL2TP_SUPPORT +#endif + +/** + * PPPOS_SUPPORT==1: Enable PPP Over Serial + */ +#ifndef PPPOS_SUPPORT +#define PPPOS_SUPPORT PPP_SUPPORT +#endif + +/** + * LWIP_PPP_API==1: Enable PPP API (in pppapi.c) + */ +#ifndef LWIP_PPP_API +#define LWIP_PPP_API (PPP_SUPPORT && (NO_SYS == 0)) +#endif + +#if PPP_SUPPORT + +/** + * PPP_INPROC_IRQ_SAFE==1 call pppos_input() using tcpip_callback(). + * + * Please read the "PPPoS input path" chapter in the PPP documentation about this option. + */ +#ifndef PPP_INPROC_IRQ_SAFE +#define PPP_INPROC_IRQ_SAFE 0 +#endif + +/** + * PRINTPKT_SUPPORT==1: Enable PPP print packet support + * + * Mandatory for debugging, it displays exchanged packet content in debug trace. + */ +#ifndef PRINTPKT_SUPPORT +#define PRINTPKT_SUPPORT 0 +#endif + +/** + * PPP_IPV4_SUPPORT==1: Enable PPP IPv4 support + */ +#ifndef PPP_IPV4_SUPPORT +#define PPP_IPV4_SUPPORT (LWIP_IPV4) +#endif + +/** + * PPP_IPV6_SUPPORT==1: Enable PPP IPv6 support + */ +#ifndef PPP_IPV6_SUPPORT +#define PPP_IPV6_SUPPORT (LWIP_IPV6) +#endif + +/** + * PPP_NOTIFY_PHASE==1: Support PPP notify phase support + * + * PPP notify phase support allows you to set a callback which is + * called on change of the internal PPP state machine. + * + * This can be used for example to set a LED pattern depending on the + * current phase of the PPP session. + */ +#ifndef PPP_NOTIFY_PHASE +#define PPP_NOTIFY_PHASE 0 +#endif + +/** + * pbuf_type PPP is using for LCP, PAP, CHAP, EAP, CCP, IPCP and IP6CP packets. + * + * Memory allocated must be single buffered for PPP to works, it requires pbuf + * that are not going to be chained when allocated. This requires setting + * PBUF_POOL_BUFSIZE to at least 512 bytes, which is quite huge for small systems. + * + * Setting PPP_USE_PBUF_RAM to 1 makes PPP use memory from heap where continuous + * buffers are required, allowing you to use a smaller PBUF_POOL_BUFSIZE. + */ +#ifndef PPP_USE_PBUF_RAM +#define PPP_USE_PBUF_RAM 0 +#endif + +/** + * PPP_FCS_TABLE: Keep a 256*2 byte table to speed up FCS calculation for PPPoS + */ +#ifndef PPP_FCS_TABLE +#define PPP_FCS_TABLE 1 +#endif + +/** + * PAP_SUPPORT==1: Support PAP. + */ +#ifndef PAP_SUPPORT +#define PAP_SUPPORT 0 +#endif + +/** + * CHAP_SUPPORT==1: Support CHAP. + */ +#ifndef CHAP_SUPPORT +#define CHAP_SUPPORT 0 +#endif + +/** + * MSCHAP_SUPPORT==1: Support MSCHAP. + */ +#ifndef MSCHAP_SUPPORT +#define MSCHAP_SUPPORT 0 +#endif +#if MSCHAP_SUPPORT +/* MSCHAP requires CHAP support */ +#undef CHAP_SUPPORT +#define CHAP_SUPPORT 1 +#endif /* MSCHAP_SUPPORT */ + +/** + * EAP_SUPPORT==1: Support EAP. + */ +#ifndef EAP_SUPPORT +#define EAP_SUPPORT 0 +#endif + +/** + * CCP_SUPPORT==1: Support CCP. + */ +#ifndef CCP_SUPPORT +#define CCP_SUPPORT 0 +#endif + +/** + * MPPE_SUPPORT==1: Support MPPE. + */ +#ifndef MPPE_SUPPORT +#define MPPE_SUPPORT 0 +#endif +#if MPPE_SUPPORT +/* MPPE requires CCP support */ +#undef CCP_SUPPORT +#define CCP_SUPPORT 1 +/* MPPE requires MSCHAP support */ +#undef MSCHAP_SUPPORT +#define MSCHAP_SUPPORT 1 +/* MSCHAP requires CHAP support */ +#undef CHAP_SUPPORT +#define CHAP_SUPPORT 1 +#endif /* MPPE_SUPPORT */ + +/** + * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CBCP_SUPPORT +#define CBCP_SUPPORT 0 +#endif + +/** + * ECP_SUPPORT==1: Support ECP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef ECP_SUPPORT +#define ECP_SUPPORT 0 +#endif + +/** + * DEMAND_SUPPORT==1: Support dial on demand. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef DEMAND_SUPPORT +#define DEMAND_SUPPORT 0 +#endif + +/** + * LQR_SUPPORT==1: Support Link Quality Report. Do nothing except exchanging some LCP packets. + */ +#ifndef LQR_SUPPORT +#define LQR_SUPPORT 0 +#endif + +/** + * PPP_SERVER==1: Enable PPP server support (waiting for incoming PPP session). + * + * Currently only supported for PPPoS. + */ +#ifndef PPP_SERVER +#define PPP_SERVER 0 +#endif + +#if PPP_SERVER +/* + * PPP_OUR_NAME: Our name for authentication purposes + */ +#ifndef PPP_OUR_NAME +#define PPP_OUR_NAME "lwIP" +#endif +#endif /* PPP_SERVER */ + +/** + * VJ_SUPPORT==1: Support VJ header compression. + */ +#ifndef VJ_SUPPORT +#define VJ_SUPPORT 1 +#endif +/* VJ compression is only supported for IPv4 over PPPoS. */ +#if !PPPOS_SUPPORT || !PPP_IPV4_SUPPORT +#undef VJ_SUPPORT +#define VJ_SUPPORT 0 +#endif /* !PPPOS_SUPPORT */ + +/** + * PPP_MD5_RANDM==1: Use MD5 for better randomness. + * Enabled by default if CHAP, EAP, or L2TP AUTH support is enabled. + */ +#ifndef PPP_MD5_RANDM +#define PPP_MD5_RANDM (CHAP_SUPPORT || EAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT) +#endif + +/** + * PolarSSL library, used if necessary and not previously disabled + * + * + * lwIP contains some files fetched from the latest BSD release of + * the PolarSSL project for ciphers and encryption methods we need for lwIP + * PPP support. + * + * The PolarSSL files were cleaned to contain only the necessary struct + * fields and functions needed for lwIP. + * + * The PolarSSL API was not changed at all, so if you are already using + * PolarSSL you can choose to skip the compilation of the included PolarSSL + * library into lwIP: + * + * The following defines are available for flexibility: + * + * LWIP_INCLUDED_POLARSSL_MD4 ; Use lwIP internal PolarSSL for MD4 + * LWIP_INCLUDED_POLARSSL_MD5 ; Use lwIP internal PolarSSL for MD5 + * LWIP_INCLUDED_POLARSSL_SHA1 ; Use lwIP internal PolarSSL for SHA1 + * LWIP_INCLUDED_POLARSSL_DES ; Use lwIP internal PolarSSL for DES + * + * If set (=1), the default if required by another enabled PPP feature unless + * explicitly set to 0, using included lwIP PolarSSL. + * + * If clear (=0), not needed or using external PolarSSL. + * + * Beware of the stack requirements which can be a lot larger if you are not + * using our cleaned PolarSSL library. + */ + +/* CHAP, EAP, L2TP AUTH and MD5 Random require MD5 support */ +#if CHAP_SUPPORT || EAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT || PPP_MD5_RANDM +#ifndef LWIP_INCLUDED_POLARSSL_MD5 +#define LWIP_INCLUDED_POLARSSL_MD5 1 +#endif /* LWIP_INCLUDED_POLARSSL_MD5 */ +#endif /* CHAP_SUPPORT || EAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT || PPP_MD5_RANDM */ + +#if MSCHAP_SUPPORT +/* MSCHAP require MD4 support */ +#ifndef LWIP_INCLUDED_POLARSSL_MD4 +#define LWIP_INCLUDED_POLARSSL_MD4 1 +#endif /* LWIP_INCLUDED_POLARSSL_MD4 */ +/* MSCHAP require SHA1 support */ +#ifndef LWIP_INCLUDED_POLARSSL_SHA1 +#define LWIP_INCLUDED_POLARSSL_SHA1 1 +#endif /* LWIP_INCLUDED_POLARSSL_SHA1 */ +/* MSCHAP require DES support */ +#ifndef LWIP_INCLUDED_POLARSSL_DES +#define LWIP_INCLUDED_POLARSSL_DES 1 +#endif /* LWIP_INCLUDED_POLARSSL_DES */ +/* MS-CHAP support is required for MPPE */ +#if MPPE_SUPPORT +/* MPPE require ARC4 support */ +#ifndef LWIP_INCLUDED_POLARSSL_ARC4 +#define LWIP_INCLUDED_POLARSSL_ARC4 1 +#endif /* LWIP_INCLUDED_POLARSSL_ARC4*/ +#endif /* MPPE_SUPPORT */ +#endif /* MSCHAP_SUPPORT */ + +/* Default value if unset */ +#ifndef LWIP_INCLUDED_POLARSSL_MD4 +#define LWIP_INCLUDED_POLARSSL_MD4 0 +#endif /* LWIP_INCLUDED_POLARSSL_MD4 */ +#ifndef LWIP_INCLUDED_POLARSSL_MD5 +#define LWIP_INCLUDED_POLARSSL_MD5 0 +#endif /* LWIP_INCLUDED_POLARSSL_MD5 */ +#ifndef LWIP_INCLUDED_POLARSSL_SHA1 +#define LWIP_INCLUDED_POLARSSL_SHA1 0 +#endif /* LWIP_INCLUDED_POLARSSL_SHA1 */ +#ifndef LWIP_INCLUDED_POLARSSL_DES +#define LWIP_INCLUDED_POLARSSL_DES 0 +#endif /* LWIP_INCLUDED_POLARSSL_DES */ +#ifndef LWIP_INCLUDED_POLARSSL_ARC4 +#define LWIP_INCLUDED_POLARSSL_ARC4 0 +#endif /* LWIP_INCLUDED_POLARSSL_ARC4 */ + +/* + * PPP Timeouts + */ + +/** + * FSM_DEFTIMEOUT: Timeout time in seconds + */ +#ifndef FSM_DEFTIMEOUT +#define FSM_DEFTIMEOUT 6 +#endif + +/** + * FSM_DEFMAXTERMREQS: Maximum Terminate-Request transmissions + */ +#ifndef FSM_DEFMAXTERMREQS +#define FSM_DEFMAXTERMREQS 2 +#endif + +/** + * FSM_DEFMAXCONFREQS: Maximum Configure-Request transmissions + */ +#ifndef FSM_DEFMAXCONFREQS +#define FSM_DEFMAXCONFREQS 10 +#endif + +/** + * FSM_DEFMAXNAKLOOPS: Maximum number of nak loops + */ +#ifndef FSM_DEFMAXNAKLOOPS +#define FSM_DEFMAXNAKLOOPS 5 +#endif + +/** + * UPAP_DEFTIMEOUT: Timeout (seconds) for retransmitting req + */ +#ifndef UPAP_DEFTIMEOUT +#define UPAP_DEFTIMEOUT 6 +#endif + +/** + * UPAP_DEFTRANSMITS: Maximum number of auth-reqs to send + */ +#ifndef UPAP_DEFTRANSMITS +#define UPAP_DEFTRANSMITS 10 +#endif + +#if PPP_SERVER +/** + * UPAP_DEFREQTIME: Time to wait for auth-req from peer + */ +#ifndef UPAP_DEFREQTIME +#define UPAP_DEFREQTIME 30 +#endif +#endif /* PPP_SERVER */ + +/** + * CHAP_DEFTIMEOUT: Timeout (seconds) for retransmitting req + */ +#ifndef CHAP_DEFTIMEOUT +#define CHAP_DEFTIMEOUT 6 +#endif + +/** + * CHAP_DEFTRANSMITS: max # times to send challenge + */ +#ifndef CHAP_DEFTRANSMITS +#define CHAP_DEFTRANSMITS 10 +#endif + +#if PPP_SERVER +/** + * CHAP_DEFRECHALLENGETIME: If this option is > 0, rechallenge the peer every n seconds + */ +#ifndef CHAP_DEFRECHALLENGETIME +#define CHAP_DEFRECHALLENGETIME 0 +#endif +#endif /* PPP_SERVER */ + +/** + * EAP_DEFREQTIME: Time to wait for peer request + */ +#ifndef EAP_DEFREQTIME +#define EAP_DEFREQTIME 6 +#endif + +/** + * EAP_DEFALLOWREQ: max # times to accept requests + */ +#ifndef EAP_DEFALLOWREQ +#define EAP_DEFALLOWREQ 10 +#endif + +#if PPP_SERVER +/** + * EAP_DEFTIMEOUT: Timeout (seconds) for rexmit + */ +#ifndef EAP_DEFTIMEOUT +#define EAP_DEFTIMEOUT 6 +#endif + +/** + * EAP_DEFTRANSMITS: max # times to transmit + */ +#ifndef EAP_DEFTRANSMITS +#define EAP_DEFTRANSMITS 10 +#endif +#endif /* PPP_SERVER */ + +/** + * LCP_DEFLOOPBACKFAIL: Default number of times we receive our magic number from the peer + * before deciding the link is looped-back. + */ +#ifndef LCP_DEFLOOPBACKFAIL +#define LCP_DEFLOOPBACKFAIL 10 +#endif + +/** + * LCP_ECHOINTERVAL: Interval in seconds between keepalive echo requests, 0 to disable. + */ +#ifndef LCP_ECHOINTERVAL +#define LCP_ECHOINTERVAL 0 +#endif + +/** + * LCP_MAXECHOFAILS: Number of unanswered echo requests before failure. + */ +#ifndef LCP_MAXECHOFAILS +#define LCP_MAXECHOFAILS 3 +#endif + +/** + * PPP_MAXIDLEFLAG: Max Xmit idle time (in ms) before resend flag char. + */ +#ifndef PPP_MAXIDLEFLAG +#define PPP_MAXIDLEFLAG 100 +#endif + +/** + * PPP Packet sizes + */ + +/** + * PPP_MRU: Default MRU + */ +#ifndef PPP_MRU +#define PPP_MRU 1500 +#endif + +/** + * PPP_DEFMRU: Default MRU to try + */ +#ifndef PPP_DEFMRU +#define PPP_DEFMRU 1500 +#endif + +/** + * PPP_MAXMRU: Normally limit MRU to this (pppd default = 16384) + */ +#ifndef PPP_MAXMRU +#define PPP_MAXMRU 1500 +#endif + +/** + * PPP_MINMRU: No MRUs below this + */ +#ifndef PPP_MINMRU +#define PPP_MINMRU 128 +#endif + +/** + * PPPOL2TP_DEFMRU: Default MTU and MRU for L2TP + * Default = 1500 - PPPoE(6) - PPP Protocol(2) - IPv4 header(20) - UDP Header(8) + * - L2TP Header(6) - HDLC Header(2) - PPP Protocol(2) - MPPE Header(2) - PPP Protocol(2) + */ +#if PPPOL2TP_SUPPORT +#ifndef PPPOL2TP_DEFMRU +#define PPPOL2TP_DEFMRU 1450 +#endif +#endif /* PPPOL2TP_SUPPORT */ + +/** + * MAXNAMELEN: max length of hostname or name for auth + */ +#ifndef MAXNAMELEN +#define MAXNAMELEN 256 +#endif + +/** + * MAXSECRETLEN: max length of password or secret + */ +#ifndef MAXSECRETLEN +#define MAXSECRETLEN 256 +#endif + +#endif /* PPP_SUPPORT */ + +/* + -------------------------------------- + ---------- Checksum options ---------- + -------------------------------------- +*/ + +/** + * LWIP_CHECKSUM_CTRL_PER_NETIF==1: Checksum generation/check can be enabled/disabled + * per netif. + * ATTENTION: if enabled, the CHECKSUM_GEN_* and CHECKSUM_CHECK_* defines must be enabled! + */ +#ifndef LWIP_CHECKSUM_CTRL_PER_NETIF +#define LWIP_CHECKSUM_CTRL_PER_NETIF 0 +#endif + +/** + * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets. + */ +#ifndef CHECKSUM_GEN_IP +#define CHECKSUM_GEN_IP 1 +#endif + +/** + * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets. + */ +#ifndef CHECKSUM_GEN_UDP +#define CHECKSUM_GEN_UDP 1 +#endif + +/** + * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets. + */ +#ifndef CHECKSUM_GEN_TCP +#define CHECKSUM_GEN_TCP 1 +#endif + +/** + * CHECKSUM_GEN_ICMP==1: Generate checksums in software for outgoing ICMP packets. + */ +#ifndef CHECKSUM_GEN_ICMP +#define CHECKSUM_GEN_ICMP 1 +#endif + +/** + * CHECKSUM_GEN_ICMP6==1: Generate checksums in software for outgoing ICMP6 packets. + */ +#ifndef CHECKSUM_GEN_ICMP6 +#define CHECKSUM_GEN_ICMP6 1 +#endif + +/** + * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets. + */ +#ifndef CHECKSUM_CHECK_IP +#define CHECKSUM_CHECK_IP 1 +#endif + +/** + * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets. + */ +#ifndef CHECKSUM_CHECK_UDP +#define CHECKSUM_CHECK_UDP 1 +#endif + +/** + * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets. + */ +#ifndef CHECKSUM_CHECK_TCP +#define CHECKSUM_CHECK_TCP 1 +#endif + +/** + * CHECKSUM_CHECK_ICMP==1: Check checksums in software for incoming ICMP packets. + */ +#ifndef CHECKSUM_CHECK_ICMP +#define CHECKSUM_CHECK_ICMP 1 +#endif + +/** + * CHECKSUM_CHECK_ICMP6==1: Check checksums in software for incoming ICMPv6 packets + */ +#ifndef CHECKSUM_CHECK_ICMP6 +#define CHECKSUM_CHECK_ICMP6 1 +#endif + +/** + * LWIP_CHECKSUM_ON_COPY==1: Calculate checksum when copying data from + * application buffers to pbufs. + */ +#ifndef LWIP_CHECKSUM_ON_COPY +#define LWIP_CHECKSUM_ON_COPY 0 +#endif + +/* + --------------------------------------- + ---------- IPv6 options --------------- + --------------------------------------- +*/ +/** + * LWIP_IPV6==1: Enable IPv6 + */ +#ifndef LWIP_IPV6 +#define LWIP_IPV6 0 +#endif + +/** + * LWIP_IPV6_NUM_ADDRESSES: Number of IPv6 addresses per netif. + */ +#ifndef LWIP_IPV6_NUM_ADDRESSES +#define LWIP_IPV6_NUM_ADDRESSES 3 +#endif + +/** + * LWIP_IPV6_FORWARD==1: Forward IPv6 packets across netifs + */ +#ifndef LWIP_IPV6_FORWARD +#define LWIP_IPV6_FORWARD 0 +#endif + +/** + * LWIP_ICMP6==1: Enable ICMPv6 (mandatory per RFC) + */ +#ifndef LWIP_ICMP6 +#define LWIP_ICMP6 (LWIP_IPV6) +#endif + +/** + * LWIP_ICMP6_DATASIZE: bytes from original packet to send back in + * ICMPv6 error messages. + */ +#ifndef LWIP_ICMP6_DATASIZE +#define LWIP_ICMP6_DATASIZE 8 +#endif + +/** + * LWIP_ICMP6_HL: default hop limit for ICMPv6 messages + */ +#ifndef LWIP_ICMP6_HL +#define LWIP_ICMP6_HL 255 +#endif + +/** + * LWIP_IPV6_MLD==1: Enable multicast listener discovery protocol. + */ +#ifndef LWIP_IPV6_MLD +#define LWIP_IPV6_MLD (LWIP_IPV6) +#endif + +/** + * MEMP_NUM_MLD6_GROUP: Max number of IPv6 multicast that can be joined. + */ +#ifndef MEMP_NUM_MLD6_GROUP +#define MEMP_NUM_MLD6_GROUP 4 +#endif + +/** + * LWIP_IPV6_FRAG==1: Fragment outgoing IPv6 packets that are too big. + */ +#ifndef LWIP_IPV6_FRAG +#define LWIP_IPV6_FRAG 0 +#endif + +/** + * LWIP_IPV6_REASS==1: reassemble incoming IPv6 packets that fragmented + */ +#ifndef LWIP_IPV6_REASS +#define LWIP_IPV6_REASS (LWIP_IPV6) +#endif + +/** + * LWIP_ND6_QUEUEING==1: queue outgoing IPv6 packets while MAC address + * is being resolved. + */ +#ifndef LWIP_ND6_QUEUEING +#define LWIP_ND6_QUEUEING (LWIP_IPV6) +#endif + +/** + * MEMP_NUM_ND6_QUEUE: Max number of IPv6 packets to queue during MAC resolution. + */ +#ifndef MEMP_NUM_ND6_QUEUE +#define MEMP_NUM_ND6_QUEUE 20 +#endif + +/** + * LWIP_ND6_NUM_NEIGHBORS: Number of entries in IPv6 neighbor cache + */ +#ifndef LWIP_ND6_NUM_NEIGHBORS +#define LWIP_ND6_NUM_NEIGHBORS 10 +#endif + +/** + * LWIP_ND6_NUM_DESTINATIONS: number of entries in IPv6 destination cache + */ +#ifndef LWIP_ND6_NUM_DESTINATIONS +#define LWIP_ND6_NUM_DESTINATIONS 10 +#endif + +/** + * LWIP_ND6_NUM_PREFIXES: number of entries in IPv6 on-link prefixes cache + */ +#ifndef LWIP_ND6_NUM_PREFIXES +#define LWIP_ND6_NUM_PREFIXES 5 +#endif + +/** + * LWIP_ND6_NUM_ROUTERS: number of entries in IPv6 default router cache + */ +#ifndef LWIP_ND6_NUM_ROUTERS +#define LWIP_ND6_NUM_ROUTERS 3 +#endif + +/** + * LWIP_ND6_MAX_MULTICAST_SOLICIT: max number of multicast solicit messages to send + * (neighbor solicit and router solicit) + */ +#ifndef LWIP_ND6_MAX_MULTICAST_SOLICIT +#define LWIP_ND6_MAX_MULTICAST_SOLICIT 3 +#endif + +/** + * LWIP_ND6_MAX_UNICAST_SOLICIT: max number of unicast neighbor solicitation messages + * to send during neighbor reachability detection. + */ +#ifndef LWIP_ND6_MAX_UNICAST_SOLICIT +#define LWIP_ND6_MAX_UNICAST_SOLICIT 3 +#endif + +/** + * Unused: See ND RFC (time in milliseconds). + */ +#ifndef LWIP_ND6_MAX_ANYCAST_DELAY_TIME +#define LWIP_ND6_MAX_ANYCAST_DELAY_TIME 1000 +#endif + +/** + * Unused: See ND RFC + */ +#ifndef LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT +#define LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT 3 +#endif + +/** + * LWIP_ND6_REACHABLE_TIME: default neighbor reachable time (in milliseconds). + * May be updated by router advertisement messages. + */ +#ifndef LWIP_ND6_REACHABLE_TIME +#define LWIP_ND6_REACHABLE_TIME 30000 +#endif + +/** + * LWIP_ND6_RETRANS_TIMER: default retransmission timer for solicitation messages + */ +#ifndef LWIP_ND6_RETRANS_TIMER +#define LWIP_ND6_RETRANS_TIMER 1000 +#endif + +/** + * LWIP_ND6_DELAY_FIRST_PROBE_TIME: Delay before first unicast neighbor solicitation + * message is sent, during neighbor reachability detection. + */ +#ifndef LWIP_ND6_DELAY_FIRST_PROBE_TIME +#define LWIP_ND6_DELAY_FIRST_PROBE_TIME 5000 +#endif + +/** + * LWIP_ND6_ALLOW_RA_UPDATES==1: Allow Router Advertisement messages to update + * Reachable time and retransmission timers, and netif MTU. + */ +#ifndef LWIP_ND6_ALLOW_RA_UPDATES +#define LWIP_ND6_ALLOW_RA_UPDATES 1 +#endif + +/** + * LWIP_IPV6_SEND_ROUTER_SOLICIT==1: Send router solicitation messages during + * network startup. + */ +#ifndef LWIP_IPV6_SEND_ROUTER_SOLICIT +#define LWIP_IPV6_SEND_ROUTER_SOLICIT 1 +#endif + +/** + * LWIP_ND6_TCP_REACHABILITY_HINTS==1: Allow TCP to provide Neighbor Discovery + * with reachability hints for connected destinations. This helps avoid sending + * unicast neighbor solicitation messages. + */ +#ifndef LWIP_ND6_TCP_REACHABILITY_HINTS +#define LWIP_ND6_TCP_REACHABILITY_HINTS 1 +#endif + +/** + * LWIP_IPV6_AUTOCONFIG==1: Enable stateless address autoconfiguration as per RFC 4862. + */ +#ifndef LWIP_IPV6_AUTOCONFIG +#define LWIP_IPV6_AUTOCONFIG (LWIP_IPV6) +#endif + +/** + * LWIP_IPV6_DUP_DETECT_ATTEMPTS: Number of duplicate address detection attempts. + */ +#ifndef LWIP_IPV6_DUP_DETECT_ATTEMPTS +#define LWIP_IPV6_DUP_DETECT_ATTEMPTS 1 +#endif + +/** + * LWIP_IPV6_DHCP6==1: enable DHCPv6 stateful address autoconfiguration. + */ +#ifndef LWIP_IPV6_DHCP6 +#define LWIP_IPV6_DHCP6 0 +#endif + +/* + --------------------------------------- + ---------- Hook options --------------- + --------------------------------------- +*/ + +/* Hooks are undefined by default, define them to a function if you need them. */ + +/** + * LWIP_HOOK_IP4_INPUT(pbuf, input_netif): + * - called from ip_input() (IPv4) + * - pbuf: received struct pbuf passed to ip_input() + * - input_netif: struct netif on which the packet has been received + * Return values: + * - 0: Hook has not consumed the packet, packet is processed as normal + * - != 0: Hook has consumed the packet. + * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook + * (i.e. free it when done). + */ + +/** + * LWIP_HOOK_IP4_ROUTE(dest): + * - called from ip_route() (IPv4) + * - dest: destination IPv4 address + * Returns the destination netif or NULL if no destination netif is found. In + * that case, ip_route() continues as normal. + */ + +/** + * LWIP_HOOK_IP4_ROUTE_SRC(dest, src): + * - source-based routing for IPv4 (see LWIP_HOOK_IP4_ROUTE(), src may be NULL) + */ + +/** + * LWIP_HOOK_ETHARP_GET_GW(netif, dest): + * - called from etharp_output() (IPv4) + * - netif: the netif used for sending + * - dest: the destination IPv4 address + * Returns the IPv4 address of the gateway to handle the specified destination + * IPv4 address. If NULL is returned, the netif's default gateway is used. + * The returned address MUST be reachable on the specified netif! + * This function is meant to implement advanced IPv4 routing together with + * LWIP_HOOK_IP4_ROUTE(). The actual routing/gateway table implementation is + * not part of lwIP but can e.g. be hidden in the netif's state argument. +*/ + +/** + * LWIP_HOOK_IP6_INPUT(pbuf, input_netif): + * - called from ip6_input() (IPv6) + * - pbuf: received struct pbuf passed to ip6_input() + * - input_netif: struct netif on which the packet has been received + * Return values: + * - 0: Hook has not consumed the packet, packet is processed as normal + * - != 0: Hook has consumed the packet. + * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook + * (i.e. free it when done). + */ + +/** + * LWIP_HOOK_IP6_ROUTE(src, dest): + * - called from ip6_route() (IPv6) + * - src: sourc IPv6 address + * - dest: destination IPv6 address + * Returns the destination netif or NULL if no destination netif is found. In + * that case, ip6_route() continues as normal. + */ + +/** + * LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr): + * - called from ethernet_input() if VLAN support is enabled + * - netif: struct netif on which the packet has been received + * - eth_hdr: struct eth_hdr of the packet + * - vlan_hdr: struct eth_vlan_hdr of the packet + * Return values: + * - 0: Packet must be dropped. + * - != 0: Packet must be accepted. + */ + +/** + * LWIP_HOOK_VLAN_SET(netif, eth_hdr, vlan_hdr): + * - called from etharp_raw() and etharp_send_ip() if VLAN support is enabled + * - netif: struct netif that the packet will be sent through + * - eth_hdr: struct eth_hdr of the packet + * - vlan_hdr: struct eth_vlan_hdr of the packet + * Return values: + * - 0: Packet shall not contain VLAN header. + * - != 0: Packet shall contain VLAN header. + * Hook can be used to set prio_vid field of vlan_hdr. + */ + +/** + * LWIP_HOOK_MEMP_AVAILABLE(memp_t_type): + * - called from memp_free() when a memp pool was empty and an item is now available + */ + +/* + --------------------------------------- + ---------- Debugging options ---------- + --------------------------------------- +*/ +/** + * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is + * compared against this value. If it is smaller, then debugging + * messages are written. + */ +#ifndef LWIP_DBG_MIN_LEVEL +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL +#endif + +/** + * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable + * debug messages of certain types. + */ +#ifndef LWIP_DBG_TYPES_ON +#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#endif + +/** + * ETHARP_DEBUG: Enable debugging in etharp.c. + */ +#ifndef ETHARP_DEBUG +#define ETHARP_DEBUG LWIP_DBG_OFF +#endif + +/** + * NETIF_DEBUG: Enable debugging in netif.c. + */ +#ifndef NETIF_DEBUG +#define NETIF_DEBUG LWIP_DBG_OFF +#endif + +/** + * PBUF_DEBUG: Enable debugging in pbuf.c. + */ +#ifndef PBUF_DEBUG +#define PBUF_DEBUG LWIP_DBG_OFF +#endif + +/** + * API_LIB_DEBUG: Enable debugging in api_lib.c. + */ +#ifndef API_LIB_DEBUG +#define API_LIB_DEBUG LWIP_DBG_OFF +#endif + +/** + * API_MSG_DEBUG: Enable debugging in api_msg.c. + */ +#ifndef API_MSG_DEBUG +#define API_MSG_DEBUG LWIP_DBG_OFF +#endif + +/** + * SOCKETS_DEBUG: Enable debugging in sockets.c. + */ +#ifndef SOCKETS_DEBUG +#define SOCKETS_DEBUG LWIP_DBG_OFF +#endif + +/** + * ICMP_DEBUG: Enable debugging in icmp.c. + */ +#ifndef ICMP_DEBUG +#define ICMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * IGMP_DEBUG: Enable debugging in igmp.c. + */ +#ifndef IGMP_DEBUG +#define IGMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * INET_DEBUG: Enable debugging in inet.c. + */ +#ifndef INET_DEBUG +#define INET_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP_DEBUG: Enable debugging for IP. + */ +#ifndef IP_DEBUG +#define IP_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. + */ +#ifndef IP_REASS_DEBUG +#define IP_REASS_DEBUG LWIP_DBG_OFF +#endif + +/** + * RAW_DEBUG: Enable debugging in raw.c. + */ +#ifndef RAW_DEBUG +#define RAW_DEBUG LWIP_DBG_OFF +#endif + +/** + * MEM_DEBUG: Enable debugging in mem.c. + */ +#ifndef MEM_DEBUG +#define MEM_DEBUG LWIP_DBG_OFF +#endif + +/** + * MEMP_DEBUG: Enable debugging in memp.c. + */ +#ifndef MEMP_DEBUG +#define MEMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SYS_DEBUG: Enable debugging in sys.c. + */ +#ifndef SYS_DEBUG +#define SYS_DEBUG LWIP_DBG_OFF +#endif + +/** + * TIMERS_DEBUG: Enable debugging in timers.c. + */ +#ifndef TIMERS_DEBUG +#define TIMERS_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_DEBUG: Enable debugging for TCP. + */ +#ifndef TCP_DEBUG +#define TCP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. + */ +#ifndef TCP_INPUT_DEBUG +#define TCP_INPUT_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. + */ +#ifndef TCP_FR_DEBUG +#define TCP_FR_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit + * timeout. + */ +#ifndef TCP_RTO_DEBUG +#define TCP_RTO_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. + */ +#ifndef TCP_CWND_DEBUG +#define TCP_CWND_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. + */ +#ifndef TCP_WND_DEBUG +#define TCP_WND_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. + */ +#ifndef TCP_OUTPUT_DEBUG +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. + */ +#ifndef TCP_RST_DEBUG +#define TCP_RST_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. + */ +#ifndef TCP_QLEN_DEBUG +#define TCP_QLEN_DEBUG LWIP_DBG_OFF +#endif + +/** + * UDP_DEBUG: Enable debugging in UDP. + */ +#ifndef UDP_DEBUG +#define UDP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCPIP_DEBUG: Enable debugging in tcpip.c. + */ +#ifndef TCPIP_DEBUG +#define TCPIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * PPP_DEBUG: Enable debugging for PPP. + */ +#ifndef PPP_DEBUG +#define PPP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SLIP_DEBUG: Enable debugging in slipif.c. + */ +#ifndef SLIP_DEBUG +#define SLIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * DHCP_DEBUG: Enable debugging in dhcp.c. + */ +#ifndef DHCP_DEBUG +#define DHCP_DEBUG LWIP_DBG_OFF +#endif + +/** + * AUTOIP_DEBUG: Enable debugging in autoip.c. + */ +#ifndef AUTOIP_DEBUG +#define AUTOIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * DNS_DEBUG: Enable debugging for DNS. + */ +#ifndef DNS_DEBUG +#define DNS_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP6_DEBUG: Enable debugging for IPv6. + */ +#ifndef IP6_DEBUG +#define IP6_DEBUG LWIP_DBG_OFF +#endif + +/* + -------------------------------------------------- + ---------- Performance tracking options ---------- + -------------------------------------------------- +*/ +/** + * LWIP_PERF: Enable performance testing for lwIP + * (if enabled, arch/perf.h is included) + */ +#ifndef LWIP_PERF +#define LWIP_PERF 0 +#endif + +#ifndef THREAD_SAFE_DEBUG +#define THREAD_SAFE_DEBUG 0 +#endif + +#endif /* LWIP_HDR_OPT_H */ diff --git a/tools/sdk/include/lwip/lwip/pbuf.h b/tools/sdk/include/lwip/lwip/pbuf.h new file mode 100755 index 00000000..aaf5e294 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/pbuf.h @@ -0,0 +1,231 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef LWIP_HDR_PBUF_H +#define LWIP_HDR_PBUF_H + +#include "lwip/opt.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** LWIP_SUPPORT_CUSTOM_PBUF==1: Custom pbufs behave much like their pbuf type + * but they are allocated by external code (initialised by calling + * pbuf_alloced_custom()) and when pbuf_free gives up their last reference, they + * are freed by calling pbuf_custom->custom_free_function(). + * Currently, the pbuf_custom code is only needed for one specific configuration + * of IP_FRAG, unless required by external driver/application code. */ +#ifndef LWIP_SUPPORT_CUSTOM_PBUF +#define LWIP_SUPPORT_CUSTOM_PBUF ((IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF) || (LWIP_IPV6 && LWIP_IPV6_FRAG)) +#endif + +/* @todo: We need a mechanism to prevent wasting memory in every pbuf + (TCP vs. UDP, IPv4 vs. IPv6: UDP/IPv4 packets may waste up to 28 bytes) */ + +#define PBUF_TRANSPORT_HLEN 20 +#if LWIP_IPV6 +#define PBUF_IP_HLEN 40 +#else +#define PBUF_IP_HLEN 20 +#endif + +typedef enum { + PBUF_TRANSPORT, + PBUF_IP, + PBUF_LINK, + PBUF_RAW_TX, + PBUF_RAW +} pbuf_layer; + +typedef enum { + /** pbuf data is stored in RAM, used for TX mostly, struct pbuf and its payload + are allocated in one piece of contiguous memory (so the first payload byte + can be calculated from struct pbuf) + pbuf_alloc() allocates PBUF_RAM pbufs as unchained pbufs (although that might + change in future versions) */ + PBUF_RAM, + /** pbuf data is stored in ROM, i.e. struct pbuf and its payload are located in + totally different memory areas. Since it points to ROM, payload does not + have to be copied when queued for transmission. */ + PBUF_ROM, + /** pbuf comes from the pbuf pool. Much like PBUF_ROM but payload might change + so it has to be duplicated when queued before transmitting, depending on + who has a 'ref' to it. */ + PBUF_REF, + /** pbuf payload refers to RAM. This one comes from a pool and should be used + for RX. Payload can be chained (scatter-gather RX) but like PBUF_RAM, struct + pbuf and its payload are allocated in one piece of contiguous memory (so + the first payload byte can be calculated from struct pbuf) */ + PBUF_POOL +} pbuf_type; + + +/** indicates this packet's data should be immediately passed to the application */ +#define PBUF_FLAG_PUSH 0x01U +/** indicates this is a custom pbuf: pbuf_free calls pbuf_custom->custom_free_function() + when the last reference is released (plus custom PBUF_RAM cannot be trimmed) */ +#define PBUF_FLAG_IS_CUSTOM 0x02U +/** indicates this pbuf is UDP multicast to be looped back */ +#define PBUF_FLAG_MCASTLOOP 0x04U +/** indicates this pbuf was received as link-level broadcast */ +#define PBUF_FLAG_LLBCAST 0x08U +/** indicates this pbuf was received as link-level multicast */ +#define PBUF_FLAG_LLMCAST 0x10U +/** indicates this pbuf includes a TCP FIN flag */ +#define PBUF_FLAG_TCP_FIN 0x20U + +struct pbuf { + /** next pbuf in singly linked pbuf chain */ + struct pbuf *next; + + /** pointer to the actual data in the buffer */ + void *payload; + + /** + * total length of this buffer and all next buffers in chain + * belonging to the same packet. + * + * For non-queue packet chains this is the invariant: + * p->tot_len == p->len + (p->next? p->next->tot_len: 0) + */ + u16_t tot_len; + + /** length of this buffer */ + u16_t len; + + /** pbuf_type as u8_t instead of enum to save space */ + u8_t /*pbuf_type*/ type; + + /** misc flags */ + u8_t flags; + + /** + * the reference count always equals the number of pointers + * that refer to this pbuf. This can be pointers from an application, + * the stack itself, or pbuf->next pointers from a chain. + */ + u16_t ref; + +#ifdef LWIP_ESP8266 + void *eb; +#endif +}; + + +/** Helper struct for const-correctness only. + * The only meaning of this one is to provide a const payload pointer + * for PBUF_ROM type. + */ +struct pbuf_rom { + /** next pbuf in singly linked pbuf chain */ + struct pbuf *next; + + /** pointer to the actual data in the buffer */ + const void *payload; +}; + +#if LWIP_SUPPORT_CUSTOM_PBUF +/** Prototype for a function to free a custom pbuf */ +typedef void (*pbuf_free_custom_fn)(struct pbuf *p); + +/** A custom pbuf: like a pbuf, but following a function pointer to free it. */ +struct pbuf_custom { + /** The actual pbuf */ + struct pbuf pbuf; + /** This function is called when pbuf_free deallocates this pbuf(_custom) */ + pbuf_free_custom_fn custom_free_function; +}; +#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ + +#if LWIP_TCP && TCP_QUEUE_OOSEQ +/** Define this to 0 to prevent freeing ooseq pbufs when the PBUF_POOL is empty */ +#ifndef PBUF_POOL_FREE_OOSEQ +#define PBUF_POOL_FREE_OOSEQ 1 +#endif /* PBUF_POOL_FREE_OOSEQ */ +#if NO_SYS && PBUF_POOL_FREE_OOSEQ +extern volatile u8_t pbuf_free_ooseq_pending; +void pbuf_free_ooseq(void); +/** When not using sys_check_timeouts(), call PBUF_CHECK_FREE_OOSEQ() + at regular intervals from main level to check if ooseq pbufs need to be + freed! */ +#define PBUF_CHECK_FREE_OOSEQ() do { if(pbuf_free_ooseq_pending) { \ + /* pbuf_alloc() reported PBUF_POOL to be empty -> try to free some \ + ooseq queued pbufs now */ \ + pbuf_free_ooseq(); }}while(0) +#endif /* NO_SYS && PBUF_POOL_FREE_OOSEQ*/ +#endif /* LWIP_TCP && TCP_QUEUE_OOSEQ */ + +/* Initializes the pbuf module. This call is empty for now, but may not be in future. */ +#define pbuf_init() + +struct pbuf *pbuf_alloc(pbuf_layer l, u16_t length, pbuf_type type); +#if LWIP_SUPPORT_CUSTOM_PBUF +struct pbuf *pbuf_alloced_custom(pbuf_layer l, u16_t length, pbuf_type type, + struct pbuf_custom *p, void *payload_mem, + u16_t payload_mem_len); +#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ +void pbuf_realloc(struct pbuf *p, u16_t size); +u8_t pbuf_header(struct pbuf *p, s16_t header_size); +u8_t pbuf_header_force(struct pbuf *p, s16_t header_size); +void pbuf_ref(struct pbuf *p); +u8_t pbuf_free(struct pbuf *p); +u8_t pbuf_clen(struct pbuf *p); +void pbuf_cat(struct pbuf *head, struct pbuf *tail); +void pbuf_chain(struct pbuf *head, struct pbuf *tail); +struct pbuf *pbuf_dechain(struct pbuf *p); +err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from); +u16_t pbuf_copy_partial(struct pbuf *p, void *dataptr, u16_t len, u16_t offset); +err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len); +err_t pbuf_take_at(struct pbuf *buf, const void *dataptr, u16_t len, u16_t offset); +struct pbuf *pbuf_skip(struct pbuf* in, u16_t in_offset, u16_t* out_offset); +struct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer); +#if LWIP_CHECKSUM_ON_COPY +err_t pbuf_fill_chksum(struct pbuf *p, u16_t start_offset, const void *dataptr, + u16_t len, u16_t *chksum); +#endif /* LWIP_CHECKSUM_ON_COPY */ +#if LWIP_TCP && TCP_QUEUE_OOSEQ && LWIP_WND_SCALE +void pbuf_split_64k(struct pbuf *p, struct pbuf **rest); +#endif /* LWIP_TCP && TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + +u8_t pbuf_get_at(struct pbuf* p, u16_t offset); +void pbuf_put_at(struct pbuf* p, u16_t offset, u8_t data); +u16_t pbuf_memcmp(struct pbuf* p, u16_t offset, const void* s2, u16_t n); +u16_t pbuf_memfind(struct pbuf* p, const void* mem, u16_t mem_len, u16_t start_offset); +u16_t pbuf_strstr(struct pbuf* p, const char* substr); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PBUF_H */ diff --git a/tools/sdk/include/lwip/lwip/pppapi.h b/tools/sdk/include/lwip/lwip/pppapi.h new file mode 100755 index 00000000..3ddf3daf --- /dev/null +++ b/tools/sdk/include/lwip/lwip/pppapi.h @@ -0,0 +1,148 @@ +/* + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#ifndef __LWIP_PPPAPI_H__ +#define __LWIP_PPPAPI_H__ + +#include "lwip/opt.h" + +#if LWIP_PPP_API /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/sys.h" +#include "lwip/netif.h" +#include "lwip/priv/tcpip_priv.h" +#include "netif/ppp/ppp.h" +#if PPPOS_SUPPORT +#include "netif/ppp/pppos.h" +#endif /* PPPOS_SUPPORT */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct pppapi_msg_msg { + ppp_pcb *ppp; + union { + struct { + u8_t authtype; + const char *user; + const char *passwd; + } setauth; +#if PPP_NOTIFY_PHASE + struct { + ppp_notify_phase_cb_fn notify_phase_cb; + } setnotifyphasecb; +#endif /* PPP_NOTIFY_PHASE */ +#if PPPOS_SUPPORT + struct { + struct netif *pppif; + pppos_output_cb_fn output_cb; + ppp_link_status_cb_fn link_status_cb; + void *ctx_cb; + } serialcreate; +#endif /* PPPOS_SUPPORT */ +#if PPPOE_SUPPORT + struct { + struct netif *pppif; + struct netif *ethif; + const char *service_name; + const char *concentrator_name; + ppp_link_status_cb_fn link_status_cb; + void *ctx_cb; + } ethernetcreate; +#endif /* PPPOE_SUPPORT */ +#if PPPOL2TP_SUPPORT + struct { + struct netif *pppif; + struct netif *netif; + ip_addr_t *ipaddr; + u16_t port; +#if PPPOL2TP_AUTH_SUPPORT + const u8_t *secret; + u8_t secret_len; +#endif /* PPPOL2TP_AUTH_SUPPORT */ + ppp_link_status_cb_fn link_status_cb; + void *ctx_cb; + } l2tpcreate; +#endif /* PPPOL2TP_SUPPORT */ + struct { + u16_t holdoff; + } connect; +#if PPP_SERVER + struct { + struct ppp_addrs *addrs; + } listen; +#endif /* PPP_SERVER */ + struct { + u8_t nocarrier; + } close; + struct { + u8_t cmd; + void *arg; + } ioctl; + } msg; +}; + +struct pppapi_msg { + struct tcpip_api_call call; + struct pppapi_msg_msg msg; +}; + +/* API for application */ +void pppapi_set_default(ppp_pcb *pcb); +void pppapi_set_auth(ppp_pcb *pcb, u8_t authtype, const char *user, const char *passwd); +#if PPP_NOTIFY_PHASE +void pppapi_set_notify_phase_callback(ppp_pcb *pcb, ppp_notify_phase_cb_fn notify_phase_cb); +#endif /* PPP_NOTIFY_PHASE */ +#if PPPOS_SUPPORT +ppp_pcb *pppapi_pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb, ppp_link_status_cb_fn link_status_cb, void *ctx_cb); +#endif /* PPPOS_SUPPORT */ +#if PPPOE_SUPPORT +ppp_pcb *pppapi_pppoe_create(struct netif *pppif, struct netif *ethif, const char *service_name, + const char *concentrator_name, ppp_link_status_cb_fn link_status_cb, + void *ctx_cb); +#endif /* PPPOE_SUPPORT */ +#if PPPOL2TP_SUPPORT +ppp_pcb *pppapi_pppol2tp_create(struct netif *pppif, struct netif *netif, ip_addr_t *ipaddr, u16_t port, + const u8_t *secret, u8_t secret_len, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); +#endif /* PPPOL2TP_SUPPORT */ +err_t pppapi_connect(ppp_pcb *pcb, u16_t holdoff); +#if PPP_SERVER +err_t pppapi_listen(ppp_pcb *pcb, struct ppp_addrs *addrs); +#endif /* PPP_SERVER */ +err_t pppapi_close(ppp_pcb *pcb, u8_t nocarrier); +err_t pppapi_free(ppp_pcb *pcb); +err_t pppapi_ioctl(ppp_pcb *pcb, u8_t cmd, void *arg); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_PPP_API */ + +#endif /* __LWIP_PPPAPI_H__ */ diff --git a/tools/sdk/include/lwip/lwip/priv/api_msg.h b/tools/sdk/include/lwip/lwip/priv/api_msg.h new file mode 100755 index 00000000..329fa0de --- /dev/null +++ b/tools/sdk/include/lwip/lwip/priv/api_msg.h @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_API_MSG_H +#define LWIP_HDR_API_MSG_H + +#include "lwip/opt.h" + +#if LWIP_NETCONN || LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ +/* Note: Netconn API is always available when sockets are enabled - + * sockets are implemented on top of them */ + +#include /* for size_t */ + +#include "lwip/ip_addr.h" +#include "lwip/err.h" +#include "lwip/sys.h" +#include "lwip/igmp.h" +#include "lwip/api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_MPU_COMPATIBLE +#define API_MSG_M_DEF(m) m +#define API_MSG_M_DEF_C(t, m) t m +#if LWIP_NETCONN_SEM_PER_THREAD +#define API_MSG_M_DEF_SEM(m) *m +#else +#define API_MSG_M_DEF_SEM(m) API_MSG_M_DEF(m) +#endif +#else /* LWIP_MPU_COMPATIBLE */ +#define API_MSG_M_DEF(m) *m +#define API_MSG_M_DEF_C(t, m) const t * m +#define API_MSG_M_DEF_SEM(m) API_MSG_M_DEF(m) +#endif /* LWIP_MPU_COMPATIBLE */ + +/* For the netconn API, these values are use as a bitmask! */ +#define NETCONN_SHUT_RD 1 +#define NETCONN_SHUT_WR 2 +#define NETCONN_SHUT_RDWR (NETCONN_SHUT_RD | NETCONN_SHUT_WR) + +/* IP addresses and port numbers are expected to be in + * the same byte order as in the corresponding pcb. + */ +/** This struct includes everything that is necessary to execute a function + for a netconn in another thread context (mainly used to process netconns + in the tcpip_thread context to be thread safe). */ +struct api_msg_msg { + /** The netconn which to process - always needed: it includes the semaphore + which is used to block the application thread until the function finished. */ + struct netconn *conn; + /** The return value of the function executed in tcpip_thread. */ + err_t err; + /** Depending on the executed function, one of these union members is used */ + union { + /** used for lwip_netconn_do_send */ + struct netbuf *b; + /** used for lwip_netconn_do_newconn */ + struct { + u8_t proto; + } n; + /** used for lwip_netconn_do_bind and lwip_netconn_do_connect */ + struct { + API_MSG_M_DEF_C(ip_addr_t, ipaddr); + u16_t port; + } bc; + /** used for lwip_netconn_do_getaddr */ + struct { + ip_addr_t API_MSG_M_DEF(ipaddr); + u16_t API_MSG_M_DEF(port); + u8_t local; + } ad; + /** used for lwip_netconn_do_write */ + struct { + const void *dataptr; + size_t len; + u8_t apiflags; +#if LWIP_SO_SNDTIMEO + u32_t time_started; +#endif /* LWIP_SO_SNDTIMEO */ + } w; + /** used for lwip_netconn_do_recv */ + struct { + u32_t len; + } r; +#if LWIP_TCP + /** used for lwip_netconn_do_close (/shutdown) */ + struct { + u8_t shut; +#if LWIP_SO_SNDTIMEO || LWIP_SO_LINGER + u32_t time_started; +#else /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */ + u8_t polls_left; +#endif /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */ + } sd; +#endif /* LWIP_TCP */ +#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) + /** used for lwip_netconn_do_join_leave_group */ + struct { + API_MSG_M_DEF_C(ip_addr_t, multiaddr); + API_MSG_M_DEF_C(ip_addr_t, netif_addr); + enum netconn_igmp join_or_leave; + } jl; +#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ +#if TCP_LISTEN_BACKLOG + struct { + u8_t backlog; + } lb; +#endif /* TCP_LISTEN_BACKLOG */ + } msg; +#if LWIP_NETCONN_SEM_PER_THREAD + sys_sem_t* op_completed_sem; +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ +}; + +#if LWIP_NETCONN_SEM_PER_THREAD +#define LWIP_API_MSG_SEM(msg) ((msg)->op_completed_sem) +#else /* LWIP_NETCONN_SEM_PER_THREAD */ +#define LWIP_API_MSG_SEM(msg) (&(msg)->conn->op_completed) +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + + +/** This struct contains a function to execute in another thread context and + a struct api_msg_msg that serves as an argument for this function. + This is passed to tcpip_apimsg to execute functions in tcpip_thread context. */ +struct api_msg { + /** function to execute in tcpip_thread context */ + void (* function)(void *msg); + /** arguments for this function */ + struct api_msg_msg msg; +}; + +#if LWIP_DNS +/** As lwip_netconn_do_gethostbyname requires more arguments but doesn't require a netconn, + it has its own struct (to avoid struct api_msg getting bigger than necessary). + lwip_netconn_do_gethostbyname must be called using tcpip_callback instead of tcpip_apimsg + (see netconn_gethostbyname). */ +struct dns_api_msg { + /** Hostname to query or dotted IP address string */ +#if LWIP_MPU_COMPATIBLE + char name[DNS_MAX_NAME_LENGTH]; +#else /* LWIP_MPU_COMPATIBLE */ + const char *name; +#endif /* LWIP_MPU_COMPATIBLE */ + /** The resolved address is stored here */ + ip_addr_t API_MSG_M_DEF(addr); +#if LWIP_IPV4 && LWIP_IPV6 + /** Type of resolve call */ + u8_t dns_addrtype; +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + /** This semaphore is posted when the name is resolved, the application thread + should wait on it. */ + sys_sem_t API_MSG_M_DEF_SEM(sem); + /** Errors are given back here */ + err_t API_MSG_M_DEF(err); +}; +#endif /* LWIP_DNS */ + +#if LWIP_NETCONN_SEM_PER_THREAD +#ifdef LWIP_ESP8266 +#define LWIP_NETCONN_THREAD_SEM_GET() sys_thread_sem_get() +#define LWIP_NETCONN_THREAD_SEM_ALLOC() sys_thread_sem_init() +#define LWIP_NETCONN_THREAD_SEM_FREE() sys_thread_sem_deinit() +#endif +#endif + +#if LWIP_TCPIP_CORE_LOCKING +#ifdef LWIP_DEBUG +#define TCIP_APIMSG_SET_ERR(m, e) (m)->msg.err = e /* catch functions that don't set err */ +#else +#define TCIP_APIMSG_SET_ERR(m, e) +#endif +#if LWIP_NETCONN_SEM_PER_THREAD +#define TCPIP_APIMSG_SET_SEM(m) ((m)->msg.op_completed_sem = LWIP_NETCONN_THREAD_SEM_GET()) +#else +#define TCPIP_APIMSG_SET_SEM(m) +#endif +#define TCPIP_APIMSG_NOERR(m,f) do { \ + TCIP_APIMSG_SET_ERR(m, ERR_VAL); \ + TCPIP_APIMSG_SET_SEM(m); \ + LOCK_TCPIP_CORE(); \ + f(&((m)->msg)); \ + UNLOCK_TCPIP_CORE(); \ +} while(0) +#define TCPIP_APIMSG(m,f,e) do { \ + TCPIP_APIMSG_NOERR(m,f); \ + (e) = (m)->msg.err; \ +} while(0) +#define TCPIP_APIMSG_ACK(m) NETCONN_SET_SAFE_ERR((m)->conn, (m)->err) +#else /* LWIP_TCPIP_CORE_LOCKING */ +#define TCPIP_APIMSG_NOERR(m,f) do { (m)->function = f; tcpip_apimsg(m); } while(0) +#define TCPIP_APIMSG(m,f,e) do { (m)->function = f; (e) = tcpip_apimsg(m); } while(0) +#define TCPIP_APIMSG_ACK(m) do { NETCONN_SET_SAFE_ERR((m)->conn, (m)->err); sys_sem_signal(LWIP_API_MSG_SEM(m)); } while(0) + +#ifdef LWIP_ESP8266 +#define TCPIP_APIMSG_ACK_SND(m) do { NETCONN_SET_SAFE_ERR((m)->conn, (m)->err); sys_sem_signal(LWIP_API_MSG_SND_SEM(m)); } while(0) +#endif + +#endif /* LWIP_TCPIP_CORE_LOCKING */ + +void lwip_netconn_do_newconn (void *m); +void lwip_netconn_do_delconn (void *m); +void lwip_netconn_do_bind (void *m); +void lwip_netconn_do_connect (void *m); +void lwip_netconn_do_disconnect (void *m); +void lwip_netconn_do_listen (void *m); +void lwip_netconn_do_send (void *m); +void lwip_netconn_do_recv (void *m); +void lwip_netconn_do_write (void *m); +void lwip_netconn_do_getaddr (void *m); +void lwip_netconn_do_close (void *m); +void lwip_netconn_do_shutdown (void *m); +#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) +void lwip_netconn_do_join_leave_group(void *m); +#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ + +#if LWIP_DNS +void lwip_netconn_do_gethostbyname(void *arg); +#endif /* LWIP_DNS */ + +struct netconn* netconn_alloc(enum netconn_type t, netconn_callback callback); +void netconn_free(struct netconn *conn); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETCONN || LWIP_SOCKET */ + +#endif /* LWIP_HDR_API_MSG_H */ diff --git a/tools/sdk/include/lwip/lwip/priv/memp_priv.h b/tools/sdk/include/lwip/lwip/priv/memp_priv.h new file mode 100755 index 00000000..34edb9d9 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/priv/memp_priv.h @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef LWIP_HDR_MEMP_PRIV_H +#define LWIP_HDR_MEMP_PRIV_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lwip/mem.h" + +#if MEMP_OVERFLOW_CHECK +/* if MEMP_OVERFLOW_CHECK is turned on, we reserve some bytes at the beginning + * and at the end of each element, initialize them as 0xcd and check + * them later. */ +/* If MEMP_OVERFLOW_CHECK is >= 2, on every call to memp_malloc or memp_free, + * every single element in each pool is checked! + * This is VERY SLOW but also very helpful. */ +/* MEMP_SANITY_REGION_BEFORE and MEMP_SANITY_REGION_AFTER can be overridden in + * lwipopts.h to change the amount reserved for checking. */ +#ifndef MEMP_SANITY_REGION_BEFORE +#define MEMP_SANITY_REGION_BEFORE 16 +#endif /* MEMP_SANITY_REGION_BEFORE*/ +#if MEMP_SANITY_REGION_BEFORE > 0 +#define MEMP_SANITY_REGION_BEFORE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_BEFORE) +#else +#define MEMP_SANITY_REGION_BEFORE_ALIGNED 0 +#endif /* MEMP_SANITY_REGION_BEFORE*/ +#ifndef MEMP_SANITY_REGION_AFTER +#define MEMP_SANITY_REGION_AFTER 16 +#endif /* MEMP_SANITY_REGION_AFTER*/ +#if MEMP_SANITY_REGION_AFTER > 0 +#define MEMP_SANITY_REGION_AFTER_ALIGNED LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_AFTER) +#else +#define MEMP_SANITY_REGION_AFTER_ALIGNED 0 +#endif /* MEMP_SANITY_REGION_AFTER*/ + +/* MEMP_SIZE: save space for struct memp and for sanity check */ +#define MEMP_SIZE (LWIP_MEM_ALIGN_SIZE(sizeof(struct memp)) + MEMP_SANITY_REGION_BEFORE_ALIGNED) +#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x) + MEMP_SANITY_REGION_AFTER_ALIGNED) + +#else /* MEMP_OVERFLOW_CHECK */ + +/* No sanity checks + * We don't need to preserve the struct memp while not allocated, so we + * can save a little space and set MEMP_SIZE to 0. + */ +#define MEMP_SIZE 0 +#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) + +#endif /* MEMP_OVERFLOW_CHECK */ + +struct memp { + struct memp *next; +#if MEMP_OVERFLOW_CHECK + const char *file; + int line; +#endif /* MEMP_OVERFLOW_CHECK */ +}; + +#if MEM_USE_POOLS +/* Use a helper type to get the start and end of the user "memory pools" for mem_malloc */ +typedef enum { + /* Get the first (via: + MEMP_POOL_HELPER_START = ((u8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)*/ + MEMP_POOL_HELPER_FIRST = ((u8_t) +#define LWIP_MEMPOOL(name,num,size,desc) +#define LWIP_MALLOC_MEMPOOL_START 1 +#define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0 +#define LWIP_MALLOC_MEMPOOL_END +#include "lwip/priv/memp_std.h" + ) , + /* Get the last (via: + MEMP_POOL_HELPER_END = ((u8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) */ + MEMP_POOL_HELPER_LAST = ((u8_t) +#define LWIP_MEMPOOL(name,num,size,desc) +#define LWIP_MALLOC_MEMPOOL_START +#define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size * +#define LWIP_MALLOC_MEMPOOL_END 1 +#include "lwip/priv/memp_std.h" + ) +} memp_pool_helper_t; + +/* The actual start and stop values are here (cast them over) + We use this helper type and these defines so we can avoid using const memp_t values */ +#define MEMP_POOL_FIRST ((memp_t) MEMP_POOL_HELPER_FIRST) +#define MEMP_POOL_LAST ((memp_t) MEMP_POOL_HELPER_LAST) +#endif /* MEM_USE_POOLS */ + +struct memp_desc { + /** Element size */ + u16_t size; + +#if !MEMP_MEM_MALLOC + /** Number of elements */ + u16_t num; + +#if defined(LWIP_DEBUG) || MEMP_OVERFLOW_CHECK + /** Textual description */ + const char *desc; +#endif /* LWIP_DEBUG || MEMP_OVERFLOW_CHECK */ + + /** Base */ + u8_t *base; + + /** First free element of each pool. Elements form a linked list. */ + struct memp **tab; +#endif /* MEMP_MEM_MALLOC */ +}; + +#ifdef LWIP_DEBUG +#define DECLARE_LWIP_MEMPOOL_DESC(desc) (desc), +#else +#define DECLARE_LWIP_MEMPOOL_DESC(desc) +#endif + +void memp_init_pool(const struct memp_desc *desc); + +#if MEMP_OVERFLOW_CHECK +void *memp_malloc_pool_fn(const struct memp_desc* desc, const char* file, const int line); +#define memp_malloc_pool(d) memp_malloc_pool_fn((d), __FILE__, __LINE__) +#else +void *memp_malloc_pool(const struct memp_desc *desc); +#endif +void memp_free_pool(const struct memp_desc* desc, void *mem); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_MEMP_PRIV_H */ diff --git a/tools/sdk/include/lwip/lwip/priv/memp_std.h b/tools/sdk/include/lwip/lwip/priv/memp_std.h new file mode 100755 index 00000000..4def116d --- /dev/null +++ b/tools/sdk/include/lwip/lwip/priv/memp_std.h @@ -0,0 +1,151 @@ +/* + * SETUP: Make sure we define everything we will need. + * + * We have create three types of pools: + * 1) MEMPOOL - standard pools + * 2) MALLOC_MEMPOOL - to be used by mem_malloc in mem.c + * 3) PBUF_MEMPOOL - a mempool of pbuf's, so include space for the pbuf struct + * + * If the include'r doesn't require any special treatment of each of the types + * above, then will declare #2 & #3 to be just standard mempools. + */ +#ifndef LWIP_MALLOC_MEMPOOL +/* This treats "malloc pools" just like any other pool. + The pools are a little bigger to provide 'size' as the amount of user data. */ +#define LWIP_MALLOC_MEMPOOL(num, size) LWIP_MEMPOOL(POOL_##size, num, (size + LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper))), "MALLOC_"#size) +#define LWIP_MALLOC_MEMPOOL_START +#define LWIP_MALLOC_MEMPOOL_END +#endif /* LWIP_MALLOC_MEMPOOL */ + +#ifndef LWIP_PBUF_MEMPOOL +/* This treats "pbuf pools" just like any other pool. + * Allocates buffers for a pbuf struct AND a payload size */ +#define LWIP_PBUF_MEMPOOL(name, num, payload, desc) LWIP_MEMPOOL(name, num, (MEMP_ALIGN_SIZE(sizeof(struct pbuf)) + MEMP_ALIGN_SIZE(payload)), desc) +#endif /* LWIP_PBUF_MEMPOOL */ + + +/* + * A list of internal pools used by LWIP. + * + * LWIP_MEMPOOL(pool_name, number_elements, element_size, pool_description) + * creates a pool name MEMP_pool_name. description is used in stats.c + */ +#if LWIP_RAW +LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB, sizeof(struct raw_pcb), "RAW_PCB") +#endif /* LWIP_RAW */ + +#if LWIP_UDP +LWIP_MEMPOOL(UDP_PCB, MEMP_NUM_UDP_PCB, sizeof(struct udp_pcb), "UDP_PCB") +#endif /* LWIP_UDP */ + +#if LWIP_TCP +LWIP_MEMPOOL(TCP_PCB, MEMP_NUM_TCP_PCB, sizeof(struct tcp_pcb), "TCP_PCB") +LWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN, sizeof(struct tcp_pcb_listen), "TCP_PCB_LISTEN") +LWIP_MEMPOOL(TCP_SEG, MEMP_NUM_TCP_SEG, sizeof(struct tcp_seg), "TCP_SEG") +#endif /* LWIP_TCP */ + +#if LWIP_IPV4 && IP_REASSEMBLY +LWIP_MEMPOOL(REASSDATA, MEMP_NUM_REASSDATA, sizeof(struct ip_reassdata), "REASSDATA") +#endif /* LWIP_IPV4 && IP_REASSEMBLY */ +#if (IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF) || (LWIP_IPV6 && LWIP_IPV6_FRAG) +LWIP_MEMPOOL(FRAG_PBUF, MEMP_NUM_FRAG_PBUF, sizeof(struct pbuf_custom_ref),"FRAG_PBUF") +#endif /* IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF */ + +#if LWIP_NETCONN || LWIP_SOCKET +LWIP_MEMPOOL(NETBUF, MEMP_NUM_NETBUF, sizeof(struct netbuf), "NETBUF") +LWIP_MEMPOOL(NETCONN, MEMP_NUM_NETCONN, sizeof(struct netconn), "NETCONN") +#endif /* LWIP_NETCONN || LWIP_SOCKET */ + +#if NO_SYS==0 +LWIP_MEMPOOL(TCPIP_MSG_API, MEMP_NUM_TCPIP_MSG_API, sizeof(struct tcpip_msg), "TCPIP_MSG_API") +#if LWIP_MPU_COMPATIBLE +LWIP_MEMPOOL(API_MSG, MEMP_NUM_API_MSG, sizeof(struct api_msg), "API_MSG") +#if LWIP_DNS +LWIP_MEMPOOL(DNS_API_MSG, MEMP_NUM_DNS_API_MSG, sizeof(struct dns_api_msg), "DNS_API_MSG") +#endif +#if LWIP_SOCKET && !LWIP_TCPIP_CORE_LOCKING +LWIP_MEMPOOL(SOCKET_SETGETSOCKOPT_DATA, MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA, sizeof(struct lwip_setgetsockopt_data), "SOCKET_SETGETSOCKOPT_DATA") +#endif +#if LWIP_NETIF_API +LWIP_MEMPOOL(NETIFAPI_MSG, MEMP_NUM_NETIFAPI_MSG, sizeof(struct netifapi_msg), "NETIFAPI_MSG") +#endif +#endif /* LWIP_MPU_COMPATIBLE */ +#if !LWIP_TCPIP_CORE_LOCKING_INPUT +LWIP_MEMPOOL(TCPIP_MSG_INPKT,MEMP_NUM_TCPIP_MSG_INPKT, sizeof(struct tcpip_msg), "TCPIP_MSG_INPKT") +#endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */ +#endif /* NO_SYS==0 */ + +#if LWIP_IPV4 && LWIP_ARP && ARP_QUEUEING +LWIP_MEMPOOL(ARP_QUEUE, MEMP_NUM_ARP_QUEUE, sizeof(struct etharp_q_entry), "ARP_QUEUE") +#endif /* LWIP_IPV4 && LWIP_ARP && ARP_QUEUEING */ + +#if LWIP_IGMP +LWIP_MEMPOOL(IGMP_GROUP, MEMP_NUM_IGMP_GROUP, sizeof(struct igmp_group), "IGMP_GROUP") +#endif /* LWIP_IGMP */ + +#if (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS)) /* LWIP_TIMERS */ +LWIP_MEMPOOL(SYS_TIMEOUT, MEMP_NUM_SYS_TIMEOUT, sizeof(struct sys_timeo), "SYS_TIMEOUT") +#endif /* LWIP_TIMERS */ + +#if LWIP_DNS && LWIP_SOCKET +LWIP_MEMPOOL(NETDB, MEMP_NUM_NETDB, NETDB_ELEM_SIZE, "NETDB") +#endif /* LWIP_DNS && LWIP_SOCKET */ +#if LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC +LWIP_MEMPOOL(LOCALHOSTLIST, MEMP_NUM_LOCALHOSTLIST, LOCALHOSTLIST_ELEM_SIZE, "LOCALHOSTLIST") +#endif /* LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +#if PPP_SUPPORT +LWIP_MEMPOOL(PPP_PCB, MEMP_NUM_PPP_PCB, sizeof(ppp_pcb), "PPP_PCB") +#if PPPOS_SUPPORT +LWIP_MEMPOOL(PPPOS_PCB, MEMP_NUM_PPPOS_INTERFACES, sizeof(pppos_pcb), "PPPOS_PCB") +#endif /* PPPOS_SUPPORT */ +#if PPPOE_SUPPORT +LWIP_MEMPOOL(PPPOE_IF, MEMP_NUM_PPPOE_INTERFACES, sizeof(struct pppoe_softc), "PPPOE_IF") +#endif /* PPPOE_SUPPORT */ +#if PPPOL2TP_SUPPORT +LWIP_MEMPOOL(PPPOL2TP_PCB, MEMP_NUM_PPPOL2TP_INTERFACES, sizeof(pppol2tp_pcb), "PPPOL2TP_PCB") +#endif /* PPPOL2TP_SUPPORT */ +#endif /* PPP_SUPPORT */ + +#if LWIP_IPV6 && LWIP_ND6_QUEUEING +LWIP_MEMPOOL(ND6_QUEUE, MEMP_NUM_ND6_QUEUE, sizeof(struct nd6_q_entry), "ND6_QUEUE") +#endif /* LWIP_IPV6 && LWIP_ND6_QUEUEING */ + +#if LWIP_IPV6 && LWIP_IPV6_REASS +LWIP_MEMPOOL(IP6_REASSDATA, MEMP_NUM_REASSDATA, sizeof(struct ip6_reassdata), "IP6_REASSDATA") +#endif /* LWIP_IPV6 && LWIP_IPV6_REASS */ + +#if LWIP_IPV6 && LWIP_IPV6_MLD +LWIP_MEMPOOL(MLD6_GROUP, MEMP_NUM_MLD6_GROUP, sizeof(struct mld_group), "MLD6_GROUP") +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + + +/* + * A list of pools of pbuf's used by LWIP. + * + * LWIP_PBUF_MEMPOOL(pool_name, number_elements, pbuf_payload_size, pool_description) + * creates a pool name MEMP_pool_name. description is used in stats.c + * This allocates enough space for the pbuf struct and a payload. + * (Example: pbuf_payload_size=0 allocates only size for the struct) + */ +LWIP_PBUF_MEMPOOL(PBUF, MEMP_NUM_PBUF, 0, "PBUF_REF/ROM") +LWIP_PBUF_MEMPOOL(PBUF_POOL, PBUF_POOL_SIZE, PBUF_POOL_BUFSIZE, "PBUF_POOL") + + +/* + * Allow for user-defined pools; this must be explicitly set in lwipopts.h + * since the default is to NOT look for lwippools.h + */ +#if MEMP_USE_CUSTOM_POOLS +#include "lwippools.h" +#endif /* MEMP_USE_CUSTOM_POOLS */ + +/* + * REQUIRED CLEANUP: Clear up so we don't get "multiply defined" error later + * (#undef is ignored for something that is not defined) + */ +#undef LWIP_MEMPOOL +#undef LWIP_MALLOC_MEMPOOL +#undef LWIP_MALLOC_MEMPOOL_START +#undef LWIP_MALLOC_MEMPOOL_END +#undef LWIP_PBUF_MEMPOOL diff --git a/tools/sdk/include/lwip/lwip/priv/tcp_priv.h b/tools/sdk/include/lwip/lwip/priv/tcp_priv.h new file mode 100755 index 00000000..b5261b44 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/priv/tcp_priv.h @@ -0,0 +1,545 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_TCP_IMPL_H +#define LWIP_HDR_TCP_IMPL_H + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/tcp.h" +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/ip.h" +#include "lwip/icmp.h" +#include "lwip/err.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Functions for interfacing with TCP: */ + +/* Lower layer interface to TCP: */ +void tcp_init (void); /* Initialize this module. */ +void tcp_tmr (void); /* Must be called every + TCP_TMR_INTERVAL + ms. (Typically 250 ms). */ +/* It is also possible to call these two functions at the right + intervals (instead of calling tcp_tmr()). */ +void tcp_slowtmr (void); +void tcp_fasttmr (void); + +/* Call this from a netif driver (watch out for threading issues!) that has + returned a memory error on transmit and now has free buffers to send more. + This iterates all active pcbs that had an error and tries to call + tcp_output, so use this with care as it might slow down the system. */ +void tcp_txnow (void); + +/* Only used by IP to pass a TCP segment to TCP: */ +void tcp_input (struct pbuf *p, struct netif *inp); +/* Used within the TCP code only: */ +struct tcp_pcb * tcp_alloc (u8_t prio); +void tcp_abandon (struct tcp_pcb *pcb, int reset); +err_t tcp_send_empty_ack(struct tcp_pcb *pcb); +void tcp_rexmit (struct tcp_pcb *pcb); +void tcp_rexmit_rto (struct tcp_pcb *pcb); +void tcp_rexmit_fast (struct tcp_pcb *pcb); +u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb); +err_t tcp_process_refused_data(struct tcp_pcb *pcb); + +/** + * This is the Nagle algorithm: try to combine user data to send as few TCP + * segments as possible. Only send if + * - no previously transmitted data on the connection remains unacknowledged or + * - the TF_NODELAY flag is set (nagle algorithm turned off for this pcb) or + * - the only unsent segment is at least pcb->mss bytes long (or there is more + * than one unsent segment - with lwIP, this can happen although unsent->len < mss) + * - or if we are in fast-retransmit (TF_INFR) + */ +#define tcp_do_output_nagle(tpcb) ((((tpcb)->unacked == NULL) || \ + ((tpcb)->flags & (TF_NODELAY | TF_INFR)) || \ + (((tpcb)->unsent != NULL) && (((tpcb)->unsent->next != NULL) || \ + ((tpcb)->unsent->len >= (tpcb)->mss))) || \ + ((tcp_sndbuf(tpcb) == 0) || (tcp_sndqueuelen(tpcb) >= TCP_SND_QUEUELEN)) \ + ) ? 1 : 0) +#define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ERR_OK) + + +#define TCP_SEQ_LT(a,b) ((s32_t)((u32_t)(a) - (u32_t)(b)) < 0) +#define TCP_SEQ_LEQ(a,b) ((s32_t)((u32_t)(a) - (u32_t)(b)) <= 0) +#define TCP_SEQ_GT(a,b) ((s32_t)((u32_t)(a) - (u32_t)(b)) > 0) +#define TCP_SEQ_GEQ(a,b) ((s32_t)((u32_t)(a) - (u32_t)(b)) >= 0) +/* is b<=a<=c? */ +#if 0 /* see bug #10548 */ +#define TCP_SEQ_BETWEEN(a,b,c) ((c)-(b) >= (a)-(b)) +#endif +#define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c)) +#define TCP_FIN 0x01U +#define TCP_SYN 0x02U +#define TCP_RST 0x04U +#define TCP_PSH 0x08U +#define TCP_ACK 0x10U +#define TCP_URG 0x20U +#define TCP_ECE 0x40U +#define TCP_CWR 0x80U + +#define TCP_FLAGS 0x3fU + +/* Length of the TCP header, excluding options. */ +#define TCP_HLEN 20 + +#ifndef TCP_TMR_INTERVAL +#define TCP_TMR_INTERVAL 250 /* The TCP timer interval in milliseconds. */ +#endif /* TCP_TMR_INTERVAL */ + +#ifndef TCP_FAST_INTERVAL +#define TCP_FAST_INTERVAL TCP_TMR_INTERVAL /* the fine grained timeout in milliseconds */ +#endif /* TCP_FAST_INTERVAL */ + +#ifndef TCP_SLOW_INTERVAL +#define TCP_SLOW_INTERVAL (2*TCP_TMR_INTERVAL) /* the coarse grained timeout in milliseconds */ +#endif /* TCP_SLOW_INTERVAL */ + +#define TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */ +#define TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */ + +#define TCP_OOSEQ_TIMEOUT 6U /* x RTO */ + +#ifndef TCP_MSL +#define TCP_MSL 60000UL /* The maximum segment lifetime in milliseconds */ +#endif + +/* Keepalive values, compliant with RFC 1122. Don't change this unless you know what you're doing */ +#ifndef TCP_KEEPIDLE_DEFAULT +#define TCP_KEEPIDLE_DEFAULT 7200000UL /* Default KEEPALIVE timer in milliseconds */ +#endif + +#ifndef TCP_KEEPINTVL_DEFAULT +#define TCP_KEEPINTVL_DEFAULT 75000UL /* Default Time between KEEPALIVE probes in milliseconds */ +#endif + +#ifndef TCP_KEEPCNT_DEFAULT +#define TCP_KEEPCNT_DEFAULT 9U /* Default Counter for KEEPALIVE probes */ +#endif + +#define TCP_MAXIDLE TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT /* Maximum KEEPALIVE probe time */ + +/* Fields are (of course) in network byte order. + * Some fields are converted to host byte order in tcp_input(). + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct tcp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dest); + PACK_STRUCT_FIELD(u32_t seqno); + PACK_STRUCT_FIELD(u32_t ackno); + PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags); + PACK_STRUCT_FIELD(u16_t wnd); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t urgp); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12) +#define TCPH_FLAGS(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS) + +#define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | TCPH_FLAGS(phdr)) +#define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = (((phdr)->_hdrlen_rsvd_flags & PP_HTONS(~TCP_FLAGS)) | htons(flags)) +#define TCPH_HDRLEN_FLAGS_SET(phdr, len, flags) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | (flags)) + +#define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags | htons(flags)) +#define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags & ~htons(flags)) + +#define TCP_TCPLEN(seg) ((seg)->len + (((TCPH_FLAGS((seg)->tcphdr) & (TCP_FIN | TCP_SYN)) != 0) ? 1U : 0U)) + +/** Flags used on input processing, not on pcb->flags +*/ +#define TF_RESET (u8_t)0x08U /* Connection was reset. */ +#define TF_CLOSED (u8_t)0x10U /* Connection was successfully closed. */ +#define TF_GOT_FIN (u8_t)0x20U /* Connection was closed by the remote end. */ + + +#if LWIP_EVENT_API + +#define TCP_EVENT_ACCEPT(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_ACCEPT, NULL, 0, err) +#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_SENT, NULL, space, ERR_OK) +#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_RECV, (p), 0, (err)) +#define TCP_EVENT_CLOSED(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_RECV, NULL, 0, ERR_OK) +#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_CONNECTED, NULL, 0, (err)) +#define TCP_EVENT_POLL(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_POLL, NULL, 0, ERR_OK) +#define TCP_EVENT_ERR(errf,arg,err) lwip_tcp_event((arg), NULL, \ + LWIP_EVENT_ERR, NULL, 0, (err)) + +#else /* LWIP_EVENT_API */ + +#define TCP_EVENT_ACCEPT(pcb,err,ret) \ + do { \ + if((pcb)->accept != NULL) \ + (ret) = (pcb)->accept((pcb)->callback_arg,(pcb),(err)); \ + else (ret) = ERR_ARG; \ + } while (0) + +#define TCP_EVENT_SENT(pcb,space,ret) \ + do { \ + if((pcb)->sent != NULL) \ + (ret) = (pcb)->sent((pcb)->callback_arg,(pcb),(space)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_RECV(pcb,p,err,ret) \ + do { \ + if((pcb)->recv != NULL) { \ + (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err));\ + } else { \ + (ret) = tcp_recv_null(NULL, (pcb), (p), (err)); \ + } \ + } while (0) + +#define TCP_EVENT_CLOSED(pcb,ret) \ + do { \ + if(((pcb)->recv != NULL)) { \ + (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),NULL,ERR_OK);\ + } else { \ + (ret) = ERR_OK; \ + } \ + } while (0) + +#define TCP_EVENT_CONNECTED(pcb,err,ret) \ + do { \ + if((pcb)->connected != NULL) \ + (ret) = (pcb)->connected((pcb)->callback_arg,(pcb),(err)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_POLL(pcb,ret) \ + do { \ + if((pcb)->poll != NULL) \ + (ret) = (pcb)->poll((pcb)->callback_arg,(pcb)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_ERR(errf,arg,err) \ + do { \ + if((errf) != NULL) \ + (errf)((arg),(err)); \ + } while (0) + +#endif /* LWIP_EVENT_API */ + +/** Enabled extra-check for TCP_OVERSIZE if LWIP_DEBUG is enabled */ +#if TCP_OVERSIZE && defined(LWIP_DEBUG) +#define TCP_OVERSIZE_DBGCHECK 1 +#else +#define TCP_OVERSIZE_DBGCHECK 0 +#endif + +/** Don't generate checksum on copy if CHECKSUM_GEN_TCP is disabled */ +#define TCP_CHECKSUM_ON_COPY (LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_TCP) + +/* This structure represents a TCP segment on the unsent, unacked and ooseq queues */ +struct tcp_seg { + struct tcp_seg *next; /* used when putting segments on a queue */ + struct pbuf *p; /* buffer containing data + TCP header */ + u16_t len; /* the TCP length of this segment */ +#if TCP_OVERSIZE_DBGCHECK + u16_t oversize_left; /* Extra bytes available at the end of the last + pbuf in unsent (used for asserting vs. + tcp_pcb.unsent_oversized only) */ +#endif /* TCP_OVERSIZE_DBGCHECK */ +#if TCP_CHECKSUM_ON_COPY + u16_t chksum; + u8_t chksum_swapped; +#endif /* TCP_CHECKSUM_ON_COPY */ + u8_t flags; +#define TF_SEG_OPTS_MSS (u8_t)0x01U /* Include MSS option. */ +#define TF_SEG_OPTS_TS (u8_t)0x02U /* Include timestamp option. */ +#define TF_SEG_DATA_CHECKSUMMED (u8_t)0x04U /* ALL data (not the header) is + checksummed into 'chksum' */ +#define TF_SEG_OPTS_WND_SCALE (u8_t)0x08U /* Include WND SCALE option */ + struct tcp_hdr *tcphdr; /* the TCP header */ +}; + +#define LWIP_TCP_OPT_EOL 0 +#define LWIP_TCP_OPT_NOP 1 +#define LWIP_TCP_OPT_MSS 2 +#define LWIP_TCP_OPT_WS 3 +#define LWIP_TCP_OPT_TS 8 + +#define LWIP_TCP_OPT_LEN_MSS 4 +#if LWIP_TCP_TIMESTAMPS +#define LWIP_TCP_OPT_LEN_TS 10 +#define LWIP_TCP_OPT_LEN_TS_OUT 12 /* aligned for output (includes NOP padding) */ +#else +#define LWIP_TCP_OPT_LEN_TS_OUT 0 +#endif +#if LWIP_WND_SCALE +#define LWIP_TCP_OPT_LEN_WS 3 +#define LWIP_TCP_OPT_LEN_WS_OUT 4 /* aligned for output (includes NOP padding) */ +#else +#define LWIP_TCP_OPT_LEN_WS_OUT 0 +#endif + +#define LWIP_TCP_OPT_LENGTH(flags) \ + (flags & TF_SEG_OPTS_MSS ? LWIP_TCP_OPT_LEN_MSS : 0) + \ + (flags & TF_SEG_OPTS_TS ? LWIP_TCP_OPT_LEN_TS_OUT : 0) + \ + (flags & TF_SEG_OPTS_WND_SCALE ? LWIP_TCP_OPT_LEN_WS_OUT : 0) + +/** This returns a TCP header option for MSS in an u32_t */ +#define TCP_BUILD_MSS_OPTION(mss) htonl(0x02040000 | ((mss) & 0xFFFF)) + +#if LWIP_WND_SCALE +#define TCPWNDSIZE_F U32_F +#define TCPWND_MAX 0xFFFFFFFFU +#define TCPWND_CHECK16(x) LWIP_ASSERT("window size > 0xFFFF", (x) <= 0xFFFF) +#define TCPWND_MIN16(x) ((u16_t)LWIP_MIN((x), 0xFFFF)) +#else /* LWIP_WND_SCALE */ +#define TCPWNDSIZE_F U16_F +#define TCPWND_MAX 0xFFFFU +#define TCPWND_CHECK16(x) +#define TCPWND_MIN16(x) x +#endif /* LWIP_WND_SCALE */ + +/* Global variables: */ +extern struct tcp_pcb *tcp_input_pcb; +extern u32_t tcp_ticks; +extern u8_t tcp_active_pcbs_changed; + +/* The TCP PCB lists. */ +union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */ + struct tcp_pcb_listen *listen_pcbs; + struct tcp_pcb *pcbs; +}; +extern struct tcp_pcb *tcp_bound_pcbs; +extern union tcp_listen_pcbs_t tcp_listen_pcbs; +extern struct tcp_pcb *tcp_active_pcbs; /* List of all TCP PCBs that are in a + state in which they accept or send + data. */ +extern struct tcp_pcb *tcp_tw_pcbs; /* List of all TCP PCBs in TIME-WAIT. */ + +#define NUM_TCP_PCB_LISTS_NO_TIME_WAIT 3 +#define NUM_TCP_PCB_LISTS 4 +extern struct tcp_pcb ** const tcp_pcb_lists[NUM_TCP_PCB_LISTS]; + +/* Axioms about the above lists: + 1) Every TCP PCB that is not CLOSED is in one of the lists. + 2) A PCB is only in one of the lists. + 3) All PCBs in the tcp_listen_pcbs list is in LISTEN state. + 4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state. +*/ +/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB + with a PCB list or removes a PCB from a list, respectively. */ +#ifndef TCP_DEBUG_PCB_LISTS +#define TCP_DEBUG_PCB_LISTS 0 +#endif +#if TCP_DEBUG_PCB_LISTS +#define TCP_REG(pcbs, npcb) do {\ + struct tcp_pcb *tcp_tmp_pcb; \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %d\n", (npcb), (npcb)->local_port)); \ + for (tcp_tmp_pcb = *(pcbs); \ + tcp_tmp_pcb != NULL; \ + tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + LWIP_ASSERT("TCP_REG: already registered\n", tcp_tmp_pcb != (npcb)); \ + } \ + LWIP_ASSERT("TCP_REG: pcb->state != CLOSED", ((pcbs) == &tcp_bound_pcbs) || ((npcb)->state != CLOSED)); \ + (npcb)->next = *(pcbs); \ + LWIP_ASSERT("TCP_REG: npcb->next != npcb", (npcb)->next != (npcb)); \ + *(pcbs) = (npcb); \ + LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ + tcp_timer_needed(); \ + } while(0) +#define TCP_RMV(pcbs, npcb) do { \ + struct tcp_pcb *tcp_tmp_pcb; \ + LWIP_ASSERT("TCP_RMV: pcbs != NULL", *(pcbs) != NULL); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removing %p from %p\n", (npcb), *(pcbs))); \ + if(*(pcbs) == (npcb)) { \ + *(pcbs) = (*pcbs)->next; \ + } else for (tcp_tmp_pcb = *(pcbs); tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + if(tcp_tmp_pcb->next == (npcb)) { \ + tcp_tmp_pcb->next = (npcb)->next; \ + break; \ + } \ + } \ + (npcb)->next = NULL; \ + LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removed %p from %p\n", (npcb), *(pcbs))); \ + } while(0) + +#else /* LWIP_DEBUG */ + +#define TCP_REG(pcbs, npcb) \ + do { \ + (npcb)->next = *pcbs; \ + *(pcbs) = (npcb); \ + tcp_timer_needed(); \ + } while (0) + +#define TCP_RMV(pcbs, npcb) \ + do { \ + if(*(pcbs) == (npcb)) { \ + (*(pcbs)) = (*pcbs)->next; \ + } \ + else { \ + struct tcp_pcb *tcp_tmp_pcb; \ + for (tcp_tmp_pcb = *pcbs; \ + tcp_tmp_pcb != NULL; \ + tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + if(tcp_tmp_pcb->next == (npcb)) { \ + tcp_tmp_pcb->next = (npcb)->next; \ + break; \ + } \ + } \ + } \ + (npcb)->next = NULL; \ + } while(0) + +#endif /* LWIP_DEBUG */ + +#define TCP_REG_ACTIVE(npcb) \ + do { \ + TCP_REG(&tcp_active_pcbs, npcb); \ + tcp_active_pcbs_changed = 1; \ + } while (0) + +#define TCP_RMV_ACTIVE(npcb) \ + do { \ + TCP_RMV(&tcp_active_pcbs, npcb); \ + tcp_active_pcbs_changed = 1; \ + } while (0) + +#define TCP_PCB_REMOVE_ACTIVE(pcb) \ + do { \ + tcp_pcb_remove(&tcp_active_pcbs, pcb); \ + tcp_active_pcbs_changed = 1; \ + } while (0) + + +/* Internal functions: */ +struct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb); +void tcp_pcb_purge(struct tcp_pcb *pcb); +void tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb); + +void tcp_segs_free(struct tcp_seg *seg); +void tcp_seg_free(struct tcp_seg *seg); +struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg); + +#define tcp_ack(pcb) \ + do { \ + if((pcb)->flags & TF_ACK_DELAY) { \ + (pcb)->flags &= ~TF_ACK_DELAY; \ + (pcb)->flags |= TF_ACK_NOW; \ + } \ + else { \ + (pcb)->flags |= TF_ACK_DELAY; \ + } \ + } while (0) + +#define tcp_ack_now(pcb) \ + do { \ + (pcb)->flags |= TF_ACK_NOW; \ + } while (0) + +err_t tcp_send_fin(struct tcp_pcb *pcb); +err_t tcp_enqueue_flags(struct tcp_pcb *pcb, u8_t flags); + +void tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg); + +void tcp_rst(u32_t seqno, u32_t ackno, + const ip_addr_t *local_ip, const ip_addr_t *remote_ip, + u16_t local_port, u16_t remote_port); + +u32_t tcp_next_iss(void); + +err_t tcp_keepalive(struct tcp_pcb *pcb); +err_t tcp_zero_window_probe(struct tcp_pcb *pcb); +void tcp_trigger_input_pcb_close(void); + +#if TCP_CALCULATE_EFF_SEND_MSS +u16_t tcp_eff_send_mss_impl(u16_t sendmss, const ip_addr_t *dest +#if LWIP_IPV6 || LWIP_IPV4_SRC_ROUTING + , const ip_addr_t *src +#endif /* LWIP_IPV6 || LWIP_IPV4_SRC_ROUTING */ + ); +#if LWIP_IPV6 || LWIP_IPV4_SRC_ROUTING +#define tcp_eff_send_mss(sendmss, src, dest) tcp_eff_send_mss_impl(sendmss, dest, src) +#else /* LWIP_IPV6 || LWIP_IPV4_SRC_ROUTING */ +#define tcp_eff_send_mss(sendmss, src, dest) tcp_eff_send_mss_impl(sendmss, dest) +#endif /* LWIP_IPV6 || LWIP_IPV4_SRC_ROUTING */ +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + +#if LWIP_CALLBACK_API +err_t tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); +#endif /* LWIP_CALLBACK_API */ + +#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG +void tcp_debug_print(struct tcp_hdr *tcphdr); +void tcp_debug_print_flags(u8_t flags); +void tcp_debug_print_state(enum tcp_state s); +void tcp_debug_print_pcbs(void); +s16_t tcp_pcbs_sane(void); +#else +# define tcp_debug_print(tcphdr) +# define tcp_debug_print_flags(flags) +# define tcp_debug_print_state(s) +# define tcp_debug_print_pcbs() +# define tcp_pcbs_sane() 1 +#endif /* TCP_DEBUG */ + +/** External function (implemented in timers.c), called when TCP detects + * that a timer is needed (i.e. active- or time-wait-pcb found). */ +void tcp_timer_needed(void); + +#if LWIP_IPV4 +void tcp_netif_ipv4_addr_changed(const ip4_addr_t* old_addr, const ip4_addr_t* new_addr); +#endif /* LWIP_IPV4 */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_TCP */ + +#endif /* LWIP_HDR_TCP_H */ diff --git a/tools/sdk/include/lwip/lwip/priv/tcpip_priv.h b/tools/sdk/include/lwip/lwip/priv/tcpip_priv.h new file mode 100755 index 00000000..cc1c54eb --- /dev/null +++ b/tools/sdk/include/lwip/lwip/priv/tcpip_priv.h @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_TCPIP_PRIV_H +#define LWIP_HDR_TCPIP_PRIV_H + +#include "lwip/opt.h" + +#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/tcpip.h" +#include "lwip/sys.h" +#include "lwip/timers.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct pbuf; +struct netif; + +/** Define this to something that triggers a watchdog. This is called from + * tcpip_thread after processing a message. */ +#ifndef LWIP_TCPIP_THREAD_ALIVE +#define LWIP_TCPIP_THREAD_ALIVE() +#endif + +#if LWIP_TCPIP_CORE_LOCKING +/** The global semaphore to lock the stack. */ +extern sys_mutex_t lock_tcpip_core; +#define LOCK_TCPIP_CORE() sys_mutex_lock(&lock_tcpip_core) +#define UNLOCK_TCPIP_CORE() sys_mutex_unlock(&lock_tcpip_core) +#else /* LWIP_TCPIP_CORE_LOCKING */ +#define LOCK_TCPIP_CORE() +#define UNLOCK_TCPIP_CORE() +#endif /* LWIP_TCPIP_CORE_LOCKING */ + +#if LWIP_MPU_COMPATIBLE +#define API_VAR_REF(name) (*(name)) +#define API_VAR_DECLARE(type, name) type * name +#define API_VAR_ALLOC(type, pool, name) do { \ + name = (type *)memp_malloc(pool); \ + if (name == NULL) { \ + return ERR_MEM; \ + } \ + } while(0) +#define API_VAR_ALLOC_DONTFAIL(type, pool, name) do { \ + name = (type *)memp_malloc(pool); \ + LWIP_ASSERT("pool empty", name != NULL); \ + } while(0) +#define API_VAR_FREE(pool, name) memp_free(pool, name) +#define API_EXPR_REF(expr) &(expr) +#if LWIP_NETCONN_SEM_PER_THREAD +#define API_EXPR_REF_SEM(expr) (expr) +#else +#define API_EXPR_REF_SEM(expr) API_EXPR_REF(expr) +#endif +#define API_EXPR_DEREF(expr) expr +#else /* LWIP_MPU_COMPATIBLE */ +#define API_VAR_REF(name) name +#define API_VAR_DECLARE(type, name) type name +#define API_VAR_ALLOC(type, pool, name) +#define API_VAR_ALLOC_DONTFAIL(type, pool, name) +#define API_VAR_FREE(pool, name) +#define API_EXPR_REF(expr) expr +#define API_EXPR_REF_SEM(expr) API_EXPR_REF(expr) +#define API_EXPR_DEREF(expr) *(expr) +#endif /* LWIP_MPU_COMPATIBLE */ + +#if !LWIP_TCPIP_CORE_LOCKING +err_t tcpip_send_api_msg(tcpip_callback_fn fn, void *apimsg, sys_sem_t* sem); +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + +struct tcpip_api_call; +typedef err_t (*tcpip_api_call_fn)(struct tcpip_api_call* call); +struct tcpip_api_call +{ + tcpip_api_call_fn function; +#if !LWIP_TCPIP_CORE_LOCKING +#if LWIP_NETCONN_SEM_PER_THREAD + sys_sem_t *sem; +#else /* LWIP_NETCONN_SEM_PER_THREAD */ + sys_sem_t sem; +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + err_t err; +#endif /* !LWIP_TCPIP_CORE_LOCKING */ +}; +err_t tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call *call); + +enum tcpip_msg_type { + TCPIP_MSG_API, + TCPIP_MSG_API_CALL, + TCPIP_MSG_INPKT, +#if LWIP_TCPIP_TIMEOUT + TCPIP_MSG_TIMEOUT, + TCPIP_MSG_UNTIMEOUT, +#endif /* LWIP_TCPIP_TIMEOUT */ + TCPIP_MSG_CALLBACK, + TCPIP_MSG_CALLBACK_STATIC +}; + +struct tcpip_msg { + enum tcpip_msg_type type; + union { + struct { + tcpip_callback_fn function; + void* msg; + } api; + struct tcpip_api_call *api_call; + struct { + struct pbuf *p; + struct netif *netif; + netif_input_fn input_fn; + } inp; + struct { + tcpip_callback_fn function; + void *ctx; + } cb; +#if LWIP_TCPIP_TIMEOUT + struct { + u32_t msecs; + sys_timeout_handler h; + void *arg; + } tmo; +#endif /* LWIP_TCPIP_TIMEOUT */ + } msg; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* !NO_SYS */ + +#endif /* LWIP_HDR_TCPIP_PRIV_H */ diff --git a/tools/sdk/include/lwip/lwip/raw.h b/tools/sdk/include/lwip/lwip/raw.h new file mode 100755 index 00000000..474fdc15 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/raw.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_RAW_H +#define LWIP_HDR_RAW_H + +#include "lwip/opt.h" + +#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/def.h" +#include "lwip/ip.h" +#include "lwip/ip_addr.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct raw_pcb; + +/** Function prototype for raw pcb receive callback functions. + * @param arg user supplied argument (raw_pcb.recv_arg) + * @param pcb the raw_pcb which received data + * @param p the packet buffer that was received + * @param addr the remote IP address from which the packet was received + * @return 1 if the packet was 'eaten' (aka. deleted), + * 0 if the packet lives on + * If returning 1, the callback is responsible for freeing the pbuf + * if it's not used any more. + */ +typedef u8_t (*raw_recv_fn)(void *arg, struct raw_pcb *pcb, struct pbuf *p, + const ip_addr_t *addr); + +struct raw_pcb { + /* Common members of all PCB types */ + IP_PCB; + + struct raw_pcb *next; + + u8_t protocol; + + /** receive callback function */ + raw_recv_fn recv; + /* user-supplied argument for the recv callback */ + void *recv_arg; +#if LWIP_IPV6 + /* fields for handling checksum computations as per RFC3542. */ + u16_t chksum_offset; + u8_t chksum_reqd; +#endif +}; + +/* The following functions is the application layer interface to the + RAW code. */ +struct raw_pcb * raw_new (u8_t proto); +struct raw_pcb * raw_new_ip_type(u8_t type, u8_t proto); +void raw_remove (struct raw_pcb *pcb); +err_t raw_bind (struct raw_pcb *pcb, const ip_addr_t *ipaddr); +err_t raw_connect (struct raw_pcb *pcb, const ip_addr_t *ipaddr); + +err_t raw_sendto (struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *ipaddr); +err_t raw_send (struct raw_pcb *pcb, struct pbuf *p); + +void raw_recv (struct raw_pcb *pcb, raw_recv_fn recv, void *recv_arg); + +/* The following functions are the lower layer interface to RAW. */ +u8_t raw_input (struct pbuf *p, struct netif *inp); +#define raw_init() /* Compatibility define, no init needed. */ + +/* for compatibility with older implementation */ +#define raw_new_ip6(proto) raw_new_ip_type(IPADDR_TYPE_V6, proto) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_RAW */ + +#endif /* LWIP_HDR_RAW_H */ diff --git a/tools/sdk/include/lwip/lwip/sio.h b/tools/sdk/include/lwip/lwip/sio.h new file mode 100755 index 00000000..09cf799a --- /dev/null +++ b/tools/sdk/include/lwip/lwip/sio.h @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + */ + +/* + * This is the interface to the platform specific serial IO module + * It needs to be implemented by those platforms which need SLIP or PPP + */ + +#ifndef SIO_H +#define SIO_H + +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* If you want to define sio_fd_t elsewhere or differently, + define this in your cc.h file. */ +#ifndef __sio_fd_t_defined +typedef void * sio_fd_t; +#endif + +/* The following functions can be defined to something else in your cc.h file + or be implemented in your custom sio.c file. */ + +#ifndef sio_open +/** + * Opens a serial device for communication. + * + * @param devnum device number + * @return handle to serial device if successful, NULL otherwise + */ +sio_fd_t sio_open(u8_t devnum); +#endif + +#ifndef sio_send +/** + * Sends a single character to the serial device. + * + * @param c character to send + * @param fd serial device handle + * + * @note This function will block until the character can be sent. + */ +void sio_send(u8_t c, sio_fd_t fd); +#endif + +#ifndef sio_recv +/** + * Receives a single character from the serial device. + * + * @param fd serial device handle + * + * @note This function will block until a character is received. + */ +u8_t sio_recv(sio_fd_t fd); +#endif + +#ifndef sio_read +/** + * Reads from the serial device. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received - may be 0 if aborted by sio_read_abort + * + * @note This function will block until data can be received. The blocking + * can be cancelled by calling sio_read_abort(). + */ +u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_tryread +/** + * Tries to read from the serial device. Same as sio_read but returns + * immediately if no data is available and never blocks. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received + */ +u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_write +/** + * Writes to the serial device. + * + * @param fd serial device handle + * @param data pointer to data to send + * @param len length (in bytes) of data to send + * @return number of bytes actually sent + * + * @note This function will block until all data can be sent. + */ +u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_read_abort +/** + * Aborts a blocking sio_read() call. + * + * @param fd serial device handle + */ +void sio_read_abort(sio_fd_t fd); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* SIO_H */ diff --git a/tools/sdk/include/lwip/lwip/snmp.h b/tools/sdk/include/lwip/lwip/snmp.h new file mode 100755 index 00000000..07368cc6 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/snmp.h @@ -0,0 +1,195 @@ +/** + * @file + * MIB2 callback functions called from throughout the stack to integrate a MIB2 + * into lwIP (together with MIB2_STATS). + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Dirk Ziegelmeier + * + */ +#ifndef LWIP_HDR_SNMP_H +#define LWIP_HDR_SNMP_H + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct udp_pcb; +struct netif; + +/* MIB2 statistics functions */ +#if MIB2_STATS /* don't build if not configured for use in lwipopts.h */ +/** + * @see RFC1213, "MIB-II, 6. Definitions" + */ +enum snmp_ifType { + snmp_ifType_other=1, /* none of the following */ + snmp_ifType_regular1822, + snmp_ifType_hdh1822, + snmp_ifType_ddn_x25, + snmp_ifType_rfc877_x25, + snmp_ifType_ethernet_csmacd, + snmp_ifType_iso88023_csmacd, + snmp_ifType_iso88024_tokenBus, + snmp_ifType_iso88025_tokenRing, + snmp_ifType_iso88026_man, + snmp_ifType_starLan, + snmp_ifType_proteon_10Mbit, + snmp_ifType_proteon_80Mbit, + snmp_ifType_hyperchannel, + snmp_ifType_fddi, + snmp_ifType_lapb, + snmp_ifType_sdlc, + snmp_ifType_ds1, /* T-1 */ + snmp_ifType_e1, /* european equiv. of T-1 */ + snmp_ifType_basicISDN, + snmp_ifType_primaryISDN, /* proprietary serial */ + snmp_ifType_propPointToPointSerial, + snmp_ifType_ppp, + snmp_ifType_softwareLoopback, + snmp_ifType_eon, /* CLNP over IP [11] */ + snmp_ifType_ethernet_3Mbit, + snmp_ifType_nsip, /* XNS over IP */ + snmp_ifType_slip, /* generic SLIP */ + snmp_ifType_ultra, /* ULTRA technologies */ + snmp_ifType_ds3, /* T-3 */ + snmp_ifType_sip, /* SMDS */ + snmp_ifType_frame_relay +}; + +/* This macro has a precision of ~49 days because sys_now returns u32_t. #define your own if you want ~490 days. */ +#ifndef MIB2_COPY_SYSUPTIME_TO +#define MIB2_COPY_SYSUPTIME_TO(ptrToVal) (*(ptrToVal) = (sys_now() / 10)) +#endif + +#define MIB2_STATS_NETIF_INC(n, x) do { ++(n)->mib2_counters.x; } while(0) +#define MIB2_STATS_NETIF_ADD(n, x, val) do { (n)->mib2_counters.x += (val); } while(0) + +#define MIB2_INIT_NETIF(netif, type, speed) do { \ + /* use "snmp_ifType" enum from snmp_mib2.h for "type", snmp_ifType_ethernet_csmacd by example */ \ + (netif)->link_type = (type); \ + /* your link speed here (units: bits per second) */ \ + (netif)->link_speed = (speed);\ + (netif)->ts = 0; \ + (netif)->mib2_counters.ifinoctets = 0; \ + (netif)->mib2_counters.ifinucastpkts = 0; \ + (netif)->mib2_counters.ifinnucastpkts = 0; \ + (netif)->mib2_counters.ifindiscards = 0; \ + (netif)->mib2_counters.ifinerrors = 0; \ + (netif)->mib2_counters.ifinunknownprotos = 0; \ + (netif)->mib2_counters.ifoutoctets = 0; \ + (netif)->mib2_counters.ifoutucastpkts = 0; \ + (netif)->mib2_counters.ifoutnucastpkts = 0; \ + (netif)->mib2_counters.ifoutdiscards = 0; \ + (netif)->mib2_counters.ifouterrors = 0; } while(0) +#else /* MIB2_STATS */ +#ifndef MIB2_COPY_SYSUPTIME_TO +#define MIB2_COPY_SYSUPTIME_TO(ptrToVal) +#endif +#define MIB2_INIT_NETIF(netif, type, speed) +#define MIB2_STATS_NETIF_INC(n, x) +#define MIB2_STATS_NETIF_ADD(n, x, val) +#endif /* MIB2_STATS */ + +/* LWIP MIB2 callbacks */ +#if LWIP_MIB2_CALLBACKS /* don't build if not configured for use in lwipopts.h */ +/* network interface */ +void mib2_netif_added(struct netif *ni); +void mib2_netif_removed(struct netif *ni); + +#if LWIP_IPV4 && LWIP_ARP +/* ARP (for atTable and ipNetToMediaTable) */ +void mib2_add_arp_entry(struct netif *ni, ip4_addr_t *ip); +void mib2_remove_arp_entry(struct netif *ni, ip4_addr_t *ip); +#else /* LWIP_IPV4 && LWIP_ARP */ +#define mib2_add_arp_entry(ni,ip) +#define mib2_remove_arp_entry(ni,ip) +#endif /* LWIP_IPV4 && LWIP_ARP */ + +/* IP */ +#if LWIP_IPV4 +void mib2_add_ip4(struct netif *ni); +void mib2_remove_ip4(struct netif *ni); +void mib2_add_route_ip4(u8_t dflt, struct netif *ni); +void mib2_remove_route_ip4(u8_t dflt, struct netif *ni); +#endif /* LWIP_IPV4 */ + +/* UDP */ +#if LWIP_UDP +void mib2_udp_bind(struct udp_pcb *pcb); +void mib2_udp_unbind(struct udp_pcb *pcb); +#endif /* LWIP_UDP */ + +#else /* LWIP_MIB2_CALLBACKS */ +/* LWIP_MIB2_CALLBACKS support not available */ +/* define everything to be empty */ + +/* network interface */ +#define mib2_netif_added(ni) +#define mib2_netif_removed(ni) + +/* ARP */ +#define mib2_add_arp_entry(ni,ip) +#define mib2_remove_arp_entry(ni,ip) + +/* IP */ +#define mib2_add_ip4(ni) +#define mib2_remove_ip4(ni) +#define mib2_add_route_ip4(dflt, ni) +#define mib2_remove_route_ip4(dflt, ni) + +/* UDP */ +#define mib2_udp_bind(pcb) +#define mib2_udp_unbind(pcb) +#endif /* LWIP_MIB2_CALLBACKS */ + +/* for source-code compatibility reasons only, can be removed (not used internally) */ +#define NETIF_INIT_SNMP MIB2_INIT_NETIF +#define snmp_add_ifinoctets(ni,value) MIB2_STATS_NETIF_ADD(ni, ifinoctets, value) +#define snmp_inc_ifinucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifinucastpkts) +#define snmp_inc_ifinnucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifinnucastpkts) +#define snmp_inc_ifindiscards(ni) MIB2_STATS_NETIF_INC(ni, ifindiscards) +#define snmp_inc_ifinerrors(ni) MIB2_STATS_NETIF_INC(ni, ifinerrors) +#define snmp_inc_ifinunknownprotos(ni) MIB2_STATS_NETIF_INC(ni, ifinunknownprotos) +#define snmp_add_ifoutoctets(ni,value) MIB2_STATS_NETIF_ADD(ni, ifoutoctets, value) +#define snmp_inc_ifoutucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifoutucastpkts) +#define snmp_inc_ifoutnucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifoutnucastpkts) +#define snmp_inc_ifoutdiscards(ni) MIB2_STATS_NETIF_INC(ni, ifoutdiscards) +#define snmp_inc_ifouterrors(ni) MIB2_STATS_NETIF_INC(ni, ifouterrors) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_SNMP_H */ diff --git a/tools/sdk/include/lwip/lwip/sockets.h b/tools/sdk/include/lwip/lwip/sockets.h new file mode 100755 index 00000000..aafb3d5c --- /dev/null +++ b/tools/sdk/include/lwip/lwip/sockets.h @@ -0,0 +1,624 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + + +#ifndef LWIP_HDR_SOCKETS_H +#define LWIP_HDR_SOCKETS_H + +#include "lwip/opt.h" + +#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ + +#include /* for size_t */ + +#include "lwip/ip_addr.h" +#include "lwip/err.h" +#include "lwip/inet.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* If your port already typedef's sa_family_t, define SA_FAMILY_T_DEFINED + to prevent this code from redefining it. */ +#if !defined(sa_family_t) && !defined(SA_FAMILY_T_DEFINED) +typedef u8_t sa_family_t; +#endif +/* If your port already typedef's in_port_t, define IN_PORT_T_DEFINED + to prevent this code from redefining it. */ +#if !defined(in_port_t) && !defined(IN_PORT_T_DEFINED) +typedef u16_t in_port_t; +#endif + +#if LWIP_IPV4 +/* members are in network byte order */ +struct sockaddr_in { + u8_t sin_len; + sa_family_t sin_family; + in_port_t sin_port; + struct in_addr sin_addr; +#define SIN_ZERO_LEN 8 + char sin_zero[SIN_ZERO_LEN]; +}; +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +struct sockaddr_in6 { + u8_t sin6_len; /* length of this structure */ + sa_family_t sin6_family; /* AF_INET6 */ + in_port_t sin6_port; /* Transport layer port # */ + u32_t sin6_flowinfo; /* IPv6 flow information */ + struct in6_addr sin6_addr; /* IPv6 address */ + u32_t sin6_scope_id; /* Set of interfaces for scope */ +}; +#endif /* LWIP_IPV6 */ + +struct sockaddr { + u8_t sa_len; + sa_family_t sa_family; + char sa_data[14]; +}; + +struct sockaddr_storage { + u8_t s2_len; + sa_family_t ss_family; + char s2_data1[2]; + u32_t s2_data2[3]; +#if LWIP_IPV6 + u32_t s2_data3[3]; +#endif /* LWIP_IPV6 */ +}; + +/* If your port already typedef's socklen_t, define SOCKLEN_T_DEFINED + to prevent this code from redefining it. */ +#if !defined(socklen_t) && !defined(SOCKLEN_T_DEFINED) +typedef u32_t socklen_t; +#endif + +struct lwip_sock; + +#if !LWIP_TCPIP_CORE_LOCKING +/** Maximum optlen used by setsockopt/getsockopt */ +#define LWIP_SETGETSOCKOPT_MAXOPTLEN 16 + +/** This struct is used to pass data to the set/getsockopt_internal + * functions running in tcpip_thread context (only a void* is allowed) */ +struct lwip_setgetsockopt_data { + /** socket index for which to change options */ + int s; + /** level of the option to process */ + int level; + /** name of the option to process */ + int optname; + /** set: value to set the option to + * get: value of the option is stored here */ +#if LWIP_MPU_COMPATIBLE + u8_t optval[LWIP_SETGETSOCKOPT_MAXOPTLEN]; +#else + union { + void *p; + const void *pc; + } optval; +#endif + /** size of *optval */ + socklen_t optlen; + /** if an error occurs, it is temporarily stored here */ + err_t err; + /** semaphore to wake up the calling task */ + void* completed_sem; +}; +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + +#if !defined(iovec) +struct iovec { + void *iov_base; + size_t iov_len; +}; +#endif + +struct msghdr { + void *msg_name; + socklen_t msg_namelen; + struct iovec *msg_iov; + int msg_iovlen; + void *msg_control; + socklen_t msg_controllen; + int msg_flags; +}; + +/* Socket protocol types (TCP/UDP/RAW) */ +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 + +/* + * Option flags per-socket. These must match the SOF_ flags in ip.h (checked in init.c) + */ +#define SO_REUSEADDR 0x0004 /* Allow local address reuse */ +#define SO_KEEPALIVE 0x0008 /* keep connections alive */ +#define SO_BROADCAST 0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ + + +/* + * Additional options, not kept in so_options. + */ +#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info recording */ +#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ +#define SO_DONTROUTE 0x0010 /* Unimplemented: just use interface addresses */ +#define SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */ +#define SO_LINGER 0x0080 /* linger on close if data present */ +#define SO_DONTLINGER ((int)(~SO_LINGER)) +#define SO_OOBINLINE 0x0100 /* Unimplemented: leave received OOB data in line */ +#define SO_REUSEPORT 0x0200 /* Unimplemented: allow local address & port reuse */ +#define SO_SNDBUF 0x1001 /* Unimplemented: send buffer size */ +#define SO_RCVBUF 0x1002 /* receive buffer size */ +#define SO_SNDLOWAT 0x1003 /* Unimplemented: send low-water mark */ +#define SO_RCVLOWAT 0x1004 /* Unimplemented: receive low-water mark */ +#define SO_SNDTIMEO 0x1005 /* send timeout */ +#define SO_RCVTIMEO 0x1006 /* receive timeout */ +#define SO_ERROR 0x1007 /* get error status and clear */ +#define SO_TYPE 0x1008 /* get socket type */ +#define SO_CONTIMEO 0x1009 /* Unimplemented: connect timeout */ +#define SO_NO_CHECK 0x100a /* don't create UDP checksum */ + + +/* + * Structure used for manipulating linger option. + */ +struct linger { + int l_onoff; /* option on/off */ + int l_linger; /* linger time in seconds */ +}; + +/* + * Level number for (get/set)sockopt() to apply to socket itself. + */ +#define SOL_SOCKET 0xfff /* options for socket level */ + + +#define AF_UNSPEC 0 +#define AF_INET 2 +#if LWIP_IPV6 +#define AF_INET6 10 +#else /* LWIP_IPV6 */ +#define AF_INET6 AF_UNSPEC +#endif /* LWIP_IPV6 */ +#define PF_INET AF_INET +#define PF_INET6 AF_INET6 +#define PF_UNSPEC AF_UNSPEC + +#define IPPROTO_IP 0 +#define IPPROTO_ICMP 1 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 +#if LWIP_IPV6 +#define IPPROTO_IPV6 41 +#define IPPROTO_ICMPV6 58 +#endif /* LWIP_IPV6 */ +#define IPPROTO_UDPLITE 136 +#define IPPROTO_RAW 255 + +/* Flags we can use with send and recv. */ +#define MSG_PEEK 0x01 /* Peeks at an incoming message */ +#define MSG_WAITALL 0x02 /* Unimplemented: Requests that the function block until the full amount of data requested can be returned */ +#define MSG_OOB 0x04 /* Unimplemented: Requests out-of-band data. The significance and semantics of out-of-band data are protocol-specific */ +#define MSG_DONTWAIT 0x08 /* Nonblocking i/o for this operation only */ +#define MSG_MORE 0x10 /* Sender will send more */ + + +/* + * Options for level IPPROTO_IP + */ +#define IP_TOS 1 +#define IP_TTL 2 + +#if LWIP_TCP +/* + * Options for level IPPROTO_TCP + */ +#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ +#define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keep_idle milliseconds */ +#define TCP_KEEPIDLE 0x03 /* set pcb->keep_idle - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */ +#define TCP_KEEPINTVL 0x04 /* set pcb->keep_intvl - Use seconds for get/setsockopt */ +#define TCP_KEEPCNT 0x05 /* set pcb->keep_cnt - Use number of probes sent for get/setsockopt */ +#endif /* LWIP_TCP */ + +#if LWIP_IPV6 +/* + * Options for level IPPROTO_IPV6 + */ +#define IPV6_CHECKSUM 7 /* RFC3542: calculate and insert the ICMPv6 checksum for raw sockets. */ +#define IPV6_V6ONLY 27 /* RFC3493: boolean control to restrict AF_INET6 sockets to IPv6 communications only. */ +#endif /* LWIP_IPV6 */ + +#if LWIP_UDP && LWIP_UDPLITE +/* + * Options for level IPPROTO_UDPLITE + */ +#define UDPLITE_SEND_CSCOV 0x01 /* sender checksum coverage */ +#define UDPLITE_RECV_CSCOV 0x02 /* minimal receiver checksum coverage */ +#endif /* LWIP_UDP && LWIP_UDPLITE*/ + + +#if LWIP_MULTICAST_TX_OPTIONS +/* + * Options and types for UDP multicast traffic handling + */ +#define IP_MULTICAST_TTL 5 +#define IP_MULTICAST_IF 6 +#define IP_MULTICAST_LOOP 7 +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#if LWIP_IGMP +/* + * Options and types related to multicast membership + */ +#define IP_ADD_MEMBERSHIP 3 +#define IP_DROP_MEMBERSHIP 4 + +typedef struct ip_mreq { + struct in_addr imr_multiaddr; /* IP multicast address of group */ + struct in_addr imr_interface; /* local IP address of interface */ +} ip_mreq; +#endif /* LWIP_IGMP */ + +/* + * The Type of Service provides an indication of the abstract + * parameters of the quality of service desired. These parameters are + * to be used to guide the selection of the actual service parameters + * when transmitting a datagram through a particular network. Several + * networks offer service precedence, which somehow treats high + * precedence traffic as more important than other traffic (generally + * by accepting only traffic above a certain precedence at time of high + * load). The major choice is a three way tradeoff between low-delay, + * high-reliability, and high-throughput. + * The use of the Delay, Throughput, and Reliability indications may + * increase the cost (in some sense) of the service. In many networks + * better performance for one of these parameters is coupled with worse + * performance on another. Except for very unusual cases at most two + * of these three indications should be set. + */ +#define IPTOS_TOS_MASK 0x1E +#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) +#define IPTOS_LOWDELAY 0x10 +#define IPTOS_THROUGHPUT 0x08 +#define IPTOS_RELIABILITY 0x04 +#define IPTOS_LOWCOST 0x02 +#define IPTOS_MINCOST IPTOS_LOWCOST + +/* + * The Network Control precedence designation is intended to be used + * within a network only. The actual use and control of that + * designation is up to each network. The Internetwork Control + * designation is intended for use by gateway control originators only. + * If the actual use of these precedence designations is of concern to + * a particular network, it is the responsibility of that network to + * control the access to, and use of, those precedence designations. + */ +#define IPTOS_PREC_MASK 0xe0 +#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) +#define IPTOS_PREC_NETCONTROL 0xe0 +#define IPTOS_PREC_INTERNETCONTROL 0xc0 +#define IPTOS_PREC_CRITIC_ECP 0xa0 +#define IPTOS_PREC_FLASHOVERRIDE 0x80 +#define IPTOS_PREC_FLASH 0x60 +#define IPTOS_PREC_IMMEDIATE 0x40 +#define IPTOS_PREC_PRIORITY 0x20 +#define IPTOS_PREC_ROUTINE 0x00 + + +/* + * Commands for ioctlsocket(), taken from the BSD file fcntl.h. + * lwip_ioctl only supports FIONREAD and FIONBIO, for now + * + * Ioctl's have the command encoded in the lower word, + * and the size of any in or out parameters in the upper + * word. The high 2 bits of the upper word are used + * to encode the in/out status of the parameter; for now + * we restrict parameters to at most 128 bytes. + */ +#if !defined(FIONREAD) || !defined(FIONBIO) +#define IOCPARM_MASK 0x7fU /* parameters must be < 128 bytes */ +#define IOC_VOID 0x20000000UL /* no parameters */ +#define IOC_OUT 0x40000000UL /* copy out parameters */ +#define IOC_IN 0x80000000UL /* copy in parameters */ +#define IOC_INOUT (IOC_IN|IOC_OUT) + /* 0x20000000 distinguishes new & + old ioctl's */ +#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) + +#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) + +#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#endif /* !defined(FIONREAD) || !defined(FIONBIO) */ + +#ifndef FIONREAD +#define FIONREAD _IOR('f', 127, unsigned long) /* get # bytes to read */ +#endif +#ifndef FIONBIO +#define FIONBIO _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */ +#endif + +/* Socket I/O Controls: unimplemented */ +#ifndef SIOCSHIWAT +#define SIOCSHIWAT _IOW('s', 0, unsigned long) /* set high watermark */ +#define SIOCGHIWAT _IOR('s', 1, unsigned long) /* get high watermark */ +#define SIOCSLOWAT _IOW('s', 2, unsigned long) /* set low watermark */ +#define SIOCGLOWAT _IOR('s', 3, unsigned long) /* get low watermark */ +#define SIOCATMARK _IOR('s', 7, unsigned long) /* at oob mark? */ +#endif + +/* commands for fnctl */ +#ifndef F_GETFL +#define F_GETFL 3 +#endif +#ifndef F_SETFL +#define F_SETFL 4 +#endif + +/* File status flags and file access modes for fnctl, + these are bits in an int. */ +#ifndef O_NONBLOCK +#define O_NONBLOCK 1 /* nonblocking I/O */ +#endif +#ifndef O_NDELAY +#define O_NDELAY 1 /* same as O_NONBLOCK, for compatibility */ +#endif + +#ifndef SHUT_RD + #define SHUT_RD 0 + #define SHUT_WR 1 + #define SHUT_RDWR 2 +#endif + +/* FD_SET used for lwip_select */ +#ifndef FD_SET +#undef FD_SETSIZE +/* Make FD_SETSIZE match NUM_SOCKETS in socket.c */ +#define FD_SETSIZE MEMP_NUM_NETCONN +#define FDSETSAFESET(n, code) do { \ + if (((n) - LWIP_SOCKET_OFFSET < MEMP_NUM_NETCONN) && (((int)(n) - LWIP_SOCKET_OFFSET) >= 0)) { \ + code; }} while(0) +#define FDSETSAFEGET(n, code) (((n) - LWIP_SOCKET_OFFSET < MEMP_NUM_NETCONN) && (((int)(n) - LWIP_SOCKET_OFFSET) >= 0) ?\ + (code) : 0) +#define FD_SET(n, p) FDSETSAFESET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] |= (1 << (((n)-LWIP_SOCKET_OFFSET) & 7))) +#define FD_CLR(n, p) FDSETSAFESET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] &= ~(1 << (((n)-LWIP_SOCKET_OFFSET) & 7))) +#define FD_ISSET(n,p) FDSETSAFEGET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] & (1 << (((n)-LWIP_SOCKET_OFFSET) & 7))) +#define FD_ZERO(p) memset((void*)(p), 0, sizeof(*(p))) + +typedef struct fd_set +{ + unsigned char fd_bits [(FD_SETSIZE+7)/8]; +} fd_set; + +#elif LWIP_SOCKET_OFFSET +#error LWIP_SOCKET_OFFSET does not work with external FD_SET! +#endif /* FD_SET */ + +/** LWIP_TIMEVAL_PRIVATE: if you want to use the struct timeval provided + * by your system, set this to 0 and include in cc.h */ +#ifndef LWIP_TIMEVAL_PRIVATE +#define LWIP_TIMEVAL_PRIVATE 1 +#endif + +#if LWIP_TIMEVAL_PRIVATE +struct timeval { + long tv_sec; /* seconds */ + long tv_usec; /* and microseconds */ +}; +#endif /* LWIP_TIMEVAL_PRIVATE */ + +#define lwip_socket_init() /* Compatibility define, no init needed. */ +void lwip_socket_thread_init(void); /* LWIP_NETCONN_SEM_PER_THREAD==1: initialize thread-local semaphore */ +void lwip_socket_thread_cleanup(void); /* LWIP_NETCONN_SEM_PER_THREAD==1: destroy thread-local semaphore */ + +#if LWIP_COMPAT_SOCKETS == 2 + + +/* This helps code parsers/code completion by not having the COMPAT functions as defines */ +#define lwip_accept accept +#define lwip_bind bind +#define lwip_shutdown shutdown +#define lwip_getpeername getpeername +#define lwip_getsockname getsockname +#define lwip_setsockopt setsockopt +#define lwip_getsockopt getsockopt +#define lwip_close closesocket +#define lwip_connect connect +#define lwip_listen listen +#define lwip_recv recv +#define lwip_recvfrom recvfrom +#define lwip_send send +#define lwip_sendmsg sendmsg +#define lwip_sendto sendto +#define lwip_socket socket +#define lwip_select select +#define lwip_ioctlsocket ioctl + +#if LWIP_POSIX_SOCKETS_IO_NAMES +#define lwip_read read +#define lwip_write write +#define lwip_writev writev +#undef lwip_close +#define lwip_close close +#define closesocket(s) close(s) +#define lwip_fcntl fcntl +#define lwip_ioctl ioctl +#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ +#endif /* LWIP_COMPAT_SOCKETS == 2 */ + +int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen); +int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen); +int lwip_shutdown(int s, int how); +int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen); +int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen); +int lwip_close(int s); +int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen); +int lwip_listen(int s, int backlog); +int lwip_recv(int s, void *mem, size_t len, int flags); +int lwip_read(int s, void *mem, size_t len); +int lwip_recvfrom(int s, void *mem, size_t len, int flags, + struct sockaddr *from, socklen_t *fromlen); +int lwip_send(int s, const void *dataptr, size_t size, int flags); +int lwip_sendmsg(int s, const struct msghdr *message, int flags); +int lwip_sendto(int s, const void *dataptr, size_t size, int flags, + const struct sockaddr *to, socklen_t tolen); +int lwip_socket(int domain, int type, int protocol); +int lwip_write(int s, const void *dataptr, size_t size); +int lwip_writev(int s, const struct iovec *iov, int iovcnt); +int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, + struct timeval *timeout); +int lwip_ioctl(int s, long cmd, void *argp); +int lwip_fcntl(int s, int cmd, int val); + +#if LWIP_COMPAT_SOCKETS +#if LWIP_COMPAT_SOCKETS != 2 + +#if LWIP_THREAD_SAFE + +int lwip_accept_r(int s, struct sockaddr *addr, socklen_t *addrlen); +int lwip_bind_r(int s, const struct sockaddr *name, socklen_t namelen); +int lwip_shutdown_r(int s, int how); +int lwip_getpeername_r (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockname_r (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockopt_r (int s, int level, int optname, void *optval, socklen_t *optlen); +int lwip_setsockopt_r (int s, int level, int optname, const void *optval, socklen_t optlen); +int lwip_close_r(int s); +int lwip_connect_r(int s, const struct sockaddr *name, socklen_t namelen); +int lwip_listen_r(int s, int backlog); +int lwip_recv_r(int s, void *mem, size_t len, int flags); +int lwip_read_r(int s, void *mem, size_t len); +int lwip_recvfrom_r(int s, void *mem, size_t len, int flags, + struct sockaddr *from, socklen_t *fromlen); +int lwip_send_r(int s, const void *dataptr, size_t size, int flags); +int lwip_sendmsg_r(int s, const struct msghdr *message, int flags); +int lwip_sendto_r(int s, const void *dataptr, size_t size, int flags, + const struct sockaddr *to, socklen_t tolen); +int lwip_socket(int domain, int type, int protocol); +int lwip_write_r(int s, const void *dataptr, size_t size); +int lwip_writev_r(int s, const struct iovec *iov, int iovcnt); +int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, + struct timeval *timeout); +int lwip_ioctl_r(int s, long cmd, void *argp); +int lwip_fcntl_r(int s, int cmd, int val); + +#define accept(s,addr,addrlen) lwip_accept_r(s,addr,addrlen) +#define bind(s,name,namelen) lwip_bind_r(s,name,namelen) +#define shutdown(s,how) lwip_shutdown_r(s,how) +#define getpeername(s,name,namelen) lwip_getpeername_r(s,name,namelen) +#define getsockname(s,name,namelen) lwip_getsockname_r(s,name,namelen) +#define setsockopt(s,level,optname,opval,optlen) lwip_setsockopt_r(s,level,optname,opval,optlen) +#define getsockopt(s,level,optname,opval,optlen) lwip_getsockopt_r(s,level,optname,opval,optlen) +#define closesocket(s) lwip_close_r(s) +#define connect(s,name,namelen) lwip_connect_r(s,name,namelen) +#define listen(s,backlog) lwip_listen_r(s,backlog) +#define recv(s,mem,len,flags) lwip_recv_r(s,mem,len,flags) +#define recvfrom(s,mem,len,flags,from,fromlen) lwip_recvfrom_r(s,mem,len,flags,from,fromlen) +#define send(s,dataptr,size,flags) lwip_send_r(s,dataptr,size,flags) +#define sendmsg(s,message,flags) lwip_sendmsg_r(s,message,flags) +#define sendto(s,dataptr,size,flags,to,tolen) lwip_sendto_r(s,dataptr,size,flags,to,tolen) +#define socket(domain,type,protocol) lwip_socket(domain,type,protocol) +#define select(maxfdp1,readset,writeset,exceptset,timeout) lwip_select(maxfdp1,readset,writeset,exceptset,timeout) +#define ioctlsocket(s,cmd,argp) lwip_ioctl_r(s,cmd,argp) + +#if LWIP_POSIX_SOCKETS_IO_NAMES +#define read(s,mem,len) lwip_read_r(s,mem,len) +#define write(s,dataptr,len) lwip_write_r(s,dataptr,len) +#define writev(s,iov,iovcnt) lwip_writev_r(s,iov,iovcnt) +#define close(s) lwip_close_r(s) +#define fcntl(s,cmd,val) lwip_fcntl_r(s,cmd,val) +#define ioctl(s,cmd,argp) lwip_ioctl_r(s,cmd,argp) +#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ + +#else + +#define accept(s,addr,addrlen) lwip_accept(s,addr,addrlen) +#define bind(s,name,namelen) lwip_bind(s,name,namelen) +#define shutdown(s,how) lwip_shutdown(s,how) +#define getpeername(s,name,namelen) lwip_getpeername(s,name,namelen) +#define getsockname(s,name,namelen) lwip_getsockname(s,name,namelen) +#define setsockopt(s,level,optname,opval,optlen) lwip_setsockopt(s,level,optname,opval,optlen) +#define getsockopt(s,level,optname,opval,optlen) lwip_getsockopt(s,level,optname,opval,optlen) +#define closesocket(s) lwip_close(s) +#define connect(s,name,namelen) lwip_connect(s,name,namelen) +#define listen(s,backlog) lwip_listen(s,backlog) +#define recv(s,mem,len,flags) lwip_recv(s,mem,len,flags) +#define recvfrom(s,mem,len,flags,from,fromlen) lwip_recvfrom(s,mem,len,flags,from,fromlen) +#define send(s,dataptr,size,flags) lwip_send(s,dataptr,size,flags) +#define sendmsg(s,message,flags) lwip_sendmsg(s,message,flags) +#define sendto(s,dataptr,size,flags,to,tolen) lwip_sendto(s,dataptr,size,flags,to,tolen) +#define socket(domain,type,protocol) lwip_socket(domain,type,protocol) +#define select(maxfdp1,readset,writeset,exceptset,timeout) lwip_select(maxfdp1,readset,writeset,exceptset,timeout) +#define ioctlsocket(s,cmd,argp) lwip_ioctl(s,cmd,argp) + +#if LWIP_POSIX_SOCKETS_IO_NAMES +#define read(s,mem,len) lwip_read(s,mem,len) +#define write(s,dataptr,len) lwip_write(s,dataptr,len) +#define writev(s,iov,iovcnt) lwip_writev(s,iov,iovcnt) +#define close(s) lwip_close(s) +#define fcntl(s,cmd,val) lwip_fcntl(s,cmd,val) +#define ioctl(s,cmd,argp) lwip_ioctl(s,cmd,argp) +#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ +#endif /* LWIP_THREAD_SAFE */ + +#endif /* LWIP_COMPAT_SOCKETS != 2 */ + +#if LWIP_IPV4 && LWIP_IPV6 +#define inet_ntop(af,src,dst,size) \ + (((af) == AF_INET6) ? ip6addr_ntoa_r((const ip6_addr_t*)(src),(dst),(size)) \ + : (((af) == AF_INET) ? ip4addr_ntoa_r((const ip4_addr_t*)(src),(dst),(size)) : NULL)) +#define inet_pton(af,src,dst) \ + (((af) == AF_INET6) ? ip6addr_aton((src),(ip6_addr_t*)(dst)) \ + : (((af) == AF_INET) ? ip4addr_aton((src),(ip4_addr_t*)(dst)) : 0)) +#elif LWIP_IPV4 /* LWIP_IPV4 && LWIP_IPV6 */ +#define inet_ntop(af,src,dst,size) \ + (((af) == AF_INET) ? ip4addr_ntoa_r((const ip4_addr_t*)(src),(dst),(size)) : NULL) +#define inet_pton(af,src,dst) \ + (((af) == AF_INET) ? ip4addr_aton((src),(ip4_addr_t*)(dst)) : 0) +#else /* LWIP_IPV4 && LWIP_IPV6 */ +#define inet_ntop(af,src,dst,size) \ + (((af) == AF_INET6) ? ip6addr_ntoa_r((const ip6_addr_t*)(src),(dst),(size)) : NULL) +#define inet_pton(af,src,dst) \ + (((af) == AF_INET6) ? ip6addr_aton((src),(ip6_addr_t*)(dst)) : 0) +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + +#endif /* LWIP_COMPAT_SOCKETS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SOCKET */ + +#endif /* LWIP_HDR_SOCKETS_H */ diff --git a/tools/sdk/include/lwip/lwip/stats.h b/tools/sdk/include/lwip/lwip/stats.h new file mode 100755 index 00000000..176723d2 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/stats.h @@ -0,0 +1,462 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_STATS_H +#define LWIP_HDR_STATS_H + +#include "lwip/opt.h" + +#include "lwip/mem.h" +#include "lwip/memp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_STATS + +#ifndef LWIP_STATS_LARGE +#define LWIP_STATS_LARGE 0 +#endif + +#if LWIP_STATS_LARGE +#define STAT_COUNTER u32_t +#define STAT_COUNTER_F U32_F +#else +#define STAT_COUNTER u16_t +#define STAT_COUNTER_F U16_F +#endif + +struct stats_proto { + STAT_COUNTER xmit; /* Transmitted packets. */ + STAT_COUNTER recv; /* Received packets. */ + STAT_COUNTER fw; /* Forwarded packets. */ + STAT_COUNTER drop; /* Dropped packets. */ + STAT_COUNTER chkerr; /* Checksum error. */ + STAT_COUNTER lenerr; /* Invalid length error. */ + STAT_COUNTER memerr; /* Out of memory error. */ + STAT_COUNTER rterr; /* Routing error. */ + STAT_COUNTER proterr; /* Protocol error. */ + STAT_COUNTER opterr; /* Error in options. */ + STAT_COUNTER err; /* Misc error. */ + STAT_COUNTER cachehit; +}; + +struct stats_igmp { + STAT_COUNTER xmit; /* Transmitted packets. */ + STAT_COUNTER recv; /* Received packets. */ + STAT_COUNTER drop; /* Dropped packets. */ + STAT_COUNTER chkerr; /* Checksum error. */ + STAT_COUNTER lenerr; /* Invalid length error. */ + STAT_COUNTER memerr; /* Out of memory error. */ + STAT_COUNTER proterr; /* Protocol error. */ + STAT_COUNTER rx_v1; /* Received v1 frames. */ + STAT_COUNTER rx_group; /* Received group-specific queries. */ + STAT_COUNTER rx_general; /* Received general queries. */ + STAT_COUNTER rx_report; /* Received reports. */ + STAT_COUNTER tx_join; /* Sent joins. */ + STAT_COUNTER tx_leave; /* Sent leaves. */ + STAT_COUNTER tx_report; /* Sent reports. */ +}; + +struct stats_mem { +#ifdef LWIP_DEBUG + const char *name; +#endif /* LWIP_DEBUG */ + STAT_COUNTER err; + mem_size_t avail; + mem_size_t used; + mem_size_t max; + STAT_COUNTER illegal; +}; + +struct stats_syselem { + STAT_COUNTER used; + STAT_COUNTER max; + STAT_COUNTER err; +}; + +struct stats_sys { + struct stats_syselem sem; + struct stats_syselem mutex; + struct stats_syselem mbox; +}; + +struct stats_mib2 { + /* IP */ + u32_t ipinhdrerrors; + u32_t ipinaddrerrors; + u32_t ipinunknownprotos; + u32_t ipindiscards; + u32_t ipindelivers; + u32_t ipoutrequests; + u32_t ipoutdiscards; + u32_t ipoutnoroutes; + u32_t ipreasmoks; + u32_t ipreasmfails; + u32_t ipfragoks; + u32_t ipfragfails; + u32_t ipfragcreates; + u32_t ipreasmreqds; + u32_t ipforwdatagrams; + u32_t ipinreceives; + + /* TCP */ + u32_t tcpactiveopens; + u32_t tcppassiveopens; + u32_t tcpattemptfails; + u32_t tcpestabresets; + u32_t tcpoutsegs; + u32_t tcpretranssegs; + u32_t tcpinsegs; + u32_t tcpinerrs; + u32_t tcpoutrsts; + + /* UDP */ + u32_t udpindatagrams; + u32_t udpnoports; + u32_t udpinerrors; + u32_t udpoutdatagrams; + + /* ICMP */ + u32_t icmpinmsgs; + u32_t icmpinerrors; + u32_t icmpindestunreachs; + u32_t icmpintimeexcds; + u32_t icmpinparmprobs; + u32_t icmpinsrcquenchs; + u32_t icmpinredirects; + u32_t icmpinechos; + u32_t icmpinechoreps; + u32_t icmpintimestamps; + u32_t icmpintimestampreps; + u32_t icmpinaddrmasks; + u32_t icmpinaddrmaskreps; + u32_t icmpoutmsgs; + u32_t icmpouterrors; + u32_t icmpoutdestunreachs; + u32_t icmpouttimeexcds; + u32_t icmpoutechos; /* can be incremented by user application ('ping') */ + u32_t icmpoutechoreps; +}; + +struct stats_mib2_netif_ctrs { + /* The total number of octets received on the interface, including framing characters */ + u32_t ifinoctets; + /* The number of packets, delivered by this sub-layer to a higher (sub-)layer, which were + * not addressed to a multicast or broadcast address at this sub-layer */ + u32_t ifinucastpkts; + /* The number of packets, delivered by this sub-layer to a higher (sub-)layer, which were + * addressed to a multicast or broadcast address at this sub-layer */ + u32_t ifinnucastpkts; + /* The number of inbound packets which were chosen to be discarded even though no errors had + * been detected to prevent their being deliverable to a higher-layer protocol. One possible + * reason for discarding such a packet could be to free up buffer space */ + u32_t ifindiscards; + /* For packet-oriented interfaces, the number of inbound packets that contained errors + * preventing them from being deliverable to a higher-layer protocol. For character- + * oriented or fixed-length interfaces, the number of inbound transmission units that + * contained errors preventing them from being deliverable to a higher-layer protocol. */ + u32_t ifinerrors; + /* For packet-oriented interfaces, the number of packets received via the interface which + * were discarded because of an unknown or unsupported protocol. For character-oriented + * or fixed-length interfaces that support protocol multiplexing the number of transmission + * units received via the interface which were discarded because of an unknown or unsupported + * protocol. For any interface that does not support protocol multiplexing, this counter will + * always be 0 */ + u32_t ifinunknownprotos; + /* The total number of octets transmitted out of the interface, including framing characters. */ + u32_t ifoutoctets; + /* The total number of packets that higher-level protocols requested be transmitted, and + * which were not addressed to a multicast or broadcast address at this sub-layer, including + * those that were discarded or not sent. */ + u32_t ifoutucastpkts; + /* The total number of packets that higher-level protocols requested be transmitted, and which + * were addressed to a multicast or broadcast address at this sub-layer, including + * those that were discarded or not sent. */ + u32_t ifoutnucastpkts; + /* The number of outbound packets which were chosen to be discarded even though no errors had + * been detected to prevent their being transmitted. One possible reason for discarding + * such a packet could be to free up buffer space. */ + u32_t ifoutdiscards; + /* For packet-oriented interfaces, the number of outbound packets that could not be transmitted + * because of errors. For character-oriented or fixed-length interfaces, the number of outbound + * transmission units that could not be transmitted because of errors. */ + u32_t ifouterrors; +}; + +struct stats_ { +#if LINK_STATS + struct stats_proto link; +#endif +#if ETHARP_STATS + struct stats_proto etharp; +#endif +#if IPFRAG_STATS + struct stats_proto ip_frag; +#endif +#if IP_STATS + struct stats_proto ip; +#endif +#if ICMP_STATS + struct stats_proto icmp; +#endif +#if IGMP_STATS + struct stats_igmp igmp; +#endif +#if UDP_STATS + struct stats_proto udp; +#endif +#if TCP_STATS + struct stats_proto tcp; +#endif +#if MEM_STATS + struct stats_mem mem; +#endif +#if MEMP_STATS + struct stats_mem memp[MEMP_MAX]; +#endif +#if SYS_STATS + struct stats_sys sys; +#endif +#if IP6_STATS + struct stats_proto ip6; +#endif +#if ICMP6_STATS + struct stats_proto icmp6; +#endif +#if IP6_FRAG_STATS + struct stats_proto ip6_frag; +#endif +#if MLD6_STATS + struct stats_igmp mld6; +#endif +#if ND6_STATS + struct stats_proto nd6; +#endif +#if MIB2_STATS + struct stats_mib2 mib2; +#endif +}; + +extern struct stats_ lwip_stats; + +void stats_init(void); + +#define STATS_INC(x) ++lwip_stats.x +#define STATS_DEC(x) --lwip_stats.x +#define STATS_INC_USED(x, y) do { lwip_stats.x.used += y; \ + if (lwip_stats.x.max < lwip_stats.x.used) { \ + lwip_stats.x.max = lwip_stats.x.used; \ + } \ + } while(0) +#define STATS_GET(x) lwip_stats.x +#else /* LWIP_STATS */ +#define stats_init() +#define STATS_INC(x) +#define STATS_DEC(x) +#define STATS_INC_USED(x) +#endif /* LWIP_STATS */ + +#if TCP_STATS +#define TCP_STATS_INC(x) STATS_INC(x) +#define TCP_STATS_DISPLAY() stats_display_proto(&lwip_stats.tcp, "TCP") +#else +#define TCP_STATS_INC(x) +#define TCP_STATS_DISPLAY() +#endif + +#if UDP_STATS +#define UDP_STATS_INC(x) STATS_INC(x) +#define UDP_STATS_DISPLAY() stats_display_proto(&lwip_stats.udp, "UDP") +#else +#define UDP_STATS_INC(x) +#define UDP_STATS_DISPLAY() +#endif + +#if ICMP_STATS +#define ICMP_STATS_INC(x) STATS_INC(x) +#define ICMP_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp, "ICMP") +#else +#define ICMP_STATS_INC(x) +#define ICMP_STATS_DISPLAY() +#endif + +#if IGMP_STATS +#define IGMP_STATS_INC(x) STATS_INC(x) +#define IGMP_STATS_DISPLAY() stats_display_igmp(&lwip_stats.igmp, "IGMP") +#else +#define IGMP_STATS_INC(x) +#define IGMP_STATS_DISPLAY() +#endif + +#if IP_STATS +#define IP_STATS_INC(x) STATS_INC(x) +#define IP_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip, "IP") +#else +#define IP_STATS_INC(x) +#define IP_STATS_DISPLAY() +#endif + +#if IPFRAG_STATS +#define IPFRAG_STATS_INC(x) STATS_INC(x) +#define IPFRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG") +#else +#define IPFRAG_STATS_INC(x) +#define IPFRAG_STATS_DISPLAY() +#endif + +#if ETHARP_STATS +#define ETHARP_STATS_INC(x) STATS_INC(x) +#define ETHARP_STATS_DISPLAY() stats_display_proto(&lwip_stats.etharp, "ETHARP") +#else +#define ETHARP_STATS_INC(x) +#define ETHARP_STATS_DISPLAY() +#endif + +#if LINK_STATS +#define LINK_STATS_INC(x) STATS_INC(x) +#define LINK_STATS_DISPLAY() stats_display_proto(&lwip_stats.link, "LINK") +#else +#define LINK_STATS_INC(x) +#define LINK_STATS_DISPLAY() +#endif + +#if MEM_STATS +#define MEM_STATS_AVAIL(x, y) lwip_stats.mem.x = y +#define MEM_STATS_INC(x) STATS_INC(mem.x) +#define MEM_STATS_INC_USED(x, y) STATS_INC_USED(mem, y) +#define MEM_STATS_DEC_USED(x, y) lwip_stats.mem.x -= y +#define MEM_STATS_DISPLAY() stats_display_mem(&lwip_stats.mem, "HEAP") +#else +#define MEM_STATS_AVAIL(x, y) +#define MEM_STATS_INC(x) +#define MEM_STATS_INC_USED(x, y) +#define MEM_STATS_DEC_USED(x, y) +#define MEM_STATS_DISPLAY() +#endif + +#if MEMP_STATS +#define MEMP_STATS_AVAIL(x, i, y) lwip_stats.memp[i].x = y +#define MEMP_STATS_INC(x, i) STATS_INC(memp[i].x) +#define MEMP_STATS_DEC(x, i) STATS_DEC(memp[i].x) +#define MEMP_STATS_INC_USED(x, i) STATS_INC_USED(memp[i], 1) +#define MEMP_STATS_DISPLAY(i) stats_display_memp(&lwip_stats.memp[i], i) +#define MEMP_STATS_GET(x, i) STATS_GET(memp[i].x) +#else +#define MEMP_STATS_AVAIL(x, i, y) +#define MEMP_STATS_INC(x, i) +#define MEMP_STATS_DEC(x, i) +#define MEMP_STATS_INC_USED(x, i) +#define MEMP_STATS_DISPLAY(i) +#define MEMP_STATS_GET(x, i) 0 +#endif + +#if SYS_STATS +#define SYS_STATS_INC(x) STATS_INC(sys.x) +#define SYS_STATS_DEC(x) STATS_DEC(sys.x) +#define SYS_STATS_INC_USED(x) STATS_INC_USED(sys.x, 1) +#define SYS_STATS_DISPLAY() stats_display_sys(&lwip_stats.sys) +#else +#define SYS_STATS_INC(x) +#define SYS_STATS_DEC(x) +#define SYS_STATS_INC_USED(x) +#define SYS_STATS_DISPLAY() +#endif + +#if IP6_STATS +#define IP6_STATS_INC(x) STATS_INC(x) +#define IP6_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip6, "IPv6") +#else +#define IP6_STATS_INC(x) +#define IP6_STATS_DISPLAY() +#endif + +#if ICMP6_STATS +#define ICMP6_STATS_INC(x) STATS_INC(x) +#define ICMP6_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp6, "ICMPv6") +#else +#define ICMP6_STATS_INC(x) +#define ICMP6_STATS_DISPLAY() +#endif + +#if IP6_FRAG_STATS +#define IP6_FRAG_STATS_INC(x) STATS_INC(x) +#define IP6_FRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip6_frag, "IPv6 FRAG") +#else +#define IP6_FRAG_STATS_INC(x) +#define IP6_FRAG_STATS_DISPLAY() +#endif + +#if MLD6_STATS +#define MLD6_STATS_INC(x) STATS_INC(x) +#define MLD6_STATS_DISPLAY() stats_display_igmp(&lwip_stats.mld6, "MLDv1") +#else +#define MLD6_STATS_INC(x) +#define MLD6_STATS_DISPLAY() +#endif + +#if ND6_STATS +#define ND6_STATS_INC(x) STATS_INC(x) +#define ND6_STATS_DISPLAY() stats_display_proto(&lwip_stats.nd6, "ND") +#else +#define ND6_STATS_INC(x) +#define ND6_STATS_DISPLAY() +#endif + +#if MIB2_STATS +#define MIB2_STATS_INC(x) STATS_INC(x) +#else +#define MIB2_STATS_INC(x) +#endif + +/* Display of statistics */ +#if LWIP_STATS_DISPLAY +void stats_display(void); +void stats_display_proto(struct stats_proto *proto, const char *name); +void stats_display_igmp(struct stats_igmp *igmp, const char *name); +void stats_display_mem(struct stats_mem *mem, const char *name); +void stats_display_memp(struct stats_mem *mem, int index); +void stats_display_sys(struct stats_sys *sys); +#else /* LWIP_STATS_DISPLAY */ +#define stats_display() +#define stats_display_proto(proto, name) +#define stats_display_igmp(igmp, name) +#define stats_display_mem(mem, name) +#define stats_display_memp(mem, index) +#define stats_display_sys(sys) +#endif /* LWIP_STATS_DISPLAY */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_STATS_H */ diff --git a/tools/sdk/include/lwip/lwip/sys.h b/tools/sdk/include/lwip/lwip/sys.h new file mode 100755 index 00000000..86d0f3b3 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/sys.h @@ -0,0 +1,362 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_SYS_H +#define LWIP_HDR_SYS_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if NO_SYS + +/* For a totally minimal and standalone system, we provide null + definitions of the sys_ functions. */ +typedef u8_t sys_sem_t; +typedef u8_t sys_mutex_t; +typedef u8_t sys_mbox_t; + +#define sys_sem_new(s, c) ERR_OK +#define sys_sem_signal(s) +#define sys_sem_wait(s) +#define sys_arch_sem_wait(s,t) +#define sys_sem_free(s) +#define sys_sem_valid(s) 0 +#define sys_sem_valid_val(s) 0 +#define sys_sem_set_invalid(s) +#define sys_sem_set_invalid_val(s) +#define sys_mutex_new(mu) ERR_OK +#define sys_mutex_lock(mu) +#define sys_mutex_unlock(mu) +#define sys_mutex_free(mu) +#define sys_mutex_valid(mu) 0 +#define sys_mutex_set_invalid(mu) +#define sys_mbox_new(m, s) ERR_OK +#define sys_mbox_fetch(m,d) +#define sys_mbox_tryfetch(m,d) +#define sys_mbox_post(m,d) +#define sys_mbox_trypost(m,d) +#define sys_mbox_free(m) +#define sys_mbox_valid(m) +#define sys_mbox_valid_val(m) +#define sys_mbox_set_invalid(m) +#define sys_mbox_set_invalid_val(m) + +#define sys_thread_new(n,t,a,s,p) + +#define sys_msleep(t) + +#else /* NO_SYS */ + +/** Return code for timeouts from sys_arch_mbox_fetch and sys_arch_sem_wait */ +#define SYS_ARCH_TIMEOUT 0xffffffffUL + +/** sys_mbox_tryfetch() returns SYS_MBOX_EMPTY if appropriate. + * For now we use the same magic value, but we allow this to change in future. + */ +#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT + +#include "lwip/err.h" +#include "arch/sys_arch.h" + +/** Function prototype for thread functions */ +typedef void (*lwip_thread_fn)(void *arg); + +/* Function prototypes for functions to be implemented by platform ports + (in sys_arch.c) */ + +/* Mutex functions: */ + +/** Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores + should be used instead */ +#ifndef LWIP_COMPAT_MUTEX +#define LWIP_COMPAT_MUTEX 0 +#endif + +#if LWIP_COMPAT_MUTEX +/* for old ports that don't have mutexes: define them to binary semaphores */ +#define sys_mutex_t sys_sem_t +#define sys_mutex_new(mutex) sys_sem_new(mutex, 1) +#define sys_mutex_lock(mutex) sys_sem_wait(mutex) +#define sys_mutex_unlock(mutex) sys_sem_signal(mutex) +#define sys_mutex_free(mutex) sys_sem_free(mutex) +#define sys_mutex_valid(mutex) sys_sem_valid(mutex) +#define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex) + +#else /* LWIP_COMPAT_MUTEX */ + +/** Create a new mutex + * @param mutex pointer to the mutex to create + * @return a new mutex */ +err_t sys_mutex_new(sys_mutex_t *mutex); +/** Lock a mutex + * @param mutex the mutex to lock */ +void sys_mutex_lock(sys_mutex_t *mutex); +/** Unlock a mutex + * @param mutex the mutex to unlock */ +void sys_mutex_unlock(sys_mutex_t *mutex); +/** Delete a semaphore + * @param mutex the mutex to delete */ +void sys_mutex_free(sys_mutex_t *mutex); +#ifndef sys_mutex_valid +/** Check if a mutex is valid/allocated: return 1 for valid, 0 for invalid */ +int sys_mutex_valid(sys_mutex_t *mutex); +#endif +#ifndef sys_mutex_set_invalid +/** Set a mutex invalid so that sys_mutex_valid returns 0 */ +void sys_mutex_set_invalid(sys_mutex_t *mutex); +#endif +#endif /* LWIP_COMPAT_MUTEX */ + +/* Semaphore functions: */ + +/** Create a new semaphore + * @param sem pointer to the semaphore to create + * @param count initial count of the semaphore + * @return ERR_OK if successful, another err_t otherwise */ +err_t sys_sem_new(sys_sem_t *sem, u8_t count); +/** Signals a semaphore + * @param sem the semaphore to signal */ +void sys_sem_signal(sys_sem_t *sem); +/** Wait for a semaphore for the specified timeout + * @param sem the semaphore to wait for + * @param timeout timeout in milliseconds to wait (0 = wait forever) + * @return time (in milliseconds) waited for the semaphore + * or SYS_ARCH_TIMEOUT on timeout */ +u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout); +/** Delete a semaphore + * @param sem semaphore to delete */ +void sys_sem_free(sys_sem_t *sem); +/** Wait for a semaphore - forever/no timeout */ +#define sys_sem_wait(sem) sys_arch_sem_wait(sem, 0) +#ifndef sys_sem_valid +/** Check if a semaphore is valid/allocated: return 1 for valid, 0 for invalid */ +int sys_sem_valid(sys_sem_t *sem); +#endif +#ifndef sys_sem_set_invalid +/** Set a semaphore invalid so that sys_sem_valid returns 0 */ +void sys_sem_set_invalid(sys_sem_t *sem); +#endif +#ifndef sys_sem_valid_val +/** Same as sys_sem_valid() but taking a value, not a pointer */ +#define sys_sem_valid_val(sem) sys_sem_valid(&(sem)) +#endif +#ifndef sys_sem_set_invalid_val +/** Same as sys_sem_set_invalid() but taking a value, not a pointer */ +#define sys_sem_set_invalid_val(sem) sys_sem_set_invalid(&(sem)) +#endif + +/* Time functions. */ +#ifndef sys_msleep +void sys_msleep(u32_t ms); /* only has a (close to) 1 ms resolution. */ +#endif + +/* Mailbox functions. */ + +/** Create a new mbox of specified size + * @param mbox pointer to the mbox to create + * @param size (minimum) number of messages in this mbox + * @return ERR_OK if successful, another err_t otherwise */ +err_t sys_mbox_new(sys_mbox_t *mbox, int size); +/** Post a message to an mbox - may not fail + * -> blocks if full, only used from tasks not from ISR + * @param mbox mbox to posts the message + * @param msg message to post (ATTENTION: can be NULL) */ +void sys_mbox_post(sys_mbox_t *mbox, void *msg); +/** Try to post a message to an mbox - may fail if full or ISR + * @param mbox mbox to posts the message + * @param msg message to post (ATTENTION: can be NULL) */ +err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg); +/** Wait for a new message to arrive in the mbox + * @param mbox mbox to get a message from + * @param msg pointer where the message is stored + * @param timeout maximum time (in milliseconds) to wait for a message (0 = wait forever) + * @return time (in milliseconds) waited for a message, may be 0 if not waited + or SYS_ARCH_TIMEOUT on timeout + * The returned time has to be accurate to prevent timer jitter! */ +u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout); +/* Allow port to override with a macro, e.g. special timeout for sys_arch_mbox_fetch() */ +#ifndef sys_arch_mbox_tryfetch +/** Wait for a new message to arrive in the mbox + * @param mbox mbox to get a message from + * @param msg pointer where the message is stored + * @return 0 (milliseconds) if a message has been received + * or SYS_MBOX_EMPTY if the mailbox is empty */ +u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg); +#endif +/** For now, we map straight to sys_arch implementation. */ +#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg) +/** Delete an mbox + * @param mbox mbox to delete */ +void sys_mbox_free(sys_mbox_t *mbox); +#define sys_mbox_fetch(mbox, msg) sys_arch_mbox_fetch(mbox, msg, 0) +#ifndef sys_mbox_valid +/** Check if an mbox is valid/allocated: return 1 for valid, 0 for invalid */ +int sys_mbox_valid(sys_mbox_t *mbox); +#endif +#ifndef sys_mbox_set_invalid +/** Set an mbox invalid so that sys_mbox_valid returns 0 */ +void sys_mbox_set_invalid(sys_mbox_t *mbox); +#endif +#ifndef sys_mbox_valid_val +/** Same as sys_mbox_valid() but taking a value, not a pointer */ +#define sys_mbox_valid_val(mbox) sys_mbox_valid(&(mbox)) +#endif +#ifndef sys_mbox_set_invalid_val +/** Same as sys_mbox_set_invalid() but taking a value, not a pointer */ +#define sys_mbox_set_invalid_val(mbox) sys_mbox_set_invalid(&(mbox)) +#endif + + +/** The only thread function: + * Creates a new thread + * ATTENTION: although this function returns a value, it MUST NOT FAIL (ports have to assert this!) + * @param name human-readable name for the thread (used for debugging purposes) + * @param thread thread-function + * @param arg parameter passed to 'thread' + * @param stacksize stack size in bytes for the new thread (may be ignored by ports) + * @param prio priority of the new thread (may be ignored by ports) */ +sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio); + +#endif /* NO_SYS */ + +/* sys_init() must be called before anything else. */ +void sys_init(void); + +#ifndef sys_jiffies +/** Ticks/jiffies since power up. */ +u32_t sys_jiffies(void); +#endif + +/** Returns the current time in milliseconds, + * may be the same as sys_jiffies or at least based on it. */ +u32_t sys_now(void); + +/* Critical Region Protection */ +/* These functions must be implemented in the sys_arch.c file. + In some implementations they can provide a more light-weight protection + mechanism than using semaphores. Otherwise semaphores can be used for + implementation */ +#ifndef SYS_ARCH_PROTECT +/** SYS_LIGHTWEIGHT_PROT + * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection + * for certain critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#if SYS_LIGHTWEIGHT_PROT + +/** SYS_ARCH_DECL_PROTECT + * declare a protection variable. This macro will default to defining a variable of + * type sys_prot_t. If a particular port needs a different implementation, then + * this macro may be defined in sys_arch.h. + */ +#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev +/** SYS_ARCH_PROTECT + * Perform a "fast" protect. This could be implemented by + * disabling interrupts for an embedded system or by using a semaphore or + * mutex. The implementation should allow calling SYS_ARCH_PROTECT when + * already protected. The old protection level is returned in the variable + * "lev". This macro will default to calling the sys_arch_protect() function + * which should be implemented in sys_arch.c. If a particular port needs a + * different implementation, then this macro may be defined in sys_arch.h + */ +#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect() +/** SYS_ARCH_UNPROTECT + * Perform a "fast" set of the protection level to "lev". This could be + * implemented by setting the interrupt level to "lev" within the MACRO or by + * using a semaphore or mutex. This macro will default to calling the + * sys_arch_unprotect() function which should be implemented in + * sys_arch.c. If a particular port needs a different implementation, then + * this macro may be defined in sys_arch.h + */ +#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev) +sys_prot_t sys_arch_protect(void); +void sys_arch_unprotect(sys_prot_t pval); + +#else + +#define SYS_ARCH_DECL_PROTECT(lev) +#define SYS_ARCH_PROTECT(lev) +#define SYS_ARCH_UNPROTECT(lev) + +#endif /* SYS_LIGHTWEIGHT_PROT */ + +#endif /* SYS_ARCH_PROTECT */ + +/* + * Macros to set/get and increase/decrease variables in a thread-safe way. + * Use these for accessing variable that are used from more than one thread. + */ + +#ifndef SYS_ARCH_INC +#define SYS_ARCH_INC(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var += val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_INC */ + +#ifndef SYS_ARCH_DEC +#define SYS_ARCH_DEC(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var -= val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_DEC */ + +#ifndef SYS_ARCH_GET +#define SYS_ARCH_GET(var, ret) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + ret = var; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_GET */ + +#ifndef SYS_ARCH_SET +#define SYS_ARCH_SET(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var = val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_SET */ + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_SYS_H */ diff --git a/tools/sdk/include/lwip/lwip/tcp.h b/tools/sdk/include/lwip/lwip/tcp.h new file mode 100755 index 00000000..d52040f9 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/tcp.h @@ -0,0 +1,411 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_TCP_H +#define LWIP_HDR_TCP_H + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/ip.h" +#include "lwip/icmp.h" +#include "lwip/err.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct tcp_pcb; + +/** Function prototype for tcp accept callback functions. Called when a new + * connection can be accepted on a listening pcb. + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param newpcb The new connection pcb + * @param err An error code if there has been an error accepting. + * Only return ERR_ABRT if you have called tcp_abort from within the + * callback function! + */ +typedef err_t (*tcp_accept_fn)(void *arg, struct tcp_pcb *newpcb, err_t err); + +/** Function prototype for tcp receive callback functions. Called when data has + * been received. + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param tpcb The connection pcb which received data + * @param p The received data (or NULL when the connection has been closed!) + * @param err An error code if there has been an error receiving + * Only return ERR_ABRT if you have called tcp_abort from within the + * callback function! + */ +typedef err_t (*tcp_recv_fn)(void *arg, struct tcp_pcb *tpcb, + struct pbuf *p, err_t err); + +/** Function prototype for tcp sent callback functions. Called when sent data has + * been acknowledged by the remote side. Use it to free corresponding resources. + * This also means that the pcb has now space available to send new data. + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param tpcb The connection pcb for which data has been acknowledged + * @param len The amount of bytes acknowledged + * @return ERR_OK: try to send some data by calling tcp_output + * Only return ERR_ABRT if you have called tcp_abort from within the + * callback function! + */ +typedef err_t (*tcp_sent_fn)(void *arg, struct tcp_pcb *tpcb, + u16_t len); + +/** Function prototype for tcp poll callback functions. Called periodically as + * specified by @see tcp_poll. + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param tpcb tcp pcb + * @return ERR_OK: try to send some data by calling tcp_output + * Only return ERR_ABRT if you have called tcp_abort from within the + * callback function! + */ +typedef err_t (*tcp_poll_fn)(void *arg, struct tcp_pcb *tpcb); + +/** Function prototype for tcp error callback functions. Called when the pcb + * receives a RST or is unexpectedly closed for any other reason. + * + * @note The corresponding pcb is already freed when this callback is called! + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param err Error code to indicate why the pcb has been closed + * ERR_ABRT: aborted through tcp_abort or by a TCP timer + * ERR_RST: the connection was reset by the remote host + */ +typedef void (*tcp_err_fn)(void *arg, err_t err); + +/** Function prototype for tcp connected callback functions. Called when a pcb + * is connected to the remote side after initiating a connection attempt by + * calling tcp_connect(). + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param tpcb The connection pcb which is connected + * @param err An unused error code, always ERR_OK currently ;-) TODO! + * Only return ERR_ABRT if you have called tcp_abort from within the + * callback function! + * + * @note When a connection attempt fails, the error callback is currently called! + */ +typedef err_t (*tcp_connected_fn)(void *arg, struct tcp_pcb *tpcb, err_t err); + +#if LWIP_WND_SCALE +#define RCV_WND_SCALE(pcb, wnd) (((wnd) >> (pcb)->rcv_scale)) +#define SND_WND_SCALE(pcb, wnd) (((wnd) << (pcb)->snd_scale)) +#define TCPWND16(x) ((u16_t)LWIP_MIN((x), 0xFFFF)) +#define TCP_WND_MAX(pcb) ((tcpwnd_size_t)(((pcb)->flags & TF_WND_SCALE) ? TCP_WND : TCPWND16(TCP_WND))) +typedef u32_t tcpwnd_size_t; +typedef u16_t tcpflags_t; +#else +#define RCV_WND_SCALE(pcb, wnd) (wnd) +#define SND_WND_SCALE(pcb, wnd) (wnd) +#define TCPWND16(x) (x) +#define TCP_WND_MAX(pcb) TCP_WND +typedef u16_t tcpwnd_size_t; +typedef u8_t tcpflags_t; +#endif + +enum tcp_state { + CLOSED = 0, + LISTEN = 1, + SYN_SENT = 2, + SYN_RCVD = 3, + ESTABLISHED = 4, + FIN_WAIT_1 = 5, + FIN_WAIT_2 = 6, + CLOSE_WAIT = 7, + CLOSING = 8, + LAST_ACK = 9, + TIME_WAIT = 10 +}; + +#if LWIP_CALLBACK_API + /* Function to call when a listener has been connected. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb a new tcp_pcb that now is connected + * @param err an error argument (TODO: that is current always ERR_OK?) + * @return ERR_OK: accept the new connection, + * any other err_t aborts the new connection + */ +#define DEF_ACCEPT_CALLBACK tcp_accept_fn accept; +#else /* LWIP_CALLBACK_API */ +#define DEF_ACCEPT_CALLBACK +#endif /* LWIP_CALLBACK_API */ + +/** + * members common to struct tcp_pcb and struct tcp_listen_pcb + */ +#define TCP_PCB_COMMON(type) \ + type *next; /* for the linked list */ \ + void *callback_arg; \ + /* the accept callback for listen- and normal pcbs, if LWIP_CALLBACK_API */ \ + DEF_ACCEPT_CALLBACK \ + enum tcp_state state; /* TCP state */ \ + u8_t prio; \ + /* ports are in host byte order */ \ + u16_t local_port + + +/* the TCP protocol control block */ +struct tcp_pcb { +/** common PCB members */ + IP_PCB; +/** protocol specific PCB members */ + TCP_PCB_COMMON(struct tcp_pcb); + + /* ports are in host byte order */ + u16_t remote_port; + + tcpflags_t flags; +#define TF_ACK_DELAY 0x01U /* Delayed ACK. */ +#define TF_ACK_NOW 0x02U /* Immediate ACK. */ +#define TF_INFR 0x04U /* In fast recovery. */ +#define TF_TIMESTAMP 0x08U /* Timestamp option enabled */ +#define TF_RXCLOSED 0x10U /* rx closed by tcp_shutdown */ +#define TF_FIN 0x20U /* Connection was closed locally (FIN segment enqueued). */ +#define TF_NODELAY 0x40U /* Disable Nagle algorithm */ +#define TF_NAGLEMEMERR 0x80U /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */ +#if LWIP_WND_SCALE +#define TF_WND_SCALE 0x0100U /* Window Scale option enabled */ +#endif + + /* the rest of the fields are in host byte order + as we have to do some math with them */ + + /* Timers */ + u8_t polltmr, pollinterval; + u8_t last_timer; + u32_t tmr; + + /* receiver variables */ + u32_t rcv_nxt; /* next seqno expected */ + tcpwnd_size_t rcv_wnd; /* receiver window available */ + tcpwnd_size_t rcv_ann_wnd; /* receiver window to announce */ + u32_t rcv_ann_right_edge; /* announced right edge of window */ + + /* Retransmission timer. */ + s16_t rtime; + + u16_t mss; /* maximum segment size */ + + /* RTT (round trip time) estimation variables */ + u32_t rttest; /* RTT estimate in 500ms ticks */ + u32_t rtseq; /* sequence number being timed */ + s16_t sa, sv; /* @todo document this */ + + s16_t rto; /* retransmission time-out */ + u8_t nrtx; /* number of retransmissions */ + + /* fast retransmit/recovery */ + u8_t dupacks; + u32_t lastack; /* Highest acknowledged seqno. */ + + /* congestion avoidance/control variables */ + tcpwnd_size_t cwnd; + tcpwnd_size_t ssthresh; + + /* sender variables */ + u32_t snd_nxt; /* next new seqno to be sent */ + u32_t snd_wl1, snd_wl2; /* Sequence and acknowledgement numbers of last + window update. */ + u32_t snd_lbb; /* Sequence number of next byte to be buffered. */ + tcpwnd_size_t snd_wnd; /* sender window */ + tcpwnd_size_t snd_wnd_max; /* the maximum sender window announced by the remote host */ + + tcpwnd_size_t acked; + + tcpwnd_size_t snd_buf; /* Available buffer space for sending (in bytes). */ +#define TCP_SNDQUEUELEN_OVERFLOW (0xffffU-3) + u16_t snd_queuelen; /* Number of pbufs currently in the send buffer. */ + +#if TCP_OVERSIZE + /* Extra bytes available at the end of the last pbuf in unsent. */ + u16_t unsent_oversize; +#endif /* TCP_OVERSIZE */ + + /* These are ordered by sequence number: */ + struct tcp_seg *unsent; /* Unsent (queued) segments. */ + struct tcp_seg *unacked; /* Sent but unacknowledged segments. */ +#if TCP_QUEUE_OOSEQ + struct tcp_seg *ooseq; /* Received out of sequence segments. */ +#endif /* TCP_QUEUE_OOSEQ */ + + struct pbuf *refused_data; /* Data previously received but not yet taken by upper layer */ + +#if LWIP_CALLBACK_API + /* Function to be called when more send buffer space is available. */ + tcp_sent_fn sent; + /* Function to be called when (in-sequence) data has arrived. */ + tcp_recv_fn recv; + /* Function to be called when a connection has been set up. */ + tcp_connected_fn connected; + /* Function which is called periodically. */ + tcp_poll_fn poll; + /* Function to be called whenever a fatal error occurs. */ + tcp_err_fn errf; +#endif /* LWIP_CALLBACK_API */ + +#if LWIP_TCP_TIMESTAMPS + u32_t ts_lastacksent; + u32_t ts_recent; +#endif /* LWIP_TCP_TIMESTAMPS */ + + /* idle time before KEEPALIVE is sent */ + u32_t keep_idle; +#if LWIP_TCP_KEEPALIVE + u32_t keep_intvl; + u32_t keep_cnt; +#endif /* LWIP_TCP_KEEPALIVE */ + + /* Persist timer counter */ + u8_t persist_cnt; + /* Persist timer back-off */ + u8_t persist_backoff; + + /* KEEPALIVE counter */ + u8_t keep_cnt_sent; + +#if LWIP_WND_SCALE + u8_t snd_scale; + u8_t rcv_scale; +#endif +}; + +struct tcp_pcb_listen { +/* Common members of all PCB types */ + IP_PCB; +/* Protocol specific PCB members */ + TCP_PCB_COMMON(struct tcp_pcb_listen); + +#if TCP_LISTEN_BACKLOG + u8_t backlog; + u8_t accepts_pending; +#endif /* TCP_LISTEN_BACKLOG */ +}; + +#if LWIP_EVENT_API + +enum lwip_event { + LWIP_EVENT_ACCEPT, + LWIP_EVENT_SENT, + LWIP_EVENT_RECV, + LWIP_EVENT_CONNECTED, + LWIP_EVENT_POLL, + LWIP_EVENT_ERR +}; + +err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb, + enum lwip_event, + struct pbuf *p, + u16_t size, + err_t err); + +#endif /* LWIP_EVENT_API */ + +/* Application program's interface: */ +struct tcp_pcb * tcp_new (void); +struct tcp_pcb * tcp_new_ip_type (u8_t type); + +void tcp_arg (struct tcp_pcb *pcb, void *arg); +void tcp_accept (struct tcp_pcb *pcb, tcp_accept_fn accept); +void tcp_recv (struct tcp_pcb *pcb, tcp_recv_fn recv); +void tcp_sent (struct tcp_pcb *pcb, tcp_sent_fn sent); +void tcp_poll (struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval); +void tcp_err (struct tcp_pcb *pcb, tcp_err_fn err); + +#define tcp_mss(pcb) (((pcb)->flags & TF_TIMESTAMP) ? ((pcb)->mss - 12) : (pcb)->mss) +#define tcp_sndbuf(pcb) (TCPWND16((pcb)->snd_buf)) +#define tcp_sndqueuelen(pcb) ((pcb)->snd_queuelen) +#define tcp_nagle_disable(pcb) ((pcb)->flags |= TF_NODELAY) +#define tcp_nagle_enable(pcb) ((pcb)->flags = (tcpflags_t)((pcb)->flags & ~TF_NODELAY)) +#define tcp_nagle_disabled(pcb) (((pcb)->flags & TF_NODELAY) != 0) + +#if TCP_LISTEN_BACKLOG +#define tcp_accepted(pcb) do { \ + LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", pcb->state == LISTEN); \ + (((struct tcp_pcb_listen *)(pcb))->accepts_pending--); } while(0) +#define tcp_backlog_set(pcb, new_backlog) do { \ + LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", (pcb)->state == LISTEN); \ + ((struct tcp_pcb_listen *)(pcb))->backlog = ((new_backlog) ? (new_backlog) : 1); } while(0) +#else /* TCP_LISTEN_BACKLOG */ +#define tcp_accepted(pcb) LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", \ + (pcb)->state == LISTEN) +#endif /* TCP_LISTEN_BACKLOG */ + +void tcp_recved (struct tcp_pcb *pcb, u16_t len); +err_t tcp_bind (struct tcp_pcb *pcb, const ip_addr_t *ipaddr, + u16_t port); +err_t tcp_connect (struct tcp_pcb *pcb, const ip_addr_t *ipaddr, + u16_t port, tcp_connected_fn connected); + +struct tcp_pcb * tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog); +#define tcp_listen(pcb) tcp_listen_with_backlog(pcb, TCP_DEFAULT_LISTEN_BACKLOG) + +void tcp_abort (struct tcp_pcb *pcb); +err_t tcp_close (struct tcp_pcb *pcb); +err_t tcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx); + +/* Flags for "apiflags" parameter in tcp_write */ +#define TCP_WRITE_FLAG_COPY 0x01 +#define TCP_WRITE_FLAG_MORE 0x02 + +err_t tcp_write (struct tcp_pcb *pcb, const void *dataptr, u16_t len, + u8_t apiflags); + +void tcp_setprio (struct tcp_pcb *pcb, u8_t prio); + +#define TCP_PRIO_MIN 1 +#define TCP_PRIO_NORMAL 64 +#define TCP_PRIO_MAX 127 + +err_t tcp_output (struct tcp_pcb *pcb); + + +const char* tcp_debug_state_str(enum tcp_state s); + +/* for compatibility with older implementation */ +#define tcp_new_ip6() tcp_new_ip_type(IPADDR_TYPE_V6) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_TCP */ + +#endif /* LWIP_HDR_TCP_H */ diff --git a/tools/sdk/include/lwip/lwip/tcpip.h b/tools/sdk/include/lwip/lwip/tcpip.h new file mode 100755 index 00000000..c1235865 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/tcpip.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_TCPIP_H +#define LWIP_HDR_TCPIP_H + +#include "lwip/opt.h" + +#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/err.h" +#include "lwip/timers.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct pbuf; +struct netif; + +/** Function prototype for the init_done function passed to tcpip_init */ +typedef void (*tcpip_init_done_fn)(void *arg); +/** Function prototype for functions passed to tcpip_callback() */ +typedef void (*tcpip_callback_fn)(void *ctx); + +/* Forward declarations */ +struct tcpip_callback_msg; + +void tcpip_init(tcpip_init_done_fn tcpip_init_done, void *arg); + +err_t tcpip_inpkt(struct pbuf *p, struct netif *inp, netif_input_fn input_fn); +err_t tcpip_input(struct pbuf *p, struct netif *inp); + +err_t tcpip_callback_with_block(tcpip_callback_fn function, void *ctx, u8_t block); +#define tcpip_callback(f, ctx) tcpip_callback_with_block(f, ctx, 1) + +struct tcpip_callback_msg* tcpip_callbackmsg_new(tcpip_callback_fn function, void *ctx); +void tcpip_callbackmsg_delete(struct tcpip_callback_msg* msg); +err_t tcpip_trycallback(struct tcpip_callback_msg* msg); + +/* free pbufs or heap memory from another context without blocking */ +err_t pbuf_free_callback(struct pbuf *p); +err_t mem_free_callback(void *m); + +#if LWIP_TCPIP_TIMEOUT +err_t tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg); +err_t tcpip_untimeout(sys_timeout_handler h, void *arg); +#endif /* LWIP_TCPIP_TIMEOUT */ + +#ifdef __cplusplus +} +#endif + +#endif /* !NO_SYS */ + +#endif /* LWIP_HDR_TCPIP_H */ diff --git a/tools/sdk/include/lwip/lwip/timers.h b/tools/sdk/include/lwip/lwip/timers.h new file mode 100755 index 00000000..d735392d --- /dev/null +++ b/tools/sdk/include/lwip/lwip/timers.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_TIMERS_H +#define LWIP_HDR_TIMERS_H + +#include "lwip/opt.h" + +/* Timers are not supported when NO_SYS==1 and NO_SYS_NO_TIMERS==1 */ +#define LWIP_TIMERS (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS)) + +#if LWIP_TIMERS + +#include "lwip/err.h" +#if !NO_SYS +#include "lwip/sys.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef LWIP_DEBUG_TIMERNAMES +#ifdef LWIP_DEBUG +#define LWIP_DEBUG_TIMERNAMES SYS_DEBUG +#else /* LWIP_DEBUG */ +#define LWIP_DEBUG_TIMERNAMES 0 +#endif /* LWIP_DEBUG*/ +#endif + +/** Function prototype for a timeout callback function. Register such a function + * using sys_timeout(). + * + * @param arg Additional argument to pass to the function - set up by sys_timeout() + */ +typedef void (* sys_timeout_handler)(void *arg); + +struct sys_timeo { + struct sys_timeo *next; + u32_t time; + sys_timeout_handler h; + void *arg; +#if LWIP_DEBUG_TIMERNAMES + const char* handler_name; +#endif /* LWIP_DEBUG_TIMERNAMES */ +}; + +void sys_timeouts_init(void); + +#if LWIP_DEBUG_TIMERNAMES +void sys_timeout_debug(u32_t msecs, sys_timeout_handler handler, void *arg, const char* handler_name); +#define sys_timeout(msecs, handler, arg) sys_timeout_debug(msecs, handler, arg, #handler) +#else /* LWIP_DEBUG_TIMERNAMES */ +void sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg); +#endif /* LWIP_DEBUG_TIMERNAMES */ + +void sys_untimeout(sys_timeout_handler handler, void *arg); +#if NO_SYS +void sys_check_timeouts(void); +void sys_restart_timeouts(void); +u32_t sys_timeouts_sleeptime(void); +#else /* NO_SYS */ +void sys_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg); +#endif /* NO_SYS */ + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_TIMERS */ +#endif /* LWIP_HDR_TIMERS_H */ diff --git a/tools/sdk/include/lwip/lwip/udp.h b/tools/sdk/include/lwip/lwip/udp.h new file mode 100755 index 00000000..a370d3f9 --- /dev/null +++ b/tools/sdk/include/lwip/lwip/udp.h @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_UDP_H +#define LWIP_HDR_UDP_H + +#include "lwip/opt.h" + +#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/ip_addr.h" +#include "lwip/ip.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define UDP_HLEN 8 + +/* Fields are (of course) in network byte order. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct udp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dest); /* src/dest UDP ports */ + PACK_STRUCT_FIELD(u16_t len); + PACK_STRUCT_FIELD(u16_t chksum); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define UDP_FLAGS_NOCHKSUM 0x01U +#define UDP_FLAGS_UDPLITE 0x02U +#define UDP_FLAGS_CONNECTED 0x04U +#define UDP_FLAGS_MULTICAST_LOOP 0x08U + +struct udp_pcb; + +/** Function prototype for udp pcb receive callback functions + * addr and port are in same byte order as in the pcb + * The callback is responsible for freeing the pbuf + * if it's not used any more. + * + * ATTENTION: Be aware that 'addr' might point into the pbuf 'p' so freeing this pbuf + * can make 'addr' invalid, too. + * + * @param arg user supplied argument (udp_pcb.recv_arg) + * @param pcb the udp_pcb which received data + * @param p the packet buffer that was received + * @param addr the remote IP address from which the packet was received + * @param port the remote port from which the packet was received + */ +typedef void (*udp_recv_fn)(void *arg, struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *addr, u16_t port); + +struct udp_pcb { +/* Common members of all PCB types */ + IP_PCB; + +/* Protocol specific PCB members */ + + struct udp_pcb *next; + + u8_t flags; + /** ports are in host byte order */ + u16_t local_port, remote_port; + +#if LWIP_MULTICAST_TX_OPTIONS + /** outgoing network interface for multicast packets */ + ip_addr_t multicast_ip; + /** TTL for outgoing multicast packets */ + u8_t mcast_ttl; +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#if LWIP_UDPLITE + /** used for UDP_LITE only */ + u16_t chksum_len_rx, chksum_len_tx; +#endif /* LWIP_UDPLITE */ + + /** receive callback function */ + udp_recv_fn recv; + /** user-supplied argument for the recv callback */ + void *recv_arg; +}; +/* udp_pcbs export for external reference (e.g. SNMP agent) */ +extern struct udp_pcb *udp_pcbs; + +/* The following functions is the application layer interface to the + UDP code. */ +struct udp_pcb * udp_new (void); +struct udp_pcb * udp_new_ip_type(u8_t type); +void udp_remove (struct udp_pcb *pcb); +err_t udp_bind (struct udp_pcb *pcb, const ip_addr_t *ipaddr, + u16_t port); +err_t udp_connect (struct udp_pcb *pcb, const ip_addr_t *ipaddr, + u16_t port); +void udp_disconnect (struct udp_pcb *pcb); +void udp_recv (struct udp_pcb *pcb, udp_recv_fn recv, + void *recv_arg); +err_t udp_sendto_if (struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, + struct netif *netif); +err_t udp_sendto_if_src(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, + struct netif *netif, const ip_addr_t *src_ip); +err_t udp_sendto (struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port); +err_t udp_send (struct udp_pcb *pcb, struct pbuf *p); + +#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP +err_t udp_sendto_if_chksum(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, + struct netif *netif, u8_t have_chksum, + u16_t chksum); +err_t udp_sendto_chksum(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, + u8_t have_chksum, u16_t chksum); +err_t udp_send_chksum(struct udp_pcb *pcb, struct pbuf *p, + u8_t have_chksum, u16_t chksum); +err_t udp_sendto_if_src_chksum(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif, + u8_t have_chksum, u16_t chksum, const ip_addr_t *src_ip); +#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ + +#define udp_flags(pcb) ((pcb)->flags) +#define udp_setflags(pcb, f) ((pcb)->flags = (f)) + +/* The following functions are the lower layer interface to UDP. */ +void udp_input (struct pbuf *p, struct netif *inp); + +void udp_init (void); + +/* for compatibility with older implementation */ +#define udp_new_ip6() udp_new_ip_type(IPADDR_TYPE_V6) + +#if LWIP_MULTICAST_TX_OPTIONS +#define udp_set_multicast_netif_addr(pcb, ip4addr) ip_addr_copy_from_ip4((pcb)->multicast_ip, *(ip4addr)) +#define udp_get_multicast_netif_addr(pcb) ip_2_ip4(&(pcb)->multicast_ip) +#define udp_set_multicast_ttl(pcb, value) do { (pcb)->mcast_ttl = value; } while(0) +#define udp_get_multicast_ttl(pcb) ((pcb)->mcast_ttl) +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#if UDP_DEBUG +void udp_debug_print(struct udp_hdr *udphdr); +#else +#define udp_debug_print(udphdr) +#endif + +#if LWIP_IPV4 +void udp_netif_ipv4_addr_changed(const ip4_addr_t* old_addr, const ip4_addr_t* new_addr); +#endif /* LWIP_IPV4 */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_UDP */ + +#endif /* LWIP_HDR_UDP_H */ diff --git a/tools/sdk/include/lwip/lwipopts.h b/tools/sdk/include/lwip/lwipopts.h new file mode 100755 index 00000000..29506c0b --- /dev/null +++ b/tools/sdk/include/lwip/lwipopts.h @@ -0,0 +1,531 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +#include +#include "esp_task.h" +#include "sdkconfig.h" + +/* Enable all Espressif-only options */ +#define LWIP_ESP8266 + +/* + ----------------------------------------------- + ---------- Platform specific locking ---------- + ----------------------------------------------- +*/ +/** + * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain + * critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#define SYS_LIGHTWEIGHT_PROT 1 + +/** + * MEMCPY: override this if you have a faster implementation at hand than the + * one included in your C library + */ +#define MEMCPY(dst,src,len) memcpy(dst,src,len) + +/** + * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a + * call to memcpy() if the length is known at compile time and is small. + */ +#define SMEMCPY(dst,src,len) memcpy(dst,src,len) + +extern unsigned long os_random(void); +#define LWIP_RAND rand +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library + * instead of the lwip internal allocator. Can save code size if you + * already use it. + */ +#define MEM_LIBC_MALLOC 1 + +/** +* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. +* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution +* speed and usage from interrupts! +*/ +#define MEMP_MEM_MALLOC 1 + +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 + */ +#define MEM_ALIGNMENT 4 + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_PCB 5 + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#define MEMP_NUM_NETCONN 10 + +/* + -------------------------------- + ---------- ARP options ------- + -------------------------------- +*/ +/** + * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address + * resolution. By default, only the most recent packet is queued per IP address. + * This is sufficient for most protocols and mainly reduces TCP connection + * startup time. Set this to 1 if you know your application sends more than one + * packet in a row to an IP address that is not in the ARP cache. + */ +#define ARP_QUEUEING 1 + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#define IP_REASSEMBLY 0 + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#define IP_FRAG 0 + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#define IP_REASS_MAXAGE 3 + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#define IP_REASS_MAX_PBUFS 10 + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#define LWIP_DHCP 1 + + +#define DHCP_MAXRTX 0 //(*(volatile uint32*)0x600011E0) +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/* + ---------------------------------- + ---------- SNMP options ---------- + ---------------------------------- +*/ +/* + ---------------------------------- + ---------- IGMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_IGMP==1: Turn on IGMP module. + */ +#define LWIP_IGMP 1 + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#define LWIP_DNS 1 + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * TCP_WND: The size of a TCP window. This must be at least + * (2 * TCP_MSS) for things to work well + */ +#define PERF 1 +#ifdef PERF +extern unsigned char misc_prof_get_tcpw(void); +extern unsigned char misc_prof_get_tcp_snd_buf(void); +#define TCP_WND (misc_prof_get_tcpw()*TCP_MSS) +#define TCP_SND_BUF (misc_prof_get_tcp_snd_buf()*TCP_MSS) + +#else + +#define TCP_WND (4 * TCP_MSS) +#define TCP_SND_BUF (2 * TCP_MSS) + +#endif + + +/** + * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. + * Define to 0 if your device is low on memory. + */ +#define TCP_QUEUE_OOSEQ 1 + +/* + * LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all + * events (accept, sent, etc) that happen in the system. + * LWIP_CALLBACK_API==1: The PCB callback function is called directly + * for the event. This is the default. +*/ +#define TCP_MSS 1460 + +/** + * TCP_MAXRTX: Maximum number of retransmissions of data segments. + */ +#define TCP_MAXRTX 12 //(*(volatile uint32*)0x600011E8) + +/** + * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. + */ +#define TCP_SYNMAXRTX 6 //(*(volatile uint32*)0x600011E4) + +/** + * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. + */ +#define TCP_LISTEN_BACKLOG 1 + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ + +/* + ------------------------------------------------ + ---------- Network Interfaces options ---------- + ------------------------------------------------ +*/ + +/** + * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname + * field. + */ +#define LWIP_NETIF_HOSTNAME 1 + +/** + * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data + * to be sent into one single pbuf. This is for compatibility with DMA-enabled + * MACs that do not support scatter-gather. + * Beware that this might involve CPU-memcpy before transmitting that would not + * be needed without this flag! Use this only if you need to! + * + * @todo: TCP and IP-frag do not work with this, yet: + */ +#define LWIP_NETIF_TX_SINGLE_PBUF 1 + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ + +/* + ------------------------------------ + ---------- SLIPIF options ---------- + ------------------------------------ +*/ + +/* + ------------------------------------ + ---------- Thread options ---------- + ------------------------------------ +*/ +/** + * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. + */ +#define TCPIP_THREAD_NAME "tiT" + +/** + * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#define TCPIP_THREAD_STACKSIZE ESP_TASK_TCPIP_STACK + +/** + * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#define TCPIP_THREAD_PRIO ESP_TASK_TCPIP_PRIO + +/** + * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when tcpip_init is called. + */ +#define TCPIP_MBOX_SIZE 16 + +/** + * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#define DEFAULT_UDP_RECVMBOX_SIZE 16 + +/** + * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#define DEFAULT_TCP_RECVMBOX_SIZE 16 +//#define DEFAULT_TCP_RECVMBOX_SIZE 6 + +/** + * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when the acceptmbox is created. + */ +#define DEFAULT_ACCEPTMBOX_SIZE 6 + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ +/** + * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!) + * Don't use it if you're not an active lwIP project member + */ +#define LWIP_TCPIP_CORE_LOCKING 0 + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and + * SO_SNDTIMEO processing. + */ +#define LWIP_SO_SNDTIMEO 1 + +/** + * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and + * SO_RCVTIMEO processing. + */ +#define LWIP_SO_RCVTIMEO 1 + +/** + * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT + * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set + * in seconds. (does not require sockets.c, and will affect tcp.c) + */ +#define LWIP_TCP_KEEPALIVE 1 + +/** + * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. + */ +#define LWIP_SO_RCVBUF 1 + +/** + * SO_REUSE==1: Enable SO_REUSEADDR option. + * This option is set via menuconfig. + */ +#define SO_REUSE CONFIG_LWIP_SO_REUSE + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#define LWIP_STATS 0 + +/* + --------------------------------- + ---------- PPP options ---------- + --------------------------------- +*/ + +/* + -------------------------------------- + ---------- Checksum options ---------- + -------------------------------------- +*/ + +/* + --------------------------------------- + ---------- IPv6 options --------------- + --------------------------------------- +*/ +/** + * LWIP_IPV6==1: Enable IPv6 + */ +#define LWIP_IPV6 1 + +/* + --------------------------------------- + ---------- Hook options --------------- + --------------------------------------- +*/ + +/* + --------------------------------------- + ---------- Debugging options ---------- + --------------------------------------- +*/ +/** + * ETHARP_DEBUG: Enable debugging in etharp.c. + */ +#define ETHARP_DEBUG LWIP_DBG_OFF + +/** + * NETIF_DEBUG: Enable debugging in netif.c. + */ +#define NETIF_DEBUG LWIP_DBG_OFF + +/** + * PBUF_DEBUG: Enable debugging in pbuf.c. + */ +#define PBUF_DEBUG LWIP_DBG_OFF + +/** + * API_LIB_DEBUG: Enable debugging in api_lib.c. + */ +#define API_LIB_DEBUG LWIP_DBG_OFF + +/** + * SOCKETS_DEBUG: Enable debugging in sockets.c. + */ +#define SOCKETS_DEBUG LWIP_DBG_OFF + +/** + * ICMP_DEBUG: Enable debugging in icmp.c. + */ +#define ICMP_DEBUG LWIP_DBG_OFF + +/** + * IP_DEBUG: Enable debugging for IP. + */ +#define IP_DEBUG LWIP_DBG_OFF + +/** + * MEMP_DEBUG: Enable debugging in memp.c. + */ +#define MEMP_DEBUG LWIP_DBG_OFF + +/** + * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. + */ +#define TCP_INPUT_DEBUG LWIP_DBG_OFF + +/** + * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. + */ +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF + +/** + * TCPIP_DEBUG: Enable debugging in tcpip.c. + */ +#define TCPIP_DEBUG LWIP_DBG_OFF + +/** + * DHCP_DEBUG: Enable debugging in dhcp.c. + */ +#define DHCP_DEBUG LWIP_DBG_OFF +#define LWIP_DEBUG 0 +#define TCP_DEBUG LWIP_DBG_OFF +#define THREAD_SAFE_DEBUG LWIP_DBG_OFF +#define LWIP_THREAD_SAFE 1 + +#define CHECKSUM_CHECK_UDP 0 +#define CHECKSUM_CHECK_IP 0 + +#define HEAP_HIGHWAT 20*1024 + +#define LWIP_NETCONN_FULLDUPLEX 1 +#define LWIP_NETCONN_SEM_PER_THREAD 1 + + + +#define SOC_SEND_LOG //printf + +#endif /* __LWIPOPTS_H__ */ diff --git a/tools/sdk/include/lwip/netdb.h b/tools/sdk/include/lwip/netdb.h new file mode 100755 index 00000000..12d4c7f5 --- /dev/null +++ b/tools/sdk/include/lwip/netdb.h @@ -0,0 +1,33 @@ +/** + * @file + * This file is a posix wrapper for lwip/netdb.h. + */ + +/* + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/netdb.h" diff --git a/tools/sdk/include/lwip/netif/etharp.h b/tools/sdk/include/lwip/netif/etharp.h new file mode 100755 index 00000000..e745dcc3 --- /dev/null +++ b/tools/sdk/include/lwip/netif/etharp.h @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef LWIP_HDR_NETIF_ETHARP_H +#define LWIP_HDR_NETIF_ETHARP_H + +#include "lwip/opt.h" + +#if LWIP_ARP || LWIP_ETHERNET /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/ip4_addr.h" +#include "lwip/netif.h" +#include "lwip/ip4.h" +#include "netif/ethernet.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_IPV4 && LWIP_ARP /* don't build if not configured for use in lwipopts.h */ + +#ifndef ETHARP_HWADDR_LEN +#define ETHARP_HWADDR_LEN ETH_HWADDR_LEN +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** the ARP message, see RFC 826 ("Packet format") */ +struct etharp_hdr { + PACK_STRUCT_FIELD(u16_t hwtype); + PACK_STRUCT_FIELD(u16_t proto); + PACK_STRUCT_FLD_8(u8_t hwlen); + PACK_STRUCT_FLD_8(u8_t protolen); + PACK_STRUCT_FIELD(u16_t opcode); + PACK_STRUCT_FLD_S(struct eth_addr shwaddr); + PACK_STRUCT_FLD_S(struct ip4_addr2 sipaddr); + PACK_STRUCT_FLD_S(struct eth_addr dhwaddr); + PACK_STRUCT_FLD_S(struct ip4_addr2 dipaddr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_ETHARP_HDR 28 + +#define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR) +#if ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET) +#define SIZEOF_ETHARP_PACKET_TX (SIZEOF_ETHARP_PACKET + SIZEOF_VLAN_HDR) +#else /* ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET) */ +#define SIZEOF_ETHARP_PACKET_TX SIZEOF_ETHARP_PACKET +#endif /* ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET) */ + +/** 1 seconds period */ +#define ARP_TMR_INTERVAL 1000 + +/** ARP message types (opcodes) */ +#define ARP_REQUEST 1 +#define ARP_REPLY 2 + +#if ARP_QUEUEING +/** struct for queueing outgoing packets for unknown address + * defined here to be accessed by memp.h + */ +struct etharp_q_entry { + struct etharp_q_entry *next; + struct pbuf *p; +}; +#endif /* ARP_QUEUEING */ + +#define etharp_init() /* Compatibility define, no init needed. */ +void etharp_tmr(void); +s8_t etharp_find_addr(struct netif *netif, const ip4_addr_t *ipaddr, + struct eth_addr **eth_ret, const ip4_addr_t **ip_ret); +u8_t etharp_get_entry(u8_t i, ip4_addr_t **ipaddr, struct netif **netif, struct eth_addr **eth_ret); +err_t etharp_output(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr); +err_t etharp_query(struct netif *netif, const ip4_addr_t *ipaddr, struct pbuf *q); +err_t etharp_request(struct netif *netif, const ip4_addr_t *ipaddr); +/** For Ethernet network interfaces, we might want to send "gratuitous ARP"; + * this is an ARP packet sent by a node in order to spontaneously cause other + * nodes to update an entry in their ARP cache. + * From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ +#define etharp_gratuitous(netif) etharp_request((netif), netif_ip4_addr(netif)) +void etharp_cleanup_netif(struct netif *netif); + +#if ETHARP_SUPPORT_STATIC_ENTRIES +err_t etharp_add_static_entry(const ip4_addr_t *ipaddr, struct eth_addr *ethaddr); +err_t etharp_remove_static_entry(const ip4_addr_t *ipaddr); +#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ + +#if LWIP_AUTOIP +err_t etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, + const struct eth_addr *ethdst_addr, + const struct eth_addr *hwsrc_addr, const ip4_addr_t *ipsrc_addr, + const struct eth_addr *hwdst_addr, const ip4_addr_t *ipdst_addr, + const u16_t opcode); +#endif /* LWIP_AUTOIP */ + +#endif /* LWIP_IPV4 && LWIP_ARP */ + +void etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_ARP || LWIP_ETHERNET */ + +#endif /* LWIP_HDR_NETIF_ETHARP_H */ diff --git a/tools/sdk/include/lwip/netif/ethernet.h b/tools/sdk/include/lwip/netif/ethernet.h new file mode 100755 index 00000000..17623e4a --- /dev/null +++ b/tools/sdk/include/lwip/netif/ethernet.h @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef LWIP_HDR_NETIF_ETHERNET_H +#define LWIP_HDR_NETIF_ETHERNET_H + +#include "lwip/opt.h" + +#include "lwip/pbuf.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef ETH_HWADDR_LEN +#ifdef ETHARP_HWADDR_LEN +#define ETH_HWADDR_LEN ETHARP_HWADDR_LEN /* compatibility mode */ +#else +#define ETH_HWADDR_LEN 6 +#endif +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct eth_addr { + PACK_STRUCT_FLD_8(u8_t addr[ETH_HWADDR_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** Ethernet header */ +struct eth_hdr { +#if ETH_PAD_SIZE + PACK_STRUCT_FLD_8(u8_t padding[ETH_PAD_SIZE]); +#endif + PACK_STRUCT_FLD_S(struct eth_addr dest); + PACK_STRUCT_FLD_S(struct eth_addr src); + PACK_STRUCT_FIELD(u16_t type); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE) + +#if ETHARP_SUPPORT_VLAN + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** VLAN header inserted between ethernet header and payload + * if 'type' in ethernet header is ETHTYPE_VLAN. + * See IEEE802.Q */ +struct eth_vlan_hdr { + PACK_STRUCT_FIELD(u16_t prio_vid); + PACK_STRUCT_FIELD(u16_t tpid); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_VLAN_HDR 4 +#define VLAN_ID(vlan_hdr) (htons((vlan_hdr)->prio_vid) & 0xFFF) + +#endif /* ETHARP_SUPPORT_VLAN */ + +/* A list of often ethtypes (although lwIP does not use all of them): */ +#define ETHTYPE_IP 0x0800U /* Internet protocol v4 */ +#define ETHTYPE_ARP 0x0806U /* Address resolution protocol */ +#define ETHTYPE_WOL 0x0842U /* Wake on lan */ +#define ETHTYPE_VLAN 0x8100U /* Virtual local area network */ +#define ETHTYPE_IPV6 0x86DDU /* Internet protocol v6 */ +#define ETHTYPE_PPPOEDISC 0x8863U /* PPP Over Ethernet Discovery Stage */ +#define ETHTYPE_PPPOE 0x8864U /* PPP Over Ethernet Session Stage */ +#define ETHTYPE_JUMBO 0x8870U /* Jumbo Frames */ +#define ETHTYPE_PROFINET 0x8892U /* Process field network */ +#define ETHTYPE_ETHERCAT 0x88A4U /* Ethernet for control automation technology */ +#define ETHTYPE_LLDP 0x88CCU /* Link layer discovery protocol */ +#define ETHTYPE_SERCOS 0x88CDU /* Serial real-time communication system */ +#define ETHTYPE_PTP 0x88F7U /* Precision time protocol */ +#define ETHTYPE_QINQ 0x9100U /* Q-in-Q, 802.1ad */ + +/** The 24-bit IANA IPv4-multicast OUI is 01-00-5e: */ +#define LL_IP4_MULTICAST_ADDR_0 0x01 +#define LL_IP4_MULTICAST_ADDR_1 0x00 +#define LL_IP4_MULTICAST_ADDR_2 0x5e + +/** IPv6 multicast uses this prefix */ +#define LL_IP6_MULTICAST_ADDR_0 0x33 +#define LL_IP6_MULTICAST_ADDR_1 0x33 + +/** MEMCPY-like macro to copy to/from struct eth_addr's that are local variables + * or known to be 32-bit aligned within the protocol header. */ +#ifndef ETHADDR32_COPY +#define ETHADDR32_COPY(dst, src) SMEMCPY(dst, src, ETH_HWADDR_LEN) +#endif + +/** MEMCPY-like macro to copy to/from struct eth_addr's that are no local + * variables and known to be 16-bit aligned within the protocol header. */ +#ifndef ETHADDR16_COPY +#define ETHADDR16_COPY(dst, src) SMEMCPY(dst, src, ETH_HWADDR_LEN) +#endif + +#if LWIP_ARP || LWIP_ETHERNET + +/** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) + * to a filter function that returns the correct netif when using multiple + * netifs on one hardware interface where the netif's low-level receive + * routine cannot decide for the correct netif (e.g. when mapping multiple + * IP addresses to one hardware interface). + */ +#ifndef LWIP_ARP_FILTER_NETIF +#define LWIP_ARP_FILTER_NETIF 0 +#endif + +err_t ethernet_input(struct pbuf *p, struct netif *netif); + +#define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETH_HWADDR_LEN) == 0) + +extern const struct eth_addr ethbroadcast, ethzero; + +#endif /* LWIP_ARP || LWIP_ETHERNET */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_NETIF_ETHERNET_H */ diff --git a/tools/sdk/include/lwip/netif/lowpan6.h b/tools/sdk/include/lwip/netif/lowpan6.h new file mode 100755 index 00000000..21552938 --- /dev/null +++ b/tools/sdk/include/lwip/netif/lowpan6.h @@ -0,0 +1,84 @@ +/** + * @file + * + * 6LowPAN output for IPv6. Uses ND tables for link-layer addressing. Fragments packets to 6LowPAN units. + */ + +/* + * Copyright (c) 2015 Inico Technologies Ltd. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_LOWPAN6_H +#define LWIP_HDR_LOWPAN6_H + +#include "netif/lowpan6_opts.h" + +#if LWIP_IPV6 && LWIP_6LOWPAN /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/ip.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** 1 second period */ +#define LOWPAN6_TMR_INTERVAL 1000 + +void lowpan6_tmr(void); + +err_t lowpan6_set_context(u8_t index, const ip6_addr_t * context); +err_t lowpan6_set_short_addr(u8_t addr_high, u8_t addr_low); + +#if LWIP_IPV4 +err_t lowpan4_output(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr); +#endif /* LWIP_IPV4 */ +err_t lowpan6_output(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr); +err_t lowpan6_input(struct pbuf * p, struct netif *netif); +err_t lowpan6_if_init(struct netif *netif); + +/* pan_id in network byte order. */ +err_t lowpan6_set_pan_id(u16_t pan_id); + +err_t tcpip_6lowpan_input(struct pbuf *p, struct netif *inp); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 && LWIP_6LOWPAN */ + +#endif /* LWIP_HDR_LOWPAN6_H */ diff --git a/tools/sdk/include/lwip/netif/lowpan6_opts.h b/tools/sdk/include/lwip/netif/lowpan6_opts.h new file mode 100755 index 00000000..6a769575 --- /dev/null +++ b/tools/sdk/include/lwip/netif/lowpan6_opts.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2015 Inico Technologies Ltd. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_LOWPAN6_OPTS_H +#define LWIP_HDR_LOWPAN6_OPTS_H + +#include "lwip/opt.h" + +#ifndef LWIP_6LOWPAN +#define LWIP_6LOWPAN 0 +#endif + +#ifndef LWIP_6LOWPAN_NUM_CONTEXTS +#define LWIP_6LOWPAN_NUM_CONTEXTS 10 +#endif + +#ifndef LWIP_6LOWPAN_INFER_SHORT_ADDRESS +#define LWIP_6LOWPAN_INFER_SHORT_ADDRESS 1 +#endif + +#ifndef LWIP_6LOWPAN_IPHC +#define LWIP_6LOWPAN_IPHC 1 +#endif + +#ifndef LWIP_6LOWPAN_HW_CRC +#define LWIP_6LOWPAN_HW_CRC 1 +#endif + +#ifndef LOWPAN6_DEBUG +#define LOWPAN6_DEBUG LWIP_DBG_OFF +#endif + +#endif /* LWIP_HDR_LOWPAN6_OPTS_H */ diff --git a/tools/sdk/include/lwip/netif/ppp/ccp.h b/tools/sdk/include/lwip/netif/ppp/ccp.h new file mode 100755 index 00000000..a8eab9c0 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/ccp.h @@ -0,0 +1,156 @@ +/* + * ccp.h - Definitions for PPP Compression Control Protocol. + * + * Copyright (c) 1994-2002 Paul Mackerras. 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. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: ccp.h,v 1.12 2004/11/04 10:02:26 paulus Exp $ + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && CCP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef CCP_H +#define CCP_H + +/* + * CCP codes. + */ + +#define CCP_CONFREQ 1 +#define CCP_CONFACK 2 +#define CCP_TERMREQ 5 +#define CCP_TERMACK 6 +#define CCP_RESETREQ 14 +#define CCP_RESETACK 15 + +/* + * Max # bytes for a CCP option + */ + +#define CCP_MAX_OPTION_LENGTH 32 + +/* + * Parts of a CCP packet. + */ + +#define CCP_CODE(dp) ((dp)[0]) +#define CCP_ID(dp) ((dp)[1]) +#define CCP_LENGTH(dp) (((dp)[2] << 8) + (dp)[3]) +#define CCP_HDRLEN 4 + +#define CCP_OPT_CODE(dp) ((dp)[0]) +#define CCP_OPT_LENGTH(dp) ((dp)[1]) +#define CCP_OPT_MINLEN 2 + +#if BSDCOMPRESS_SUPPORT +/* + * Definitions for BSD-Compress. + */ + +#define CI_BSD_COMPRESS 21 /* config. option for BSD-Compress */ +#define CILEN_BSD_COMPRESS 3 /* length of config. option */ + +/* Macros for handling the 3rd byte of the BSD-Compress config option. */ +#define BSD_NBITS(x) ((x) & 0x1F) /* number of bits requested */ +#define BSD_VERSION(x) ((x) >> 5) /* version of option format */ +#define BSD_CURRENT_VERSION 1 /* current version number */ +#define BSD_MAKE_OPT(v, n) (((v) << 5) | (n)) + +#define BSD_MIN_BITS 9 /* smallest code size supported */ +#define BSD_MAX_BITS 15 /* largest code size supported */ +#endif /* BSDCOMPRESS_SUPPORT */ + +#if DEFLATE_SUPPORT +/* + * Definitions for Deflate. + */ + +#define CI_DEFLATE 26 /* config option for Deflate */ +#define CI_DEFLATE_DRAFT 24 /* value used in original draft RFC */ +#define CILEN_DEFLATE 4 /* length of its config option */ + +#define DEFLATE_MIN_SIZE 9 +#define DEFLATE_MAX_SIZE 15 +#define DEFLATE_METHOD_VAL 8 +#define DEFLATE_SIZE(x) (((x) >> 4) + 8) +#define DEFLATE_METHOD(x) ((x) & 0x0F) +#define DEFLATE_MAKE_OPT(w) ((((w) - 8) << 4) + DEFLATE_METHOD_VAL) +#define DEFLATE_CHK_SEQUENCE 0 +#endif /* DEFLATE_SUPPORT */ + +#if MPPE_SUPPORT +/* + * Definitions for MPPE. + */ + +#define CI_MPPE 18 /* config option for MPPE */ +#define CILEN_MPPE 6 /* length of config option */ +#endif /* MPPE_SUPPORT */ + +#if PREDICTOR_SUPPORT +/* + * Definitions for other, as yet unsupported, compression methods. + */ + +#define CI_PREDICTOR_1 1 /* config option for Predictor-1 */ +#define CILEN_PREDICTOR_1 2 /* length of its config option */ +#define CI_PREDICTOR_2 2 /* config option for Predictor-2 */ +#define CILEN_PREDICTOR_2 2 /* length of its config option */ +#endif /* PREDICTOR_SUPPORT */ + +typedef struct ccp_options { +#if DEFLATE_SUPPORT + unsigned int deflate :1; /* do Deflate? */ + unsigned int deflate_correct :1; /* use correct code for deflate? */ + unsigned int deflate_draft :1; /* use draft RFC code for deflate? */ +#endif /* DEFLATE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + unsigned int bsd_compress :1; /* do BSD Compress? */ +#endif /* BSDCOMPRESS_SUPPORT */ +#if PREDICTOR_SUPPORT + unsigned int predictor_1 :1; /* do Predictor-1? */ + unsigned int predictor_2 :1; /* do Predictor-2? */ +#endif /* PREDICTOR_SUPPORT */ + +#if MPPE_SUPPORT + u8_t mppe; /* MPPE bitfield */ +#endif /* MPPE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + u_short bsd_bits; /* # bits/code for BSD Compress */ +#endif /* BSDCOMPRESS_SUPPORT */ +#if DEFLATE_SUPPORT + u_short deflate_size; /* lg(window size) for Deflate */ +#endif /* DEFLATE_SUPPORT */ + u8_t method; /* code for chosen compression method */ +} ccp_options; + +extern const struct protent ccp_protent; + +void ccp_resetrequest(ppp_pcb *pcb); /* Issue a reset-request. */ + +#endif /* CCP_H */ +#endif /* PPP_SUPPORT && CCP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/chap-md5.h b/tools/sdk/include/lwip/netif/ppp/chap-md5.h new file mode 100755 index 00000000..a05a157d --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/chap-md5.h @@ -0,0 +1,36 @@ +/* + * chap-md5.h - New CHAP/MD5 implementation. + * + * Copyright (c) 2003 Paul Mackerras. 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. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && CHAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +extern const struct chap_digest_type md5_digest; + +#endif /* PPP_SUPPORT && CHAP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/chap-new.h b/tools/sdk/include/lwip/netif/ppp/chap-new.h new file mode 100755 index 00000000..9b7c0487 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/chap-new.h @@ -0,0 +1,192 @@ +/* + * chap-new.c - New CHAP implementation. + * + * Copyright (c) 2003 Paul Mackerras. 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. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && CHAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef CHAP_H +#define CHAP_H + +#include "ppp.h" + +/* + * CHAP packets begin with a standard header with code, id, len (2 bytes). + */ +#define CHAP_HDRLEN 4 + +/* + * Values for the code field. + */ +#define CHAP_CHALLENGE 1 +#define CHAP_RESPONSE 2 +#define CHAP_SUCCESS 3 +#define CHAP_FAILURE 4 + +/* + * CHAP digest codes. + */ +#define CHAP_MD5 5 +#if MSCHAP_SUPPORT +#define CHAP_MICROSOFT 0x80 +#define CHAP_MICROSOFT_V2 0x81 +#endif /* MSCHAP_SUPPORT */ + +/* + * Semi-arbitrary limits on challenge and response fields. + */ +#define MAX_CHALLENGE_LEN 64 +#define MAX_RESPONSE_LEN 64 + +/* + * These limits apply to challenge and response packets we send. + * The +4 is the +1 that we actually need rounded up. + */ +#define CHAL_MAX_PKTLEN (PPP_HDRLEN + CHAP_HDRLEN + 4 + MAX_CHALLENGE_LEN + MAXNAMELEN) +#define RESP_MAX_PKTLEN (PPP_HDRLEN + CHAP_HDRLEN + 4 + MAX_RESPONSE_LEN + MAXNAMELEN) + +/* bitmask of supported algorithms */ +#if MSCHAP_SUPPORT +#define MDTYPE_MICROSOFT_V2 0x1 +#define MDTYPE_MICROSOFT 0x2 +#endif /* MSCHAP_SUPPORT */ +#define MDTYPE_MD5 0x4 +#define MDTYPE_NONE 0 + +#if MSCHAP_SUPPORT +/* Return the digest alg. ID for the most preferred digest type. */ +#define CHAP_DIGEST(mdtype) \ + ((mdtype) & MDTYPE_MD5)? CHAP_MD5: \ + ((mdtype) & MDTYPE_MICROSOFT_V2)? CHAP_MICROSOFT_V2: \ + ((mdtype) & MDTYPE_MICROSOFT)? CHAP_MICROSOFT: \ + 0 +#else /* !MSCHAP_SUPPORT */ +#define CHAP_DIGEST(mdtype) \ + ((mdtype) & MDTYPE_MD5)? CHAP_MD5: \ + 0 +#endif /* MSCHAP_SUPPORT */ + +/* Return the bit flag (lsb set) for our most preferred digest type. */ +#define CHAP_MDTYPE(mdtype) ((mdtype) ^ ((mdtype) - 1)) & (mdtype) + +/* Return the bit flag for a given digest algorithm ID. */ +#if MSCHAP_SUPPORT +#define CHAP_MDTYPE_D(digest) \ + ((digest) == CHAP_MICROSOFT_V2)? MDTYPE_MICROSOFT_V2: \ + ((digest) == CHAP_MICROSOFT)? MDTYPE_MICROSOFT: \ + ((digest) == CHAP_MD5)? MDTYPE_MD5: \ + 0 +#else /* !MSCHAP_SUPPORT */ +#define CHAP_MDTYPE_D(digest) \ + ((digest) == CHAP_MD5)? MDTYPE_MD5: \ + 0 +#endif /* MSCHAP_SUPPORT */ + +/* Can we do the requested digest? */ +#if MSCHAP_SUPPORT +#define CHAP_CANDIGEST(mdtype, digest) \ + ((digest) == CHAP_MICROSOFT_V2)? (mdtype) & MDTYPE_MICROSOFT_V2: \ + ((digest) == CHAP_MICROSOFT)? (mdtype) & MDTYPE_MICROSOFT: \ + ((digest) == CHAP_MD5)? (mdtype) & MDTYPE_MD5: \ + 0 +#else /* !MSCHAP_SUPPORT */ +#define CHAP_CANDIGEST(mdtype, digest) \ + ((digest) == CHAP_MD5)? (mdtype) & MDTYPE_MD5: \ + 0 +#endif /* MSCHAP_SUPPORT */ + +/* + * The code for each digest type has to supply one of these. + */ +struct chap_digest_type { + int code; + +#if PPP_SERVER + /* + * Note: challenge and response arguments below are formatted as + * a length byte followed by the actual challenge/response data. + */ + void (*generate_challenge)(ppp_pcb *pcb, unsigned char *challenge); + int (*verify_response)(ppp_pcb *pcb, int id, const char *name, + const unsigned char *secret, int secret_len, + const unsigned char *challenge, const unsigned char *response, + char *message, int message_space); +#endif /* PPP_SERVER */ + void (*make_response)(ppp_pcb *pcb, unsigned char *response, int id, const char *our_name, + const unsigned char *challenge, const char *secret, int secret_len, + unsigned char *priv); + int (*check_success)(ppp_pcb *pcb, unsigned char *pkt, int len, unsigned char *priv); + void (*handle_failure)(ppp_pcb *pcb, unsigned char *pkt, int len); +}; + +/* + * Each interface is described by chap structure. + */ +#if CHAP_SUPPORT +typedef struct chap_client_state { + u8_t flags; + const char *name; + const struct chap_digest_type *digest; + unsigned char priv[64]; /* private area for digest's use */ +} chap_client_state; + +#if PPP_SERVER +typedef struct chap_server_state { + u8_t flags; + u8_t id; + const char *name; + const struct chap_digest_type *digest; + int challenge_xmits; + int challenge_pktlen; + unsigned char challenge[CHAL_MAX_PKTLEN]; +} chap_server_state; +#endif /* PPP_SERVER */ +#endif /* CHAP_SUPPORT */ + +#if 0 /* UNUSED */ +/* Hook for a plugin to validate CHAP challenge */ +extern int (*chap_verify_hook)(char *name, char *ourname, int id, + const struct chap_digest_type *digest, + unsigned char *challenge, unsigned char *response, + char *message, int message_space); +#endif /* UNUSED */ + +#if PPP_SERVER +/* Called by authentication code to start authenticating the peer. */ +extern void chap_auth_peer(ppp_pcb *pcb, const char *our_name, int digest_code); +#endif /* PPP_SERVER */ + +/* Called by auth. code to start authenticating us to the peer. */ +extern void chap_auth_with_peer(ppp_pcb *pcb, const char *our_name, int digest_code); + +/* Represents the CHAP protocol to the main pppd code */ +extern const struct protent chap_protent; + +#endif /* CHAP_H */ +#endif /* PPP_SUPPORT && CHAP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/chap_ms.h b/tools/sdk/include/lwip/netif/ppp/chap_ms.h new file mode 100755 index 00000000..709bb899 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/chap_ms.h @@ -0,0 +1,44 @@ +/* + * chap_ms.h - Challenge Handshake Authentication Protocol definitions. + * + * Copyright (c) 1995 Eric Rosenquist. 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. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: chap_ms.h,v 1.13 2004/11/15 22:13:26 paulus Exp $ + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && MSCHAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef __CHAPMS_INCLUDE__ + +extern const struct chap_digest_type chapms_digest; +extern const struct chap_digest_type chapms2_digest; + +#define __CHAPMS_INCLUDE__ +#endif /* __CHAPMS_INCLUDE__ */ + +#endif /* PPP_SUPPORT && MSCHAP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/eap.h b/tools/sdk/include/lwip/netif/ppp/eap.h new file mode 100755 index 00000000..7dfd6763 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/eap.h @@ -0,0 +1,169 @@ +/* + * eap.h - Extensible Authentication Protocol for PPP (RFC 2284) + * + * Copyright (c) 2001 by Sun Microsystems, Inc. + * All rights reserved. + * + * Non-exclusive rights to redistribute, modify, translate, and use + * this software in source and binary forms, in whole or in part, is + * hereby granted, provided that the above copyright notice is + * duplicated in any source form, and that neither the name of the + * copyright holder nor the author is used to endorse or promote + * products derived from this software. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * Original version by James Carlson + * + * $Id: eap.h,v 1.2 2003/06/11 23:56:26 paulus Exp $ + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && EAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPP_EAP_H +#define PPP_EAP_H + +#include "ppp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Packet header = Code, id, length. + */ +#define EAP_HEADERLEN 4 + + +/* EAP message codes. */ +#define EAP_REQUEST 1 +#define EAP_RESPONSE 2 +#define EAP_SUCCESS 3 +#define EAP_FAILURE 4 + +/* EAP types */ +#define EAPT_IDENTITY 1 +#define EAPT_NOTIFICATION 2 +#define EAPT_NAK 3 /* (response only) */ +#define EAPT_MD5CHAP 4 +#define EAPT_OTP 5 /* One-Time Password; RFC 1938 */ +#define EAPT_TOKEN 6 /* Generic Token Card */ +/* 7 and 8 are unassigned. */ +#define EAPT_RSA 9 /* RSA Public Key Authentication */ +#define EAPT_DSS 10 /* DSS Unilateral */ +#define EAPT_KEA 11 /* KEA */ +#define EAPT_KEA_VALIDATE 12 /* KEA-VALIDATE */ +#define EAPT_TLS 13 /* EAP-TLS */ +#define EAPT_DEFENDER 14 /* Defender Token (AXENT) */ +#define EAPT_W2K 15 /* Windows 2000 EAP */ +#define EAPT_ARCOT 16 /* Arcot Systems */ +#define EAPT_CISCOWIRELESS 17 /* Cisco Wireless */ +#define EAPT_NOKIACARD 18 /* Nokia IP smart card */ +#define EAPT_SRP 19 /* Secure Remote Password */ +/* 20 is deprecated */ + +/* EAP SRP-SHA1 Subtypes */ +#define EAPSRP_CHALLENGE 1 /* Request 1 - Challenge */ +#define EAPSRP_CKEY 1 /* Response 1 - Client Key */ +#define EAPSRP_SKEY 2 /* Request 2 - Server Key */ +#define EAPSRP_CVALIDATOR 2 /* Response 2 - Client Validator */ +#define EAPSRP_SVALIDATOR 3 /* Request 3 - Server Validator */ +#define EAPSRP_ACK 3 /* Response 3 - final ack */ +#define EAPSRP_LWRECHALLENGE 4 /* Req/resp 4 - Lightweight rechal */ + +#define SRPVAL_EBIT 0x00000001 /* Use shared key for ECP */ + +#define SRP_PSEUDO_ID "pseudo_" +#define SRP_PSEUDO_LEN 7 + +#define MD5_SIGNATURE_SIZE 16 +#define EAP_MIN_CHALLENGE_LENGTH 17 +#define EAP_MAX_CHALLENGE_LENGTH 24 +#define EAP_MIN_MAX_POWER_OF_TWO_CHALLENGE_LENGTH 3 /* 2^3-1 = 7, 17+7 = 24 */ + +#define EAP_STATES \ + "Initial", "Pending", "Closed", "Listen", "Identify", \ + "SRP1", "SRP2", "SRP3", "MD5Chall", "Open", "SRP4", "BadAuth" + +#define eap_client_active(pcb) ((pcb)->eap.es_client.ea_state == eapListen) +#if PPP_SERVER +#define eap_server_active(pcb) \ + ((pcb)->eap.es_server.ea_state >= eapIdentify && \ + (pcb)->eap.es_server.ea_state <= eapMD5Chall) +#endif /* PPP_SERVER */ + +/* + * Complete EAP state for one PPP session. + */ +enum eap_state_code { + eapInitial = 0, /* No EAP authentication yet requested */ + eapPending, /* Waiting for LCP (no timer) */ + eapClosed, /* Authentication not in use */ + eapListen, /* Client ready (and timer running) */ + eapIdentify, /* EAP Identify sent */ + eapSRP1, /* Sent EAP SRP-SHA1 Subtype 1 */ + eapSRP2, /* Sent EAP SRP-SHA1 Subtype 2 */ + eapSRP3, /* Sent EAP SRP-SHA1 Subtype 3 */ + eapMD5Chall, /* Sent MD5-Challenge */ + eapOpen, /* Completed authentication */ + eapSRP4, /* Sent EAP SRP-SHA1 Subtype 4 */ + eapBadAuth /* Failed authentication */ +}; + +struct eap_auth { + const char *ea_name; /* Our name */ + char ea_peer[MAXNAMELEN +1]; /* Peer's name */ + void *ea_session; /* Authentication library linkage */ + u_char *ea_skey; /* Shared encryption key */ + u_short ea_namelen; /* Length of our name */ + u_short ea_peerlen; /* Length of peer's name */ + enum eap_state_code ea_state; + u_char ea_id; /* Current id */ + u_char ea_requests; /* Number of Requests sent/received */ + u_char ea_responses; /* Number of Responses */ + u_char ea_type; /* One of EAPT_* */ + u32_t ea_keyflags; /* SRP shared key usage flags */ +}; + +#ifndef EAP_MAX_CHALLENGE_LENGTH +#define EAP_MAX_CHALLENGE_LENGTH 24 +#endif +typedef struct eap_state { + struct eap_auth es_client; /* Client (authenticatee) data */ +#if PPP_SERVER + struct eap_auth es_server; /* Server (authenticator) data */ +#endif /* PPP_SERVER */ + int es_savedtime; /* Saved timeout */ + int es_rechallenge; /* EAP rechallenge interval */ + int es_lwrechallenge; /* SRP lightweight rechallenge inter */ + u8_t es_usepseudo; /* Use SRP Pseudonym if offered one */ + int es_usedpseudo; /* Set if we already sent PN */ + int es_challen; /* Length of challenge string */ + u_char es_challenge[EAP_MAX_CHALLENGE_LENGTH]; +} eap_state; + +/* + * Timeouts. + */ +#if 0 /* moved to opt.h */ +#define EAP_DEFTIMEOUT 3 /* Timeout (seconds) for rexmit */ +#define EAP_DEFTRANSMITS 10 /* max # times to transmit */ +#define EAP_DEFREQTIME 20 /* Time to wait for peer request */ +#define EAP_DEFALLOWREQ 20 /* max # times to accept requests */ +#endif /* moved to opt.h */ + +void eap_authwithpeer(ppp_pcb *pcb, const char *localname); +void eap_authpeer(ppp_pcb *pcb, const char *localname); + +extern const struct protent eap_protent; + +#ifdef __cplusplus +} +#endif + +#endif /* PPP_EAP_H */ + +#endif /* PPP_SUPPORT && EAP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/ecp.h b/tools/sdk/include/lwip/netif/ppp/ecp.h new file mode 100755 index 00000000..cba6678e --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/ecp.h @@ -0,0 +1,50 @@ +/* + * ecp.h - Definitions for PPP Encryption Control Protocol. + * + * Copyright (c) 2002 Google, 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. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: ecp.h,v 1.2 2003/01/10 07:12:36 fcusack Exp $ + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && ECP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +typedef struct ecp_options { + bool required; /* Is ECP required? */ + unsigned enctype; /* Encryption type */ +} ecp_options; + +extern fsm ecp_fsm[]; +extern ecp_options ecp_wantoptions[]; +extern ecp_options ecp_gotoptions[]; +extern ecp_options ecp_allowoptions[]; +extern ecp_options ecp_hisoptions[]; + +extern const struct protent ecp_protent; + +#endif /* PPP_SUPPORT && ECP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/eui64.h b/tools/sdk/include/lwip/netif/ppp/eui64.h new file mode 100755 index 00000000..dffb5e41 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/eui64.h @@ -0,0 +1,94 @@ +/* + * eui64.h - EUI64 routines for IPv6CP. + * + * Copyright (c) 1999 Tommi Komulainen. 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. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Tommi Komulainen + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: eui64.h,v 1.6 2002/12/04 23:03:32 paulus Exp $ +*/ + +#include "lwip/opt.h" +#if PPP_SUPPORT && PPP_IPV6_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef __EUI64_H__ +#define __EUI64_H__ + +/* + * TODO: + * + * Maybe this should be done by processing struct in6_addr directly... + */ +typedef union +{ + u8_t e8[8]; + u16_t e16[4]; + u32_t e32[2]; +} eui64_t; + +#define eui64_iszero(e) (((e).e32[0] | (e).e32[1]) == 0) +#define eui64_equals(e, o) (((e).e32[0] == (o).e32[0]) && \ + ((e).e32[1] == (o).e32[1])) +#define eui64_zero(e) (e).e32[0] = (e).e32[1] = 0; + +#define eui64_copy(s, d) memcpy(&(d), &(s), sizeof(eui64_t)) + +#define eui64_magic(e) do { \ + (e).e32[0] = magic(); \ + (e).e32[1] = magic(); \ + (e).e8[0] &= ~2; \ + } while (0) +#define eui64_magic_nz(x) do { \ + eui64_magic(x); \ + } while (eui64_iszero(x)) +#define eui64_magic_ne(x, y) do { \ + eui64_magic(x); \ + } while (eui64_equals(x, y)) + +#define eui64_get(ll, cp) do { \ + eui64_copy((*cp), (ll)); \ + (cp) += sizeof(eui64_t); \ + } while (0) + +#define eui64_put(ll, cp) do { \ + eui64_copy((ll), (*cp)); \ + (cp) += sizeof(eui64_t); \ + } while (0) + +#define eui64_set32(e, l) do { \ + (e).e32[0] = 0; \ + (e).e32[1] = htonl(l); \ + } while (0) +#define eui64_setlo32(e, l) eui64_set32(e, l) + +char *eui64_ntoa(eui64_t); /* Returns ascii representation of id */ + +#endif /* __EUI64_H__ */ +#endif /* PPP_SUPPORT && PPP_IPV6_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/fsm.h b/tools/sdk/include/lwip/netif/ppp/fsm.h new file mode 100755 index 00000000..fc0a4b10 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/fsm.h @@ -0,0 +1,175 @@ +/* + * fsm.h - {Link, IP} Control Protocol Finite State Machine definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. 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. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: fsm.h,v 1.10 2004/11/13 02:28:15 paulus Exp $ + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef FSM_H +#define FSM_H + +#include "ppp.h" + +/* + * Packet header = Code, id, length. + */ +#define HEADERLEN 4 + + +/* + * CP (LCP, IPCP, etc.) codes. + */ +#define CONFREQ 1 /* Configuration Request */ +#define CONFACK 2 /* Configuration Ack */ +#define CONFNAK 3 /* Configuration Nak */ +#define CONFREJ 4 /* Configuration Reject */ +#define TERMREQ 5 /* Termination Request */ +#define TERMACK 6 /* Termination Ack */ +#define CODEREJ 7 /* Code Reject */ + + +/* + * Each FSM is described by an fsm structure and fsm callbacks. + */ +typedef struct fsm { + ppp_pcb *pcb; /* PPP Interface */ + const struct fsm_callbacks *callbacks; /* Callback routines */ + const char *term_reason; /* Reason for closing protocol */ + u8_t seen_ack; /* Have received valid Ack/Nak/Rej to Req */ + /* -- This is our only flag, we might use u_int :1 if we have more flags */ + u16_t protocol; /* Data Link Layer Protocol field value */ + u8_t state; /* State */ + u8_t flags; /* Contains option bits */ + u8_t id; /* Current id */ + u8_t reqid; /* Current request id */ + u8_t retransmits; /* Number of retransmissions left */ + u8_t nakloops; /* Number of nak loops since last ack */ + u8_t rnakloops; /* Number of naks received */ + u8_t maxnakloops; /* Maximum number of nak loops tolerated + (necessary because IPCP require a custom large max nak loops value) */ + u8_t term_reason_len; /* Length of term_reason */ +} fsm; + + +typedef struct fsm_callbacks { + void (*resetci) /* Reset our Configuration Information */ + (fsm *); + int (*cilen) /* Length of our Configuration Information */ + (fsm *); + void (*addci) /* Add our Configuration Information */ + (fsm *, u_char *, int *); + int (*ackci) /* ACK our Configuration Information */ + (fsm *, u_char *, int); + int (*nakci) /* NAK our Configuration Information */ + (fsm *, u_char *, int, int); + int (*rejci) /* Reject our Configuration Information */ + (fsm *, u_char *, int); + int (*reqci) /* Request peer's Configuration Information */ + (fsm *, u_char *, int *, int); + void (*up) /* Called when fsm reaches PPP_FSM_OPENED state */ + (fsm *); + void (*down) /* Called when fsm leaves PPP_FSM_OPENED state */ + (fsm *); + void (*starting) /* Called when we want the lower layer */ + (fsm *); + void (*finished) /* Called when we don't want the lower layer */ + (fsm *); + void (*protreject) /* Called when Protocol-Reject received */ + (int); + void (*retransmit) /* Retransmission is necessary */ + (fsm *); + int (*extcode) /* Called when unknown code received */ + (fsm *, int, int, u_char *, int); + const char *proto_name; /* String name for protocol (for messages) */ +} fsm_callbacks; + + +/* + * Link states. + */ +#define PPP_FSM_INITIAL 0 /* Down, hasn't been opened */ +#define PPP_FSM_STARTING 1 /* Down, been opened */ +#define PPP_FSM_CLOSED 2 /* Up, hasn't been opened */ +#define PPP_FSM_STOPPED 3 /* Open, waiting for down event */ +#define PPP_FSM_CLOSING 4 /* Terminating the connection, not open */ +#define PPP_FSM_STOPPING 5 /* Terminating, but open */ +#define PPP_FSM_REQSENT 6 /* We've sent a Config Request */ +#define PPP_FSM_ACKRCVD 7 /* We've received a Config Ack */ +#define PPP_FSM_ACKSENT 8 /* We've sent a Config Ack */ +#define PPP_FSM_OPENED 9 /* Connection available */ + + +/* + * Flags - indicate options controlling FSM operation + */ +#define OPT_PASSIVE 1 /* Don't die if we don't get a response */ +#define OPT_RESTART 2 /* Treat 2nd OPEN as DOWN, UP */ +#define OPT_SILENT 4 /* Wait for peer to speak first */ + + +/* + * Timeouts. + */ +#if 0 /* moved to opt.h */ +#define DEFTIMEOUT 3 /* Timeout time in seconds */ +#define DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ +#define DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ +#define DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ +#endif /* moved to opt.h */ + + +/* + * Prototypes + */ +void fsm_init(fsm *f); +void fsm_lowerup(fsm *f); +void fsm_lowerdown(fsm *f); +void fsm_open(fsm *f); +void fsm_close(fsm *f, const char *reason); +void fsm_input(fsm *f, u_char *inpacket, int l); +void fsm_protreject(fsm *f); +void fsm_sdata(fsm *f, u_char code, u_char id, const u_char *data, int datalen); + + +#endif /* FSM_H */ +#endif /* PPP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/ipcp.h b/tools/sdk/include/lwip/netif/ppp/ipcp.h new file mode 100755 index 00000000..298f8dc6 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/ipcp.h @@ -0,0 +1,126 @@ +/* + * ipcp.h - IP Control Protocol definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. 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. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: ipcp.h,v 1.14 2002/12/04 23:03:32 paulus Exp $ + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && PPP_IPV4_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef IPCP_H +#define IPCP_H + +/* + * Options. + */ +#define CI_ADDRS 1 /* IP Addresses */ +#if VJ_SUPPORT +#define CI_COMPRESSTYPE 2 /* Compression Type */ +#endif /* VJ_SUPPORT */ +#define CI_ADDR 3 + +#if LWIP_DNS +#define CI_MS_DNS1 129 /* Primary DNS value */ +#define CI_MS_DNS2 131 /* Secondary DNS value */ +#endif /* LWIP_DNS */ +#if 0 /* UNUSED - WINS */ +#define CI_MS_WINS1 130 /* Primary WINS value */ +#define CI_MS_WINS2 132 /* Secondary WINS value */ +#endif /* UNUSED - WINS */ + +#if VJ_SUPPORT +#define MAX_STATES 16 /* from slcompress.h */ + +#define IPCP_VJMODE_OLD 1 /* "old" mode (option # = 0x0037) */ +#define IPCP_VJMODE_RFC1172 2 /* "old-rfc"mode (option # = 0x002d) */ +#define IPCP_VJMODE_RFC1332 3 /* "new-rfc"mode (option # = 0x002d, */ + /* maxslot and slot number compression) */ + +#define IPCP_VJ_COMP 0x002d /* current value for VJ compression option*/ +#define IPCP_VJ_COMP_OLD 0x0037 /* "old" (i.e, broken) value for VJ */ + /* compression option*/ +#endif /* VJ_SUPPORT */ + +typedef struct ipcp_options { + unsigned int neg_addr :1; /* Negotiate IP Address? */ + unsigned int old_addrs :1; /* Use old (IP-Addresses) option? */ + unsigned int req_addr :1; /* Ask peer to send IP address? */ +#if 0 /* UNUSED */ + unsigned int default_route :1; /* Assign default route through interface? */ + unsigned int replace_default_route :1; /* Replace default route through interface? */ +#endif /* UNUSED */ +#if 0 /* UNUSED - PROXY ARP */ + unsigned int proxy_arp :1; /* Make proxy ARP entry for peer? */ +#endif /* UNUSED - PROXY ARP */ +#if VJ_SUPPORT + unsigned int neg_vj :1; /* Van Jacobson Compression? */ + unsigned int old_vj :1; /* use old (short) form of VJ option? */ + unsigned int cflag :1; +#endif /* VJ_SUPPORT */ + unsigned int accept_local :1; /* accept peer's value for ouraddr */ + unsigned int accept_remote :1; /* accept peer's value for hisaddr */ +#if LWIP_DNS + unsigned int req_dns1 :1; /* Ask peer to send primary DNS address? */ + unsigned int req_dns2 :1; /* Ask peer to send secondary DNS address? */ +#endif /* LWIP_DNS */ + + u32_t ouraddr, hisaddr; /* Addresses in NETWORK BYTE ORDER */ +#if LWIP_DNS + u32_t dnsaddr[2]; /* Primary and secondary MS DNS entries */ +#endif /* LWIP_DNS */ +#if 0 /* UNUSED - WINS */ + u32_t winsaddr[2]; /* Primary and secondary MS WINS entries */ +#endif /* UNUSED - WINS */ + +#if VJ_SUPPORT + u16_t vj_protocol; /* protocol value to use in VJ option */ + u8_t maxslotindex; /* values for RFC1332 VJ compression neg. */ +#endif /* VJ_SUPPORT */ +} ipcp_options; + +#if 0 /* UNUSED, already defined by lwIP */ +char *ip_ntoa (u32_t); +#endif /* UNUSED, already defined by lwIP */ + +extern const struct protent ipcp_protent; + +#endif /* IPCP_H */ +#endif /* PPP_SUPPORT && PPP_IPV4_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/ipv6cp.h b/tools/sdk/include/lwip/netif/ppp/ipv6cp.h new file mode 100755 index 00000000..540a7d18 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/ipv6cp.h @@ -0,0 +1,183 @@ +/* + * ipv6cp.h - PPP IPV6 Control Protocol. + * + * Copyright (c) 1999 Tommi Komulainen. 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. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Tommi Komulainen + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +/* Original version, based on RFC2023 : + + Copyright (c) 1995, 1996, 1997 Francis.Dupont@inria.fr, INRIA Rocquencourt, + Alain.Durand@imag.fr, IMAG, + Jean-Luc.Richier@imag.fr, IMAG-LSR. + + Copyright (c) 1998, 1999 Francis.Dupont@inria.fr, GIE DYADE, + Alain.Durand@imag.fr, IMAG, + Jean-Luc.Richier@imag.fr, IMAG-LSR. + + Ce travail a été fait au sein du GIE DYADE (Groupement d'Intérêt + Économique ayant pour membres BULL S.A. et l'INRIA). + + Ce logiciel informatique est disponible aux conditions + usuelles dans la recherche, c'est-à-dire qu'il peut + être utilisé, copié, modifié, distribué à l'unique + condition que ce texte soit conservé afin que + l'origine de ce logiciel soit reconnue. + + Le nom de l'Institut National de Recherche en Informatique + et en Automatique (INRIA), de l'IMAG, ou d'une personne morale + ou physique ayant participé à l'élaboration de ce logiciel ne peut + être utilisé sans son accord préalable explicite. + + Ce logiciel est fourni tel quel sans aucune garantie, + support ou responsabilité d'aucune sorte. + Ce logiciel est dérivé de sources d'origine + "University of California at Berkeley" et + "Digital Equipment Corporation" couvertes par des copyrights. + + L'Institut d'Informatique et de Mathématiques Appliquées de Grenoble (IMAG) + est une fédération d'unités mixtes de recherche du CNRS, de l'Institut National + Polytechnique de Grenoble et de l'Université Joseph Fourier regroupant + sept laboratoires dont le laboratoire Logiciels, Systèmes, Réseaux (LSR). + + This work has been done in the context of GIE DYADE (joint R & D venture + between BULL S.A. and INRIA). + + This software is available with usual "research" terms + with the aim of retain credits of the software. + Permission to use, copy, modify and distribute this software for any + purpose and without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies, + and the name of INRIA, IMAG, or any contributor not be used in advertising + or publicity pertaining to this material without the prior explicit + permission. The software is provided "as is" without any + warranties, support or liabilities of any kind. + This software is derived from source code from + "University of California at Berkeley" and + "Digital Equipment Corporation" protected by copyrights. + + Grenoble's Institute of Computer Science and Applied Mathematics (IMAG) + is a federation of seven research units funded by the CNRS, National + Polytechnic Institute of Grenoble and University Joseph Fourier. + The research unit in Software, Systems, Networks (LSR) is member of IMAG. +*/ + +/* + * Derived from : + * + * + * ipcp.h - IP Control Protocol definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. 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. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: ipv6cp.h,v 1.7 2002/12/04 23:03:32 paulus Exp $ + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && PPP_IPV6_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef IPV6CP_H +#define IPV6CP_H + +#include "eui64.h" + +/* + * Options. + */ +#define CI_IFACEID 1 /* Interface Identifier */ +#ifdef IPV6CP_COMP +#define CI_COMPRESSTYPE 2 /* Compression Type */ +#endif /* IPV6CP_COMP */ + +/* No compression types yet defined. + *#define IPV6CP_COMP 0x004f + */ +typedef struct ipv6cp_options { + unsigned int neg_ifaceid :1; /* Negotiate interface identifier? */ + unsigned int req_ifaceid :1; /* Ask peer to send interface identifier? */ + unsigned int accept_local :1; /* accept peer's value for iface id? */ + unsigned int opt_local :1; /* ourtoken set by option */ + unsigned int opt_remote :1; /* histoken set by option */ + unsigned int use_ip :1; /* use IP as interface identifier */ +#if 0 + unsigned int use_persistent :1; /* use uniquely persistent value for address */ +#endif +#ifdef IPV6CP_COMP + unsigned int neg_vj :1; /* Van Jacobson Compression? */ +#endif /* IPV6CP_COMP */ + +#ifdef IPV6CP_COMP + u_short vj_protocol; /* protocol value to use in VJ option */ +#endif /* IPV6CP_COMP */ + eui64_t ourid, hisid; /* Interface identifiers */ +} ipv6cp_options; + +extern const struct protent ipv6cp_protent; + +#endif /* IPV6CP_H */ +#endif /* PPP_SUPPORT && PPP_IPV6_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/lcp.h b/tools/sdk/include/lwip/netif/ppp/lcp.h new file mode 100755 index 00000000..04970699 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/lcp.h @@ -0,0 +1,169 @@ +/* + * lcp.h - Link Control Protocol definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. 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. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: lcp.h,v 1.20 2004/11/14 22:53:42 carlsonj Exp $ + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef LCP_H +#define LCP_H + +#include "ppp.h" + +/* + * Options. + */ +#define CI_VENDOR 0 /* Vendor Specific */ +#define CI_MRU 1 /* Maximum Receive Unit */ +#define CI_ASYNCMAP 2 /* Async Control Character Map */ +#define CI_AUTHTYPE 3 /* Authentication Type */ +#define CI_QUALITY 4 /* Quality Protocol */ +#define CI_MAGICNUMBER 5 /* Magic Number */ +#define CI_PCOMPRESSION 7 /* Protocol Field Compression */ +#define CI_ACCOMPRESSION 8 /* Address/Control Field Compression */ +#define CI_FCSALTERN 9 /* FCS-Alternatives */ +#define CI_SDP 10 /* Self-Describing-Pad */ +#define CI_NUMBERED 11 /* Numbered-Mode */ +#define CI_CALLBACK 13 /* callback */ +#define CI_MRRU 17 /* max reconstructed receive unit; multilink */ +#define CI_SSNHF 18 /* short sequence numbers for multilink */ +#define CI_EPDISC 19 /* endpoint discriminator */ +#define CI_MPPLUS 22 /* Multi-Link-Plus-Procedure */ +#define CI_LDISC 23 /* Link-Discriminator */ +#define CI_LCPAUTH 24 /* LCP Authentication */ +#define CI_COBS 25 /* Consistent Overhead Byte Stuffing */ +#define CI_PREFELIS 26 /* Prefix Elision */ +#define CI_MPHDRFMT 27 /* MP Header Format */ +#define CI_I18N 28 /* Internationalization */ +#define CI_SDL 29 /* Simple Data Link */ + +/* + * LCP-specific packet types (code numbers). + */ +#define PROTREJ 8 /* Protocol Reject */ +#define ECHOREQ 9 /* Echo Request */ +#define ECHOREP 10 /* Echo Reply */ +#define DISCREQ 11 /* Discard Request */ +#define IDENTIF 12 /* Identification */ +#define TIMEREM 13 /* Time Remaining */ + +/* Value used as data for CI_CALLBACK option */ +#define CBCP_OPT 6 /* Use callback control protocol */ + +#if 0 /* moved to opt.h */ +#define DEFMRU 1500 /* Try for this */ +#define MINMRU 128 /* No MRUs below this */ +#define MAXMRU 16384 /* Normally limit MRU to this */ +#endif /* moved to opt.h */ + +/* An endpoint discriminator, used with multilink. */ +#define MAX_ENDP_LEN 20 /* maximum length of discriminator value */ +struct epdisc { + unsigned char class_; /* -- The word "class" is reserved in C++. */ + unsigned char length; + unsigned char value[MAX_ENDP_LEN]; +}; + +/* + * The state of options is described by an lcp_options structure. + */ +typedef struct lcp_options { + unsigned int passive :1; /* Don't die if we don't get a response */ + unsigned int silent :1; /* Wait for the other end to start first */ + unsigned int restart :1; /* Restart vs. exit after close */ + unsigned int neg_mru :1; /* Negotiate the MRU? */ + unsigned int neg_asyncmap :1; /* Negotiate the async map? */ +#if PAP_SUPPORT + unsigned int neg_upap :1; /* Ask for UPAP authentication? */ +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + unsigned int neg_chap :1; /* Ask for CHAP authentication? */ +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + unsigned int neg_eap :1; /* Ask for EAP authentication? */ +#endif /* EAP_SUPPORT */ + unsigned int neg_magicnumber :1; /* Ask for magic number? */ + unsigned int neg_pcompression :1; /* HDLC Protocol Field Compression? */ + unsigned int neg_accompression :1; /* HDLC Address/Control Field Compression? */ +#if LQR_SUPPORT + unsigned int neg_lqr :1; /* Negotiate use of Link Quality Reports */ +#endif /* LQR_SUPPORT */ + unsigned int neg_cbcp :1; /* Negotiate use of CBCP */ +#ifdef HAVE_MULTILINK + unsigned int neg_mrru :1; /* negotiate multilink MRRU */ +#endif /* HAVE_MULTILINK */ + unsigned int neg_ssnhf :1; /* negotiate short sequence numbers */ + unsigned int neg_endpoint :1; /* negotiate endpoint discriminator */ + + u16_t mru; /* Value of MRU */ +#ifdef HAVE_MULTILINK + u16_t mrru; /* Value of MRRU, and multilink enable */ +#endif /* MULTILINK */ +#if CHAP_SUPPORT + u8_t chap_mdtype; /* which MD types (hashing algorithm) */ +#endif /* CHAP_SUPPORT */ + u32_t asyncmap; /* Value of async map */ + u32_t magicnumber; + u8_t numloops; /* Number of loops during magic number neg. */ +#if LQR_SUPPORT + u32_t lqr_period; /* Reporting period for LQR 1/100ths second */ +#endif /* LQR_SUPPORT */ + struct epdisc endpoint; /* endpoint discriminator */ +} lcp_options; + +void lcp_open(ppp_pcb *pcb); +void lcp_close(ppp_pcb *pcb, const char *reason); +void lcp_lowerup(ppp_pcb *pcb); +void lcp_lowerdown(ppp_pcb *pcb); +void lcp_sprotrej(ppp_pcb *pcb, u_char *p, int len); /* send protocol reject */ + +extern const struct protent lcp_protent; + +#if 0 /* moved to opt.h */ +/* Default number of times we receive our magic number from the peer + before deciding the link is looped-back. */ +#define DEFLOOPBACKFAIL 10 +#endif /* moved to opt.h */ + +#endif /* LCP_H */ +#endif /* PPP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/magic.h b/tools/sdk/include/lwip/netif/ppp/magic.h new file mode 100755 index 00000000..678ff724 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/magic.h @@ -0,0 +1,122 @@ +/* + * magic.h - PPP Magic Number definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. 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. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: magic.h,v 1.5 2003/06/11 23:56:26 paulus Exp $ + */ +/***************************************************************************** +* randm.h - Random number generator header file. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* Copyright (c) 1998 Global Election Systems Inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE 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 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. +* +****************************************************************************** +* REVISION HISTORY +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 98-05-29 Guy Lancaster , Global Election Systems Inc. +* Extracted from avos. +*****************************************************************************/ + +#include "lwip/opt.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef MAGIC_H +#define MAGIC_H + +/*********************** +*** PUBLIC FUNCTIONS *** +***********************/ + +/* + * Initialize the random number generator. + */ +void magic_init(void); + +/* + * Randomize our random seed value. To be called for truely random events + * such as user operations and network traffic. + */ +void magic_randomize(void); + +/* + * Return a new random number. + */ +u32_t magic(void); /* Returns the next magic number */ + +/* + * Fill buffer with random bytes + * + * Use the random pool to generate random data. This degrades to pseudo + * random when used faster than randomness is supplied using magic_churnrand(). + * Thus it's important to make sure that the results of this are not + * published directly because one could predict the next result to at + * least some degree. Also, it's important to get a good seed before + * the first use. + */ +void magic_random_bytes(unsigned char *buf, u32_t buf_len); + +/* + * Return a new random number between 0 and (2^pow)-1 included. + */ +u32_t magic_pow(u8_t pow); + +#endif /* MAGIC_H */ + +#endif /* PPP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/mppe.h b/tools/sdk/include/lwip/netif/ppp/mppe.h new file mode 100755 index 00000000..93086955 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/mppe.h @@ -0,0 +1,177 @@ +/* + * mppe.h - Definitions for MPPE + * + * Copyright (c) 2008 Paul Mackerras. 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. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && MPPE_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef MPPE_H +#define MPPE_H + +#if LWIP_INCLUDED_POLARSSL_ARC4 +#include "netif/ppp/polarssl/arc4.h" +#else +#include "polarssl/arc4.h" +#endif + +#define MPPE_PAD 4 /* MPPE growth per frame */ +#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */ + +/* option bits for ccp_options.mppe */ +#define MPPE_OPT_40 0x01 /* 40 bit */ +#define MPPE_OPT_128 0x02 /* 128 bit */ +#define MPPE_OPT_STATEFUL 0x04 /* stateful mode */ +/* unsupported opts */ +#define MPPE_OPT_56 0x08 /* 56 bit */ +#define MPPE_OPT_MPPC 0x10 /* MPPC compression */ +#define MPPE_OPT_D 0x20 /* Unknown */ +#define MPPE_OPT_UNSUPPORTED (MPPE_OPT_56|MPPE_OPT_MPPC|MPPE_OPT_D) +#define MPPE_OPT_UNKNOWN 0x40 /* Bits !defined in RFC 3078 were set */ + +/* + * This is not nice ... the alternative is a bitfield struct though. + * And unfortunately, we cannot share the same bits for the option + * names above since C and H are the same bit. We could do a u_int32 + * but then we have to do a htonl() all the time and/or we still need + * to know which octet is which. + */ +#define MPPE_C_BIT 0x01 /* MPPC */ +#define MPPE_D_BIT 0x10 /* Obsolete, usage unknown */ +#define MPPE_L_BIT 0x20 /* 40-bit */ +#define MPPE_S_BIT 0x40 /* 128-bit */ +#define MPPE_M_BIT 0x80 /* 56-bit, not supported */ +#define MPPE_H_BIT 0x01 /* Stateless (in a different byte) */ + +/* Does not include H bit; used for least significant octet only. */ +#define MPPE_ALL_BITS (MPPE_D_BIT|MPPE_L_BIT|MPPE_S_BIT|MPPE_M_BIT|MPPE_H_BIT) + +/* Build a CI from mppe opts (see RFC 3078) */ +#define MPPE_OPTS_TO_CI(opts, ci) \ + do { \ + u_char *ptr = ci; /* u_char[4] */ \ + \ + /* H bit */ \ + if (opts & MPPE_OPT_STATEFUL) \ + *ptr++ = 0x0; \ + else \ + *ptr++ = MPPE_H_BIT; \ + *ptr++ = 0; \ + *ptr++ = 0; \ + \ + /* S,L bits */ \ + *ptr = 0; \ + if (opts & MPPE_OPT_128) \ + *ptr |= MPPE_S_BIT; \ + if (opts & MPPE_OPT_40) \ + *ptr |= MPPE_L_BIT; \ + /* M,D,C bits not supported */ \ + } while (/* CONSTCOND */ 0) + +/* The reverse of the above */ +#define MPPE_CI_TO_OPTS(ci, opts) \ + do { \ + const u_char *ptr = ci; /* u_char[4] */ \ + \ + opts = 0; \ + \ + /* H bit */ \ + if (!(ptr[0] & MPPE_H_BIT)) \ + opts |= MPPE_OPT_STATEFUL; \ + \ + /* S,L bits */ \ + if (ptr[3] & MPPE_S_BIT) \ + opts |= MPPE_OPT_128; \ + if (ptr[3] & MPPE_L_BIT) \ + opts |= MPPE_OPT_40; \ + \ + /* M,D,C bits */ \ + if (ptr[3] & MPPE_M_BIT) \ + opts |= MPPE_OPT_56; \ + if (ptr[3] & MPPE_D_BIT) \ + opts |= MPPE_OPT_D; \ + if (ptr[3] & MPPE_C_BIT) \ + opts |= MPPE_OPT_MPPC; \ + \ + /* Other bits */ \ + if (ptr[0] & ~MPPE_H_BIT) \ + opts |= MPPE_OPT_UNKNOWN; \ + if (ptr[1] || ptr[2]) \ + opts |= MPPE_OPT_UNKNOWN; \ + if (ptr[3] & ~MPPE_ALL_BITS) \ + opts |= MPPE_OPT_UNKNOWN; \ + } while (/* CONSTCOND */ 0) + +/* Shared MPPE padding between MSCHAP and MPPE */ +#define SHA1_PAD_SIZE 40 + +static const u8_t mppe_sha1_pad1[SHA1_PAD_SIZE] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; +static const u8_t mppe_sha1_pad2[SHA1_PAD_SIZE] = { + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2 +}; + +/* + * State for an MPPE (de)compressor. + */ +typedef struct ppp_mppe_state { + arc4_context arc4; + u8_t master_key[MPPE_MAX_KEY_LEN]; + u8_t session_key[MPPE_MAX_KEY_LEN]; + u8_t keylen; /* key length in bytes */ + /* NB: 128-bit == 16, 40-bit == 8! + * If we want to support 56-bit, the unit has to change to bits + */ + u8_t bits; /* MPPE control bits */ + u16_t ccount; /* 12-bit coherency count (seqno) */ + u16_t sanity_errors; /* take down LCP if too many */ + unsigned int stateful :1; /* stateful mode flag */ + unsigned int discard :1; /* stateful mode packet loss flag */ +} ppp_mppe_state; + +void mppe_set_key(ppp_pcb *pcb, ppp_mppe_state *state, u8_t *key); +void mppe_init(ppp_pcb *pcb, ppp_mppe_state *state, u8_t options); +void mppe_comp_reset(ppp_pcb *pcb, ppp_mppe_state *state); +err_t mppe_compress(ppp_pcb *pcb, ppp_mppe_state *state, struct pbuf **pb, u16_t protocol); +void mppe_decomp_reset(ppp_pcb *pcb, ppp_mppe_state *state); +err_t mppe_decompress(ppp_pcb *pcb, ppp_mppe_state *state, struct pbuf **pb); + +#endif /* MPPE_H */ +#endif /* PPP_SUPPORT && MPPE_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/polarssl/arc4.h b/tools/sdk/include/lwip/netif/ppp/polarssl/arc4.h new file mode 100755 index 00000000..95d9b34a --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/polarssl/arc4.h @@ -0,0 +1,81 @@ +/** + * \file arc4.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the names of PolarSSL or XySSL 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 + * OWNER 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. + */ + +#include "lwip/opt.h" +#if LWIP_INCLUDED_POLARSSL_ARC4 + +#ifndef LWIP_INCLUDED_POLARSSL_ARC4_H +#define LWIP_INCLUDED_POLARSSL_ARC4_H + +/** + * \brief ARC4 context structure + */ +typedef struct +{ + int x; /*!< permutation index */ + int y; /*!< permutation index */ + unsigned char m[256]; /*!< permutation table */ +} +arc4_context; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief ARC4 key schedule + * + * \param ctx ARC4 context to be initialized + * \param key the secret key + * \param keylen length of the key + */ +void arc4_setup( arc4_context *ctx, unsigned char *key, int keylen ); + +/** + * \brief ARC4 cipher function + * + * \param ctx ARC4 context + * \param buf buffer to be processed + * \param buflen amount of data in buf + */ +void arc4_crypt( arc4_context *ctx, unsigned char *buf, int buflen ); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_INCLUDED_POLARSSL_ARC4_H */ + +#endif /* LWIP_INCLUDED_POLARSSL_ARC4 */ diff --git a/tools/sdk/include/lwip/netif/ppp/polarssl/des.h b/tools/sdk/include/lwip/netif/ppp/polarssl/des.h new file mode 100755 index 00000000..d0858bd8 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/polarssl/des.h @@ -0,0 +1,92 @@ +/** + * \file des.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the names of PolarSSL or XySSL 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 + * OWNER 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. + */ + +#include "lwip/opt.h" +#if LWIP_INCLUDED_POLARSSL_DES + +#ifndef LWIP_INCLUDED_POLARSSL_DES_H +#define LWIP_INCLUDED_POLARSSL_DES_H + +#define DES_ENCRYPT 1 +#define DES_DECRYPT 0 + +/** + * \brief DES context structure + */ +typedef struct +{ + int mode; /*!< encrypt/decrypt */ + unsigned long sk[32]; /*!< DES subkeys */ +} +des_context; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief DES key schedule (56-bit, encryption) + * + * \param ctx DES context to be initialized + * \param key 8-byte secret key + */ +void des_setkey_enc( des_context *ctx, unsigned char key[8] ); + +/** + * \brief DES key schedule (56-bit, decryption) + * + * \param ctx DES context to be initialized + * \param key 8-byte secret key + */ +void des_setkey_dec( des_context *ctx, unsigned char key[8] ); + +/** + * \brief DES-ECB block encryption/decryption + * + * \param ctx DES context + * \param input 64-bit input block + * \param output 64-bit output block + */ +void des_crypt_ecb( des_context *ctx, + const unsigned char input[8], + unsigned char output[8] ); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_INCLUDED_POLARSSL_DES_H */ + +#endif /* LWIP_INCLUDED_POLARSSL_DES */ diff --git a/tools/sdk/include/lwip/netif/ppp/polarssl/md4.h b/tools/sdk/include/lwip/netif/ppp/polarssl/md4.h new file mode 100755 index 00000000..a382f85a --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/polarssl/md4.h @@ -0,0 +1,97 @@ +/** + * \file md4.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the names of PolarSSL or XySSL 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 + * OWNER 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. + */ + +#include "lwip/opt.h" +#if LWIP_INCLUDED_POLARSSL_MD4 + +#ifndef LWIP_INCLUDED_POLARSSL_MD4_H +#define LWIP_INCLUDED_POLARSSL_MD4_H + +/** + * \brief MD4 context structure + */ +typedef struct +{ + unsigned long total[2]; /*!< number of bytes processed */ + unsigned long state[4]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ +} +md4_context; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief MD4 context setup + * + * \param ctx context to be initialized + */ +void md4_starts( md4_context *ctx ); + +/** + * \brief MD4 process buffer + * + * \param ctx MD4 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void md4_update( md4_context *ctx, const unsigned char *input, int ilen ); + +/** + * \brief MD4 final digest + * + * \param ctx MD4 context + * \param output MD4 checksum result + */ +void md4_finish( md4_context *ctx, unsigned char output[16] ); + +/** + * \brief Output = MD4( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output MD4 checksum result + */ +void md4( unsigned char *input, int ilen, unsigned char output[16] ); + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_INCLUDED_POLARSSL_MD4_H */ + +#endif /* LWIP_INCLUDED_POLARSSL_MD4 */ diff --git a/tools/sdk/include/lwip/netif/ppp/polarssl/md5.h b/tools/sdk/include/lwip/netif/ppp/polarssl/md5.h new file mode 100755 index 00000000..a299d98c --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/polarssl/md5.h @@ -0,0 +1,96 @@ +/** + * \file md5.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the names of PolarSSL or XySSL 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 + * OWNER 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. + */ + +#include "lwip/opt.h" +#if LWIP_INCLUDED_POLARSSL_MD5 + +#ifndef LWIP_INCLUDED_POLARSSL_MD5_H +#define LWIP_INCLUDED_POLARSSL_MD5_H + +/** + * \brief MD5 context structure + */ +typedef struct +{ + unsigned long total[2]; /*!< number of bytes processed */ + unsigned long state[4]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ +} +md5_context; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief MD5 context setup + * + * \param ctx context to be initialized + */ +void md5_starts( md5_context *ctx ); + +/** + * \brief MD5 process buffer + * + * \param ctx MD5 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void md5_update( md5_context *ctx, const unsigned char *input, int ilen ); + +/** + * \brief MD5 final digest + * + * \param ctx MD5 context + * \param output MD5 checksum result + */ +void md5_finish( md5_context *ctx, unsigned char output[16] ); + +/** + * \brief Output = MD5( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output MD5 checksum result + */ +void md5( unsigned char *input, int ilen, unsigned char output[16] ); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_INCLUDED_POLARSSL_MD5_H */ + +#endif /* LWIP_INCLUDED_POLARSSL_MD5 */ diff --git a/tools/sdk/include/lwip/netif/ppp/polarssl/sha1.h b/tools/sdk/include/lwip/netif/ppp/polarssl/sha1.h new file mode 100755 index 00000000..56d947c2 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/polarssl/sha1.h @@ -0,0 +1,96 @@ +/** + * \file sha1.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the names of PolarSSL or XySSL 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 + * OWNER 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. + */ + +#include "lwip/opt.h" +#if LWIP_INCLUDED_POLARSSL_SHA1 + +#ifndef LWIP_INCLUDED_POLARSSL_SHA1_H +#define LWIP_INCLUDED_POLARSSL_SHA1_H + +/** + * \brief SHA-1 context structure + */ +typedef struct +{ + unsigned long total[2]; /*!< number of bytes processed */ + unsigned long state[5]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ +} +sha1_context; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief SHA-1 context setup + * + * \param ctx context to be initialized + */ +void sha1_starts( sha1_context *ctx ); + +/** + * \brief SHA-1 process buffer + * + * \param ctx SHA-1 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void sha1_update( sha1_context *ctx, const unsigned char *input, int ilen ); + +/** + * \brief SHA-1 final digest + * + * \param ctx SHA-1 context + * \param output SHA-1 checksum result + */ +void sha1_finish( sha1_context *ctx, unsigned char output[20] ); + +/** + * \brief Output = SHA-1( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output SHA-1 checksum result + */ +void sha1( unsigned char *input, int ilen, unsigned char output[20] ); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_INCLUDED_POLARSSL_SHA1_H */ + +#endif /* LWIP_INCLUDED_POLARSSL_SHA1 */ diff --git a/tools/sdk/include/lwip/netif/ppp/ppp.h b/tools/sdk/include/lwip/netif/ppp/ppp.h new file mode 100755 index 00000000..4a502054 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/ppp.h @@ -0,0 +1,573 @@ +/***************************************************************************** +* ppp.h - Network Point to Point Protocol header file. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* portions Copyright (c) 1997 Global Election Systems Inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE 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 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. +* +****************************************************************************** +* REVISION HISTORY +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 97-11-05 Guy Lancaster , Global Election Systems Inc. +* Original derived from BSD codes. +*****************************************************************************/ + +#include "lwip/opt.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPP_H +#define PPP_H + +#include "lwip/def.h" +#include "lwip/stats.h" +#include "lwip/mem.h" +#include "lwip/netif.h" +#include "lwip/sys.h" +#include "lwip/sio.h" +#include "lwip/timers.h" +#if PPP_IPV6_SUPPORT +#include "lwip/ip6_addr.h" +#endif /* PPP_IPV6_SUPPORT */ + +/* Disable non-working or rarely used PPP feature, so rarely that we don't want to bloat opt.h with them */ +#ifndef PPP_OPTIONS +#define PPP_OPTIONS 0 +#endif + +#ifndef PPP_NOTIFY +#define PPP_NOTIFY 0 +#endif + +#ifndef PPP_REMOTENAME +#define PPP_REMOTENAME 0 +#endif + +#ifndef PPP_IDLETIMELIMIT +#define PPP_IDLETIMELIMIT 0 +#endif + +#ifndef PPP_LCP_ADAPTIVE +#define PPP_LCP_ADAPTIVE 0 +#endif + +#ifndef PPP_MAXCONNECT +#define PPP_MAXCONNECT 0 +#endif + +#ifndef PPP_ALLOWED_ADDRS +#define PPP_ALLOWED_ADDRS 0 +#endif + +#ifndef PPP_PROTOCOLNAME +#define PPP_PROTOCOLNAME 0 +#endif + +#ifndef PPP_STATS_SUPPORT +#define PPP_STATS_SUPPORT 0 +#endif + +#ifndef DEFLATE_SUPPORT +#define DEFLATE_SUPPORT 0 +#endif + +#ifndef BSDCOMPRESS_SUPPORT +#define BSDCOMPRESS_SUPPORT 0 +#endif + +#ifndef PREDICTOR_SUPPORT +#define PREDICTOR_SUPPORT 0 +#endif + +/************************* +*** PUBLIC DEFINITIONS *** +*************************/ + +/* + * The basic PPP frame. + */ +#define PPP_HDRLEN 4 /* octets for standard ppp header */ +#define PPP_FCSLEN 2 /* octets for FCS */ + +/* + * Values for phase. + */ +#define PPP_PHASE_DEAD 0 +#define PPP_PHASE_INITIALIZE 1 +#define PPP_PHASE_SERIALCONN 2 +#define PPP_PHASE_DORMANT 3 +#define PPP_PHASE_ESTABLISH 4 +#define PPP_PHASE_AUTHENTICATE 5 +#define PPP_PHASE_CALLBACK 6 +#define PPP_PHASE_NETWORK 7 +#define PPP_PHASE_RUNNING 8 +#define PPP_PHASE_TERMINATE 9 +#define PPP_PHASE_DISCONNECT 10 +#define PPP_PHASE_HOLDOFF 11 +#define PPP_PHASE_MASTER 12 + +/* Error codes. */ +#define PPPERR_NONE 0 /* No error. */ +#define PPPERR_PARAM 1 /* Invalid parameter. */ +#define PPPERR_OPEN 2 /* Unable to open PPP session. */ +#define PPPERR_DEVICE 3 /* Invalid I/O device for PPP. */ +#define PPPERR_ALLOC 4 /* Unable to allocate resources. */ +#define PPPERR_USER 5 /* User interrupt. */ +#define PPPERR_CONNECT 6 /* Connection lost. */ +#define PPPERR_AUTHFAIL 7 /* Failed authentication challenge. */ +#define PPPERR_PROTOCOL 8 /* Failed to meet protocol. */ +#define PPPERR_PEERDEAD 9 /* Connection timeout */ +#define PPPERR_IDLETIMEOUT 10 /* Idle Timeout */ +#define PPPERR_CONNECTTIME 11 /* Max connect time reached */ +#define PPPERR_LOOPBACK 12 /* Loopback detected */ + +/* Whether auth support is enabled at all */ +#define PPP_AUTH_SUPPORT (PAP_SUPPORT || CHAP_SUPPORT || EAP_SUPPORT) + +/************************ +*** PUBLIC DATA TYPES *** +************************/ + +/* + * Other headers require ppp_pcb definition for prototypes, but ppp_pcb + * require some structure definition from other headers as well, we are + * fixing the dependency loop here by declaring the ppp_pcb type then + * by including headers containing necessary struct definition for ppp_pcb + */ +typedef struct ppp_pcb_s ppp_pcb; + +/* Type definitions for BSD code. */ +#ifndef __u_char_defined +typedef unsigned long u_long; +typedef unsigned int u_int; +typedef unsigned short u_short; +typedef unsigned char u_char; +#endif + +#include "fsm.h" +#include "lcp.h" +#if CCP_SUPPORT +#include "ccp.h" +#endif /* CCP_SUPPORT */ +#if MPPE_SUPPORT +#include "mppe.h" +#endif /* MPPE_SUPPORT */ +#if PPP_IPV4_SUPPORT +#include "ipcp.h" +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT +#include "ipv6cp.h" +#endif /* PPP_IPV6_SUPPORT */ +#if PAP_SUPPORT +#include "upap.h" +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT +#include "chap-new.h" +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT +#include "eap.h" +#endif /* EAP_SUPPORT */ +#if VJ_SUPPORT +#include "vj.h" +#endif /* VJ_SUPPORT */ + +/* Link status callback function prototype */ +typedef void (*ppp_link_status_cb_fn)(ppp_pcb *pcb, int err_code, void *ctx); + +/* + * PPP configuration. + */ +typedef struct ppp_settings_s { + +#if PPP_SERVER && PPP_AUTH_SUPPORT + unsigned int auth_required :1; /* Peer is required to authenticate */ + unsigned int null_login :1; /* Username of "" and a password of "" are acceptable */ +#endif /* PPP_SERVER && PPP_AUTH_SUPPORT */ +#if PPP_REMOTENAME + unsigned int explicit_remote :1; /* remote_name specified with remotename opt */ +#endif /* PPP_REMOTENAME */ +#if PAP_SUPPORT + unsigned int refuse_pap :1; /* Don't proceed auth. with PAP */ +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + unsigned int refuse_chap :1; /* Don't proceed auth. with CHAP */ +#endif /* CHAP_SUPPORT */ +#if MSCHAP_SUPPORT + unsigned int refuse_mschap :1; /* Don't proceed auth. with MS-CHAP */ + unsigned int refuse_mschap_v2 :1; /* Don't proceed auth. with MS-CHAPv2 */ +#endif /* MSCHAP_SUPPORT */ +#if EAP_SUPPORT + unsigned int refuse_eap :1; /* Don't proceed auth. with EAP */ +#endif /* EAP_SUPPORT */ +#if LWIP_DNS + unsigned int usepeerdns :1; /* Ask peer for DNS adds */ +#endif /* LWIP_DNS */ + unsigned int persist :1; /* Persist mode, always try to open the connection */ +#if PRINTPKT_SUPPORT + unsigned int hide_password :1; /* Hide password in dumped packets */ +#endif /* PRINTPKT_SUPPORT */ + unsigned int noremoteip :1; /* Let him have no IP address */ + unsigned int lax_recv :1; /* accept control chars in asyncmap */ + unsigned int noendpoint :1; /* don't send/accept endpoint discriminator */ +#if PPP_LCP_ADAPTIVE + unsigned int lcp_echo_adaptive :1; /* request echo only if the link was idle */ +#endif /* PPP_LCP_ADAPTIVE */ +#if MPPE_SUPPORT + unsigned int require_mppe :1; /* Require MPPE (Microsoft Point to Point Encryption) */ + unsigned int refuse_mppe_40 :1; /* Allow MPPE 40-bit mode? */ + unsigned int refuse_mppe_128 :1; /* Allow MPPE 128-bit mode? */ + unsigned int refuse_mppe_stateful :1; /* Allow MPPE stateful mode? */ +#endif /* MPPE_SUPPORT */ + + u16_t listen_time; /* time to listen first (ms), waiting for peer to send LCP packet */ + +#if PPP_IDLETIMELIMIT + u16_t idle_time_limit; /* Disconnect if idle for this many seconds */ +#endif /* PPP_IDLETIMELIMIT */ +#if PPP_MAXCONNECT + u32_t maxconnect; /* Maximum connect time (seconds) */ +#endif /* PPP_MAXCONNECT */ + +#if PPP_AUTH_SUPPORT + /* auth data */ + const char *user; /* Username for PAP */ + const char *passwd; /* Password for PAP, secret for CHAP */ +#if PPP_REMOTENAME + char remote_name[MAXNAMELEN + 1]; /* Peer's name for authentication */ +#endif /* PPP_REMOTENAME */ + +#if PAP_SUPPORT + u8_t pap_timeout_time; /* Timeout (seconds) for auth-req retrans. */ + u8_t pap_max_transmits; /* Number of auth-reqs sent */ +#if PPP_SERVER + u8_t pap_req_timeout; /* Time to wait for auth-req from peer */ +#endif /* PPP_SERVER */ +#endif /* PAP_SUPPPORT */ + +#if CHAP_SUPPORT + u8_t chap_timeout_time; /* Timeout (seconds) for retransmitting req */ + u8_t chap_max_transmits; /* max # times to send challenge */ +#if PPP_SERVER + u8_t chap_rechallenge_time; /* Time to wait for auth-req from peer */ +#endif /* PPP_SERVER */ +#endif /* CHAP_SUPPPORT */ + +#if EAP_SUPPORT + u8_t eap_req_time; /* Time to wait (for retransmit/fail) */ + u8_t eap_allow_req; /* Max Requests allowed */ +#if PPP_SERVER + u8_t eap_timeout_time; /* Time to wait (for retransmit/fail) */ + u8_t eap_max_transmits; /* Max Requests allowed */ +#endif /* PPP_SERVER */ +#endif /* EAP_SUPPORT */ + +#endif /* PPP_AUTH_SUPPORT */ + + u8_t fsm_timeout_time; /* Timeout time in seconds */ + u8_t fsm_max_conf_req_transmits; /* Maximum Configure-Request transmissions */ + u8_t fsm_max_term_transmits; /* Maximum Terminate-Request transmissions */ + u8_t fsm_max_nak_loops; /* Maximum number of nak loops tolerated */ + + u8_t lcp_loopbackfail; /* Number of times we receive our magic number from the peer + before deciding the link is looped-back. */ + u8_t lcp_echo_interval; /* Interval between LCP echo-requests */ + u8_t lcp_echo_fails; /* Tolerance to unanswered echo-requests */ + +} ppp_settings; + +#if PPP_SERVER +struct ppp_addrs { +#if PPP_IPV4_SUPPORT + ip4_addr_t our_ipaddr, his_ipaddr, netmask; +#if LWIP_DNS + ip4_addr_t dns1, dns2; +#endif /* LWIP_DNS */ +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT + ip6_addr_t our6_ipaddr, his6_ipaddr; +#endif /* PPP_IPV6_SUPPORT */ +}; +#endif /* PPP_SERVER */ + +/* + * PPP interface control block. + */ +struct ppp_pcb_s { + /* -- below are data that will NOT be cleared between two sessions */ + ppp_settings settings; + const struct link_callbacks *link_cb; + void *link_ctx_cb; + void (*link_status_cb)(ppp_pcb *pcb, int err_code, void *ctx); /* Status change callback */ +#if PPP_NOTIFY_PHASE + void (*notify_phase_cb)(ppp_pcb *pcb, u8_t phase, void *ctx); /* Notify phase callback */ +#endif /* PPP_NOTIFY_PHASE */ + void *ctx_cb; /* Callbacks optional pointer */ + struct netif *netif; /* PPP interface */ + + /* -- below are data that will be cleared between two sessions */ + + /* + * phase must be the first member of cleared members, because it is used to know + * which part must not be cleared. + */ + u8_t phase; /* where the link is at */ + u8_t err_code; /* Code indicating why interface is down. */ + + /* flags */ +#if PPP_IPV4_SUPPORT + unsigned int ipcp_is_open :1; /* haven't called np_finished() */ + unsigned int ipcp_is_up :1; /* have called ipcp_up() */ + unsigned int if4_up :1; /* True when the IPv4 interface is up. */ +#if 0 /* UNUSED - PROXY ARP */ + unsigned int proxy_arp_set :1; /* Have created proxy arp entry */ +#endif /* UNUSED - PROXY ARP */ +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT + unsigned int ipv6cp_is_up :1; /* have called ip6cp_up() */ + unsigned int if6_up :1; /* True when the IPv6 interface is up. */ +#endif /* PPP_IPV6_SUPPORT */ + unsigned int lcp_echo_timer_running :1; /* set if a timer is running */ +#if VJ_SUPPORT + unsigned int vj_enabled :1; /* Flag indicating VJ compression enabled. */ +#endif /* VJ_SUPPORT */ +#if CCP_SUPPORT + unsigned int ccp_all_rejected :1; /* we rejected all peer's options */ +#endif /* CCP_SUPPORT */ +#if MPPE_SUPPORT + unsigned int mppe_keys_set :1; /* Have the MPPE keys been set? */ +#endif /* MPPE_SUPPORT */ + +#if PPP_AUTH_SUPPORT + /* auth data */ +#if PPP_SERVER && defined(HAVE_MULTILINK) + char peer_authname[MAXNAMELEN + 1]; /* The name by which the peer authenticated itself to us. */ +#endif /* PPP_SERVER && defined(HAVE_MULTILINK) */ + u16_t auth_pending; /* Records which authentication operations haven't completed yet. */ + u16_t auth_done; /* Records which authentication operations have been completed. */ + +#if PAP_SUPPORT + upap_state upap; /* PAP data */ +#endif /* PAP_SUPPORT */ + +#if CHAP_SUPPORT + chap_client_state chap_client; /* CHAP client data */ +#if PPP_SERVER + chap_server_state chap_server; /* CHAP server data */ +#endif /* PPP_SERVER */ +#endif /* CHAP_SUPPORT */ + +#if EAP_SUPPORT + eap_state eap; /* EAP data */ +#endif /* EAP_SUPPORT */ +#endif /* PPP_AUTH_SUPPORT */ + + fsm lcp_fsm; /* LCP fsm structure */ + lcp_options lcp_wantoptions; /* Options that we want to request */ + lcp_options lcp_gotoptions; /* Options that peer ack'd */ + lcp_options lcp_allowoptions; /* Options we allow peer to request */ + lcp_options lcp_hisoptions; /* Options that we ack'd */ + u16_t peer_mru; /* currently negotiated peer MRU */ + u8_t lcp_echos_pending; /* Number of outstanding echo msgs */ + u8_t lcp_echo_number; /* ID number of next echo frame */ + + u8_t num_np_open; /* Number of network protocols which we have opened. */ + u8_t num_np_up; /* Number of network protocols which have come up. */ + +#if VJ_SUPPORT + struct vjcompress vj_comp; /* Van Jacobson compression header. */ +#endif /* VJ_SUPPORT */ + +#if CCP_SUPPORT + fsm ccp_fsm; /* CCP fsm structure */ + ccp_options ccp_wantoptions; /* what to request the peer to use */ + ccp_options ccp_gotoptions; /* what the peer agreed to do */ + ccp_options ccp_allowoptions; /* what we'll agree to do */ + ccp_options ccp_hisoptions; /* what we agreed to do */ + u8_t ccp_localstate; /* Local state (mainly for handling reset-reqs and reset-acks). */ + u8_t ccp_receive_method; /* Method chosen on receive path */ + u8_t ccp_transmit_method; /* Method chosen on transmit path */ +#if MPPE_SUPPORT + ppp_mppe_state mppe_comp; /* MPPE "compressor" structure */ + ppp_mppe_state mppe_decomp; /* MPPE "decompressor" structure */ +#endif /* MPPE_SUPPORT */ +#endif /* CCP_SUPPORT */ + +#if PPP_IPV4_SUPPORT + fsm ipcp_fsm; /* IPCP fsm structure */ + ipcp_options ipcp_wantoptions; /* Options that we want to request */ + ipcp_options ipcp_gotoptions; /* Options that peer ack'd */ + ipcp_options ipcp_allowoptions; /* Options we allow peer to request */ + ipcp_options ipcp_hisoptions; /* Options that we ack'd */ +#endif /* PPP_IPV4_SUPPORT */ + +#if PPP_IPV6_SUPPORT + fsm ipv6cp_fsm; /* IPV6CP fsm structure */ + ipv6cp_options ipv6cp_wantoptions; /* Options that we want to request */ + ipv6cp_options ipv6cp_gotoptions; /* Options that peer ack'd */ + ipv6cp_options ipv6cp_allowoptions; /* Options we allow peer to request */ + ipv6cp_options ipv6cp_hisoptions; /* Options that we ack'd */ +#endif /* PPP_IPV6_SUPPORT */ +}; + +/************************ + *** PUBLIC FUNCTIONS *** + ************************/ + +/* + * Set auth helper, optional, you can either fill ppp_pcb->settings. + * + * Warning: Using PPPAUTHTYPE_ANY might have security consequences. + * RFC 1994 says: + * + * In practice, within or associated with each PPP server, there is a + * database which associates "user" names with authentication + * information ("secrets"). It is not anticipated that a particular + * named user would be authenticated by multiple methods. This would + * make the user vulnerable to attacks which negotiate the least secure + * method from among a set (such as PAP rather than CHAP). If the same + * secret was used, PAP would reveal the secret to be used later with + * CHAP. + * + * Instead, for each user name there should be an indication of exactly + * one method used to authenticate that user name. If a user needs to + * make use of different authentication methods under different + * circumstances, then distinct user names SHOULD be employed, each of + * which identifies exactly one authentication method. + * + */ +#define PPPAUTHTYPE_NONE 0x00 +#define PPPAUTHTYPE_PAP 0x01 +#define PPPAUTHTYPE_CHAP 0x02 +#define PPPAUTHTYPE_MSCHAP 0x04 +#define PPPAUTHTYPE_MSCHAP_V2 0x08 +#define PPPAUTHTYPE_EAP 0x10 +#define PPPAUTHTYPE_ANY 0xff +void ppp_set_auth(ppp_pcb *pcb, u8_t authtype, const char *user, const char *passwd); + +/* + * Set a PPP interface as the default network interface + * (used to output all packets for which no specific route is found). + */ +#define ppp_set_default(ppp) netif_set_default(ppp->netif) + +#if PPP_NOTIFY_PHASE +/* + * Set a PPP notify phase callback. + * + * This can be used for example to set a LED pattern depending on the + * current phase of the PPP session. + */ +typedef void (*ppp_notify_phase_cb_fn)(ppp_pcb *pcb, u8_t phase, void *ctx); +void ppp_set_notify_phase_callback(ppp_pcb *pcb, ppp_notify_phase_cb_fn notify_phase_cb); +#endif /* PPP_NOTIFY_PHASE */ + +/* + * Initiate a PPP connection. + * + * This can only be called if PPP is in the dead phase. + * + * Holdoff is the time to wait (in seconds) before initiating + * the connection. + * + * If this port connects to a modem, the modem connection must be + * established before calling this. + */ +err_t ppp_connect(ppp_pcb *pcb, u16_t holdoff); + +#if PPP_SERVER +/* + * Listen for an incoming PPP connection. + * + * This can only be called if PPP is in the dead phase. + * + * Local and remote interface IP addresses, as well as DNS are + * provided through a previously filled struct ppp_addrs. + * + * If this port connects to a modem, the modem connection must be + * established before calling this. + */ +err_t ppp_listen(ppp_pcb *pcb, struct ppp_addrs *addrs); +#endif /* PPP_SERVER */ + +/* + * Initiate the end of a PPP connection. + * Any outstanding packets in the queues are dropped. + * + * Setting nocarrier to 1 close the PPP connection without initiating the + * shutdown procedure. Always using nocarrier = 0 is still recommended, + * this is going to take a little longer time if your link is down, but + * is a safer choice for the PPP state machine. + * + * Return 0 on success, an error code on failure. + */ +err_t ppp_close(ppp_pcb *pcb, u8_t nocarrier); + +/* + * Release the control block. + * + * This can only be called if PPP is in the dead phase. + * + * You must use ppp_close() before if you wish to terminate + * an established PPP session. + * + * Return 0 on success, an error code on failure. + */ +err_t ppp_free(ppp_pcb *pcb); + +/* + * PPP IOCTL commands. + * + * Get the up status - 0 for down, non-zero for up. The argument must + * point to an int. + */ +#define PPPCTLG_UPSTATUS 0 + +/* + * Get the PPP error code. The argument must point to an int. + * Returns a PPPERR_* value. + */ +#define PPPCTLG_ERRCODE 1 + +/* + * Get the fd associated with a PPP over serial + */ +#define PPPCTLG_FD 2 + +/* + * Get and set parameters for the given connection. + * Return 0 on success, an error code on failure. + */ +err_t ppp_ioctl(ppp_pcb *pcb, u8_t cmd, void *arg); + +/* Get the PPP netif interface */ +#define ppp_netif(ppp) (ppp->netif) + +/* Set an lwIP-style status-callback for the selected PPP device */ +#define ppp_set_netif_statuscallback(ppp, status_cb) \ + netif_set_status_callback(ppp->netif, status_cb); + +/* Set an lwIP-style link-callback for the selected PPP device */ +#define ppp_set_netif_linkcallback(ppp, link_cb) \ + netif_set_link_callback(ppp->netif, link_cb); + +#endif /* PPP_H */ + +#endif /* PPP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/ppp_impl.h b/tools/sdk/include/lwip/netif/ppp/ppp_impl.h new file mode 100755 index 00000000..324f4b05 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/ppp_impl.h @@ -0,0 +1,632 @@ +/***************************************************************************** +* ppp.h - Network Point to Point Protocol header file. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* portions Copyright (c) 1997 Global Election Systems Inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE 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 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. +* +****************************************************************************** +* REVISION HISTORY +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 97-11-05 Guy Lancaster , Global Election Systems Inc. +* Original derived from BSD codes. +*****************************************************************************/ +#ifndef LWIP_HDR_PPP_IMPL_H +#define LWIP_HDR_PPP_IMPL_H + +#include "lwip/opt.h" + +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifdef PPP_INCLUDE_SETTINGS_HEADER +#include "ppp_settings.h" +#endif + +#include /* formats */ +#include +#include +#include /* strtol() */ + +#include "lwip/netif.h" +#include "lwip/def.h" +#include "lwip/timers.h" + +#include "ppp.h" +#include "pppdebug.h" + +/* + * Memory used for control packets. + * + * PPP_CTRL_PBUF_MAX_SIZE is the amount of memory we allocate when we + * cannot figure out how much we are going to use before filling the buffer. + */ +#if PPP_USE_PBUF_RAM +#define PPP_CTRL_PBUF_TYPE PBUF_RAM +#define PPP_CTRL_PBUF_MAX_SIZE 512 +#else /* PPP_USE_PBUF_RAM */ +#define PPP_CTRL_PBUF_TYPE PBUF_POOL +#define PPP_CTRL_PBUF_MAX_SIZE PBUF_POOL_BUFSIZE +#endif /* PPP_USE_PBUF_RAM */ + +/* + * The basic PPP frame. + */ +#define PPP_ADDRESS(p) (((u_char *)(p))[0]) +#define PPP_CONTROL(p) (((u_char *)(p))[1]) +#define PPP_PROTOCOL(p) ((((u_char *)(p))[2] << 8) + ((u_char *)(p))[3]) + +/* + * Significant octet values. + */ +#define PPP_ALLSTATIONS 0xff /* All-Stations broadcast address */ +#define PPP_UI 0x03 /* Unnumbered Information */ +#define PPP_FLAG 0x7e /* Flag Sequence */ +#define PPP_ESCAPE 0x7d /* Asynchronous Control Escape */ +#define PPP_TRANS 0x20 /* Asynchronous transparency modifier */ + +/* + * Protocol field values. + */ +#define PPP_IP 0x21 /* Internet Protocol */ +#if 0 /* UNUSED */ +#define PPP_AT 0x29 /* AppleTalk Protocol */ +#define PPP_IPX 0x2b /* IPX protocol */ +#endif /* UNUSED */ +#if VJ_SUPPORT +#define PPP_VJC_COMP 0x2d /* VJ compressed TCP */ +#define PPP_VJC_UNCOMP 0x2f /* VJ uncompressed TCP */ +#endif /* VJ_SUPPORT */ +#if PPP_IPV6_SUPPORT +#define PPP_IPV6 0x57 /* Internet Protocol Version 6 */ +#endif /* PPP_IPV6_SUPPORT */ +#if CCP_SUPPORT +#define PPP_COMP 0xfd /* compressed packet */ +#endif /* CCP_SUPPORT */ +#define PPP_IPCP 0x8021 /* IP Control Protocol */ +#if 0 /* UNUSED */ +#define PPP_ATCP 0x8029 /* AppleTalk Control Protocol */ +#define PPP_IPXCP 0x802b /* IPX Control Protocol */ +#endif /* UNUSED */ +#if PPP_IPV6_SUPPORT +#define PPP_IPV6CP 0x8057 /* IPv6 Control Protocol */ +#endif /* PPP_IPV6_SUPPORT */ +#if CCP_SUPPORT +#define PPP_CCP 0x80fd /* Compression Control Protocol */ +#endif /* CCP_SUPPORT */ +#if ECP_SUPPORT +#define PPP_ECP 0x8053 /* Encryption Control Protocol */ +#endif /* ECP_SUPPORT */ +#define PPP_LCP 0xc021 /* Link Control Protocol */ +#if PAP_SUPPORT +#define PPP_PAP 0xc023 /* Password Authentication Protocol */ +#endif /* PAP_SUPPORT */ +#if LQR_SUPPORT +#define PPP_LQR 0xc025 /* Link Quality Report protocol */ +#endif /* LQR_SUPPORT */ +#if CHAP_SUPPORT +#define PPP_CHAP 0xc223 /* Cryptographic Handshake Auth. Protocol */ +#endif /* CHAP_SUPPORT */ +#if CBCP_SUPPORT +#define PPP_CBCP 0xc029 /* Callback Control Protocol */ +#endif /* CBCP_SUPPORT */ +#if EAP_SUPPORT +#define PPP_EAP 0xc227 /* Extensible Authentication Protocol */ +#endif /* EAP_SUPPORT */ + +/* + * The following struct gives the addresses of procedures to call + * for a particular lower link level protocol. + */ +struct link_callbacks { + /* Start a connection (e.g. Initiate discovery phase) */ + err_t (*connect) (ppp_pcb *pcb, void *ctx); +#if PPP_SERVER + /* Listen for an incoming connection (Passive mode) */ + err_t (*listen) (ppp_pcb *pcb, void *ctx, struct ppp_addrs *addrs); +#endif /* PPP_SERVER */ + /* End a connection (i.e. initiate disconnect phase) */ + void (*disconnect) (ppp_pcb *pcb, void *ctx); + /* Free lower protocol control block */ + err_t (*free) (ppp_pcb *pcb, void *ctx); + /* Write a pbuf to a ppp link, only used from PPP functions to send PPP packets. */ + err_t (*write)(ppp_pcb *pcb, void *ctx, struct pbuf *p); + /* Send a packet from lwIP core (IPv4 or IPv6) */ + err_t (*netif_output)(ppp_pcb *pcb, void *ctx, struct pbuf *p, u_short protocol); + /* configure the transmit-side characteristics of the PPP interface */ + void (*send_config)(ppp_pcb *pcb, void *ctx, u32_t accm, int pcomp, int accomp); + /* confire the receive-side characteristics of the PPP interface */ + void (*recv_config)(ppp_pcb *pcb, void *ctx, u32_t accm, int pcomp, int accomp); +}; + +/* + * What to do with network protocol (NP) packets. + */ +enum NPmode { + NPMODE_PASS, /* pass the packet through */ + NPMODE_DROP, /* silently drop the packet */ + NPMODE_ERROR, /* return an error */ + NPMODE_QUEUE /* save it up for later. */ +}; + +/* + * Statistics. + */ +#if PPP_STATS_SUPPORT +struct pppstat { + unsigned int ppp_ibytes; /* bytes received */ + unsigned int ppp_ipackets; /* packets received */ + unsigned int ppp_ierrors; /* receive errors */ + unsigned int ppp_obytes; /* bytes sent */ + unsigned int ppp_opackets; /* packets sent */ + unsigned int ppp_oerrors; /* transmit errors */ +}; + +#if VJ_SUPPORT +struct vjstat { + unsigned int vjs_packets; /* outbound packets */ + unsigned int vjs_compressed; /* outbound compressed packets */ + unsigned int vjs_searches; /* searches for connection state */ + unsigned int vjs_misses; /* times couldn't find conn. state */ + unsigned int vjs_uncompressedin; /* inbound uncompressed packets */ + unsigned int vjs_compressedin; /* inbound compressed packets */ + unsigned int vjs_errorin; /* inbound unknown type packets */ + unsigned int vjs_tossed; /* inbound packets tossed because of error */ +}; +#endif /* VJ_SUPPORT */ + +struct ppp_stats { + struct pppstat p; /* basic PPP statistics */ +#if VJ_SUPPORT + struct vjstat vj; /* VJ header compression statistics */ +#endif /* VJ_SUPPORT */ +}; + +#if CCP_SUPPORT +struct compstat { + unsigned int unc_bytes; /* total uncompressed bytes */ + unsigned int unc_packets; /* total uncompressed packets */ + unsigned int comp_bytes; /* compressed bytes */ + unsigned int comp_packets; /* compressed packets */ + unsigned int inc_bytes; /* incompressible bytes */ + unsigned int inc_packets; /* incompressible packets */ + unsigned int ratio; /* recent compression ratio << 8 */ +}; + +struct ppp_comp_stats { + struct compstat c; /* packet compression statistics */ + struct compstat d; /* packet decompression statistics */ +}; +#endif /* CCP_SUPPORT */ + +#endif /* PPP_STATS_SUPPORT */ + +#if PPP_IDLETIMELIMIT +/* + * The following structure records the time in seconds since + * the last NP packet was sent or received. + */ +struct ppp_idle { + time_t xmit_idle; /* time since last NP packet sent */ + time_t recv_idle; /* time since last NP packet received */ +}; +#endif /* PPP_IDLETIMELIMIT */ + +/* values for epdisc.class */ +#define EPD_NULL 0 /* null discriminator, no data */ +#define EPD_LOCAL 1 +#define EPD_IP 2 +#define EPD_MAC 3 +#define EPD_MAGIC 4 +#define EPD_PHONENUM 5 + +/* + * Global variables. + */ +#ifdef HAVE_MULTILINK +extern u8_t multilink; /* enable multilink operation */ +extern u8_t doing_multilink; +extern u8_t multilink_master; +extern u8_t bundle_eof; +extern u8_t bundle_terminating; +#endif + +#ifdef MAXOCTETS +extern unsigned int maxoctets; /* Maximum octetes per session (in bytes) */ +extern int maxoctets_dir; /* Direction : + 0 - in+out (default) + 1 - in + 2 - out + 3 - max(in,out) */ +extern int maxoctets_timeout; /* Timeout for check of octets limit */ +#define PPP_OCTETS_DIRECTION_SUM 0 +#define PPP_OCTETS_DIRECTION_IN 1 +#define PPP_OCTETS_DIRECTION_OUT 2 +#define PPP_OCTETS_DIRECTION_MAXOVERAL 3 +/* same as previos, but little different on RADIUS side */ +#define PPP_OCTETS_DIRECTION_MAXSESSION 4 +#endif + +/* Data input may be used by CCP and ECP, remove this entry + * from struct protent to save some flash + */ +#define PPP_DATAINPUT 0 + +/* + * The following struct gives the addresses of procedures to call + * for a particular protocol. + */ +struct protent { + u_short protocol; /* PPP protocol number */ + /* Initialization procedure */ + void (*init) (ppp_pcb *pcb); + /* Process a received packet */ + void (*input) (ppp_pcb *pcb, u_char *pkt, int len); + /* Process a received protocol-reject */ + void (*protrej) (ppp_pcb *pcb); + /* Lower layer has come up */ + void (*lowerup) (ppp_pcb *pcb); + /* Lower layer has gone down */ + void (*lowerdown) (ppp_pcb *pcb); + /* Open the protocol */ + void (*open) (ppp_pcb *pcb); + /* Close the protocol */ + void (*close) (ppp_pcb *pcb, const char *reason); +#if PRINTPKT_SUPPORT + /* Print a packet in readable form */ + int (*printpkt) (const u_char *pkt, int len, + void (*printer) (void *, const char *, ...), + void *arg); +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT + /* Process a received data packet */ + void (*datainput) (ppp_pcb *pcb, u_char *pkt, int len); +#endif /* PPP_DATAINPUT */ +#if PRINTPKT_SUPPORT + const char *name; /* Text name of protocol */ + const char *data_name; /* Text name of corresponding data protocol */ +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS + option_t *options; /* List of command-line options */ + /* Check requested options, assign defaults */ + void (*check_options) (void); +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT + /* Configure interface for demand-dial */ + int (*demand_conf) (int unit); + /* Say whether to bring up link for this pkt */ + int (*active_pkt) (u_char *pkt, int len); +#endif /* DEMAND_SUPPORT */ +}; + +/* Table of pointers to supported protocols */ +extern const struct protent* const protocols[]; + + +/* Values for auth_pending, auth_done */ +#if PAP_SUPPORT +#define PAP_WITHPEER 0x1 +#define PAP_PEER 0x2 +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT +#define CHAP_WITHPEER 0x4 +#define CHAP_PEER 0x8 +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT +#define EAP_WITHPEER 0x10 +#define EAP_PEER 0x20 +#endif /* EAP_SUPPORT */ + +/* Values for auth_done only */ +#if CHAP_SUPPORT +#define CHAP_MD5_WITHPEER 0x40 +#define CHAP_MD5_PEER 0x80 +#if MSCHAP_SUPPORT +#define CHAP_MS_SHIFT 8 /* LSB position for MS auths */ +#define CHAP_MS_WITHPEER 0x100 +#define CHAP_MS_PEER 0x200 +#define CHAP_MS2_WITHPEER 0x400 +#define CHAP_MS2_PEER 0x800 +#endif /* MSCHAP_SUPPORT */ +#endif /* CHAP_SUPPORT */ + +/* Supported CHAP protocols */ +#if CHAP_SUPPORT + +#if MSCHAP_SUPPORT +#define CHAP_MDTYPE_SUPPORTED (MDTYPE_MICROSOFT_V2 | MDTYPE_MICROSOFT | MDTYPE_MD5) +#else /* MSCHAP_SUPPORT */ +#define CHAP_MDTYPE_SUPPORTED (MDTYPE_MD5) +#endif /* MSCHAP_SUPPORT */ + +#else /* CHAP_SUPPORT */ +#define CHAP_MDTYPE_SUPPORTED (MDTYPE_NONE) +#endif /* CHAP_SUPPORT */ + +#if PPP_STATS_SUPPORT +/* + * PPP statistics structure + */ +struct pppd_stats { + unsigned int bytes_in; + unsigned int bytes_out; + unsigned int pkts_in; + unsigned int pkts_out; +}; +#endif /* PPP_STATS_SUPPORT */ + + +/* + * PPP private functions + */ + +/* + * Functions called from lwIP core. + */ + +/* initialize the PPP subsystem */ +int ppp_init(void); + + +/* + * Functions called from PPP link protocols. + */ + +/* Create a new PPP control block */ +ppp_pcb *ppp_new(struct netif *pppif, const struct link_callbacks *callbacks, void *link_ctx_cb, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); + +/* Set a PPP PCB to its initial state */ +void ppp_clear(ppp_pcb *pcb); + +/* Initiate LCP open request */ +void ppp_start(ppp_pcb *pcb); + +/* Called when link failed to setup */ +void ppp_link_failed(ppp_pcb *pcb); + +/* Called when link is normally down (i.e. it was asked to end) */ +void ppp_link_end(ppp_pcb *pcb); + +/* function called to process input packet */ +void ppp_input(ppp_pcb *pcb, struct pbuf *pb); + +/* helper function, merge a pbuf chain into one pbuf */ +struct pbuf *ppp_singlebuf(struct pbuf *p); + + +/* + * Functions called by PPP protocols. + */ + +/* function called by all PPP subsystems to send packets */ +err_t ppp_write(ppp_pcb *pcb, struct pbuf *p); + +/* functions called by auth.c link_terminated() */ +void ppp_link_terminated(ppp_pcb *pcb); + +void new_phase(ppp_pcb *pcb, int p); + +int ppp_send_config(ppp_pcb *pcb, int mtu, u32_t accm, int pcomp, int accomp); +int ppp_recv_config(ppp_pcb *pcb, int mru, u32_t accm, int pcomp, int accomp); + +#if PPP_IPV4_SUPPORT +int sifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr, u32_t netmask); +int cifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr); +#if 0 /* UNUSED - PROXY ARP */ +int sifproxyarp(ppp_pcb *pcb, u32_t his_adr); +int cifproxyarp(ppp_pcb *pcb, u32_t his_adr); +#endif /* UNUSED - PROXY ARP */ +#if LWIP_DNS +int sdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2); +int cdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2); +#endif /* LWIP_DNS */ +#if VJ_SUPPORT +int sifvjcomp(ppp_pcb *pcb, int vjcomp, int cidcomp, int maxcid); +#endif /* VJ_SUPPORT */ +int sifup(ppp_pcb *pcb); +int sifdown (ppp_pcb *pcb); +u32_t get_mask(u32_t addr); +#endif /* PPP_IPV4_SUPPORT */ + +#if PPP_IPV6_SUPPORT +int sif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64); +int cif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64); +int sif6up(ppp_pcb *pcb); +int sif6down (ppp_pcb *pcb); +#endif /* PPP_IPV6_SUPPORT */ + +#if DEMAND_SUPPORT +int sifnpmode(ppp_pcb *pcb, int proto, enum NPmode mode); +#endif /* DEMAND_SUPPORt */ + +void netif_set_mtu(ppp_pcb *pcb, int mtu); +int netif_get_mtu(ppp_pcb *pcb); + +#if CCP_SUPPORT +#if 0 /* unused */ +int ccp_test(ppp_pcb *pcb, u_char *opt_ptr, int opt_len, int for_transmit); +#endif /* unused */ +void ccp_set(ppp_pcb *pcb, u8_t isopen, u8_t isup, u8_t receive_method, u8_t transmit_method); +void ccp_reset_comp(ppp_pcb *pcb); +void ccp_reset_decomp(ppp_pcb *pcb); +#if 0 /* unused */ +int ccp_fatal_error(ppp_pcb *pcb); +#endif /* unused */ +#endif /* CCP_SUPPORT */ + +#if PPP_IDLETIMELIMIT +int get_idle_time(ppp_pcb *pcb, struct ppp_idle *ip); +#endif /* PPP_IDLETIMELIMIT */ + +#if DEMAND_SUPPORT +int get_loop_output(void); +#endif /* DEMAND_SUPPORT */ + +/* Optional protocol names list, to make our messages a little more informative. */ +#if PPP_PROTOCOLNAME +const char * protocol_name(int proto); +#endif /* PPP_PROTOCOLNAME */ + +/* Optional stats support, to get some statistics on the PPP interface */ +#if PPP_STATS_SUPPORT +void print_link_stats(void); /* Print stats, if available */ +void reset_link_stats(int u); /* Reset (init) stats when link goes up */ +void update_link_stats(int u); /* Get stats at link termination */ +#endif /* PPP_STATS_SUPPORT */ + + + +/* + * Inline versions of get/put char/short/long. + * Pointer is advanced; we assume that both arguments + * are lvalues and will already be in registers. + * cp MUST be u_char *. + */ +#define GETCHAR(c, cp) { \ + (c) = *(cp)++; \ +} +#define PUTCHAR(c, cp) { \ + *(cp)++ = (u_char) (c); \ +} +#define GETSHORT(s, cp) { \ + (s) = *(cp)++ << 8; \ + (s) |= *(cp)++; \ +} +#define PUTSHORT(s, cp) { \ + *(cp)++ = (u_char) ((s) >> 8); \ + *(cp)++ = (u_char) (s); \ +} +#define GETLONG(l, cp) { \ + (l) = *(cp)++ << 8; \ + (l) |= *(cp)++; (l) <<= 8; \ + (l) |= *(cp)++; (l) <<= 8; \ + (l) |= *(cp)++; \ +} +#define PUTLONG(l, cp) { \ + *(cp)++ = (u_char) ((l) >> 24); \ + *(cp)++ = (u_char) ((l) >> 16); \ + *(cp)++ = (u_char) ((l) >> 8); \ + *(cp)++ = (u_char) (l); \ +} + +#define INCPTR(n, cp) ((cp) += (n)) +#define DECPTR(n, cp) ((cp) -= (n)) + +/* + * System dependent definitions for user-level 4.3BSD UNIX implementation. + */ +#define TIMEOUT(f, a, t) do { sys_untimeout((f), (a)); sys_timeout((t)*1000, (f), (a)); } while(0) +#define TIMEOUTMS(f, a, t) do { sys_untimeout((f), (a)); sys_timeout((t), (f), (a)); } while(0) +#define UNTIMEOUT(f, a) sys_untimeout((f), (a)) + +#define BZERO(s, n) memset(s, 0, n) +#define BCMP(s1, s2, l) memcmp(s1, s2, l) + +#define PRINTMSG(m, l) { ppp_info("Remote message: %0.*v", l, m); } + +/* + * MAKEHEADER - Add Header fields to a packet. + */ +#define MAKEHEADER(p, t) { \ + PUTCHAR(PPP_ALLSTATIONS, p); \ + PUTCHAR(PPP_UI, p); \ + PUTSHORT(t, p); } + +/* Procedures exported from auth.c */ +void link_required(ppp_pcb *pcb); /* we are starting to use the link */ +void link_terminated(ppp_pcb *pcb); /* we are finished with the link */ +void link_down(ppp_pcb *pcb); /* the LCP layer has left the Opened state */ +void upper_layers_down(ppp_pcb *pcb); /* take all NCPs down */ +void link_established(ppp_pcb *pcb); /* the link is up; authenticate now */ +void start_networks(ppp_pcb *pcb); /* start all the network control protos */ +void continue_networks(ppp_pcb *pcb); /* start network [ip, etc] control protos */ +#if PPP_AUTH_SUPPORT +#if PPP_SERVER +int auth_check_passwd(ppp_pcb *pcb, char *auser, int userlen, char *apasswd, int passwdlen, const char **msg, int *msglen); + /* check the user name and passwd against configuration */ +void auth_peer_fail(ppp_pcb *pcb, int protocol); + /* peer failed to authenticate itself */ +void auth_peer_success(ppp_pcb *pcb, int protocol, int prot_flavor, const char *name, int namelen); + /* peer successfully authenticated itself */ +#endif /* PPP_SERVER */ +void auth_withpeer_fail(ppp_pcb *pcb, int protocol); + /* we failed to authenticate ourselves */ +void auth_withpeer_success(ppp_pcb *pcb, int protocol, int prot_flavor); + /* we successfully authenticated ourselves */ +#endif /* PPP_AUTH_SUPPORT */ +void np_up(ppp_pcb *pcb, int proto); /* a network protocol has come up */ +void np_down(ppp_pcb *pcb, int proto); /* a network protocol has gone down */ +void np_finished(ppp_pcb *pcb, int proto); /* a network protocol no longer needs link */ +#if PPP_AUTH_SUPPORT +int get_secret(ppp_pcb *pcb, const char *client, const char *server, char *secret, int *secret_len, int am_server); + /* get "secret" for chap */ +#endif /* PPP_AUTH_SUPPORT */ + +/* Procedures exported from ipcp.c */ +/* int parse_dotted_ip (char *, u32_t *); */ + +/* Procedures exported from demand.c */ +#if DEMAND_SUPPORT +void demand_conf (void); /* config interface(s) for demand-dial */ +void demand_block (void); /* set all NPs to queue up packets */ +void demand_unblock (void); /* set all NPs to pass packets */ +void demand_discard (void); /* set all NPs to discard packets */ +void demand_rexmit (int, u32_t); /* retransmit saved frames for an NP*/ +int loop_chars (unsigned char *, int); /* process chars from loopback */ +int loop_frame (unsigned char *, int); /* should we bring link up? */ +#endif /* DEMAND_SUPPORT */ + +/* Procedures exported from multilink.c */ +#ifdef HAVE_MULTILINK +void mp_check_options (void); /* Check multilink-related options */ +int mp_join_bundle (void); /* join our link to an appropriate bundle */ +void mp_exit_bundle (void); /* have disconnected our link from bundle */ +void mp_bundle_terminated (void); +char *epdisc_to_str (struct epdisc *); /* string from endpoint discrim. */ +int str_to_epdisc (struct epdisc *, char *); /* endpt disc. from str */ +#else +#define mp_bundle_terminated() /* nothing */ +#define mp_exit_bundle() /* nothing */ +#define doing_multilink 0 +#define multilink_master 0 +#endif + +/* Procedures exported from utils.c. */ +void ppp_print_string(const u_char *p, int len, void (*printer) (void *, const char *, ...), void *arg); /* Format a string for output */ +int ppp_slprintf(char *buf, int buflen, const char *fmt, ...); /* sprintf++ */ +int ppp_vslprintf(char *buf, int buflen, const char *fmt, va_list args); /* vsprintf++ */ +size_t ppp_strlcpy(char *dest, const char *src, size_t len); /* safe strcpy */ +size_t ppp_strlcat(char *dest, const char *src, size_t len); /* safe strncpy */ +void ppp_dbglog(const char *fmt, ...); /* log a debug message */ +void ppp_info(const char *fmt, ...); /* log an informational message */ +void ppp_notice(const char *fmt, ...); /* log a notice-level message */ +void ppp_warn(const char *fmt, ...); /* log a warning message */ +void ppp_error(const char *fmt, ...); /* log an error message */ +void ppp_fatal(const char *fmt, ...); /* log an error message and die(1) */ +#if PRINTPKT_SUPPORT +void ppp_dump_packet(const char *tag, unsigned char *p, int len); + /* dump packet to debug log if interesting */ +#endif /* PRINTPKT_SUPPORT */ + + +#endif /* PPP_SUPPORT */ +#endif /* LWIP_HDR_PPP_IMPL_H */ diff --git a/tools/sdk/include/lwip/netif/ppp/pppcrypt.h b/tools/sdk/include/lwip/netif/ppp/pppcrypt.h new file mode 100755 index 00000000..ef2e87de --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/pppcrypt.h @@ -0,0 +1,43 @@ +/* + * pppcrypt.c - PPP/DES linkage for MS-CHAP and EAP SRP-SHA1 + * + * Extracted from chap_ms.c by James Carlson. + * + * Copyright (c) 1995 Eric Rosenquist. 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. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && MSCHAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPPCRYPT_H +#define PPPCRYPT_H + +void pppcrypt_56_to_64_bit_key(u_char *key, u_char *des_key); + +#endif /* PPPCRYPT_H */ + +#endif /* PPP_SUPPORT && MSCHAP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/pppdebug.h b/tools/sdk/include/lwip/netif/ppp/pppdebug.h new file mode 100755 index 00000000..e35c8e09 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/pppdebug.h @@ -0,0 +1,80 @@ +/***************************************************************************** +* pppdebug.h - System debugging utilities. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* portions Copyright (c) 1998 Global Election Systems Inc. +* portions Copyright (c) 2001 by Cognizant Pty Ltd. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE 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 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. +* +****************************************************************************** +* REVISION HISTORY (please don't use tabs!) +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 98-07-29 Guy Lancaster , Global Election Systems Inc. +* Original. +* +***************************************************************************** +*/ + +#include "lwip/opt.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPPDEBUG_H +#define PPPDEBUG_H + +/* Trace levels. */ +#define LOG_CRITICAL (PPP_DEBUG | LWIP_DBG_LEVEL_SEVERE) +#define LOG_ERR (PPP_DEBUG | LWIP_DBG_LEVEL_SEVERE) +#define LOG_NOTICE (PPP_DEBUG | LWIP_DBG_LEVEL_WARNING) +#define LOG_WARNING (PPP_DEBUG | LWIP_DBG_LEVEL_WARNING) +#define LOG_INFO (PPP_DEBUG) +#define LOG_DETAIL (PPP_DEBUG) +#define LOG_DEBUG (PPP_DEBUG) + +#if PPP_DEBUG + +#define MAINDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define SYSDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define FSMDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define LCPDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define IPCPDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define IPV6CPDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define UPAPDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define CHAPDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define PPPDEBUG(a, b) LWIP_DEBUGF(a, b) + +#else /* PPP_DEBUG */ + +#define MAINDEBUG(a) +#define SYSDEBUG(a) +#define FSMDEBUG(a) +#define LCPDEBUG(a) +#define IPCPDEBUG(a) +#define IPV6CPDEBUG(a) +#define UPAPDEBUG(a) +#define CHAPDEBUG(a) +#define PPPDEBUG(a, b) + +#endif /* PPP_DEBUG */ + +#endif /* PPPDEBUG_H */ + +#endif /* PPP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/pppoe.h b/tools/sdk/include/lwip/netif/ppp/pppoe.h new file mode 100755 index 00000000..b1dd2fd9 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/pppoe.h @@ -0,0 +1,179 @@ +/***************************************************************************** +* pppoe.h - PPP Over Ethernet implementation for lwIP. +* +* Copyright (c) 2006 by Marc Boucher, Services Informatiques (MBSI) inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE 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 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. +* +****************************************************************************** +* REVISION HISTORY +* +* 06-01-01 Marc Boucher +* Ported to lwIP. +*****************************************************************************/ + + + +/* based on NetBSD: if_pppoe.c,v 1.64 2006/01/31 23:50:15 martin Exp */ + +/*- + * Copyright (c) 2002 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Martin Husemann . + * + * 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ +#include "lwip/opt.h" +#if PPP_SUPPORT && PPPOE_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPP_OE_H +#define PPP_OE_H + +#include "ppp.h" +#include "netif/etharp.h" + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct pppoehdr { + PACK_STRUCT_FLD_8(u8_t vertype); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t session); + PACK_STRUCT_FIELD(u16_t plen); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct pppoetag { + PACK_STRUCT_FIELD(u16_t tag); + PACK_STRUCT_FIELD(u16_t len); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + + +#define PPPOE_STATE_INITIAL 0 +#define PPPOE_STATE_PADI_SENT 1 +#define PPPOE_STATE_PADR_SENT 2 +#define PPPOE_STATE_SESSION 3 +/* passive */ +#define PPPOE_STATE_PADO_SENT 1 + +#define PPPOE_HEADERLEN sizeof(struct pppoehdr) +#define PPPOE_VERTYPE 0x11 /* VER=1, TYPE = 1 */ + +#define PPPOE_TAG_EOL 0x0000 /* end of list */ +#define PPPOE_TAG_SNAME 0x0101 /* service name */ +#define PPPOE_TAG_ACNAME 0x0102 /* access concentrator name */ +#define PPPOE_TAG_HUNIQUE 0x0103 /* host unique */ +#define PPPOE_TAG_ACCOOKIE 0x0104 /* AC cookie */ +#define PPPOE_TAG_VENDOR 0x0105 /* vendor specific */ +#define PPPOE_TAG_RELAYSID 0x0110 /* relay session id */ +#define PPPOE_TAG_SNAME_ERR 0x0201 /* service name error */ +#define PPPOE_TAG_ACSYS_ERR 0x0202 /* AC system error */ +#define PPPOE_TAG_GENERIC_ERR 0x0203 /* gerneric error */ + +#define PPPOE_CODE_PADI 0x09 /* Active Discovery Initiation */ +#define PPPOE_CODE_PADO 0x07 /* Active Discovery Offer */ +#define PPPOE_CODE_PADR 0x19 /* Active Discovery Request */ +#define PPPOE_CODE_PADS 0x65 /* Active Discovery Session confirmation */ +#define PPPOE_CODE_PADT 0xA7 /* Active Discovery Terminate */ + +#ifndef PPPOE_MAX_AC_COOKIE_LEN +#define PPPOE_MAX_AC_COOKIE_LEN 64 +#endif + +struct pppoe_softc { + struct pppoe_softc *next; + struct netif *sc_ethif; /* ethernet interface we are using */ + ppp_pcb *pcb; /* PPP PCB */ + + struct eth_addr sc_dest; /* hardware address of concentrator */ + u16_t sc_session; /* PPPoE session id */ + u8_t sc_state; /* discovery phase or session connected */ + +#ifdef PPPOE_TODO + u8_t *sc_service_name; /* if != NULL: requested name of service */ + u8_t *sc_concentrator_name; /* if != NULL: requested concentrator id */ +#endif /* PPPOE_TODO */ + u8_t sc_ac_cookie[PPPOE_MAX_AC_COOKIE_LEN]; /* content of AC cookie we must echo back */ + u8_t sc_ac_cookie_len; /* length of cookie data */ +#ifdef PPPOE_SERVER + u8_t *sc_hunique; /* content of host unique we must echo back */ + u8_t sc_hunique_len; /* length of host unique */ +#endif + u8_t sc_padi_retried; /* number of PADI retries already done */ + u8_t sc_padr_retried; /* number of PADR retries already done */ +}; + + +#define pppoe_init() /* compatibility define, no initialization needed */ + +ppp_pcb *pppoe_create(struct netif *pppif, + struct netif *ethif, + const char *service_name, const char *concentrator_name, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); + +/* + * Functions called from lwIP + * DO NOT CALL FROM lwIP USER APPLICATION. + */ +void pppoe_disc_input(struct netif *netif, struct pbuf *p); +void pppoe_data_input(struct netif *netif, struct pbuf *p); + +#endif /* PPP_OE_H */ + +#endif /* PPP_SUPPORT && PPPOE_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/pppol2tp.h b/tools/sdk/include/lwip/netif/ppp/pppol2tp.h new file mode 100755 index 00000000..097b4d18 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/pppol2tp.h @@ -0,0 +1,201 @@ +/** + * @file + * Network Point to Point Protocol over Layer 2 Tunneling Protocol header file. + * + */ + +/* + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && PPPOL2TP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPPOL2TP_H_ +#define PPPOL2TP_H_ + +#include "ppp.h" + +/* Timeout */ +#define PPPOL2TP_CONTROL_TIMEOUT (5*1000) /* base for quick timeout calculation */ +#define PPPOL2TP_SLOW_RETRY (60*1000) /* persistent retry interval */ + +#define PPPOL2TP_MAXSCCRQ 4 /* retry SCCRQ four times (quickly) */ +#define PPPOL2TP_MAXICRQ 4 /* retry IRCQ four times */ +#define PPPOL2TP_MAXICCN 4 /* retry ICCN four times */ + +/* L2TP header flags */ +#define PPPOL2TP_HEADERFLAG_CONTROL 0x8000 +#define PPPOL2TP_HEADERFLAG_LENGTH 0x4000 +#define PPPOL2TP_HEADERFLAG_SEQUENCE 0x0800 +#define PPPOL2TP_HEADERFLAG_OFFSET 0x0200 +#define PPPOL2TP_HEADERFLAG_PRIORITY 0x0100 +#define PPPOL2TP_HEADERFLAG_VERSION 0x0002 + +/* Mandatory bits for control: Control, Length, Sequence, Version 2 */ +#define PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY (PPPOL2TP_HEADERFLAG_CONTROL|PPPOL2TP_HEADERFLAG_LENGTH|PPPOL2TP_HEADERFLAG_SEQUENCE|PPPOL2TP_HEADERFLAG_VERSION) +/* Forbidden bits for control: Offset, Priority */ +#define PPPOL2TP_HEADERFLAG_CONTROL_FORBIDDEN (PPPOL2TP_HEADERFLAG_OFFSET|PPPOL2TP_HEADERFLAG_PRIORITY) + +/* Mandatory bits for data: Version 2 */ +#define PPPOL2TP_HEADERFLAG_DATA_MANDATORY (PPPOL2TP_HEADERFLAG_VERSION) + +/* AVP (Attribute Value Pair) header */ +#define PPPOL2TP_AVPHEADERFLAG_MANDATORY 0x8000 +#define PPPOL2TP_AVPHEADERFLAG_HIDDEN 0x4000 +#define PPPOL2TP_AVPHEADERFLAG_LENGTHMASK 0x03ff + +/* -- AVP - Message type */ +#define PPPOL2TP_AVPTYPE_MESSAGE 0 /* Message type */ + +/* Control Connection Management */ +#define PPPOL2TP_MESSAGETYPE_SCCRQ 1 /* Start Control Connection Request */ +#define PPPOL2TP_MESSAGETYPE_SCCRP 2 /* Start Control Connection Reply */ +#define PPPOL2TP_MESSAGETYPE_SCCCN 3 /* Start Control Connection Connected */ +#define PPPOL2TP_MESSAGETYPE_STOPCCN 4 /* Stop Control Connection Notification */ +#define PPPOL2TP_MESSAGETYPE_HELLO 6 /* Hello */ +/* Call Management */ +#define PPPOL2TP_MESSAGETYPE_OCRQ 7 /* Outgoing Call Request */ +#define PPPOL2TP_MESSAGETYPE_OCRP 8 /* Outgoing Call Reply */ +#define PPPOL2TP_MESSAGETYPE_OCCN 9 /* Outgoing Call Connected */ +#define PPPOL2TP_MESSAGETYPE_ICRQ 10 /* Incoming Call Request */ +#define PPPOL2TP_MESSAGETYPE_ICRP 11 /* Incoming Call Reply */ +#define PPPOL2TP_MESSAGETYPE_ICCN 12 /* Incoming Call Connected */ +#define PPPOL2TP_MESSAGETYPE_CDN 14 /* Call Disconnect Notify */ +/* Error reporting */ +#define PPPOL2TP_MESSAGETYPE_WEN 15 /* WAN Error Notify */ +/* PPP Session Control */ +#define PPPOL2TP_MESSAGETYPE_SLI 16 /* Set Link Info */ + +/* -- AVP - Result code */ +#define PPPOL2TP_AVPTYPE_RESULTCODE 1 /* Result code */ +#define PPPOL2TP_RESULTCODE 1 /* General request to clear control connection */ + +/* -- AVP - Protocol version (!= L2TP Header version) */ +#define PPPOL2TP_AVPTYPE_VERSION 2 +#define PPPOL2TP_VERSION 0x0100 /* L2TP Protocol version 1, revision 0 */ + +/* -- AVP - Framing capabilities */ +#define PPPOL2TP_AVPTYPE_FRAMINGCAPABILITIES 3 /* Bearer capabilities */ +#define PPPOL2TP_FRAMINGCAPABILITIES 0x00000003 /* Async + Sync framing */ + +/* -- AVP - Bearer capabilities */ +#define PPPOL2TP_AVPTYPE_BEARERCAPABILITIES 4 /* Bearer capabilities */ +#define PPPOL2TP_BEARERCAPABILITIES 0x00000003 /* Analog + Digital Access */ + +/* -- AVP - Tie breaker */ +#define PPPOL2TP_AVPTYPE_TIEBREAKER 5 + +/* -- AVP - Host name */ +#define PPPOL2TP_AVPTYPE_HOSTNAME 7 /* Host name */ +#define PPPOL2TP_HOSTNAME "lwIP" /* FIXME: make it configurable */ + +/* -- AVP - Vendor name */ +#define PPPOL2TP_AVPTYPE_VENDORNAME 8 /* Vendor name */ +#define PPPOL2TP_VENDORNAME "lwIP" /* FIXME: make it configurable */ + +/* -- AVP - Assign tunnel ID */ +#define PPPOL2TP_AVPTYPE_TUNNELID 9 /* Assign Tunnel ID */ + +/* -- AVP - Receive window size */ +#define PPPOL2TP_AVPTYPE_RECEIVEWINDOWSIZE 10 /* Receive window size */ +#define PPPOL2TP_RECEIVEWINDOWSIZE 8 /* FIXME: make it configurable */ + +/* -- AVP - Challenge */ +#define PPPOL2TP_AVPTYPE_CHALLENGE 11 /* Challenge */ + +/* -- AVP - Cause code */ +#define PPPOL2TP_AVPTYPE_CAUSECODE 12 /* Cause code*/ + +/* -- AVP - Challenge response */ +#define PPPOL2TP_AVPTYPE_CHALLENGERESPONSE 13 /* Challenge response */ +#define PPPOL2TP_AVPTYPE_CHALLENGERESPONSE_SIZE 16 + +/* -- AVP - Assign session ID */ +#define PPPOL2TP_AVPTYPE_SESSIONID 14 /* Assign Session ID */ + +/* -- AVP - Call serial number */ +#define PPPOL2TP_AVPTYPE_CALLSERIALNUMBER 15 /* Call Serial Number */ + +/* -- AVP - Framing type */ +#define PPPOL2TP_AVPTYPE_FRAMINGTYPE 19 /* Framing Type */ +#define PPPOL2TP_FRAMINGTYPE 0x00000001 /* Sync framing */ + +/* -- AVP - TX Connect Speed */ +#define PPPOL2TP_AVPTYPE_TXCONNECTSPEED 24 /* TX Connect Speed */ +#define PPPOL2TP_TXCONNECTSPEED 100000000 /* Connect speed: 100 Mbits/s */ + +/* L2TP Session state */ +#define PPPOL2TP_STATE_INITIAL 0 +#define PPPOL2TP_STATE_SCCRQ_SENT 1 +#define PPPOL2TP_STATE_ICRQ_SENT 2 +#define PPPOL2TP_STATE_ICCN_SENT 3 +#define PPPOL2TP_STATE_DATA 4 + +#define PPPOL2TP_OUTPUT_DATA_HEADER_LEN 6 /* Our data header len */ + +/* + * PPPoL2TP interface control block. + */ +typedef struct pppol2tp_pcb_s pppol2tp_pcb; +struct pppol2tp_pcb_s { + ppp_pcb *ppp; /* PPP PCB */ + u8_t phase; /* L2TP phase */ + struct udp_pcb *udp; /* UDP L2TP Socket */ + struct netif *netif; /* Output interface, used as a default route */ + ip_addr_t remote_ip; /* LNS IP Address */ + u16_t remote_port; /* LNS port */ +#if PPPOL2TP_AUTH_SUPPORT + const u8_t *secret; /* Secret string */ + u8_t secret_len; /* Secret string length */ + u8_t secret_rv[16]; /* Random vector */ + u8_t challenge_hash[16]; /* Challenge response */ + u8_t send_challenge; /* Boolean whether the next sent packet should contains a challenge response */ +#endif /* PPPOL2TP_AUTH_SUPPORT */ + + u16_t tunnel_port; /* Tunnel port */ + u16_t our_ns; /* NS to peer */ + u16_t peer_nr; /* NR from peer */ + u16_t peer_ns; /* NS from peer */ + u16_t source_tunnel_id; /* Tunnel ID assigned by peer */ + u16_t remote_tunnel_id; /* Tunnel ID assigned to peer */ + u16_t source_session_id; /* Session ID assigned by peer */ + u16_t remote_session_id; /* Session ID assigned to peer */ + + u8_t sccrq_retried; /* number of SCCRQ retries already done */ + u8_t icrq_retried; /* number of ICRQ retries already done */ + u8_t iccn_retried; /* number of ICCN retries already done */ +}; + + +/* Create a new L2TP session. */ +ppp_pcb *pppol2tp_create(struct netif *pppif, + struct netif *netif, ip_addr_t *ipaddr, u16_t port, + const u8_t *secret, u8_t secret_len, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); + +#endif /* PPPOL2TP_H_ */ +#endif /* PPP_SUPPORT && PPPOL2TP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/pppos.h b/tools/sdk/include/lwip/netif/ppp/pppos.h new file mode 100755 index 00000000..39b2b7d0 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/pppos.h @@ -0,0 +1,119 @@ +/** + * @file + * Network Point to Point Protocol over Serial header file. + * + */ + +/* + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && PPPOS_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPPOS_H +#define PPPOS_H + +#include "lwip/sys.h" +#include "lwip/sio.h" + +#include "ppp.h" +#include "vj.h" + +/* PPP packet parser states. Current state indicates operation yet to be + * completed. */ +enum { + PDIDLE = 0, /* Idle state - waiting. */ + PDSTART, /* Process start flag. */ + PDADDRESS, /* Process address field. */ + PDCONTROL, /* Process control field. */ + PDPROTOCOL1, /* Process protocol field 1. */ + PDPROTOCOL2, /* Process protocol field 2. */ + PDDATA /* Process data byte. */ +}; + +/* PPPoS serial output callback function prototype */ +typedef u32_t (*pppos_output_cb_fn)(ppp_pcb *pcb, u8_t *data, u32_t len, void *ctx); + +/* + * Extended asyncmap - allows any character to be escaped. + */ +typedef u8_t ext_accm[32]; + +/* + * PPPoS interface control block. + */ +typedef struct pppos_pcb_s pppos_pcb; +struct pppos_pcb_s { + /* -- below are data that will NOT be cleared between two sessions */ + ppp_pcb *ppp; /* PPP PCB */ + pppos_output_cb_fn output_cb; /* PPP serial output callback */ + + /* -- below are data that will be cleared between two sessions + * + * last_xmit must be the first member of cleared members, because it is + * used to know which part must not be cleared. + */ + u32_t last_xmit; /* Time of last transmission. */ + ext_accm out_accm; /* Async-Ctl-Char-Map for output. */ + + /* flags */ + unsigned int open :1; /* Set if PPPoS is open */ + unsigned int pcomp :1; /* Does peer accept protocol compression? */ + unsigned int accomp :1; /* Does peer accept addr/ctl compression? */ + + /* PPPoS rx */ + ext_accm in_accm; /* Async-Ctl-Char-Map for input. */ + struct pbuf *in_head, *in_tail; /* The input packet. */ + u16_t in_protocol; /* The input protocol code. */ + u16_t in_fcs; /* Input Frame Check Sequence value. */ + u8_t in_state; /* The input process state. */ + u8_t in_escaped; /* Escape next character. */ +}; + +/* Create a new PPPoS session. */ +ppp_pcb *pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); + +#if !NO_SYS && !PPP_INPROC_IRQ_SAFE +/* Pass received raw characters to PPPoS to be decoded through lwIP TCPIP thread. */ +err_t pppos_input_tcpip(ppp_pcb *ppp, u8_t *s, int l); +#endif /* !NO_SYS && !PPP_INPROC_IRQ_SAFE */ + +/* PPP over Serial: this is the input function to be called for received data. */ +void pppos_input(ppp_pcb *ppp, u8_t* data, int len); + + +/* + * Functions called from lwIP + * DO NOT CALL FROM lwIP USER APPLICATION. + */ +#if !NO_SYS && !PPP_INPROC_IRQ_SAFE +err_t pppos_input_sys(struct pbuf *p, struct netif *inp); +#endif /* !NO_SYS && !PPP_INPROC_IRQ_SAFE */ + +#endif /* PPPOS_H */ +#endif /* PPP_SUPPORT && PPPOL2TP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/upap.h b/tools/sdk/include/lwip/netif/ppp/upap.h new file mode 100755 index 00000000..bb9309bd --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/upap.h @@ -0,0 +1,123 @@ +/* + * upap.h - User/Password Authentication Protocol definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. 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. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: upap.h,v 1.8 2002/12/04 23:03:33 paulus Exp $ + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && PAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef UPAP_H +#define UPAP_H + +#include "ppp.h" + +/* + * Packet header = Code, id, length. + */ +#define UPAP_HEADERLEN 4 + + +/* + * UPAP codes. + */ +#define UPAP_AUTHREQ 1 /* Authenticate-Request */ +#define UPAP_AUTHACK 2 /* Authenticate-Ack */ +#define UPAP_AUTHNAK 3 /* Authenticate-Nak */ + + +/* + * Client states. + */ +#define UPAPCS_INITIAL 0 /* Connection down */ +#define UPAPCS_CLOSED 1 /* Connection up, haven't requested auth */ +#define UPAPCS_PENDING 2 /* Connection down, have requested auth */ +#define UPAPCS_AUTHREQ 3 /* We've sent an Authenticate-Request */ +#define UPAPCS_OPEN 4 /* We've received an Ack */ +#define UPAPCS_BADAUTH 5 /* We've received a Nak */ + +/* + * Server states. + */ +#define UPAPSS_INITIAL 0 /* Connection down */ +#define UPAPSS_CLOSED 1 /* Connection up, haven't requested auth */ +#define UPAPSS_PENDING 2 /* Connection down, have requested auth */ +#define UPAPSS_LISTEN 3 /* Listening for an Authenticate */ +#define UPAPSS_OPEN 4 /* We've sent an Ack */ +#define UPAPSS_BADAUTH 5 /* We've sent a Nak */ + + +/* + * Timeouts. + */ +#if 0 /* moved to opt.h */ +#define UPAP_DEFTIMEOUT 3 /* Timeout (seconds) for retransmitting req */ +#define UPAP_DEFREQTIME 30 /* Time to wait for auth-req from peer */ +#endif /* moved to opt.h */ + +/* + * Each interface is described by upap structure. + */ +#if PAP_SUPPORT +typedef struct upap_state { + const char *us_user; /* User */ + u8_t us_userlen; /* User length */ + const char *us_passwd; /* Password */ + u8_t us_passwdlen; /* Password length */ + u8_t us_clientstate; /* Client state */ +#if PPP_SERVER + u8_t us_serverstate; /* Server state */ +#endif /* PPP_SERVER */ + u8_t us_id; /* Current id */ + u8_t us_transmits; /* Number of auth-reqs sent */ +} upap_state; +#endif /* PAP_SUPPORT */ + + +void upap_authwithpeer(ppp_pcb *pcb, const char *user, const char *password); +#if PPP_SERVER +void upap_authpeer(ppp_pcb *pcb); +#endif /* PPP_SERVER */ + +extern const struct protent pap_protent; + +#endif /* UPAP_H */ +#endif /* PPP_SUPPORT && PAP_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/ppp/vj.h b/tools/sdk/include/lwip/netif/ppp/vj.h new file mode 100755 index 00000000..f2e1f8b4 --- /dev/null +++ b/tools/sdk/include/lwip/netif/ppp/vj.h @@ -0,0 +1,161 @@ +/* + * Definitions for tcp compression routines. + * + * $Id: vj.h,v 1.7 2010/02/22 17:52:09 goldsimon Exp $ + * + * Copyright (c) 1989 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * Van Jacobson (van@helios.ee.lbl.gov), Dec 31, 1989: + * - Initial distribution. + */ + +#include "lwip/opt.h" +#if PPP_SUPPORT && VJ_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef VJ_H +#define VJ_H + +#include "lwip/ip.h" +#include "lwip/priv/tcp_priv.h" + +#define MAX_SLOTS 16 /* must be > 2 and < 256 */ +#define MAX_HDR 128 + +/* + * Compressed packet format: + * + * The first octet contains the packet type (top 3 bits), TCP + * 'push' bit, and flags that indicate which of the 4 TCP sequence + * numbers have changed (bottom 5 bits). The next octet is a + * conversation number that associates a saved IP/TCP header with + * the compressed packet. The next two octets are the TCP checksum + * from the original datagram. The next 0 to 15 octets are + * sequence number changes, one change per bit set in the header + * (there may be no changes and there are two special cases where + * the receiver implicitly knows what changed -- see below). + * + * There are 5 numbers which can change (they are always inserted + * in the following order): TCP urgent pointer, window, + * acknowlegement, sequence number and IP ID. (The urgent pointer + * is different from the others in that its value is sent, not the + * change in value.) Since typical use of SLIP links is biased + * toward small packets (see comments on MTU/MSS below), changes + * use a variable length coding with one octet for numbers in the + * range 1 - 255 and 3 octets (0, MSB, LSB) for numbers in the + * range 256 - 65535 or 0. (If the change in sequence number or + * ack is more than 65535, an uncompressed packet is sent.) + */ + +/* + * Packet types (must not conflict with IP protocol version) + * + * The top nibble of the first octet is the packet type. There are + * three possible types: IP (not proto TCP or tcp with one of the + * control flags set); uncompressed TCP (a normal IP/TCP packet but + * with the 8-bit protocol field replaced by an 8-bit connection id -- + * this type of packet syncs the sender & receiver); and compressed + * TCP (described above). + * + * LSB of 4-bit field is TCP "PUSH" bit (a worthless anachronism) and + * is logically part of the 4-bit "changes" field that follows. Top + * three bits are actual packet type. For backward compatibility + * and in the interest of conserving bits, numbers are chosen so the + * IP protocol version number (4) which normally appears in this nibble + * means "IP packet". + */ + +/* packet types */ +#define TYPE_IP 0x40 +#define TYPE_UNCOMPRESSED_TCP 0x70 +#define TYPE_COMPRESSED_TCP 0x80 +#define TYPE_ERROR 0x00 + +/* Bits in first octet of compressed packet */ +#define NEW_C 0x40 /* flag bits for what changed in a packet */ +#define NEW_I 0x20 +#define NEW_S 0x08 +#define NEW_A 0x04 +#define NEW_W 0x02 +#define NEW_U 0x01 + +/* reserved, special-case values of above */ +#define SPECIAL_I (NEW_S|NEW_W|NEW_U) /* echoed interactive traffic */ +#define SPECIAL_D (NEW_S|NEW_A|NEW_W|NEW_U) /* unidirectional data */ +#define SPECIALS_MASK (NEW_S|NEW_A|NEW_W|NEW_U) + +#define TCP_PUSH_BIT 0x10 + + +/* + * "state" data for each active tcp conversation on the wire. This is + * basically a copy of the entire IP/TCP header from the last packet + * we saw from the conversation together with a small identifier + * the transmit & receive ends of the line use to locate saved header. + */ +struct cstate { + struct cstate *cs_next; /* next most recently used state (xmit only) */ + u16_t cs_hlen; /* size of hdr (receive only) */ + u8_t cs_id; /* connection # associated with this state */ + u8_t cs_filler; + union { + char csu_hdr[MAX_HDR]; + struct ip_hdr csu_ip; /* ip/tcp hdr from most recent packet */ + } vjcs_u; +}; +#define cs_ip vjcs_u.csu_ip +#define cs_hdr vjcs_u.csu_hdr + + +struct vjstat { + u32_t vjs_packets; /* outbound packets */ + u32_t vjs_compressed; /* outbound compressed packets */ + u32_t vjs_searches; /* searches for connection state */ + u32_t vjs_misses; /* times couldn't find conn. state */ + u32_t vjs_uncompressedin; /* inbound uncompressed packets */ + u32_t vjs_compressedin; /* inbound compressed packets */ + u32_t vjs_errorin; /* inbound unknown type packets */ + u32_t vjs_tossed; /* inbound packets tossed because of error */ +}; + +/* + * all the state data for one serial line (we need one of these per line). + */ +struct vjcompress { + struct cstate *last_cs; /* most recently used tstate */ + u8_t last_recv; /* last rcvd conn. id */ + u8_t last_xmit; /* last sent conn. id */ + u16_t flags; + u8_t maxSlotIndex; + u8_t compressSlot; /* Flag indicating OK to compress slot ID. */ +#if LINK_STATS + struct vjstat stats; +#endif + struct cstate tstate[MAX_SLOTS]; /* xmit connection states */ + struct cstate rstate[MAX_SLOTS]; /* receive connection states */ +}; + +/* flag values */ +#define VJF_TOSS 1U /* tossing rcvd frames because of input err */ + +extern void vj_compress_init (struct vjcompress *comp); +extern u8_t vj_compress_tcp (struct vjcompress *comp, struct pbuf **pb); +extern void vj_uncompress_err (struct vjcompress *comp); +extern int vj_uncompress_uncomp(struct pbuf *nb, struct vjcompress *comp); +extern int vj_uncompress_tcp (struct pbuf **nb, struct vjcompress *comp); + +#endif /* VJ_H */ + +#endif /* PPP_SUPPORT && VJ_SUPPORT */ diff --git a/tools/sdk/include/lwip/netif/slipif.h b/tools/sdk/include/lwip/netif/slipif.h new file mode 100755 index 00000000..d164d448 --- /dev/null +++ b/tools/sdk/include/lwip/netif/slipif.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * 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 the Institute 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 INSTITUTE 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 INSTITUTE 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_NETIF_SLIPIF_H +#define LWIP_HDR_NETIF_SLIPIF_H + +#include "lwip/opt.h" +#include "lwip/netif.h" + +/** Set this to 1 to start a thread that blocks reading on the serial line + * (using sio_read()). + */ +#ifndef SLIP_USE_RX_THREAD +#define SLIP_USE_RX_THREAD !NO_SYS +#endif + +/** Set this to 1 to enable functions to pass in RX bytes from ISR context. + * If enabled, slipif_received_byte[s]() process incoming bytes and put assembled + * packets on a queue, which is fed into lwIP from slipif_poll(). + * If disabled, slipif_poll() polls the serial line (using sio_tryread()). + */ +#ifndef SLIP_RX_FROM_ISR +#define SLIP_RX_FROM_ISR 0 +#endif + +/** Set this to 1 (default for SLIP_RX_FROM_ISR) to queue incoming packets + * received by slipif_received_byte[s]() as long as PBUF_POOL pbufs are available. + * If disabled, packets will be dropped if more than one packet is received. + */ +#ifndef SLIP_RX_QUEUE +#define SLIP_RX_QUEUE SLIP_RX_FROM_ISR +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +err_t slipif_init(struct netif * netif); +void slipif_poll(struct netif *netif); +#if SLIP_RX_FROM_ISR +void slipif_process_rxqueue(struct netif *netif); +void slipif_received_byte(struct netif *netif, u8_t data); +void slipif_received_bytes(struct netif *netif, u8_t *data, u8_t len); +#endif /* SLIP_RX_FROM_ISR */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_NETIF_SLIPIF_H */ + diff --git a/tools/sdk/include/lwip/netif/wlanif.h b/tools/sdk/include/lwip/netif/wlanif.h new file mode 100755 index 00000000..7eb303ea --- /dev/null +++ b/tools/sdk/include/lwip/netif/wlanif.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2010-2011 Espressif System + * +*/ + +#ifndef _WLAN_LWIP_IF_H_ +#define _WLAN_LWIP_IF_H_ + +#include "esp_wifi.h" + +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +err_t wlanif_init(struct netif *netif); + +void wlanif_input(struct netif *netif, void *buffer, u16_t len, void* eb); + +bool ieee80211_output(wifi_interface_t wifi_if, void *buffer, u16_t len); + +wifi_interface_t wifi_get_interface(void *dev); + +void netif_reg_addr_change_cb(void* cb); + +#ifdef __cplusplus +} +#endif + +#endif /* _WLAN_LWIP_IF_H_ */ diff --git a/tools/sdk/include/lwip/port/arch/cc.h b/tools/sdk/include/lwip/port/arch/cc.h new file mode 100644 index 00000000..6fc1da18 --- /dev/null +++ b/tools/sdk/include/lwip/port/arch/cc.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * 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 the Institute 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 INSTITUTE 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 INSTITUTE 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __ARCH_CC_H__ +#define __ARCH_CC_H__ + +#include +#include + +#include "arch/sys_arch.h" + +#define BYTE_ORDER LITTLE_ENDIAN + +typedef uint8_t u8_t; +typedef int8_t s8_t; +typedef uint16_t u16_t; +typedef int16_t s16_t; +typedef uint32_t u32_t; +typedef int32_t s32_t; + +typedef unsigned long mem_ptr_t; +typedef int sys_prot_t; + +#define S16_F "d" +#define U16_F "d" +#define X16_F "x" + +#define S32_F "d" +#define U32_F "d" +#define X32_F "x" + +#define PACK_STRUCT_FIELD(x) x +#define PACK_STRUCT_STRUCT __attribute__((packed)) +#define PACK_STRUCT_BEGIN +#define PACK_STRUCT_END + +#include + +#define LWIP_PLATFORM_DIAG(x) do {printf x;} while(0) +#define LWIP_PLATFORM_ASSERT(x) do {printf(x); sys_arch_assert(__FILE__, __LINE__);} while(0) + +//#define LWIP_DEBUG +#define LWIP_NOASSERT +//#define LWIP_ERROR + +#endif /* __ARCH_CC_H__ */ diff --git a/tools/sdk/include/lwip/port/arch/perf.h b/tools/sdk/include/lwip/port/arch/perf.h new file mode 100644 index 00000000..089facac --- /dev/null +++ b/tools/sdk/include/lwip/port/arch/perf.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * 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 the Institute 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 INSTITUTE 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 INSTITUTE 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __PERF_H__ +#define __PERF_H__ + +#define PERF_START /* null definition */ +#define PERF_STOP(x) /* null definition */ + +#endif /* __PERF_H__ */ diff --git a/tools/sdk/include/lwip/port/arch/sys_arch.h b/tools/sdk/include/lwip/port/arch/sys_arch.h new file mode 100644 index 00000000..a8633482 --- /dev/null +++ b/tools/sdk/include/lwip/port/arch/sys_arch.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __SYS_ARCH_H__ +#define __SYS_ARCH_H__ + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "freertos/semphr.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef xSemaphoreHandle sys_sem_t; +typedef xSemaphoreHandle sys_mutex_t; +typedef xTaskHandle sys_thread_t; + +typedef struct sys_mbox_s { + xQueueHandle os_mbox; + sys_mutex_t lock; + uint8_t alive; +}* sys_mbox_t; + + +#define LWIP_COMPAT_MUTEX 0 + +#if !LWIP_COMPAT_MUTEX +#define sys_mutex_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) +#define sys_mutex_set_invalid( x ) ( ( *x ) = NULL ) +#endif + +#define sys_mbox_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) +#define sys_mbox_set_invalid( x ) ( ( *x ) = NULL ) + +#define sys_sem_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) +#define sys_sem_set_invalid( x ) ( ( *x ) = NULL ) + +void sys_arch_assert(const char *file, int line); +uint32_t system_get_time(void); +void sys_delay_ms(uint32_t ms); +sys_sem_t* sys_thread_sem_init(void); +void sys_thread_sem_deinit(void); +sys_sem_t* sys_thread_sem_get(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __SYS_ARCH_H__ */ + diff --git a/tools/sdk/include/lwip/port/lwipopts.h b/tools/sdk/include/lwip/port/lwipopts.h new file mode 100755 index 00000000..29506c0b --- /dev/null +++ b/tools/sdk/include/lwip/port/lwipopts.h @@ -0,0 +1,531 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +#include +#include "esp_task.h" +#include "sdkconfig.h" + +/* Enable all Espressif-only options */ +#define LWIP_ESP8266 + +/* + ----------------------------------------------- + ---------- Platform specific locking ---------- + ----------------------------------------------- +*/ +/** + * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain + * critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#define SYS_LIGHTWEIGHT_PROT 1 + +/** + * MEMCPY: override this if you have a faster implementation at hand than the + * one included in your C library + */ +#define MEMCPY(dst,src,len) memcpy(dst,src,len) + +/** + * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a + * call to memcpy() if the length is known at compile time and is small. + */ +#define SMEMCPY(dst,src,len) memcpy(dst,src,len) + +extern unsigned long os_random(void); +#define LWIP_RAND rand +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library + * instead of the lwip internal allocator. Can save code size if you + * already use it. + */ +#define MEM_LIBC_MALLOC 1 + +/** +* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. +* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution +* speed and usage from interrupts! +*/ +#define MEMP_MEM_MALLOC 1 + +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 + */ +#define MEM_ALIGNMENT 4 + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_PCB 5 + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#define MEMP_NUM_NETCONN 10 + +/* + -------------------------------- + ---------- ARP options ------- + -------------------------------- +*/ +/** + * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address + * resolution. By default, only the most recent packet is queued per IP address. + * This is sufficient for most protocols and mainly reduces TCP connection + * startup time. Set this to 1 if you know your application sends more than one + * packet in a row to an IP address that is not in the ARP cache. + */ +#define ARP_QUEUEING 1 + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#define IP_REASSEMBLY 0 + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#define IP_FRAG 0 + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#define IP_REASS_MAXAGE 3 + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#define IP_REASS_MAX_PBUFS 10 + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#define LWIP_DHCP 1 + + +#define DHCP_MAXRTX 0 //(*(volatile uint32*)0x600011E0) +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/* + ---------------------------------- + ---------- SNMP options ---------- + ---------------------------------- +*/ +/* + ---------------------------------- + ---------- IGMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_IGMP==1: Turn on IGMP module. + */ +#define LWIP_IGMP 1 + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#define LWIP_DNS 1 + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * TCP_WND: The size of a TCP window. This must be at least + * (2 * TCP_MSS) for things to work well + */ +#define PERF 1 +#ifdef PERF +extern unsigned char misc_prof_get_tcpw(void); +extern unsigned char misc_prof_get_tcp_snd_buf(void); +#define TCP_WND (misc_prof_get_tcpw()*TCP_MSS) +#define TCP_SND_BUF (misc_prof_get_tcp_snd_buf()*TCP_MSS) + +#else + +#define TCP_WND (4 * TCP_MSS) +#define TCP_SND_BUF (2 * TCP_MSS) + +#endif + + +/** + * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. + * Define to 0 if your device is low on memory. + */ +#define TCP_QUEUE_OOSEQ 1 + +/* + * LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all + * events (accept, sent, etc) that happen in the system. + * LWIP_CALLBACK_API==1: The PCB callback function is called directly + * for the event. This is the default. +*/ +#define TCP_MSS 1460 + +/** + * TCP_MAXRTX: Maximum number of retransmissions of data segments. + */ +#define TCP_MAXRTX 12 //(*(volatile uint32*)0x600011E8) + +/** + * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. + */ +#define TCP_SYNMAXRTX 6 //(*(volatile uint32*)0x600011E4) + +/** + * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. + */ +#define TCP_LISTEN_BACKLOG 1 + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ + +/* + ------------------------------------------------ + ---------- Network Interfaces options ---------- + ------------------------------------------------ +*/ + +/** + * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname + * field. + */ +#define LWIP_NETIF_HOSTNAME 1 + +/** + * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data + * to be sent into one single pbuf. This is for compatibility with DMA-enabled + * MACs that do not support scatter-gather. + * Beware that this might involve CPU-memcpy before transmitting that would not + * be needed without this flag! Use this only if you need to! + * + * @todo: TCP and IP-frag do not work with this, yet: + */ +#define LWIP_NETIF_TX_SINGLE_PBUF 1 + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ + +/* + ------------------------------------ + ---------- SLIPIF options ---------- + ------------------------------------ +*/ + +/* + ------------------------------------ + ---------- Thread options ---------- + ------------------------------------ +*/ +/** + * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. + */ +#define TCPIP_THREAD_NAME "tiT" + +/** + * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#define TCPIP_THREAD_STACKSIZE ESP_TASK_TCPIP_STACK + +/** + * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#define TCPIP_THREAD_PRIO ESP_TASK_TCPIP_PRIO + +/** + * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when tcpip_init is called. + */ +#define TCPIP_MBOX_SIZE 16 + +/** + * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#define DEFAULT_UDP_RECVMBOX_SIZE 16 + +/** + * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#define DEFAULT_TCP_RECVMBOX_SIZE 16 +//#define DEFAULT_TCP_RECVMBOX_SIZE 6 + +/** + * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when the acceptmbox is created. + */ +#define DEFAULT_ACCEPTMBOX_SIZE 6 + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ +/** + * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!) + * Don't use it if you're not an active lwIP project member + */ +#define LWIP_TCPIP_CORE_LOCKING 0 + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and + * SO_SNDTIMEO processing. + */ +#define LWIP_SO_SNDTIMEO 1 + +/** + * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and + * SO_RCVTIMEO processing. + */ +#define LWIP_SO_RCVTIMEO 1 + +/** + * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT + * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set + * in seconds. (does not require sockets.c, and will affect tcp.c) + */ +#define LWIP_TCP_KEEPALIVE 1 + +/** + * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. + */ +#define LWIP_SO_RCVBUF 1 + +/** + * SO_REUSE==1: Enable SO_REUSEADDR option. + * This option is set via menuconfig. + */ +#define SO_REUSE CONFIG_LWIP_SO_REUSE + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#define LWIP_STATS 0 + +/* + --------------------------------- + ---------- PPP options ---------- + --------------------------------- +*/ + +/* + -------------------------------------- + ---------- Checksum options ---------- + -------------------------------------- +*/ + +/* + --------------------------------------- + ---------- IPv6 options --------------- + --------------------------------------- +*/ +/** + * LWIP_IPV6==1: Enable IPv6 + */ +#define LWIP_IPV6 1 + +/* + --------------------------------------- + ---------- Hook options --------------- + --------------------------------------- +*/ + +/* + --------------------------------------- + ---------- Debugging options ---------- + --------------------------------------- +*/ +/** + * ETHARP_DEBUG: Enable debugging in etharp.c. + */ +#define ETHARP_DEBUG LWIP_DBG_OFF + +/** + * NETIF_DEBUG: Enable debugging in netif.c. + */ +#define NETIF_DEBUG LWIP_DBG_OFF + +/** + * PBUF_DEBUG: Enable debugging in pbuf.c. + */ +#define PBUF_DEBUG LWIP_DBG_OFF + +/** + * API_LIB_DEBUG: Enable debugging in api_lib.c. + */ +#define API_LIB_DEBUG LWIP_DBG_OFF + +/** + * SOCKETS_DEBUG: Enable debugging in sockets.c. + */ +#define SOCKETS_DEBUG LWIP_DBG_OFF + +/** + * ICMP_DEBUG: Enable debugging in icmp.c. + */ +#define ICMP_DEBUG LWIP_DBG_OFF + +/** + * IP_DEBUG: Enable debugging for IP. + */ +#define IP_DEBUG LWIP_DBG_OFF + +/** + * MEMP_DEBUG: Enable debugging in memp.c. + */ +#define MEMP_DEBUG LWIP_DBG_OFF + +/** + * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. + */ +#define TCP_INPUT_DEBUG LWIP_DBG_OFF + +/** + * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. + */ +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF + +/** + * TCPIP_DEBUG: Enable debugging in tcpip.c. + */ +#define TCPIP_DEBUG LWIP_DBG_OFF + +/** + * DHCP_DEBUG: Enable debugging in dhcp.c. + */ +#define DHCP_DEBUG LWIP_DBG_OFF +#define LWIP_DEBUG 0 +#define TCP_DEBUG LWIP_DBG_OFF +#define THREAD_SAFE_DEBUG LWIP_DBG_OFF +#define LWIP_THREAD_SAFE 1 + +#define CHECKSUM_CHECK_UDP 0 +#define CHECKSUM_CHECK_IP 0 + +#define HEAP_HIGHWAT 20*1024 + +#define LWIP_NETCONN_FULLDUPLEX 1 +#define LWIP_NETCONN_SEM_PER_THREAD 1 + + + +#define SOC_SEND_LOG //printf + +#endif /* __LWIPOPTS_H__ */ diff --git a/tools/sdk/include/lwip/port/netif/wlanif.h b/tools/sdk/include/lwip/port/netif/wlanif.h new file mode 100755 index 00000000..7eb303ea --- /dev/null +++ b/tools/sdk/include/lwip/port/netif/wlanif.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2010-2011 Espressif System + * +*/ + +#ifndef _WLAN_LWIP_IF_H_ +#define _WLAN_LWIP_IF_H_ + +#include "esp_wifi.h" + +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +err_t wlanif_init(struct netif *netif); + +void wlanif_input(struct netif *netif, void *buffer, u16_t len, void* eb); + +bool ieee80211_output(wifi_interface_t wifi_if, void *buffer, u16_t len); + +wifi_interface_t wifi_get_interface(void *dev); + +void netif_reg_addr_change_cb(void* cb); + +#ifdef __cplusplus +} +#endif + +#endif /* _WLAN_LWIP_IF_H_ */ diff --git a/tools/sdk/include/lwip/posix/netdb.h b/tools/sdk/include/lwip/posix/netdb.h new file mode 100755 index 00000000..12d4c7f5 --- /dev/null +++ b/tools/sdk/include/lwip/posix/netdb.h @@ -0,0 +1,33 @@ +/** + * @file + * This file is a posix wrapper for lwip/netdb.h. + */ + +/* + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/netdb.h" diff --git a/tools/sdk/include/lwip/posix/sys/socket.h b/tools/sdk/include/lwip/posix/sys/socket.h new file mode 100755 index 00000000..0ed9baf3 --- /dev/null +++ b/tools/sdk/include/lwip/posix/sys/socket.h @@ -0,0 +1,33 @@ +/** + * @file + * This file is a posix wrapper for lwip/sockets.h. + */ + +/* + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/sockets.h" diff --git a/tools/sdk/include/lwip/sys/socket.h b/tools/sdk/include/lwip/sys/socket.h new file mode 100755 index 00000000..0ed9baf3 --- /dev/null +++ b/tools/sdk/include/lwip/sys/socket.h @@ -0,0 +1,33 @@ +/** + * @file + * This file is a posix wrapper for lwip/sockets.h. + */ + +/* + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/sockets.h" diff --git a/tools/sdk/include/mbedtls/.gitignore b/tools/sdk/include/mbedtls/.gitignore new file mode 100644 index 00000000..bf67d02e --- /dev/null +++ b/tools/sdk/include/mbedtls/.gitignore @@ -0,0 +1,4 @@ +Makefile +*.sln +*.vcxproj +mbedtls/check_config diff --git a/tools/sdk/include/mbedtls/aes_alt.h b/tools/sdk/include/mbedtls/aes_alt.h new file mode 100644 index 00000000..7161b282 --- /dev/null +++ b/tools/sdk/include/mbedtls/aes_alt.h @@ -0,0 +1,59 @@ +/** + * \file aes_alt.h + * + * \brief AES block cipher + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * + */ + +#ifndef AES_ALT_H +#define AES_ALT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(MBEDTLS_AES_ALT) +#include "hwcrypto/aes.h" + +typedef esp_aes_context mbedtls_aes_context; + +#define mbedtls_aes_init esp_aes_init +#define mbedtls_aes_free esp_aes_free +#define mbedtls_aes_setkey_enc esp_aes_setkey_enc +#define mbedtls_aes_setkey_dec esp_aes_setkey_dec +#define mbedtls_aes_crypt_ecb esp_aes_crypt_ecb +#if defined(MBEDTLS_CIPHER_MODE_CBC) +#define mbedtls_aes_crypt_cbc esp_aes_crypt_cbc +#endif +#if defined(MBEDTLS_CIPHER_MODE_CFB) +#define mbedtls_aes_crypt_cfb128 esp_aes_crypt_cfb128 +#define mbedtls_aes_crypt_cfb8 esp_aes_crypt_cfb8 +#endif +#if defined(MBEDTLS_CIPHER_MODE_CTR) +#define mbedtls_aes_crypt_ctr esp_aes_crypt_ctr +#endif +#define mbedtls_aes_encrypt esp_aes_encrypt +#define mbedtls_aes_decrypt esp_aes_decrypt +#endif /* MBEDTLS_AES_ALT */ + +#ifdef __cplusplus +} +#endif + +#endif /* aes.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/aes.h b/tools/sdk/include/mbedtls/mbedtls/aes.h new file mode 100644 index 00000000..a36e825a --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/aes.h @@ -0,0 +1,297 @@ +/** + * \file aes.h + * + * \brief AES block cipher + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_AES_H +#define MBEDTLS_AES_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +/* padlock.c and aesni.c rely on these values! */ +#define MBEDTLS_AES_ENCRYPT 1 +#define MBEDTLS_AES_DECRYPT 0 + +#define MBEDTLS_ERR_AES_INVALID_KEY_LENGTH -0x0020 /**< Invalid key length. */ +#define MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH -0x0022 /**< Invalid data input length. */ + +#if !defined(MBEDTLS_AES_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief AES context structure + * + * \note buf is able to hold 32 extra bytes, which can be used: + * - for alignment purposes if VIA padlock is used, and/or + * - to simplify key expansion in the 256-bit case by + * generating an extra round key + */ +typedef struct +{ + int nr; /*!< number of rounds */ + uint32_t *rk; /*!< AES round keys */ + uint32_t buf[68]; /*!< unaligned data */ +} +mbedtls_aes_context; + +/** + * \brief Initialize AES context + * + * \param ctx AES context to be initialized + */ +void mbedtls_aes_init( mbedtls_aes_context *ctx ); + +/** + * \brief Clear AES context + * + * \param ctx AES context to be cleared + */ +void mbedtls_aes_free( mbedtls_aes_context *ctx ); + +/** + * \brief AES key schedule (encryption) + * + * \param ctx AES context to be initialized + * \param key encryption key + * \param keybits must be 128, 192 or 256 + * + * \return 0 if successful, or MBEDTLS_ERR_AES_INVALID_KEY_LENGTH + */ +int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, + unsigned int keybits ); + +/** + * \brief AES key schedule (decryption) + * + * \param ctx AES context to be initialized + * \param key decryption key + * \param keybits must be 128, 192 or 256 + * + * \return 0 if successful, or MBEDTLS_ERR_AES_INVALID_KEY_LENGTH + */ +int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, + unsigned int keybits ); + +/** + * \brief AES-ECB block encryption/decryption + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param input 16-byte input block + * \param output 16-byte output block + * + * \return 0 if successful + */ +int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, + int mode, + const unsigned char input[16], + unsigned char output[16] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief AES-CBC buffer encryption/decryption + * Length should be a multiple of the block + * size (16 bytes) + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful, or MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH + */ +int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) +/** + * \brief AES-CFB128 buffer encryption/decryption. + * + * Note: Due to the nature of CFB you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT. + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param length length of the input data + * \param iv_off offset in IV (updated after use) + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful + */ +int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); + +/** + * \brief AES-CFB8 buffer encryption/decryption. + * + * Note: Due to the nature of CFB you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT. + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful + */ +int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); +#endif /*MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) +/** + * \brief AES-CTR buffer encryption/decryption + * + * Warning: You have to keep the maximum use of your counter in mind! + * + * Note: Due to the nature of CTR you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT. + * + * \param ctx AES context + * \param length The length of the data + * \param nc_off The offset in the current stream_block (for resuming + * within current cipher stream). The offset pointer to + * should be 0 at the start of a stream. + * \param nonce_counter The 128-bit nonce and counter. + * \param stream_block The saved stream-block for resuming. Is overwritten + * by the function. + * \param input The input data stream + * \param output The output data stream + * + * \return 0 if successful + */ +int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx, + size_t length, + size_t *nc_off, + unsigned char nonce_counter[16], + unsigned char stream_block[16], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ + +/** + * \brief Internal AES block encryption function + * (Only exposed to allow overriding it, + * see MBEDTLS_AES_ENCRYPT_ALT) + * + * \param ctx AES context + * \param input Plaintext block + * \param output Output (ciphertext) block + */ +void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ); + +/** + * \brief Internal AES block decryption function + * (Only exposed to allow overriding it, + * see MBEDTLS_AES_DECRYPT_ALT) + * + * \param ctx AES context + * \param input Ciphertext block + * \param output Output (plaintext) block + */ +void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ); + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_AES_ALT */ +#include "aes_alt.h" +#endif /* MBEDTLS_AES_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_aes_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* aes.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/aesni.h b/tools/sdk/include/mbedtls/mbedtls/aesni.h new file mode 100644 index 00000000..b1b7f1cd --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/aesni.h @@ -0,0 +1,111 @@ +/** + * \file aesni.h + * + * \brief AES-NI for hardware AES acceleration on some Intel processors + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_AESNI_H +#define MBEDTLS_AESNI_H + +#include "aes.h" + +#define MBEDTLS_AESNI_AES 0x02000000u +#define MBEDTLS_AESNI_CLMUL 0x00000002u + +#if defined(MBEDTLS_HAVE_ASM) && defined(__GNUC__) && \ + ( defined(__amd64__) || defined(__x86_64__) ) && \ + ! defined(MBEDTLS_HAVE_X86_64) +#define MBEDTLS_HAVE_X86_64 +#endif + +#if defined(MBEDTLS_HAVE_X86_64) + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief AES-NI features detection routine + * + * \param what The feature to detect + * (MBEDTLS_AESNI_AES or MBEDTLS_AESNI_CLMUL) + * + * \return 1 if CPU has support for the feature, 0 otherwise + */ +int mbedtls_aesni_has_support( unsigned int what ); + +/** + * \brief AES-NI AES-ECB block en(de)cryption + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param input 16-byte input block + * \param output 16-byte output block + * + * \return 0 on success (cannot fail) + */ +int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, + int mode, + const unsigned char input[16], + unsigned char output[16] ); + +/** + * \brief GCM multiplication: c = a * b in GF(2^128) + * + * \param c Result + * \param a First operand + * \param b Second operand + * + * \note Both operands and result are bit strings interpreted as + * elements of GF(2^128) as per the GCM spec. + */ +void mbedtls_aesni_gcm_mult( unsigned char c[16], + const unsigned char a[16], + const unsigned char b[16] ); + +/** + * \brief Compute decryption round keys from encryption round keys + * + * \param invkey Round keys for the equivalent inverse cipher + * \param fwdkey Original round keys (for encryption) + * \param nr Number of rounds (that is, number of round keys minus one) + */ +void mbedtls_aesni_inverse_key( unsigned char *invkey, + const unsigned char *fwdkey, int nr ); + +/** + * \brief Perform key expansion (for encryption) + * + * \param rk Destination buffer where the round keys are written + * \param key Encryption key + * \param bits Key size in bits (must be 128, 192 or 256) + * + * \return 0 if successful, or MBEDTLS_ERR_AES_INVALID_KEY_LENGTH + */ +int mbedtls_aesni_setkey_enc( unsigned char *rk, + const unsigned char *key, + size_t bits ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_HAVE_X86_64 */ + +#endif /* MBEDTLS_AESNI_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/arc4.h b/tools/sdk/include/mbedtls/mbedtls/arc4.h new file mode 100644 index 00000000..5fc5395a --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/arc4.h @@ -0,0 +1,113 @@ +/** + * \file arc4.h + * + * \brief The ARCFOUR stream cipher + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_ARC4_H +#define MBEDTLS_ARC4_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include + +#if !defined(MBEDTLS_ARC4_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief ARC4 context structure + */ +typedef struct +{ + int x; /*!< permutation index */ + int y; /*!< permutation index */ + unsigned char m[256]; /*!< permutation table */ +} +mbedtls_arc4_context; + +/** + * \brief Initialize ARC4 context + * + * \param ctx ARC4 context to be initialized + */ +void mbedtls_arc4_init( mbedtls_arc4_context *ctx ); + +/** + * \brief Clear ARC4 context + * + * \param ctx ARC4 context to be cleared + */ +void mbedtls_arc4_free( mbedtls_arc4_context *ctx ); + +/** + * \brief ARC4 key schedule + * + * \param ctx ARC4 context to be setup + * \param key the secret key + * \param keylen length of the key, in bytes + */ +void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, + unsigned int keylen ); + +/** + * \brief ARC4 cipher function + * + * \param ctx ARC4 context + * \param length length of the input data + * \param input buffer holding the input data + * \param output buffer for the output data + * + * \return 0 if successful + */ +int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned char *input, + unsigned char *output ); + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_ARC4_ALT */ +#include "arc4_alt.h" +#endif /* MBEDTLS_ARC4_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_arc4_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* arc4.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/asn1.h b/tools/sdk/include/mbedtls/mbedtls/asn1.h new file mode 100644 index 00000000..082832c8 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/asn1.h @@ -0,0 +1,342 @@ +/** + * \file asn1.h + * + * \brief Generic ASN.1 parsing + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_ASN1_H +#define MBEDTLS_ASN1_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include + +#if defined(MBEDTLS_BIGNUM_C) +#include "bignum.h" +#endif + +/** + * \addtogroup asn1_module + * \{ + */ + +/** + * \name ASN1 Error codes + * These error codes are OR'ed to X509 error codes for + * higher error granularity. + * ASN1 is a standard to specify data structures. + * \{ + */ +#define MBEDTLS_ERR_ASN1_OUT_OF_DATA -0x0060 /**< Out of data when parsing an ASN1 data structure. */ +#define MBEDTLS_ERR_ASN1_UNEXPECTED_TAG -0x0062 /**< ASN1 tag was of an unexpected value. */ +#define MBEDTLS_ERR_ASN1_INVALID_LENGTH -0x0064 /**< Error when trying to determine the length or invalid length. */ +#define MBEDTLS_ERR_ASN1_LENGTH_MISMATCH -0x0066 /**< Actual length differs from expected length. */ +#define MBEDTLS_ERR_ASN1_INVALID_DATA -0x0068 /**< Data is invalid. (not used) */ +#define MBEDTLS_ERR_ASN1_ALLOC_FAILED -0x006A /**< Memory allocation failed */ +#define MBEDTLS_ERR_ASN1_BUF_TOO_SMALL -0x006C /**< Buffer too small when writing ASN.1 data structure. */ + +/* \} name */ + +/** + * \name DER constants + * These constants comply with DER encoded the ANS1 type tags. + * DER encoding uses hexadecimal representation. + * An example DER sequence is:\n + * - 0x02 -- tag indicating INTEGER + * - 0x01 -- length in octets + * - 0x05 -- value + * Such sequences are typically read into \c ::mbedtls_x509_buf. + * \{ + */ +#define MBEDTLS_ASN1_BOOLEAN 0x01 +#define MBEDTLS_ASN1_INTEGER 0x02 +#define MBEDTLS_ASN1_BIT_STRING 0x03 +#define MBEDTLS_ASN1_OCTET_STRING 0x04 +#define MBEDTLS_ASN1_NULL 0x05 +#define MBEDTLS_ASN1_OID 0x06 +#define MBEDTLS_ASN1_UTF8_STRING 0x0C +#define MBEDTLS_ASN1_SEQUENCE 0x10 +#define MBEDTLS_ASN1_SET 0x11 +#define MBEDTLS_ASN1_PRINTABLE_STRING 0x13 +#define MBEDTLS_ASN1_T61_STRING 0x14 +#define MBEDTLS_ASN1_IA5_STRING 0x16 +#define MBEDTLS_ASN1_UTC_TIME 0x17 +#define MBEDTLS_ASN1_GENERALIZED_TIME 0x18 +#define MBEDTLS_ASN1_UNIVERSAL_STRING 0x1C +#define MBEDTLS_ASN1_BMP_STRING 0x1E +#define MBEDTLS_ASN1_PRIMITIVE 0x00 +#define MBEDTLS_ASN1_CONSTRUCTED 0x20 +#define MBEDTLS_ASN1_CONTEXT_SPECIFIC 0x80 +/* \} name */ +/* \} addtogroup asn1_module */ + +/** Returns the size of the binary string, without the trailing \\0 */ +#define MBEDTLS_OID_SIZE(x) (sizeof(x) - 1) + +/** + * Compares an mbedtls_asn1_buf structure to a reference OID. + * + * Only works for 'defined' oid_str values (MBEDTLS_OID_HMAC_SHA1), you cannot use a + * 'unsigned char *oid' here! + */ +#define MBEDTLS_OID_CMP(oid_str, oid_buf) \ + ( ( MBEDTLS_OID_SIZE(oid_str) != (oid_buf)->len ) || \ + memcmp( (oid_str), (oid_buf)->p, (oid_buf)->len) != 0 ) + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Functions to parse ASN.1 data structures + * \{ + */ + +/** + * Type-length-value structure that allows for ASN1 using DER. + */ +typedef struct mbedtls_asn1_buf +{ + int tag; /**< ASN1 type, e.g. MBEDTLS_ASN1_UTF8_STRING. */ + size_t len; /**< ASN1 length, in octets. */ + unsigned char *p; /**< ASN1 data, e.g. in ASCII. */ +} +mbedtls_asn1_buf; + +/** + * Container for ASN1 bit strings. + */ +typedef struct mbedtls_asn1_bitstring +{ + size_t len; /**< ASN1 length, in octets. */ + unsigned char unused_bits; /**< Number of unused bits at the end of the string */ + unsigned char *p; /**< Raw ASN1 data for the bit string */ +} +mbedtls_asn1_bitstring; + +/** + * Container for a sequence of ASN.1 items + */ +typedef struct mbedtls_asn1_sequence +{ + mbedtls_asn1_buf buf; /**< Buffer containing the given ASN.1 item. */ + struct mbedtls_asn1_sequence *next; /**< The next entry in the sequence. */ +} +mbedtls_asn1_sequence; + +/** + * Container for a sequence or list of 'named' ASN.1 data items + */ +typedef struct mbedtls_asn1_named_data +{ + mbedtls_asn1_buf oid; /**< The object identifier. */ + mbedtls_asn1_buf val; /**< The named value. */ + struct mbedtls_asn1_named_data *next; /**< The next entry in the sequence. */ + unsigned char next_merged; /**< Merge next item into the current one? */ +} +mbedtls_asn1_named_data; + +/** + * \brief Get the length of an ASN.1 element. + * Updates the pointer to immediately behind the length. + * + * \param p The position in the ASN.1 data + * \param end End of data + * \param len The variable that will receive the value + * + * \return 0 if successful, MBEDTLS_ERR_ASN1_OUT_OF_DATA on reaching + * end of data, MBEDTLS_ERR_ASN1_INVALID_LENGTH if length is + * unparseable. + */ +int mbedtls_asn1_get_len( unsigned char **p, + const unsigned char *end, + size_t *len ); + +/** + * \brief Get the tag and length of the tag. Check for the requested tag. + * Updates the pointer to immediately behind the tag and length. + * + * \param p The position in the ASN.1 data + * \param end End of data + * \param len The variable that will receive the length + * \param tag The expected tag + * + * \return 0 if successful, MBEDTLS_ERR_ASN1_UNEXPECTED_TAG if tag did + * not match requested tag, or another specific ASN.1 error code. + */ +int mbedtls_asn1_get_tag( unsigned char **p, + const unsigned char *end, + size_t *len, int tag ); + +/** + * \brief Retrieve a boolean ASN.1 tag and its value. + * Updates the pointer to immediately behind the full tag. + * + * \param p The position in the ASN.1 data + * \param end End of data + * \param val The variable that will receive the value + * + * \return 0 if successful or a specific ASN.1 error code. + */ +int mbedtls_asn1_get_bool( unsigned char **p, + const unsigned char *end, + int *val ); + +/** + * \brief Retrieve an integer ASN.1 tag and its value. + * Updates the pointer to immediately behind the full tag. + * + * \param p The position in the ASN.1 data + * \param end End of data + * \param val The variable that will receive the value + * + * \return 0 if successful or a specific ASN.1 error code. + */ +int mbedtls_asn1_get_int( unsigned char **p, + const unsigned char *end, + int *val ); + +/** + * \brief Retrieve a bitstring ASN.1 tag and its value. + * Updates the pointer to immediately behind the full tag. + * + * \param p The position in the ASN.1 data + * \param end End of data + * \param bs The variable that will receive the value + * + * \return 0 if successful or a specific ASN.1 error code. + */ +int mbedtls_asn1_get_bitstring( unsigned char **p, const unsigned char *end, + mbedtls_asn1_bitstring *bs); + +/** + * \brief Retrieve a bitstring ASN.1 tag without unused bits and its + * value. + * Updates the pointer to the beginning of the bit/octet string. + * + * \param p The position in the ASN.1 data + * \param end End of data + * \param len Length of the actual bit/octect string in bytes + * + * \return 0 if successful or a specific ASN.1 error code. + */ +int mbedtls_asn1_get_bitstring_null( unsigned char **p, const unsigned char *end, + size_t *len ); + +/** + * \brief Parses and splits an ASN.1 "SEQUENCE OF " + * Updated the pointer to immediately behind the full sequence tag. + * + * \param p The position in the ASN.1 data + * \param end End of data + * \param cur First variable in the chain to fill + * \param tag Type of sequence + * + * \return 0 if successful or a specific ASN.1 error code. + */ +int mbedtls_asn1_get_sequence_of( unsigned char **p, + const unsigned char *end, + mbedtls_asn1_sequence *cur, + int tag); + +#if defined(MBEDTLS_BIGNUM_C) +/** + * \brief Retrieve a MPI value from an integer ASN.1 tag. + * Updates the pointer to immediately behind the full tag. + * + * \param p The position in the ASN.1 data + * \param end End of data + * \param X The MPI that will receive the value + * + * \return 0 if successful or a specific ASN.1 or MPI error code. + */ +int mbedtls_asn1_get_mpi( unsigned char **p, + const unsigned char *end, + mbedtls_mpi *X ); +#endif /* MBEDTLS_BIGNUM_C */ + +/** + * \brief Retrieve an AlgorithmIdentifier ASN.1 sequence. + * Updates the pointer to immediately behind the full + * AlgorithmIdentifier. + * + * \param p The position in the ASN.1 data + * \param end End of data + * \param alg The buffer to receive the OID + * \param params The buffer to receive the params (if any) + * + * \return 0 if successful or a specific ASN.1 or MPI error code. + */ +int mbedtls_asn1_get_alg( unsigned char **p, + const unsigned char *end, + mbedtls_asn1_buf *alg, mbedtls_asn1_buf *params ); + +/** + * \brief Retrieve an AlgorithmIdentifier ASN.1 sequence with NULL or no + * params. + * Updates the pointer to immediately behind the full + * AlgorithmIdentifier. + * + * \param p The position in the ASN.1 data + * \param end End of data + * \param alg The buffer to receive the OID + * + * \return 0 if successful or a specific ASN.1 or MPI error code. + */ +int mbedtls_asn1_get_alg_null( unsigned char **p, + const unsigned char *end, + mbedtls_asn1_buf *alg ); + +/** + * \brief Find a specific named_data entry in a sequence or list based on + * the OID. + * + * \param list The list to seek through + * \param oid The OID to look for + * \param len Size of the OID + * + * \return NULL if not found, or a pointer to the existing entry. + */ +mbedtls_asn1_named_data *mbedtls_asn1_find_named_data( mbedtls_asn1_named_data *list, + const char *oid, size_t len ); + +/** + * \brief Free a mbedtls_asn1_named_data entry + * + * \param entry The named data entry to free + */ +void mbedtls_asn1_free_named_data( mbedtls_asn1_named_data *entry ); + +/** + * \brief Free all entries in a mbedtls_asn1_named_data list + * Head will be set to NULL + * + * \param head Pointer to the head of the list of named data entries to free + */ +void mbedtls_asn1_free_named_data_list( mbedtls_asn1_named_data **head ); + +#ifdef __cplusplus +} +#endif + +#endif /* asn1.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/asn1write.h b/tools/sdk/include/mbedtls/mbedtls/asn1write.h new file mode 100644 index 00000000..73ff32b6 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/asn1write.h @@ -0,0 +1,239 @@ +/** + * \file asn1write.h + * + * \brief ASN.1 buffer writing functionality + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_ASN1_WRITE_H +#define MBEDTLS_ASN1_WRITE_H + +#include "asn1.h" + +#define MBEDTLS_ASN1_CHK_ADD(g, f) do { if( ( ret = f ) < 0 ) return( ret ); else \ + g += ret; } while( 0 ) + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Write a length field in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param len the length to write + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_len( unsigned char **p, unsigned char *start, size_t len ); + +/** + * \brief Write a ASN.1 tag in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param tag the tag to write + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_tag( unsigned char **p, unsigned char *start, + unsigned char tag ); + +/** + * \brief Write raw buffer data + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param buf data buffer to write + * \param size length of the data buffer + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_raw_buffer( unsigned char **p, unsigned char *start, + const unsigned char *buf, size_t size ); + +#if defined(MBEDTLS_BIGNUM_C) +/** + * \brief Write a big number (MBEDTLS_ASN1_INTEGER) in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param X the MPI to write + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_mpi( unsigned char **p, unsigned char *start, const mbedtls_mpi *X ); +#endif /* MBEDTLS_BIGNUM_C */ + +/** + * \brief Write a NULL tag (MBEDTLS_ASN1_NULL) with zero data in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_null( unsigned char **p, unsigned char *start ); + +/** + * \brief Write an OID tag (MBEDTLS_ASN1_OID) and data in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param oid the OID to write + * \param oid_len length of the OID + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_oid( unsigned char **p, unsigned char *start, + const char *oid, size_t oid_len ); + +/** + * \brief Write an AlgorithmIdentifier sequence in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param oid the OID of the algorithm + * \param oid_len length of the OID + * \param par_len length of parameters, which must be already written. + * If 0, NULL parameters are added + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_algorithm_identifier( unsigned char **p, unsigned char *start, + const char *oid, size_t oid_len, + size_t par_len ); + +/** + * \brief Write a boolean tag (MBEDTLS_ASN1_BOOLEAN) and value in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param boolean 0 or 1 + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_bool( unsigned char **p, unsigned char *start, int boolean ); + +/** + * \brief Write an int tag (MBEDTLS_ASN1_INTEGER) and value in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param val the integer value + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_int( unsigned char **p, unsigned char *start, int val ); + +/** + * \brief Write a printable string tag (MBEDTLS_ASN1_PRINTABLE_STRING) and + * value in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param text the text to write + * \param text_len length of the text + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_printable_string( unsigned char **p, unsigned char *start, + const char *text, size_t text_len ); + +/** + * \brief Write an IA5 string tag (MBEDTLS_ASN1_IA5_STRING) and + * value in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param text the text to write + * \param text_len length of the text + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_ia5_string( unsigned char **p, unsigned char *start, + const char *text, size_t text_len ); + +/** + * \brief Write a bitstring tag (MBEDTLS_ASN1_BIT_STRING) and + * value in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param buf the bitstring + * \param bits the total number of bits in the bitstring + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_bitstring( unsigned char **p, unsigned char *start, + const unsigned char *buf, size_t bits ); + +/** + * \brief Write an octet string tag (MBEDTLS_ASN1_OCTET_STRING) and + * value in ASN.1 format + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param buf data buffer to write + * \param size length of the data buffer + * + * \return the length written or a negative error code + */ +int mbedtls_asn1_write_octet_string( unsigned char **p, unsigned char *start, + const unsigned char *buf, size_t size ); + +/** + * \brief Create or find a specific named_data entry for writing in a + * sequence or list based on the OID. If not already in there, + * a new entry is added to the head of the list. + * Warning: Destructive behaviour for the val data! + * + * \param list Pointer to the location of the head of the list to seek + * through (will be updated in case of a new entry) + * \param oid The OID to look for + * \param oid_len Size of the OID + * \param val Data to store (can be NULL if you want to fill it by hand) + * \param val_len Minimum length of the data buffer needed + * + * \return NULL if if there was a memory allocation error, or a pointer + * to the new / existing entry. + */ +mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data **list, + const char *oid, size_t oid_len, + const unsigned char *val, + size_t val_len ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_ASN1_WRITE_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/base64.h b/tools/sdk/include/mbedtls/mbedtls/base64.h new file mode 100644 index 00000000..352c652d --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/base64.h @@ -0,0 +1,88 @@ +/** + * \file base64.h + * + * \brief RFC 1521 base64 encoding/decoding + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_BASE64_H +#define MBEDTLS_BASE64_H + +#include + +#define MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL -0x002A /**< Output buffer too small. */ +#define MBEDTLS_ERR_BASE64_INVALID_CHARACTER -0x002C /**< Invalid character in input. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Encode a buffer into base64 format + * + * \param dst destination buffer + * \param dlen size of the destination buffer + * \param olen number of bytes written + * \param src source buffer + * \param slen amount of data to be encoded + * + * \return 0 if successful, or MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL. + * *olen is always updated to reflect the amount + * of data that has (or would have) been written. + * If that length cannot be represented, then no data is + * written to the buffer and *olen is set to the maximum + * length representable as a size_t. + * + * \note Call this function with dlen = 0 to obtain the + * required buffer size in *olen + */ +int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, + const unsigned char *src, size_t slen ); + +/** + * \brief Decode a base64-formatted buffer + * + * \param dst destination buffer (can be NULL for checking size) + * \param dlen size of the destination buffer + * \param olen number of bytes written + * \param src source buffer + * \param slen amount of data to be decoded + * + * \return 0 if successful, MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL, or + * MBEDTLS_ERR_BASE64_INVALID_CHARACTER if the input data is + * not correct. *olen is always updated to reflect the amount + * of data that has (or would have) been written. + * + * \note Call this function with *dst = NULL or dlen = 0 to obtain + * the required buffer size in *olen + */ +int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen, + const unsigned char *src, size_t slen ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_base64_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* base64.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/bignum.h b/tools/sdk/include/mbedtls/mbedtls/bignum.h new file mode 100644 index 00000000..46f25076 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/bignum.h @@ -0,0 +1,722 @@ +/** + * \file bignum.h + * + * \brief Multi-precision integer library + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_BIGNUM_H +#define MBEDTLS_BIGNUM_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#if defined(MBEDTLS_FS_IO) +#include +#endif + +#define MBEDTLS_ERR_MPI_FILE_IO_ERROR -0x0002 /**< An error occurred while reading from or writing to a file. */ +#define MBEDTLS_ERR_MPI_BAD_INPUT_DATA -0x0004 /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_MPI_INVALID_CHARACTER -0x0006 /**< There is an invalid character in the digit string. */ +#define MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL -0x0008 /**< The buffer is too small to write to. */ +#define MBEDTLS_ERR_MPI_NEGATIVE_VALUE -0x000A /**< The input arguments are negative or result in illegal output. */ +#define MBEDTLS_ERR_MPI_DIVISION_BY_ZERO -0x000C /**< The input argument for division is zero, which is not allowed. */ +#define MBEDTLS_ERR_MPI_NOT_ACCEPTABLE -0x000E /**< The input arguments are not acceptable. */ +#define MBEDTLS_ERR_MPI_ALLOC_FAILED -0x0010 /**< Memory allocation failed. */ + +#define MBEDTLS_MPI_CHK(f) do { if( ( ret = f ) != 0 ) goto cleanup; } while( 0 ) + +/* + * Maximum size MPIs are allowed to grow to in number of limbs. + */ +#define MBEDTLS_MPI_MAX_LIMBS 10000 + +#if !defined(MBEDTLS_MPI_WINDOW_SIZE) +/* + * Maximum window size used for modular exponentiation. Default: 6 + * Minimum value: 1. Maximum value: 6. + * + * Result is an array of ( 2 << MBEDTLS_MPI_WINDOW_SIZE ) MPIs used + * for the sliding window calculation. (So 64 by default) + * + * Reduction in size, reduces speed. + */ +#define MBEDTLS_MPI_WINDOW_SIZE 6 /**< Maximum windows size used. */ +#endif /* !MBEDTLS_MPI_WINDOW_SIZE */ + +#if !defined(MBEDTLS_MPI_MAX_SIZE) +/* + * Maximum size of MPIs allowed in bits and bytes for user-MPIs. + * ( Default: 512 bytes => 4096 bits, Maximum tested: 2048 bytes => 16384 bits ) + * + * Note: Calculations can results temporarily in larger MPIs. So the number + * of limbs required (MBEDTLS_MPI_MAX_LIMBS) is higher. + */ +#define MBEDTLS_MPI_MAX_SIZE 1024 /**< Maximum number of bytes for usable MPIs. */ +#endif /* !MBEDTLS_MPI_MAX_SIZE */ + +#define MBEDTLS_MPI_MAX_BITS ( 8 * MBEDTLS_MPI_MAX_SIZE ) /**< Maximum number of bits for usable MPIs. */ + +/* + * When reading from files with mbedtls_mpi_read_file() and writing to files with + * mbedtls_mpi_write_file() the buffer should have space + * for a (short) label, the MPI (in the provided radix), the newline + * characters and the '\0'. + * + * By default we assume at least a 10 char label, a minimum radix of 10 + * (decimal) and a maximum of 4096 bit numbers (1234 decimal chars). + * Autosized at compile time for at least a 10 char label, a minimum radix + * of 10 (decimal) for a number of MBEDTLS_MPI_MAX_BITS size. + * + * This used to be statically sized to 1250 for a maximum of 4096 bit + * numbers (1234 decimal chars). + * + * Calculate using the formula: + * MBEDTLS_MPI_RW_BUFFER_SIZE = ceil(MBEDTLS_MPI_MAX_BITS / ln(10) * ln(2)) + + * LabelSize + 6 + */ +#define MBEDTLS_MPI_MAX_BITS_SCALE100 ( 100 * MBEDTLS_MPI_MAX_BITS ) +#define MBEDTLS_LN_2_DIV_LN_10_SCALE100 332 +#define MBEDTLS_MPI_RW_BUFFER_SIZE ( ((MBEDTLS_MPI_MAX_BITS_SCALE100 + MBEDTLS_LN_2_DIV_LN_10_SCALE100 - 1) / MBEDTLS_LN_2_DIV_LN_10_SCALE100) + 10 + 6 ) + +#if !defined(MBEDTLS_BIGNUM_ALT) + +/* + * Define the base integer type, architecture-wise. + * + * 32-bit integers can be forced on 64-bit arches (eg. for testing purposes) + * by defining MBEDTLS_HAVE_INT32 and undefining MBEDTLS_HAVE_ASM + */ +#if ( ! defined(MBEDTLS_HAVE_INT32) && \ + defined(_MSC_VER) && defined(_M_AMD64) ) + #define MBEDTLS_HAVE_INT64 + typedef int64_t mbedtls_mpi_sint; + typedef uint64_t mbedtls_mpi_uint; +#else + #if ( ! defined(MBEDTLS_HAVE_INT32) && \ + defined(__GNUC__) && ( \ + defined(__amd64__) || defined(__x86_64__) || \ + defined(__ppc64__) || defined(__powerpc64__) || \ + defined(__ia64__) || defined(__alpha__) || \ + (defined(__sparc__) && defined(__arch64__)) || \ + defined(__s390x__) || defined(__mips64) ) ) + #define MBEDTLS_HAVE_INT64 + typedef int64_t mbedtls_mpi_sint; + typedef uint64_t mbedtls_mpi_uint; + /* mbedtls_t_udbl defined as 128-bit unsigned int */ + typedef unsigned int mbedtls_t_udbl __attribute__((mode(TI))); + #define MBEDTLS_HAVE_UDBL + #else + #define MBEDTLS_HAVE_INT32 + typedef int32_t mbedtls_mpi_sint; + typedef uint32_t mbedtls_mpi_uint; + typedef uint64_t mbedtls_t_udbl; + #define MBEDTLS_HAVE_UDBL + #endif /* !MBEDTLS_HAVE_INT32 && __GNUC__ && 64-bit platform */ +#endif /* !MBEDTLS_HAVE_INT32 && _MSC_VER && _M_AMD64 */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief MPI structure + */ +typedef struct +{ + int s; /*!< integer sign */ + size_t n; /*!< total # of limbs */ + mbedtls_mpi_uint *p; /*!< pointer to limbs */ +} +mbedtls_mpi; + +/** + * \brief Initialize one MPI (make internal references valid) + * This just makes it ready to be set or freed, + * but does not define a value for the MPI. + * + * \param X One MPI to initialize. + */ +void mbedtls_mpi_init( mbedtls_mpi *X ); + +/** + * \brief Unallocate one MPI + * + * \param X One MPI to unallocate. + */ +void mbedtls_mpi_free( mbedtls_mpi *X ); + +/** + * \brief Enlarge to the specified number of limbs + * + * \param X MPI to grow + * \param nblimbs The target number of limbs + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs ); + +/** + * \brief Resize down, keeping at least the specified number of limbs + * + * \param X MPI to shrink + * \param nblimbs The minimum number of limbs to keep + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs ); + +/** + * \brief Copy the contents of Y into X + * + * \param X Destination MPI + * \param Y Source MPI + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y ); + +/** + * \brief Swap the contents of X and Y + * + * \param X First MPI value + * \param Y Second MPI value + */ +void mbedtls_mpi_swap( mbedtls_mpi *X, mbedtls_mpi *Y ); + +/** + * \brief Safe conditional assignement X = Y if assign is 1 + * + * \param X MPI to conditionally assign to + * \param Y Value to be assigned + * \param assign 1: perform the assignment, 0: keep X's original value + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * + * \note This function is equivalent to + * if( assign ) mbedtls_mpi_copy( X, Y ); + * except that it avoids leaking any information about whether + * the assignment was done or not (the above code may leak + * information through branch prediction and/or memory access + * patterns analysis). + */ +int mbedtls_mpi_safe_cond_assign( mbedtls_mpi *X, const mbedtls_mpi *Y, unsigned char assign ); + +/** + * \brief Safe conditional swap X <-> Y if swap is 1 + * + * \param X First mbedtls_mpi value + * \param Y Second mbedtls_mpi value + * \param assign 1: perform the swap, 0: keep X and Y's original values + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * + * \note This function is equivalent to + * if( assign ) mbedtls_mpi_swap( X, Y ); + * except that it avoids leaking any information about whether + * the assignment was done or not (the above code may leak + * information through branch prediction and/or memory access + * patterns analysis). + */ +int mbedtls_mpi_safe_cond_swap( mbedtls_mpi *X, mbedtls_mpi *Y, unsigned char assign ); + +/** + * \brief Set value from integer + * + * \param X MPI to set + * \param z Value to use + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_lset( mbedtls_mpi *X, mbedtls_mpi_sint z ); + +/** + * \brief Get a specific bit from X + * + * \param X MPI to use + * \param pos Zero-based index of the bit in X + * + * \return Either a 0 or a 1 + */ +int mbedtls_mpi_get_bit( const mbedtls_mpi *X, size_t pos ); + +/** + * \brief Set a bit of X to a specific value of 0 or 1 + * + * \note Will grow X if necessary to set a bit to 1 in a not yet + * existing limb. Will not grow if bit should be set to 0 + * + * \param X MPI to use + * \param pos Zero-based index of the bit in X + * \param val The value to set the bit to (0 or 1) + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_MPI_BAD_INPUT_DATA if val is not 0 or 1 + */ +int mbedtls_mpi_set_bit( mbedtls_mpi *X, size_t pos, unsigned char val ); + +/** + * \brief Return the number of zero-bits before the least significant + * '1' bit + * + * Note: Thus also the zero-based index of the least significant '1' bit + * + * \param X MPI to use + */ +size_t mbedtls_mpi_lsb( const mbedtls_mpi *X ); + +/** + * \brief Return the number of bits up to and including the most + * significant '1' bit' + * + * Note: Thus also the one-based index of the most significant '1' bit + * + * \param X MPI to use + */ +size_t mbedtls_mpi_bitlen( const mbedtls_mpi *X ); + +/** + * \brief Return the total size in bytes + * + * \param X MPI to use + */ +size_t mbedtls_mpi_size( const mbedtls_mpi *X ); + +/** + * \brief Import from an ASCII string + * + * \param X Destination MPI + * \param radix Input numeric base + * \param s Null-terminated string buffer + * + * \return 0 if successful, or a MBEDTLS_ERR_MPI_XXX error code + */ +int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ); + +/** + * \brief Export into an ASCII string + * + * \param X Source MPI + * \param radix Output numeric base + * \param buf Buffer to write the string to + * \param buflen Length of buf + * \param olen Length of the string written, including final NUL byte + * + * \return 0 if successful, or a MBEDTLS_ERR_MPI_XXX error code. + * *olen is always updated to reflect the amount + * of data that has (or would have) been written. + * + * \note Call this function with buflen = 0 to obtain the + * minimum required buffer size in *olen. + */ +int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, + char *buf, size_t buflen, size_t *olen ); + +#if defined(MBEDTLS_FS_IO) +/** + * \brief Read X from an opened file + * + * \param X Destination MPI + * \param radix Input numeric base + * \param fin Input file handle + * + * \return 0 if successful, MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if + * the file read buffer is too small or a + * MBEDTLS_ERR_MPI_XXX error code + */ +int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin ); + +/** + * \brief Write X into an opened file, or stdout if fout is NULL + * + * \param p Prefix, can be NULL + * \param X Source MPI + * \param radix Output numeric base + * \param fout Output file handle (can be NULL) + * + * \return 0 if successful, or a MBEDTLS_ERR_MPI_XXX error code + * + * \note Set fout == NULL to print X on the console. + */ +int mbedtls_mpi_write_file( const char *p, const mbedtls_mpi *X, int radix, FILE *fout ); +#endif /* MBEDTLS_FS_IO */ + +/** + * \brief Import X from unsigned binary data, big endian + * + * \param X Destination MPI + * \param buf Input buffer + * \param buflen Input buffer size + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_read_binary( mbedtls_mpi *X, const unsigned char *buf, size_t buflen ); + +/** + * \brief Export X into unsigned binary data, big endian. + * Always fills the whole buffer, which will start with zeros + * if the number is smaller. + * + * \param X Source MPI + * \param buf Output buffer + * \param buflen Output buffer size + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if buf isn't large enough + */ +int mbedtls_mpi_write_binary( const mbedtls_mpi *X, unsigned char *buf, size_t buflen ); + +/** + * \brief Left-shift: X <<= count + * + * \param X MPI to shift + * \param count Amount to shift + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count ); + +/** + * \brief Right-shift: X >>= count + * + * \param X MPI to shift + * \param count Amount to shift + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_shift_r( mbedtls_mpi *X, size_t count ); + +/** + * \brief Compare unsigned values + * + * \param X Left-hand MPI + * \param Y Right-hand MPI + * + * \return 1 if |X| is greater than |Y|, + * -1 if |X| is lesser than |Y| or + * 0 if |X| is equal to |Y| + */ +int mbedtls_mpi_cmp_abs( const mbedtls_mpi *X, const mbedtls_mpi *Y ); + +/** + * \brief Compare signed values + * + * \param X Left-hand MPI + * \param Y Right-hand MPI + * + * \return 1 if X is greater than Y, + * -1 if X is lesser than Y or + * 0 if X is equal to Y + */ +int mbedtls_mpi_cmp_mpi( const mbedtls_mpi *X, const mbedtls_mpi *Y ); + +/** + * \brief Compare signed values + * + * \param X Left-hand MPI + * \param z The integer value to compare to + * + * \return 1 if X is greater than z, + * -1 if X is lesser than z or + * 0 if X is equal to z + */ +int mbedtls_mpi_cmp_int( const mbedtls_mpi *X, mbedtls_mpi_sint z ); + +/** + * \brief Unsigned addition: X = |A| + |B| + * + * \param X Destination MPI + * \param A Left-hand MPI + * \param B Right-hand MPI + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ); + +/** + * \brief Unsigned subtraction: X = |A| - |B| + * + * \param X Destination MPI + * \param A Left-hand MPI + * \param B Right-hand MPI + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_NEGATIVE_VALUE if B is greater than A + */ +int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ); + +/** + * \brief Signed addition: X = A + B + * + * \param X Destination MPI + * \param A Left-hand MPI + * \param B Right-hand MPI + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_add_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ); + +/** + * \brief Signed subtraction: X = A - B + * + * \param X Destination MPI + * \param A Left-hand MPI + * \param B Right-hand MPI + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_sub_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ); + +/** + * \brief Signed addition: X = A + b + * + * \param X Destination MPI + * \param A Left-hand MPI + * \param b The integer value to add + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_add_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b ); + +/** + * \brief Signed subtraction: X = A - b + * + * \param X Destination MPI + * \param A Left-hand MPI + * \param b The integer value to subtract + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_sub_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b ); + +/** + * \brief Baseline multiplication: X = A * B + * + * \param X Destination MPI + * \param A Left-hand MPI + * \param B Right-hand MPI + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_mul_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ); + +/** + * \brief Baseline multiplication: X = A * b + * + * \param X Destination MPI + * \param A Left-hand MPI + * \param b The unsigned integer value to multiply with + * + * \note b is unsigned + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint b ); + +/** + * \brief Division by mbedtls_mpi: A = Q * B + R + * + * \param Q Destination MPI for the quotient + * \param R Destination MPI for the rest value + * \param A Left-hand MPI + * \param B Right-hand MPI + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if B == 0 + * + * \note Either Q or R can be NULL. + */ +int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, const mbedtls_mpi *B ); + +/** + * \brief Division by int: A = Q * b + R + * + * \param Q Destination MPI for the quotient + * \param R Destination MPI for the rest value + * \param A Left-hand MPI + * \param b Integer to divide by + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if b == 0 + * + * \note Either Q or R can be NULL. + */ +int mbedtls_mpi_div_int( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, mbedtls_mpi_sint b ); + +/** + * \brief Modulo: R = A mod B + * + * \param R Destination MPI for the rest value + * \param A Left-hand MPI + * \param B Right-hand MPI + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if B == 0, + * MBEDTLS_ERR_MPI_NEGATIVE_VALUE if B < 0 + */ +int mbedtls_mpi_mod_mpi( mbedtls_mpi *R, const mbedtls_mpi *A, const mbedtls_mpi *B ); + +/** + * \brief Modulo: r = A mod b + * + * \param r Destination mbedtls_mpi_uint + * \param A Left-hand MPI + * \param b Integer to divide by + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if b == 0, + * MBEDTLS_ERR_MPI_NEGATIVE_VALUE if b < 0 + */ +int mbedtls_mpi_mod_int( mbedtls_mpi_uint *r, const mbedtls_mpi *A, mbedtls_mpi_sint b ); + +/** + * \brief Sliding-window exponentiation: X = A^E mod N + * + * \param X Destination MPI + * \param A Left-hand MPI + * \param E Exponent MPI + * \param N Modular MPI + * \param _RR Speed-up MPI used for recalculations + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_MPI_BAD_INPUT_DATA if N is negative or even or + * if E is negative + * + * \note _RR is used to avoid re-computing R*R mod N across + * multiple calls, which speeds up things a bit. It can + * be set to NULL if the extra performance is unneeded. + */ +int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *E, const mbedtls_mpi *N, mbedtls_mpi *_RR ); + +/** + * \brief Fill an MPI X with size bytes of random + * + * \param X Destination MPI + * \param size Size in bytes + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_fill_random( mbedtls_mpi *X, size_t size, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Greatest common divisor: G = gcd(A, B) + * + * \param G Destination MPI + * \param A Left-hand MPI + * \param B Right-hand MPI + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B ); + +/** + * \brief Modular inverse: X = A^-1 mod N + * + * \param X Destination MPI + * \param A Left-hand MPI + * \param N Right-hand MPI + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_MPI_BAD_INPUT_DATA if N is negative or nil + MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if A has no inverse mod N + */ +int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *N ); + +/** + * \brief Miller-Rabin primality test + * + * \param X MPI to check + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful (probably prime), + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if X is not prime + */ +int mbedtls_mpi_is_prime( const mbedtls_mpi *X, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Prime number generation + * + * \param X Destination MPI + * \param nbits Required size of X in bits + * ( 3 <= nbits <= MBEDTLS_MPI_MAX_BITS ) + * \param dh_flag If 1, then (X-1)/2 will be prime too + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful (probably prime), + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_MPI_BAD_INPUT_DATA if nbits is < 3 + */ +int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int dh_flag, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); +#else /* MBEDTLS_BIGNUM_ALT */ +#include "bignum_alt.h" +#endif /* MBEDTLS_BIGNUM_ALT */ + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_mpi_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* bignum.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/blowfish.h b/tools/sdk/include/mbedtls/mbedtls/blowfish.h new file mode 100644 index 00000000..34626eef --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/blowfish.h @@ -0,0 +1,203 @@ +/** + * \file blowfish.h + * + * \brief Blowfish block cipher + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_BLOWFISH_H +#define MBEDTLS_BLOWFISH_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#define MBEDTLS_BLOWFISH_ENCRYPT 1 +#define MBEDTLS_BLOWFISH_DECRYPT 0 +#define MBEDTLS_BLOWFISH_MAX_KEY_BITS 448 +#define MBEDTLS_BLOWFISH_MIN_KEY_BITS 32 +#define MBEDTLS_BLOWFISH_ROUNDS 16 /**< Rounds to use. When increasing this value, make sure to extend the initialisation vectors */ +#define MBEDTLS_BLOWFISH_BLOCKSIZE 8 /* Blowfish uses 64 bit blocks */ + +#define MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH -0x0016 /**< Invalid key length. */ +#define MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH -0x0018 /**< Invalid data input length. */ + +#if !defined(MBEDTLS_BLOWFISH_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Blowfish context structure + */ +typedef struct +{ + uint32_t P[MBEDTLS_BLOWFISH_ROUNDS + 2]; /*!< Blowfish round keys */ + uint32_t S[4][256]; /*!< key dependent S-boxes */ +} +mbedtls_blowfish_context; + +/** + * \brief Initialize Blowfish context + * + * \param ctx Blowfish context to be initialized + */ +void mbedtls_blowfish_init( mbedtls_blowfish_context *ctx ); + +/** + * \brief Clear Blowfish context + * + * \param ctx Blowfish context to be cleared + */ +void mbedtls_blowfish_free( mbedtls_blowfish_context *ctx ); + +/** + * \brief Blowfish key schedule + * + * \param ctx Blowfish context to be initialized + * \param key encryption key + * \param keybits must be between 32 and 448 bits + * + * \return 0 if successful, or MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH + */ +int mbedtls_blowfish_setkey( mbedtls_blowfish_context *ctx, const unsigned char *key, + unsigned int keybits ); + +/** + * \brief Blowfish-ECB block encryption/decryption + * + * \param ctx Blowfish context + * \param mode MBEDTLS_BLOWFISH_ENCRYPT or MBEDTLS_BLOWFISH_DECRYPT + * \param input 8-byte input block + * \param output 8-byte output block + * + * \return 0 if successful + */ +int mbedtls_blowfish_crypt_ecb( mbedtls_blowfish_context *ctx, + int mode, + const unsigned char input[MBEDTLS_BLOWFISH_BLOCKSIZE], + unsigned char output[MBEDTLS_BLOWFISH_BLOCKSIZE] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief Blowfish-CBC buffer encryption/decryption + * Length should be a multiple of the block + * size (8 bytes) + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx Blowfish context + * \param mode MBEDTLS_BLOWFISH_ENCRYPT or MBEDTLS_BLOWFISH_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful, or + * MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH + */ +int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, + int mode, + size_t length, + unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) +/** + * \brief Blowfish CFB buffer encryption/decryption. + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx Blowfish context + * \param mode MBEDTLS_BLOWFISH_ENCRYPT or MBEDTLS_BLOWFISH_DECRYPT + * \param length length of the input data + * \param iv_off offset in IV (updated after use) + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful + */ +int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], + const unsigned char *input, + unsigned char *output ); +#endif /*MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) +/** + * \brief Blowfish-CTR buffer encryption/decryption + * + * Warning: You have to keep the maximum use of your counter in mind! + * + * \param ctx Blowfish context + * \param length The length of the data + * \param nc_off The offset in the current stream_block (for resuming + * within current cipher stream). The offset pointer to + * should be 0 at the start of a stream. + * \param nonce_counter The 64-bit nonce and counter. + * \param stream_block The saved stream-block for resuming. Is overwritten + * by the function. + * \param input The input data stream + * \param output The output data stream + * + * \return 0 if successful + */ +int mbedtls_blowfish_crypt_ctr( mbedtls_blowfish_context *ctx, + size_t length, + size_t *nc_off, + unsigned char nonce_counter[MBEDTLS_BLOWFISH_BLOCKSIZE], + unsigned char stream_block[MBEDTLS_BLOWFISH_BLOCKSIZE], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_BLOWFISH_ALT */ +#include "blowfish_alt.h" +#endif /* MBEDTLS_BLOWFISH_ALT */ + +#endif /* blowfish.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/bn_mul.h b/tools/sdk/include/mbedtls/mbedtls/bn_mul.h new file mode 100644 index 00000000..cac3f145 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/bn_mul.h @@ -0,0 +1,885 @@ +/** + * \file bn_mul.h + * + * \brief Multi-precision integer library + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +/* + * Multiply source vector [s] with b, add result + * to destination vector [d] and set carry c. + * + * Currently supports: + * + * . IA-32 (386+) . AMD64 / EM64T + * . IA-32 (SSE2) . Motorola 68000 + * . PowerPC, 32-bit . MicroBlaze + * . PowerPC, 64-bit . TriCore + * . SPARC v8 . ARM v3+ + * . Alpha . MIPS32 + * . C, longlong . C, generic + */ +#ifndef MBEDTLS_BN_MUL_H +#define MBEDTLS_BN_MUL_H + +#include "bignum.h" + +#if defined(MBEDTLS_HAVE_ASM) + +#ifndef asm +#define asm __asm +#endif + +/* armcc5 --gnu defines __GNUC__ but doesn't support GNU's extended asm */ +#if defined(__GNUC__) && \ + ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 ) +#if defined(__i386__) + +#define MULADDC_INIT \ + asm( \ + "movl %%ebx, %0 \n\t" \ + "movl %5, %%esi \n\t" \ + "movl %6, %%edi \n\t" \ + "movl %7, %%ecx \n\t" \ + "movl %8, %%ebx \n\t" + +#define MULADDC_CORE \ + "lodsl \n\t" \ + "mull %%ebx \n\t" \ + "addl %%ecx, %%eax \n\t" \ + "adcl $0, %%edx \n\t" \ + "addl (%%edi), %%eax \n\t" \ + "adcl $0, %%edx \n\t" \ + "movl %%edx, %%ecx \n\t" \ + "stosl \n\t" + +#if defined(MBEDTLS_HAVE_SSE2) + +#define MULADDC_HUIT \ + "movd %%ecx, %%mm1 \n\t" \ + "movd %%ebx, %%mm0 \n\t" \ + "movd (%%edi), %%mm3 \n\t" \ + "paddq %%mm3, %%mm1 \n\t" \ + "movd (%%esi), %%mm2 \n\t" \ + "pmuludq %%mm0, %%mm2 \n\t" \ + "movd 4(%%esi), %%mm4 \n\t" \ + "pmuludq %%mm0, %%mm4 \n\t" \ + "movd 8(%%esi), %%mm6 \n\t" \ + "pmuludq %%mm0, %%mm6 \n\t" \ + "movd 12(%%esi), %%mm7 \n\t" \ + "pmuludq %%mm0, %%mm7 \n\t" \ + "paddq %%mm2, %%mm1 \n\t" \ + "movd 4(%%edi), %%mm3 \n\t" \ + "paddq %%mm4, %%mm3 \n\t" \ + "movd 8(%%edi), %%mm5 \n\t" \ + "paddq %%mm6, %%mm5 \n\t" \ + "movd 12(%%edi), %%mm4 \n\t" \ + "paddq %%mm4, %%mm7 \n\t" \ + "movd %%mm1, (%%edi) \n\t" \ + "movd 16(%%esi), %%mm2 \n\t" \ + "pmuludq %%mm0, %%mm2 \n\t" \ + "psrlq $32, %%mm1 \n\t" \ + "movd 20(%%esi), %%mm4 \n\t" \ + "pmuludq %%mm0, %%mm4 \n\t" \ + "paddq %%mm3, %%mm1 \n\t" \ + "movd 24(%%esi), %%mm6 \n\t" \ + "pmuludq %%mm0, %%mm6 \n\t" \ + "movd %%mm1, 4(%%edi) \n\t" \ + "psrlq $32, %%mm1 \n\t" \ + "movd 28(%%esi), %%mm3 \n\t" \ + "pmuludq %%mm0, %%mm3 \n\t" \ + "paddq %%mm5, %%mm1 \n\t" \ + "movd 16(%%edi), %%mm5 \n\t" \ + "paddq %%mm5, %%mm2 \n\t" \ + "movd %%mm1, 8(%%edi) \n\t" \ + "psrlq $32, %%mm1 \n\t" \ + "paddq %%mm7, %%mm1 \n\t" \ + "movd 20(%%edi), %%mm5 \n\t" \ + "paddq %%mm5, %%mm4 \n\t" \ + "movd %%mm1, 12(%%edi) \n\t" \ + "psrlq $32, %%mm1 \n\t" \ + "paddq %%mm2, %%mm1 \n\t" \ + "movd 24(%%edi), %%mm5 \n\t" \ + "paddq %%mm5, %%mm6 \n\t" \ + "movd %%mm1, 16(%%edi) \n\t" \ + "psrlq $32, %%mm1 \n\t" \ + "paddq %%mm4, %%mm1 \n\t" \ + "movd 28(%%edi), %%mm5 \n\t" \ + "paddq %%mm5, %%mm3 \n\t" \ + "movd %%mm1, 20(%%edi) \n\t" \ + "psrlq $32, %%mm1 \n\t" \ + "paddq %%mm6, %%mm1 \n\t" \ + "movd %%mm1, 24(%%edi) \n\t" \ + "psrlq $32, %%mm1 \n\t" \ + "paddq %%mm3, %%mm1 \n\t" \ + "movd %%mm1, 28(%%edi) \n\t" \ + "addl $32, %%edi \n\t" \ + "addl $32, %%esi \n\t" \ + "psrlq $32, %%mm1 \n\t" \ + "movd %%mm1, %%ecx \n\t" + +#define MULADDC_STOP \ + "emms \n\t" \ + "movl %4, %%ebx \n\t" \ + "movl %%ecx, %1 \n\t" \ + "movl %%edi, %2 \n\t" \ + "movl %%esi, %3 \n\t" \ + : "=m" (t), "=m" (c), "=m" (d), "=m" (s) \ + : "m" (t), "m" (s), "m" (d), "m" (c), "m" (b) \ + : "eax", "ecx", "edx", "esi", "edi" \ + ); + +#else + +#define MULADDC_STOP \ + "movl %4, %%ebx \n\t" \ + "movl %%ecx, %1 \n\t" \ + "movl %%edi, %2 \n\t" \ + "movl %%esi, %3 \n\t" \ + : "=m" (t), "=m" (c), "=m" (d), "=m" (s) \ + : "m" (t), "m" (s), "m" (d), "m" (c), "m" (b) \ + : "eax", "ecx", "edx", "esi", "edi" \ + ); +#endif /* SSE2 */ +#endif /* i386 */ + +#if defined(__amd64__) || defined (__x86_64__) + +#define MULADDC_INIT \ + asm( \ + "xorq %%r8, %%r8 \n\t" + +#define MULADDC_CORE \ + "movq (%%rsi), %%rax \n\t" \ + "mulq %%rbx \n\t" \ + "addq $8, %%rsi \n\t" \ + "addq %%rcx, %%rax \n\t" \ + "movq %%r8, %%rcx \n\t" \ + "adcq $0, %%rdx \n\t" \ + "nop \n\t" \ + "addq %%rax, (%%rdi) \n\t" \ + "adcq %%rdx, %%rcx \n\t" \ + "addq $8, %%rdi \n\t" + +#define MULADDC_STOP \ + : "+c" (c), "+D" (d), "+S" (s) \ + : "b" (b) \ + : "rax", "rdx", "r8" \ + ); + +#endif /* AMD64 */ + +#if defined(__mc68020__) || defined(__mcpu32__) + +#define MULADDC_INIT \ + asm( \ + "movl %3, %%a2 \n\t" \ + "movl %4, %%a3 \n\t" \ + "movl %5, %%d3 \n\t" \ + "movl %6, %%d2 \n\t" \ + "moveq #0, %%d0 \n\t" + +#define MULADDC_CORE \ + "movel %%a2@+, %%d1 \n\t" \ + "mulul %%d2, %%d4:%%d1 \n\t" \ + "addl %%d3, %%d1 \n\t" \ + "addxl %%d0, %%d4 \n\t" \ + "moveq #0, %%d3 \n\t" \ + "addl %%d1, %%a3@+ \n\t" \ + "addxl %%d4, %%d3 \n\t" + +#define MULADDC_STOP \ + "movl %%d3, %0 \n\t" \ + "movl %%a3, %1 \n\t" \ + "movl %%a2, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "d0", "d1", "d2", "d3", "d4", "a2", "a3" \ + ); + +#define MULADDC_HUIT \ + "movel %%a2@+, %%d1 \n\t" \ + "mulul %%d2, %%d4:%%d1 \n\t" \ + "addxl %%d3, %%d1 \n\t" \ + "addxl %%d0, %%d4 \n\t" \ + "addl %%d1, %%a3@+ \n\t" \ + "movel %%a2@+, %%d1 \n\t" \ + "mulul %%d2, %%d3:%%d1 \n\t" \ + "addxl %%d4, %%d1 \n\t" \ + "addxl %%d0, %%d3 \n\t" \ + "addl %%d1, %%a3@+ \n\t" \ + "movel %%a2@+, %%d1 \n\t" \ + "mulul %%d2, %%d4:%%d1 \n\t" \ + "addxl %%d3, %%d1 \n\t" \ + "addxl %%d0, %%d4 \n\t" \ + "addl %%d1, %%a3@+ \n\t" \ + "movel %%a2@+, %%d1 \n\t" \ + "mulul %%d2, %%d3:%%d1 \n\t" \ + "addxl %%d4, %%d1 \n\t" \ + "addxl %%d0, %%d3 \n\t" \ + "addl %%d1, %%a3@+ \n\t" \ + "movel %%a2@+, %%d1 \n\t" \ + "mulul %%d2, %%d4:%%d1 \n\t" \ + "addxl %%d3, %%d1 \n\t" \ + "addxl %%d0, %%d4 \n\t" \ + "addl %%d1, %%a3@+ \n\t" \ + "movel %%a2@+, %%d1 \n\t" \ + "mulul %%d2, %%d3:%%d1 \n\t" \ + "addxl %%d4, %%d1 \n\t" \ + "addxl %%d0, %%d3 \n\t" \ + "addl %%d1, %%a3@+ \n\t" \ + "movel %%a2@+, %%d1 \n\t" \ + "mulul %%d2, %%d4:%%d1 \n\t" \ + "addxl %%d3, %%d1 \n\t" \ + "addxl %%d0, %%d4 \n\t" \ + "addl %%d1, %%a3@+ \n\t" \ + "movel %%a2@+, %%d1 \n\t" \ + "mulul %%d2, %%d3:%%d1 \n\t" \ + "addxl %%d4, %%d1 \n\t" \ + "addxl %%d0, %%d3 \n\t" \ + "addl %%d1, %%a3@+ \n\t" \ + "addxl %%d0, %%d3 \n\t" + +#endif /* MC68000 */ + +#if defined(__powerpc64__) || defined(__ppc64__) + +#if defined(__MACH__) && defined(__APPLE__) + +#define MULADDC_INIT \ + asm( \ + "ld r3, %3 \n\t" \ + "ld r4, %4 \n\t" \ + "ld r5, %5 \n\t" \ + "ld r6, %6 \n\t" \ + "addi r3, r3, -8 \n\t" \ + "addi r4, r4, -8 \n\t" \ + "addic r5, r5, 0 \n\t" + +#define MULADDC_CORE \ + "ldu r7, 8(r3) \n\t" \ + "mulld r8, r7, r6 \n\t" \ + "mulhdu r9, r7, r6 \n\t" \ + "adde r8, r8, r5 \n\t" \ + "ld r7, 8(r4) \n\t" \ + "addze r5, r9 \n\t" \ + "addc r8, r8, r7 \n\t" \ + "stdu r8, 8(r4) \n\t" + +#define MULADDC_STOP \ + "addze r5, r5 \n\t" \ + "addi r4, r4, 8 \n\t" \ + "addi r3, r3, 8 \n\t" \ + "std r5, %0 \n\t" \ + "std r4, %1 \n\t" \ + "std r3, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "r3", "r4", "r5", "r6", "r7", "r8", "r9" \ + ); + + +#else /* __MACH__ && __APPLE__ */ + +#define MULADDC_INIT \ + asm( \ + "ld %%r3, %3 \n\t" \ + "ld %%r4, %4 \n\t" \ + "ld %%r5, %5 \n\t" \ + "ld %%r6, %6 \n\t" \ + "addi %%r3, %%r3, -8 \n\t" \ + "addi %%r4, %%r4, -8 \n\t" \ + "addic %%r5, %%r5, 0 \n\t" + +#define MULADDC_CORE \ + "ldu %%r7, 8(%%r3) \n\t" \ + "mulld %%r8, %%r7, %%r6 \n\t" \ + "mulhdu %%r9, %%r7, %%r6 \n\t" \ + "adde %%r8, %%r8, %%r5 \n\t" \ + "ld %%r7, 8(%%r4) \n\t" \ + "addze %%r5, %%r9 \n\t" \ + "addc %%r8, %%r8, %%r7 \n\t" \ + "stdu %%r8, 8(%%r4) \n\t" + +#define MULADDC_STOP \ + "addze %%r5, %%r5 \n\t" \ + "addi %%r4, %%r4, 8 \n\t" \ + "addi %%r3, %%r3, 8 \n\t" \ + "std %%r5, %0 \n\t" \ + "std %%r4, %1 \n\t" \ + "std %%r3, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "r3", "r4", "r5", "r6", "r7", "r8", "r9" \ + ); + +#endif /* __MACH__ && __APPLE__ */ + +#elif defined(__powerpc__) || defined(__ppc__) /* end PPC64/begin PPC32 */ + +#if defined(__MACH__) && defined(__APPLE__) + +#define MULADDC_INIT \ + asm( \ + "lwz r3, %3 \n\t" \ + "lwz r4, %4 \n\t" \ + "lwz r5, %5 \n\t" \ + "lwz r6, %6 \n\t" \ + "addi r3, r3, -4 \n\t" \ + "addi r4, r4, -4 \n\t" \ + "addic r5, r5, 0 \n\t" + +#define MULADDC_CORE \ + "lwzu r7, 4(r3) \n\t" \ + "mullw r8, r7, r6 \n\t" \ + "mulhwu r9, r7, r6 \n\t" \ + "adde r8, r8, r5 \n\t" \ + "lwz r7, 4(r4) \n\t" \ + "addze r5, r9 \n\t" \ + "addc r8, r8, r7 \n\t" \ + "stwu r8, 4(r4) \n\t" + +#define MULADDC_STOP \ + "addze r5, r5 \n\t" \ + "addi r4, r4, 4 \n\t" \ + "addi r3, r3, 4 \n\t" \ + "stw r5, %0 \n\t" \ + "stw r4, %1 \n\t" \ + "stw r3, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "r3", "r4", "r5", "r6", "r7", "r8", "r9" \ + ); + +#else /* __MACH__ && __APPLE__ */ + +#define MULADDC_INIT \ + asm( \ + "lwz %%r3, %3 \n\t" \ + "lwz %%r4, %4 \n\t" \ + "lwz %%r5, %5 \n\t" \ + "lwz %%r6, %6 \n\t" \ + "addi %%r3, %%r3, -4 \n\t" \ + "addi %%r4, %%r4, -4 \n\t" \ + "addic %%r5, %%r5, 0 \n\t" + +#define MULADDC_CORE \ + "lwzu %%r7, 4(%%r3) \n\t" \ + "mullw %%r8, %%r7, %%r6 \n\t" \ + "mulhwu %%r9, %%r7, %%r6 \n\t" \ + "adde %%r8, %%r8, %%r5 \n\t" \ + "lwz %%r7, 4(%%r4) \n\t" \ + "addze %%r5, %%r9 \n\t" \ + "addc %%r8, %%r8, %%r7 \n\t" \ + "stwu %%r8, 4(%%r4) \n\t" + +#define MULADDC_STOP \ + "addze %%r5, %%r5 \n\t" \ + "addi %%r4, %%r4, 4 \n\t" \ + "addi %%r3, %%r3, 4 \n\t" \ + "stw %%r5, %0 \n\t" \ + "stw %%r4, %1 \n\t" \ + "stw %%r3, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "r3", "r4", "r5", "r6", "r7", "r8", "r9" \ + ); + +#endif /* __MACH__ && __APPLE__ */ + +#endif /* PPC32 */ + +/* + * The Sparc(64) assembly is reported to be broken. + * Disable it for now, until we're able to fix it. + */ +#if 0 && defined(__sparc__) +#if defined(__sparc64__) + +#define MULADDC_INIT \ + asm( \ + "ldx %3, %%o0 \n\t" \ + "ldx %4, %%o1 \n\t" \ + "ld %5, %%o2 \n\t" \ + "ld %6, %%o3 \n\t" + +#define MULADDC_CORE \ + "ld [%%o0], %%o4 \n\t" \ + "inc 4, %%o0 \n\t" \ + "ld [%%o1], %%o5 \n\t" \ + "umul %%o3, %%o4, %%o4 \n\t" \ + "addcc %%o4, %%o2, %%o4 \n\t" \ + "rd %%y, %%g1 \n\t" \ + "addx %%g1, 0, %%g1 \n\t" \ + "addcc %%o4, %%o5, %%o4 \n\t" \ + "st %%o4, [%%o1] \n\t" \ + "addx %%g1, 0, %%o2 \n\t" \ + "inc 4, %%o1 \n\t" + + #define MULADDC_STOP \ + "st %%o2, %0 \n\t" \ + "stx %%o1, %1 \n\t" \ + "stx %%o0, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "g1", "o0", "o1", "o2", "o3", "o4", \ + "o5" \ + ); + +#else /* __sparc64__ */ + +#define MULADDC_INIT \ + asm( \ + "ld %3, %%o0 \n\t" \ + "ld %4, %%o1 \n\t" \ + "ld %5, %%o2 \n\t" \ + "ld %6, %%o3 \n\t" + +#define MULADDC_CORE \ + "ld [%%o0], %%o4 \n\t" \ + "inc 4, %%o0 \n\t" \ + "ld [%%o1], %%o5 \n\t" \ + "umul %%o3, %%o4, %%o4 \n\t" \ + "addcc %%o4, %%o2, %%o4 \n\t" \ + "rd %%y, %%g1 \n\t" \ + "addx %%g1, 0, %%g1 \n\t" \ + "addcc %%o4, %%o5, %%o4 \n\t" \ + "st %%o4, [%%o1] \n\t" \ + "addx %%g1, 0, %%o2 \n\t" \ + "inc 4, %%o1 \n\t" + +#define MULADDC_STOP \ + "st %%o2, %0 \n\t" \ + "st %%o1, %1 \n\t" \ + "st %%o0, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "g1", "o0", "o1", "o2", "o3", "o4", \ + "o5" \ + ); + +#endif /* __sparc64__ */ +#endif /* __sparc__ */ + +#if defined(__microblaze__) || defined(microblaze) + +#define MULADDC_INIT \ + asm( \ + "lwi r3, %3 \n\t" \ + "lwi r4, %4 \n\t" \ + "lwi r5, %5 \n\t" \ + "lwi r6, %6 \n\t" \ + "andi r7, r6, 0xffff \n\t" \ + "bsrli r6, r6, 16 \n\t" + +#define MULADDC_CORE \ + "lhui r8, r3, 0 \n\t" \ + "addi r3, r3, 2 \n\t" \ + "lhui r9, r3, 0 \n\t" \ + "addi r3, r3, 2 \n\t" \ + "mul r10, r9, r6 \n\t" \ + "mul r11, r8, r7 \n\t" \ + "mul r12, r9, r7 \n\t" \ + "mul r13, r8, r6 \n\t" \ + "bsrli r8, r10, 16 \n\t" \ + "bsrli r9, r11, 16 \n\t" \ + "add r13, r13, r8 \n\t" \ + "add r13, r13, r9 \n\t" \ + "bslli r10, r10, 16 \n\t" \ + "bslli r11, r11, 16 \n\t" \ + "add r12, r12, r10 \n\t" \ + "addc r13, r13, r0 \n\t" \ + "add r12, r12, r11 \n\t" \ + "addc r13, r13, r0 \n\t" \ + "lwi r10, r4, 0 \n\t" \ + "add r12, r12, r10 \n\t" \ + "addc r13, r13, r0 \n\t" \ + "add r12, r12, r5 \n\t" \ + "addc r5, r13, r0 \n\t" \ + "swi r12, r4, 0 \n\t" \ + "addi r4, r4, 4 \n\t" + +#define MULADDC_STOP \ + "swi r5, %0 \n\t" \ + "swi r4, %1 \n\t" \ + "swi r3, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "r3", "r4" "r5", "r6", "r7", "r8", \ + "r9", "r10", "r11", "r12", "r13" \ + ); + +#endif /* MicroBlaze */ + +#if defined(__tricore__) + +#define MULADDC_INIT \ + asm( \ + "ld.a %%a2, %3 \n\t" \ + "ld.a %%a3, %4 \n\t" \ + "ld.w %%d4, %5 \n\t" \ + "ld.w %%d1, %6 \n\t" \ + "xor %%d5, %%d5 \n\t" + +#define MULADDC_CORE \ + "ld.w %%d0, [%%a2+] \n\t" \ + "madd.u %%e2, %%e4, %%d0, %%d1 \n\t" \ + "ld.w %%d0, [%%a3] \n\t" \ + "addx %%d2, %%d2, %%d0 \n\t" \ + "addc %%d3, %%d3, 0 \n\t" \ + "mov %%d4, %%d3 \n\t" \ + "st.w [%%a3+], %%d2 \n\t" + +#define MULADDC_STOP \ + "st.w %0, %%d4 \n\t" \ + "st.a %1, %%a3 \n\t" \ + "st.a %2, %%a2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "d0", "d1", "e2", "d4", "a2", "a3" \ + ); + +#endif /* TriCore */ + +/* + * gcc -O0 by default uses r7 for the frame pointer, so it complains about our + * use of r7 below, unless -fomit-frame-pointer is passed. Unfortunately, + * passing that option is not easy when building with yotta. + * + * On the other hand, -fomit-frame-pointer is implied by any -Ox options with + * x !=0, which we can detect using __OPTIMIZE__ (which is also defined by + * clang and armcc5 under the same conditions). + * + * So, only use the optimized assembly below for optimized build, which avoids + * the build error and is pretty reasonable anyway. + */ +#if defined(__GNUC__) && !defined(__OPTIMIZE__) +#define MULADDC_CANNOT_USE_R7 +#endif + +#if defined(__arm__) && !defined(MULADDC_CANNOT_USE_R7) + +#if defined(__thumb__) && !defined(__thumb2__) + +#define MULADDC_INIT \ + asm( \ + "ldr r0, %3 \n\t" \ + "ldr r1, %4 \n\t" \ + "ldr r2, %5 \n\t" \ + "ldr r3, %6 \n\t" \ + "lsr r7, r3, #16 \n\t" \ + "mov r9, r7 \n\t" \ + "lsl r7, r3, #16 \n\t" \ + "lsr r7, r7, #16 \n\t" \ + "mov r8, r7 \n\t" + +#define MULADDC_CORE \ + "ldmia r0!, {r6} \n\t" \ + "lsr r7, r6, #16 \n\t" \ + "lsl r6, r6, #16 \n\t" \ + "lsr r6, r6, #16 \n\t" \ + "mov r4, r8 \n\t" \ + "mul r4, r6 \n\t" \ + "mov r3, r9 \n\t" \ + "mul r6, r3 \n\t" \ + "mov r5, r9 \n\t" \ + "mul r5, r7 \n\t" \ + "mov r3, r8 \n\t" \ + "mul r7, r3 \n\t" \ + "lsr r3, r6, #16 \n\t" \ + "add r5, r5, r3 \n\t" \ + "lsr r3, r7, #16 \n\t" \ + "add r5, r5, r3 \n\t" \ + "add r4, r4, r2 \n\t" \ + "mov r2, #0 \n\t" \ + "adc r5, r2 \n\t" \ + "lsl r3, r6, #16 \n\t" \ + "add r4, r4, r3 \n\t" \ + "adc r5, r2 \n\t" \ + "lsl r3, r7, #16 \n\t" \ + "add r4, r4, r3 \n\t" \ + "adc r5, r2 \n\t" \ + "ldr r3, [r1] \n\t" \ + "add r4, r4, r3 \n\t" \ + "adc r2, r5 \n\t" \ + "stmia r1!, {r4} \n\t" + +#define MULADDC_STOP \ + "str r2, %0 \n\t" \ + "str r1, %1 \n\t" \ + "str r0, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "r0", "r1", "r2", "r3", "r4", "r5", \ + "r6", "r7", "r8", "r9", "cc" \ + ); + +#else + +#define MULADDC_INIT \ + asm( \ + "ldr r0, %3 \n\t" \ + "ldr r1, %4 \n\t" \ + "ldr r2, %5 \n\t" \ + "ldr r3, %6 \n\t" + +#define MULADDC_CORE \ + "ldr r4, [r0], #4 \n\t" \ + "mov r5, #0 \n\t" \ + "ldr r6, [r1] \n\t" \ + "umlal r2, r5, r3, r4 \n\t" \ + "adds r7, r6, r2 \n\t" \ + "adc r2, r5, #0 \n\t" \ + "str r7, [r1], #4 \n\t" + +#define MULADDC_STOP \ + "str r2, %0 \n\t" \ + "str r1, %1 \n\t" \ + "str r0, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "r0", "r1", "r2", "r3", "r4", "r5", \ + "r6", "r7", "cc" \ + ); + +#endif /* Thumb */ + +#endif /* ARMv3 */ + +#if defined(__alpha__) + +#define MULADDC_INIT \ + asm( \ + "ldq $1, %3 \n\t" \ + "ldq $2, %4 \n\t" \ + "ldq $3, %5 \n\t" \ + "ldq $4, %6 \n\t" + +#define MULADDC_CORE \ + "ldq $6, 0($1) \n\t" \ + "addq $1, 8, $1 \n\t" \ + "mulq $6, $4, $7 \n\t" \ + "umulh $6, $4, $6 \n\t" \ + "addq $7, $3, $7 \n\t" \ + "cmpult $7, $3, $3 \n\t" \ + "ldq $5, 0($2) \n\t" \ + "addq $7, $5, $7 \n\t" \ + "cmpult $7, $5, $5 \n\t" \ + "stq $7, 0($2) \n\t" \ + "addq $2, 8, $2 \n\t" \ + "addq $6, $3, $3 \n\t" \ + "addq $5, $3, $3 \n\t" + +#define MULADDC_STOP \ + "stq $3, %0 \n\t" \ + "stq $2, %1 \n\t" \ + "stq $1, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "$1", "$2", "$3", "$4", "$5", "$6", "$7" \ + ); +#endif /* Alpha */ + +#if defined(__mips__) && !defined(__mips64) + +#define MULADDC_INIT \ + asm( \ + "lw $10, %3 \n\t" \ + "lw $11, %4 \n\t" \ + "lw $12, %5 \n\t" \ + "lw $13, %6 \n\t" + +#define MULADDC_CORE \ + "lw $14, 0($10) \n\t" \ + "multu $13, $14 \n\t" \ + "addi $10, $10, 4 \n\t" \ + "mflo $14 \n\t" \ + "mfhi $9 \n\t" \ + "addu $14, $12, $14 \n\t" \ + "lw $15, 0($11) \n\t" \ + "sltu $12, $14, $12 \n\t" \ + "addu $15, $14, $15 \n\t" \ + "sltu $14, $15, $14 \n\t" \ + "addu $12, $12, $9 \n\t" \ + "sw $15, 0($11) \n\t" \ + "addu $12, $12, $14 \n\t" \ + "addi $11, $11, 4 \n\t" + +#define MULADDC_STOP \ + "sw $12, %0 \n\t" \ + "sw $11, %1 \n\t" \ + "sw $10, %2 \n\t" \ + : "=m" (c), "=m" (d), "=m" (s) \ + : "m" (s), "m" (d), "m" (c), "m" (b) \ + : "$9", "$10", "$11", "$12", "$13", "$14", "$15" \ + ); + +#endif /* MIPS */ +#endif /* GNUC */ + +#if (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) + +#define MULADDC_INIT \ + __asm mov esi, s \ + __asm mov edi, d \ + __asm mov ecx, c \ + __asm mov ebx, b + +#define MULADDC_CORE \ + __asm lodsd \ + __asm mul ebx \ + __asm add eax, ecx \ + __asm adc edx, 0 \ + __asm add eax, [edi] \ + __asm adc edx, 0 \ + __asm mov ecx, edx \ + __asm stosd + +#if defined(MBEDTLS_HAVE_SSE2) + +#define EMIT __asm _emit + +#define MULADDC_HUIT \ + EMIT 0x0F EMIT 0x6E EMIT 0xC9 \ + EMIT 0x0F EMIT 0x6E EMIT 0xC3 \ + EMIT 0x0F EMIT 0x6E EMIT 0x1F \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCB \ + EMIT 0x0F EMIT 0x6E EMIT 0x16 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xD0 \ + EMIT 0x0F EMIT 0x6E EMIT 0x66 EMIT 0x04 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xE0 \ + EMIT 0x0F EMIT 0x6E EMIT 0x76 EMIT 0x08 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xF0 \ + EMIT 0x0F EMIT 0x6E EMIT 0x7E EMIT 0x0C \ + EMIT 0x0F EMIT 0xF4 EMIT 0xF8 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCA \ + EMIT 0x0F EMIT 0x6E EMIT 0x5F EMIT 0x04 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xDC \ + EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x08 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xEE \ + EMIT 0x0F EMIT 0x6E EMIT 0x67 EMIT 0x0C \ + EMIT 0x0F EMIT 0xD4 EMIT 0xFC \ + EMIT 0x0F EMIT 0x7E EMIT 0x0F \ + EMIT 0x0F EMIT 0x6E EMIT 0x56 EMIT 0x10 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xD0 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0x6E EMIT 0x66 EMIT 0x14 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xE0 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCB \ + EMIT 0x0F EMIT 0x6E EMIT 0x76 EMIT 0x18 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xF0 \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x04 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0x6E EMIT 0x5E EMIT 0x1C \ + EMIT 0x0F EMIT 0xF4 EMIT 0xD8 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCD \ + EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x10 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xD5 \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x08 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCF \ + EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x14 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xE5 \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x0C \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCA \ + EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x18 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xF5 \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x10 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCC \ + EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x1C \ + EMIT 0x0F EMIT 0xD4 EMIT 0xDD \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x14 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCE \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x18 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCB \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x1C \ + EMIT 0x83 EMIT 0xC7 EMIT 0x20 \ + EMIT 0x83 EMIT 0xC6 EMIT 0x20 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0x7E EMIT 0xC9 + +#define MULADDC_STOP \ + EMIT 0x0F EMIT 0x77 \ + __asm mov c, ecx \ + __asm mov d, edi \ + __asm mov s, esi \ + +#else + +#define MULADDC_STOP \ + __asm mov c, ecx \ + __asm mov d, edi \ + __asm mov s, esi \ + +#endif /* SSE2 */ +#endif /* MSVC */ + +#endif /* MBEDTLS_HAVE_ASM */ + +#if !defined(MULADDC_CORE) +#if defined(MBEDTLS_HAVE_UDBL) + +#define MULADDC_INIT \ +{ \ + mbedtls_t_udbl r; \ + mbedtls_mpi_uint r0, r1; + +#define MULADDC_CORE \ + r = *(s++) * (mbedtls_t_udbl) b; \ + r0 = (mbedtls_mpi_uint) r; \ + r1 = (mbedtls_mpi_uint)( r >> biL ); \ + r0 += c; r1 += (r0 < c); \ + r0 += *d; r1 += (r0 < *d); \ + c = r1; *(d++) = r0; + +#define MULADDC_STOP \ +} + +#else +#define MULADDC_INIT \ +{ \ + mbedtls_mpi_uint s0, s1, b0, b1; \ + mbedtls_mpi_uint r0, r1, rx, ry; \ + b0 = ( b << biH ) >> biH; \ + b1 = ( b >> biH ); + +#define MULADDC_CORE \ + s0 = ( *s << biH ) >> biH; \ + s1 = ( *s >> biH ); s++; \ + rx = s0 * b1; r0 = s0 * b0; \ + ry = s1 * b0; r1 = s1 * b1; \ + r1 += ( rx >> biH ); \ + r1 += ( ry >> biH ); \ + rx <<= biH; ry <<= biH; \ + r0 += rx; r1 += (r0 < rx); \ + r0 += ry; r1 += (r0 < ry); \ + r0 += c; r1 += (r0 < c); \ + r0 += *d; r1 += (r0 < *d); \ + c = r1; *(d++) = r0; + +#define MULADDC_STOP \ +} + +#endif /* C (generic) */ +#endif /* C (longlong) */ + +#endif /* bn_mul.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/camellia.h b/tools/sdk/include/mbedtls/mbedtls/camellia.h new file mode 100644 index 00000000..0424d623 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/camellia.h @@ -0,0 +1,235 @@ +/** + * \file camellia.h + * + * \brief Camellia block cipher + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_CAMELLIA_H +#define MBEDTLS_CAMELLIA_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#define MBEDTLS_CAMELLIA_ENCRYPT 1 +#define MBEDTLS_CAMELLIA_DECRYPT 0 + +#define MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH -0x0024 /**< Invalid key length. */ +#define MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH -0x0026 /**< Invalid data input length. */ + +#if !defined(MBEDTLS_CAMELLIA_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief CAMELLIA context structure + */ +typedef struct +{ + int nr; /*!< number of rounds */ + uint32_t rk[68]; /*!< CAMELLIA round keys */ +} +mbedtls_camellia_context; + +/** + * \brief Initialize CAMELLIA context + * + * \param ctx CAMELLIA context to be initialized + */ +void mbedtls_camellia_init( mbedtls_camellia_context *ctx ); + +/** + * \brief Clear CAMELLIA context + * + * \param ctx CAMELLIA context to be cleared + */ +void mbedtls_camellia_free( mbedtls_camellia_context *ctx ); + +/** + * \brief CAMELLIA key schedule (encryption) + * + * \param ctx CAMELLIA context to be initialized + * \param key encryption key + * \param keybits must be 128, 192 or 256 + * + * \return 0 if successful, or MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH + */ +int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned char *key, + unsigned int keybits ); + +/** + * \brief CAMELLIA key schedule (decryption) + * + * \param ctx CAMELLIA context to be initialized + * \param key decryption key + * \param keybits must be 128, 192 or 256 + * + * \return 0 if successful, or MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH + */ +int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, const unsigned char *key, + unsigned int keybits ); + +/** + * \brief CAMELLIA-ECB block encryption/decryption + * + * \param ctx CAMELLIA context + * \param mode MBEDTLS_CAMELLIA_ENCRYPT or MBEDTLS_CAMELLIA_DECRYPT + * \param input 16-byte input block + * \param output 16-byte output block + * + * \return 0 if successful + */ +int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, + int mode, + const unsigned char input[16], + unsigned char output[16] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief CAMELLIA-CBC buffer encryption/decryption + * Length should be a multiple of the block + * size (16 bytes) + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx CAMELLIA context + * \param mode MBEDTLS_CAMELLIA_ENCRYPT or MBEDTLS_CAMELLIA_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful, or + * MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH + */ +int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) +/** + * \brief CAMELLIA-CFB128 buffer encryption/decryption + * + * Note: Due to the nature of CFB you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * mbedtls_camellia_setkey_enc() for both MBEDTLS_CAMELLIA_ENCRYPT and CAMELLIE_DECRYPT. + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx CAMELLIA context + * \param mode MBEDTLS_CAMELLIA_ENCRYPT or MBEDTLS_CAMELLIA_DECRYPT + * \param length length of the input data + * \param iv_off offset in IV (updated after use) + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful, or + * MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH + */ +int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) +/** + * \brief CAMELLIA-CTR buffer encryption/decryption + * + * Warning: You have to keep the maximum use of your counter in mind! + * + * Note: Due to the nature of CTR you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * mbedtls_camellia_setkey_enc() for both MBEDTLS_CAMELLIA_ENCRYPT and MBEDTLS_CAMELLIA_DECRYPT. + * + * \param ctx CAMELLIA context + * \param length The length of the data + * \param nc_off The offset in the current stream_block (for resuming + * within current cipher stream). The offset pointer to + * should be 0 at the start of a stream. + * \param nonce_counter The 128-bit nonce and counter. + * \param stream_block The saved stream-block for resuming. Is overwritten + * by the function. + * \param input The input data stream + * \param output The output data stream + * + * \return 0 if successful + */ +int mbedtls_camellia_crypt_ctr( mbedtls_camellia_context *ctx, + size_t length, + size_t *nc_off, + unsigned char nonce_counter[16], + unsigned char stream_block[16], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_CAMELLIA_ALT */ +#include "camellia_alt.h" +#endif /* MBEDTLS_CAMELLIA_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_camellia_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* camellia.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ccm.h b/tools/sdk/include/mbedtls/mbedtls/ccm.h new file mode 100644 index 00000000..ef75839b --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ccm.h @@ -0,0 +1,141 @@ +/** + * \file ccm.h + * + * \brief Counter with CBC-MAC (CCM) for 128-bit block ciphers + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_CCM_H +#define MBEDTLS_CCM_H + +#include "cipher.h" + +#define MBEDTLS_ERR_CCM_BAD_INPUT -0x000D /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_CCM_AUTH_FAILED -0x000F /**< Authenticated decryption failed. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief CCM context structure + */ +typedef struct { + mbedtls_cipher_context_t cipher_ctx; /*!< cipher context used */ +} +mbedtls_ccm_context; + +/** + * \brief Initialize CCM context (just makes references valid) + * Makes the context ready for mbedtls_ccm_setkey() or + * mbedtls_ccm_free(). + * + * \param ctx CCM context to initialize + */ +void mbedtls_ccm_init( mbedtls_ccm_context *ctx ); + +/** + * \brief CCM initialization (encryption and decryption) + * + * \param ctx CCM context to be initialized + * \param cipher cipher to use (a 128-bit block cipher) + * \param key encryption key + * \param keybits key size in bits (must be acceptable by the cipher) + * + * \return 0 if successful, or a cipher specific error code + */ +int mbedtls_ccm_setkey( mbedtls_ccm_context *ctx, + mbedtls_cipher_id_t cipher, + const unsigned char *key, + unsigned int keybits ); + +/** + * \brief Free a CCM context and underlying cipher sub-context + * + * \param ctx CCM context to free + */ +void mbedtls_ccm_free( mbedtls_ccm_context *ctx ); + +/** + * \brief CCM buffer encryption + * + * \param ctx CCM context + * \param length length of the input data in bytes + * \param iv nonce (initialization vector) + * \param iv_len length of IV in bytes + * must be 2, 3, 4, 5, 6, 7 or 8 + * \param add additional data + * \param add_len length of additional data in bytes + * must be less than 2^16 - 2^8 + * \param input buffer holding the input data + * \param output buffer for holding the output data + * must be at least 'length' bytes wide + * \param tag buffer for holding the tag + * \param tag_len length of the tag to generate in bytes + * must be 4, 6, 8, 10, 14 or 16 + * + * \note The tag is written to a separate buffer. To get the tag + * concatenated with the output as in the CCM spec, use + * tag = output + length and make sure the output buffer is + * at least length + tag_len wide. + * + * \return 0 if successful + */ +int mbedtls_ccm_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length, + const unsigned char *iv, size_t iv_len, + const unsigned char *add, size_t add_len, + const unsigned char *input, unsigned char *output, + unsigned char *tag, size_t tag_len ); + +/** + * \brief CCM buffer authenticated decryption + * + * \param ctx CCM context + * \param length length of the input data + * \param iv initialization vector + * \param iv_len length of IV + * \param add additional data + * \param add_len length of additional data + * \param input buffer holding the input data + * \param output buffer for holding the output data + * \param tag buffer holding the tag + * \param tag_len length of the tag + * + * \return 0 if successful and authenticated, + * MBEDTLS_ERR_CCM_AUTH_FAILED if tag does not match + */ +int mbedtls_ccm_auth_decrypt( mbedtls_ccm_context *ctx, size_t length, + const unsigned char *iv, size_t iv_len, + const unsigned char *add, size_t add_len, + const unsigned char *input, unsigned char *output, + const unsigned char *tag, size_t tag_len ); + +#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C) +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_ccm_self_test( int verbose ); +#endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_CCM_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/certs.h b/tools/sdk/include/mbedtls/mbedtls/certs.h new file mode 100644 index 00000000..ca49086e --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/certs.h @@ -0,0 +1,99 @@ +/** + * \file certs.h + * + * \brief Sample certificates and DHM parameters for testing + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_CERTS_H +#define MBEDTLS_CERTS_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(MBEDTLS_PEM_PARSE_C) +/* Concatenation of all CA certificates in PEM format if available */ +extern const char mbedtls_test_cas_pem[]; +extern const size_t mbedtls_test_cas_pem_len; +#endif + +/* List of all CA certificates, terminated by NULL */ +extern const char * mbedtls_test_cas[]; +extern const size_t mbedtls_test_cas_len[]; + +/* + * Convenience for users who just want a certificate: + * RSA by default, or ECDSA if RSA is not available + */ +extern const char * mbedtls_test_ca_crt; +extern const size_t mbedtls_test_ca_crt_len; +extern const char * mbedtls_test_ca_key; +extern const size_t mbedtls_test_ca_key_len; +extern const char * mbedtls_test_ca_pwd; +extern const size_t mbedtls_test_ca_pwd_len; +extern const char * mbedtls_test_srv_crt; +extern const size_t mbedtls_test_srv_crt_len; +extern const char * mbedtls_test_srv_key; +extern const size_t mbedtls_test_srv_key_len; +extern const char * mbedtls_test_cli_crt; +extern const size_t mbedtls_test_cli_crt_len; +extern const char * mbedtls_test_cli_key; +extern const size_t mbedtls_test_cli_key_len; + +#if defined(MBEDTLS_ECDSA_C) +extern const char mbedtls_test_ca_crt_ec[]; +extern const size_t mbedtls_test_ca_crt_ec_len; +extern const char mbedtls_test_ca_key_ec[]; +extern const size_t mbedtls_test_ca_key_ec_len; +extern const char mbedtls_test_ca_pwd_ec[]; +extern const size_t mbedtls_test_ca_pwd_ec_len; +extern const char mbedtls_test_srv_crt_ec[]; +extern const size_t mbedtls_test_srv_crt_ec_len; +extern const char mbedtls_test_srv_key_ec[]; +extern const size_t mbedtls_test_srv_key_ec_len; +extern const char mbedtls_test_cli_crt_ec[]; +extern const size_t mbedtls_test_cli_crt_ec_len; +extern const char mbedtls_test_cli_key_ec[]; +extern const size_t mbedtls_test_cli_key_ec_len; +#endif + +#if defined(MBEDTLS_RSA_C) +extern const char mbedtls_test_ca_crt_rsa[]; +extern const size_t mbedtls_test_ca_crt_rsa_len; +extern const char mbedtls_test_ca_key_rsa[]; +extern const size_t mbedtls_test_ca_key_rsa_len; +extern const char mbedtls_test_ca_pwd_rsa[]; +extern const size_t mbedtls_test_ca_pwd_rsa_len; +extern const char mbedtls_test_srv_crt_rsa[]; +extern const size_t mbedtls_test_srv_crt_rsa_len; +extern const char mbedtls_test_srv_key_rsa[]; +extern const size_t mbedtls_test_srv_key_rsa_len; +extern const char mbedtls_test_cli_crt_rsa[]; +extern const size_t mbedtls_test_cli_crt_rsa_len; +extern const char mbedtls_test_cli_key_rsa[]; +extern const size_t mbedtls_test_cli_key_rsa_len; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* certs.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/check_config.h b/tools/sdk/include/mbedtls/mbedtls/check_config.h new file mode 100644 index 00000000..a95af6ca --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/check_config.h @@ -0,0 +1,587 @@ +/** + * \file check_config.h + * + * \brief Consistency checks for configuration options + * + * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +/* + * It is recommended to include this file from your config.h + * in order to catch dependency issues early. + */ + +#ifndef MBEDTLS_CHECK_CONFIG_H +#define MBEDTLS_CHECK_CONFIG_H + +/* + * We assume CHAR_BIT is 8 in many places. In practice, this is true on our + * target platforms, so not an issue, but let's just be extra sure. + */ +#include +#if CHAR_BIT != 8 +#error "mbed TLS requires a platform with 8-bit chars" +#endif + +#if defined(_WIN32) +#if !defined(MBEDTLS_PLATFORM_C) +#error "MBEDTLS_PLATFORM_C is required on Windows" +#endif + +/* Fix the config here. Not convenient to put an #ifdef _WIN32 in config.h as + * it would confuse config.pl. */ +#if !defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) && \ + !defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO) +#define MBEDTLS_PLATFORM_SNPRINTF_ALT +#endif +#endif /* _WIN32 */ + +#if defined(TARGET_LIKE_MBED) && \ + ( defined(MBEDTLS_NET_C) || defined(MBEDTLS_TIMING_C) ) +#error "The NET and TIMING modules are not available for mbed OS - please use the network and timing functions provided by mbed OS" +#endif + +#if defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(__GNUC__) && !defined(__clang__) +#error "MBEDTLS_DEPRECATED_WARNING only works with GCC and Clang" +#endif + +#if defined(MBEDTLS_HAVE_TIME_DATE) && !defined(MBEDTLS_HAVE_TIME) +#error "MBEDTLS_HAVE_TIME_DATE without MBEDTLS_HAVE_TIME does not make sense" +#endif + +#if defined(MBEDTLS_AESNI_C) && !defined(MBEDTLS_HAVE_ASM) +#error "MBEDTLS_AESNI_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_CTR_DRBG_C) && !defined(MBEDTLS_AES_C) +#error "MBEDTLS_CTR_DRBG_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_DHM_C) && !defined(MBEDTLS_BIGNUM_C) +#error "MBEDTLS_DHM_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECDH_C) && !defined(MBEDTLS_ECP_C) +#error "MBEDTLS_ECDH_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECDSA_C) && \ + ( !defined(MBEDTLS_ECP_C) || \ + !defined(MBEDTLS_ASN1_PARSE_C) || \ + !defined(MBEDTLS_ASN1_WRITE_C) ) +#error "MBEDTLS_ECDSA_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECJPAKE_C) && \ + ( !defined(MBEDTLS_ECP_C) || !defined(MBEDTLS_MD_C) ) +#error "MBEDTLS_ECJPAKE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECDSA_DETERMINISTIC) && !defined(MBEDTLS_HMAC_DRBG_C) +#error "MBEDTLS_ECDSA_DETERMINISTIC defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECP_C) && ( !defined(MBEDTLS_BIGNUM_C) || ( \ + !defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) && \ + !defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) && \ + !defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) && \ + !defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && \ + !defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) && \ + !defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) && \ + !defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) && \ + !defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) && \ + !defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) && \ + !defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) && \ + !defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) ) ) +#error "MBEDTLS_ECP_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ENTROPY_C) && (!defined(MBEDTLS_SHA512_C) && \ + !defined(MBEDTLS_SHA256_C)) +#error "MBEDTLS_ENTROPY_C defined, but not all prerequisites" +#endif +#if defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_SHA512_C) && \ + defined(MBEDTLS_CTR_DRBG_ENTROPY_LEN) && (MBEDTLS_CTR_DRBG_ENTROPY_LEN > 64) +#error "MBEDTLS_CTR_DRBG_ENTROPY_LEN value too high" +#endif +#if defined(MBEDTLS_ENTROPY_C) && \ + ( !defined(MBEDTLS_SHA512_C) || defined(MBEDTLS_ENTROPY_FORCE_SHA256) ) \ + && defined(MBEDTLS_CTR_DRBG_ENTROPY_LEN) && (MBEDTLS_CTR_DRBG_ENTROPY_LEN > 32) +#error "MBEDTLS_CTR_DRBG_ENTROPY_LEN value too high" +#endif +#if defined(MBEDTLS_ENTROPY_C) && \ + defined(MBEDTLS_ENTROPY_FORCE_SHA256) && !defined(MBEDTLS_SHA256_C) +#error "MBEDTLS_ENTROPY_FORCE_SHA256 defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_TEST_NULL_ENTROPY) && \ + ( !defined(MBEDTLS_ENTROPY_C) || !defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES) ) +#error "MBEDTLS_TEST_NULL_ENTROPY defined, but not all prerequisites" +#endif +#if defined(MBEDTLS_TEST_NULL_ENTROPY) && \ + ( defined(MBEDTLS_ENTROPY_NV_SEED) || defined(MBEDTLS_ENTROPY_HARDWARE_ALT) || \ + defined(MBEDTLS_HAVEGE_C) ) +#error "MBEDTLS_TEST_NULL_ENTROPY defined, but entropy sources too" +#endif + +#if defined(MBEDTLS_GCM_C) && ( \ + !defined(MBEDTLS_AES_C) && !defined(MBEDTLS_CAMELLIA_C) ) +#error "MBEDTLS_GCM_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_HAVEGE_C) && !defined(MBEDTLS_TIMING_C) +#error "MBEDTLS_HAVEGE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_HMAC_DRBG_C) && !defined(MBEDTLS_MD_C) +#error "MBEDTLS_HMAC_DRBG_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) && \ + ( !defined(MBEDTLS_ECDH_C) || !defined(MBEDTLS_X509_CRT_PARSE_C) ) +#error "MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) && \ + ( !defined(MBEDTLS_ECDH_C) || !defined(MBEDTLS_X509_CRT_PARSE_C) ) +#error "MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) && !defined(MBEDTLS_DHM_C) +#error "MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) && \ + !defined(MBEDTLS_ECDH_C) +#error "MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) && \ + ( !defined(MBEDTLS_DHM_C) || !defined(MBEDTLS_RSA_C) || \ + !defined(MBEDTLS_X509_CRT_PARSE_C) || !defined(MBEDTLS_PKCS1_V15) ) +#error "MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) && \ + ( !defined(MBEDTLS_ECDH_C) || !defined(MBEDTLS_RSA_C) || \ + !defined(MBEDTLS_X509_CRT_PARSE_C) || !defined(MBEDTLS_PKCS1_V15) ) +#error "MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) && \ + ( !defined(MBEDTLS_ECDH_C) || !defined(MBEDTLS_ECDSA_C) || \ + !defined(MBEDTLS_X509_CRT_PARSE_C) ) +#error "MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) && \ + ( !defined(MBEDTLS_RSA_C) || !defined(MBEDTLS_X509_CRT_PARSE_C) || \ + !defined(MBEDTLS_PKCS1_V15) ) +#error "MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \ + ( !defined(MBEDTLS_RSA_C) || !defined(MBEDTLS_X509_CRT_PARSE_C) || \ + !defined(MBEDTLS_PKCS1_V15) ) +#error "MBEDTLS_KEY_EXCHANGE_RSA_ENABLED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) && \ + ( !defined(MBEDTLS_ECJPAKE_C) || !defined(MBEDTLS_SHA256_C) || \ + !defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) ) +#error "MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) && \ + ( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_PLATFORM_MEMORY) ) +#error "MBEDTLS_MEMORY_BUFFER_ALLOC_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PADLOCK_C) && !defined(MBEDTLS_HAVE_ASM) +#error "MBEDTLS_PADLOCK_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PEM_PARSE_C) && !defined(MBEDTLS_BASE64_C) +#error "MBEDTLS_PEM_PARSE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PEM_WRITE_C) && !defined(MBEDTLS_BASE64_C) +#error "MBEDTLS_PEM_WRITE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PK_C) && \ + ( !defined(MBEDTLS_RSA_C) && !defined(MBEDTLS_ECP_C) ) +#error "MBEDTLS_PK_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PK_PARSE_C) && !defined(MBEDTLS_PK_C) +#error "MBEDTLS_PK_PARSE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PK_WRITE_C) && !defined(MBEDTLS_PK_C) +#error "MBEDTLS_PK_WRITE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PKCS11_C) && !defined(MBEDTLS_PK_C) +#error "MBEDTLS_PKCS11_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_EXIT_ALT) && !defined(MBEDTLS_PLATFORM_C) +#error "MBEDTLS_PLATFORM_EXIT_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_EXIT_MACRO) && !defined(MBEDTLS_PLATFORM_C) +#error "MBEDTLS_PLATFORM_EXIT_MACRO defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_EXIT_MACRO) &&\ + ( defined(MBEDTLS_PLATFORM_STD_EXIT) ||\ + defined(MBEDTLS_PLATFORM_EXIT_ALT) ) +#error "MBEDTLS_PLATFORM_EXIT_MACRO and MBEDTLS_PLATFORM_STD_EXIT/MBEDTLS_PLATFORM_EXIT_ALT cannot be defined simultaneously" +#endif + +#if defined(MBEDTLS_PLATFORM_FPRINTF_ALT) && !defined(MBEDTLS_PLATFORM_C) +#error "MBEDTLS_PLATFORM_FPRINTF_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_FPRINTF_MACRO) && !defined(MBEDTLS_PLATFORM_C) +#error "MBEDTLS_PLATFORM_FPRINTF_MACRO defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_FPRINTF_MACRO) &&\ + ( defined(MBEDTLS_PLATFORM_STD_FPRINTF) ||\ + defined(MBEDTLS_PLATFORM_FPRINTF_ALT) ) +#error "MBEDTLS_PLATFORM_FPRINTF_MACRO and MBEDTLS_PLATFORM_STD_FPRINTF/MBEDTLS_PLATFORM_FPRINTF_ALT cannot be defined simultaneously" +#endif + +#if defined(MBEDTLS_PLATFORM_FREE_MACRO) &&\ + ( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_PLATFORM_MEMORY) ) +#error "MBEDTLS_PLATFORM_FREE_MACRO defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_FREE_MACRO) &&\ + defined(MBEDTLS_PLATFORM_STD_FREE) +#error "MBEDTLS_PLATFORM_FREE_MACRO and MBEDTLS_PLATFORM_STD_FREE cannot be defined simultaneously" +#endif + +#if defined(MBEDTLS_PLATFORM_FREE_MACRO) && !defined(MBEDTLS_PLATFORM_CALLOC_MACRO) +#error "MBEDTLS_PLATFORM_CALLOC_MACRO must be defined if MBEDTLS_PLATFORM_FREE_MACRO is" +#endif + +#if defined(MBEDTLS_PLATFORM_CALLOC_MACRO) &&\ + ( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_PLATFORM_MEMORY) ) +#error "MBEDTLS_PLATFORM_CALLOC_MACRO defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_CALLOC_MACRO) &&\ + defined(MBEDTLS_PLATFORM_STD_CALLOC) +#error "MBEDTLS_PLATFORM_CALLOC_MACRO and MBEDTLS_PLATFORM_STD_CALLOC cannot be defined simultaneously" +#endif + +#if defined(MBEDTLS_PLATFORM_CALLOC_MACRO) && !defined(MBEDTLS_PLATFORM_FREE_MACRO) +#error "MBEDTLS_PLATFORM_FREE_MACRO must be defined if MBEDTLS_PLATFORM_CALLOC_MACRO is" +#endif + +#if defined(MBEDTLS_PLATFORM_MEMORY) && !defined(MBEDTLS_PLATFORM_C) +#error "MBEDTLS_PLATFORM_MEMORY defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_PRINTF_ALT) && !defined(MBEDTLS_PLATFORM_C) +#error "MBEDTLS_PLATFORM_PRINTF_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_PRINTF_MACRO) && !defined(MBEDTLS_PLATFORM_C) +#error "MBEDTLS_PLATFORM_PRINTF_MACRO defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_PRINTF_MACRO) &&\ + ( defined(MBEDTLS_PLATFORM_STD_PRINTF) ||\ + defined(MBEDTLS_PLATFORM_PRINTF_ALT) ) +#error "MBEDTLS_PLATFORM_PRINTF_MACRO and MBEDTLS_PLATFORM_STD_PRINTF/MBEDTLS_PLATFORM_PRINTF_ALT cannot be defined simultaneously" +#endif + +#if defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) && !defined(MBEDTLS_PLATFORM_C) +#error "MBEDTLS_PLATFORM_SNPRINTF_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO) && !defined(MBEDTLS_PLATFORM_C) +#error "MBEDTLS_PLATFORM_SNPRINTF_MACRO defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO) &&\ + ( defined(MBEDTLS_PLATFORM_STD_SNPRINTF) ||\ + defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) ) +#error "MBEDTLS_PLATFORM_SNPRINTF_MACRO and MBEDTLS_PLATFORM_STD_SNPRINTF/MBEDTLS_PLATFORM_SNPRINTF_ALT cannot be defined simultaneously" +#endif + +#if defined(MBEDTLS_PLATFORM_STD_MEM_HDR) &&\ + !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) +#error "MBEDTLS_PLATFORM_STD_MEM_HDR defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_STD_CALLOC) && !defined(MBEDTLS_PLATFORM_MEMORY) +#error "MBEDTLS_PLATFORM_STD_CALLOC defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_STD_CALLOC) && !defined(MBEDTLS_PLATFORM_MEMORY) +#error "MBEDTLS_PLATFORM_STD_CALLOC defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_STD_FREE) && !defined(MBEDTLS_PLATFORM_MEMORY) +#error "MBEDTLS_PLATFORM_STD_FREE defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_STD_EXIT) &&\ + !defined(MBEDTLS_PLATFORM_EXIT_ALT) +#error "MBEDTLS_PLATFORM_STD_EXIT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_STD_FPRINTF) &&\ + !defined(MBEDTLS_PLATFORM_FPRINTF_ALT) +#error "MBEDTLS_PLATFORM_STD_FPRINTF defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_STD_PRINTF) &&\ + !defined(MBEDTLS_PLATFORM_PRINTF_ALT) +#error "MBEDTLS_PLATFORM_STD_PRINTF defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_STD_SNPRINTF) &&\ + !defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) +#error "MBEDTLS_PLATFORM_STD_SNPRINTF defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ENTROPY_NV_SEED) &&\ + ( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_ENTROPY_C) ) +#error "MBEDTLS_ENTROPY_NV_SEED defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT) &&\ + !defined(MBEDTLS_ENTROPY_NV_SEED) +#error "MBEDTLS_PLATFORM_NV_SEED_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ) &&\ + !defined(MBEDTLS_PLATFORM_NV_SEED_ALT) +#error "MBEDTLS_PLATFORM_STD_NV_SEED_READ defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE) &&\ + !defined(MBEDTLS_PLATFORM_NV_SEED_ALT) +#error "MBEDTLS_PLATFORM_STD_NV_SEED_WRITE defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_NV_SEED_READ_MACRO) &&\ + ( defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ) ||\ + defined(MBEDTLS_PLATFORM_NV_SEED_ALT) ) +#error "MBEDTLS_PLATFORM_NV_SEED_READ_MACRO and MBEDTLS_PLATFORM_STD_NV_SEED_READ cannot be defined simultaneously" +#endif + +#if defined(MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO) &&\ + ( defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE) ||\ + defined(MBEDTLS_PLATFORM_NV_SEED_ALT) ) +#error "MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO and MBEDTLS_PLATFORM_STD_NV_SEED_WRITE cannot be defined simultaneously" +#endif + +#if defined(MBEDTLS_RSA_C) && ( !defined(MBEDTLS_BIGNUM_C) || \ + !defined(MBEDTLS_OID_C) ) +#error "MBEDTLS_RSA_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_RSA_C) && ( !defined(MBEDTLS_PKCS1_V21) && \ + !defined(MBEDTLS_PKCS1_V15) ) +#error "MBEDTLS_RSA_C defined, but none of the PKCS1 versions enabled" +#endif + +#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) && \ + ( !defined(MBEDTLS_RSA_C) || !defined(MBEDTLS_PKCS1_V21) ) +#error "MBEDTLS_X509_RSASSA_PSS_SUPPORT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_PROTO_SSL3) && ( !defined(MBEDTLS_MD5_C) || \ + !defined(MBEDTLS_SHA1_C) ) +#error "MBEDTLS_SSL_PROTO_SSL3 defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_PROTO_TLS1) && ( !defined(MBEDTLS_MD5_C) || \ + !defined(MBEDTLS_SHA1_C) ) +#error "MBEDTLS_SSL_PROTO_TLS1 defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_PROTO_TLS1_1) && ( !defined(MBEDTLS_MD5_C) || \ + !defined(MBEDTLS_SHA1_C) ) +#error "MBEDTLS_SSL_PROTO_TLS1_1 defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) && ( !defined(MBEDTLS_SHA1_C) && \ + !defined(MBEDTLS_SHA256_C) && !defined(MBEDTLS_SHA512_C) ) +#error "MBEDTLS_SSL_PROTO_TLS1_2 defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_PROTO_DTLS) && \ + !defined(MBEDTLS_SSL_PROTO_TLS1_1) && \ + !defined(MBEDTLS_SSL_PROTO_TLS1_2) +#error "MBEDTLS_SSL_PROTO_DTLS defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_CLI_C) && !defined(MBEDTLS_SSL_TLS_C) +#error "MBEDTLS_SSL_CLI_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_TLS_C) && ( !defined(MBEDTLS_CIPHER_C) || \ + !defined(MBEDTLS_MD_C) ) +#error "MBEDTLS_SSL_TLS_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_SRV_C) && !defined(MBEDTLS_SSL_TLS_C) +#error "MBEDTLS_SSL_SRV_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_TLS_C) && (!defined(MBEDTLS_SSL_PROTO_SSL3) && \ + !defined(MBEDTLS_SSL_PROTO_TLS1) && !defined(MBEDTLS_SSL_PROTO_TLS1_1) && \ + !defined(MBEDTLS_SSL_PROTO_TLS1_2)) +#error "MBEDTLS_SSL_TLS_C defined, but no protocols are active" +#endif + +#if defined(MBEDTLS_SSL_TLS_C) && (defined(MBEDTLS_SSL_PROTO_SSL3) && \ + defined(MBEDTLS_SSL_PROTO_TLS1_1) && !defined(MBEDTLS_SSL_PROTO_TLS1)) +#error "Illegal protocol selection" +#endif + +#if defined(MBEDTLS_SSL_TLS_C) && (defined(MBEDTLS_SSL_PROTO_TLS1) && \ + defined(MBEDTLS_SSL_PROTO_TLS1_2) && !defined(MBEDTLS_SSL_PROTO_TLS1_1)) +#error "Illegal protocol selection" +#endif + +#if defined(MBEDTLS_SSL_TLS_C) && (defined(MBEDTLS_SSL_PROTO_SSL3) && \ + defined(MBEDTLS_SSL_PROTO_TLS1_2) && (!defined(MBEDTLS_SSL_PROTO_TLS1) || \ + !defined(MBEDTLS_SSL_PROTO_TLS1_1))) +#error "Illegal protocol selection" +#endif + +#if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && !defined(MBEDTLS_SSL_PROTO_DTLS) +#error "MBEDTLS_SSL_DTLS_HELLO_VERIFY defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE) && \ + !defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) +#error "MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) && \ + ( !defined(MBEDTLS_SSL_TLS_C) || !defined(MBEDTLS_SSL_PROTO_DTLS) ) +#error "MBEDTLS_SSL_DTLS_ANTI_REPLAY defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) && \ + ( !defined(MBEDTLS_SSL_TLS_C) || !defined(MBEDTLS_SSL_PROTO_DTLS) ) +#error "MBEDTLS_SSL_DTLS_BADMAC_LIMIT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) && \ + !defined(MBEDTLS_SSL_PROTO_TLS1) && \ + !defined(MBEDTLS_SSL_PROTO_TLS1_1) && \ + !defined(MBEDTLS_SSL_PROTO_TLS1_2) +#error "MBEDTLS_SSL_ENCRYPT_THEN_MAC defined, but not all prerequsites" +#endif + +#if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) && \ + !defined(MBEDTLS_SSL_PROTO_TLS1) && \ + !defined(MBEDTLS_SSL_PROTO_TLS1_1) && \ + !defined(MBEDTLS_SSL_PROTO_TLS1_2) +#error "MBEDTLS_SSL_EXTENDED_MASTER_SECRET defined, but not all prerequsites" +#endif + +#if defined(MBEDTLS_SSL_TICKET_C) && !defined(MBEDTLS_CIPHER_C) +#error "MBEDTLS_SSL_TICKET_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) && \ + !defined(MBEDTLS_SSL_PROTO_SSL3) && !defined(MBEDTLS_SSL_PROTO_TLS1) +#error "MBEDTLS_SSL_CBC_RECORD_SPLITTING defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) && \ + !defined(MBEDTLS_X509_CRT_PARSE_C) +#error "MBEDTLS_SSL_SERVER_NAME_INDICATION defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_THREADING_PTHREAD) +#if !defined(MBEDTLS_THREADING_C) || defined(MBEDTLS_THREADING_IMPL) +#error "MBEDTLS_THREADING_PTHREAD defined, but not all prerequisites" +#endif +#define MBEDTLS_THREADING_IMPL +#endif + +#if defined(MBEDTLS_THREADING_ALT) +#if !defined(MBEDTLS_THREADING_C) || defined(MBEDTLS_THREADING_IMPL) +#error "MBEDTLS_THREADING_ALT defined, but not all prerequisites" +#endif +#define MBEDTLS_THREADING_IMPL +#endif + +#if defined(MBEDTLS_THREADING_C) && !defined(MBEDTLS_THREADING_IMPL) +#error "MBEDTLS_THREADING_C defined, single threading implementation required" +#endif +#undef MBEDTLS_THREADING_IMPL + +#if defined(MBEDTLS_VERSION_FEATURES) && !defined(MBEDTLS_VERSION_C) +#error "MBEDTLS_VERSION_FEATURES defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_X509_USE_C) && ( !defined(MBEDTLS_BIGNUM_C) || \ + !defined(MBEDTLS_OID_C) || !defined(MBEDTLS_ASN1_PARSE_C) || \ + !defined(MBEDTLS_PK_PARSE_C) ) +#error "MBEDTLS_X509_USE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_X509_CREATE_C) && ( !defined(MBEDTLS_BIGNUM_C) || \ + !defined(MBEDTLS_OID_C) || !defined(MBEDTLS_ASN1_WRITE_C) || \ + !defined(MBEDTLS_PK_WRITE_C) ) +#error "MBEDTLS_X509_CREATE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_X509_CRT_PARSE_C) && ( !defined(MBEDTLS_X509_USE_C) ) +#error "MBEDTLS_X509_CRT_PARSE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_X509_CRL_PARSE_C) && ( !defined(MBEDTLS_X509_USE_C) ) +#error "MBEDTLS_X509_CRL_PARSE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_X509_CSR_PARSE_C) && ( !defined(MBEDTLS_X509_USE_C) ) +#error "MBEDTLS_X509_CSR_PARSE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_X509_CRT_WRITE_C) && ( !defined(MBEDTLS_X509_CREATE_C) ) +#error "MBEDTLS_X509_CRT_WRITE_C defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_X509_CSR_WRITE_C) && ( !defined(MBEDTLS_X509_CREATE_C) ) +#error "MBEDTLS_X509_CSR_WRITE_C defined, but not all prerequisites" +#endif + +/* + * Avoid warning from -pedantic. This is a convenient place for this + * workaround since this is included by every single file before the + * #if defined(MBEDTLS_xxx_C) that results in emtpy translation units. + */ +typedef int mbedtls_iso_c_forbids_empty_translation_units; + +#endif /* MBEDTLS_CHECK_CONFIG_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/cipher.h b/tools/sdk/include/mbedtls/mbedtls/cipher.h new file mode 100644 index 00000000..c9675544 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/cipher.h @@ -0,0 +1,699 @@ +/** + * \file cipher.h + * + * \brief Generic cipher wrapper. + * + * \author Adriaan de Jong + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +#ifndef MBEDTLS_CIPHER_H +#define MBEDTLS_CIPHER_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CCM_C) +#define MBEDTLS_CIPHER_MODE_AEAD +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +#define MBEDTLS_CIPHER_MODE_WITH_PADDING +#endif + +#if defined(MBEDTLS_ARC4_C) +#define MBEDTLS_CIPHER_MODE_STREAM +#endif + +#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ + !defined(inline) && !defined(__cplusplus) +#define inline __inline +#endif + +#define MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE -0x6080 /**< The selected feature is not available. */ +#define MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA -0x6100 /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_CIPHER_ALLOC_FAILED -0x6180 /**< Failed to allocate memory. */ +#define MBEDTLS_ERR_CIPHER_INVALID_PADDING -0x6200 /**< Input data contains invalid padding and is rejected. */ +#define MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED -0x6280 /**< Decryption of block requires a full block. */ +#define MBEDTLS_ERR_CIPHER_AUTH_FAILED -0x6300 /**< Authentication failed (for AEAD modes). */ +#define MBEDTLS_ERR_CIPHER_INVALID_CONTEXT -0x6380 /**< The context is invalid, eg because it was free()ed. */ + +#define MBEDTLS_CIPHER_VARIABLE_IV_LEN 0x01 /**< Cipher accepts IVs of variable length */ +#define MBEDTLS_CIPHER_VARIABLE_KEY_LEN 0x02 /**< Cipher accepts keys of variable length */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + MBEDTLS_CIPHER_ID_NONE = 0, + MBEDTLS_CIPHER_ID_NULL, + MBEDTLS_CIPHER_ID_AES, + MBEDTLS_CIPHER_ID_DES, + MBEDTLS_CIPHER_ID_3DES, + MBEDTLS_CIPHER_ID_CAMELLIA, + MBEDTLS_CIPHER_ID_BLOWFISH, + MBEDTLS_CIPHER_ID_ARC4, +} mbedtls_cipher_id_t; + +typedef enum { + MBEDTLS_CIPHER_NONE = 0, + MBEDTLS_CIPHER_NULL, + MBEDTLS_CIPHER_AES_128_ECB, + MBEDTLS_CIPHER_AES_192_ECB, + MBEDTLS_CIPHER_AES_256_ECB, + MBEDTLS_CIPHER_AES_128_CBC, + MBEDTLS_CIPHER_AES_192_CBC, + MBEDTLS_CIPHER_AES_256_CBC, + MBEDTLS_CIPHER_AES_128_CFB128, + MBEDTLS_CIPHER_AES_192_CFB128, + MBEDTLS_CIPHER_AES_256_CFB128, + MBEDTLS_CIPHER_AES_128_CTR, + MBEDTLS_CIPHER_AES_192_CTR, + MBEDTLS_CIPHER_AES_256_CTR, + MBEDTLS_CIPHER_AES_128_GCM, + MBEDTLS_CIPHER_AES_192_GCM, + MBEDTLS_CIPHER_AES_256_GCM, + MBEDTLS_CIPHER_CAMELLIA_128_ECB, + MBEDTLS_CIPHER_CAMELLIA_192_ECB, + MBEDTLS_CIPHER_CAMELLIA_256_ECB, + MBEDTLS_CIPHER_CAMELLIA_128_CBC, + MBEDTLS_CIPHER_CAMELLIA_192_CBC, + MBEDTLS_CIPHER_CAMELLIA_256_CBC, + MBEDTLS_CIPHER_CAMELLIA_128_CFB128, + MBEDTLS_CIPHER_CAMELLIA_192_CFB128, + MBEDTLS_CIPHER_CAMELLIA_256_CFB128, + MBEDTLS_CIPHER_CAMELLIA_128_CTR, + MBEDTLS_CIPHER_CAMELLIA_192_CTR, + MBEDTLS_CIPHER_CAMELLIA_256_CTR, + MBEDTLS_CIPHER_CAMELLIA_128_GCM, + MBEDTLS_CIPHER_CAMELLIA_192_GCM, + MBEDTLS_CIPHER_CAMELLIA_256_GCM, + MBEDTLS_CIPHER_DES_ECB, + MBEDTLS_CIPHER_DES_CBC, + MBEDTLS_CIPHER_DES_EDE_ECB, + MBEDTLS_CIPHER_DES_EDE_CBC, + MBEDTLS_CIPHER_DES_EDE3_ECB, + MBEDTLS_CIPHER_DES_EDE3_CBC, + MBEDTLS_CIPHER_BLOWFISH_ECB, + MBEDTLS_CIPHER_BLOWFISH_CBC, + MBEDTLS_CIPHER_BLOWFISH_CFB64, + MBEDTLS_CIPHER_BLOWFISH_CTR, + MBEDTLS_CIPHER_ARC4_128, + MBEDTLS_CIPHER_AES_128_CCM, + MBEDTLS_CIPHER_AES_192_CCM, + MBEDTLS_CIPHER_AES_256_CCM, + MBEDTLS_CIPHER_CAMELLIA_128_CCM, + MBEDTLS_CIPHER_CAMELLIA_192_CCM, + MBEDTLS_CIPHER_CAMELLIA_256_CCM, +} mbedtls_cipher_type_t; + +typedef enum { + MBEDTLS_MODE_NONE = 0, + MBEDTLS_MODE_ECB, + MBEDTLS_MODE_CBC, + MBEDTLS_MODE_CFB, + MBEDTLS_MODE_OFB, /* Unused! */ + MBEDTLS_MODE_CTR, + MBEDTLS_MODE_GCM, + MBEDTLS_MODE_STREAM, + MBEDTLS_MODE_CCM, +} mbedtls_cipher_mode_t; + +typedef enum { + MBEDTLS_PADDING_PKCS7 = 0, /**< PKCS7 padding (default) */ + MBEDTLS_PADDING_ONE_AND_ZEROS, /**< ISO/IEC 7816-4 padding */ + MBEDTLS_PADDING_ZEROS_AND_LEN, /**< ANSI X.923 padding */ + MBEDTLS_PADDING_ZEROS, /**< zero padding (not reversible!) */ + MBEDTLS_PADDING_NONE, /**< never pad (full blocks only) */ +} mbedtls_cipher_padding_t; + +typedef enum { + MBEDTLS_OPERATION_NONE = -1, + MBEDTLS_DECRYPT = 0, + MBEDTLS_ENCRYPT, +} mbedtls_operation_t; + +enum { + /** Undefined key length */ + MBEDTLS_KEY_LENGTH_NONE = 0, + /** Key length, in bits (including parity), for DES keys */ + MBEDTLS_KEY_LENGTH_DES = 64, + /** Key length, in bits (including parity), for DES in two key EDE */ + MBEDTLS_KEY_LENGTH_DES_EDE = 128, + /** Key length, in bits (including parity), for DES in three-key EDE */ + MBEDTLS_KEY_LENGTH_DES_EDE3 = 192, +}; + +/** Maximum length of any IV, in bytes */ +#define MBEDTLS_MAX_IV_LENGTH 16 +/** Maximum block size of any cipher, in bytes */ +#define MBEDTLS_MAX_BLOCK_LENGTH 16 + +/** + * Base cipher information (opaque struct). + */ +typedef struct mbedtls_cipher_base_t mbedtls_cipher_base_t; + +/** + * Cipher information. Allows cipher functions to be called in a generic way. + */ +typedef struct { + /** Full cipher identifier (e.g. MBEDTLS_CIPHER_AES_256_CBC) */ + mbedtls_cipher_type_t type; + + /** Cipher mode (e.g. MBEDTLS_MODE_CBC) */ + mbedtls_cipher_mode_t mode; + + /** Cipher key length, in bits (default length for variable sized ciphers) + * (Includes parity bits for ciphers like DES) */ + unsigned int key_bitlen; + + /** Name of the cipher */ + const char * name; + + /** IV/NONCE size, in bytes. + * For cipher that accept many sizes: recommended size */ + unsigned int iv_size; + + /** Flags for variable IV size, variable key size, etc. */ + int flags; + + /** block size, in bytes */ + unsigned int block_size; + + /** Base cipher information and functions */ + const mbedtls_cipher_base_t *base; + +} mbedtls_cipher_info_t; + +/** + * Generic cipher context. + */ +typedef struct { + /** Information about the associated cipher */ + const mbedtls_cipher_info_t *cipher_info; + + /** Key length to use */ + int key_bitlen; + + /** Operation that the context's key has been initialised for */ + mbedtls_operation_t operation; + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /** Padding functions to use, if relevant for cipher mode */ + void (*add_padding)( unsigned char *output, size_t olen, size_t data_len ); + int (*get_padding)( unsigned char *input, size_t ilen, size_t *data_len ); +#endif + + /** Buffer for data that hasn't been encrypted yet */ + unsigned char unprocessed_data[MBEDTLS_MAX_BLOCK_LENGTH]; + + /** Number of bytes that still need processing */ + size_t unprocessed_len; + + /** Current IV or NONCE_COUNTER for CTR-mode */ + unsigned char iv[MBEDTLS_MAX_IV_LENGTH]; + + /** IV size in bytes (for ciphers with variable-length IVs) */ + size_t iv_size; + + /** Cipher-specific context */ + void *cipher_ctx; +} mbedtls_cipher_context_t; + +/** + * \brief Returns the list of ciphers supported by the generic cipher module. + * + * \return a statically allocated array of ciphers, the last entry + * is 0. + */ +const int *mbedtls_cipher_list( void ); + +/** + * \brief Returns the cipher information structure associated + * with the given cipher name. + * + * \param cipher_name Name of the cipher to search for. + * + * \return the cipher information structure associated with the + * given cipher_name, or NULL if not found. + */ +const mbedtls_cipher_info_t *mbedtls_cipher_info_from_string( const char *cipher_name ); + +/** + * \brief Returns the cipher information structure associated + * with the given cipher type. + * + * \param cipher_type Type of the cipher to search for. + * + * \return the cipher information structure associated with the + * given cipher_type, or NULL if not found. + */ +const mbedtls_cipher_info_t *mbedtls_cipher_info_from_type( const mbedtls_cipher_type_t cipher_type ); + +/** + * \brief Returns the cipher information structure associated + * with the given cipher id, key size and mode. + * + * \param cipher_id Id of the cipher to search for + * (e.g. MBEDTLS_CIPHER_ID_AES) + * \param key_bitlen Length of the key in bits + * \param mode Cipher mode (e.g. MBEDTLS_MODE_CBC) + * + * \return the cipher information structure associated with the + * given cipher_type, or NULL if not found. + */ +const mbedtls_cipher_info_t *mbedtls_cipher_info_from_values( const mbedtls_cipher_id_t cipher_id, + int key_bitlen, + const mbedtls_cipher_mode_t mode ); + +/** + * \brief Initialize a cipher_context (as NONE) + */ +void mbedtls_cipher_init( mbedtls_cipher_context_t *ctx ); + +/** + * \brief Free and clear the cipher-specific context of ctx. + * Freeing ctx itself remains the responsibility of the + * caller. + */ +void mbedtls_cipher_free( mbedtls_cipher_context_t *ctx ); + +/** + * \brief Initialises and fills the cipher context structure with + * the appropriate values. + * + * \note Currently also clears structure. In future versions you + * will be required to call mbedtls_cipher_init() on the structure + * first. + * + * \param ctx context to initialise. May not be NULL. + * \param cipher_info cipher to use. + * + * \return 0 on success, + * MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on parameter failure, + * MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the + * cipher-specific context failed. + */ +int mbedtls_cipher_setup( mbedtls_cipher_context_t *ctx, const mbedtls_cipher_info_t *cipher_info ); + +/** + * \brief Returns the block size of the given cipher. + * + * \param ctx cipher's context. Must have been initialised. + * + * \return size of the cipher's blocks, or 0 if ctx has not been + * initialised. + */ +static inline unsigned int mbedtls_cipher_get_block_size( const mbedtls_cipher_context_t *ctx ) +{ + if( NULL == ctx || NULL == ctx->cipher_info ) + return 0; + + return ctx->cipher_info->block_size; +} + +/** + * \brief Returns the mode of operation for the cipher. + * (e.g. MBEDTLS_MODE_CBC) + * + * \param ctx cipher's context. Must have been initialised. + * + * \return mode of operation, or MBEDTLS_MODE_NONE if ctx + * has not been initialised. + */ +static inline mbedtls_cipher_mode_t mbedtls_cipher_get_cipher_mode( const mbedtls_cipher_context_t *ctx ) +{ + if( NULL == ctx || NULL == ctx->cipher_info ) + return MBEDTLS_MODE_NONE; + + return ctx->cipher_info->mode; +} + +/** + * \brief Returns the size of the cipher's IV/NONCE in bytes. + * + * \param ctx cipher's context. Must have been initialised. + * + * \return If IV has not been set yet: (recommended) IV size + * (0 for ciphers not using IV/NONCE). + * If IV has already been set: actual size. + */ +static inline int mbedtls_cipher_get_iv_size( const mbedtls_cipher_context_t *ctx ) +{ + if( NULL == ctx || NULL == ctx->cipher_info ) + return 0; + + if( ctx->iv_size != 0 ) + return (int) ctx->iv_size; + + return (int) ctx->cipher_info->iv_size; +} + +/** + * \brief Returns the type of the given cipher. + * + * \param ctx cipher's context. Must have been initialised. + * + * \return type of the cipher, or MBEDTLS_CIPHER_NONE if ctx has + * not been initialised. + */ +static inline mbedtls_cipher_type_t mbedtls_cipher_get_type( const mbedtls_cipher_context_t *ctx ) +{ + if( NULL == ctx || NULL == ctx->cipher_info ) + return MBEDTLS_CIPHER_NONE; + + return ctx->cipher_info->type; +} + +/** + * \brief Returns the name of the given cipher, as a string. + * + * \param ctx cipher's context. Must have been initialised. + * + * \return name of the cipher, or NULL if ctx was not initialised. + */ +static inline const char *mbedtls_cipher_get_name( const mbedtls_cipher_context_t *ctx ) +{ + if( NULL == ctx || NULL == ctx->cipher_info ) + return 0; + + return ctx->cipher_info->name; +} + +/** + * \brief Returns the key length of the cipher. + * + * \param ctx cipher's context. Must have been initialised. + * + * \return cipher's key length, in bits, or + * MBEDTLS_KEY_LENGTH_NONE if ctx has not been + * initialised. + */ +static inline int mbedtls_cipher_get_key_bitlen( const mbedtls_cipher_context_t *ctx ) +{ + if( NULL == ctx || NULL == ctx->cipher_info ) + return MBEDTLS_KEY_LENGTH_NONE; + + return (int) ctx->cipher_info->key_bitlen; +} + +/** + * \brief Returns the operation of the given cipher. + * + * \param ctx cipher's context. Must have been initialised. + * + * \return operation (MBEDTLS_ENCRYPT or MBEDTLS_DECRYPT), + * or MBEDTLS_OPERATION_NONE if ctx has not been + * initialised. + */ +static inline mbedtls_operation_t mbedtls_cipher_get_operation( const mbedtls_cipher_context_t *ctx ) +{ + if( NULL == ctx || NULL == ctx->cipher_info ) + return MBEDTLS_OPERATION_NONE; + + return ctx->operation; +} + +/** + * \brief Set the key to use with the given context. + * + * \param ctx generic cipher context. May not be NULL. Must have been + * initialised using cipher_context_from_type or + * cipher_context_from_string. + * \param key The key to use. + * \param key_bitlen key length to use, in bits. + * \param operation Operation that the key will be used for, either + * MBEDTLS_ENCRYPT or MBEDTLS_DECRYPT. + * + * \returns 0 on success, MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if + * parameter verification fails or a cipher specific + * error code. + */ +int mbedtls_cipher_setkey( mbedtls_cipher_context_t *ctx, const unsigned char *key, + int key_bitlen, const mbedtls_operation_t operation ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +/** + * \brief Set padding mode, for cipher modes that use padding. + * (Default: PKCS7 padding.) + * + * \param ctx generic cipher context + * \param mode padding mode + * + * \returns 0 on success, MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE + * if selected padding mode is not supported, or + * MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if the cipher mode + * does not support padding. + */ +int mbedtls_cipher_set_padding_mode( mbedtls_cipher_context_t *ctx, mbedtls_cipher_padding_t mode ); +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + +/** + * \brief Set the initialization vector (IV) or nonce + * + * \param ctx generic cipher context + * \param iv IV to use (or NONCE_COUNTER for CTR-mode ciphers) + * \param iv_len IV length for ciphers with variable-size IV; + * discarded by ciphers with fixed-size IV. + * + * \returns 0 on success, or MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA + * + * \note Some ciphers don't use IVs nor NONCE. For these + * ciphers, this function has no effect. + */ +int mbedtls_cipher_set_iv( mbedtls_cipher_context_t *ctx, + const unsigned char *iv, size_t iv_len ); + +/** + * \brief Finish preparation of the given context + * + * \param ctx generic cipher context + * + * \returns 0 on success, MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA + * if parameter verification fails. + */ +int mbedtls_cipher_reset( mbedtls_cipher_context_t *ctx ); + +#if defined(MBEDTLS_GCM_C) +/** + * \brief Add additional data (for AEAD ciphers). + * Currently only supported with GCM. + * Must be called exactly once, after mbedtls_cipher_reset(). + * + * \param ctx generic cipher context + * \param ad Additional data to use. + * \param ad_len Length of ad. + * + * \return 0 on success, or a specific error code. + */ +int mbedtls_cipher_update_ad( mbedtls_cipher_context_t *ctx, + const unsigned char *ad, size_t ad_len ); +#endif /* MBEDTLS_GCM_C */ + +/** + * \brief Generic cipher update function. Encrypts/decrypts + * using the given cipher context. Writes as many block + * size'd blocks of data as possible to output. Any data + * that cannot be written immediately will either be added + * to the next block, or flushed when cipher_final is + * called. + * Exception: for MBEDTLS_MODE_ECB, expects single block + * in size (e.g. 16 bytes for AES) + * + * \param ctx generic cipher context + * \param input buffer holding the input data + * \param ilen length of the input data + * \param output buffer for the output data. Should be able to hold at + * least ilen + block_size. Cannot be the same buffer as + * input! + * \param olen length of the output data, will be filled with the + * actual number of bytes written. + * + * \returns 0 on success, MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if + * parameter verification fails, + * MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE on an + * unsupported mode for a cipher or a cipher specific + * error code. + * + * \note If the underlying cipher is GCM, all calls to this + * function, except the last one before mbedtls_cipher_finish(), + * must have ilen a multiple of the block size. + */ +int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *input, + size_t ilen, unsigned char *output, size_t *olen ); + +/** + * \brief Generic cipher finalisation function. If data still + * needs to be flushed from an incomplete block, data + * contained within it will be padded with the size of + * the last block, and written to the output buffer. + * + * \param ctx Generic cipher context + * \param output buffer to write data to. Needs block_size available. + * \param olen length of the data written to the output buffer. + * + * \returns 0 on success, MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if + * parameter verification fails, + * MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED if decryption + * expected a full block but was not provided one, + * MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding + * while decrypting or a cipher specific error code. + */ +int mbedtls_cipher_finish( mbedtls_cipher_context_t *ctx, + unsigned char *output, size_t *olen ); + +#if defined(MBEDTLS_GCM_C) +/** + * \brief Write tag for AEAD ciphers. + * Currently only supported with GCM. + * Must be called after mbedtls_cipher_finish(). + * + * \param ctx Generic cipher context + * \param tag buffer to write the tag + * \param tag_len Length of the tag to write + * + * \return 0 on success, or a specific error code. + */ +int mbedtls_cipher_write_tag( mbedtls_cipher_context_t *ctx, + unsigned char *tag, size_t tag_len ); + +/** + * \brief Check tag for AEAD ciphers. + * Currently only supported with GCM. + * Must be called after mbedtls_cipher_finish(). + * + * \param ctx Generic cipher context + * \param tag Buffer holding the tag + * \param tag_len Length of the tag to check + * + * \return 0 on success, or a specific error code. + */ +int mbedtls_cipher_check_tag( mbedtls_cipher_context_t *ctx, + const unsigned char *tag, size_t tag_len ); +#endif /* MBEDTLS_GCM_C */ + +/** + * \brief Generic all-in-one encryption/decryption + * (for all ciphers except AEAD constructs). + * + * \param ctx generic cipher context + * \param iv IV to use (or NONCE_COUNTER for CTR-mode ciphers) + * \param iv_len IV length for ciphers with variable-size IV; + * discarded by ciphers with fixed-size IV. + * \param input buffer holding the input data + * \param ilen length of the input data + * \param output buffer for the output data. Should be able to hold at + * least ilen + block_size. Cannot be the same buffer as + * input! + * \param olen length of the output data, will be filled with the + * actual number of bytes written. + * + * \note Some ciphers don't use IVs nor NONCE. For these + * ciphers, use iv = NULL and iv_len = 0. + * + * \returns 0 on success, or + * MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, or + * MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED if decryption + * expected a full block but was not provided one, or + * MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding + * while decrypting, or + * a cipher specific error code. + */ +int mbedtls_cipher_crypt( mbedtls_cipher_context_t *ctx, + const unsigned char *iv, size_t iv_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) +/** + * \brief Generic autenticated encryption (AEAD ciphers). + * + * \param ctx generic cipher context + * \param iv IV to use (or NONCE_COUNTER for CTR-mode ciphers) + * \param iv_len IV length for ciphers with variable-size IV; + * discarded by ciphers with fixed-size IV. + * \param ad Additional data to authenticate. + * \param ad_len Length of ad. + * \param input buffer holding the input data + * \param ilen length of the input data + * \param output buffer for the output data. + * Should be able to hold at least ilen. + * \param olen length of the output data, will be filled with the + * actual number of bytes written. + * \param tag buffer for the authentication tag + * \param tag_len desired tag length + * + * \returns 0 on success, or + * MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, or + * a cipher specific error code. + */ +int mbedtls_cipher_auth_encrypt( mbedtls_cipher_context_t *ctx, + const unsigned char *iv, size_t iv_len, + const unsigned char *ad, size_t ad_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, + unsigned char *tag, size_t tag_len ); + +/** + * \brief Generic autenticated decryption (AEAD ciphers). + * + * \param ctx generic cipher context + * \param iv IV to use (or NONCE_COUNTER for CTR-mode ciphers) + * \param iv_len IV length for ciphers with variable-size IV; + * discarded by ciphers with fixed-size IV. + * \param ad Additional data to be authenticated. + * \param ad_len Length of ad. + * \param input buffer holding the input data + * \param ilen length of the input data + * \param output buffer for the output data. + * Should be able to hold at least ilen. + * \param olen length of the output data, will be filled with the + * actual number of bytes written. + * \param tag buffer holding the authentication tag + * \param tag_len length of the authentication tag + * + * \returns 0 on success, or + * MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, or + * MBEDTLS_ERR_CIPHER_AUTH_FAILED if data isn't authentic, + * or a cipher specific error code. + * + * \note If the data is not authentic, then the output buffer + * is zeroed out to prevent the unauthentic plaintext to + * be used by mistake, making this interface safer. + */ +int mbedtls_cipher_auth_decrypt( mbedtls_cipher_context_t *ctx, + const unsigned char *iv, size_t iv_len, + const unsigned char *ad, size_t ad_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, + const unsigned char *tag, size_t tag_len ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD */ + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_CIPHER_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/cipher_internal.h b/tools/sdk/include/mbedtls/mbedtls/cipher_internal.h new file mode 100644 index 00000000..6c58bcc5 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/cipher_internal.h @@ -0,0 +1,109 @@ +/** + * \file cipher_internal.h + * + * \brief Cipher wrappers. + * + * \author Adriaan de Jong + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_CIPHER_WRAP_H +#define MBEDTLS_CIPHER_WRAP_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "cipher.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Base cipher information. The non-mode specific functions and values. + */ +struct mbedtls_cipher_base_t +{ + /** Base Cipher type (e.g. MBEDTLS_CIPHER_ID_AES) */ + mbedtls_cipher_id_t cipher; + + /** Encrypt using ECB */ + int (*ecb_func)( void *ctx, mbedtls_operation_t mode, + const unsigned char *input, unsigned char *output ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + /** Encrypt using CBC */ + int (*cbc_func)( void *ctx, mbedtls_operation_t mode, size_t length, + unsigned char *iv, const unsigned char *input, + unsigned char *output ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + /** Encrypt using CFB (Full length) */ + int (*cfb_func)( void *ctx, mbedtls_operation_t mode, size_t length, size_t *iv_off, + unsigned char *iv, const unsigned char *input, + unsigned char *output ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CTR) + /** Encrypt using CTR */ + int (*ctr_func)( void *ctx, size_t length, size_t *nc_off, + unsigned char *nonce_counter, unsigned char *stream_block, + const unsigned char *input, unsigned char *output ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_STREAM) + /** Encrypt using STREAM */ + int (*stream_func)( void *ctx, size_t length, + const unsigned char *input, unsigned char *output ); +#endif + + /** Set key for encryption purposes */ + int (*setkey_enc_func)( void *ctx, const unsigned char *key, + unsigned int key_bitlen ); + + /** Set key for decryption purposes */ + int (*setkey_dec_func)( void *ctx, const unsigned char *key, + unsigned int key_bitlen); + + /** Allocate a new context */ + void * (*ctx_alloc_func)( void ); + + /** Free the given context */ + void (*ctx_free_func)( void *ctx ); + +}; + +typedef struct +{ + mbedtls_cipher_type_t type; + const mbedtls_cipher_info_t *info; +} mbedtls_cipher_definition_t; + +extern const mbedtls_cipher_definition_t mbedtls_cipher_definitions[]; + +extern int mbedtls_cipher_supported[]; + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_CIPHER_WRAP_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/compat-1.3.h b/tools/sdk/include/mbedtls/mbedtls/compat-1.3.h new file mode 100644 index 00000000..27abbd97 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/compat-1.3.h @@ -0,0 +1,2634 @@ +/** + * \file compat-1.3.h + * + * \brief Compatibility definitions for using mbed TLS with client code written + * for the PolarSSL naming conventions. + * + * \deprecated Use the new names directly instead + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +#if ! defined(MBEDTLS_DEPRECATED_REMOVED) + +#if defined(MBEDTLS_DEPRECATED_WARNING) +#warning "Including compat-1.3.h is deprecated" +#endif + +#ifndef MBEDTLS_COMPAT13_H +#define MBEDTLS_COMPAT13_H + +/* + * config.h options + */ +#if defined MBEDTLS_AESNI_C +#define POLARSSL_AESNI_C MBEDTLS_AESNI_C +#endif +#if defined MBEDTLS_AES_ALT +#define POLARSSL_AES_ALT MBEDTLS_AES_ALT +#endif +#if defined MBEDTLS_AES_C +#define POLARSSL_AES_C MBEDTLS_AES_C +#endif +#if defined MBEDTLS_AES_ROM_TABLES +#define POLARSSL_AES_ROM_TABLES MBEDTLS_AES_ROM_TABLES +#endif +#if defined MBEDTLS_ARC4_ALT +#define POLARSSL_ARC4_ALT MBEDTLS_ARC4_ALT +#endif +#if defined MBEDTLS_ARC4_C +#define POLARSSL_ARC4_C MBEDTLS_ARC4_C +#endif +#if defined MBEDTLS_ASN1_PARSE_C +#define POLARSSL_ASN1_PARSE_C MBEDTLS_ASN1_PARSE_C +#endif +#if defined MBEDTLS_ASN1_WRITE_C +#define POLARSSL_ASN1_WRITE_C MBEDTLS_ASN1_WRITE_C +#endif +#if defined MBEDTLS_BASE64_C +#define POLARSSL_BASE64_C MBEDTLS_BASE64_C +#endif +#if defined MBEDTLS_BIGNUM_C +#define POLARSSL_BIGNUM_C MBEDTLS_BIGNUM_C +#endif +#if defined MBEDTLS_BLOWFISH_ALT +#define POLARSSL_BLOWFISH_ALT MBEDTLS_BLOWFISH_ALT +#endif +#if defined MBEDTLS_BLOWFISH_C +#define POLARSSL_BLOWFISH_C MBEDTLS_BLOWFISH_C +#endif +#if defined MBEDTLS_CAMELLIA_ALT +#define POLARSSL_CAMELLIA_ALT MBEDTLS_CAMELLIA_ALT +#endif +#if defined MBEDTLS_CAMELLIA_C +#define POLARSSL_CAMELLIA_C MBEDTLS_CAMELLIA_C +#endif +#if defined MBEDTLS_CAMELLIA_SMALL_MEMORY +#define POLARSSL_CAMELLIA_SMALL_MEMORY MBEDTLS_CAMELLIA_SMALL_MEMORY +#endif +#if defined MBEDTLS_CCM_C +#define POLARSSL_CCM_C MBEDTLS_CCM_C +#endif +#if defined MBEDTLS_CERTS_C +#define POLARSSL_CERTS_C MBEDTLS_CERTS_C +#endif +#if defined MBEDTLS_CIPHER_C +#define POLARSSL_CIPHER_C MBEDTLS_CIPHER_C +#endif +#if defined MBEDTLS_CIPHER_MODE_CBC +#define POLARSSL_CIPHER_MODE_CBC MBEDTLS_CIPHER_MODE_CBC +#endif +#if defined MBEDTLS_CIPHER_MODE_CFB +#define POLARSSL_CIPHER_MODE_CFB MBEDTLS_CIPHER_MODE_CFB +#endif +#if defined MBEDTLS_CIPHER_MODE_CTR +#define POLARSSL_CIPHER_MODE_CTR MBEDTLS_CIPHER_MODE_CTR +#endif +#if defined MBEDTLS_CIPHER_NULL_CIPHER +#define POLARSSL_CIPHER_NULL_CIPHER MBEDTLS_CIPHER_NULL_CIPHER +#endif +#if defined MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS +#define POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS +#endif +#if defined MBEDTLS_CIPHER_PADDING_PKCS7 +#define POLARSSL_CIPHER_PADDING_PKCS7 MBEDTLS_CIPHER_PADDING_PKCS7 +#endif +#if defined MBEDTLS_CIPHER_PADDING_ZEROS +#define POLARSSL_CIPHER_PADDING_ZEROS MBEDTLS_CIPHER_PADDING_ZEROS +#endif +#if defined MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN +#define POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN +#endif +#if defined MBEDTLS_CTR_DRBG_C +#define POLARSSL_CTR_DRBG_C MBEDTLS_CTR_DRBG_C +#endif +#if defined MBEDTLS_DEBUG_C +#define POLARSSL_DEBUG_C MBEDTLS_DEBUG_C +#endif +#if defined MBEDTLS_DEPRECATED_REMOVED +#define POLARSSL_DEPRECATED_REMOVED MBEDTLS_DEPRECATED_REMOVED +#endif +#if defined MBEDTLS_DEPRECATED_WARNING +#define POLARSSL_DEPRECATED_WARNING MBEDTLS_DEPRECATED_WARNING +#endif +#if defined MBEDTLS_DES_ALT +#define POLARSSL_DES_ALT MBEDTLS_DES_ALT +#endif +#if defined MBEDTLS_DES_C +#define POLARSSL_DES_C MBEDTLS_DES_C +#endif +#if defined MBEDTLS_DHM_C +#define POLARSSL_DHM_C MBEDTLS_DHM_C +#endif +#if defined MBEDTLS_ECDH_C +#define POLARSSL_ECDH_C MBEDTLS_ECDH_C +#endif +#if defined MBEDTLS_ECDSA_C +#define POLARSSL_ECDSA_C MBEDTLS_ECDSA_C +#endif +#if defined MBEDTLS_ECDSA_DETERMINISTIC +#define POLARSSL_ECDSA_DETERMINISTIC MBEDTLS_ECDSA_DETERMINISTIC +#endif +#if defined MBEDTLS_ECP_C +#define POLARSSL_ECP_C MBEDTLS_ECP_C +#endif +#if defined MBEDTLS_ECP_DP_BP256R1_ENABLED +#define POLARSSL_ECP_DP_BP256R1_ENABLED MBEDTLS_ECP_DP_BP256R1_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_BP384R1_ENABLED +#define POLARSSL_ECP_DP_BP384R1_ENABLED MBEDTLS_ECP_DP_BP384R1_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_BP512R1_ENABLED +#define POLARSSL_ECP_DP_BP512R1_ENABLED MBEDTLS_ECP_DP_BP512R1_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_CURVE25519_ENABLED +#define POLARSSL_ECP_DP_M255_ENABLED MBEDTLS_ECP_DP_CURVE25519_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_SECP192K1_ENABLED +#define POLARSSL_ECP_DP_SECP192K1_ENABLED MBEDTLS_ECP_DP_SECP192K1_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_SECP192R1_ENABLED +#define POLARSSL_ECP_DP_SECP192R1_ENABLED MBEDTLS_ECP_DP_SECP192R1_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_SECP224K1_ENABLED +#define POLARSSL_ECP_DP_SECP224K1_ENABLED MBEDTLS_ECP_DP_SECP224K1_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_SECP224R1_ENABLED +#define POLARSSL_ECP_DP_SECP224R1_ENABLED MBEDTLS_ECP_DP_SECP224R1_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_SECP256K1_ENABLED +#define POLARSSL_ECP_DP_SECP256K1_ENABLED MBEDTLS_ECP_DP_SECP256K1_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_SECP256R1_ENABLED +#define POLARSSL_ECP_DP_SECP256R1_ENABLED MBEDTLS_ECP_DP_SECP256R1_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_SECP384R1_ENABLED +#define POLARSSL_ECP_DP_SECP384R1_ENABLED MBEDTLS_ECP_DP_SECP384R1_ENABLED +#endif +#if defined MBEDTLS_ECP_DP_SECP521R1_ENABLED +#define POLARSSL_ECP_DP_SECP521R1_ENABLED MBEDTLS_ECP_DP_SECP521R1_ENABLED +#endif +#if defined MBEDTLS_ECP_FIXED_POINT_OPTIM +#define POLARSSL_ECP_FIXED_POINT_OPTIM MBEDTLS_ECP_FIXED_POINT_OPTIM +#endif +#if defined MBEDTLS_ECP_MAX_BITS +#define POLARSSL_ECP_MAX_BITS MBEDTLS_ECP_MAX_BITS +#endif +#if defined MBEDTLS_ECP_NIST_OPTIM +#define POLARSSL_ECP_NIST_OPTIM MBEDTLS_ECP_NIST_OPTIM +#endif +#if defined MBEDTLS_ECP_WINDOW_SIZE +#define POLARSSL_ECP_WINDOW_SIZE MBEDTLS_ECP_WINDOW_SIZE +#endif +#if defined MBEDTLS_ENABLE_WEAK_CIPHERSUITES +#define POLARSSL_ENABLE_WEAK_CIPHERSUITES MBEDTLS_ENABLE_WEAK_CIPHERSUITES +#endif +#if defined MBEDTLS_ENTROPY_C +#define POLARSSL_ENTROPY_C MBEDTLS_ENTROPY_C +#endif +#if defined MBEDTLS_ENTROPY_FORCE_SHA256 +#define POLARSSL_ENTROPY_FORCE_SHA256 MBEDTLS_ENTROPY_FORCE_SHA256 +#endif +#if defined MBEDTLS_ERROR_C +#define POLARSSL_ERROR_C MBEDTLS_ERROR_C +#endif +#if defined MBEDTLS_ERROR_STRERROR_BC +#define POLARSSL_ERROR_STRERROR_BC MBEDTLS_ERROR_STRERROR_BC +#endif +#if defined MBEDTLS_ERROR_STRERROR_DUMMY +#define POLARSSL_ERROR_STRERROR_DUMMY MBEDTLS_ERROR_STRERROR_DUMMY +#endif +#if defined MBEDTLS_FS_IO +#define POLARSSL_FS_IO MBEDTLS_FS_IO +#endif +#if defined MBEDTLS_GCM_C +#define POLARSSL_GCM_C MBEDTLS_GCM_C +#endif +#if defined MBEDTLS_GENPRIME +#define POLARSSL_GENPRIME MBEDTLS_GENPRIME +#endif +#if defined MBEDTLS_HAVEGE_C +#define POLARSSL_HAVEGE_C MBEDTLS_HAVEGE_C +#endif +#if defined MBEDTLS_HAVE_ASM +#define POLARSSL_HAVE_ASM MBEDTLS_HAVE_ASM +#endif +#if defined MBEDTLS_HAVE_SSE2 +#define POLARSSL_HAVE_SSE2 MBEDTLS_HAVE_SSE2 +#endif +#if defined MBEDTLS_HAVE_TIME +#define POLARSSL_HAVE_TIME MBEDTLS_HAVE_TIME +#endif +#if defined MBEDTLS_HMAC_DRBG_C +#define POLARSSL_HMAC_DRBG_C MBEDTLS_HMAC_DRBG_C +#endif +#if defined MBEDTLS_HMAC_DRBG_MAX_INPUT +#define POLARSSL_HMAC_DRBG_MAX_INPUT MBEDTLS_HMAC_DRBG_MAX_INPUT +#endif +#if defined MBEDTLS_HMAC_DRBG_MAX_REQUEST +#define POLARSSL_HMAC_DRBG_MAX_REQUEST MBEDTLS_HMAC_DRBG_MAX_REQUEST +#endif +#if defined MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT +#define POLARSSL_HMAC_DRBG_MAX_SEED_INPUT MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT +#endif +#if defined MBEDTLS_HMAC_DRBG_RESEED_INTERVAL +#define POLARSSL_HMAC_DRBG_RESEED_INTERVAL MBEDTLS_HMAC_DRBG_RESEED_INTERVAL +#endif +#if defined MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED +#define POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED +#endif +#if defined MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED +#define POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED +#endif +#if defined MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED +#define POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED +#endif +#if defined MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED +#define POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED +#endif +#if defined MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED +#define POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED +#endif +#if defined MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED +#define POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED +#endif +#if defined MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED +#define POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED +#endif +#if defined MBEDTLS_KEY_EXCHANGE_PSK_ENABLED +#define POLARSSL_KEY_EXCHANGE_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_PSK_ENABLED +#endif +#if defined MBEDTLS_KEY_EXCHANGE_RSA_ENABLED +#define POLARSSL_KEY_EXCHANGE_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_RSA_ENABLED +#endif +#if defined MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED +#define POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED +#endif +#if defined MBEDTLS_MD2_ALT +#define POLARSSL_MD2_ALT MBEDTLS_MD2_ALT +#endif +#if defined MBEDTLS_MD2_C +#define POLARSSL_MD2_C MBEDTLS_MD2_C +#endif +#if defined MBEDTLS_MD2_PROCESS_ALT +#define POLARSSL_MD2_PROCESS_ALT MBEDTLS_MD2_PROCESS_ALT +#endif +#if defined MBEDTLS_MD4_ALT +#define POLARSSL_MD4_ALT MBEDTLS_MD4_ALT +#endif +#if defined MBEDTLS_MD4_C +#define POLARSSL_MD4_C MBEDTLS_MD4_C +#endif +#if defined MBEDTLS_MD4_PROCESS_ALT +#define POLARSSL_MD4_PROCESS_ALT MBEDTLS_MD4_PROCESS_ALT +#endif +#if defined MBEDTLS_MD5_ALT +#define POLARSSL_MD5_ALT MBEDTLS_MD5_ALT +#endif +#if defined MBEDTLS_MD5_C +#define POLARSSL_MD5_C MBEDTLS_MD5_C +#endif +#if defined MBEDTLS_MD5_PROCESS_ALT +#define POLARSSL_MD5_PROCESS_ALT MBEDTLS_MD5_PROCESS_ALT +#endif +#if defined MBEDTLS_MD_C +#define POLARSSL_MD_C MBEDTLS_MD_C +#endif +#if defined MBEDTLS_MEMORY_ALIGN_MULTIPLE +#define POLARSSL_MEMORY_ALIGN_MULTIPLE MBEDTLS_MEMORY_ALIGN_MULTIPLE +#endif +#if defined MBEDTLS_MEMORY_BACKTRACE +#define POLARSSL_MEMORY_BACKTRACE MBEDTLS_MEMORY_BACKTRACE +#endif +#if defined MBEDTLS_MEMORY_BUFFER_ALLOC_C +#define POLARSSL_MEMORY_BUFFER_ALLOC_C MBEDTLS_MEMORY_BUFFER_ALLOC_C +#endif +#if defined MBEDTLS_MEMORY_C +#define POLARSSL_MEMORY_C MBEDTLS_MEMORY_C +#endif +#if defined MBEDTLS_MEMORY_DEBUG +#define POLARSSL_MEMORY_DEBUG MBEDTLS_MEMORY_DEBUG +#endif +#if defined MBEDTLS_MPI_MAX_SIZE +#define POLARSSL_MPI_MAX_SIZE MBEDTLS_MPI_MAX_SIZE +#endif +#if defined MBEDTLS_MPI_WINDOW_SIZE +#define POLARSSL_MPI_WINDOW_SIZE MBEDTLS_MPI_WINDOW_SIZE +#endif +#if defined MBEDTLS_NET_C +#define POLARSSL_NET_C MBEDTLS_NET_C +#endif +#if defined MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES +#define POLARSSL_NO_DEFAULT_ENTROPY_SOURCES MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES +#endif +#if defined MBEDTLS_NO_PLATFORM_ENTROPY +#define POLARSSL_NO_PLATFORM_ENTROPY MBEDTLS_NO_PLATFORM_ENTROPY +#endif +#if defined MBEDTLS_OID_C +#define POLARSSL_OID_C MBEDTLS_OID_C +#endif +#if defined MBEDTLS_PADLOCK_C +#define POLARSSL_PADLOCK_C MBEDTLS_PADLOCK_C +#endif +#if defined MBEDTLS_PBKDF2_C +#define POLARSSL_PBKDF2_C MBEDTLS_PBKDF2_C +#endif +#if defined MBEDTLS_PEM_PARSE_C +#define POLARSSL_PEM_PARSE_C MBEDTLS_PEM_PARSE_C +#endif +#if defined MBEDTLS_PEM_WRITE_C +#define POLARSSL_PEM_WRITE_C MBEDTLS_PEM_WRITE_C +#endif +#if defined MBEDTLS_PKCS11_C +#define POLARSSL_PKCS11_C MBEDTLS_PKCS11_C +#endif +#if defined MBEDTLS_PKCS12_C +#define POLARSSL_PKCS12_C MBEDTLS_PKCS12_C +#endif +#if defined MBEDTLS_PKCS1_V15 +#define POLARSSL_PKCS1_V15 MBEDTLS_PKCS1_V15 +#endif +#if defined MBEDTLS_PKCS1_V21 +#define POLARSSL_PKCS1_V21 MBEDTLS_PKCS1_V21 +#endif +#if defined MBEDTLS_PKCS5_C +#define POLARSSL_PKCS5_C MBEDTLS_PKCS5_C +#endif +#if defined MBEDTLS_PK_C +#define POLARSSL_PK_C MBEDTLS_PK_C +#endif +#if defined MBEDTLS_PK_PARSE_C +#define POLARSSL_PK_PARSE_C MBEDTLS_PK_PARSE_C +#endif +#if defined MBEDTLS_PK_PARSE_EC_EXTENDED +#define POLARSSL_PK_PARSE_EC_EXTENDED MBEDTLS_PK_PARSE_EC_EXTENDED +#endif +#if defined MBEDTLS_PK_RSA_ALT_SUPPORT +#define POLARSSL_PK_RSA_ALT_SUPPORT MBEDTLS_PK_RSA_ALT_SUPPORT +#endif +#if defined MBEDTLS_PK_WRITE_C +#define POLARSSL_PK_WRITE_C MBEDTLS_PK_WRITE_C +#endif +#if defined MBEDTLS_PLATFORM_C +#define POLARSSL_PLATFORM_C MBEDTLS_PLATFORM_C +#endif +#if defined MBEDTLS_PLATFORM_EXIT_ALT +#define POLARSSL_PLATFORM_EXIT_ALT MBEDTLS_PLATFORM_EXIT_ALT +#endif +#if defined MBEDTLS_PLATFORM_EXIT_MACRO +#define POLARSSL_PLATFORM_EXIT_MACRO MBEDTLS_PLATFORM_EXIT_MACRO +#endif +#if defined MBEDTLS_PLATFORM_FPRINTF_ALT +#define POLARSSL_PLATFORM_FPRINTF_ALT MBEDTLS_PLATFORM_FPRINTF_ALT +#endif +#if defined MBEDTLS_PLATFORM_FPRINTF_MACRO +#define POLARSSL_PLATFORM_FPRINTF_MACRO MBEDTLS_PLATFORM_FPRINTF_MACRO +#endif +#if defined MBEDTLS_PLATFORM_FREE_MACRO +#define POLARSSL_PLATFORM_FREE_MACRO MBEDTLS_PLATFORM_FREE_MACRO +#endif +#if defined MBEDTLS_PLATFORM_MEMORY +#define POLARSSL_PLATFORM_MEMORY MBEDTLS_PLATFORM_MEMORY +#endif +#if defined MBEDTLS_PLATFORM_NO_STD_FUNCTIONS +#define POLARSSL_PLATFORM_NO_STD_FUNCTIONS MBEDTLS_PLATFORM_NO_STD_FUNCTIONS +#endif +#if defined MBEDTLS_PLATFORM_PRINTF_ALT +#define POLARSSL_PLATFORM_PRINTF_ALT MBEDTLS_PLATFORM_PRINTF_ALT +#endif +#if defined MBEDTLS_PLATFORM_PRINTF_MACRO +#define POLARSSL_PLATFORM_PRINTF_MACRO MBEDTLS_PLATFORM_PRINTF_MACRO +#endif +#if defined MBEDTLS_PLATFORM_SNPRINTF_ALT +#define POLARSSL_PLATFORM_SNPRINTF_ALT MBEDTLS_PLATFORM_SNPRINTF_ALT +#endif +#if defined MBEDTLS_PLATFORM_SNPRINTF_MACRO +#define POLARSSL_PLATFORM_SNPRINTF_MACRO MBEDTLS_PLATFORM_SNPRINTF_MACRO +#endif +#if defined MBEDTLS_PLATFORM_STD_EXIT +#define POLARSSL_PLATFORM_STD_EXIT MBEDTLS_PLATFORM_STD_EXIT +#endif +#if defined MBEDTLS_PLATFORM_STD_FPRINTF +#define POLARSSL_PLATFORM_STD_FPRINTF MBEDTLS_PLATFORM_STD_FPRINTF +#endif +#if defined MBEDTLS_PLATFORM_STD_FREE +#define POLARSSL_PLATFORM_STD_FREE MBEDTLS_PLATFORM_STD_FREE +#endif +#if defined MBEDTLS_PLATFORM_STD_MALLOC +#define POLARSSL_PLATFORM_STD_MALLOC MBEDTLS_PLATFORM_STD_MALLOC +#endif +#if defined MBEDTLS_PLATFORM_STD_MEM_HDR +#define POLARSSL_PLATFORM_STD_MEM_HDR MBEDTLS_PLATFORM_STD_MEM_HDR +#endif +#if defined MBEDTLS_PLATFORM_STD_PRINTF +#define POLARSSL_PLATFORM_STD_PRINTF MBEDTLS_PLATFORM_STD_PRINTF +#endif +#if defined MBEDTLS_PLATFORM_STD_SNPRINTF +#define POLARSSL_PLATFORM_STD_SNPRINTF MBEDTLS_PLATFORM_STD_SNPRINTF +#endif +#if defined MBEDTLS_PSK_MAX_LEN +#define POLARSSL_PSK_MAX_LEN MBEDTLS_PSK_MAX_LEN +#endif +#if defined MBEDTLS_REMOVE_ARC4_CIPHERSUITES +#define POLARSSL_REMOVE_ARC4_CIPHERSUITES MBEDTLS_REMOVE_ARC4_CIPHERSUITES +#endif +#if defined MBEDTLS_RIPEMD160_ALT +#define POLARSSL_RIPEMD160_ALT MBEDTLS_RIPEMD160_ALT +#endif +#if defined MBEDTLS_RIPEMD160_C +#define POLARSSL_RIPEMD160_C MBEDTLS_RIPEMD160_C +#endif +#if defined MBEDTLS_RIPEMD160_PROCESS_ALT +#define POLARSSL_RIPEMD160_PROCESS_ALT MBEDTLS_RIPEMD160_PROCESS_ALT +#endif +#if defined MBEDTLS_RSA_C +#define POLARSSL_RSA_C MBEDTLS_RSA_C +#endif +#if defined MBEDTLS_RSA_NO_CRT +#define POLARSSL_RSA_NO_CRT MBEDTLS_RSA_NO_CRT +#endif +#if defined MBEDTLS_SELF_TEST +#define POLARSSL_SELF_TEST MBEDTLS_SELF_TEST +#endif +#if defined MBEDTLS_SHA1_ALT +#define POLARSSL_SHA1_ALT MBEDTLS_SHA1_ALT +#endif +#if defined MBEDTLS_SHA1_C +#define POLARSSL_SHA1_C MBEDTLS_SHA1_C +#endif +#if defined MBEDTLS_SHA1_PROCESS_ALT +#define POLARSSL_SHA1_PROCESS_ALT MBEDTLS_SHA1_PROCESS_ALT +#endif +#if defined MBEDTLS_SHA256_ALT +#define POLARSSL_SHA256_ALT MBEDTLS_SHA256_ALT +#endif +#if defined MBEDTLS_SHA256_C +#define POLARSSL_SHA256_C MBEDTLS_SHA256_C +#endif +#if defined MBEDTLS_SHA256_PROCESS_ALT +#define POLARSSL_SHA256_PROCESS_ALT MBEDTLS_SHA256_PROCESS_ALT +#endif +#if defined MBEDTLS_SHA512_ALT +#define POLARSSL_SHA512_ALT MBEDTLS_SHA512_ALT +#endif +#if defined MBEDTLS_SHA512_C +#define POLARSSL_SHA512_C MBEDTLS_SHA512_C +#endif +#if defined MBEDTLS_SHA512_PROCESS_ALT +#define POLARSSL_SHA512_PROCESS_ALT MBEDTLS_SHA512_PROCESS_ALT +#endif +#if defined MBEDTLS_SSL_AEAD_RANDOM_IV +#define POLARSSL_SSL_AEAD_RANDOM_IV MBEDTLS_SSL_AEAD_RANDOM_IV +#endif +#if defined MBEDTLS_SSL_ALERT_MESSAGES +#define POLARSSL_SSL_ALERT_MESSAGES MBEDTLS_SSL_ALERT_MESSAGES +#endif +#if defined MBEDTLS_SSL_ALL_ALERT_MESSAGES +#define POLARSSL_SSL_ALL_ALERT_MESSAGES MBEDTLS_SSL_ALL_ALERT_MESSAGES +#endif +#if defined MBEDTLS_SSL_ALPN +#define POLARSSL_SSL_ALPN MBEDTLS_SSL_ALPN +#endif +#if defined MBEDTLS_SSL_CACHE_C +#define POLARSSL_SSL_CACHE_C MBEDTLS_SSL_CACHE_C +#endif +#if defined MBEDTLS_SSL_CBC_RECORD_SPLITTING +#define POLARSSL_SSL_CBC_RECORD_SPLITTING MBEDTLS_SSL_CBC_RECORD_SPLITTING +#endif +#if defined MBEDTLS_SSL_CLI_C +#define POLARSSL_SSL_CLI_C MBEDTLS_SSL_CLI_C +#endif +#if defined MBEDTLS_SSL_COOKIE_C +#define POLARSSL_SSL_COOKIE_C MBEDTLS_SSL_COOKIE_C +#endif +#if defined MBEDTLS_SSL_COOKIE_TIMEOUT +#define POLARSSL_SSL_COOKIE_TIMEOUT MBEDTLS_SSL_COOKIE_TIMEOUT +#endif +#if defined MBEDTLS_SSL_DEBUG_ALL +#define POLARSSL_SSL_DEBUG_ALL MBEDTLS_SSL_DEBUG_ALL +#endif +#if defined MBEDTLS_SSL_DISABLE_RENEGOTIATION +#define POLARSSL_SSL_DISABLE_RENEGOTIATION MBEDTLS_SSL_DISABLE_RENEGOTIATION +#endif +#if defined MBEDTLS_SSL_DTLS_ANTI_REPLAY +#define POLARSSL_SSL_DTLS_ANTI_REPLAY MBEDTLS_SSL_DTLS_ANTI_REPLAY +#endif +#if defined MBEDTLS_SSL_DTLS_BADMAC_LIMIT +#define POLARSSL_SSL_DTLS_BADMAC_LIMIT MBEDTLS_SSL_DTLS_BADMAC_LIMIT +#endif +#if defined MBEDTLS_SSL_DTLS_HELLO_VERIFY +#define POLARSSL_SSL_DTLS_HELLO_VERIFY MBEDTLS_SSL_DTLS_HELLO_VERIFY +#endif +#if defined MBEDTLS_SSL_ENCRYPT_THEN_MAC +#define POLARSSL_SSL_ENCRYPT_THEN_MAC MBEDTLS_SSL_ENCRYPT_THEN_MAC +#endif +#if defined MBEDTLS_SSL_EXTENDED_MASTER_SECRET +#define POLARSSL_SSL_EXTENDED_MASTER_SECRET MBEDTLS_SSL_EXTENDED_MASTER_SECRET +#endif +#if defined MBEDTLS_SSL_FALLBACK_SCSV +#define POLARSSL_SSL_FALLBACK_SCSV MBEDTLS_SSL_FALLBACK_SCSV +#endif +#if defined MBEDTLS_SSL_HW_RECORD_ACCEL +#define POLARSSL_SSL_HW_RECORD_ACCEL MBEDTLS_SSL_HW_RECORD_ACCEL +#endif +#if defined MBEDTLS_SSL_MAX_FRAGMENT_LENGTH +#define POLARSSL_SSL_MAX_FRAGMENT_LENGTH MBEDTLS_SSL_MAX_FRAGMENT_LENGTH +#endif +#if defined MBEDTLS_SSL_PROTO_DTLS +#define POLARSSL_SSL_PROTO_DTLS MBEDTLS_SSL_PROTO_DTLS +#endif +#if defined MBEDTLS_SSL_PROTO_SSL3 +#define POLARSSL_SSL_PROTO_SSL3 MBEDTLS_SSL_PROTO_SSL3 +#endif +#if defined MBEDTLS_SSL_PROTO_TLS1 +#define POLARSSL_SSL_PROTO_TLS1 MBEDTLS_SSL_PROTO_TLS1 +#endif +#if defined MBEDTLS_SSL_PROTO_TLS1_1 +#define POLARSSL_SSL_PROTO_TLS1_1 MBEDTLS_SSL_PROTO_TLS1_1 +#endif +#if defined MBEDTLS_SSL_PROTO_TLS1_2 +#define POLARSSL_SSL_PROTO_TLS1_2 MBEDTLS_SSL_PROTO_TLS1_2 +#endif +#if defined MBEDTLS_SSL_RENEGOTIATION +#define POLARSSL_SSL_RENEGOTIATION MBEDTLS_SSL_RENEGOTIATION +#endif +#if defined MBEDTLS_SSL_SERVER_NAME_INDICATION +#define POLARSSL_SSL_SERVER_NAME_INDICATION MBEDTLS_SSL_SERVER_NAME_INDICATION +#endif +#if defined MBEDTLS_SSL_SESSION_TICKETS +#define POLARSSL_SSL_SESSION_TICKETS MBEDTLS_SSL_SESSION_TICKETS +#endif +#if defined MBEDTLS_SSL_SRV_C +#define POLARSSL_SSL_SRV_C MBEDTLS_SSL_SRV_C +#endif +#if defined MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE +#define POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE +#endif +#if defined MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO +#define POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO +#endif +#if defined MBEDTLS_SSL_TLS_C +#define POLARSSL_SSL_TLS_C MBEDTLS_SSL_TLS_C +#endif +#if defined MBEDTLS_SSL_TRUNCATED_HMAC +#define POLARSSL_SSL_TRUNCATED_HMAC MBEDTLS_SSL_TRUNCATED_HMAC +#endif +#if defined MBEDTLS_THREADING_ALT +#define POLARSSL_THREADING_ALT MBEDTLS_THREADING_ALT +#endif +#if defined MBEDTLS_THREADING_C +#define POLARSSL_THREADING_C MBEDTLS_THREADING_C +#endif +#if defined MBEDTLS_THREADING_PTHREAD +#define POLARSSL_THREADING_PTHREAD MBEDTLS_THREADING_PTHREAD +#endif +#if defined MBEDTLS_TIMING_ALT +#define POLARSSL_TIMING_ALT MBEDTLS_TIMING_ALT +#endif +#if defined MBEDTLS_TIMING_C +#define POLARSSL_TIMING_C MBEDTLS_TIMING_C +#endif +#if defined MBEDTLS_VERSION_C +#define POLARSSL_VERSION_C MBEDTLS_VERSION_C +#endif +#if defined MBEDTLS_VERSION_FEATURES +#define POLARSSL_VERSION_FEATURES MBEDTLS_VERSION_FEATURES +#endif +#if defined MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 +#define POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 +#endif +#if defined MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION +#define POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION +#endif +#if defined MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE +#define POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE +#endif +#if defined MBEDTLS_X509_CHECK_KEY_USAGE +#define POLARSSL_X509_CHECK_KEY_USAGE MBEDTLS_X509_CHECK_KEY_USAGE +#endif +#if defined MBEDTLS_X509_CREATE_C +#define POLARSSL_X509_CREATE_C MBEDTLS_X509_CREATE_C +#endif +#if defined MBEDTLS_X509_CRL_PARSE_C +#define POLARSSL_X509_CRL_PARSE_C MBEDTLS_X509_CRL_PARSE_C +#endif +#if defined MBEDTLS_X509_CRT_PARSE_C +#define POLARSSL_X509_CRT_PARSE_C MBEDTLS_X509_CRT_PARSE_C +#endif +#if defined MBEDTLS_X509_CRT_WRITE_C +#define POLARSSL_X509_CRT_WRITE_C MBEDTLS_X509_CRT_WRITE_C +#endif +#if defined MBEDTLS_X509_CSR_PARSE_C +#define POLARSSL_X509_CSR_PARSE_C MBEDTLS_X509_CSR_PARSE_C +#endif +#if defined MBEDTLS_X509_CSR_WRITE_C +#define POLARSSL_X509_CSR_WRITE_C MBEDTLS_X509_CSR_WRITE_C +#endif +#if defined MBEDTLS_X509_MAX_INTERMEDIATE_CA +#define POLARSSL_X509_MAX_INTERMEDIATE_CA MBEDTLS_X509_MAX_INTERMEDIATE_CA +#endif +#if defined MBEDTLS_X509_RSASSA_PSS_SUPPORT +#define POLARSSL_X509_RSASSA_PSS_SUPPORT MBEDTLS_X509_RSASSA_PSS_SUPPORT +#endif +#if defined MBEDTLS_X509_USE_C +#define POLARSSL_X509_USE_C MBEDTLS_X509_USE_C +#endif +#if defined MBEDTLS_XTEA_ALT +#define POLARSSL_XTEA_ALT MBEDTLS_XTEA_ALT +#endif +#if defined MBEDTLS_XTEA_C +#define POLARSSL_XTEA_C MBEDTLS_XTEA_C +#endif +#if defined MBEDTLS_ZLIB_SUPPORT +#define POLARSSL_ZLIB_SUPPORT MBEDTLS_ZLIB_SUPPORT +#endif + +/* + * Misc names (macros, types, functions, enum constants...) + */ +#define AES_DECRYPT MBEDTLS_AES_DECRYPT +#define AES_ENCRYPT MBEDTLS_AES_ENCRYPT +#define ASN1_BIT_STRING MBEDTLS_ASN1_BIT_STRING +#define ASN1_BMP_STRING MBEDTLS_ASN1_BMP_STRING +#define ASN1_BOOLEAN MBEDTLS_ASN1_BOOLEAN +#define ASN1_CHK_ADD MBEDTLS_ASN1_CHK_ADD +#define ASN1_CONSTRUCTED MBEDTLS_ASN1_CONSTRUCTED +#define ASN1_CONTEXT_SPECIFIC MBEDTLS_ASN1_CONTEXT_SPECIFIC +#define ASN1_GENERALIZED_TIME MBEDTLS_ASN1_GENERALIZED_TIME +#define ASN1_IA5_STRING MBEDTLS_ASN1_IA5_STRING +#define ASN1_INTEGER MBEDTLS_ASN1_INTEGER +#define ASN1_NULL MBEDTLS_ASN1_NULL +#define ASN1_OCTET_STRING MBEDTLS_ASN1_OCTET_STRING +#define ASN1_OID MBEDTLS_ASN1_OID +#define ASN1_PRIMITIVE MBEDTLS_ASN1_PRIMITIVE +#define ASN1_PRINTABLE_STRING MBEDTLS_ASN1_PRINTABLE_STRING +#define ASN1_SEQUENCE MBEDTLS_ASN1_SEQUENCE +#define ASN1_SET MBEDTLS_ASN1_SET +#define ASN1_T61_STRING MBEDTLS_ASN1_T61_STRING +#define ASN1_UNIVERSAL_STRING MBEDTLS_ASN1_UNIVERSAL_STRING +#define ASN1_UTC_TIME MBEDTLS_ASN1_UTC_TIME +#define ASN1_UTF8_STRING MBEDTLS_ASN1_UTF8_STRING +#define BADCERT_CN_MISMATCH MBEDTLS_X509_BADCERT_CN_MISMATCH +#define BADCERT_EXPIRED MBEDTLS_X509_BADCERT_EXPIRED +#define BADCERT_FUTURE MBEDTLS_X509_BADCERT_FUTURE +#define BADCERT_MISSING MBEDTLS_X509_BADCERT_MISSING +#define BADCERT_NOT_TRUSTED MBEDTLS_X509_BADCERT_NOT_TRUSTED +#define BADCERT_OTHER MBEDTLS_X509_BADCERT_OTHER +#define BADCERT_REVOKED MBEDTLS_X509_BADCERT_REVOKED +#define BADCERT_SKIP_VERIFY MBEDTLS_X509_BADCERT_SKIP_VERIFY +#define BADCRL_EXPIRED MBEDTLS_X509_BADCRL_EXPIRED +#define BADCRL_FUTURE MBEDTLS_X509_BADCRL_FUTURE +#define BADCRL_NOT_TRUSTED MBEDTLS_X509_BADCRL_NOT_TRUSTED +#define BLOWFISH_BLOCKSIZE MBEDTLS_BLOWFISH_BLOCKSIZE +#define BLOWFISH_DECRYPT MBEDTLS_BLOWFISH_DECRYPT +#define BLOWFISH_ENCRYPT MBEDTLS_BLOWFISH_ENCRYPT +#define BLOWFISH_MAX_KEY MBEDTLS_BLOWFISH_MAX_KEY_BITS +#define BLOWFISH_MIN_KEY MBEDTLS_BLOWFISH_MIN_KEY_BITS +#define BLOWFISH_ROUNDS MBEDTLS_BLOWFISH_ROUNDS +#define CAMELLIA_DECRYPT MBEDTLS_CAMELLIA_DECRYPT +#define CAMELLIA_ENCRYPT MBEDTLS_CAMELLIA_ENCRYPT +#define COLLECT_SIZE MBEDTLS_HAVEGE_COLLECT_SIZE +#define CTR_DRBG_BLOCKSIZE MBEDTLS_CTR_DRBG_BLOCKSIZE +#define CTR_DRBG_ENTROPY_LEN MBEDTLS_CTR_DRBG_ENTROPY_LEN +#define CTR_DRBG_KEYBITS MBEDTLS_CTR_DRBG_KEYBITS +#define CTR_DRBG_KEYSIZE MBEDTLS_CTR_DRBG_KEYSIZE +#define CTR_DRBG_MAX_INPUT MBEDTLS_CTR_DRBG_MAX_INPUT +#define CTR_DRBG_MAX_REQUEST MBEDTLS_CTR_DRBG_MAX_REQUEST +#define CTR_DRBG_MAX_SEED_INPUT MBEDTLS_CTR_DRBG_MAX_SEED_INPUT +#define CTR_DRBG_PR_OFF MBEDTLS_CTR_DRBG_PR_OFF +#define CTR_DRBG_PR_ON MBEDTLS_CTR_DRBG_PR_ON +#define CTR_DRBG_RESEED_INTERVAL MBEDTLS_CTR_DRBG_RESEED_INTERVAL +#define CTR_DRBG_SEEDLEN MBEDTLS_CTR_DRBG_SEEDLEN +#define DEPRECATED MBEDTLS_DEPRECATED +#define DES_DECRYPT MBEDTLS_DES_DECRYPT +#define DES_ENCRYPT MBEDTLS_DES_ENCRYPT +#define DES_KEY_SIZE MBEDTLS_DES_KEY_SIZE +#define ENTROPY_BLOCK_SIZE MBEDTLS_ENTROPY_BLOCK_SIZE +#define ENTROPY_MAX_GATHER MBEDTLS_ENTROPY_MAX_GATHER +#define ENTROPY_MAX_SEED_SIZE MBEDTLS_ENTROPY_MAX_SEED_SIZE +#define ENTROPY_MAX_SOURCES MBEDTLS_ENTROPY_MAX_SOURCES +#define ENTROPY_MIN_HARDCLOCK MBEDTLS_ENTROPY_MIN_HARDCLOCK +#define ENTROPY_MIN_HAVEGE MBEDTLS_ENTROPY_MIN_HAVEGE +#define ENTROPY_MIN_PLATFORM MBEDTLS_ENTROPY_MIN_PLATFORM +#define ENTROPY_SOURCE_MANUAL MBEDTLS_ENTROPY_SOURCE_MANUAL +#define EXT_AUTHORITY_KEY_IDENTIFIER MBEDTLS_X509_EXT_AUTHORITY_KEY_IDENTIFIER +#define EXT_BASIC_CONSTRAINTS MBEDTLS_X509_EXT_BASIC_CONSTRAINTS +#define EXT_CERTIFICATE_POLICIES MBEDTLS_X509_EXT_CERTIFICATE_POLICIES +#define EXT_CRL_DISTRIBUTION_POINTS MBEDTLS_X509_EXT_CRL_DISTRIBUTION_POINTS +#define EXT_EXTENDED_KEY_USAGE MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE +#define EXT_FRESHEST_CRL MBEDTLS_X509_EXT_FRESHEST_CRL +#define EXT_INIHIBIT_ANYPOLICY MBEDTLS_X509_EXT_INIHIBIT_ANYPOLICY +#define EXT_ISSUER_ALT_NAME MBEDTLS_X509_EXT_ISSUER_ALT_NAME +#define EXT_KEY_USAGE MBEDTLS_X509_EXT_KEY_USAGE +#define EXT_NAME_CONSTRAINTS MBEDTLS_X509_EXT_NAME_CONSTRAINTS +#define EXT_NS_CERT_TYPE MBEDTLS_X509_EXT_NS_CERT_TYPE +#define EXT_POLICY_CONSTRAINTS MBEDTLS_X509_EXT_POLICY_CONSTRAINTS +#define EXT_POLICY_MAPPINGS MBEDTLS_X509_EXT_POLICY_MAPPINGS +#define EXT_SUBJECT_ALT_NAME MBEDTLS_X509_EXT_SUBJECT_ALT_NAME +#define EXT_SUBJECT_DIRECTORY_ATTRS MBEDTLS_X509_EXT_SUBJECT_DIRECTORY_ATTRS +#define EXT_SUBJECT_KEY_IDENTIFIER MBEDTLS_X509_EXT_SUBJECT_KEY_IDENTIFIER +#define GCM_DECRYPT MBEDTLS_GCM_DECRYPT +#define GCM_ENCRYPT MBEDTLS_GCM_ENCRYPT +#define KU_CRL_SIGN MBEDTLS_X509_KU_CRL_SIGN +#define KU_DATA_ENCIPHERMENT MBEDTLS_X509_KU_DATA_ENCIPHERMENT +#define KU_DIGITAL_SIGNATURE MBEDTLS_X509_KU_DIGITAL_SIGNATURE +#define KU_KEY_AGREEMENT MBEDTLS_X509_KU_KEY_AGREEMENT +#define KU_KEY_CERT_SIGN MBEDTLS_X509_KU_KEY_CERT_SIGN +#define KU_KEY_ENCIPHERMENT MBEDTLS_X509_KU_KEY_ENCIPHERMENT +#define KU_NON_REPUDIATION MBEDTLS_X509_KU_NON_REPUDIATION +#define LN_2_DIV_LN_10_SCALE100 MBEDTLS_LN_2_DIV_LN_10_SCALE100 +#define MD_CONTEXT_T_INIT MBEDTLS_MD_CONTEXT_T_INIT +#define MEMORY_VERIFY_ALLOC MBEDTLS_MEMORY_VERIFY_ALLOC +#define MEMORY_VERIFY_ALWAYS MBEDTLS_MEMORY_VERIFY_ALWAYS +#define MEMORY_VERIFY_FREE MBEDTLS_MEMORY_VERIFY_FREE +#define MEMORY_VERIFY_NONE MBEDTLS_MEMORY_VERIFY_NONE +#define MPI_CHK MBEDTLS_MPI_CHK +#define NET_PROTO_TCP MBEDTLS_NET_PROTO_TCP +#define NET_PROTO_UDP MBEDTLS_NET_PROTO_UDP +#define NS_CERT_TYPE_EMAIL MBEDTLS_X509_NS_CERT_TYPE_EMAIL +#define NS_CERT_TYPE_EMAIL_CA MBEDTLS_X509_NS_CERT_TYPE_EMAIL_CA +#define NS_CERT_TYPE_OBJECT_SIGNING MBEDTLS_X509_NS_CERT_TYPE_OBJECT_SIGNING +#define NS_CERT_TYPE_OBJECT_SIGNING_CA MBEDTLS_X509_NS_CERT_TYPE_OBJECT_SIGNING_CA +#define NS_CERT_TYPE_RESERVED MBEDTLS_X509_NS_CERT_TYPE_RESERVED +#define NS_CERT_TYPE_SSL_CA MBEDTLS_X509_NS_CERT_TYPE_SSL_CA +#define NS_CERT_TYPE_SSL_CLIENT MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT +#define NS_CERT_TYPE_SSL_SERVER MBEDTLS_X509_NS_CERT_TYPE_SSL_SERVER +#define OID_ANSI_X9_62 MBEDTLS_OID_ANSI_X9_62 +#define OID_ANSI_X9_62_FIELD_TYPE MBEDTLS_OID_ANSI_X9_62_FIELD_TYPE +#define OID_ANSI_X9_62_PRIME_FIELD MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD +#define OID_ANSI_X9_62_SIG MBEDTLS_OID_ANSI_X9_62_SIG +#define OID_ANSI_X9_62_SIG_SHA2 MBEDTLS_OID_ANSI_X9_62_SIG_SHA2 +#define OID_ANY_EXTENDED_KEY_USAGE MBEDTLS_OID_ANY_EXTENDED_KEY_USAGE +#define OID_AT MBEDTLS_OID_AT +#define OID_AT_CN MBEDTLS_OID_AT_CN +#define OID_AT_COUNTRY MBEDTLS_OID_AT_COUNTRY +#define OID_AT_DN_QUALIFIER MBEDTLS_OID_AT_DN_QUALIFIER +#define OID_AT_GENERATION_QUALIFIER MBEDTLS_OID_AT_GENERATION_QUALIFIER +#define OID_AT_GIVEN_NAME MBEDTLS_OID_AT_GIVEN_NAME +#define OID_AT_INITIALS MBEDTLS_OID_AT_INITIALS +#define OID_AT_LOCALITY MBEDTLS_OID_AT_LOCALITY +#define OID_AT_ORGANIZATION MBEDTLS_OID_AT_ORGANIZATION +#define OID_AT_ORG_UNIT MBEDTLS_OID_AT_ORG_UNIT +#define OID_AT_POSTAL_ADDRESS MBEDTLS_OID_AT_POSTAL_ADDRESS +#define OID_AT_POSTAL_CODE MBEDTLS_OID_AT_POSTAL_CODE +#define OID_AT_PSEUDONYM MBEDTLS_OID_AT_PSEUDONYM +#define OID_AT_SERIAL_NUMBER MBEDTLS_OID_AT_SERIAL_NUMBER +#define OID_AT_STATE MBEDTLS_OID_AT_STATE +#define OID_AT_SUR_NAME MBEDTLS_OID_AT_SUR_NAME +#define OID_AT_TITLE MBEDTLS_OID_AT_TITLE +#define OID_AT_UNIQUE_IDENTIFIER MBEDTLS_OID_AT_UNIQUE_IDENTIFIER +#define OID_AUTHORITY_KEY_IDENTIFIER MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER +#define OID_BASIC_CONSTRAINTS MBEDTLS_OID_BASIC_CONSTRAINTS +#define OID_CERTICOM MBEDTLS_OID_CERTICOM +#define OID_CERTIFICATE_POLICIES MBEDTLS_OID_CERTIFICATE_POLICIES +#define OID_CLIENT_AUTH MBEDTLS_OID_CLIENT_AUTH +#define OID_CMP MBEDTLS_OID_CMP +#define OID_CODE_SIGNING MBEDTLS_OID_CODE_SIGNING +#define OID_COUNTRY_US MBEDTLS_OID_COUNTRY_US +#define OID_CRL_DISTRIBUTION_POINTS MBEDTLS_OID_CRL_DISTRIBUTION_POINTS +#define OID_CRL_NUMBER MBEDTLS_OID_CRL_NUMBER +#define OID_DES_CBC MBEDTLS_OID_DES_CBC +#define OID_DES_EDE3_CBC MBEDTLS_OID_DES_EDE3_CBC +#define OID_DIGEST_ALG_MD2 MBEDTLS_OID_DIGEST_ALG_MD2 +#define OID_DIGEST_ALG_MD4 MBEDTLS_OID_DIGEST_ALG_MD4 +#define OID_DIGEST_ALG_MD5 MBEDTLS_OID_DIGEST_ALG_MD5 +#define OID_DIGEST_ALG_SHA1 MBEDTLS_OID_DIGEST_ALG_SHA1 +#define OID_DIGEST_ALG_SHA224 MBEDTLS_OID_DIGEST_ALG_SHA224 +#define OID_DIGEST_ALG_SHA256 MBEDTLS_OID_DIGEST_ALG_SHA256 +#define OID_DIGEST_ALG_SHA384 MBEDTLS_OID_DIGEST_ALG_SHA384 +#define OID_DIGEST_ALG_SHA512 MBEDTLS_OID_DIGEST_ALG_SHA512 +#define OID_DOMAIN_COMPONENT MBEDTLS_OID_DOMAIN_COMPONENT +#define OID_ECDSA_SHA1 MBEDTLS_OID_ECDSA_SHA1 +#define OID_ECDSA_SHA224 MBEDTLS_OID_ECDSA_SHA224 +#define OID_ECDSA_SHA256 MBEDTLS_OID_ECDSA_SHA256 +#define OID_ECDSA_SHA384 MBEDTLS_OID_ECDSA_SHA384 +#define OID_ECDSA_SHA512 MBEDTLS_OID_ECDSA_SHA512 +#define OID_EC_ALG_ECDH MBEDTLS_OID_EC_ALG_ECDH +#define OID_EC_ALG_UNRESTRICTED MBEDTLS_OID_EC_ALG_UNRESTRICTED +#define OID_EC_BRAINPOOL_V1 MBEDTLS_OID_EC_BRAINPOOL_V1 +#define OID_EC_GRP_BP256R1 MBEDTLS_OID_EC_GRP_BP256R1 +#define OID_EC_GRP_BP384R1 MBEDTLS_OID_EC_GRP_BP384R1 +#define OID_EC_GRP_BP512R1 MBEDTLS_OID_EC_GRP_BP512R1 +#define OID_EC_GRP_SECP192K1 MBEDTLS_OID_EC_GRP_SECP192K1 +#define OID_EC_GRP_SECP192R1 MBEDTLS_OID_EC_GRP_SECP192R1 +#define OID_EC_GRP_SECP224K1 MBEDTLS_OID_EC_GRP_SECP224K1 +#define OID_EC_GRP_SECP224R1 MBEDTLS_OID_EC_GRP_SECP224R1 +#define OID_EC_GRP_SECP256K1 MBEDTLS_OID_EC_GRP_SECP256K1 +#define OID_EC_GRP_SECP256R1 MBEDTLS_OID_EC_GRP_SECP256R1 +#define OID_EC_GRP_SECP384R1 MBEDTLS_OID_EC_GRP_SECP384R1 +#define OID_EC_GRP_SECP521R1 MBEDTLS_OID_EC_GRP_SECP521R1 +#define OID_EMAIL_PROTECTION MBEDTLS_OID_EMAIL_PROTECTION +#define OID_EXTENDED_KEY_USAGE MBEDTLS_OID_EXTENDED_KEY_USAGE +#define OID_FRESHEST_CRL MBEDTLS_OID_FRESHEST_CRL +#define OID_GOV MBEDTLS_OID_GOV +#define OID_HMAC_SHA1 MBEDTLS_OID_HMAC_SHA1 +#define OID_ID_CE MBEDTLS_OID_ID_CE +#define OID_INIHIBIT_ANYPOLICY MBEDTLS_OID_INIHIBIT_ANYPOLICY +#define OID_ISO_CCITT_DS MBEDTLS_OID_ISO_CCITT_DS +#define OID_ISO_IDENTIFIED_ORG MBEDTLS_OID_ISO_IDENTIFIED_ORG +#define OID_ISO_ITU_COUNTRY MBEDTLS_OID_ISO_ITU_COUNTRY +#define OID_ISO_ITU_US_ORG MBEDTLS_OID_ISO_ITU_US_ORG +#define OID_ISO_MEMBER_BODIES MBEDTLS_OID_ISO_MEMBER_BODIES +#define OID_ISSUER_ALT_NAME MBEDTLS_OID_ISSUER_ALT_NAME +#define OID_KEY_USAGE MBEDTLS_OID_KEY_USAGE +#define OID_KP MBEDTLS_OID_KP +#define OID_MGF1 MBEDTLS_OID_MGF1 +#define OID_NAME_CONSTRAINTS MBEDTLS_OID_NAME_CONSTRAINTS +#define OID_NETSCAPE MBEDTLS_OID_NETSCAPE +#define OID_NS_BASE_URL MBEDTLS_OID_NS_BASE_URL +#define OID_NS_CA_POLICY_URL MBEDTLS_OID_NS_CA_POLICY_URL +#define OID_NS_CA_REVOCATION_URL MBEDTLS_OID_NS_CA_REVOCATION_URL +#define OID_NS_CERT MBEDTLS_OID_NS_CERT +#define OID_NS_CERT_SEQUENCE MBEDTLS_OID_NS_CERT_SEQUENCE +#define OID_NS_CERT_TYPE MBEDTLS_OID_NS_CERT_TYPE +#define OID_NS_COMMENT MBEDTLS_OID_NS_COMMENT +#define OID_NS_DATA_TYPE MBEDTLS_OID_NS_DATA_TYPE +#define OID_NS_RENEWAL_URL MBEDTLS_OID_NS_RENEWAL_URL +#define OID_NS_REVOCATION_URL MBEDTLS_OID_NS_REVOCATION_URL +#define OID_NS_SSL_SERVER_NAME MBEDTLS_OID_NS_SSL_SERVER_NAME +#define OID_OCSP_SIGNING MBEDTLS_OID_OCSP_SIGNING +#define OID_OIW_SECSIG MBEDTLS_OID_OIW_SECSIG +#define OID_OIW_SECSIG_ALG MBEDTLS_OID_OIW_SECSIG_ALG +#define OID_OIW_SECSIG_SHA1 MBEDTLS_OID_OIW_SECSIG_SHA1 +#define OID_ORGANIZATION MBEDTLS_OID_ORGANIZATION +#define OID_ORG_ANSI_X9_62 MBEDTLS_OID_ORG_ANSI_X9_62 +#define OID_ORG_CERTICOM MBEDTLS_OID_ORG_CERTICOM +#define OID_ORG_DOD MBEDTLS_OID_ORG_DOD +#define OID_ORG_GOV MBEDTLS_OID_ORG_GOV +#define OID_ORG_NETSCAPE MBEDTLS_OID_ORG_NETSCAPE +#define OID_ORG_OIW MBEDTLS_OID_ORG_OIW +#define OID_ORG_RSA_DATA_SECURITY MBEDTLS_OID_ORG_RSA_DATA_SECURITY +#define OID_ORG_TELETRUST MBEDTLS_OID_ORG_TELETRUST +#define OID_PKCS MBEDTLS_OID_PKCS +#define OID_PKCS1 MBEDTLS_OID_PKCS1 +#define OID_PKCS12 MBEDTLS_OID_PKCS12 +#define OID_PKCS12_PBE MBEDTLS_OID_PKCS12_PBE +#define OID_PKCS12_PBE_SHA1_DES2_EDE_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_DES2_EDE_CBC +#define OID_PKCS12_PBE_SHA1_DES3_EDE_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC +#define OID_PKCS12_PBE_SHA1_RC2_128_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_RC2_128_CBC +#define OID_PKCS12_PBE_SHA1_RC2_40_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_RC2_40_CBC +#define OID_PKCS12_PBE_SHA1_RC4_128 MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_128 +#define OID_PKCS12_PBE_SHA1_RC4_40 MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_40 +#define OID_PKCS1_MD2 MBEDTLS_OID_PKCS1_MD2 +#define OID_PKCS1_MD4 MBEDTLS_OID_PKCS1_MD4 +#define OID_PKCS1_MD5 MBEDTLS_OID_PKCS1_MD5 +#define OID_PKCS1_RSA MBEDTLS_OID_PKCS1_RSA +#define OID_PKCS1_SHA1 MBEDTLS_OID_PKCS1_SHA1 +#define OID_PKCS1_SHA224 MBEDTLS_OID_PKCS1_SHA224 +#define OID_PKCS1_SHA256 MBEDTLS_OID_PKCS1_SHA256 +#define OID_PKCS1_SHA384 MBEDTLS_OID_PKCS1_SHA384 +#define OID_PKCS1_SHA512 MBEDTLS_OID_PKCS1_SHA512 +#define OID_PKCS5 MBEDTLS_OID_PKCS5 +#define OID_PKCS5_PBES2 MBEDTLS_OID_PKCS5_PBES2 +#define OID_PKCS5_PBE_MD2_DES_CBC MBEDTLS_OID_PKCS5_PBE_MD2_DES_CBC +#define OID_PKCS5_PBE_MD2_RC2_CBC MBEDTLS_OID_PKCS5_PBE_MD2_RC2_CBC +#define OID_PKCS5_PBE_MD5_DES_CBC MBEDTLS_OID_PKCS5_PBE_MD5_DES_CBC +#define OID_PKCS5_PBE_MD5_RC2_CBC MBEDTLS_OID_PKCS5_PBE_MD5_RC2_CBC +#define OID_PKCS5_PBE_SHA1_DES_CBC MBEDTLS_OID_PKCS5_PBE_SHA1_DES_CBC +#define OID_PKCS5_PBE_SHA1_RC2_CBC MBEDTLS_OID_PKCS5_PBE_SHA1_RC2_CBC +#define OID_PKCS5_PBKDF2 MBEDTLS_OID_PKCS5_PBKDF2 +#define OID_PKCS5_PBMAC1 MBEDTLS_OID_PKCS5_PBMAC1 +#define OID_PKCS9 MBEDTLS_OID_PKCS9 +#define OID_PKCS9_CSR_EXT_REQ MBEDTLS_OID_PKCS9_CSR_EXT_REQ +#define OID_PKCS9_EMAIL MBEDTLS_OID_PKCS9_EMAIL +#define OID_PKIX MBEDTLS_OID_PKIX +#define OID_POLICY_CONSTRAINTS MBEDTLS_OID_POLICY_CONSTRAINTS +#define OID_POLICY_MAPPINGS MBEDTLS_OID_POLICY_MAPPINGS +#define OID_PRIVATE_KEY_USAGE_PERIOD MBEDTLS_OID_PRIVATE_KEY_USAGE_PERIOD +#define OID_RSASSA_PSS MBEDTLS_OID_RSASSA_PSS +#define OID_RSA_COMPANY MBEDTLS_OID_RSA_COMPANY +#define OID_RSA_SHA_OBS MBEDTLS_OID_RSA_SHA_OBS +#define OID_SERVER_AUTH MBEDTLS_OID_SERVER_AUTH +#define OID_SIZE MBEDTLS_OID_SIZE +#define OID_SUBJECT_ALT_NAME MBEDTLS_OID_SUBJECT_ALT_NAME +#define OID_SUBJECT_DIRECTORY_ATTRS MBEDTLS_OID_SUBJECT_DIRECTORY_ATTRS +#define OID_SUBJECT_KEY_IDENTIFIER MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER +#define OID_TELETRUST MBEDTLS_OID_TELETRUST +#define OID_TIME_STAMPING MBEDTLS_OID_TIME_STAMPING +#define PADLOCK_ACE MBEDTLS_PADLOCK_ACE +#define PADLOCK_ALIGN16 MBEDTLS_PADLOCK_ALIGN16 +#define PADLOCK_PHE MBEDTLS_PADLOCK_PHE +#define PADLOCK_PMM MBEDTLS_PADLOCK_PMM +#define PADLOCK_RNG MBEDTLS_PADLOCK_RNG +#define PKCS12_DERIVE_IV MBEDTLS_PKCS12_DERIVE_IV +#define PKCS12_DERIVE_KEY MBEDTLS_PKCS12_DERIVE_KEY +#define PKCS12_DERIVE_MAC_KEY MBEDTLS_PKCS12_DERIVE_MAC_KEY +#define PKCS12_PBE_DECRYPT MBEDTLS_PKCS12_PBE_DECRYPT +#define PKCS12_PBE_ENCRYPT MBEDTLS_PKCS12_PBE_ENCRYPT +#define PKCS5_DECRYPT MBEDTLS_PKCS5_DECRYPT +#define PKCS5_ENCRYPT MBEDTLS_PKCS5_ENCRYPT +#define POLARSSL_AESNI_AES MBEDTLS_AESNI_AES +#define POLARSSL_AESNI_CLMUL MBEDTLS_AESNI_CLMUL +#define POLARSSL_AESNI_H MBEDTLS_AESNI_H +#define POLARSSL_AES_H MBEDTLS_AES_H +#define POLARSSL_ARC4_H MBEDTLS_ARC4_H +#define POLARSSL_ASN1_H MBEDTLS_ASN1_H +#define POLARSSL_ASN1_WRITE_H MBEDTLS_ASN1_WRITE_H +#define POLARSSL_BASE64_H MBEDTLS_BASE64_H +#define POLARSSL_BIGNUM_H MBEDTLS_BIGNUM_H +#define POLARSSL_BLOWFISH_H MBEDTLS_BLOWFISH_H +#define POLARSSL_BN_MUL_H MBEDTLS_BN_MUL_H +#define POLARSSL_CAMELLIA_H MBEDTLS_CAMELLIA_H +#define POLARSSL_CCM_H MBEDTLS_CCM_H +#define POLARSSL_CERTS_H MBEDTLS_CERTS_H +#define POLARSSL_CHECK_CONFIG_H MBEDTLS_CHECK_CONFIG_H +#define POLARSSL_CIPHERSUITE_NODTLS MBEDTLS_CIPHERSUITE_NODTLS +#define POLARSSL_CIPHERSUITE_SHORT_TAG MBEDTLS_CIPHERSUITE_SHORT_TAG +#define POLARSSL_CIPHERSUITE_WEAK MBEDTLS_CIPHERSUITE_WEAK +#define POLARSSL_CIPHER_AES_128_CBC MBEDTLS_CIPHER_AES_128_CBC +#define POLARSSL_CIPHER_AES_128_CCM MBEDTLS_CIPHER_AES_128_CCM +#define POLARSSL_CIPHER_AES_128_CFB128 MBEDTLS_CIPHER_AES_128_CFB128 +#define POLARSSL_CIPHER_AES_128_CTR MBEDTLS_CIPHER_AES_128_CTR +#define POLARSSL_CIPHER_AES_128_ECB MBEDTLS_CIPHER_AES_128_ECB +#define POLARSSL_CIPHER_AES_128_GCM MBEDTLS_CIPHER_AES_128_GCM +#define POLARSSL_CIPHER_AES_192_CBC MBEDTLS_CIPHER_AES_192_CBC +#define POLARSSL_CIPHER_AES_192_CCM MBEDTLS_CIPHER_AES_192_CCM +#define POLARSSL_CIPHER_AES_192_CFB128 MBEDTLS_CIPHER_AES_192_CFB128 +#define POLARSSL_CIPHER_AES_192_CTR MBEDTLS_CIPHER_AES_192_CTR +#define POLARSSL_CIPHER_AES_192_ECB MBEDTLS_CIPHER_AES_192_ECB +#define POLARSSL_CIPHER_AES_192_GCM MBEDTLS_CIPHER_AES_192_GCM +#define POLARSSL_CIPHER_AES_256_CBC MBEDTLS_CIPHER_AES_256_CBC +#define POLARSSL_CIPHER_AES_256_CCM MBEDTLS_CIPHER_AES_256_CCM +#define POLARSSL_CIPHER_AES_256_CFB128 MBEDTLS_CIPHER_AES_256_CFB128 +#define POLARSSL_CIPHER_AES_256_CTR MBEDTLS_CIPHER_AES_256_CTR +#define POLARSSL_CIPHER_AES_256_ECB MBEDTLS_CIPHER_AES_256_ECB +#define POLARSSL_CIPHER_AES_256_GCM MBEDTLS_CIPHER_AES_256_GCM +#define POLARSSL_CIPHER_ARC4_128 MBEDTLS_CIPHER_ARC4_128 +#define POLARSSL_CIPHER_BLOWFISH_CBC MBEDTLS_CIPHER_BLOWFISH_CBC +#define POLARSSL_CIPHER_BLOWFISH_CFB64 MBEDTLS_CIPHER_BLOWFISH_CFB64 +#define POLARSSL_CIPHER_BLOWFISH_CTR MBEDTLS_CIPHER_BLOWFISH_CTR +#define POLARSSL_CIPHER_BLOWFISH_ECB MBEDTLS_CIPHER_BLOWFISH_ECB +#define POLARSSL_CIPHER_CAMELLIA_128_CBC MBEDTLS_CIPHER_CAMELLIA_128_CBC +#define POLARSSL_CIPHER_CAMELLIA_128_CCM MBEDTLS_CIPHER_CAMELLIA_128_CCM +#define POLARSSL_CIPHER_CAMELLIA_128_CFB128 MBEDTLS_CIPHER_CAMELLIA_128_CFB128 +#define POLARSSL_CIPHER_CAMELLIA_128_CTR MBEDTLS_CIPHER_CAMELLIA_128_CTR +#define POLARSSL_CIPHER_CAMELLIA_128_ECB MBEDTLS_CIPHER_CAMELLIA_128_ECB +#define POLARSSL_CIPHER_CAMELLIA_128_GCM MBEDTLS_CIPHER_CAMELLIA_128_GCM +#define POLARSSL_CIPHER_CAMELLIA_192_CBC MBEDTLS_CIPHER_CAMELLIA_192_CBC +#define POLARSSL_CIPHER_CAMELLIA_192_CCM MBEDTLS_CIPHER_CAMELLIA_192_CCM +#define POLARSSL_CIPHER_CAMELLIA_192_CFB128 MBEDTLS_CIPHER_CAMELLIA_192_CFB128 +#define POLARSSL_CIPHER_CAMELLIA_192_CTR MBEDTLS_CIPHER_CAMELLIA_192_CTR +#define POLARSSL_CIPHER_CAMELLIA_192_ECB MBEDTLS_CIPHER_CAMELLIA_192_ECB +#define POLARSSL_CIPHER_CAMELLIA_192_GCM MBEDTLS_CIPHER_CAMELLIA_192_GCM +#define POLARSSL_CIPHER_CAMELLIA_256_CBC MBEDTLS_CIPHER_CAMELLIA_256_CBC +#define POLARSSL_CIPHER_CAMELLIA_256_CCM MBEDTLS_CIPHER_CAMELLIA_256_CCM +#define POLARSSL_CIPHER_CAMELLIA_256_CFB128 MBEDTLS_CIPHER_CAMELLIA_256_CFB128 +#define POLARSSL_CIPHER_CAMELLIA_256_CTR MBEDTLS_CIPHER_CAMELLIA_256_CTR +#define POLARSSL_CIPHER_CAMELLIA_256_ECB MBEDTLS_CIPHER_CAMELLIA_256_ECB +#define POLARSSL_CIPHER_CAMELLIA_256_GCM MBEDTLS_CIPHER_CAMELLIA_256_GCM +#define POLARSSL_CIPHER_DES_CBC MBEDTLS_CIPHER_DES_CBC +#define POLARSSL_CIPHER_DES_ECB MBEDTLS_CIPHER_DES_ECB +#define POLARSSL_CIPHER_DES_EDE3_CBC MBEDTLS_CIPHER_DES_EDE3_CBC +#define POLARSSL_CIPHER_DES_EDE3_ECB MBEDTLS_CIPHER_DES_EDE3_ECB +#define POLARSSL_CIPHER_DES_EDE_CBC MBEDTLS_CIPHER_DES_EDE_CBC +#define POLARSSL_CIPHER_DES_EDE_ECB MBEDTLS_CIPHER_DES_EDE_ECB +#define POLARSSL_CIPHER_H MBEDTLS_CIPHER_H +#define POLARSSL_CIPHER_ID_3DES MBEDTLS_CIPHER_ID_3DES +#define POLARSSL_CIPHER_ID_AES MBEDTLS_CIPHER_ID_AES +#define POLARSSL_CIPHER_ID_ARC4 MBEDTLS_CIPHER_ID_ARC4 +#define POLARSSL_CIPHER_ID_BLOWFISH MBEDTLS_CIPHER_ID_BLOWFISH +#define POLARSSL_CIPHER_ID_CAMELLIA MBEDTLS_CIPHER_ID_CAMELLIA +#define POLARSSL_CIPHER_ID_DES MBEDTLS_CIPHER_ID_DES +#define POLARSSL_CIPHER_ID_NONE MBEDTLS_CIPHER_ID_NONE +#define POLARSSL_CIPHER_ID_NULL MBEDTLS_CIPHER_ID_NULL +#define POLARSSL_CIPHER_MODE_AEAD MBEDTLS_CIPHER_MODE_AEAD +#define POLARSSL_CIPHER_MODE_STREAM MBEDTLS_CIPHER_MODE_STREAM +#define POLARSSL_CIPHER_MODE_WITH_PADDING MBEDTLS_CIPHER_MODE_WITH_PADDING +#define POLARSSL_CIPHER_NONE MBEDTLS_CIPHER_NONE +#define POLARSSL_CIPHER_NULL MBEDTLS_CIPHER_NULL +#define POLARSSL_CIPHER_VARIABLE_IV_LEN MBEDTLS_CIPHER_VARIABLE_IV_LEN +#define POLARSSL_CIPHER_VARIABLE_KEY_LEN MBEDTLS_CIPHER_VARIABLE_KEY_LEN +#define POLARSSL_CIPHER_WRAP_H MBEDTLS_CIPHER_WRAP_H +#define POLARSSL_CONFIG_H MBEDTLS_CONFIG_H +#define POLARSSL_CTR_DRBG_H MBEDTLS_CTR_DRBG_H +#define POLARSSL_DEBUG_H MBEDTLS_DEBUG_H +#define POLARSSL_DEBUG_LOG_FULL MBEDTLS_DEBUG_LOG_FULL +#define POLARSSL_DEBUG_LOG_RAW MBEDTLS_DEBUG_LOG_RAW +#define POLARSSL_DECRYPT MBEDTLS_DECRYPT +#define POLARSSL_DES_H MBEDTLS_DES_H +#define POLARSSL_DHM_H MBEDTLS_DHM_H +#define POLARSSL_DHM_RFC2409_MODP_1024_G MBEDTLS_DHM_RFC2409_MODP_1024_G +#define POLARSSL_DHM_RFC2409_MODP_1024_P MBEDTLS_DHM_RFC2409_MODP_1024_P +#define POLARSSL_DHM_RFC3526_MODP_2048_G MBEDTLS_DHM_RFC3526_MODP_2048_G +#define POLARSSL_DHM_RFC3526_MODP_2048_P MBEDTLS_DHM_RFC3526_MODP_2048_P +#define POLARSSL_DHM_RFC3526_MODP_3072_G MBEDTLS_DHM_RFC3526_MODP_3072_G +#define POLARSSL_DHM_RFC3526_MODP_3072_P MBEDTLS_DHM_RFC3526_MODP_3072_P +#define POLARSSL_DHM_RFC5114_MODP_1024_G MBEDTLS_DHM_RFC5114_MODP_1024_G +#define POLARSSL_DHM_RFC5114_MODP_1024_P MBEDTLS_DHM_RFC5114_MODP_1024_P +#define POLARSSL_DHM_RFC5114_MODP_2048_G MBEDTLS_DHM_RFC5114_MODP_2048_G +#define POLARSSL_DHM_RFC5114_MODP_2048_P MBEDTLS_DHM_RFC5114_MODP_2048_P +#define POLARSSL_ECDH_H MBEDTLS_ECDH_H +#define POLARSSL_ECDH_OURS MBEDTLS_ECDH_OURS +#define POLARSSL_ECDH_THEIRS MBEDTLS_ECDH_THEIRS +#define POLARSSL_ECDSA_H MBEDTLS_ECDSA_H +#define POLARSSL_ECP_DP_BP256R1 MBEDTLS_ECP_DP_BP256R1 +#define POLARSSL_ECP_DP_BP384R1 MBEDTLS_ECP_DP_BP384R1 +#define POLARSSL_ECP_DP_BP512R1 MBEDTLS_ECP_DP_BP512R1 +#define POLARSSL_ECP_DP_M255 MBEDTLS_ECP_DP_CURVE25519 +#define POLARSSL_ECP_DP_MAX MBEDTLS_ECP_DP_MAX +#define POLARSSL_ECP_DP_NONE MBEDTLS_ECP_DP_NONE +#define POLARSSL_ECP_DP_SECP192K1 MBEDTLS_ECP_DP_SECP192K1 +#define POLARSSL_ECP_DP_SECP192R1 MBEDTLS_ECP_DP_SECP192R1 +#define POLARSSL_ECP_DP_SECP224K1 MBEDTLS_ECP_DP_SECP224K1 +#define POLARSSL_ECP_DP_SECP224R1 MBEDTLS_ECP_DP_SECP224R1 +#define POLARSSL_ECP_DP_SECP256K1 MBEDTLS_ECP_DP_SECP256K1 +#define POLARSSL_ECP_DP_SECP256R1 MBEDTLS_ECP_DP_SECP256R1 +#define POLARSSL_ECP_DP_SECP384R1 MBEDTLS_ECP_DP_SECP384R1 +#define POLARSSL_ECP_DP_SECP521R1 MBEDTLS_ECP_DP_SECP521R1 +#define POLARSSL_ECP_H MBEDTLS_ECP_H +#define POLARSSL_ECP_MAX_BYTES MBEDTLS_ECP_MAX_BYTES +#define POLARSSL_ECP_MAX_PT_LEN MBEDTLS_ECP_MAX_PT_LEN +#define POLARSSL_ECP_PF_COMPRESSED MBEDTLS_ECP_PF_COMPRESSED +#define POLARSSL_ECP_PF_UNCOMPRESSED MBEDTLS_ECP_PF_UNCOMPRESSED +#define POLARSSL_ECP_TLS_NAMED_CURVE MBEDTLS_ECP_TLS_NAMED_CURVE +#define POLARSSL_ENCRYPT MBEDTLS_ENCRYPT +#define POLARSSL_ENTROPY_H MBEDTLS_ENTROPY_H +#define POLARSSL_ENTROPY_POLL_H MBEDTLS_ENTROPY_POLL_H +#define POLARSSL_ENTROPY_SHA256_ACCUMULATOR MBEDTLS_ENTROPY_SHA256_ACCUMULATOR +#define POLARSSL_ENTROPY_SHA512_ACCUMULATOR MBEDTLS_ENTROPY_SHA512_ACCUMULATOR +#define POLARSSL_ERROR_H MBEDTLS_ERROR_H +#define POLARSSL_ERR_AES_INVALID_INPUT_LENGTH MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH +#define POLARSSL_ERR_AES_INVALID_KEY_LENGTH MBEDTLS_ERR_AES_INVALID_KEY_LENGTH +#define POLARSSL_ERR_ASN1_BUF_TOO_SMALL MBEDTLS_ERR_ASN1_BUF_TOO_SMALL +#define POLARSSL_ERR_ASN1_INVALID_DATA MBEDTLS_ERR_ASN1_INVALID_DATA +#define POLARSSL_ERR_ASN1_INVALID_LENGTH MBEDTLS_ERR_ASN1_INVALID_LENGTH +#define POLARSSL_ERR_ASN1_LENGTH_MISMATCH MBEDTLS_ERR_ASN1_LENGTH_MISMATCH +#define POLARSSL_ERR_ASN1_MALLOC_FAILED MBEDTLS_ERR_ASN1_ALLOC_FAILED +#define POLARSSL_ERR_ASN1_OUT_OF_DATA MBEDTLS_ERR_ASN1_OUT_OF_DATA +#define POLARSSL_ERR_ASN1_UNEXPECTED_TAG MBEDTLS_ERR_ASN1_UNEXPECTED_TAG +#define POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL +#define POLARSSL_ERR_BASE64_INVALID_CHARACTER MBEDTLS_ERR_BASE64_INVALID_CHARACTER +#define POLARSSL_ERR_BLOWFISH_INVALID_INPUT_LENGTH MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH +#define POLARSSL_ERR_BLOWFISH_INVALID_KEY_LENGTH MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH +#define POLARSSL_ERR_CAMELLIA_INVALID_INPUT_LENGTH MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH +#define POLARSSL_ERR_CAMELLIA_INVALID_KEY_LENGTH MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH +#define POLARSSL_ERR_CCM_AUTH_FAILED MBEDTLS_ERR_CCM_AUTH_FAILED +#define POLARSSL_ERR_CCM_BAD_INPUT MBEDTLS_ERR_CCM_BAD_INPUT +#define POLARSSL_ERR_CIPHER_ALLOC_FAILED MBEDTLS_ERR_CIPHER_ALLOC_FAILED +#define POLARSSL_ERR_CIPHER_AUTH_FAILED MBEDTLS_ERR_CIPHER_AUTH_FAILED +#define POLARSSL_ERR_CIPHER_BAD_INPUT_DATA MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA +#define POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE +#define POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED +#define POLARSSL_ERR_CIPHER_INVALID_PADDING MBEDTLS_ERR_CIPHER_INVALID_PADDING +#define POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED +#define POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR +#define POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG +#define POLARSSL_ERR_CTR_DRBG_REQUEST_TOO_BIG MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG +#define POLARSSL_ERR_DES_INVALID_INPUT_LENGTH MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH +#define POLARSSL_ERR_DHM_BAD_INPUT_DATA MBEDTLS_ERR_DHM_BAD_INPUT_DATA +#define POLARSSL_ERR_DHM_CALC_SECRET_FAILED MBEDTLS_ERR_DHM_CALC_SECRET_FAILED +#define POLARSSL_ERR_DHM_FILE_IO_ERROR MBEDTLS_ERR_DHM_FILE_IO_ERROR +#define POLARSSL_ERR_DHM_INVALID_FORMAT MBEDTLS_ERR_DHM_INVALID_FORMAT +#define POLARSSL_ERR_DHM_MAKE_PARAMS_FAILED MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED +#define POLARSSL_ERR_DHM_MAKE_PUBLIC_FAILED MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED +#define POLARSSL_ERR_DHM_MALLOC_FAILED MBEDTLS_ERR_DHM_ALLOC_FAILED +#define POLARSSL_ERR_DHM_READ_PARAMS_FAILED MBEDTLS_ERR_DHM_READ_PARAMS_FAILED +#define POLARSSL_ERR_DHM_READ_PUBLIC_FAILED MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED +#define POLARSSL_ERR_ECP_BAD_INPUT_DATA MBEDTLS_ERR_ECP_BAD_INPUT_DATA +#define POLARSSL_ERR_ECP_BUFFER_TOO_SMALL MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL +#define POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE +#define POLARSSL_ERR_ECP_INVALID_KEY MBEDTLS_ERR_ECP_INVALID_KEY +#define POLARSSL_ERR_ECP_MALLOC_FAILED MBEDTLS_ERR_ECP_ALLOC_FAILED +#define POLARSSL_ERR_ECP_RANDOM_FAILED MBEDTLS_ERR_ECP_RANDOM_FAILED +#define POLARSSL_ERR_ECP_SIG_LEN_MISMATCH MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH +#define POLARSSL_ERR_ECP_VERIFY_FAILED MBEDTLS_ERR_ECP_VERIFY_FAILED +#define POLARSSL_ERR_ENTROPY_FILE_IO_ERROR MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR +#define POLARSSL_ERR_ENTROPY_MAX_SOURCES MBEDTLS_ERR_ENTROPY_MAX_SOURCES +#define POLARSSL_ERR_ENTROPY_NO_SOURCES_DEFINED MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED +#define POLARSSL_ERR_ENTROPY_SOURCE_FAILED MBEDTLS_ERR_ENTROPY_SOURCE_FAILED +#define POLARSSL_ERR_GCM_AUTH_FAILED MBEDTLS_ERR_GCM_AUTH_FAILED +#define POLARSSL_ERR_GCM_BAD_INPUT MBEDTLS_ERR_GCM_BAD_INPUT +#define POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED +#define POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR +#define POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG +#define POLARSSL_ERR_HMAC_DRBG_REQUEST_TOO_BIG MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG +#define POLARSSL_ERR_MD2_FILE_IO_ERROR MBEDTLS_ERR_MD2_FILE_IO_ERROR +#define POLARSSL_ERR_MD4_FILE_IO_ERROR MBEDTLS_ERR_MD4_FILE_IO_ERROR +#define POLARSSL_ERR_MD5_FILE_IO_ERROR MBEDTLS_ERR_MD5_FILE_IO_ERROR +#define POLARSSL_ERR_MD_ALLOC_FAILED MBEDTLS_ERR_MD_ALLOC_FAILED +#define POLARSSL_ERR_MD_BAD_INPUT_DATA MBEDTLS_ERR_MD_BAD_INPUT_DATA +#define POLARSSL_ERR_MD_FEATURE_UNAVAILABLE MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE +#define POLARSSL_ERR_MD_FILE_IO_ERROR MBEDTLS_ERR_MD_FILE_IO_ERROR +#define POLARSSL_ERR_MPI_BAD_INPUT_DATA MBEDTLS_ERR_MPI_BAD_INPUT_DATA +#define POLARSSL_ERR_MPI_BUFFER_TOO_SMALL MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL +#define POLARSSL_ERR_MPI_DIVISION_BY_ZERO MBEDTLS_ERR_MPI_DIVISION_BY_ZERO +#define POLARSSL_ERR_MPI_FILE_IO_ERROR MBEDTLS_ERR_MPI_FILE_IO_ERROR +#define POLARSSL_ERR_MPI_INVALID_CHARACTER MBEDTLS_ERR_MPI_INVALID_CHARACTER +#define POLARSSL_ERR_MPI_MALLOC_FAILED MBEDTLS_ERR_MPI_ALLOC_FAILED +#define POLARSSL_ERR_MPI_NEGATIVE_VALUE MBEDTLS_ERR_MPI_NEGATIVE_VALUE +#define POLARSSL_ERR_MPI_NOT_ACCEPTABLE MBEDTLS_ERR_MPI_NOT_ACCEPTABLE +#define POLARSSL_ERR_NET_ACCEPT_FAILED MBEDTLS_ERR_NET_ACCEPT_FAILED +#define POLARSSL_ERR_NET_BIND_FAILED MBEDTLS_ERR_NET_BIND_FAILED +#define POLARSSL_ERR_NET_CONNECT_FAILED MBEDTLS_ERR_NET_CONNECT_FAILED +#define POLARSSL_ERR_NET_CONN_RESET MBEDTLS_ERR_NET_CONN_RESET +#define POLARSSL_ERR_NET_LISTEN_FAILED MBEDTLS_ERR_NET_LISTEN_FAILED +#define POLARSSL_ERR_NET_RECV_FAILED MBEDTLS_ERR_NET_RECV_FAILED +#define POLARSSL_ERR_NET_SEND_FAILED MBEDTLS_ERR_NET_SEND_FAILED +#define POLARSSL_ERR_NET_SOCKET_FAILED MBEDTLS_ERR_NET_SOCKET_FAILED +#define POLARSSL_ERR_NET_TIMEOUT MBEDTLS_ERR_SSL_TIMEOUT +#define POLARSSL_ERR_NET_UNKNOWN_HOST MBEDTLS_ERR_NET_UNKNOWN_HOST +#define POLARSSL_ERR_NET_WANT_READ MBEDTLS_ERR_SSL_WANT_READ +#define POLARSSL_ERR_NET_WANT_WRITE MBEDTLS_ERR_SSL_WANT_WRITE +#define POLARSSL_ERR_OID_BUF_TOO_SMALL MBEDTLS_ERR_OID_BUF_TOO_SMALL +#define POLARSSL_ERR_OID_NOT_FOUND MBEDTLS_ERR_OID_NOT_FOUND +#define POLARSSL_ERR_PADLOCK_DATA_MISALIGNED MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED +#define POLARSSL_ERR_PBKDF2_BAD_INPUT_DATA MBEDTLS_ERR_PBKDF2_BAD_INPUT_DATA +#define POLARSSL_ERR_PEM_BAD_INPUT_DATA MBEDTLS_ERR_PEM_BAD_INPUT_DATA +#define POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE +#define POLARSSL_ERR_PEM_INVALID_DATA MBEDTLS_ERR_PEM_INVALID_DATA +#define POLARSSL_ERR_PEM_INVALID_ENC_IV MBEDTLS_ERR_PEM_INVALID_ENC_IV +#define POLARSSL_ERR_PEM_MALLOC_FAILED MBEDTLS_ERR_PEM_ALLOC_FAILED +#define POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT +#define POLARSSL_ERR_PEM_PASSWORD_MISMATCH MBEDTLS_ERR_PEM_PASSWORD_MISMATCH +#define POLARSSL_ERR_PEM_PASSWORD_REQUIRED MBEDTLS_ERR_PEM_PASSWORD_REQUIRED +#define POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG +#define POLARSSL_ERR_PKCS12_BAD_INPUT_DATA MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA +#define POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE +#define POLARSSL_ERR_PKCS12_PASSWORD_MISMATCH MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH +#define POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT +#define POLARSSL_ERR_PKCS5_BAD_INPUT_DATA MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA +#define POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE +#define POLARSSL_ERR_PKCS5_INVALID_FORMAT MBEDTLS_ERR_PKCS5_INVALID_FORMAT +#define POLARSSL_ERR_PKCS5_PASSWORD_MISMATCH MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH +#define POLARSSL_ERR_PK_BAD_INPUT_DATA MBEDTLS_ERR_PK_BAD_INPUT_DATA +#define POLARSSL_ERR_PK_FEATURE_UNAVAILABLE MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE +#define POLARSSL_ERR_PK_FILE_IO_ERROR MBEDTLS_ERR_PK_FILE_IO_ERROR +#define POLARSSL_ERR_PK_INVALID_ALG MBEDTLS_ERR_PK_INVALID_ALG +#define POLARSSL_ERR_PK_INVALID_PUBKEY MBEDTLS_ERR_PK_INVALID_PUBKEY +#define POLARSSL_ERR_PK_KEY_INVALID_FORMAT MBEDTLS_ERR_PK_KEY_INVALID_FORMAT +#define POLARSSL_ERR_PK_KEY_INVALID_VERSION MBEDTLS_ERR_PK_KEY_INVALID_VERSION +#define POLARSSL_ERR_PK_MALLOC_FAILED MBEDTLS_ERR_PK_ALLOC_FAILED +#define POLARSSL_ERR_PK_PASSWORD_MISMATCH MBEDTLS_ERR_PK_PASSWORD_MISMATCH +#define POLARSSL_ERR_PK_PASSWORD_REQUIRED MBEDTLS_ERR_PK_PASSWORD_REQUIRED +#define POLARSSL_ERR_PK_SIG_LEN_MISMATCH MBEDTLS_ERR_PK_SIG_LEN_MISMATCH +#define POLARSSL_ERR_PK_TYPE_MISMATCH MBEDTLS_ERR_PK_TYPE_MISMATCH +#define POLARSSL_ERR_PK_UNKNOWN_NAMED_CURVE MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE +#define POLARSSL_ERR_PK_UNKNOWN_PK_ALG MBEDTLS_ERR_PK_UNKNOWN_PK_ALG +#define POLARSSL_ERR_RIPEMD160_FILE_IO_ERROR MBEDTLS_ERR_RIPEMD160_FILE_IO_ERROR +#define POLARSSL_ERR_RSA_BAD_INPUT_DATA MBEDTLS_ERR_RSA_BAD_INPUT_DATA +#define POLARSSL_ERR_RSA_INVALID_PADDING MBEDTLS_ERR_RSA_INVALID_PADDING +#define POLARSSL_ERR_RSA_KEY_CHECK_FAILED MBEDTLS_ERR_RSA_KEY_CHECK_FAILED +#define POLARSSL_ERR_RSA_KEY_GEN_FAILED MBEDTLS_ERR_RSA_KEY_GEN_FAILED +#define POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE +#define POLARSSL_ERR_RSA_PRIVATE_FAILED MBEDTLS_ERR_RSA_PRIVATE_FAILED +#define POLARSSL_ERR_RSA_PUBLIC_FAILED MBEDTLS_ERR_RSA_PUBLIC_FAILED +#define POLARSSL_ERR_RSA_RNG_FAILED MBEDTLS_ERR_RSA_RNG_FAILED +#define POLARSSL_ERR_RSA_VERIFY_FAILED MBEDTLS_ERR_RSA_VERIFY_FAILED +#define POLARSSL_ERR_SHA1_FILE_IO_ERROR MBEDTLS_ERR_SHA1_FILE_IO_ERROR +#define POLARSSL_ERR_SHA256_FILE_IO_ERROR MBEDTLS_ERR_SHA256_FILE_IO_ERROR +#define POLARSSL_ERR_SHA512_FILE_IO_ERROR MBEDTLS_ERR_SHA512_FILE_IO_ERROR +#define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE +#define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST +#define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY +#define POLARSSL_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC +#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO +#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE +#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS +#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP +#define POLARSSL_ERR_SSL_BAD_HS_FINISHED MBEDTLS_ERR_SSL_BAD_HS_FINISHED +#define POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET +#define POLARSSL_ERR_SSL_BAD_HS_PROTOCOL_VERSION MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION +#define POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO +#define POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO_DONE MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE +#define POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE +#define POLARSSL_ERR_SSL_BAD_INPUT_DATA MBEDTLS_ERR_SSL_BAD_INPUT_DATA +#define POLARSSL_ERR_SSL_BUFFER_TOO_SMALL MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL +#define POLARSSL_ERR_SSL_CA_CHAIN_REQUIRED MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED +#define POLARSSL_ERR_SSL_CERTIFICATE_REQUIRED MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED +#define POLARSSL_ERR_SSL_CERTIFICATE_TOO_LARGE MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE +#define POLARSSL_ERR_SSL_COMPRESSION_FAILED MBEDTLS_ERR_SSL_COMPRESSION_FAILED +#define POLARSSL_ERR_SSL_CONN_EOF MBEDTLS_ERR_SSL_CONN_EOF +#define POLARSSL_ERR_SSL_COUNTER_WRAPPING MBEDTLS_ERR_SSL_COUNTER_WRAPPING +#define POLARSSL_ERR_SSL_FATAL_ALERT_MESSAGE MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE +#define POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE +#define POLARSSL_ERR_SSL_HELLO_VERIFY_REQUIRED MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED +#define POLARSSL_ERR_SSL_HW_ACCEL_FAILED MBEDTLS_ERR_SSL_HW_ACCEL_FAILED +#define POLARSSL_ERR_SSL_HW_ACCEL_FALLTHROUGH MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH +#define POLARSSL_ERR_SSL_INTERNAL_ERROR MBEDTLS_ERR_SSL_INTERNAL_ERROR +#define POLARSSL_ERR_SSL_INVALID_MAC MBEDTLS_ERR_SSL_INVALID_MAC +#define POLARSSL_ERR_SSL_INVALID_RECORD MBEDTLS_ERR_SSL_INVALID_RECORD +#define POLARSSL_ERR_SSL_MALLOC_FAILED MBEDTLS_ERR_SSL_ALLOC_FAILED +#define POLARSSL_ERR_SSL_NO_CIPHER_CHOSEN MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN +#define POLARSSL_ERR_SSL_NO_CLIENT_CERTIFICATE MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE +#define POLARSSL_ERR_SSL_NO_RNG MBEDTLS_ERR_SSL_NO_RNG +#define POLARSSL_ERR_SSL_NO_USABLE_CIPHERSUITE MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE +#define POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY +#define POLARSSL_ERR_SSL_PEER_VERIFY_FAILED MBEDTLS_ERR_SSL_PEER_VERIFY_FAILED +#define POLARSSL_ERR_SSL_PK_TYPE_MISMATCH MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH +#define POLARSSL_ERR_SSL_PRIVATE_KEY_REQUIRED MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED +#define POLARSSL_ERR_SSL_SESSION_TICKET_EXPIRED MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED +#define POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE +#define POLARSSL_ERR_SSL_UNKNOWN_CIPHER MBEDTLS_ERR_SSL_UNKNOWN_CIPHER +#define POLARSSL_ERR_SSL_UNKNOWN_IDENTITY MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY +#define POLARSSL_ERR_SSL_WAITING_SERVER_HELLO_RENEGO MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO +#define POLARSSL_ERR_THREADING_BAD_INPUT_DATA MBEDTLS_ERR_THREADING_BAD_INPUT_DATA +#define POLARSSL_ERR_THREADING_FEATURE_UNAVAILABLE MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE +#define POLARSSL_ERR_THREADING_MUTEX_ERROR MBEDTLS_ERR_THREADING_MUTEX_ERROR +#define POLARSSL_ERR_X509_BAD_INPUT_DATA MBEDTLS_ERR_X509_BAD_INPUT_DATA +#define POLARSSL_ERR_X509_CERT_UNKNOWN_FORMAT MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT +#define POLARSSL_ERR_X509_CERT_VERIFY_FAILED MBEDTLS_ERR_X509_CERT_VERIFY_FAILED +#define POLARSSL_ERR_X509_FEATURE_UNAVAILABLE MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE +#define POLARSSL_ERR_X509_FILE_IO_ERROR MBEDTLS_ERR_X509_FILE_IO_ERROR +#define POLARSSL_ERR_X509_INVALID_ALG MBEDTLS_ERR_X509_INVALID_ALG +#define POLARSSL_ERR_X509_INVALID_DATE MBEDTLS_ERR_X509_INVALID_DATE +#define POLARSSL_ERR_X509_INVALID_EXTENSIONS MBEDTLS_ERR_X509_INVALID_EXTENSIONS +#define POLARSSL_ERR_X509_INVALID_FORMAT MBEDTLS_ERR_X509_INVALID_FORMAT +#define POLARSSL_ERR_X509_INVALID_NAME MBEDTLS_ERR_X509_INVALID_NAME +#define POLARSSL_ERR_X509_INVALID_SERIAL MBEDTLS_ERR_X509_INVALID_SERIAL +#define POLARSSL_ERR_X509_INVALID_SIGNATURE MBEDTLS_ERR_X509_INVALID_SIGNATURE +#define POLARSSL_ERR_X509_INVALID_VERSION MBEDTLS_ERR_X509_INVALID_VERSION +#define POLARSSL_ERR_X509_MALLOC_FAILED MBEDTLS_ERR_X509_ALLOC_FAILED +#define POLARSSL_ERR_X509_SIG_MISMATCH MBEDTLS_ERR_X509_SIG_MISMATCH +#define POLARSSL_ERR_X509_UNKNOWN_OID MBEDTLS_ERR_X509_UNKNOWN_OID +#define POLARSSL_ERR_X509_UNKNOWN_SIG_ALG MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG +#define POLARSSL_ERR_X509_UNKNOWN_VERSION MBEDTLS_ERR_X509_UNKNOWN_VERSION +#define POLARSSL_ERR_XTEA_INVALID_INPUT_LENGTH MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH +#define POLARSSL_GCM_H MBEDTLS_GCM_H +#define POLARSSL_HAVEGE_H MBEDTLS_HAVEGE_H +#define POLARSSL_HAVE_INT32 MBEDTLS_HAVE_INT32 +#define POLARSSL_HAVE_INT64 MBEDTLS_HAVE_INT64 +#define POLARSSL_HAVE_UDBL MBEDTLS_HAVE_UDBL +#define POLARSSL_HAVE_X86 MBEDTLS_HAVE_X86 +#define POLARSSL_HAVE_X86_64 MBEDTLS_HAVE_X86_64 +#define POLARSSL_HMAC_DRBG_H MBEDTLS_HMAC_DRBG_H +#define POLARSSL_HMAC_DRBG_PR_OFF MBEDTLS_HMAC_DRBG_PR_OFF +#define POLARSSL_HMAC_DRBG_PR_ON MBEDTLS_HMAC_DRBG_PR_ON +#define POLARSSL_KEY_EXCHANGE_DHE_PSK MBEDTLS_KEY_EXCHANGE_DHE_PSK +#define POLARSSL_KEY_EXCHANGE_DHE_RSA MBEDTLS_KEY_EXCHANGE_DHE_RSA +#define POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA +#define POLARSSL_KEY_EXCHANGE_ECDHE_PSK MBEDTLS_KEY_EXCHANGE_ECDHE_PSK +#define POLARSSL_KEY_EXCHANGE_ECDHE_RSA MBEDTLS_KEY_EXCHANGE_ECDHE_RSA +#define POLARSSL_KEY_EXCHANGE_ECDH_ECDSA MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA +#define POLARSSL_KEY_EXCHANGE_ECDH_RSA MBEDTLS_KEY_EXCHANGE_ECDH_RSA +#define POLARSSL_KEY_EXCHANGE_NONE MBEDTLS_KEY_EXCHANGE_NONE +#define POLARSSL_KEY_EXCHANGE_PSK MBEDTLS_KEY_EXCHANGE_PSK +#define POLARSSL_KEY_EXCHANGE_RSA MBEDTLS_KEY_EXCHANGE_RSA +#define POLARSSL_KEY_EXCHANGE_RSA_PSK MBEDTLS_KEY_EXCHANGE_RSA_PSK +#define POLARSSL_KEY_EXCHANGE__SOME__ECDHE_ENABLED MBEDTLS_KEY_EXCHANGE__SOME__ECDHE_ENABLED +#define POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED +#define POLARSSL_KEY_EXCHANGE__WITH_CERT__ENABLED MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED +#define POLARSSL_KEY_LENGTH_DES MBEDTLS_KEY_LENGTH_DES +#define POLARSSL_KEY_LENGTH_DES_EDE MBEDTLS_KEY_LENGTH_DES_EDE +#define POLARSSL_KEY_LENGTH_DES_EDE3 MBEDTLS_KEY_LENGTH_DES_EDE3 +#define POLARSSL_KEY_LENGTH_NONE MBEDTLS_KEY_LENGTH_NONE +#define POLARSSL_MAX_BLOCK_LENGTH MBEDTLS_MAX_BLOCK_LENGTH +#define POLARSSL_MAX_IV_LENGTH MBEDTLS_MAX_IV_LENGTH +#define POLARSSL_MD2_H MBEDTLS_MD2_H +#define POLARSSL_MD4_H MBEDTLS_MD4_H +#define POLARSSL_MD5_H MBEDTLS_MD5_H +#define POLARSSL_MD_H MBEDTLS_MD_H +#define POLARSSL_MD_MAX_SIZE MBEDTLS_MD_MAX_SIZE +#define POLARSSL_MD_MD2 MBEDTLS_MD_MD2 +#define POLARSSL_MD_MD4 MBEDTLS_MD_MD4 +#define POLARSSL_MD_MD5 MBEDTLS_MD_MD5 +#define POLARSSL_MD_NONE MBEDTLS_MD_NONE +#define POLARSSL_MD_RIPEMD160 MBEDTLS_MD_RIPEMD160 +#define POLARSSL_MD_SHA1 MBEDTLS_MD_SHA1 +#define POLARSSL_MD_SHA224 MBEDTLS_MD_SHA224 +#define POLARSSL_MD_SHA256 MBEDTLS_MD_SHA256 +#define POLARSSL_MD_SHA384 MBEDTLS_MD_SHA384 +#define POLARSSL_MD_SHA512 MBEDTLS_MD_SHA512 +#define POLARSSL_MD_WRAP_H MBEDTLS_MD_WRAP_H +#define POLARSSL_MEMORY_BUFFER_ALLOC_H MBEDTLS_MEMORY_BUFFER_ALLOC_H +#define POLARSSL_MEMORY_H MBEDTLS_MEMORY_H +#define POLARSSL_MODE_CBC MBEDTLS_MODE_CBC +#define POLARSSL_MODE_CCM MBEDTLS_MODE_CCM +#define POLARSSL_MODE_CFB MBEDTLS_MODE_CFB +#define POLARSSL_MODE_CTR MBEDTLS_MODE_CTR +#define POLARSSL_MODE_ECB MBEDTLS_MODE_ECB +#define POLARSSL_MODE_GCM MBEDTLS_MODE_GCM +#define POLARSSL_MODE_NONE MBEDTLS_MODE_NONE +#define POLARSSL_MODE_OFB MBEDTLS_MODE_OFB +#define POLARSSL_MODE_STREAM MBEDTLS_MODE_STREAM +#define POLARSSL_MPI_MAX_BITS MBEDTLS_MPI_MAX_BITS +#define POLARSSL_MPI_MAX_BITS_SCALE100 MBEDTLS_MPI_MAX_BITS_SCALE100 +#define POLARSSL_MPI_MAX_LIMBS MBEDTLS_MPI_MAX_LIMBS +#define POLARSSL_MPI_RW_BUFFER_SIZE MBEDTLS_MPI_RW_BUFFER_SIZE +#define POLARSSL_NET_H MBEDTLS_NET_H +#define POLARSSL_NET_LISTEN_BACKLOG MBEDTLS_NET_LISTEN_BACKLOG +#define POLARSSL_OID_H MBEDTLS_OID_H +#define POLARSSL_OPERATION_NONE MBEDTLS_OPERATION_NONE +#define POLARSSL_PADDING_NONE MBEDTLS_PADDING_NONE +#define POLARSSL_PADDING_ONE_AND_ZEROS MBEDTLS_PADDING_ONE_AND_ZEROS +#define POLARSSL_PADDING_PKCS7 MBEDTLS_PADDING_PKCS7 +#define POLARSSL_PADDING_ZEROS MBEDTLS_PADDING_ZEROS +#define POLARSSL_PADDING_ZEROS_AND_LEN MBEDTLS_PADDING_ZEROS_AND_LEN +#define POLARSSL_PADLOCK_H MBEDTLS_PADLOCK_H +#define POLARSSL_PBKDF2_H MBEDTLS_PBKDF2_H +#define POLARSSL_PEM_H MBEDTLS_PEM_H +#define POLARSSL_PKCS11_H MBEDTLS_PKCS11_H +#define POLARSSL_PKCS12_H MBEDTLS_PKCS12_H +#define POLARSSL_PKCS5_H MBEDTLS_PKCS5_H +#define POLARSSL_PK_DEBUG_ECP MBEDTLS_PK_DEBUG_ECP +#define POLARSSL_PK_DEBUG_MAX_ITEMS MBEDTLS_PK_DEBUG_MAX_ITEMS +#define POLARSSL_PK_DEBUG_MPI MBEDTLS_PK_DEBUG_MPI +#define POLARSSL_PK_DEBUG_NONE MBEDTLS_PK_DEBUG_NONE +#define POLARSSL_PK_ECDSA MBEDTLS_PK_ECDSA +#define POLARSSL_PK_ECKEY MBEDTLS_PK_ECKEY +#define POLARSSL_PK_ECKEY_DH MBEDTLS_PK_ECKEY_DH +#define POLARSSL_PK_H MBEDTLS_PK_H +#define POLARSSL_PK_NONE MBEDTLS_PK_NONE +#define POLARSSL_PK_RSA MBEDTLS_PK_RSA +#define POLARSSL_PK_RSASSA_PSS MBEDTLS_PK_RSASSA_PSS +#define POLARSSL_PK_RSA_ALT MBEDTLS_PK_RSA_ALT +#define POLARSSL_PK_WRAP_H MBEDTLS_PK_WRAP_H +#define POLARSSL_PLATFORM_H MBEDTLS_PLATFORM_H +#define POLARSSL_PREMASTER_SIZE MBEDTLS_PREMASTER_SIZE +#define POLARSSL_RIPEMD160_H MBEDTLS_RIPEMD160_H +#define POLARSSL_RSA_H MBEDTLS_RSA_H +#define POLARSSL_SHA1_H MBEDTLS_SHA1_H +#define POLARSSL_SHA256_H MBEDTLS_SHA256_H +#define POLARSSL_SHA512_H MBEDTLS_SHA512_H +#define POLARSSL_SSL_CACHE_H MBEDTLS_SSL_CACHE_H +#define POLARSSL_SSL_CIPHERSUITES_H MBEDTLS_SSL_CIPHERSUITES_H +#define POLARSSL_SSL_COOKIE_H MBEDTLS_SSL_COOKIE_H +#define POLARSSL_SSL_H MBEDTLS_SSL_H +#define POLARSSL_THREADING_H MBEDTLS_THREADING_H +#define POLARSSL_THREADING_IMPL MBEDTLS_THREADING_IMPL +#define POLARSSL_TIMING_H MBEDTLS_TIMING_H +#define POLARSSL_VERSION_H MBEDTLS_VERSION_H +#define POLARSSL_VERSION_MAJOR MBEDTLS_VERSION_MAJOR +#define POLARSSL_VERSION_MINOR MBEDTLS_VERSION_MINOR +#define POLARSSL_VERSION_NUMBER MBEDTLS_VERSION_NUMBER +#define POLARSSL_VERSION_PATCH MBEDTLS_VERSION_PATCH +#define POLARSSL_VERSION_STRING MBEDTLS_VERSION_STRING +#define POLARSSL_VERSION_STRING_FULL MBEDTLS_VERSION_STRING_FULL +#define POLARSSL_X509_CRL_H MBEDTLS_X509_CRL_H +#define POLARSSL_X509_CRT_H MBEDTLS_X509_CRT_H +#define POLARSSL_X509_CSR_H MBEDTLS_X509_CSR_H +#define POLARSSL_X509_H MBEDTLS_X509_H +#define POLARSSL_XTEA_H MBEDTLS_XTEA_H +#define RSA_CRYPT MBEDTLS_RSA_CRYPT +#define RSA_PKCS_V15 MBEDTLS_RSA_PKCS_V15 +#define RSA_PKCS_V21 MBEDTLS_RSA_PKCS_V21 +#define RSA_PRIVATE MBEDTLS_RSA_PRIVATE +#define RSA_PUBLIC MBEDTLS_RSA_PUBLIC +#define RSA_SALT_LEN_ANY MBEDTLS_RSA_SALT_LEN_ANY +#define RSA_SIGN MBEDTLS_RSA_SIGN +#define SSL_ALERT_LEVEL_FATAL MBEDTLS_SSL_ALERT_LEVEL_FATAL +#define SSL_ALERT_LEVEL_WARNING MBEDTLS_SSL_ALERT_LEVEL_WARNING +#define SSL_ALERT_MSG_ACCESS_DENIED MBEDTLS_SSL_ALERT_MSG_ACCESS_DENIED +#define SSL_ALERT_MSG_BAD_CERT MBEDTLS_SSL_ALERT_MSG_BAD_CERT +#define SSL_ALERT_MSG_BAD_RECORD_MAC MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC +#define SSL_ALERT_MSG_CERT_EXPIRED MBEDTLS_SSL_ALERT_MSG_CERT_EXPIRED +#define SSL_ALERT_MSG_CERT_REVOKED MBEDTLS_SSL_ALERT_MSG_CERT_REVOKED +#define SSL_ALERT_MSG_CERT_UNKNOWN MBEDTLS_SSL_ALERT_MSG_CERT_UNKNOWN +#define SSL_ALERT_MSG_CLOSE_NOTIFY MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY +#define SSL_ALERT_MSG_DECODE_ERROR MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR +#define SSL_ALERT_MSG_DECOMPRESSION_FAILURE MBEDTLS_SSL_ALERT_MSG_DECOMPRESSION_FAILURE +#define SSL_ALERT_MSG_DECRYPTION_FAILED MBEDTLS_SSL_ALERT_MSG_DECRYPTION_FAILED +#define SSL_ALERT_MSG_DECRYPT_ERROR MBEDTLS_SSL_ALERT_MSG_DECRYPT_ERROR +#define SSL_ALERT_MSG_EXPORT_RESTRICTION MBEDTLS_SSL_ALERT_MSG_EXPORT_RESTRICTION +#define SSL_ALERT_MSG_HANDSHAKE_FAILURE MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE +#define SSL_ALERT_MSG_ILLEGAL_PARAMETER MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER +#define SSL_ALERT_MSG_INAPROPRIATE_FALLBACK MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK +#define SSL_ALERT_MSG_INSUFFICIENT_SECURITY MBEDTLS_SSL_ALERT_MSG_INSUFFICIENT_SECURITY +#define SSL_ALERT_MSG_INTERNAL_ERROR MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR +#define SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL +#define SSL_ALERT_MSG_NO_CERT MBEDTLS_SSL_ALERT_MSG_NO_CERT +#define SSL_ALERT_MSG_NO_RENEGOTIATION MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION +#define SSL_ALERT_MSG_PROTOCOL_VERSION MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION +#define SSL_ALERT_MSG_RECORD_OVERFLOW MBEDTLS_SSL_ALERT_MSG_RECORD_OVERFLOW +#define SSL_ALERT_MSG_UNEXPECTED_MESSAGE MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE +#define SSL_ALERT_MSG_UNKNOWN_CA MBEDTLS_SSL_ALERT_MSG_UNKNOWN_CA +#define SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY +#define SSL_ALERT_MSG_UNRECOGNIZED_NAME MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME +#define SSL_ALERT_MSG_UNSUPPORTED_CERT MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_CERT +#define SSL_ALERT_MSG_UNSUPPORTED_EXT MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT +#define SSL_ALERT_MSG_USER_CANCELED MBEDTLS_SSL_ALERT_MSG_USER_CANCELED +#define SSL_ANTI_REPLAY_DISABLED MBEDTLS_SSL_ANTI_REPLAY_DISABLED +#define SSL_ANTI_REPLAY_ENABLED MBEDTLS_SSL_ANTI_REPLAY_ENABLED +#define SSL_ARC4_DISABLED MBEDTLS_SSL_ARC4_DISABLED +#define SSL_ARC4_ENABLED MBEDTLS_SSL_ARC4_ENABLED +#define SSL_BUFFER_LEN MBEDTLS_SSL_BUFFER_LEN +#define SSL_CACHE_DEFAULT_MAX_ENTRIES MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES +#define SSL_CACHE_DEFAULT_TIMEOUT MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT +#define SSL_CBC_RECORD_SPLITTING_DISABLED MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED +#define SSL_CBC_RECORD_SPLITTING_ENABLED MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED +#define SSL_CERTIFICATE_REQUEST MBEDTLS_SSL_CERTIFICATE_REQUEST +#define SSL_CERTIFICATE_VERIFY MBEDTLS_SSL_CERTIFICATE_VERIFY +#define SSL_CERT_TYPE_ECDSA_SIGN MBEDTLS_SSL_CERT_TYPE_ECDSA_SIGN +#define SSL_CERT_TYPE_RSA_SIGN MBEDTLS_SSL_CERT_TYPE_RSA_SIGN +#define SSL_CHANNEL_INBOUND MBEDTLS_SSL_CHANNEL_INBOUND +#define SSL_CHANNEL_OUTBOUND MBEDTLS_SSL_CHANNEL_OUTBOUND +#define SSL_CIPHERSUITES MBEDTLS_SSL_CIPHERSUITES +#define SSL_CLIENT_CERTIFICATE MBEDTLS_SSL_CLIENT_CERTIFICATE +#define SSL_CLIENT_CHANGE_CIPHER_SPEC MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC +#define SSL_CLIENT_FINISHED MBEDTLS_SSL_CLIENT_FINISHED +#define SSL_CLIENT_HELLO MBEDTLS_SSL_CLIENT_HELLO +#define SSL_CLIENT_KEY_EXCHANGE MBEDTLS_SSL_CLIENT_KEY_EXCHANGE +#define SSL_COMPRESSION_ADD MBEDTLS_SSL_COMPRESSION_ADD +#define SSL_COMPRESS_DEFLATE MBEDTLS_SSL_COMPRESS_DEFLATE +#define SSL_COMPRESS_NULL MBEDTLS_SSL_COMPRESS_NULL +#define SSL_DEBUG_BUF MBEDTLS_SSL_DEBUG_BUF +#define SSL_DEBUG_CRT MBEDTLS_SSL_DEBUG_CRT +#define SSL_DEBUG_ECP MBEDTLS_SSL_DEBUG_ECP +#define SSL_DEBUG_MPI MBEDTLS_SSL_DEBUG_MPI +#define SSL_DEBUG_MSG MBEDTLS_SSL_DEBUG_MSG +#define SSL_DEBUG_RET MBEDTLS_SSL_DEBUG_RET +#define SSL_DEFAULT_TICKET_LIFETIME MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME +#define SSL_DTLS_TIMEOUT_DFL_MAX MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MAX +#define SSL_DTLS_TIMEOUT_DFL_MIN MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN +#define SSL_EMPTY_RENEGOTIATION_INFO MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO +#define SSL_ETM_DISABLED MBEDTLS_SSL_ETM_DISABLED +#define SSL_ETM_ENABLED MBEDTLS_SSL_ETM_ENABLED +#define SSL_EXTENDED_MS_DISABLED MBEDTLS_SSL_EXTENDED_MS_DISABLED +#define SSL_EXTENDED_MS_ENABLED MBEDTLS_SSL_EXTENDED_MS_ENABLED +#define SSL_FALLBACK_SCSV MBEDTLS_SSL_FALLBACK_SCSV +#define SSL_FLUSH_BUFFERS MBEDTLS_SSL_FLUSH_BUFFERS +#define SSL_HANDSHAKE_OVER MBEDTLS_SSL_HANDSHAKE_OVER +#define SSL_HANDSHAKE_WRAPUP MBEDTLS_SSL_HANDSHAKE_WRAPUP +#define SSL_HASH_MD5 MBEDTLS_SSL_HASH_MD5 +#define SSL_HASH_NONE MBEDTLS_SSL_HASH_NONE +#define SSL_HASH_SHA1 MBEDTLS_SSL_HASH_SHA1 +#define SSL_HASH_SHA224 MBEDTLS_SSL_HASH_SHA224 +#define SSL_HASH_SHA256 MBEDTLS_SSL_HASH_SHA256 +#define SSL_HASH_SHA384 MBEDTLS_SSL_HASH_SHA384 +#define SSL_HASH_SHA512 MBEDTLS_SSL_HASH_SHA512 +#define SSL_HELLO_REQUEST MBEDTLS_SSL_HELLO_REQUEST +#define SSL_HS_CERTIFICATE MBEDTLS_SSL_HS_CERTIFICATE +#define SSL_HS_CERTIFICATE_REQUEST MBEDTLS_SSL_HS_CERTIFICATE_REQUEST +#define SSL_HS_CERTIFICATE_VERIFY MBEDTLS_SSL_HS_CERTIFICATE_VERIFY +#define SSL_HS_CLIENT_HELLO MBEDTLS_SSL_HS_CLIENT_HELLO +#define SSL_HS_CLIENT_KEY_EXCHANGE MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE +#define SSL_HS_FINISHED MBEDTLS_SSL_HS_FINISHED +#define SSL_HS_HELLO_REQUEST MBEDTLS_SSL_HS_HELLO_REQUEST +#define SSL_HS_HELLO_VERIFY_REQUEST MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST +#define SSL_HS_NEW_SESSION_TICKET MBEDTLS_SSL_HS_NEW_SESSION_TICKET +#define SSL_HS_SERVER_HELLO MBEDTLS_SSL_HS_SERVER_HELLO +#define SSL_HS_SERVER_HELLO_DONE MBEDTLS_SSL_HS_SERVER_HELLO_DONE +#define SSL_HS_SERVER_KEY_EXCHANGE MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE +#define SSL_INITIAL_HANDSHAKE MBEDTLS_SSL_INITIAL_HANDSHAKE +#define SSL_IS_CLIENT MBEDTLS_SSL_IS_CLIENT +#define SSL_IS_FALLBACK MBEDTLS_SSL_IS_FALLBACK +#define SSL_IS_NOT_FALLBACK MBEDTLS_SSL_IS_NOT_FALLBACK +#define SSL_IS_SERVER MBEDTLS_SSL_IS_SERVER +#define SSL_LEGACY_ALLOW_RENEGOTIATION MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION +#define SSL_LEGACY_BREAK_HANDSHAKE MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE +#define SSL_LEGACY_NO_RENEGOTIATION MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION +#define SSL_LEGACY_RENEGOTIATION MBEDTLS_SSL_LEGACY_RENEGOTIATION +#define SSL_MAC_ADD MBEDTLS_SSL_MAC_ADD +#define SSL_MAJOR_VERSION_3 MBEDTLS_SSL_MAJOR_VERSION_3 +#define SSL_MAX_CONTENT_LEN MBEDTLS_SSL_MAX_CONTENT_LEN +#define SSL_MAX_FRAG_LEN_1024 MBEDTLS_SSL_MAX_FRAG_LEN_1024 +#define SSL_MAX_FRAG_LEN_2048 MBEDTLS_SSL_MAX_FRAG_LEN_2048 +#define SSL_MAX_FRAG_LEN_4096 MBEDTLS_SSL_MAX_FRAG_LEN_4096 +#define SSL_MAX_FRAG_LEN_512 MBEDTLS_SSL_MAX_FRAG_LEN_512 +#define SSL_MAX_FRAG_LEN_INVALID MBEDTLS_SSL_MAX_FRAG_LEN_INVALID +#define SSL_MAX_FRAG_LEN_NONE MBEDTLS_SSL_MAX_FRAG_LEN_NONE +#define SSL_MAX_MAJOR_VERSION MBEDTLS_SSL_MAX_MAJOR_VERSION +#define SSL_MAX_MINOR_VERSION MBEDTLS_SSL_MAX_MINOR_VERSION +#define SSL_MINOR_VERSION_0 MBEDTLS_SSL_MINOR_VERSION_0 +#define SSL_MINOR_VERSION_1 MBEDTLS_SSL_MINOR_VERSION_1 +#define SSL_MINOR_VERSION_2 MBEDTLS_SSL_MINOR_VERSION_2 +#define SSL_MINOR_VERSION_3 MBEDTLS_SSL_MINOR_VERSION_3 +#define SSL_MIN_MAJOR_VERSION MBEDTLS_SSL_MIN_MAJOR_VERSION +#define SSL_MIN_MINOR_VERSION MBEDTLS_SSL_MIN_MINOR_VERSION +#define SSL_MSG_ALERT MBEDTLS_SSL_MSG_ALERT +#define SSL_MSG_APPLICATION_DATA MBEDTLS_SSL_MSG_APPLICATION_DATA +#define SSL_MSG_CHANGE_CIPHER_SPEC MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC +#define SSL_MSG_HANDSHAKE MBEDTLS_SSL_MSG_HANDSHAKE +#define SSL_PADDING_ADD MBEDTLS_SSL_PADDING_ADD +#define SSL_RENEGOTIATION MBEDTLS_SSL_RENEGOTIATION +#define SSL_RENEGOTIATION_DISABLED MBEDTLS_SSL_RENEGOTIATION_DISABLED +#define SSL_RENEGOTIATION_DONE MBEDTLS_SSL_RENEGOTIATION_DONE +#define SSL_RENEGOTIATION_ENABLED MBEDTLS_SSL_RENEGOTIATION_ENABLED +#define SSL_RENEGOTIATION_NOT_ENFORCED MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED +#define SSL_RENEGOTIATION_PENDING MBEDTLS_SSL_RENEGOTIATION_PENDING +#define SSL_RENEGO_MAX_RECORDS_DEFAULT MBEDTLS_SSL_RENEGO_MAX_RECORDS_DEFAULT +#define SSL_RETRANS_FINISHED MBEDTLS_SSL_RETRANS_FINISHED +#define SSL_RETRANS_PREPARING MBEDTLS_SSL_RETRANS_PREPARING +#define SSL_RETRANS_SENDING MBEDTLS_SSL_RETRANS_SENDING +#define SSL_RETRANS_WAITING MBEDTLS_SSL_RETRANS_WAITING +#define SSL_SECURE_RENEGOTIATION MBEDTLS_SSL_SECURE_RENEGOTIATION +#define SSL_SERVER_CERTIFICATE MBEDTLS_SSL_SERVER_CERTIFICATE +#define SSL_SERVER_CHANGE_CIPHER_SPEC MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC +#define SSL_SERVER_FINISHED MBEDTLS_SSL_SERVER_FINISHED +#define SSL_SERVER_HELLO MBEDTLS_SSL_SERVER_HELLO +#define SSL_SERVER_HELLO_DONE MBEDTLS_SSL_SERVER_HELLO_DONE +#define SSL_SERVER_HELLO_VERIFY_REQUEST_SENT MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT +#define SSL_SERVER_KEY_EXCHANGE MBEDTLS_SSL_SERVER_KEY_EXCHANGE +#define SSL_SERVER_NEW_SESSION_TICKET MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET +#define SSL_SESSION_TICKETS_DISABLED MBEDTLS_SSL_SESSION_TICKETS_DISABLED +#define SSL_SESSION_TICKETS_ENABLED MBEDTLS_SSL_SESSION_TICKETS_ENABLED +#define SSL_SIG_ANON MBEDTLS_SSL_SIG_ANON +#define SSL_SIG_ECDSA MBEDTLS_SSL_SIG_ECDSA +#define SSL_SIG_RSA MBEDTLS_SSL_SIG_RSA +#define SSL_TRANSPORT_DATAGRAM MBEDTLS_SSL_TRANSPORT_DATAGRAM +#define SSL_TRANSPORT_STREAM MBEDTLS_SSL_TRANSPORT_STREAM +#define SSL_TRUNCATED_HMAC_LEN MBEDTLS_SSL_TRUNCATED_HMAC_LEN +#define SSL_TRUNC_HMAC_DISABLED MBEDTLS_SSL_TRUNC_HMAC_DISABLED +#define SSL_TRUNC_HMAC_ENABLED MBEDTLS_SSL_TRUNC_HMAC_ENABLED +#define SSL_VERIFY_DATA_MAX_LEN MBEDTLS_SSL_VERIFY_DATA_MAX_LEN +#define SSL_VERIFY_NONE MBEDTLS_SSL_VERIFY_NONE +#define SSL_VERIFY_OPTIONAL MBEDTLS_SSL_VERIFY_OPTIONAL +#define SSL_VERIFY_REQUIRED MBEDTLS_SSL_VERIFY_REQUIRED +#define TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA +#define TLS_DHE_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA +#define TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 +#define TLS_DHE_PSK_WITH_AES_128_CCM MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM +#define TLS_DHE_PSK_WITH_AES_128_CCM_8 MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM_8 +#define TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 +#define TLS_DHE_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA +#define TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 +#define TLS_DHE_PSK_WITH_AES_256_CCM MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM +#define TLS_DHE_PSK_WITH_AES_256_CCM_8 MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM_8 +#define TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 +#define TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 +#define TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 +#define TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 +#define TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 +#define TLS_DHE_PSK_WITH_NULL_SHA MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA +#define TLS_DHE_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256 +#define TLS_DHE_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384 +#define TLS_DHE_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA +#define TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA +#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA +#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 +#define TLS_DHE_RSA_WITH_AES_128_CCM MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM +#define TLS_DHE_RSA_WITH_AES_128_CCM_8 MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM_8 +#define TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 +#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA +#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 +#define TLS_DHE_RSA_WITH_AES_256_CCM MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM +#define TLS_DHE_RSA_WITH_AES_256_CCM_8 MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM_8 +#define TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 +#define TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA +#define TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 +#define TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 +#define TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA +#define TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 +#define TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 +#define TLS_DHE_RSA_WITH_DES_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA +#define TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA +#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA +#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 +#define TLS_ECDHE_ECDSA_WITH_AES_128_CCM MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM +#define TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 +#define TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 +#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA +#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 +#define TLS_ECDHE_ECDSA_WITH_AES_256_CCM MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM +#define TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 +#define TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 +#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 +#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 +#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 +#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 +#define TLS_ECDHE_ECDSA_WITH_NULL_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA +#define TLS_ECDHE_ECDSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA +#define TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA +#define TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA +#define TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 +#define TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA +#define TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 +#define TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 +#define TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 +#define TLS_ECDHE_PSK_WITH_NULL_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA +#define TLS_ECDHE_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256 +#define TLS_ECDHE_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384 +#define TLS_ECDHE_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA +#define TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA +#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA +#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 +#define TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 +#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA +#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 +#define TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 +#define TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 +#define TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 +#define TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 +#define TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 +#define TLS_ECDHE_RSA_WITH_NULL_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA +#define TLS_ECDHE_RSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA +#define TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA +#define TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA +#define TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 +#define TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 +#define TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA +#define TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 +#define TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 +#define TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 +#define TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 +#define TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 +#define TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 +#define TLS_ECDH_ECDSA_WITH_NULL_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA +#define TLS_ECDH_ECDSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA +#define TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA +#define TLS_ECDH_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA +#define TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 +#define TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 +#define TLS_ECDH_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA +#define TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 +#define TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 +#define TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 +#define TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 +#define TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 +#define TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 +#define TLS_ECDH_RSA_WITH_NULL_SHA MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA +#define TLS_ECDH_RSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA +#define TLS_EXT_ALPN MBEDTLS_TLS_EXT_ALPN +#define TLS_EXT_ENCRYPT_THEN_MAC MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC +#define TLS_EXT_EXTENDED_MASTER_SECRET MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET +#define TLS_EXT_MAX_FRAGMENT_LENGTH MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH +#define TLS_EXT_RENEGOTIATION_INFO MBEDTLS_TLS_EXT_RENEGOTIATION_INFO +#define TLS_EXT_SERVERNAME MBEDTLS_TLS_EXT_SERVERNAME +#define TLS_EXT_SERVERNAME_HOSTNAME MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME +#define TLS_EXT_SESSION_TICKET MBEDTLS_TLS_EXT_SESSION_TICKET +#define TLS_EXT_SIG_ALG MBEDTLS_TLS_EXT_SIG_ALG +#define TLS_EXT_SUPPORTED_ELLIPTIC_CURVES MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES +#define TLS_EXT_SUPPORTED_POINT_FORMATS MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS +#define TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT +#define TLS_EXT_TRUNCATED_HMAC MBEDTLS_TLS_EXT_TRUNCATED_HMAC +#define TLS_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA +#define TLS_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA +#define TLS_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 +#define TLS_PSK_WITH_AES_128_CCM MBEDTLS_TLS_PSK_WITH_AES_128_CCM +#define TLS_PSK_WITH_AES_128_CCM_8 MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8 +#define TLS_PSK_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 +#define TLS_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA +#define TLS_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 +#define TLS_PSK_WITH_AES_256_CCM MBEDTLS_TLS_PSK_WITH_AES_256_CCM +#define TLS_PSK_WITH_AES_256_CCM_8 MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8 +#define TLS_PSK_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 +#define TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 +#define TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 +#define TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 +#define TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 +#define TLS_PSK_WITH_NULL_SHA MBEDTLS_TLS_PSK_WITH_NULL_SHA +#define TLS_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_PSK_WITH_NULL_SHA256 +#define TLS_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_PSK_WITH_NULL_SHA384 +#define TLS_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_PSK_WITH_RC4_128_SHA +#define TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA +#define TLS_RSA_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA +#define TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 +#define TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 +#define TLS_RSA_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA +#define TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 +#define TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 +#define TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 +#define TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 +#define TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 +#define TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 +#define TLS_RSA_PSK_WITH_NULL_SHA MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA +#define TLS_RSA_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256 +#define TLS_RSA_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384 +#define TLS_RSA_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA +#define TLS_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA +#define TLS_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA +#define TLS_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 +#define TLS_RSA_WITH_AES_128_CCM MBEDTLS_TLS_RSA_WITH_AES_128_CCM +#define TLS_RSA_WITH_AES_128_CCM_8 MBEDTLS_TLS_RSA_WITH_AES_128_CCM_8 +#define TLS_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 +#define TLS_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA +#define TLS_RSA_WITH_AES_256_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 +#define TLS_RSA_WITH_AES_256_CCM MBEDTLS_TLS_RSA_WITH_AES_256_CCM +#define TLS_RSA_WITH_AES_256_CCM_8 MBEDTLS_TLS_RSA_WITH_AES_256_CCM_8 +#define TLS_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 +#define TLS_RSA_WITH_CAMELLIA_128_CBC_SHA MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA +#define TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 +#define TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 +#define TLS_RSA_WITH_CAMELLIA_256_CBC_SHA MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA +#define TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 +#define TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 +#define TLS_RSA_WITH_DES_CBC_SHA MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA +#define TLS_RSA_WITH_NULL_MD5 MBEDTLS_TLS_RSA_WITH_NULL_MD5 +#define TLS_RSA_WITH_NULL_SHA MBEDTLS_TLS_RSA_WITH_NULL_SHA +#define TLS_RSA_WITH_NULL_SHA256 MBEDTLS_TLS_RSA_WITH_NULL_SHA256 +#define TLS_RSA_WITH_RC4_128_MD5 MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 +#define TLS_RSA_WITH_RC4_128_SHA MBEDTLS_TLS_RSA_WITH_RC4_128_SHA +#define UL64 MBEDTLS_UL64 +#define X509_CRT_VERSION_1 MBEDTLS_X509_CRT_VERSION_1 +#define X509_CRT_VERSION_2 MBEDTLS_X509_CRT_VERSION_2 +#define X509_CRT_VERSION_3 MBEDTLS_X509_CRT_VERSION_3 +#define X509_FORMAT_DER MBEDTLS_X509_FORMAT_DER +#define X509_FORMAT_PEM MBEDTLS_X509_FORMAT_PEM +#define X509_MAX_DN_NAME_SIZE MBEDTLS_X509_MAX_DN_NAME_SIZE +#define X509_RFC5280_MAX_SERIAL_LEN MBEDTLS_X509_RFC5280_MAX_SERIAL_LEN +#define X509_RFC5280_UTC_TIME_LEN MBEDTLS_X509_RFC5280_UTC_TIME_LEN +#define XTEA_DECRYPT MBEDTLS_XTEA_DECRYPT +#define XTEA_ENCRYPT MBEDTLS_XTEA_ENCRYPT +#define _asn1_bitstring mbedtls_asn1_bitstring +#define _asn1_buf mbedtls_asn1_buf +#define _asn1_named_data mbedtls_asn1_named_data +#define _asn1_sequence mbedtls_asn1_sequence +#define _ssl_cache_context mbedtls_ssl_cache_context +#define _ssl_cache_entry mbedtls_ssl_cache_entry +#define _ssl_ciphersuite_t mbedtls_ssl_ciphersuite_t +#define _ssl_context mbedtls_ssl_context +#define _ssl_flight_item mbedtls_ssl_flight_item +#define _ssl_handshake_params mbedtls_ssl_handshake_params +#define _ssl_key_cert mbedtls_ssl_key_cert +#define _ssl_premaster_secret mbedtls_ssl_premaster_secret +#define _ssl_session mbedtls_ssl_session +#define _ssl_ticket_keys mbedtls_ssl_ticket_keys +#define _ssl_transform mbedtls_ssl_transform +#define _x509_crl mbedtls_x509_crl +#define _x509_crl_entry mbedtls_x509_crl_entry +#define _x509_crt mbedtls_x509_crt +#define _x509_csr mbedtls_x509_csr +#define _x509_time mbedtls_x509_time +#define _x509write_cert mbedtls_x509write_cert +#define _x509write_csr mbedtls_x509write_csr +#define aes_context mbedtls_aes_context +#define aes_crypt_cbc mbedtls_aes_crypt_cbc +#define aes_crypt_cfb128 mbedtls_aes_crypt_cfb128 +#define aes_crypt_cfb8 mbedtls_aes_crypt_cfb8 +#define aes_crypt_ctr mbedtls_aes_crypt_ctr +#define aes_crypt_ecb mbedtls_aes_crypt_ecb +#define aes_free mbedtls_aes_free +#define aes_init mbedtls_aes_init +#define aes_self_test mbedtls_aes_self_test +#define aes_setkey_dec mbedtls_aes_setkey_dec +#define aes_setkey_enc mbedtls_aes_setkey_enc +#define aesni_crypt_ecb mbedtls_aesni_crypt_ecb +#define aesni_gcm_mult mbedtls_aesni_gcm_mult +#define aesni_inverse_key mbedtls_aesni_inverse_key +#define aesni_setkey_enc mbedtls_aesni_setkey_enc +#define aesni_supports mbedtls_aesni_has_support +#define alarmed mbedtls_timing_alarmed +#define arc4_context mbedtls_arc4_context +#define arc4_crypt mbedtls_arc4_crypt +#define arc4_free mbedtls_arc4_free +#define arc4_init mbedtls_arc4_init +#define arc4_self_test mbedtls_arc4_self_test +#define arc4_setup mbedtls_arc4_setup +#define asn1_bitstring mbedtls_asn1_bitstring +#define asn1_buf mbedtls_asn1_buf +#define asn1_find_named_data mbedtls_asn1_find_named_data +#define asn1_free_named_data mbedtls_asn1_free_named_data +#define asn1_free_named_data_list mbedtls_asn1_free_named_data_list +#define asn1_get_alg mbedtls_asn1_get_alg +#define asn1_get_alg_null mbedtls_asn1_get_alg_null +#define asn1_get_bitstring mbedtls_asn1_get_bitstring +#define asn1_get_bitstring_null mbedtls_asn1_get_bitstring_null +#define asn1_get_bool mbedtls_asn1_get_bool +#define asn1_get_int mbedtls_asn1_get_int +#define asn1_get_len mbedtls_asn1_get_len +#define asn1_get_mpi mbedtls_asn1_get_mpi +#define asn1_get_sequence_of mbedtls_asn1_get_sequence_of +#define asn1_get_tag mbedtls_asn1_get_tag +#define asn1_named_data mbedtls_asn1_named_data +#define asn1_sequence mbedtls_asn1_sequence +#define asn1_store_named_data mbedtls_asn1_store_named_data +#define asn1_write_algorithm_identifier mbedtls_asn1_write_algorithm_identifier +#define asn1_write_bitstring mbedtls_asn1_write_bitstring +#define asn1_write_bool mbedtls_asn1_write_bool +#define asn1_write_ia5_string mbedtls_asn1_write_ia5_string +#define asn1_write_int mbedtls_asn1_write_int +#define asn1_write_len mbedtls_asn1_write_len +#define asn1_write_mpi mbedtls_asn1_write_mpi +#define asn1_write_null mbedtls_asn1_write_null +#define asn1_write_octet_string mbedtls_asn1_write_octet_string +#define asn1_write_oid mbedtls_asn1_write_oid +#define asn1_write_printable_string mbedtls_asn1_write_printable_string +#define asn1_write_raw_buffer mbedtls_asn1_write_raw_buffer +#define asn1_write_tag mbedtls_asn1_write_tag +#define base64_decode mbedtls_base64_decode +#define base64_encode mbedtls_base64_encode +#define base64_self_test mbedtls_base64_self_test +#define blowfish_context mbedtls_blowfish_context +#define blowfish_crypt_cbc mbedtls_blowfish_crypt_cbc +#define blowfish_crypt_cfb64 mbedtls_blowfish_crypt_cfb64 +#define blowfish_crypt_ctr mbedtls_blowfish_crypt_ctr +#define blowfish_crypt_ecb mbedtls_blowfish_crypt_ecb +#define blowfish_free mbedtls_blowfish_free +#define blowfish_init mbedtls_blowfish_init +#define blowfish_setkey mbedtls_blowfish_setkey +#define camellia_context mbedtls_camellia_context +#define camellia_crypt_cbc mbedtls_camellia_crypt_cbc +#define camellia_crypt_cfb128 mbedtls_camellia_crypt_cfb128 +#define camellia_crypt_ctr mbedtls_camellia_crypt_ctr +#define camellia_crypt_ecb mbedtls_camellia_crypt_ecb +#define camellia_free mbedtls_camellia_free +#define camellia_init mbedtls_camellia_init +#define camellia_self_test mbedtls_camellia_self_test +#define camellia_setkey_dec mbedtls_camellia_setkey_dec +#define camellia_setkey_enc mbedtls_camellia_setkey_enc +#define ccm_auth_decrypt mbedtls_ccm_auth_decrypt +#define ccm_context mbedtls_ccm_context +#define ccm_encrypt_and_tag mbedtls_ccm_encrypt_and_tag +#define ccm_free mbedtls_ccm_free +#define ccm_init mbedtls_ccm_init +#define ccm_self_test mbedtls_ccm_self_test +#define cipher_auth_decrypt mbedtls_cipher_auth_decrypt +#define cipher_auth_encrypt mbedtls_cipher_auth_encrypt +#define cipher_base_t mbedtls_cipher_base_t +#define cipher_check_tag mbedtls_cipher_check_tag +#define cipher_context_t mbedtls_cipher_context_t +#define cipher_crypt mbedtls_cipher_crypt +#define cipher_definition_t mbedtls_cipher_definition_t +#define cipher_definitions mbedtls_cipher_definitions +#define cipher_finish mbedtls_cipher_finish +#define cipher_free mbedtls_cipher_free +#define cipher_free_ctx mbedtls_cipher_free_ctx +#define cipher_get_block_size mbedtls_cipher_get_block_size +#define cipher_get_cipher_mode mbedtls_cipher_get_cipher_mode +#define cipher_get_iv_size mbedtls_cipher_get_iv_size +#define cipher_get_key_size mbedtls_cipher_get_key_bitlen +#define cipher_get_name mbedtls_cipher_get_name +#define cipher_get_operation mbedtls_cipher_get_operation +#define cipher_get_type mbedtls_cipher_get_type +#define cipher_id_t mbedtls_cipher_id_t +#define cipher_info_from_string mbedtls_cipher_info_from_string +#define cipher_info_from_type mbedtls_cipher_info_from_type +#define cipher_info_from_values mbedtls_cipher_info_from_values +#define cipher_info_t mbedtls_cipher_info_t +#define cipher_init mbedtls_cipher_init +#define cipher_init_ctx mbedtls_cipher_setup +#define cipher_list mbedtls_cipher_list +#define cipher_mode_t mbedtls_cipher_mode_t +#define cipher_padding_t mbedtls_cipher_padding_t +#define cipher_reset mbedtls_cipher_reset +#define cipher_self_test mbedtls_cipher_self_test +#define cipher_set_iv mbedtls_cipher_set_iv +#define cipher_set_padding_mode mbedtls_cipher_set_padding_mode +#define cipher_setkey mbedtls_cipher_setkey +#define cipher_type_t mbedtls_cipher_type_t +#define cipher_update mbedtls_cipher_update +#define cipher_update_ad mbedtls_cipher_update_ad +#define cipher_write_tag mbedtls_cipher_write_tag +#define ctr_drbg_context mbedtls_ctr_drbg_context +#define ctr_drbg_free mbedtls_ctr_drbg_free +#define ctr_drbg_init mbedtls_ctr_drbg_init +#define ctr_drbg_init_entropy_len mbedtls_ctr_drbg_init_entropy_len +#define ctr_drbg_random mbedtls_ctr_drbg_random +#define ctr_drbg_random_with_add mbedtls_ctr_drbg_random_with_add +#define ctr_drbg_reseed mbedtls_ctr_drbg_reseed +#define ctr_drbg_self_test mbedtls_ctr_drbg_self_test +#define ctr_drbg_set_entropy_len mbedtls_ctr_drbg_set_entropy_len +#define ctr_drbg_set_prediction_resistance mbedtls_ctr_drbg_set_prediction_resistance +#define ctr_drbg_set_reseed_interval mbedtls_ctr_drbg_set_reseed_interval +#define ctr_drbg_update mbedtls_ctr_drbg_update +#define ctr_drbg_update_seed_file mbedtls_ctr_drbg_update_seed_file +#define ctr_drbg_write_seed_file mbedtls_ctr_drbg_write_seed_file +#define debug_fmt mbedtls_debug_fmt +#define debug_print_buf mbedtls_debug_print_buf +#define debug_print_crt mbedtls_debug_print_crt +#define debug_print_ecp mbedtls_debug_print_ecp +#define debug_print_mpi mbedtls_debug_print_mpi +#define debug_print_msg mbedtls_debug_print_msg +#define debug_print_ret mbedtls_debug_print_ret +#define debug_set_log_mode mbedtls_debug_set_log_mode +#define debug_set_threshold mbedtls_debug_set_threshold +#define des3_context mbedtls_des3_context +#define des3_crypt_cbc mbedtls_des3_crypt_cbc +#define des3_crypt_ecb mbedtls_des3_crypt_ecb +#define des3_free mbedtls_des3_free +#define des3_init mbedtls_des3_init +#define des3_set2key_dec mbedtls_des3_set2key_dec +#define des3_set2key_enc mbedtls_des3_set2key_enc +#define des3_set3key_dec mbedtls_des3_set3key_dec +#define des3_set3key_enc mbedtls_des3_set3key_enc +#define des_context mbedtls_des_context +#define des_crypt_cbc mbedtls_des_crypt_cbc +#define des_crypt_ecb mbedtls_des_crypt_ecb +#define des_free mbedtls_des_free +#define des_init mbedtls_des_init +#define des_key_check_key_parity mbedtls_des_key_check_key_parity +#define des_key_check_weak mbedtls_des_key_check_weak +#define des_key_set_parity mbedtls_des_key_set_parity +#define des_self_test mbedtls_des_self_test +#define des_setkey_dec mbedtls_des_setkey_dec +#define des_setkey_enc mbedtls_des_setkey_enc +#define dhm_calc_secret mbedtls_dhm_calc_secret +#define dhm_context mbedtls_dhm_context +#define dhm_free mbedtls_dhm_free +#define dhm_init mbedtls_dhm_init +#define dhm_make_params mbedtls_dhm_make_params +#define dhm_make_public mbedtls_dhm_make_public +#define dhm_parse_dhm mbedtls_dhm_parse_dhm +#define dhm_parse_dhmfile mbedtls_dhm_parse_dhmfile +#define dhm_read_params mbedtls_dhm_read_params +#define dhm_read_public mbedtls_dhm_read_public +#define dhm_self_test mbedtls_dhm_self_test +#define ecdh_calc_secret mbedtls_ecdh_calc_secret +#define ecdh_compute_shared mbedtls_ecdh_compute_shared +#define ecdh_context mbedtls_ecdh_context +#define ecdh_free mbedtls_ecdh_free +#define ecdh_gen_public mbedtls_ecdh_gen_public +#define ecdh_get_params mbedtls_ecdh_get_params +#define ecdh_init mbedtls_ecdh_init +#define ecdh_make_params mbedtls_ecdh_make_params +#define ecdh_make_public mbedtls_ecdh_make_public +#define ecdh_read_params mbedtls_ecdh_read_params +#define ecdh_read_public mbedtls_ecdh_read_public +#define ecdh_self_test mbedtls_ecdh_self_test +#define ecdh_side mbedtls_ecdh_side +#define ecdsa_context mbedtls_ecdsa_context +#define ecdsa_free mbedtls_ecdsa_free +#define ecdsa_from_keypair mbedtls_ecdsa_from_keypair +#define ecdsa_genkey mbedtls_ecdsa_genkey +#define ecdsa_info mbedtls_ecdsa_info +#define ecdsa_init mbedtls_ecdsa_init +#define ecdsa_read_signature mbedtls_ecdsa_read_signature +#define ecdsa_self_test mbedtls_ecdsa_self_test +#define ecdsa_sign mbedtls_ecdsa_sign +#define ecdsa_sign_det mbedtls_ecdsa_sign_det +#define ecdsa_verify mbedtls_ecdsa_verify +#define ecdsa_write_signature mbedtls_ecdsa_write_signature +#define ecdsa_write_signature_det mbedtls_ecdsa_write_signature_det +#define eckey_info mbedtls_eckey_info +#define eckeydh_info mbedtls_eckeydh_info +#define ecp_add mbedtls_ecp_add +#define ecp_check_privkey mbedtls_ecp_check_privkey +#define ecp_check_pub_priv mbedtls_ecp_check_pub_priv +#define ecp_check_pubkey mbedtls_ecp_check_pubkey +#define ecp_copy mbedtls_ecp_copy +#define ecp_curve_info mbedtls_ecp_curve_info +#define ecp_curve_info_from_grp_id mbedtls_ecp_curve_info_from_grp_id +#define ecp_curve_info_from_name mbedtls_ecp_curve_info_from_name +#define ecp_curve_info_from_tls_id mbedtls_ecp_curve_info_from_tls_id +#define ecp_curve_list mbedtls_ecp_curve_list +#define ecp_gen_key mbedtls_ecp_gen_key +#define ecp_gen_keypair mbedtls_ecp_gen_keypair +#define ecp_group mbedtls_ecp_group +#define ecp_group_copy mbedtls_ecp_group_copy +#define ecp_group_free mbedtls_ecp_group_free +#define ecp_group_id mbedtls_ecp_group_id +#define ecp_group_init mbedtls_ecp_group_init +#define ecp_group_read_string mbedtls_ecp_group_read_string +#define ecp_grp_id_list mbedtls_ecp_grp_id_list +#define ecp_is_zero mbedtls_ecp_is_zero +#define ecp_keypair mbedtls_ecp_keypair +#define ecp_keypair_free mbedtls_ecp_keypair_free +#define ecp_keypair_init mbedtls_ecp_keypair_init +#define ecp_mul mbedtls_ecp_mul +#define ecp_point mbedtls_ecp_point +#define ecp_point_free mbedtls_ecp_point_free +#define ecp_point_init mbedtls_ecp_point_init +#define ecp_point_read_binary mbedtls_ecp_point_read_binary +#define ecp_point_read_string mbedtls_ecp_point_read_string +#define ecp_point_write_binary mbedtls_ecp_point_write_binary +#define ecp_self_test mbedtls_ecp_self_test +#define ecp_set_zero mbedtls_ecp_set_zero +#define ecp_sub mbedtls_ecp_sub +#define ecp_tls_read_group mbedtls_ecp_tls_read_group +#define ecp_tls_read_point mbedtls_ecp_tls_read_point +#define ecp_tls_write_group mbedtls_ecp_tls_write_group +#define ecp_tls_write_point mbedtls_ecp_tls_write_point +#define ecp_use_known_dp mbedtls_ecp_group_load +#define entropy_add_source mbedtls_entropy_add_source +#define entropy_context mbedtls_entropy_context +#define entropy_free mbedtls_entropy_free +#define entropy_func mbedtls_entropy_func +#define entropy_gather mbedtls_entropy_gather +#define entropy_init mbedtls_entropy_init +#define entropy_self_test mbedtls_entropy_self_test +#define entropy_update_manual mbedtls_entropy_update_manual +#define entropy_update_seed_file mbedtls_entropy_update_seed_file +#define entropy_write_seed_file mbedtls_entropy_write_seed_file +#define error_strerror mbedtls_strerror +#define f_source_ptr mbedtls_entropy_f_source_ptr +#define gcm_auth_decrypt mbedtls_gcm_auth_decrypt +#define gcm_context mbedtls_gcm_context +#define gcm_crypt_and_tag mbedtls_gcm_crypt_and_tag +#define gcm_finish mbedtls_gcm_finish +#define gcm_free mbedtls_gcm_free +#define gcm_init mbedtls_gcm_init +#define gcm_self_test mbedtls_gcm_self_test +#define gcm_starts mbedtls_gcm_starts +#define gcm_update mbedtls_gcm_update +#define get_timer mbedtls_timing_get_timer +#define hardclock mbedtls_timing_hardclock +#define hardclock_poll mbedtls_hardclock_poll +#define havege_free mbedtls_havege_free +#define havege_init mbedtls_havege_init +#define havege_poll mbedtls_havege_poll +#define havege_random mbedtls_havege_random +#define havege_state mbedtls_havege_state +#define hmac_drbg_context mbedtls_hmac_drbg_context +#define hmac_drbg_free mbedtls_hmac_drbg_free +#define hmac_drbg_init mbedtls_hmac_drbg_init +#define hmac_drbg_init_buf mbedtls_hmac_drbg_init_buf +#define hmac_drbg_random mbedtls_hmac_drbg_random +#define hmac_drbg_random_with_add mbedtls_hmac_drbg_random_with_add +#define hmac_drbg_reseed mbedtls_hmac_drbg_reseed +#define hmac_drbg_self_test mbedtls_hmac_drbg_self_test +#define hmac_drbg_set_entropy_len mbedtls_hmac_drbg_set_entropy_len +#define hmac_drbg_set_prediction_resistance mbedtls_hmac_drbg_set_prediction_resistance +#define hmac_drbg_set_reseed_interval mbedtls_hmac_drbg_set_reseed_interval +#define hmac_drbg_update mbedtls_hmac_drbg_update +#define hmac_drbg_update_seed_file mbedtls_hmac_drbg_update_seed_file +#define hmac_drbg_write_seed_file mbedtls_hmac_drbg_write_seed_file +#define hr_time mbedtls_timing_hr_time +#define key_exchange_type_t mbedtls_key_exchange_type_t +#define md mbedtls_md +#define md2 mbedtls_md2 +#define md2_context mbedtls_md2_context +#define md2_file mbedtls_md2_file +#define md2_finish mbedtls_md2_finish +#define md2_free mbedtls_md2_free +#define md2_hmac mbedtls_md2_hmac +#define md2_hmac_finish mbedtls_md2_hmac_finish +#define md2_hmac_reset mbedtls_md2_hmac_reset +#define md2_hmac_starts mbedtls_md2_hmac_starts +#define md2_hmac_update mbedtls_md2_hmac_update +#define md2_info mbedtls_md2_info +#define md2_init mbedtls_md2_init +#define md2_process mbedtls_md2_process +#define md2_self_test mbedtls_md2_self_test +#define md2_starts mbedtls_md2_starts +#define md2_update mbedtls_md2_update +#define md4 mbedtls_md4 +#define md4_context mbedtls_md4_context +#define md4_file mbedtls_md4_file +#define md4_finish mbedtls_md4_finish +#define md4_free mbedtls_md4_free +#define md4_hmac mbedtls_md4_hmac +#define md4_hmac_finish mbedtls_md4_hmac_finish +#define md4_hmac_reset mbedtls_md4_hmac_reset +#define md4_hmac_starts mbedtls_md4_hmac_starts +#define md4_hmac_update mbedtls_md4_hmac_update +#define md4_info mbedtls_md4_info +#define md4_init mbedtls_md4_init +#define md4_process mbedtls_md4_process +#define md4_self_test mbedtls_md4_self_test +#define md4_starts mbedtls_md4_starts +#define md4_update mbedtls_md4_update +#define md5 mbedtls_md5 +#define md5_context mbedtls_md5_context +#define md5_file mbedtls_md5_file +#define md5_finish mbedtls_md5_finish +#define md5_free mbedtls_md5_free +#define md5_hmac mbedtls_md5_hmac +#define md5_hmac_finish mbedtls_md5_hmac_finish +#define md5_hmac_reset mbedtls_md5_hmac_reset +#define md5_hmac_starts mbedtls_md5_hmac_starts +#define md5_hmac_update mbedtls_md5_hmac_update +#define md5_info mbedtls_md5_info +#define md5_init mbedtls_md5_init +#define md5_process mbedtls_md5_process +#define md5_self_test mbedtls_md5_self_test +#define md5_starts mbedtls_md5_starts +#define md5_update mbedtls_md5_update +#define md_context_t mbedtls_md_context_t +#define md_file mbedtls_md_file +#define md_finish mbedtls_md_finish +#define md_free mbedtls_md_free +#define md_free_ctx mbedtls_md_free_ctx +#define md_get_name mbedtls_md_get_name +#define md_get_size mbedtls_md_get_size +#define md_get_type mbedtls_md_get_type +#define md_hmac mbedtls_md_hmac +#define md_hmac_finish mbedtls_md_hmac_finish +#define md_hmac_reset mbedtls_md_hmac_reset +#define md_hmac_starts mbedtls_md_hmac_starts +#define md_hmac_update mbedtls_md_hmac_update +#define md_info_from_string mbedtls_md_info_from_string +#define md_info_from_type mbedtls_md_info_from_type +#define md_info_t mbedtls_md_info_t +#define md_init mbedtls_md_init +#define md_init_ctx mbedtls_md_init_ctx +#define md_list mbedtls_md_list +#define md_process mbedtls_md_process +#define md_starts mbedtls_md_starts +#define md_type_t mbedtls_md_type_t +#define md_update mbedtls_md_update +#define memory_buffer_alloc_cur_get mbedtls_memory_buffer_alloc_cur_get +#define memory_buffer_alloc_free mbedtls_memory_buffer_alloc_free +#define memory_buffer_alloc_init mbedtls_memory_buffer_alloc_init +#define memory_buffer_alloc_max_get mbedtls_memory_buffer_alloc_max_get +#define memory_buffer_alloc_max_reset mbedtls_memory_buffer_alloc_max_reset +#define memory_buffer_alloc_self_test mbedtls_memory_buffer_alloc_self_test +#define memory_buffer_alloc_status mbedtls_memory_buffer_alloc_status +#define memory_buffer_alloc_verify mbedtls_memory_buffer_alloc_verify +#define memory_buffer_set_verify mbedtls_memory_buffer_set_verify +#define memory_set_own mbedtls_memory_set_own +#define mpi mbedtls_mpi +#define mpi_add_abs mbedtls_mpi_add_abs +#define mpi_add_int mbedtls_mpi_add_int +#define mpi_add_mpi mbedtls_mpi_add_mpi +#define mpi_cmp_abs mbedtls_mpi_cmp_abs +#define mpi_cmp_int mbedtls_mpi_cmp_int +#define mpi_cmp_mpi mbedtls_mpi_cmp_mpi +#define mpi_copy mbedtls_mpi_copy +#define mpi_div_int mbedtls_mpi_div_int +#define mpi_div_mpi mbedtls_mpi_div_mpi +#define mpi_exp_mod mbedtls_mpi_exp_mod +#define mpi_fill_random mbedtls_mpi_fill_random +#define mpi_free mbedtls_mpi_free +#define mpi_gcd mbedtls_mpi_gcd +#define mpi_gen_prime mbedtls_mpi_gen_prime +#define mpi_get_bit mbedtls_mpi_get_bit +#define mpi_grow mbedtls_mpi_grow +#define mpi_init mbedtls_mpi_init +#define mpi_inv_mod mbedtls_mpi_inv_mod +#define mpi_is_prime mbedtls_mpi_is_prime +#define mpi_lsb mbedtls_mpi_lsb +#define mpi_lset mbedtls_mpi_lset +#define mpi_mod_int mbedtls_mpi_mod_int +#define mpi_mod_mpi mbedtls_mpi_mod_mpi +#define mpi_msb mbedtls_mpi_bitlen +#define mpi_mul_int mbedtls_mpi_mul_int +#define mpi_mul_mpi mbedtls_mpi_mul_mpi +#define mpi_read_binary mbedtls_mpi_read_binary +#define mpi_read_file mbedtls_mpi_read_file +#define mpi_read_string mbedtls_mpi_read_string +#define mpi_safe_cond_assign mbedtls_mpi_safe_cond_assign +#define mpi_safe_cond_swap mbedtls_mpi_safe_cond_swap +#define mpi_self_test mbedtls_mpi_self_test +#define mpi_set_bit mbedtls_mpi_set_bit +#define mpi_shift_l mbedtls_mpi_shift_l +#define mpi_shift_r mbedtls_mpi_shift_r +#define mpi_shrink mbedtls_mpi_shrink +#define mpi_size mbedtls_mpi_size +#define mpi_sub_abs mbedtls_mpi_sub_abs +#define mpi_sub_int mbedtls_mpi_sub_int +#define mpi_sub_mpi mbedtls_mpi_sub_mpi +#define mpi_swap mbedtls_mpi_swap +#define mpi_write_binary mbedtls_mpi_write_binary +#define mpi_write_file mbedtls_mpi_write_file +#define mpi_write_string mbedtls_mpi_write_string +#define net_accept mbedtls_net_accept +#define net_bind mbedtls_net_bind +#define net_close mbedtls_net_free +#define net_connect mbedtls_net_connect +#define net_recv mbedtls_net_recv +#define net_recv_timeout mbedtls_net_recv_timeout +#define net_send mbedtls_net_send +#define net_set_block mbedtls_net_set_block +#define net_set_nonblock mbedtls_net_set_nonblock +#define net_usleep mbedtls_net_usleep +#define oid_descriptor_t mbedtls_oid_descriptor_t +#define oid_get_attr_short_name mbedtls_oid_get_attr_short_name +#define oid_get_cipher_alg mbedtls_oid_get_cipher_alg +#define oid_get_ec_grp mbedtls_oid_get_ec_grp +#define oid_get_extended_key_usage mbedtls_oid_get_extended_key_usage +#define oid_get_md_alg mbedtls_oid_get_md_alg +#define oid_get_numeric_string mbedtls_oid_get_numeric_string +#define oid_get_oid_by_ec_grp mbedtls_oid_get_oid_by_ec_grp +#define oid_get_oid_by_md mbedtls_oid_get_oid_by_md +#define oid_get_oid_by_pk_alg mbedtls_oid_get_oid_by_pk_alg +#define oid_get_oid_by_sig_alg mbedtls_oid_get_oid_by_sig_alg +#define oid_get_pk_alg mbedtls_oid_get_pk_alg +#define oid_get_pkcs12_pbe_alg mbedtls_oid_get_pkcs12_pbe_alg +#define oid_get_sig_alg mbedtls_oid_get_sig_alg +#define oid_get_sig_alg_desc mbedtls_oid_get_sig_alg_desc +#define oid_get_x509_ext_type mbedtls_oid_get_x509_ext_type +#define operation_t mbedtls_operation_t +#define padlock_supports mbedtls_padlock_has_support +#define padlock_xcryptcbc mbedtls_padlock_xcryptcbc +#define padlock_xcryptecb mbedtls_padlock_xcryptecb +#define pbkdf2_hmac mbedtls_pbkdf2_hmac +#define pbkdf2_self_test mbedtls_pbkdf2_self_test +#define pem_context mbedtls_pem_context +#define pem_free mbedtls_pem_free +#define pem_init mbedtls_pem_init +#define pem_read_buffer mbedtls_pem_read_buffer +#define pem_write_buffer mbedtls_pem_write_buffer +#define pk_can_do mbedtls_pk_can_do +#define pk_check_pair mbedtls_pk_check_pair +#define pk_context mbedtls_pk_context +#define pk_debug mbedtls_pk_debug +#define pk_debug_item mbedtls_pk_debug_item +#define pk_debug_type mbedtls_pk_debug_type +#define pk_decrypt mbedtls_pk_decrypt +#define pk_ec mbedtls_pk_ec +#define pk_encrypt mbedtls_pk_encrypt +#define pk_free mbedtls_pk_free +#define pk_get_len mbedtls_pk_get_len +#define pk_get_name mbedtls_pk_get_name +#define pk_get_size mbedtls_pk_get_bitlen +#define pk_get_type mbedtls_pk_get_type +#define pk_info_from_type mbedtls_pk_info_from_type +#define pk_info_t mbedtls_pk_info_t +#define pk_init mbedtls_pk_init +#define pk_init_ctx mbedtls_pk_setup +#define pk_init_ctx_rsa_alt mbedtls_pk_setup_rsa_alt +#define pk_load_file mbedtls_pk_load_file +#define pk_parse_key mbedtls_pk_parse_key +#define pk_parse_keyfile mbedtls_pk_parse_keyfile +#define pk_parse_public_key mbedtls_pk_parse_public_key +#define pk_parse_public_keyfile mbedtls_pk_parse_public_keyfile +#define pk_parse_subpubkey mbedtls_pk_parse_subpubkey +#define pk_rsa mbedtls_pk_rsa +#define pk_rsa_alt_decrypt_func mbedtls_pk_rsa_alt_decrypt_func +#define pk_rsa_alt_key_len_func mbedtls_pk_rsa_alt_key_len_func +#define pk_rsa_alt_sign_func mbedtls_pk_rsa_alt_sign_func +#define pk_rsassa_pss_options mbedtls_pk_rsassa_pss_options +#define pk_sign mbedtls_pk_sign +#define pk_type_t mbedtls_pk_type_t +#define pk_verify mbedtls_pk_verify +#define pk_verify_ext mbedtls_pk_verify_ext +#define pk_write_key_der mbedtls_pk_write_key_der +#define pk_write_key_pem mbedtls_pk_write_key_pem +#define pk_write_pubkey mbedtls_pk_write_pubkey +#define pk_write_pubkey_der mbedtls_pk_write_pubkey_der +#define pk_write_pubkey_pem mbedtls_pk_write_pubkey_pem +#define pkcs11_context mbedtls_pkcs11_context +#define pkcs11_decrypt mbedtls_pkcs11_decrypt +#define pkcs11_priv_key_free mbedtls_pkcs11_priv_key_free +#define pkcs11_priv_key_init mbedtls_pkcs11_priv_key_bind +#define pkcs11_sign mbedtls_pkcs11_sign +#define pkcs11_x509_cert_init mbedtls_pkcs11_x509_cert_bind +#define pkcs12_derivation mbedtls_pkcs12_derivation +#define pkcs12_pbe mbedtls_pkcs12_pbe +#define pkcs12_pbe_sha1_rc4_128 mbedtls_pkcs12_pbe_sha1_rc4_128 +#define pkcs5_pbes2 mbedtls_pkcs5_pbes2 +#define pkcs5_pbkdf2_hmac mbedtls_pkcs5_pbkdf2_hmac +#define pkcs5_self_test mbedtls_pkcs5_self_test +#define platform_entropy_poll mbedtls_platform_entropy_poll +#define platform_set_exit mbedtls_platform_set_exit +#define platform_set_fprintf mbedtls_platform_set_fprintf +#define platform_set_malloc_free mbedtls_platform_set_malloc_free +#define platform_set_printf mbedtls_platform_set_printf +#define platform_set_snprintf mbedtls_platform_set_snprintf +#define polarssl_exit mbedtls_exit +#define polarssl_fprintf mbedtls_fprintf +#define polarssl_free mbedtls_free +#define polarssl_malloc mbedtls_malloc +#define polarssl_mutex_free mbedtls_mutex_free +#define polarssl_mutex_init mbedtls_mutex_init +#define polarssl_mutex_lock mbedtls_mutex_lock +#define polarssl_mutex_unlock mbedtls_mutex_unlock +#define polarssl_printf mbedtls_printf +#define polarssl_snprintf mbedtls_snprintf +#define polarssl_strerror mbedtls_strerror +#define ripemd160 mbedtls_ripemd160 +#define ripemd160_context mbedtls_ripemd160_context +#define ripemd160_file mbedtls_ripemd160_file +#define ripemd160_finish mbedtls_ripemd160_finish +#define ripemd160_free mbedtls_ripemd160_free +#define ripemd160_hmac mbedtls_ripemd160_hmac +#define ripemd160_hmac_finish mbedtls_ripemd160_hmac_finish +#define ripemd160_hmac_reset mbedtls_ripemd160_hmac_reset +#define ripemd160_hmac_starts mbedtls_ripemd160_hmac_starts +#define ripemd160_hmac_update mbedtls_ripemd160_hmac_update +#define ripemd160_info mbedtls_ripemd160_info +#define ripemd160_init mbedtls_ripemd160_init +#define ripemd160_process mbedtls_ripemd160_process +#define ripemd160_self_test mbedtls_ripemd160_self_test +#define ripemd160_starts mbedtls_ripemd160_starts +#define ripemd160_update mbedtls_ripemd160_update +#define rsa_alt_context mbedtls_rsa_alt_context +#define rsa_alt_info mbedtls_rsa_alt_info +#define rsa_check_privkey mbedtls_rsa_check_privkey +#define rsa_check_pub_priv mbedtls_rsa_check_pub_priv +#define rsa_check_pubkey mbedtls_rsa_check_pubkey +#define rsa_context mbedtls_rsa_context +#define rsa_copy mbedtls_rsa_copy +#define rsa_decrypt_func mbedtls_rsa_decrypt_func +#define rsa_free mbedtls_rsa_free +#define rsa_gen_key mbedtls_rsa_gen_key +#define rsa_info mbedtls_rsa_info +#define rsa_init mbedtls_rsa_init +#define rsa_key_len_func mbedtls_rsa_key_len_func +#define rsa_pkcs1_decrypt mbedtls_rsa_pkcs1_decrypt +#define rsa_pkcs1_encrypt mbedtls_rsa_pkcs1_encrypt +#define rsa_pkcs1_sign mbedtls_rsa_pkcs1_sign +#define rsa_pkcs1_verify mbedtls_rsa_pkcs1_verify +#define rsa_private mbedtls_rsa_private +#define rsa_public mbedtls_rsa_public +#define rsa_rsaes_oaep_decrypt mbedtls_rsa_rsaes_oaep_decrypt +#define rsa_rsaes_oaep_encrypt mbedtls_rsa_rsaes_oaep_encrypt +#define rsa_rsaes_pkcs1_v15_decrypt mbedtls_rsa_rsaes_pkcs1_v15_decrypt +#define rsa_rsaes_pkcs1_v15_encrypt mbedtls_rsa_rsaes_pkcs1_v15_encrypt +#define rsa_rsassa_pkcs1_v15_sign mbedtls_rsa_rsassa_pkcs1_v15_sign +#define rsa_rsassa_pkcs1_v15_verify mbedtls_rsa_rsassa_pkcs1_v15_verify +#define rsa_rsassa_pss_sign mbedtls_rsa_rsassa_pss_sign +#define rsa_rsassa_pss_verify mbedtls_rsa_rsassa_pss_verify +#define rsa_rsassa_pss_verify_ext mbedtls_rsa_rsassa_pss_verify_ext +#define rsa_self_test mbedtls_rsa_self_test +#define rsa_set_padding mbedtls_rsa_set_padding +#define rsa_sign_func mbedtls_rsa_sign_func +#define safer_memcmp mbedtls_ssl_safer_memcmp +#define set_alarm mbedtls_set_alarm +#define sha1 mbedtls_sha1 +#define sha1_context mbedtls_sha1_context +#define sha1_file mbedtls_sha1_file +#define sha1_finish mbedtls_sha1_finish +#define sha1_free mbedtls_sha1_free +#define sha1_hmac mbedtls_sha1_hmac +#define sha1_hmac_finish mbedtls_sha1_hmac_finish +#define sha1_hmac_reset mbedtls_sha1_hmac_reset +#define sha1_hmac_starts mbedtls_sha1_hmac_starts +#define sha1_hmac_update mbedtls_sha1_hmac_update +#define sha1_info mbedtls_sha1_info +#define sha1_init mbedtls_sha1_init +#define sha1_process mbedtls_sha1_process +#define sha1_self_test mbedtls_sha1_self_test +#define sha1_starts mbedtls_sha1_starts +#define sha1_update mbedtls_sha1_update +#define sha224_info mbedtls_sha224_info +#define sha256 mbedtls_sha256 +#define sha256_context mbedtls_sha256_context +#define sha256_file mbedtls_sha256_file +#define sha256_finish mbedtls_sha256_finish +#define sha256_free mbedtls_sha256_free +#define sha256_hmac mbedtls_sha256_hmac +#define sha256_hmac_finish mbedtls_sha256_hmac_finish +#define sha256_hmac_reset mbedtls_sha256_hmac_reset +#define sha256_hmac_starts mbedtls_sha256_hmac_starts +#define sha256_hmac_update mbedtls_sha256_hmac_update +#define sha256_info mbedtls_sha256_info +#define sha256_init mbedtls_sha256_init +#define sha256_process mbedtls_sha256_process +#define sha256_self_test mbedtls_sha256_self_test +#define sha256_starts mbedtls_sha256_starts +#define sha256_update mbedtls_sha256_update +#define sha384_info mbedtls_sha384_info +#define sha512 mbedtls_sha512 +#define sha512_context mbedtls_sha512_context +#define sha512_file mbedtls_sha512_file +#define sha512_finish mbedtls_sha512_finish +#define sha512_free mbedtls_sha512_free +#define sha512_hmac mbedtls_sha512_hmac +#define sha512_hmac_finish mbedtls_sha512_hmac_finish +#define sha512_hmac_reset mbedtls_sha512_hmac_reset +#define sha512_hmac_starts mbedtls_sha512_hmac_starts +#define sha512_hmac_update mbedtls_sha512_hmac_update +#define sha512_info mbedtls_sha512_info +#define sha512_init mbedtls_sha512_init +#define sha512_process mbedtls_sha512_process +#define sha512_self_test mbedtls_sha512_self_test +#define sha512_starts mbedtls_sha512_starts +#define sha512_update mbedtls_sha512_update +#define source_state mbedtls_entropy_source_state +#define ssl_cache_context mbedtls_ssl_cache_context +#define ssl_cache_entry mbedtls_ssl_cache_entry +#define ssl_cache_free mbedtls_ssl_cache_free +#define ssl_cache_get mbedtls_ssl_cache_get +#define ssl_cache_init mbedtls_ssl_cache_init +#define ssl_cache_set mbedtls_ssl_cache_set +#define ssl_cache_set_max_entries mbedtls_ssl_cache_set_max_entries +#define ssl_cache_set_timeout mbedtls_ssl_cache_set_timeout +#define ssl_check_cert_usage mbedtls_ssl_check_cert_usage +#define ssl_ciphersuite_from_id mbedtls_ssl_ciphersuite_from_id +#define ssl_ciphersuite_from_string mbedtls_ssl_ciphersuite_from_string +#define ssl_ciphersuite_t mbedtls_ssl_ciphersuite_t +#define ssl_ciphersuite_uses_ec mbedtls_ssl_ciphersuite_uses_ec +#define ssl_ciphersuite_uses_psk mbedtls_ssl_ciphersuite_uses_psk +#define ssl_close_notify mbedtls_ssl_close_notify +#define ssl_context mbedtls_ssl_context +#define ssl_cookie_check mbedtls_ssl_cookie_check +#define ssl_cookie_check_t mbedtls_ssl_cookie_check_t +#define ssl_cookie_ctx mbedtls_ssl_cookie_ctx +#define ssl_cookie_free mbedtls_ssl_cookie_free +#define ssl_cookie_init mbedtls_ssl_cookie_init +#define ssl_cookie_set_timeout mbedtls_ssl_cookie_set_timeout +#define ssl_cookie_setup mbedtls_ssl_cookie_setup +#define ssl_cookie_write mbedtls_ssl_cookie_write +#define ssl_cookie_write_t mbedtls_ssl_cookie_write_t +#define ssl_curve_is_acceptable mbedtls_ssl_curve_is_acceptable +#define ssl_derive_keys mbedtls_ssl_derive_keys +#define ssl_dtls_replay_check mbedtls_ssl_dtls_replay_check +#define ssl_dtls_replay_update mbedtls_ssl_dtls_replay_update +#define ssl_fetch_input mbedtls_ssl_fetch_input +#define ssl_flight_item mbedtls_ssl_flight_item +#define ssl_flush_output mbedtls_ssl_flush_output +#define ssl_free mbedtls_ssl_free +#define ssl_get_alpn_protocol mbedtls_ssl_get_alpn_protocol +#define ssl_get_bytes_avail mbedtls_ssl_get_bytes_avail +#define ssl_get_ciphersuite mbedtls_ssl_get_ciphersuite +#define ssl_get_ciphersuite_id mbedtls_ssl_get_ciphersuite_id +#define ssl_get_ciphersuite_name mbedtls_ssl_get_ciphersuite_name +#define ssl_get_ciphersuite_sig_pk_alg mbedtls_ssl_get_ciphersuite_sig_pk_alg +#define ssl_get_peer_cert mbedtls_ssl_get_peer_cert +#define ssl_get_record_expansion mbedtls_ssl_get_record_expansion +#define ssl_get_session mbedtls_ssl_get_session +#define ssl_get_verify_result mbedtls_ssl_get_verify_result +#define ssl_get_version mbedtls_ssl_get_version +#define ssl_handshake mbedtls_ssl_handshake +#define ssl_handshake_client_step mbedtls_ssl_handshake_client_step +#define ssl_handshake_free mbedtls_ssl_handshake_free +#define ssl_handshake_params mbedtls_ssl_handshake_params +#define ssl_handshake_server_step mbedtls_ssl_handshake_server_step +#define ssl_handshake_step mbedtls_ssl_handshake_step +#define ssl_handshake_wrapup mbedtls_ssl_handshake_wrapup +#define ssl_hdr_len mbedtls_ssl_hdr_len +#define ssl_hs_hdr_len mbedtls_ssl_hs_hdr_len +#define ssl_hw_record_activate mbedtls_ssl_hw_record_activate +#define ssl_hw_record_finish mbedtls_ssl_hw_record_finish +#define ssl_hw_record_init mbedtls_ssl_hw_record_init +#define ssl_hw_record_read mbedtls_ssl_hw_record_read +#define ssl_hw_record_reset mbedtls_ssl_hw_record_reset +#define ssl_hw_record_write mbedtls_ssl_hw_record_write +#define ssl_init mbedtls_ssl_init +#define ssl_key_cert mbedtls_ssl_key_cert +#define ssl_legacy_renegotiation mbedtls_ssl_conf_legacy_renegotiation +#define ssl_list_ciphersuites mbedtls_ssl_list_ciphersuites +#define ssl_md_alg_from_hash mbedtls_ssl_md_alg_from_hash +#define ssl_optimize_checksum mbedtls_ssl_optimize_checksum +#define ssl_own_cert mbedtls_ssl_own_cert +#define ssl_own_key mbedtls_ssl_own_key +#define ssl_parse_certificate mbedtls_ssl_parse_certificate +#define ssl_parse_change_cipher_spec mbedtls_ssl_parse_change_cipher_spec +#define ssl_parse_finished mbedtls_ssl_parse_finished +#define ssl_pk_alg_from_sig mbedtls_ssl_pk_alg_from_sig +#define ssl_pkcs11_decrypt mbedtls_ssl_pkcs11_decrypt +#define ssl_pkcs11_key_len mbedtls_ssl_pkcs11_key_len +#define ssl_pkcs11_sign mbedtls_ssl_pkcs11_sign +#define ssl_psk_derive_premaster mbedtls_ssl_psk_derive_premaster +#define ssl_read mbedtls_ssl_read +#define ssl_read_record mbedtls_ssl_read_record +#define ssl_read_version mbedtls_ssl_read_version +#define ssl_recv_flight_completed mbedtls_ssl_recv_flight_completed +#define ssl_renegotiate mbedtls_ssl_renegotiate +#define ssl_resend mbedtls_ssl_resend +#define ssl_reset_checksum mbedtls_ssl_reset_checksum +#define ssl_send_alert_message mbedtls_ssl_send_alert_message +#define ssl_send_fatal_handshake_failure mbedtls_ssl_send_fatal_handshake_failure +#define ssl_send_flight_completed mbedtls_ssl_send_flight_completed +#define ssl_session mbedtls_ssl_session +#define ssl_session_free mbedtls_ssl_session_free +#define ssl_session_init mbedtls_ssl_session_init +#define ssl_session_reset mbedtls_ssl_session_reset +#define ssl_set_alpn_protocols mbedtls_ssl_conf_alpn_protocols +#define ssl_set_arc4_support mbedtls_ssl_conf_arc4_support +#define ssl_set_authmode mbedtls_ssl_conf_authmode +#define ssl_set_bio mbedtls_ssl_set_bio +#define ssl_set_bio mbedtls_ssl_set_bio_timeout +#define ssl_set_ca_chain mbedtls_ssl_conf_ca_chain +#define ssl_set_cbc_record_splitting mbedtls_ssl_conf_cbc_record_splitting +#define ssl_set_ciphersuites mbedtls_ssl_conf_ciphersuites +#define ssl_set_ciphersuites_for_version mbedtls_ssl_conf_ciphersuites_for_version +#define ssl_set_client_transport_id mbedtls_ssl_set_client_transport_id +#define ssl_set_curves mbedtls_ssl_conf_curves +#define ssl_set_dbg mbedtls_ssl_conf_dbg +#define ssl_set_dh_param mbedtls_ssl_conf_dh_param +#define ssl_set_dh_param_ctx mbedtls_ssl_conf_dh_param_ctx +#define ssl_set_dtls_anti_replay mbedtls_ssl_conf_dtls_anti_replay +#define ssl_set_dtls_badmac_limit mbedtls_ssl_conf_dtls_badmac_limit +#define ssl_set_dtls_cookies mbedtls_ssl_conf_dtls_cookies +#define ssl_set_encrypt_then_mac mbedtls_ssl_conf_encrypt_then_mac +#define ssl_set_endpoint mbedtls_ssl_conf_endpoint +#define ssl_set_extended_master_secret mbedtls_ssl_conf_extended_master_secret +#define ssl_set_fallback mbedtls_ssl_conf_fallback +#define ssl_set_handshake_timeout mbedtls_ssl_conf_handshake_timeout +#define ssl_set_hostname mbedtls_ssl_set_hostname +#define ssl_set_max_frag_len mbedtls_ssl_conf_max_frag_len +#define ssl_set_max_version mbedtls_ssl_conf_max_version +#define ssl_set_min_version mbedtls_ssl_conf_min_version +#define ssl_set_own_cert mbedtls_ssl_conf_own_cert +#define ssl_set_own_cert_alt mbedtls_ssl_set_own_cert_alt +#define ssl_set_own_cert_rsa mbedtls_ssl_set_own_cert_rsa +#define ssl_set_psk mbedtls_ssl_conf_psk +#define ssl_set_psk_cb mbedtls_ssl_conf_psk_cb +#define ssl_set_renegotiation mbedtls_ssl_conf_renegotiation +#define ssl_set_renegotiation_enforced mbedtls_ssl_conf_renegotiation_enforced +#define ssl_set_renegotiation_period mbedtls_ssl_conf_renegotiation_period +#define ssl_set_rng mbedtls_ssl_conf_rng +#define ssl_set_session mbedtls_ssl_set_session +#define ssl_set_session_cache mbedtls_ssl_conf_session_cache +#define ssl_set_session_ticket_lifetime mbedtls_ssl_conf_session_ticket_lifetime +#define ssl_set_session_tickets mbedtls_ssl_conf_session_tickets +#define ssl_set_sni mbedtls_ssl_conf_sni +#define ssl_set_transport mbedtls_ssl_conf_transport +#define ssl_set_truncated_hmac mbedtls_ssl_conf_truncated_hmac +#define ssl_set_verify mbedtls_ssl_conf_verify +#define ssl_sig_from_pk mbedtls_ssl_sig_from_pk +#define ssl_states mbedtls_ssl_states +#define ssl_ticket_keys mbedtls_ssl_ticket_keys +#define ssl_transform mbedtls_ssl_transform +#define ssl_transform_free mbedtls_ssl_transform_free +#define ssl_write mbedtls_ssl_write +#define ssl_write_certificate mbedtls_ssl_write_certificate +#define ssl_write_change_cipher_spec mbedtls_ssl_write_change_cipher_spec +#define ssl_write_finished mbedtls_ssl_write_finished +#define ssl_write_record mbedtls_ssl_write_record +#define ssl_write_version mbedtls_ssl_write_version +#define supported_ciphers mbedtls_cipher_supported +#define t_sint mbedtls_mpi_sint +#define t_udbl mbedtls_t_udbl +#define t_uint mbedtls_mpi_uint +#define test_ca_crt mbedtls_test_ca_crt +#define test_ca_crt_ec mbedtls_test_ca_crt_ec +#define test_ca_crt_rsa mbedtls_test_ca_crt_rsa +#define test_ca_key mbedtls_test_ca_key +#define test_ca_key_ec mbedtls_test_ca_key_ec +#define test_ca_key_rsa mbedtls_test_ca_key_rsa +#define test_ca_list mbedtls_test_cas_pem +#define test_ca_pwd mbedtls_test_ca_pwd +#define test_ca_pwd_ec mbedtls_test_ca_pwd_ec +#define test_ca_pwd_rsa mbedtls_test_ca_pwd_rsa +#define test_cli_crt mbedtls_test_cli_crt +#define test_cli_crt_ec mbedtls_test_cli_crt_ec +#define test_cli_crt_rsa mbedtls_test_cli_crt_rsa +#define test_cli_key mbedtls_test_cli_key +#define test_cli_key_ec mbedtls_test_cli_key_ec +#define test_cli_key_rsa mbedtls_test_cli_key_rsa +#define test_dhm_params mbedtls_test_dhm_params +#define test_srv_crt mbedtls_test_srv_crt +#define test_srv_crt_ec mbedtls_test_srv_crt_ec +#define test_srv_crt_rsa mbedtls_test_srv_crt_rsa +#define test_srv_key mbedtls_test_srv_key +#define test_srv_key_ec mbedtls_test_srv_key_ec +#define test_srv_key_rsa mbedtls_test_srv_key_rsa +#define threading_mutex_t mbedtls_threading_mutex_t +#define threading_set_alt mbedtls_threading_set_alt +#define timing_self_test mbedtls_timing_self_test +#define version_check_feature mbedtls_version_check_feature +#define version_get_number mbedtls_version_get_number +#define version_get_string mbedtls_version_get_string +#define version_get_string_full mbedtls_version_get_string_full +#define x509_bitstring mbedtls_x509_bitstring +#define x509_buf mbedtls_x509_buf +#define x509_crl mbedtls_x509_crl +#define x509_crl_entry mbedtls_x509_crl_entry +#define x509_crl_free mbedtls_x509_crl_free +#define x509_crl_info mbedtls_x509_crl_info +#define x509_crl_init mbedtls_x509_crl_init +#define x509_crl_parse mbedtls_x509_crl_parse +#define x509_crl_parse_der mbedtls_x509_crl_parse_der +#define x509_crl_parse_file mbedtls_x509_crl_parse_file +#define x509_crt mbedtls_x509_crt +#define x509_crt_check_extended_key_usage mbedtls_x509_crt_check_extended_key_usage +#define x509_crt_check_key_usage mbedtls_x509_crt_check_key_usage +#define x509_crt_free mbedtls_x509_crt_free +#define x509_crt_info mbedtls_x509_crt_info +#define x509_crt_init mbedtls_x509_crt_init +#define x509_crt_parse mbedtls_x509_crt_parse +#define x509_crt_parse_der mbedtls_x509_crt_parse_der +#define x509_crt_parse_file mbedtls_x509_crt_parse_file +#define x509_crt_parse_path mbedtls_x509_crt_parse_path +#define x509_crt_revoked mbedtls_x509_crt_is_revoked +#define x509_crt_verify mbedtls_x509_crt_verify +#define x509_csr mbedtls_x509_csr +#define x509_csr_free mbedtls_x509_csr_free +#define x509_csr_info mbedtls_x509_csr_info +#define x509_csr_init mbedtls_x509_csr_init +#define x509_csr_parse mbedtls_x509_csr_parse +#define x509_csr_parse_der mbedtls_x509_csr_parse_der +#define x509_csr_parse_file mbedtls_x509_csr_parse_file +#define x509_dn_gets mbedtls_x509_dn_gets +#define x509_get_alg mbedtls_x509_get_alg +#define x509_get_alg_null mbedtls_x509_get_alg_null +#define x509_get_ext mbedtls_x509_get_ext +#define x509_get_name mbedtls_x509_get_name +#define x509_get_rsassa_pss_params mbedtls_x509_get_rsassa_pss_params +#define x509_get_serial mbedtls_x509_get_serial +#define x509_get_sig mbedtls_x509_get_sig +#define x509_get_sig_alg mbedtls_x509_get_sig_alg +#define x509_get_time mbedtls_x509_get_time +#define x509_key_size_helper mbedtls_x509_key_size_helper +#define x509_name mbedtls_x509_name +#define x509_oid_get_description mbedtls_x509_oid_get_description +#define x509_oid_get_numeric_string mbedtls_x509_oid_get_numeric_string +#define x509_self_test mbedtls_x509_self_test +#define x509_sequence mbedtls_x509_sequence +#define x509_serial_gets mbedtls_x509_serial_gets +#define x509_set_extension mbedtls_x509_set_extension +#define x509_sig_alg_gets mbedtls_x509_sig_alg_gets +#define x509_string_to_names mbedtls_x509_string_to_names +#define x509_time mbedtls_x509_time +#define x509_time_expired mbedtls_x509_time_is_past +#define x509_time_future mbedtls_x509_time_is_future +#define x509_write_extensions mbedtls_x509_write_extensions +#define x509_write_names mbedtls_x509_write_names +#define x509_write_sig mbedtls_x509_write_sig +#define x509write_cert mbedtls_x509write_cert +#define x509write_crt_der mbedtls_x509write_crt_der +#define x509write_crt_free mbedtls_x509write_crt_free +#define x509write_crt_init mbedtls_x509write_crt_init +#define x509write_crt_pem mbedtls_x509write_crt_pem +#define x509write_crt_set_authority_key_identifier mbedtls_x509write_crt_set_authority_key_identifier +#define x509write_crt_set_basic_constraints mbedtls_x509write_crt_set_basic_constraints +#define x509write_crt_set_extension mbedtls_x509write_crt_set_extension +#define x509write_crt_set_issuer_key mbedtls_x509write_crt_set_issuer_key +#define x509write_crt_set_issuer_name mbedtls_x509write_crt_set_issuer_name +#define x509write_crt_set_key_usage mbedtls_x509write_crt_set_key_usage +#define x509write_crt_set_md_alg mbedtls_x509write_crt_set_md_alg +#define x509write_crt_set_ns_cert_type mbedtls_x509write_crt_set_ns_cert_type +#define x509write_crt_set_serial mbedtls_x509write_crt_set_serial +#define x509write_crt_set_subject_key mbedtls_x509write_crt_set_subject_key +#define x509write_crt_set_subject_key_identifier mbedtls_x509write_crt_set_subject_key_identifier +#define x509write_crt_set_subject_name mbedtls_x509write_crt_set_subject_name +#define x509write_crt_set_validity mbedtls_x509write_crt_set_validity +#define x509write_crt_set_version mbedtls_x509write_crt_set_version +#define x509write_csr mbedtls_x509write_csr +#define x509write_csr_der mbedtls_x509write_csr_der +#define x509write_csr_free mbedtls_x509write_csr_free +#define x509write_csr_init mbedtls_x509write_csr_init +#define x509write_csr_pem mbedtls_x509write_csr_pem +#define x509write_csr_set_extension mbedtls_x509write_csr_set_extension +#define x509write_csr_set_key mbedtls_x509write_csr_set_key +#define x509write_csr_set_key_usage mbedtls_x509write_csr_set_key_usage +#define x509write_csr_set_md_alg mbedtls_x509write_csr_set_md_alg +#define x509write_csr_set_ns_cert_type mbedtls_x509write_csr_set_ns_cert_type +#define x509write_csr_set_subject_name mbedtls_x509write_csr_set_subject_name +#define xtea_context mbedtls_xtea_context +#define xtea_crypt_cbc mbedtls_xtea_crypt_cbc +#define xtea_crypt_ecb mbedtls_xtea_crypt_ecb +#define xtea_free mbedtls_xtea_free +#define xtea_init mbedtls_xtea_init +#define xtea_self_test mbedtls_xtea_self_test +#define xtea_setup mbedtls_xtea_setup + +#endif /* compat-1.3.h */ +#endif /* MBEDTLS_DEPRECATED_REMOVED */ diff --git a/tools/sdk/include/mbedtls/mbedtls/config.h b/tools/sdk/include/mbedtls/mbedtls/config.h new file mode 100644 index 00000000..3b7c85b3 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/config.h @@ -0,0 +1,2587 @@ +/** + * \file config.h + * + * \brief Configuration options (set of defines) + * + * This set of compile-time options may be used to enable + * or disable features selectively, and reduce the global + * memory footprint. + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +#ifndef MBEDTLS_CONFIG_H +#define MBEDTLS_CONFIG_H + +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif + +/** + * \name SECTION: System support + * + * This section sets system specific settings. + * \{ + */ + +/** + * \def MBEDTLS_HAVE_ASM + * + * The compiler has support for asm(). + * + * Requires support for asm() in compiler. + * + * Used in: + * library/timing.c + * library/padlock.c + * include/mbedtls/bn_mul.h + * + * Comment to disable the use of assembly code. + */ +#define MBEDTLS_HAVE_ASM + +/** + * \def MBEDTLS_HAVE_SSE2 + * + * CPU supports SSE2 instruction set. + * + * Uncomment if the CPU supports SSE2 (IA-32 specific). + */ +//#define MBEDTLS_HAVE_SSE2 + +/** + * \def MBEDTLS_HAVE_TIME + * + * System has time.h and time(). + * The time does not need to be correct, only time differences are used, + * by contrast with MBEDTLS_HAVE_TIME_DATE + * + * Comment if your system does not support time functions + */ +#define MBEDTLS_HAVE_TIME + +/** + * \def MBEDTLS_HAVE_TIME_DATE + * + * System has time.h and time(), gmtime() and the clock is correct. + * The time needs to be correct (not necesarily very accurate, but at least + * the date should be correct). This is used to verify the validity period of + * X.509 certificates. + * + * Comment if your system does not have a correct clock. + */ +#define MBEDTLS_HAVE_TIME_DATE + +/** + * \def MBEDTLS_PLATFORM_MEMORY + * + * Enable the memory allocation layer. + * + * By default mbed TLS uses the system-provided calloc() and free(). + * This allows different allocators (self-implemented or provided) to be + * provided to the platform abstraction layer. + * + * Enabling MBEDTLS_PLATFORM_MEMORY without the + * MBEDTLS_PLATFORM_{FREE,CALLOC}_MACROs will provide + * "mbedtls_platform_set_calloc_free()" allowing you to set an alternative calloc() and + * free() function pointer at runtime. + * + * Enabling MBEDTLS_PLATFORM_MEMORY and specifying + * MBEDTLS_PLATFORM_{CALLOC,FREE}_MACROs will allow you to specify the + * alternate function at compile time. + * + * Requires: MBEDTLS_PLATFORM_C + * + * Enable this layer to allow use of alternative memory allocators. + */ +//#define MBEDTLS_PLATFORM_MEMORY + +/** + * \def MBEDTLS_PLATFORM_NO_STD_FUNCTIONS + * + * Do not assign standard functions in the platform layer (e.g. calloc() to + * MBEDTLS_PLATFORM_STD_CALLOC and printf() to MBEDTLS_PLATFORM_STD_PRINTF) + * + * This makes sure there are no linking errors on platforms that do not support + * these functions. You will HAVE to provide alternatives, either at runtime + * via the platform_set_xxx() functions or at compile time by setting + * the MBEDTLS_PLATFORM_STD_XXX defines, or enabling a + * MBEDTLS_PLATFORM_XXX_MACRO. + * + * Requires: MBEDTLS_PLATFORM_C + * + * Uncomment to prevent default assignment of standard functions in the + * platform layer. + */ +//#define MBEDTLS_PLATFORM_NO_STD_FUNCTIONS + +/** + * \def MBEDTLS_PLATFORM_EXIT_ALT + * + * MBEDTLS_PLATFORM_XXX_ALT: Uncomment a macro to let mbed TLS support the + * function in the platform abstraction layer. + * + * Example: In case you uncomment MBEDTLS_PLATFORM_PRINTF_ALT, mbed TLS will + * provide a function "mbedtls_platform_set_printf()" that allows you to set an + * alternative printf function pointer. + * + * All these define require MBEDTLS_PLATFORM_C to be defined! + * + * \note MBEDTLS_PLATFORM_SNPRINTF_ALT is required on Windows; + * it will be enabled automatically by check_config.h + * + * \warning MBEDTLS_PLATFORM_XXX_ALT cannot be defined at the same time as + * MBEDTLS_PLATFORM_XXX_MACRO! + * + * Uncomment a macro to enable alternate implementation of specific base + * platform function + */ +//#define MBEDTLS_PLATFORM_EXIT_ALT +//#define MBEDTLS_PLATFORM_TIME_ALT +//#define MBEDTLS_PLATFORM_FPRINTF_ALT +//#define MBEDTLS_PLATFORM_PRINTF_ALT +//#define MBEDTLS_PLATFORM_SNPRINTF_ALT +//#define MBEDTLS_PLATFORM_NV_SEED_ALT + +/** + * \def MBEDTLS_DEPRECATED_WARNING + * + * Mark deprecated functions so that they generate a warning if used. + * Functions deprecated in one version will usually be removed in the next + * version. You can enable this to help you prepare the transition to a new + * major version by making sure your code is not using these functions. + * + * This only works with GCC and Clang. With other compilers, you may want to + * use MBEDTLS_DEPRECATED_REMOVED + * + * Uncomment to get warnings on using deprecated functions. + */ +//#define MBEDTLS_DEPRECATED_WARNING + +/** + * \def MBEDTLS_DEPRECATED_REMOVED + * + * Remove deprecated functions so that they generate an error if used. + * Functions deprecated in one version will usually be removed in the next + * version. You can enable this to help you prepare the transition to a new + * major version by making sure your code is not using these functions. + * + * Uncomment to get errors on using deprecated functions. + */ +//#define MBEDTLS_DEPRECATED_REMOVED + +/* \} name SECTION: System support */ + +/** + * \name SECTION: mbed TLS feature support + * + * This section sets support for features that are or are not needed + * within the modules that are enabled. + * \{ + */ + +/** + * \def MBEDTLS_TIMING_ALT + * + * Uncomment to provide your own alternate implementation for mbedtls_timing_hardclock(), + * mbedtls_timing_get_timer(), mbedtls_set_alarm(), mbedtls_set/get_delay() + * + * Only works if you have MBEDTLS_TIMING_C enabled. + * + * You will need to provide a header "timing_alt.h" and an implementation at + * compile time. + */ +//#define MBEDTLS_TIMING_ALT + +/** + * \def MBEDTLS_AES_ALT + * + * MBEDTLS__MODULE_NAME__ALT: Uncomment a macro to let mbed TLS use your + * alternate core implementation of a symmetric crypto or hash module (e.g. + * platform specific assembly optimized implementations). Keep in mind that + * the function prototypes should remain the same. + * + * This replaces the whole module. If you only want to replace one of the + * functions, use one of the MBEDTLS__FUNCTION_NAME__ALT flags. + * + * Example: In case you uncomment MBEDTLS_AES_ALT, mbed TLS will no longer + * provide the "struct mbedtls_aes_context" definition and omit the base function + * declarations and implementations. "aes_alt.h" will be included from + * "aes.h" to include the new function definitions. + * + * Uncomment a macro to enable alternate implementation of the corresponding + * module. + */ +//#define MBEDTLS_AES_ALT +//#define MBEDTLS_ARC4_ALT +//#define MBEDTLS_BLOWFISH_ALT +//#define MBEDTLS_CAMELLIA_ALT +//#define MBEDTLS_DES_ALT +//#define MBEDTLS_XTEA_ALT +//#define MBEDTLS_MD2_ALT +//#define MBEDTLS_MD4_ALT +//#define MBEDTLS_MD5_ALT +//#define MBEDTLS_RIPEMD160_ALT +//#define MBEDTLS_SHA1_ALT +//#define MBEDTLS_SHA256_ALT +//#define MBEDTLS_SHA512_ALT + +/** + * \def MBEDTLS_MD2_PROCESS_ALT + * + * MBEDTLS__FUNCTION_NAME__ALT: Uncomment a macro to let mbed TLS use you + * alternate core implementation of symmetric crypto or hash function. Keep in + * mind that function prototypes should remain the same. + * + * This replaces only one function. The header file from mbed TLS is still + * used, in contrast to the MBEDTLS__MODULE_NAME__ALT flags. + * + * Example: In case you uncomment MBEDTLS_SHA256_PROCESS_ALT, mbed TLS will + * no longer provide the mbedtls_sha1_process() function, but it will still provide + * the other function (using your mbedtls_sha1_process() function) and the definition + * of mbedtls_sha1_context, so your implementation of mbedtls_sha1_process must be compatible + * with this definition. + * + * Note: if you use the AES_xxx_ALT macros, then is is recommended to also set + * MBEDTLS_AES_ROM_TABLES in order to help the linker garbage-collect the AES + * tables. + * + * Uncomment a macro to enable alternate implementation of the corresponding + * function. + */ +//#define MBEDTLS_MD2_PROCESS_ALT +//#define MBEDTLS_MD4_PROCESS_ALT +//#define MBEDTLS_MD5_PROCESS_ALT +//#define MBEDTLS_RIPEMD160_PROCESS_ALT +//#define MBEDTLS_SHA1_PROCESS_ALT +//#define MBEDTLS_SHA256_PROCESS_ALT +//#define MBEDTLS_SHA512_PROCESS_ALT +//#define MBEDTLS_DES_SETKEY_ALT +//#define MBEDTLS_DES_CRYPT_ECB_ALT +//#define MBEDTLS_DES3_CRYPT_ECB_ALT +//#define MBEDTLS_AES_SETKEY_ENC_ALT +//#define MBEDTLS_AES_SETKEY_DEC_ALT +//#define MBEDTLS_AES_ENCRYPT_ALT +//#define MBEDTLS_AES_DECRYPT_ALT + +/** + * \def MBEDTLS_TEST_NULL_ENTROPY + * + * Enables testing and use of mbed TLS without any configured entropy sources. + * This permits use of the library on platforms before an entropy source has + * been integrated (see for example the MBEDTLS_ENTROPY_HARDWARE_ALT or the + * MBEDTLS_ENTROPY_NV_SEED switches). + * + * WARNING! This switch MUST be disabled in production builds, and is suitable + * only for development. + * Enabling the switch negates any security provided by the library. + * + * Requires MBEDTLS_ENTROPY_C, MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES + * + */ +//#define MBEDTLS_TEST_NULL_ENTROPY + +/** + * \def MBEDTLS_ENTROPY_HARDWARE_ALT + * + * Uncomment this macro to let mbed TLS use your own implementation of a + * hardware entropy collector. + * + * Your function must be called \c mbedtls_hardware_poll(), have the same + * prototype as declared in entropy_poll.h, and accept NULL as first argument. + * + * Uncomment to use your own hardware entropy collector. + */ +//#define MBEDTLS_ENTROPY_HARDWARE_ALT + +/** + * \def MBEDTLS_AES_ROM_TABLES + * + * Store the AES tables in ROM. + * + * Uncomment this macro to store the AES tables in ROM. + */ +//#define MBEDTLS_AES_ROM_TABLES + +/** + * \def MBEDTLS_CAMELLIA_SMALL_MEMORY + * + * Use less ROM for the Camellia implementation (saves about 768 bytes). + * + * Uncomment this macro to use less memory for Camellia. + */ +//#define MBEDTLS_CAMELLIA_SMALL_MEMORY + +/** + * \def MBEDTLS_CIPHER_MODE_CBC + * + * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. + */ +#define MBEDTLS_CIPHER_MODE_CBC + +/** + * \def MBEDTLS_CIPHER_MODE_CFB + * + * Enable Cipher Feedback mode (CFB) for symmetric ciphers. + */ +#define MBEDTLS_CIPHER_MODE_CFB + +/** + * \def MBEDTLS_CIPHER_MODE_CTR + * + * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. + */ +#define MBEDTLS_CIPHER_MODE_CTR + +/** + * \def MBEDTLS_CIPHER_NULL_CIPHER + * + * Enable NULL cipher. + * Warning: Only do so when you know what you are doing. This allows for + * encryption or channels without any security! + * + * Requires MBEDTLS_ENABLE_WEAK_CIPHERSUITES as well to enable + * the following ciphersuites: + * MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA + * MBEDTLS_TLS_RSA_WITH_NULL_SHA256 + * MBEDTLS_TLS_RSA_WITH_NULL_SHA + * MBEDTLS_TLS_RSA_WITH_NULL_MD5 + * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA + * MBEDTLS_TLS_PSK_WITH_NULL_SHA384 + * MBEDTLS_TLS_PSK_WITH_NULL_SHA256 + * MBEDTLS_TLS_PSK_WITH_NULL_SHA + * + * Uncomment this macro to enable the NULL cipher and ciphersuites + */ +//#define MBEDTLS_CIPHER_NULL_CIPHER + +/** + * \def MBEDTLS_CIPHER_PADDING_PKCS7 + * + * MBEDTLS_CIPHER_PADDING_XXX: Uncomment or comment macros to add support for + * specific padding modes in the cipher layer with cipher modes that support + * padding (e.g. CBC) + * + * If you disable all padding modes, only full blocks can be used with CBC. + * + * Enable padding modes in the cipher layer. + */ +#define MBEDTLS_CIPHER_PADDING_PKCS7 +#define MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS +#define MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN +#define MBEDTLS_CIPHER_PADDING_ZEROS + +/** + * \def MBEDTLS_ENABLE_WEAK_CIPHERSUITES + * + * Enable weak ciphersuites in SSL / TLS. + * Warning: Only do so when you know what you are doing. This allows for + * channels with virtually no security at all! + * + * This enables the following ciphersuites: + * MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA + * + * Uncomment this macro to enable weak ciphersuites + */ +//#define MBEDTLS_ENABLE_WEAK_CIPHERSUITES + +/** + * \def MBEDTLS_REMOVE_ARC4_CIPHERSUITES + * + * Remove RC4 ciphersuites by default in SSL / TLS. + * This flag removes the ciphersuites based on RC4 from the default list as + * returned by mbedtls_ssl_list_ciphersuites(). However, it is still possible to + * enable (some of) them with mbedtls_ssl_conf_ciphersuites() by including them + * explicitly. + * + * Uncomment this macro to remove RC4 ciphersuites by default. + */ +#define MBEDTLS_REMOVE_ARC4_CIPHERSUITES + +/** + * \def MBEDTLS_ECP_DP_SECP192R1_ENABLED + * + * MBEDTLS_ECP_XXXX_ENABLED: Enables specific curves within the Elliptic Curve + * module. By default all supported curves are enabled. + * + * Comment macros to disable the curve and functions for it + */ +#define MBEDTLS_ECP_DP_SECP192R1_ENABLED +#define MBEDTLS_ECP_DP_SECP224R1_ENABLED +#define MBEDTLS_ECP_DP_SECP256R1_ENABLED +#define MBEDTLS_ECP_DP_SECP384R1_ENABLED +#define MBEDTLS_ECP_DP_SECP521R1_ENABLED +#define MBEDTLS_ECP_DP_SECP192K1_ENABLED +#define MBEDTLS_ECP_DP_SECP224K1_ENABLED +#define MBEDTLS_ECP_DP_SECP256K1_ENABLED +#define MBEDTLS_ECP_DP_BP256R1_ENABLED +#define MBEDTLS_ECP_DP_BP384R1_ENABLED +#define MBEDTLS_ECP_DP_BP512R1_ENABLED +#define MBEDTLS_ECP_DP_CURVE25519_ENABLED + +/** + * \def MBEDTLS_ECP_NIST_OPTIM + * + * Enable specific 'modulo p' routines for each NIST prime. + * Depending on the prime and architecture, makes operations 4 to 8 times + * faster on the corresponding curve. + * + * Comment this macro to disable NIST curves optimisation. + */ +#define MBEDTLS_ECP_NIST_OPTIM + +/** + * \def MBEDTLS_ECDSA_DETERMINISTIC + * + * Enable deterministic ECDSA (RFC 6979). + * Standard ECDSA is "fragile" in the sense that lack of entropy when signing + * may result in a compromise of the long-term signing key. This is avoided by + * the deterministic variant. + * + * Requires: MBEDTLS_HMAC_DRBG_C + * + * Comment this macro to disable deterministic ECDSA. + */ +#define MBEDTLS_ECDSA_DETERMINISTIC + +/** + * \def MBEDTLS_KEY_EXCHANGE_PSK_ENABLED + * + * Enable the PSK based ciphersuite modes in SSL / TLS. + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_PSK_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED + * + * Enable the DHE-PSK based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_DHM_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED + * + * Enable the ECDHE-PSK based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_ECDH_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED + * + * Enable the RSA-PSK based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, + * MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_RSA_ENABLED + * + * Enable the RSA-only based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, + * MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 + */ +#define MBEDTLS_KEY_EXCHANGE_RSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED + * + * Enable the DHE-RSA based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_DHM_C, MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, + * MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED + * + * Enable the ECDHE-RSA based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_ECDH_C, MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, + * MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED + * + * Enable the ECDHE-ECDSA based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_ECDH_C, MBEDTLS_ECDSA_C, MBEDTLS_X509_CRT_PARSE_C, + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED + * + * Enable the ECDH-ECDSA based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_ECDH_C, MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 + */ +#define MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED + * + * Enable the ECDH-RSA based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_ECDH_C, MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 + */ +#define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED + * + * Enable the ECJPAKE based ciphersuite modes in SSL / TLS. + * + * \warning This is currently experimental. EC J-PAKE support is based on the + * Thread v1.0.0 specification; incompatible changes to the specification + * might still happen. For this reason, this is disabled by default. + * + * Requires: MBEDTLS_ECJPAKE_C + * MBEDTLS_SHA256_C + * MBEDTLS_ECP_DP_SECP256R1_ENABLED + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 + */ +//#define MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED + +/** + * \def MBEDTLS_PK_PARSE_EC_EXTENDED + * + * Enhance support for reading EC keys using variants of SEC1 not allowed by + * RFC 5915 and RFC 5480. + * + * Currently this means parsing the SpecifiedECDomain choice of EC + * parameters (only known groups are supported, not arbitrary domains, to + * avoid validation issues). + * + * Disable if you only need to support RFC 5915 + 5480 key formats. + */ +#define MBEDTLS_PK_PARSE_EC_EXTENDED + +/** + * \def MBEDTLS_ERROR_STRERROR_DUMMY + * + * Enable a dummy error function to make use of mbedtls_strerror() in + * third party libraries easier when MBEDTLS_ERROR_C is disabled + * (no effect when MBEDTLS_ERROR_C is enabled). + * + * You can safely disable this if MBEDTLS_ERROR_C is enabled, or if you're + * not using mbedtls_strerror() or error_strerror() in your application. + * + * Disable if you run into name conflicts and want to really remove the + * mbedtls_strerror() + */ +#define MBEDTLS_ERROR_STRERROR_DUMMY + +/** + * \def MBEDTLS_GENPRIME + * + * Enable the prime-number generation code. + * + * Requires: MBEDTLS_BIGNUM_C + */ +#define MBEDTLS_GENPRIME + +/** + * \def MBEDTLS_FS_IO + * + * Enable functions that use the filesystem. + */ +#define MBEDTLS_FS_IO + +/** + * \def MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES + * + * Do not add default entropy sources. These are the platform specific, + * mbedtls_timing_hardclock and HAVEGE based poll functions. + * + * This is useful to have more control over the added entropy sources in an + * application. + * + * Uncomment this macro to prevent loading of default entropy functions. + */ +//#define MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES + +/** + * \def MBEDTLS_NO_PLATFORM_ENTROPY + * + * Do not use built-in platform entropy functions. + * This is useful if your platform does not support + * standards like the /dev/urandom or Windows CryptoAPI. + * + * Uncomment this macro to disable the built-in platform entropy functions. + */ +//#define MBEDTLS_NO_PLATFORM_ENTROPY + +/** + * \def MBEDTLS_ENTROPY_FORCE_SHA256 + * + * Force the entropy accumulator to use a SHA-256 accumulator instead of the + * default SHA-512 based one (if both are available). + * + * Requires: MBEDTLS_SHA256_C + * + * On 32-bit systems SHA-256 can be much faster than SHA-512. Use this option + * if you have performance concerns. + * + * This option is only useful if both MBEDTLS_SHA256_C and + * MBEDTLS_SHA512_C are defined. Otherwise the available hash module is used. + */ +//#define MBEDTLS_ENTROPY_FORCE_SHA256 + +/** + * \def MBEDTLS_ENTROPY_NV_SEED + * + * Enable the non-volatile (NV) seed file-based entropy source. + * (Also enables the NV seed read/write functions in the platform layer) + * + * This is crucial (if not required) on systems that do not have a + * cryptographic entropy source (in hardware or kernel) available. + * + * Requires: MBEDTLS_ENTROPY_C, MBEDTLS_PLATFORM_C + * + * \note The read/write functions that are used by the entropy source are + * determined in the platform layer, and can be modified at runtime and/or + * compile-time depending on the flags (MBEDTLS_PLATFORM_NV_SEED_*) used. + * + * \note If you use the default implementation functions that read a seedfile + * with regular fopen(), please make sure you make a seedfile with the + * proper name (defined in MBEDTLS_PLATFORM_STD_NV_SEED_FILE) and at + * least MBEDTLS_ENTROPY_BLOCK_SIZE bytes in size that can be read from + * and written to or you will get an entropy source error! The default + * implementation will only use the first MBEDTLS_ENTROPY_BLOCK_SIZE + * bytes from the file. + * + * \note The entropy collector will write to the seed file before entropy is + * given to an external source, to update it. + */ +//#define MBEDTLS_ENTROPY_NV_SEED + +/** + * \def MBEDTLS_MEMORY_DEBUG + * + * Enable debugging of buffer allocator memory issues. Automatically prints + * (to stderr) all (fatal) messages on memory allocation issues. Enables + * function for 'debug output' of allocated memory. + * + * Requires: MBEDTLS_MEMORY_BUFFER_ALLOC_C + * + * Uncomment this macro to let the buffer allocator print out error messages. + */ +//#define MBEDTLS_MEMORY_DEBUG + +/** + * \def MBEDTLS_MEMORY_BACKTRACE + * + * Include backtrace information with each allocated block. + * + * Requires: MBEDTLS_MEMORY_BUFFER_ALLOC_C + * GLIBC-compatible backtrace() an backtrace_symbols() support + * + * Uncomment this macro to include backtrace information + */ +//#define MBEDTLS_MEMORY_BACKTRACE + +/** + * \def MBEDTLS_PK_RSA_ALT_SUPPORT + * + * Support external private RSA keys (eg from a HSM) in the PK layer. + * + * Comment this macro to disable support for external private RSA keys. + */ +#define MBEDTLS_PK_RSA_ALT_SUPPORT + +/** + * \def MBEDTLS_PKCS1_V15 + * + * Enable support for PKCS#1 v1.5 encoding. + * + * Requires: MBEDTLS_RSA_C + * + * This enables support for PKCS#1 v1.5 operations. + */ +#define MBEDTLS_PKCS1_V15 + +/** + * \def MBEDTLS_PKCS1_V21 + * + * Enable support for PKCS#1 v2.1 encoding. + * + * Requires: MBEDTLS_MD_C, MBEDTLS_RSA_C + * + * This enables support for RSAES-OAEP and RSASSA-PSS operations. + */ +#define MBEDTLS_PKCS1_V21 + +/** + * \def MBEDTLS_RSA_NO_CRT + * + * Do not use the Chinese Remainder Theorem for the RSA private operation. + * + * Uncomment this macro to disable the use of CRT in RSA. + * + */ +//#define MBEDTLS_RSA_NO_CRT + +/** + * \def MBEDTLS_SELF_TEST + * + * Enable the checkup functions (*_self_test). + */ +#define MBEDTLS_SELF_TEST + +/** + * \def MBEDTLS_SHA256_SMALLER + * + * Enable an implementation of SHA-256 that has lower ROM footprint but also + * lower performance. + * + * The default implementation is meant to be a reasonnable compromise between + * performance and size. This version optimizes more aggressively for size at + * the expense of performance. Eg on Cortex-M4 it reduces the size of + * mbedtls_sha256_process() from ~2KB to ~0.5KB for a performance hit of about + * 30%. + * + * Uncomment to enable the smaller implementation of SHA256. + */ +//#define MBEDTLS_SHA256_SMALLER + +/** + * \def MBEDTLS_SSL_AEAD_RANDOM_IV + * + * Generate a random IV rather than using the record sequence number as a + * nonce for ciphersuites using and AEAD algorithm (GCM or CCM). + * + * Using the sequence number is generally recommended. + * + * Uncomment this macro to always use random IVs with AEAD ciphersuites. + */ +//#define MBEDTLS_SSL_AEAD_RANDOM_IV + +/** + * \def MBEDTLS_SSL_ALL_ALERT_MESSAGES + * + * Enable sending of alert messages in case of encountered errors as per RFC. + * If you choose not to send the alert messages, mbed TLS can still communicate + * with other servers, only debugging of failures is harder. + * + * The advantage of not sending alert messages, is that no information is given + * about reasons for failures thus preventing adversaries of gaining intel. + * + * Enable sending of all alert messages + */ +#define MBEDTLS_SSL_ALL_ALERT_MESSAGES + +/** + * \def MBEDTLS_SSL_DEBUG_ALL + * + * Enable the debug messages in SSL module for all issues. + * Debug messages have been disabled in some places to prevent timing + * attacks due to (unbalanced) debugging function calls. + * + * If you need all error reporting you should enable this during debugging, + * but remove this for production servers that should log as well. + * + * Uncomment this macro to report all debug messages on errors introducing + * a timing side-channel. + * + */ +//#define MBEDTLS_SSL_DEBUG_ALL + +/** \def MBEDTLS_SSL_ENCRYPT_THEN_MAC + * + * Enable support for Encrypt-then-MAC, RFC 7366. + * + * This allows peers that both support it to use a more robust protection for + * ciphersuites using CBC, providing deep resistance against timing attacks + * on the padding or underlying cipher. + * + * This only affects CBC ciphersuites, and is useless if none is defined. + * + * Requires: MBEDTLS_SSL_PROTO_TLS1 or + * MBEDTLS_SSL_PROTO_TLS1_1 or + * MBEDTLS_SSL_PROTO_TLS1_2 + * + * Comment this macro to disable support for Encrypt-then-MAC + */ +#define MBEDTLS_SSL_ENCRYPT_THEN_MAC + +/** \def MBEDTLS_SSL_EXTENDED_MASTER_SECRET + * + * Enable support for Extended Master Secret, aka Session Hash + * (draft-ietf-tls-session-hash-02). + * + * This was introduced as "the proper fix" to the Triple Handshake familiy of + * attacks, but it is recommended to always use it (even if you disable + * renegotiation), since it actually fixes a more fundamental issue in the + * original SSL/TLS design, and has implications beyond Triple Handshake. + * + * Requires: MBEDTLS_SSL_PROTO_TLS1 or + * MBEDTLS_SSL_PROTO_TLS1_1 or + * MBEDTLS_SSL_PROTO_TLS1_2 + * + * Comment this macro to disable support for Extended Master Secret. + */ +#define MBEDTLS_SSL_EXTENDED_MASTER_SECRET + +/** + * \def MBEDTLS_SSL_FALLBACK_SCSV + * + * Enable support for FALLBACK_SCSV (draft-ietf-tls-downgrade-scsv-00). + * + * For servers, it is recommended to always enable this, unless you support + * only one version of TLS, or know for sure that none of your clients + * implements a fallback strategy. + * + * For clients, you only need this if you're using a fallback strategy, which + * is not recommended in the first place, unless you absolutely need it to + * interoperate with buggy (version-intolerant) servers. + * + * Comment this macro to disable support for FALLBACK_SCSV + */ +#define MBEDTLS_SSL_FALLBACK_SCSV + +/** + * \def MBEDTLS_SSL_HW_RECORD_ACCEL + * + * Enable hooking functions in SSL module for hardware acceleration of + * individual records. + * + * Uncomment this macro to enable hooking functions. + */ +//#define MBEDTLS_SSL_HW_RECORD_ACCEL + +/** + * \def MBEDTLS_SSL_CBC_RECORD_SPLITTING + * + * Enable 1/n-1 record splitting for CBC mode in SSLv3 and TLS 1.0. + * + * This is a countermeasure to the BEAST attack, which also minimizes the risk + * of interoperability issues compared to sending 0-length records. + * + * Comment this macro to disable 1/n-1 record splitting. + */ +#define MBEDTLS_SSL_CBC_RECORD_SPLITTING + +/** + * \def MBEDTLS_SSL_RENEGOTIATION + * + * Disable support for TLS renegotiation. + * + * The two main uses of renegotiation are (1) refresh keys on long-lived + * connections and (2) client authentication after the initial handshake. + * If you don't need renegotiation, it's probably better to disable it, since + * it has been associated with security issues in the past and is easy to + * misuse/misunderstand. + * + * Comment this to disable support for renegotiation. + */ +#define MBEDTLS_SSL_RENEGOTIATION + +/** + * \def MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO + * + * Enable support for receiving and parsing SSLv2 Client Hello messages for the + * SSL Server module (MBEDTLS_SSL_SRV_C). + * + * Uncomment this macro to enable support for SSLv2 Client Hello messages. + */ +//#define MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO + +/** + * \def MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE + * + * Pick the ciphersuite according to the client's preferences rather than ours + * in the SSL Server module (MBEDTLS_SSL_SRV_C). + * + * Uncomment this macro to respect client's ciphersuite order + */ +//#define MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE + +/** + * \def MBEDTLS_SSL_MAX_FRAGMENT_LENGTH + * + * Enable support for RFC 6066 max_fragment_length extension in SSL. + * + * Comment this macro to disable support for the max_fragment_length extension + */ +#define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH + +/** + * \def MBEDTLS_SSL_PROTO_SSL3 + * + * Enable support for SSL 3.0. + * + * Requires: MBEDTLS_MD5_C + * MBEDTLS_SHA1_C + * + * Comment this macro to disable support for SSL 3.0 + */ +//#define MBEDTLS_SSL_PROTO_SSL3 + +/** + * \def MBEDTLS_SSL_PROTO_TLS1 + * + * Enable support for TLS 1.0. + * + * Requires: MBEDTLS_MD5_C + * MBEDTLS_SHA1_C + * + * Comment this macro to disable support for TLS 1.0 + */ +#define MBEDTLS_SSL_PROTO_TLS1 + +/** + * \def MBEDTLS_SSL_PROTO_TLS1_1 + * + * Enable support for TLS 1.1 (and DTLS 1.0 if DTLS is enabled). + * + * Requires: MBEDTLS_MD5_C + * MBEDTLS_SHA1_C + * + * Comment this macro to disable support for TLS 1.1 / DTLS 1.0 + */ +#define MBEDTLS_SSL_PROTO_TLS1_1 + +/** + * \def MBEDTLS_SSL_PROTO_TLS1_2 + * + * Enable support for TLS 1.2 (and DTLS 1.2 if DTLS is enabled). + * + * Requires: MBEDTLS_SHA1_C or MBEDTLS_SHA256_C or MBEDTLS_SHA512_C + * (Depends on ciphersuites) + * + * Comment this macro to disable support for TLS 1.2 / DTLS 1.2 + */ +#define MBEDTLS_SSL_PROTO_TLS1_2 + +/** + * \def MBEDTLS_SSL_PROTO_DTLS + * + * Enable support for DTLS (all available versions). + * + * Enable this and MBEDTLS_SSL_PROTO_TLS1_1 to enable DTLS 1.0, + * and/or this and MBEDTLS_SSL_PROTO_TLS1_2 to enable DTLS 1.2. + * + * Requires: MBEDTLS_SSL_PROTO_TLS1_1 + * or MBEDTLS_SSL_PROTO_TLS1_2 + * + * Comment this macro to disable support for DTLS + */ +#define MBEDTLS_SSL_PROTO_DTLS + +/** + * \def MBEDTLS_SSL_ALPN + * + * Enable support for RFC 7301 Application Layer Protocol Negotiation. + * + * Comment this macro to disable support for ALPN. + */ +#define MBEDTLS_SSL_ALPN + +/** + * \def MBEDTLS_SSL_DTLS_ANTI_REPLAY + * + * Enable support for the anti-replay mechanism in DTLS. + * + * Requires: MBEDTLS_SSL_TLS_C + * MBEDTLS_SSL_PROTO_DTLS + * + * \warning Disabling this is often a security risk! + * See mbedtls_ssl_conf_dtls_anti_replay() for details. + * + * Comment this to disable anti-replay in DTLS. + */ +#define MBEDTLS_SSL_DTLS_ANTI_REPLAY + +/** + * \def MBEDTLS_SSL_DTLS_HELLO_VERIFY + * + * Enable support for HelloVerifyRequest on DTLS servers. + * + * This feature is highly recommended to prevent DTLS servers being used as + * amplifiers in DoS attacks against other hosts. It should always be enabled + * unless you know for sure amplification cannot be a problem in the + * environment in which your server operates. + * + * \warning Disabling this can ba a security risk! (see above) + * + * Requires: MBEDTLS_SSL_PROTO_DTLS + * + * Comment this to disable support for HelloVerifyRequest. + */ +#define MBEDTLS_SSL_DTLS_HELLO_VERIFY + +/** + * \def MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE + * + * Enable server-side support for clients that reconnect from the same port. + * + * Some clients unexpectedly close the connection and try to reconnect using the + * same source port. This needs special support from the server to handle the + * new connection securely, as described in section 4.2.8 of RFC 6347. This + * flag enables that support. + * + * Requires: MBEDTLS_SSL_DTLS_HELLO_VERIFY + * + * Comment this to disable support for clients reusing the source port. + */ +#define MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE + +/** + * \def MBEDTLS_SSL_DTLS_BADMAC_LIMIT + * + * Enable support for a limit of records with bad MAC. + * + * See mbedtls_ssl_conf_dtls_badmac_limit(). + * + * Requires: MBEDTLS_SSL_PROTO_DTLS + */ +#define MBEDTLS_SSL_DTLS_BADMAC_LIMIT + +/** + * \def MBEDTLS_SSL_SESSION_TICKETS + * + * Enable support for RFC 5077 session tickets in SSL. + * Client-side, provides full support for session tickets (maintainance of a + * session store remains the responsibility of the application, though). + * Server-side, you also need to provide callbacks for writing and parsing + * tickets, including authenticated encryption and key management. Example + * callbacks are provided by MBEDTLS_SSL_TICKET_C. + * + * Comment this macro to disable support for SSL session tickets + */ +#define MBEDTLS_SSL_SESSION_TICKETS + +/** + * \def MBEDTLS_SSL_EXPORT_KEYS + * + * Enable support for exporting key block and master secret. + * This is required for certain users of TLS, e.g. EAP-TLS. + * + * Comment this macro to disable support for key export + */ +#define MBEDTLS_SSL_EXPORT_KEYS + +/** + * \def MBEDTLS_SSL_SERVER_NAME_INDICATION + * + * Enable support for RFC 6066 server name indication (SNI) in SSL. + * + * Requires: MBEDTLS_X509_CRT_PARSE_C + * + * Comment this macro to disable support for server name indication in SSL + */ +#define MBEDTLS_SSL_SERVER_NAME_INDICATION + +/** + * \def MBEDTLS_SSL_TRUNCATED_HMAC + * + * Enable support for RFC 6066 truncated HMAC in SSL. + * + * Comment this macro to disable support for truncated HMAC in SSL + */ +#define MBEDTLS_SSL_TRUNCATED_HMAC + +/** + * \def MBEDTLS_THREADING_ALT + * + * Provide your own alternate threading implementation. + * + * Requires: MBEDTLS_THREADING_C + * + * Uncomment this to allow your own alternate threading implementation. + */ +//#define MBEDTLS_THREADING_ALT + +/** + * \def MBEDTLS_THREADING_PTHREAD + * + * Enable the pthread wrapper layer for the threading layer. + * + * Requires: MBEDTLS_THREADING_C + * + * Uncomment this to enable pthread mutexes. + */ +//#define MBEDTLS_THREADING_PTHREAD + +/** + * \def MBEDTLS_VERSION_FEATURES + * + * Allow run-time checking of compile-time enabled features. Thus allowing users + * to check at run-time if the library is for instance compiled with threading + * support via mbedtls_version_check_feature(). + * + * Requires: MBEDTLS_VERSION_C + * + * Comment this to disable run-time checking and save ROM space + */ +#define MBEDTLS_VERSION_FEATURES + +/** + * \def MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 + * + * If set, the X509 parser will not break-off when parsing an X509 certificate + * and encountering an extension in a v1 or v2 certificate. + * + * Uncomment to prevent an error. + */ +//#define MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 + +/** + * \def MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION + * + * If set, the X509 parser will not break-off when parsing an X509 certificate + * and encountering an unknown critical extension. + * + * \warning Depending on your PKI use, enabling this can be a security risk! + * + * Uncomment to prevent an error. + */ +//#define MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION + +/** + * \def MBEDTLS_X509_CHECK_KEY_USAGE + * + * Enable verification of the keyUsage extension (CA and leaf certificates). + * + * Disabling this avoids problems with mis-issued and/or misused + * (intermediate) CA and leaf certificates. + * + * \warning Depending on your PKI use, disabling this can be a security risk! + * + * Comment to skip keyUsage checking for both CA and leaf certificates. + */ +#define MBEDTLS_X509_CHECK_KEY_USAGE + +/** + * \def MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE + * + * Enable verification of the extendedKeyUsage extension (leaf certificates). + * + * Disabling this avoids problems with mis-issued and/or misused certificates. + * + * \warning Depending on your PKI use, disabling this can be a security risk! + * + * Comment to skip extendedKeyUsage checking for certificates. + */ +#define MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE + +/** + * \def MBEDTLS_X509_RSASSA_PSS_SUPPORT + * + * Enable parsing and verification of X.509 certificates, CRLs and CSRS + * signed with RSASSA-PSS (aka PKCS#1 v2.1). + * + * Comment this macro to disallow using RSASSA-PSS in certificates. + */ +#define MBEDTLS_X509_RSASSA_PSS_SUPPORT + +/** + * \def MBEDTLS_ZLIB_SUPPORT + * + * If set, the SSL/TLS module uses ZLIB to support compression and + * decompression of packet data. + * + * \warning TLS-level compression MAY REDUCE SECURITY! See for example the + * CRIME attack. Before enabling this option, you should examine with care if + * CRIME or similar exploits may be a applicable to your use case. + * + * \note Currently compression can't be used with DTLS. + * + * Used in: library/ssl_tls.c + * library/ssl_cli.c + * library/ssl_srv.c + * + * This feature requires zlib library and headers to be present. + * + * Uncomment to enable use of ZLIB + */ +//#define MBEDTLS_ZLIB_SUPPORT +/* \} name SECTION: mbed TLS feature support */ + +/** + * \name SECTION: mbed TLS modules + * + * This section enables or disables entire modules in mbed TLS + * \{ + */ + +/** + * \def MBEDTLS_AESNI_C + * + * Enable AES-NI support on x86-64. + * + * Module: library/aesni.c + * Caller: library/aes.c + * + * Requires: MBEDTLS_HAVE_ASM + * + * This modules adds support for the AES-NI instructions on x86-64 + */ +#define MBEDTLS_AESNI_C + +/** + * \def MBEDTLS_AES_C + * + * Enable the AES block cipher. + * + * Module: library/aes.c + * Caller: library/ssl_tls.c + * library/pem.c + * library/ctr_drbg.c + * + * This module enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA + * + * PEM_PARSE uses AES for decrypting encrypted keys. + */ +#define MBEDTLS_AES_C + +/** + * \def MBEDTLS_ARC4_C + * + * Enable the ARCFOUR stream cipher. + * + * Module: library/arc4.c + * Caller: library/ssl_tls.c + * + * This module enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA + * MBEDTLS_TLS_RSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 + * MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA + * MBEDTLS_TLS_PSK_WITH_RC4_128_SHA + */ +#define MBEDTLS_ARC4_C + +/** + * \def MBEDTLS_ASN1_PARSE_C + * + * Enable the generic ASN1 parser. + * + * Module: library/asn1.c + * Caller: library/x509.c + * library/dhm.c + * library/pkcs12.c + * library/pkcs5.c + * library/pkparse.c + */ +#define MBEDTLS_ASN1_PARSE_C + +/** + * \def MBEDTLS_ASN1_WRITE_C + * + * Enable the generic ASN1 writer. + * + * Module: library/asn1write.c + * Caller: library/ecdsa.c + * library/pkwrite.c + * library/x509_create.c + * library/x509write_crt.c + * library/mbedtls_x509write_csr.c + */ +#define MBEDTLS_ASN1_WRITE_C + +/** + * \def MBEDTLS_BASE64_C + * + * Enable the Base64 module. + * + * Module: library/base64.c + * Caller: library/pem.c + * + * This module is required for PEM support (required by X.509). + */ +#define MBEDTLS_BASE64_C + +/** + * \def MBEDTLS_BIGNUM_C + * + * Enable the multi-precision integer library. + * + * Module: library/bignum.c + * Caller: library/dhm.c + * library/ecp.c + * library/ecdsa.c + * library/rsa.c + * library/ssl_tls.c + * + * This module is required for RSA, DHM and ECC (ECDH, ECDSA) support. + */ +#define MBEDTLS_BIGNUM_C + +/** + * \def MBEDTLS_BLOWFISH_C + * + * Enable the Blowfish block cipher. + * + * Module: library/blowfish.c + */ +#define MBEDTLS_BLOWFISH_C + +/** + * \def MBEDTLS_CAMELLIA_C + * + * Enable the Camellia block cipher. + * + * Module: library/camellia.c + * Caller: library/ssl_tls.c + * + * This module enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 + */ +#define MBEDTLS_CAMELLIA_C + +/** + * \def MBEDTLS_CCM_C + * + * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. + * + * Module: library/ccm.c + * + * Requires: MBEDTLS_AES_C or MBEDTLS_CAMELLIA_C + * + * This module enables the AES-CCM ciphersuites, if other requisites are + * enabled as well. + */ +#define MBEDTLS_CCM_C + +/** + * \def MBEDTLS_CERTS_C + * + * Enable the test certificates. + * + * Module: library/certs.c + * Caller: + * + * This module is used for testing (ssl_client/server). + */ +#define MBEDTLS_CERTS_C + +/** + * \def MBEDTLS_CIPHER_C + * + * Enable the generic cipher layer. + * + * Module: library/cipher.c + * Caller: library/ssl_tls.c + * + * Uncomment to enable generic cipher wrappers. + */ +#define MBEDTLS_CIPHER_C + +/** + * \def MBEDTLS_CTR_DRBG_C + * + * Enable the CTR_DRBG AES-256-based random generator. + * + * Module: library/ctr_drbg.c + * Caller: + * + * Requires: MBEDTLS_AES_C + * + * This module provides the CTR_DRBG AES-256 random number generator. + */ +#define MBEDTLS_CTR_DRBG_C + +/** + * \def MBEDTLS_DEBUG_C + * + * Enable the debug functions. + * + * Module: library/debug.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * + * This module provides debugging functions. + */ +#define MBEDTLS_DEBUG_C + +/** + * \def MBEDTLS_DES_C + * + * Enable the DES block cipher. + * + * Module: library/des.c + * Caller: library/pem.c + * library/ssl_tls.c + * + * This module enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA + * + * PEM_PARSE uses DES/3DES for decrypting encrypted keys. + */ +#define MBEDTLS_DES_C + +/** + * \def MBEDTLS_DHM_C + * + * Enable the Diffie-Hellman-Merkle module. + * + * Module: library/dhm.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * + * This module is used by the following key exchanges: + * DHE-RSA, DHE-PSK + */ +#define MBEDTLS_DHM_C + +/** + * \def MBEDTLS_ECDH_C + * + * Enable the elliptic curve Diffie-Hellman library. + * + * Module: library/ecdh.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * + * This module is used by the following key exchanges: + * ECDHE-ECDSA, ECDHE-RSA, DHE-PSK + * + * Requires: MBEDTLS_ECP_C + */ +#define MBEDTLS_ECDH_C + +/** + * \def MBEDTLS_ECDSA_C + * + * Enable the elliptic curve DSA library. + * + * Module: library/ecdsa.c + * Caller: + * + * This module is used by the following key exchanges: + * ECDHE-ECDSA + * + * Requires: MBEDTLS_ECP_C, MBEDTLS_ASN1_WRITE_C, MBEDTLS_ASN1_PARSE_C + */ +#define MBEDTLS_ECDSA_C + +/** + * \def MBEDTLS_ECJPAKE_C + * + * Enable the elliptic curve J-PAKE library. + * + * \warning This is currently experimental. EC J-PAKE support is based on the + * Thread v1.0.0 specification; incompatible changes to the specification + * might still happen. For this reason, this is disabled by default. + * + * Module: library/ecjpake.c + * Caller: + * + * This module is used by the following key exchanges: + * ECJPAKE + * + * Requires: MBEDTLS_ECP_C, MBEDTLS_MD_C + */ +//#define MBEDTLS_ECJPAKE_C + +/** + * \def MBEDTLS_ECP_C + * + * Enable the elliptic curve over GF(p) library. + * + * Module: library/ecp.c + * Caller: library/ecdh.c + * library/ecdsa.c + * library/ecjpake.c + * + * Requires: MBEDTLS_BIGNUM_C and at least one MBEDTLS_ECP_DP_XXX_ENABLED + */ +#define MBEDTLS_ECP_C + +/** + * \def MBEDTLS_ENTROPY_C + * + * Enable the platform-specific entropy code. + * + * Module: library/entropy.c + * Caller: + * + * Requires: MBEDTLS_SHA512_C or MBEDTLS_SHA256_C + * + * This module provides a generic entropy pool + */ +#define MBEDTLS_ENTROPY_C + +/** + * \def MBEDTLS_ERROR_C + * + * Enable error code to error string conversion. + * + * Module: library/error.c + * Caller: + * + * This module enables mbedtls_strerror(). + */ +#define MBEDTLS_ERROR_C + +/** + * \def MBEDTLS_GCM_C + * + * Enable the Galois/Counter Mode (GCM) for AES. + * + * Module: library/gcm.c + * + * Requires: MBEDTLS_AES_C or MBEDTLS_CAMELLIA_C + * + * This module enables the AES-GCM and CAMELLIA-GCM ciphersuites, if other + * requisites are enabled as well. + */ +#define MBEDTLS_GCM_C + +/** + * \def MBEDTLS_HAVEGE_C + * + * Enable the HAVEGE random generator. + * + * Warning: the HAVEGE random generator is not suitable for virtualized + * environments + * + * Warning: the HAVEGE random generator is dependent on timing and specific + * processor traits. It is therefore not advised to use HAVEGE as + * your applications primary random generator or primary entropy pool + * input. As a secondary input to your entropy pool, it IS able add + * the (limited) extra entropy it provides. + * + * Module: library/havege.c + * Caller: + * + * Requires: MBEDTLS_TIMING_C + * + * Uncomment to enable the HAVEGE random generator. + */ +//#define MBEDTLS_HAVEGE_C + +/** + * \def MBEDTLS_HMAC_DRBG_C + * + * Enable the HMAC_DRBG random generator. + * + * Module: library/hmac_drbg.c + * Caller: + * + * Requires: MBEDTLS_MD_C + * + * Uncomment to enable the HMAC_DRBG random number geerator. + */ +#define MBEDTLS_HMAC_DRBG_C + +/** + * \def MBEDTLS_MD_C + * + * Enable the generic message digest layer. + * + * Module: library/mbedtls_md.c + * Caller: + * + * Uncomment to enable generic message digest wrappers. + */ +#define MBEDTLS_MD_C + +/** + * \def MBEDTLS_MD2_C + * + * Enable the MD2 hash algorithm. + * + * Module: library/mbedtls_md2.c + * Caller: + * + * Uncomment to enable support for (rare) MD2-signed X.509 certs. + */ +//#define MBEDTLS_MD2_C + +/** + * \def MBEDTLS_MD4_C + * + * Enable the MD4 hash algorithm. + * + * Module: library/mbedtls_md4.c + * Caller: + * + * Uncomment to enable support for (rare) MD4-signed X.509 certs. + */ +//#define MBEDTLS_MD4_C + +/** + * \def MBEDTLS_MD5_C + * + * Enable the MD5 hash algorithm. + * + * Module: library/mbedtls_md5.c + * Caller: library/mbedtls_md.c + * library/pem.c + * library/ssl_tls.c + * + * This module is required for SSL/TLS and X.509. + * PEM_PARSE uses MD5 for decrypting encrypted keys. + */ +#define MBEDTLS_MD5_C + +/** + * \def MBEDTLS_MEMORY_BUFFER_ALLOC_C + * + * Enable the buffer allocator implementation that makes use of a (stack) + * based buffer to 'allocate' dynamic memory. (replaces calloc() and free() + * calls) + * + * Module: library/memory_buffer_alloc.c + * + * Requires: MBEDTLS_PLATFORM_C + * MBEDTLS_PLATFORM_MEMORY (to use it within mbed TLS) + * + * Enable this module to enable the buffer memory allocator. + */ +//#define MBEDTLS_MEMORY_BUFFER_ALLOC_C + +/** + * \def MBEDTLS_NET_C + * + * Enable the TCP and UDP over IPv6/IPv4 networking routines. + * + * \note This module only works on POSIX/Unix (including Linux, BSD and OS X) + * and Windows. For other platforms, you'll want to disable it, and write your + * own networking callbacks to be passed to \c mbedtls_ssl_set_bio(). + * + * \note See also our Knowledge Base article about porting to a new + * environment: + * https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS + * + * Module: library/net.c + * + * This module provides networking routines. + */ +#define MBEDTLS_NET_C + +/** + * \def MBEDTLS_OID_C + * + * Enable the OID database. + * + * Module: library/oid.c + * Caller: library/asn1write.c + * library/pkcs5.c + * library/pkparse.c + * library/pkwrite.c + * library/rsa.c + * library/x509.c + * library/x509_create.c + * library/mbedtls_x509_crl.c + * library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c + * library/x509write_crt.c + * library/mbedtls_x509write_csr.c + * + * This modules translates between OIDs and internal values. + */ +#define MBEDTLS_OID_C + +/** + * \def MBEDTLS_PADLOCK_C + * + * Enable VIA Padlock support on x86. + * + * Module: library/padlock.c + * Caller: library/aes.c + * + * Requires: MBEDTLS_HAVE_ASM + * + * This modules adds support for the VIA PadLock on x86. + */ +#define MBEDTLS_PADLOCK_C + +/** + * \def MBEDTLS_PEM_PARSE_C + * + * Enable PEM decoding / parsing. + * + * Module: library/pem.c + * Caller: library/dhm.c + * library/pkparse.c + * library/mbedtls_x509_crl.c + * library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c + * + * Requires: MBEDTLS_BASE64_C + * + * This modules adds support for decoding / parsing PEM files. + */ +#define MBEDTLS_PEM_PARSE_C + +/** + * \def MBEDTLS_PEM_WRITE_C + * + * Enable PEM encoding / writing. + * + * Module: library/pem.c + * Caller: library/pkwrite.c + * library/x509write_crt.c + * library/mbedtls_x509write_csr.c + * + * Requires: MBEDTLS_BASE64_C + * + * This modules adds support for encoding / writing PEM files. + */ +#define MBEDTLS_PEM_WRITE_C + +/** + * \def MBEDTLS_PK_C + * + * Enable the generic public (asymetric) key layer. + * + * Module: library/pk.c + * Caller: library/ssl_tls.c + * library/ssl_cli.c + * library/ssl_srv.c + * + * Requires: MBEDTLS_RSA_C or MBEDTLS_ECP_C + * + * Uncomment to enable generic public key wrappers. + */ +#define MBEDTLS_PK_C + +/** + * \def MBEDTLS_PK_PARSE_C + * + * Enable the generic public (asymetric) key parser. + * + * Module: library/pkparse.c + * Caller: library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c + * + * Requires: MBEDTLS_PK_C + * + * Uncomment to enable generic public key parse functions. + */ +#define MBEDTLS_PK_PARSE_C + +/** + * \def MBEDTLS_PK_WRITE_C + * + * Enable the generic public (asymetric) key writer. + * + * Module: library/pkwrite.c + * Caller: library/x509write.c + * + * Requires: MBEDTLS_PK_C + * + * Uncomment to enable generic public key write functions. + */ +#define MBEDTLS_PK_WRITE_C + +/** + * \def MBEDTLS_PKCS5_C + * + * Enable PKCS#5 functions. + * + * Module: library/pkcs5.c + * + * Requires: MBEDTLS_MD_C + * + * This module adds support for the PKCS#5 functions. + */ +#define MBEDTLS_PKCS5_C + +/** + * \def MBEDTLS_PKCS11_C + * + * Enable wrapper for PKCS#11 smartcard support. + * + * Module: library/pkcs11.c + * Caller: library/pk.c + * + * Requires: MBEDTLS_PK_C + * + * This module enables SSL/TLS PKCS #11 smartcard support. + * Requires the presence of the PKCS#11 helper library (libpkcs11-helper) + */ +//#define MBEDTLS_PKCS11_C + +/** + * \def MBEDTLS_PKCS12_C + * + * Enable PKCS#12 PBE functions. + * Adds algorithms for parsing PKCS#8 encrypted private keys + * + * Module: library/pkcs12.c + * Caller: library/pkparse.c + * + * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_CIPHER_C, MBEDTLS_MD_C + * Can use: MBEDTLS_ARC4_C + * + * This module enables PKCS#12 functions. + */ +#define MBEDTLS_PKCS12_C + +/** + * \def MBEDTLS_PLATFORM_C + * + * Enable the platform abstraction layer that allows you to re-assign + * functions like calloc(), free(), snprintf(), printf(), fprintf(), exit(). + * + * Enabling MBEDTLS_PLATFORM_C enables to use of MBEDTLS_PLATFORM_XXX_ALT + * or MBEDTLS_PLATFORM_XXX_MACRO directives, allowing the functions mentioned + * above to be specified at runtime or compile time respectively. + * + * \note This abstraction layer must be enabled on Windows (including MSYS2) + * as other module rely on it for a fixed snprintf implementation. + * + * Module: library/platform.c + * Caller: Most other .c files + * + * This module enables abstraction of common (libc) functions. + */ +#define MBEDTLS_PLATFORM_C + +/** + * \def MBEDTLS_RIPEMD160_C + * + * Enable the RIPEMD-160 hash algorithm. + * + * Module: library/mbedtls_ripemd160.c + * Caller: library/mbedtls_md.c + * + */ +#define MBEDTLS_RIPEMD160_C + +/** + * \def MBEDTLS_RSA_C + * + * Enable the RSA public-key cryptosystem. + * + * Module: library/rsa.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * library/x509.c + * + * This module is used by the following key exchanges: + * RSA, DHE-RSA, ECDHE-RSA, RSA-PSK + * + * Requires: MBEDTLS_BIGNUM_C, MBEDTLS_OID_C + */ +#define MBEDTLS_RSA_C + +/** + * \def MBEDTLS_SHA1_C + * + * Enable the SHA1 cryptographic hash algorithm. + * + * Module: library/mbedtls_sha1.c + * Caller: library/mbedtls_md.c + * library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * library/x509write_crt.c + * + * This module is required for SSL/TLS and SHA1-signed certificates. + */ +#define MBEDTLS_SHA1_C + +/** + * \def MBEDTLS_SHA256_C + * + * Enable the SHA-224 and SHA-256 cryptographic hash algorithms. + * + * Module: library/mbedtls_sha256.c + * Caller: library/entropy.c + * library/mbedtls_md.c + * library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * + * This module adds support for SHA-224 and SHA-256. + * This module is required for the SSL/TLS 1.2 PRF function. + */ +#define MBEDTLS_SHA256_C + +/** + * \def MBEDTLS_SHA512_C + * + * Enable the SHA-384 and SHA-512 cryptographic hash algorithms. + * + * Module: library/mbedtls_sha512.c + * Caller: library/entropy.c + * library/mbedtls_md.c + * library/ssl_cli.c + * library/ssl_srv.c + * + * This module adds support for SHA-384 and SHA-512. + */ +#define MBEDTLS_SHA512_C + +/** + * \def MBEDTLS_SSL_CACHE_C + * + * Enable simple SSL cache implementation. + * + * Module: library/ssl_cache.c + * Caller: + * + * Requires: MBEDTLS_SSL_CACHE_C + */ +#define MBEDTLS_SSL_CACHE_C + +/** + * \def MBEDTLS_SSL_COOKIE_C + * + * Enable basic implementation of DTLS cookies for hello verification. + * + * Module: library/ssl_cookie.c + * Caller: + */ +#define MBEDTLS_SSL_COOKIE_C + +/** + * \def MBEDTLS_SSL_TICKET_C + * + * Enable an implementation of TLS server-side callbacks for session tickets. + * + * Module: library/ssl_ticket.c + * Caller: + * + * Requires: MBEDTLS_CIPHER_C + */ +#define MBEDTLS_SSL_TICKET_C + +/** + * \def MBEDTLS_SSL_CLI_C + * + * Enable the SSL/TLS client code. + * + * Module: library/ssl_cli.c + * Caller: + * + * Requires: MBEDTLS_SSL_TLS_C + * + * This module is required for SSL/TLS client support. + */ +#define MBEDTLS_SSL_CLI_C + +/** + * \def MBEDTLS_SSL_SRV_C + * + * Enable the SSL/TLS server code. + * + * Module: library/ssl_srv.c + * Caller: + * + * Requires: MBEDTLS_SSL_TLS_C + * + * This module is required for SSL/TLS server support. + */ +#define MBEDTLS_SSL_SRV_C + +/** + * \def MBEDTLS_SSL_TLS_C + * + * Enable the generic SSL/TLS code. + * + * Module: library/ssl_tls.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * + * Requires: MBEDTLS_CIPHER_C, MBEDTLS_MD_C + * and at least one of the MBEDTLS_SSL_PROTO_XXX defines + * + * This module is required for SSL/TLS. + */ +#define MBEDTLS_SSL_TLS_C + +/** + * \def MBEDTLS_THREADING_C + * + * Enable the threading abstraction layer. + * By default mbed TLS assumes it is used in a non-threaded environment or that + * contexts are not shared between threads. If you do intend to use contexts + * between threads, you will need to enable this layer to prevent race + * conditions. See also our Knowledge Base article about threading: + * https://tls.mbed.org/kb/development/thread-safety-and-multi-threading + * + * Module: library/threading.c + * + * This allows different threading implementations (self-implemented or + * provided). + * + * You will have to enable either MBEDTLS_THREADING_ALT or + * MBEDTLS_THREADING_PTHREAD. + * + * Enable this layer to allow use of mutexes within mbed TLS + */ +//#define MBEDTLS_THREADING_C + +/** + * \def MBEDTLS_TIMING_C + * + * Enable the semi-portable timing interface. + * + * \note The provided implementation only works on POSIX/Unix (including Linux, + * BSD and OS X) and Windows. On other platforms, you can either disable that + * module and provide your own implementations of the callbacks needed by + * \c mbedtls_ssl_set_timer_cb() for DTLS, or leave it enabled and provide + * your own implementation of the whole module by setting + * \c MBEDTLS_TIMING_ALT in the current file. + * + * \note See also our Knowledge Base article about porting to a new + * environment: + * https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS + * + * Module: library/timing.c + * Caller: library/havege.c + * + * This module is used by the HAVEGE random number generator. + */ +#define MBEDTLS_TIMING_C + +/** + * \def MBEDTLS_VERSION_C + * + * Enable run-time version information. + * + * Module: library/version.c + * + * This module provides run-time version information. + */ +#define MBEDTLS_VERSION_C + +/** + * \def MBEDTLS_X509_USE_C + * + * Enable X.509 core for using certificates. + * + * Module: library/x509.c + * Caller: library/mbedtls_x509_crl.c + * library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c + * + * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_BIGNUM_C, MBEDTLS_OID_C, + * MBEDTLS_PK_PARSE_C + * + * This module is required for the X.509 parsing modules. + */ +#define MBEDTLS_X509_USE_C + +/** + * \def MBEDTLS_X509_CRT_PARSE_C + * + * Enable X.509 certificate parsing. + * + * Module: library/mbedtls_x509_crt.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * + * Requires: MBEDTLS_X509_USE_C + * + * This module is required for X.509 certificate parsing. + */ +#define MBEDTLS_X509_CRT_PARSE_C + +/** + * \def MBEDTLS_X509_CRL_PARSE_C + * + * Enable X.509 CRL parsing. + * + * Module: library/mbedtls_x509_crl.c + * Caller: library/mbedtls_x509_crt.c + * + * Requires: MBEDTLS_X509_USE_C + * + * This module is required for X.509 CRL parsing. + */ +#define MBEDTLS_X509_CRL_PARSE_C + +/** + * \def MBEDTLS_X509_CSR_PARSE_C + * + * Enable X.509 Certificate Signing Request (CSR) parsing. + * + * Module: library/mbedtls_x509_csr.c + * Caller: library/x509_crt_write.c + * + * Requires: MBEDTLS_X509_USE_C + * + * This module is used for reading X.509 certificate request. + */ +#define MBEDTLS_X509_CSR_PARSE_C + +/** + * \def MBEDTLS_X509_CREATE_C + * + * Enable X.509 core for creating certificates. + * + * Module: library/x509_create.c + * + * Requires: MBEDTLS_BIGNUM_C, MBEDTLS_OID_C, MBEDTLS_PK_WRITE_C + * + * This module is the basis for creating X.509 certificates and CSRs. + */ +#define MBEDTLS_X509_CREATE_C + +/** + * \def MBEDTLS_X509_CRT_WRITE_C + * + * Enable creating X.509 certificates. + * + * Module: library/x509_crt_write.c + * + * Requires: MBEDTLS_X509_CREATE_C + * + * This module is required for X.509 certificate creation. + */ +#define MBEDTLS_X509_CRT_WRITE_C + +/** + * \def MBEDTLS_X509_CSR_WRITE_C + * + * Enable creating X.509 Certificate Signing Requests (CSR). + * + * Module: library/x509_csr_write.c + * + * Requires: MBEDTLS_X509_CREATE_C + * + * This module is required for X.509 certificate request writing. + */ +#define MBEDTLS_X509_CSR_WRITE_C + +/** + * \def MBEDTLS_XTEA_C + * + * Enable the XTEA block cipher. + * + * Module: library/xtea.c + * Caller: + */ +#define MBEDTLS_XTEA_C + +/* \} name SECTION: mbed TLS modules */ + +/** + * \name SECTION: Module configuration options + * + * This section allows for the setting of module specific sizes and + * configuration options. The default values are already present in the + * relevant header files and should suffice for the regular use cases. + * + * Our advice is to enable options and change their values here + * only if you have a good reason and know the consequences. + * + * Please check the respective header file for documentation on these + * parameters (to prevent duplicate documentation). + * \{ + */ + +/* MPI / BIGNUM options */ +//#define MBEDTLS_MPI_WINDOW_SIZE 6 /**< Maximum windows size used. */ +//#define MBEDTLS_MPI_MAX_SIZE 1024 /**< Maximum number of bytes for usable MPIs. */ + +/* CTR_DRBG options */ +//#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ +//#define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ +//#define MBEDTLS_CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ +//#define MBEDTLS_CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ +//#define MBEDTLS_CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ + +/* HMAC_DRBG options */ +//#define MBEDTLS_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ +//#define MBEDTLS_HMAC_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ +//#define MBEDTLS_HMAC_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ +//#define MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ + +/* ECP options */ +//#define MBEDTLS_ECP_MAX_BITS 521 /**< Maximum bit size of groups */ +//#define MBEDTLS_ECP_WINDOW_SIZE 6 /**< Maximum window size used */ +//#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1 /**< Enable fixed-point speed-up */ + +/* Entropy options */ +//#define MBEDTLS_ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ +//#define MBEDTLS_ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ + +/* Memory buffer allocator options */ +//#define MBEDTLS_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ + +/* Platform options */ +//#define MBEDTLS_PLATFORM_STD_MEM_HDR /**< Header to include if MBEDTLS_PLATFORM_NO_STD_FUNCTIONS is defined. Don't define if no header is needed. */ +//#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_EXIT exit /**< Default exit to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_TIME time /**< Default time to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_PRINTF printf /**< Default printf to use, can be undefined */ +/* Note: your snprintf must correclty zero-terminate the buffer! */ +//#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< Default snprintf to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS 0 /**< Default exit value to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE 1 /**< Default exit value to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile" /**< Seed file to read/write with default implementation */ + +/* To Use Function Macros MBEDTLS_PLATFORM_C must be enabled */ +/* MBEDTLS_PLATFORM_XXX_MACRO and MBEDTLS_PLATFORM_XXX_ALT cannot both be defined */ +//#define MBEDTLS_PLATFORM_CALLOC_MACRO calloc /**< Default allocator macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_FREE_MACRO free /**< Default free macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_EXIT_MACRO exit /**< Default exit macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_TIME_MACRO time /**< Default time macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_TIME_TYPE_MACRO time_t /**< Default time macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_FPRINTF_MACRO fprintf /**< Default fprintf macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_PRINTF_MACRO printf /**< Default printf macro to use, can be undefined */ +/* Note: your snprintf must correclty zero-terminate the buffer! */ +//#define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf /**< Default snprintf macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_NV_SEED_READ_MACRO mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be undefined */ +//#define MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function to use, can be undefined */ + +/* SSL Cache options */ +//#define MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */ +//#define MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /**< Maximum entries in cache */ + +/* SSL options */ +//#define MBEDTLS_SSL_MAX_CONTENT_LEN 16384 /**< Maxium fragment length in bytes, determines the size of each of the two internal I/O buffers */ +//#define MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ +//#define MBEDTLS_PSK_MAX_LEN 32 /**< Max size of TLS pre-shared keys, in bytes (default 256 bits) */ +//#define MBEDTLS_SSL_COOKIE_TIMEOUT 60 /**< Default expiration delay of DTLS cookies, in seconds if HAVE_TIME, or in number of cookies issued */ + +/** + * Complete list of ciphersuites to use, in order of preference. + * + * \warning No dependency checking is done on that field! This option can only + * be used to restrict the set of available ciphersuites. It is your + * responsibility to make sure the needed modules are active. + * + * Use this to save a few hundred bytes of ROM (default ordering of all + * available ciphersuites) and a few to a few hundred bytes of RAM. + * + * The value below is only an example, not the default. + */ +//#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 + +/* X509 options */ +//#define MBEDTLS_X509_MAX_INTERMEDIATE_CA 8 /**< Maximum number of intermediate CAs in a verification chain. */ + +/* \} name SECTION: Customisation configuration options */ + +/* Target and application specific configurations */ +//#define YOTTA_CFG_MBEDTLS_USER_CONFIG_FILE "target_config.h" + +/* + * Allow user to override any previous default. + * + * Use two macro names for that, as: + * - with yotta the prefix YOTTA_CFG_ is forced + * - without yotta is looks weird to have a YOTTA prefix. + */ +#if defined(YOTTA_CFG_MBEDTLS_USER_CONFIG_FILE) +#include YOTTA_CFG_MBEDTLS_USER_CONFIG_FILE +#elif defined(MBEDTLS_USER_CONFIG_FILE) +#include MBEDTLS_USER_CONFIG_FILE +#endif + +#include "check_config.h" + +#endif /* MBEDTLS_CONFIG_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ctr_drbg.h b/tools/sdk/include/mbedtls/mbedtls/ctr_drbg.h new file mode 100644 index 00000000..059d3c5c --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ctr_drbg.h @@ -0,0 +1,290 @@ +/** + * \file ctr_drbg.h + * + * \brief CTR_DRBG based on AES-256 (NIST SP 800-90) + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_CTR_DRBG_H +#define MBEDTLS_CTR_DRBG_H + +#include "aes.h" + +#if defined(MBEDTLS_THREADING_C) +#include "mbedtls/threading.h" +#endif + +#define MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED -0x0034 /**< The entropy source failed. */ +#define MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG -0x0036 /**< Too many random requested in single call. */ +#define MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG -0x0038 /**< Input too large (Entropy + additional). */ +#define MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR -0x003A /**< Read/write error in file. */ + +#define MBEDTLS_CTR_DRBG_BLOCKSIZE 16 /**< Block size used by the cipher */ +#define MBEDTLS_CTR_DRBG_KEYSIZE 32 /**< Key size used by the cipher */ +#define MBEDTLS_CTR_DRBG_KEYBITS ( MBEDTLS_CTR_DRBG_KEYSIZE * 8 ) +#define MBEDTLS_CTR_DRBG_SEEDLEN ( MBEDTLS_CTR_DRBG_KEYSIZE + MBEDTLS_CTR_DRBG_BLOCKSIZE ) + /**< The seed length (counter + AES key) */ + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them on the compiler command line. + * \{ + */ + +#if !defined(MBEDTLS_CTR_DRBG_ENTROPY_LEN) +#if defined(MBEDTLS_SHA512_C) && !defined(MBEDTLS_ENTROPY_FORCE_SHA256) +#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ +#else +#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 32 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ +#endif +#endif + +#if !defined(MBEDTLS_CTR_DRBG_RESEED_INTERVAL) +#define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ +#endif + +#if !defined(MBEDTLS_CTR_DRBG_MAX_INPUT) +#define MBEDTLS_CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ +#endif + +#if !defined(MBEDTLS_CTR_DRBG_MAX_REQUEST) +#define MBEDTLS_CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ +#endif + +#if !defined(MBEDTLS_CTR_DRBG_MAX_SEED_INPUT) +#define MBEDTLS_CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ +#endif + +/* \} name SECTION: Module settings */ + +#define MBEDTLS_CTR_DRBG_PR_OFF 0 /**< No prediction resistance */ +#define MBEDTLS_CTR_DRBG_PR_ON 1 /**< Prediction resistance enabled */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief CTR_DRBG context structure + */ +typedef struct +{ + unsigned char counter[16]; /*!< counter (V) */ + int reseed_counter; /*!< reseed counter */ + int prediction_resistance; /*!< enable prediction resistance (Automatic + reseed before every random generation) */ + size_t entropy_len; /*!< amount of entropy grabbed on each + (re)seed */ + int reseed_interval; /*!< reseed interval */ + + mbedtls_aes_context aes_ctx; /*!< AES context */ + + /* + * Callbacks (Entropy) + */ + int (*f_entropy)(void *, unsigned char *, size_t); + + void *p_entropy; /*!< context for the entropy function */ + +#if defined(MBEDTLS_THREADING_C) + mbedtls_threading_mutex_t mutex; +#endif +} +mbedtls_ctr_drbg_context; + +/** + * \brief CTR_DRBG context initialization + * Makes the context ready for mbedtls_ctr_drbg_seed() or + * mbedtls_ctr_drbg_free(). + * + * \param ctx CTR_DRBG context to be initialized + */ +void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx ); + +/** + * \brief CTR_DRBG initial seeding + * Seed and setup entropy source for future reseeds. + * + * Note: Personalization data can be provided in addition to the more generic + * entropy source to make this instantiation as unique as possible. + * + * \param ctx CTR_DRBG context to be seeded + * \param f_entropy Entropy callback (p_entropy, buffer to fill, buffer + * length) + * \param p_entropy Entropy context + * \param custom Personalization data (Device specific identifiers) + * (Can be NULL) + * \param len Length of personalization data + * + * \return 0 if successful, or + * MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED + */ +int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx, + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len ); + +/** + * \brief Clear CTR_CRBG context data + * + * \param ctx CTR_DRBG context to clear + */ +void mbedtls_ctr_drbg_free( mbedtls_ctr_drbg_context *ctx ); + +/** + * \brief Enable / disable prediction resistance (Default: Off) + * + * Note: If enabled, entropy is used for ctx->entropy_len before each call! + * Only use this if you have ample supply of good entropy! + * + * \param ctx CTR_DRBG context + * \param resistance MBEDTLS_CTR_DRBG_PR_ON or MBEDTLS_CTR_DRBG_PR_OFF + */ +void mbedtls_ctr_drbg_set_prediction_resistance( mbedtls_ctr_drbg_context *ctx, + int resistance ); + +/** + * \brief Set the amount of entropy grabbed on each (re)seed + * (Default: MBEDTLS_CTR_DRBG_ENTROPY_LEN) + * + * \param ctx CTR_DRBG context + * \param len Amount of entropy to grab + */ +void mbedtls_ctr_drbg_set_entropy_len( mbedtls_ctr_drbg_context *ctx, + size_t len ); + +/** + * \brief Set the reseed interval + * (Default: MBEDTLS_CTR_DRBG_RESEED_INTERVAL) + * + * \param ctx CTR_DRBG context + * \param interval Reseed interval + */ +void mbedtls_ctr_drbg_set_reseed_interval( mbedtls_ctr_drbg_context *ctx, + int interval ); + +/** + * \brief CTR_DRBG reseeding (extracts data from entropy source) + * + * \param ctx CTR_DRBG context + * \param additional Additional data to add to state (Can be NULL) + * \param len Length of additional data + * + * \return 0 if successful, or + * MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED + */ +int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx, + const unsigned char *additional, size_t len ); + +/** + * \brief CTR_DRBG update state + * + * \param ctx CTR_DRBG context + * \param additional Additional data to update state with + * \param add_len Length of additional data + * + * \note If add_len is greater than MBEDTLS_CTR_DRBG_MAX_SEED_INPUT, + * only the first MBEDTLS_CTR_DRBG_MAX_SEED_INPUT bytes are used, + * the remaining ones are silently discarded. + */ +void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx, + const unsigned char *additional, size_t add_len ); + +/** + * \brief CTR_DRBG generate random with additional update input + * + * Note: Automatically reseeds if reseed_counter is reached. + * + * \param p_rng CTR_DRBG context + * \param output Buffer to fill + * \param output_len Length of the buffer + * \param additional Additional data to update with (Can be NULL) + * \param add_len Length of additional data + * + * \return 0 if successful, or + * MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED, or + * MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG + */ +int mbedtls_ctr_drbg_random_with_add( void *p_rng, + unsigned char *output, size_t output_len, + const unsigned char *additional, size_t add_len ); + +/** + * \brief CTR_DRBG generate random + * + * Note: Automatically reseeds if reseed_counter is reached. + * + * \param p_rng CTR_DRBG context + * \param output Buffer to fill + * \param output_len Length of the buffer + * + * \return 0 if successful, or + * MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED, or + * MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG + */ +int mbedtls_ctr_drbg_random( void *p_rng, + unsigned char *output, size_t output_len ); + +#if defined(MBEDTLS_FS_IO) +/** + * \brief Write a seed file + * + * \param ctx CTR_DRBG context + * \param path Name of the file + * + * \return 0 if successful, + * MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR on file error, or + * MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED + */ +int mbedtls_ctr_drbg_write_seed_file( mbedtls_ctr_drbg_context *ctx, const char *path ); + +/** + * \brief Read and update a seed file. Seed is added to this + * instance + * + * \param ctx CTR_DRBG context + * \param path Name of the file + * + * \return 0 if successful, + * MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR on file error, + * MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED or + * MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG + */ +int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, const char *path ); +#endif /* MBEDTLS_FS_IO */ + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_ctr_drbg_self_test( int verbose ); + +/* Internal functions (do not call directly) */ +int mbedtls_ctr_drbg_seed_entropy_len( mbedtls_ctr_drbg_context *, + int (*)(void *, unsigned char *, size_t), void *, + const unsigned char *, size_t, size_t ); + +#ifdef __cplusplus +} +#endif + +#endif /* ctr_drbg.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/debug.h b/tools/sdk/include/mbedtls/mbedtls/debug.h new file mode 100644 index 00000000..29579964 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/debug.h @@ -0,0 +1,228 @@ +/** + * \file debug.h + * + * \brief Functions for controlling and providing debug output from the library. + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_DEBUG_H +#define MBEDTLS_DEBUG_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "ssl.h" + +#if defined(MBEDTLS_ECP_C) +#include "ecp.h" +#endif + +#if defined(MBEDTLS_DEBUG_C) + +#define MBEDTLS_DEBUG_STRIP_PARENS( ... ) __VA_ARGS__ + +#define MBEDTLS_SSL_DEBUG_MSG( level, args ) \ + mbedtls_debug_print_msg( ssl, level, __FILE__, __LINE__, \ + MBEDTLS_DEBUG_STRIP_PARENS args ) + +#define MBEDTLS_SSL_DEBUG_RET( level, text, ret ) \ + mbedtls_debug_print_ret( ssl, level, __FILE__, __LINE__, text, ret ) + +#define MBEDTLS_SSL_DEBUG_BUF( level, text, buf, len ) \ + mbedtls_debug_print_buf( ssl, level, __FILE__, __LINE__, text, buf, len ) + +#if defined(MBEDTLS_BIGNUM_C) +#define MBEDTLS_SSL_DEBUG_MPI( level, text, X ) \ + mbedtls_debug_print_mpi( ssl, level, __FILE__, __LINE__, text, X ) +#endif + +#if defined(MBEDTLS_ECP_C) +#define MBEDTLS_SSL_DEBUG_ECP( level, text, X ) \ + mbedtls_debug_print_ecp( ssl, level, __FILE__, __LINE__, text, X ) +#endif + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#define MBEDTLS_SSL_DEBUG_CRT( level, text, crt ) \ + mbedtls_debug_print_crt( ssl, level, __FILE__, __LINE__, text, crt ) +#endif + +#else /* MBEDTLS_DEBUG_C */ + +#define MBEDTLS_SSL_DEBUG_MSG( level, args ) do { } while( 0 ) +#define MBEDTLS_SSL_DEBUG_RET( level, text, ret ) do { } while( 0 ) +#define MBEDTLS_SSL_DEBUG_BUF( level, text, buf, len ) do { } while( 0 ) +#define MBEDTLS_SSL_DEBUG_MPI( level, text, X ) do { } while( 0 ) +#define MBEDTLS_SSL_DEBUG_ECP( level, text, X ) do { } while( 0 ) +#define MBEDTLS_SSL_DEBUG_CRT( level, text, crt ) do { } while( 0 ) + +#endif /* MBEDTLS_DEBUG_C */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Set the threshold error level to handle globally all debug output. + * Debug messages that have a level over the threshold value are + * discarded. + * (Default value: 0 = No debug ) + * + * \param threshold theshold level of messages to filter on. Messages at a + * higher level will be discarded. + * - Debug levels + * - 0 No debug + * - 1 Error + * - 2 State change + * - 3 Informational + * - 4 Verbose + */ +void mbedtls_debug_set_threshold( int threshold ); + +/** + * \brief Print a message to the debug output. This function is always used + * through the MBEDTLS_SSL_DEBUG_MSG() macro, which supplies the ssl + * context, file and line number parameters. + * + * \param ssl SSL context + * \param level error level of the debug message + * \param file file the message has occurred in + * \param line line number the message has occurred at + * \param format format specifier, in printf format + * \param ... variables used by the format specifier + * + * \attention This function is intended for INTERNAL usage within the + * library only. + */ +void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, + const char *file, int line, + const char *format, ... ); + +/** + * \brief Print the return value of a function to the debug output. This + * function is always used through the MBEDTLS_SSL_DEBUG_RET() macro, + * which supplies the ssl context, file and line number parameters. + * + * \param ssl SSL context + * \param level error level of the debug message + * \param file file the error has occurred in + * \param line line number the error has occurred in + * \param text the name of the function that returned the error + * \param ret the return code value + * + * \attention This function is intended for INTERNAL usage within the + * library only. + */ +void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, + const char *file, int line, + const char *text, int ret ); + +/** + * \brief Output a buffer of size len bytes to the debug output. This function + * is always used through the MBEDTLS_SSL_DEBUG_BUF() macro, + * which supplies the ssl context, file and line number parameters. + * + * \param ssl SSL context + * \param level error level of the debug message + * \param file file the error has occurred in + * \param line line number the error has occurred in + * \param text a name or label for the buffer being dumped. Normally the + * variable or buffer name + * \param buf the buffer to be outputted + * \param len length of the buffer + * + * \attention This function is intended for INTERNAL usage within the + * library only. + */ +void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, + const char *file, int line, const char *text, + const unsigned char *buf, size_t len ); + +#if defined(MBEDTLS_BIGNUM_C) +/** + * \brief Print a MPI variable to the debug output. This function is always + * used through the MBEDTLS_SSL_DEBUG_MPI() macro, which supplies the + * ssl context, file and line number parameters. + * + * \param ssl SSL context + * \param level error level of the debug message + * \param file file the error has occurred in + * \param line line number the error has occurred in + * \param text a name or label for the MPI being output. Normally the + * variable name + * \param X the MPI variable + * + * \attention This function is intended for INTERNAL usage within the + * library only. + */ +void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, + const char *file, int line, + const char *text, const mbedtls_mpi *X ); +#endif + +#if defined(MBEDTLS_ECP_C) +/** + * \brief Print an ECP point to the debug output. This function is always + * used through the MBEDTLS_SSL_DEBUG_ECP() macro, which supplies the + * ssl context, file and line number parameters. + * + * \param ssl SSL context + * \param level error level of the debug message + * \param file file the error has occurred in + * \param line line number the error has occurred in + * \param text a name or label for the ECP point being output. Normally the + * variable name + * \param X the ECP point + * + * \attention This function is intended for INTERNAL usage within the + * library only. + */ +void mbedtls_debug_print_ecp( const mbedtls_ssl_context *ssl, int level, + const char *file, int line, + const char *text, const mbedtls_ecp_point *X ); +#endif + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * \brief Print a X.509 certificate structure to the debug output. This + * function is always used through the MBEDTLS_SSL_DEBUG_CRT() macro, + * which supplies the ssl context, file and line number parameters. + * + * \param ssl SSL context + * \param level error level of the debug message + * \param file file the error has occurred in + * \param line line number the error has occurred in + * \param text a name or label for the certificate being output + * \param crt X.509 certificate structure + * + * \attention This function is intended for INTERNAL usage within the + * library only. + */ +void mbedtls_debug_print_crt( const mbedtls_ssl_context *ssl, int level, + const char *file, int line, + const char *text, const mbedtls_x509_crt *crt ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* debug.h */ + diff --git a/tools/sdk/include/mbedtls/mbedtls/des.h b/tools/sdk/include/mbedtls/mbedtls/des.h new file mode 100644 index 00000000..5ca2ecf2 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/des.h @@ -0,0 +1,306 @@ +/** + * \file des.h + * + * \brief DES block cipher + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_DES_H +#define MBEDTLS_DES_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#define MBEDTLS_DES_ENCRYPT 1 +#define MBEDTLS_DES_DECRYPT 0 + +#define MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH -0x0032 /**< The data input has an invalid length. */ + +#define MBEDTLS_DES_KEY_SIZE 8 + +#if !defined(MBEDTLS_DES_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief DES context structure + */ +typedef struct +{ + uint32_t sk[32]; /*!< DES subkeys */ +} +mbedtls_des_context; + +/** + * \brief Triple-DES context structure + */ +typedef struct +{ + uint32_t sk[96]; /*!< 3DES subkeys */ +} +mbedtls_des3_context; + +/** + * \brief Initialize DES context + * + * \param ctx DES context to be initialized + */ +void mbedtls_des_init( mbedtls_des_context *ctx ); + +/** + * \brief Clear DES context + * + * \param ctx DES context to be cleared + */ +void mbedtls_des_free( mbedtls_des_context *ctx ); + +/** + * \brief Initialize Triple-DES context + * + * \param ctx DES3 context to be initialized + */ +void mbedtls_des3_init( mbedtls_des3_context *ctx ); + +/** + * \brief Clear Triple-DES context + * + * \param ctx DES3 context to be cleared + */ +void mbedtls_des3_free( mbedtls_des3_context *ctx ); + +/** + * \brief Set key parity on the given key to odd. + * + * DES keys are 56 bits long, but each byte is padded with + * a parity bit to allow verification. + * + * \param key 8-byte secret key + */ +void mbedtls_des_key_set_parity( unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief Check that key parity on the given key is odd. + * + * DES keys are 56 bits long, but each byte is padded with + * a parity bit to allow verification. + * + * \param key 8-byte secret key + * + * \return 0 is parity was ok, 1 if parity was not correct. + */ +int mbedtls_des_key_check_key_parity( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief Check that key is not a weak or semi-weak DES key + * + * \param key 8-byte secret key + * + * \return 0 if no weak key was found, 1 if a weak key was identified. + */ +int mbedtls_des_key_check_weak( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief DES key schedule (56-bit, encryption) + * + * \param ctx DES context to be initialized + * \param key 8-byte secret key + * + * \return 0 + */ +int mbedtls_des_setkey_enc( mbedtls_des_context *ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief DES key schedule (56-bit, decryption) + * + * \param ctx DES context to be initialized + * \param key 8-byte secret key + * + * \return 0 + */ +int mbedtls_des_setkey_dec( mbedtls_des_context *ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief Triple-DES key schedule (112-bit, encryption) + * + * \param ctx 3DES context to be initialized + * \param key 16-byte secret key + * + * \return 0 + */ +int mbedtls_des3_set2key_enc( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ); + +/** + * \brief Triple-DES key schedule (112-bit, decryption) + * + * \param ctx 3DES context to be initialized + * \param key 16-byte secret key + * + * \return 0 + */ +int mbedtls_des3_set2key_dec( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ); + +/** + * \brief Triple-DES key schedule (168-bit, encryption) + * + * \param ctx 3DES context to be initialized + * \param key 24-byte secret key + * + * \return 0 + */ +int mbedtls_des3_set3key_enc( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ); + +/** + * \brief Triple-DES key schedule (168-bit, decryption) + * + * \param ctx 3DES context to be initialized + * \param key 24-byte secret key + * + * \return 0 + */ +int mbedtls_des3_set3key_dec( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ); + +/** + * \brief DES-ECB block encryption/decryption + * + * \param ctx DES context + * \param input 64-bit input block + * \param output 64-bit output block + * + * \return 0 if successful + */ +int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, + const unsigned char input[8], + unsigned char output[8] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief DES-CBC buffer encryption/decryption + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx DES context + * \param mode MBEDTLS_DES_ENCRYPT or MBEDTLS_DES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + */ +int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +/** + * \brief 3DES-ECB block encryption/decryption + * + * \param ctx 3DES context + * \param input 64-bit input block + * \param output 64-bit output block + * + * \return 0 if successful + */ +int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, + const unsigned char input[8], + unsigned char output[8] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief 3DES-CBC buffer encryption/decryption + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx 3DES context + * \param mode MBEDTLS_DES_ENCRYPT or MBEDTLS_DES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful, or MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH + */ +int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +/** + * \brief Internal function for key expansion. + * (Only exposed to allow overriding it, + * see MBEDTLS_DES_SETKEY_ALT) + * + * \param SK Round keys + * \param key Base key + */ +void mbedtls_des_setkey( uint32_t SK[32], + const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_DES_ALT */ +#include "des_alt.h" +#endif /* MBEDTLS_DES_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_des_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* des.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/dhm.h b/tools/sdk/include/mbedtls/mbedtls/dhm.h new file mode 100644 index 00000000..d7ab1522 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/dhm.h @@ -0,0 +1,305 @@ +/** + * \file dhm.h + * + * \brief Diffie-Hellman-Merkle key exchange + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_DHM_H +#define MBEDTLS_DHM_H + +#include "bignum.h" + +/* + * DHM Error codes + */ +#define MBEDTLS_ERR_DHM_BAD_INPUT_DATA -0x3080 /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_DHM_READ_PARAMS_FAILED -0x3100 /**< Reading of the DHM parameters failed. */ +#define MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED -0x3180 /**< Making of the DHM parameters failed. */ +#define MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED -0x3200 /**< Reading of the public values failed. */ +#define MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED -0x3280 /**< Making of the public value failed. */ +#define MBEDTLS_ERR_DHM_CALC_SECRET_FAILED -0x3300 /**< Calculation of the DHM secret failed. */ +#define MBEDTLS_ERR_DHM_INVALID_FORMAT -0x3380 /**< The ASN.1 data is not formatted correctly. */ +#define MBEDTLS_ERR_DHM_ALLOC_FAILED -0x3400 /**< Allocation of memory failed. */ +#define MBEDTLS_ERR_DHM_FILE_IO_ERROR -0x3480 /**< Read/write of file failed. */ + +/** + * RFC 3526 defines a number of standardized Diffie-Hellman groups + * for IKE. + * RFC 5114 defines a number of standardized Diffie-Hellman groups + * that can be used. + * + * Some are included here for convenience. + * + * Included are: + * RFC 3526 3. 2048-bit MODP Group + * RFC 3526 4. 3072-bit MODP Group + * RFC 3526 5. 4096-bit MODP Group + * RFC 5114 2.2. 2048-bit MODP Group with 224-bit Prime Order Subgroup + */ +#define MBEDTLS_DHM_RFC3526_MODP_2048_P \ + "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \ + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \ + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \ + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \ + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \ + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \ + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" \ + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \ + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \ + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \ + "15728E5A8AACAA68FFFFFFFFFFFFFFFF" + +#define MBEDTLS_DHM_RFC3526_MODP_2048_G "02" + +#define MBEDTLS_DHM_RFC3526_MODP_3072_P \ + "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \ + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \ + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \ + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \ + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \ + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \ + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" \ + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \ + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \ + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \ + "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" \ + "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" \ + "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" \ + "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" \ + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" \ + "43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF" + +#define MBEDTLS_DHM_RFC3526_MODP_3072_G "02" + +#define MBEDTLS_DHM_RFC3526_MODP_4096_P \ + "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \ + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \ + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \ + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \ + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \ + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \ + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" \ + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \ + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \ + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \ + "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" \ + "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" \ + "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" \ + "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" \ + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" \ + "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" \ + "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" \ + "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" \ + "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" \ + "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" \ + "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" \ + "FFFFFFFFFFFFFFFF" + +#define MBEDTLS_DHM_RFC3526_MODP_4096_G "02" + +#define MBEDTLS_DHM_RFC5114_MODP_2048_P \ + "AD107E1E9123A9D0D660FAA79559C51FA20D64E5683B9FD1" \ + "B54B1597B61D0A75E6FA141DF95A56DBAF9A3C407BA1DF15" \ + "EB3D688A309C180E1DE6B85A1274A0A66D3F8152AD6AC212" \ + "9037C9EDEFDA4DF8D91E8FEF55B7394B7AD5B7D0B6C12207" \ + "C9F98D11ED34DBF6C6BA0B2C8BBC27BE6A00E0A0B9C49708" \ + "B3BF8A317091883681286130BC8985DB1602E714415D9330" \ + "278273C7DE31EFDC7310F7121FD5A07415987D9ADC0A486D" \ + "CDF93ACC44328387315D75E198C641A480CD86A1B9E587E8" \ + "BE60E69CC928B2B9C52172E413042E9B23F10B0E16E79763" \ + "C9B53DCF4BA80A29E3FB73C16B8E75B97EF363E2FFA31F71" \ + "CF9DE5384E71B81C0AC4DFFE0C10E64F" + +#define MBEDTLS_DHM_RFC5114_MODP_2048_G \ + "AC4032EF4F2D9AE39DF30B5C8FFDAC506CDEBE7B89998CAF"\ + "74866A08CFE4FFE3A6824A4E10B9A6F0DD921F01A70C4AFA"\ + "AB739D7700C29F52C57DB17C620A8652BE5E9001A8D66AD7"\ + "C17669101999024AF4D027275AC1348BB8A762D0521BC98A"\ + "E247150422EA1ED409939D54DA7460CDB5F6C6B250717CBE"\ + "F180EB34118E98D119529A45D6F834566E3025E316A330EF"\ + "BB77A86F0C1AB15B051AE3D428C8F8ACB70A8137150B8EEB"\ + "10E183EDD19963DDD9E263E4770589EF6AA21E7F5F2FF381"\ + "B539CCE3409D13CD566AFBB48D6C019181E1BCFE94B30269"\ + "EDFE72FE9B6AA4BD7B5A0F1C71CFFF4C19C418E1F6EC0179"\ + "81BC087F2A7065B384B890D3191F2BFA" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief DHM context structure + */ +typedef struct +{ + size_t len; /*!< size(P) in chars */ + mbedtls_mpi P; /*!< prime modulus */ + mbedtls_mpi G; /*!< generator */ + mbedtls_mpi X; /*!< secret value */ + mbedtls_mpi GX; /*!< self = G^X mod P */ + mbedtls_mpi GY; /*!< peer = G^Y mod P */ + mbedtls_mpi K; /*!< key = GY^X mod P */ + mbedtls_mpi RP; /*!< cached R^2 mod P */ + mbedtls_mpi Vi; /*!< blinding value */ + mbedtls_mpi Vf; /*!< un-blinding value */ + mbedtls_mpi pX; /*!< previous X */ +} +mbedtls_dhm_context; + +/** + * \brief Initialize DHM context + * + * \param ctx DHM context to be initialized + */ +void mbedtls_dhm_init( mbedtls_dhm_context *ctx ); + +/** + * \brief Parse the ServerKeyExchange parameters + * + * \param ctx DHM context + * \param p &(start of input buffer) + * \param end end of buffer + * + * \return 0 if successful, or an MBEDTLS_ERR_DHM_XXX error code + */ +int mbedtls_dhm_read_params( mbedtls_dhm_context *ctx, + unsigned char **p, + const unsigned char *end ); + +/** + * \brief Setup and write the ServerKeyExchange parameters + * + * \param ctx DHM context + * \param x_size private value size in bytes + * \param output destination buffer + * \param olen number of chars written + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \note This function assumes that ctx->P and ctx->G + * have already been properly set (for example + * using mbedtls_mpi_read_string or mbedtls_mpi_read_binary). + * + * \return 0 if successful, or an MBEDTLS_ERR_DHM_XXX error code + */ +int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size, + unsigned char *output, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Import the peer's public value G^Y + * + * \param ctx DHM context + * \param input input buffer + * \param ilen size of buffer + * + * \return 0 if successful, or an MBEDTLS_ERR_DHM_XXX error code + */ +int mbedtls_dhm_read_public( mbedtls_dhm_context *ctx, + const unsigned char *input, size_t ilen ); + +/** + * \brief Create own private value X and export G^X + * + * \param ctx DHM context + * \param x_size private value size in bytes + * \param output destination buffer + * \param olen must be at least equal to the size of P, ctx->len + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful, or an MBEDTLS_ERR_DHM_XXX error code + */ +int mbedtls_dhm_make_public( mbedtls_dhm_context *ctx, int x_size, + unsigned char *output, size_t olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Derive and export the shared secret (G^Y)^X mod P + * + * \param ctx DHM context + * \param output destination buffer + * \param output_size size of the destination buffer + * \param olen on exit, holds the actual number of bytes written + * \param f_rng RNG function, for blinding purposes + * \param p_rng RNG parameter + * + * \return 0 if successful, or an MBEDTLS_ERR_DHM_XXX error code + * + * \note If non-NULL, f_rng is used to blind the input as + * countermeasure against timing attacks. Blinding is + * automatically used if and only if our secret value X is + * re-used and costs nothing otherwise, so it is recommended + * to always pass a non-NULL f_rng argument. + */ +int mbedtls_dhm_calc_secret( mbedtls_dhm_context *ctx, + unsigned char *output, size_t output_size, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Free and clear the components of a DHM key + * + * \param ctx DHM context to free and clear + */ +void mbedtls_dhm_free( mbedtls_dhm_context *ctx ); + +#if defined(MBEDTLS_ASN1_PARSE_C) +/** \ingroup x509_module */ +/** + * \brief Parse DHM parameters in PEM or DER format + * + * \param dhm DHM context to be initialized + * \param dhmin input buffer + * \param dhminlen size of the buffer + * (including the terminating null byte for PEM data) + * + * \return 0 if successful, or a specific DHM or PEM error code + */ +int mbedtls_dhm_parse_dhm( mbedtls_dhm_context *dhm, const unsigned char *dhmin, + size_t dhminlen ); + +#if defined(MBEDTLS_FS_IO) +/** \ingroup x509_module */ +/** + * \brief Load and parse DHM parameters + * + * \param dhm DHM context to be initialized + * \param path filename to read the DHM Parameters from + * + * \return 0 if successful, or a specific DHM or PEM error code + */ +int mbedtls_dhm_parse_dhmfile( mbedtls_dhm_context *dhm, const char *path ); +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_ASN1_PARSE_C */ + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_dhm_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* dhm.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ecdh.h b/tools/sdk/include/mbedtls/mbedtls/ecdh.h new file mode 100644 index 00000000..625a2819 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ecdh.h @@ -0,0 +1,214 @@ +/** + * \file ecdh.h + * + * \brief Elliptic curve Diffie-Hellman + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_ECDH_H +#define MBEDTLS_ECDH_H + +#include "ecp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * When importing from an EC key, select if it is our key or the peer's key + */ +typedef enum +{ + MBEDTLS_ECDH_OURS, + MBEDTLS_ECDH_THEIRS, +} mbedtls_ecdh_side; + +/** + * \brief ECDH context structure + */ +typedef struct +{ + mbedtls_ecp_group grp; /*!< elliptic curve used */ + mbedtls_mpi d; /*!< our secret value (private key) */ + mbedtls_ecp_point Q; /*!< our public value (public key) */ + mbedtls_ecp_point Qp; /*!< peer's public value (public key) */ + mbedtls_mpi z; /*!< shared secret */ + int point_format; /*!< format for point export in TLS messages */ + mbedtls_ecp_point Vi; /*!< blinding value (for later) */ + mbedtls_ecp_point Vf; /*!< un-blinding value (for later) */ + mbedtls_mpi _d; /*!< previous d (for later) */ +} +mbedtls_ecdh_context; + +/** + * \brief Generate a public key. + * Raw function that only does the core computation. + * + * \param grp ECP group + * \param d Destination MPI (secret exponent, aka private key) + * \param Q Destination point (public key) + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful, + * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code + */ +int mbedtls_ecdh_gen_public( mbedtls_ecp_group *grp, mbedtls_mpi *d, mbedtls_ecp_point *Q, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Compute shared secret + * Raw function that only does the core computation. + * + * \param grp ECP group + * \param z Destination MPI (shared secret) + * \param Q Public key from other party + * \param d Our secret exponent (private key) + * \param f_rng RNG function (see notes) + * \param p_rng RNG parameter + * + * \return 0 if successful, + * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code + * + * \note If f_rng is not NULL, it is used to implement + * countermeasures against potential elaborate timing + * attacks, see \c mbedtls_ecp_mul() for details. + */ +int mbedtls_ecdh_compute_shared( mbedtls_ecp_group *grp, mbedtls_mpi *z, + const mbedtls_ecp_point *Q, const mbedtls_mpi *d, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Initialize context + * + * \param ctx Context to initialize + */ +void mbedtls_ecdh_init( mbedtls_ecdh_context *ctx ); + +/** + * \brief Free context + * + * \param ctx Context to free + */ +void mbedtls_ecdh_free( mbedtls_ecdh_context *ctx ); + +/** + * \brief Generate a public key and a TLS ServerKeyExchange payload. + * (First function used by a TLS server for ECDHE.) + * + * \param ctx ECDH context + * \param olen number of chars written + * \param buf destination buffer + * \param blen length of buffer + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \note This function assumes that ctx->grp has already been + * properly set (for example using mbedtls_ecp_group_load). + * + * \return 0 if successful, or an MBEDTLS_ERR_ECP_XXX error code + */ +int mbedtls_ecdh_make_params( mbedtls_ecdh_context *ctx, size_t *olen, + unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Parse and procress a TLS ServerKeyExhange payload. + * (First function used by a TLS client for ECDHE.) + * + * \param ctx ECDH context + * \param buf pointer to start of input buffer + * \param end one past end of buffer + * + * \return 0 if successful, or an MBEDTLS_ERR_ECP_XXX error code + */ +int mbedtls_ecdh_read_params( mbedtls_ecdh_context *ctx, + const unsigned char **buf, const unsigned char *end ); + +/** + * \brief Setup an ECDH context from an EC key. + * (Used by clients and servers in place of the + * ServerKeyEchange for static ECDH: import ECDH parameters + * from a certificate's EC key information.) + * + * \param ctx ECDH constext to set + * \param key EC key to use + * \param side Is it our key (1) or the peer's key (0) ? + * + * \return 0 if successful, or an MBEDTLS_ERR_ECP_XXX error code + */ +int mbedtls_ecdh_get_params( mbedtls_ecdh_context *ctx, const mbedtls_ecp_keypair *key, + mbedtls_ecdh_side side ); + +/** + * \brief Generate a public key and a TLS ClientKeyExchange payload. + * (Second function used by a TLS client for ECDH(E).) + * + * \param ctx ECDH context + * \param olen number of bytes actually written + * \param buf destination buffer + * \param blen size of destination buffer + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful, or an MBEDTLS_ERR_ECP_XXX error code + */ +int mbedtls_ecdh_make_public( mbedtls_ecdh_context *ctx, size_t *olen, + unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Parse and process a TLS ClientKeyExchange payload. + * (Second function used by a TLS server for ECDH(E).) + * + * \param ctx ECDH context + * \param buf start of input buffer + * \param blen length of input buffer + * + * \return 0 if successful, or an MBEDTLS_ERR_ECP_XXX error code + */ +int mbedtls_ecdh_read_public( mbedtls_ecdh_context *ctx, + const unsigned char *buf, size_t blen ); + +/** + * \brief Derive and export the shared secret. + * (Last function used by both TLS client en servers.) + * + * \param ctx ECDH context + * \param olen number of bytes written + * \param buf destination buffer + * \param blen buffer length + * \param f_rng RNG function, see notes for \c mbedtls_ecdh_compute_shared() + * \param p_rng RNG parameter + * + * \return 0 if successful, or an MBEDTLS_ERR_ECP_XXX error code + */ +int mbedtls_ecdh_calc_secret( mbedtls_ecdh_context *ctx, size_t *olen, + unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +#ifdef __cplusplus +} +#endif + +#endif /* ecdh.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ecdsa.h b/tools/sdk/include/mbedtls/mbedtls/ecdsa.h new file mode 100644 index 00000000..52827d8d --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ecdsa.h @@ -0,0 +1,248 @@ +/** + * \file ecdsa.h + * + * \brief Elliptic curve DSA + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_ECDSA_H +#define MBEDTLS_ECDSA_H + +#include "ecp.h" +#include "md.h" + +/* + * RFC 4492 page 20: + * + * Ecdsa-Sig-Value ::= SEQUENCE { + * r INTEGER, + * s INTEGER + * } + * + * Size is at most + * 1 (tag) + 1 (len) + 1 (initial 0) + ECP_MAX_BYTES for each of r and s, + * twice that + 1 (tag) + 2 (len) for the sequence + * (assuming ECP_MAX_BYTES is less than 126 for r and s, + * and less than 124 (total len <= 255) for the sequence) + */ +#if MBEDTLS_ECP_MAX_BYTES > 124 +#error "MBEDTLS_ECP_MAX_BYTES bigger than expected, please fix MBEDTLS_ECDSA_MAX_LEN" +#endif +/** Maximum size of an ECDSA signature in bytes */ +#define MBEDTLS_ECDSA_MAX_LEN ( 3 + 2 * ( 3 + MBEDTLS_ECP_MAX_BYTES ) ) + +/** + * \brief ECDSA context structure + */ +typedef mbedtls_ecp_keypair mbedtls_ecdsa_context; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Compute ECDSA signature of a previously hashed message + * + * \note The deterministic version is usually prefered. + * + * \param grp ECP group + * \param r First output integer + * \param s Second output integer + * \param d Private signing key + * \param buf Message hash + * \param blen Length of buf + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful, + * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code + */ +int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, + const mbedtls_mpi *d, const unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); + +#if defined(MBEDTLS_ECDSA_DETERMINISTIC) +/** + * \brief Compute ECDSA signature of a previously hashed message, + * deterministic version (RFC 6979). + * + * \param grp ECP group + * \param r First output integer + * \param s Second output integer + * \param d Private signing key + * \param buf Message hash + * \param blen Length of buf + * \param md_alg MD algorithm used to hash the message + * + * \return 0 if successful, + * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code + */ +int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, + const mbedtls_mpi *d, const unsigned char *buf, size_t blen, + mbedtls_md_type_t md_alg ); +#endif /* MBEDTLS_ECDSA_DETERMINISTIC */ + +/** + * \brief Verify ECDSA signature of a previously hashed message + * + * \param grp ECP group + * \param buf Message hash + * \param blen Length of buf + * \param Q Public key to use for verification + * \param r First integer of the signature + * \param s Second integer of the signature + * + * \return 0 if successful, + * MBEDTLS_ERR_ECP_BAD_INPUT_DATA if signature is invalid + * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code + */ +int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp, + const unsigned char *buf, size_t blen, + const mbedtls_ecp_point *Q, const mbedtls_mpi *r, const mbedtls_mpi *s); + +/** + * \brief Compute ECDSA signature and write it to buffer, + * serialized as defined in RFC 4492 page 20. + * (Not thread-safe to use same context in multiple threads) + * + * \note The deterministice version (RFC 6979) is used if + * MBEDTLS_ECDSA_DETERMINISTIC is defined. + * + * \param ctx ECDSA context + * \param md_alg Algorithm that was used to hash the message + * \param hash Message hash + * \param hlen Length of hash + * \param sig Buffer that will hold the signature + * \param slen Length of the signature written + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \note The "sig" buffer must be at least as large as twice the + * size of the curve used, plus 9 (eg. 73 bytes if a 256-bit + * curve is used). MBEDTLS_ECDSA_MAX_LEN is always safe. + * + * \return 0 if successful, + * or a MBEDTLS_ERR_ECP_XXX, MBEDTLS_ERR_MPI_XXX or + * MBEDTLS_ERR_ASN1_XXX error code + */ +int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, mbedtls_md_type_t md_alg, + const unsigned char *hash, size_t hlen, + unsigned char *sig, size_t *slen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +#if defined(MBEDTLS_ECDSA_DETERMINISTIC) +#if ! defined(MBEDTLS_DEPRECATED_REMOVED) +#if defined(MBEDTLS_DEPRECATED_WARNING) +#define MBEDTLS_DEPRECATED __attribute__((deprecated)) +#else +#define MBEDTLS_DEPRECATED +#endif +/** + * \brief Compute ECDSA signature and write it to buffer, + * serialized as defined in RFC 4492 page 20. + * Deterministic version, RFC 6979. + * (Not thread-safe to use same context in multiple threads) + * + * \deprecated Superseded by mbedtls_ecdsa_write_signature() in 2.0.0 + * + * \param ctx ECDSA context + * \param hash Message hash + * \param hlen Length of hash + * \param sig Buffer that will hold the signature + * \param slen Length of the signature written + * \param md_alg MD algorithm used to hash the message + * + * \note The "sig" buffer must be at least as large as twice the + * size of the curve used, plus 9 (eg. 73 bytes if a 256-bit + * curve is used). MBEDTLS_ECDSA_MAX_LEN is always safe. + * + * \return 0 if successful, + * or a MBEDTLS_ERR_ECP_XXX, MBEDTLS_ERR_MPI_XXX or + * MBEDTLS_ERR_ASN1_XXX error code + */ +int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx, + const unsigned char *hash, size_t hlen, + unsigned char *sig, size_t *slen, + mbedtls_md_type_t md_alg ) MBEDTLS_DEPRECATED; +#undef MBEDTLS_DEPRECATED +#endif /* MBEDTLS_DEPRECATED_REMOVED */ +#endif /* MBEDTLS_ECDSA_DETERMINISTIC */ + +/** + * \brief Read and verify an ECDSA signature + * + * \param ctx ECDSA context + * \param hash Message hash + * \param hlen Size of hash + * \param sig Signature to read and verify + * \param slen Size of sig + * + * \return 0 if successful, + * MBEDTLS_ERR_ECP_BAD_INPUT_DATA if signature is invalid, + * MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH if the signature is + * valid but its actual length is less than siglen, + * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_ERR_MPI_XXX error code + */ +int mbedtls_ecdsa_read_signature( mbedtls_ecdsa_context *ctx, + const unsigned char *hash, size_t hlen, + const unsigned char *sig, size_t slen ); + +/** + * \brief Generate an ECDSA keypair on the given curve + * + * \param ctx ECDSA context in which the keypair should be stored + * \param gid Group (elliptic curve) to use. One of the various + * MBEDTLS_ECP_DP_XXX macros depending on configuration. + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 on success, or a MBEDTLS_ERR_ECP_XXX code. + */ +int mbedtls_ecdsa_genkey( mbedtls_ecdsa_context *ctx, mbedtls_ecp_group_id gid, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); + +/** + * \brief Set an ECDSA context from an EC key pair + * + * \param ctx ECDSA context to set + * \param key EC key to use + * + * \return 0 on success, or a MBEDTLS_ERR_ECP_XXX code. + */ +int mbedtls_ecdsa_from_keypair( mbedtls_ecdsa_context *ctx, const mbedtls_ecp_keypair *key ); + +/** + * \brief Initialize context + * + * \param ctx Context to initialize + */ +void mbedtls_ecdsa_init( mbedtls_ecdsa_context *ctx ); + +/** + * \brief Free context + * + * \param ctx Context to free + */ +void mbedtls_ecdsa_free( mbedtls_ecdsa_context *ctx ); + +#ifdef __cplusplus +} +#endif + +#endif /* ecdsa.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ecjpake.h b/tools/sdk/include/mbedtls/mbedtls/ecjpake.h new file mode 100644 index 00000000..b7b61604 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ecjpake.h @@ -0,0 +1,238 @@ +/** + * \file ecjpake.h + * + * \brief Elliptic curve J-PAKE + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_ECJPAKE_H +#define MBEDTLS_ECJPAKE_H + +/* + * J-PAKE is a password-authenticated key exchange that allows deriving a + * strong shared secret from a (potentially low entropy) pre-shared + * passphrase, with forward secrecy and mutual authentication. + * https://en.wikipedia.org/wiki/Password_Authenticated_Key_Exchange_by_Juggling + * + * This file implements the Elliptic Curve variant of J-PAKE, + * as defined in Chapter 7.4 of the Thread v1.0 Specification, + * available to members of the Thread Group http://threadgroup.org/ + * + * As the J-PAKE algorithm is inherently symmetric, so is our API. + * Each party needs to send its first round message, in any order, to the + * other party, then each sends its second round message, in any order. + * The payloads are serialized in a way suitable for use in TLS, but could + * also be use outside TLS. + */ + +#include "ecp.h" +#include "md.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Roles in the EC J-PAKE exchange + */ +typedef enum { + MBEDTLS_ECJPAKE_CLIENT = 0, /**< Client */ + MBEDTLS_ECJPAKE_SERVER, /**< Server */ +} mbedtls_ecjpake_role; + +/** + * EC J-PAKE context structure. + * + * J-PAKE is a symmetric protocol, except for the identifiers used in + * Zero-Knowledge Proofs, and the serialization of the second message + * (KeyExchange) as defined by the Thread spec. + * + * In order to benefit from this symmetry, we choose a different naming + * convetion from the Thread v1.0 spec. Correspondance is indicated in the + * description as a pair C: client name, S: server name + */ +typedef struct +{ + const mbedtls_md_info_t *md_info; /**< Hash to use */ + mbedtls_ecp_group grp; /**< Elliptic curve */ + mbedtls_ecjpake_role role; /**< Are we client or server? */ + int point_format; /**< Format for point export */ + + mbedtls_ecp_point Xm1; /**< My public key 1 C: X1, S: X3 */ + mbedtls_ecp_point Xm2; /**< My public key 2 C: X2, S: X4 */ + mbedtls_ecp_point Xp1; /**< Peer public key 1 C: X3, S: X1 */ + mbedtls_ecp_point Xp2; /**< Peer public key 2 C: X4, S: X2 */ + mbedtls_ecp_point Xp; /**< Peer public key C: Xs, S: Xc */ + + mbedtls_mpi xm1; /**< My private key 1 C: x1, S: x3 */ + mbedtls_mpi xm2; /**< My private key 2 C: x2, S: x4 */ + + mbedtls_mpi s; /**< Pre-shared secret (passphrase) */ +} mbedtls_ecjpake_context; + +/** + * \brief Initialize a context + * (just makes it ready for setup() or free()). + * + * \param ctx context to initialize + */ +void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx ); + +/** + * \brief Set up a context for use + * + * \note Currently the only values for hash/curve allowed by the + * standard are MBEDTLS_MD_SHA256/MBEDTLS_ECP_DP_SECP256R1. + * + * \param ctx context to set up + * \param role Our role: client or server + * \param hash hash function to use (MBEDTLS_MD_XXX) + * \param curve elliptic curve identifier (MBEDTLS_ECP_DP_XXX) + * \param secret pre-shared secret (passphrase) + * \param len length of the shared secret + * + * \return 0 if successfull, + * a negative error code otherwise + */ +int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx, + mbedtls_ecjpake_role role, + mbedtls_md_type_t hash, + mbedtls_ecp_group_id curve, + const unsigned char *secret, + size_t len ); + +/* + * \brief Check if a context is ready for use + * + * \param ctx Context to check + * + * \return 0 if the context is ready for use, + * MBEDTLS_ERR_ECP_BAD_INPUT_DATA otherwise + */ +int mbedtls_ecjpake_check( const mbedtls_ecjpake_context *ctx ); + +/** + * \brief Generate and write the first round message + * (TLS: contents of the Client/ServerHello extension, + * excluding extension type and length bytes) + * + * \param ctx Context to use + * \param buf Buffer to write the contents to + * \param len Buffer size + * \param olen Will be updated with the number of bytes written + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successfull, + * a negative error code otherwise + */ +int mbedtls_ecjpake_write_round_one( mbedtls_ecjpake_context *ctx, + unsigned char *buf, size_t len, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Read and process the first round message + * (TLS: contents of the Client/ServerHello extension, + * excluding extension type and length bytes) + * + * \param ctx Context to use + * \param buf Pointer to extension contents + * \param len Extension length + * + * \return 0 if successfull, + * a negative error code otherwise + */ +int mbedtls_ecjpake_read_round_one( mbedtls_ecjpake_context *ctx, + const unsigned char *buf, + size_t len ); + +/** + * \brief Generate and write the second round message + * (TLS: contents of the Client/ServerKeyExchange) + * + * \param ctx Context to use + * \param buf Buffer to write the contents to + * \param len Buffer size + * \param olen Will be updated with the number of bytes written + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successfull, + * a negative error code otherwise + */ +int mbedtls_ecjpake_write_round_two( mbedtls_ecjpake_context *ctx, + unsigned char *buf, size_t len, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Read and process the second round message + * (TLS: contents of the Client/ServerKeyExchange) + * + * \param ctx Context to use + * \param buf Pointer to the message + * \param len Message length + * + * \return 0 if successfull, + * a negative error code otherwise + */ +int mbedtls_ecjpake_read_round_two( mbedtls_ecjpake_context *ctx, + const unsigned char *buf, + size_t len ); + +/** + * \brief Derive the shared secret + * (TLS: Pre-Master Secret) + * + * \param ctx Context to use + * \param buf Buffer to write the contents to + * \param len Buffer size + * \param olen Will be updated with the number of bytes written + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successfull, + * a negative error code otherwise + */ +int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx, + unsigned char *buf, size_t len, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Free a context's content + * + * \param ctx context to free + */ +void mbedtls_ecjpake_free( mbedtls_ecjpake_context *ctx ); + +#if defined(MBEDTLS_SELF_TEST) +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if a test failed + */ +int mbedtls_ecjpake_self_test( int verbose ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ecjpake.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ecp.h b/tools/sdk/include/mbedtls/mbedtls/ecp.h new file mode 100644 index 00000000..5246c789 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ecp.h @@ -0,0 +1,669 @@ +/** + * \file ecp.h + * + * \brief Elliptic curves over GF(p) + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_ECP_H +#define MBEDTLS_ECP_H + +#include "bignum.h" + +/* + * ECP error codes + */ +#define MBEDTLS_ERR_ECP_BAD_INPUT_DATA -0x4F80 /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL -0x4F00 /**< The buffer is too small to write to. */ +#define MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE -0x4E80 /**< Requested curve not available. */ +#define MBEDTLS_ERR_ECP_VERIFY_FAILED -0x4E00 /**< The signature is not valid. */ +#define MBEDTLS_ERR_ECP_ALLOC_FAILED -0x4D80 /**< Memory allocation failed. */ +#define MBEDTLS_ERR_ECP_RANDOM_FAILED -0x4D00 /**< Generation of random value, such as (ephemeral) key, failed. */ +#define MBEDTLS_ERR_ECP_INVALID_KEY -0x4C80 /**< Invalid private or public key. */ +#define MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH -0x4C00 /**< Signature is valid but shorter than the user-supplied length. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Domain parameters (curve, subgroup and generator) identifiers. + * + * Only curves over prime fields are supported. + * + * \warning This library does not support validation of arbitrary domain + * parameters. Therefore, only well-known domain parameters from trusted + * sources should be used. See mbedtls_ecp_group_load(). + */ +typedef enum +{ + MBEDTLS_ECP_DP_NONE = 0, + MBEDTLS_ECP_DP_SECP192R1, /*!< 192-bits NIST curve */ + MBEDTLS_ECP_DP_SECP224R1, /*!< 224-bits NIST curve */ + MBEDTLS_ECP_DP_SECP256R1, /*!< 256-bits NIST curve */ + MBEDTLS_ECP_DP_SECP384R1, /*!< 384-bits NIST curve */ + MBEDTLS_ECP_DP_SECP521R1, /*!< 521-bits NIST curve */ + MBEDTLS_ECP_DP_BP256R1, /*!< 256-bits Brainpool curve */ + MBEDTLS_ECP_DP_BP384R1, /*!< 384-bits Brainpool curve */ + MBEDTLS_ECP_DP_BP512R1, /*!< 512-bits Brainpool curve */ + MBEDTLS_ECP_DP_CURVE25519, /*!< Curve25519 */ + MBEDTLS_ECP_DP_SECP192K1, /*!< 192-bits "Koblitz" curve */ + MBEDTLS_ECP_DP_SECP224K1, /*!< 224-bits "Koblitz" curve */ + MBEDTLS_ECP_DP_SECP256K1, /*!< 256-bits "Koblitz" curve */ +} mbedtls_ecp_group_id; + +/** + * Number of supported curves (plus one for NONE). + * + * (Montgomery curves excluded for now.) + */ +#define MBEDTLS_ECP_DP_MAX 12 + +/** + * Curve information for use by other modules + */ +typedef struct +{ + mbedtls_ecp_group_id grp_id; /*!< Internal identifier */ + uint16_t tls_id; /*!< TLS NamedCurve identifier */ + uint16_t bit_size; /*!< Curve size in bits */ + const char *name; /*!< Human-friendly name */ +} mbedtls_ecp_curve_info; + +/** + * \brief ECP point structure (jacobian coordinates) + * + * \note All functions expect and return points satisfying + * the following condition: Z == 0 or Z == 1. (Other + * values of Z are used by internal functions only.) + * The point is zero, or "at infinity", if Z == 0. + * Otherwise, X and Y are its standard (affine) coordinates. + */ +typedef struct +{ + mbedtls_mpi X; /*!< the point's X coordinate */ + mbedtls_mpi Y; /*!< the point's Y coordinate */ + mbedtls_mpi Z; /*!< the point's Z coordinate */ +} +mbedtls_ecp_point; + +/** + * \brief ECP group structure + * + * We consider two types of curves equations: + * 1. Short Weierstrass y^2 = x^3 + A x + B mod P (SEC1 + RFC 4492) + * 2. Montgomery, y^2 = x^3 + A x^2 + x mod P (Curve25519 + draft) + * In both cases, a generator G for a prime-order subgroup is fixed. In the + * short weierstrass, this subgroup is actually the whole curve, and its + * cardinal is denoted by N. + * + * In the case of Short Weierstrass curves, our code requires that N is an odd + * prime. (Use odd in mbedtls_ecp_mul() and prime in mbedtls_ecdsa_sign() for blinding.) + * + * In the case of Montgomery curves, we don't store A but (A + 2) / 4 which is + * the quantity actually used in the formulas. Also, nbits is not the size of N + * but the required size for private keys. + * + * If modp is NULL, reduction modulo P is done using a generic algorithm. + * Otherwise, it must point to a function that takes an mbedtls_mpi in the range + * 0..2^(2*pbits)-1 and transforms it in-place in an integer of little more + * than pbits, so that the integer may be efficiently brought in the 0..P-1 + * range by a few additions or substractions. It must return 0 on success and + * non-zero on failure. + */ +typedef struct +{ + mbedtls_ecp_group_id id; /*!< internal group identifier */ + mbedtls_mpi P; /*!< prime modulus of the base field */ + mbedtls_mpi A; /*!< 1. A in the equation, or 2. (A + 2) / 4 */ + mbedtls_mpi B; /*!< 1. B in the equation, or 2. unused */ + mbedtls_ecp_point G; /*!< generator of the (sub)group used */ + mbedtls_mpi N; /*!< 1. the order of G, or 2. unused */ + size_t pbits; /*!< number of bits in P */ + size_t nbits; /*!< number of bits in 1. P, or 2. private keys */ + unsigned int h; /*!< internal: 1 if the constants are static */ + int (*modp)(mbedtls_mpi *); /*!< function for fast reduction mod P */ + int (*t_pre)(mbedtls_ecp_point *, void *); /*!< unused */ + int (*t_post)(mbedtls_ecp_point *, void *); /*!< unused */ + void *t_data; /*!< unused */ + mbedtls_ecp_point *T; /*!< pre-computed points for ecp_mul_comb() */ + size_t T_size; /*!< number for pre-computed points */ +} +mbedtls_ecp_group; + +/** + * \brief ECP key pair structure + * + * A generic key pair that could be used for ECDSA, fixed ECDH, etc. + * + * \note Members purposefully in the same order as struc mbedtls_ecdsa_context. + */ +typedef struct +{ + mbedtls_ecp_group grp; /*!< Elliptic curve and base point */ + mbedtls_mpi d; /*!< our secret value */ + mbedtls_ecp_point Q; /*!< our public value */ +} +mbedtls_ecp_keypair; + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them on the compiler command line. + * \{ + */ + +#if !defined(MBEDTLS_ECP_MAX_BITS) +/** + * Maximum size of the groups (that is, of N and P) + */ +#define MBEDTLS_ECP_MAX_BITS 521 /**< Maximum bit size of groups */ +#endif + +#define MBEDTLS_ECP_MAX_BYTES ( ( MBEDTLS_ECP_MAX_BITS + 7 ) / 8 ) +#define MBEDTLS_ECP_MAX_PT_LEN ( 2 * MBEDTLS_ECP_MAX_BYTES + 1 ) + +#if !defined(MBEDTLS_ECP_WINDOW_SIZE) +/* + * Maximum "window" size used for point multiplication. + * Default: 6. + * Minimum value: 2. Maximum value: 7. + * + * Result is an array of at most ( 1 << ( MBEDTLS_ECP_WINDOW_SIZE - 1 ) ) + * points used for point multiplication. This value is directly tied to EC + * peak memory usage, so decreasing it by one should roughly cut memory usage + * by two (if large curves are in use). + * + * Reduction in size may reduce speed, but larger curves are impacted first. + * Sample performances (in ECDHE handshakes/s, with FIXED_POINT_OPTIM = 1): + * w-size: 6 5 4 3 2 + * 521 145 141 135 120 97 + * 384 214 209 198 177 146 + * 256 320 320 303 262 226 + + * 224 475 475 453 398 342 + * 192 640 640 633 587 476 + */ +#define MBEDTLS_ECP_WINDOW_SIZE 6 /**< Maximum window size used */ +#endif /* MBEDTLS_ECP_WINDOW_SIZE */ + +#if !defined(MBEDTLS_ECP_FIXED_POINT_OPTIM) +/* + * Trade memory for speed on fixed-point multiplication. + * + * This speeds up repeated multiplication of the generator (that is, the + * multiplication in ECDSA signatures, and half of the multiplications in + * ECDSA verification and ECDHE) by a factor roughly 3 to 4. + * + * The cost is increasing EC peak memory usage by a factor roughly 2. + * + * Change this value to 0 to reduce peak memory usage. + */ +#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1 /**< Enable fixed-point speed-up */ +#endif /* MBEDTLS_ECP_FIXED_POINT_OPTIM */ + +/* \} name SECTION: Module settings */ + +/* + * Point formats, from RFC 4492's enum ECPointFormat + */ +#define MBEDTLS_ECP_PF_UNCOMPRESSED 0 /**< Uncompressed point format */ +#define MBEDTLS_ECP_PF_COMPRESSED 1 /**< Compressed point format */ + +/* + * Some other constants from RFC 4492 + */ +#define MBEDTLS_ECP_TLS_NAMED_CURVE 3 /**< ECCurveType's named_curve */ + +/** + * \brief Get the list of supported curves in order of preferrence + * (full information) + * + * \return A statically allocated array, the last entry is 0. + */ +const mbedtls_ecp_curve_info *mbedtls_ecp_curve_list( void ); + +/** + * \brief Get the list of supported curves in order of preferrence + * (grp_id only) + * + * \return A statically allocated array, + * terminated with MBEDTLS_ECP_DP_NONE. + */ +const mbedtls_ecp_group_id *mbedtls_ecp_grp_id_list( void ); + +/** + * \brief Get curve information from an internal group identifier + * + * \param grp_id A MBEDTLS_ECP_DP_XXX value + * + * \return The associated curve information or NULL + */ +const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_grp_id( mbedtls_ecp_group_id grp_id ); + +/** + * \brief Get curve information from a TLS NamedCurve value + * + * \param tls_id A MBEDTLS_ECP_DP_XXX value + * + * \return The associated curve information or NULL + */ +const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_tls_id( uint16_t tls_id ); + +/** + * \brief Get curve information from a human-readable name + * + * \param name The name + * + * \return The associated curve information or NULL + */ +const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_name( const char *name ); + +/** + * \brief Initialize a point (as zero) + */ +void mbedtls_ecp_point_init( mbedtls_ecp_point *pt ); + +/** + * \brief Initialize a group (to something meaningless) + */ +void mbedtls_ecp_group_init( mbedtls_ecp_group *grp ); + +/** + * \brief Initialize a key pair (as an invalid one) + */ +void mbedtls_ecp_keypair_init( mbedtls_ecp_keypair *key ); + +/** + * \brief Free the components of a point + */ +void mbedtls_ecp_point_free( mbedtls_ecp_point *pt ); + +/** + * \brief Free the components of an ECP group + */ +void mbedtls_ecp_group_free( mbedtls_ecp_group *grp ); + +/** + * \brief Free the components of a key pair + */ +void mbedtls_ecp_keypair_free( mbedtls_ecp_keypair *key ); + +/** + * \brief Copy the contents of point Q into P + * + * \param P Destination point + * \param Q Source point + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_ecp_copy( mbedtls_ecp_point *P, const mbedtls_ecp_point *Q ); + +/** + * \brief Copy the contents of a group object + * + * \param dst Destination group + * \param src Source group + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_ecp_group_copy( mbedtls_ecp_group *dst, const mbedtls_ecp_group *src ); + +/** + * \brief Set a point to zero + * + * \param pt Destination point + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_ecp_set_zero( mbedtls_ecp_point *pt ); + +/** + * \brief Tell if a point is zero + * + * \param pt Point to test + * + * \return 1 if point is zero, 0 otherwise + */ +int mbedtls_ecp_is_zero( mbedtls_ecp_point *pt ); + +/** + * \brief Compare two points + * + * \note This assumes the points are normalized. Otherwise, + * they may compare as "not equal" even if they are. + * + * \param P First point to compare + * \param Q Second point to compare + * + * \return 0 if the points are equal, + * MBEDTLS_ERR_ECP_BAD_INPUT_DATA otherwise + */ +int mbedtls_ecp_point_cmp( const mbedtls_ecp_point *P, + const mbedtls_ecp_point *Q ); + +/** + * \brief Import a non-zero point from two ASCII strings + * + * \param P Destination point + * \param radix Input numeric base + * \param x First affine coordinate as a null-terminated string + * \param y Second affine coordinate as a null-terminated string + * + * \return 0 if successful, or a MBEDTLS_ERR_MPI_XXX error code + */ +int mbedtls_ecp_point_read_string( mbedtls_ecp_point *P, int radix, + const char *x, const char *y ); + +/** + * \brief Export a point into unsigned binary data + * + * \param grp Group to which the point should belong + * \param P Point to export + * \param format Point format, should be a MBEDTLS_ECP_PF_XXX macro + * \param olen Length of the actual output + * \param buf Output buffer + * \param buflen Length of the output buffer + * + * \return 0 if successful, + * or MBEDTLS_ERR_ECP_BAD_INPUT_DATA + * or MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL + */ +int mbedtls_ecp_point_write_binary( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *P, + int format, size_t *olen, + unsigned char *buf, size_t buflen ); + +/** + * \brief Import a point from unsigned binary data + * + * \param grp Group to which the point should belong + * \param P Point to import + * \param buf Input buffer + * \param ilen Actual length of input + * + * \return 0 if successful, + * MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the point format + * is not implemented. + * + * \note This function does NOT check that the point actually + * belongs to the given group, see mbedtls_ecp_check_pubkey() for + * that. + */ +int mbedtls_ecp_point_read_binary( const mbedtls_ecp_group *grp, mbedtls_ecp_point *P, + const unsigned char *buf, size_t ilen ); + +/** + * \brief Import a point from a TLS ECPoint record + * + * \param grp ECP group used + * \param pt Destination point + * \param buf $(Start of input buffer) + * \param len Buffer length + * + * \note buf is updated to point right after the ECPoint on exit + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_XXX if initialization failed + * MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid + */ +int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *grp, mbedtls_ecp_point *pt, + const unsigned char **buf, size_t len ); + +/** + * \brief Export a point as a TLS ECPoint record + * + * \param grp ECP group used + * \param pt Point to export + * \param format Export format + * \param olen length of data written + * \param buf Buffer to write to + * \param blen Buffer length + * + * \return 0 if successful, + * or MBEDTLS_ERR_ECP_BAD_INPUT_DATA + * or MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL + */ +int mbedtls_ecp_tls_write_point( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt, + int format, size_t *olen, + unsigned char *buf, size_t blen ); + +/** + * \brief Set a group using well-known domain parameters + * + * \param grp Destination group + * \param index Index in the list of well-known domain parameters + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_XXX if initialization failed + * MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE for unkownn groups + * + * \note Index should be a value of RFC 4492's enum NamedCurve, + * usually in the form of a MBEDTLS_ECP_DP_XXX macro. + */ +int mbedtls_ecp_group_load( mbedtls_ecp_group *grp, mbedtls_ecp_group_id index ); + +/** + * \brief Set a group from a TLS ECParameters record + * + * \param grp Destination group + * \param buf &(Start of input buffer) + * \param len Buffer length + * + * \note buf is updated to point right after ECParameters on exit + * + * \return 0 if successful, + * MBEDTLS_ERR_MPI_XXX if initialization failed + * MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid + */ +int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *grp, const unsigned char **buf, size_t len ); + +/** + * \brief Write the TLS ECParameters record for a group + * + * \param grp ECP group used + * \param olen Number of bytes actually written + * \param buf Buffer to write to + * \param blen Buffer length + * + * \return 0 if successful, + * or MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL + */ +int mbedtls_ecp_tls_write_group( const mbedtls_ecp_group *grp, size_t *olen, + unsigned char *buf, size_t blen ); + +/** + * \brief Multiplication by an integer: R = m * P + * (Not thread-safe to use same group in multiple threads) + * + * \note In order to prevent timing attacks, this function + * executes the exact same sequence of (base field) + * operations for any valid m. It avoids any if-branch or + * array index depending on the value of m. + * + * \note If f_rng is not NULL, it is used to randomize intermediate + * results in order to prevent potential timing attacks + * targeting these results. It is recommended to always + * provide a non-NULL f_rng (the overhead is negligible). + * + * \param grp ECP group + * \param R Destination point + * \param m Integer by which to multiply + * \param P Point to multiply + * \param f_rng RNG function (see notes) + * \param p_rng RNG parameter + * + * \return 0 if successful, + * MBEDTLS_ERR_ECP_INVALID_KEY if m is not a valid privkey + * or P is not a valid pubkey, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_ecp_mul( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, + const mbedtls_mpi *m, const mbedtls_ecp_point *P, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); + +/** + * \brief Multiplication and addition of two points by integers: + * R = m * P + n * Q + * (Not thread-safe to use same group in multiple threads) + * + * \note In contrast to mbedtls_ecp_mul(), this function does not guarantee + * a constant execution flow and timing. + * + * \param grp ECP group + * \param R Destination point + * \param m Integer by which to multiply P + * \param P Point to multiply by m + * \param n Integer by which to multiply Q + * \param Q Point to be multiplied by n + * + * \return 0 if successful, + * MBEDTLS_ERR_ECP_INVALID_KEY if m or n is not a valid privkey + * or P or Q is not a valid pubkey, + * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + */ +int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, + const mbedtls_mpi *m, const mbedtls_ecp_point *P, + const mbedtls_mpi *n, const mbedtls_ecp_point *Q ); + +/** + * \brief Check that a point is a valid public key on this curve + * + * \param grp Curve/group the point should belong to + * \param pt Point to check + * + * \return 0 if point is a valid public key, + * MBEDTLS_ERR_ECP_INVALID_KEY otherwise. + * + * \note This function only checks the point is non-zero, has valid + * coordinates and lies on the curve, but not that it is + * indeed a multiple of G. This is additional check is more + * expensive, isn't required by standards, and shouldn't be + * necessary if the group used has a small cofactor. In + * particular, it is useless for the NIST groups which all + * have a cofactor of 1. + * + * \note Uses bare components rather than an mbedtls_ecp_keypair structure + * in order to ease use with other structures such as + * mbedtls_ecdh_context of mbedtls_ecdsa_context. + */ +int mbedtls_ecp_check_pubkey( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt ); + +/** + * \brief Check that an mbedtls_mpi is a valid private key for this curve + * + * \param grp Group used + * \param d Integer to check + * + * \return 0 if point is a valid private key, + * MBEDTLS_ERR_ECP_INVALID_KEY otherwise. + * + * \note Uses bare components rather than an mbedtls_ecp_keypair structure + * in order to ease use with other structures such as + * mbedtls_ecdh_context of mbedtls_ecdsa_context. + */ +int mbedtls_ecp_check_privkey( const mbedtls_ecp_group *grp, const mbedtls_mpi *d ); + +/** + * \brief Generate a keypair with configurable base point + * + * \param grp ECP group + * \param G Chosen base point + * \param d Destination MPI (secret part) + * \param Q Destination point (public part) + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful, + * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code + * + * \note Uses bare components rather than an mbedtls_ecp_keypair structure + * in order to ease use with other structures such as + * mbedtls_ecdh_context of mbedtls_ecdsa_context. + */ +int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp, + const mbedtls_ecp_point *G, + mbedtls_mpi *d, mbedtls_ecp_point *Q, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Generate a keypair + * + * \param grp ECP group + * \param d Destination MPI (secret part) + * \param Q Destination point (public part) + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful, + * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code + * + * \note Uses bare components rather than an mbedtls_ecp_keypair structure + * in order to ease use with other structures such as + * mbedtls_ecdh_context of mbedtls_ecdsa_context. + */ +int mbedtls_ecp_gen_keypair( mbedtls_ecp_group *grp, mbedtls_mpi *d, mbedtls_ecp_point *Q, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Generate a keypair + * + * \param grp_id ECP group identifier + * \param key Destination keypair + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful, + * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code + */ +int mbedtls_ecp_gen_key( mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); + +/** + * \brief Check a public-private key pair + * + * \param pub Keypair structure holding a public key + * \param prv Keypair structure holding a private (plus public) key + * + * \return 0 if successful (keys are valid and match), or + * MBEDTLS_ERR_ECP_BAD_INPUT_DATA, or + * a MBEDTLS_ERR_ECP_XXX or MBEDTLS_ERR_MPI_XXX code. + */ +int mbedtls_ecp_check_pub_priv( const mbedtls_ecp_keypair *pub, const mbedtls_ecp_keypair *prv ); + +#if defined(MBEDTLS_SELF_TEST) +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if a test failed + */ +int mbedtls_ecp_self_test( int verbose ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ecp.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/entropy.h b/tools/sdk/include/mbedtls/mbedtls/entropy.h new file mode 100644 index 00000000..fed0494e --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/entropy.h @@ -0,0 +1,267 @@ +/** + * \file entropy.h + * + * \brief Entropy accumulator implementation + * + * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_ENTROPY_H +#define MBEDTLS_ENTROPY_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include + +#if defined(MBEDTLS_SHA512_C) && !defined(MBEDTLS_ENTROPY_FORCE_SHA256) +#include "sha512.h" +#define MBEDTLS_ENTROPY_SHA512_ACCUMULATOR +#else +#if defined(MBEDTLS_SHA256_C) +#define MBEDTLS_ENTROPY_SHA256_ACCUMULATOR +#include "sha256.h" +#endif +#endif + +#if defined(MBEDTLS_THREADING_C) +#include "threading.h" +#endif + +#if defined(MBEDTLS_HAVEGE_C) +#include "havege.h" +#endif + +#define MBEDTLS_ERR_ENTROPY_SOURCE_FAILED -0x003C /**< Critical entropy source failure. */ +#define MBEDTLS_ERR_ENTROPY_MAX_SOURCES -0x003E /**< No more sources can be added. */ +#define MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED -0x0040 /**< No sources have been added to poll. */ +#define MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE -0x003D /**< No strong sources have been added to poll. */ +#define MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR -0x003F /**< Read/write error in file. */ + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them on the compiler command line. + * \{ + */ + +#if !defined(MBEDTLS_ENTROPY_MAX_SOURCES) +#define MBEDTLS_ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ +#endif + +#if !defined(MBEDTLS_ENTROPY_MAX_GATHER) +#define MBEDTLS_ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ +#endif + +/* \} name SECTION: Module settings */ + +#if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR) +#define MBEDTLS_ENTROPY_BLOCK_SIZE 64 /**< Block size of entropy accumulator (SHA-512) */ +#else +#define MBEDTLS_ENTROPY_BLOCK_SIZE 32 /**< Block size of entropy accumulator (SHA-256) */ +#endif + +#define MBEDTLS_ENTROPY_MAX_SEED_SIZE 1024 /**< Maximum size of seed we read from seed file */ +#define MBEDTLS_ENTROPY_SOURCE_MANUAL MBEDTLS_ENTROPY_MAX_SOURCES + +#define MBEDTLS_ENTROPY_SOURCE_STRONG 1 /**< Entropy source is strong */ +#define MBEDTLS_ENTROPY_SOURCE_WEAK 0 /**< Entropy source is weak */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Entropy poll callback pointer + * + * \param data Callback-specific data pointer + * \param output Data to fill + * \param len Maximum size to provide + * \param olen The actual amount of bytes put into the buffer (Can be 0) + * + * \return 0 if no critical failures occurred, + * MBEDTLS_ERR_ENTROPY_SOURCE_FAILED otherwise + */ +typedef int (*mbedtls_entropy_f_source_ptr)(void *data, unsigned char *output, size_t len, + size_t *olen); + +/** + * \brief Entropy source state + */ +typedef struct +{ + mbedtls_entropy_f_source_ptr f_source; /**< The entropy source callback */ + void * p_source; /**< The callback data pointer */ + size_t size; /**< Amount received in bytes */ + size_t threshold; /**< Minimum bytes required before release */ + int strong; /**< Is the source strong? */ +} +mbedtls_entropy_source_state; + +/** + * \brief Entropy context structure + */ +typedef struct +{ +#if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR) + mbedtls_sha512_context accumulator; +#else + mbedtls_sha256_context accumulator; +#endif + int source_count; + mbedtls_entropy_source_state source[MBEDTLS_ENTROPY_MAX_SOURCES]; +#if defined(MBEDTLS_HAVEGE_C) + mbedtls_havege_state havege_data; +#endif +#if defined(MBEDTLS_THREADING_C) + mbedtls_threading_mutex_t mutex; /*!< mutex */ +#endif +#if defined(MBEDTLS_ENTROPY_NV_SEED) + int initial_entropy_run; +#endif +} +mbedtls_entropy_context; + +/** + * \brief Initialize the context + * + * \param ctx Entropy context to initialize + */ +void mbedtls_entropy_init( mbedtls_entropy_context *ctx ); + +/** + * \brief Free the data in the context + * + * \param ctx Entropy context to free + */ +void mbedtls_entropy_free( mbedtls_entropy_context *ctx ); + +/** + * \brief Adds an entropy source to poll + * (Thread-safe if MBEDTLS_THREADING_C is enabled) + * + * \param ctx Entropy context + * \param f_source Entropy function + * \param p_source Function data + * \param threshold Minimum required from source before entropy is released + * ( with mbedtls_entropy_func() ) (in bytes) + * \param strong MBEDTLS_ENTROPY_SOURCE_STRONG or + * MBEDTSL_ENTROPY_SOURCE_WEAK. + * At least one strong source needs to be added. + * Weaker sources (such as the cycle counter) can be used as + * a complement. + * + * \return 0 if successful or MBEDTLS_ERR_ENTROPY_MAX_SOURCES + */ +int mbedtls_entropy_add_source( mbedtls_entropy_context *ctx, + mbedtls_entropy_f_source_ptr f_source, void *p_source, + size_t threshold, int strong ); + +/** + * \brief Trigger an extra gather poll for the accumulator + * (Thread-safe if MBEDTLS_THREADING_C is enabled) + * + * \param ctx Entropy context + * + * \return 0 if successful, or MBEDTLS_ERR_ENTROPY_SOURCE_FAILED + */ +int mbedtls_entropy_gather( mbedtls_entropy_context *ctx ); + +/** + * \brief Retrieve entropy from the accumulator + * (Maximum length: MBEDTLS_ENTROPY_BLOCK_SIZE) + * (Thread-safe if MBEDTLS_THREADING_C is enabled) + * + * \param data Entropy context + * \param output Buffer to fill + * \param len Number of bytes desired, must be at most MBEDTLS_ENTROPY_BLOCK_SIZE + * + * \return 0 if successful, or MBEDTLS_ERR_ENTROPY_SOURCE_FAILED + */ +int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ); + +/** + * \brief Add data to the accumulator manually + * (Thread-safe if MBEDTLS_THREADING_C is enabled) + * + * \param ctx Entropy context + * \param data Data to add + * \param len Length of data + * + * \return 0 if successful + */ +int mbedtls_entropy_update_manual( mbedtls_entropy_context *ctx, + const unsigned char *data, size_t len ); + +#if defined(MBEDTLS_ENTROPY_NV_SEED) +/** + * \brief Trigger an update of the seed file in NV by using the + * current entropy pool. + * + * \param ctx Entropy context + * + * \return 0 if successful + */ +int mbedtls_entropy_update_nv_seed( mbedtls_entropy_context *ctx ); +#endif /* MBEDTLS_ENTROPY_NV_SEED */ + +#if defined(MBEDTLS_FS_IO) +/** + * \brief Write a seed file + * + * \param ctx Entropy context + * \param path Name of the file + * + * \return 0 if successful, + * MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR on file error, or + * MBEDTLS_ERR_ENTROPY_SOURCE_FAILED + */ +int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *ctx, const char *path ); + +/** + * \brief Read and update a seed file. Seed is added to this + * instance. No more than MBEDTLS_ENTROPY_MAX_SEED_SIZE bytes are + * read from the seed file. The rest is ignored. + * + * \param ctx Entropy context + * \param path Name of the file + * + * \return 0 if successful, + * MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR on file error, + * MBEDTLS_ERR_ENTROPY_SOURCE_FAILED + */ +int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *ctx, const char *path ); +#endif /* MBEDTLS_FS_IO */ + +#if defined(MBEDTLS_SELF_TEST) +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if a test failed + */ +int mbedtls_entropy_self_test( int verbose ); +#endif /* MBEDTLS_SELF_TEST */ + +#ifdef __cplusplus +} +#endif + +#endif /* entropy.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/entropy_poll.h b/tools/sdk/include/mbedtls/mbedtls/entropy_poll.h new file mode 100644 index 00000000..430e8651 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/entropy_poll.h @@ -0,0 +1,107 @@ +/** + * \file entropy_poll.h + * + * \brief Platform-specific and custom entropy polling functions + * + * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_ENTROPY_POLL_H +#define MBEDTLS_ENTROPY_POLL_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Default thresholds for built-in sources, in bytes + */ +#define MBEDTLS_ENTROPY_MIN_PLATFORM 32 /**< Minimum for platform source */ +#define MBEDTLS_ENTROPY_MIN_HAVEGE 32 /**< Minimum for HAVEGE */ +#define MBEDTLS_ENTROPY_MIN_HARDCLOCK 4 /**< Minimum for mbedtls_timing_hardclock() */ +#define MBEDTLS_ENTROPY_MIN_HARDWARE 32 /**< Minimum for the hardware source */ + +/** + * \brief Entropy poll callback that provides 0 entropy. + */ +#if defined(MBEDTLS_TEST_NULL_ENTROPY) + int mbedtls_null_entropy_poll( void *data, + unsigned char *output, size_t len, size_t *olen ); +#endif + +#if !defined(MBEDTLS_NO_PLATFORM_ENTROPY) +/** + * \brief Platform-specific entropy poll callback + */ +int mbedtls_platform_entropy_poll( void *data, + unsigned char *output, size_t len, size_t *olen ); +#endif + +#if defined(MBEDTLS_HAVEGE_C) +/** + * \brief HAVEGE based entropy poll callback + * + * Requires an HAVEGE state as its data pointer. + */ +int mbedtls_havege_poll( void *data, + unsigned char *output, size_t len, size_t *olen ); +#endif + +#if defined(MBEDTLS_TIMING_C) +/** + * \brief mbedtls_timing_hardclock-based entropy poll callback + */ +int mbedtls_hardclock_poll( void *data, + unsigned char *output, size_t len, size_t *olen ); +#endif + +#if defined(MBEDTLS_ENTROPY_HARDWARE_ALT) +/** + * \brief Entropy poll callback for a hardware source + * + * \warning This is not provided by mbed TLS! + * See \c MBEDTLS_ENTROPY_HARDWARE_ALT in config.h. + * + * \note This must accept NULL as its first argument. + */ +int mbedtls_hardware_poll( void *data, + unsigned char *output, size_t len, size_t *olen ); +#endif + +#if defined(MBEDTLS_ENTROPY_NV_SEED) +/** + * \brief Entropy poll callback for a non-volatile seed file + * + * \note This must accept NULL as its first argument. + */ +int mbedtls_nv_seed_poll( void *data, + unsigned char *output, size_t len, size_t *olen ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* entropy_poll.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/error.h b/tools/sdk/include/mbedtls/mbedtls/error.h new file mode 100644 index 00000000..5e549f6b --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/error.h @@ -0,0 +1,107 @@ +/** + * \file error.h + * + * \brief Error to string translation + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_ERROR_H +#define MBEDTLS_ERROR_H + +#include + +/** + * Error code layout. + * + * Currently we try to keep all error codes within the negative space of 16 + * bits signed integers to support all platforms (-0x0001 - -0x7FFF). In + * addition we'd like to give two layers of information on the error if + * possible. + * + * For that purpose the error codes are segmented in the following manner: + * + * 16 bit error code bit-segmentation + * + * 1 bit - Unused (sign bit) + * 3 bits - High level module ID + * 5 bits - Module-dependent error code + * 7 bits - Low level module errors + * + * For historical reasons, low-level error codes are divided in even and odd, + * even codes were assigned first, and -1 is reserved for other errors. + * + * Low-level module errors (0x0002-0x007E, 0x0003-0x007F) + * + * Module Nr Codes assigned + * MPI 7 0x0002-0x0010 + * GCM 2 0x0012-0x0014 + * BLOWFISH 2 0x0016-0x0018 + * THREADING 3 0x001A-0x001E + * AES 2 0x0020-0x0022 + * CAMELLIA 2 0x0024-0x0026 + * XTEA 1 0x0028-0x0028 + * BASE64 2 0x002A-0x002C + * OID 1 0x002E-0x002E 0x000B-0x000B + * PADLOCK 1 0x0030-0x0030 + * DES 1 0x0032-0x0032 + * CTR_DBRG 4 0x0034-0x003A + * ENTROPY 3 0x003C-0x0040 0x003D-0x003F + * NET 11 0x0042-0x0052 0x0043-0x0045 + * ASN1 7 0x0060-0x006C + * PBKDF2 1 0x007C-0x007C + * HMAC_DRBG 4 0x0003-0x0009 + * CCM 2 0x000D-0x000F + * + * High-level module nr (3 bits - 0x0...-0x7...) + * Name ID Nr of Errors + * PEM 1 9 + * PKCS#12 1 4 (Started from top) + * X509 2 19 + * PKCS5 2 4 (Started from top) + * DHM 3 9 + * PK 3 14 (Started from top) + * RSA 4 9 + * ECP 4 8 (Started from top) + * MD 5 4 + * CIPHER 6 6 + * SSL 6 17 (Started from top) + * SSL 7 31 + * + * Module dependent error code (5 bits 0x.00.-0x.F8.) + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Translate a mbed TLS error code into a string representation, + * Result is truncated if necessary and always includes a terminating + * null byte. + * + * \param errnum error code + * \param buffer buffer to place representation in + * \param buflen length of the buffer + */ +void mbedtls_strerror( int errnum, char *buffer, size_t buflen ); + +#ifdef __cplusplus +} +#endif + +#endif /* error.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/esp_config.h b/tools/sdk/include/mbedtls/mbedtls/esp_config.h new file mode 100644 index 00000000..5a69ff78 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/esp_config.h @@ -0,0 +1,2531 @@ +/** + * + * \brief Default mbedTLS configuration options for esp-idf + * + * This set of compile-time options may be used to enable + * or disable features selectively, and reduce the global + * memory footprint. + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +#ifndef MBEDTLS_CONFIG_H +#define MBEDTLS_CONFIG_H + +#include "sdkconfig.h" + +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif + +/** + * \name SECTION: System support + * + * This section sets system specific settings. + * \{ + */ + +/** + * \def MBEDTLS_HAVE_ASM + * + * The compiler has support for asm(). + * + * Requires support for asm() in compiler. + * + * Used in: + * library/timing.c + * library/padlock.c + * include/mbedtls/bn_mul.h + * + * Comment to disable the use of assembly code. + */ +#define MBEDTLS_HAVE_ASM + +/** + * \def MBEDTLS_HAVE_SSE2 + * + * CPU supports SSE2 instruction set. + * + * Uncomment if the CPU supports SSE2 (IA-32 specific). + */ +//#define MBEDTLS_HAVE_SSE2 + +/** + * \def MBEDTLS_HAVE_TIME + * + * System has time.h and time(). + * The time does not need to be correct, only time differences are used, + * by contrast with MBEDTLS_HAVE_TIME_DATE + * + * Comment if your system does not support time functions + */ +//#define MBEDTLS_HAVE_TIME + +/** + * \def MBEDTLS_HAVE_TIME_DATE + * + * System has time.h and time(), gmtime() and the clock is correct. + * The time needs to be correct (not necesarily very accurate, but at least + * the date should be correct). This is used to verify the validity period of + * X.509 certificates. + * + * Comment if your system does not have a correct clock. + */ +//#define MBEDTLS_HAVE_TIME_DATE + +/** + * \def MBEDTLS_PLATFORM_MEMORY + * + * Enable the memory allocation layer. + * + * By default mbed TLS uses the system-provided calloc() and free(). + * This allows different allocators (self-implemented or provided) to be + * provided to the platform abstraction layer. + * + * Enabling MBEDTLS_PLATFORM_MEMORY without the + * MBEDTLS_PLATFORM_{FREE,CALLOC}_MACROs will provide + * "mbedtls_platform_set_calloc_free()" allowing you to set an alternative calloc() and + * free() function pointer at runtime. + * + * Enabling MBEDTLS_PLATFORM_MEMORY and specifying + * MBEDTLS_PLATFORM_{CALLOC,FREE}_MACROs will allow you to specify the + * alternate function at compile time. + * + * Requires: MBEDTLS_PLATFORM_C + * + * Enable this layer to allow use of alternative memory allocators. + */ +//#define MBEDTLS_PLATFORM_MEMORY + +/** + * \def MBEDTLS_PLATFORM_NO_STD_FUNCTIONS + * + * Do not assign standard functions in the platform layer (e.g. calloc() to + * MBEDTLS_PLATFORM_STD_CALLOC and printf() to MBEDTLS_PLATFORM_STD_PRINTF) + * + * This makes sure there are no linking errors on platforms that do not support + * these functions. You will HAVE to provide alternatives, either at runtime + * via the platform_set_xxx() functions or at compile time by setting + * the MBEDTLS_PLATFORM_STD_XXX defines, or enabling a + * MBEDTLS_PLATFORM_XXX_MACRO. + * + * Requires: MBEDTLS_PLATFORM_C + * + * Uncomment to prevent default assignment of standard functions in the + * platform layer. + */ +//#define MBEDTLS_PLATFORM_NO_STD_FUNCTIONS + +/** + * \def MBEDTLS_PLATFORM_EXIT_ALT + * + * MBEDTLS_PLATFORM_XXX_ALT: Uncomment a macro to let mbed TLS support the + * function in the platform abstraction layer. + * + * Example: In case you uncomment MBEDTLS_PLATFORM_PRINTF_ALT, mbed TLS will + * provide a function "mbedtls_platform_set_printf()" that allows you to set an + * alternative printf function pointer. + * + * All these define require MBEDTLS_PLATFORM_C to be defined! + * + * \note MBEDTLS_PLATFORM_SNPRINTF_ALT is required on Windows; + * it will be enabled automatically by check_config.h + * + * \warning MBEDTLS_PLATFORM_XXX_ALT cannot be defined at the same time as + * MBEDTLS_PLATFORM_XXX_MACRO! + * + * Uncomment a macro to enable alternate implementation of specific base + * platform function + */ +//#define MBEDTLS_PLATFORM_EXIT_ALT +//#define MBEDTLS_PLATFORM_FPRINTF_ALT +//#define MBEDTLS_PLATFORM_PRINTF_ALT +//#define MBEDTLS_PLATFORM_SNPRINTF_ALT + +/** + * \def MBEDTLS_DEPRECATED_WARNING + * + * Mark deprecated functions so that they generate a warning if used. + * Functions deprecated in one version will usually be removed in the next + * version. You can enable this to help you prepare the transition to a new + * major version by making sure your code is not using these functions. + * + * This only works with GCC and Clang. With other compilers, you may want to + * use MBEDTLS_DEPRECATED_REMOVED + * + * Uncomment to get warnings on using deprecated functions. + */ +//#define MBEDTLS_DEPRECATED_WARNING + +/** + * \def MBEDTLS_DEPRECATED_REMOVED + * + * Remove deprecated functions so that they generate an error if used. + * Functions deprecated in one version will usually be removed in the next + * version. You can enable this to help you prepare the transition to a new + * major version by making sure your code is not using these functions. + * + * Uncomment to get errors on using deprecated functions. + */ +//#define MBEDTLS_DEPRECATED_REMOVED + +/* \} name SECTION: System support */ + +/** + * \name SECTION: mbed TLS feature support + * + * This section sets support for features that are or are not needed + * within the modules that are enabled. + * \{ + */ + +/** + * \def MBEDTLS_TIMING_ALT + * + * Uncomment to provide your own alternate implementation for mbedtls_timing_hardclock(), + * mbedtls_timing_get_timer(), mbedtls_set_alarm(), mbedtls_set/get_delay() + * + * Only works if you have MBEDTLS_TIMING_C enabled. + * + * You will need to provide a header "timing_alt.h" and an implementation at + * compile time. + */ +//#define MBEDTLS_TIMING_ALT + +/** + * \def MBEDTLS_AES_ALT + * + * MBEDTLS__MODULE_NAME__ALT: Uncomment a macro to let mbed TLS use your + * alternate core implementation of a symmetric crypto or hash module (e.g. + * platform specific assembly optimized implementations). Keep in mind that + * the function prototypes should remain the same. + * + * This replaces the whole module. If you only want to replace one of the + * functions, use one of the MBEDTLS__FUNCTION_NAME__ALT flags. + * + * Example: In case you uncomment MBEDTLS_AES_ALT, mbed TLS will no longer + * provide the "struct mbedtls_aes_context" definition and omit the base function + * declarations and implementations. "aes_alt.h" will be included from + * "aes.h" to include the new function definitions. + * + * Uncomment a macro to enable alternate implementation of the corresponding + * module. + */ +//#define MBEDTLS_ARC4_ALT +//#define MBEDTLS_BLOWFISH_ALT +//#define MBEDTLS_CAMELLIA_ALT +//#define MBEDTLS_DES_ALT +//#define MBEDTLS_XTEA_ALT +//#define MBEDTLS_MD2_ALT +//#define MBEDTLS_MD4_ALT +//#define MBEDTLS_MD5_ALT +//#define MBEDTLS_RIPEMD160_ALT + +/* The following units have ESP32 hardware support, + uncommenting each _ALT macro will use the + hardware-accelerated implementation. */ +#define MBEDTLS_AES_ALT + +/* Currently hardware SHA does not work with TLS handshake, + due to concurrency issue. Internal TW#7111. */ +//#define MBEDTLS_SHA1_ALT +//#define MBEDTLS_SHA256_ALT +//#define MBEDTLS_SHA512_ALT + +/* The following MPI (bignum) functions have ESP32 hardware support, + Uncommenting these macros will use the hardware-accelerated + implementations. + + Disabled as number of limbs limited by bug. Internal TW#7112. +*/ +//#define MBEDTLS_MPI_EXP_MOD_ALT +//#define MBEDTLS_MPI_MUL_MPI_ALT + +/** + * \def MBEDTLS_MD2_PROCESS_ALT + * + * MBEDTLS__FUNCTION_NAME__ALT: Uncomment a macro to let mbed TLS use you + * alternate core implementation of symmetric crypto or hash function. Keep in + * mind that function prototypes should remain the same. + * + * This replaces only one function. The header file from mbed TLS is still + * used, in contrast to the MBEDTLS__MODULE_NAME__ALT flags. + * + * Example: In case you uncomment MBEDTLS_SHA256_PROCESS_ALT, mbed TLS will + * no longer provide the mbedtls_sha1_process() function, but it will still provide + * the other function (using your mbedtls_sha1_process() function) and the definition + * of mbedtls_sha1_context, so your implementation of mbedtls_sha1_process must be compatible + * with this definition. + * + * Note: if you use the AES_xxx_ALT macros, then is is recommended to also set + * MBEDTLS_AES_ROM_TABLES in order to help the linker garbage-collect the AES + * tables. + * + * Uncomment a macro to enable alternate implementation of the corresponding + * function. + */ +//#define MBEDTLS_MD2_PROCESS_ALT +//#define MBEDTLS_MD4_PROCESS_ALT +//#define MBEDTLS_MD5_PROCESS_ALT +//#define MBEDTLS_RIPEMD160_PROCESS_ALT +//#define MBEDTLS_SHA1_PROCESS_ALT +//#define MBEDTLS_SHA256_PROCESS_ALT +//#define MBEDTLS_SHA512_PROCESS_ALT +//#define MBEDTLS_DES_SETKEY_ALT +//#define MBEDTLS_DES_CRYPT_ECB_ALT +//#define MBEDTLS_DES3_CRYPT_ECB_ALT +//#define MBEDTLS_AES_SETKEY_ENC_ALT +//#define MBEDTLS_AES_SETKEY_DEC_ALT +//#define MBEDTLS_AES_ENCRYPT_ALT +//#define MBEDTLS_AES_DECRYPT_ALT + +/** + * \def MBEDTLS_ENTROPY_HARDWARE_ALT + * + * Uncomment this macro to let mbed TLS use your own implementation of a + * hardware entropy collector. + * + * Your function must be called \c mbedtls_hardware_poll(), have the same + * prototype as declared in entropy_poll.h, and accept NULL as first argument. + * + * Uncomment to use your own hardware entropy collector. + */ +#define MBEDTLS_ENTROPY_HARDWARE_ALT + +/** + * \def MBEDTLS_AES_ROM_TABLES + * + * Store the AES tables in ROM. + * + * Uncomment this macro to store the AES tables in ROM. + */ +#define MBEDTLS_AES_ROM_TABLES + +/** + * \def MBEDTLS_CAMELLIA_SMALL_MEMORY + * + * Use less ROM for the Camellia implementation (saves about 768 bytes). + * + * Uncomment this macro to use less memory for Camellia. + */ +//#define MBEDTLS_CAMELLIA_SMALL_MEMORY + +/** + * \def MBEDTLS_CIPHER_MODE_CBC + * + * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. + */ +#define MBEDTLS_CIPHER_MODE_CBC + +/** + * \def MBEDTLS_CIPHER_MODE_CFB + * + * Enable Cipher Feedback mode (CFB) for symmetric ciphers. + */ +#define MBEDTLS_CIPHER_MODE_CFB + +/** + * \def MBEDTLS_CIPHER_MODE_CTR + * + * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. + */ +#define MBEDTLS_CIPHER_MODE_CTR + +/** + * \def MBEDTLS_CIPHER_NULL_CIPHER + * + * Enable NULL cipher. + * Warning: Only do so when you know what you are doing. This allows for + * encryption or channels without any security! + * + * Requires MBEDTLS_ENABLE_WEAK_CIPHERSUITES as well to enable + * the following ciphersuites: + * MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA + * MBEDTLS_TLS_RSA_WITH_NULL_SHA256 + * MBEDTLS_TLS_RSA_WITH_NULL_SHA + * MBEDTLS_TLS_RSA_WITH_NULL_MD5 + * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA + * MBEDTLS_TLS_PSK_WITH_NULL_SHA384 + * MBEDTLS_TLS_PSK_WITH_NULL_SHA256 + * MBEDTLS_TLS_PSK_WITH_NULL_SHA + * + * Uncomment this macro to enable the NULL cipher and ciphersuites + */ +//#define MBEDTLS_CIPHER_NULL_CIPHER + +/** + * \def MBEDTLS_CIPHER_PADDING_PKCS7 + * + * MBEDTLS_CIPHER_PADDING_XXX: Uncomment or comment macros to add support for + * specific padding modes in the cipher layer with cipher modes that support + * padding (e.g. CBC) + * + * If you disable all padding modes, only full blocks can be used with CBC. + * + * Enable padding modes in the cipher layer. + */ +#define MBEDTLS_CIPHER_PADDING_PKCS7 +#define MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS +#define MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN +#define MBEDTLS_CIPHER_PADDING_ZEROS + +/** + * \def MBEDTLS_ENABLE_WEAK_CIPHERSUITES + * + * Enable weak ciphersuites in SSL / TLS. + * Warning: Only do so when you know what you are doing. This allows for + * channels with virtually no security at all! + * + * This enables the following ciphersuites: + * MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA + * + * Uncomment this macro to enable weak ciphersuites + */ +//#define MBEDTLS_ENABLE_WEAK_CIPHERSUITES + +/** + * \def MBEDTLS_REMOVE_ARC4_CIPHERSUITES + * + * Remove RC4 ciphersuites by default in SSL / TLS. + * This flag removes the ciphersuites based on RC4 from the default list as + * returned by mbedtls_ssl_list_ciphersuites(). However, it is still possible to + * enable (some of) them with mbedtls_ssl_conf_ciphersuites() by including them + * explicitly. + * + * Uncomment this macro to remove RC4 ciphersuites by default. + */ +#define MBEDTLS_REMOVE_ARC4_CIPHERSUITES + +/** + * \def MBEDTLS_ECP_DP_SECP192R1_ENABLED + * + * MBEDTLS_ECP_XXXX_ENABLED: Enables specific curves within the Elliptic Curve + * module. By default all supported curves are enabled. + * + * Comment macros to disable the curve and functions for it + */ +#define MBEDTLS_ECP_DP_SECP192R1_ENABLED +#define MBEDTLS_ECP_DP_SECP224R1_ENABLED +#define MBEDTLS_ECP_DP_SECP256R1_ENABLED +#define MBEDTLS_ECP_DP_SECP384R1_ENABLED +#define MBEDTLS_ECP_DP_SECP521R1_ENABLED +#define MBEDTLS_ECP_DP_SECP192K1_ENABLED +#define MBEDTLS_ECP_DP_SECP224K1_ENABLED +#define MBEDTLS_ECP_DP_SECP256K1_ENABLED +#define MBEDTLS_ECP_DP_BP256R1_ENABLED +#define MBEDTLS_ECP_DP_BP384R1_ENABLED +#define MBEDTLS_ECP_DP_BP512R1_ENABLED +#define MBEDTLS_ECP_DP_CURVE25519_ENABLED + +/** + * \def MBEDTLS_ECP_NIST_OPTIM + * + * Enable specific 'modulo p' routines for each NIST prime. + * Depending on the prime and architecture, makes operations 4 to 8 times + * faster on the corresponding curve. + * + * Comment this macro to disable NIST curves optimisation. + */ +#define MBEDTLS_ECP_NIST_OPTIM + +/** + * \def MBEDTLS_ECDSA_DETERMINISTIC + * + * Enable deterministic ECDSA (RFC 6979). + * Standard ECDSA is "fragile" in the sense that lack of entropy when signing + * may result in a compromise of the long-term signing key. This is avoided by + * the deterministic variant. + * + * Requires: MBEDTLS_HMAC_DRBG_C + * + * Comment this macro to disable deterministic ECDSA. + */ +#define MBEDTLS_ECDSA_DETERMINISTIC + +/** + * \def MBEDTLS_KEY_EXCHANGE_PSK_ENABLED + * + * Enable the PSK based ciphersuite modes in SSL / TLS. + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_PSK_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED + * + * Enable the DHE-PSK based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_DHM_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED + * + * Enable the ECDHE-PSK based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_ECDH_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED + * + * Enable the RSA-PSK based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, + * MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_RSA_ENABLED + * + * Enable the RSA-only based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, + * MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 + */ +#define MBEDTLS_KEY_EXCHANGE_RSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED + * + * Enable the DHE-RSA based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_DHM_C, MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, + * MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED + * + * Enable the ECDHE-RSA based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_ECDH_C, MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, + * MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED + * + * Enable the ECDHE-ECDSA based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_ECDH_C, MBEDTLS_ECDSA_C, MBEDTLS_X509_CRT_PARSE_C, + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA + */ +#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED + * + * Enable the ECDH-ECDSA based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_ECDH_C, MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 + */ +#define MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED + * + * Enable the ECDH-RSA based ciphersuite modes in SSL / TLS. + * + * Requires: MBEDTLS_ECDH_C, MBEDTLS_X509_CRT_PARSE_C + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 + */ +#define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED + +/** + * \def MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED + * + * Enable the ECJPAKE based ciphersuite modes in SSL / TLS. + * + * \warning This is currently experimental. EC J-PAKE support is based on the + * Thread v1.0.0 specification; incompatible changes to the specification + * might still happen. For this reason, this is disabled by default. + * + * Requires: MBEDTLS_ECJPAKE_C + * MBEDTLS_SHA256_C + * MBEDTLS_ECP_DP_SECP256R1_ENABLED + * + * This enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 + */ +//#define MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED + +/** + * \def MBEDTLS_PK_PARSE_EC_EXTENDED + * + * Enhance support for reading EC keys using variants of SEC1 not allowed by + * RFC 5915 and RFC 5480. + * + * Currently this means parsing the SpecifiedECDomain choice of EC + * parameters (only known groups are supported, not arbitrary domains, to + * avoid validation issues). + * + * Disable if you only need to support RFC 5915 + 5480 key formats. + */ +#define MBEDTLS_PK_PARSE_EC_EXTENDED + +/** + * \def MBEDTLS_ERROR_STRERROR_DUMMY + * + * Enable a dummy error function to make use of mbedtls_strerror() in + * third party libraries easier when MBEDTLS_ERROR_C is disabled + * (no effect when MBEDTLS_ERROR_C is enabled). + * + * You can safely disable this if MBEDTLS_ERROR_C is enabled, or if you're + * not using mbedtls_strerror() or error_strerror() in your application. + * + * Disable if you run into name conflicts and want to really remove the + * mbedtls_strerror() + */ +#define MBEDTLS_ERROR_STRERROR_DUMMY + +/** + * \def MBEDTLS_GENPRIME + * + * Enable the prime-number generation code. + * + * Requires: MBEDTLS_BIGNUM_C + */ +#define MBEDTLS_GENPRIME + +/** + * \def MBEDTLS_FS_IO + * + * Enable functions that use the filesystem. + */ +//#define MBEDTLS_FS_IO + +/** + * \def MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES + * + * Do not add default entropy sources. These are the platform specific, + * mbedtls_timing_hardclock and HAVEGE based poll functions. + * + * This is useful to have more control over the added entropy sources in an + * application. + * + * Uncomment this macro to prevent loading of default entropy functions. + */ +//#define MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES + +/** + * \def MBEDTLS_NO_PLATFORM_ENTROPY + * + * Do not use built-in platform entropy functions. + * This is useful if your platform does not support + * standards like the /dev/urandom or Windows CryptoAPI. + * + * Uncomment this macro to disable the built-in platform entropy functions. + */ +#define MBEDTLS_NO_PLATFORM_ENTROPY + +/** + * \def MBEDTLS_ENTROPY_FORCE_SHA256 + * + * Force the entropy accumulator to use a SHA-256 accumulator instead of the + * default SHA-512 based one (if both are available). + * + * Requires: MBEDTLS_SHA256_C + * + * On 32-bit systems SHA-256 can be much faster than SHA-512. Use this option + * if you have performance concerns. + * + * This option is only useful if both MBEDTLS_SHA256_C and + * MBEDTLS_SHA512_C are defined. Otherwise the available hash module is used. + */ +//#define MBEDTLS_ENTROPY_FORCE_SHA256 + +/** + * \def MBEDTLS_MEMORY_DEBUG + * + * Enable debugging of buffer allocator memory issues. Automatically prints + * (to stderr) all (fatal) messages on memory allocation issues. Enables + * function for 'debug output' of allocated memory. + * + * Requires: MBEDTLS_MEMORY_BUFFER_ALLOC_C + * + * Uncomment this macro to let the buffer allocator print out error messages. + */ +//#define MBEDTLS_MEMORY_DEBUG + +/** + * \def MBEDTLS_MEMORY_BACKTRACE + * + * Include backtrace information with each allocated block. + * + * Requires: MBEDTLS_MEMORY_BUFFER_ALLOC_C + * GLIBC-compatible backtrace() an backtrace_symbols() support + * + * Uncomment this macro to include backtrace information + */ +//#define MBEDTLS_MEMORY_BACKTRACE + +/** + * \def MBEDTLS_PK_RSA_ALT_SUPPORT + * + * Support external private RSA keys (eg from a HSM) in the PK layer. + * + * Comment this macro to disable support for external private RSA keys. + */ +#define MBEDTLS_PK_RSA_ALT_SUPPORT + +/** + * \def MBEDTLS_PKCS1_V15 + * + * Enable support for PKCS#1 v1.5 encoding. + * + * Requires: MBEDTLS_RSA_C + * + * This enables support for PKCS#1 v1.5 operations. + */ +#define MBEDTLS_PKCS1_V15 + +/** + * \def MBEDTLS_PKCS1_V21 + * + * Enable support for PKCS#1 v2.1 encoding. + * + * Requires: MBEDTLS_MD_C, MBEDTLS_RSA_C + * + * This enables support for RSAES-OAEP and RSASSA-PSS operations. + */ +#define MBEDTLS_PKCS1_V21 + +/** + * \def MBEDTLS_RSA_NO_CRT + * + * Do not use the Chinese Remainder Theorem for the RSA private operation. + * + * Uncomment this macro to disable the use of CRT in RSA. + * + */ +//#define MBEDTLS_RSA_NO_CRT + +/** + * \def MBEDTLS_SELF_TEST + * + * Enable the checkup functions (*_self_test). + */ +#define MBEDTLS_SELF_TEST + +/** + * \def MBEDTLS_SHA256_SMALLER + * + * Enable an implementation of SHA-256 that has lower ROM footprint but also + * lower performance. + * + * The default implementation is meant to be a reasonnable compromise between + * performance and size. This version optimizes more aggressively for size at + * the expense of performance. Eg on Cortex-M4 it reduces the size of + * mbedtls_sha256_process() from ~2KB to ~0.5KB for a performance hit of about + * 30%. + * + * Uncomment to enable the smaller implementation of SHA256. + */ +//#define MBEDTLS_SHA256_SMALLER + +/** + * \def MBEDTLS_SSL_AEAD_RANDOM_IV + * + * Generate a random IV rather than using the record sequence number as a + * nonce for ciphersuites using and AEAD algorithm (GCM or CCM). + * + * Using the sequence number is generally recommended. + * + * Uncomment this macro to always use random IVs with AEAD ciphersuites. + */ +//#define MBEDTLS_SSL_AEAD_RANDOM_IV + +/** + * \def MBEDTLS_SSL_ALL_ALERT_MESSAGES + * + * Enable sending of alert messages in case of encountered errors as per RFC. + * If you choose not to send the alert messages, mbed TLS can still communicate + * with other servers, only debugging of failures is harder. + * + * The advantage of not sending alert messages, is that no information is given + * about reasons for failures thus preventing adversaries of gaining intel. + * + * Enable sending of all alert messages + */ +#define MBEDTLS_SSL_ALL_ALERT_MESSAGES + +/** + * \def MBEDTLS_SSL_DEBUG_ALL + * + * Enable the debug messages in SSL module for all issues. + * Debug messages have been disabled in some places to prevent timing + * attacks due to (unbalanced) debugging function calls. + * + * If you need all error reporting you should enable this during debugging, + * but remove this for production servers that should log as well. + * + * Uncomment this macro to report all debug messages on errors introducing + * a timing side-channel. + * + */ +//#define MBEDTLS_SSL_DEBUG_ALL + +/** \def MBEDTLS_SSL_ENCRYPT_THEN_MAC + * + * Enable support for Encrypt-then-MAC, RFC 7366. + * + * This allows peers that both support it to use a more robust protection for + * ciphersuites using CBC, providing deep resistance against timing attacks + * on the padding or underlying cipher. + * + * This only affects CBC ciphersuites, and is useless if none is defined. + * + * Requires: MBEDTLS_SSL_PROTO_TLS1 or + * MBEDTLS_SSL_PROTO_TLS1_1 or + * MBEDTLS_SSL_PROTO_TLS1_2 + * + * Comment this macro to disable support for Encrypt-then-MAC + */ +#define MBEDTLS_SSL_ENCRYPT_THEN_MAC + +/** \def MBEDTLS_SSL_EXTENDED_MASTER_SECRET + * + * Enable support for Extended Master Secret, aka Session Hash + * (draft-ietf-tls-session-hash-02). + * + * This was introduced as "the proper fix" to the Triple Handshake familiy of + * attacks, but it is recommended to always use it (even if you disable + * renegotiation), since it actually fixes a more fundamental issue in the + * original SSL/TLS design, and has implications beyond Triple Handshake. + * + * Requires: MBEDTLS_SSL_PROTO_TLS1 or + * MBEDTLS_SSL_PROTO_TLS1_1 or + * MBEDTLS_SSL_PROTO_TLS1_2 + * + * Comment this macro to disable support for Extended Master Secret. + */ +#define MBEDTLS_SSL_EXTENDED_MASTER_SECRET + +/** + * \def MBEDTLS_SSL_FALLBACK_SCSV + * + * Enable support for FALLBACK_SCSV (draft-ietf-tls-downgrade-scsv-00). + * + * For servers, it is recommended to always enable this, unless you support + * only one version of TLS, or know for sure that none of your clients + * implements a fallback strategy. + * + * For clients, you only need this if you're using a fallback strategy, which + * is not recommended in the first place, unless you absolutely need it to + * interoperate with buggy (version-intolerant) servers. + * + * Comment this macro to disable support for FALLBACK_SCSV + */ +#define MBEDTLS_SSL_FALLBACK_SCSV + +/** + * \def MBEDTLS_SSL_HW_RECORD_ACCEL + * + * Enable hooking functions in SSL module for hardware acceleration of + * individual records. + * + * Uncomment this macro to enable hooking functions. + */ +//#define MBEDTLS_SSL_HW_RECORD_ACCEL + +/** + * \def MBEDTLS_SSL_CBC_RECORD_SPLITTING + * + * Enable 1/n-1 record splitting for CBC mode in SSLv3 and TLS 1.0. + * + * This is a countermeasure to the BEAST attack, which also minimizes the risk + * of interoperability issues compared to sending 0-length records. + * + * Comment this macro to disable 1/n-1 record splitting. + */ +#define MBEDTLS_SSL_CBC_RECORD_SPLITTING + +/** + * \def MBEDTLS_SSL_RENEGOTIATION + * + * Disable support for TLS renegotiation. + * + * The two main uses of renegotiation are (1) refresh keys on long-lived + * connections and (2) client authentication after the initial handshake. + * If you don't need renegotiation, it's probably better to disable it, since + * it has been associated with security issues in the past and is easy to + * misuse/misunderstand. + * + * Comment this to disable support for renegotiation. + */ +#define MBEDTLS_SSL_RENEGOTIATION + +/** + * \def MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO + * + * Enable support for receiving and parsing SSLv2 Client Hello messages for the + * SSL Server module (MBEDTLS_SSL_SRV_C). + * + * Uncomment this macro to enable support for SSLv2 Client Hello messages. + */ +//#define MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO + +/** + * \def MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE + * + * Pick the ciphersuite according to the client's preferences rather than ours + * in the SSL Server module (MBEDTLS_SSL_SRV_C). + * + * Uncomment this macro to respect client's ciphersuite order + */ +//#define MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE + +/** + * \def MBEDTLS_SSL_MAX_FRAGMENT_LENGTH + * + * Enable support for RFC 6066 max_fragment_length extension in SSL. + * + * Comment this macro to disable support for the max_fragment_length extension + */ +#define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH + +/** + * \def MBEDTLS_SSL_PROTO_SSL3 + * + * Enable support for SSL 3.0. + * + * Requires: MBEDTLS_MD5_C + * MBEDTLS_SHA1_C + * + * Comment this macro to disable support for SSL 3.0 + */ +#define MBEDTLS_SSL_PROTO_SSL3 + +/** + * \def MBEDTLS_SSL_PROTO_TLS1 + * + * Enable support for TLS 1.0. + * + * Requires: MBEDTLS_MD5_C + * MBEDTLS_SHA1_C + * + * Comment this macro to disable support for TLS 1.0 + */ +#define MBEDTLS_SSL_PROTO_TLS1 + +/** + * \def MBEDTLS_SSL_PROTO_TLS1_1 + * + * Enable support for TLS 1.1 (and DTLS 1.0 if DTLS is enabled). + * + * Requires: MBEDTLS_MD5_C + * MBEDTLS_SHA1_C + * + * Comment this macro to disable support for TLS 1.1 / DTLS 1.0 + */ +#define MBEDTLS_SSL_PROTO_TLS1_1 + +/** + * \def MBEDTLS_SSL_PROTO_TLS1_2 + * + * Enable support for TLS 1.2 (and DTLS 1.2 if DTLS is enabled). + * + * Requires: MBEDTLS_SHA1_C or MBEDTLS_SHA256_C or MBEDTLS_SHA512_C + * (Depends on ciphersuites) + * + * Comment this macro to disable support for TLS 1.2 / DTLS 1.2 + */ +#define MBEDTLS_SSL_PROTO_TLS1_2 + +/** + * \def MBEDTLS_SSL_PROTO_DTLS + * + * Enable support for DTLS (all available versions). + * + * Enable this and MBEDTLS_SSL_PROTO_TLS1_1 to enable DTLS 1.0, + * and/or this and MBEDTLS_SSL_PROTO_TLS1_2 to enable DTLS 1.2. + * + * Requires: MBEDTLS_SSL_PROTO_TLS1_1 + * or MBEDTLS_SSL_PROTO_TLS1_2 + * + * Comment this macro to disable support for DTLS + */ +#define MBEDTLS_SSL_PROTO_DTLS + +/** + * \def MBEDTLS_SSL_ALPN + * + * Enable support for RFC 7301 Application Layer Protocol Negotiation. + * + * Comment this macro to disable support for ALPN. + */ +#define MBEDTLS_SSL_ALPN + +/** + * \def MBEDTLS_SSL_DTLS_ANTI_REPLAY + * + * Enable support for the anti-replay mechanism in DTLS. + * + * Requires: MBEDTLS_SSL_TLS_C + * MBEDTLS_SSL_PROTO_DTLS + * + * \warning Disabling this is often a security risk! + * See mbedtls_ssl_conf_dtls_anti_replay() for details. + * + * Comment this to disable anti-replay in DTLS. + */ +#define MBEDTLS_SSL_DTLS_ANTI_REPLAY + +/** + * \def MBEDTLS_SSL_DTLS_HELLO_VERIFY + * + * Enable support for HelloVerifyRequest on DTLS servers. + * + * This feature is highly recommended to prevent DTLS servers being used as + * amplifiers in DoS attacks against other hosts. It should always be enabled + * unless you know for sure amplification cannot be a problem in the + * environment in which your server operates. + * + * \warning Disabling this can ba a security risk! (see above) + * + * Requires: MBEDTLS_SSL_PROTO_DTLS + * + * Comment this to disable support for HelloVerifyRequest. + */ +#define MBEDTLS_SSL_DTLS_HELLO_VERIFY + +/** + * \def MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE + * + * Enable server-side support for clients that reconnect from the same port. + * + * Some clients unexpectedly close the connection and try to reconnect using the + * same source port. This needs special support from the server to handle the + * new connection securely, as described in section 4.2.8 of RFC 6347. This + * flag enables that support. + * + * Requires: MBEDTLS_SSL_DTLS_HELLO_VERIFY + * + * Comment this to disable support for clients reusing the source port. + */ +#define MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE + +/** + * \def MBEDTLS_SSL_DTLS_BADMAC_LIMIT + * + * Enable support for a limit of records with bad MAC. + * + * See mbedtls_ssl_conf_dtls_badmac_limit(). + * + * Requires: MBEDTLS_SSL_PROTO_DTLS + */ +#define MBEDTLS_SSL_DTLS_BADMAC_LIMIT + +/** + * \def MBEDTLS_SSL_SESSION_TICKETS + * + * Enable support for RFC 5077 session tickets in SSL. + * Client-side, provides full support for session tickets (maintainance of a + * session store remains the responsibility of the application, though). + * Server-side, you also need to provide callbacks for writing and parsing + * tickets, including authenticated encryption and key management. Example + * callbacks are provided by MBEDTLS_SSL_TICKET_C. + * + * Comment this macro to disable support for SSL session tickets + */ +#define MBEDTLS_SSL_SESSION_TICKETS + +/** + * \def MBEDTLS_SSL_EXPORT_KEYS + * + * Enable support for exporting key block and master secret. + * This is required for certain users of TLS, e.g. EAP-TLS. + * + * Comment this macro to disable support for key export + */ +#define MBEDTLS_SSL_EXPORT_KEYS + +/** + * \def MBEDTLS_SSL_SERVER_NAME_INDICATION + * + * Enable support for RFC 6066 server name indication (SNI) in SSL. + * + * Requires: MBEDTLS_X509_CRT_PARSE_C + * + * Comment this macro to disable support for server name indication in SSL + */ +#define MBEDTLS_SSL_SERVER_NAME_INDICATION + +/** + * \def MBEDTLS_SSL_TRUNCATED_HMAC + * + * Enable support for RFC 6066 truncated HMAC in SSL. + * + * Comment this macro to disable support for truncated HMAC in SSL + */ +#define MBEDTLS_SSL_TRUNCATED_HMAC + +/** + * \def MBEDTLS_THREADING_ALT + * + * Provide your own alternate threading implementation. + * + * Requires: MBEDTLS_THREADING_C + * + * Uncomment this to allow your own alternate threading implementation. + */ +//#define MBEDTLS_THREADING_ALT + +/** + * \def MBEDTLS_THREADING_PTHREAD + * + * Enable the pthread wrapper layer for the threading layer. + * + * Requires: MBEDTLS_THREADING_C + * + * Uncomment this to enable pthread mutexes. + */ +//#define MBEDTLS_THREADING_PTHREAD + +/** + * \def MBEDTLS_VERSION_FEATURES + * + * Allow run-time checking of compile-time enabled features. Thus allowing users + * to check at run-time if the library is for instance compiled with threading + * support via mbedtls_version_check_feature(). + * + * Requires: MBEDTLS_VERSION_C + * + * Comment this to disable run-time checking and save ROM space + */ +#define MBEDTLS_VERSION_FEATURES + +/** + * \def MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 + * + * If set, the X509 parser will not break-off when parsing an X509 certificate + * and encountering an extension in a v1 or v2 certificate. + * + * Uncomment to prevent an error. + */ +//#define MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 + +/** + * \def MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION + * + * If set, the X509 parser will not break-off when parsing an X509 certificate + * and encountering an unknown critical extension. + * + * \warning Depending on your PKI use, enabling this can be a security risk! + * + * Uncomment to prevent an error. + */ +//#define MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION + +/** + * \def MBEDTLS_X509_CHECK_KEY_USAGE + * + * Enable verification of the keyUsage extension (CA and leaf certificates). + * + * Disabling this avoids problems with mis-issued and/or misused + * (intermediate) CA and leaf certificates. + * + * \warning Depending on your PKI use, disabling this can be a security risk! + * + * Comment to skip keyUsage checking for both CA and leaf certificates. + */ +#define MBEDTLS_X509_CHECK_KEY_USAGE + +/** + * \def MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE + * + * Enable verification of the extendedKeyUsage extension (leaf certificates). + * + * Disabling this avoids problems with mis-issued and/or misused certificates. + * + * \warning Depending on your PKI use, disabling this can be a security risk! + * + * Comment to skip extendedKeyUsage checking for certificates. + */ +#define MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE + +/** + * \def MBEDTLS_X509_RSASSA_PSS_SUPPORT + * + * Enable parsing and verification of X.509 certificates, CRLs and CSRS + * signed with RSASSA-PSS (aka PKCS#1 v2.1). + * + * Comment this macro to disallow using RSASSA-PSS in certificates. + */ +#define MBEDTLS_X509_RSASSA_PSS_SUPPORT + +/** + * \def MBEDTLS_ZLIB_SUPPORT + * + * If set, the SSL/TLS module uses ZLIB to support compression and + * decompression of packet data. + * + * \warning TLS-level compression MAY REDUCE SECURITY! See for example the + * CRIME attack. Before enabling this option, you should examine with care if + * CRIME or similar exploits may be a applicable to your use case. + * + * \note Currently compression can't be used with DTLS. + * + * Used in: library/ssl_tls.c + * library/ssl_cli.c + * library/ssl_srv.c + * + * This feature requires zlib library and headers to be present. + * + * Uncomment to enable use of ZLIB + */ +//#define MBEDTLS_ZLIB_SUPPORT +/* \} name SECTION: mbed TLS feature support */ + +/** + * \name SECTION: mbed TLS modules + * + * This section enables or disables entire modules in mbed TLS + * \{ + */ + +/** + * \def MBEDTLS_AESNI_C + * + * Enable AES-NI support on x86-64. + * + * Module: library/aesni.c + * Caller: library/aes.c + * + * Requires: MBEDTLS_HAVE_ASM + * + * This modules adds support for the AES-NI instructions on x86-64 + */ +#define MBEDTLS_AESNI_C + +/** + * \def MBEDTLS_AES_C + * + * Enable the AES block cipher. + * + * Module: library/aes.c + * Caller: library/ssl_tls.c + * library/pem.c + * library/ctr_drbg.c + * + * This module enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 + * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 + * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 + * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 + * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA + * + * PEM_PARSE uses AES for decrypting encrypted keys. + */ +#define MBEDTLS_AES_C + +/** + * \def MBEDTLS_ARC4_C + * + * Enable the ARCFOUR stream cipher. + * + * Module: library/arc4.c + * Caller: library/ssl_tls.c + * + * This module enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA + * MBEDTLS_TLS_RSA_WITH_RC4_128_SHA + * MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 + * MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA + * MBEDTLS_TLS_PSK_WITH_RC4_128_SHA + */ +#define MBEDTLS_ARC4_C + +/** + * \def MBEDTLS_ASN1_PARSE_C + * + * Enable the generic ASN1 parser. + * + * Module: library/asn1.c + * Caller: library/x509.c + * library/dhm.c + * library/pkcs12.c + * library/pkcs5.c + * library/pkparse.c + */ +#define MBEDTLS_ASN1_PARSE_C + +/** + * \def MBEDTLS_ASN1_WRITE_C + * + * Enable the generic ASN1 writer. + * + * Module: library/asn1write.c + * Caller: library/ecdsa.c + * library/pkwrite.c + * library/x509_create.c + * library/x509write_crt.c + * library/mbedtls_x509write_csr.c + */ +#define MBEDTLS_ASN1_WRITE_C + +/** + * \def MBEDTLS_BASE64_C + * + * Enable the Base64 module. + * + * Module: library/base64.c + * Caller: library/pem.c + * + * This module is required for PEM support (required by X.509). + */ +#define MBEDTLS_BASE64_C + +/** + * \def MBEDTLS_BIGNUM_C + * + * Enable the multi-precision integer library. + * + * Module: library/bignum.c + * Caller: library/dhm.c + * library/ecp.c + * library/ecdsa.c + * library/rsa.c + * library/ssl_tls.c + * + * This module is required for RSA, DHM and ECC (ECDH, ECDSA) support. + */ +#define MBEDTLS_BIGNUM_C + +/** + * \def MBEDTLS_BLOWFISH_C + * + * Enable the Blowfish block cipher. + * + * Module: library/blowfish.c + */ +#define MBEDTLS_BLOWFISH_C + +/** + * \def MBEDTLS_CAMELLIA_C + * + * Enable the Camellia block cipher. + * + * Module: library/camellia.c + * Caller: library/ssl_tls.c + * + * This module enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 + * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 + */ +#define MBEDTLS_CAMELLIA_C + +/** + * \def MBEDTLS_CCM_C + * + * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. + * + * Module: library/ccm.c + * + * Requires: MBEDTLS_AES_C or MBEDTLS_CAMELLIA_C + * + * This module enables the AES-CCM ciphersuites, if other requisites are + * enabled as well. + */ +#define MBEDTLS_CCM_C + +/** + * \def MBEDTLS_CERTS_C + * + * Enable the test certificates. + * + * Module: library/certs.c + * Caller: + * + * This module is used for testing (ssl_client/server). + */ +#define MBEDTLS_CERTS_C + +/** + * \def MBEDTLS_CIPHER_C + * + * Enable the generic cipher layer. + * + * Module: library/cipher.c + * Caller: library/ssl_tls.c + * + * Uncomment to enable generic cipher wrappers. + */ +#define MBEDTLS_CIPHER_C + +/** + * \def MBEDTLS_CTR_DRBG_C + * + * Enable the CTR_DRBG AES-256-based random generator. + * + * Module: library/ctr_drbg.c + * Caller: + * + * Requires: MBEDTLS_AES_C + * + * This module provides the CTR_DRBG AES-256 random number generator. + */ +#define MBEDTLS_CTR_DRBG_C + +/** + * \def MBEDTLS_DEBUG_C + * + * Enable the debug functions. + * + * Module: library/debug.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * + * This module provides debugging functions. + */ +#if CONFIG_MBEDTLS_DEBUG +#define MBEDTLS_DEBUG_C +#endif + +/** + * \def MBEDTLS_DES_C + * + * Enable the DES block cipher. + * + * Module: library/des.c + * Caller: library/pem.c + * library/ssl_tls.c + * + * This module enables the following ciphersuites (if other requisites are + * enabled as well): + * MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA + * MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA + * + * PEM_PARSE uses DES/3DES for decrypting encrypted keys. + */ +#define MBEDTLS_DES_C + +/** + * \def MBEDTLS_DHM_C + * + * Enable the Diffie-Hellman-Merkle module. + * + * Module: library/dhm.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * + * This module is used by the following key exchanges: + * DHE-RSA, DHE-PSK + */ +#define MBEDTLS_DHM_C + +/** + * \def MBEDTLS_ECDH_C + * + * Enable the elliptic curve Diffie-Hellman library. + * + * Module: library/ecdh.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * + * This module is used by the following key exchanges: + * ECDHE-ECDSA, ECDHE-RSA, DHE-PSK + * + * Requires: MBEDTLS_ECP_C + */ +#define MBEDTLS_ECDH_C + +/** + * \def MBEDTLS_ECDSA_C + * + * Enable the elliptic curve DSA library. + * + * Module: library/ecdsa.c + * Caller: + * + * This module is used by the following key exchanges: + * ECDHE-ECDSA + * + * Requires: MBEDTLS_ECP_C, MBEDTLS_ASN1_WRITE_C, MBEDTLS_ASN1_PARSE_C + */ +#define MBEDTLS_ECDSA_C + +/** + * \def MBEDTLS_ECJPAKE_C + * + * Enable the elliptic curve J-PAKE library. + * + * \warning This is currently experimental. EC J-PAKE support is based on the + * Thread v1.0.0 specification; incompatible changes to the specification + * might still happen. For this reason, this is disabled by default. + * + * Module: library/ecjpake.c + * Caller: + * + * This module is used by the following key exchanges: + * ECJPAKE + * + * Requires: MBEDTLS_ECP_C, MBEDTLS_MD_C + */ +//#define MBEDTLS_ECJPAKE_C + +/** + * \def MBEDTLS_ECP_C + * + * Enable the elliptic curve over GF(p) library. + * + * Module: library/ecp.c + * Caller: library/ecdh.c + * library/ecdsa.c + * library/ecjpake.c + * + * Requires: MBEDTLS_BIGNUM_C and at least one MBEDTLS_ECP_DP_XXX_ENABLED + */ +#define MBEDTLS_ECP_C + +/** + * \def MBEDTLS_ENTROPY_C + * + * Enable the platform-specific entropy code. + * + * Module: library/entropy.c + * Caller: + * + * Requires: MBEDTLS_SHA512_C or MBEDTLS_SHA256_C + * + * This module provides a generic entropy pool + */ +#define MBEDTLS_ENTROPY_C + +/** + * \def MBEDTLS_ERROR_C + * + * Enable error code to error string conversion. + * + * Module: library/error.c + * Caller: + * + * This module enables mbedtls_strerror(). + */ +#define MBEDTLS_ERROR_C + +/** + * \def MBEDTLS_GCM_C + * + * Enable the Galois/Counter Mode (GCM) for AES. + * + * Module: library/gcm.c + * + * Requires: MBEDTLS_AES_C or MBEDTLS_CAMELLIA_C + * + * This module enables the AES-GCM and CAMELLIA-GCM ciphersuites, if other + * requisites are enabled as well. + */ +#define MBEDTLS_GCM_C + +/** + * \def MBEDTLS_HAVEGE_C + * + * Enable the HAVEGE random generator. + * + * Warning: the HAVEGE random generator is not suitable for virtualized + * environments + * + * Warning: the HAVEGE random generator is dependent on timing and specific + * processor traits. It is therefore not advised to use HAVEGE as + * your applications primary random generator or primary entropy pool + * input. As a secondary input to your entropy pool, it IS able add + * the (limited) extra entropy it provides. + * + * Module: library/havege.c + * Caller: + * + * Requires: MBEDTLS_TIMING_C + * + * Uncomment to enable the HAVEGE random generator. + */ +//#define MBEDTLS_HAVEGE_C + +/** + * \def MBEDTLS_HMAC_DRBG_C + * + * Enable the HMAC_DRBG random generator. + * + * Module: library/hmac_drbg.c + * Caller: + * + * Requires: MBEDTLS_MD_C + * + * Uncomment to enable the HMAC_DRBG random number geerator. + */ +#define MBEDTLS_HMAC_DRBG_C + +/** + * \def MBEDTLS_MD_C + * + * Enable the generic message digest layer. + * + * Module: library/mbedtls_md.c + * Caller: + * + * Uncomment to enable generic message digest wrappers. + */ +#define MBEDTLS_MD_C + +/** + * \def MBEDTLS_MD2_C + * + * Enable the MD2 hash algorithm. + * + * Module: library/mbedtls_md2.c + * Caller: + * + * Uncomment to enable support for (rare) MD2-signed X.509 certs. + */ +//#define MBEDTLS_MD2_C + +/** + * \def MBEDTLS_MD4_C + * + * Enable the MD4 hash algorithm. + * + * Module: library/mbedtls_md4.c + * Caller: + * + * Uncomment to enable support for (rare) MD4-signed X.509 certs. + */ +//#define MBEDTLS_MD4_C + +/** + * \def MBEDTLS_MD5_C + * + * Enable the MD5 hash algorithm. + * + * Module: library/mbedtls_md5.c + * Caller: library/mbedtls_md.c + * library/pem.c + * library/ssl_tls.c + * + * This module is required for SSL/TLS and X.509. + * PEM_PARSE uses MD5 for decrypting encrypted keys. + */ +#define MBEDTLS_MD5_C + +/** + * \def MBEDTLS_MEMORY_BUFFER_ALLOC_C + * + * Enable the buffer allocator implementation that makes use of a (stack) + * based buffer to 'allocate' dynamic memory. (replaces calloc() and free() + * calls) + * + * Module: library/memory_buffer_alloc.c + * + * Requires: MBEDTLS_PLATFORM_C + * MBEDTLS_PLATFORM_MEMORY (to use it within mbed TLS) + * + * Enable this module to enable the buffer memory allocator. + */ +//#define MBEDTLS_MEMORY_BUFFER_ALLOC_C + +/** + * \def MBEDTLS_NET_C + * + * Enable the TCP/IP networking routines. + * + * Module: library/net.c + * + * This module provides TCP/IP networking routines. + */ +//#define MBEDTLS_NET_C + +/** + * \def MBEDTLS_OID_C + * + * Enable the OID database. + * + * Module: library/oid.c + * Caller: library/asn1write.c + * library/pkcs5.c + * library/pkparse.c + * library/pkwrite.c + * library/rsa.c + * library/x509.c + * library/x509_create.c + * library/mbedtls_x509_crl.c + * library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c + * library/x509write_crt.c + * library/mbedtls_x509write_csr.c + * + * This modules translates between OIDs and internal values. + */ +#define MBEDTLS_OID_C + +/** + * \def MBEDTLS_PADLOCK_C + * + * Enable VIA Padlock support on x86. + * + * Module: library/padlock.c + * Caller: library/aes.c + * + * Requires: MBEDTLS_HAVE_ASM + * + * This modules adds support for the VIA PadLock on x86. + */ +#define MBEDTLS_PADLOCK_C + +/** + * \def MBEDTLS_PEM_PARSE_C + * + * Enable PEM decoding / parsing. + * + * Module: library/pem.c + * Caller: library/dhm.c + * library/pkparse.c + * library/mbedtls_x509_crl.c + * library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c + * + * Requires: MBEDTLS_BASE64_C + * + * This modules adds support for decoding / parsing PEM files. + */ +#define MBEDTLS_PEM_PARSE_C + +/** + * \def MBEDTLS_PEM_WRITE_C + * + * Enable PEM encoding / writing. + * + * Module: library/pem.c + * Caller: library/pkwrite.c + * library/x509write_crt.c + * library/mbedtls_x509write_csr.c + * + * Requires: MBEDTLS_BASE64_C + * + * This modules adds support for encoding / writing PEM files. + */ +#define MBEDTLS_PEM_WRITE_C + +/** + * \def MBEDTLS_PK_C + * + * Enable the generic public (asymetric) key layer. + * + * Module: library/pk.c + * Caller: library/ssl_tls.c + * library/ssl_cli.c + * library/ssl_srv.c + * + * Requires: MBEDTLS_RSA_C or MBEDTLS_ECP_C + * + * Uncomment to enable generic public key wrappers. + */ +#define MBEDTLS_PK_C + +/** + * \def MBEDTLS_PK_PARSE_C + * + * Enable the generic public (asymetric) key parser. + * + * Module: library/pkparse.c + * Caller: library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c + * + * Requires: MBEDTLS_PK_C + * + * Uncomment to enable generic public key parse functions. + */ +#define MBEDTLS_PK_PARSE_C + +/** + * \def MBEDTLS_PK_WRITE_C + * + * Enable the generic public (asymetric) key writer. + * + * Module: library/pkwrite.c + * Caller: library/x509write.c + * + * Requires: MBEDTLS_PK_C + * + * Uncomment to enable generic public key write functions. + */ +#define MBEDTLS_PK_WRITE_C + +/** + * \def MBEDTLS_PKCS5_C + * + * Enable PKCS#5 functions. + * + * Module: library/pkcs5.c + * + * Requires: MBEDTLS_MD_C + * + * This module adds support for the PKCS#5 functions. + */ +#define MBEDTLS_PKCS5_C + +/** + * \def MBEDTLS_PKCS11_C + * + * Enable wrapper for PKCS#11 smartcard support. + * + * Module: library/pkcs11.c + * Caller: library/pk.c + * + * Requires: MBEDTLS_PK_C + * + * This module enables SSL/TLS PKCS #11 smartcard support. + * Requires the presence of the PKCS#11 helper library (libpkcs11-helper) + */ +//#define MBEDTLS_PKCS11_C + +/** + * \def MBEDTLS_PKCS12_C + * + * Enable PKCS#12 PBE functions. + * Adds algorithms for parsing PKCS#8 encrypted private keys + * + * Module: library/pkcs12.c + * Caller: library/pkparse.c + * + * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_CIPHER_C, MBEDTLS_MD_C + * Can use: MBEDTLS_ARC4_C + * + * This module enables PKCS#12 functions. + */ +#define MBEDTLS_PKCS12_C + +/** + * \def MBEDTLS_PLATFORM_C + * + * Enable the platform abstraction layer that allows you to re-assign + * functions like calloc(), free(), snprintf(), printf(), fprintf(), exit(). + * + * Enabling MBEDTLS_PLATFORM_C enables to use of MBEDTLS_PLATFORM_XXX_ALT + * or MBEDTLS_PLATFORM_XXX_MACRO directives, allowing the functions mentioned + * above to be specified at runtime or compile time respectively. + * + * \note This abstraction layer must be enabled on Windows (including MSYS2) + * as other module rely on it for a fixed snprintf implementation. + * + * Module: library/platform.c + * Caller: Most other .c files + * + * This module enables abstraction of common (libc) functions. + */ +#define MBEDTLS_PLATFORM_C + +/** + * \def MBEDTLS_RIPEMD160_C + * + * Enable the RIPEMD-160 hash algorithm. + * + * Module: library/mbedtls_ripemd160.c + * Caller: library/mbedtls_md.c + * + */ +#define MBEDTLS_RIPEMD160_C + +/** + * \def MBEDTLS_RSA_C + * + * Enable the RSA public-key cryptosystem. + * + * Module: library/rsa.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * library/x509.c + * + * This module is used by the following key exchanges: + * RSA, DHE-RSA, ECDHE-RSA, RSA-PSK + * + * Requires: MBEDTLS_BIGNUM_C, MBEDTLS_OID_C + */ +#define MBEDTLS_RSA_C + +/** + * \def MBEDTLS_SHA1_C + * + * Enable the SHA1 cryptographic hash algorithm. + * + * Module: library/mbedtls_sha1.c + * Caller: library/mbedtls_md.c + * library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * library/x509write_crt.c + * + * This module is required for SSL/TLS and SHA1-signed certificates. + */ +#define MBEDTLS_SHA1_C + +/** + * \def MBEDTLS_SHA256_C + * + * Enable the SHA-224 and SHA-256 cryptographic hash algorithms. + * + * Module: library/mbedtls_sha256.c + * Caller: library/entropy.c + * library/mbedtls_md.c + * library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * + * This module adds support for SHA-224 and SHA-256. + * This module is required for the SSL/TLS 1.2 PRF function. + */ +#define MBEDTLS_SHA256_C + +/** + * \def MBEDTLS_SHA512_C + * + * Enable the SHA-384 and SHA-512 cryptographic hash algorithms. + * + * Module: library/mbedtls_sha512.c + * Caller: library/entropy.c + * library/mbedtls_md.c + * library/ssl_cli.c + * library/ssl_srv.c + * + * This module adds support for SHA-384 and SHA-512. + */ +#define MBEDTLS_SHA512_C + +/** + * \def MBEDTLS_SSL_CACHE_C + * + * Enable simple SSL cache implementation. + * + * Module: library/ssl_cache.c + * Caller: + * + * Requires: MBEDTLS_SSL_CACHE_C + */ +#define MBEDTLS_SSL_CACHE_C + +/** + * \def MBEDTLS_SSL_COOKIE_C + * + * Enable basic implementation of DTLS cookies for hello verification. + * + * Module: library/ssl_cookie.c + * Caller: + */ +#define MBEDTLS_SSL_COOKIE_C + +/** + * \def MBEDTLS_SSL_TICKET_C + * + * Enable an implementation of TLS server-side callbacks for session tickets. + * + * Module: library/ssl_ticket.c + * Caller: + * + * Requires: MBEDTLS_CIPHER_C + */ +#define MBEDTLS_SSL_TICKET_C + +/** + * \def MBEDTLS_SSL_CLI_C + * + * Enable the SSL/TLS client code. + * + * Module: library/ssl_cli.c + * Caller: + * + * Requires: MBEDTLS_SSL_TLS_C + * + * This module is required for SSL/TLS client support. + */ +#define MBEDTLS_SSL_CLI_C + +/** + * \def MBEDTLS_SSL_SRV_C + * + * Enable the SSL/TLS server code. + * + * Module: library/ssl_srv.c + * Caller: + * + * Requires: MBEDTLS_SSL_TLS_C + * + * This module is required for SSL/TLS server support. + */ +#define MBEDTLS_SSL_SRV_C + +/** + * \def MBEDTLS_SSL_TLS_C + * + * Enable the generic SSL/TLS code. + * + * Module: library/ssl_tls.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * + * Requires: MBEDTLS_CIPHER_C, MBEDTLS_MD_C + * and at least one of the MBEDTLS_SSL_PROTO_XXX defines + * + * This module is required for SSL/TLS. + */ +#define MBEDTLS_SSL_TLS_C + +/** + * \def MBEDTLS_THREADING_C + * + * Enable the threading abstraction layer. + * By default mbed TLS assumes it is used in a non-threaded environment or that + * contexts are not shared between threads. If you do intend to use contexts + * between threads, you will need to enable this layer to prevent race + * conditions. + * + * Module: library/threading.c + * + * This allows different threading implementations (self-implemented or + * provided). + * + * You will have to enable either MBEDTLS_THREADING_ALT or + * MBEDTLS_THREADING_PTHREAD. + * + * Enable this layer to allow use of mutexes within mbed TLS + */ +//#define MBEDTLS_THREADING_C + +/** + * \def MBEDTLS_TIMING_C + * + * Enable the portable timing interface. + * + * Module: library/timing.c + * Caller: library/havege.c + * + * This module is used by the HAVEGE random number generator. + */ +//#define MBEDTLS_TIMING_C + +/** + * \def MBEDTLS_VERSION_C + * + * Enable run-time version information. + * + * Module: library/version.c + * + * This module provides run-time version information. + */ +#define MBEDTLS_VERSION_C + +/** + * \def MBEDTLS_X509_USE_C + * + * Enable X.509 core for using certificates. + * + * Module: library/x509.c + * Caller: library/mbedtls_x509_crl.c + * library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c + * + * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_BIGNUM_C, MBEDTLS_OID_C, + * MBEDTLS_PK_PARSE_C + * + * This module is required for the X.509 parsing modules. + */ +#define MBEDTLS_X509_USE_C + +/** + * \def MBEDTLS_X509_CRT_PARSE_C + * + * Enable X.509 certificate parsing. + * + * Module: library/mbedtls_x509_crt.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * + * Requires: MBEDTLS_X509_USE_C + * + * This module is required for X.509 certificate parsing. + */ +#define MBEDTLS_X509_CRT_PARSE_C + +/** + * \def MBEDTLS_X509_CRL_PARSE_C + * + * Enable X.509 CRL parsing. + * + * Module: library/mbedtls_x509_crl.c + * Caller: library/mbedtls_x509_crt.c + * + * Requires: MBEDTLS_X509_USE_C + * + * This module is required for X.509 CRL parsing. + */ +#define MBEDTLS_X509_CRL_PARSE_C + +/** + * \def MBEDTLS_X509_CSR_PARSE_C + * + * Enable X.509 Certificate Signing Request (CSR) parsing. + * + * Module: library/mbedtls_x509_csr.c + * Caller: library/x509_crt_write.c + * + * Requires: MBEDTLS_X509_USE_C + * + * This module is used for reading X.509 certificate request. + */ +#define MBEDTLS_X509_CSR_PARSE_C + +/** + * \def MBEDTLS_X509_CREATE_C + * + * Enable X.509 core for creating certificates. + * + * Module: library/x509_create.c + * + * Requires: MBEDTLS_BIGNUM_C, MBEDTLS_OID_C, MBEDTLS_PK_WRITE_C + * + * This module is the basis for creating X.509 certificates and CSRs. + */ +#define MBEDTLS_X509_CREATE_C + +/** + * \def MBEDTLS_X509_CRT_WRITE_C + * + * Enable creating X.509 certificates. + * + * Module: library/x509_crt_write.c + * + * Requires: MBEDTLS_X509_CREATE_C + * + * This module is required for X.509 certificate creation. + */ +#define MBEDTLS_X509_CRT_WRITE_C + +/** + * \def MBEDTLS_X509_CSR_WRITE_C + * + * Enable creating X.509 Certificate Signing Requests (CSR). + * + * Module: library/x509_csr_write.c + * + * Requires: MBEDTLS_X509_CREATE_C + * + * This module is required for X.509 certificate request writing. + */ +#define MBEDTLS_X509_CSR_WRITE_C + +/** + * \def MBEDTLS_XTEA_C + * + * Enable the XTEA block cipher. + * + * Module: library/xtea.c + * Caller: + */ +#define MBEDTLS_XTEA_C + +/* \} name SECTION: mbed TLS modules */ + +/** + * \name SECTION: Module configuration options + * + * This section allows for the setting of module specific sizes and + * configuration options. The default values are already present in the + * relevant header files and should suffice for the regular use cases. + * + * Our advice is to enable options and change their values here + * only if you have a good reason and know the consequences. + * + * Please check the respective header file for documentation on these + * parameters (to prevent duplicate documentation). + * \{ + */ + +/* MPI / BIGNUM options */ +//#define MBEDTLS_MPI_WINDOW_SIZE 6 /**< Maximum windows size used. */ +//#define MBEDTLS_MPI_MAX_SIZE 1024 /**< Maximum number of bytes for usable MPIs. */ + +/* CTR_DRBG options */ +//#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ +//#define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ +//#define MBEDTLS_CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ +//#define MBEDTLS_CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ +//#define MBEDTLS_CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ + +/* HMAC_DRBG options */ +//#define MBEDTLS_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ +//#define MBEDTLS_HMAC_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ +//#define MBEDTLS_HMAC_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ +//#define MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ + +/* ECP options */ +//#define MBEDTLS_ECP_MAX_BITS 521 /**< Maximum bit size of groups */ +//#define MBEDTLS_ECP_WINDOW_SIZE 6 /**< Maximum window size used */ +//#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1 /**< Enable fixed-point speed-up */ + +/* Entropy options */ +//#define MBEDTLS_ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ +//#define MBEDTLS_ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ + +/* Memory buffer allocator options */ +//#define MBEDTLS_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ + +/* Platform options */ +//#define MBEDTLS_PLATFORM_STD_MEM_HDR /**< Header to include if MBEDTLS_PLATFORM_NO_STD_FUNCTIONS is defined. Don't define if no header is needed. */ +//#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_EXIT exit /**< Default exit to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_PRINTF printf /**< Default printf to use, can be undefined */ +/* Note: your snprintf must correclty zero-terminate the buffer! */ +//#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< Default snprintf to use, can be undefined */ + +/* To Use Function Macros MBEDTLS_PLATFORM_C must be enabled */ +/* MBEDTLS_PLATFORM_XXX_MACRO and MBEDTLS_PLATFORM_XXX_ALT cannot both be defined */ +//#define MBEDTLS_PLATFORM_CALLOC_MACRO calloc /**< Default allocator macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_FREE_MACRO free /**< Default free macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_EXIT_MACRO exit /**< Default exit macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_FPRINTF_MACRO fprintf /**< Default fprintf macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_PRINTF_MACRO printf /**< Default printf macro to use, can be undefined */ +/* Note: your snprintf must correclty zero-terminate the buffer! */ +//#define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf /**< Default snprintf macro to use, can be undefined */ + +/* SSL Cache options */ +//#define MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */ +//#define MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /**< Maximum entries in cache */ + +/* SSL options */ + +#define MBEDTLS_SSL_MAX_CONTENT_LEN CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN /**< Maxium fragment length in bytes, determines the size of each of the two internal I/O buffers */ +//#define MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ +//#define MBEDTLS_PSK_MAX_LEN 32 /**< Max size of TLS pre-shared keys, in bytes (default 256 bits) */ +//#define MBEDTLS_SSL_COOKIE_TIMEOUT 60 /**< Default expiration delay of DTLS cookies, in seconds if HAVE_TIME, or in number of cookies issued */ + +/** + * Complete list of ciphersuites to use, in order of preference. + * + * \warning No dependency checking is done on that field! This option can only + * be used to restrict the set of available ciphersuites. It is your + * responsibility to make sure the needed modules are active. + * + * Use this to save a few hundred bytes of ROM (default ordering of all + * available ciphersuites) and a few to a few hundred bytes of RAM. + * + * The value below is only an example, not the default. + */ +//#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 + +/* X509 options */ +//#define MBEDTLS_X509_MAX_INTERMEDIATE_CA 8 /**< Maximum number of intermediate CAs in a verification chain. */ + +/* \} name SECTION: Module configuration options */ + +#if defined(TARGET_LIKE_MBED) +#include "mbedtls/target_config.h" +#endif + +/* + * Allow user to override any previous default. + * + * Use two macro names for that, as: + * - with yotta the prefix YOTTA_CFG_ is forced + * - without yotta is looks weird to have a YOTTA prefix. + */ +#if defined(YOTTA_CFG_MBEDTLS_USER_CONFIG_FILE) +#include YOTTA_CFG_MBEDTLS_USER_CONFIG_FILE +#elif defined(MBEDTLS_USER_CONFIG_FILE) +#include MBEDTLS_USER_CONFIG_FILE +#endif + +#include "mbedtls/check_config.h" + +#endif /* MBEDTLS_CONFIG_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/gcm.h b/tools/sdk/include/mbedtls/mbedtls/gcm.h new file mode 100644 index 00000000..6743ac9a --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/gcm.h @@ -0,0 +1,220 @@ +/** + * \file gcm.h + * + * \brief Galois/Counter mode for 128-bit block ciphers + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_GCM_H +#define MBEDTLS_GCM_H + +#include "cipher.h" + +#include + +#define MBEDTLS_GCM_ENCRYPT 1 +#define MBEDTLS_GCM_DECRYPT 0 + +#define MBEDTLS_ERR_GCM_AUTH_FAILED -0x0012 /**< Authenticated decryption failed. */ +#define MBEDTLS_ERR_GCM_BAD_INPUT -0x0014 /**< Bad input parameters to function. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief GCM context structure + */ +typedef struct { + mbedtls_cipher_context_t cipher_ctx;/*!< cipher context used */ + uint64_t HL[16]; /*!< Precalculated HTable */ + uint64_t HH[16]; /*!< Precalculated HTable */ + uint64_t len; /*!< Total data length */ + uint64_t add_len; /*!< Total add length */ + unsigned char base_ectr[16];/*!< First ECTR for tag */ + unsigned char y[16]; /*!< Y working value */ + unsigned char buf[16]; /*!< buf working value */ + int mode; /*!< Encrypt or Decrypt */ +} +mbedtls_gcm_context; + +/** + * \brief Initialize GCM context (just makes references valid) + * Makes the context ready for mbedtls_gcm_setkey() or + * mbedtls_gcm_free(). + * + * \param ctx GCM context to initialize + */ +void mbedtls_gcm_init( mbedtls_gcm_context *ctx ); + +/** + * \brief GCM initialization (encryption) + * + * \param ctx GCM context to be initialized + * \param cipher cipher to use (a 128-bit block cipher) + * \param key encryption key + * \param keybits must be 128, 192 or 256 + * + * \return 0 if successful, or a cipher specific error code + */ +int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx, + mbedtls_cipher_id_t cipher, + const unsigned char *key, + unsigned int keybits ); + +/** + * \brief GCM buffer encryption/decryption using a block cipher + * + * \note On encryption, the output buffer can be the same as the input buffer. + * On decryption, the output buffer cannot be the same as input buffer. + * If buffers overlap, the output buffer must trail at least 8 bytes + * behind the input buffer. + * + * \param ctx GCM context + * \param mode MBEDTLS_GCM_ENCRYPT or MBEDTLS_GCM_DECRYPT + * \param length length of the input data + * \param iv initialization vector + * \param iv_len length of IV + * \param add additional data + * \param add_len length of additional data + * \param input buffer holding the input data + * \param output buffer for holding the output data + * \param tag_len length of the tag to generate + * \param tag buffer for holding the tag + * + * \return 0 if successful + */ +int mbedtls_gcm_crypt_and_tag( mbedtls_gcm_context *ctx, + int mode, + size_t length, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len, + const unsigned char *input, + unsigned char *output, + size_t tag_len, + unsigned char *tag ); + +/** + * \brief GCM buffer authenticated decryption using a block cipher + * + * \note On decryption, the output buffer cannot be the same as input buffer. + * If buffers overlap, the output buffer must trail at least 8 bytes + * behind the input buffer. + * + * \param ctx GCM context + * \param length length of the input data + * \param iv initialization vector + * \param iv_len length of IV + * \param add additional data + * \param add_len length of additional data + * \param tag buffer holding the tag + * \param tag_len length of the tag + * \param input buffer holding the input data + * \param output buffer for holding the output data + * + * \return 0 if successful and authenticated, + * MBEDTLS_ERR_GCM_AUTH_FAILED if tag does not match + */ +int mbedtls_gcm_auth_decrypt( mbedtls_gcm_context *ctx, + size_t length, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len, + const unsigned char *tag, + size_t tag_len, + const unsigned char *input, + unsigned char *output ); + +/** + * \brief Generic GCM stream start function + * + * \param ctx GCM context + * \param mode MBEDTLS_GCM_ENCRYPT or MBEDTLS_GCM_DECRYPT + * \param iv initialization vector + * \param iv_len length of IV + * \param add additional data (or NULL if length is 0) + * \param add_len length of additional data + * + * \return 0 if successful + */ +int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, + int mode, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len ); + +/** + * \brief Generic GCM update function. Encrypts/decrypts using the + * given GCM context. Expects input to be a multiple of 16 + * bytes! Only the last call before mbedtls_gcm_finish() can be less + * than 16 bytes! + * + * \note On decryption, the output buffer cannot be the same as input buffer. + * If buffers overlap, the output buffer must trail at least 8 bytes + * behind the input buffer. + * + * \param ctx GCM context + * \param length length of the input data + * \param input buffer holding the input data + * \param output buffer for holding the output data + * + * \return 0 if successful or MBEDTLS_ERR_GCM_BAD_INPUT + */ +int mbedtls_gcm_update( mbedtls_gcm_context *ctx, + size_t length, + const unsigned char *input, + unsigned char *output ); + +/** + * \brief Generic GCM finalisation function. Wraps up the GCM stream + * and generates the tag. The tag can have a maximum length of + * 16 bytes. + * + * \param ctx GCM context + * \param tag buffer for holding the tag (may be NULL if tag_len is 0) + * \param tag_len length of the tag to generate + * + * \return 0 if successful or MBEDTLS_ERR_GCM_BAD_INPUT + */ +int mbedtls_gcm_finish( mbedtls_gcm_context *ctx, + unsigned char *tag, + size_t tag_len ); + +/** + * \brief Free a GCM context and underlying cipher sub-context + * + * \param ctx GCM context to free + */ +void mbedtls_gcm_free( mbedtls_gcm_context *ctx ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_gcm_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* gcm.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/havege.h b/tools/sdk/include/mbedtls/mbedtls/havege.h new file mode 100644 index 00000000..dac5d311 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/havege.h @@ -0,0 +1,74 @@ +/** + * \file havege.h + * + * \brief HAVEGE: HArdware Volatile Entropy Gathering and Expansion + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_HAVEGE_H +#define MBEDTLS_HAVEGE_H + +#include + +#define MBEDTLS_HAVEGE_COLLECT_SIZE 1024 + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief HAVEGE state structure + */ +typedef struct +{ + int PT1, PT2, offset[2]; + int pool[MBEDTLS_HAVEGE_COLLECT_SIZE]; + int WALK[8192]; +} +mbedtls_havege_state; + +/** + * \brief HAVEGE initialization + * + * \param hs HAVEGE state to be initialized + */ +void mbedtls_havege_init( mbedtls_havege_state *hs ); + +/** + * \brief Clear HAVEGE state + * + * \param hs HAVEGE state to be cleared + */ +void mbedtls_havege_free( mbedtls_havege_state *hs ); + +/** + * \brief HAVEGE rand function + * + * \param p_rng A HAVEGE state + * \param output Buffer to fill + * \param len Length of buffer + * + * \return 0 + */ +int mbedtls_havege_random( void *p_rng, unsigned char *output, size_t len ); + +#ifdef __cplusplus +} +#endif + +#endif /* havege.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/hmac_drbg.h b/tools/sdk/include/mbedtls/mbedtls/hmac_drbg.h new file mode 100644 index 00000000..e0105580 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/hmac_drbg.h @@ -0,0 +1,299 @@ +/** + * \file hmac_drbg.h + * + * \brief HMAC_DRBG (NIST SP 800-90A) + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_HMAC_DRBG_H +#define MBEDTLS_HMAC_DRBG_H + +#include "md.h" + +#if defined(MBEDTLS_THREADING_C) +#include "mbedtls/threading.h" +#endif + +/* + * Error codes + */ +#define MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG -0x0003 /**< Too many random requested in single call. */ +#define MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG -0x0005 /**< Input too large (Entropy + additional). */ +#define MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR -0x0007 /**< Read/write error in file. */ +#define MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED -0x0009 /**< The entropy source failed. */ + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them on the compiler command line. + * \{ + */ + +#if !defined(MBEDTLS_HMAC_DRBG_RESEED_INTERVAL) +#define MBEDTLS_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ +#endif + +#if !defined(MBEDTLS_HMAC_DRBG_MAX_INPUT) +#define MBEDTLS_HMAC_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ +#endif + +#if !defined(MBEDTLS_HMAC_DRBG_MAX_REQUEST) +#define MBEDTLS_HMAC_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ +#endif + +#if !defined(MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT) +#define MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ +#endif + +/* \} name SECTION: Module settings */ + +#define MBEDTLS_HMAC_DRBG_PR_OFF 0 /**< No prediction resistance */ +#define MBEDTLS_HMAC_DRBG_PR_ON 1 /**< Prediction resistance enabled */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * HMAC_DRBG context. + */ +typedef struct +{ + /* Working state: the key K is not stored explicitely, + * but is implied by the HMAC context */ + mbedtls_md_context_t md_ctx; /*!< HMAC context (inc. K) */ + unsigned char V[MBEDTLS_MD_MAX_SIZE]; /*!< V in the spec */ + int reseed_counter; /*!< reseed counter */ + + /* Administrative state */ + size_t entropy_len; /*!< entropy bytes grabbed on each (re)seed */ + int prediction_resistance; /*!< enable prediction resistance (Automatic + reseed before every random generation) */ + int reseed_interval; /*!< reseed interval */ + + /* Callbacks */ + int (*f_entropy)(void *, unsigned char *, size_t); /*!< entropy function */ + void *p_entropy; /*!< context for the entropy function */ + +#if defined(MBEDTLS_THREADING_C) + mbedtls_threading_mutex_t mutex; +#endif +} mbedtls_hmac_drbg_context; + +/** + * \brief HMAC_DRBG context initialization + * Makes the context ready for mbedtls_hmac_drbg_seed(), + * mbedtls_hmac_drbg_seed_buf() or + * mbedtls_hmac_drbg_free(). + * + * \param ctx HMAC_DRBG context to be initialized + */ +void mbedtls_hmac_drbg_init( mbedtls_hmac_drbg_context *ctx ); + +/** + * \brief HMAC_DRBG initial seeding + * Seed and setup entropy source for future reseeds. + * + * \param ctx HMAC_DRBG context to be seeded + * \param md_info MD algorithm to use for HMAC_DRBG + * \param f_entropy Entropy callback (p_entropy, buffer to fill, buffer + * length) + * \param p_entropy Entropy context + * \param custom Personalization data (Device specific identifiers) + * (Can be NULL) + * \param len Length of personalization data + * + * \note The "security strength" as defined by NIST is set to: + * 128 bits if md_alg is SHA-1, + * 192 bits if md_alg is SHA-224, + * 256 bits if md_alg is SHA-256 or higher. + * Note that SHA-256 is just as efficient as SHA-224. + * + * \return 0 if successful, or + * MBEDTLS_ERR_MD_BAD_INPUT_DATA, or + * MBEDTLS_ERR_MD_ALLOC_FAILED, or + * MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED. + */ +int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, + const mbedtls_md_info_t * md_info, + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len ); + +/** + * \brief Initilisation of simpified HMAC_DRBG (never reseeds). + * (For use with deterministic ECDSA.) + * + * \param ctx HMAC_DRBG context to be initialised + * \param md_info MD algorithm to use for HMAC_DRBG + * \param data Concatenation of entropy string and additional data + * \param data_len Length of data in bytes + * + * \return 0 if successful, or + * MBEDTLS_ERR_MD_BAD_INPUT_DATA, or + * MBEDTLS_ERR_MD_ALLOC_FAILED. + */ +int mbedtls_hmac_drbg_seed_buf( mbedtls_hmac_drbg_context *ctx, + const mbedtls_md_info_t * md_info, + const unsigned char *data, size_t data_len ); + +/** + * \brief Enable / disable prediction resistance (Default: Off) + * + * Note: If enabled, entropy is used for ctx->entropy_len before each call! + * Only use this if you have ample supply of good entropy! + * + * \param ctx HMAC_DRBG context + * \param resistance MBEDTLS_HMAC_DRBG_PR_ON or MBEDTLS_HMAC_DRBG_PR_OFF + */ +void mbedtls_hmac_drbg_set_prediction_resistance( mbedtls_hmac_drbg_context *ctx, + int resistance ); + +/** + * \brief Set the amount of entropy grabbed on each reseed + * (Default: given by the security strength, which + * depends on the hash used, see \c mbedtls_hmac_drbg_init() ) + * + * \param ctx HMAC_DRBG context + * \param len Amount of entropy to grab, in bytes + */ +void mbedtls_hmac_drbg_set_entropy_len( mbedtls_hmac_drbg_context *ctx, + size_t len ); + +/** + * \brief Set the reseed interval + * (Default: MBEDTLS_HMAC_DRBG_RESEED_INTERVAL) + * + * \param ctx HMAC_DRBG context + * \param interval Reseed interval + */ +void mbedtls_hmac_drbg_set_reseed_interval( mbedtls_hmac_drbg_context *ctx, + int interval ); + +/** + * \brief HMAC_DRBG update state + * + * \param ctx HMAC_DRBG context + * \param additional Additional data to update state with, or NULL + * \param add_len Length of additional data, or 0 + * + * \note Additional data is optional, pass NULL and 0 as second + * third argument if no additional data is being used. + */ +void mbedtls_hmac_drbg_update( mbedtls_hmac_drbg_context *ctx, + const unsigned char *additional, size_t add_len ); + +/** + * \brief HMAC_DRBG reseeding (extracts data from entropy source) + * + * \param ctx HMAC_DRBG context + * \param additional Additional data to add to state (Can be NULL) + * \param len Length of additional data + * + * \return 0 if successful, or + * MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED + */ +int mbedtls_hmac_drbg_reseed( mbedtls_hmac_drbg_context *ctx, + const unsigned char *additional, size_t len ); + +/** + * \brief HMAC_DRBG generate random with additional update input + * + * Note: Automatically reseeds if reseed_counter is reached or PR is enabled. + * + * \param p_rng HMAC_DRBG context + * \param output Buffer to fill + * \param output_len Length of the buffer + * \param additional Additional data to update with (can be NULL) + * \param add_len Length of additional data (can be 0) + * + * \return 0 if successful, or + * MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED, or + * MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG, or + * MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG. + */ +int mbedtls_hmac_drbg_random_with_add( void *p_rng, + unsigned char *output, size_t output_len, + const unsigned char *additional, + size_t add_len ); + +/** + * \brief HMAC_DRBG generate random + * + * Note: Automatically reseeds if reseed_counter is reached or PR is enabled. + * + * \param p_rng HMAC_DRBG context + * \param output Buffer to fill + * \param out_len Length of the buffer + * + * \return 0 if successful, or + * MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED, or + * MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG + */ +int mbedtls_hmac_drbg_random( void *p_rng, unsigned char *output, size_t out_len ); + +/** + * \brief Free an HMAC_DRBG context + * + * \param ctx HMAC_DRBG context to free. + */ +void mbedtls_hmac_drbg_free( mbedtls_hmac_drbg_context *ctx ); + +#if defined(MBEDTLS_FS_IO) +/** + * \brief Write a seed file + * + * \param ctx HMAC_DRBG context + * \param path Name of the file + * + * \return 0 if successful, 1 on file error, or + * MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED + */ +int mbedtls_hmac_drbg_write_seed_file( mbedtls_hmac_drbg_context *ctx, const char *path ); + +/** + * \brief Read and update a seed file. Seed is added to this + * instance + * + * \param ctx HMAC_DRBG context + * \param path Name of the file + * + * \return 0 if successful, 1 on file error, + * MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED or + * MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG + */ +int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *ctx, const char *path ); +#endif /* MBEDTLS_FS_IO */ + + +#if defined(MBEDTLS_SELF_TEST) +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_hmac_drbg_self_test( int verbose ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* hmac_drbg.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/md.h b/tools/sdk/include/mbedtls/mbedtls/md.h new file mode 100644 index 00000000..b9023553 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/md.h @@ -0,0 +1,353 @@ +/** + * \file md.h + * + * \brief Generic message digest wrapper + * + * \author Adriaan de Jong + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_MD_H +#define MBEDTLS_MD_H + +#include + +#define MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE -0x5080 /**< The selected feature is not available. */ +#define MBEDTLS_ERR_MD_BAD_INPUT_DATA -0x5100 /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_MD_ALLOC_FAILED -0x5180 /**< Failed to allocate memory. */ +#define MBEDTLS_ERR_MD_FILE_IO_ERROR -0x5200 /**< Opening or reading of file failed. */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + MBEDTLS_MD_NONE=0, + MBEDTLS_MD_MD2, + MBEDTLS_MD_MD4, + MBEDTLS_MD_MD5, + MBEDTLS_MD_SHA1, + MBEDTLS_MD_SHA224, + MBEDTLS_MD_SHA256, + MBEDTLS_MD_SHA384, + MBEDTLS_MD_SHA512, + MBEDTLS_MD_RIPEMD160, +} mbedtls_md_type_t; + +#if defined(MBEDTLS_SHA512_C) +#define MBEDTLS_MD_MAX_SIZE 64 /* longest known is SHA512 */ +#else +#define MBEDTLS_MD_MAX_SIZE 32 /* longest known is SHA256 or less */ +#endif + +/** + * Opaque struct defined in md_internal.h + */ +typedef struct mbedtls_md_info_t mbedtls_md_info_t; + +/** + * Generic message digest context. + */ +typedef struct { + /** Information about the associated message digest */ + const mbedtls_md_info_t *md_info; + + /** Digest-specific context */ + void *md_ctx; + + /** HMAC part of the context */ + void *hmac_ctx; +} mbedtls_md_context_t; + +/** + * \brief Returns the list of digests supported by the generic digest module. + * + * \return a statically allocated array of digests, the last entry + * is 0. + */ +const int *mbedtls_md_list( void ); + +/** + * \brief Returns the message digest information associated with the + * given digest name. + * + * \param md_name Name of the digest to search for. + * + * \return The message digest information associated with md_name or + * NULL if not found. + */ +const mbedtls_md_info_t *mbedtls_md_info_from_string( const char *md_name ); + +/** + * \brief Returns the message digest information associated with the + * given digest type. + * + * \param md_type type of digest to search for. + * + * \return The message digest information associated with md_type or + * NULL if not found. + */ +const mbedtls_md_info_t *mbedtls_md_info_from_type( mbedtls_md_type_t md_type ); + +/** + * \brief Initialize a md_context (as NONE) + * This should always be called first. + * Prepares the context for mbedtls_md_setup() or mbedtls_md_free(). + */ +void mbedtls_md_init( mbedtls_md_context_t *ctx ); + +/** + * \brief Free and clear the internal structures of ctx. + * Can be called at any time after mbedtls_md_init(). + * Mandatory once mbedtls_md_setup() has been called. + */ +void mbedtls_md_free( mbedtls_md_context_t *ctx ); + +#if ! defined(MBEDTLS_DEPRECATED_REMOVED) +#if defined(MBEDTLS_DEPRECATED_WARNING) +#define MBEDTLS_DEPRECATED __attribute__((deprecated)) +#else +#define MBEDTLS_DEPRECATED +#endif +/** + * \brief Select MD to use and allocate internal structures. + * Should be called after mbedtls_md_init() or mbedtls_md_free(). + * Makes it necessary to call mbedtls_md_free() later. + * + * \deprecated Superseded by mbedtls_md_setup() in 2.0.0 + * + * \param ctx Context to set up. + * \param md_info Message digest to use. + * + * \returns \c 0 on success, + * \c MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter failure, + * \c MBEDTLS_ERR_MD_ALLOC_FAILED memory allocation failure. + */ +int mbedtls_md_init_ctx( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info ) MBEDTLS_DEPRECATED; +#undef MBEDTLS_DEPRECATED +#endif /* MBEDTLS_DEPRECATED_REMOVED */ + +/** + * \brief Select MD to use and allocate internal structures. + * Should be called after mbedtls_md_init() or mbedtls_md_free(). + * Makes it necessary to call mbedtls_md_free() later. + * + * \param ctx Context to set up. + * \param md_info Message digest to use. + * \param hmac 0 to save some memory if HMAC will not be used, + * non-zero is HMAC is going to be used with this context. + * + * \returns \c 0 on success, + * \c MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter failure, + * \c MBEDTLS_ERR_MD_ALLOC_FAILED memory allocation failure. + */ +int mbedtls_md_setup( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info, int hmac ); + +/** + * \brief Clone the state of an MD context + * + * \note The two contexts must have been setup to the same type + * (cloning from SHA-256 to SHA-512 make no sense). + * + * \warning Only clones the MD state, not the HMAC state! (for now) + * + * \param dst The destination context + * \param src The context to be cloned + * + * \return \c 0 on success, + * \c MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter failure. + */ +int mbedtls_md_clone( mbedtls_md_context_t *dst, + const mbedtls_md_context_t *src ); + +/** + * \brief Returns the size of the message digest output. + * + * \param md_info message digest info + * + * \return size of the message digest output in bytes. + */ +unsigned char mbedtls_md_get_size( const mbedtls_md_info_t *md_info ); + +/** + * \brief Returns the type of the message digest output. + * + * \param md_info message digest info + * + * \return type of the message digest output. + */ +mbedtls_md_type_t mbedtls_md_get_type( const mbedtls_md_info_t *md_info ); + +/** + * \brief Returns the name of the message digest output. + * + * \param md_info message digest info + * + * \return name of the message digest output. + */ +const char *mbedtls_md_get_name( const mbedtls_md_info_t *md_info ); + +/** + * \brief Prepare the context to digest a new message. + * Generally called after mbedtls_md_setup() or mbedtls_md_finish(). + * Followed by mbedtls_md_update(). + * + * \param ctx generic message digest context. + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_md_starts( mbedtls_md_context_t *ctx ); + +/** + * \brief Generic message digest process buffer + * Called between mbedtls_md_starts() and mbedtls_md_finish(). + * May be called repeatedly. + * + * \param ctx Generic message digest context + * \param input buffer holding the datal + * \param ilen length of the input data + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen ); + +/** + * \brief Generic message digest final digest + * Called after mbedtls_md_update(). + * Usually followed by mbedtls_md_free() or mbedtls_md_starts(). + * + * \param ctx Generic message digest context + * \param output Generic message digest checksum result + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output ); + +/** + * \brief Output = message_digest( input buffer ) + * + * \param md_info message digest info + * \param input buffer holding the data + * \param ilen length of the input data + * \param output Generic message digest checksum result + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, size_t ilen, + unsigned char *output ); + +#if defined(MBEDTLS_FS_IO) +/** + * \brief Output = message_digest( file contents ) + * + * \param md_info message digest info + * \param path input file name + * \param output generic message digest checksum result + * + * \return 0 if successful, + * MBEDTLS_ERR_MD_FILE_IO_ERROR if file input failed, + * MBEDTLS_ERR_MD_BAD_INPUT_DATA if md_info was NULL. + */ +int mbedtls_md_file( const mbedtls_md_info_t *md_info, const char *path, + unsigned char *output ); +#endif /* MBEDTLS_FS_IO */ + +/** + * \brief Set HMAC key and prepare to authenticate a new message. + * Usually called after mbedtls_md_setup() or mbedtls_md_hmac_finish(). + * + * \param ctx HMAC context + * \param key HMAC secret key + * \param keylen length of the HMAC key in bytes + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, + size_t keylen ); + +/** + * \brief Generic HMAC process buffer. + * Called between mbedtls_md_hmac_starts() or mbedtls_md_hmac_reset() + * and mbedtls_md_hmac_finish(). + * May be called repeatedly. + * + * \param ctx HMAC context + * \param input buffer holding the data + * \param ilen length of the input data + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *input, + size_t ilen ); + +/** + * \brief Output HMAC. + * Called after mbedtls_md_hmac_update(). + * Usually followed my mbedtls_md_hmac_reset(), mbedtls_md_hmac_starts(), + * or mbedtls_md_free(). + * + * \param ctx HMAC context + * \param output Generic HMAC checksum result + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output); + +/** + * \brief Prepare to authenticate a new message with the same key. + * Called after mbedtls_md_hmac_finish() and before mbedtls_md_hmac_update(). + * + * \param ctx HMAC context to be reset + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_md_hmac_reset( mbedtls_md_context_t *ctx ); + +/** + * \brief Output = Generic_HMAC( hmac key, input buffer ) + * + * \param md_info message digest info + * \param key HMAC secret key + * \param keylen length of the HMAC key in bytes + * \param input buffer holding the data + * \param ilen length of the input data + * \param output Generic HMAC-result + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key, size_t keylen, + const unsigned char *input, size_t ilen, + unsigned char *output ); + +/* Internal use */ +int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_MD_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/md2.h b/tools/sdk/include/mbedtls/mbedtls/md2.h new file mode 100644 index 00000000..0f93fbf4 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/md2.h @@ -0,0 +1,136 @@ +/** + * \file md2.h + * + * \brief MD2 message digest algorithm (hash function) + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_MD2_H +#define MBEDTLS_MD2_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include + +#if !defined(MBEDTLS_MD2_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief MD2 context structure + */ +typedef struct +{ + unsigned char cksum[16]; /*!< checksum of the data block */ + unsigned char state[48]; /*!< intermediate digest state */ + unsigned char buffer[16]; /*!< data block being processed */ + size_t left; /*!< amount of data in buffer */ +} +mbedtls_md2_context; + +/** + * \brief Initialize MD2 context + * + * \param ctx MD2 context to be initialized + */ +void mbedtls_md2_init( mbedtls_md2_context *ctx ); + +/** + * \brief Clear MD2 context + * + * \param ctx MD2 context to be cleared + */ +void mbedtls_md2_free( mbedtls_md2_context *ctx ); + +/** + * \brief Clone (the state of) an MD2 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_md2_clone( mbedtls_md2_context *dst, + const mbedtls_md2_context *src ); + +/** + * \brief MD2 context setup + * + * \param ctx context to be initialized + */ +void mbedtls_md2_starts( mbedtls_md2_context *ctx ); + +/** + * \brief MD2 process buffer + * + * \param ctx MD2 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_md2_update( mbedtls_md2_context *ctx, const unsigned char *input, size_t ilen ); + +/** + * \brief MD2 final digest + * + * \param ctx MD2 context + * \param output MD2 checksum result + */ +void mbedtls_md2_finish( mbedtls_md2_context *ctx, unsigned char output[16] ); + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_MD2_ALT */ +#include "md2_alt.h" +#endif /* MBEDTLS_MD2_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Output = MD2( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output MD2 checksum result + */ +void mbedtls_md2( const unsigned char *input, size_t ilen, unsigned char output[16] ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_md2_self_test( int verbose ); + +/* Internal use */ +void mbedtls_md2_process( mbedtls_md2_context *ctx ); + +#ifdef __cplusplus +} +#endif + +#endif /* mbedtls_md2.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/md4.h b/tools/sdk/include/mbedtls/mbedtls/md4.h new file mode 100644 index 00000000..45214d41 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/md4.h @@ -0,0 +1,136 @@ +/** + * \file md4.h + * + * \brief MD4 message digest algorithm (hash function) + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_MD4_H +#define MBEDTLS_MD4_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#if !defined(MBEDTLS_MD4_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief MD4 context structure + */ +typedef struct +{ + uint32_t total[2]; /*!< number of bytes processed */ + uint32_t state[4]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ +} +mbedtls_md4_context; + +/** + * \brief Initialize MD4 context + * + * \param ctx MD4 context to be initialized + */ +void mbedtls_md4_init( mbedtls_md4_context *ctx ); + +/** + * \brief Clear MD4 context + * + * \param ctx MD4 context to be cleared + */ +void mbedtls_md4_free( mbedtls_md4_context *ctx ); + +/** + * \brief Clone (the state of) an MD4 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_md4_clone( mbedtls_md4_context *dst, + const mbedtls_md4_context *src ); + +/** + * \brief MD4 context setup + * + * \param ctx context to be initialized + */ +void mbedtls_md4_starts( mbedtls_md4_context *ctx ); + +/** + * \brief MD4 process buffer + * + * \param ctx MD4 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_md4_update( mbedtls_md4_context *ctx, const unsigned char *input, size_t ilen ); + +/** + * \brief MD4 final digest + * + * \param ctx MD4 context + * \param output MD4 checksum result + */ +void mbedtls_md4_finish( mbedtls_md4_context *ctx, unsigned char output[16] ); + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_MD4_ALT */ +#include "md4_alt.h" +#endif /* MBEDTLS_MD4_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Output = MD4( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output MD4 checksum result + */ +void mbedtls_md4( const unsigned char *input, size_t ilen, unsigned char output[16] ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_md4_self_test( int verbose ); + +/* Internal use */ +void mbedtls_md4_process( mbedtls_md4_context *ctx, const unsigned char data[64] ); + +#ifdef __cplusplus +} +#endif + +#endif /* mbedtls_md4.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/md5.h b/tools/sdk/include/mbedtls/mbedtls/md5.h new file mode 100644 index 00000000..5a64061a --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/md5.h @@ -0,0 +1,136 @@ +/** + * \file md5.h + * + * \brief MD5 message digest algorithm (hash function) + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_MD5_H +#define MBEDTLS_MD5_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#if !defined(MBEDTLS_MD5_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief MD5 context structure + */ +typedef struct +{ + uint32_t total[2]; /*!< number of bytes processed */ + uint32_t state[4]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ +} +mbedtls_md5_context; + +/** + * \brief Initialize MD5 context + * + * \param ctx MD5 context to be initialized + */ +void mbedtls_md5_init( mbedtls_md5_context *ctx ); + +/** + * \brief Clear MD5 context + * + * \param ctx MD5 context to be cleared + */ +void mbedtls_md5_free( mbedtls_md5_context *ctx ); + +/** + * \brief Clone (the state of) an MD5 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_md5_clone( mbedtls_md5_context *dst, + const mbedtls_md5_context *src ); + +/** + * \brief MD5 context setup + * + * \param ctx context to be initialized + */ +void mbedtls_md5_starts( mbedtls_md5_context *ctx ); + +/** + * \brief MD5 process buffer + * + * \param ctx MD5 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_md5_update( mbedtls_md5_context *ctx, const unsigned char *input, size_t ilen ); + +/** + * \brief MD5 final digest + * + * \param ctx MD5 context + * \param output MD5 checksum result + */ +void mbedtls_md5_finish( mbedtls_md5_context *ctx, unsigned char output[16] ); + +/* Internal use */ +void mbedtls_md5_process( mbedtls_md5_context *ctx, const unsigned char data[64] ); + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_MD5_ALT */ +#include "md5_alt.h" +#endif /* MBEDTLS_MD5_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Output = MD5( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output MD5 checksum result + */ +void mbedtls_md5( const unsigned char *input, size_t ilen, unsigned char output[16] ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_md5_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* mbedtls_md5.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/md_internal.h b/tools/sdk/include/mbedtls/mbedtls/md_internal.h new file mode 100644 index 00000000..e2441bbc --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/md_internal.h @@ -0,0 +1,114 @@ +/** + * \file md_internal.h + * + * \brief Message digest wrappers. + * + * \warning This in an internal header. Do not include directly. + * + * \author Adriaan de Jong + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_MD_WRAP_H +#define MBEDTLS_MD_WRAP_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "md.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Message digest information. + * Allows message digest functions to be called in a generic way. + */ +struct mbedtls_md_info_t +{ + /** Digest identifier */ + mbedtls_md_type_t type; + + /** Name of the message digest */ + const char * name; + + /** Output length of the digest function in bytes */ + int size; + + /** Block length of the digest function in bytes */ + int block_size; + + /** Digest initialisation function */ + void (*starts_func)( void *ctx ); + + /** Digest update function */ + void (*update_func)( void *ctx, const unsigned char *input, size_t ilen ); + + /** Digest finalisation function */ + void (*finish_func)( void *ctx, unsigned char *output ); + + /** Generic digest function */ + void (*digest_func)( const unsigned char *input, size_t ilen, + unsigned char *output ); + + /** Allocate a new context */ + void * (*ctx_alloc_func)( void ); + + /** Free the given context */ + void (*ctx_free_func)( void *ctx ); + + /** Clone state from a context */ + void (*clone_func)( void *dst, const void *src ); + + /** Internal use only */ + void (*process_func)( void *ctx, const unsigned char *input ); +}; + +#if defined(MBEDTLS_MD2_C) +extern const mbedtls_md_info_t mbedtls_md2_info; +#endif +#if defined(MBEDTLS_MD4_C) +extern const mbedtls_md_info_t mbedtls_md4_info; +#endif +#if defined(MBEDTLS_MD5_C) +extern const mbedtls_md_info_t mbedtls_md5_info; +#endif +#if defined(MBEDTLS_RIPEMD160_C) +extern const mbedtls_md_info_t mbedtls_ripemd160_info; +#endif +#if defined(MBEDTLS_SHA1_C) +extern const mbedtls_md_info_t mbedtls_sha1_info; +#endif +#if defined(MBEDTLS_SHA256_C) +extern const mbedtls_md_info_t mbedtls_sha224_info; +extern const mbedtls_md_info_t mbedtls_sha256_info; +#endif +#if defined(MBEDTLS_SHA512_C) +extern const mbedtls_md_info_t mbedtls_sha384_info; +extern const mbedtls_md_info_t mbedtls_sha512_info; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_MD_WRAP_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/memory_buffer_alloc.h b/tools/sdk/include/mbedtls/mbedtls/memory_buffer_alloc.h new file mode 100644 index 00000000..d5df316f --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/memory_buffer_alloc.h @@ -0,0 +1,150 @@ +/** + * \file memory_buffer_alloc.h + * + * \brief Buffer-based memory allocator + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_MEMORY_BUFFER_ALLOC_H +#define MBEDTLS_MEMORY_BUFFER_ALLOC_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them on the compiler command line. + * \{ + */ + +#if !defined(MBEDTLS_MEMORY_ALIGN_MULTIPLE) +#define MBEDTLS_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ +#endif + +/* \} name SECTION: Module settings */ + +#define MBEDTLS_MEMORY_VERIFY_NONE 0 +#define MBEDTLS_MEMORY_VERIFY_ALLOC (1 << 0) +#define MBEDTLS_MEMORY_VERIFY_FREE (1 << 1) +#define MBEDTLS_MEMORY_VERIFY_ALWAYS (MBEDTLS_MEMORY_VERIFY_ALLOC | MBEDTLS_MEMORY_VERIFY_FREE) + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Initialize use of stack-based memory allocator. + * The stack-based allocator does memory management inside the + * presented buffer and does not call calloc() and free(). + * It sets the global mbedtls_calloc() and mbedtls_free() pointers + * to its own functions. + * (Provided mbedtls_calloc() and mbedtls_free() are thread-safe if + * MBEDTLS_THREADING_C is defined) + * + * \note This code is not optimized and provides a straight-forward + * implementation of a stack-based memory allocator. + * + * \param buf buffer to use as heap + * \param len size of the buffer + */ +void mbedtls_memory_buffer_alloc_init( unsigned char *buf, size_t len ); + +/** + * \brief Free the mutex for thread-safety and clear remaining memory + */ +void mbedtls_memory_buffer_alloc_free( void ); + +/** + * \brief Determine when the allocator should automatically verify the state + * of the entire chain of headers / meta-data. + * (Default: MBEDTLS_MEMORY_VERIFY_NONE) + * + * \param verify One of MBEDTLS_MEMORY_VERIFY_NONE, MBEDTLS_MEMORY_VERIFY_ALLOC, + * MBEDTLS_MEMORY_VERIFY_FREE or MBEDTLS_MEMORY_VERIFY_ALWAYS + */ +void mbedtls_memory_buffer_set_verify( int verify ); + +#if defined(MBEDTLS_MEMORY_DEBUG) +/** + * \brief Print out the status of the allocated memory (primarily for use + * after a program should have de-allocated all memory) + * Prints out a list of 'still allocated' blocks and their stack + * trace if MBEDTLS_MEMORY_BACKTRACE is defined. + */ +void mbedtls_memory_buffer_alloc_status( void ); + +/** + * \brief Get the peak heap usage so far + * + * \param max_used Peak number of bytes in use or committed. This + * includes bytes in allocated blocks too small to split + * into smaller blocks but larger than the requested size. + * \param max_blocks Peak number of blocks in use, including free and used + */ +void mbedtls_memory_buffer_alloc_max_get( size_t *max_used, size_t *max_blocks ); + +/** + * \brief Reset peak statistics + */ +void mbedtls_memory_buffer_alloc_max_reset( void ); + +/** + * \brief Get the current heap usage + * + * \param cur_used Current number of bytes in use or committed. This + * includes bytes in allocated blocks too small to split + * into smaller blocks but larger than the requested size. + * \param cur_blocks Current number of blocks in use, including free and used + */ +void mbedtls_memory_buffer_alloc_cur_get( size_t *cur_used, size_t *cur_blocks ); +#endif /* MBEDTLS_MEMORY_DEBUG */ + +/** + * \brief Verifies that all headers in the memory buffer are correct + * and contain sane values. Helps debug buffer-overflow errors. + * + * Prints out first failure if MBEDTLS_MEMORY_DEBUG is defined. + * Prints out full header information if MBEDTLS_MEMORY_DEBUG + * is defined. (Includes stack trace information for each block if + * MBEDTLS_MEMORY_BACKTRACE is defined as well). + * + * \return 0 if verified, 1 otherwise + */ +int mbedtls_memory_buffer_alloc_verify( void ); + +#if defined(MBEDTLS_SELF_TEST) +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if a test failed + */ +int mbedtls_memory_buffer_alloc_self_test( int verbose ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* memory_buffer_alloc.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/net.h b/tools/sdk/include/mbedtls/mbedtls/net.h new file mode 100644 index 00000000..8c6534cf --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/net.h @@ -0,0 +1,225 @@ +/** + * \file net.h + * + * \brief Network communication functions + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_NET_H +#define MBEDTLS_NET_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "ssl.h" + +#include +#include + +#define MBEDTLS_ERR_NET_SOCKET_FAILED -0x0042 /**< Failed to open a socket. */ +#define MBEDTLS_ERR_NET_CONNECT_FAILED -0x0044 /**< The connection to the given server / port failed. */ +#define MBEDTLS_ERR_NET_BIND_FAILED -0x0046 /**< Binding of the socket failed. */ +#define MBEDTLS_ERR_NET_LISTEN_FAILED -0x0048 /**< Could not listen on the socket. */ +#define MBEDTLS_ERR_NET_ACCEPT_FAILED -0x004A /**< Could not accept the incoming connection. */ +#define MBEDTLS_ERR_NET_RECV_FAILED -0x004C /**< Reading information from the socket failed. */ +#define MBEDTLS_ERR_NET_SEND_FAILED -0x004E /**< Sending information through the socket failed. */ +#define MBEDTLS_ERR_NET_CONN_RESET -0x0050 /**< Connection was reset by peer. */ +#define MBEDTLS_ERR_NET_UNKNOWN_HOST -0x0052 /**< Failed to get an IP address for the given hostname. */ +#define MBEDTLS_ERR_NET_BUFFER_TOO_SMALL -0x0043 /**< Buffer is too small to hold the data. */ +#define MBEDTLS_ERR_NET_INVALID_CONTEXT -0x0045 /**< The context is invalid, eg because it was free()ed. */ + +#define MBEDTLS_NET_LISTEN_BACKLOG 10 /**< The backlog that listen() should use. */ + +#define MBEDTLS_NET_PROTO_TCP 0 /**< The TCP transport protocol */ +#define MBEDTLS_NET_PROTO_UDP 1 /**< The UDP transport protocol */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Wrapper type for sockets. + * + * Currently backed by just a file descriptor, but might be more in the future + * (eg two file descriptors for combined IPv4 + IPv6 support, or additional + * structures for hand-made UDP demultiplexing). + */ +typedef struct +{ + int fd; /**< The underlying file descriptor */ +} +mbedtls_net_context; + +/** + * \brief Initialize a context + * Just makes the context ready to be used or freed safely. + * + * \param ctx Context to initialize + */ +void mbedtls_net_init( mbedtls_net_context *ctx ); + +/** + * \brief Initiate a connection with host:port in the given protocol + * + * \param ctx Socket to use + * \param host Host to connect to + * \param port Port to connect to + * \param proto Protocol: MBEDTLS_NET_PROTO_TCP or MBEDTLS_NET_PROTO_UDP + * + * \return 0 if successful, or one of: + * MBEDTLS_ERR_NET_SOCKET_FAILED, + * MBEDTLS_ERR_NET_UNKNOWN_HOST, + * MBEDTLS_ERR_NET_CONNECT_FAILED + * + * \note Sets the socket in connected mode even with UDP. + */ +int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char *port, int proto ); + +/** + * \brief Create a receiving socket on bind_ip:port in the chosen + * protocol. If bind_ip == NULL, all interfaces are bound. + * + * \param ctx Socket to use + * \param bind_ip IP to bind to, can be NULL + * \param port Port number to use + * \param proto Protocol: MBEDTLS_NET_PROTO_TCP or MBEDTLS_NET_PROTO_UDP + * + * \return 0 if successful, or one of: + * MBEDTLS_ERR_NET_SOCKET_FAILED, + * MBEDTLS_ERR_NET_BIND_FAILED, + * MBEDTLS_ERR_NET_LISTEN_FAILED + * + * \note Regardless of the protocol, opens the sockets and binds it. + * In addition, make the socket listening if protocol is TCP. + */ +int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char *port, int proto ); + +/** + * \brief Accept a connection from a remote client + * + * \param bind_ctx Relevant socket + * \param client_ctx Will contain the connected client socket + * \param client_ip Will contain the client IP address + * \param buf_size Size of the client_ip buffer + * \param ip_len Will receive the size of the client IP written + * + * \return 0 if successful, or + * MBEDTLS_ERR_NET_ACCEPT_FAILED, or + * MBEDTLS_ERR_NET_BUFFER_TOO_SMALL if buf_size is too small, + * MBEDTLS_ERR_SSL_WANT_READ if bind_fd was set to + * non-blocking and accept() would block. + */ +int mbedtls_net_accept( mbedtls_net_context *bind_ctx, + mbedtls_net_context *client_ctx, + void *client_ip, size_t buf_size, size_t *ip_len ); + +/** + * \brief Set the socket blocking + * + * \param ctx Socket to set + * + * \return 0 if successful, or a non-zero error code + */ +int mbedtls_net_set_block( mbedtls_net_context *ctx ); + +/** + * \brief Set the socket non-blocking + * + * \param ctx Socket to set + * + * \return 0 if successful, or a non-zero error code + */ +int mbedtls_net_set_nonblock( mbedtls_net_context *ctx ); + +/** + * \brief Portable usleep helper + * + * \param usec Amount of microseconds to sleep + * + * \note Real amount of time slept will not be less than + * select()'s timeout granularity (typically, 10ms). + */ +void mbedtls_net_usleep( unsigned long usec ); + +/** + * \brief Read at most 'len' characters. If no error occurs, + * the actual amount read is returned. + * + * \param ctx Socket + * \param buf The buffer to write to + * \param len Maximum length of the buffer + * + * \return the number of bytes received, + * or a non-zero error code; with a non-blocking socket, + * MBEDTLS_ERR_SSL_WANT_READ indicates read() would block. + */ +int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len ); + +/** + * \brief Write at most 'len' characters. If no error occurs, + * the actual amount read is returned. + * + * \param ctx Socket + * \param buf The buffer to read from + * \param len The length of the buffer + * + * \return the number of bytes sent, + * or a non-zero error code; with a non-blocking socket, + * MBEDTLS_ERR_SSL_WANT_WRITE indicates write() would block. + */ +int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ); + +/** + * \brief Read at most 'len' characters, blocking for at most + * 'timeout' seconds. If no error occurs, the actual amount + * read is returned. + * + * \param ctx Socket + * \param buf The buffer to write to + * \param len Maximum length of the buffer + * \param timeout Maximum number of milliseconds to wait for data + * 0 means no timeout (wait forever) + * + * \return the number of bytes received, + * or a non-zero error code: + * MBEDTLS_ERR_SSL_TIMEOUT if the operation timed out, + * MBEDTLS_ERR_SSL_WANT_READ if interrupted by a signal. + * + * \note This function will block (until data becomes available or + * timeout is reached) even if the socket is set to + * non-blocking. Handling timeouts with non-blocking reads + * requires a different strategy. + */ +int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, + uint32_t timeout ); + +/** + * \brief Gracefully shutdown the connection and free associated data + * + * \param ctx The context to free + */ +void mbedtls_net_free( mbedtls_net_context *ctx ); + +#ifdef __cplusplus +} +#endif + +#endif /* net.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/oid.h b/tools/sdk/include/mbedtls/mbedtls/oid.h new file mode 100644 index 00000000..fcecdafd --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/oid.h @@ -0,0 +1,570 @@ +/** + * \file oid.h + * + * \brief Object Identifier (OID) database + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_OID_H +#define MBEDTLS_OID_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "asn1.h" +#include "pk.h" + +#include + +#if defined(MBEDTLS_CIPHER_C) +#include "cipher.h" +#endif + +#if defined(MBEDTLS_MD_C) +#include "md.h" +#endif + +#if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C) +#include "x509.h" +#endif + +#define MBEDTLS_ERR_OID_NOT_FOUND -0x002E /**< OID is not found. */ +#define MBEDTLS_ERR_OID_BUF_TOO_SMALL -0x000B /**< output buffer is too small */ + +/* + * Top level OID tuples + */ +#define MBEDTLS_OID_ISO_MEMBER_BODIES "\x2a" /* {iso(1) member-body(2)} */ +#define MBEDTLS_OID_ISO_IDENTIFIED_ORG "\x2b" /* {iso(1) identified-organization(3)} */ +#define MBEDTLS_OID_ISO_CCITT_DS "\x55" /* {joint-iso-ccitt(2) ds(5)} */ +#define MBEDTLS_OID_ISO_ITU_COUNTRY "\x60" /* {joint-iso-itu-t(2) country(16)} */ + +/* + * ISO Member bodies OID parts + */ +#define MBEDTLS_OID_COUNTRY_US "\x86\x48" /* {us(840)} */ +#define MBEDTLS_OID_ORG_RSA_DATA_SECURITY "\x86\xf7\x0d" /* {rsadsi(113549)} */ +#define MBEDTLS_OID_RSA_COMPANY MBEDTLS_OID_ISO_MEMBER_BODIES MBEDTLS_OID_COUNTRY_US \ + MBEDTLS_OID_ORG_RSA_DATA_SECURITY /* {iso(1) member-body(2) us(840) rsadsi(113549)} */ +#define MBEDTLS_OID_ORG_ANSI_X9_62 "\xce\x3d" /* ansi-X9-62(10045) */ +#define MBEDTLS_OID_ANSI_X9_62 MBEDTLS_OID_ISO_MEMBER_BODIES MBEDTLS_OID_COUNTRY_US \ + MBEDTLS_OID_ORG_ANSI_X9_62 + +/* + * ISO Identified organization OID parts + */ +#define MBEDTLS_OID_ORG_DOD "\x06" /* {dod(6)} */ +#define MBEDTLS_OID_ORG_OIW "\x0e" +#define MBEDTLS_OID_OIW_SECSIG MBEDTLS_OID_ORG_OIW "\x03" +#define MBEDTLS_OID_OIW_SECSIG_ALG MBEDTLS_OID_OIW_SECSIG "\x02" +#define MBEDTLS_OID_OIW_SECSIG_SHA1 MBEDTLS_OID_OIW_SECSIG_ALG "\x1a" +#define MBEDTLS_OID_ORG_CERTICOM "\x81\x04" /* certicom(132) */ +#define MBEDTLS_OID_CERTICOM MBEDTLS_OID_ISO_IDENTIFIED_ORG MBEDTLS_OID_ORG_CERTICOM +#define MBEDTLS_OID_ORG_TELETRUST "\x24" /* teletrust(36) */ +#define MBEDTLS_OID_TELETRUST MBEDTLS_OID_ISO_IDENTIFIED_ORG MBEDTLS_OID_ORG_TELETRUST + +/* + * ISO ITU OID parts + */ +#define MBEDTLS_OID_ORGANIZATION "\x01" /* {organization(1)} */ +#define MBEDTLS_OID_ISO_ITU_US_ORG MBEDTLS_OID_ISO_ITU_COUNTRY MBEDTLS_OID_COUNTRY_US MBEDTLS_OID_ORGANIZATION /* {joint-iso-itu-t(2) country(16) us(840) organization(1)} */ + +#define MBEDTLS_OID_ORG_GOV "\x65" /* {gov(101)} */ +#define MBEDTLS_OID_GOV MBEDTLS_OID_ISO_ITU_US_ORG MBEDTLS_OID_ORG_GOV /* {joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101)} */ + +#define MBEDTLS_OID_ORG_NETSCAPE "\x86\xF8\x42" /* {netscape(113730)} */ +#define MBEDTLS_OID_NETSCAPE MBEDTLS_OID_ISO_ITU_US_ORG MBEDTLS_OID_ORG_NETSCAPE /* Netscape OID {joint-iso-itu-t(2) country(16) us(840) organization(1) netscape(113730)} */ + +/* ISO arc for standard certificate and CRL extensions */ +#define MBEDTLS_OID_ID_CE MBEDTLS_OID_ISO_CCITT_DS "\x1D" /**< id-ce OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 29} */ + +/** + * Private Internet Extensions + * { iso(1) identified-organization(3) dod(6) internet(1) + * security(5) mechanisms(5) pkix(7) } + */ +#define MBEDTLS_OID_PKIX MBEDTLS_OID_ISO_IDENTIFIED_ORG MBEDTLS_OID_ORG_DOD "\x01\x05\x05\x07" + +/* + * Arc for standard naming attributes + */ +#define MBEDTLS_OID_AT MBEDTLS_OID_ISO_CCITT_DS "\x04" /**< id-at OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 4} */ +#define MBEDTLS_OID_AT_CN MBEDTLS_OID_AT "\x03" /**< id-at-commonName AttributeType:= {id-at 3} */ +#define MBEDTLS_OID_AT_SUR_NAME MBEDTLS_OID_AT "\x04" /**< id-at-surName AttributeType:= {id-at 4} */ +#define MBEDTLS_OID_AT_SERIAL_NUMBER MBEDTLS_OID_AT "\x05" /**< id-at-serialNumber AttributeType:= {id-at 5} */ +#define MBEDTLS_OID_AT_COUNTRY MBEDTLS_OID_AT "\x06" /**< id-at-countryName AttributeType:= {id-at 6} */ +#define MBEDTLS_OID_AT_LOCALITY MBEDTLS_OID_AT "\x07" /**< id-at-locality AttributeType:= {id-at 7} */ +#define MBEDTLS_OID_AT_STATE MBEDTLS_OID_AT "\x08" /**< id-at-state AttributeType:= {id-at 8} */ +#define MBEDTLS_OID_AT_ORGANIZATION MBEDTLS_OID_AT "\x0A" /**< id-at-organizationName AttributeType:= {id-at 10} */ +#define MBEDTLS_OID_AT_ORG_UNIT MBEDTLS_OID_AT "\x0B" /**< id-at-organizationalUnitName AttributeType:= {id-at 11} */ +#define MBEDTLS_OID_AT_TITLE MBEDTLS_OID_AT "\x0C" /**< id-at-title AttributeType:= {id-at 12} */ +#define MBEDTLS_OID_AT_POSTAL_ADDRESS MBEDTLS_OID_AT "\x10" /**< id-at-postalAddress AttributeType:= {id-at 16} */ +#define MBEDTLS_OID_AT_POSTAL_CODE MBEDTLS_OID_AT "\x11" /**< id-at-postalCode AttributeType:= {id-at 17} */ +#define MBEDTLS_OID_AT_GIVEN_NAME MBEDTLS_OID_AT "\x2A" /**< id-at-givenName AttributeType:= {id-at 42} */ +#define MBEDTLS_OID_AT_INITIALS MBEDTLS_OID_AT "\x2B" /**< id-at-initials AttributeType:= {id-at 43} */ +#define MBEDTLS_OID_AT_GENERATION_QUALIFIER MBEDTLS_OID_AT "\x2C" /**< id-at-generationQualifier AttributeType:= {id-at 44} */ +#define MBEDTLS_OID_AT_UNIQUE_IDENTIFIER MBEDTLS_OID_AT "\x2D" /**< id-at-uniqueIdentifier AttributType:= {id-at 45} */ +#define MBEDTLS_OID_AT_DN_QUALIFIER MBEDTLS_OID_AT "\x2E" /**< id-at-dnQualifier AttributeType:= {id-at 46} */ +#define MBEDTLS_OID_AT_PSEUDONYM MBEDTLS_OID_AT "\x41" /**< id-at-pseudonym AttributeType:= {id-at 65} */ + +#define MBEDTLS_OID_DOMAIN_COMPONENT "\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x19" /** id-domainComponent AttributeType:= {itu-t(0) data(9) pss(2342) ucl(19200300) pilot(100) pilotAttributeType(1) domainComponent(25)} */ + +/* + * OIDs for standard certificate extensions + */ +#define MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER MBEDTLS_OID_ID_CE "\x23" /**< id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } */ +#define MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER MBEDTLS_OID_ID_CE "\x0E" /**< id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } */ +#define MBEDTLS_OID_KEY_USAGE MBEDTLS_OID_ID_CE "\x0F" /**< id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } */ +#define MBEDTLS_OID_CERTIFICATE_POLICIES MBEDTLS_OID_ID_CE "\x20" /**< id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 } */ +#define MBEDTLS_OID_POLICY_MAPPINGS MBEDTLS_OID_ID_CE "\x21" /**< id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 } */ +#define MBEDTLS_OID_SUBJECT_ALT_NAME MBEDTLS_OID_ID_CE "\x11" /**< id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 } */ +#define MBEDTLS_OID_ISSUER_ALT_NAME MBEDTLS_OID_ID_CE "\x12" /**< id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } */ +#define MBEDTLS_OID_SUBJECT_DIRECTORY_ATTRS MBEDTLS_OID_ID_CE "\x09" /**< id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 } */ +#define MBEDTLS_OID_BASIC_CONSTRAINTS MBEDTLS_OID_ID_CE "\x13" /**< id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } */ +#define MBEDTLS_OID_NAME_CONSTRAINTS MBEDTLS_OID_ID_CE "\x1E" /**< id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 } */ +#define MBEDTLS_OID_POLICY_CONSTRAINTS MBEDTLS_OID_ID_CE "\x24" /**< id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } */ +#define MBEDTLS_OID_EXTENDED_KEY_USAGE MBEDTLS_OID_ID_CE "\x25" /**< id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 } */ +#define MBEDTLS_OID_CRL_DISTRIBUTION_POINTS MBEDTLS_OID_ID_CE "\x1F" /**< id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= { id-ce 31 } */ +#define MBEDTLS_OID_INIHIBIT_ANYPOLICY MBEDTLS_OID_ID_CE "\x36" /**< id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 } */ +#define MBEDTLS_OID_FRESHEST_CRL MBEDTLS_OID_ID_CE "\x2E" /**< id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 } */ + +/* + * Netscape certificate extensions + */ +#define MBEDTLS_OID_NS_CERT MBEDTLS_OID_NETSCAPE "\x01" +#define MBEDTLS_OID_NS_CERT_TYPE MBEDTLS_OID_NS_CERT "\x01" +#define MBEDTLS_OID_NS_BASE_URL MBEDTLS_OID_NS_CERT "\x02" +#define MBEDTLS_OID_NS_REVOCATION_URL MBEDTLS_OID_NS_CERT "\x03" +#define MBEDTLS_OID_NS_CA_REVOCATION_URL MBEDTLS_OID_NS_CERT "\x04" +#define MBEDTLS_OID_NS_RENEWAL_URL MBEDTLS_OID_NS_CERT "\x07" +#define MBEDTLS_OID_NS_CA_POLICY_URL MBEDTLS_OID_NS_CERT "\x08" +#define MBEDTLS_OID_NS_SSL_SERVER_NAME MBEDTLS_OID_NS_CERT "\x0C" +#define MBEDTLS_OID_NS_COMMENT MBEDTLS_OID_NS_CERT "\x0D" +#define MBEDTLS_OID_NS_DATA_TYPE MBEDTLS_OID_NETSCAPE "\x02" +#define MBEDTLS_OID_NS_CERT_SEQUENCE MBEDTLS_OID_NS_DATA_TYPE "\x05" + +/* + * OIDs for CRL extensions + */ +#define MBEDTLS_OID_PRIVATE_KEY_USAGE_PERIOD MBEDTLS_OID_ID_CE "\x10" +#define MBEDTLS_OID_CRL_NUMBER MBEDTLS_OID_ID_CE "\x14" /**< id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 } */ + +/* + * X.509 v3 Extended key usage OIDs + */ +#define MBEDTLS_OID_ANY_EXTENDED_KEY_USAGE MBEDTLS_OID_EXTENDED_KEY_USAGE "\x00" /**< anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 } */ + +#define MBEDTLS_OID_KP MBEDTLS_OID_PKIX "\x03" /**< id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } */ +#define MBEDTLS_OID_SERVER_AUTH MBEDTLS_OID_KP "\x01" /**< id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 } */ +#define MBEDTLS_OID_CLIENT_AUTH MBEDTLS_OID_KP "\x02" /**< id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 } */ +#define MBEDTLS_OID_CODE_SIGNING MBEDTLS_OID_KP "\x03" /**< id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 } */ +#define MBEDTLS_OID_EMAIL_PROTECTION MBEDTLS_OID_KP "\x04" /**< id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 } */ +#define MBEDTLS_OID_TIME_STAMPING MBEDTLS_OID_KP "\x08" /**< id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 } */ +#define MBEDTLS_OID_OCSP_SIGNING MBEDTLS_OID_KP "\x09" /**< id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 } */ + +/* + * PKCS definition OIDs + */ + +#define MBEDTLS_OID_PKCS MBEDTLS_OID_RSA_COMPANY "\x01" /**< pkcs OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) 1 } */ +#define MBEDTLS_OID_PKCS1 MBEDTLS_OID_PKCS "\x01" /**< pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 } */ +#define MBEDTLS_OID_PKCS5 MBEDTLS_OID_PKCS "\x05" /**< pkcs-5 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 5 } */ +#define MBEDTLS_OID_PKCS9 MBEDTLS_OID_PKCS "\x09" /**< pkcs-9 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 } */ +#define MBEDTLS_OID_PKCS12 MBEDTLS_OID_PKCS "\x0c" /**< pkcs-12 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 12 } */ + +/* + * PKCS#1 OIDs + */ +#define MBEDTLS_OID_PKCS1_RSA MBEDTLS_OID_PKCS1 "\x01" /**< rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 } */ +#define MBEDTLS_OID_PKCS1_MD2 MBEDTLS_OID_PKCS1 "\x02" /**< md2WithRSAEncryption ::= { pkcs-1 2 } */ +#define MBEDTLS_OID_PKCS1_MD4 MBEDTLS_OID_PKCS1 "\x03" /**< md4WithRSAEncryption ::= { pkcs-1 3 } */ +#define MBEDTLS_OID_PKCS1_MD5 MBEDTLS_OID_PKCS1 "\x04" /**< md5WithRSAEncryption ::= { pkcs-1 4 } */ +#define MBEDTLS_OID_PKCS1_SHA1 MBEDTLS_OID_PKCS1 "\x05" /**< sha1WithRSAEncryption ::= { pkcs-1 5 } */ +#define MBEDTLS_OID_PKCS1_SHA224 MBEDTLS_OID_PKCS1 "\x0e" /**< sha224WithRSAEncryption ::= { pkcs-1 14 } */ +#define MBEDTLS_OID_PKCS1_SHA256 MBEDTLS_OID_PKCS1 "\x0b" /**< sha256WithRSAEncryption ::= { pkcs-1 11 } */ +#define MBEDTLS_OID_PKCS1_SHA384 MBEDTLS_OID_PKCS1 "\x0c" /**< sha384WithRSAEncryption ::= { pkcs-1 12 } */ +#define MBEDTLS_OID_PKCS1_SHA512 MBEDTLS_OID_PKCS1 "\x0d" /**< sha512WithRSAEncryption ::= { pkcs-1 13 } */ + +#define MBEDTLS_OID_RSA_SHA_OBS "\x2B\x0E\x03\x02\x1D" + +#define MBEDTLS_OID_PKCS9_EMAIL MBEDTLS_OID_PKCS9 "\x01" /**< emailAddress AttributeType ::= { pkcs-9 1 } */ + +/* RFC 4055 */ +#define MBEDTLS_OID_RSASSA_PSS MBEDTLS_OID_PKCS1 "\x0a" /**< id-RSASSA-PSS ::= { pkcs-1 10 } */ +#define MBEDTLS_OID_MGF1 MBEDTLS_OID_PKCS1 "\x08" /**< id-mgf1 ::= { pkcs-1 8 } */ + +/* + * Digest algorithms + */ +#define MBEDTLS_OID_DIGEST_ALG_MD2 MBEDTLS_OID_RSA_COMPANY "\x02\x02" /**< id-mbedtls_md2 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 2 } */ +#define MBEDTLS_OID_DIGEST_ALG_MD4 MBEDTLS_OID_RSA_COMPANY "\x02\x04" /**< id-mbedtls_md4 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 4 } */ +#define MBEDTLS_OID_DIGEST_ALG_MD5 MBEDTLS_OID_RSA_COMPANY "\x02\x05" /**< id-mbedtls_md5 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 5 } */ +#define MBEDTLS_OID_DIGEST_ALG_SHA1 MBEDTLS_OID_ISO_IDENTIFIED_ORG MBEDTLS_OID_OIW_SECSIG_SHA1 /**< id-mbedtls_sha1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 } */ +#define MBEDTLS_OID_DIGEST_ALG_SHA224 MBEDTLS_OID_GOV "\x03\x04\x02\x04" /**< id-sha224 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 4 } */ +#define MBEDTLS_OID_DIGEST_ALG_SHA256 MBEDTLS_OID_GOV "\x03\x04\x02\x01" /**< id-mbedtls_sha256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 1 } */ + +#define MBEDTLS_OID_DIGEST_ALG_SHA384 MBEDTLS_OID_GOV "\x03\x04\x02\x02" /**< id-sha384 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 2 } */ + +#define MBEDTLS_OID_DIGEST_ALG_SHA512 MBEDTLS_OID_GOV "\x03\x04\x02\x03" /**< id-mbedtls_sha512 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 3 } */ + +#define MBEDTLS_OID_HMAC_SHA1 MBEDTLS_OID_RSA_COMPANY "\x02\x07" /**< id-hmacWithSHA1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 7 } */ + +/* + * Encryption algorithms + */ +#define MBEDTLS_OID_DES_CBC MBEDTLS_OID_ISO_IDENTIFIED_ORG MBEDTLS_OID_OIW_SECSIG_ALG "\x07" /**< desCBC OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 7 } */ +#define MBEDTLS_OID_DES_EDE3_CBC MBEDTLS_OID_RSA_COMPANY "\x03\x07" /**< des-ede3-cbc OBJECT IDENTIFIER ::= { iso(1) member-body(2) -- us(840) rsadsi(113549) encryptionAlgorithm(3) 7 } */ + +/* + * PKCS#5 OIDs + */ +#define MBEDTLS_OID_PKCS5_PBKDF2 MBEDTLS_OID_PKCS5 "\x0c" /**< id-PBKDF2 OBJECT IDENTIFIER ::= {pkcs-5 12} */ +#define MBEDTLS_OID_PKCS5_PBES2 MBEDTLS_OID_PKCS5 "\x0d" /**< id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13} */ +#define MBEDTLS_OID_PKCS5_PBMAC1 MBEDTLS_OID_PKCS5 "\x0e" /**< id-PBMAC1 OBJECT IDENTIFIER ::= {pkcs-5 14} */ + +/* + * PKCS#5 PBES1 algorithms + */ +#define MBEDTLS_OID_PKCS5_PBE_MD2_DES_CBC MBEDTLS_OID_PKCS5 "\x01" /**< pbeWithMD2AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 1} */ +#define MBEDTLS_OID_PKCS5_PBE_MD2_RC2_CBC MBEDTLS_OID_PKCS5 "\x04" /**< pbeWithMD2AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 4} */ +#define MBEDTLS_OID_PKCS5_PBE_MD5_DES_CBC MBEDTLS_OID_PKCS5 "\x03" /**< pbeWithMD5AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 3} */ +#define MBEDTLS_OID_PKCS5_PBE_MD5_RC2_CBC MBEDTLS_OID_PKCS5 "\x06" /**< pbeWithMD5AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 6} */ +#define MBEDTLS_OID_PKCS5_PBE_SHA1_DES_CBC MBEDTLS_OID_PKCS5 "\x0a" /**< pbeWithSHA1AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 10} */ +#define MBEDTLS_OID_PKCS5_PBE_SHA1_RC2_CBC MBEDTLS_OID_PKCS5 "\x0b" /**< pbeWithSHA1AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 11} */ + +/* + * PKCS#8 OIDs + */ +#define MBEDTLS_OID_PKCS9_CSR_EXT_REQ MBEDTLS_OID_PKCS9 "\x0e" /**< extensionRequest OBJECT IDENTIFIER ::= {pkcs-9 14} */ + +/* + * PKCS#12 PBE OIDs + */ +#define MBEDTLS_OID_PKCS12_PBE MBEDTLS_OID_PKCS12 "\x01" /**< pkcs-12PbeIds OBJECT IDENTIFIER ::= {pkcs-12 1} */ + +#define MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_128 MBEDTLS_OID_PKCS12_PBE "\x01" /**< pbeWithSHAAnd128BitRC4 OBJECT IDENTIFIER ::= {pkcs-12PbeIds 1} */ +#define MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_40 MBEDTLS_OID_PKCS12_PBE "\x02" /**< pbeWithSHAAnd40BitRC4 OBJECT IDENTIFIER ::= {pkcs-12PbeIds 2} */ +#define MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC MBEDTLS_OID_PKCS12_PBE "\x03" /**< pbeWithSHAAnd3-KeyTripleDES-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 3} */ +#define MBEDTLS_OID_PKCS12_PBE_SHA1_DES2_EDE_CBC MBEDTLS_OID_PKCS12_PBE "\x04" /**< pbeWithSHAAnd2-KeyTripleDES-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 4} */ +#define MBEDTLS_OID_PKCS12_PBE_SHA1_RC2_128_CBC MBEDTLS_OID_PKCS12_PBE "\x05" /**< pbeWithSHAAnd128BitRC2-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 5} */ +#define MBEDTLS_OID_PKCS12_PBE_SHA1_RC2_40_CBC MBEDTLS_OID_PKCS12_PBE "\x06" /**< pbeWithSHAAnd40BitRC2-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 6} */ + +/* + * EC key algorithms from RFC 5480 + */ + +/* id-ecPublicKey OBJECT IDENTIFIER ::= { + * iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 } */ +#define MBEDTLS_OID_EC_ALG_UNRESTRICTED MBEDTLS_OID_ANSI_X9_62 "\x02\01" + +/* id-ecDH OBJECT IDENTIFIER ::= { + * iso(1) identified-organization(3) certicom(132) + * schemes(1) ecdh(12) } */ +#define MBEDTLS_OID_EC_ALG_ECDH MBEDTLS_OID_CERTICOM "\x01\x0c" + +/* + * ECParameters namedCurve identifiers, from RFC 5480, RFC 5639, and SEC2 + */ + +/* secp192r1 OBJECT IDENTIFIER ::= { + * iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) prime(1) 1 } */ +#define MBEDTLS_OID_EC_GRP_SECP192R1 MBEDTLS_OID_ANSI_X9_62 "\x03\x01\x01" + +/* secp224r1 OBJECT IDENTIFIER ::= { + * iso(1) identified-organization(3) certicom(132) curve(0) 33 } */ +#define MBEDTLS_OID_EC_GRP_SECP224R1 MBEDTLS_OID_CERTICOM "\x00\x21" + +/* secp256r1 OBJECT IDENTIFIER ::= { + * iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) prime(1) 7 } */ +#define MBEDTLS_OID_EC_GRP_SECP256R1 MBEDTLS_OID_ANSI_X9_62 "\x03\x01\x07" + +/* secp384r1 OBJECT IDENTIFIER ::= { + * iso(1) identified-organization(3) certicom(132) curve(0) 34 } */ +#define MBEDTLS_OID_EC_GRP_SECP384R1 MBEDTLS_OID_CERTICOM "\x00\x22" + +/* secp521r1 OBJECT IDENTIFIER ::= { + * iso(1) identified-organization(3) certicom(132) curve(0) 35 } */ +#define MBEDTLS_OID_EC_GRP_SECP521R1 MBEDTLS_OID_CERTICOM "\x00\x23" + +/* secp192k1 OBJECT IDENTIFIER ::= { + * iso(1) identified-organization(3) certicom(132) curve(0) 31 } */ +#define MBEDTLS_OID_EC_GRP_SECP192K1 MBEDTLS_OID_CERTICOM "\x00\x1f" + +/* secp224k1 OBJECT IDENTIFIER ::= { + * iso(1) identified-organization(3) certicom(132) curve(0) 32 } */ +#define MBEDTLS_OID_EC_GRP_SECP224K1 MBEDTLS_OID_CERTICOM "\x00\x20" + +/* secp256k1 OBJECT IDENTIFIER ::= { + * iso(1) identified-organization(3) certicom(132) curve(0) 10 } */ +#define MBEDTLS_OID_EC_GRP_SECP256K1 MBEDTLS_OID_CERTICOM "\x00\x0a" + +/* RFC 5639 4.1 + * ecStdCurvesAndGeneration OBJECT IDENTIFIER::= {iso(1) + * identified-organization(3) teletrust(36) algorithm(3) signature- + * algorithm(3) ecSign(2) 8} + * ellipticCurve OBJECT IDENTIFIER ::= {ecStdCurvesAndGeneration 1} + * versionOne OBJECT IDENTIFIER ::= {ellipticCurve 1} */ +#define MBEDTLS_OID_EC_BRAINPOOL_V1 MBEDTLS_OID_TELETRUST "\x03\x03\x02\x08\x01\x01" + +/* brainpoolP256r1 OBJECT IDENTIFIER ::= {versionOne 7} */ +#define MBEDTLS_OID_EC_GRP_BP256R1 MBEDTLS_OID_EC_BRAINPOOL_V1 "\x07" + +/* brainpoolP384r1 OBJECT IDENTIFIER ::= {versionOne 11} */ +#define MBEDTLS_OID_EC_GRP_BP384R1 MBEDTLS_OID_EC_BRAINPOOL_V1 "\x0B" + +/* brainpoolP512r1 OBJECT IDENTIFIER ::= {versionOne 13} */ +#define MBEDTLS_OID_EC_GRP_BP512R1 MBEDTLS_OID_EC_BRAINPOOL_V1 "\x0D" + +/* + * SEC1 C.1 + * + * prime-field OBJECT IDENTIFIER ::= { id-fieldType 1 } + * id-fieldType OBJECT IDENTIFIER ::= { ansi-X9-62 fieldType(1)} + */ +#define MBEDTLS_OID_ANSI_X9_62_FIELD_TYPE MBEDTLS_OID_ANSI_X9_62 "\x01" +#define MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD MBEDTLS_OID_ANSI_X9_62_FIELD_TYPE "\x01" + +/* + * ECDSA signature identifiers, from RFC 5480 + */ +#define MBEDTLS_OID_ANSI_X9_62_SIG MBEDTLS_OID_ANSI_X9_62 "\x04" /* signatures(4) */ +#define MBEDTLS_OID_ANSI_X9_62_SIG_SHA2 MBEDTLS_OID_ANSI_X9_62_SIG "\x03" /* ecdsa-with-SHA2(3) */ + +/* ecdsa-with-SHA1 OBJECT IDENTIFIER ::= { + * iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) 1 } */ +#define MBEDTLS_OID_ECDSA_SHA1 MBEDTLS_OID_ANSI_X9_62_SIG "\x01" + +/* ecdsa-with-SHA224 OBJECT IDENTIFIER ::= { + * iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) + * ecdsa-with-SHA2(3) 1 } */ +#define MBEDTLS_OID_ECDSA_SHA224 MBEDTLS_OID_ANSI_X9_62_SIG_SHA2 "\x01" + +/* ecdsa-with-SHA256 OBJECT IDENTIFIER ::= { + * iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) + * ecdsa-with-SHA2(3) 2 } */ +#define MBEDTLS_OID_ECDSA_SHA256 MBEDTLS_OID_ANSI_X9_62_SIG_SHA2 "\x02" + +/* ecdsa-with-SHA384 OBJECT IDENTIFIER ::= { + * iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) + * ecdsa-with-SHA2(3) 3 } */ +#define MBEDTLS_OID_ECDSA_SHA384 MBEDTLS_OID_ANSI_X9_62_SIG_SHA2 "\x03" + +/* ecdsa-with-SHA512 OBJECT IDENTIFIER ::= { + * iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) + * ecdsa-with-SHA2(3) 4 } */ +#define MBEDTLS_OID_ECDSA_SHA512 MBEDTLS_OID_ANSI_X9_62_SIG_SHA2 "\x04" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Base OID descriptor structure + */ +typedef struct { + const char *asn1; /*!< OID ASN.1 representation */ + size_t asn1_len; /*!< length of asn1 */ + const char *name; /*!< official name (e.g. from RFC) */ + const char *description; /*!< human friendly description */ +} mbedtls_oid_descriptor_t; + +/** + * \brief Translate an ASN.1 OID into its numeric representation + * (e.g. "\x2A\x86\x48\x86\xF7\x0D" into "1.2.840.113549") + * + * \param buf buffer to put representation in + * \param size size of the buffer + * \param oid OID to translate + * + * \return Length of the string written (excluding final NULL) or + * MBEDTLS_ERR_OID_BUF_TOO_SMALL in case of error + */ +int mbedtls_oid_get_numeric_string( char *buf, size_t size, const mbedtls_asn1_buf *oid ); + +#if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C) +/** + * \brief Translate an X.509 extension OID into local values + * + * \param oid OID to use + * \param ext_type place to store the extension type + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_x509_ext_type( const mbedtls_asn1_buf *oid, int *ext_type ); +#endif + +/** + * \brief Translate an X.509 attribute type OID into the short name + * (e.g. the OID for an X520 Common Name into "CN") + * + * \param oid OID to use + * \param short_name place to store the string pointer + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_attr_short_name( const mbedtls_asn1_buf *oid, const char **short_name ); + +/** + * \brief Translate PublicKeyAlgorithm OID into pk_type + * + * \param oid OID to use + * \param pk_alg place to store public key algorithm + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_pk_alg( const mbedtls_asn1_buf *oid, mbedtls_pk_type_t *pk_alg ); + +/** + * \brief Translate pk_type into PublicKeyAlgorithm OID + * + * \param pk_alg Public key type to look for + * \param oid place to store ASN.1 OID string pointer + * \param olen length of the OID + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_oid_by_pk_alg( mbedtls_pk_type_t pk_alg, + const char **oid, size_t *olen ); + +#if defined(MBEDTLS_ECP_C) +/** + * \brief Translate NamedCurve OID into an EC group identifier + * + * \param oid OID to use + * \param grp_id place to store group id + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_ec_grp( const mbedtls_asn1_buf *oid, mbedtls_ecp_group_id *grp_id ); + +/** + * \brief Translate EC group identifier into NamedCurve OID + * + * \param grp_id EC group identifier + * \param oid place to store ASN.1 OID string pointer + * \param olen length of the OID + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_oid_by_ec_grp( mbedtls_ecp_group_id grp_id, + const char **oid, size_t *olen ); +#endif /* MBEDTLS_ECP_C */ + +#if defined(MBEDTLS_MD_C) +/** + * \brief Translate SignatureAlgorithm OID into md_type and pk_type + * + * \param oid OID to use + * \param md_alg place to store message digest algorithm + * \param pk_alg place to store public key algorithm + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_sig_alg( const mbedtls_asn1_buf *oid, + mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg ); + +/** + * \brief Translate SignatureAlgorithm OID into description + * + * \param oid OID to use + * \param desc place to store string pointer + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_sig_alg_desc( const mbedtls_asn1_buf *oid, const char **desc ); + +/** + * \brief Translate md_type and pk_type into SignatureAlgorithm OID + * + * \param md_alg message digest algorithm + * \param pk_alg public key algorithm + * \param oid place to store ASN.1 OID string pointer + * \param olen length of the OID + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_oid_by_sig_alg( mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg, + const char **oid, size_t *olen ); + +/** + * \brief Translate hash algorithm OID into md_type + * + * \param oid OID to use + * \param md_alg place to store message digest algorithm + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_md_alg( const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_alg ); +#endif /* MBEDTLS_MD_C */ + +/** + * \brief Translate Extended Key Usage OID into description + * + * \param oid OID to use + * \param desc place to store string pointer + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_extended_key_usage( const mbedtls_asn1_buf *oid, const char **desc ); + +/** + * \brief Translate md_type into hash algorithm OID + * + * \param md_alg message digest algorithm + * \param oid place to store ASN.1 OID string pointer + * \param olen length of the OID + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_oid_by_md( mbedtls_md_type_t md_alg, const char **oid, size_t *olen ); + +#if defined(MBEDTLS_CIPHER_C) +/** + * \brief Translate encryption algorithm OID into cipher_type + * + * \param oid OID to use + * \param cipher_alg place to store cipher algorithm + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_cipher_alg( const mbedtls_asn1_buf *oid, mbedtls_cipher_type_t *cipher_alg ); +#endif /* MBEDTLS_CIPHER_C */ + +#if defined(MBEDTLS_PKCS12_C) +/** + * \brief Translate PKCS#12 PBE algorithm OID into md_type and + * cipher_type + * + * \param oid OID to use + * \param md_alg place to store message digest algorithm + * \param cipher_alg place to store cipher algorithm + * + * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND + */ +int mbedtls_oid_get_pkcs12_pbe_alg( const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_alg, + mbedtls_cipher_type_t *cipher_alg ); +#endif /* MBEDTLS_PKCS12_C */ + +#ifdef __cplusplus +} +#endif + +#endif /* oid.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/padlock.h b/tools/sdk/include/mbedtls/mbedtls/padlock.h new file mode 100644 index 00000000..2045a5ab --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/padlock.h @@ -0,0 +1,107 @@ +/** + * \file padlock.h + * + * \brief VIA PadLock ACE for HW encryption/decryption supported by some + * processors + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_PADLOCK_H +#define MBEDTLS_PADLOCK_H + +#include "aes.h" + +#define MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED -0x0030 /**< Input data should be aligned. */ + +#if defined(__has_feature) +#if __has_feature(address_sanitizer) +#define MBEDTLS_HAVE_ASAN +#endif +#endif + +/* Some versions of ASan result in errors about not enough registers */ +#if defined(MBEDTLS_HAVE_ASM) && defined(__GNUC__) && defined(__i386__) && \ + !defined(MBEDTLS_HAVE_ASAN) + +#ifndef MBEDTLS_HAVE_X86 +#define MBEDTLS_HAVE_X86 +#endif + +#include + +#define MBEDTLS_PADLOCK_RNG 0x000C +#define MBEDTLS_PADLOCK_ACE 0x00C0 +#define MBEDTLS_PADLOCK_PHE 0x0C00 +#define MBEDTLS_PADLOCK_PMM 0x3000 + +#define MBEDTLS_PADLOCK_ALIGN16(x) (uint32_t *) (16 + ((int32_t) x & ~15)) + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief PadLock detection routine + * + * \param feature The feature to detect + * + * \return 1 if CPU has support for the feature, 0 otherwise + */ +int mbedtls_padlock_has_support( int feature ); + +/** + * \brief PadLock AES-ECB block en(de)cryption + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param input 16-byte input block + * \param output 16-byte output block + * + * \return 0 if success, 1 if operation failed + */ +int mbedtls_padlock_xcryptecb( mbedtls_aes_context *ctx, + int mode, + const unsigned char input[16], + unsigned char output[16] ); + +/** + * \brief PadLock AES-CBC buffer en(de)cryption + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if success, 1 if operation failed + */ +int mbedtls_padlock_xcryptcbc( mbedtls_aes_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); + +#ifdef __cplusplus +} +#endif + +#endif /* HAVE_X86 */ + +#endif /* padlock.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/pem.h b/tools/sdk/include/mbedtls/mbedtls/pem.h new file mode 100644 index 00000000..54dc02d7 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/pem.h @@ -0,0 +1,129 @@ +/** + * \file pem.h + * + * \brief Privacy Enhanced Mail (PEM) decoding + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_PEM_H +#define MBEDTLS_PEM_H + +#include + +/** + * \name PEM Error codes + * These error codes are returned in case of errors reading the + * PEM data. + * \{ + */ +#define MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT -0x1080 /**< No PEM header or footer found. */ +#define MBEDTLS_ERR_PEM_INVALID_DATA -0x1100 /**< PEM string is not as expected. */ +#define MBEDTLS_ERR_PEM_ALLOC_FAILED -0x1180 /**< Failed to allocate memory. */ +#define MBEDTLS_ERR_PEM_INVALID_ENC_IV -0x1200 /**< RSA IV is not in hex-format. */ +#define MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG -0x1280 /**< Unsupported key encryption algorithm. */ +#define MBEDTLS_ERR_PEM_PASSWORD_REQUIRED -0x1300 /**< Private key password can't be empty. */ +#define MBEDTLS_ERR_PEM_PASSWORD_MISMATCH -0x1380 /**< Given private key password does not allow for correct decryption. */ +#define MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE -0x1400 /**< Unavailable feature, e.g. hashing/encryption combination. */ +#define MBEDTLS_ERR_PEM_BAD_INPUT_DATA -0x1480 /**< Bad input parameters to function. */ +/* \} name */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(MBEDTLS_PEM_PARSE_C) +/** + * \brief PEM context structure + */ +typedef struct +{ + unsigned char *buf; /*!< buffer for decoded data */ + size_t buflen; /*!< length of the buffer */ + unsigned char *info; /*!< buffer for extra header information */ +} +mbedtls_pem_context; + +/** + * \brief PEM context setup + * + * \param ctx context to be initialized + */ +void mbedtls_pem_init( mbedtls_pem_context *ctx ); + +/** + * \brief Read a buffer for PEM information and store the resulting + * data into the specified context buffers. + * + * \param ctx context to use + * \param header header string to seek and expect + * \param footer footer string to seek and expect + * \param data source data to look in (must be nul-terminated) + * \param pwd password for decryption (can be NULL) + * \param pwdlen length of password + * \param use_len destination for total length used (set after header is + * correctly read, so unless you get + * MBEDTLS_ERR_PEM_BAD_INPUT_DATA or + * MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT, use_len is + * the length to skip) + * + * \note Attempts to check password correctness by verifying if + * the decrypted text starts with an ASN.1 sequence of + * appropriate length + * + * \return 0 on success, or a specific PEM error code + */ +int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const char *footer, + const unsigned char *data, + const unsigned char *pwd, + size_t pwdlen, size_t *use_len ); + +/** + * \brief PEM context memory freeing + * + * \param ctx context to be freed + */ +void mbedtls_pem_free( mbedtls_pem_context *ctx ); +#endif /* MBEDTLS_PEM_PARSE_C */ + +#if defined(MBEDTLS_PEM_WRITE_C) +/** + * \brief Write a buffer of PEM information from a DER encoded + * buffer. + * + * \param header header string to write + * \param footer footer string to write + * \param der_data DER data to write + * \param der_len length of the DER data + * \param buf buffer to write to + * \param buf_len length of output buffer + * \param olen total length written / required (if buf_len is not enough) + * + * \return 0 on success, or a specific PEM or BASE64 error code. On + * MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL olen is the required + * size. + */ +int mbedtls_pem_write_buffer( const char *header, const char *footer, + const unsigned char *der_data, size_t der_len, + unsigned char *buf, size_t buf_len, size_t *olen ); +#endif /* MBEDTLS_PEM_WRITE_C */ + +#ifdef __cplusplus +} +#endif + +#endif /* pem.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/pk.h b/tools/sdk/include/mbedtls/mbedtls/pk.h new file mode 100644 index 00000000..f9f9b9bb --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/pk.h @@ -0,0 +1,616 @@ +/** + * \file pk.h + * + * \brief Public Key abstraction layer + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +#ifndef MBEDTLS_PK_H +#define MBEDTLS_PK_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "md.h" + +#if defined(MBEDTLS_RSA_C) +#include "rsa.h" +#endif + +#if defined(MBEDTLS_ECP_C) +#include "ecp.h" +#endif + +#if defined(MBEDTLS_ECDSA_C) +#include "ecdsa.h" +#endif + +#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ + !defined(inline) && !defined(__cplusplus) +#define inline __inline +#endif + +#define MBEDTLS_ERR_PK_ALLOC_FAILED -0x3F80 /**< Memory allocation failed. */ +#define MBEDTLS_ERR_PK_TYPE_MISMATCH -0x3F00 /**< Type mismatch, eg attempt to encrypt with an ECDSA key */ +#define MBEDTLS_ERR_PK_BAD_INPUT_DATA -0x3E80 /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_PK_FILE_IO_ERROR -0x3E00 /**< Read/write of file failed. */ +#define MBEDTLS_ERR_PK_KEY_INVALID_VERSION -0x3D80 /**< Unsupported key version */ +#define MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -0x3D00 /**< Invalid key tag or value. */ +#define MBEDTLS_ERR_PK_UNKNOWN_PK_ALG -0x3C80 /**< Key algorithm is unsupported (only RSA and EC are supported). */ +#define MBEDTLS_ERR_PK_PASSWORD_REQUIRED -0x3C00 /**< Private key password can't be empty. */ +#define MBEDTLS_ERR_PK_PASSWORD_MISMATCH -0x3B80 /**< Given private key password does not allow for correct decryption. */ +#define MBEDTLS_ERR_PK_INVALID_PUBKEY -0x3B00 /**< The pubkey tag or value is invalid (only RSA and EC are supported). */ +#define MBEDTLS_ERR_PK_INVALID_ALG -0x3A80 /**< The algorithm tag or value is invalid. */ +#define MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE -0x3A00 /**< Elliptic curve is unsupported (only NIST curves are supported). */ +#define MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE -0x3980 /**< Unavailable feature, e.g. RSA disabled for RSA key. */ +#define MBEDTLS_ERR_PK_SIG_LEN_MISMATCH -0x3900 /**< The signature is valid but its length is less than expected. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Public key types + */ +typedef enum { + MBEDTLS_PK_NONE=0, + MBEDTLS_PK_RSA, + MBEDTLS_PK_ECKEY, + MBEDTLS_PK_ECKEY_DH, + MBEDTLS_PK_ECDSA, + MBEDTLS_PK_RSA_ALT, + MBEDTLS_PK_RSASSA_PSS, +} mbedtls_pk_type_t; + +/** + * \brief Options for RSASSA-PSS signature verification. + * See \c mbedtls_rsa_rsassa_pss_verify_ext() + */ +typedef struct +{ + mbedtls_md_type_t mgf1_hash_id; + int expected_salt_len; + +} mbedtls_pk_rsassa_pss_options; + +/** + * \brief Types for interfacing with the debug module + */ +typedef enum +{ + MBEDTLS_PK_DEBUG_NONE = 0, + MBEDTLS_PK_DEBUG_MPI, + MBEDTLS_PK_DEBUG_ECP, +} mbedtls_pk_debug_type; + +/** + * \brief Item to send to the debug module + */ +typedef struct +{ + mbedtls_pk_debug_type type; + const char *name; + void *value; +} mbedtls_pk_debug_item; + +/** Maximum number of item send for debugging, plus 1 */ +#define MBEDTLS_PK_DEBUG_MAX_ITEMS 3 + +/** + * \brief Public key information and operations + */ +typedef struct mbedtls_pk_info_t mbedtls_pk_info_t; + +/** + * \brief Public key container + */ +typedef struct +{ + const mbedtls_pk_info_t * pk_info; /**< Public key informations */ + void * pk_ctx; /**< Underlying public key context */ +} mbedtls_pk_context; + +#if defined(MBEDTLS_RSA_C) +/** + * Quick access to an RSA context inside a PK context. + * + * \warning You must make sure the PK context actually holds an RSA context + * before using this function! + */ +static inline mbedtls_rsa_context *mbedtls_pk_rsa( const mbedtls_pk_context pk ) +{ + return( (mbedtls_rsa_context *) (pk).pk_ctx ); +} +#endif /* MBEDTLS_RSA_C */ + +#if defined(MBEDTLS_ECP_C) +/** + * Quick access to an EC context inside a PK context. + * + * \warning You must make sure the PK context actually holds an EC context + * before using this function! + */ +static inline mbedtls_ecp_keypair *mbedtls_pk_ec( const mbedtls_pk_context pk ) +{ + return( (mbedtls_ecp_keypair *) (pk).pk_ctx ); +} +#endif /* MBEDTLS_ECP_C */ + +#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) +/** + * \brief Types for RSA-alt abstraction + */ +typedef int (*mbedtls_pk_rsa_alt_decrypt_func)( void *ctx, int mode, size_t *olen, + const unsigned char *input, unsigned char *output, + size_t output_max_len ); +typedef int (*mbedtls_pk_rsa_alt_sign_func)( void *ctx, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, + int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, + const unsigned char *hash, unsigned char *sig ); +typedef size_t (*mbedtls_pk_rsa_alt_key_len_func)( void *ctx ); +#endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */ + +/** + * \brief Return information associated with the given PK type + * + * \param pk_type PK type to search for. + * + * \return The PK info associated with the type or NULL if not found. + */ +const mbedtls_pk_info_t *mbedtls_pk_info_from_type( mbedtls_pk_type_t pk_type ); + +/** + * \brief Initialize a mbedtls_pk_context (as NONE) + */ +void mbedtls_pk_init( mbedtls_pk_context *ctx ); + +/** + * \brief Free a mbedtls_pk_context + */ +void mbedtls_pk_free( mbedtls_pk_context *ctx ); + +/** + * \brief Initialize a PK context with the information given + * and allocates the type-specific PK subcontext. + * + * \param ctx Context to initialize. Must be empty (type NONE). + * \param info Information to use + * + * \return 0 on success, + * MBEDTLS_ERR_PK_BAD_INPUT_DATA on invalid input, + * MBEDTLS_ERR_PK_ALLOC_FAILED on allocation failure. + * + * \note For contexts holding an RSA-alt key, use + * \c mbedtls_pk_setup_rsa_alt() instead. + */ +int mbedtls_pk_setup( mbedtls_pk_context *ctx, const mbedtls_pk_info_t *info ); + +#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) +/** + * \brief Initialize an RSA-alt context + * + * \param ctx Context to initialize. Must be empty (type NONE). + * \param key RSA key pointer + * \param decrypt_func Decryption function + * \param sign_func Signing function + * \param key_len_func Function returning key length in bytes + * + * \return 0 on success, or MBEDTLS_ERR_PK_BAD_INPUT_DATA if the + * context wasn't already initialized as RSA_ALT. + * + * \note This function replaces \c mbedtls_pk_setup() for RSA-alt. + */ +int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key, + mbedtls_pk_rsa_alt_decrypt_func decrypt_func, + mbedtls_pk_rsa_alt_sign_func sign_func, + mbedtls_pk_rsa_alt_key_len_func key_len_func ); +#endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */ + +/** + * \brief Get the size in bits of the underlying key + * + * \param ctx Context to use + * + * \return Key size in bits, or 0 on error + */ +size_t mbedtls_pk_get_bitlen( const mbedtls_pk_context *ctx ); + +/** + * \brief Get the length in bytes of the underlying key + * \param ctx Context to use + * + * \return Key length in bytes, or 0 on error + */ +static inline size_t mbedtls_pk_get_len( const mbedtls_pk_context *ctx ) +{ + return( ( mbedtls_pk_get_bitlen( ctx ) + 7 ) / 8 ); +} + +/** + * \brief Tell if a context can do the operation given by type + * + * \param ctx Context to test + * \param type Target type + * + * \return 0 if context can't do the operations, + * 1 otherwise. + */ +int mbedtls_pk_can_do( const mbedtls_pk_context *ctx, mbedtls_pk_type_t type ); + +/** + * \brief Verify signature (including padding if relevant). + * + * \param ctx PK context to use + * \param md_alg Hash algorithm used (see notes) + * \param hash Hash of the message to sign + * \param hash_len Hash length or 0 (see notes) + * \param sig Signature to verify + * \param sig_len Signature length + * + * \return 0 on success (signature is valid), + * MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if the signature is + * valid but its actual length is less than sig_len, + * or a specific error code. + * + * \note For RSA keys, the default padding type is PKCS#1 v1.5. + * Use \c mbedtls_pk_verify_ext( MBEDTLS_PK_RSASSA_PSS, ... ) + * to verify RSASSA_PSS signatures. + * + * \note If hash_len is 0, then the length associated with md_alg + * is used instead, or an error returned if it is invalid. + * + * \note md_alg may be MBEDTLS_MD_NONE, only if hash_len != 0 + */ +int mbedtls_pk_verify( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ); + +/** + * \brief Verify signature, with options. + * (Includes verification of the padding depending on type.) + * + * \param type Signature type (inc. possible padding type) to verify + * \param options Pointer to type-specific options, or NULL + * \param ctx PK context to use + * \param md_alg Hash algorithm used (see notes) + * \param hash Hash of the message to sign + * \param hash_len Hash length or 0 (see notes) + * \param sig Signature to verify + * \param sig_len Signature length + * + * \return 0 on success (signature is valid), + * MBEDTLS_ERR_PK_TYPE_MISMATCH if the PK context can't be + * used for this type of signatures, + * MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if the signature is + * valid but its actual length is less than sig_len, + * or a specific error code. + * + * \note If hash_len is 0, then the length associated with md_alg + * is used instead, or an error returned if it is invalid. + * + * \note md_alg may be MBEDTLS_MD_NONE, only if hash_len != 0 + * + * \note If type is MBEDTLS_PK_RSASSA_PSS, then options must point + * to a mbedtls_pk_rsassa_pss_options structure, + * otherwise it must be NULL. + */ +int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options, + mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ); + +/** + * \brief Make signature, including padding if relevant. + * + * \param ctx PK context to use - must hold a private key + * \param md_alg Hash algorithm used (see notes) + * \param hash Hash of the message to sign + * \param hash_len Hash length or 0 (see notes) + * \param sig Place to write the signature + * \param sig_len Number of bytes written + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 on success, or a specific error code. + * + * \note For RSA keys, the default padding type is PKCS#1 v1.5. + * There is no interface in the PK module to make RSASSA-PSS + * signatures yet. + * + * \note If hash_len is 0, then the length associated with md_alg + * is used instead, or an error returned if it is invalid. + * + * \note For RSA, md_alg may be MBEDTLS_MD_NONE if hash_len != 0. + * For ECDSA, md_alg may never be MBEDTLS_MD_NONE. + */ +int mbedtls_pk_sign( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); + +/** + * \brief Decrypt message (including padding if relevant). + * + * \param ctx PK context to use - must hold a private key + * \param input Input to decrypt + * \param ilen Input size + * \param output Decrypted output + * \param olen Decrypted message length + * \param osize Size of the output buffer + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \note For RSA keys, the default padding type is PKCS#1 v1.5. + * + * \return 0 on success, or a specific error code. + */ +int mbedtls_pk_decrypt( mbedtls_pk_context *ctx, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); + +/** + * \brief Encrypt message (including padding if relevant). + * + * \param ctx PK context to use + * \param input Message to encrypt + * \param ilen Message size + * \param output Encrypted output + * \param olen Encrypted output length + * \param osize Size of the output buffer + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \note For RSA keys, the default padding type is PKCS#1 v1.5. + * + * \return 0 on success, or a specific error code. + */ +int mbedtls_pk_encrypt( mbedtls_pk_context *ctx, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); + +/** + * \brief Check if a public-private pair of keys matches. + * + * \param pub Context holding a public key. + * \param prv Context holding a private (and public) key. + * + * \return 0 on success or MBEDTLS_ERR_PK_BAD_INPUT_DATA + */ +int mbedtls_pk_check_pair( const mbedtls_pk_context *pub, const mbedtls_pk_context *prv ); + +/** + * \brief Export debug information + * + * \param ctx Context to use + * \param items Place to write debug items + * + * \return 0 on success or MBEDTLS_ERR_PK_BAD_INPUT_DATA + */ +int mbedtls_pk_debug( const mbedtls_pk_context *ctx, mbedtls_pk_debug_item *items ); + +/** + * \brief Access the type name + * + * \param ctx Context to use + * + * \return Type name on success, or "invalid PK" + */ +const char * mbedtls_pk_get_name( const mbedtls_pk_context *ctx ); + +/** + * \brief Get the key type + * + * \param ctx Context to use + * + * \return Type on success, or MBEDTLS_PK_NONE + */ +mbedtls_pk_type_t mbedtls_pk_get_type( const mbedtls_pk_context *ctx ); + +#if defined(MBEDTLS_PK_PARSE_C) +/** \ingroup pk_module */ +/** + * \brief Parse a private key in PEM or DER format + * + * \param ctx key to be initialized + * \param key input buffer + * \param keylen size of the buffer + * (including the terminating null byte for PEM data) + * \param pwd password for decryption (optional) + * \param pwdlen size of the password + * + * \note On entry, ctx must be empty, either freshly initialised + * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a + * specific key type, check the result with mbedtls_pk_can_do(). + * + * \note The key is also checked for correctness. + * + * \return 0 if successful, or a specific PK or PEM error code + */ +int mbedtls_pk_parse_key( mbedtls_pk_context *ctx, + const unsigned char *key, size_t keylen, + const unsigned char *pwd, size_t pwdlen ); + +/** \ingroup pk_module */ +/** + * \brief Parse a public key in PEM or DER format + * + * \param ctx key to be initialized + * \param key input buffer + * \param keylen size of the buffer + * (including the terminating null byte for PEM data) + * + * \note On entry, ctx must be empty, either freshly initialised + * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a + * specific key type, check the result with mbedtls_pk_can_do(). + * + * \note The key is also checked for correctness. + * + * \return 0 if successful, or a specific PK or PEM error code + */ +int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, + const unsigned char *key, size_t keylen ); + +#if defined(MBEDTLS_FS_IO) +/** \ingroup pk_module */ +/** + * \brief Load and parse a private key + * + * \param ctx key to be initialized + * \param path filename to read the private key from + * \param password password to decrypt the file (can be NULL) + * + * \note On entry, ctx must be empty, either freshly initialised + * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a + * specific key type, check the result with mbedtls_pk_can_do(). + * + * \note The key is also checked for correctness. + * + * \return 0 if successful, or a specific PK or PEM error code + */ +int mbedtls_pk_parse_keyfile( mbedtls_pk_context *ctx, + const char *path, const char *password ); + +/** \ingroup pk_module */ +/** + * \brief Load and parse a public key + * + * \param ctx key to be initialized + * \param path filename to read the public key from + * + * \note On entry, ctx must be empty, either freshly initialised + * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If + * you need a specific key type, check the result with + * mbedtls_pk_can_do(). + * + * \note The key is also checked for correctness. + * + * \return 0 if successful, or a specific PK or PEM error code + */ +int mbedtls_pk_parse_public_keyfile( mbedtls_pk_context *ctx, const char *path ); +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_PK_PARSE_C */ + +#if defined(MBEDTLS_PK_WRITE_C) +/** + * \brief Write a private key to a PKCS#1 or SEC1 DER structure + * Note: data is written at the end of the buffer! Use the + * return value to determine where you should start + * using the buffer + * + * \param ctx private to write away + * \param buf buffer to write to + * \param size size of the buffer + * + * \return length of data written if successful, or a specific + * error code + */ +int mbedtls_pk_write_key_der( mbedtls_pk_context *ctx, unsigned char *buf, size_t size ); + +/** + * \brief Write a public key to a SubjectPublicKeyInfo DER structure + * Note: data is written at the end of the buffer! Use the + * return value to determine where you should start + * using the buffer + * + * \param ctx public key to write away + * \param buf buffer to write to + * \param size size of the buffer + * + * \return length of data written if successful, or a specific + * error code + */ +int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *ctx, unsigned char *buf, size_t size ); + +#if defined(MBEDTLS_PEM_WRITE_C) +/** + * \brief Write a public key to a PEM string + * + * \param ctx public key to write away + * \param buf buffer to write to + * \param size size of the buffer + * + * \return 0 if successful, or a specific error code + */ +int mbedtls_pk_write_pubkey_pem( mbedtls_pk_context *ctx, unsigned char *buf, size_t size ); + +/** + * \brief Write a private key to a PKCS#1 or SEC1 PEM string + * + * \param ctx private to write away + * \param buf buffer to write to + * \param size size of the buffer + * + * \return 0 if successful, or a specific error code + */ +int mbedtls_pk_write_key_pem( mbedtls_pk_context *ctx, unsigned char *buf, size_t size ); +#endif /* MBEDTLS_PEM_WRITE_C */ +#endif /* MBEDTLS_PK_WRITE_C */ + +/* + * WARNING: Low-level functions. You probably do not want to use these unless + * you are certain you do ;) + */ + +#if defined(MBEDTLS_PK_PARSE_C) +/** + * \brief Parse a SubjectPublicKeyInfo DER structure + * + * \param p the position in the ASN.1 data + * \param end end of the buffer + * \param pk the key to fill + * + * \return 0 if successful, or a specific PK error code + */ +int mbedtls_pk_parse_subpubkey( unsigned char **p, const unsigned char *end, + mbedtls_pk_context *pk ); +#endif /* MBEDTLS_PK_PARSE_C */ + +#if defined(MBEDTLS_PK_WRITE_C) +/** + * \brief Write a subjectPublicKey to ASN.1 data + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param key public key to write away + * + * \return the length written or a negative error code + */ +int mbedtls_pk_write_pubkey( unsigned char **p, unsigned char *start, + const mbedtls_pk_context *key ); +#endif /* MBEDTLS_PK_WRITE_C */ + +/* + * Internal module functions. You probably do not want to use these unless you + * know you do. + */ +#if defined(MBEDTLS_FS_IO) +int mbedtls_pk_load_file( const char *path, unsigned char **buf, size_t *n ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_PK_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/pk_internal.h b/tools/sdk/include/mbedtls/mbedtls/pk_internal.h new file mode 100644 index 00000000..01d0f214 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/pk_internal.h @@ -0,0 +1,114 @@ +/** + * \file pk.h + * + * \brief Public Key abstraction layer: wrapper functions + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +#ifndef MBEDTLS_PK_WRAP_H +#define MBEDTLS_PK_WRAP_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "pk.h" + +struct mbedtls_pk_info_t +{ + /** Public key type */ + mbedtls_pk_type_t type; + + /** Type name */ + const char *name; + + /** Get key size in bits */ + size_t (*get_bitlen)( const void * ); + + /** Tell if the context implements this type (e.g. ECKEY can do ECDSA) */ + int (*can_do)( mbedtls_pk_type_t type ); + + /** Verify signature */ + int (*verify_func)( void *ctx, mbedtls_md_type_t md_alg, + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ); + + /** Make signature */ + int (*sign_func)( void *ctx, mbedtls_md_type_t md_alg, + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + + /** Decrypt message */ + int (*decrypt_func)( void *ctx, const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + + /** Encrypt message */ + int (*encrypt_func)( void *ctx, const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + + /** Check public-private key pair */ + int (*check_pair_func)( const void *pub, const void *prv ); + + /** Allocate a new context */ + void * (*ctx_alloc_func)( void ); + + /** Free the given context */ + void (*ctx_free_func)( void *ctx ); + + /** Interface with the debug module */ + void (*debug_func)( const void *ctx, mbedtls_pk_debug_item *items ); + +}; +#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) +/* Container for RSA-alt */ +typedef struct +{ + void *key; + mbedtls_pk_rsa_alt_decrypt_func decrypt_func; + mbedtls_pk_rsa_alt_sign_func sign_func; + mbedtls_pk_rsa_alt_key_len_func key_len_func; +} mbedtls_rsa_alt_context; +#endif + +#if defined(MBEDTLS_RSA_C) +extern const mbedtls_pk_info_t mbedtls_rsa_info; +#endif + +#if defined(MBEDTLS_ECP_C) +extern const mbedtls_pk_info_t mbedtls_eckey_info; +extern const mbedtls_pk_info_t mbedtls_eckeydh_info; +#endif + +#if defined(MBEDTLS_ECDSA_C) +extern const mbedtls_pk_info_t mbedtls_ecdsa_info; +#endif + +#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) +extern const mbedtls_pk_info_t mbedtls_rsa_alt_info; +#endif + +#endif /* MBEDTLS_PK_WRAP_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/pkcs11.h b/tools/sdk/include/mbedtls/mbedtls/pkcs11.h new file mode 100644 index 00000000..2e889281 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/pkcs11.h @@ -0,0 +1,173 @@ +/** + * \file pkcs11.h + * + * \brief Wrapper for PKCS#11 library libpkcs11-helper + * + * \author Adriaan de Jong + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_PKCS11_H +#define MBEDTLS_PKCS11_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_PKCS11_C) + +#include "x509_crt.h" + +#include + +#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ + !defined(inline) && !defined(__cplusplus) +#define inline __inline +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Context for PKCS #11 private keys. + */ +typedef struct { + pkcs11h_certificate_t pkcs11h_cert; + int len; +} mbedtls_pkcs11_context; + +/** + * Initialize a mbedtls_pkcs11_context. + * (Just making memory references valid.) + */ +void mbedtls_pkcs11_init( mbedtls_pkcs11_context *ctx ); + +/** + * Fill in a mbed TLS certificate, based on the given PKCS11 helper certificate. + * + * \param cert X.509 certificate to fill + * \param pkcs11h_cert PKCS #11 helper certificate + * + * \return 0 on success. + */ +int mbedtls_pkcs11_x509_cert_bind( mbedtls_x509_crt *cert, pkcs11h_certificate_t pkcs11h_cert ); + +/** + * Set up a mbedtls_pkcs11_context storing the given certificate. Note that the + * mbedtls_pkcs11_context will take over control of the certificate, freeing it when + * done. + * + * \param priv_key Private key structure to fill. + * \param pkcs11_cert PKCS #11 helper certificate + * + * \return 0 on success + */ +int mbedtls_pkcs11_priv_key_bind( mbedtls_pkcs11_context *priv_key, + pkcs11h_certificate_t pkcs11_cert ); + +/** + * Free the contents of the given private key context. Note that the structure + * itself is not freed. + * + * \param priv_key Private key structure to cleanup + */ +void mbedtls_pkcs11_priv_key_free( mbedtls_pkcs11_context *priv_key ); + +/** + * \brief Do an RSA private key decrypt, then remove the message + * padding + * + * \param ctx PKCS #11 context + * \param mode must be MBEDTLS_RSA_PRIVATE, for compatibility with rsa.c's signature + * \param input buffer holding the encrypted data + * \param output buffer that will hold the plaintext + * \param olen will contain the plaintext length + * \param output_max_len maximum length of the output buffer + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The output buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise + * an error is thrown. + */ +int mbedtls_pkcs11_decrypt( mbedtls_pkcs11_context *ctx, + int mode, size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len ); + +/** + * \brief Do a private RSA to sign a message digest + * + * \param ctx PKCS #11 context + * \param mode must be MBEDTLS_RSA_PRIVATE, for compatibility with rsa.c's signature + * \param md_alg a MBEDTLS_MD_XXX (use MBEDTLS_MD_NONE for signing raw data) + * \param hashlen message digest length (for MBEDTLS_MD_NONE only) + * \param hash buffer holding the message digest + * \param sig buffer that will hold the ciphertext + * + * \return 0 if the signing operation was successful, + * or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The "sig" buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + */ +int mbedtls_pkcs11_sign( mbedtls_pkcs11_context *ctx, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ); + +/** + * SSL/TLS wrappers for PKCS#11 functions + */ +static inline int mbedtls_ssl_pkcs11_decrypt( void *ctx, int mode, size_t *olen, + const unsigned char *input, unsigned char *output, + size_t output_max_len ) +{ + return mbedtls_pkcs11_decrypt( (mbedtls_pkcs11_context *) ctx, mode, olen, input, output, + output_max_len ); +} + +static inline int mbedtls_ssl_pkcs11_sign( void *ctx, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, + int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, + const unsigned char *hash, unsigned char *sig ) +{ + ((void) f_rng); + ((void) p_rng); + return mbedtls_pkcs11_sign( (mbedtls_pkcs11_context *) ctx, mode, md_alg, + hashlen, hash, sig ); +} + +static inline size_t mbedtls_ssl_pkcs11_key_len( void *ctx ) +{ + return ( (mbedtls_pkcs11_context *) ctx )->len; +} + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_PKCS11_C */ + +#endif /* MBEDTLS_PKCS11_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/pkcs12.h b/tools/sdk/include/mbedtls/mbedtls/pkcs12.h new file mode 100644 index 00000000..9b2d9045 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/pkcs12.h @@ -0,0 +1,119 @@ +/** + * \file pkcs12.h + * + * \brief PKCS#12 Personal Information Exchange Syntax + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_PKCS12_H +#define MBEDTLS_PKCS12_H + +#include "md.h" +#include "cipher.h" +#include "asn1.h" + +#include + +#define MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA -0x1F80 /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE -0x1F00 /**< Feature not available, e.g. unsupported encryption scheme. */ +#define MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT -0x1E80 /**< PBE ASN.1 data not as expected. */ +#define MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH -0x1E00 /**< Given private key password does not allow for correct decryption. */ + +#define MBEDTLS_PKCS12_DERIVE_KEY 1 /**< encryption/decryption key */ +#define MBEDTLS_PKCS12_DERIVE_IV 2 /**< initialization vector */ +#define MBEDTLS_PKCS12_DERIVE_MAC_KEY 3 /**< integrity / MAC key */ + +#define MBEDTLS_PKCS12_PBE_DECRYPT 0 +#define MBEDTLS_PKCS12_PBE_ENCRYPT 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief PKCS12 Password Based function (encryption / decryption) + * for pbeWithSHAAnd128BitRC4 + * + * \param pbe_params an ASN1 buffer containing the pkcs-12PbeParams structure + * \param mode either MBEDTLS_PKCS12_PBE_ENCRYPT or MBEDTLS_PKCS12_PBE_DECRYPT + * \param pwd the password used (may be NULL if no password is used) + * \param pwdlen length of the password (may be 0) + * \param input the input data + * \param len data length + * \param output the output buffer + * + * \return 0 if successful, or a MBEDTLS_ERR_XXX code + */ +int mbedtls_pkcs12_pbe_sha1_rc4_128( mbedtls_asn1_buf *pbe_params, int mode, + const unsigned char *pwd, size_t pwdlen, + const unsigned char *input, size_t len, + unsigned char *output ); + +/** + * \brief PKCS12 Password Based function (encryption / decryption) + * for cipher-based and mbedtls_md-based PBE's + * + * \param pbe_params an ASN1 buffer containing the pkcs-12PbeParams structure + * \param mode either MBEDTLS_PKCS12_PBE_ENCRYPT or MBEDTLS_PKCS12_PBE_DECRYPT + * \param cipher_type the cipher used + * \param md_type the mbedtls_md used + * \param pwd the password used (may be NULL if no password is used) + * \param pwdlen length of the password (may be 0) + * \param input the input data + * \param len data length + * \param output the output buffer + * + * \return 0 if successful, or a MBEDTLS_ERR_XXX code + */ +int mbedtls_pkcs12_pbe( mbedtls_asn1_buf *pbe_params, int mode, + mbedtls_cipher_type_t cipher_type, mbedtls_md_type_t md_type, + const unsigned char *pwd, size_t pwdlen, + const unsigned char *input, size_t len, + unsigned char *output ); + +/** + * \brief The PKCS#12 derivation function uses a password and a salt + * to produce pseudo-random bits for a particular "purpose". + * + * Depending on the given id, this function can produce an + * encryption/decryption key, an nitialization vector or an + * integrity key. + * + * \param data buffer to store the derived data in + * \param datalen length to fill + * \param pwd password to use (may be NULL if no password is used) + * \param pwdlen length of the password (may be 0) + * \param salt salt buffer to use + * \param saltlen length of the salt + * \param mbedtls_md mbedtls_md type to use during the derivation + * \param id id that describes the purpose (can be MBEDTLS_PKCS12_DERIVE_KEY, + * MBEDTLS_PKCS12_DERIVE_IV or MBEDTLS_PKCS12_DERIVE_MAC_KEY) + * \param iterations number of iterations + * + * \return 0 if successful, or a MD, BIGNUM type error. + */ +int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, + const unsigned char *pwd, size_t pwdlen, + const unsigned char *salt, size_t saltlen, + mbedtls_md_type_t mbedtls_md, int id, int iterations ); + +#ifdef __cplusplus +} +#endif + +#endif /* pkcs12.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/pkcs5.h b/tools/sdk/include/mbedtls/mbedtls/pkcs5.h new file mode 100644 index 00000000..ec5cb9e7 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/pkcs5.h @@ -0,0 +1,94 @@ +/** + * \file pkcs5.h + * + * \brief PKCS#5 functions + * + * \author Mathias Olsson + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_PKCS5_H +#define MBEDTLS_PKCS5_H + +#include "asn1.h" +#include "md.h" + +#include +#include + +#define MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA -0x2f80 /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_PKCS5_INVALID_FORMAT -0x2f00 /**< Unexpected ASN.1 data. */ +#define MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE -0x2e80 /**< Requested encryption or digest alg not available. */ +#define MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH -0x2e00 /**< Given private key password does not allow for correct decryption. */ + +#define MBEDTLS_PKCS5_DECRYPT 0 +#define MBEDTLS_PKCS5_ENCRYPT 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief PKCS#5 PBES2 function + * + * \param pbe_params the ASN.1 algorithm parameters + * \param mode either MBEDTLS_PKCS5_DECRYPT or MBEDTLS_PKCS5_ENCRYPT + * \param pwd password to use when generating key + * \param pwdlen length of password + * \param data data to process + * \param datalen length of data + * \param output output buffer + * + * \returns 0 on success, or a MBEDTLS_ERR_XXX code if verification fails. + */ +int mbedtls_pkcs5_pbes2( const mbedtls_asn1_buf *pbe_params, int mode, + const unsigned char *pwd, size_t pwdlen, + const unsigned char *data, size_t datalen, + unsigned char *output ); + +/** + * \brief PKCS#5 PBKDF2 using HMAC + * + * \param ctx Generic HMAC context + * \param password Password to use when generating key + * \param plen Length of password + * \param salt Salt to use when generating key + * \param slen Length of salt + * \param iteration_count Iteration count + * \param key_length Length of generated key in bytes + * \param output Generated key. Must be at least as big as key_length + * + * \returns 0 on success, or a MBEDTLS_ERR_XXX code if verification fails. + */ +int mbedtls_pkcs5_pbkdf2_hmac( mbedtls_md_context_t *ctx, const unsigned char *password, + size_t plen, const unsigned char *salt, size_t slen, + unsigned int iteration_count, + uint32_t key_length, unsigned char *output ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_pkcs5_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* pkcs5.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/platform.h b/tools/sdk/include/mbedtls/mbedtls/platform.h new file mode 100644 index 00000000..caf8f252 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/platform.h @@ -0,0 +1,324 @@ +/** + * \file platform.h + * + * \brief mbed TLS Platform abstraction layer + * + * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_PLATFORM_H +#define MBEDTLS_PLATFORM_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them on the compiler command line. + * \{ + */ + +#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) +#include +#include +#include +#if !defined(MBEDTLS_PLATFORM_STD_SNPRINTF) +#if defined(_WIN32) +#define MBEDTLS_PLATFORM_STD_SNPRINTF mbedtls_platform_win32_snprintf /**< Default snprintf to use */ +#else +#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< Default snprintf to use */ +#endif +#endif +#if !defined(MBEDTLS_PLATFORM_STD_PRINTF) +#define MBEDTLS_PLATFORM_STD_PRINTF printf /**< Default printf to use */ +#endif +#if !defined(MBEDTLS_PLATFORM_STD_FPRINTF) +#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use */ +#endif +#if !defined(MBEDTLS_PLATFORM_STD_CALLOC) +#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use */ +#endif +#if !defined(MBEDTLS_PLATFORM_STD_FREE) +#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use */ +#endif +#if !defined(MBEDTLS_PLATFORM_STD_EXIT) +#define MBEDTLS_PLATFORM_STD_EXIT exit /**< Default exit to use */ +#endif +#if !defined(MBEDTLS_PLATFORM_STD_TIME) +#define MBEDTLS_PLATFORM_STD_TIME time /**< Default time to use */ +#endif +#if !defined(MBEDTLS_PLATFORM_STD_EXIT_SUCCESS) +#define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS EXIT_SUCCESS /**< Default exit value to use */ +#endif +#if !defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE) +#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE EXIT_FAILURE /**< Default exit value to use */ +#endif +#if defined(MBEDTLS_FS_IO) +#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ) +#define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read +#endif +#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE) +#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write +#endif +#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_FILE) +#define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile" +#endif +#endif /* MBEDTLS_FS_IO */ +#else /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */ +#if defined(MBEDTLS_PLATFORM_STD_MEM_HDR) +#include MBEDTLS_PLATFORM_STD_MEM_HDR +#endif +#endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */ + + +/* \} name SECTION: Module settings */ + +/* + * The function pointers for calloc and free + */ +#if defined(MBEDTLS_PLATFORM_MEMORY) +#if defined(MBEDTLS_PLATFORM_FREE_MACRO) && \ + defined(MBEDTLS_PLATFORM_CALLOC_MACRO) +#define mbedtls_free MBEDTLS_PLATFORM_FREE_MACRO +#define mbedtls_calloc MBEDTLS_PLATFORM_CALLOC_MACRO +#else +/* For size_t */ +#include +extern void * (*mbedtls_calloc)( size_t n, size_t size ); +extern void (*mbedtls_free)( void *ptr ); + +/** + * \brief Set your own memory implementation function pointers + * + * \param calloc_func the calloc function implementation + * \param free_func the free function implementation + * + * \return 0 if successful + */ +int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ), + void (*free_func)( void * ) ); +#endif /* MBEDTLS_PLATFORM_FREE_MACRO && MBEDTLS_PLATFORM_CALLOC_MACRO */ +#else /* !MBEDTLS_PLATFORM_MEMORY */ +#define mbedtls_free free +#define mbedtls_calloc calloc +#endif /* MBEDTLS_PLATFORM_MEMORY && !MBEDTLS_PLATFORM_{FREE,CALLOC}_MACRO */ + +/* + * The function pointers for fprintf + */ +#if defined(MBEDTLS_PLATFORM_FPRINTF_ALT) +/* We need FILE * */ +#include +extern int (*mbedtls_fprintf)( FILE *stream, const char *format, ... ); + +/** + * \brief Set your own fprintf function pointer + * + * \param fprintf_func the fprintf function implementation + * + * \return 0 + */ +int mbedtls_platform_set_fprintf( int (*fprintf_func)( FILE *stream, const char *, + ... ) ); +#else +#if defined(MBEDTLS_PLATFORM_FPRINTF_MACRO) +#define mbedtls_fprintf MBEDTLS_PLATFORM_FPRINTF_MACRO +#else +#define mbedtls_fprintf fprintf +#endif /* MBEDTLS_PLATFORM_FPRINTF_MACRO */ +#endif /* MBEDTLS_PLATFORM_FPRINTF_ALT */ + +/* + * The function pointers for printf + */ +#if defined(MBEDTLS_PLATFORM_PRINTF_ALT) +extern int (*mbedtls_printf)( const char *format, ... ); + +/** + * \brief Set your own printf function pointer + * + * \param printf_func the printf function implementation + * + * \return 0 + */ +int mbedtls_platform_set_printf( int (*printf_func)( const char *, ... ) ); +#else /* !MBEDTLS_PLATFORM_PRINTF_ALT */ +#if defined(MBEDTLS_PLATFORM_PRINTF_MACRO) +#define mbedtls_printf MBEDTLS_PLATFORM_PRINTF_MACRO +#else +#define mbedtls_printf printf +#endif /* MBEDTLS_PLATFORM_PRINTF_MACRO */ +#endif /* MBEDTLS_PLATFORM_PRINTF_ALT */ + +/* + * The function pointers for snprintf + * + * The snprintf implementation should conform to C99: + * - it *must* always correctly zero-terminate the buffer + * (except when n == 0, then it must leave the buffer untouched) + * - however it is acceptable to return -1 instead of the required length when + * the destination buffer is too short. + */ +#if defined(_WIN32) +/* For Windows (inc. MSYS2), we provide our own fixed implementation */ +int mbedtls_platform_win32_snprintf( char *s, size_t n, const char *fmt, ... ); +#endif + +#if defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) +extern int (*mbedtls_snprintf)( char * s, size_t n, const char * format, ... ); + +/** + * \brief Set your own snprintf function pointer + * + * \param snprintf_func the snprintf function implementation + * + * \return 0 + */ +int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n, + const char * format, ... ) ); +#else /* MBEDTLS_PLATFORM_SNPRINTF_ALT */ +#if defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO) +#define mbedtls_snprintf MBEDTLS_PLATFORM_SNPRINTF_MACRO +#else +#define mbedtls_snprintf snprintf +#endif /* MBEDTLS_PLATFORM_SNPRINTF_MACRO */ +#endif /* MBEDTLS_PLATFORM_SNPRINTF_ALT */ + +/* + * The function pointers for exit + */ +#if defined(MBEDTLS_PLATFORM_EXIT_ALT) +extern void (*mbedtls_exit)( int status ); + +/** + * \brief Set your own exit function pointer + * + * \param exit_func the exit function implementation + * + * \return 0 + */ +int mbedtls_platform_set_exit( void (*exit_func)( int status ) ); +#else +#if defined(MBEDTLS_PLATFORM_EXIT_MACRO) +#define mbedtls_exit MBEDTLS_PLATFORM_EXIT_MACRO +#else +#define mbedtls_exit exit +#endif /* MBEDTLS_PLATFORM_EXIT_MACRO */ +#endif /* MBEDTLS_PLATFORM_EXIT_ALT */ + +/* + * The default exit values + */ +#if defined(MBEDTLS_PLATFORM_STD_EXIT_SUCCESS) +#define MBEDTLS_EXIT_SUCCESS MBEDTLS_PLATFORM_STD_EXIT_SUCCESS +#else +#define MBEDTLS_EXIT_SUCCESS 0 +#endif +#if defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE) +#define MBEDTLS_EXIT_FAILURE MBEDTLS_PLATFORM_STD_EXIT_FAILURE +#else +#define MBEDTLS_EXIT_FAILURE 1 +#endif + +/* + * The time_t datatype + */ +#if defined(MBEDTLS_PLATFORM_TIME_TYPE_MACRO) +typedef MBEDTLS_PLATFORM_TIME_TYPE_MACRO mbedtls_time_t; +#else +/* For time_t */ +#include +typedef time_t mbedtls_time_t; +#endif /* MBEDTLS_PLATFORM_TIME_TYPE_MACRO */ + +/* + * The function pointers for time + */ +#if defined(MBEDTLS_PLATFORM_TIME_ALT) +extern mbedtls_time_t (*mbedtls_time)( mbedtls_time_t* time ); + +/** + * \brief Set your own time function pointer + * + * \param time_func the time function implementation + * + * \return 0 + */ +int mbedtls_platform_set_time( mbedtls_time_t (*time_func)( mbedtls_time_t* time ) ); +#else +#if defined(MBEDTLS_PLATFORM_TIME_MACRO) +#define mbedtls_time MBEDTLS_PLATFORM_TIME_MACRO +#else +#define mbedtls_time time +#endif /* MBEDTLS_PLATFORM_TIME_MACRO */ +#endif /* MBEDTLS_PLATFORM_TIME_ALT */ + +/* + * The function pointers for reading from and writing a seed file to + * Non-Volatile storage (NV) in a platform-independent way + * + * Only enabled when the NV seed entropy source is enabled + */ +#if defined(MBEDTLS_ENTROPY_NV_SEED) +#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) && defined(MBEDTLS_FS_IO) +/* Internal standard platform definitions */ +int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len ); +int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len ); +#endif + +#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT) +extern int (*mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len ); +extern int (*mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len ); + +/** + * \brief Set your own seed file writing/reading functions + * + * \param nv_seed_read_func the seed reading function implementation + * \param nv_seed_write_func the seed writing function implementation + * + * \return 0 + */ +int mbedtls_platform_set_nv_seed( + int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ), + int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len ) + ); +#else +#if defined(MBEDTLS_PLATFORM_NV_SEED_READ_MACRO) && \ + defined(MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO) +#define mbedtls_nv_seed_read MBEDTLS_PLATFORM_NV_SEED_READ_MACRO +#define mbedtls_nv_seed_write MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO +#else +#define mbedtls_nv_seed_read mbedtls_platform_std_nv_seed_read +#define mbedtls_nv_seed_write mbedtls_platform_std_nv_seed_write +#endif +#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ +#endif /* MBEDTLS_ENTROPY_NV_SEED */ + +#ifdef __cplusplus +} +#endif + +#endif /* platform.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ripemd160.h b/tools/sdk/include/mbedtls/mbedtls/ripemd160.h new file mode 100644 index 00000000..7083fc85 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ripemd160.h @@ -0,0 +1,138 @@ +/** + * \file ripemd160.h + * + * \brief RIPE MD-160 message digest + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_RIPEMD160_H +#define MBEDTLS_RIPEMD160_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#if !defined(MBEDTLS_RIPEMD160_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief RIPEMD-160 context structure + */ +typedef struct +{ + uint32_t total[2]; /*!< number of bytes processed */ + uint32_t state[5]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ +} +mbedtls_ripemd160_context; + +/** + * \brief Initialize RIPEMD-160 context + * + * \param ctx RIPEMD-160 context to be initialized + */ +void mbedtls_ripemd160_init( mbedtls_ripemd160_context *ctx ); + +/** + * \brief Clear RIPEMD-160 context + * + * \param ctx RIPEMD-160 context to be cleared + */ +void mbedtls_ripemd160_free( mbedtls_ripemd160_context *ctx ); + +/** + * \brief Clone (the state of) an RIPEMD-160 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_ripemd160_clone( mbedtls_ripemd160_context *dst, + const mbedtls_ripemd160_context *src ); + +/** + * \brief RIPEMD-160 context setup + * + * \param ctx context to be initialized + */ +void mbedtls_ripemd160_starts( mbedtls_ripemd160_context *ctx ); + +/** + * \brief RIPEMD-160 process buffer + * + * \param ctx RIPEMD-160 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_ripemd160_update( mbedtls_ripemd160_context *ctx, + const unsigned char *input, size_t ilen ); + +/** + * \brief RIPEMD-160 final digest + * + * \param ctx RIPEMD-160 context + * \param output RIPEMD-160 checksum result + */ +void mbedtls_ripemd160_finish( mbedtls_ripemd160_context *ctx, unsigned char output[20] ); + +/* Internal use */ +void mbedtls_ripemd160_process( mbedtls_ripemd160_context *ctx, const unsigned char data[64] ); + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_RIPEMD160_ALT */ +#include "ripemd160.h" +#endif /* MBEDTLS_RIPEMD160_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Output = RIPEMD-160( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output RIPEMD-160 checksum result + */ +void mbedtls_ripemd160( const unsigned char *input, size_t ilen, + unsigned char output[20] ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_ripemd160_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* mbedtls_ripemd160.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/rsa.h b/tools/sdk/include/mbedtls/mbedtls/rsa.h new file mode 100644 index 00000000..9c8645df --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/rsa.h @@ -0,0 +1,652 @@ +/** + * \file rsa.h + * + * \brief The RSA public-key cryptosystem + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_RSA_H +#define MBEDTLS_RSA_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "bignum.h" +#include "md.h" + +#if defined(MBEDTLS_THREADING_C) +#include "threading.h" +#endif + +/* + * RSA Error codes + */ +#define MBEDTLS_ERR_RSA_BAD_INPUT_DATA -0x4080 /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_RSA_INVALID_PADDING -0x4100 /**< Input data contains invalid padding and is rejected. */ +#define MBEDTLS_ERR_RSA_KEY_GEN_FAILED -0x4180 /**< Something failed during generation of a key. */ +#define MBEDTLS_ERR_RSA_KEY_CHECK_FAILED -0x4200 /**< Key failed to pass the library's validity check. */ +#define MBEDTLS_ERR_RSA_PUBLIC_FAILED -0x4280 /**< The public key operation failed. */ +#define MBEDTLS_ERR_RSA_PRIVATE_FAILED -0x4300 /**< The private key operation failed. */ +#define MBEDTLS_ERR_RSA_VERIFY_FAILED -0x4380 /**< The PKCS#1 verification failed. */ +#define MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE -0x4400 /**< The output buffer for decryption is not large enough. */ +#define MBEDTLS_ERR_RSA_RNG_FAILED -0x4480 /**< The random generator failed to generate non-zeros. */ + +/* + * RSA constants + */ +#define MBEDTLS_RSA_PUBLIC 0 +#define MBEDTLS_RSA_PRIVATE 1 + +#define MBEDTLS_RSA_PKCS_V15 0 +#define MBEDTLS_RSA_PKCS_V21 1 + +#define MBEDTLS_RSA_SIGN 1 +#define MBEDTLS_RSA_CRYPT 2 + +#define MBEDTLS_RSA_SALT_LEN_ANY -1 + +/* + * The above constants may be used even if the RSA module is compile out, + * eg for alternative (PKCS#11) RSA implemenations in the PK layers. + */ +#if defined(MBEDTLS_RSA_C) + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief RSA context structure + */ +typedef struct +{ + int ver; /*!< always 0 */ + size_t len; /*!< size(N) in chars */ + + mbedtls_mpi N; /*!< public modulus */ + mbedtls_mpi E; /*!< public exponent */ + + mbedtls_mpi D; /*!< private exponent */ + mbedtls_mpi P; /*!< 1st prime factor */ + mbedtls_mpi Q; /*!< 2nd prime factor */ + mbedtls_mpi DP; /*!< D % (P - 1) */ + mbedtls_mpi DQ; /*!< D % (Q - 1) */ + mbedtls_mpi QP; /*!< 1 / (Q % P) */ + + mbedtls_mpi RN; /*!< cached R^2 mod N */ + mbedtls_mpi RP; /*!< cached R^2 mod P */ + mbedtls_mpi RQ; /*!< cached R^2 mod Q */ + + mbedtls_mpi Vi; /*!< cached blinding value */ + mbedtls_mpi Vf; /*!< cached un-blinding value */ + + int padding; /*!< MBEDTLS_RSA_PKCS_V15 for 1.5 padding and + RSA_PKCS_v21 for OAEP/PSS */ + int hash_id; /*!< Hash identifier of mbedtls_md_type_t as + specified in the mbedtls_md.h header file + for the EME-OAEP and EMSA-PSS + encoding */ +#if defined(MBEDTLS_THREADING_C) + mbedtls_threading_mutex_t mutex; /*!< Thread-safety mutex */ +#endif +} +mbedtls_rsa_context; + +/** + * \brief Initialize an RSA context + * + * Note: Set padding to MBEDTLS_RSA_PKCS_V21 for the RSAES-OAEP + * encryption scheme and the RSASSA-PSS signature scheme. + * + * \param ctx RSA context to be initialized + * \param padding MBEDTLS_RSA_PKCS_V15 or MBEDTLS_RSA_PKCS_V21 + * \param hash_id MBEDTLS_RSA_PKCS_V21 hash identifier + * + * \note The hash_id parameter is actually ignored + * when using MBEDTLS_RSA_PKCS_V15 padding. + * + * \note Choice of padding mode is strictly enforced for private key + * operations, since there might be security concerns in + * mixing padding modes. For public key operations it's merely + * a default value, which can be overriden by calling specific + * rsa_rsaes_xxx or rsa_rsassa_xxx functions. + * + * \note The chosen hash is always used for OEAP encryption. + * For PSS signatures, it's always used for making signatures, + * but can be overriden (and always is, if set to + * MBEDTLS_MD_NONE) for verifying them. + */ +void mbedtls_rsa_init( mbedtls_rsa_context *ctx, + int padding, + int hash_id); + +/** + * \brief Set padding for an already initialized RSA context + * See \c mbedtls_rsa_init() for details. + * + * \param ctx RSA context to be set + * \param padding MBEDTLS_RSA_PKCS_V15 or MBEDTLS_RSA_PKCS_V21 + * \param hash_id MBEDTLS_RSA_PKCS_V21 hash identifier + */ +void mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding, int hash_id); + +/** + * \brief Generate an RSA keypair + * + * \param ctx RSA context that will hold the key + * \param f_rng RNG function + * \param p_rng RNG parameter + * \param nbits size of the public key in bits + * \param exponent public exponent (e.g., 65537) + * + * \note mbedtls_rsa_init() must be called beforehand to setup + * the RSA context. + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + */ +int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + unsigned int nbits, int exponent ); + +/** + * \brief Check a public RSA key + * + * \param ctx RSA context to be checked + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + */ +int mbedtls_rsa_check_pubkey( const mbedtls_rsa_context *ctx ); + +/** + * \brief Check a private RSA key + * + * \param ctx RSA context to be checked + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + */ +int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx ); + +/** + * \brief Check a public-private RSA key pair. + * Check each of the contexts, and make sure they match. + * + * \param pub RSA context holding the public key + * \param prv RSA context holding the private key + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + */ +int mbedtls_rsa_check_pub_priv( const mbedtls_rsa_context *pub, const mbedtls_rsa_context *prv ); + +/** + * \brief Do an RSA public key operation + * + * \param ctx RSA context + * \param input input buffer + * \param output output buffer + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + * + * \note This function does NOT take care of message + * padding. Also, be sure to set input[0] = 0 or assure that + * input is smaller than N. + * + * \note The input and output buffers must be large + * enough (eg. 128 bytes if RSA-1024 is used). + */ +int mbedtls_rsa_public( mbedtls_rsa_context *ctx, + const unsigned char *input, + unsigned char *output ); + +/** + * \brief Do an RSA private key operation + * + * \param ctx RSA context + * \param f_rng RNG function (Needed for blinding) + * \param p_rng RNG parameter + * \param input input buffer + * \param output output buffer + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The input and output buffers must be large + * enough (eg. 128 bytes if RSA-1024 is used). + */ +int mbedtls_rsa_private( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + const unsigned char *input, + unsigned char *output ); + +/** + * \brief Generic wrapper to perform a PKCS#1 encryption using the + * mode from the context. Add the message padding, then do an + * RSA operation. + * + * \param ctx RSA context + * \param f_rng RNG function (Needed for padding and PKCS#1 v2.1 encoding + * and MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param ilen contains the plaintext length + * \param input buffer holding the data to be encrypted + * \param output buffer that will hold the ciphertext + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The output buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + */ +int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t ilen, + const unsigned char *input, + unsigned char *output ); + +/** + * \brief Perform a PKCS#1 v1.5 encryption (RSAES-PKCS1-v1_5-ENCRYPT) + * + * \param ctx RSA context + * \param f_rng RNG function (Needed for padding and MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param ilen contains the plaintext length + * \param input buffer holding the data to be encrypted + * \param output buffer that will hold the ciphertext + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The output buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + */ +int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t ilen, + const unsigned char *input, + unsigned char *output ); + +/** + * \brief Perform a PKCS#1 v2.1 OAEP encryption (RSAES-OAEP-ENCRYPT) + * + * \param ctx RSA context + * \param f_rng RNG function (Needed for padding and PKCS#1 v2.1 encoding + * and MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param label buffer holding the custom label to use + * \param label_len contains the label length + * \param ilen contains the plaintext length + * \param input buffer holding the data to be encrypted + * \param output buffer that will hold the ciphertext + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The output buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + */ +int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + const unsigned char *label, size_t label_len, + size_t ilen, + const unsigned char *input, + unsigned char *output ); + +/** + * \brief Generic wrapper to perform a PKCS#1 decryption using the + * mode from the context. Do an RSA operation, then remove + * the message padding + * + * \param ctx RSA context + * \param f_rng RNG function (Only needed for MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param olen will contain the plaintext length + * \param input buffer holding the encrypted data + * \param output buffer that will hold the plaintext + * \param output_max_len maximum length of the output buffer + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The output buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise + * an error is thrown. + */ +int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len ); + +/** + * \brief Perform a PKCS#1 v1.5 decryption (RSAES-PKCS1-v1_5-DECRYPT) + * + * \param ctx RSA context + * \param f_rng RNG function (Only needed for MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param olen will contain the plaintext length + * \param input buffer holding the encrypted data + * \param output buffer that will hold the plaintext + * \param output_max_len maximum length of the output buffer + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The output buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise + * an error is thrown. + */ +int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len ); + +/** + * \brief Perform a PKCS#1 v2.1 OAEP decryption (RSAES-OAEP-DECRYPT) + * + * \param ctx RSA context + * \param f_rng RNG function (Only needed for MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param label buffer holding the custom label to use + * \param label_len contains the label length + * \param olen will contain the plaintext length + * \param input buffer holding the encrypted data + * \param output buffer that will hold the plaintext + * \param output_max_len maximum length of the output buffer + * + * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The output buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise + * an error is thrown. + */ +int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + const unsigned char *label, size_t label_len, + size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len ); + +/** + * \brief Generic wrapper to perform a PKCS#1 signature using the + * mode from the context. Do a private RSA operation to sign + * a message digest + * + * \param ctx RSA context + * \param f_rng RNG function (Needed for PKCS#1 v2.1 encoding and for + * MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param md_alg a MBEDTLS_MD_XXX (use MBEDTLS_MD_NONE for signing raw data) + * \param hashlen message digest length (for MBEDTLS_MD_NONE only) + * \param hash buffer holding the message digest + * \param sig buffer that will hold the ciphertext + * + * \return 0 if the signing operation was successful, + * or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The "sig" buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + * + * \note In case of PKCS#1 v2.1 encoding, see comments on + * \note \c mbedtls_rsa_rsassa_pss_sign() for details on md_alg and hash_id. + */ +int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ); + +/** + * \brief Perform a PKCS#1 v1.5 signature (RSASSA-PKCS1-v1_5-SIGN) + * + * \param ctx RSA context + * \param f_rng RNG function (Only needed for MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param md_alg a MBEDTLS_MD_XXX (use MBEDTLS_MD_NONE for signing raw data) + * \param hashlen message digest length (for MBEDTLS_MD_NONE only) + * \param hash buffer holding the message digest + * \param sig buffer that will hold the ciphertext + * + * \return 0 if the signing operation was successful, + * or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The "sig" buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + */ +int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ); + +/** + * \brief Perform a PKCS#1 v2.1 PSS signature (RSASSA-PSS-SIGN) + * + * \param ctx RSA context + * \param f_rng RNG function (Needed for PKCS#1 v2.1 encoding and for + * MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param md_alg a MBEDTLS_MD_XXX (use MBEDTLS_MD_NONE for signing raw data) + * \param hashlen message digest length (for MBEDTLS_MD_NONE only) + * \param hash buffer holding the message digest + * \param sig buffer that will hold the ciphertext + * + * \return 0 if the signing operation was successful, + * or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The "sig" buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + * + * \note The hash_id in the RSA context is the one used for the + * encoding. md_alg in the function call is the type of hash + * that is encoded. According to RFC 3447 it is advised to + * keep both hashes the same. + */ +int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ); + +/** + * \brief Generic wrapper to perform a PKCS#1 verification using the + * mode from the context. Do a public RSA operation and check + * the message digest + * + * \param ctx points to an RSA public key + * \param f_rng RNG function (Only needed for MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param md_alg a MBEDTLS_MD_XXX (use MBEDTLS_MD_NONE for signing raw data) + * \param hashlen message digest length (for MBEDTLS_MD_NONE only) + * \param hash buffer holding the message digest + * \param sig buffer holding the ciphertext + * + * \return 0 if the verify operation was successful, + * or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The "sig" buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + * + * \note In case of PKCS#1 v2.1 encoding, see comments on + * \c mbedtls_rsa_rsassa_pss_verify() about md_alg and hash_id. + */ +int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + const unsigned char *sig ); + +/** + * \brief Perform a PKCS#1 v1.5 verification (RSASSA-PKCS1-v1_5-VERIFY) + * + * \param ctx points to an RSA public key + * \param f_rng RNG function (Only needed for MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param md_alg a MBEDTLS_MD_XXX (use MBEDTLS_MD_NONE for signing raw data) + * \param hashlen message digest length (for MBEDTLS_MD_NONE only) + * \param hash buffer holding the message digest + * \param sig buffer holding the ciphertext + * + * \return 0 if the verify operation was successful, + * or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The "sig" buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + */ +int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + const unsigned char *sig ); + +/** + * \brief Perform a PKCS#1 v2.1 PSS verification (RSASSA-PSS-VERIFY) + * (This is the "simple" version.) + * + * \param ctx points to an RSA public key + * \param f_rng RNG function (Only needed for MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param md_alg a MBEDTLS_MD_XXX (use MBEDTLS_MD_NONE for signing raw data) + * \param hashlen message digest length (for MBEDTLS_MD_NONE only) + * \param hash buffer holding the message digest + * \param sig buffer holding the ciphertext + * + * \return 0 if the verify operation was successful, + * or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The "sig" buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + * + * \note The hash_id in the RSA context is the one used for the + * verification. md_alg in the function call is the type of + * hash that is verified. According to RFC 3447 it is advised to + * keep both hashes the same. If hash_id in the RSA context is + * unset, the md_alg from the function call is used. + */ +int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + const unsigned char *sig ); + +/** + * \brief Perform a PKCS#1 v2.1 PSS verification (RSASSA-PSS-VERIFY) + * (This is the version with "full" options.) + * + * \param ctx points to an RSA public key + * \param f_rng RNG function (Only needed for MBEDTLS_RSA_PRIVATE) + * \param p_rng RNG parameter + * \param mode MBEDTLS_RSA_PUBLIC or MBEDTLS_RSA_PRIVATE + * \param md_alg a MBEDTLS_MD_XXX (use MBEDTLS_MD_NONE for signing raw data) + * \param hashlen message digest length (for MBEDTLS_MD_NONE only) + * \param hash buffer holding the message digest + * \param mgf1_hash_id message digest used for mask generation + * \param expected_salt_len Length of the salt used in padding, use + * MBEDTLS_RSA_SALT_LEN_ANY to accept any salt length + * \param sig buffer holding the ciphertext + * + * \return 0 if the verify operation was successful, + * or an MBEDTLS_ERR_RSA_XXX error code + * + * \note The "sig" buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + * + * \note The hash_id in the RSA context is ignored. + */ +int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + mbedtls_md_type_t mgf1_hash_id, + int expected_salt_len, + const unsigned char *sig ); + +/** + * \brief Copy the components of an RSA context + * + * \param dst Destination context + * \param src Source context + * + * \return 0 on success, + * MBEDTLS_ERR_MPI_ALLOC_FAILED on memory allocation failure + */ +int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src ); + +/** + * \brief Free the components of an RSA key + * + * \param ctx RSA Context to free + */ +void mbedtls_rsa_free( mbedtls_rsa_context *ctx ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_rsa_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_RSA_C */ + +#endif /* rsa.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/sha1.h b/tools/sdk/include/mbedtls/mbedtls/sha1.h new file mode 100644 index 00000000..7a67c6c1 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/sha1.h @@ -0,0 +1,136 @@ +/** + * \file sha1.h + * + * \brief SHA-1 cryptographic hash function + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SHA1_H +#define MBEDTLS_SHA1_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#if !defined(MBEDTLS_SHA1_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief SHA-1 context structure + */ +typedef struct +{ + uint32_t total[2]; /*!< number of bytes processed */ + uint32_t state[5]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ +} +mbedtls_sha1_context; + +/** + * \brief Initialize SHA-1 context + * + * \param ctx SHA-1 context to be initialized + */ +void mbedtls_sha1_init( mbedtls_sha1_context *ctx ); + +/** + * \brief Clear SHA-1 context + * + * \param ctx SHA-1 context to be cleared + */ +void mbedtls_sha1_free( mbedtls_sha1_context *ctx ); + +/** + * \brief Clone (the state of) a SHA-1 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_sha1_clone( mbedtls_sha1_context *dst, + const mbedtls_sha1_context *src ); + +/** + * \brief SHA-1 context setup + * + * \param ctx context to be initialized + */ +void mbedtls_sha1_starts( mbedtls_sha1_context *ctx ); + +/** + * \brief SHA-1 process buffer + * + * \param ctx SHA-1 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_sha1_update( mbedtls_sha1_context *ctx, const unsigned char *input, size_t ilen ); + +/** + * \brief SHA-1 final digest + * + * \param ctx SHA-1 context + * \param output SHA-1 checksum result + */ +void mbedtls_sha1_finish( mbedtls_sha1_context *ctx, unsigned char output[20] ); + +/* Internal use */ +void mbedtls_sha1_process( mbedtls_sha1_context *ctx, const unsigned char data[64] ); + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_SHA1_ALT */ +#include "sha1_alt.h" +#endif /* MBEDTLS_SHA1_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Output = SHA-1( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output SHA-1 checksum result + */ +void mbedtls_sha1( const unsigned char *input, size_t ilen, unsigned char output[20] ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_sha1_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* mbedtls_sha1.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/sha256.h b/tools/sdk/include/mbedtls/mbedtls/sha256.h new file mode 100644 index 00000000..f8041adf --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/sha256.h @@ -0,0 +1,141 @@ +/** + * \file sha256.h + * + * \brief SHA-224 and SHA-256 cryptographic hash function + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SHA256_H +#define MBEDTLS_SHA256_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#if !defined(MBEDTLS_SHA256_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief SHA-256 context structure + */ +typedef struct +{ + uint32_t total[2]; /*!< number of bytes processed */ + uint32_t state[8]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ + int is224; /*!< 0 => SHA-256, else SHA-224 */ +} +mbedtls_sha256_context; + +/** + * \brief Initialize SHA-256 context + * + * \param ctx SHA-256 context to be initialized + */ +void mbedtls_sha256_init( mbedtls_sha256_context *ctx ); + +/** + * \brief Clear SHA-256 context + * + * \param ctx SHA-256 context to be cleared + */ +void mbedtls_sha256_free( mbedtls_sha256_context *ctx ); + +/** + * \brief Clone (the state of) a SHA-256 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_sha256_clone( mbedtls_sha256_context *dst, + const mbedtls_sha256_context *src ); + +/** + * \brief SHA-256 context setup + * + * \param ctx context to be initialized + * \param is224 0 = use SHA256, 1 = use SHA224 + */ +void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 ); + +/** + * \brief SHA-256 process buffer + * + * \param ctx SHA-256 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *input, + size_t ilen ); + +/** + * \brief SHA-256 final digest + * + * \param ctx SHA-256 context + * \param output SHA-224/256 checksum result + */ +void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32] ); + +/* Internal use */ +void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char data[64] ); + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_SHA256_ALT */ +#include "sha256_alt.h" +#endif /* MBEDTLS_SHA256_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Output = SHA-256( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output SHA-224/256 checksum result + * \param is224 0 = use SHA256, 1 = use SHA224 + */ +void mbedtls_sha256( const unsigned char *input, size_t ilen, + unsigned char output[32], int is224 ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_sha256_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* mbedtls_sha256.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/sha512.h b/tools/sdk/include/mbedtls/mbedtls/sha512.h new file mode 100644 index 00000000..12f4fab4 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/sha512.h @@ -0,0 +1,141 @@ +/** + * \file sha512.h + * + * \brief SHA-384 and SHA-512 cryptographic hash function + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SHA512_H +#define MBEDTLS_SHA512_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#if !defined(MBEDTLS_SHA512_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief SHA-512 context structure + */ +typedef struct +{ + uint64_t total[2]; /*!< number of bytes processed */ + uint64_t state[8]; /*!< intermediate digest state */ + unsigned char buffer[128]; /*!< data block being processed */ + int is384; /*!< 0 => SHA-512, else SHA-384 */ +} +mbedtls_sha512_context; + +/** + * \brief Initialize SHA-512 context + * + * \param ctx SHA-512 context to be initialized + */ +void mbedtls_sha512_init( mbedtls_sha512_context *ctx ); + +/** + * \brief Clear SHA-512 context + * + * \param ctx SHA-512 context to be cleared + */ +void mbedtls_sha512_free( mbedtls_sha512_context *ctx ); + +/** + * \brief Clone (the state of) a SHA-512 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_sha512_clone( mbedtls_sha512_context *dst, + const mbedtls_sha512_context *src ); + +/** + * \brief SHA-512 context setup + * + * \param ctx context to be initialized + * \param is384 0 = use SHA512, 1 = use SHA384 + */ +void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, int is384 ); + +/** + * \brief SHA-512 process buffer + * + * \param ctx SHA-512 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_sha512_update( mbedtls_sha512_context *ctx, const unsigned char *input, + size_t ilen ); + +/** + * \brief SHA-512 final digest + * + * \param ctx SHA-512 context + * \param output SHA-384/512 checksum result + */ +void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, unsigned char output[64] ); + +/* Internal use */ +void mbedtls_sha512_process( mbedtls_sha512_context *ctx, const unsigned char data[128] ); + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_SHA512_ALT */ +#include "sha512_alt.h" +#endif /* MBEDTLS_SHA512_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Output = SHA-512( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output SHA-384/512 checksum result + * \param is384 0 = use SHA512, 1 = use SHA384 + */ +void mbedtls_sha512( const unsigned char *input, size_t ilen, + unsigned char output[64], int is384 ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_sha512_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* mbedtls_sha512.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ssl.h b/tools/sdk/include/mbedtls/mbedtls/ssl.h new file mode 100644 index 00000000..82c07607 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ssl.h @@ -0,0 +1,2549 @@ +/** + * \file ssl.h + * + * \brief SSL/TLS functions. + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SSL_H +#define MBEDTLS_SSL_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "bignum.h" +#include "ecp.h" + +#include "ssl_ciphersuites.h" + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#include "x509_crt.h" +#include "x509_crl.h" +#endif + +#if defined(MBEDTLS_DHM_C) +#include "dhm.h" +#endif + +#if defined(MBEDTLS_ECDH_C) +#include "ecdh.h" +#endif + +#if defined(MBEDTLS_ZLIB_SUPPORT) +#include "zlib.h" +#endif + +#if defined(MBEDTLS_HAVE_TIME) +#include +#endif + +/* + * SSL Error codes + */ +#define MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE -0x7080 /**< The requested feature is not available. */ +#define MBEDTLS_ERR_SSL_BAD_INPUT_DATA -0x7100 /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_SSL_INVALID_MAC -0x7180 /**< Verification of the message MAC failed. */ +#define MBEDTLS_ERR_SSL_INVALID_RECORD -0x7200 /**< An invalid SSL record was received. */ +#define MBEDTLS_ERR_SSL_CONN_EOF -0x7280 /**< The connection indicated an EOF. */ +#define MBEDTLS_ERR_SSL_UNKNOWN_CIPHER -0x7300 /**< An unknown cipher was received. */ +#define MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN -0x7380 /**< The server has no ciphersuites in common with the client. */ +#define MBEDTLS_ERR_SSL_NO_RNG -0x7400 /**< No RNG was provided to the SSL module. */ +#define MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE -0x7480 /**< No client certification received from the client, but required by the authentication mode. */ +#define MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE -0x7500 /**< Our own certificate(s) is/are too large to send in an SSL message. */ +#define MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED -0x7580 /**< The own certificate is not set, but needed by the server. */ +#define MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED -0x7600 /**< The own private key or pre-shared key is not set, but needed. */ +#define MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED -0x7680 /**< No CA Chain is set, but required to operate. */ +#define MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE -0x7700 /**< An unexpected message was received from our peer. */ +#define MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE -0x7780 /**< A fatal alert message was received from our peer. */ +#define MBEDTLS_ERR_SSL_PEER_VERIFY_FAILED -0x7800 /**< Verification of our peer failed. */ +#define MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY -0x7880 /**< The peer notified us that the connection is going to be closed. */ +#define MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO -0x7900 /**< Processing of the ClientHello handshake message failed. */ +#define MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO -0x7980 /**< Processing of the ServerHello handshake message failed. */ +#define MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE -0x7A00 /**< Processing of the Certificate handshake message failed. */ +#define MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST -0x7A80 /**< Processing of the CertificateRequest handshake message failed. */ +#define MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE -0x7B00 /**< Processing of the ServerKeyExchange handshake message failed. */ +#define MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE -0x7B80 /**< Processing of the ServerHelloDone handshake message failed. */ +#define MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE -0x7C00 /**< Processing of the ClientKeyExchange handshake message failed. */ +#define MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP -0x7C80 /**< Processing of the ClientKeyExchange handshake message failed in DHM / ECDH Read Public. */ +#define MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS -0x7D00 /**< Processing of the ClientKeyExchange handshake message failed in DHM / ECDH Calculate Secret. */ +#define MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY -0x7D80 /**< Processing of the CertificateVerify handshake message failed. */ +#define MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC -0x7E00 /**< Processing of the ChangeCipherSpec handshake message failed. */ +#define MBEDTLS_ERR_SSL_BAD_HS_FINISHED -0x7E80 /**< Processing of the Finished handshake message failed. */ +#define MBEDTLS_ERR_SSL_ALLOC_FAILED -0x7F00 /**< Memory allocation failed */ +#define MBEDTLS_ERR_SSL_HW_ACCEL_FAILED -0x7F80 /**< Hardware acceleration function returned with error */ +#define MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH -0x6F80 /**< Hardware acceleration function skipped / left alone data */ +#define MBEDTLS_ERR_SSL_COMPRESSION_FAILED -0x6F00 /**< Processing of the compression / decompression failed */ +#define MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION -0x6E80 /**< Handshake protocol not within min/max boundaries */ +#define MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET -0x6E00 /**< Processing of the NewSessionTicket handshake message failed. */ +#define MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED -0x6D80 /**< Session ticket has expired. */ +#define MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH -0x6D00 /**< Public key type mismatch (eg, asked for RSA key exchange and presented EC key) */ +#define MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY -0x6C80 /**< Unknown identity received (eg, PSK identity) */ +#define MBEDTLS_ERR_SSL_INTERNAL_ERROR -0x6C00 /**< Internal error (eg, unexpected failure in lower-level module) */ +#define MBEDTLS_ERR_SSL_COUNTER_WRAPPING -0x6B80 /**< A counter would wrap (eg, too many messages exchanged). */ +#define MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO -0x6B00 /**< Unexpected message at ServerHello in renegotiation. */ +#define MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED -0x6A80 /**< DTLS client must retry for hello verification */ +#define MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL -0x6A00 /**< A buffer is too small to receive or write a message */ +#define MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE -0x6980 /**< None of the common ciphersuites is usable (eg, no suitable certificate, see debug messages). */ +#define MBEDTLS_ERR_SSL_WANT_READ -0x6900 /**< Connection requires a read call. */ +#define MBEDTLS_ERR_SSL_WANT_WRITE -0x6880 /**< Connection requires a write call. */ +#define MBEDTLS_ERR_SSL_TIMEOUT -0x6800 /**< The operation timed out. */ +#define MBEDTLS_ERR_SSL_CLIENT_RECONNECT -0x6780 /**< The client initiated a reconnect from the same port. */ +#define MBEDTLS_ERR_SSL_UNEXPECTED_RECORD -0x6700 /**< Record header looks valid but is not expected. */ + +/* + * Various constants + */ +#define MBEDTLS_SSL_MAJOR_VERSION_3 3 +#define MBEDTLS_SSL_MINOR_VERSION_0 0 /*!< SSL v3.0 */ +#define MBEDTLS_SSL_MINOR_VERSION_1 1 /*!< TLS v1.0 */ +#define MBEDTLS_SSL_MINOR_VERSION_2 2 /*!< TLS v1.1 */ +#define MBEDTLS_SSL_MINOR_VERSION_3 3 /*!< TLS v1.2 */ + +#define MBEDTLS_SSL_TRANSPORT_STREAM 0 /*!< TLS */ +#define MBEDTLS_SSL_TRANSPORT_DATAGRAM 1 /*!< DTLS */ + +#define MBEDTLS_SSL_MAX_HOST_NAME_LEN 255 /*!< Maximum host name defined in RFC 1035 */ + +/* RFC 6066 section 4, see also mfl_code_to_length in ssl_tls.c + * NONE must be zero so that memset()ing structure to zero works */ +#define MBEDTLS_SSL_MAX_FRAG_LEN_NONE 0 /*!< don't use this extension */ +#define MBEDTLS_SSL_MAX_FRAG_LEN_512 1 /*!< MaxFragmentLength 2^9 */ +#define MBEDTLS_SSL_MAX_FRAG_LEN_1024 2 /*!< MaxFragmentLength 2^10 */ +#define MBEDTLS_SSL_MAX_FRAG_LEN_2048 3 /*!< MaxFragmentLength 2^11 */ +#define MBEDTLS_SSL_MAX_FRAG_LEN_4096 4 /*!< MaxFragmentLength 2^12 */ +#define MBEDTLS_SSL_MAX_FRAG_LEN_INVALID 5 /*!< first invalid value */ + +#define MBEDTLS_SSL_IS_CLIENT 0 +#define MBEDTLS_SSL_IS_SERVER 1 + +#define MBEDTLS_SSL_IS_NOT_FALLBACK 0 +#define MBEDTLS_SSL_IS_FALLBACK 1 + +#define MBEDTLS_SSL_EXTENDED_MS_DISABLED 0 +#define MBEDTLS_SSL_EXTENDED_MS_ENABLED 1 + +#define MBEDTLS_SSL_ETM_DISABLED 0 +#define MBEDTLS_SSL_ETM_ENABLED 1 + +#define MBEDTLS_SSL_COMPRESS_NULL 0 +#define MBEDTLS_SSL_COMPRESS_DEFLATE 1 + +#define MBEDTLS_SSL_VERIFY_NONE 0 +#define MBEDTLS_SSL_VERIFY_OPTIONAL 1 +#define MBEDTLS_SSL_VERIFY_REQUIRED 2 +#define MBEDTLS_SSL_VERIFY_UNSET 3 /* Used only for sni_authmode */ + +#define MBEDTLS_SSL_LEGACY_RENEGOTIATION 0 +#define MBEDTLS_SSL_SECURE_RENEGOTIATION 1 + +#define MBEDTLS_SSL_RENEGOTIATION_DISABLED 0 +#define MBEDTLS_SSL_RENEGOTIATION_ENABLED 1 + +#define MBEDTLS_SSL_ANTI_REPLAY_DISABLED 0 +#define MBEDTLS_SSL_ANTI_REPLAY_ENABLED 1 + +#define MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED -1 +#define MBEDTLS_SSL_RENEGO_MAX_RECORDS_DEFAULT 16 + +#define MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION 0 +#define MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION 1 +#define MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE 2 + +#define MBEDTLS_SSL_TRUNC_HMAC_DISABLED 0 +#define MBEDTLS_SSL_TRUNC_HMAC_ENABLED 1 +#define MBEDTLS_SSL_TRUNCATED_HMAC_LEN 10 /* 80 bits, rfc 6066 section 7 */ + +#define MBEDTLS_SSL_SESSION_TICKETS_DISABLED 0 +#define MBEDTLS_SSL_SESSION_TICKETS_ENABLED 1 + +#define MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED 0 +#define MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED 1 + +#define MBEDTLS_SSL_ARC4_ENABLED 0 +#define MBEDTLS_SSL_ARC4_DISABLED 1 + +#define MBEDTLS_SSL_PRESET_DEFAULT 0 +#define MBEDTLS_SSL_PRESET_SUITEB 2 + +/* + * Default range for DTLS retransmission timer value, in milliseconds. + * RFC 6347 4.2.4.1 says from 1 second to 60 seconds. + */ +#define MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN 1000 +#define MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MAX 60000 + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them on the compiler command line. + * \{ + */ + +#if !defined(MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME) +#define MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ +#endif + +/* + * Maxium fragment length in bytes, + * determines the size of each of the two internal I/O buffers. + * + * Note: the RFC defines the default size of SSL / TLS messages. If you + * change the value here, other clients / servers may not be able to + * communicate with you anymore. Only change this value if you control + * both sides of the connection and have it reduced at both sides, or + * if you're using the Max Fragment Length extension and you know all your + * peers are using it too! + */ +#if !defined(MBEDTLS_SSL_MAX_CONTENT_LEN) +#define MBEDTLS_SSL_MAX_CONTENT_LEN 16384 /**< Size of the input / output buffer */ +#endif + +/* \} name SECTION: Module settings */ + +/* + * Length of the verify data for secure renegotiation + */ +#if defined(MBEDTLS_SSL_PROTO_SSL3) +#define MBEDTLS_SSL_VERIFY_DATA_MAX_LEN 36 +#else +#define MBEDTLS_SSL_VERIFY_DATA_MAX_LEN 12 +#endif + +/* + * Signaling ciphersuite values (SCSV) + */ +#define MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO 0xFF /**< renegotiation info ext */ +#define MBEDTLS_SSL_FALLBACK_SCSV_VALUE 0x5600 /**< RFC 7507 section 2 */ + +/* + * Supported Signature and Hash algorithms (For TLS 1.2) + * RFC 5246 section 7.4.1.4.1 + */ +#define MBEDTLS_SSL_HASH_NONE 0 +#define MBEDTLS_SSL_HASH_MD5 1 +#define MBEDTLS_SSL_HASH_SHA1 2 +#define MBEDTLS_SSL_HASH_SHA224 3 +#define MBEDTLS_SSL_HASH_SHA256 4 +#define MBEDTLS_SSL_HASH_SHA384 5 +#define MBEDTLS_SSL_HASH_SHA512 6 + +#define MBEDTLS_SSL_SIG_ANON 0 +#define MBEDTLS_SSL_SIG_RSA 1 +#define MBEDTLS_SSL_SIG_ECDSA 3 + +/* + * Client Certificate Types + * RFC 5246 section 7.4.4 plus RFC 4492 section 5.5 + */ +#define MBEDTLS_SSL_CERT_TYPE_RSA_SIGN 1 +#define MBEDTLS_SSL_CERT_TYPE_ECDSA_SIGN 64 + +/* + * Message, alert and handshake types + */ +#define MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC 20 +#define MBEDTLS_SSL_MSG_ALERT 21 +#define MBEDTLS_SSL_MSG_HANDSHAKE 22 +#define MBEDTLS_SSL_MSG_APPLICATION_DATA 23 + +#define MBEDTLS_SSL_ALERT_LEVEL_WARNING 1 +#define MBEDTLS_SSL_ALERT_LEVEL_FATAL 2 + +#define MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY 0 /* 0x00 */ +#define MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE 10 /* 0x0A */ +#define MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC 20 /* 0x14 */ +#define MBEDTLS_SSL_ALERT_MSG_DECRYPTION_FAILED 21 /* 0x15 */ +#define MBEDTLS_SSL_ALERT_MSG_RECORD_OVERFLOW 22 /* 0x16 */ +#define MBEDTLS_SSL_ALERT_MSG_DECOMPRESSION_FAILURE 30 /* 0x1E */ +#define MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE 40 /* 0x28 */ +#define MBEDTLS_SSL_ALERT_MSG_NO_CERT 41 /* 0x29 */ +#define MBEDTLS_SSL_ALERT_MSG_BAD_CERT 42 /* 0x2A */ +#define MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_CERT 43 /* 0x2B */ +#define MBEDTLS_SSL_ALERT_MSG_CERT_REVOKED 44 /* 0x2C */ +#define MBEDTLS_SSL_ALERT_MSG_CERT_EXPIRED 45 /* 0x2D */ +#define MBEDTLS_SSL_ALERT_MSG_CERT_UNKNOWN 46 /* 0x2E */ +#define MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER 47 /* 0x2F */ +#define MBEDTLS_SSL_ALERT_MSG_UNKNOWN_CA 48 /* 0x30 */ +#define MBEDTLS_SSL_ALERT_MSG_ACCESS_DENIED 49 /* 0x31 */ +#define MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR 50 /* 0x32 */ +#define MBEDTLS_SSL_ALERT_MSG_DECRYPT_ERROR 51 /* 0x33 */ +#define MBEDTLS_SSL_ALERT_MSG_EXPORT_RESTRICTION 60 /* 0x3C */ +#define MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION 70 /* 0x46 */ +#define MBEDTLS_SSL_ALERT_MSG_INSUFFICIENT_SECURITY 71 /* 0x47 */ +#define MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR 80 /* 0x50 */ +#define MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK 86 /* 0x56 */ +#define MBEDTLS_SSL_ALERT_MSG_USER_CANCELED 90 /* 0x5A */ +#define MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION 100 /* 0x64 */ +#define MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT 110 /* 0x6E */ +#define MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME 112 /* 0x70 */ +#define MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY 115 /* 0x73 */ +#define MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL 120 /* 0x78 */ + +#define MBEDTLS_SSL_HS_HELLO_REQUEST 0 +#define MBEDTLS_SSL_HS_CLIENT_HELLO 1 +#define MBEDTLS_SSL_HS_SERVER_HELLO 2 +#define MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST 3 +#define MBEDTLS_SSL_HS_NEW_SESSION_TICKET 4 +#define MBEDTLS_SSL_HS_CERTIFICATE 11 +#define MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE 12 +#define MBEDTLS_SSL_HS_CERTIFICATE_REQUEST 13 +#define MBEDTLS_SSL_HS_SERVER_HELLO_DONE 14 +#define MBEDTLS_SSL_HS_CERTIFICATE_VERIFY 15 +#define MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE 16 +#define MBEDTLS_SSL_HS_FINISHED 20 + +/* + * TLS extensions + */ +#define MBEDTLS_TLS_EXT_SERVERNAME 0 +#define MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME 0 + +#define MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH 1 + +#define MBEDTLS_TLS_EXT_TRUNCATED_HMAC 4 + +#define MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES 10 +#define MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS 11 + +#define MBEDTLS_TLS_EXT_SIG_ALG 13 + +#define MBEDTLS_TLS_EXT_ALPN 16 + +#define MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC 22 /* 0x16 */ +#define MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET 0x0017 /* 23 */ + +#define MBEDTLS_TLS_EXT_SESSION_TICKET 35 + +#define MBEDTLS_TLS_EXT_ECJPAKE_KKPP 256 /* experimental */ + +#define MBEDTLS_TLS_EXT_RENEGOTIATION_INFO 0xFF01 + +/* + * Size defines + */ +#if !defined(MBEDTLS_PSK_MAX_LEN) +#define MBEDTLS_PSK_MAX_LEN 32 /* 256 bits */ +#endif + +/* Dummy type used only for its size */ +union mbedtls_ssl_premaster_secret +{ +#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) + unsigned char _pms_rsa[48]; /* RFC 5246 8.1.1 */ +#endif +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) + unsigned char _pms_dhm[MBEDTLS_MPI_MAX_SIZE]; /* RFC 5246 8.1.2 */ +#endif +#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) + unsigned char _pms_ecdh[MBEDTLS_ECP_MAX_BYTES]; /* RFC 4492 5.10 */ +#endif +#if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) + unsigned char _pms_psk[4 + 2 * MBEDTLS_PSK_MAX_LEN]; /* RFC 4279 2 */ +#endif +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) + unsigned char _pms_dhe_psk[4 + MBEDTLS_MPI_MAX_SIZE + + MBEDTLS_PSK_MAX_LEN]; /* RFC 4279 3 */ +#endif +#if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) + unsigned char _pms_rsa_psk[52 + MBEDTLS_PSK_MAX_LEN]; /* RFC 4279 4 */ +#endif +#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) + unsigned char _pms_ecdhe_psk[4 + MBEDTLS_ECP_MAX_BYTES + + MBEDTLS_PSK_MAX_LEN]; /* RFC 5489 2 */ +#endif +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) + unsigned char _pms_ecjpake[32]; /* Thread spec: SHA-256 output */ +#endif +}; + +#define MBEDTLS_PREMASTER_SIZE sizeof( union mbedtls_ssl_premaster_secret ) + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SSL state machine + */ +typedef enum +{ + MBEDTLS_SSL_HELLO_REQUEST, + MBEDTLS_SSL_CLIENT_HELLO, + MBEDTLS_SSL_SERVER_HELLO, + MBEDTLS_SSL_SERVER_CERTIFICATE, + MBEDTLS_SSL_SERVER_KEY_EXCHANGE, + MBEDTLS_SSL_CERTIFICATE_REQUEST, + MBEDTLS_SSL_SERVER_HELLO_DONE, + MBEDTLS_SSL_CLIENT_CERTIFICATE, + MBEDTLS_SSL_CLIENT_KEY_EXCHANGE, + MBEDTLS_SSL_CERTIFICATE_VERIFY, + MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC, + MBEDTLS_SSL_CLIENT_FINISHED, + MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC, + MBEDTLS_SSL_SERVER_FINISHED, + MBEDTLS_SSL_FLUSH_BUFFERS, + MBEDTLS_SSL_HANDSHAKE_WRAPUP, + MBEDTLS_SSL_HANDSHAKE_OVER, + MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET, + MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT, +} +mbedtls_ssl_states; + +/** + * \brief Callback type: send data on the network. + * + * \note That callback may be either blocking or non-blocking. + * + * \param ctx Context for the send callback (typically a file descriptor) + * \param buf Buffer holding the data to send + * \param len Length of the data to send + * + * \return The callback must return the number of bytes sent if any, + * or a non-zero error code. + * If performing non-blocking I/O, \c MBEDTLS_ERR_SSL_WANT_WRITE + * must be returned when the operation would block. + * + * \note The callback is allowed to send fewer bytes than requested. + * It must always return the number of bytes actually sent. + */ +typedef int mbedtls_ssl_send_t( void *ctx, + const unsigned char *buf, + size_t len ); + +/** + * \brief Callback type: receive data from the network. + * + * \note That callback may be either blocking or non-blocking. + * + * \param ctx Context for the receive callback (typically a file + * descriptor) + * \param buf Buffer to write the received data to + * \param len Length of the receive buffer + * + * \return The callback must return the number of bytes received, + * or a non-zero error code. + * If performing non-blocking I/O, \c MBEDTLS_ERR_SSL_WANT_READ + * must be returned when the operation would block. + * + * \note The callback may receive fewer bytes than the length of the + * buffer. It must always return the number of bytes actually + * received and written to the buffer. + */ +typedef int mbedtls_ssl_recv_t( void *ctx, + unsigned char *buf, + size_t len ); + +/** + * \brief Callback type: receive data from the network, with timeout + * + * \note That callback must block until data is received, or the + * timeout delay expires, or the operation is interrupted by a + * signal. + * + * \param ctx Context for the receive callback (typically a file descriptor) + * \param buf Buffer to write the received data to + * \param len Length of the receive buffer + * \param timeout Maximum nomber of millisecondes to wait for data + * 0 means no timeout (potentially waiting forever) + * + * \return The callback must return the number of bytes received, + * or a non-zero error code: + * \c MBEDTLS_ERR_SSL_TIMEOUT if the operation timed out, + * \c MBEDTLS_ERR_SSL_WANT_READ if interrupted by a signal. + * + * \note The callback may receive fewer bytes than the length of the + * buffer. It must always return the number of bytes actually + * received and written to the buffer. + */ +typedef int mbedtls_ssl_recv_timeout_t( void *ctx, + unsigned char *buf, + size_t len, + uint32_t timeout ); +/** + * \brief Callback type: set a pair of timers/delays to watch + * + * \param ctx Context pointer + * \param int_ms Intermediate delay in milliseconds + * \param fin_ms Final delay in milliseconds + * 0 cancels the current timer. + * + * \note This callback must at least store the necessary information + * for the associated \c mbedtls_ssl_get_timer_t callback to + * return correct information. + * + * \note If using a event-driven style of programming, an event must + * be generated when the final delay is passed. The event must + * cause a call to \c mbedtls_ssl_handshake() with the proper + * SSL context to be scheduled. Care must be taken to ensure + * that at most one such call happens at a time. + * + * \note Only one timer at a time must be running. Calling this + * function while a timer is running must cancel it. Cancelled + * timers must not generate any event. + */ +typedef void mbedtls_ssl_set_timer_t( void * ctx, + uint32_t int_ms, + uint32_t fin_ms ); + +/** + * \brief Callback type: get status of timers/delays + * + * \param ctx Context pointer + * + * \return This callback must return: + * -1 if cancelled (fin_ms == 0), + * 0 if none of the delays have passed, + * 1 if only the intermediate delay has passed, + * 2 if the final delay has passed. + */ +typedef int mbedtls_ssl_get_timer_t( void * ctx ); + + +/* Defined below */ +typedef struct mbedtls_ssl_session mbedtls_ssl_session; +typedef struct mbedtls_ssl_context mbedtls_ssl_context; +typedef struct mbedtls_ssl_config mbedtls_ssl_config; + +/* Defined in ssl_internal.h */ +typedef struct mbedtls_ssl_transform mbedtls_ssl_transform; +typedef struct mbedtls_ssl_handshake_params mbedtls_ssl_handshake_params; +#if defined(MBEDTLS_X509_CRT_PARSE_C) +typedef struct mbedtls_ssl_key_cert mbedtls_ssl_key_cert; +#endif +#if defined(MBEDTLS_SSL_PROTO_DTLS) +typedef struct mbedtls_ssl_flight_item mbedtls_ssl_flight_item; +#endif + +/* + * This structure is used for storing current session data. + */ +struct mbedtls_ssl_session +{ +#if defined(MBEDTLS_HAVE_TIME) + mbedtls_time_t start; /*!< starting time */ +#endif + int ciphersuite; /*!< chosen ciphersuite */ + int compression; /*!< chosen compression */ + size_t id_len; /*!< session id length */ + unsigned char id[32]; /*!< session identifier */ + unsigned char master[48]; /*!< the master secret */ + +#if defined(MBEDTLS_X509_CRT_PARSE_C) + mbedtls_x509_crt *peer_cert; /*!< peer X.509 cert chain */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + uint32_t verify_result; /*!< verification result */ + +#if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) + unsigned char *ticket; /*!< RFC 5077 session ticket */ + size_t ticket_len; /*!< session ticket length */ + uint32_t ticket_lifetime; /*!< ticket lifetime hint */ +#endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */ + +#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) + unsigned char mfl_code; /*!< MaxFragmentLength negotiated by peer */ +#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ + +#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) + int trunc_hmac; /*!< flag for truncated hmac activation */ +#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ + +#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) + int encrypt_then_mac; /*!< flag for EtM activation */ +#endif +}; + +/** + * SSL/TLS configuration to be shared between mbedtls_ssl_context structures. + */ +struct mbedtls_ssl_config +{ + /* Group items by size (largest first) to minimize padding overhead */ + + /* + * Pointers + */ + + const int *ciphersuite_list[4]; /*!< allowed ciphersuites per version */ + + /** Callback for printing debug output */ + void (*f_dbg)(void *, int, const char *, int, const char *); + void *p_dbg; /*!< context for the debug function */ + + /** Callback for getting (pseudo-)random numbers */ + int (*f_rng)(void *, unsigned char *, size_t); + void *p_rng; /*!< context for the RNG function */ + + /** Callback to retrieve a session from the cache */ + int (*f_get_cache)(void *, mbedtls_ssl_session *); + /** Callback to store a session into the cache */ + int (*f_set_cache)(void *, const mbedtls_ssl_session *); + void *p_cache; /*!< context for cache callbacks */ + +#if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) + /** Callback for setting cert according to SNI extension */ + int (*f_sni)(void *, mbedtls_ssl_context *, const unsigned char *, size_t); + void *p_sni; /*!< context for SNI callback */ +#endif + +#if defined(MBEDTLS_X509_CRT_PARSE_C) + /** Callback to customize X.509 certificate chain verification */ + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *); + void *p_vrfy; /*!< context for X.509 verify calllback */ +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) + /** Callback to retrieve PSK key from identity */ + int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, size_t); + void *p_psk; /*!< context for PSK callback */ +#endif + +#if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C) + /** Callback to create & write a cookie for ClientHello veirifcation */ + int (*f_cookie_write)( void *, unsigned char **, unsigned char *, + const unsigned char *, size_t ); + /** Callback to verify validity of a ClientHello cookie */ + int (*f_cookie_check)( void *, const unsigned char *, size_t, + const unsigned char *, size_t ); + void *p_cookie; /*!< context for the cookie callbacks */ +#endif + +#if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_SRV_C) + /** Callback to create & write a session ticket */ + int (*f_ticket_write)( void *, const mbedtls_ssl_session *, + unsigned char *, const unsigned char *, size_t *, uint32_t * ); + /** Callback to parse a session ticket into a session structure */ + int (*f_ticket_parse)( void *, mbedtls_ssl_session *, unsigned char *, size_t); + void *p_ticket; /*!< context for the ticket callbacks */ +#endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_SRV_C */ + +#if defined(MBEDTLS_SSL_EXPORT_KEYS) + /** Callback to export key block and master secret */ + int (*f_export_keys)( void *, const unsigned char *, + const unsigned char *, size_t, size_t, size_t ); + void *p_export_keys; /*!< context for key export callback */ +#endif + +#if defined(MBEDTLS_X509_CRT_PARSE_C) + const mbedtls_x509_crt_profile *cert_profile; /*!< verification profile */ + mbedtls_ssl_key_cert *key_cert; /*!< own certificate/key pair(s) */ + mbedtls_x509_crt *ca_chain; /*!< trusted CAs */ + mbedtls_x509_crl *ca_crl; /*!< trusted CAs CRLs */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + +#if defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) + const int *sig_hashes; /*!< allowed signature hashes */ +#endif + +#if defined(MBEDTLS_ECP_C) + const mbedtls_ecp_group_id *curve_list; /*!< allowed curves */ +#endif + +#if defined(MBEDTLS_DHM_C) + mbedtls_mpi dhm_P; /*!< prime modulus for DHM */ + mbedtls_mpi dhm_G; /*!< generator for DHM */ +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) + unsigned char *psk; /*!< pre-shared key */ + size_t psk_len; /*!< length of the pre-shared key */ + unsigned char *psk_identity; /*!< identity for PSK negotiation */ + size_t psk_identity_len;/*!< length of identity */ +#endif + +#if defined(MBEDTLS_SSL_ALPN) + const char **alpn_list; /*!< ordered list of protocols */ +#endif + + /* + * Numerical settings (int then char) + */ + + uint32_t read_timeout; /*!< timeout for mbedtls_ssl_read (ms) */ + +#if defined(MBEDTLS_SSL_PROTO_DTLS) + uint32_t hs_timeout_min; /*!< initial value of the handshake + retransmission timeout (ms) */ + uint32_t hs_timeout_max; /*!< maximum value of the handshake + retransmission timeout (ms) */ +#endif + +#if defined(MBEDTLS_SSL_RENEGOTIATION) + int renego_max_records; /*!< grace period for renegotiation */ + unsigned char renego_period[8]; /*!< value of the record counters + that triggers renegotiation */ +#endif + +#if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) + unsigned int badmac_limit; /*!< limit of records with a bad MAC */ +#endif + +#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_CLI_C) + unsigned int dhm_min_bitlen; /*!< min. bit length of the DHM prime */ +#endif + + unsigned char max_major_ver; /*!< max. major version used */ + unsigned char max_minor_ver; /*!< max. minor version used */ + unsigned char min_major_ver; /*!< min. major version used */ + unsigned char min_minor_ver; /*!< min. minor version used */ + + /* + * Flags (bitfields) + */ + + unsigned int endpoint : 1; /*!< 0: client, 1: server */ + unsigned int transport : 1; /*!< stream (TLS) or datagram (DTLS) */ + unsigned int authmode : 2; /*!< MBEDTLS_SSL_VERIFY_XXX */ + /* needed even with renego disabled for LEGACY_BREAK_HANDSHAKE */ + unsigned int allow_legacy_renegotiation : 2 ; /*!< MBEDTLS_LEGACY_XXX */ +#if defined(MBEDTLS_ARC4_C) + unsigned int arc4_disabled : 1; /*!< blacklist RC4 ciphersuites? */ +#endif +#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) + unsigned int mfl_code : 3; /*!< desired fragment length */ +#endif +#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) + unsigned int encrypt_then_mac : 1 ; /*!< negotiate encrypt-then-mac? */ +#endif +#if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) + unsigned int extended_ms : 1; /*!< negotiate extended master secret? */ +#endif +#if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) + unsigned int anti_replay : 1; /*!< detect and prevent replay? */ +#endif +#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) + unsigned int cbc_record_splitting : 1; /*!< do cbc record splitting */ +#endif +#if defined(MBEDTLS_SSL_RENEGOTIATION) + unsigned int disable_renegotiation : 1; /*!< disable renegotiation? */ +#endif +#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) + unsigned int trunc_hmac : 1; /*!< negotiate truncated hmac? */ +#endif +#if defined(MBEDTLS_SSL_SESSION_TICKETS) + unsigned int session_tickets : 1; /*!< use session tickets? */ +#endif +#if defined(MBEDTLS_SSL_FALLBACK_SCSV) && defined(MBEDTLS_SSL_CLI_C) + unsigned int fallback : 1; /*!< is this a fallback? */ +#endif +}; + + +struct mbedtls_ssl_context +{ + const mbedtls_ssl_config *conf; /*!< configuration information */ + + /* + * Miscellaneous + */ + int state; /*!< SSL handshake: current state */ +#if defined(MBEDTLS_SSL_RENEGOTIATION) + int renego_status; /*!< Initial, in progress, pending? */ + int renego_records_seen; /*!< Records since renego request, or with DTLS, + number of retransmissions of request if + renego_max_records is < 0 */ +#endif + + int major_ver; /*!< equal to MBEDTLS_SSL_MAJOR_VERSION_3 */ + int minor_ver; /*!< either 0 (SSL3) or 1 (TLS1.0) */ + +#if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) + unsigned badmac_seen; /*!< records with a bad MAC received */ +#endif + + mbedtls_ssl_send_t *f_send; /*!< Callback for network send */ + mbedtls_ssl_recv_t *f_recv; /*!< Callback for network receive */ + mbedtls_ssl_recv_timeout_t *f_recv_timeout; + /*!< Callback for network receive with timeout */ + + void *p_bio; /*!< context for I/O operations */ + + /* + * Session layer + */ + mbedtls_ssl_session *session_in; /*!< current session data (in) */ + mbedtls_ssl_session *session_out; /*!< current session data (out) */ + mbedtls_ssl_session *session; /*!< negotiated session data */ + mbedtls_ssl_session *session_negotiate; /*!< session data in negotiation */ + + mbedtls_ssl_handshake_params *handshake; /*!< params required only during + the handshake process */ + + /* + * Record layer transformations + */ + mbedtls_ssl_transform *transform_in; /*!< current transform params (in) */ + mbedtls_ssl_transform *transform_out; /*!< current transform params (in) */ + mbedtls_ssl_transform *transform; /*!< negotiated transform params */ + mbedtls_ssl_transform *transform_negotiate; /*!< transform params in negotiation */ + + /* + * Timers + */ + void *p_timer; /*!< context for the timer callbacks */ + + mbedtls_ssl_set_timer_t *f_set_timer; /*!< set timer callback */ + mbedtls_ssl_get_timer_t *f_get_timer; /*!< get timer callback */ + + /* + * Record layer (incoming data) + */ + unsigned char *in_buf; /*!< input buffer */ + unsigned char *in_ctr; /*!< 64-bit incoming message counter + TLS: maintained by us + DTLS: read from peer */ + unsigned char *in_hdr; /*!< start of record header */ + unsigned char *in_len; /*!< two-bytes message length field */ + unsigned char *in_iv; /*!< ivlen-byte IV */ + unsigned char *in_msg; /*!< message contents (in_iv+ivlen) */ + unsigned char *in_offt; /*!< read offset in application data */ + + int in_msgtype; /*!< record header: message type */ + size_t in_msglen; /*!< record header: message length */ + size_t in_left; /*!< amount of data read so far */ +#if defined(MBEDTLS_SSL_PROTO_DTLS) + uint16_t in_epoch; /*!< DTLS epoch for incoming records */ + size_t next_record_offset; /*!< offset of the next record in datagram + (equal to in_left if none) */ +#endif +#if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) + uint64_t in_window_top; /*!< last validated record seq_num */ + uint64_t in_window; /*!< bitmask for replay detection */ +#endif + + size_t in_hslen; /*!< current handshake message length, + including the handshake header */ + int nb_zero; /*!< # of 0-length encrypted messages */ + int record_read; /*!< record is already present */ + + /* + * Record layer (outgoing data) + */ + unsigned char *out_buf; /*!< output buffer */ + unsigned char *out_ctr; /*!< 64-bit outgoing message counter */ + unsigned char *out_hdr; /*!< start of record header */ + unsigned char *out_len; /*!< two-bytes message length field */ + unsigned char *out_iv; /*!< ivlen-byte IV */ + unsigned char *out_msg; /*!< message contents (out_iv+ivlen) */ + + int out_msgtype; /*!< record header: message type */ + size_t out_msglen; /*!< record header: message length */ + size_t out_left; /*!< amount of data not yet written */ + +#if defined(MBEDTLS_ZLIB_SUPPORT) + unsigned char *compress_buf; /*!< zlib data buffer */ +#endif +#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) + signed char split_done; /*!< current record already splitted? */ +#endif + + /* + * PKI layer + */ + int client_auth; /*!< flag for client auth. */ + + /* + * User settings + */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) + char *hostname; /*!< expected peer CN for verification + (and SNI if available) */ +#endif + +#if defined(MBEDTLS_SSL_ALPN) + const char *alpn_chosen; /*!< negotiated protocol */ +#endif + + /* + * Information for DTLS hello verify + */ +#if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C) + unsigned char *cli_id; /*!< transport-level ID of the client */ + size_t cli_id_len; /*!< length of cli_id */ +#endif + + /* + * Secure renegotiation + */ + /* needed to know when to send extension on server */ + int secure_renegotiation; /*!< does peer support legacy or + secure renegotiation */ +#if defined(MBEDTLS_SSL_RENEGOTIATION) + size_t verify_data_len; /*!< length of verify data stored */ + char own_verify_data[MBEDTLS_SSL_VERIFY_DATA_MAX_LEN]; /*!< previous handshake verify data */ + char peer_verify_data[MBEDTLS_SSL_VERIFY_DATA_MAX_LEN]; /*!< previous handshake verify data */ +#endif +}; + +#if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) + +#define MBEDTLS_SSL_CHANNEL_OUTBOUND 0 +#define MBEDTLS_SSL_CHANNEL_INBOUND 1 + +extern int (*mbedtls_ssl_hw_record_init)(mbedtls_ssl_context *ssl, + const unsigned char *key_enc, const unsigned char *key_dec, + size_t keylen, + const unsigned char *iv_enc, const unsigned char *iv_dec, + size_t ivlen, + const unsigned char *mac_enc, const unsigned char *mac_dec, + size_t maclen); +extern int (*mbedtls_ssl_hw_record_activate)(mbedtls_ssl_context *ssl, int direction); +extern int (*mbedtls_ssl_hw_record_reset)(mbedtls_ssl_context *ssl); +extern int (*mbedtls_ssl_hw_record_write)(mbedtls_ssl_context *ssl); +extern int (*mbedtls_ssl_hw_record_read)(mbedtls_ssl_context *ssl); +extern int (*mbedtls_ssl_hw_record_finish)(mbedtls_ssl_context *ssl); +#endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */ + +/** + * \brief Returns the list of ciphersuites supported by the SSL/TLS module. + * + * \return a statically allocated array of ciphersuites, the last + * entry is 0. + */ +const int *mbedtls_ssl_list_ciphersuites( void ); + +/** + * \brief Return the name of the ciphersuite associated with the + * given ID + * + * \param ciphersuite_id SSL ciphersuite ID + * + * \return a string containing the ciphersuite name + */ +const char *mbedtls_ssl_get_ciphersuite_name( const int ciphersuite_id ); + +/** + * \brief Return the ID of the ciphersuite associated with the + * given name + * + * \param ciphersuite_name SSL ciphersuite name + * + * \return the ID with the ciphersuite or 0 if not found + */ +int mbedtls_ssl_get_ciphersuite_id( const char *ciphersuite_name ); + +/** + * \brief Initialize an SSL context + * Just makes the context ready for mbedtls_ssl_setup() or + * mbedtls_ssl_free() + * + * \param ssl SSL context + */ +void mbedtls_ssl_init( mbedtls_ssl_context *ssl ); + +/** + * \brief Set up an SSL context for use + * + * \note No copy of the configuration context is made, it can be + * shared by many mbedtls_ssl_context structures. + * + * \warning Modifying the conf structure after it has been used in this + * function is unsupported! + * + * \param ssl SSL context + * \param conf SSL configuration to use + * + * \return 0 if successful, or MBEDTLS_ERR_SSL_ALLOC_FAILED if + * memory allocation failed + */ +int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, + const mbedtls_ssl_config *conf ); + +/** + * \brief Reset an already initialized SSL context for re-use + * while retaining application-set variables, function + * pointers and data. + * + * \param ssl SSL context + * \return 0 if successful, or MBEDTLS_ERR_SSL_ALLOC_FAILED, + MBEDTLS_ERR_SSL_HW_ACCEL_FAILED or + * MBEDTLS_ERR_SSL_COMPRESSION_FAILED + */ +int mbedtls_ssl_session_reset( mbedtls_ssl_context *ssl ); + +/** + * \brief Set the current endpoint type + * + * \param conf SSL configuration + * \param endpoint must be MBEDTLS_SSL_IS_CLIENT or MBEDTLS_SSL_IS_SERVER + */ +void mbedtls_ssl_conf_endpoint( mbedtls_ssl_config *conf, int endpoint ); + +/** + * \brief Set the transport type (TLS or DTLS). + * Default: TLS + * + * \note For DTLS, you must either provide a recv callback that + * doesn't block, or one that handles timeouts, see + * \c mbedtls_ssl_set_bio(). You also need to provide timer + * callbacks with \c mbedtls_ssl_set_timer_cb(). + * + * \param conf SSL configuration + * \param transport transport type: + * MBEDTLS_SSL_TRANSPORT_STREAM for TLS, + * MBEDTLS_SSL_TRANSPORT_DATAGRAM for DTLS. + */ +void mbedtls_ssl_conf_transport( mbedtls_ssl_config *conf, int transport ); + +/** + * \brief Set the certificate verification mode + * Default: NONE on server, REQUIRED on client + * + * \param conf SSL configuration + * \param authmode can be: + * + * MBEDTLS_SSL_VERIFY_NONE: peer certificate is not checked + * (default on server) + * (insecure on client) + * + * MBEDTLS_SSL_VERIFY_OPTIONAL: peer certificate is checked, however the + * handshake continues even if verification failed; + * mbedtls_ssl_get_verify_result() can be called after the + * handshake is complete. + * + * MBEDTLS_SSL_VERIFY_REQUIRED: peer *must* present a valid certificate, + * handshake is aborted if verification failed. + * (default on client) + * + * \note On client, MBEDTLS_SSL_VERIFY_REQUIRED is the recommended mode. + * With MBEDTLS_SSL_VERIFY_OPTIONAL, the user needs to call mbedtls_ssl_get_verify_result() at + * the right time(s), which may not be obvious, while REQUIRED always perform + * the verification as soon as possible. For example, REQUIRED was protecting + * against the "triple handshake" attack even before it was found. + */ +void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *conf, int authmode ); + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * \brief Set the verification callback (Optional). + * + * If set, the verify callback is called for each + * certificate in the chain. For implementation + * information, please see \c x509parse_verify() + * + * \param conf SSL configuration + * \param f_vrfy verification function + * \param p_vrfy verification parameter + */ +void mbedtls_ssl_conf_verify( mbedtls_ssl_config *conf, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ); +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + +/** + * \brief Set the random number generator callback + * + * \param conf SSL configuration + * \param f_rng RNG function + * \param p_rng RNG parameter + */ +void mbedtls_ssl_conf_rng( mbedtls_ssl_config *conf, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Set the debug callback + * + * The callback has the following argument: + * void * opaque context for the callback + * int debug level + * const char * file name + * int line number + * const char * message + * + * \param conf SSL configuration + * \param f_dbg debug function + * \param p_dbg debug parameter + */ +void mbedtls_ssl_conf_dbg( mbedtls_ssl_config *conf, + void (*f_dbg)(void *, int, const char *, int, const char *), + void *p_dbg ); + +/** + * \brief Set the underlying BIO callbacks for write, read and + * read-with-timeout. + * + * \param ssl SSL context + * \param p_bio parameter (context) shared by BIO callbacks + * \param f_send write callback + * \param f_recv read callback + * \param f_recv_timeout blocking read callback with timeout. + * + * \note One of f_recv or f_recv_timeout can be NULL, in which case + * the other is used. If both are non-NULL, f_recv_timeout is + * used and f_recv is ignored (as if it were NULL). + * + * \note The two most common use cases are: + * - non-blocking I/O, f_recv != NULL, f_recv_timeout == NULL + * - blocking I/O, f_recv == NULL, f_recv_timout != NULL + * + * \note For DTLS, you need to provide either a non-NULL + * f_recv_timeout callback, or a f_recv that doesn't block. + * + * \note See the documentations of \c mbedtls_ssl_sent_t, + * \c mbedtls_ssl_recv_t and \c mbedtls_ssl_recv_timeout_t for + * the conventions those callbacks must follow. + * + * \note On some platforms, net.c provides \c mbedtls_net_send(), + * \c mbedtls_net_recv() and \c mbedtls_net_recv_timeout() + * that are suitable to be used here. + */ +void mbedtls_ssl_set_bio( mbedtls_ssl_context *ssl, + void *p_bio, + mbedtls_ssl_send_t *f_send, + mbedtls_ssl_recv_t *f_recv, + mbedtls_ssl_recv_timeout_t *f_recv_timeout ); + +/** + * \brief Set the timeout period for mbedtls_ssl_read() + * (Default: no timeout.) + * + * \param conf SSL configuration context + * \param timeout Timeout value in milliseconds. + * Use 0 for no timeout (default). + * + * \note With blocking I/O, this will only work if a non-NULL + * \c f_recv_timeout was set with \c mbedtls_ssl_set_bio(). + * With non-blocking I/O, this will only work if timer + * callbacks were set with \c mbedtls_ssl_set_timer_cb(). + * + * \note With non-blocking I/O, you may also skip this function + * altogether and handle timeouts at the application layer. + */ +void mbedtls_ssl_conf_read_timeout( mbedtls_ssl_config *conf, uint32_t timeout ); + +/** + * \brief Set the timer callbacks (Mandatory for DTLS.) + * + * \param ssl SSL context + * \param p_timer parameter (context) shared by timer callbacks + * \param f_set_timer set timer callback + * \param f_get_timer get timer callback. Must return: + * + * \note See the documentation of \c mbedtls_ssl_set_timer_t and + * \c mbedtls_ssl_get_timer_t for the conventions this pair of + * callbacks must fallow. + * + * \note On some platforms, timing.c provides + * \c mbedtls_timing_set_delay() and + * \c mbedtls_timing_get_delay() that are suitable for using + * here, except if using an event-driven style. + * + * \note See also the "DTLS tutorial" article in our knowledge base. + * https://tls.mbed.org/kb/how-to/dtls-tutorial + */ +void mbedtls_ssl_set_timer_cb( mbedtls_ssl_context *ssl, + void *p_timer, + mbedtls_ssl_set_timer_t *f_set_timer, + mbedtls_ssl_get_timer_t *f_get_timer ); + +/** + * \brief Callback type: generate and write session ticket + * + * \note This describes what a callback implementation should do. + * This callback should generate an encrypted and + * authenticated ticket for the session and write it to the + * output buffer. Here, ticket means the opaque ticket part + * of the NewSessionTicket structure of RFC 5077. + * + * \param p_ticket Context for the callback + * \param session SSL session to be written in the ticket + * \param start Start of the output buffer + * \param end End of the output buffer + * \param tlen On exit, holds the length written + * \param lifetime On exit, holds the lifetime of the ticket in seconds + * + * \return 0 if successful, or + * a specific MBEDTLS_ERR_XXX code. + */ +typedef int mbedtls_ssl_ticket_write_t( void *p_ticket, + const mbedtls_ssl_session *session, + unsigned char *start, + const unsigned char *end, + size_t *tlen, + uint32_t *lifetime ); + +#if defined(MBEDTLS_SSL_EXPORT_KEYS) +/** + * \brief Callback type: Export key block and master secret + * + * \note This is required for certain uses of TLS, e.g. EAP-TLS + * (RFC 5216) and Thread. The key pointers are ephemeral and + * therefore must not be stored. The master secret and keys + * should not be used directly except as an input to a key + * derivation function. + * + * \param p_expkey Context for the callback + * \param ms Pointer to master secret (fixed length: 48 bytes) + * \param kb Pointer to key block, see RFC 5246 section 6.3 + * (variable length: 2 * maclen + 2 * keylen + 2 * ivlen). + * \param maclen MAC length + * \param keylen Key length + * \param ivlen IV length + * + * \return 0 if successful, or + * a specific MBEDTLS_ERR_XXX code. + */ +typedef int mbedtls_ssl_export_keys_t( void *p_expkey, + const unsigned char *ms, + const unsigned char *kb, + size_t maclen, + size_t keylen, + size_t ivlen ); +#endif /* MBEDTLS_SSL_EXPORT_KEYS */ + +/** + * \brief Callback type: parse and load session ticket + * + * \note This describes what a callback implementation should do. + * This callback should parse a session ticket as generated + * by the corresponding mbedtls_ssl_ticket_write_t function, + * and, if the ticket is authentic and valid, load the + * session. + * + * \note The implementation is allowed to modify the first len + * bytes of the input buffer, eg to use it as a temporary + * area for the decrypted ticket contents. + * + * \param p_ticket Context for the callback + * \param session SSL session to be loaded + * \param buf Start of the buffer containing the ticket + * \param len Length of the ticket. + * + * \return 0 if successful, or + * MBEDTLS_ERR_SSL_INVALID_MAC if not authentic, or + * MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED if expired, or + * any other non-zero code for other failures. + */ +typedef int mbedtls_ssl_ticket_parse_t( void *p_ticket, + mbedtls_ssl_session *session, + unsigned char *buf, + size_t len ); + +#if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_SRV_C) +/** + * \brief Configure SSL session ticket callbacks (server only). + * (Default: none.) + * + * \note On server, session tickets are enabled by providing + * non-NULL callbacks. + * + * \note On client, use \c mbedtls_ssl_conf_session_tickets(). + * + * \param conf SSL configuration context + * \param f_ticket_write Callback for writing a ticket + * \param f_ticket_parse Callback for parsing a ticket + * \param p_ticket Context shared by the two callbacks + */ +void mbedtls_ssl_conf_session_tickets_cb( mbedtls_ssl_config *conf, + mbedtls_ssl_ticket_write_t *f_ticket_write, + mbedtls_ssl_ticket_parse_t *f_ticket_parse, + void *p_ticket ); +#endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_SRV_C */ + +#if defined(MBEDTLS_SSL_EXPORT_KEYS) +/** + * \brief Configure key export callback. + * (Default: none.) + * + * \note See \c mbedtls_ssl_export_keys_t. + * + * \param conf SSL configuration context + * \param f_export_keys Callback for exporting keys + * \param p_export_keys Context for the callback + */ +void mbedtls_ssl_conf_export_keys_cb( mbedtls_ssl_config *conf, + mbedtls_ssl_export_keys_t *f_export_keys, + void *p_export_keys ); +#endif /* MBEDTLS_SSL_EXPORT_KEYS */ + +/** + * \brief Callback type: generate a cookie + * + * \param ctx Context for the callback + * \param p Buffer to write to, + * must be updated to point right after the cookie + * \param end Pointer to one past the end of the output buffer + * \param info Client ID info that was passed to + * \c mbedtls_ssl_set_client_transport_id() + * \param ilen Length of info in bytes + * + * \return The callback must return 0 on success, + * or a negative error code. + */ +typedef int mbedtls_ssl_cookie_write_t( void *ctx, + unsigned char **p, unsigned char *end, + const unsigned char *info, size_t ilen ); + +/** + * \brief Callback type: verify a cookie + * + * \param ctx Context for the callback + * \param cookie Cookie to verify + * \param clen Length of cookie + * \param info Client ID info that was passed to + * \c mbedtls_ssl_set_client_transport_id() + * \param ilen Length of info in bytes + * + * \return The callback must return 0 if cookie is valid, + * or a negative error code. + */ +typedef int mbedtls_ssl_cookie_check_t( void *ctx, + const unsigned char *cookie, size_t clen, + const unsigned char *info, size_t ilen ); + +#if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C) +/** + * \brief Register callbacks for DTLS cookies + * (Server only. DTLS only.) + * + * Default: dummy callbacks that fail, in order to force you to + * register working callbacks (and initialize their context). + * + * To disable HelloVerifyRequest, register NULL callbacks. + * + * \warning Disabling hello verification allows your server to be used + * for amplification in DoS attacks against other hosts. + * Only disable if you known this can't happen in your + * particular environment. + * + * \note See comments on \c mbedtls_ssl_handshake() about handling + * the MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED that is expected + * on the first handshake attempt when this is enabled. + * + * \note This is also necessary to handle client reconnection from + * the same port as described in RFC 6347 section 4.2.8 (only + * the variant with cookies is supported currently). See + * comments on \c mbedtls_ssl_read() for details. + * + * \param conf SSL configuration + * \param f_cookie_write Cookie write callback + * \param f_cookie_check Cookie check callback + * \param p_cookie Context for both callbacks + */ +void mbedtls_ssl_conf_dtls_cookies( mbedtls_ssl_config *conf, + mbedtls_ssl_cookie_write_t *f_cookie_write, + mbedtls_ssl_cookie_check_t *f_cookie_check, + void *p_cookie ); + +/** + * \brief Set client's transport-level identification info. + * (Server only. DTLS only.) + * + * This is usually the IP address (and port), but could be + * anything identify the client depending on the underlying + * network stack. Used for HelloVerifyRequest with DTLS. + * This is *not* used to route the actual packets. + * + * \param ssl SSL context + * \param info Transport-level info identifying the client (eg IP + port) + * \param ilen Length of info in bytes + * + * \note An internal copy is made, so the info buffer can be reused. + * + * \return 0 on success, + * MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used on client, + * MBEDTLS_ERR_SSL_ALLOC_FAILED if out of memory. + */ +int mbedtls_ssl_set_client_transport_id( mbedtls_ssl_context *ssl, + const unsigned char *info, + size_t ilen ); + +#endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY && MBEDTLS_SSL_SRV_C */ + +#if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) +/** + * \brief Enable or disable anti-replay protection for DTLS. + * (DTLS only, no effect on TLS.) + * Default: enabled. + * + * \param conf SSL configuration + * \param mode MBEDTLS_SSL_ANTI_REPLAY_ENABLED or MBEDTLS_SSL_ANTI_REPLAY_DISABLED. + * + * \warning Disabling this is a security risk unless the application + * protocol handles duplicated packets in a safe way. You + * should not disable this without careful consideration. + * However, if your application already detects duplicated + * packets and needs information about them to adjust its + * transmission strategy, then you'll want to disable this. + */ +void mbedtls_ssl_conf_dtls_anti_replay( mbedtls_ssl_config *conf, char mode ); +#endif /* MBEDTLS_SSL_DTLS_ANTI_REPLAY */ + +#if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) +/** + * \brief Set a limit on the number of records with a bad MAC + * before terminating the connection. + * (DTLS only, no effect on TLS.) + * Default: 0 (disabled). + * + * \param conf SSL configuration + * \param limit Limit, or 0 to disable. + * + * \note If the limit is N, then the connection is terminated when + * the Nth non-authentic record is seen. + * + * \note Records with an invalid header are not counted, only the + * ones going through the authentication-decryption phase. + * + * \note This is a security trade-off related to the fact that it's + * often relatively easy for an active attacker ot inject UDP + * datagrams. On one hand, setting a low limit here makes it + * easier for such an attacker to forcibly terminated a + * connection. On the other hand, a high limit or no limit + * might make us waste resources checking authentication on + * many bogus packets. + */ +void mbedtls_ssl_conf_dtls_badmac_limit( mbedtls_ssl_config *conf, unsigned limit ); +#endif /* MBEDTLS_SSL_DTLS_BADMAC_LIMIT */ + +#if defined(MBEDTLS_SSL_PROTO_DTLS) +/** + * \brief Set retransmit timeout values for the DTLS handshake. + * (DTLS only, no effect on TLS.) + * + * \param conf SSL configuration + * \param min Initial timeout value in milliseconds. + * Default: 1000 (1 second). + * \param max Maximum timeout value in milliseconds. + * Default: 60000 (60 seconds). + * + * \note Default values are from RFC 6347 section 4.2.4.1. + * + * \note The 'min' value should typically be slightly above the + * expected round-trip time to your peer, plus whatever time + * it takes for the peer to process the message. For example, + * if your RTT is about 600ms and you peer needs up to 1s to + * do the cryptographic operations in the handshake, then you + * should set 'min' slightly above 1600. Lower values of 'min' + * might cause spurious resends which waste network resources, + * while larger value of 'min' will increase overall latency + * on unreliable network links. + * + * \note The more unreliable your network connection is, the larger + * your max / min ratio needs to be in order to achieve + * reliable handshakes. + * + * \note Messages are retransmitted up to log2(ceil(max/min)) times. + * For example, if min = 1s and max = 5s, the retransmit plan + * goes: send ... 1s -> resend ... 2s -> resend ... 4s -> + * resend ... 5s -> give up and return a timeout error. + */ +void mbedtls_ssl_conf_handshake_timeout( mbedtls_ssl_config *conf, uint32_t min, uint32_t max ); +#endif /* MBEDTLS_SSL_PROTO_DTLS */ + +#if defined(MBEDTLS_SSL_SRV_C) +/** + * \brief Set the session cache callbacks (server-side only) + * If not set, no session resuming is done (except if session + * tickets are enabled too). + * + * The session cache has the responsibility to check for stale + * entries based on timeout. See RFC 5246 for recommendations. + * + * Warning: session.peer_cert is cleared by the SSL/TLS layer on + * connection shutdown, so do not cache the pointer! Either set + * it to NULL or make a full copy of the certificate. + * + * The get callback is called once during the initial handshake + * to enable session resuming. The get function has the + * following parameters: (void *parameter, mbedtls_ssl_session *session) + * If a valid entry is found, it should fill the master of + * the session object with the cached values and return 0, + * return 1 otherwise. Optionally peer_cert can be set as well + * if it is properly present in cache entry. + * + * The set callback is called once during the initial handshake + * to enable session resuming after the entire handshake has + * been finished. The set function has the following parameters: + * (void *parameter, const mbedtls_ssl_session *session). The function + * should create a cache entry for future retrieval based on + * the data in the session structure and should keep in mind + * that the mbedtls_ssl_session object presented (and all its referenced + * data) is cleared by the SSL/TLS layer when the connection is + * terminated. It is recommended to add metadata to determine if + * an entry is still valid in the future. Return 0 if + * successfully cached, return 1 otherwise. + * + * \param conf SSL configuration + * \param p_cache parmater (context) for both callbacks + * \param f_get_cache session get callback + * \param f_set_cache session set callback + */ +void mbedtls_ssl_conf_session_cache( mbedtls_ssl_config *conf, + void *p_cache, + int (*f_get_cache)(void *, mbedtls_ssl_session *), + int (*f_set_cache)(void *, const mbedtls_ssl_session *) ); +#endif /* MBEDTLS_SSL_SRV_C */ + +#if defined(MBEDTLS_SSL_CLI_C) +/** + * \brief Request resumption of session (client-side only) + * Session data is copied from presented session structure. + * + * \param ssl SSL context + * \param session session context + * + * \return 0 if successful, + * MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used server-side or + * arguments are otherwise invalid + * + * \sa mbedtls_ssl_get_session() + */ +int mbedtls_ssl_set_session( mbedtls_ssl_context *ssl, const mbedtls_ssl_session *session ); +#endif /* MBEDTLS_SSL_CLI_C */ + +/** + * \brief Set the list of allowed ciphersuites and the preference + * order. First in the list has the highest preference. + * (Overrides all version-specific lists) + * + * The ciphersuites array is not copied, and must remain + * valid for the lifetime of the ssl_config. + * + * Note: The server uses its own preferences + * over the preference of the client unless + * MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE is defined! + * + * \param conf SSL configuration + * \param ciphersuites 0-terminated list of allowed ciphersuites + */ +void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf, + const int *ciphersuites ); + +/** + * \brief Set the list of allowed ciphersuites and the + * preference order for a specific version of the protocol. + * (Only useful on the server side) + * + * The ciphersuites array is not copied, and must remain + * valid for the lifetime of the ssl_config. + * + * \param conf SSL configuration + * \param ciphersuites 0-terminated list of allowed ciphersuites + * \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 + * supported) + * \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, + * MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, + * MBEDTLS_SSL_MINOR_VERSION_3 supported) + * + * \note With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 + * and MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2 + */ +void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf, + const int *ciphersuites, + int major, int minor ); + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * \brief Set the X.509 security profile used for verification + * + * \note The restrictions are enforced for all certificates in the + * chain. However, signatures in the handshake are not covered + * by this setting but by \b mbedtls_ssl_conf_sig_hashes(). + * + * \param conf SSL configuration + * \param profile Profile to use + */ +void mbedtls_ssl_conf_cert_profile( mbedtls_ssl_config *conf, + const mbedtls_x509_crt_profile *profile ); + +/** + * \brief Set the data required to verify peer certificate + * + * \param conf SSL configuration + * \param ca_chain trusted CA chain (meaning all fully trusted top-level CAs) + * \param ca_crl trusted CA CRLs + */ +void mbedtls_ssl_conf_ca_chain( mbedtls_ssl_config *conf, + mbedtls_x509_crt *ca_chain, + mbedtls_x509_crl *ca_crl ); + +/** + * \brief Set own certificate chain and private key + * + * \note own_cert should contain in order from the bottom up your + * certificate chain. The top certificate (self-signed) + * can be omitted. + * + * \note On server, this function can be called multiple times to + * provision more than one cert/key pair (eg one ECDSA, one + * RSA with SHA-256, one RSA with SHA-1). An adequate + * certificate will be selected according to the client's + * advertised capabilities. In case mutliple certificates are + * adequate, preference is given to the one set by the first + * call to this function, then second, etc. + * + * \note On client, only the first call has any effect. That is, + * only one client certificate can be provisioned. The + * server's preferences in its CertficateRequest message will + * be ignored and our only cert will be sent regardless of + * whether it matches those preferences - the server can then + * decide what it wants to do with it. + * + * \param conf SSL configuration + * \param own_cert own public certificate chain + * \param pk_key own private key + * + * \return 0 on success or MBEDTLS_ERR_SSL_ALLOC_FAILED + */ +int mbedtls_ssl_conf_own_cert( mbedtls_ssl_config *conf, + mbedtls_x509_crt *own_cert, + mbedtls_pk_context *pk_key ); +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + +#if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) +/** + * \brief Set the Pre Shared Key (PSK) and the expected identity name + * + * \note This is mainly useful for clients. Servers will usually + * want to use \c mbedtls_ssl_conf_psk_cb() instead. + * + * \note Currently clients can only register one pre-shared key. + * In other words, the servers' identity hint is ignored. + * Support for setting multiple PSKs on clients and selecting + * one based on the identity hint is not a planned feature but + * feedback is welcomed. + * + * \param conf SSL configuration + * \param psk pointer to the pre-shared key + * \param psk_len pre-shared key length + * \param psk_identity pointer to the pre-shared key identity + * \param psk_identity_len identity key length + * + * \return 0 if successful or MBEDTLS_ERR_SSL_ALLOC_FAILED + */ +int mbedtls_ssl_conf_psk( mbedtls_ssl_config *conf, + const unsigned char *psk, size_t psk_len, + const unsigned char *psk_identity, size_t psk_identity_len ); + + +/** + * \brief Set the Pre Shared Key (PSK) for the current handshake + * + * \note This should only be called inside the PSK callback, + * ie the function passed to \c mbedtls_ssl_conf_psk_cb(). + * + * \param ssl SSL context + * \param psk pointer to the pre-shared key + * \param psk_len pre-shared key length + * + * \return 0 if successful or MBEDTLS_ERR_SSL_ALLOC_FAILED + */ +int mbedtls_ssl_set_hs_psk( mbedtls_ssl_context *ssl, + const unsigned char *psk, size_t psk_len ); + +/** + * \brief Set the PSK callback (server-side only). + * + * If set, the PSK callback is called for each + * handshake where a PSK ciphersuite was negotiated. + * The caller provides the identity received and wants to + * receive the actual PSK data and length. + * + * The callback has the following parameters: (void *parameter, + * mbedtls_ssl_context *ssl, const unsigned char *psk_identity, + * size_t identity_len) + * If a valid PSK identity is found, the callback should use + * \c mbedtls_ssl_set_hs_psk() on the ssl context to set the + * correct PSK and return 0. + * Any other return value will result in a denied PSK identity. + * + * \note If you set a PSK callback using this function, then you + * don't need to set a PSK key and identity using + * \c mbedtls_ssl_conf_psk(). + * + * \param conf SSL configuration + * \param f_psk PSK identity function + * \param p_psk PSK identity parameter + */ +void mbedtls_ssl_conf_psk_cb( mbedtls_ssl_config *conf, + int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, + size_t), + void *p_psk ); +#endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ + +#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_SRV_C) +/** + * \brief Set the Diffie-Hellman public P and G values, + * read as hexadecimal strings (server-side only) + * (Default: MBEDTLS_DHM_RFC5114_MODP_2048_[PG]) + * + * \param conf SSL configuration + * \param dhm_P Diffie-Hellman-Merkle modulus + * \param dhm_G Diffie-Hellman-Merkle generator + * + * \return 0 if successful + */ +int mbedtls_ssl_conf_dh_param( mbedtls_ssl_config *conf, const char *dhm_P, const char *dhm_G ); + +/** + * \brief Set the Diffie-Hellman public P and G values, + * read from existing context (server-side only) + * + * \param conf SSL configuration + * \param dhm_ctx Diffie-Hellman-Merkle context + * + * \return 0 if successful + */ +int mbedtls_ssl_conf_dh_param_ctx( mbedtls_ssl_config *conf, mbedtls_dhm_context *dhm_ctx ); +#endif /* MBEDTLS_DHM_C && defined(MBEDTLS_SSL_SRV_C) */ + +#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_CLI_C) +/** + * \brief Set the minimum length for Diffie-Hellman parameters. + * (Client-side only.) + * (Default: 1024 bits.) + * + * \param conf SSL configuration + * \param bitlen Minimum bit length of the DHM prime + */ +void mbedtls_ssl_conf_dhm_min_bitlen( mbedtls_ssl_config *conf, + unsigned int bitlen ); +#endif /* MBEDTLS_DHM_C && MBEDTLS_SSL_CLI_C */ + +#if defined(MBEDTLS_ECP_C) +/** + * \brief Set the allowed curves in order of preference. + * (Default: all defined curves.) + * + * On server: this only affects selection of the ECDHE curve; + * the curves used for ECDH and ECDSA are determined by the + * list of available certificates instead. + * + * On client: this affects the list of curves offered for any + * use. The server can override our preference order. + * + * Both sides: limits the set of curves accepted for use in + * ECDHE and in the peer's end-entity certificate. + * + * \note This has no influence on which curves are allowed inside the + * certificate chains, see \c mbedtls_ssl_conf_cert_profile() + * for that. For the end-entity certificate however, the key + * will be accepted only if it is allowed both by this list + * and by the cert profile. + * + * \note This list should be ordered by decreasing preference + * (preferred curve first). + * + * \param conf SSL configuration + * \param curves Ordered list of allowed curves, + * terminated by MBEDTLS_ECP_DP_NONE. + */ +void mbedtls_ssl_conf_curves( mbedtls_ssl_config *conf, + const mbedtls_ecp_group_id *curves ); +#endif /* MBEDTLS_ECP_C */ + +#if defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) +/** + * \brief Set the allowed hashes for signatures during the handshake. + * (Default: all available hashes except MD5.) + * + * \note This only affects which hashes are offered and can be used + * for signatures during the handshake. Hashes for message + * authentication and the TLS PRF are controlled by the + * ciphersuite, see \c mbedtls_ssl_conf_ciphersuites(). Hashes + * used for certificate signature are controlled by the + * verification profile, see \c mbedtls_ssl_conf_cert_profile(). + * + * \note This list should be ordered by decreasing preference + * (preferred hash first). + * + * \param conf SSL configuration + * \param hashes Ordered list of allowed signature hashes, + * terminated by \c MBEDTLS_MD_NONE. + */ +void mbedtls_ssl_conf_sig_hashes( mbedtls_ssl_config *conf, + const int *hashes ); +#endif /* MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */ + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * \brief Set the hostname to check against the received server + * certificate. It sets the ServerName TLS extension too, + * if the extension is enabled. + * (client-side only) + * + * \param ssl SSL context + * \param hostname the server hostname + * + * \return 0 if successful or MBEDTLS_ERR_SSL_ALLOC_FAILED + */ +int mbedtls_ssl_set_hostname( mbedtls_ssl_context *ssl, const char *hostname ); +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + +#if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) +/** + * \brief Set own certificate and key for the current handshake + * + * \note Same as \c mbedtls_ssl_conf_own_cert() but for use within + * the SNI callback. + * + * \param ssl SSL context + * \param own_cert own public certificate chain + * \param pk_key own private key + * + * \return 0 on success or MBEDTLS_ERR_SSL_ALLOC_FAILED + */ +int mbedtls_ssl_set_hs_own_cert( mbedtls_ssl_context *ssl, + mbedtls_x509_crt *own_cert, + mbedtls_pk_context *pk_key ); + +/** + * \brief Set the data required to verify peer certificate for the + * current handshake + * + * \note Same as \c mbedtls_ssl_conf_ca_chain() but for use within + * the SNI callback. + * + * \param ssl SSL context + * \param ca_chain trusted CA chain (meaning all fully trusted top-level CAs) + * \param ca_crl trusted CA CRLs + */ +void mbedtls_ssl_set_hs_ca_chain( mbedtls_ssl_context *ssl, + mbedtls_x509_crt *ca_chain, + mbedtls_x509_crl *ca_crl ); + +/** + * \brief Set authmode for the current handshake. + * + * \note Same as \c mbedtls_ssl_conf_authmode() but for use within + * the SNI callback. + * + * \param ssl SSL context + * \param authmode MBEDTLS_SSL_VERIFY_NONE, MBEDTLS_SSL_VERIFY_OPTIONAL or + * MBEDTLS_SSL_VERIFY_REQUIRED + */ +void mbedtls_ssl_set_hs_authmode( mbedtls_ssl_context *ssl, + int authmode ); + +/** + * \brief Set server side ServerName TLS extension callback + * (optional, server-side only). + * + * If set, the ServerName callback is called whenever the + * server receives a ServerName TLS extension from the client + * during a handshake. The ServerName callback has the + * following parameters: (void *parameter, mbedtls_ssl_context *ssl, + * const unsigned char *hostname, size_t len). If a suitable + * certificate is found, the callback must set the + * certificate(s) and key(s) to use with \c + * mbedtls_ssl_set_hs_own_cert() (can be called repeatedly), + * and may optionally adjust the CA and associated CRL with \c + * mbedtls_ssl_set_hs_ca_chain() as well as the client + * authentication mode with \c mbedtls_ssl_set_hs_authmode(), + * then must return 0. If no matching name is found, the + * callback must either set a default cert, or + * return non-zero to abort the handshake at this point. + * + * \param conf SSL configuration + * \param f_sni verification function + * \param p_sni verification parameter + */ +void mbedtls_ssl_conf_sni( mbedtls_ssl_config *conf, + int (*f_sni)(void *, mbedtls_ssl_context *, const unsigned char *, + size_t), + void *p_sni ); +#endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ + +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) +/** + * \brief Set the EC J-PAKE password for current handshake. + * + * \note An internal copy is made, and destroyed as soon as the + * handshake is completed, or when the SSL context is reset or + * freed. + * + * \note The SSL context needs to be already set up. The right place + * to call this function is between \c mbedtls_ssl_setup() or + * \c mbedtls_ssl_reset() and \c mbedtls_ssl_handshake(). + * + * \param ssl SSL context + * \param pw EC J-PAKE password (pre-shared secret) + * \param pw_len length of pw in bytes + * + * \return 0 on success, or a negative error code. + */ +int mbedtls_ssl_set_hs_ecjpake_password( mbedtls_ssl_context *ssl, + const unsigned char *pw, + size_t pw_len ); +#endif /*MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ + +#if defined(MBEDTLS_SSL_ALPN) +/** + * \brief Set the supported Application Layer Protocols. + * + * \param conf SSL configuration + * \param protos Pointer to a NULL-terminated list of supported protocols, + * in decreasing preference order. The pointer to the list is + * recorded by the library for later reference as required, so + * the lifetime of the table must be atleast as long as the + * lifetime of the SSL configuration structure. + * + * \return 0 on success, or MBEDTLS_ERR_SSL_BAD_INPUT_DATA. + */ +int mbedtls_ssl_conf_alpn_protocols( mbedtls_ssl_config *conf, const char **protos ); + +/** + * \brief Get the name of the negotiated Application Layer Protocol. + * This function should be called after the handshake is + * completed. + * + * \param ssl SSL context + * + * \return Protcol name, or NULL if no protocol was negotiated. + */ +const char *mbedtls_ssl_get_alpn_protocol( const mbedtls_ssl_context *ssl ); +#endif /* MBEDTLS_SSL_ALPN */ + +/** + * \brief Set the maximum supported version sent from the client side + * and/or accepted at the server side + * (Default: MBEDTLS_SSL_MAX_MAJOR_VERSION, MBEDTLS_SSL_MAX_MINOR_VERSION) + * + * \note This ignores ciphersuites from higher versions. + * + * \note With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and + * MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2 + * + * \param conf SSL configuration + * \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported) + * \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, + * MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, + * MBEDTLS_SSL_MINOR_VERSION_3 supported) + */ +void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int minor ); + +/** + * \brief Set the minimum accepted SSL/TLS protocol version + * (Default: TLS 1.0) + * + * \note Input outside of the SSL_MAX_XXXXX_VERSION and + * SSL_MIN_XXXXX_VERSION range is ignored. + * + * \note MBEDTLS_SSL_MINOR_VERSION_0 (SSL v3) should be avoided. + * + * \note With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and + * MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2 + * + * \param conf SSL configuration + * \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported) + * \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, + * MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, + * MBEDTLS_SSL_MINOR_VERSION_3 supported) + */ +void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int minor ); + +#if defined(MBEDTLS_SSL_FALLBACK_SCSV) && defined(MBEDTLS_SSL_CLI_C) +/** + * \brief Set the fallback flag (client-side only). + * (Default: MBEDTLS_SSL_IS_NOT_FALLBACK). + * + * \note Set to MBEDTLS_SSL_IS_FALLBACK when preparing a fallback + * connection, that is a connection with max_version set to a + * lower value than the value you're willing to use. Such + * fallback connections are not recommended but are sometimes + * necessary to interoperate with buggy (version-intolerant) + * servers. + * + * \warning You should NOT set this to MBEDTLS_SSL_IS_FALLBACK for + * non-fallback connections! This would appear to work for a + * while, then cause failures when the server is upgraded to + * support a newer TLS version. + * + * \param conf SSL configuration + * \param fallback MBEDTLS_SSL_IS_NOT_FALLBACK or MBEDTLS_SSL_IS_FALLBACK + */ +void mbedtls_ssl_conf_fallback( mbedtls_ssl_config *conf, char fallback ); +#endif /* MBEDTLS_SSL_FALLBACK_SCSV && MBEDTLS_SSL_CLI_C */ + +#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) +/** + * \brief Enable or disable Encrypt-then-MAC + * (Default: MBEDTLS_SSL_ETM_ENABLED) + * + * \note This should always be enabled, it is a security + * improvement, and should not cause any interoperability + * issue (used only if the peer supports it too). + * + * \param conf SSL configuration + * \param etm MBEDTLS_SSL_ETM_ENABLED or MBEDTLS_SSL_ETM_DISABLED + */ +void mbedtls_ssl_conf_encrypt_then_mac( mbedtls_ssl_config *conf, char etm ); +#endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ + +#if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) +/** + * \brief Enable or disable Extended Master Secret negotiation. + * (Default: MBEDTLS_SSL_EXTENDED_MS_ENABLED) + * + * \note This should always be enabled, it is a security fix to the + * protocol, and should not cause any interoperability issue + * (used only if the peer supports it too). + * + * \param conf SSL configuration + * \param ems MBEDTLS_SSL_EXTENDED_MS_ENABLED or MBEDTLS_SSL_EXTENDED_MS_DISABLED + */ +void mbedtls_ssl_conf_extended_master_secret( mbedtls_ssl_config *conf, char ems ); +#endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ + +#if defined(MBEDTLS_ARC4_C) +/** + * \brief Disable or enable support for RC4 + * (Default: MBEDTLS_SSL_ARC4_DISABLED) + * + * \warning Use of RC4 in DTLS/TLS has been prohibited by RFC 7465 + * for security reasons. Use at your own risk. + * + * \note This function is deprecated and will likely be removed in + * a future version of the library. + * RC4 is disabled by default at compile time and needs to be + * actively enabled for use with legacy systems. + * + * \param conf SSL configuration + * \param arc4 MBEDTLS_SSL_ARC4_ENABLED or MBEDTLS_SSL_ARC4_DISABLED + */ +void mbedtls_ssl_conf_arc4_support( mbedtls_ssl_config *conf, char arc4 ); +#endif /* MBEDTLS_ARC4_C */ + +#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) +/** + * \brief Set the maximum fragment length to emit and/or negotiate + * (Default: MBEDTLS_SSL_MAX_CONTENT_LEN, usually 2^14 bytes) + * (Server: set maximum fragment length to emit, + * usually negotiated by the client during handshake + * (Client: set maximum fragment length to emit *and* + * negotiate with the server during handshake) + * + * \param conf SSL configuration + * \param mfl_code Code for maximum fragment length (allowed values: + * MBEDTLS_SSL_MAX_FRAG_LEN_512, MBEDTLS_SSL_MAX_FRAG_LEN_1024, + * MBEDTLS_SSL_MAX_FRAG_LEN_2048, MBEDTLS_SSL_MAX_FRAG_LEN_4096) + * + * \return 0 if successful or MBEDTLS_ERR_SSL_BAD_INPUT_DATA + */ +int mbedtls_ssl_conf_max_frag_len( mbedtls_ssl_config *conf, unsigned char mfl_code ); +#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ + +#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) +/** + * \brief Activate negotiation of truncated HMAC + * (Default: MBEDTLS_SSL_TRUNC_HMAC_DISABLED) + * + * \param conf SSL configuration + * \param truncate Enable or disable (MBEDTLS_SSL_TRUNC_HMAC_ENABLED or + * MBEDTLS_SSL_TRUNC_HMAC_DISABLED) + */ +void mbedtls_ssl_conf_truncated_hmac( mbedtls_ssl_config *conf, int truncate ); +#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ + +#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) +/** + * \brief Enable / Disable 1/n-1 record splitting + * (Default: MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED) + * + * \note Only affects SSLv3 and TLS 1.0, not higher versions. + * Does not affect non-CBC ciphersuites in any version. + * + * \param conf SSL configuration + * \param split MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED or + * MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED + */ +void mbedtls_ssl_conf_cbc_record_splitting( mbedtls_ssl_config *conf, char split ); +#endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */ + +#if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) +/** + * \brief Enable / Disable session tickets (client only). + * (Default: MBEDTLS_SSL_SESSION_TICKETS_ENABLED.) + * + * \note On server, use \c mbedtls_ssl_conf_session_tickets_cb(). + * + * \param conf SSL configuration + * \param use_tickets Enable or disable (MBEDTLS_SSL_SESSION_TICKETS_ENABLED or + * MBEDTLS_SSL_SESSION_TICKETS_DISABLED) + */ +void mbedtls_ssl_conf_session_tickets( mbedtls_ssl_config *conf, int use_tickets ); +#endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */ + +#if defined(MBEDTLS_SSL_RENEGOTIATION) +/** + * \brief Enable / Disable renegotiation support for connection when + * initiated by peer + * (Default: MBEDTLS_SSL_RENEGOTIATION_DISABLED) + * + * \warning It is recommended to always disable renegotation unless you + * know you need it and you know what you're doing. In the + * past, there have been several issues associated with + * renegotiation or a poor understanding of its properties. + * + * \note Server-side, enabling renegotiation also makes the server + * susceptible to a resource DoS by a malicious client. + * + * \param conf SSL configuration + * \param renegotiation Enable or disable (MBEDTLS_SSL_RENEGOTIATION_ENABLED or + * MBEDTLS_SSL_RENEGOTIATION_DISABLED) + */ +void mbedtls_ssl_conf_renegotiation( mbedtls_ssl_config *conf, int renegotiation ); +#endif /* MBEDTLS_SSL_RENEGOTIATION */ + +/** + * \brief Prevent or allow legacy renegotiation. + * (Default: MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION) + * + * MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION allows connections to + * be established even if the peer does not support + * secure renegotiation, but does not allow renegotiation + * to take place if not secure. + * (Interoperable and secure option) + * + * MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION allows renegotiations + * with non-upgraded peers. Allowing legacy renegotiation + * makes the connection vulnerable to specific man in the + * middle attacks. (See RFC 5746) + * (Most interoperable and least secure option) + * + * MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE breaks off connections + * if peer does not support secure renegotiation. Results + * in interoperability issues with non-upgraded peers + * that do not support renegotiation altogether. + * (Most secure option, interoperability issues) + * + * \param conf SSL configuration + * \param allow_legacy Prevent or allow (SSL_NO_LEGACY_RENEGOTIATION, + * SSL_ALLOW_LEGACY_RENEGOTIATION or + * MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE) + */ +void mbedtls_ssl_conf_legacy_renegotiation( mbedtls_ssl_config *conf, int allow_legacy ); + +#if defined(MBEDTLS_SSL_RENEGOTIATION) +/** + * \brief Enforce renegotiation requests. + * (Default: enforced, max_records = 16) + * + * When we request a renegotiation, the peer can comply or + * ignore the request. This function allows us to decide + * whether to enforce our renegotiation requests by closing + * the connection if the peer doesn't comply. + * + * However, records could already be in transit from the peer + * when the request is emitted. In order to increase + * reliability, we can accept a number of records before the + * expected handshake records. + * + * The optimal value is highly dependent on the specific usage + * scenario. + * + * \note With DTLS and server-initiated renegotiation, the + * HelloRequest is retransmited every time mbedtls_ssl_read() times + * out or receives Application Data, until: + * - max_records records have beens seen, if it is >= 0, or + * - the number of retransmits that would happen during an + * actual handshake has been reached. + * Please remember the request might be lost a few times + * if you consider setting max_records to a really low value. + * + * \warning On client, the grace period can only happen during + * mbedtls_ssl_read(), as opposed to mbedtls_ssl_write() and mbedtls_ssl_renegotiate() + * which always behave as if max_record was 0. The reason is, + * if we receive application data from the server, we need a + * place to write it, which only happens during mbedtls_ssl_read(). + * + * \param conf SSL configuration + * \param max_records Use MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED if you don't want to + * enforce renegotiation, or a non-negative value to enforce + * it but allow for a grace period of max_records records. + */ +void mbedtls_ssl_conf_renegotiation_enforced( mbedtls_ssl_config *conf, int max_records ); + +/** + * \brief Set record counter threshold for periodic renegotiation. + * (Default: 2^64 - 256.) + * + * Renegotiation is automatically triggered when a record + * counter (outgoing or ingoing) crosses the defined + * threshold. The default value is meant to prevent the + * connection from being closed when the counter is about to + * reached its maximal value (it is not allowed to wrap). + * + * Lower values can be used to enforce policies such as "keys + * must be refreshed every N packets with cipher X". + * + * \param conf SSL configuration + * \param period The threshold value: a big-endian 64-bit number. + * Set to 2^64 - 1 to disable periodic renegotiation + */ +void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, + const unsigned char period[8] ); +#endif /* MBEDTLS_SSL_RENEGOTIATION */ + +/** + * \brief Return the number of data bytes available to read + * + * \param ssl SSL context + * + * \return how many bytes are available in the read buffer + */ +size_t mbedtls_ssl_get_bytes_avail( const mbedtls_ssl_context *ssl ); + +/** + * \brief Return the result of the certificate verification + * + * \param ssl SSL context + * + * \return 0 if successful, + * -1 if result is not available (eg because the handshake was + * aborted too early), or + * a combination of BADCERT_xxx and BADCRL_xxx flags, see + * x509.h + */ +uint32_t mbedtls_ssl_get_verify_result( const mbedtls_ssl_context *ssl ); + +/** + * \brief Return the name of the current ciphersuite + * + * \param ssl SSL context + * + * \return a string containing the ciphersuite name + */ +const char *mbedtls_ssl_get_ciphersuite( const mbedtls_ssl_context *ssl ); + +/** + * \brief Return the current SSL version (SSLv3/TLSv1/etc) + * + * \param ssl SSL context + * + * \return a string containing the SSL version + */ +const char *mbedtls_ssl_get_version( const mbedtls_ssl_context *ssl ); + +/** + * \brief Return the (maximum) number of bytes added by the record + * layer: header + encryption/MAC overhead (inc. padding) + * + * \param ssl SSL context + * + * \return Current maximum record expansion in bytes, or + * MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE if compression is + * enabled, which makes expansion much less predictable + */ +int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl ); + +#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) +/** + * \brief Return the maximum fragment length (payload, in bytes). + * This is the value negotiated with peer if any, + * or the locally configured value. + * + * \note With DTLS, \c mbedtls_ssl_write() will return an error if + * called with a larger length value. + * With TLS, \c mbedtls_ssl_write() will fragment the input if + * necessary and return the number of bytes written; it is up + * to the caller to call \c mbedtls_ssl_write() again in + * order to send the remaining bytes if any. + * + * \param ssl SSL context + * + * \return Current maximum fragment length. + */ +size_t mbedtls_ssl_get_max_frag_len( const mbedtls_ssl_context *ssl ); +#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * \brief Return the peer certificate from the current connection + * + * Note: Can be NULL in case no certificate was sent during + * the handshake. Different calls for the same connection can + * return the same or different pointers for the same + * certificate and even a different certificate altogether. + * The peer cert CAN change in a single connection if + * renegotiation is performed. + * + * \param ssl SSL context + * + * \return the current peer certificate + */ +const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ssl ); +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + +#if defined(MBEDTLS_SSL_CLI_C) +/** + * \brief Save session in order to resume it later (client-side only) + * Session data is copied to presented session structure. + * + * \warning Currently, peer certificate is lost in the operation. + * + * \param ssl SSL context + * \param session session context + * + * \return 0 if successful, + * MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used server-side or + * arguments are otherwise invalid + * + * \sa mbedtls_ssl_set_session() + */ +int mbedtls_ssl_get_session( const mbedtls_ssl_context *ssl, mbedtls_ssl_session *session ); +#endif /* MBEDTLS_SSL_CLI_C */ + +/** + * \brief Perform the SSL handshake + * + * \param ssl SSL context + * + * \return 0 if successful, or + * MBEDTLS_ERR_SSL_WANT_READ or MBEDTLS_ERR_SSL_WANT_WRITE, or + * MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED (see below), or + * a specific SSL error code. + * + * \note If this function returns something other than 0 or + * MBEDTLS_ERR_SSL_WANT_READ/WRITE, then the ssl context + * becomes unusable, and you should either free it or call + * \c mbedtls_ssl_session_reset() on it before re-using it for + * a new connection; the current connection must be closed. + * + * \note If DTLS is in use, then you may choose to handle + * MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED specially for logging + * purposes, as it is an expected return value rather than an + * actual error, but you still need to reset/free the context. + */ +int mbedtls_ssl_handshake( mbedtls_ssl_context *ssl ); + +/** + * \brief Perform a single step of the SSL handshake + * + * \note The state of the context (ssl->state) will be at + * the next state after execution of this function. Do not + * call this function if state is MBEDTLS_SSL_HANDSHAKE_OVER. + * + * \note If this function returns something other than 0 or + * MBEDTLS_ERR_SSL_WANT_READ/WRITE, then the ssl context + * becomes unusable, and you should either free it or call + * \c mbedtls_ssl_session_reset() on it before re-using it for + * a new connection; the current connection must be closed. + * + * \param ssl SSL context + * + * \return 0 if successful, or + * MBEDTLS_ERR_SSL_WANT_READ or MBEDTLS_ERR_SSL_WANT_WRITE, or + * a specific SSL error code. + */ +int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl ); + +#if defined(MBEDTLS_SSL_RENEGOTIATION) +/** + * \brief Initiate an SSL renegotiation on the running connection. + * Client: perform the renegotiation right now. + * Server: request renegotiation, which will be performed + * during the next call to mbedtls_ssl_read() if honored by + * client. + * + * \param ssl SSL context + * + * \return 0 if successful, or any mbedtls_ssl_handshake() return + * value. + * + * \note If this function returns something other than 0 or + * MBEDTLS_ERR_SSL_WANT_READ/WRITE, then the ssl context + * becomes unusable, and you should either free it or call + * \c mbedtls_ssl_session_reset() on it before re-using it for + * a new connection; the current connection must be closed. + */ +int mbedtls_ssl_renegotiate( mbedtls_ssl_context *ssl ); +#endif /* MBEDTLS_SSL_RENEGOTIATION */ + +/** + * \brief Read at most 'len' application data bytes + * + * \param ssl SSL context + * \param buf buffer that will hold the data + * \param len maximum number of bytes to read + * + * \return the number of bytes read, or + * 0 for EOF, or + * MBEDTLS_ERR_SSL_WANT_READ or MBEDTLS_ERR_SSL_WANT_WRITE, or + * MBEDTLS_ERR_SSL_CLIENT_RECONNECT (see below), or + * another negative error code. + * + * \note If this function returns something other than a positive + * value or MBEDTLS_ERR_SSL_WANT_READ/WRITE or + * MBEDTLS_ERR_SSL_CLIENT_RECONNECT, then the ssl context + * becomes unusable, and you should either free it or call + * \c mbedtls_ssl_session_reset() on it before re-using it for + * a new connection; the current connection must be closed. + * + * \note When this function return MBEDTLS_ERR_SSL_CLIENT_RECONNECT + * (which can only happen server-side), it means that a client + * is initiating a new connection using the same source port. + * You can either treat that as a connection close and wait + * for the client to resend a ClientHello, or directly + * continue with \c mbedtls_ssl_handshake() with the same + * context (as it has beeen reset internally). Either way, you + * should make sure this is seen by the application as a new + * connection: application state, if any, should be reset, and + * most importantly the identity of the client must be checked + * again. WARNING: not validating the identity of the client + * again, or not transmitting the new identity to the + * application layer, would allow authentication bypass! + */ +int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ); + +/** + * \brief Try to write exactly 'len' application data bytes + * + * \warning This function will do partial writes in some cases. If the + * return value is non-negative but less than length, the + * function must be called again with updated arguments: + * buf + ret, len - ret (if ret is the return value) until + * it returns a value equal to the last 'len' argument. + * + * \param ssl SSL context + * \param buf buffer holding the data + * \param len how many bytes must be written + * + * \return the number of bytes actually written (may be less than len), + * or MBEDTLS_ERR_SSL_WANT_WRITE of MBEDTLS_ERR_SSL_WANT_READ, + * or another negative error code. + * + * \note If this function returns something other than a positive + * value or MBEDTLS_ERR_SSL_WANT_READ/WRITE, the ssl context + * becomes unusable, and you should either free it or call + * \c mbedtls_ssl_session_reset() on it before re-using it for + * a new connection; the current connection must be closed. + * + * \note When this function returns MBEDTLS_ERR_SSL_WANT_WRITE/READ, + * it must be called later with the *same* arguments, + * until it returns a positive value. + * + * \note If the requested length is greater than the maximum + * fragment length (either the built-in limit or the one set + * or negotiated with the peer), then: + * - with TLS, less bytes than requested are written. + * - with DTLS, MBEDTLS_ERR_SSL_BAD_INPUT_DATA is returned. + * \c mbedtls_ssl_get_max_frag_len() may be used to query the + * active maximum fragment length. + */ +int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len ); + +/** + * \brief Send an alert message + * + * \param ssl SSL context + * \param level The alert level of the message + * (MBEDTLS_SSL_ALERT_LEVEL_WARNING or MBEDTLS_SSL_ALERT_LEVEL_FATAL) + * \param message The alert message (SSL_ALERT_MSG_*) + * + * \return 0 if successful, or a specific SSL error code. + * + * \note If this function returns something other than 0 or + * MBEDTLS_ERR_SSL_WANT_READ/WRITE, then the ssl context + * becomes unusable, and you should either free it or call + * \c mbedtls_ssl_session_reset() on it before re-using it for + * a new connection; the current connection must be closed. + */ +int mbedtls_ssl_send_alert_message( mbedtls_ssl_context *ssl, + unsigned char level, + unsigned char message ); +/** + * \brief Notify the peer that the connection is being closed + * + * \param ssl SSL context + * + * \return 0 if successful, or a specific SSL error code. + * + * \note If this function returns something other than 0 or + * MBEDTLS_ERR_SSL_WANT_READ/WRITE, then the ssl context + * becomes unusable, and you should either free it or call + * \c mbedtls_ssl_session_reset() on it before re-using it for + * a new connection; the current connection must be closed. + */ +int mbedtls_ssl_close_notify( mbedtls_ssl_context *ssl ); + +/** + * \brief Free referenced items in an SSL context and clear memory + * + * \param ssl SSL context + */ +void mbedtls_ssl_free( mbedtls_ssl_context *ssl ); + +/** + * \brief Initialize an SSL configuration context + * Just makes the context ready for + * mbedtls_ssl_config_defaults() or mbedtls_ssl_config_free(). + * + * \note You need to call mbedtls_ssl_config_defaults() unless you + * manually set all of the relevent fields yourself. + * + * \param conf SSL configuration context + */ +void mbedtls_ssl_config_init( mbedtls_ssl_config *conf ); + +/** + * \brief Load reasonnable default SSL configuration values. + * (You need to call mbedtls_ssl_config_init() first.) + * + * \param conf SSL configuration context + * \param endpoint MBEDTLS_SSL_IS_CLIENT or MBEDTLS_SSL_IS_SERVER + * \param transport MBEDTLS_SSL_TRANSPORT_STREAM for TLS, or + * MBEDTLS_SSL_TRANSPORT_DATAGRAM for DTLS + * \param preset a MBEDTLS_SSL_PRESET_XXX value + * (currently unused). + * + * \note See \c mbedtls_ssl_conf_transport() for notes on DTLS. + * + * \return 0 if successful, or + * MBEDTLS_ERR_XXX_ALLOC_FAILED on memory allocation error. + */ +int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, + int endpoint, int transport, int preset ); + +/** + * \brief Free an SSL configuration context + * + * \param conf SSL configuration context + */ +void mbedtls_ssl_config_free( mbedtls_ssl_config *conf ); + +/** + * \brief Initialize SSL session structure + * + * \param session SSL session + */ +void mbedtls_ssl_session_init( mbedtls_ssl_session *session ); + +/** + * \brief Free referenced items in an SSL session including the + * peer certificate and clear memory + * + * \param session SSL session + */ +void mbedtls_ssl_session_free( mbedtls_ssl_session *session ); + +#ifdef __cplusplus +} +#endif + +#endif /* ssl.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ssl_cache.h b/tools/sdk/include/mbedtls/mbedtls/ssl_cache.h new file mode 100644 index 00000000..3734bb72 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ssl_cache.h @@ -0,0 +1,143 @@ +/** + * \file ssl_cache.h + * + * \brief SSL session cache implementation + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SSL_CACHE_H +#define MBEDTLS_SSL_CACHE_H + +#include "ssl.h" + +#if defined(MBEDTLS_THREADING_C) +#include "threading.h" +#endif + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them on the compiler command line. + * \{ + */ + +#if !defined(MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT) +#define MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT 86400 /*!< 1 day */ +#endif + +#if !defined(MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES) +#define MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /*!< Maximum entries in cache */ +#endif + +/* \} name SECTION: Module settings */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct mbedtls_ssl_cache_context mbedtls_ssl_cache_context; +typedef struct mbedtls_ssl_cache_entry mbedtls_ssl_cache_entry; + +/** + * \brief This structure is used for storing cache entries + */ +struct mbedtls_ssl_cache_entry +{ +#if defined(MBEDTLS_HAVE_TIME) + mbedtls_time_t timestamp; /*!< entry timestamp */ +#endif + mbedtls_ssl_session session; /*!< entry session */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) + mbedtls_x509_buf peer_cert; /*!< entry peer_cert */ +#endif + mbedtls_ssl_cache_entry *next; /*!< chain pointer */ +}; + +/** + * \brief Cache context + */ +struct mbedtls_ssl_cache_context +{ + mbedtls_ssl_cache_entry *chain; /*!< start of the chain */ + int timeout; /*!< cache entry timeout */ + int max_entries; /*!< maximum entries */ +#if defined(MBEDTLS_THREADING_C) + mbedtls_threading_mutex_t mutex; /*!< mutex */ +#endif +}; + +/** + * \brief Initialize an SSL cache context + * + * \param cache SSL cache context + */ +void mbedtls_ssl_cache_init( mbedtls_ssl_cache_context *cache ); + +/** + * \brief Cache get callback implementation + * (Thread-safe if MBEDTLS_THREADING_C is enabled) + * + * \param data SSL cache context + * \param session session to retrieve entry for + */ +int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ); + +/** + * \brief Cache set callback implementation + * (Thread-safe if MBEDTLS_THREADING_C is enabled) + * + * \param data SSL cache context + * \param session session to store entry for + */ +int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ); + +#if defined(MBEDTLS_HAVE_TIME) +/** + * \brief Set the cache timeout + * (Default: MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT (1 day)) + * + * A timeout of 0 indicates no timeout. + * + * \param cache SSL cache context + * \param timeout cache entry timeout in seconds + */ +void mbedtls_ssl_cache_set_timeout( mbedtls_ssl_cache_context *cache, int timeout ); +#endif /* MBEDTLS_HAVE_TIME */ + +/** + * \brief Set the maximum number of cache entries + * (Default: MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES (50)) + * + * \param cache SSL cache context + * \param max cache entry maximum + */ +void mbedtls_ssl_cache_set_max_entries( mbedtls_ssl_cache_context *cache, int max ); + +/** + * \brief Free referenced items in a cache context and clear memory + * + * \param cache SSL cache context + */ +void mbedtls_ssl_cache_free( mbedtls_ssl_cache_context *cache ); + +#ifdef __cplusplus +} +#endif + +#endif /* ssl_cache.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ssl_ciphersuites.h b/tools/sdk/include/mbedtls/mbedtls/ssl_ciphersuites.h new file mode 100644 index 00000000..deaaa375 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ssl_ciphersuites.h @@ -0,0 +1,321 @@ +/** + * \file ssl_ciphersuites.h + * + * \brief SSL Ciphersuites for mbed TLS + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SSL_CIPHERSUITES_H +#define MBEDTLS_SSL_CIPHERSUITES_H + +#include "pk.h" +#include "cipher.h" +#include "md.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Supported ciphersuites (Official IANA names) + */ +#define MBEDTLS_TLS_RSA_WITH_NULL_MD5 0x01 /**< Weak! */ +#define MBEDTLS_TLS_RSA_WITH_NULL_SHA 0x02 /**< Weak! */ + +#define MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 0x04 +#define MBEDTLS_TLS_RSA_WITH_RC4_128_SHA 0x05 +#define MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA 0x09 /**< Weak! Not in TLS 1.2 */ + +#define MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA 0x0A + +#define MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA 0x15 /**< Weak! Not in TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 0x16 + +#define MBEDTLS_TLS_PSK_WITH_NULL_SHA 0x2C /**< Weak! */ +#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA 0x2D /**< Weak! */ +#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA 0x2E /**< Weak! */ +#define MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA 0x2F + +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x33 +#define MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA 0x35 +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x39 + +#define MBEDTLS_TLS_RSA_WITH_NULL_SHA256 0x3B /**< Weak! */ +#define MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 0x3C /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 0x3D /**< TLS 1.2 */ + +#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 0x41 +#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x45 + +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x67 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x6B /**< TLS 1.2 */ + +#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA 0x84 +#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x88 + +#define MBEDTLS_TLS_PSK_WITH_RC4_128_SHA 0x8A +#define MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA 0x8B +#define MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA 0x8C +#define MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA 0x8D + +#define MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA 0x8E +#define MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x8F +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA 0x90 +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA 0x91 + +#define MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA 0x92 +#define MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x93 +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA 0x94 +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA 0x95 + +#define MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 0x9C /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 0x9D /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x9E /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x9F /**< TLS 1.2 */ + +#define MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 0xA8 /**< TLS 1.2 */ +#define MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 0xA9 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 0xAA /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 0xAB /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 0xAC /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 0xAD /**< TLS 1.2 */ + +#define MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 0xAE +#define MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 0xAF +#define MBEDTLS_TLS_PSK_WITH_NULL_SHA256 0xB0 /**< Weak! */ +#define MBEDTLS_TLS_PSK_WITH_NULL_SHA384 0xB1 /**< Weak! */ + +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 0xB2 +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 0xB3 +#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256 0xB4 /**< Weak! */ +#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384 0xB5 /**< Weak! */ + +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 0xB6 +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 0xB7 +#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256 0xB8 /**< Weak! */ +#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384 0xB9 /**< Weak! */ + +#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xBA /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xBE /**< TLS 1.2 */ + +#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 0xC0 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0xC4 /**< TLS 1.2 */ + +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA 0xC001 /**< Weak! */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA 0xC002 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC003 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0xC004 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0xC005 /**< Not in SSL3! */ + +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA 0xC006 /**< Weak! */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 0xC007 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC008 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xC009 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xC00A /**< Not in SSL3! */ + +#define MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA 0xC00B /**< Weak! */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA 0xC00C /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA 0xC00D /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA 0xC00E /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA 0xC00F /**< Not in SSL3! */ + +#define MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA 0xC010 /**< Weak! */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA 0xC011 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 0xC012 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xC013 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xC014 /**< Not in SSL3! */ + +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xC023 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xC024 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 0xC025 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 0xC026 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xC027 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 0xC028 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 0xC029 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 0xC02A /**< TLS 1.2 */ + +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xC02B /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xC02C /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0xC02D /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0xC02E /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xC02F /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xC030 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 0xC031 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 0xC032 /**< TLS 1.2 */ + +#define MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA 0xC033 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0xC034 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA 0xC035 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA 0xC036 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0xC037 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0xC038 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA 0xC039 /**< Weak! No SSL3! */ +#define MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256 0xC03A /**< Weak! No SSL3! */ +#define MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384 0xC03B /**< Weak! No SSL3! */ + +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0xC072 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0xC073 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0xC074 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0xC075 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xC076 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0xC077 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xC078 /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 0xC079 /**< Not in SSL3! */ + +#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC07A /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC07B /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC07C /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC07D /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 0xC086 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 0xC087 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 0xC088 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 0xC089 /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC08A /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC08B /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC08C /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC08D /**< TLS 1.2 */ + +#define MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 0xC08E /**< TLS 1.2 */ +#define MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 0xC08F /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 0xC090 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 0xC091 /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 0xC092 /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 0xC093 /**< TLS 1.2 */ + +#define MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC094 +#define MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC095 +#define MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC096 +#define MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC097 +#define MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC098 +#define MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC099 +#define MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC09A /**< Not in SSL3! */ +#define MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC09B /**< Not in SSL3! */ + +#define MBEDTLS_TLS_RSA_WITH_AES_128_CCM 0xC09C /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_AES_256_CCM 0xC09D /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM 0xC09E /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM 0xC09F /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_AES_128_CCM_8 0xC0A0 /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_AES_256_CCM_8 0xC0A1 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM_8 0xC0A2 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM_8 0xC0A3 /**< TLS 1.2 */ +#define MBEDTLS_TLS_PSK_WITH_AES_128_CCM 0xC0A4 /**< TLS 1.2 */ +#define MBEDTLS_TLS_PSK_WITH_AES_256_CCM 0xC0A5 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM 0xC0A6 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM 0xC0A7 /**< TLS 1.2 */ +#define MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8 0xC0A8 /**< TLS 1.2 */ +#define MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8 0xC0A9 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM_8 0xC0AA /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM_8 0xC0AB /**< TLS 1.2 */ +/* The last two are named with PSK_DHE in the RFC, which looks like a typo */ + +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM 0xC0AC /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM 0xC0AD /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 0xC0AE /**< TLS 1.2 */ +#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 0xC0AF /**< TLS 1.2 */ + +#define MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 0xC0FF /**< experimental */ + +/* Reminder: update mbedtls_ssl_premaster_secret when adding a new key exchange. + * Reminder: update MBEDTLS_KEY_EXCHANGE__xxx below + */ +typedef enum { + MBEDTLS_KEY_EXCHANGE_NONE = 0, + MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_KEY_EXCHANGE_ECJPAKE, +} mbedtls_key_exchange_type_t; + +/* Key exchanges using a certificate */ +#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) +#define MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED +#endif + +/* Key exchanges using a PSK */ +#if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) +#define MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED +#endif + +/* Key exchanges using a ECDHE */ +#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) +#define MBEDTLS_KEY_EXCHANGE__SOME__ECDHE_ENABLED +#endif + +typedef struct mbedtls_ssl_ciphersuite_t mbedtls_ssl_ciphersuite_t; + +#define MBEDTLS_CIPHERSUITE_WEAK 0x01 /**< Weak ciphersuite flag */ +#define MBEDTLS_CIPHERSUITE_SHORT_TAG 0x02 /**< Short authentication tag, + eg for CCM_8 */ +#define MBEDTLS_CIPHERSUITE_NODTLS 0x04 /**< Can't be used with DTLS */ + +/** + * \brief This structure is used for storing ciphersuite information + */ +struct mbedtls_ssl_ciphersuite_t +{ + int id; + const char * name; + + mbedtls_cipher_type_t cipher; + mbedtls_md_type_t mac; + mbedtls_key_exchange_type_t key_exchange; + + int min_major_ver; + int min_minor_ver; + int max_major_ver; + int max_minor_ver; + + unsigned char flags; +}; + +const int *mbedtls_ssl_list_ciphersuites( void ); + +const mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_string( const char *ciphersuite_name ); +const mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_id( int ciphersuite_id ); + +#if defined(MBEDTLS_PK_C) +mbedtls_pk_type_t mbedtls_ssl_get_ciphersuite_sig_pk_alg( const mbedtls_ssl_ciphersuite_t *info ); +#endif + +int mbedtls_ssl_ciphersuite_uses_ec( const mbedtls_ssl_ciphersuite_t *info ); +int mbedtls_ssl_ciphersuite_uses_psk( const mbedtls_ssl_ciphersuite_t *info ); + +#ifdef __cplusplus +} +#endif + +#endif /* ssl_ciphersuites.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ssl_cookie.h b/tools/sdk/include/mbedtls/mbedtls/ssl_cookie.h new file mode 100644 index 00000000..037e1c31 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ssl_cookie.h @@ -0,0 +1,108 @@ +/** + * \file ssl_cookie.h + * + * \brief DTLS cookie callbacks implementation + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SSL_COOKIE_H +#define MBEDTLS_SSL_COOKIE_H + +#include "ssl.h" + +#if defined(MBEDTLS_THREADING_C) +#include "threading.h" +#endif + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them on the compiler command line. + * \{ + */ +#ifndef MBEDTLS_SSL_COOKIE_TIMEOUT +#define MBEDTLS_SSL_COOKIE_TIMEOUT 60 /**< Default expiration delay of DTLS cookies, in seconds if HAVE_TIME, or in number of cookies issued */ +#endif + +/* \} name SECTION: Module settings */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Context for the default cookie functions. + */ +typedef struct +{ + mbedtls_md_context_t hmac_ctx; /*!< context for the HMAC portion */ +#if !defined(MBEDTLS_HAVE_TIME) + unsigned long serial; /*!< serial number for expiration */ +#endif + unsigned long timeout; /*!< timeout delay, in seconds if HAVE_TIME, + or in number of tickets issued */ + +#if defined(MBEDTLS_THREADING_C) + mbedtls_threading_mutex_t mutex; +#endif +} mbedtls_ssl_cookie_ctx; + +/** + * \brief Initialize cookie context + */ +void mbedtls_ssl_cookie_init( mbedtls_ssl_cookie_ctx *ctx ); + +/** + * \brief Setup cookie context (generate keys) + */ +int mbedtls_ssl_cookie_setup( mbedtls_ssl_cookie_ctx *ctx, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +/** + * \brief Set expiration delay for cookies + * (Default MBEDTLS_SSL_COOKIE_TIMEOUT) + * + * \param ctx Cookie contex + * \param delay Delay, in seconds if HAVE_TIME, or in number of cookies + * issued in the meantime. + * 0 to disable expiration (NOT recommended) + */ +void mbedtls_ssl_cookie_set_timeout( mbedtls_ssl_cookie_ctx *ctx, unsigned long delay ); + +/** + * \brief Free cookie context + */ +void mbedtls_ssl_cookie_free( mbedtls_ssl_cookie_ctx *ctx ); + +/** + * \brief Generate cookie, see \c mbedtls_ssl_cookie_write_t + */ +mbedtls_ssl_cookie_write_t mbedtls_ssl_cookie_write; + +/** + * \brief Verify cookie, see \c mbedtls_ssl_cookie_write_t + */ +mbedtls_ssl_cookie_check_t mbedtls_ssl_cookie_check; + +#ifdef __cplusplus +} +#endif + +#endif /* ssl_cookie.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ssl_internal.h b/tools/sdk/include/mbedtls/mbedtls/ssl_internal.h new file mode 100644 index 00000000..d63d7d4e --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ssl_internal.h @@ -0,0 +1,494 @@ +/** + * \file ssl_ticket.h + * + * \brief Internal functions shared by the SSL modules + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SSL_INTERNAL_H +#define MBEDTLS_SSL_INTERNAL_H + +#include "ssl.h" + +#if defined(MBEDTLS_MD5_C) +#include "md5.h" +#endif + +#if defined(MBEDTLS_SHA1_C) +#include "sha1.h" +#endif + +#if defined(MBEDTLS_SHA256_C) +#include "sha256.h" +#endif + +#if defined(MBEDTLS_SHA512_C) +#include "sha512.h" +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) +#include "ecjpake.h" +#endif + +#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ + !defined(inline) && !defined(__cplusplus) +#define inline __inline +#endif + +/* Determine minimum supported version */ +#define MBEDTLS_SSL_MIN_MAJOR_VERSION MBEDTLS_SSL_MAJOR_VERSION_3 + +#if defined(MBEDTLS_SSL_PROTO_SSL3) +#define MBEDTLS_SSL_MIN_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_0 +#else +#if defined(MBEDTLS_SSL_PROTO_TLS1) +#define MBEDTLS_SSL_MIN_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_1 +#else +#if defined(MBEDTLS_SSL_PROTO_TLS1_1) +#define MBEDTLS_SSL_MIN_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_2 +#else +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#define MBEDTLS_SSL_MIN_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_3 +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_1 */ +#endif /* MBEDTLS_SSL_PROTO_TLS1 */ +#endif /* MBEDTLS_SSL_PROTO_SSL3 */ + +/* Determine maximum supported version */ +#define MBEDTLS_SSL_MAX_MAJOR_VERSION MBEDTLS_SSL_MAJOR_VERSION_3 + +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#define MBEDTLS_SSL_MAX_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_3 +#else +#if defined(MBEDTLS_SSL_PROTO_TLS1_1) +#define MBEDTLS_SSL_MAX_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_2 +#else +#if defined(MBEDTLS_SSL_PROTO_TLS1) +#define MBEDTLS_SSL_MAX_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_1 +#else +#if defined(MBEDTLS_SSL_PROTO_SSL3) +#define MBEDTLS_SSL_MAX_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_0 +#endif /* MBEDTLS_SSL_PROTO_SSL3 */ +#endif /* MBEDTLS_SSL_PROTO_TLS1 */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_1 */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ + +#define MBEDTLS_SSL_INITIAL_HANDSHAKE 0 +#define MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS 1 /* In progress */ +#define MBEDTLS_SSL_RENEGOTIATION_DONE 2 /* Done or aborted */ +#define MBEDTLS_SSL_RENEGOTIATION_PENDING 3 /* Requested (server only) */ + +/* + * DTLS retransmission states, see RFC 6347 4.2.4 + * + * The SENDING state is merged in PREPARING for initial sends, + * but is distinct for resends. + * + * Note: initial state is wrong for server, but is not used anyway. + */ +#define MBEDTLS_SSL_RETRANS_PREPARING 0 +#define MBEDTLS_SSL_RETRANS_SENDING 1 +#define MBEDTLS_SSL_RETRANS_WAITING 2 +#define MBEDTLS_SSL_RETRANS_FINISHED 3 + +/* + * Allow extra bytes for record, authentication and encryption overhead: + * counter (8) + header (5) + IV(16) + MAC (16-48) + padding (0-256) + * and allow for a maximum of 1024 of compression expansion if + * enabled. + */ +#if defined(MBEDTLS_ZLIB_SUPPORT) +#define MBEDTLS_SSL_COMPRESSION_ADD 1024 +#else +#define MBEDTLS_SSL_COMPRESSION_ADD 0 +#endif + +#if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_MODE_CBC) +/* Ciphersuites using HMAC */ +#if defined(MBEDTLS_SHA512_C) +#define MBEDTLS_SSL_MAC_ADD 48 /* SHA-384 used for HMAC */ +#elif defined(MBEDTLS_SHA256_C) +#define MBEDTLS_SSL_MAC_ADD 32 /* SHA-256 used for HMAC */ +#else +#define MBEDTLS_SSL_MAC_ADD 20 /* SHA-1 used for HMAC */ +#endif +#else +/* AEAD ciphersuites: GCM and CCM use a 128 bits tag */ +#define MBEDTLS_SSL_MAC_ADD 16 +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +#define MBEDTLS_SSL_PADDING_ADD 256 +#else +#define MBEDTLS_SSL_PADDING_ADD 0 +#endif + +#define MBEDTLS_SSL_BUFFER_LEN ( MBEDTLS_SSL_MAX_CONTENT_LEN \ + + MBEDTLS_SSL_COMPRESSION_ADD \ + + 29 /* counter + header + IV */ \ + + MBEDTLS_SSL_MAC_ADD \ + + MBEDTLS_SSL_PADDING_ADD \ + ) + +/* + * TLS extension flags (for extensions with outgoing ServerHello content + * that need it (e.g. for RENEGOTIATION_INFO the server already knows because + * of state of the renegotiation flag, so no indicator is required) + */ +#define MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT (1 << 0) +#define MBEDTLS_TLS_EXT_ECJPAKE_KKPP_OK (1 << 1) + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This structure contains the parameters only needed during handshake. + */ +struct mbedtls_ssl_handshake_params +{ + /* + * Handshake specific crypto variables + */ + int sig_alg; /*!< Hash algorithm for signature */ + int verify_sig_alg; /*!< Signature algorithm for verify */ +#if defined(MBEDTLS_DHM_C) + mbedtls_dhm_context dhm_ctx; /*!< DHM key exchange */ +#endif +#if defined(MBEDTLS_ECDH_C) + mbedtls_ecdh_context ecdh_ctx; /*!< ECDH key exchange */ +#endif +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) + mbedtls_ecjpake_context ecjpake_ctx; /*!< EC J-PAKE key exchange */ +#if defined(MBEDTLS_SSL_CLI_C) + unsigned char *ecjpake_cache; /*!< Cache for ClientHello ext */ + size_t ecjpake_cache_len; /*!< Length of cached data */ +#endif +#endif +#if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) + const mbedtls_ecp_curve_info **curves; /*!< Supported elliptic curves */ +#endif +#if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) + unsigned char *psk; /*!< PSK from the callback */ + size_t psk_len; /*!< Length of PSK from callback */ +#endif +#if defined(MBEDTLS_X509_CRT_PARSE_C) + mbedtls_ssl_key_cert *key_cert; /*!< chosen key/cert pair (server) */ +#if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) + int sni_authmode; /*!< authmode from SNI callback */ + mbedtls_ssl_key_cert *sni_key_cert; /*!< key/cert list from SNI */ + mbedtls_x509_crt *sni_ca_chain; /*!< trusted CAs from SNI callback */ + mbedtls_x509_crl *sni_ca_crl; /*!< trusted CAs CRLs from SNI */ +#endif +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_SSL_PROTO_DTLS) + unsigned int out_msg_seq; /*!< Outgoing handshake sequence number */ + unsigned int in_msg_seq; /*!< Incoming handshake sequence number */ + + unsigned char *verify_cookie; /*!< Cli: HelloVerifyRequest cookie + Srv: unused */ + unsigned char verify_cookie_len; /*!< Cli: cookie length + Srv: flag for sending a cookie */ + + unsigned char *hs_msg; /*!< Reassembled handshake message */ + + uint32_t retransmit_timeout; /*!< Current value of timeout */ + unsigned char retransmit_state; /*!< Retransmission state */ + mbedtls_ssl_flight_item *flight; /*!< Current outgoing flight */ + mbedtls_ssl_flight_item *cur_msg; /*!< Current message in flight */ + unsigned int in_flight_start_seq; /*!< Minimum message sequence in the + flight being received */ + mbedtls_ssl_transform *alt_transform_out; /*!< Alternative transform for + resending messages */ + unsigned char alt_out_ctr[8]; /*!< Alternative record epoch/counter + for resending messages */ +#endif + + /* + * Checksum contexts + */ +#if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ + defined(MBEDTLS_SSL_PROTO_TLS1_1) + mbedtls_md5_context fin_md5; + mbedtls_sha1_context fin_sha1; +#endif +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_SHA256_C) + mbedtls_sha256_context fin_sha256; +#endif +#if defined(MBEDTLS_SHA512_C) + mbedtls_sha512_context fin_sha512; +#endif +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ + + void (*update_checksum)(mbedtls_ssl_context *, const unsigned char *, size_t); + void (*calc_verify)(mbedtls_ssl_context *, unsigned char *); + void (*calc_finished)(mbedtls_ssl_context *, unsigned char *, int); + int (*tls_prf)(const unsigned char *, size_t, const char *, + const unsigned char *, size_t, + unsigned char *, size_t); + + size_t pmslen; /*!< premaster length */ + + unsigned char randbytes[64]; /*!< random bytes */ + unsigned char premaster[MBEDTLS_PREMASTER_SIZE]; + /*!< premaster secret */ + + int resume; /*!< session resume indicator*/ + int max_major_ver; /*!< max. major version client*/ + int max_minor_ver; /*!< max. minor version client*/ + int cli_exts; /*!< client extension presence*/ + +#if defined(MBEDTLS_SSL_SESSION_TICKETS) + int new_session_ticket; /*!< use NewSessionTicket? */ +#endif /* MBEDTLS_SSL_SESSION_TICKETS */ +#if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) + int extended_ms; /*!< use Extended Master Secret? */ +#endif +}; + +/* + * This structure contains a full set of runtime transform parameters + * either in negotiation or active. + */ +struct mbedtls_ssl_transform +{ + /* + * Session specific crypto layer + */ + const mbedtls_ssl_ciphersuite_t *ciphersuite_info; + /*!< Chosen cipersuite_info */ + unsigned int keylen; /*!< symmetric key length (bytes) */ + size_t minlen; /*!< min. ciphertext length */ + size_t ivlen; /*!< IV length */ + size_t fixed_ivlen; /*!< Fixed part of IV (AEAD) */ + size_t maclen; /*!< MAC length */ + + unsigned char iv_enc[16]; /*!< IV (encryption) */ + unsigned char iv_dec[16]; /*!< IV (decryption) */ + +#if defined(MBEDTLS_SSL_PROTO_SSL3) + /* Needed only for SSL v3.0 secret */ + unsigned char mac_enc[20]; /*!< SSL v3.0 secret (enc) */ + unsigned char mac_dec[20]; /*!< SSL v3.0 secret (dec) */ +#endif /* MBEDTLS_SSL_PROTO_SSL3 */ + + mbedtls_md_context_t md_ctx_enc; /*!< MAC (encryption) */ + mbedtls_md_context_t md_ctx_dec; /*!< MAC (decryption) */ + + mbedtls_cipher_context_t cipher_ctx_enc; /*!< encryption context */ + mbedtls_cipher_context_t cipher_ctx_dec; /*!< decryption context */ + + /* + * Session specific compression layer + */ +#if defined(MBEDTLS_ZLIB_SUPPORT) + z_stream ctx_deflate; /*!< compression context */ + z_stream ctx_inflate; /*!< decompression context */ +#endif +}; + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +/* + * List of certificate + private key pairs + */ +struct mbedtls_ssl_key_cert +{ + mbedtls_x509_crt *cert; /*!< cert */ + mbedtls_pk_context *key; /*!< private key */ + mbedtls_ssl_key_cert *next; /*!< next key/cert pair */ +}; +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + +#if defined(MBEDTLS_SSL_PROTO_DTLS) +/* + * List of handshake messages kept around for resending + */ +struct mbedtls_ssl_flight_item +{ + unsigned char *p; /*!< message, including handshake headers */ + size_t len; /*!< length of p */ + unsigned char type; /*!< type of the message: handshake or CCS */ + mbedtls_ssl_flight_item *next; /*!< next handshake message(s) */ +}; +#endif /* MBEDTLS_SSL_PROTO_DTLS */ + + +/** + * \brief Free referenced items in an SSL transform context and clear + * memory + * + * \param transform SSL transform context + */ +void mbedtls_ssl_transform_free( mbedtls_ssl_transform *transform ); + +/** + * \brief Free referenced items in an SSL handshake context and clear + * memory + * + * \param handshake SSL handshake context + */ +void mbedtls_ssl_handshake_free( mbedtls_ssl_handshake_params *handshake ); + +int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ); +void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ); + +int mbedtls_ssl_send_fatal_handshake_failure( mbedtls_ssl_context *ssl ); + +void mbedtls_ssl_reset_checksum( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ); + +int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ); + +int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_flush_output( mbedtls_ssl_context *ssl ); + +int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ); + +int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_write_change_cipher_spec( mbedtls_ssl_context *ssl ); + +int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ); + +void mbedtls_ssl_optimize_checksum( mbedtls_ssl_context *ssl, + const mbedtls_ssl_ciphersuite_t *ciphersuite_info ); + +#if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) +int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *ssl, mbedtls_key_exchange_type_t key_ex ); +#endif + +#if defined(MBEDTLS_PK_C) +unsigned char mbedtls_ssl_sig_from_pk( mbedtls_pk_context *pk ); +mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char sig ); +#endif + +mbedtls_md_type_t mbedtls_ssl_md_alg_from_hash( unsigned char hash ); +unsigned char mbedtls_ssl_hash_from_md_alg( int md ); + +#if defined(MBEDTLS_ECP_C) +int mbedtls_ssl_check_curve( const mbedtls_ssl_context *ssl, mbedtls_ecp_group_id grp_id ); +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) +int mbedtls_ssl_check_sig_hash( const mbedtls_ssl_context *ssl, + mbedtls_md_type_t md ); +#endif + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +static inline mbedtls_pk_context *mbedtls_ssl_own_key( mbedtls_ssl_context *ssl ) +{ + mbedtls_ssl_key_cert *key_cert; + + if( ssl->handshake != NULL && ssl->handshake->key_cert != NULL ) + key_cert = ssl->handshake->key_cert; + else + key_cert = ssl->conf->key_cert; + + return( key_cert == NULL ? NULL : key_cert->key ); +} + +static inline mbedtls_x509_crt *mbedtls_ssl_own_cert( mbedtls_ssl_context *ssl ) +{ + mbedtls_ssl_key_cert *key_cert; + + if( ssl->handshake != NULL && ssl->handshake->key_cert != NULL ) + key_cert = ssl->handshake->key_cert; + else + key_cert = ssl->conf->key_cert; + + return( key_cert == NULL ? NULL : key_cert->cert ); +} + +/* + * Check usage of a certificate wrt extensions: + * keyUsage, extendedKeyUsage (later), and nSCertType (later). + * + * Warning: cert_endpoint is the endpoint of the cert (ie, of our peer when we + * check a cert we received from them)! + * + * Return 0 if everything is OK, -1 if not. + */ +int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, + const mbedtls_ssl_ciphersuite_t *ciphersuite, + int cert_endpoint, + uint32_t *flags ); +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + +void mbedtls_ssl_write_version( int major, int minor, int transport, + unsigned char ver[2] ); +void mbedtls_ssl_read_version( int *major, int *minor, int transport, + const unsigned char ver[2] ); + +static inline size_t mbedtls_ssl_hdr_len( const mbedtls_ssl_context *ssl ) +{ +#if defined(MBEDTLS_SSL_PROTO_DTLS) + if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + return( 13 ); +#else + ((void) ssl); +#endif + return( 5 ); +} + +static inline size_t mbedtls_ssl_hs_hdr_len( const mbedtls_ssl_context *ssl ) +{ +#if defined(MBEDTLS_SSL_PROTO_DTLS) + if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + return( 12 ); +#else + ((void) ssl); +#endif + return( 4 ); +} + +#if defined(MBEDTLS_SSL_PROTO_DTLS) +void mbedtls_ssl_send_flight_completed( mbedtls_ssl_context *ssl ); +void mbedtls_ssl_recv_flight_completed( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_resend( mbedtls_ssl_context *ssl ); +#endif + +/* Visible for testing purposes only */ +#if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) +int mbedtls_ssl_dtls_replay_check( mbedtls_ssl_context *ssl ); +void mbedtls_ssl_dtls_replay_update( mbedtls_ssl_context *ssl ); +#endif + +/* constant-time buffer comparison */ +static inline int mbedtls_ssl_safer_memcmp( const void *a, const void *b, size_t n ) +{ + size_t i; + const unsigned char *A = (const unsigned char *) a; + const unsigned char *B = (const unsigned char *) b; + unsigned char diff = 0; + + for( i = 0; i < n; i++ ) + diff |= A[i] ^ B[i]; + + return( diff ); +} + +#ifdef __cplusplus +} +#endif + +#endif /* ssl_internal.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ssl_ticket.h b/tools/sdk/include/mbedtls/mbedtls/ssl_ticket.h new file mode 100644 index 00000000..7c6bc61b --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ssl_ticket.h @@ -0,0 +1,135 @@ +/** + * \file ssl_ticket.h + * + * \brief TLS server ticket callbacks implementation + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SSL_TICKET_H +#define MBEDTLS_SSL_TICKET_H + +/* + * This implementation of the session ticket callbacks includes key + * management, rotating the keys periodically in order to preserve forward + * secrecy, when MBEDTLS_HAVE_TIME is defined. + */ + +#include "ssl.h" +#include "cipher.h" + +#if defined(MBEDTLS_THREADING_C) +#include "threading.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Information for session ticket protection + */ +typedef struct +{ + unsigned char name[4]; /*!< random key identifier */ + uint32_t generation_time; /*!< key generation timestamp (seconds) */ + mbedtls_cipher_context_t ctx; /*!< context for auth enc/decryption */ +} +mbedtls_ssl_ticket_key; + +/** + * \brief Context for session ticket handling functions + */ +typedef struct +{ + mbedtls_ssl_ticket_key keys[2]; /*!< ticket protection keys */ + unsigned char active; /*!< index of the currently active key */ + + uint32_t ticket_lifetime; /*!< lifetime of tickets in seconds */ + + /** Callback for getting (pseudo-)random numbers */ + int (*f_rng)(void *, unsigned char *, size_t); + void *p_rng; /*!< context for the RNG function */ + +#if defined(MBEDTLS_THREADING_C) + mbedtls_threading_mutex_t mutex; +#endif +} +mbedtls_ssl_ticket_context; + +/** + * \brief Initialize a ticket context. + * (Just make it ready for mbedtls_ssl_ticket_setup() + * or mbedtls_ssl_ticket_free().) + * + * \param ctx Context to be initialized + */ +void mbedtls_ssl_ticket_init( mbedtls_ssl_ticket_context *ctx ); + +/** + * \brief Prepare context to be actually used + * + * \param ctx Context to be set up + * \param f_rng RNG callback function + * \param p_rng RNG callback context + * \param cipher AEAD cipher to use for ticket protection. + * Recommended value: MBEDTLS_CIPHER_AES_256_GCM. + * \param lifetime Tickets lifetime in seconds + * Recommended value: 86400 (one day). + * + * \note It is highly recommended to select a cipher that is at + * least as strong as the the strongest ciphersuite + * supported. Usually that means a 256-bit key. + * + * \note The lifetime of the keys is twice the lifetime of tickets. + * It is recommended to pick a reasonnable lifetime so as not + * to negate the benefits of forward secrecy. + * + * \return 0 if successful, + * or a specific MBEDTLS_ERR_XXX error code + */ +int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, + mbedtls_cipher_type_t cipher, + uint32_t lifetime ); + +/** + * \brief Implementation of the ticket write callback + * + * \note See \c mbedlts_ssl_ticket_write_t for description + */ +mbedtls_ssl_ticket_write_t mbedtls_ssl_ticket_write; + +/** + * \brief Implementation of the ticket parse callback + * + * \note See \c mbedlts_ssl_ticket_parse_t for description + */ +mbedtls_ssl_ticket_parse_t mbedtls_ssl_ticket_parse; + +/** + * \brief Free a context's content and zeroize it. + * + * \param ctx Context to be cleaned up + */ +void mbedtls_ssl_ticket_free( mbedtls_ssl_ticket_context *ctx ); + +#ifdef __cplusplus +} +#endif + +#endif /* ssl_ticket.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/threading.h b/tools/sdk/include/mbedtls/mbedtls/threading.h new file mode 100644 index 00000000..b0c34ecc --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/threading.h @@ -0,0 +1,106 @@ +/** + * \file threading.h + * + * \brief Threading abstraction layer + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_THREADING_H +#define MBEDTLS_THREADING_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE -0x001A /**< The selected feature is not available. */ +#define MBEDTLS_ERR_THREADING_BAD_INPUT_DATA -0x001C /**< Bad input parameters to function. */ +#define MBEDTLS_ERR_THREADING_MUTEX_ERROR -0x001E /**< Locking / unlocking / free failed with error code. */ + +#if defined(MBEDTLS_THREADING_PTHREAD) +#include +typedef struct +{ + pthread_mutex_t mutex; + char is_valid; +} mbedtls_threading_mutex_t; +#endif + +#if defined(MBEDTLS_THREADING_ALT) +/* You should define the mbedtls_threading_mutex_t type in your header */ +#include "threading_alt.h" + +/** + * \brief Set your alternate threading implementation function + * pointers and initialize global mutexes. If used, this + * function must be called once in the main thread before any + * other mbed TLS function is called, and + * mbedtls_threading_free_alt() must be called once in the main + * thread after all other mbed TLS functions. + * + * \note mutex_init() and mutex_free() don't return a status code. + * If mutex_init() fails, it should leave its argument (the + * mutex) in a state such that mutex_lock() will fail when + * called with this argument. + * + * \param mutex_init the init function implementation + * \param mutex_free the free function implementation + * \param mutex_lock the lock function implementation + * \param mutex_unlock the unlock function implementation + */ +void mbedtls_threading_set_alt( void (*mutex_init)( mbedtls_threading_mutex_t * ), + void (*mutex_free)( mbedtls_threading_mutex_t * ), + int (*mutex_lock)( mbedtls_threading_mutex_t * ), + int (*mutex_unlock)( mbedtls_threading_mutex_t * ) ); + +/** + * \brief Free global mutexes. + */ +void mbedtls_threading_free_alt( void ); +#endif /* MBEDTLS_THREADING_ALT */ + +#if defined(MBEDTLS_THREADING_C) +/* + * The function pointers for mutex_init, mutex_free, mutex_ and mutex_unlock + * + * All these functions are expected to work or the result will be undefined. + */ +extern void (*mbedtls_mutex_init)( mbedtls_threading_mutex_t *mutex ); +extern void (*mbedtls_mutex_free)( mbedtls_threading_mutex_t *mutex ); +extern int (*mbedtls_mutex_lock)( mbedtls_threading_mutex_t *mutex ); +extern int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t *mutex ); + +/* + * Global mutexes + */ +extern mbedtls_threading_mutex_t mbedtls_threading_readdir_mutex; +extern mbedtls_threading_mutex_t mbedtls_threading_gmtime_mutex; +#endif /* MBEDTLS_THREADING_C */ + +#ifdef __cplusplus +} +#endif + +#endif /* threading.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/timing.h b/tools/sdk/include/mbedtls/mbedtls/timing.h new file mode 100644 index 00000000..ae7a713e --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/timing.h @@ -0,0 +1,141 @@ +/** + * \file timing.h + * + * \brief Portable interface to the CPU cycle counter + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_TIMING_H +#define MBEDTLS_TIMING_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if !defined(MBEDTLS_TIMING_ALT) +// Regular implementation +// + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief timer structure + */ +struct mbedtls_timing_hr_time +{ + unsigned char opaque[32]; +}; + +/** + * \brief Context for mbedtls_timing_set/get_delay() + */ +typedef struct +{ + struct mbedtls_timing_hr_time timer; + uint32_t int_ms; + uint32_t fin_ms; +} mbedtls_timing_delay_context; + +extern volatile int mbedtls_timing_alarmed; + +/** + * \brief Return the CPU cycle counter value + * + * \warning This is only a best effort! Do not rely on this! + * In particular, it is known to be unreliable on virtual + * machines. + */ +unsigned long mbedtls_timing_hardclock( void ); + +/** + * \brief Return the elapsed time in milliseconds + * + * \param val points to a timer structure + * \param reset if set to 1, the timer is restarted + */ +unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int reset ); + +/** + * \brief Setup an alarm clock + * + * \param seconds delay before the "mbedtls_timing_alarmed" flag is set + * + * \warning Only one alarm at a time is supported. In a threaded + * context, this means one for the whole process, not one per + * thread. + */ +void mbedtls_set_alarm( int seconds ); + +/** + * \brief Set a pair of delays to watch + * (See \c mbedtls_timing_get_delay().) + * + * \param data Pointer to timing data + * Must point to a valid \c mbedtls_timing_delay_context struct. + * \param int_ms First (intermediate) delay in milliseconds. + * \param fin_ms Second (final) delay in milliseconds. + * Pass 0 to cancel the current delay. + */ +void mbedtls_timing_set_delay( void *data, uint32_t int_ms, uint32_t fin_ms ); + +/** + * \brief Get the status of delays + * (Memory helper: number of delays passed.) + * + * \param data Pointer to timing data + * Must point to a valid \c mbedtls_timing_delay_context struct. + * + * \return -1 if cancelled (fin_ms = 0) + * 0 if none of the delays are passed, + * 1 if only the intermediate delay is passed, + * 2 if the final delay is passed. + */ +int mbedtls_timing_get_delay( void *data ); + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_TIMING_ALT */ +#include "timing_alt.h" +#endif /* MBEDTLS_TIMING_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(MBEDTLS_SELF_TEST) +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if a test failed + */ +int mbedtls_timing_self_test( int verbose ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* timing.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/version.h b/tools/sdk/include/mbedtls/mbedtls/version.h new file mode 100644 index 00000000..b40aa510 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/version.h @@ -0,0 +1,111 @@ +/** + * \file version.h + * + * \brief Run-time version information + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +/* + * This set of compile-time defines and run-time variables can be used to + * determine the version number of the mbed TLS library used. + */ +#ifndef MBEDTLS_VERSION_H +#define MBEDTLS_VERSION_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +/** + * The version number x.y.z is split into three parts. + * Major, Minor, Patchlevel + */ +#define MBEDTLS_VERSION_MAJOR 2 +#define MBEDTLS_VERSION_MINOR 3 +#define MBEDTLS_VERSION_PATCH 0 + +/** + * The single version number has the following structure: + * MMNNPP00 + * Major version | Minor version | Patch version + */ +#define MBEDTLS_VERSION_NUMBER 0x02030000 +#define MBEDTLS_VERSION_STRING "2.3.0" +#define MBEDTLS_VERSION_STRING_FULL "mbed TLS 2.3.0" + +#if defined(MBEDTLS_VERSION_C) + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the version number. + * + * \return The constructed version number in the format + * MMNNPP00 (Major, Minor, Patch). + */ +unsigned int mbedtls_version_get_number( void ); + +/** + * Get the version string ("x.y.z"). + * + * \param string The string that will receive the value. + * (Should be at least 9 bytes in size) + */ +void mbedtls_version_get_string( char *string ); + +/** + * Get the full version string ("mbed TLS x.y.z"). + * + * \param string The string that will receive the value. The mbed TLS version + * string will use 18 bytes AT MOST including a terminating + * null byte. + * (So the buffer should be at least 18 bytes to receive this + * version string). + */ +void mbedtls_version_get_string_full( char *string ); + +/** + * \brief Check if support for a feature was compiled into this + * mbed TLS binary. This allows you to see at runtime if the + * library was for instance compiled with or without + * Multi-threading support. + * + * \note only checks against defines in the sections "System + * support", "mbed TLS modules" and "mbed TLS feature + * support" in config.h + * + * \param feature The string for the define to check (e.g. "MBEDTLS_AES_C") + * + * \return 0 if the feature is present, + * -1 if the feature is not present and + * -2 if support for feature checking as a whole was not + * compiled in. + */ +int mbedtls_version_check_feature( const char *feature ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_VERSION_C */ + +#endif /* version.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/x509.h b/tools/sdk/include/mbedtls/mbedtls/x509.h new file mode 100644 index 00000000..54dac166 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/x509.h @@ -0,0 +1,331 @@ +/** + * \file x509.h + * + * \brief X.509 generic defines and structures + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_X509_H +#define MBEDTLS_X509_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "asn1.h" +#include "pk.h" + +#if defined(MBEDTLS_RSA_C) +#include "rsa.h" +#endif + +/** + * \addtogroup x509_module + * \{ + */ + +#if !defined(MBEDTLS_X509_MAX_INTERMEDIATE_CA) +/** + * Maximum number of intermediate CAs in a verification chain. + * That is, maximum length of the chain, excluding the end-entity certificate + * and the trusted root certificate. + * + * Set this to a low value to prevent an adversary from making you waste + * resources verifying an overlong certificate chain. + */ +#define MBEDTLS_X509_MAX_INTERMEDIATE_CA 8 +#endif + +/** + * \name X509 Error codes + * \{ + */ +#define MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE -0x2080 /**< Unavailable feature, e.g. RSA hashing/encryption combination. */ +#define MBEDTLS_ERR_X509_UNKNOWN_OID -0x2100 /**< Requested OID is unknown. */ +#define MBEDTLS_ERR_X509_INVALID_FORMAT -0x2180 /**< The CRT/CRL/CSR format is invalid, e.g. different type expected. */ +#define MBEDTLS_ERR_X509_INVALID_VERSION -0x2200 /**< The CRT/CRL/CSR version element is invalid. */ +#define MBEDTLS_ERR_X509_INVALID_SERIAL -0x2280 /**< The serial tag or value is invalid. */ +#define MBEDTLS_ERR_X509_INVALID_ALG -0x2300 /**< The algorithm tag or value is invalid. */ +#define MBEDTLS_ERR_X509_INVALID_NAME -0x2380 /**< The name tag or value is invalid. */ +#define MBEDTLS_ERR_X509_INVALID_DATE -0x2400 /**< The date tag or value is invalid. */ +#define MBEDTLS_ERR_X509_INVALID_SIGNATURE -0x2480 /**< The signature tag or value invalid. */ +#define MBEDTLS_ERR_X509_INVALID_EXTENSIONS -0x2500 /**< The extension tag or value is invalid. */ +#define MBEDTLS_ERR_X509_UNKNOWN_VERSION -0x2580 /**< CRT/CRL/CSR has an unsupported version number. */ +#define MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG -0x2600 /**< Signature algorithm (oid) is unsupported. */ +#define MBEDTLS_ERR_X509_SIG_MISMATCH -0x2680 /**< Signature algorithms do not match. (see \c ::mbedtls_x509_crt sig_oid) */ +#define MBEDTLS_ERR_X509_CERT_VERIFY_FAILED -0x2700 /**< Certificate verification failed, e.g. CRL, CA or signature check failed. */ +#define MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT -0x2780 /**< Format not recognized as DER or PEM. */ +#define MBEDTLS_ERR_X509_BAD_INPUT_DATA -0x2800 /**< Input invalid. */ +#define MBEDTLS_ERR_X509_ALLOC_FAILED -0x2880 /**< Allocation of memory failed. */ +#define MBEDTLS_ERR_X509_FILE_IO_ERROR -0x2900 /**< Read/write of file failed. */ +#define MBEDTLS_ERR_X509_BUFFER_TOO_SMALL -0x2980 /**< Destination buffer is too small. */ +/* \} name */ + +/** + * \name X509 Verify codes + * \{ + */ +/* Reminder: update x509_crt_verify_strings[] in library/x509_crt.c */ +#define MBEDTLS_X509_BADCERT_EXPIRED 0x01 /**< The certificate validity has expired. */ +#define MBEDTLS_X509_BADCERT_REVOKED 0x02 /**< The certificate has been revoked (is on a CRL). */ +#define MBEDTLS_X509_BADCERT_CN_MISMATCH 0x04 /**< The certificate Common Name (CN) does not match with the expected CN. */ +#define MBEDTLS_X509_BADCERT_NOT_TRUSTED 0x08 /**< The certificate is not correctly signed by the trusted CA. */ +#define MBEDTLS_X509_BADCRL_NOT_TRUSTED 0x10 /**< The CRL is not correctly signed by the trusted CA. */ +#define MBEDTLS_X509_BADCRL_EXPIRED 0x20 /**< The CRL is expired. */ +#define MBEDTLS_X509_BADCERT_MISSING 0x40 /**< Certificate was missing. */ +#define MBEDTLS_X509_BADCERT_SKIP_VERIFY 0x80 /**< Certificate verification was skipped. */ +#define MBEDTLS_X509_BADCERT_OTHER 0x0100 /**< Other reason (can be used by verify callback) */ +#define MBEDTLS_X509_BADCERT_FUTURE 0x0200 /**< The certificate validity starts in the future. */ +#define MBEDTLS_X509_BADCRL_FUTURE 0x0400 /**< The CRL is from the future */ +#define MBEDTLS_X509_BADCERT_KEY_USAGE 0x0800 /**< Usage does not match the keyUsage extension. */ +#define MBEDTLS_X509_BADCERT_EXT_KEY_USAGE 0x1000 /**< Usage does not match the extendedKeyUsage extension. */ +#define MBEDTLS_X509_BADCERT_NS_CERT_TYPE 0x2000 /**< Usage does not match the nsCertType extension. */ +#define MBEDTLS_X509_BADCERT_BAD_MD 0x4000 /**< The certificate is signed with an unacceptable hash. */ +#define MBEDTLS_X509_BADCERT_BAD_PK 0x8000 /**< The certificate is signed with an unacceptable PK alg (eg RSA vs ECDSA). */ +#define MBEDTLS_X509_BADCERT_BAD_KEY 0x010000 /**< The certificate is signed with an unacceptable key (eg bad curve, RSA too short). */ +#define MBEDTLS_X509_BADCRL_BAD_MD 0x020000 /**< The CRL is signed with an unacceptable hash. */ +#define MBEDTLS_X509_BADCRL_BAD_PK 0x040000 /**< The CRL is signed with an unacceptable PK alg (eg RSA vs ECDSA). */ +#define MBEDTLS_X509_BADCRL_BAD_KEY 0x080000 /**< The CRL is signed with an unacceptable key (eg bad curve, RSA too short). */ + +/* \} name */ +/* \} addtogroup x509_module */ + +/* + * X.509 v3 Key Usage Extension flags + * Reminder: update x509_info_key_usage() when adding new flags. + */ +#define MBEDTLS_X509_KU_DIGITAL_SIGNATURE (0x80) /* bit 0 */ +#define MBEDTLS_X509_KU_NON_REPUDIATION (0x40) /* bit 1 */ +#define MBEDTLS_X509_KU_KEY_ENCIPHERMENT (0x20) /* bit 2 */ +#define MBEDTLS_X509_KU_DATA_ENCIPHERMENT (0x10) /* bit 3 */ +#define MBEDTLS_X509_KU_KEY_AGREEMENT (0x08) /* bit 4 */ +#define MBEDTLS_X509_KU_KEY_CERT_SIGN (0x04) /* bit 5 */ +#define MBEDTLS_X509_KU_CRL_SIGN (0x02) /* bit 6 */ +#define MBEDTLS_X509_KU_ENCIPHER_ONLY (0x01) /* bit 7 */ +#define MBEDTLS_X509_KU_DECIPHER_ONLY (0x8000) /* bit 8 */ + +/* + * Netscape certificate types + * (http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn3.html) + */ + +#define MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT (0x80) /* bit 0 */ +#define MBEDTLS_X509_NS_CERT_TYPE_SSL_SERVER (0x40) /* bit 1 */ +#define MBEDTLS_X509_NS_CERT_TYPE_EMAIL (0x20) /* bit 2 */ +#define MBEDTLS_X509_NS_CERT_TYPE_OBJECT_SIGNING (0x10) /* bit 3 */ +#define MBEDTLS_X509_NS_CERT_TYPE_RESERVED (0x08) /* bit 4 */ +#define MBEDTLS_X509_NS_CERT_TYPE_SSL_CA (0x04) /* bit 5 */ +#define MBEDTLS_X509_NS_CERT_TYPE_EMAIL_CA (0x02) /* bit 6 */ +#define MBEDTLS_X509_NS_CERT_TYPE_OBJECT_SIGNING_CA (0x01) /* bit 7 */ + +/* + * X.509 extension types + * + * Comments refer to the status for using certificates. Status can be + * different for writing certificates or reading CRLs or CSRs. + */ +#define MBEDTLS_X509_EXT_AUTHORITY_KEY_IDENTIFIER (1 << 0) +#define MBEDTLS_X509_EXT_SUBJECT_KEY_IDENTIFIER (1 << 1) +#define MBEDTLS_X509_EXT_KEY_USAGE (1 << 2) +#define MBEDTLS_X509_EXT_CERTIFICATE_POLICIES (1 << 3) +#define MBEDTLS_X509_EXT_POLICY_MAPPINGS (1 << 4) +#define MBEDTLS_X509_EXT_SUBJECT_ALT_NAME (1 << 5) /* Supported (DNS) */ +#define MBEDTLS_X509_EXT_ISSUER_ALT_NAME (1 << 6) +#define MBEDTLS_X509_EXT_SUBJECT_DIRECTORY_ATTRS (1 << 7) +#define MBEDTLS_X509_EXT_BASIC_CONSTRAINTS (1 << 8) /* Supported */ +#define MBEDTLS_X509_EXT_NAME_CONSTRAINTS (1 << 9) +#define MBEDTLS_X509_EXT_POLICY_CONSTRAINTS (1 << 10) +#define MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE (1 << 11) +#define MBEDTLS_X509_EXT_CRL_DISTRIBUTION_POINTS (1 << 12) +#define MBEDTLS_X509_EXT_INIHIBIT_ANYPOLICY (1 << 13) +#define MBEDTLS_X509_EXT_FRESHEST_CRL (1 << 14) + +#define MBEDTLS_X509_EXT_NS_CERT_TYPE (1 << 16) /* Parsed (and then ?) */ + +/* + * Storage format identifiers + * Recognized formats: PEM and DER + */ +#define MBEDTLS_X509_FORMAT_DER 1 +#define MBEDTLS_X509_FORMAT_PEM 2 + +#define MBEDTLS_X509_MAX_DN_NAME_SIZE 256 /**< Maximum value size of a DN entry */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup x509_module + * \{ */ + +/** + * \name Structures for parsing X.509 certificates, CRLs and CSRs + * \{ + */ + +/** + * Type-length-value structure that allows for ASN1 using DER. + */ +typedef mbedtls_asn1_buf mbedtls_x509_buf; + +/** + * Container for ASN1 bit strings. + */ +typedef mbedtls_asn1_bitstring mbedtls_x509_bitstring; + +/** + * Container for ASN1 named information objects. + * It allows for Relative Distinguished Names (e.g. cn=localhost,ou=code,etc.). + */ +typedef mbedtls_asn1_named_data mbedtls_x509_name; + +/** + * Container for a sequence of ASN.1 items + */ +typedef mbedtls_asn1_sequence mbedtls_x509_sequence; + +/** Container for date and time (precision in seconds). */ +typedef struct mbedtls_x509_time +{ + int year, mon, day; /**< Date. */ + int hour, min, sec; /**< Time. */ +} +mbedtls_x509_time; + +/** \} name Structures for parsing X.509 certificates, CRLs and CSRs */ +/** \} addtogroup x509_module */ + +/** + * \brief Store the certificate DN in printable form into buf; + * no more than size characters will be written. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param dn The X509 name to represent + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. + */ +int mbedtls_x509_dn_gets( char *buf, size_t size, const mbedtls_x509_name *dn ); + +/** + * \brief Store the certificate serial in printable form into buf; + * no more than size characters will be written. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param serial The X509 serial to represent + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. + */ +int mbedtls_x509_serial_gets( char *buf, size_t size, const mbedtls_x509_buf *serial ); + +/** + * \brief Check a given mbedtls_x509_time against the system time + * and tell if it's in the past. + * + * \note Intended usage is "if( is_past( valid_to ) ) ERROR". + * Hence the return value of 1 if on internal errors. + * + * \param time mbedtls_x509_time to check + * + * \return 1 if the given time is in the past or an error occured, + * 0 otherwise. + */ +int mbedtls_x509_time_is_past( const mbedtls_x509_time *time ); + +/** + * \brief Check a given mbedtls_x509_time against the system time + * and tell if it's in the future. + * + * \note Intended usage is "if( is_future( valid_from ) ) ERROR". + * Hence the return value of 1 if on internal errors. + * + * \param time mbedtls_x509_time to check + * + * \return 1 if the given time is in the future or an error occured, + * 0 otherwise. + */ +int mbedtls_x509_time_is_future( const mbedtls_x509_time *time ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_x509_self_test( int verbose ); + +/* + * Internal module functions. You probably do not want to use these unless you + * know you do. + */ +int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end, + mbedtls_x509_name *cur ); +int mbedtls_x509_get_alg_null( unsigned char **p, const unsigned char *end, + mbedtls_x509_buf *alg ); +int mbedtls_x509_get_alg( unsigned char **p, const unsigned char *end, + mbedtls_x509_buf *alg, mbedtls_x509_buf *params ); +#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) +int mbedtls_x509_get_rsassa_pss_params( const mbedtls_x509_buf *params, + mbedtls_md_type_t *md_alg, mbedtls_md_type_t *mgf_md, + int *salt_len ); +#endif +int mbedtls_x509_get_sig( unsigned char **p, const unsigned char *end, mbedtls_x509_buf *sig ); +int mbedtls_x509_get_sig_alg( const mbedtls_x509_buf *sig_oid, const mbedtls_x509_buf *sig_params, + mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg, + void **sig_opts ); +int mbedtls_x509_get_time( unsigned char **p, const unsigned char *end, + mbedtls_x509_time *time ); +int mbedtls_x509_get_serial( unsigned char **p, const unsigned char *end, + mbedtls_x509_buf *serial ); +int mbedtls_x509_get_ext( unsigned char **p, const unsigned char *end, + mbedtls_x509_buf *ext, int tag ); +int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *sig_oid, + mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg, + const void *sig_opts ); +int mbedtls_x509_key_size_helper( char *buf, size_t buf_size, const char *name ); +int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **head, const char *name ); +int mbedtls_x509_set_extension( mbedtls_asn1_named_data **head, const char *oid, size_t oid_len, + int critical, const unsigned char *val, + size_t val_len ); +int mbedtls_x509_write_extensions( unsigned char **p, unsigned char *start, + mbedtls_asn1_named_data *first ); +int mbedtls_x509_write_names( unsigned char **p, unsigned char *start, + mbedtls_asn1_named_data *first ); +int mbedtls_x509_write_sig( unsigned char **p, unsigned char *start, + const char *oid, size_t oid_len, + unsigned char *sig, size_t size ); + +#define MBEDTLS_X509_SAFE_SNPRINTF \ + do { \ + if( ret < 0 || (size_t) ret >= n ) \ + return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); \ + \ + n -= (size_t) ret; \ + p += (size_t) ret; \ + } while( 0 ) + +#ifdef __cplusplus +} +#endif + +#endif /* x509.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/x509_crl.h b/tools/sdk/include/mbedtls/mbedtls/x509_crl.h new file mode 100644 index 00000000..79884399 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/x509_crl.h @@ -0,0 +1,173 @@ +/** + * \file x509_crl.h + * + * \brief X.509 certificate revocation list parsing + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_X509_CRL_H +#define MBEDTLS_X509_CRL_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "x509.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup x509_module + * \{ */ + +/** + * \name Structures and functions for parsing CRLs + * \{ + */ + +/** + * Certificate revocation list entry. + * Contains the CA-specific serial numbers and revocation dates. + */ +typedef struct mbedtls_x509_crl_entry +{ + mbedtls_x509_buf raw; + + mbedtls_x509_buf serial; + + mbedtls_x509_time revocation_date; + + mbedtls_x509_buf entry_ext; + + struct mbedtls_x509_crl_entry *next; +} +mbedtls_x509_crl_entry; + +/** + * Certificate revocation list structure. + * Every CRL may have multiple entries. + */ +typedef struct mbedtls_x509_crl +{ + mbedtls_x509_buf raw; /**< The raw certificate data (DER). */ + mbedtls_x509_buf tbs; /**< The raw certificate body (DER). The part that is To Be Signed. */ + + int version; /**< CRL version (1=v1, 2=v2) */ + mbedtls_x509_buf sig_oid; /**< CRL signature type identifier */ + + mbedtls_x509_buf issuer_raw; /**< The raw issuer data (DER). */ + + mbedtls_x509_name issuer; /**< The parsed issuer data (named information object). */ + + mbedtls_x509_time this_update; + mbedtls_x509_time next_update; + + mbedtls_x509_crl_entry entry; /**< The CRL entries containing the certificate revocation times for this CA. */ + + mbedtls_x509_buf crl_ext; + + mbedtls_x509_buf sig_oid2; + mbedtls_x509_buf sig; + mbedtls_md_type_t sig_md; /**< Internal representation of the MD algorithm of the signature algorithm, e.g. MBEDTLS_MD_SHA256 */ + mbedtls_pk_type_t sig_pk; /**< Internal representation of the Public Key algorithm of the signature algorithm, e.g. MBEDTLS_PK_RSA */ + void *sig_opts; /**< Signature options to be passed to mbedtls_pk_verify_ext(), e.g. for RSASSA-PSS */ + + struct mbedtls_x509_crl *next; +} +mbedtls_x509_crl; + +/** + * \brief Parse a DER-encoded CRL and append it to the chained list + * + * \param chain points to the start of the chain + * \param buf buffer holding the CRL data in DER format + * \param buflen size of the buffer + * (including the terminating null byte for PEM data) + * + * \return 0 if successful, or a specific X509 or PEM error code + */ +int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, + const unsigned char *buf, size_t buflen ); +/** + * \brief Parse one or more CRLs and append them to the chained list + * + * \note Mutliple CRLs are accepted only if using PEM format + * + * \param chain points to the start of the chain + * \param buf buffer holding the CRL data in PEM or DER format + * \param buflen size of the buffer + * (including the terminating null byte for PEM data) + * + * \return 0 if successful, or a specific X509 or PEM error code + */ +int mbedtls_x509_crl_parse( mbedtls_x509_crl *chain, const unsigned char *buf, size_t buflen ); + +#if defined(MBEDTLS_FS_IO) +/** + * \brief Load one or more CRLs and append them to the chained list + * + * \note Mutliple CRLs are accepted only if using PEM format + * + * \param chain points to the start of the chain + * \param path filename to read the CRLs from (in PEM or DER encoding) + * + * \return 0 if successful, or a specific X509 or PEM error code + */ +int mbedtls_x509_crl_parse_file( mbedtls_x509_crl *chain, const char *path ); +#endif /* MBEDTLS_FS_IO */ + +/** + * \brief Returns an informational string about the CRL. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param prefix A line prefix + * \param crl The X509 CRL to represent + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. + */ +int mbedtls_x509_crl_info( char *buf, size_t size, const char *prefix, + const mbedtls_x509_crl *crl ); + +/** + * \brief Initialize a CRL (chain) + * + * \param crl CRL chain to initialize + */ +void mbedtls_x509_crl_init( mbedtls_x509_crl *crl ); + +/** + * \brief Unallocate all CRL data + * + * \param crl CRL chain to free + */ +void mbedtls_x509_crl_free( mbedtls_x509_crl *crl ); + +/* \} name */ +/* \} addtogroup x509_module */ + +#ifdef __cplusplus +} +#endif + +#endif /* mbedtls_x509_crl.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/x509_crt.h b/tools/sdk/include/mbedtls/mbedtls/x509_crt.h new file mode 100644 index 00000000..41b6bfe5 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/x509_crt.h @@ -0,0 +1,650 @@ +/** + * \file x509_crt.h + * + * \brief X.509 certificate parsing and writing + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_X509_CRT_H +#define MBEDTLS_X509_CRT_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "x509.h" +#include "x509_crl.h" + +/** + * \addtogroup x509_module + * \{ + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Structures and functions for parsing and writing X.509 certificates + * \{ + */ + +/** + * Container for an X.509 certificate. The certificate may be chained. + */ +typedef struct mbedtls_x509_crt +{ + mbedtls_x509_buf raw; /**< The raw certificate data (DER). */ + mbedtls_x509_buf tbs; /**< The raw certificate body (DER). The part that is To Be Signed. */ + + int version; /**< The X.509 version. (1=v1, 2=v2, 3=v3) */ + mbedtls_x509_buf serial; /**< Unique id for certificate issued by a specific CA. */ + mbedtls_x509_buf sig_oid; /**< Signature algorithm, e.g. sha1RSA */ + + mbedtls_x509_buf issuer_raw; /**< The raw issuer data (DER). Used for quick comparison. */ + mbedtls_x509_buf subject_raw; /**< The raw subject data (DER). Used for quick comparison. */ + + mbedtls_x509_name issuer; /**< The parsed issuer data (named information object). */ + mbedtls_x509_name subject; /**< The parsed subject data (named information object). */ + + mbedtls_x509_time valid_from; /**< Start time of certificate validity. */ + mbedtls_x509_time valid_to; /**< End time of certificate validity. */ + + mbedtls_pk_context pk; /**< Container for the public key context. */ + + mbedtls_x509_buf issuer_id; /**< Optional X.509 v2/v3 issuer unique identifier. */ + mbedtls_x509_buf subject_id; /**< Optional X.509 v2/v3 subject unique identifier. */ + mbedtls_x509_buf v3_ext; /**< Optional X.509 v3 extensions. */ + mbedtls_x509_sequence subject_alt_names; /**< Optional list of Subject Alternative Names (Only dNSName supported). */ + + int ext_types; /**< Bit string containing detected and parsed extensions */ + int ca_istrue; /**< Optional Basic Constraint extension value: 1 if this certificate belongs to a CA, 0 otherwise. */ + int max_pathlen; /**< Optional Basic Constraint extension value: The maximum path length to the root certificate. Path length is 1 higher than RFC 5280 'meaning', so 1+ */ + + unsigned int key_usage; /**< Optional key usage extension value: See the values in x509.h */ + + mbedtls_x509_sequence ext_key_usage; /**< Optional list of extended key usage OIDs. */ + + unsigned char ns_cert_type; /**< Optional Netscape certificate type extension value: See the values in x509.h */ + + mbedtls_x509_buf sig; /**< Signature: hash of the tbs part signed with the private key. */ + mbedtls_md_type_t sig_md; /**< Internal representation of the MD algorithm of the signature algorithm, e.g. MBEDTLS_MD_SHA256 */ + mbedtls_pk_type_t sig_pk; /**< Internal representation of the Public Key algorithm of the signature algorithm, e.g. MBEDTLS_PK_RSA */ + void *sig_opts; /**< Signature options to be passed to mbedtls_pk_verify_ext(), e.g. for RSASSA-PSS */ + + struct mbedtls_x509_crt *next; /**< Next certificate in the CA-chain. */ +} +mbedtls_x509_crt; + +/** + * Build flag from an algorithm/curve identifier (pk, md, ecp) + * Since 0 is always XXX_NONE, ignore it. + */ +#define MBEDTLS_X509_ID_FLAG( id ) ( 1 << ( id - 1 ) ) + +/** + * Security profile for certificate verification. + * + * All lists are bitfields, built by ORing flags from MBEDTLS_X509_ID_FLAG(). + */ +typedef struct +{ + uint32_t allowed_mds; /**< MDs for signatures */ + uint32_t allowed_pks; /**< PK algs for signatures */ + uint32_t allowed_curves; /**< Elliptic curves for ECDSA */ + uint32_t rsa_min_bitlen; /**< Minimum size for RSA keys */ +} +mbedtls_x509_crt_profile; + +#define MBEDTLS_X509_CRT_VERSION_1 0 +#define MBEDTLS_X509_CRT_VERSION_2 1 +#define MBEDTLS_X509_CRT_VERSION_3 2 + +#define MBEDTLS_X509_RFC5280_MAX_SERIAL_LEN 32 +#define MBEDTLS_X509_RFC5280_UTC_TIME_LEN 15 + +/** + * Container for writing a certificate (CRT) + */ +typedef struct mbedtls_x509write_cert +{ + int version; + mbedtls_mpi serial; + mbedtls_pk_context *subject_key; + mbedtls_pk_context *issuer_key; + mbedtls_asn1_named_data *subject; + mbedtls_asn1_named_data *issuer; + mbedtls_md_type_t md_alg; + char not_before[MBEDTLS_X509_RFC5280_UTC_TIME_LEN + 1]; + char not_after[MBEDTLS_X509_RFC5280_UTC_TIME_LEN + 1]; + mbedtls_asn1_named_data *extensions; +} +mbedtls_x509write_cert; + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * Default security profile. Should provide a good balance between security + * and compatibility with current deployments. + */ +extern const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default; + +/** + * Expected next default profile. Recommended for new deployments. + * Currently targets a 128-bit security level, except for RSA-2048. + */ +extern const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next; + +/** + * NSA Suite B profile. + */ +extern const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb; + +/** + * \brief Parse a single DER formatted certificate and add it + * to the chained list. + * + * \param chain points to the start of the chain + * \param buf buffer holding the certificate DER data + * \param buflen size of the buffer + * + * \return 0 if successful, or a specific X509 or PEM error code + */ +int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, const unsigned char *buf, + size_t buflen ); + +/** + * \brief Parse one or more certificates and add them + * to the chained list. Parses permissively. If some + * certificates can be parsed, the result is the number + * of failed certificates it encountered. If none complete + * correctly, the first error is returned. + * + * \param chain points to the start of the chain + * \param buf buffer holding the certificate data in PEM or DER format + * \param buflen size of the buffer + * (including the terminating null byte for PEM data) + * + * \return 0 if all certificates parsed successfully, a positive number + * if partly successful or a specific X509 or PEM error code + */ +int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, const unsigned char *buf, size_t buflen ); + +#if defined(MBEDTLS_FS_IO) +/** + * \brief Load one or more certificates and add them + * to the chained list. Parses permissively. If some + * certificates can be parsed, the result is the number + * of failed certificates it encountered. If none complete + * correctly, the first error is returned. + * + * \param chain points to the start of the chain + * \param path filename to read the certificates from + * + * \return 0 if all certificates parsed successfully, a positive number + * if partly successful or a specific X509 or PEM error code + */ +int mbedtls_x509_crt_parse_file( mbedtls_x509_crt *chain, const char *path ); + +/** + * \brief Load one or more certificate files from a path and add them + * to the chained list. Parses permissively. If some + * certificates can be parsed, the result is the number + * of failed certificates it encountered. If none complete + * correctly, the first error is returned. + * + * \param chain points to the start of the chain + * \param path directory / folder to read the certificate files from + * + * \return 0 if all certificates parsed successfully, a positive number + * if partly successful or a specific X509 or PEM error code + */ +int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ); +#endif /* MBEDTLS_FS_IO */ + +/** + * \brief Returns an informational string about the + * certificate. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param prefix A line prefix + * \param crt The X509 certificate to represent + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. + */ +int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix, + const mbedtls_x509_crt *crt ); + +/** + * \brief Returns an informational string about the + * verification status of a certificate. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param prefix A line prefix + * \param flags Verification flags created by mbedtls_x509_crt_verify() + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. + */ +int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, + uint32_t flags ); + +/** + * \brief Verify the certificate signature + * + * The verify callback is a user-supplied callback that + * can clear / modify / add flags for a certificate. If set, + * the verification callback is called for each + * certificate in the chain (from the trust-ca down to the + * presented crt). The parameters for the callback are: + * (void *parameter, mbedtls_x509_crt *crt, int certificate_depth, + * int *flags). With the flags representing current flags for + * that specific certificate and the certificate depth from + * the bottom (Peer cert depth = 0). + * + * All flags left after returning from the callback + * are also returned to the application. The function should + * return 0 for anything but a fatal error. + * + * \note In case verification failed, the results can be displayed + * using \c mbedtls_x509_crt_verify_info() + * + * \note Same as \c mbedtls_x509_crt_verify_with_profile() with the + * default security profile. + * + * \note It is your responsibility to provide up-to-date CRLs for + * all trusted CAs. If no CRL is provided for the CA that was + * used to sign the certificate, CRL verification is skipped + * silently, that is *without* setting any flag. + * + * \param crt a certificate (chain) to be verified + * \param trust_ca the list of trusted CAs + * \param ca_crl the list of CRLs for trusted CAs (see note above) + * \param cn expected Common Name (can be set to + * NULL if the CN must not be verified) + * \param flags result of the verification + * \param f_vrfy verification function + * \param p_vrfy verification parameter + * + * \return 0 if successful or MBEDTLS_ERR_X509_CERT_VERIFY_FAILED + * in which case *flags will have one or more + * MBEDTLS_X509_BADCERT_XXX or MBEDTLS_X509_BADCRL_XXX flags + * set, + * or another error in case of a fatal error encountered + * during the verification process. + */ +int mbedtls_x509_crt_verify( mbedtls_x509_crt *crt, + mbedtls_x509_crt *trust_ca, + mbedtls_x509_crl *ca_crl, + const char *cn, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ); + +/** + * \brief Verify the certificate signature according to profile + * + * \note Same as \c mbedtls_x509_crt_verify(), but with explicit + * security profile. + * + * \note The restrictions on keys (RSA minimum size, allowed curves + * for ECDSA) apply to all certificates: trusted root, + * intermediate CAs if any, and end entity certificate. + * + * \param crt a certificate (chain) to be verified + * \param trust_ca the list of trusted CAs + * \param ca_crl the list of CRLs for trusted CAs + * \param profile security profile for verification + * \param cn expected Common Name (can be set to + * NULL if the CN must not be verified) + * \param flags result of the verification + * \param f_vrfy verification function + * \param p_vrfy verification parameter + * + * \return 0 if successful or MBEDTLS_ERR_X509_CERT_VERIFY_FAILED + * in which case *flags will have one or more + * MBEDTLS_X509_BADCERT_XXX or MBEDTLS_X509_BADCRL_XXX flags + * set, + * or another error in case of a fatal error encountered + * during the verification process. + */ +int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, + mbedtls_x509_crt *trust_ca, + mbedtls_x509_crl *ca_crl, + const mbedtls_x509_crt_profile *profile, + const char *cn, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ); + +#if defined(MBEDTLS_X509_CHECK_KEY_USAGE) +/** + * \brief Check usage of certificate against keyUsage extension. + * + * \param crt Leaf certificate used. + * \param usage Intended usage(s) (eg MBEDTLS_X509_KU_KEY_ENCIPHERMENT + * before using the certificate to perform an RSA key + * exchange). + * + * \note Except for decipherOnly and encipherOnly, a bit set in the + * usage argument means this bit MUST be set in the + * certificate. For decipherOnly and encipherOnly, it means + * that bit MAY be set. + * + * \return 0 is these uses of the certificate are allowed, + * MBEDTLS_ERR_X509_BAD_INPUT_DATA if the keyUsage extension + * is present but does not match the usage argument. + * + * \note You should only call this function on leaf certificates, on + * (intermediate) CAs the keyUsage extension is automatically + * checked by \c mbedtls_x509_crt_verify(). + */ +int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt, + unsigned int usage ); +#endif /* MBEDTLS_X509_CHECK_KEY_USAGE) */ + +#if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) +/** + * \brief Check usage of certificate against extentedJeyUsage. + * + * \param crt Leaf certificate used. + * \param usage_oid Intended usage (eg MBEDTLS_OID_SERVER_AUTH or MBEDTLS_OID_CLIENT_AUTH). + * \param usage_len Length of usage_oid (eg given by MBEDTLS_OID_SIZE()). + * + * \return 0 if this use of the certificate is allowed, + * MBEDTLS_ERR_X509_BAD_INPUT_DATA if not. + * + * \note Usually only makes sense on leaf certificates. + */ +int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *crt, + const char *usage_oid, + size_t usage_len ); +#endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) */ + +#if defined(MBEDTLS_X509_CRL_PARSE_C) +/** + * \brief Verify the certificate revocation status + * + * \param crt a certificate to be verified + * \param crl the CRL to verify against + * + * \return 1 if the certificate is revoked, 0 otherwise + * + */ +int mbedtls_x509_crt_is_revoked( const mbedtls_x509_crt *crt, const mbedtls_x509_crl *crl ); +#endif /* MBEDTLS_X509_CRL_PARSE_C */ + +/** + * \brief Initialize a certificate (chain) + * + * \param crt Certificate chain to initialize + */ +void mbedtls_x509_crt_init( mbedtls_x509_crt *crt ); + +/** + * \brief Unallocate all certificate data + * + * \param crt Certificate chain to free + */ +void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ); +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + +/* \} name */ +/* \} addtogroup x509_module */ + +#if defined(MBEDTLS_X509_CRT_WRITE_C) +/** + * \brief Initialize a CRT writing context + * + * \param ctx CRT context to initialize + */ +void mbedtls_x509write_crt_init( mbedtls_x509write_cert *ctx ); + +/** + * \brief Set the verion for a Certificate + * Default: MBEDTLS_X509_CRT_VERSION_3 + * + * \param ctx CRT context to use + * \param version version to set (MBEDTLS_X509_CRT_VERSION_1, MBEDTLS_X509_CRT_VERSION_2 or + * MBEDTLS_X509_CRT_VERSION_3) + */ +void mbedtls_x509write_crt_set_version( mbedtls_x509write_cert *ctx, int version ); + +/** + * \brief Set the serial number for a Certificate. + * + * \param ctx CRT context to use + * \param serial serial number to set + * + * \return 0 if successful + */ +int mbedtls_x509write_crt_set_serial( mbedtls_x509write_cert *ctx, const mbedtls_mpi *serial ); + +/** + * \brief Set the validity period for a Certificate + * Timestamps should be in string format for UTC timezone + * i.e. "YYYYMMDDhhmmss" + * e.g. "20131231235959" for December 31st 2013 + * at 23:59:59 + * + * \param ctx CRT context to use + * \param not_before not_before timestamp + * \param not_after not_after timestamp + * + * \return 0 if timestamp was parsed successfully, or + * a specific error code + */ +int mbedtls_x509write_crt_set_validity( mbedtls_x509write_cert *ctx, const char *not_before, + const char *not_after ); + +/** + * \brief Set the issuer name for a Certificate + * Issuer names should contain a comma-separated list + * of OID types and values: + * e.g. "C=UK,O=ARM,CN=mbed TLS CA" + * + * \param ctx CRT context to use + * \param issuer_name issuer name to set + * + * \return 0 if issuer name was parsed successfully, or + * a specific error code + */ +int mbedtls_x509write_crt_set_issuer_name( mbedtls_x509write_cert *ctx, + const char *issuer_name ); + +/** + * \brief Set the subject name for a Certificate + * Subject names should contain a comma-separated list + * of OID types and values: + * e.g. "C=UK,O=ARM,CN=mbed TLS Server 1" + * + * \param ctx CRT context to use + * \param subject_name subject name to set + * + * \return 0 if subject name was parsed successfully, or + * a specific error code + */ +int mbedtls_x509write_crt_set_subject_name( mbedtls_x509write_cert *ctx, + const char *subject_name ); + +/** + * \brief Set the subject public key for the certificate + * + * \param ctx CRT context to use + * \param key public key to include + */ +void mbedtls_x509write_crt_set_subject_key( mbedtls_x509write_cert *ctx, mbedtls_pk_context *key ); + +/** + * \brief Set the issuer key used for signing the certificate + * + * \param ctx CRT context to use + * \param key private key to sign with + */ +void mbedtls_x509write_crt_set_issuer_key( mbedtls_x509write_cert *ctx, mbedtls_pk_context *key ); + +/** + * \brief Set the MD algorithm to use for the signature + * (e.g. MBEDTLS_MD_SHA1) + * + * \param ctx CRT context to use + * \param md_alg MD algorithm to use + */ +void mbedtls_x509write_crt_set_md_alg( mbedtls_x509write_cert *ctx, mbedtls_md_type_t md_alg ); + +/** + * \brief Generic function to add to or replace an extension in the + * CRT + * + * \param ctx CRT context to use + * \param oid OID of the extension + * \param oid_len length of the OID + * \param critical if the extension is critical (per the RFC's definition) + * \param val value of the extension OCTET STRING + * \param val_len length of the value data + * + * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED + */ +int mbedtls_x509write_crt_set_extension( mbedtls_x509write_cert *ctx, + const char *oid, size_t oid_len, + int critical, + const unsigned char *val, size_t val_len ); + +/** + * \brief Set the basicConstraints extension for a CRT + * + * \param ctx CRT context to use + * \param is_ca is this a CA certificate + * \param max_pathlen maximum length of certificate chains below this + * certificate (only for CA certificates, -1 is + * inlimited) + * + * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED + */ +int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, + int is_ca, int max_pathlen ); + +#if defined(MBEDTLS_SHA1_C) +/** + * \brief Set the subjectKeyIdentifier extension for a CRT + * Requires that mbedtls_x509write_crt_set_subject_key() has been + * called before + * + * \param ctx CRT context to use + * + * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED + */ +int mbedtls_x509write_crt_set_subject_key_identifier( mbedtls_x509write_cert *ctx ); + +/** + * \brief Set the authorityKeyIdentifier extension for a CRT + * Requires that mbedtls_x509write_crt_set_issuer_key() has been + * called before + * + * \param ctx CRT context to use + * + * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED + */ +int mbedtls_x509write_crt_set_authority_key_identifier( mbedtls_x509write_cert *ctx ); +#endif /* MBEDTLS_SHA1_C */ + +/** + * \brief Set the Key Usage Extension flags + * (e.g. MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_CERT_SIGN) + * + * \param ctx CRT context to use + * \param key_usage key usage flags to set + * + * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED + */ +int mbedtls_x509write_crt_set_key_usage( mbedtls_x509write_cert *ctx, + unsigned int key_usage ); + +/** + * \brief Set the Netscape Cert Type flags + * (e.g. MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | MBEDTLS_X509_NS_CERT_TYPE_EMAIL) + * + * \param ctx CRT context to use + * \param ns_cert_type Netscape Cert Type flags to set + * + * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED + */ +int mbedtls_x509write_crt_set_ns_cert_type( mbedtls_x509write_cert *ctx, + unsigned char ns_cert_type ); + +/** + * \brief Free the contents of a CRT write context + * + * \param ctx CRT context to free + */ +void mbedtls_x509write_crt_free( mbedtls_x509write_cert *ctx ); + +/** + * \brief Write a built up certificate to a X509 DER structure + * Note: data is written at the end of the buffer! Use the + * return value to determine where you should start + * using the buffer + * + * \param ctx certificate to write away + * \param buf buffer to write to + * \param size size of the buffer + * \param f_rng RNG function (for signature, see note) + * \param p_rng RNG parameter + * + * \return length of data written if successful, or a specific + * error code + * + * \note f_rng may be NULL if RSA is used for signature and the + * signature is made offline (otherwise f_rng is desirable + * for countermeasures against timing attacks). + * ECDSA signatures always require a non-NULL f_rng. + */ +int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, size_t size, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +#if defined(MBEDTLS_PEM_WRITE_C) +/** + * \brief Write a built up certificate to a X509 PEM string + * + * \param ctx certificate to write away + * \param buf buffer to write to + * \param size size of the buffer + * \param f_rng RNG function (for signature, see note) + * \param p_rng RNG parameter + * + * \return 0 if successful, or a specific error code + * + * \note f_rng may be NULL if RSA is used for signature and the + * signature is made offline (otherwise f_rng is desirable + * for countermeasures against timing attacks). + * ECDSA signatures always require a non-NULL f_rng. + */ +int mbedtls_x509write_crt_pem( mbedtls_x509write_cert *ctx, unsigned char *buf, size_t size, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); +#endif /* MBEDTLS_PEM_WRITE_C */ +#endif /* MBEDTLS_X509_CRT_WRITE_C */ + +#ifdef __cplusplus +} +#endif + +#endif /* mbedtls_x509_crt.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/x509_csr.h b/tools/sdk/include/mbedtls/mbedtls/x509_csr.h new file mode 100644 index 00000000..7a9c2e05 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/x509_csr.h @@ -0,0 +1,298 @@ +/** + * \file x509_csr.h + * + * \brief X.509 certificate signing request parsing and writing + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_X509_CSR_H +#define MBEDTLS_X509_CSR_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "x509.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup x509_module + * \{ */ + +/** + * \name Structures and functions for X.509 Certificate Signing Requests (CSR) + * \{ + */ + +/** + * Certificate Signing Request (CSR) structure. + */ +typedef struct mbedtls_x509_csr +{ + mbedtls_x509_buf raw; /**< The raw CSR data (DER). */ + mbedtls_x509_buf cri; /**< The raw CertificateRequestInfo body (DER). */ + + int version; /**< CSR version (1=v1). */ + + mbedtls_x509_buf subject_raw; /**< The raw subject data (DER). */ + mbedtls_x509_name subject; /**< The parsed subject data (named information object). */ + + mbedtls_pk_context pk; /**< Container for the public key context. */ + + mbedtls_x509_buf sig_oid; + mbedtls_x509_buf sig; + mbedtls_md_type_t sig_md; /**< Internal representation of the MD algorithm of the signature algorithm, e.g. MBEDTLS_MD_SHA256 */ + mbedtls_pk_type_t sig_pk; /**< Internal representation of the Public Key algorithm of the signature algorithm, e.g. MBEDTLS_PK_RSA */ + void *sig_opts; /**< Signature options to be passed to mbedtls_pk_verify_ext(), e.g. for RSASSA-PSS */ +} +mbedtls_x509_csr; + +/** + * Container for writing a CSR + */ +typedef struct mbedtls_x509write_csr +{ + mbedtls_pk_context *key; + mbedtls_asn1_named_data *subject; + mbedtls_md_type_t md_alg; + mbedtls_asn1_named_data *extensions; +} +mbedtls_x509write_csr; + +#if defined(MBEDTLS_X509_CSR_PARSE_C) +/** + * \brief Load a Certificate Signing Request (CSR) in DER format + * + * \note CSR attributes (if any) are currently silently ignored. + * + * \param csr CSR context to fill + * \param buf buffer holding the CRL data + * \param buflen size of the buffer + * + * \return 0 if successful, or a specific X509 error code + */ +int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, + const unsigned char *buf, size_t buflen ); + +/** + * \brief Load a Certificate Signing Request (CSR), DER or PEM format + * + * \note See notes for \c mbedtls_x509_csr_parse_der() + * + * \param csr CSR context to fill + * \param buf buffer holding the CRL data + * \param buflen size of the buffer + * (including the terminating null byte for PEM data) + * + * \return 0 if successful, or a specific X509 or PEM error code + */ +int mbedtls_x509_csr_parse( mbedtls_x509_csr *csr, const unsigned char *buf, size_t buflen ); + +#if defined(MBEDTLS_FS_IO) +/** + * \brief Load a Certificate Signing Request (CSR) + * + * \note See notes for \c mbedtls_x509_csr_parse() + * + * \param csr CSR context to fill + * \param path filename to read the CSR from + * + * \return 0 if successful, or a specific X509 or PEM error code + */ +int mbedtls_x509_csr_parse_file( mbedtls_x509_csr *csr, const char *path ); +#endif /* MBEDTLS_FS_IO */ + +/** + * \brief Returns an informational string about the + * CSR. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param prefix A line prefix + * \param csr The X509 CSR to represent + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. + */ +int mbedtls_x509_csr_info( char *buf, size_t size, const char *prefix, + const mbedtls_x509_csr *csr ); + +/** + * \brief Initialize a CSR + * + * \param csr CSR to initialize + */ +void mbedtls_x509_csr_init( mbedtls_x509_csr *csr ); + +/** + * \brief Unallocate all CSR data + * + * \param csr CSR to free + */ +void mbedtls_x509_csr_free( mbedtls_x509_csr *csr ); +#endif /* MBEDTLS_X509_CSR_PARSE_C */ + +/* \} name */ +/* \} addtogroup x509_module */ + +#if defined(MBEDTLS_X509_CSR_WRITE_C) +/** + * \brief Initialize a CSR context + * + * \param ctx CSR context to initialize + */ +void mbedtls_x509write_csr_init( mbedtls_x509write_csr *ctx ); + +/** + * \brief Set the subject name for a CSR + * Subject names should contain a comma-separated list + * of OID types and values: + * e.g. "C=UK,O=ARM,CN=mbed TLS Server 1" + * + * \param ctx CSR context to use + * \param subject_name subject name to set + * + * \return 0 if subject name was parsed successfully, or + * a specific error code + */ +int mbedtls_x509write_csr_set_subject_name( mbedtls_x509write_csr *ctx, + const char *subject_name ); + +/** + * \brief Set the key for a CSR (public key will be included, + * private key used to sign the CSR when writing it) + * + * \param ctx CSR context to use + * \param key Asymetric key to include + */ +void mbedtls_x509write_csr_set_key( mbedtls_x509write_csr *ctx, mbedtls_pk_context *key ); + +/** + * \brief Set the MD algorithm to use for the signature + * (e.g. MBEDTLS_MD_SHA1) + * + * \param ctx CSR context to use + * \param md_alg MD algorithm to use + */ +void mbedtls_x509write_csr_set_md_alg( mbedtls_x509write_csr *ctx, mbedtls_md_type_t md_alg ); + +/** + * \brief Set the Key Usage Extension flags + * (e.g. MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_CERT_SIGN) + * + * \param ctx CSR context to use + * \param key_usage key usage flags to set + * + * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED + */ +int mbedtls_x509write_csr_set_key_usage( mbedtls_x509write_csr *ctx, unsigned char key_usage ); + +/** + * \brief Set the Netscape Cert Type flags + * (e.g. MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | MBEDTLS_X509_NS_CERT_TYPE_EMAIL) + * + * \param ctx CSR context to use + * \param ns_cert_type Netscape Cert Type flags to set + * + * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED + */ +int mbedtls_x509write_csr_set_ns_cert_type( mbedtls_x509write_csr *ctx, + unsigned char ns_cert_type ); + +/** + * \brief Generic function to add to or replace an extension in the + * CSR + * + * \param ctx CSR context to use + * \param oid OID of the extension + * \param oid_len length of the OID + * \param val value of the extension OCTET STRING + * \param val_len length of the value data + * + * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED + */ +int mbedtls_x509write_csr_set_extension( mbedtls_x509write_csr *ctx, + const char *oid, size_t oid_len, + const unsigned char *val, size_t val_len ); + +/** + * \brief Free the contents of a CSR context + * + * \param ctx CSR context to free + */ +void mbedtls_x509write_csr_free( mbedtls_x509write_csr *ctx ); + +/** + * \brief Write a CSR (Certificate Signing Request) to a + * DER structure + * Note: data is written at the end of the buffer! Use the + * return value to determine where you should start + * using the buffer + * + * \param ctx CSR to write away + * \param buf buffer to write to + * \param size size of the buffer + * \param f_rng RNG function (for signature, see note) + * \param p_rng RNG parameter + * + * \return length of data written if successful, or a specific + * error code + * + * \note f_rng may be NULL if RSA is used for signature and the + * signature is made offline (otherwise f_rng is desirable + * for countermeasures against timing attacks). + * ECDSA signatures always require a non-NULL f_rng. + */ +int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); + +#if defined(MBEDTLS_PEM_WRITE_C) +/** + * \brief Write a CSR (Certificate Signing Request) to a + * PEM string + * + * \param ctx CSR to write away + * \param buf buffer to write to + * \param size size of the buffer + * \param f_rng RNG function (for signature, see note) + * \param p_rng RNG parameter + * + * \return 0 if successful, or a specific error code + * + * \note f_rng may be NULL if RSA is used for signature and the + * signature is made offline (otherwise f_rng is desirable + * for couermeasures against timing attacks). + * ECDSA signatures always require a non-NULL f_rng. + */ +int mbedtls_x509write_csr_pem( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); +#endif /* MBEDTLS_PEM_WRITE_C */ +#endif /* MBEDTLS_X509_CSR_WRITE_C */ + +#ifdef __cplusplus +} +#endif + +#endif /* mbedtls_x509_csr.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/xtea.h b/tools/sdk/include/mbedtls/mbedtls/xtea.h new file mode 100644 index 00000000..b073f84e --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/xtea.h @@ -0,0 +1,139 @@ +/** + * \file xtea.h + * + * \brief XTEA block cipher (32-bit) + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_XTEA_H +#define MBEDTLS_XTEA_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + +#define MBEDTLS_XTEA_ENCRYPT 1 +#define MBEDTLS_XTEA_DECRYPT 0 + +#define MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH -0x0028 /**< The data input has an invalid length. */ + +#if !defined(MBEDTLS_XTEA_ALT) +// Regular implementation +// + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief XTEA context structure + */ +typedef struct +{ + uint32_t k[4]; /*!< key */ +} +mbedtls_xtea_context; + +/** + * \brief Initialize XTEA context + * + * \param ctx XTEA context to be initialized + */ +void mbedtls_xtea_init( mbedtls_xtea_context *ctx ); + +/** + * \brief Clear XTEA context + * + * \param ctx XTEA context to be cleared + */ +void mbedtls_xtea_free( mbedtls_xtea_context *ctx ); + +/** + * \brief XTEA key schedule + * + * \param ctx XTEA context to be initialized + * \param key the secret key + */ +void mbedtls_xtea_setup( mbedtls_xtea_context *ctx, const unsigned char key[16] ); + +/** + * \brief XTEA cipher function + * + * \param ctx XTEA context + * \param mode MBEDTLS_XTEA_ENCRYPT or MBEDTLS_XTEA_DECRYPT + * \param input 8-byte input block + * \param output 8-byte output block + * + * \return 0 if successful + */ +int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, + int mode, + const unsigned char input[8], + unsigned char output[8] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief XTEA CBC cipher function + * + * \param ctx XTEA context + * \param mode MBEDTLS_XTEA_ENCRYPT or MBEDTLS_XTEA_DECRYPT + * \param length the length of input, multiple of 8 + * \param iv initialization vector for CBC mode + * \param input input block + * \param output output block + * + * \return 0 if successful, + * MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH if the length % 8 != 0 + */ +int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#ifdef __cplusplus +} +#endif + +#else /* MBEDTLS_XTEA_ALT */ +#include "xtea_alt.h" +#endif /* MBEDTLS_XTEA_ALT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_xtea_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* xtea.h */ diff --git a/tools/sdk/include/mbedtls/sha1_alt.h b/tools/sdk/include/mbedtls/sha1_alt.h new file mode 100644 index 00000000..60297b9f --- /dev/null +++ b/tools/sdk/include/mbedtls/sha1_alt.h @@ -0,0 +1,33 @@ +/* + * copyright (c) 2010 - 2012 Espressif System + * + */ +#ifndef _SHA1_ALT_H_ +#define _SHA1_ALT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(MBEDTLS_SHA1_ALT) + +#include "hwcrypto/sha.h" + +typedef esp_sha_context mbedtls_sha1_context; + +#define mbedtls_sha1_init esp_sha1_init +#define mbedtls_sha1_starts esp_sha1_start +#define mbedtls_sha1_clone esp_sha1_clone +#define mbedtls_sha1_update esp_sha1_update +#define mbedtls_sha1_finish esp_sha1_finish +#define mbedtls_sha1_free esp_sha1_free +#define mbedtls_sha1_process(...) + +#endif + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/tools/sdk/include/mbedtls/sha256_alt.h b/tools/sdk/include/mbedtls/sha256_alt.h new file mode 100644 index 00000000..6d9986b3 --- /dev/null +++ b/tools/sdk/include/mbedtls/sha256_alt.h @@ -0,0 +1,33 @@ +/* + * copyright (c) 2010 - 2012 Espressif System + * + */ + +#ifndef _SHA256_ALT_H_ +#define _SHA256_ALT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(MBEDTLS_SHA256_ALT) + +#include "hwcrypto/sha.h" + +typedef esp_sha_context mbedtls_sha256_context; + +#define mbedtls_sha256_init esp_sha256_init +#define mbedtls_sha256_clone esp_sha256_clone +#define mbedtls_sha256_starts esp_sha256_start +#define mbedtls_sha256_update esp_sha256_update +#define mbedtls_sha256_finish esp_sha256_finish +#define mbedtls_sha256_free esp_sha256_free +#define mbedtls_sha256_process(...) + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* sha256.h */ diff --git a/tools/sdk/include/mbedtls/sha512_alt.h b/tools/sdk/include/mbedtls/sha512_alt.h new file mode 100644 index 00000000..241f2be3 --- /dev/null +++ b/tools/sdk/include/mbedtls/sha512_alt.h @@ -0,0 +1,33 @@ +/* + * copyright (c) 2010 - 2012 Espressif System + * + * esf Link List Descriptor + */ + +#ifndef _SHA512_ALT_H_ +#define _SHA512_ALT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(MBEDTLS_SHA512_ALT) +#include "hwcrypto/sha.h" + +typedef esp_sha_context mbedtls_sha512_context; + +#define mbedtls_sha512_init esp_sha512_init +#define mbedtls_sha512_clone esp_sha512_clone +#define mbedtls_sha512_starts esp_sha512_start +#define mbedtls_sha512_update esp_sha512_update +#define mbedtls_sha512_finish esp_sha512_finish +#define mbedtls_sha512_free esp_sha512_free +#define mbedtls_sha512_process(...) + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* sha512.h */ diff --git a/tools/sdk/include/newlib/_ansi.h b/tools/sdk/include/newlib/_ansi.h new file mode 100644 index 00000000..5fb99070 --- /dev/null +++ b/tools/sdk/include/newlib/_ansi.h @@ -0,0 +1,140 @@ +/* Provide support for both ANSI and non-ANSI environments. */ + +/* Some ANSI environments are "broken" in the sense that __STDC__ cannot be + relied upon to have it's intended meaning. Therefore we must use our own + concoction: _HAVE_STDC. Always use _HAVE_STDC instead of __STDC__ in newlib + sources! + + To get a strict ANSI C environment, define macro __STRICT_ANSI__. This will + "comment out" the non-ANSI parts of the ANSI header files (non-ANSI header + files aren't affected). */ + +#ifndef _ANSIDECL_H_ +#define _ANSIDECL_H_ + +#include +#include + +/* First try to figure out whether we really are in an ANSI C environment. */ +/* FIXME: This probably needs some work. Perhaps sys/config.h can be + prevailed upon to give us a clue. */ + +#ifdef __STDC__ +#define _HAVE_STDC +#endif + +/* ISO C++. */ + +#ifdef __cplusplus +#if !(defined(_BEGIN_STD_C) && defined(_END_STD_C)) +#ifdef _HAVE_STD_CXX +#define _BEGIN_STD_C namespace std { extern "C" { +#define _END_STD_C } } +#else +#define _BEGIN_STD_C extern "C" { +#define _END_STD_C } +#endif +#if __GNUC_PREREQ (3, 3) +#define _NOTHROW __attribute__ ((__nothrow__)) +#else +#define _NOTHROW throw() +#endif +#endif +#else +#define _BEGIN_STD_C +#define _END_STD_C +#define _NOTHROW +#endif + +#ifdef _HAVE_STDC +#define _PTR void * +#define _AND , +#define _NOARGS void +#define _CONST const +#define _VOLATILE volatile +#define _SIGNED signed +#define _DOTS , ... +#define _VOID void +#ifdef __CYGWIN__ +#define _EXFUN_NOTHROW(name, proto) __cdecl name proto _NOTHROW +#define _EXFUN(name, proto) __cdecl name proto +#define _EXPARM(name, proto) (* __cdecl name) proto +#define _EXFNPTR(name, proto) (__cdecl * name) proto +#else +#define _EXFUN_NOTHROW(name, proto) name proto _NOTHROW +#define _EXFUN(name, proto) name proto +#define _EXPARM(name, proto) (* name) proto +#define _EXFNPTR(name, proto) (* name) proto +#endif +#define _DEFUN(name, arglist, args) name(args) +#define _DEFUN_VOID(name) name(_NOARGS) +#define _CAST_VOID (void) +#ifndef _LONG_DOUBLE +#define _LONG_DOUBLE long double +#endif +#ifndef _PARAMS +#define _PARAMS(paramlist) paramlist +#endif +#else +#define _PTR char * +#define _AND ; +#define _NOARGS +#define _CONST +#define _VOLATILE +#define _SIGNED +#define _DOTS +#define _VOID void +#define _EXFUN(name, proto) name() +#define _EXFUN_NOTHROW(name, proto) name() +#define _DEFUN(name, arglist, args) name arglist args; +#define _DEFUN_VOID(name) name() +#define _CAST_VOID +#define _LONG_DOUBLE double +#ifndef _PARAMS +#define _PARAMS(paramlist) () +#endif +#endif + +/* Support gcc's __attribute__ facility. */ + +#ifdef __GNUC__ +#define _ATTRIBUTE(attrs) __attribute__ (attrs) +#else +#define _ATTRIBUTE(attrs) +#endif + +/* The traditional meaning of 'extern inline' for GCC is not + to emit the function body unless the address is explicitly + taken. However this behaviour is changing to match the C99 + standard, which uses 'extern inline' to indicate that the + function body *must* be emitted. Likewise, a function declared + without either 'extern' or 'static' defaults to extern linkage + (C99 6.2.2p5), and the compiler may choose whether to use the + inline version or call the extern linkage version (6.7.4p6). + If we are using GCC, but do not have the new behaviour, we need + to use extern inline; if we are using a new GCC with the + C99-compatible behaviour, or a non-GCC compiler (which we will + have to hope is C99, since there is no other way to achieve the + effect of omitting the function if it isn't referenced) we use + 'static inline', which c99 defines to mean more-or-less the same + as the Gnu C 'extern inline'. */ +#if defined(__GNUC__) && !defined(__GNUC_STDC_INLINE__) +/* We're using GCC, but without the new C99-compatible behaviour. */ +#define _ELIDABLE_INLINE extern __inline__ _ATTRIBUTE ((__always_inline__)) +#else +/* We're using GCC in C99 mode, or an unknown compiler which + we just have to hope obeys the C99 semantics of inline. */ +#define _ELIDABLE_INLINE static __inline__ +#endif + +#if __GNUC_PREREQ (3, 1) +#define _NOINLINE __attribute__ ((__noinline__)) +#define _NOINLINE_STATIC _NOINLINE static +#else +/* On non-GNU compilers and GCC prior to version 3.1 the compiler can't be + trusted not to inline if it is static. */ +#define _NOINLINE +#define _NOINLINE_STATIC +#endif + +#endif /* _ANSIDECL_H_ */ diff --git a/tools/sdk/include/newlib/_syslist.h b/tools/sdk/include/newlib/_syslist.h new file mode 100644 index 00000000..271644ef --- /dev/null +++ b/tools/sdk/include/newlib/_syslist.h @@ -0,0 +1,40 @@ +/* internal use only -- mapping of "system calls" for libraries that lose + and only provide C names, so that we end up in violation of ANSI */ +#ifndef __SYSLIST_H +#define __SYSLIST_H + +#ifdef MISSING_SYSCALL_NAMES +#define _close close +#define _execve execve +#define _fcntl fcntl +#define _fork fork +#define _fstat fstat +#define _getpid getpid +#define _gettimeofday gettimeofday +#define _isatty isatty +#define _kill kill +#define _link link +#define _lseek lseek +#define _mkdir mkdir +#define _open open +#define _read read +#define _sbrk sbrk +#define _stat stat +#define _times times +#define _unlink unlink +#define _wait wait +#define _write write +#endif /* MISSING_SYSCALL_NAMES */ + +#if defined MISSING_SYSCALL_NAMES || !defined HAVE_OPENDIR +/* If the system call interface is missing opendir, readdir, and + closedir, there is an implementation of these functions in + libc/posix that is implemented using open, getdents, and close. + Note, these functions are currently not in the libc/syscalls + directory. */ +#define _opendir opendir +#define _readdir readdir +#define _closedir closedir +#endif /* MISSING_SYSCALL_NAMES || !HAVE_OPENDIR */ + +#endif /* !__SYSLIST_H_ */ diff --git a/tools/sdk/include/newlib/alloca.h b/tools/sdk/include/newlib/alloca.h new file mode 100644 index 00000000..2ea0fd9b --- /dev/null +++ b/tools/sdk/include/newlib/alloca.h @@ -0,0 +1,21 @@ +/* libc/include/alloca.h - Allocate memory on stack */ + +/* Written 2000 by Werner Almesberger */ +/* Rearranged for general inclusion by stdlib.h. + 2001, Corinna Vinschen */ + +#ifndef _NEWLIB_ALLOCA_H +#define _NEWLIB_ALLOCA_H + +#include "_ansi.h" +#include + +#undef alloca + +#ifdef __GNUC__ +#define alloca(size) __builtin_alloca(size) +#else +void * _EXFUN(alloca,(size_t)); +#endif + +#endif diff --git a/tools/sdk/include/newlib/ar.h b/tools/sdk/include/newlib/ar.h new file mode 100644 index 00000000..ac2e4ca9 --- /dev/null +++ b/tools/sdk/include/newlib/ar.h @@ -0,0 +1,69 @@ +/* $NetBSD: ar.h,v 1.4 1994/10/26 00:55:43 cgd Exp $ */ + +/*- + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * (c) UNIX System Laboratories, Inc. + * All or some portions of this file are derived from material licensed + * to the University of California by American Telephone and Telegraph + * Co. or Unix System Laboratories, Inc. and are reproduced herein with + * the permission of UNIX System Laboratories, Inc. + * + * This code is derived from software contributed to Berkeley by + * Hugh Smith at The University of Guelph. + * + * 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + * + * @(#)ar.h 8.2 (Berkeley) 1/21/94 + */ + +#ifndef _AR_H_ +#define _AR_H_ + +/* Pre-4BSD archives had these magic numbers in them. */ +#define OARMAG1 0177555 +#define OARMAG2 0177545 + +#define ARMAG "!\n" /* ar "magic number" */ +#define SARMAG 8 /* strlen(ARMAG); */ + +#define AR_EFMT1 "#1/" /* extended format #1 */ + +struct ar_hdr { + char ar_name[16]; /* name */ + char ar_date[12]; /* modification time */ + char ar_uid[6]; /* user id */ + char ar_gid[6]; /* group id */ + char ar_mode[8]; /* octal file permissions */ + char ar_size[10]; /* size in bytes */ +#define ARFMAG "`\n" + char ar_fmag[2]; /* consistency check */ +}; + +#endif /* !_AR_H_ */ diff --git a/tools/sdk/include/newlib/argz.h b/tools/sdk/include/newlib/argz.h new file mode 100644 index 00000000..02c9adbf --- /dev/null +++ b/tools/sdk/include/newlib/argz.h @@ -0,0 +1,33 @@ +/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +#ifndef _ARGZ_H_ +#define _ARGZ_H_ + +#include +#include + +#include "_ansi.h" + +_BEGIN_STD_C + +/* The newlib implementation of these functions assumes that sizeof(char) == 1. */ +error_t argz_create (char *const argv[], char **argz, size_t *argz_len); +error_t argz_create_sep (const char *string, int sep, char **argz, size_t *argz_len); +size_t argz_count (const char *argz, size_t argz_len); +void argz_extract (char *argz, size_t argz_len, char **argv); +void argz_stringify (char *argz, size_t argz_len, int sep); +error_t argz_add (char **argz, size_t *argz_len, const char *str); +error_t argz_add_sep (char **argz, size_t *argz_len, const char *str, int sep); +error_t argz_append (char **argz, size_t *argz_len, const char *buf, size_t buf_len); +error_t argz_delete (char **argz, size_t *argz_len, char *entry); +error_t argz_insert (char **argz, size_t *argz_len, char *before, const char *entry); +char * argz_next (char *argz, size_t argz_len, const char *entry); +error_t argz_replace (char **argz, size_t *argz_len, const char *str, const char *with, unsigned *replace_count); + +_END_STD_C + +#endif /* _ARGZ_H_ */ diff --git a/tools/sdk/include/newlib/assert.h b/tools/sdk/include/newlib/assert.h new file mode 100644 index 00000000..91bb040c --- /dev/null +++ b/tools/sdk/include/newlib/assert.h @@ -0,0 +1,50 @@ +/* + assert.h +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "_ansi.h" + +#undef assert + +#ifdef NDEBUG /* required by ANSI standard */ +# define assert(__e) ((void)0) +#else +# define assert(__e) ((__e) ? (void)0 : __assert_func (__FILE__, __LINE__, \ + __ASSERT_FUNC, #__e)) + +# ifndef __ASSERT_FUNC + /* Use g++'s demangled names in C++. */ +# if defined __cplusplus && defined __GNUC__ +# define __ASSERT_FUNC __PRETTY_FUNCTION__ + + /* C99 requires the use of __func__. */ +# elif __STDC_VERSION__ >= 199901L +# define __ASSERT_FUNC __func__ + + /* Older versions of gcc don't have __func__ but can use __FUNCTION__. */ +# elif __GNUC__ >= 2 +# define __ASSERT_FUNC __FUNCTION__ + + /* failed to detect __func__ support. */ +# else +# define __ASSERT_FUNC ((char *) 0) +# endif +# endif /* !__ASSERT_FUNC */ +#endif /* !NDEBUG */ + +void _EXFUN(__assert, (const char *, int, const char *) + _ATTRIBUTE ((__noreturn__))); +void _EXFUN(__assert_func, (const char *, int, const char *, const char *) + _ATTRIBUTE ((__noreturn__))); + +#if __STDC_VERSION__ >= 201112L && !defined __cplusplus +# define static_assert _Static_assert +#endif + +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/include/newlib/complex.h b/tools/sdk/include/newlib/complex.h new file mode 100644 index 00000000..969b20e5 --- /dev/null +++ b/tools/sdk/include/newlib/complex.h @@ -0,0 +1,124 @@ +/* $NetBSD: complex.h,v 1.3 2010/09/15 16:11:30 christos Exp $ */ + +/* + * Written by Matthias Drochner. + * Public domain. + */ + +#ifndef _COMPLEX_H +#define _COMPLEX_H + +#define complex _Complex +#define _Complex_I 1.0fi +#define I _Complex_I + +#include + +__BEGIN_DECLS + +/* 7.3.5 Trigonometric functions */ +/* 7.3.5.1 The cacos functions */ +double complex cacos(double complex); +float complex cacosf(float complex); + +/* 7.3.5.2 The casin functions */ +double complex casin(double complex); +float complex casinf(float complex); + +/* 7.3.5.1 The catan functions */ +double complex catan(double complex); +float complex catanf(float complex); + +/* 7.3.5.1 The ccos functions */ +double complex ccos(double complex); +float complex ccosf(float complex); + +/* 7.3.5.1 The csin functions */ +double complex csin(double complex); +float complex csinf(float complex); + +/* 7.3.5.1 The ctan functions */ +double complex ctan(double complex); +float complex ctanf(float complex); + +/* 7.3.6 Hyperbolic functions */ +/* 7.3.6.1 The cacosh functions */ +double complex cacosh(double complex); +float complex cacoshf(float complex); + +/* 7.3.6.2 The casinh functions */ +double complex casinh(double complex); +float complex casinhf(float complex); + +/* 7.3.6.3 The catanh functions */ +double complex catanh(double complex); +float complex catanhf(float complex); + +/* 7.3.6.4 The ccosh functions */ +double complex ccosh(double complex); +float complex ccoshf(float complex); + +/* 7.3.6.5 The csinh functions */ +double complex csinh(double complex); +float complex csinhf(float complex); + +/* 7.3.6.6 The ctanh functions */ +double complex ctanh(double complex); +float complex ctanhf(float complex); + +/* 7.3.7 Exponential and logarithmic functions */ +/* 7.3.7.1 The cexp functions */ +double complex cexp(double complex); +float complex cexpf(float complex); + +/* 7.3.7.2 The clog functions */ +double complex clog(double complex); +float complex clogf(float complex); + +/* 7.3.8 Power and absolute-value functions */ +/* 7.3.8.1 The cabs functions */ +/*#ifndef __LIBM0_SOURCE__ */ +/* avoid conflict with historical cabs(struct complex) */ +/* double cabs(double complex) __RENAME(__c99_cabs); + float cabsf(float complex) __RENAME(__c99_cabsf); + #endif +*/ +double cabs(double complex) ; +float cabsf(float complex) ; + +/* 7.3.8.2 The cpow functions */ +double complex cpow(double complex, double complex); +float complex cpowf(float complex, float complex); + +/* 7.3.8.3 The csqrt functions */ +double complex csqrt(double complex); +float complex csqrtf(float complex); + +/* 7.3.9 Manipulation functions */ +/* 7.3.9.1 The carg functions */ +double carg(double complex); +float cargf(float complex); + +/* 7.3.9.2 The cimag functions */ +double cimag(double complex); +float cimagf(float complex); +/*long double cimagl(long double complex); */ + +/* 7.3.9.3 The conj functions */ +double complex conj(double complex); +float complex conjf(float complex); +/*long double complex conjl(long double complex); */ + +/* 7.3.9.4 The cproj functions */ +double complex cproj(double complex); +float complex cprojf(float complex); +/*long double complex cprojl(long double complex); */ + +/* 7.3.9.5 The creal functions */ +double creal(double complex); +float crealf(float complex); +/*long double creall(long double complex); */ + +__END_DECLS + +#endif /* ! _COMPLEX_H */ diff --git a/tools/sdk/include/newlib/config.h b/tools/sdk/include/newlib/config.h new file mode 100644 index 00000000..69d49adf --- /dev/null +++ b/tools/sdk/include/newlib/config.h @@ -0,0 +1,28 @@ +#ifndef __SYS_CONFIG_H__ +#define __SYS_CONFIG_H__ + +#include /* floating point macros */ +#include /* POSIX defs */ + +#ifndef __EXPORT +#define __EXPORT +#endif + +#ifndef __IMPORT +#define __IMPORT +#endif + +/* Define return type of read/write routines. In POSIX, the return type + for read()/write() is "ssize_t" but legacy newlib code has been using + "int" for some time. If not specified, "int" is defaulted. */ +#ifndef _READ_WRITE_RETURN_TYPE +#define _READ_WRITE_RETURN_TYPE int +#endif +/* Define `count' parameter of read/write routines. In POSIX, the `count' + parameter is "size_t" but legacy newlib code has been using "int" for some + time. If not specified, "int" is defaulted. */ +#ifndef _READ_WRITE_BUFSIZE_TYPE +#define _READ_WRITE_BUFSIZE_TYPE int +#endif + +#endif /* __SYS_CONFIG_H__ */ diff --git a/tools/sdk/include/newlib/ctype.h b/tools/sdk/include/newlib/ctype.h new file mode 100644 index 00000000..1eb3f787 --- /dev/null +++ b/tools/sdk/include/newlib/ctype.h @@ -0,0 +1,113 @@ +#ifndef _CTYPE_H_ +#define _CTYPE_H_ + +#include "_ansi.h" + +_BEGIN_STD_C + +int _EXFUN(isalnum, (int __c)); +int _EXFUN(isalpha, (int __c)); +int _EXFUN(iscntrl, (int __c)); +int _EXFUN(isdigit, (int __c)); +int _EXFUN(isgraph, (int __c)); +int _EXFUN(islower, (int __c)); +int _EXFUN(isprint, (int __c)); +int _EXFUN(ispunct, (int __c)); +int _EXFUN(isspace, (int __c)); +int _EXFUN(isupper, (int __c)); +int _EXFUN(isxdigit,(int __c)); +int _EXFUN(tolower, (int __c)); +int _EXFUN(toupper, (int __c)); + +#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L +int _EXFUN(isblank, (int __c)); +#endif + +#ifndef __STRICT_ANSI__ +int _EXFUN(isascii, (int __c)); +int _EXFUN(toascii, (int __c)); +#define _tolower(__c) ((unsigned char)(__c) - 'A' + 'a') +#define _toupper(__c) ((unsigned char)(__c) - 'a' + 'A') +#endif + +#define _U 01 +#define _L 02 +#define _N 04 +#define _S 010 +#define _P 020 +#define _C 040 +#define _X 0100 +#define _B 0200 + +#ifndef _MB_CAPABLE +_CONST +#endif +extern __IMPORT char * _CONST __ctype_ptr__; + +#ifndef __cplusplus +/* These macros are intentionally written in a manner that will trigger + a gcc -Wall warning if the user mistakenly passes a 'char' instead + of an int containing an 'unsigned char'. Note that the sizeof will + always be 1, which is what we want for mapping EOF to __ctype_ptr__[0]; + the use of a raw index inside the sizeof triggers the gcc warning if + __c was of type char, and sizeof masks side effects of the extra __c. + Meanwhile, the real index to __ctype_ptr__+1 must be cast to int, + since isalpha(0x100000001LL) must equal isalpha(1), rather than being + an out-of-bounds reference on a 64-bit machine. */ +#define __ctype_lookup(__c) ((__ctype_ptr__+sizeof(""[__c]))[(int)(__c)]) + +#define isalpha(__c) (__ctype_lookup(__c)&(_U|_L)) +#define isupper(__c) ((__ctype_lookup(__c)&(_U|_L))==_U) +#define islower(__c) ((__ctype_lookup(__c)&(_U|_L))==_L) +#define isdigit(__c) (__ctype_lookup(__c)&_N) +#define isxdigit(__c) (__ctype_lookup(__c)&(_X|_N)) +#define isspace(__c) (__ctype_lookup(__c)&_S) +#define ispunct(__c) (__ctype_lookup(__c)&_P) +#define isalnum(__c) (__ctype_lookup(__c)&(_U|_L|_N)) +#define isprint(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N|_B)) +#define isgraph(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N)) +#define iscntrl(__c) (__ctype_lookup(__c)&_C) + +#if defined(__GNUC__) && \ + (!defined(__STRICT_ANSI__) || __STDC_VERSION__ >= 199901L) +#define isblank(__c) \ + __extension__ ({ __typeof__ (__c) __x = (__c); \ + (__ctype_lookup(__x)&_B) || (int) (__x) == '\t';}) +#endif + + +/* Non-gcc versions will get the library versions, and will be + slightly slower. These macros are not NLS-aware so they are + disabled if the system supports the extended character sets. */ +# if defined(__GNUC__) +# if !defined (_MB_EXTENDED_CHARSETS_ISO) && !defined (_MB_EXTENDED_CHARSETS_WINDOWS) +# define toupper(__c) \ + __extension__ ({ __typeof__ (__c) __x = (__c); \ + islower (__x) ? (int) __x - 'a' + 'A' : (int) __x;}) +# define tolower(__c) \ + __extension__ ({ __typeof__ (__c) __x = (__c); \ + isupper (__x) ? (int) __x - 'A' + 'a' : (int) __x;}) +# else /* _MB_EXTENDED_CHARSETS* */ +/* Allow a gcc warning if the user passed 'char', but defer to the + function. */ +# define toupper(__c) \ + __extension__ ({ __typeof__ (__c) __x = (__c); \ + (void) __ctype_ptr__[__x]; (toupper) (__x);}) +# define tolower(__c) \ + __extension__ ({ __typeof__ (__c) __x = (__c); \ + (void) __ctype_ptr__[__x]; (tolower) (__x);}) +# endif /* _MB_EXTENDED_CHARSETS* */ +# endif /* __GNUC__ */ +#endif /* !__cplusplus */ + +#ifndef __STRICT_ANSI__ +#define isascii(__c) ((unsigned)(__c)<=0177) +#define toascii(__c) ((__c)&0177) +#endif + +/* For C++ backward-compatibility only. */ +extern __IMPORT _CONST char _ctype_[]; + +_END_STD_C + +#endif /* _CTYPE_H_ */ diff --git a/tools/sdk/include/newlib/dirent.h b/tools/sdk/include/newlib/dirent.h new file mode 100644 index 00000000..6fefc03c --- /dev/null +++ b/tools/sdk/include/newlib/dirent.h @@ -0,0 +1,15 @@ +#ifndef _DIRENT_H_ +#define _DIRENT_H_ +#ifdef __cplusplus +extern "C" { +#endif +#include + +#if !defined(MAXNAMLEN) && !defined(_POSIX_SOURCE) +#define MAXNAMLEN 1024 +#endif + +#ifdef __cplusplus +} +#endif +#endif /*_DIRENT_H_*/ diff --git a/tools/sdk/include/newlib/envlock.h b/tools/sdk/include/newlib/envlock.h new file mode 100644 index 00000000..9bb6a813 --- /dev/null +++ b/tools/sdk/include/newlib/envlock.h @@ -0,0 +1,15 @@ +/* envlock.h -- header file for env routines. */ + +#ifndef _INCLUDE_ENVLOCK_H_ +#define _INCLUDE_ENVLOCK_H_ + +#include <_ansi.h> +#include + +#define ENV_LOCK __env_lock(reent_ptr) +#define ENV_UNLOCK __env_unlock(reent_ptr) + +void _EXFUN(__env_lock,(struct _reent *reent)); +void _EXFUN(__env_unlock,(struct _reent *reent)); + +#endif /* _INCLUDE_ENVLOCK_H_ */ diff --git a/tools/sdk/include/newlib/envz.h b/tools/sdk/include/newlib/envz.h new file mode 100644 index 00000000..e6a31c31 --- /dev/null +++ b/tools/sdk/include/newlib/envz.h @@ -0,0 +1,16 @@ +/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +#include +#include + +/* The newlib implementation of these functions assumes that sizeof(char) == 1. */ +char * envz_entry (const char *envz, size_t envz_len, const char *name); +char * envz_get (const char *envz, size_t envz_len, const char *name); +error_t envz_add (char **envz, size_t *envz_len, const char *name, const char *value); +error_t envz_merge (char **envz, size_t *envz_len, const char *envz2, size_t envz2_len, int override); +void envz_remove(char **envz, size_t *envz_len, const char *name); +void envz_strip (char **envz, size_t *envz_len); diff --git a/tools/sdk/include/newlib/errno.h b/tools/sdk/include/newlib/errno.h new file mode 100644 index 00000000..7cc2ca86 --- /dev/null +++ b/tools/sdk/include/newlib/errno.h @@ -0,0 +1,11 @@ +#ifndef __ERRNO_H__ +#define __ERRNO_H__ + +#ifndef __error_t_defined +typedef int error_t; +#define __error_t_defined 1 +#endif + +#include + +#endif /* !__ERRNO_H__ */ diff --git a/tools/sdk/include/newlib/fastmath.h b/tools/sdk/include/newlib/fastmath.h new file mode 100644 index 00000000..95eea5f3 --- /dev/null +++ b/tools/sdk/include/newlib/fastmath.h @@ -0,0 +1,13 @@ +#ifndef _FASTMATH_H_ +#ifdef __cplusplus +extern "C" { +#endif +#define _FASTMATH_H_ + +#include +#include + +#ifdef __cplusplus +} +#endif +#endif /* _FASTMATH_H_ */ diff --git a/tools/sdk/include/newlib/fcntl.h b/tools/sdk/include/newlib/fcntl.h new file mode 100644 index 00000000..86a91677 --- /dev/null +++ b/tools/sdk/include/newlib/fcntl.h @@ -0,0 +1 @@ +#include diff --git a/tools/sdk/include/newlib/fenv.h b/tools/sdk/include/newlib/fenv.h new file mode 100644 index 00000000..2fa76f75 --- /dev/null +++ b/tools/sdk/include/newlib/fenv.h @@ -0,0 +1,88 @@ +/* Copyright (c) 2011 Tensilica 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. + + 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 + TENSILICA INCORPORATED 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. */ + + +#ifndef _FENV_H +#define _FENV_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned long fenv_t; +typedef unsigned long fexcept_t; + +#define FE_DIVBYZERO 0x08 +#define FE_INEXACT 0x01 +#define FE_INVALID 0x10 +#define FE_OVERFLOW 0x04 +#define FE_UNDERFLOW 0x02 + +#define FE_ALL_EXCEPT \ + (FE_DIVBYZERO | \ + FE_INEXACT | \ + FE_INVALID | \ + FE_OVERFLOW | \ + FE_UNDERFLOW) + +#define FE_DOWNWARD 0x3 +#define FE_TONEAREST 0x0 +#define FE_TOWARDZERO 0x1 +#define FE_UPWARD 0x2 + +#define FE_DFL_ENV ((const fenv_t *) 0) + +int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int feraiseexcept(int); +int fesetexceptflag(const fexcept_t *, int); +int fetestexcept(int); +int fegetround(void); +int fesetround(int); +int fegetenv(fenv_t *); +int feholdexcept(fenv_t *); +int fesetenv(const fenv_t *); +int feupdateenv(const fenv_t *); + +/* glibc extensions */ +int feenableexcept(int excepts); +int fedisableexcept(int excepts); +int fegetexcept(void); + +#define _FE_EXCEPTION_FLAGS_OFFSET 7 +#define _FE_EXCEPTION_FLAG_MASK (FE_ALL_EXCEPT << _FE_EXCEPTION_FLAGS_OFFSET) +#define _FE_EXCEPTION_ENABLE_OFFSET 2 +#define _FE_EXCEPTION_ENABLE_MASK (FE_ALL_EXCEPT << _FE_EXCEPTION_ENABLE_OFFSET) +#define _FE_ROUND_MODE_OFFSET 0 +#define _FE_ROUND_MODE_MASK (0x3 << _FE_ROUND_MODE_OFFSET) +#define _FE_FLOATING_ENV_MASK (_FE_EXCEPTION_FLAG_MASK | _FE_EXCEPTION_ENABLE_MASK | _FE_ROUND_MODE_MASK) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/newlib/fnmatch.h b/tools/sdk/include/newlib/fnmatch.h new file mode 100644 index 00000000..06311fc4 --- /dev/null +++ b/tools/sdk/include/newlib/fnmatch.h @@ -0,0 +1,55 @@ +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. 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. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + * + * $FreeBSD: src/include/fnmatch.h,v 1.10 2002/03/23 17:24:53 imp Exp $ + * @(#)fnmatch.h 8.1 (Berkeley) 6/2/93 + */ + +#ifndef _FNMATCH_H_ +#define _FNMATCH_H_ + +#define FNM_NOMATCH 1 /* Match failed. */ + +#define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */ +#define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */ +#define FNM_PERIOD 0x04 /* Period must be matched by period. */ + +#if defined(_GNU_SOURCE) || !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) +#define FNM_LEADING_DIR 0x08 /* Ignore / after Imatch. */ +#define FNM_CASEFOLD 0x10 /* Case insensitive search. */ +#define FNM_IGNORECASE FNM_CASEFOLD +#define FNM_FILE_NAME FNM_PATHNAME +#endif + +#include + +__BEGIN_DECLS +int fnmatch(const char *, const char *, int); +__END_DECLS + +#endif /* !_FNMATCH_H_ */ diff --git a/tools/sdk/include/newlib/getopt.h b/tools/sdk/include/newlib/getopt.h new file mode 100644 index 00000000..e12d253d --- /dev/null +++ b/tools/sdk/include/newlib/getopt.h @@ -0,0 +1,190 @@ +/**************************************************************************** + +getopt.h - Read command line options + +AUTHOR: Gregory Pietsch +CREATED Thu Jan 09 22:37:00 1997 + +DESCRIPTION: + +The getopt() function parses the command line arguments. Its arguments argc +and argv are the argument count and array as passed to the main() function +on program invocation. The argument optstring is a list of available option +characters. If such a character is followed by a colon (`:'), the option +takes an argument, which is placed in optarg. If such a character is +followed by two colons, the option takes an optional argument, which is +placed in optarg. If the option does not take an argument, optarg is NULL. + +The external variable optind is the index of the next array element of argv +to be processed; it communicates from one call to the next which element to +process. + +The getopt_long() function works like getopt() except that it also accepts +long options started by two dashes `--'. If these take values, it is either +in the form + +--arg=value + + or + +--arg value + +It takes the additional arguments longopts which is a pointer to the first +element of an array of type GETOPT_LONG_OPTION_T, defined below. The last +element of the array has to be filled with NULL for the name field. + +The longind pointer points to the index of the current long option relative +to longopts if it is non-NULL. + +The getopt() function returns the option character if the option was found +successfully, `:' if there was a missing parameter for one of the options, +`?' for an unknown option character, and EOF for the end of the option list. + +The getopt_long() function's return value is described below. + +The function getopt_long_only() is identical to getopt_long(), except that a +plus sign `+' can introduce long options as well as `--'. + +Describe how to deal with options that follow non-option ARGV-elements. + +If the caller did not specify anything, the default is REQUIRE_ORDER if the +environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. + +REQUIRE_ORDER means don't recognize them as options; stop option processing +when the first non-option is seen. This is what Unix does. This mode of +operation is selected by either setting the environment variable +POSIXLY_CORRECT, or using `+' as the first character of the optstring +parameter. + +PERMUTE is the default. We permute the contents of ARGV as we scan, so that +eventually all the non-options are at the end. This allows options to be +given in any order, even with programs that were not written to expect this. + +RETURN_IN_ORDER is an option available to programs that were written to +expect options and other ARGV-elements in any order and that care about the +ordering of the two. We describe each non-option ARGV-element as if it were +the argument of an option with character code 1. Using `-' as the first +character of the optstring parameter selects this mode of operation. + +The special argument `--' forces an end of option-scanning regardless of the +value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause +getopt() and friends to return EOF with optind != argc. + +COPYRIGHT NOTICE AND DISCLAIMER: + +Copyright (C) 1997 Gregory Pietsch + +This file and the accompanying getopt.c implementation file are hereby +placed in the public domain without restrictions. Just give the author +credit, don't claim you wrote it or prevent anyone else from using it. + +Gregory Pietsch's current e-mail address: +gpietsch@comcast.net +****************************************************************************/ + +/* This is a glibc-extension header file. */ + +#ifndef GETOPT_H +#define GETOPT_H + +#include <_ansi.h> + +/* include files needed by this include file */ + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +#ifdef __cplusplus +extern "C" +{ + +#endif /* __cplusplus */ + +/* types defined by this include file */ + struct option + { + const char *name; /* the name of the long option */ + int has_arg; /* one of the above macros */ + int *flag; /* determines if getopt_long() returns a + * value for a long option; if it is + * non-NULL, 0 is returned as a function + * value and the value of val is stored in + * the area pointed to by flag. Otherwise, + * val is returned. */ + int val; /* determines the value to return if flag is + * NULL. */ + + }; + +/* While getopt.h is a glibc extension, the following are newlib extensions. + * They are optionally included via the __need_getopt_newlib flag. */ + +#ifdef __need_getopt_newlib + + /* macros defined by this include file */ + #define NO_ARG no_argument + #define REQUIRED_ARG required_argument + #define OPTIONAL_ARG optional_argument + + /* The GETOPT_DATA_INITIALIZER macro is used to initialize a statically- + allocated variable of type struct getopt_data. */ + #define GETOPT_DATA_INITIALIZER {0,0,0,0,0} + + /* These #defines are to make accessing the reentrant functions easier. */ + #define getopt_r __getopt_r + #define getopt_long_r __getopt_long_r + #define getopt_long_only_r __getopt_long_only_r + + /* The getopt_data structure is for reentrancy. Its members are similar to + the externally-defined variables. */ + typedef struct getopt_data + { + char *optarg; + int optind, opterr, optopt, optwhere; + } getopt_data; + +#endif /* __need_getopt_newlib */ + + /* externally-defined variables */ + extern char *optarg; + extern int optind; + extern int opterr; + extern int optopt; + + /* function prototypes */ + int _EXFUN (getopt, + (int __argc, char *const __argv[], const char *__optstring)); + + int _EXFUN (getopt_long, + (int __argc, char *const __argv[], const char *__shortopts, + const struct option * __longopts, int *__longind)); + + int _EXFUN (getopt_long_only, + (int __argc, char *const __argv[], const char *__shortopts, + const struct option * __longopts, int *__longind)); + +#ifdef __need_getopt_newlib + int _EXFUN (__getopt_r, + (int __argc, char *const __argv[], const char *__optstring, + struct getopt_data * __data)); + + int _EXFUN (__getopt_long_r, + (int __argc, char *const __argv[], const char *__shortopts, + const struct option * __longopts, int *__longind, + struct getopt_data * __data)); + + int _EXFUN (__getopt_long_only_r, + (int __argc, char *const __argv[], const char *__shortopts, + const struct option * __longopts, int *__longind, + struct getopt_data * __data)); +#endif /* __need_getopt_newlib */ + +#ifdef __cplusplus +}; + +#endif /* __cplusplus */ + +#endif /* GETOPT_H */ + +/* END OF FILE getopt.h */ diff --git a/tools/sdk/include/newlib/glob.h b/tools/sdk/include/newlib/glob.h new file mode 100644 index 00000000..7a300e69 --- /dev/null +++ b/tools/sdk/include/newlib/glob.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Guido van Rossum. + * + * 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. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + * + * @(#)glob.h 8.1 (Berkeley) 6/2/93 + * $FreeBSD: src/include/glob.h,v 1.6 2002/03/23 17:24:53 imp Exp $ + */ + +#ifndef _GLOB_H_ +#define _GLOB_H_ + +#include + +struct stat; +typedef struct { + int gl_pathc; /* Count of total paths so far. */ + int gl_matchc; /* Count of paths matching pattern. */ + int gl_offs; /* Reserved at beginning of gl_pathv. */ + int gl_flags; /* Copy of flags parameter to glob. */ + char **gl_pathv; /* List of paths matching pattern. */ + /* Copy of errfunc parameter to glob. */ + int (*gl_errfunc)(const char *, int); + + /* + * Alternate filesystem access methods for glob; replacement + * versions of closedir(3), readdir(3), opendir(3), stat(2) + * and lstat(2). + */ + void (*gl_closedir)(void *); + struct dirent *(*gl_readdir)(void *); + void *(*gl_opendir)(const char *); + int (*gl_lstat)(const char *, struct stat *); + int (*gl_stat)(const char *, struct stat *); +} glob_t; + +#define GLOB_APPEND 0x0001 /* Append to output from previous call. */ +#define GLOB_DOOFFS 0x0002 /* Use gl_offs. */ +#define GLOB_ERR 0x0004 /* Return on error. */ +#define GLOB_MARK 0x0008 /* Append / to matching directories. */ +#define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */ +#define GLOB_NOSORT 0x0020 /* Don't sort. */ + +#define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */ +#define GLOB_BRACE 0x0080 /* Expand braces ala csh. */ +#define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */ +#define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */ +#define GLOB_QUOTE 0x0400 /* Quote special chars with \. */ +#define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */ +#define GLOB_LIMIT 0x1000 /* limit number of returned paths */ + +/* backwards compatibility, this is the old name for this option */ +#define GLOB_MAXPATH GLOB_LIMIT + +#define GLOB_NOSPACE (-1) /* Malloc call failed. */ +#define GLOB_ABEND (-2) /* Unignored error. */ + +__BEGIN_DECLS +int glob(const char *__restrict, int, int (*)(const char *, int), + glob_t *__restrict); +void globfree(glob_t *); +__END_DECLS + +#endif /* !_GLOB_H_ */ diff --git a/tools/sdk/include/newlib/grp.h b/tools/sdk/include/newlib/grp.h new file mode 100644 index 00000000..c3a5a676 --- /dev/null +++ b/tools/sdk/include/newlib/grp.h @@ -0,0 +1,95 @@ +/* $NetBSD: grp.h,v 1.7 1995/04/29 05:30:40 cgd Exp $ */ + +/*- + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * (c) UNIX System Laboratories, Inc. + * All or some portions of this file are derived from material licensed + * to the University of California by American Telephone and Telegraph + * Co. or Unix System Laboratories, Inc. and are reproduced herein with + * the permission of UNIX System Laboratories, Inc. + * + * 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + * + * @(#)grp.h 8.2 (Berkeley) 1/21/94 + */ + +#ifndef _GRP_H_ +#define _GRP_H_ + +#include +#include +#ifdef __CYGWIN__ +#include +#endif + +#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) +#define _PATH_GROUP "/etc/group" +#endif + +struct group { + char *gr_name; /* group name */ + char *gr_passwd; /* group password */ + gid_t gr_gid; /* group id */ + char **gr_mem; /* group members */ +}; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __INSIDE_CYGWIN__ +struct group *getgrgid (gid_t); +struct group *getgrnam (const char *); +int getgrnam_r (const char *, struct group *, + char *, size_t, struct group **); +int getgrgid_r (gid_t, struct group *, + char *, size_t, struct group **); +#ifndef _POSIX_SOURCE +struct group *getgrent (void); +void setgrent (void); +void endgrent (void); +#ifndef __CYGWIN__ +void setgrfile (const char *); +#endif /* !__CYGWIN__ */ +#ifndef _XOPEN_SOURCE +#ifndef __CYGWIN__ +char *group_from_gid (gid_t, int); +int setgroupent (int); +#endif /* !__CYGWIN__ */ +int initgroups (const char *, gid_t); +#endif /* !_XOPEN_SOURCE */ +#endif /* !_POSIX_SOURCE */ +#endif /* !__INSIDE_CYGWIN__ */ + +#ifdef __cplusplus +} +#endif + +#endif /* !_GRP_H_ */ diff --git a/tools/sdk/include/newlib/iconv.h b/tools/sdk/include/newlib/iconv.h new file mode 100644 index 00000000..4c023e9d --- /dev/null +++ b/tools/sdk/include/newlib/iconv.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2003-2004, Artem B. Bityuckiy, SoftMine Corporation. + * Rights transferred to Franklin Electronic Publishers. + * + * 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 AUTHOR 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 AUTHOR 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. + */ +#ifndef _ICONV_H_ +#define _ICONV_H_ + +#include <_ansi.h> +#include +#include +#include + +/* iconv_t: charset conversion descriptor type */ +typedef _iconv_t iconv_t; + +_BEGIN_STD_C + +#ifndef _REENT_ONLY +iconv_t +_EXFUN(iconv_open, (_CONST char *, _CONST char *)); + +size_t +_EXFUN(iconv, (iconv_t, char **__restrict, size_t *__restrict, + char **__restrict, size_t *__restrict)); + +int +_EXFUN(iconv_close, (iconv_t)); +#endif + +iconv_t +_EXFUN(_iconv_open_r, (struct _reent *, _CONST char *, _CONST char *)); + +size_t +_EXFUN(_iconv_r, (struct _reent *, iconv_t, _CONST char **, + size_t *, char **, size_t *)); + +int +_EXFUN(_iconv_close_r, (struct _reent *, iconv_t)); + +_END_STD_C + +#endif /* #ifndef _ICONV_H_ */ diff --git a/tools/sdk/include/newlib/ieeefp.h b/tools/sdk/include/newlib/ieeefp.h new file mode 100644 index 00000000..0b06fb78 --- /dev/null +++ b/tools/sdk/include/newlib/ieeefp.h @@ -0,0 +1,256 @@ +#ifndef _IEEE_FP_H_ +#define _IEEE_FP_H_ + +#include "_ansi.h" + +#include + +_BEGIN_STD_C + +/* FIXME FIXME FIXME: + Neither of __ieee_{float,double}_shape_tape seem to be used anywhere + except in libm/test. If that is the case, please delete these from here. + If that is not the case, please insert documentation here describing why + they're needed. */ + +#ifdef __IEEE_BIG_ENDIAN + +typedef union +{ + double value; + struct + { + unsigned int sign : 1; + unsigned int exponent: 11; + unsigned int fraction0:4; + unsigned int fraction1:16; + unsigned int fraction2:16; + unsigned int fraction3:16; + + } number; + struct + { + unsigned int sign : 1; + unsigned int exponent: 11; + unsigned int quiet:1; + unsigned int function0:3; + unsigned int function1:16; + unsigned int function2:16; + unsigned int function3:16; + } nan; + struct + { + unsigned long msw; + unsigned long lsw; + } parts; + long aslong[2]; +} __ieee_double_shape_type; + +#endif + +#ifdef __IEEE_LITTLE_ENDIAN + +typedef union +{ + double value; + struct + { +#ifdef __SMALL_BITFIELDS + unsigned int fraction3:16; + unsigned int fraction2:16; + unsigned int fraction1:16; + unsigned int fraction0: 4; +#else + unsigned int fraction1:32; + unsigned int fraction0:20; +#endif + unsigned int exponent :11; + unsigned int sign : 1; + } number; + struct + { +#ifdef __SMALL_BITFIELDS + unsigned int function3:16; + unsigned int function2:16; + unsigned int function1:16; + unsigned int function0:3; +#else + unsigned int function1:32; + unsigned int function0:19; +#endif + unsigned int quiet:1; + unsigned int exponent: 11; + unsigned int sign : 1; + } nan; + struct + { + unsigned long lsw; + unsigned long msw; + } parts; + + long aslong[2]; + +} __ieee_double_shape_type; + +#endif + +#ifdef __IEEE_BIG_ENDIAN + +typedef union +{ + float value; + struct + { + unsigned int sign : 1; + unsigned int exponent: 8; + unsigned int fraction0: 7; + unsigned int fraction1: 16; + } number; + struct + { + unsigned int sign:1; + unsigned int exponent:8; + unsigned int quiet:1; + unsigned int function0:6; + unsigned int function1:16; + } nan; + long p1; + +} __ieee_float_shape_type; + +#endif + +#ifdef __IEEE_LITTLE_ENDIAN + +typedef union +{ + float value; + struct + { + unsigned int fraction0: 7; + unsigned int fraction1: 16; + unsigned int exponent: 8; + unsigned int sign : 1; + } number; + struct + { + unsigned int function1:16; + unsigned int function0:6; + unsigned int quiet:1; + unsigned int exponent:8; + unsigned int sign:1; + } nan; + long p1; + +} __ieee_float_shape_type; + +#endif + + + + + +/* FLOATING ROUNDING */ + +typedef int fp_rnd; +#define FP_RN 0 /* Round to nearest */ +#define FP_RM 1 /* Round down */ +#define FP_RP 2 /* Round up */ +#define FP_RZ 3 /* Round to zero (trunate) */ + +fp_rnd _EXFUN(fpgetround,(void)); +fp_rnd _EXFUN(fpsetround, (fp_rnd)); + +/* EXCEPTIONS */ + +typedef int fp_except; +#define FP_X_INV 0x10 /* Invalid operation */ +#define FP_X_DX 0x80 /* Divide by zero */ +#define FP_X_OFL 0x04 /* Overflow exception */ +#define FP_X_UFL 0x02 /* Underflow exception */ +#define FP_X_IMP 0x01 /* imprecise exception */ + +fp_except _EXFUN(fpgetmask,(void)); +fp_except _EXFUN(fpsetmask,(fp_except)); +fp_except _EXFUN(fpgetsticky,(void)); +fp_except _EXFUN(fpsetsticky, (fp_except)); + +/* INTEGER ROUNDING */ + +typedef int fp_rdi; +#define FP_RDI_TOZ 0 /* Round to Zero */ +#define FP_RDI_RD 1 /* Follow float mode */ + +fp_rdi _EXFUN(fpgetroundtoi,(void)); +fp_rdi _EXFUN(fpsetroundtoi,(fp_rdi)); + +#undef isnan +#undef isinf + +int _EXFUN(isnan, (double)); +int _EXFUN(isinf, (double)); +int _EXFUN(finite, (double)); + + + +int _EXFUN(isnanf, (float)); +int _EXFUN(isinff, (float)); +int _EXFUN(finitef, (float)); + +#define __IEEE_DBL_EXPBIAS 1023 +#define __IEEE_FLT_EXPBIAS 127 + +#define __IEEE_DBL_EXPLEN 11 +#define __IEEE_FLT_EXPLEN 8 + + +#define __IEEE_DBL_FRACLEN (64 - (__IEEE_DBL_EXPLEN + 1)) +#define __IEEE_FLT_FRACLEN (32 - (__IEEE_FLT_EXPLEN + 1)) + +#define __IEEE_DBL_MAXPOWTWO ((double)(1L << 32 - 2) * (1L << (32-11) - 32 + 1)) +#define __IEEE_FLT_MAXPOWTWO ((float)(1L << (32-8) - 1)) + +#define __IEEE_DBL_NAN_EXP 0x7ff +#define __IEEE_FLT_NAN_EXP 0xff + +#ifndef __ieeefp_isnanf +#define __ieeefp_isnanf(x) (((*(long *)&(x) & 0x7f800000L)==0x7f800000L) && \ + ((*(long *)&(x) & 0x007fffffL)!=0000000000L)) +#endif +#define isnanf(x) __ieeefp_isnanf(x) + +#ifndef __ieeefp_isinff +#define __ieeefp_isinff(x) (((*(long *)&(x) & 0x7f800000L)==0x7f800000L) && \ + ((*(long *)&(x) & 0x007fffffL)==0000000000L)) +#endif +#define isinff(x) __ieeefp_isinff(x) + +#ifndef __ieeefp_finitef +#define __ieeefp_finitef(x) (((*(long *)&(x) & 0x7f800000L)!=0x7f800000L)) +#endif +#define finitef(x) __ieeefp_finitef(x) + +#ifdef _DOUBLE_IS_32BITS +#undef __IEEE_DBL_EXPBIAS +#define __IEEE_DBL_EXPBIAS __IEEE_FLT_EXPBIAS + +#undef __IEEE_DBL_EXPLEN +#define __IEEE_DBL_EXPLEN __IEEE_FLT_EXPLEN + +#undef __IEEE_DBL_FRACLEN +#define __IEEE_DBL_FRACLEN __IEEE_FLT_FRACLEN + +#undef __IEEE_DBL_MAXPOWTWO +#define __IEEE_DBL_MAXPOWTWO __IEEE_FLT_MAXPOWTWO + +#undef __IEEE_DBL_NAN_EXP +#define __IEEE_DBL_NAN_EXP __IEEE_FLT_NAN_EXP + +#undef __ieee_double_shape_type +#define __ieee_double_shape_type __ieee_float_shape_type + +#endif /* _DOUBLE_IS_32BITS */ + +_END_STD_C + +#endif /* _IEEE_FP_H_ */ diff --git a/tools/sdk/include/newlib/inttypes.h b/tools/sdk/include/newlib/inttypes.h new file mode 100644 index 00000000..39bf1351 --- /dev/null +++ b/tools/sdk/include/newlib/inttypes.h @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2004, 2005 by + * Ralf Corsepius, Ulm/Germany. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +/** + * @file inttypes.h + */ + +#ifndef _INTTYPES_H +#define _INTTYPES_H + +#include +#include +#include +#define __need_wchar_t +#include + +#define __STRINGIFY(a) #a + +/* 8-bit types */ +#define __PRI8(x) __STRINGIFY(x) + +/* NOTICE: scanning 8-bit types requires use of the hh specifier + * which is only supported on newlib platforms that + * are built with C99 I/O format support enabled. If the flag in + * newlib.h hasn't been set during configuration to indicate this, the 8-bit + * scanning format macros are disabled here as they result in undefined + * behaviour which can include memory overwrite. Overriding the flag after the + * library has been built is not recommended as it will expose the underlying + * undefined behaviour. + */ + +#if defined(_WANT_IO_C99_FORMATS) + #define __SCN8(x) __STRINGIFY(hh##x) +#endif /* _WANT_IO_C99_FORMATS */ + + +#define PRId8 __PRI8(d) +#define PRIi8 __PRI8(i) +#define PRIo8 __PRI8(o) +#define PRIu8 __PRI8(u) +#define PRIx8 __PRI8(x) +#define PRIX8 __PRI8(X) + +/* Macros below are only enabled for a newlib built with C99 I/O format support. */ +#if defined(_WANT_IO_C99_FORMATS) + +#define SCNd8 __SCN8(d) +#define SCNi8 __SCN8(i) +#define SCNo8 __SCN8(o) +#define SCNu8 __SCN8(u) +#define SCNx8 __SCN8(x) + +#endif /* _WANT_IO_C99_FORMATS */ + + +#define PRIdLEAST8 __PRI8(d) +#define PRIiLEAST8 __PRI8(i) +#define PRIoLEAST8 __PRI8(o) +#define PRIuLEAST8 __PRI8(u) +#define PRIxLEAST8 __PRI8(x) +#define PRIXLEAST8 __PRI8(X) + +/* Macros below are only enabled for a newlib built with C99 I/O format support. */ +#if defined(_WANT_IO_C99_FORMATS) + + #define SCNdLEAST8 __SCN8(d) + #define SCNiLEAST8 __SCN8(i) + #define SCNoLEAST8 __SCN8(o) + #define SCNuLEAST8 __SCN8(u) + #define SCNxLEAST8 __SCN8(x) + +#endif /* _WANT_IO_C99_FORMATS */ + +#define PRIdFAST8 __PRI8(d) +#define PRIiFAST8 __PRI8(i) +#define PRIoFAST8 __PRI8(o) +#define PRIuFAST8 __PRI8(u) +#define PRIxFAST8 __PRI8(x) +#define PRIXFAST8 __PRI8(X) + +/* Macros below are only enabled for a newlib built with C99 I/O format support. */ +#if defined(_WANT_IO_C99_FORMATS) + + #define SCNdFAST8 __SCN8(d) + #define SCNiFAST8 __SCN8(i) + #define SCNoFAST8 __SCN8(o) + #define SCNuFAST8 __SCN8(u) + #define SCNxFAST8 __SCN8(x) + +#endif /* _WANT_IO_C99_FORMATS */ + +/* 16-bit types */ +#define __PRI16(x) __STRINGIFY(x) +#define __SCN16(x) __STRINGIFY(h##x) + + +#define PRId16 __PRI16(d) +#define PRIi16 __PRI16(i) +#define PRIo16 __PRI16(o) +#define PRIu16 __PRI16(u) +#define PRIx16 __PRI16(x) +#define PRIX16 __PRI16(X) + +#define SCNd16 __SCN16(d) +#define SCNi16 __SCN16(i) +#define SCNo16 __SCN16(o) +#define SCNu16 __SCN16(u) +#define SCNx16 __SCN16(x) + + +#define PRIdLEAST16 __PRI16(d) +#define PRIiLEAST16 __PRI16(i) +#define PRIoLEAST16 __PRI16(o) +#define PRIuLEAST16 __PRI16(u) +#define PRIxLEAST16 __PRI16(x) +#define PRIXLEAST16 __PRI16(X) + +#define SCNdLEAST16 __SCN16(d) +#define SCNiLEAST16 __SCN16(i) +#define SCNoLEAST16 __SCN16(o) +#define SCNuLEAST16 __SCN16(u) +#define SCNxLEAST16 __SCN16(x) + + +#define PRIdFAST16 __PRI16(d) +#define PRIiFAST16 __PRI16(i) +#define PRIoFAST16 __PRI16(o) +#define PRIuFAST16 __PRI16(u) +#define PRIxFAST16 __PRI16(x) +#define PRIXFAST16 __PRI16(X) + +#define SCNdFAST16 __SCN16(d) +#define SCNiFAST16 __SCN16(i) +#define SCNoFAST16 __SCN16(o) +#define SCNuFAST16 __SCN16(u) +#define SCNxFAST16 __SCN16(x) + +/* 32-bit types */ +#if __have_long32 +#define __PRI32(x) __STRINGIFY(l##x) +#define __SCN32(x) __STRINGIFY(l##x) +#else +#define __PRI32(x) __STRINGIFY(x) +#define __SCN32(x) __STRINGIFY(x) +#endif + +#define PRId32 __PRI32(d) +#define PRIi32 __PRI32(i) +#define PRIo32 __PRI32(o) +#define PRIu32 __PRI32(u) +#define PRIx32 __PRI32(x) +#define PRIX32 __PRI32(X) + +#define SCNd32 __SCN32(d) +#define SCNi32 __SCN32(i) +#define SCNo32 __SCN32(o) +#define SCNu32 __SCN32(u) +#define SCNx32 __SCN32(x) + + +#define PRIdLEAST32 __PRI32(d) +#define PRIiLEAST32 __PRI32(i) +#define PRIoLEAST32 __PRI32(o) +#define PRIuLEAST32 __PRI32(u) +#define PRIxLEAST32 __PRI32(x) +#define PRIXLEAST32 __PRI32(X) + +#define SCNdLEAST32 __SCN32(d) +#define SCNiLEAST32 __SCN32(i) +#define SCNoLEAST32 __SCN32(o) +#define SCNuLEAST32 __SCN32(u) +#define SCNxLEAST32 __SCN32(x) + + +#define PRIdFAST32 __PRI32(d) +#define PRIiFAST32 __PRI32(i) +#define PRIoFAST32 __PRI32(o) +#define PRIuFAST32 __PRI32(u) +#define PRIxFAST32 __PRI32(x) +#define PRIXFAST32 __PRI32(X) + +#define SCNdFAST32 __SCN32(d) +#define SCNiFAST32 __SCN32(i) +#define SCNoFAST32 __SCN32(o) +#define SCNuFAST32 __SCN32(u) +#define SCNxFAST32 __SCN32(x) + + +/* 64-bit types */ +#if __have_long64 +#define __PRI64(x) __STRINGIFY(l##x) +#define __SCN64(x) __STRINGIFY(l##x) +#elif __have_longlong64 +#define __PRI64(x) __STRINGIFY(ll##x) +#define __SCN64(x) __STRINGIFY(ll##x) +#else +#define __PRI64(x) __STRINGIFY(x) +#define __SCN64(x) __STRINGIFY(x) +#endif + +#define PRId64 __PRI64(d) +#define PRIi64 __PRI64(i) +#define PRIo64 __PRI64(o) +#define PRIu64 __PRI64(u) +#define PRIx64 __PRI64(x) +#define PRIX64 __PRI64(X) + +#define SCNd64 __SCN64(d) +#define SCNi64 __SCN64(i) +#define SCNo64 __SCN64(o) +#define SCNu64 __SCN64(u) +#define SCNx64 __SCN64(x) + +#if __int64_t_defined +#define PRIdLEAST64 __PRI64(d) +#define PRIiLEAST64 __PRI64(i) +#define PRIoLEAST64 __PRI64(o) +#define PRIuLEAST64 __PRI64(u) +#define PRIxLEAST64 __PRI64(x) +#define PRIXLEAST64 __PRI64(X) + +#define SCNdLEAST64 __SCN64(d) +#define SCNiLEAST64 __SCN64(i) +#define SCNoLEAST64 __SCN64(o) +#define SCNuLEAST64 __SCN64(u) +#define SCNxLEAST64 __SCN64(x) + + +#define PRIdFAST64 __PRI64(d) +#define PRIiFAST64 __PRI64(i) +#define PRIoFAST64 __PRI64(o) +#define PRIuFAST64 __PRI64(u) +#define PRIxFAST64 __PRI64(x) +#define PRIXFAST64 __PRI64(X) + +#define SCNdFAST64 __SCN64(d) +#define SCNiFAST64 __SCN64(i) +#define SCNoFAST64 __SCN64(o) +#define SCNuFAST64 __SCN64(u) +#define SCNxFAST64 __SCN64(x) +#endif + +/* max-bit types */ +#if __have_long64 +#define __PRIMAX(x) __STRINGIFY(l##x) +#define __SCNMAX(x) __STRINGIFY(l##x) +#elif __have_longlong64 +#define __PRIMAX(x) __STRINGIFY(ll##x) +#define __SCNMAX(x) __STRINGIFY(ll##x) +#else +#define __PRIMAX(x) __STRINGIFY(x) +#define __SCNMAX(x) __STRINGIFY(x) +#endif + +#define PRIdMAX __PRIMAX(d) +#define PRIiMAX __PRIMAX(i) +#define PRIoMAX __PRIMAX(o) +#define PRIuMAX __PRIMAX(u) +#define PRIxMAX __PRIMAX(x) +#define PRIXMAX __PRIMAX(X) + +#define SCNdMAX __SCNMAX(d) +#define SCNiMAX __SCNMAX(i) +#define SCNoMAX __SCNMAX(o) +#define SCNuMAX __SCNMAX(u) +#define SCNxMAX __SCNMAX(x) + +/* ptr types */ +#if defined(_UINTPTR_EQ_ULONGLONG) +# define __PRIPTR(x) __STRINGIFY(ll##x) +# define __SCNPTR(x) __STRINGIFY(ll##x) +#elif defined(_UINTPTR_EQ_ULONG) +# define __PRIPTR(x) __STRINGIFY(l##x) +# define __SCNPTR(x) __STRINGIFY(l##x) +#else +# define __PRIPTR(x) __STRINGIFY(x) +# define __SCNPTR(x) __STRINGIFY(x) +#endif + +#define PRIdPTR __PRIPTR(d) +#define PRIiPTR __PRIPTR(i) +#define PRIoPTR __PRIPTR(o) +#define PRIuPTR __PRIPTR(u) +#define PRIxPTR __PRIPTR(x) +#define PRIXPTR __PRIPTR(X) + +#define SCNdPTR __SCNPTR(d) +#define SCNiPTR __SCNPTR(i) +#define SCNoPTR __SCNPTR(o) +#define SCNuPTR __SCNPTR(u) +#define SCNxPTR __SCNPTR(x) + + +typedef struct { + intmax_t quot; + intmax_t rem; +} imaxdiv_t; + +#ifdef __cplusplus +extern "C" { +#endif + +extern intmax_t imaxabs(intmax_t j); +extern imaxdiv_t imaxdiv(intmax_t numer, intmax_t denomer); +extern intmax_t strtoimax(const char *__restrict, char **__restrict, int); +extern uintmax_t strtoumax(const char *__restrict, char **__restrict, int); +extern intmax_t wcstoimax(const wchar_t *__restrict, wchar_t **__restrict, int); +extern uintmax_t wcstoumax(const wchar_t *__restrict, wchar_t **__restrict, int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/newlib/langinfo.h b/tools/sdk/include/newlib/langinfo.h new file mode 100644 index 00000000..9040adef --- /dev/null +++ b/tools/sdk/include/newlib/langinfo.h @@ -0,0 +1,316 @@ +/*- + * Copyright (c) 2001 Alexey Zelkin + * 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 AUTHOR 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 AUTHOR 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. + * + * $FreeBSD: src/include/langinfo.h,v 1.5 2002/03/23 17:24:53 imp Exp $ + */ + +#ifndef _LANGINFO_H_ +#define _LANGINFO_H_ + +#include +#include +#include + +typedef int nl_item; + +enum __nl_item +{ + /* POSIX and BSD defined items have to stick to the original values + to maintain backward compatibility. */ + _NL_CTYPE_CODESET_NAME = 0, /* codeset name */ +#define CODESET _NL_CTYPE_CODESET_NAME + D_T_FMT, /* string for formatting date and time */ +#define D_T_FMT D_T_FMT + D_FMT, /* date format string */ +#define D_FMT D_FMT + T_FMT, /* time format string */ +#define T_FMT T_FMT + T_FMT_AMPM, /* a.m. or p.m. time formatting string */ +#define T_FMT_AMPM T_FMT_AMPM + AM_STR, /* Ante Meridian affix */ +#define AM_STR AM_STR + PM_STR, /* Post Meridian affix */ +#define PM_STR PM_STR + +/* week day names */ + DAY_1, +#define DAY_1 DAY_1 + DAY_2, +#define DAY_2 DAY_2 + DAY_3, +#define DAY_3 DAY_3 + DAY_4, +#define DAY_4 DAY_4 + DAY_5, +#define DAY_5 DAY_5 + DAY_6, +#define DAY_6 DAY_6 + DAY_7, +#define DAY_7 DAY_7 + +/* abbreviated week day names */ + ABDAY_1, +#define ABDAY_1 ABDAY_1 + ABDAY_2, +#define ABDAY_2 ABDAY_2 + ABDAY_3, +#define ABDAY_3 ABDAY_3 + ABDAY_4, +#define ABDAY_4 ABDAY_4 + ABDAY_5, +#define ABDAY_5 ABDAY_5 + ABDAY_6, +#define ABDAY_6 ABDAY_6 + ABDAY_7, +#define ABDAY_7 ABDAY_7 + +/* month names */ + MON_1, +#define MON_1 MON_1 + MON_2, +#define MON_2 MON_2 + MON_3, +#define MON_3 MON_3 + MON_4, +#define MON_4 MON_4 + MON_5, +#define MON_5 MON_5 + MON_6, +#define MON_6 MON_6 + MON_7, +#define MON_7 MON_7 + MON_8, +#define MON_8 MON_8 + MON_9, +#define MON_9 MON_9 + MON_10, +#define MON_10 MON_10 + MON_11, +#define MON_11 MON_11 + MON_12, +#define MON_12 MON_12 + +/* abbreviated month names */ + ABMON_1, +#define ABMON_1 ABMON_1 + ABMON_2, +#define ABMON_2 ABMON_2 + ABMON_3, +#define ABMON_3 ABMON_3 + ABMON_4, +#define ABMON_4 ABMON_4 + ABMON_5, +#define ABMON_5 ABMON_5 + ABMON_6, +#define ABMON_6 ABMON_6 + ABMON_7, +#define ABMON_7 ABMON_7 + ABMON_8, +#define ABMON_8 ABMON_8 + ABMON_9, +#define ABMON_9 ABMON_9 + ABMON_10, +#define ABMON_10 ABMON_10 + ABMON_11, +#define ABMON_11 ABMON_11 + ABMON_12, +#define ABMON_12 ABMON_12 + + ERA, /* era description segments */ +#define ERA ERA + ERA_D_FMT, /* era date format string */ +#define ERA_D_FMT ERA_D_FMT + ERA_D_T_FMT, /* era date and time format string */ +#define ERA_D_T_FMT ERA_D_T_FMT + ERA_T_FMT, /* era time format string */ +#define ERA_T_FMT ERA_T_FMT + ALT_DIGITS, /* alternative symbols for digits */ +#define ALT_DIGITS ALT_DIGITS + + RADIXCHAR, /* radix char */ +#define RADIXCHAR RADIXCHAR + THOUSEP, /* separator for thousands */ +#define THOUSEP THOUSEP + + YESEXPR, /* affirmative response expression */ +#define YESEXPR YESEXPR + NOEXPR, /* negative response expression */ +#define NOEXPR NOEXPR + YESSTR, /* affirmative response for yes/no queries */ +#define YESSTR YESSTR + NOSTR, /* negative response for yes/no queries */ +#define NOSTR NOSTR + + CRNCYSTR, /* currency symbol */ +#define CRNCYSTR CRNCYSTR + + D_MD_ORDER, /* month/day order (BSD extension) */ +#define D_MD_ORDER D_MD_ORDER + + _NL_TIME_DATE_FMT = 84, /* date fmt used by date(1) (GNU extension) */ +#define _DATE_FMT _NL_TIME_DATE_FMT + +#ifdef __HAVE_LOCALE_INFO__ + _NL_CTYPE_MB_CUR_MAX, + _NL_MESSAGES_CODESET, + +#ifdef __HAVE_LOCALE_INFO_EXTENDED__ + + /* NOTE: + + Always maintain the order and position of existing entries! + Always append new entry to the list, prior to the definition + of _NL_LOCALE_EXTENDED_LAST_ENTRY. */ + + _NL_LOCALE_EXTENDED_FIRST_ENTRY, + + _NL_CTYPE_OUTDIGITS0_MB, + _NL_CTYPE_OUTDIGITS1_MB, + _NL_CTYPE_OUTDIGITS2_MB, + _NL_CTYPE_OUTDIGITS3_MB, + _NL_CTYPE_OUTDIGITS4_MB, + _NL_CTYPE_OUTDIGITS5_MB, + _NL_CTYPE_OUTDIGITS6_MB, + _NL_CTYPE_OUTDIGITS7_MB, + _NL_CTYPE_OUTDIGITS8_MB, + _NL_CTYPE_OUTDIGITS9_MB, + _NL_CTYPE_OUTDIGITS0_WC, + _NL_CTYPE_OUTDIGITS1_WC, + _NL_CTYPE_OUTDIGITS2_WC, + _NL_CTYPE_OUTDIGITS3_WC, + _NL_CTYPE_OUTDIGITS4_WC, + _NL_CTYPE_OUTDIGITS5_WC, + _NL_CTYPE_OUTDIGITS6_WC, + _NL_CTYPE_OUTDIGITS7_WC, + _NL_CTYPE_OUTDIGITS8_WC, + _NL_CTYPE_OUTDIGITS9_WC, + + _NL_TIME_CODESET, + _NL_TIME_WMON_1, + _NL_TIME_WMON_2, + _NL_TIME_WMON_3, + _NL_TIME_WMON_4, + _NL_TIME_WMON_5, + _NL_TIME_WMON_6, + _NL_TIME_WMON_7, + _NL_TIME_WMON_8, + _NL_TIME_WMON_9, + _NL_TIME_WMON_10, + _NL_TIME_WMON_11, + _NL_TIME_WMON_12, + _NL_TIME_WMONTH_1, + _NL_TIME_WMONTH_2, + _NL_TIME_WMONTH_3, + _NL_TIME_WMONTH_4, + _NL_TIME_WMONTH_5, + _NL_TIME_WMONTH_6, + _NL_TIME_WMONTH_7, + _NL_TIME_WMONTH_8, + _NL_TIME_WMONTH_9, + _NL_TIME_WMONTH_10, + _NL_TIME_WMONTH_11, + _NL_TIME_WMONTH_12, + _NL_TIME_WWDAY_1, + _NL_TIME_WWDAY_2, + _NL_TIME_WWDAY_3, + _NL_TIME_WWDAY_4, + _NL_TIME_WWDAY_5, + _NL_TIME_WWDAY_6, + _NL_TIME_WWDAY_7, + _NL_TIME_WWEEKDAY_1, + _NL_TIME_WWEEKDAY_2, + _NL_TIME_WWEEKDAY_3, + _NL_TIME_WWEEKDAY_4, + _NL_TIME_WWEEKDAY_5, + _NL_TIME_WWEEKDAY_6, + _NL_TIME_WWEEKDAY_7, + _NL_TIME_WT_FMT, + _NL_TIME_WD_FMT, + _NL_TIME_WD_T_FMT, + _NL_TIME_WAM_STR, + _NL_TIME_WPM_STR, + _NL_TIME_WDATE_FMT, + _NL_TIME_WT_FMT_AMPM, + _NL_TIME_WERA, + _NL_TIME_WERA_D_FMT, + _NL_TIME_WERA_D_T_FMT, + _NL_TIME_WERA_T_FMT, + _NL_TIME_WALT_DIGITS, + + _NL_NUMERIC_CODESET, + _NL_NUMERIC_GROUPING, + _NL_NUMERIC_DECIMAL_POINT_WC, + _NL_NUMERIC_THOUSANDS_SEP_WC, + + _NL_MONETARY_INT_CURR_SYMBOL, + _NL_MONETARY_CURRENCY_SYMBOL, + _NL_MONETARY_MON_DECIMAL_POINT, + _NL_MONETARY_MON_THOUSANDS_SEP, + _NL_MONETARY_MON_GROUPING, + _NL_MONETARY_POSITIVE_SIGN, + _NL_MONETARY_NEGATIVE_SIGN, + _NL_MONETARY_INT_FRAC_DIGITS, + _NL_MONETARY_FRAC_DIGITS, + _NL_MONETARY_P_CS_PRECEDES, + _NL_MONETARY_P_SEP_BY_SPACE, + _NL_MONETARY_N_CS_PRECEDES, + _NL_MONETARY_N_SEP_BY_SPACE, + _NL_MONETARY_P_SIGN_POSN, + _NL_MONETARY_N_SIGN_POSN, + _NL_MONETARY_INT_P_CS_PRECEDES, + _NL_MONETARY_INT_P_SEP_BY_SPACE, + _NL_MONETARY_INT_N_CS_PRECEDES, + _NL_MONETARY_INT_N_SEP_BY_SPACE, + _NL_MONETARY_INT_P_SIGN_POSN, + _NL_MONETARY_INT_N_SIGN_POSN, + _NL_MONETARY_CODESET, + _NL_MONETARY_WINT_CURR_SYMBOL, + _NL_MONETARY_WCURRENCY_SYMBOL, + _NL_MONETARY_WMON_DECIMAL_POINT, + _NL_MONETARY_WMON_THOUSANDS_SEP, + _NL_MONETARY_WPOSITIVE_SIGN, + _NL_MONETARY_WNEGATIVE_SIGN, + + _NL_MESSAGES_WYESEXPR, + _NL_MESSAGES_WNOEXPR, + _NL_MESSAGES_WYESSTR, + _NL_MESSAGES_WNOSTR, + + _NL_COLLATE_CODESET, + + /* This MUST be the last entry since it's used to check for an array + index in nl_langinfo(). */ + _NL_LOCALE_EXTENDED_LAST_ENTRY + +#endif /* __HAVE_LOCALE_INFO_EXTENDED__ */ +#endif /* __HAVE_LOCALE_INFO__ */ + +}; + +__BEGIN_DECLS +char *nl_langinfo(nl_item); +__END_DECLS + +#endif /* !_LANGINFO_H_ */ diff --git a/tools/sdk/include/newlib/libgen.h b/tools/sdk/include/newlib/libgen.h new file mode 100644 index 00000000..abfab0e5 --- /dev/null +++ b/tools/sdk/include/newlib/libgen.h @@ -0,0 +1,23 @@ +/* + * libgen.h - defined by XPG4 + */ + +#ifndef _LIBGEN_H_ +#define _LIBGEN_H_ + +#include "_ansi.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +char *_EXFUN(basename, (char *)); +char *_EXFUN(dirname, (char *)); + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBGEN_H_ */ + diff --git a/tools/sdk/include/newlib/limits.h b/tools/sdk/include/newlib/limits.h new file mode 100644 index 00000000..190f1f78 --- /dev/null +++ b/tools/sdk/include/newlib/limits.h @@ -0,0 +1,146 @@ +#ifndef _LIBC_LIMITS_H_ +# define _LIBC_LIMITS_H_ 1 + +#include + +# ifdef _MB_LEN_MAX +# define MB_LEN_MAX _MB_LEN_MAX +# else +# define MB_LEN_MAX 1 +# endif + +/* Maximum number of positional arguments, if _WANT_IO_POS_ARGS. */ +# ifndef NL_ARGMAX +# define NL_ARGMAX 32 +# endif + +/* if do not have #include_next support, then we + have to define the limits here. */ +# if !defined __GNUC__ || __GNUC__ < 2 + +# ifndef _LIMITS_H +# define _LIMITS_H 1 + +# include + +/* Number of bits in a `char'. */ +# undef CHAR_BIT +# define CHAR_BIT 8 + +/* Minimum and maximum values a `signed char' can hold. */ +# undef SCHAR_MIN +# define SCHAR_MIN (-128) +# undef SCHAR_MAX +# define SCHAR_MAX 127 + +/* Maximum value an `unsigned char' can hold. (Minimum is 0). */ +# undef UCHAR_MAX +# define UCHAR_MAX 255 + +/* Minimum and maximum values a `char' can hold. */ +# ifdef __CHAR_UNSIGNED__ +# undef CHAR_MIN +# define CHAR_MIN 0 +# undef CHAR_MAX +# define CHAR_MAX 255 +# else +# undef CHAR_MIN +# define CHAR_MIN (-128) +# undef CHAR_MAX +# define CHAR_MAX 127 +# endif + +/* Minimum and maximum values a `signed short int' can hold. */ +# undef SHRT_MIN +/* For the sake of 16 bit hosts, we may not use -32768 */ +# define SHRT_MIN (-32767-1) +# undef SHRT_MAX +# define SHRT_MAX 32767 + +/* Maximum value an `unsigned short int' can hold. (Minimum is 0). */ +# undef USHRT_MAX +# define USHRT_MAX 65535 + +/* Minimum and maximum values a `signed int' can hold. */ +# ifndef __INT_MAX__ +# define __INT_MAX__ 2147483647 +# endif +# undef INT_MIN +# define INT_MIN (-INT_MAX-1) +# undef INT_MAX +# define INT_MAX __INT_MAX__ + +/* Maximum value an `unsigned int' can hold. (Minimum is 0). */ +# undef UINT_MAX +# define UINT_MAX (INT_MAX * 2U + 1) + +/* Minimum and maximum values a `signed long int' can hold. + (Same as `int'). */ +# ifndef __LONG_MAX__ +# if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) || defined (__sparcv9) +# define __LONG_MAX__ 9223372036854775807L +# else +# define __LONG_MAX__ 2147483647L +# endif /* __alpha__ || sparc64 */ +# endif +# undef LONG_MIN +# define LONG_MIN (-LONG_MAX-1) +# undef LONG_MAX +# define LONG_MAX __LONG_MAX__ + +/* Maximum value an `unsigned long int' can hold. (Minimum is 0). */ +# undef ULONG_MAX +# define ULONG_MAX (LONG_MAX * 2UL + 1) + +# ifndef __LONG_LONG_MAX__ +# define __LONG_LONG_MAX__ 9223372036854775807LL +# endif + +# if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +/* Minimum and maximum values a `signed long long int' can hold. */ +# undef LLONG_MIN +# define LLONG_MIN (-LLONG_MAX-1) +# undef LLONG_MAX +# define LLONG_MAX __LONG_LONG_MAX__ + +/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */ +# undef ULLONG_MAX +# define ULLONG_MAX (LLONG_MAX * 2ULL + 1) +# endif + +# if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__) +/* Minimum and maximum values a `signed long long int' can hold. */ +# undef LONG_LONG_MIN +# define LONG_LONG_MIN (-LONG_LONG_MAX-1) +# undef LONG_LONG_MAX +# define LONG_LONG_MAX __LONG_LONG_MAX__ + +/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */ +# undef ULONG_LONG_MAX +# define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1) +# endif + +# endif /* _LIMITS_H */ +# endif /* GCC 2. */ + +#endif /* !_LIBC_LIMITS_H_ */ + +#if defined __GNUC__ && !defined _GCC_LIMITS_H_ +/* `_GCC_LIMITS_H_' is what GCC's file defines. */ +# include_next +#endif /* __GNUC__ && !_GCC_LIMITS_H_ */ + +#ifndef _POSIX2_RE_DUP_MAX +/* The maximum number of repeated occurrences of a regular expression + * permitted when using the interval notation `\{M,N\}'. */ +#define _POSIX2_RE_DUP_MAX 255 +#endif /* _POSIX2_RE_DUP_MAX */ + +#ifndef ARG_MAX +#define ARG_MAX 4096 +#endif + +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif diff --git a/tools/sdk/include/newlib/locale.h b/tools/sdk/include/newlib/locale.h new file mode 100644 index 00000000..cbd658e4 --- /dev/null +++ b/tools/sdk/include/newlib/locale.h @@ -0,0 +1,64 @@ +/* + locale.h + Values appropriate for the formatting of monetary and other + numberic quantities. +*/ + +#ifndef _LOCALE_H_ +#define _LOCALE_H_ + +#include "_ansi.h" + +#define __need_NULL +#include + +#define LC_ALL 0 +#define LC_COLLATE 1 +#define LC_CTYPE 2 +#define LC_MONETARY 3 +#define LC_NUMERIC 4 +#define LC_TIME 5 +#define LC_MESSAGES 6 + +_BEGIN_STD_C + +struct lconv +{ + char *decimal_point; + char *thousands_sep; + char *grouping; + char *int_curr_symbol; + char *currency_symbol; + char *mon_decimal_point; + char *mon_thousands_sep; + char *mon_grouping; + char *positive_sign; + char *negative_sign; + char int_frac_digits; + char frac_digits; + char p_cs_precedes; + char p_sep_by_space; + char n_cs_precedes; + char n_sep_by_space; + char p_sign_posn; + char n_sign_posn; + char int_n_cs_precedes; + char int_n_sep_by_space; + char int_n_sign_posn; + char int_p_cs_precedes; + char int_p_sep_by_space; + char int_p_sign_posn; +}; + +#ifndef _REENT_ONLY +char *_EXFUN(setlocale,(int category, const char *locale)); +struct lconv *_EXFUN(localeconv,(void)); +#endif + +struct _reent; +char *_EXFUN(_setlocale_r,(struct _reent *, int category, const char *locale)); +struct lconv *_EXFUN(_localeconv_r,(struct _reent *)); + +_END_STD_C + +#endif /* _LOCALE_H_ */ diff --git a/tools/sdk/include/newlib/machine/_default_types.h b/tools/sdk/include/newlib/machine/_default_types.h new file mode 100644 index 00000000..03bdc523 --- /dev/null +++ b/tools/sdk/include/newlib/machine/_default_types.h @@ -0,0 +1,56 @@ +/* + * _default_types implementation for xtensa lx106 arch + * + * Simplified version of generic _default_types.h, ignores gcc + * built-in standard types. + */ + +#ifndef _MACHINE__DEFAULT_TYPES_H +#define _MACHINE__DEFAULT_TYPES_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef signed char __int8_t ; +typedef unsigned char __uint8_t ; +#define ___int8_t_defined 1 + +typedef signed short __int16_t; +typedef unsigned short __uint16_t; +#define ___int16_t_defined 1 + +typedef signed int __int32_t; +typedef unsigned int __uint32_t; +#define ___int32_t_defined 1 + +typedef signed long long __int64_t; +typedef unsigned long long __uint64_t; +#define ___int64_t_defined 1 + +typedef __int8_t __int_least8_t; +typedef __uint8_t __uint_least8_t; +#define ___int_least8_t_defined + +typedef __int16_t __int_least16_t; +typedef __uint16_t __uint_least16_t; +#define ___int_least16_t_defined + +typedef __int32_t __int_least32_t; +typedef __uint32_t __uint_least32_t; +#define ___int_least32_t_defined + +typedef __int64_t __int_least64_t; +typedef __uint64_t __uint_least64_t; +#define ___int_least64_t_defined + +typedef __INTPTR_TYPE__ __intptr_t; +typedef __UINTPTR_TYPE__ __uintptr_t; + +#ifdef __cplusplus +} +#endif + +#endif /* _MACHINE__DEFAULT_TYPES_H */ diff --git a/tools/sdk/include/newlib/machine/_types.h b/tools/sdk/include/newlib/machine/_types.h new file mode 100644 index 00000000..17e6d51e --- /dev/null +++ b/tools/sdk/include/newlib/machine/_types.h @@ -0,0 +1,8 @@ +/* + * $Id$ + */ + +#ifndef _MACHINE__TYPES_H +#define _MACHINE__TYPES_H +#include +#endif diff --git a/tools/sdk/include/newlib/machine/ansi.h b/tools/sdk/include/newlib/machine/ansi.h new file mode 100644 index 00000000..737b6d06 --- /dev/null +++ b/tools/sdk/include/newlib/machine/ansi.h @@ -0,0 +1 @@ +/* dummy header file to support BSD compiler */ diff --git a/tools/sdk/include/newlib/machine/endian.h b/tools/sdk/include/newlib/machine/endian.h new file mode 100644 index 00000000..07ebc8f6 --- /dev/null +++ b/tools/sdk/include/newlib/machine/endian.h @@ -0,0 +1,20 @@ +#ifndef __MACHINE_ENDIAN_H__ + +#include + +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 4321 +#endif +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 1234 +#endif + +#ifndef BYTE_ORDER +#if defined(__IEEE_LITTLE_ENDIAN) || defined(__IEEE_BYTES_LITTLE_ENDIAN) +#define BYTE_ORDER LITTLE_ENDIAN +#else +#define BYTE_ORDER BIG_ENDIAN +#endif +#endif + +#endif /* __MACHINE_ENDIAN_H__ */ diff --git a/tools/sdk/include/newlib/machine/fastmath.h b/tools/sdk/include/newlib/machine/fastmath.h new file mode 100644 index 00000000..b13befa2 --- /dev/null +++ b/tools/sdk/include/newlib/machine/fastmath.h @@ -0,0 +1,100 @@ +#ifdef __sysvnecv70_target +double EXFUN(fast_sin,(double)); +double EXFUN(fast_cos,(double)); +double EXFUN(fast_tan,(double)); + +double EXFUN(fast_asin,(double)); +double EXFUN(fast_acos,(double)); +double EXFUN(fast_atan,(double)); + +double EXFUN(fast_sinh,(double)); +double EXFUN(fast_cosh,(double)); +double EXFUN(fast_tanh,(double)); + +double EXFUN(fast_asinh,(double)); +double EXFUN(fast_acosh,(double)); +double EXFUN(fast_atanh,(double)); + +double EXFUN(fast_abs,(double)); +double EXFUN(fast_sqrt,(double)); +double EXFUN(fast_exp2,(double)); +double EXFUN(fast_exp10,(double)); +double EXFUN(fast_expe,(double)); +double EXFUN(fast_log10,(double)); +double EXFUN(fast_log2,(double)); +double EXFUN(fast_loge,(double)); + + +#define sin(x) fast_sin(x) +#define cos(x) fast_cos(x) +#define tan(x) fast_tan(x) +#define asin(x) fast_asin(x) +#define acos(x) fast_acos(x) +#define atan(x) fast_atan(x) +#define sinh(x) fast_sinh(x) +#define cosh(x) fast_cosh(x) +#define tanh(x) fast_tanh(x) +#define asinh(x) fast_asinh(x) +#define acosh(x) fast_acosh(x) +#define atanh(x) fast_atanh(x) +#define abs(x) fast_abs(x) +#define sqrt(x) fast_sqrt(x) +#define exp2(x) fast_exp2(x) +#define exp10(x) fast_exp10(x) +#define expe(x) fast_expe(x) +#define log10(x) fast_log10(x) +#define log2(x) fast_log2(x) +#define loge(x) fast_loge(x) + +#ifdef _HAVE_STDC +/* These functions are in assembler, they really do take floats. This + can only be used with a real ANSI compiler */ + +float EXFUN(fast_sinf,(float)); +float EXFUN(fast_cosf,(float)); +float EXFUN(fast_tanf,(float)); + +float EXFUN(fast_asinf,(float)); +float EXFUN(fast_acosf,(float)); +float EXFUN(fast_atanf,(float)); + +float EXFUN(fast_sinhf,(float)); +float EXFUN(fast_coshf,(float)); +float EXFUN(fast_tanhf,(float)); + +float EXFUN(fast_asinhf,(float)); +float EXFUN(fast_acoshf,(float)); +float EXFUN(fast_atanhf,(float)); + +float EXFUN(fast_absf,(float)); +float EXFUN(fast_sqrtf,(float)); +float EXFUN(fast_exp2f,(float)); +float EXFUN(fast_exp10f,(float)); +float EXFUN(fast_expef,(float)); +float EXFUN(fast_log10f,(float)); +float EXFUN(fast_log2f,(float)); +float EXFUN(fast_logef,(float)); +#define sinf(x) fast_sinf(x) +#define cosf(x) fast_cosf(x) +#define tanf(x) fast_tanf(x) +#define asinf(x) fast_asinf(x) +#define acosf(x) fast_acosf(x) +#define atanf(x) fast_atanf(x) +#define sinhf(x) fast_sinhf(x) +#define coshf(x) fast_coshf(x) +#define tanhf(x) fast_tanhf(x) +#define asinhf(x) fast_asinhf(x) +#define acoshf(x) fast_acoshf(x) +#define atanhf(x) fast_atanhf(x) +#define absf(x) fast_absf(x) +#define sqrtf(x) fast_sqrtf(x) +#define exp2f(x) fast_exp2f(x) +#define exp10f(x) fast_exp10f(x) +#define expef(x) fast_expef(x) +#define log10f(x) fast_log10f(x) +#define log2f(x) fast_log2f(x) +#define logef(x) fast_logef(x) +#endif +/* Override the functions defined in math.h */ +#endif /* __sysvnecv70_target */ + diff --git a/tools/sdk/include/newlib/machine/ieeefp.h b/tools/sdk/include/newlib/machine/ieeefp.h new file mode 100644 index 00000000..f11dc053 --- /dev/null +++ b/tools/sdk/include/newlib/machine/ieeefp.h @@ -0,0 +1,434 @@ +#ifndef __IEEE_BIG_ENDIAN +#ifndef __IEEE_LITTLE_ENDIAN + +/* This file can define macros to choose variations of the IEEE float + format: + + _FLT_LARGEST_EXPONENT_IS_NORMAL + + Defined if the float format uses the largest exponent for finite + numbers rather than NaN and infinity representations. Such a + format cannot represent NaNs or infinities at all, but it's FLT_MAX + is twice the IEEE value. + + _FLT_NO_DENORMALS + + Defined if the float format does not support IEEE denormals. Every + float with a zero exponent is taken to be a zero representation. + + ??? At the moment, there are no equivalent macros above for doubles and + the macros are not fully supported by --enable-newlib-hw-fp. + + __IEEE_BIG_ENDIAN + + Defined if the float format is big endian. This is mutually exclusive + with __IEEE_LITTLE_ENDIAN. + + __IEEE_LITTLE_ENDIAN + + Defined if the float format is little endian. This is mutually exclusive + with __IEEE_BIG_ENDIAN. + + Note that one of __IEEE_BIG_ENDIAN or __IEEE_LITTLE_ENDIAN must be specified for a + platform or error will occur. + + __IEEE_BYTES_LITTLE_ENDIAN + + This flag is used in conjunction with __IEEE_BIG_ENDIAN to describe a situation + whereby multiple words of an IEEE floating point are in big endian order, but the + words themselves are little endian with respect to the bytes. + + _DOUBLE_IS_32BITS + + This is used on platforms that support double by using the 32-bit IEEE + float type. + + _FLOAT_ARG + + This represents what type a float arg is passed as. It is used when the type is + not promoted to double. + +*/ + +#if (defined(__arm__) || defined(__thumb__)) && !defined(__MAVERICK__) +/* ARM traditionally used big-endian words; and within those words the + byte ordering was big or little endian depending upon the target. + Modern floating-point formats are naturally ordered; in this case + __VFP_FP__ will be defined, even if soft-float. */ +#ifdef __VFP_FP__ +# ifdef __ARMEL__ +# define __IEEE_LITTLE_ENDIAN +# else +# define __IEEE_BIG_ENDIAN +# endif +#else +# define __IEEE_BIG_ENDIAN +# ifdef __ARMEL__ +# define __IEEE_BYTES_LITTLE_ENDIAN +# endif +#endif +#endif + +#if defined (__aarch64__) +#if defined (__AARCH64EL__) +#define __IEEE_LITTLE_ENDIAN +#else +#define __IEEE_BIG_ENDIAN +#endif +#endif + +#ifdef __epiphany__ +#define __IEEE_LITTLE_ENDIAN +#define Sudden_Underflow 1 +#endif + +#ifdef __hppa__ +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __nds32__ +#ifdef __big_endian__ +#define __IEEE_BIG_ENDIAN +#else +#define __IEEE_LITTLE_ENDIAN +#endif +#endif + +#ifdef __SPU__ +#define __IEEE_BIG_ENDIAN + +#define isfinite(__y) \ + (__extension__ ({int __cy; \ + (sizeof (__y) == sizeof (float)) ? (1) : \ + (__cy = fpclassify(__y)) != FP_INFINITE && __cy != FP_NAN;})) + +#define isinf(__x) ((sizeof (__x) == sizeof (float)) ? (0) : __isinfd(__x)) +#define isnan(__x) ((sizeof (__x) == sizeof (float)) ? (0) : __isnand(__x)) + +/* + * Macros for use in ieeefp.h. We can't just define the real ones here + * (like those above) as we have name space issues when this is *not* + * included via generic the ieeefp.h. + */ +#define __ieeefp_isnanf(x) 0 +#define __ieeefp_isinff(x) 0 +#define __ieeefp_finitef(x) 1 +#endif + +#ifdef __sparc__ +#ifdef __LITTLE_ENDIAN_DATA__ +#define __IEEE_LITTLE_ENDIAN +#else +#define __IEEE_BIG_ENDIAN +#endif +#endif + +#if defined(__m68k__) || defined(__mc68000__) +#define __IEEE_BIG_ENDIAN +#endif + +#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__) +#define __IEEE_BIG_ENDIAN +#ifdef __HAVE_SHORT_DOUBLE__ +# define _DOUBLE_IS_32BITS +#endif +#endif + +#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) || defined (__H8500__) || defined (__H8300SX__) +#define __IEEE_BIG_ENDIAN +#define _FLOAT_ARG float +#define _DOUBLE_IS_32BITS +#endif + +#if defined (__xc16x__) || defined (__xc16xL__) || defined (__xc16xS__) +#define __IEEE_LITTLE_ENDIAN +#define _FLOAT_ARG float +#define _DOUBLE_IS_32BITS +#endif + + +#ifdef __sh__ +#ifdef __LITTLE_ENDIAN__ +#define __IEEE_LITTLE_ENDIAN +#else +#define __IEEE_BIG_ENDIAN +#endif +#if defined(__SH2E__) || defined(__SH3E__) || defined(__SH4_SINGLE_ONLY__) || defined(__SH2A_SINGLE_ONLY__) +#define _DOUBLE_IS_32BITS +#endif +#endif + +#ifdef _AM29K +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef _WIN32 +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __i386__ +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __i960__ +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __lm32__ +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __M32R__ +#define __IEEE_BIG_ENDIAN +#endif + +#if defined(_C4x) || defined(_C3x) +#define __IEEE_BIG_ENDIAN +#define _DOUBLE_IS_32BITS +#endif + +#ifdef __TMS320C6X__ +#ifdef _BIG_ENDIAN +#define __IEEE_BIG_ENDIAN +#else +#define __IEEE_LITTLE_ENDIAN +#endif +#endif + +#ifdef __TIC80__ +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __MIPSEL__ +#define __IEEE_LITTLE_ENDIAN +#endif +#ifdef __MIPSEB__ +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __MMIX__ +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __D30V__ +#define __IEEE_BIG_ENDIAN +#endif + +/* necv70 was __IEEE_LITTLE_ENDIAN. */ + +#ifdef __W65__ +#define __IEEE_LITTLE_ENDIAN +#define _DOUBLE_IS_32BITS +#endif + +#if defined(__Z8001__) || defined(__Z8002__) +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __m88k__ +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __mn10300__ +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __mn10200__ +#define __IEEE_LITTLE_ENDIAN +#define _DOUBLE_IS_32BITS +#endif + +#ifdef __v800 +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __v850 +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __D10V__ +#define __IEEE_BIG_ENDIAN +#if __DOUBLE__ == 32 +#define _DOUBLE_IS_32BITS +#endif +#endif + +#ifdef __PPC__ +#if (defined(_BIG_ENDIAN) && _BIG_ENDIAN) || (defined(_AIX) && _AIX) +#define __IEEE_BIG_ENDIAN +#else +#if (defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN) || (defined(__sun__) && __sun__) || (defined(_WIN32) && _WIN32) +#define __IEEE_LITTLE_ENDIAN +#endif +#endif +#endif + +#ifdef __xstormy16__ +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __arc__ +#ifdef __big_endian__ +#define __IEEE_BIG_ENDIAN +#else +#define __IEEE_LITTLE_ENDIAN +#endif +#endif + +#ifdef __CRX__ +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __fr30__ +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __mcore__ +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __mt__ +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __frv__ +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __moxie__ +#ifdef __MOXIE_BIG_ENDIAN__ +#define __IEEE_BIG_ENDIAN +#else +#define __IEEE_LITTLE_ENDIAN +#endif +#endif + +#ifdef __ia64__ +#ifdef __BIG_ENDIAN__ +#define __IEEE_BIG_ENDIAN +#else +#define __IEEE_LITTLE_ENDIAN +#endif +#endif + +#ifdef __AVR__ +#define __IEEE_LITTLE_ENDIAN +#define _DOUBLE_IS_32BITS +#endif + +#if defined(__or1k__) || defined(__OR1K__) || defined(__OR1KND__) +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __IP2K__ +#define __IEEE_BIG_ENDIAN +#define __SMALL_BITFIELDS +#define _DOUBLE_IS_32BITS +#endif + +#ifdef __iq2000__ +#define __IEEE_BIG_ENDIAN +#endif + +#ifdef __MAVERICK__ +#ifdef __ARMEL__ +# define __IEEE_LITTLE_ENDIAN +#else /* must be __ARMEB__ */ +# define __IEEE_BIG_ENDIAN +#endif /* __ARMEL__ */ +#endif /* __MAVERICK__ */ + +#ifdef __m32c__ +#define __IEEE_LITTLE_ENDIAN +#define __SMALL_BITFIELDS +#endif + +#ifdef __CRIS__ +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __BFIN__ +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __x86_64__ +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __mep__ +#ifdef __LITTLE_ENDIAN__ +#define __IEEE_LITTLE_ENDIAN +#else +#define __IEEE_BIG_ENDIAN +#endif +#endif + +#ifdef __MICROBLAZE__ +#ifndef __MICROBLAZEEL__ +#define __IEEE_BIG_ENDIAN +#else +#define __IEEE_LITTLE_ENDIAN +#endif +#endif + +#ifdef __MSP430__ +#define __IEEE_LITTLE_ENDIAN +#define __SMALL_BITFIELDS /* 16 Bit INT */ +#endif + +#ifdef __RL78__ +#define __IEEE_LITTLE_ENDIAN +#define __SMALL_BITFIELDS /* 16 Bit INT */ +#ifndef __RL78_64BIT_DOUBLES__ +#define _DOUBLE_IS_32BITS +#endif +#endif + +#ifdef __RX__ + +#ifdef __RX_BIG_ENDIAN__ +#define __IEEE_BIG_ENDIAN +#else +#define __IEEE_LITTLE_ENDIAN +#endif + +#ifndef __RX_64BIT_DOUBLES__ +#define _DOUBLE_IS_32BITS +#endif + +#ifdef __RX_16BIT_INTS__ +#define __SMALL_BITFIELDS +#endif + +#endif + +#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__)) +#define __IEEE_LITTLE_ENDIAN +#define __SMALL_BITFIELDS /* 16 Bit INT */ +#endif + +#ifdef __NIOS2__ +# ifdef __nios2_big_endian__ +# define __IEEE_BIG_ENDIAN +# else +# define __IEEE_LITTLE_ENDIAN +# endif +#endif + +#if (defined(__XTENSA__)) +# ifdef __XTENSA_EB__ +# define __IEEE_BIG_ENDIAN +# else +# define __IEEE_LITTLE_ENDIAN +# endif +#endif + +#ifndef __IEEE_BIG_ENDIAN +#ifndef __IEEE_LITTLE_ENDIAN +#error Endianess not declared!! +#endif /* not __IEEE_LITTLE_ENDIAN */ +#endif /* not __IEEE_BIG_ENDIAN */ + +#endif /* not __IEEE_LITTLE_ENDIAN */ +#endif /* not __IEEE_BIG_ENDIAN */ + diff --git a/tools/sdk/include/newlib/machine/malloc.h b/tools/sdk/include/newlib/machine/malloc.h new file mode 100644 index 00000000..fdada9ed --- /dev/null +++ b/tools/sdk/include/newlib/machine/malloc.h @@ -0,0 +1,8 @@ +#ifndef _MACHMALLOC_H_ +#define _MACHMALLOC_H_ + +/* place holder so platforms may add malloc.h extensions */ + +#endif /* _MACHMALLOC_H_ */ + + diff --git a/tools/sdk/include/newlib/machine/param.h b/tools/sdk/include/newlib/machine/param.h new file mode 100644 index 00000000..bdf8bf70 --- /dev/null +++ b/tools/sdk/include/newlib/machine/param.h @@ -0,0 +1 @@ +/* Place holder for machine-specific param.h. */ diff --git a/tools/sdk/include/newlib/machine/setjmp-dj.h b/tools/sdk/include/newlib/machine/setjmp-dj.h new file mode 100644 index 00000000..6ca5e652 --- /dev/null +++ b/tools/sdk/include/newlib/machine/setjmp-dj.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 1991 DJ Delorie + * All rights reserved. + * + * Redistribution, modification, and use in source and binary forms is permitted + * provided that the above copyright notice and following paragraph are + * duplicated in all such forms. + * + * This file is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +/* Modified to use SETJMP_DJ_H rather than SETJMP_H to avoid + conflicting with setjmp.h. Ian Taylor, Cygnus support, April, + 1993. */ + +#ifndef _SETJMP_DJ_H_ +#define _SETJMP_DJ_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + unsigned long eax; + unsigned long ebx; + unsigned long ecx; + unsigned long edx; + unsigned long esi; + unsigned long edi; + unsigned long ebp; + unsigned long esp; + unsigned long eip; +} jmp_buf[1]; + +extern int setjmp(jmp_buf); +extern void longjmp(jmp_buf, int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/include/newlib/machine/setjmp.h b/tools/sdk/include/newlib/machine/setjmp.h new file mode 100644 index 00000000..9f9d9e49 --- /dev/null +++ b/tools/sdk/include/newlib/machine/setjmp.h @@ -0,0 +1,453 @@ + +_BEGIN_STD_C + +#if defined(__or1k__) || defined(__or1knd__) +#define _JBLEN 31 /* 32 GPRs - r0 */ +#define _JBTYPE unsigned long +#endif + +#if defined(__arm__) || defined(__thumb__) +/* + * All callee preserved registers: + * v1 - v7, fp, ip, sp, lr, f4, f5, f6, f7 + */ +#define _JBLEN 23 +#endif + +#if defined(__aarch64__) +#define _JBLEN 22 +#define _JBTYPE long long +#endif + +#if defined(__AVR__) +#define _JBLEN 24 +#endif + +#ifdef __sparc__ +/* + * onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext). + * All else recovered by under/over(flow) handling. + */ +#define _JBLEN 13 +#endif + +#ifdef __BFIN__ +#define _JBLEN 40 +#endif + +#ifdef __epiphany__ +/* All callee preserved registers: r4-r10,fp, sp, lr,r15, r32-r39 */ +#define _JBTYPE long long +#define _JBLEN 10 +#endif + +/* necv70 was 9 as well. */ + +#if defined(__m68k__) || defined(__mc68000__) +/* + * onsstack,sigmask,sp,pc,psl,d2-d7,a2-a6, + * fp2-fp7 for 68881. + * All else recovered by under/over(flow) handling. + */ +#define _JBLEN 34 +#endif + +#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__) +/* + * D, X, Y are not saved. + * Only take into account the pseudo soft registers (max 32). + */ +#define _JBLEN 32 +#endif + +#ifdef __nds32__ +/* 17 words for GPRs, + 1 word for $fpcfg.freg and 30 words for FPUs + Reserved 2 words for aligement-adjustment. When storeing double-precision + floating-point register into memory, the address has to be + double-word-aligned. + Check libc/machine/nds32/setjmp.S for more information. */ +#if __NDS32_EXT_FPU_SP__ || __NDS32_EXT_FPU_DP__ +#define _JBLEN 50 +#else +#define _JBLEN 18 +#endif +#endif + +#if defined(__Z8001__) || defined(__Z8002__) +/* 16 regs + pc */ +#define _JBLEN 20 +#endif + +#ifdef _AM29K +/* + * onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext). + * All else recovered by under/over(flow) handling. + */ +#define _JBLEN 9 +#endif + +#ifdef __i386__ +# if defined(__CYGWIN__) && !defined (_JBLEN) +# define _JBLEN (13 * 4) +# elif defined(__unix__) || defined(__rtems__) +# define _JBLEN 9 +# else +# include "setjmp-dj.h" +# endif +#endif + +#ifdef __x86_64__ +# ifdef __CYGWIN__ +# define _JBTYPE long +# define _JBLEN 32 +# else +# define _JBTYPE long long +# define _JBLEN 8 +# endif +#endif + +#ifdef __i960__ +#define _JBLEN 35 +#endif + +#ifdef __M32R__ +/* Only 8 words are currently needed. 10 gives us some slop if we need + to expand. */ +#define _JBLEN 10 +#endif + +#ifdef __mips__ +# if defined(__mips64) +# define _JBTYPE long long +# endif +# ifdef __mips_soft_float +# define _JBLEN 11 +# else +# define _JBLEN 23 +# endif +#endif + +#ifdef __m88000__ +#define _JBLEN 21 +#endif + +#ifdef __H8300__ +#define _JBLEN 5 +#define _JBTYPE int +#endif + +#ifdef __H8300H__ +/* same as H8/300 but registers are twice as big */ +#define _JBLEN 5 +#define _JBTYPE long +#endif + +#if defined (__H8300S__) || defined (__H8300SX__) +/* same as H8/300 but registers are twice as big */ +#define _JBLEN 5 +#define _JBTYPE long +#endif + +#ifdef __H8500__ +#define _JBLEN 4 +#endif + +#ifdef __sh__ +#if __SH5__ +#define _JBLEN 50 +#define _JBTYPE long long +#else +#define _JBLEN 20 +#endif /* __SH5__ */ +#endif + +#ifdef __v800 +#define _JBLEN 28 +#endif + +#ifdef __PPC__ +#ifdef __ALTIVEC__ +#define _JBLEN 64 +#else +#define _JBLEN 32 +#endif +#define _JBTYPE double +#endif + +#ifdef __MICROBLAZE__ +#define _JBLEN 20 +#define _JBTYPE unsigned int +#endif + +#ifdef __hppa__ +/* %r30, %r2-%r18, %r27, pad, %fr12-%fr15. + Note space exists for the FP registers, but they are not + saved. */ +#define _JBLEN 28 +#endif + +#if defined(__mn10300__) || defined(__mn10200__) +#ifdef __AM33_2__ +#define _JBLEN 26 +#else +/* A guess */ +#define _JBLEN 10 +#endif +#endif + +#ifdef __v850 +/* I think our setjmp is saving 15 regs at the moment. Gives us one word + slop if we need to expand. */ +#define _JBLEN 16 +#endif + +#if defined(_C4x) +#define _JBLEN 10 +#endif +#if defined(_C3x) +#define _JBLEN 9 +#endif + +#ifdef __TMS320C6X__ +#define _JBLEN 13 +#endif + +#ifdef __TIC80__ +#define _JBLEN 13 +#endif + +#ifdef __D10V__ +#define _JBLEN 8 +#endif + +#ifdef __D30V__ +#define _JBLEN ((64 /* GPR */ + (2*2) /* ACs */ + 18 /* CRs */) / 2) +#define _JBTYPE double +#endif + +#ifdef __frv__ +#define _JBLEN (68/2) /* room for 68 32-bit regs */ +#define _JBTYPE double +#endif + +#ifdef __moxie__ +#define _JBLEN 16 +#endif + +#ifdef __CRX__ +#define _JBLEN 9 +#endif + +#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__)) +/* r6, r7, r8, r9, r10, r11, r12 (r12L, r12H), + * r13 (r13L, r13H), ra(raL, raH), sp(spL, spH) */ +#define _JBLEN 14 +#define _JBTYPE unsigned short +#endif + +#ifdef __fr30__ +#define _JBLEN 10 +#endif + +#ifdef __iq2000__ +#define _JBLEN 32 +#endif + +#ifdef __mcore__ +#define _JBLEN 16 +#endif + +#ifdef __MMIX__ +/* Using a layout compatible with GCC's built-in. */ +#define _JBLEN 5 +#define _JBTYPE unsigned long +#endif + +#ifdef __mt__ +#define _JBLEN 16 +#endif + +#ifdef __SPU__ +#define _JBLEN 50 +#define _JBTYPE __vector signed int +#endif + +#ifdef __xstormy16__ +/* 4 GPRs plus SP plus PC. */ +#define _JBLEN 8 +#endif + +#ifdef __XTENSA__ +#if __XTENSA_WINDOWED_ABI__ + +/* The jmp_buf structure for Xtensa windowed ABI holds the following + (where "proc" is the procedure that calls setjmp): 4-12 registers + from the window of proc, the 4 words from the save area at proc's $sp + (in case a subsequent alloca in proc moves $sp), and the return + address within proc. Everything else is saved on the stack in the + normal save areas. The jmp_buf structure is: + + struct jmp_buf { + int regs[12]; + int save[4]; + void *return_address; + } + + See the setjmp code for details. */ + +#define _JBLEN 17 /* 12 + 4 + 1 */ + +#else /* __XTENSA_CALL0_ABI__ */ + +#define _JBLEN 6 /* a0, a1, a12, a13, a14, a15 */ + +#endif /* __XTENSA_CALL0_ABI__ */ +#endif /* __XTENSA__ */ + +#ifdef __mep__ +/* 16 GPRs, pc, hi, lo */ +#define _JBLEN 19 +#endif + +#ifdef __CRIS__ +#define _JBLEN 18 +#endif + +#ifdef __lm32__ +#define _JBLEN 19 +#endif + +#ifdef __m32c__ +#if defined(__r8c_cpu__) || defined(__m16c_cpu__) +#define _JBLEN (22/2) +#else +#define _JBLEN (34/2) +#endif +#define _JBTYPE unsigned short +#endif /* __m32c__ */ + +#ifdef __MSP430__ +#define _JBLEN 9 + +#ifdef __MSP430X_LARGE__ +#define _JBTYPE unsigned long +#else +#define _JBTYPE unsigned short +#endif +#endif + +#ifdef __RL78__ +/* Three banks of registers, SP, CS, ES, PC */ +#define _JBLEN (8*3+8) +#define _JBTYPE unsigned char +#endif + +/* + * There are two versions of setjmp()/longjmp(): + * 1) Compiler (gcc) built-in versions. + * 2) Function-call versions. + * + * The built-in versions are used most of the time. When used, gcc replaces + * calls to setjmp()/longjmp() with inline assembly code. The built-in + * versions save/restore a variable number of registers. + + * _JBLEN is set to 40 to be ultra-safe with the built-in versions. + * It only needs to be 12 for the function-call versions + * but this data structure is used by both versions. + */ +#ifdef __NIOS2__ +#define _JBLEN 40 +#define _JBTYPE unsigned long +#endif + +#ifdef __RX__ +#define _JBLEN 0x44 +#endif + +#ifdef _JBLEN +#ifdef _JBTYPE +typedef _JBTYPE jmp_buf[_JBLEN]; +#else +typedef int jmp_buf[_JBLEN]; +#endif +#endif + +_END_STD_C + +#if defined(__CYGWIN__) || defined(__rtems__) +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* POSIX sigsetjmp/siglongjmp macros */ +#ifdef _JBTYPE +typedef _JBTYPE sigjmp_buf[_JBLEN+1+((sizeof (_JBTYPE) + sizeof (sigset_t) - 1) + /sizeof (_JBTYPE))]; +#else +typedef int sigjmp_buf[_JBLEN+1+(sizeof (sigset_t)/sizeof (int))]; +#endif + +#define _SAVEMASK _JBLEN +#define _SIGMASK (_JBLEN+1) + +#ifdef __CYGWIN__ +# define _CYGWIN_WORKING_SIGSETJMP +#endif + +#ifdef _POSIX_THREADS +#define __SIGMASK_FUNC pthread_sigmask +#else +#define __SIGMASK_FUNC sigprocmask +#endif + +#if defined(__GNUC__) + +#define sigsetjmp(env, savemask) \ + __extension__ \ + ({ \ + sigjmp_buf *_sjbuf = &(env); \ + ((*_sjbuf)[_SAVEMASK] = savemask,\ + __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)),\ + setjmp (*_sjbuf)); \ + }) + +#define siglongjmp(env, val) \ + __extension__ \ + ({ \ + sigjmp_buf *_sjbuf = &(env); \ + ((((*_sjbuf)[_SAVEMASK]) ? \ + __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0)\ + : 0), \ + longjmp (*_sjbuf, val)); \ + }) + +#else /* !__GNUC__ */ + +#define sigsetjmp(env, savemask) ((env)[_SAVEMASK] = savemask,\ + __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *) ((env) + _SIGMASK)),\ + setjmp (env)) + +#define siglongjmp(env, val) ((((env)[_SAVEMASK])?\ + __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *) ((env) + _SIGMASK), 0):0),\ + longjmp (env, val)) + +#endif + +/* POSIX _setjmp/_longjmp, maintained for XSI compatibility. These + are equivalent to sigsetjmp/siglongjmp when not saving the signal mask. + New applications should use sigsetjmp/siglongjmp instead. */ +#ifdef __CYGWIN__ +extern void _longjmp(jmp_buf, int); +extern int _setjmp(jmp_buf); +#else +#define _setjmp(env) sigsetjmp ((env), 0) +#define _longjmp(env, val) siglongjmp ((env), (val)) +#endif + +#ifdef __cplusplus +} +#endif +#endif /* __CYGWIN__ or __rtems__ */ diff --git a/tools/sdk/include/newlib/machine/stdlib.h b/tools/sdk/include/newlib/machine/stdlib.h new file mode 100644 index 00000000..fa3f3a13 --- /dev/null +++ b/tools/sdk/include/newlib/machine/stdlib.h @@ -0,0 +1,8 @@ +#ifndef _MACHSTDLIB_H_ +#define _MACHSTDLIB_H_ + +/* place holder so platforms may add stdlib.h extensions */ + +#endif /* _MACHSTDLIB_H_ */ + + diff --git a/tools/sdk/include/newlib/machine/termios.h b/tools/sdk/include/newlib/machine/termios.h new file mode 100644 index 00000000..41fd4593 --- /dev/null +++ b/tools/sdk/include/newlib/machine/termios.h @@ -0,0 +1 @@ +#define __MAX_BAUD B4000000 diff --git a/tools/sdk/include/newlib/machine/time.h b/tools/sdk/include/newlib/machine/time.h new file mode 100644 index 00000000..06e2ccff --- /dev/null +++ b/tools/sdk/include/newlib/machine/time.h @@ -0,0 +1,19 @@ +#ifndef _MACHTIME_H_ +#define _MACHTIME_H_ + +#if defined(__rtems__) +#define _CLOCKS_PER_SEC_ sysconf(_SC_CLK_TCK) +#else /* !__rtems__ */ +#if defined(__aarch64__) || defined(__arm__) || defined(__thumb__) +#define _CLOCKS_PER_SEC_ 100 +#endif +#endif /* !__rtems__ */ + +#ifdef __SPU__ +#include +int nanosleep (const struct timespec *, struct timespec *); +#endif + +#endif /* _MACHTIME_H_ */ + + diff --git a/tools/sdk/include/newlib/machine/types.h b/tools/sdk/include/newlib/machine/types.h new file mode 100644 index 00000000..40a75faa --- /dev/null +++ b/tools/sdk/include/newlib/machine/types.h @@ -0,0 +1,30 @@ +#ifndef _MACHTYPES_H_ +#define _MACHTYPES_H_ + +/* + * The following section is RTEMS specific and is needed to more + * closely match the types defined in the BSD machine/types.h. + * This is needed to let the RTEMS/BSD TCP/IP stack compile. + */ +#if defined(__rtems__) +#include +#endif + +#define _CLOCK_T_ unsigned long /* clock() */ +#define _TIME_T_ long /* time() */ +#define _CLOCKID_T_ unsigned long +#define _TIMER_T_ unsigned long + +#ifndef _HAVE_SYSTYPES +typedef long int __off_t; +typedef int __pid_t; +#ifdef __GNUC__ +__extension__ typedef long long int __loff_t; +#else +typedef long int __loff_t; +#endif +#endif + +#endif /* _MACHTYPES_H_ */ + + diff --git a/tools/sdk/include/newlib/malloc.h b/tools/sdk/include/newlib/malloc.h new file mode 100644 index 00000000..41b5efdc --- /dev/null +++ b/tools/sdk/include/newlib/malloc.h @@ -0,0 +1,169 @@ +/* malloc.h -- header file for memory routines. */ + +#ifndef _INCLUDE_MALLOC_H_ +#define _INCLUDE_MALLOC_H_ + +#include <_ansi.h> +#include + +#define __need_size_t +#include + +/* include any machine-specific extensions */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* This version of struct mallinfo must match the one in + libc/stdlib/mallocr.c. */ + +struct mallinfo { + size_t arena; /* total space allocated from system */ + size_t ordblks; /* number of non-inuse chunks */ + size_t smblks; /* unused -- always zero */ + size_t hblks; /* number of mmapped regions */ + size_t hblkhd; /* total space in mmapped regions */ + size_t usmblks; /* unused -- always zero */ + size_t fsmblks; /* unused -- always zero */ + size_t uordblks; /* total allocated space */ + size_t fordblks; /* total non-inuse space */ + size_t keepcost; /* top-most, releasable (via malloc_trim) space */ +}; + +/* The routines. */ + +extern _PTR malloc _PARAMS ((size_t)); +#ifdef __CYGWIN__ +#undef _malloc_r +#define _malloc_r(r, s) malloc (s) +#else +extern _PTR _malloc_r _PARAMS ((struct _reent *, size_t)); +#endif + +extern _VOID free _PARAMS ((_PTR)); +#ifdef __CYGWIN__ +#undef _free_r +#define _free_r(r, p) free (p) +#else +extern _VOID _free_r _PARAMS ((struct _reent *, _PTR)); +#endif + +extern _PTR realloc _PARAMS ((_PTR, size_t)); +#ifdef __CYGWIN__ +#undef _realloc_r +#define _realloc_r(r, p, s) realloc (p, s) +#else +extern _PTR _realloc_r _PARAMS ((struct _reent *, _PTR, size_t)); +#endif + +extern _PTR calloc _PARAMS ((size_t, size_t)); +#ifdef __CYGWIN__ +#undef _calloc_r +#define _calloc_r(r, s1, s2) calloc (s1, s2); +#else +extern _PTR _calloc_r _PARAMS ((struct _reent *, size_t, size_t)); +#endif + +extern _PTR memalign _PARAMS ((size_t, size_t)); +#ifdef __CYGWIN__ +#undef _memalign_r +#define _memalign_r(r, s1, s2) memalign (s1, s2); +#else +extern _PTR _memalign_r _PARAMS ((struct _reent *, size_t, size_t)); +#endif + +extern struct mallinfo mallinfo _PARAMS ((void)); +#ifdef __CYGWIN__ +#undef _mallinfo_r +#define _mallinfo_r(r) mallinfo () +#else +extern struct mallinfo _mallinfo_r _PARAMS ((struct _reent *)); +#endif + +extern void malloc_stats _PARAMS ((void)); +#ifdef __CYGWIN__ +#undef _malloc_stats_r +#define _malloc_stats_r(r) malloc_stats () +#else +extern void _malloc_stats_r _PARAMS ((struct _reent *)); +#endif + +extern int mallopt _PARAMS ((int, int)); +#ifdef __CYGWIN__ +#undef _mallopt_r +#define _mallopt_r(i1, i2) mallopt (i1, i2) +#else +extern int _mallopt_r _PARAMS ((struct _reent *, int, int)); +#endif + +extern size_t malloc_usable_size _PARAMS ((_PTR)); +#ifdef __CYGWIN__ +#undef _malloc_usable_size_r +#define _malloc_usable_size_r(r, p) malloc_usable_size (p) +#else +extern size_t _malloc_usable_size_r _PARAMS ((struct _reent *, _PTR)); +#endif + +/* These aren't too useful on an embedded system, but we define them + anyhow. */ + +extern _PTR valloc _PARAMS ((size_t)); +#ifdef __CYGWIN__ +#undef _valloc_r +#define _valloc_r(r, s) valloc (s) +#else +extern _PTR _valloc_r _PARAMS ((struct _reent *, size_t)); +#endif + +extern _PTR pvalloc _PARAMS ((size_t)); +#ifdef __CYGWIN__ +#undef _pvalloc_r +#define _pvalloc_r(r, s) pvalloc (s) +#else +extern _PTR _pvalloc_r _PARAMS ((struct _reent *, size_t)); +#endif + +extern int malloc_trim _PARAMS ((size_t)); +#ifdef __CYGWIN__ +#undef _malloc_trim_r +#define _malloc_trim_r(r, s) malloc_trim (s) +#else +extern int _malloc_trim_r _PARAMS ((struct _reent *, size_t)); +#endif + +/* A compatibility routine for an earlier version of the allocator. */ + +extern _VOID mstats _PARAMS ((char *)); +#ifdef __CYGWIN__ +#undef _mstats_r +#define _mstats_r(r, p) mstats (p) +#else +extern _VOID _mstats_r _PARAMS ((struct _reent *, char *)); +#endif + +/* SVID2/XPG mallopt options */ + +#define M_MXFAST 1 /* UNUSED in this malloc */ +#define M_NLBLKS 2 /* UNUSED in this malloc */ +#define M_GRAIN 3 /* UNUSED in this malloc */ +#define M_KEEP 4 /* UNUSED in this malloc */ + +/* mallopt options that actually do something */ + +#define M_TRIM_THRESHOLD -1 +#define M_TOP_PAD -2 +#define M_MMAP_THRESHOLD -3 +#define M_MMAP_MAX -4 + +#ifndef __CYGWIN__ +/* Some systems provide this, so do too for compatibility. */ +extern void cfree _PARAMS ((_PTR)); +#endif /* __CYGWIN__ */ + +#ifdef __cplusplus +} +#endif + +#endif /* _INCLUDE_MALLOC_H_ */ diff --git a/tools/sdk/include/newlib/math.h b/tools/sdk/include/newlib/math.h new file mode 100644 index 00000000..d16ce307 --- /dev/null +++ b/tools/sdk/include/newlib/math.h @@ -0,0 +1,615 @@ +#ifndef _MATH_H_ + +#define _MATH_H_ + +#include +#include +#include "_ansi.h" + +_BEGIN_STD_C + +/* __dmath, __fmath, and __ldmath are only here for backwards compatibility + * in case any code used them. They are no longer used by Newlib, itself, + * other than legacy. */ +union __dmath +{ + double d; + __ULong i[2]; +}; + +union __fmath +{ + float f; + __ULong i[1]; +}; + +#if defined(_HAVE_LONG_DOUBLE) +union __ldmath +{ + long double ld; + __ULong i[4]; +}; +#endif + +/* Natural log of 2 */ +#define _M_LN2 0.693147180559945309417 + +#if __GNUC_PREREQ (3, 3) + /* gcc >= 3.3 implicitly defines builtins for HUGE_VALx values. */ + +# ifndef HUGE_VAL +# define HUGE_VAL (__builtin_huge_val()) +# endif + +# ifndef HUGE_VALF +# define HUGE_VALF (__builtin_huge_valf()) +# endif + +# ifndef HUGE_VALL +# define HUGE_VALL (__builtin_huge_vall()) +# endif + +# ifndef INFINITY +# define INFINITY (__builtin_inff()) +# endif + +# ifndef NAN +# define NAN (__builtin_nanf("")) +# endif + +#else /* !gcc >= 3.3 */ + + /* No builtins. Use fixed defines instead. (All 3 HUGE plus the INFINITY + * and NAN macros are required to be constant expressions. Using a variable-- + * even a static const--does not meet this requirement, as it cannot be + * evaluated at translation time.) + * The infinities are done using numbers that are far in excess of + * something that would be expected to be encountered in a floating-point + * implementation. (A more certain way uses values from float.h, but that is + * avoided because system includes are not supposed to include each other.) + * This method might produce warnings from some compilers. (It does in + * newer GCCs, but not for ones that would hit this #else.) If this happens, + * please report details to the Newlib mailing list. */ + + #ifndef HUGE_VAL + #define HUGE_VAL (1.0e999999999) + #endif + + #ifndef HUGE_VALF + #define HUGE_VALF (1.0e999999999F) + #endif + + #if !defined(HUGE_VALL) && defined(_HAVE_LONG_DOUBLE) + #define HUGE_VALL (1.0e999999999L) + #endif + + #if !defined(INFINITY) + #define INFINITY (HUGE_VALF) + #endif + + #if !defined(NAN) + #if defined(__GNUC__) && defined(__cplusplus) + /* Exception: older g++ versions warn about the divide by 0 used in the + * normal case (even though older gccs do not). This trick suppresses the + * warning, but causes errors for plain gcc, so is only used in the one + * special case. */ + static const union { __ULong __i[1]; float __d; } __Nanf = {0x7FC00000}; + #define NAN (__Nanf.__d) + #else + #define NAN (0.0F/0.0F) + #endif + #endif + +#endif /* !gcc >= 3.3 */ + +/* Reentrant ANSI C functions. */ + +#ifndef __math_68881 +extern double atan _PARAMS((double)); +extern double cos _PARAMS((double)); +extern double sin _PARAMS((double)); +extern double tan _PARAMS((double)); +extern double tanh _PARAMS((double)); +extern double frexp _PARAMS((double, int *)); +extern double modf _PARAMS((double, double *)); +extern double ceil _PARAMS((double)); +extern double fabs _PARAMS((double)); +extern double floor _PARAMS((double)); +#endif /* ! defined (__math_68881) */ + +/* Non reentrant ANSI C functions. */ + +#ifndef _REENT_ONLY +#ifndef __math_68881 +extern double acos _PARAMS((double)); +extern double asin _PARAMS((double)); +extern double atan2 _PARAMS((double, double)); +extern double cosh _PARAMS((double)); +extern double sinh _PARAMS((double)); +extern double exp _PARAMS((double)); +extern double ldexp _PARAMS((double, int)); +extern double log _PARAMS((double)); +extern double log10 _PARAMS((double)); +extern double pow _PARAMS((double, double)); +extern double sqrt _PARAMS((double)); +extern double fmod _PARAMS((double, double)); +#endif /* ! defined (__math_68881) */ +#endif /* ! defined (_REENT_ONLY) */ + +#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) + +/* ISO C99 types and macros. */ + +/* FIXME: FLT_EVAL_METHOD should somehow be gotten from float.h (which is hard, + * considering that the standard says the includes it defines should not + * include other includes that it defines) and that value used. (This can be + * solved, but autoconf has a bug which makes the solution more difficult, so + * it has been skipped for now.) */ +#if !defined(FLT_EVAL_METHOD) && defined(__FLT_EVAL_METHOD__) + #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ + #define __TMP_FLT_EVAL_METHOD +#endif /* FLT_EVAL_METHOD */ +#if defined FLT_EVAL_METHOD + #if FLT_EVAL_METHOD == 0 + typedef float float_t; + typedef double double_t; + #elif FLT_EVAL_METHOD == 1 + typedef double float_t; + typedef double double_t; + #elif FLT_EVAL_METHOD == 2 + typedef long double float_t; + typedef long double double_t; + #else + /* Implementation-defined. Assume float_t and double_t have been + * defined previously for this configuration (e.g. config.h). */ + #endif +#else + /* Assume basic definitions. */ + typedef float float_t; + typedef double double_t; +#endif +#if defined(__TMP_FLT_EVAL_METHOD) + #undef FLT_EVAL_METHOD +#endif + +#define FP_NAN 0 +#define FP_INFINITE 1 +#define FP_ZERO 2 +#define FP_SUBNORMAL 3 +#define FP_NORMAL 4 + +#ifndef FP_ILOGB0 +# define FP_ILOGB0 (-INT_MAX) +#endif +#ifndef FP_ILOGBNAN +# define FP_ILOGBNAN INT_MAX +#endif + +#ifndef MATH_ERRNO +# define MATH_ERRNO 1 +#endif +#ifndef MATH_ERREXCEPT +# define MATH_ERREXCEPT 2 +#endif +#ifndef math_errhandling +# define math_errhandling MATH_ERRNO +#endif + +extern int __isinff (float x); +extern int __isinfd (double x); +extern int __isnanf (float x); +extern int __isnand (double x); +extern int __fpclassifyf (float x); +extern int __fpclassifyd (double x); +extern int __signbitf (float x); +extern int __signbitd (double x); + +#define fpclassify(__x) \ + ((sizeof(__x) == sizeof(float)) ? __fpclassifyf(__x) : \ + __fpclassifyd(__x)) + +#ifndef isfinite + #define isfinite(__y) \ + (__extension__ ({int __cy = fpclassify(__y); \ + __cy != FP_INFINITE && __cy != FP_NAN;})) +#endif + +/* Note: isinf and isnan were once functions in newlib that took double + * arguments. C99 specifies that these names are reserved for macros + * supporting multiple floating point types. Thus, they are + * now defined as macros. Implementations of the old functions + * taking double arguments still exist for compatibility purposes + * (prototypes for them are in ). */ +#ifndef isinf + #define isinf(y) (fpclassify(y) == FP_INFINITE) +#endif + +#ifndef isnan + #define isnan(y) (fpclassify(y) == FP_NAN) +#endif + +#define isnormal(y) (fpclassify(y) == FP_NORMAL) +#define signbit(__x) \ + ((sizeof(__x) == sizeof(float)) ? __signbitf(__x) : \ + __signbitd(__x)) + +#define isgreater(x,y) \ + (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ + !isunordered(__x,__y) && (__x > __y);})) +#define isgreaterequal(x,y) \ + (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ + !isunordered(__x,__y) && (__x >= __y);})) +#define isless(x,y) \ + (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ + !isunordered(__x,__y) && (__x < __y);})) +#define islessequal(x,y) \ + (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ + !isunordered(__x,__y) && (__x <= __y);})) +#define islessgreater(x,y) \ + (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ + !isunordered(__x,__y) && (__x < __y || __x > __y);})) + +#define isunordered(a,b) \ + (__extension__ ({__typeof__(a) __a = (a); __typeof__(b) __b = (b); \ + fpclassify(__a) == FP_NAN || fpclassify(__b) == FP_NAN;})) + +/* Non ANSI double precision functions. */ + +extern double infinity _PARAMS((void)); +extern double nan _PARAMS((const char *)); +extern int finite _PARAMS((double)); +extern double copysign _PARAMS((double, double)); +extern double logb _PARAMS((double)); +extern int ilogb _PARAMS((double)); + +extern double asinh _PARAMS((double)); +extern double cbrt _PARAMS((double)); +extern double nextafter _PARAMS((double, double)); +extern double rint _PARAMS((double)); +extern double scalbn _PARAMS((double, int)); + +extern double exp2 _PARAMS((double)); +extern double scalbln _PARAMS((double, long int)); +extern double tgamma _PARAMS((double)); +extern double nearbyint _PARAMS((double)); +extern long int lrint _PARAMS((double)); +extern long long int llrint _PARAMS((double)); +extern double round _PARAMS((double)); +extern long int lround _PARAMS((double)); +extern long long int llround _PARAMS((double)); +extern double trunc _PARAMS((double)); +extern double remquo _PARAMS((double, double, int *)); +extern double fdim _PARAMS((double, double)); +extern double fmax _PARAMS((double, double)); +extern double fmin _PARAMS((double, double)); +extern double fma _PARAMS((double, double, double)); + +#ifndef __math_68881 +extern double log1p _PARAMS((double)); +extern double expm1 _PARAMS((double)); +#endif /* ! defined (__math_68881) */ + +#ifndef _REENT_ONLY +extern double acosh _PARAMS((double)); +extern double atanh _PARAMS((double)); +extern double remainder _PARAMS((double, double)); +extern double gamma _PARAMS((double)); +extern double lgamma _PARAMS((double)); +extern double erf _PARAMS((double)); +extern double erfc _PARAMS((double)); +extern double log2 _PARAMS((double)); +#if !defined(__cplusplus) +#define log2(x) (log (x) / _M_LN2) +#endif + +#ifndef __math_68881 +extern double hypot _PARAMS((double, double)); +#endif + +#endif /* ! defined (_REENT_ONLY) */ + +/* Single precision versions of ANSI functions. */ + +extern float atanf _PARAMS((float)); +extern float cosf _PARAMS((float)); +extern float sinf _PARAMS((float)); +extern float tanf _PARAMS((float)); +extern float tanhf _PARAMS((float)); +extern float frexpf _PARAMS((float, int *)); +extern float modff _PARAMS((float, float *)); +extern float ceilf _PARAMS((float)); +extern float fabsf _PARAMS((float)); +extern float floorf _PARAMS((float)); + +#ifndef _REENT_ONLY +extern float acosf _PARAMS((float)); +extern float asinf _PARAMS((float)); +extern float atan2f _PARAMS((float, float)); +extern float coshf _PARAMS((float)); +extern float sinhf _PARAMS((float)); +extern float expf _PARAMS((float)); +extern float ldexpf _PARAMS((float, int)); +extern float logf _PARAMS((float)); +extern float log10f _PARAMS((float)); +extern float powf _PARAMS((float, float)); +extern float sqrtf _PARAMS((float)); +extern float fmodf _PARAMS((float, float)); +#endif /* ! defined (_REENT_ONLY) */ + +/* Other single precision functions. */ + +extern float exp2f _PARAMS((float)); +extern float scalblnf _PARAMS((float, long int)); +extern float tgammaf _PARAMS((float)); +extern float nearbyintf _PARAMS((float)); +extern long int lrintf _PARAMS((float)); +extern long long int llrintf _PARAMS((float)); +extern float roundf _PARAMS((float)); +extern long int lroundf _PARAMS((float)); +extern long long int llroundf _PARAMS((float)); +extern float truncf _PARAMS((float)); +extern float remquof _PARAMS((float, float, int *)); +extern float fdimf _PARAMS((float, float)); +extern float fmaxf _PARAMS((float, float)); +extern float fminf _PARAMS((float, float)); +extern float fmaf _PARAMS((float, float, float)); + +extern float infinityf _PARAMS((void)); +extern float nanf _PARAMS((const char *)); +extern int finitef _PARAMS((float)); +extern float copysignf _PARAMS((float, float)); +extern float logbf _PARAMS((float)); +extern int ilogbf _PARAMS((float)); + +extern float asinhf _PARAMS((float)); +extern float cbrtf _PARAMS((float)); +extern float nextafterf _PARAMS((float, float)); +extern float rintf _PARAMS((float)); +extern float scalbnf _PARAMS((float, int)); +extern float log1pf _PARAMS((float)); +extern float expm1f _PARAMS((float)); + +#ifndef _REENT_ONLY +extern float acoshf _PARAMS((float)); +extern float atanhf _PARAMS((float)); +extern float remainderf _PARAMS((float, float)); +extern float gammaf _PARAMS((float)); +extern float lgammaf _PARAMS((float)); +extern float erff _PARAMS((float)); +extern float erfcf _PARAMS((float)); +extern float log2f _PARAMS((float)); +extern float hypotf _PARAMS((float, float)); +#endif /* ! defined (_REENT_ONLY) */ + +/* On platforms where long double equals double. */ +#ifdef _LDBL_EQ_DBL +/* Reentrant ANSI C functions. */ +#ifndef __math_68881 +extern long double atanl _PARAMS((long double)); +extern long double cosl _PARAMS((long double)); +extern long double sinl _PARAMS((long double)); +extern long double tanl _PARAMS((long double)); +extern long double tanhl _PARAMS((long double)); +extern long double frexpl _PARAMS((long double, int *)); +extern long double modfl _PARAMS((long double, long double *)); +extern long double ceill _PARAMS((long double)); +extern long double fabsl _PARAMS((long double)); +extern long double floorl _PARAMS((long double)); +extern long double log1pl _PARAMS((long double)); +extern long double expm1l _PARAMS((long double)); +#endif /* ! defined (__math_68881) */ +/* Non reentrant ANSI C functions. */ +#ifndef _REENT_ONLY +#ifndef __math_68881 +extern long double acosl _PARAMS((long double)); +extern long double asinl _PARAMS((long double)); +extern long double atan2l _PARAMS((long double, long double)); +extern long double coshl _PARAMS((long double)); +extern long double sinhl _PARAMS((long double)); +extern long double expl _PARAMS((long double)); +extern long double ldexpl _PARAMS((long double, int)); +extern long double logl _PARAMS((long double)); +extern long double log10l _PARAMS((long double)); +extern long double powl _PARAMS((long double, long double)); +extern long double sqrtl _PARAMS((long double)); +extern long double fmodl _PARAMS((long double, long double)); +extern long double hypotl _PARAMS((long double, long double)); +#endif /* ! defined (__math_68881) */ +#endif /* ! defined (_REENT_ONLY) */ +extern long double copysignl _PARAMS((long double, long double)); +extern long double nanl _PARAMS((const char *)); +extern int ilogbl _PARAMS((long double)); +extern long double asinhl _PARAMS((long double)); +extern long double cbrtl _PARAMS((long double)); +extern long double nextafterl _PARAMS((long double, long double)); +extern float nexttowardf _PARAMS((float, long double)); +extern double nexttoward _PARAMS((double, long double)); +extern long double nexttowardl _PARAMS((long double, long double)); +extern long double logbl _PARAMS((long double)); +extern long double log2l _PARAMS((long double)); +extern long double rintl _PARAMS((long double)); +extern long double scalbnl _PARAMS((long double, int)); +extern long double exp2l _PARAMS((long double)); +extern long double scalblnl _PARAMS((long double, long)); +extern long double tgammal _PARAMS((long double)); +extern long double nearbyintl _PARAMS((long double)); +extern long int lrintl _PARAMS((long double)); +extern long long int llrintl _PARAMS((long double)); +extern long double roundl _PARAMS((long double)); +extern long lroundl _PARAMS((long double)); +extern long long int llroundl _PARAMS((long double)); +extern long double truncl _PARAMS((long double)); +extern long double remquol _PARAMS((long double, long double, int *)); +extern long double fdiml _PARAMS((long double, long double)); +extern long double fmaxl _PARAMS((long double, long double)); +extern long double fminl _PARAMS((long double, long double)); +extern long double fmal _PARAMS((long double, long double, long double)); +#ifndef _REENT_ONLY +extern long double acoshl _PARAMS((long double)); +extern long double atanhl _PARAMS((long double)); +extern long double remainderl _PARAMS((long double, long double)); +extern long double lgammal _PARAMS((long double)); +extern long double erfl _PARAMS((long double)); +extern long double erfcl _PARAMS((long double)); +#endif /* ! defined (_REENT_ONLY) */ +#else /* !_LDBL_EQ_DBL */ +#ifdef __i386__ +/* Other long double precision functions. */ +extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE)); +extern long int lrintl _PARAMS((_LONG_DOUBLE)); +extern long long int llrintl _PARAMS((_LONG_DOUBLE)); +#endif /* __i386__ */ +#endif /* !_LDBL_EQ_DBL */ + +#endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) */ + +#if !defined (__STRICT_ANSI__) || defined(__cplusplus) + +extern double drem _PARAMS((double, double)); +extern void sincos _PARAMS((double, double *, double *)); +extern double gamma_r _PARAMS((double, int *)); +extern double lgamma_r _PARAMS((double, int *)); + +extern double y0 _PARAMS((double)); +extern double y1 _PARAMS((double)); +extern double yn _PARAMS((int, double)); +extern double j0 _PARAMS((double)); +extern double j1 _PARAMS((double)); +extern double jn _PARAMS((int, double)); + +extern float dremf _PARAMS((float, float)); +extern void sincosf _PARAMS((float, float *, float *)); +extern float gammaf_r _PARAMS((float, int *)); +extern float lgammaf_r _PARAMS((float, int *)); + +extern float y0f _PARAMS((float)); +extern float y1f _PARAMS((float)); +extern float ynf _PARAMS((int, float)); +extern float j0f _PARAMS((float)); +extern float j1f _PARAMS((float)); +extern float jnf _PARAMS((int, float)); + +/* GNU extensions */ +# ifndef exp10 +extern double exp10 _PARAMS((double)); +# endif +# ifndef pow10 +extern double pow10 _PARAMS((double)); +# endif +# ifndef exp10f +extern float exp10f _PARAMS((float)); +# endif +# ifndef pow10f +extern float pow10f _PARAMS((float)); +# endif + +#endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) */ + +#ifndef __STRICT_ANSI__ + +/* The gamma functions use a global variable, signgam. */ +#ifndef _REENT_ONLY +#define signgam (*__signgam()) +extern int *__signgam _PARAMS((void)); +#endif /* ! defined (_REENT_ONLY) */ + +#define __signgam_r(ptr) _REENT_SIGNGAM(ptr) + +/* The exception structure passed to the matherr routine. */ +/* We have a problem when using C++ since `exception' is a reserved + name in C++. */ +#ifdef __cplusplus +struct __exception +#else +struct exception +#endif +{ + int type; + char *name; + double arg1; + double arg2; + double retval; + int err; +}; + +#ifdef __cplusplus +extern int matherr _PARAMS((struct __exception *e)); +#else +extern int matherr _PARAMS((struct exception *e)); +#endif + +/* Values for the type field of struct exception. */ + +#define DOMAIN 1 +#define SING 2 +#define OVERFLOW 3 +#define UNDERFLOW 4 +#define TLOSS 5 +#define PLOSS 6 + +#endif /* ! defined (__STRICT_ANSI__) */ + +/* Useful constants. */ + +#if !defined(__STRICT_ANSI__) || ((_XOPEN_SOURCE - 0) >= 500) + +#define MAXFLOAT 3.40282347e+38F + +#define M_E 2.7182818284590452354 +#define M_LOG2E 1.4426950408889634074 +#define M_LOG10E 0.43429448190325182765 +#define M_LN2 _M_LN2 +#define M_LN10 2.30258509299404568402 +#define M_PI 3.14159265358979323846 +#define M_PI_2 1.57079632679489661923 +#define M_PI_4 0.78539816339744830962 +#define M_1_PI 0.31830988618379067154 +#define M_2_PI 0.63661977236758134308 +#define M_2_SQRTPI 1.12837916709551257390 +#define M_SQRT2 1.41421356237309504880 +#define M_SQRT1_2 0.70710678118654752440 + +#endif + +#ifndef __STRICT_ANSI__ + +#define M_TWOPI (M_PI * 2.0) +#define M_3PI_4 2.3561944901923448370E0 +#define M_SQRTPI 1.77245385090551602792981 +#define M_LN2LO 1.9082149292705877000E-10 +#define M_LN2HI 6.9314718036912381649E-1 +#define M_SQRT3 1.73205080756887719000 +#define M_IVLN10 0.43429448190325182765 /* 1 / log(10) */ +#define M_LOG2_E _M_LN2 +#define M_INVLN2 1.4426950408889633870E0 /* 1 / log(2) */ + +/* Global control over fdlibm error handling. */ + +enum __fdlibm_version +{ + __fdlibm_ieee = -1, + __fdlibm_svid, + __fdlibm_xopen, + __fdlibm_posix +}; + +#define _LIB_VERSION_TYPE enum __fdlibm_version +#define _LIB_VERSION __fdlib_version + +extern __IMPORT _LIB_VERSION_TYPE _LIB_VERSION; + +#define _IEEE_ __fdlibm_ieee +#define _SVID_ __fdlibm_svid +#define _XOPEN_ __fdlibm_xopen +#define _POSIX_ __fdlibm_posix + +#endif /* ! defined (__STRICT_ANSI__) */ + +_END_STD_C + +#ifdef __FAST_MATH__ +#include +#endif + +#endif /* _MATH_H_ */ diff --git a/tools/sdk/include/newlib/newlib.h b/tools/sdk/include/newlib/newlib.h new file mode 100644 index 00000000..e9bf5664 --- /dev/null +++ b/tools/sdk/include/newlib/newlib.h @@ -0,0 +1,201 @@ +/* newlib.h. Generated from newlib.hin by configure. */ +/* newlib.hin. Manually edited from the output of autoheader to + remove all PACKAGE_ macros which will collide with any user + package using newlib header files and having its own package name, + version, etc... */ +#ifndef __NEWLIB_H__ + +#define __NEWLIB_H__ 1 + +/* EL/IX level */ +/* #undef _ELIX_LEVEL */ + +/* Newlib version */ +#define _NEWLIB_VERSION "2.2.0" + +/* C99 formats support (such as %a, %zu, ...) in IO functions like + * printf/scanf enabled */ +/* #undef _WANT_IO_C99_FORMATS */ + +/* long long type support in IO functions like printf/scanf enabled */ +/* #undef _WANT_IO_LONG_LONG */ + +/* Register application finalization function using atexit. */ +/* #undef _WANT_REGISTER_FINI */ + +/* long double type support in IO functions like printf/scanf enabled */ +/* #undef _WANT_IO_LONG_DOUBLE */ + +/* Positional argument support in printf functions enabled. */ +/* #undef _WANT_IO_POS_ARGS */ + +/* Optional reentrant struct support. Used mostly on platforms with + very restricted storage. */ +#define _WANT_REENT_SMALL 1 + +/* Multibyte supported */ +/* #undef _MB_CAPABLE */ + +/* MB_LEN_MAX */ +#define _MB_LEN_MAX 1 + +/* ICONV enabled */ +/* #undef _ICONV_ENABLED */ + +/* Enable ICONV external CCS files loading capabilities */ +/* #undef _ICONV_ENABLE_EXTERNAL_CCS */ + +/* Define if the linker supports .preinit_array/.init_array/.fini_array + * sections. */ +#define HAVE_INITFINI_ARRAY 1 + +/* True if atexit() may dynamically allocate space for cleanup + functions. */ +#define _ATEXIT_DYNAMIC_ALLOC 1 + +/* True if long double supported. */ +#define _HAVE_LONG_DOUBLE 1 + +/* Define if compiler supports -fno-tree-loop-distribute-patterns. */ +#define _HAVE_CC_INHIBIT_LOOP_TO_LIBCALL 1 + +/* True if long double supported and it is equal to double. */ +#define _LDBL_EQ_DBL 1 + +/* Define if uintptr_t is unsigned long on this architecture */ +/* #undef _UINTPTR_EQ_ULONG */ + +/* Define if uintptr_t is unsigned long long on this architecture */ +/* #undef _UINTPTR_EQ_ULONGLONG */ + +/* Define if ivo supported in streamio. */ +#define _FVWRITE_IN_STREAMIO 1 + +/* Define if fseek functions support seek optimization. */ +#define _FSEEK_OPTIMIZATION 1 + +/* Define if wide char orientation is supported. */ +#define _WIDE_ORIENT 1 + +/* Define if unbuffered stream file optimization is supported. */ +#define _UNBUF_STREAM_OPT 1 + +/* Define if lite version of exit supported. */ +/* #undef _LITE_EXIT */ + +/* Define if declare atexit data as global. */ +/* #undef _REENT_GLOBAL_ATEXIT */ + +/* Define if small footprint nano-formatted-IO implementation used. */ +#define _NANO_FORMATTED_IO 1 + +/* + * Iconv encodings enabled ("to" direction) + */ +/* #undef _ICONV_TO_ENCODING_BIG5 */ +/* #undef _ICONV_TO_ENCODING_CP775 */ +/* #undef _ICONV_TO_ENCODING_CP850 */ +/* #undef _ICONV_TO_ENCODING_CP852 */ +/* #undef _ICONV_TO_ENCODING_CP855 */ +/* #undef _ICONV_TO_ENCODING_CP866 */ +/* #undef _ICONV_TO_ENCODING_EUC_JP */ +/* #undef _ICONV_TO_ENCODING_EUC_TW */ +/* #undef _ICONV_TO_ENCODING_EUC_KR */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_1 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_10 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_11 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_13 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_14 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_15 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_2 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_3 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_4 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_5 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_6 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_7 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_8 */ +/* #undef _ICONV_TO_ENCODING_ISO_8859_9 */ +/* #undef _ICONV_TO_ENCODING_ISO_IR_111 */ +/* #undef _ICONV_TO_ENCODING_KOI8_R */ +/* #undef _ICONV_TO_ENCODING_KOI8_RU */ +/* #undef _ICONV_TO_ENCODING_KOI8_U */ +/* #undef _ICONV_TO_ENCODING_KOI8_UNI */ +/* #undef _ICONV_TO_ENCODING_UCS_2 */ +/* #undef _ICONV_TO_ENCODING_UCS_2_INTERNAL */ +/* #undef _ICONV_TO_ENCODING_UCS_2BE */ +/* #undef _ICONV_TO_ENCODING_UCS_2LE */ +/* #undef _ICONV_TO_ENCODING_UCS_4 */ +/* #undef _ICONV_TO_ENCODING_UCS_4_INTERNAL */ +/* #undef _ICONV_TO_ENCODING_UCS_4BE */ +/* #undef _ICONV_TO_ENCODING_UCS_4LE */ +/* #undef _ICONV_TO_ENCODING_US_ASCII */ +/* #undef _ICONV_TO_ENCODING_UTF_16 */ +/* #undef _ICONV_TO_ENCODING_UTF_16BE */ +/* #undef _ICONV_TO_ENCODING_UTF_16LE */ +/* #undef _ICONV_TO_ENCODING_UTF_8 */ +/* #undef _ICONV_TO_ENCODING_WIN_1250 */ +/* #undef _ICONV_TO_ENCODING_WIN_1251 */ +/* #undef _ICONV_TO_ENCODING_WIN_1252 */ +/* #undef _ICONV_TO_ENCODING_WIN_1253 */ +/* #undef _ICONV_TO_ENCODING_WIN_1254 */ +/* #undef _ICONV_TO_ENCODING_WIN_1255 */ +/* #undef _ICONV_TO_ENCODING_WIN_1256 */ +/* #undef _ICONV_TO_ENCODING_WIN_1257 */ +/* #undef _ICONV_TO_ENCODING_WIN_1258 */ + +/* + * Iconv encodings enabled ("from" direction) + */ +/* #undef _ICONV_FROM_ENCODING_BIG5 */ +/* #undef _ICONV_FROM_ENCODING_CP775 */ +/* #undef _ICONV_FROM_ENCODING_CP850 */ +/* #undef _ICONV_FROM_ENCODING_CP852 */ +/* #undef _ICONV_FROM_ENCODING_CP855 */ +/* #undef _ICONV_FROM_ENCODING_CP866 */ +/* #undef _ICONV_FROM_ENCODING_EUC_JP */ +/* #undef _ICONV_FROM_ENCODING_EUC_TW */ +/* #undef _ICONV_FROM_ENCODING_EUC_KR */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_1 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_10 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_11 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_13 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_14 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_15 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_2 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_3 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_4 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_5 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_6 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_7 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_8 */ +/* #undef _ICONV_FROM_ENCODING_ISO_8859_9 */ +/* #undef _ICONV_FROM_ENCODING_ISO_IR_111 */ +/* #undef _ICONV_FROM_ENCODING_KOI8_R */ +/* #undef _ICONV_FROM_ENCODING_KOI8_RU */ +/* #undef _ICONV_FROM_ENCODING_KOI8_U */ +/* #undef _ICONV_FROM_ENCODING_KOI8_UNI */ +/* #undef _ICONV_FROM_ENCODING_UCS_2 */ +/* #undef _ICONV_FROM_ENCODING_UCS_2_INTERNAL */ +/* #undef _ICONV_FROM_ENCODING_UCS_2BE */ +/* #undef _ICONV_FROM_ENCODING_UCS_2LE */ +/* #undef _ICONV_FROM_ENCODING_UCS_4 */ +/* #undef _ICONV_FROM_ENCODING_UCS_4_INTERNAL */ +/* #undef _ICONV_FROM_ENCODING_UCS_4BE */ +/* #undef _ICONV_FROM_ENCODING_UCS_4LE */ +/* #undef _ICONV_FROM_ENCODING_US_ASCII */ +/* #undef _ICONV_FROM_ENCODING_UTF_16 */ +/* #undef _ICONV_FROM_ENCODING_UTF_16BE */ +/* #undef _ICONV_FROM_ENCODING_UTF_16LE */ +/* #undef _ICONV_FROM_ENCODING_UTF_8 */ +/* #undef _ICONV_FROM_ENCODING_WIN_1250 */ +/* #undef _ICONV_FROM_ENCODING_WIN_1251 */ +/* #undef _ICONV_FROM_ENCODING_WIN_1252 */ +/* #undef _ICONV_FROM_ENCODING_WIN_1253 */ +/* #undef _ICONV_FROM_ENCODING_WIN_1254 */ +/* #undef _ICONV_FROM_ENCODING_WIN_1255 */ +/* #undef _ICONV_FROM_ENCODING_WIN_1256 */ +/* #undef _ICONV_FROM_ENCODING_WIN_1257 */ +/* #undef _ICONV_FROM_ENCODING_WIN_1258 */ + +#endif /* !__NEWLIB_H__ */ + diff --git a/tools/sdk/include/newlib/paths.h b/tools/sdk/include/newlib/paths.h new file mode 100644 index 00000000..b1c70f58 --- /dev/null +++ b/tools/sdk/include/newlib/paths.h @@ -0,0 +1,9 @@ +#ifndef _PATHS_H_ +#define _PATHS_H_ + +#define _PATH_DEV "/dev/" +#define _PATH_DEVNULL "/dev/null" +#define _PATH_DEVZERO "/dev/zero" +#define _PATH_BSHELL "/bin/sh" + +#endif /* _PATHS_H_ */ diff --git a/tools/sdk/include/newlib/pthread.h b/tools/sdk/include/newlib/pthread.h new file mode 100644 index 00000000..db1f9c1c --- /dev/null +++ b/tools/sdk/include/newlib/pthread.h @@ -0,0 +1,431 @@ +/* pthread.h + * + * Written by Joel Sherrill . + * + * COPYRIGHT (c) 1989-2013. + * On-Line Applications Research Corporation (OAR). + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION + * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS + * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + * $Id$ + */ + +#ifndef __PTHREAD_h +#define __PTHREAD_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#if defined(_POSIX_THREADS) + +#include +#include +#include +#include + +struct _pthread_cleanup_context { + void (*_routine)(void *); + void *_arg; + int _canceltype; + struct _pthread_cleanup_context *_previous; +}; + +/* Register Fork Handlers */ +int _EXFUN(pthread_atfork,(void (*prepare)(void), void (*parent)(void), + void (*child)(void))); + +/* Mutex Initialization Attributes, P1003.1c/Draft 10, p. 81 */ + +int _EXFUN(pthread_mutexattr_init, (pthread_mutexattr_t *__attr)); +int _EXFUN(pthread_mutexattr_destroy, (pthread_mutexattr_t *__attr)); +int _EXFUN(pthread_mutexattr_getpshared, + (_CONST pthread_mutexattr_t *__attr, int *__pshared)); +int _EXFUN(pthread_mutexattr_setpshared, + (pthread_mutexattr_t *__attr, int __pshared)); + +#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) + +/* Single UNIX Specification 2 Mutex Attributes types */ + +int _EXFUN(pthread_mutexattr_gettype, + (_CONST pthread_mutexattr_t *__attr, int *__kind)); +int _EXFUN(pthread_mutexattr_settype, + (pthread_mutexattr_t *__attr, int __kind)); + +#endif + +/* Initializing and Destroying a Mutex, P1003.1c/Draft 10, p. 87 */ + +int _EXFUN(pthread_mutex_init, + (pthread_mutex_t *__mutex, _CONST pthread_mutexattr_t *__attr)); +int _EXFUN(pthread_mutex_destroy, (pthread_mutex_t *__mutex)); + +/* This is used to statically initialize a pthread_mutex_t. Example: + + pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + */ + +#define PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF) + +/* Locking and Unlocking a Mutex, P1003.1c/Draft 10, p. 93 + NOTE: P1003.4b/D8 adds pthread_mutex_timedlock(), p. 29 */ + +int _EXFUN(pthread_mutex_lock, (pthread_mutex_t *__mutex)); +int _EXFUN(pthread_mutex_trylock, (pthread_mutex_t *__mutex)); +int _EXFUN(pthread_mutex_unlock, (pthread_mutex_t *__mutex)); + +#if defined(_POSIX_TIMEOUTS) + +int _EXFUN(pthread_mutex_timedlock, + (pthread_mutex_t *__mutex, _CONST struct timespec *__timeout)); + +#endif /* _POSIX_TIMEOUTS */ + +/* Condition Variable Initialization Attributes, P1003.1c/Draft 10, p. 96 */ + +int _EXFUN(pthread_condattr_init, (pthread_condattr_t *__attr)); +int _EXFUN(pthread_condattr_destroy, (pthread_condattr_t *__attr)); +int _EXFUN(pthread_condattr_getpshared, + (_CONST pthread_condattr_t *__attr, int *__pshared)); +int _EXFUN(pthread_condattr_setpshared, + (pthread_condattr_t *__attr, int __pshared)); + +/* Initializing and Destroying a Condition Variable, P1003.1c/Draft 10, p. 87 */ + +int _EXFUN(pthread_cond_init, + (pthread_cond_t *__cond, _CONST pthread_condattr_t *__attr)); +int _EXFUN(pthread_cond_destroy, (pthread_cond_t *__mutex)); + +/* This is used to statically initialize a pthread_cond_t. Example: + + pthread_cond_t cond = PTHREAD_COND_INITIALIZER; + */ + +#define PTHREAD_COND_INITIALIZER ((pthread_cond_t) 0xFFFFFFFF) + +/* Broadcasting and Signaling a Condition, P1003.1c/Draft 10, p. 101 */ + +int _EXFUN(pthread_cond_signal, (pthread_cond_t *__cond)); +int _EXFUN(pthread_cond_broadcast, (pthread_cond_t *__cond)); + +/* Waiting on a Condition, P1003.1c/Draft 10, p. 105 */ + +int _EXFUN(pthread_cond_wait, + (pthread_cond_t *__cond, pthread_mutex_t *__mutex)); + +int _EXFUN(pthread_cond_timedwait, + (pthread_cond_t *__cond, pthread_mutex_t *__mutex, + _CONST struct timespec *__abstime)); + +#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) + +/* Thread Creation Scheduling Attributes, P1003.1c/Draft 10, p. 120 */ + +int _EXFUN(pthread_attr_setscope, + (pthread_attr_t *__attr, int __contentionscope)); +int _EXFUN(pthread_attr_getscope, + (_CONST pthread_attr_t *__attr, int *__contentionscope)); +int _EXFUN(pthread_attr_setinheritsched, + (pthread_attr_t *__attr, int __inheritsched)); +int _EXFUN(pthread_attr_getinheritsched, + (_CONST pthread_attr_t *__attr, int *__inheritsched)); +int _EXFUN(pthread_attr_setschedpolicy, + (pthread_attr_t *__attr, int __policy)); +int _EXFUN(pthread_attr_getschedpolicy, + (_CONST pthread_attr_t *__attr, int *__policy)); + +#endif /* defined(_POSIX_THREAD_PRIORITY_SCHEDULING) */ + +int _EXFUN(pthread_attr_setschedparam, + (pthread_attr_t *__attr, _CONST struct sched_param *__param)); +int _EXFUN(pthread_attr_getschedparam, + (_CONST pthread_attr_t *__attr, struct sched_param *__param)); + +#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) + +/* Dynamic Thread Scheduling Parameters Access, P1003.1c/Draft 10, p. 124 */ + +int _EXFUN(pthread_getschedparam, + (pthread_t __pthread, int *__policy, struct sched_param *__param)); +int _EXFUN(pthread_setschedparam, + (pthread_t __pthread, int __policy, struct sched_param *__param)); + +#endif /* defined(_POSIX_THREAD_PRIORITY_SCHEDULING) */ + +#if defined(_POSIX_THREAD_PRIO_INHERIT) || defined(_POSIX_THREAD_PRIO_PROTECT) + +/* Mutex Initialization Scheduling Attributes, P1003.1c/Draft 10, p. 128 */ + +int _EXFUN(pthread_mutexattr_setprotocol, + (pthread_mutexattr_t *__attr, int __protocol)); +int _EXFUN(pthread_mutexattr_getprotocol, + (_CONST pthread_mutexattr_t *__attr, int *__protocol)); +int _EXFUN(pthread_mutexattr_setprioceiling, + (pthread_mutexattr_t *__attr, int __prioceiling)); +int _EXFUN(pthread_mutexattr_getprioceiling, + (_CONST pthread_mutexattr_t *__attr, int *__prioceiling)); + +#endif /* _POSIX_THREAD_PRIO_INHERIT || _POSIX_THREAD_PRIO_PROTECT */ + +#if defined(_POSIX_THREAD_PRIO_PROTECT) + +/* Change the Priority Ceiling of a Mutex, P1003.1c/Draft 10, p. 131 */ + +int _EXFUN(pthread_mutex_setprioceiling, + (pthread_mutex_t *__mutex, int __prioceiling, int *__old_ceiling)); +int _EXFUN(pthread_mutex_getprioceiling, + (pthread_mutex_t *__mutex, int *__prioceiling)); + +#endif /* _POSIX_THREAD_PRIO_PROTECT */ + +/* Thread Creation Attributes, P1003.1c/Draft 10, p, 140 */ + +int _EXFUN(pthread_attr_init, (pthread_attr_t *__attr)); +int _EXFUN(pthread_attr_destroy, (pthread_attr_t *__attr)); +int _EXFUN(pthread_attr_setstack, (pthread_attr_t *attr, + void *__stackaddr, size_t __stacksize)); +int _EXFUN(pthread_attr_getstack, (_CONST pthread_attr_t *attr, + void **__stackaddr, size_t *__stacksize)); +int _EXFUN(pthread_attr_getstacksize, + (_CONST pthread_attr_t *__attr, size_t *__stacksize)); +int _EXFUN(pthread_attr_setstacksize, + (pthread_attr_t *__attr, size_t __stacksize)); +int _EXFUN(pthread_attr_getstackaddr, + (_CONST pthread_attr_t *__attr, void **__stackaddr)); +int _EXFUN(pthread_attr_setstackaddr, + (pthread_attr_t *__attr, void *__stackaddr)); +int _EXFUN(pthread_attr_getdetachstate, + (_CONST pthread_attr_t *__attr, int *__detachstate)); +int _EXFUN(pthread_attr_setdetachstate, + (pthread_attr_t *__attr, int __detachstate)); +int _EXFUN(pthread_attr_getguardsize, + (_CONST pthread_attr_t *__attr, size_t *__guardsize)); +int _EXFUN(pthread_attr_setguardsize, + (pthread_attr_t *__attr, size_t __guardsize)); + +/* POSIX thread APIs beyond the POSIX standard but provided + * in GNU/Linux. They may be provided by other OSes for + * compatibility. + */ +#if defined(__GNU_VISIBLE) +#if defined(__rtems__) +int _EXFUN(pthread_attr_setaffinity_np, + (pthread_attr_t *__attr, size_t __cpusetsize, + const cpu_set_t *__cpuset)); +int _EXFUN(pthread_attr_getaffinity_np, + (const pthread_attr_t *__attr, size_t __cpusetsize, + cpu_set_t *__cpuset)); + +int _EXFUN(pthread_setaffinity_np, + (pthread_t __id, size_t __cpusetsize, const cpu_set_t *__cpuset)); +int _EXFUN(pthread_getaffinity_np, + (const pthread_t __id, size_t __cpusetsize, cpu_set_t *__cpuset)); + +int _EXFUN(pthread_getattr_np, + (pthread_t __id, pthread_attr_t *__attr)); +#endif /* defined(__rtems__) */ +#endif /* defined(__GNU_VISIBLE) */ + +/* Thread Creation, P1003.1c/Draft 10, p. 144 */ + +int _EXFUN(pthread_create, + (pthread_t *__pthread, _CONST pthread_attr_t *__attr, + void *(*__start_routine)( void * ), void *__arg)); + +/* Wait for Thread Termination, P1003.1c/Draft 10, p. 147 */ + +int _EXFUN(pthread_join, (pthread_t __pthread, void **__value_ptr)); + +/* Detaching a Thread, P1003.1c/Draft 10, p. 149 */ + +int _EXFUN(pthread_detach, (pthread_t __pthread)); + +/* Thread Termination, p1003.1c/Draft 10, p. 150 */ + +void _EXFUN(pthread_exit, (void *__value_ptr)); + +/* Get Calling Thread's ID, p1003.1c/Draft 10, p. XXX */ + +pthread_t _EXFUN(pthread_self, (void)); + +/* Compare Thread IDs, p1003.1c/Draft 10, p. 153 */ + +int _EXFUN(pthread_equal, (pthread_t __t1, pthread_t __t2)); + +/* Dynamic Package Initialization */ + +/* This is used to statically initialize a pthread_once_t. Example: + + pthread_once_t once = PTHREAD_ONCE_INIT; + + NOTE: This is named inconsistently -- it should be INITIALIZER. */ + +#define PTHREAD_ONCE_INIT { 1, 0 } /* is initialized and not run */ + +int _EXFUN(pthread_once, + (pthread_once_t *__once_control, void (*__init_routine)(void))); + +/* Thread-Specific Data Key Create, P1003.1c/Draft 10, p. 163 */ + +int _EXFUN(pthread_key_create, + (pthread_key_t *__key, void (*__destructor)( void * ))); + +/* Thread-Specific Data Management, P1003.1c/Draft 10, p. 165 */ + +int _EXFUN(pthread_setspecific, + (pthread_key_t __key, _CONST void *__value)); +void * _EXFUN(pthread_getspecific, (pthread_key_t __key)); + +/* Thread-Specific Data Key Deletion, P1003.1c/Draft 10, p. 167 */ + +int _EXFUN(pthread_key_delete, (pthread_key_t __key)); + +/* Execution of a Thread, P1003.1c/Draft 10, p. 181 */ + +#define PTHREAD_CANCEL_ENABLE 0 +#define PTHREAD_CANCEL_DISABLE 1 + +#define PTHREAD_CANCEL_DEFERRED 0 +#define PTHREAD_CANCEL_ASYNCHRONOUS 1 + +#define PTHREAD_CANCELED ((void *) -1) + +int _EXFUN(pthread_cancel, (pthread_t __pthread)); + +/* Setting Cancelability State, P1003.1c/Draft 10, p. 183 */ + +int _EXFUN(pthread_setcancelstate, (int __state, int *__oldstate)); +int _EXFUN(pthread_setcanceltype, (int __type, int *__oldtype)); +void _EXFUN(pthread_testcancel, (void)); + +/* Establishing Cancellation Handlers, P1003.1c/Draft 10, p. 184 */ + +void _EXFUN(_pthread_cleanup_push, + (struct _pthread_cleanup_context *_context, + void (*_routine)(void *), void *_arg)); + +void _EXFUN(_pthread_cleanup_pop, + (struct _pthread_cleanup_context *_context, + int _execute)); + +/* It is intentional to open and close the scope in two different macros */ +#define pthread_cleanup_push(_routine, _arg) \ + do { \ + struct _pthread_cleanup_context _pthread_clup_ctx; \ + _pthread_cleanup_push(&_pthread_clup_ctx, (_routine), (_arg)) + +#define pthread_cleanup_pop(_execute) \ + _pthread_cleanup_pop(&_pthread_clup_ctx, (_execute)); \ + } while (0) + +#if defined(_GNU_SOURCE) +void _EXFUN(_pthread_cleanup_push_defer, + (struct _pthread_cleanup_context *_context, + void (*_routine)(void *), void *_arg)); + +void _EXFUN(_pthread_cleanup_pop_restore, + (struct _pthread_cleanup_context *_context, + int _execute)); + +/* It is intentional to open and close the scope in two different macros */ +#define pthread_cleanup_push_defer_np(_routine, _arg) \ + do { \ + struct _pthread_cleanup_context _pthread_clup_ctx; \ + _pthread_cleanup_push_defer(&_pthread_clup_ctx, (_routine), (_arg)) + +#define pthread_cleanup_pop_restore_np(_execute) \ + _pthread_cleanup_pop_restore(&_pthread_clup_ctx, (_execute)); \ + } while (0) +#endif /* defined(_GNU_SOURCE) */ + +#if defined(_POSIX_THREAD_CPUTIME) + +/* Accessing a Thread CPU-time Clock, P1003.4b/D8, p. 58 */ + +int _EXFUN(pthread_getcpuclockid, + (pthread_t __pthread_id, clockid_t *__clock_id)); + +#endif /* defined(_POSIX_THREAD_CPUTIME) */ + + +#endif /* defined(_POSIX_THREADS) */ + +#if defined(_POSIX_BARRIERS) + +int _EXFUN(pthread_barrierattr_init, (pthread_barrierattr_t *__attr)); +int _EXFUN(pthread_barrierattr_destroy, (pthread_barrierattr_t *__attr)); +int _EXFUN(pthread_barrierattr_getpshared, + (_CONST pthread_barrierattr_t *__attr, int *__pshared)); +int _EXFUN(pthread_barrierattr_setpshared, + (pthread_barrierattr_t *__attr, int __pshared)); + +#define PTHREAD_BARRIER_SERIAL_THREAD -1 + +int _EXFUN(pthread_barrier_init, + (pthread_barrier_t *__barrier, + _CONST pthread_barrierattr_t *__attr, unsigned __count)); +int _EXFUN(pthread_barrier_destroy, (pthread_barrier_t *__barrier)); +int _EXFUN(pthread_barrier_wait,(pthread_barrier_t *__barrier)); + +#endif /* defined(_POSIX_BARRIERS) */ + +#if defined(_POSIX_SPIN_LOCKS) + +int _EXFUN(pthread_spin_init, + (pthread_spinlock_t *__spinlock, int __pshared)); +int _EXFUN(pthread_spin_destroy, (pthread_spinlock_t *__spinlock)); +int _EXFUN(pthread_spin_lock, (pthread_spinlock_t *__spinlock)); +int _EXFUN(pthread_spin_trylock, (pthread_spinlock_t *__spinlock)); +int _EXFUN(pthread_spin_unlock, (pthread_spinlock_t *__spinlock)); + +#endif /* defined(_POSIX_SPIN_LOCKS) */ + +#if defined(_POSIX_READER_WRITER_LOCKS) + +/* This is used to statically initialize a pthread_rwlock_t. Example: + + pthread_mutex_t mutex = PTHREAD_RWLOCK_INITIALIZER; + */ + +#define PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) 0xFFFFFFFF) + +int _EXFUN(pthread_rwlockattr_init, (pthread_rwlockattr_t *__attr)); +int _EXFUN(pthread_rwlockattr_destroy, (pthread_rwlockattr_t *__attr)); +int _EXFUN(pthread_rwlockattr_getpshared, + (_CONST pthread_rwlockattr_t *__attr, int *__pshared)); +int _EXFUN(pthread_rwlockattr_setpshared, + (pthread_rwlockattr_t *__attr, int __pshared)); + +int _EXFUN(pthread_rwlock_init, + (pthread_rwlock_t *__rwlock, _CONST pthread_rwlockattr_t *__attr)); +int _EXFUN(pthread_rwlock_destroy, (pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_rdlock,(pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_tryrdlock,(pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_timedrdlock, + (pthread_rwlock_t *__rwlock, _CONST struct timespec *__abstime)); +int _EXFUN(pthread_rwlock_unlock,(pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_wrlock,(pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_trywrlock,(pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_timedwrlock, + (pthread_rwlock_t *__rwlock, _CONST struct timespec *__abstime)); + +#endif /* defined(_POSIX_READER_WRITER_LOCKS) */ + + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/tools/sdk/include/newlib/pwd.h b/tools/sdk/include/newlib/pwd.h new file mode 100644 index 00000000..3dea4ee2 --- /dev/null +++ b/tools/sdk/include/newlib/pwd.h @@ -0,0 +1,87 @@ +/*- + * Copyright (c) 1989 The Regents of the University of California. + * 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + * + * @(#)pwd.h 5.13 (Berkeley) 5/28/91 + */ + +#ifndef _PWD_H_ +#ifdef __cplusplus +extern "C" { +#endif +#define _PWD_H_ + +#include +#include + +#if __BSD_VISIBLE +#define _PATH_PASSWD "/etc/passwd" + +#define _PASSWORD_LEN 128 /* max length, not counting NULL */ +#endif + +struct passwd { + char *pw_name; /* user name */ + char *pw_passwd; /* encrypted password */ + uid_t pw_uid; /* user uid */ + gid_t pw_gid; /* user gid */ + char *pw_comment; /* comment */ + char *pw_gecos; /* Honeywell login info */ + char *pw_dir; /* home directory */ + char *pw_shell; /* default shell */ +}; + +#ifndef __INSIDE_CYGWIN__ +struct passwd *getpwuid (uid_t); +struct passwd *getpwnam (const char *); + +#if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 500 +int getpwnam_r (const char *, struct passwd *, + char *, size_t , struct passwd **); +int getpwuid_r (uid_t, struct passwd *, char *, + size_t, struct passwd **); +#endif + +#if __XSI_VISIBLE >= 500 +struct passwd *getpwent (void); +void setpwent (void); +void endpwent (void); +#endif + +#if __BSD_VISIBLE +int setpassent (int); +#endif +#endif /*!__INSIDE_CYGWIN__*/ + +#ifdef __cplusplus +} +#endif +#endif /* _PWD_H_ */ diff --git a/tools/sdk/include/newlib/reent.h b/tools/sdk/include/newlib/reent.h new file mode 100644 index 00000000..861be71d --- /dev/null +++ b/tools/sdk/include/newlib/reent.h @@ -0,0 +1,189 @@ +/* This header file provides the reentrancy. */ + +/* The reentrant system calls here serve two purposes: + + 1) Provide reentrant versions of the system calls the ANSI C library + requires. + 2) Provide these system calls in a namespace clean way. + + It is intended that *all* system calls that the ANSI C library needs + be declared here. It documents them all in one place. All library access + to the system is via some form of these functions. + + The target may provide the needed syscalls by any of the following: + + 1) Define the reentrant versions of the syscalls directly. + (eg: _open_r, _close_r, etc.). Please keep the namespace clean. + When you do this, set "syscall_dir" to "syscalls" and add + -DREENTRANT_SYSCALLS_PROVIDED to newlib_cflags in configure.host. + + 2) Define namespace clean versions of the system calls by prefixing + them with '_' (eg: _open, _close, etc.). Technically, there won't be + true reentrancy at the syscall level, but the library will be namespace + clean. + When you do this, set "syscall_dir" to "syscalls" in configure.host. + + 3) Define or otherwise provide the regular versions of the syscalls + (eg: open, close, etc.). The library won't be reentrant nor namespace + clean, but at least it will work. + When you do this, add -DMISSING_SYSCALL_NAMES to newlib_cflags in + configure.host. + + 4) Define or otherwise provide the regular versions of the syscalls, + and do not supply functional interfaces for any of the reentrant + calls. With this method, the reentrant syscalls are redefined to + directly call the regular system call without the reentrancy argument. + When you do this, specify both -DREENTRANT_SYSCALLS_PROVIDED and + -DMISSING_SYSCALL_NAMES via newlib_cflags in configure.host and do + not specify "syscall_dir". + + Stubs of the reentrant versions of the syscalls exist in the libc/reent + source directory and are provided if REENTRANT_SYSCALLS_PROVIDED isn't + defined. These stubs call the native system calls: _open, _close, etc. + if MISSING_SYSCALL_NAMES is *not* defined, otherwise they call the + non-underscored versions: open, close, etc. when MISSING_SYSCALL_NAMES + *is* defined. + + By default, newlib functions call the reentrant syscalls internally, + passing a reentrancy structure as an argument. This reentrancy structure + contains data that is thread-specific. For example, the errno value is + kept in the reentrancy structure. If multiple threads exist, each will + keep a separate errno value which is intuitive since the application flow + cannot check for failure reliably otherwise. + + The reentrant syscalls are either provided by the platform, by the + libc/reent stubs, or in the case of both MISSING_SYSCALL_NAMES and + REENTRANT_SYSCALLS_PROVIDED being defined, the calls are redefined to + simply call the regular syscalls with no reentrancy struct argument. + + A single-threaded application does not need to worry about the reentrancy + structure. It is used internally. + + A multi-threaded application needs either to manually manage reentrancy + structures or use dynamic reentrancy. + + Manually managing reentrancy structures entails calling special reentrant + versions of newlib functions that have an additional reentrancy argument. + For example, _printf_r. By convention, the first argument is the + reentrancy structure. By default, the normal version of the function + uses the default reentrancy structure: _REENT. The reentrancy structure + is passed internally, eventually to the reentrant syscalls themselves. + How the structures are stored and accessed in this model is up to the + application. + + Dynamic reentrancy is specified by the __DYNAMIC_REENT__ flag. This + flag denotes setting up a macro to replace _REENT with a function call + to __getreent(). This function needs to be implemented by the platform + and it is meant to return the reentrancy structure for the current + thread. When the regular C functions (e.g. printf) go to call internal + routines with the default _REENT structure, they end up calling with + the reentrancy structure for the thread. Thus, application code does not + need to call the _r routines nor worry about reentrancy structures. */ + +/* WARNING: All identifiers here must begin with an underscore. This file is + included by stdio.h and others and we therefore must only use identifiers + in the namespace allotted to us. */ + +#ifndef _REENT_H_ +#ifdef __cplusplus +extern "C" { +#endif +#define _REENT_H_ + +#include +#include +#include + +#define __need_size_t +#define __need_ptrdiff_t +#include + +/* FIXME: not namespace clean */ +struct stat; +struct tms; +struct timeval; +struct timezone; + +#if defined(REENTRANT_SYSCALLS_PROVIDED) && defined(MISSING_SYSCALL_NAMES) + +#define _close_r(__reent, __fd) close(__fd) +#define _execve_r(__reent, __f, __arg, __env) execve(__f, __arg, __env) +#define _fcntl_r(__reent, __fd, __cmd, __arg) fcntl(__fd, __cmd, __arg) +#define _fork_r(__reent) fork() +#define _fstat_r(__reent, __fdes, __stat) fstat(__fdes, __stat) +#define _getpid_r(__reent) getpid() +#define _isatty_r(__reent, __desc) isatty(__desc) +#define _kill_r(__reent, __pid, __signal) kill(__pid, __signal) +#define _link_r(__reent, __oldpath, __newpath) link(__oldpath, __newpath) +#define _lseek_r(__reent, __fdes, __off, __w) lseek(__fdes, __off, __w) +#define _mkdir_r(__reent, __path, __m) mkdir(__path, __m) +#define _open_r(__reent, __path, __flag, __m) open(__path, __flag, __m) +#define _read_r(__reent, __fd, __buff, __cnt) read(__fd, __buff, __cnt) +#define _rename_r(__reent, __old, __new) rename(__old, __new) +#define _sbrk_r(__reent, __incr) sbrk(__incr) +#define _stat_r(__reent, __path, __buff) stat(__path, __buff) +#define _times_r(__reent, __time) times(__time) +#define _unlink_r(__reent, __path) unlink(__path) +#define _wait_r(__reent, __status) wait(__status) +#define _write_r(__reent, __fd, __buff, __cnt) write(__fd, __buff, __cnt) +#define _gettimeofday_r(__reent, __tp, __tzp) gettimeofday(__tp, __tzp) + +#ifdef __LARGE64_FILES +#define _lseek64_r(__reent, __fd, __off, __w) lseek64(__fd, __off, __w) +#define _fstat64_r(__reent, __fd, __buff) fstat64(__fd, __buff) +#define _open64_r(__reent, __path, __flag, __m) open64(__path, __flag, __m) +#endif + +#else +/* Reentrant versions of system calls. */ + +extern int _close_r _PARAMS ((struct _reent *, int)); +extern int _execve_r _PARAMS ((struct _reent *, const char *, char *const *, char *const *)); +extern int _fcntl_r _PARAMS ((struct _reent *, int, int, int)); +extern int _fork_r _PARAMS ((struct _reent *)); +extern int _fstat_r _PARAMS ((struct _reent *, int, struct stat *)); +extern int _getpid_r _PARAMS ((struct _reent *)); +extern int _isatty_r _PARAMS ((struct _reent *, int)); +extern int _kill_r _PARAMS ((struct _reent *, int, int)); +extern int _link_r _PARAMS ((struct _reent *, const char *, const char *)); +extern _off_t _lseek_r _PARAMS ((struct _reent *, int, _off_t, int)); +extern int _mkdir_r _PARAMS ((struct _reent *, const char *, int)); +extern int _open_r _PARAMS ((struct _reent *, const char *, int, int)); +extern _ssize_t _read_r _PARAMS ((struct _reent *, int, void *, size_t)); +extern int _rename_r _PARAMS ((struct _reent *, const char *, const char *)); +extern void *_sbrk_r _PARAMS ((struct _reent *, ptrdiff_t)); +extern int _stat_r _PARAMS ((struct _reent *, const char *, struct stat *)); +extern _CLOCK_T_ _times_r _PARAMS ((struct _reent *, struct tms *)); +extern int _unlink_r _PARAMS ((struct _reent *, const char *)); +extern int _wait_r _PARAMS ((struct _reent *, int *)); +extern _ssize_t _write_r _PARAMS ((struct _reent *, int, const void *, size_t)); + +/* This one is not guaranteed to be available on all targets. */ +extern int _gettimeofday_r _PARAMS ((struct _reent *, struct timeval *__tp, void *__tzp)); + +#ifdef __LARGE64_FILES + + +#if defined(__CYGWIN__) +#define stat64 stat +#endif +struct stat64; + +extern _off64_t _lseek64_r _PARAMS ((struct _reent *, int, _off64_t, int)); +extern int _fstat64_r _PARAMS ((struct _reent *, int, struct stat64 *)); +extern int _open64_r _PARAMS ((struct _reent *, const char *, int, int)); +extern int _stat64_r _PARAMS ((struct _reent *, const char *, struct stat64 *)); + +/* Don't pollute namespace if not building newlib. */ +#if defined (__CYGWIN__) && !defined (_COMPILING_NEWLIB) +#undef stat64 +#endif + +#endif + +#endif + +#ifdef __cplusplus +} +#endif +#endif /* _REENT_H_ */ diff --git a/tools/sdk/include/newlib/regdef.h b/tools/sdk/include/newlib/regdef.h new file mode 100644 index 00000000..8cf144b8 --- /dev/null +++ b/tools/sdk/include/newlib/regdef.h @@ -0,0 +1,7 @@ +/* regdef.h -- define register names. */ + +/* This is a standard include file for MIPS targets. Other target + probably don't define it, and attempts to include this file will + fail. */ + +#include diff --git a/tools/sdk/include/newlib/regex.h b/tools/sdk/include/newlib/regex.h new file mode 100644 index 00000000..fa3e2687 --- /dev/null +++ b/tools/sdk/include/newlib/regex.h @@ -0,0 +1,103 @@ +/*- + * Copyright (c) 1992 Henry Spencer. + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Henry Spencer of the University of Toronto. + * + * 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. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + * + * @(#)regex.h 8.2 (Berkeley) 1/3/94 + * $FreeBSD: src/include/regex.h,v 1.4 2002/03/23 17:24:53 imp Exp $ + */ + +#ifndef _REGEX_H_ +#define _REGEX_H_ + +#include + +/* types */ +typedef off_t regoff_t; + +typedef struct { + int re_magic; + size_t re_nsub; /* number of parenthesized subexpressions */ + __const char *re_endp; /* end pointer for REG_PEND */ + struct re_guts *re_g; /* none of your business :-) */ +} regex_t; + +typedef struct { + regoff_t rm_so; /* start of match */ + regoff_t rm_eo; /* end of match */ +} regmatch_t; + +/* regcomp() flags */ +#define REG_BASIC 0000 +#define REG_EXTENDED 0001 +#define REG_ICASE 0002 +#define REG_NOSUB 0004 +#define REG_NEWLINE 0010 +#define REG_NOSPEC 0020 +#define REG_PEND 0040 +#define REG_DUMP 0200 + +/* regerror() flags */ +#define REG_NOMATCH 1 +#define REG_BADPAT 2 +#define REG_ECOLLATE 3 +#define REG_ECTYPE 4 +#define REG_EESCAPE 5 +#define REG_ESUBREG 6 +#define REG_EBRACK 7 +#define REG_EPAREN 8 +#define REG_EBRACE 9 +#define REG_BADBR 10 +#define REG_ERANGE 11 +#define REG_ESPACE 12 +#define REG_BADRPT 13 +#define REG_EMPTY 14 +#define REG_ASSERT 15 +#define REG_INVARG 16 +#define REG_ATOI 255 /* convert name to number (!) */ +#define REG_ITOA 0400 /* convert number to name (!) */ + +/* regexec() flags */ +#define REG_NOTBOL 00001 +#define REG_NOTEOL 00002 +#define REG_STARTEND 00004 +#define REG_TRACE 00400 /* tracing of execution */ +#define REG_LARGE 01000 /* force large representation */ +#define REG_BACKR 02000 /* force use of backref code */ + +__BEGIN_DECLS +int regcomp(regex_t *__restrict, const char *__restrict, int); +size_t regerror(int, const regex_t *__restrict, char *__restrict, size_t); +int regexec(const regex_t *__restrict, const char *__restrict, + size_t, regmatch_t [__restrict], int); +void regfree(regex_t *); +__END_DECLS + +#endif /* !_REGEX_H_ */ diff --git a/tools/sdk/include/newlib/sched.h b/tools/sdk/include/newlib/sched.h new file mode 100644 index 00000000..504ad527 --- /dev/null +++ b/tools/sdk/include/newlib/sched.h @@ -0,0 +1,97 @@ +/* + * Written by Joel Sherrill . + * + * COPYRIGHT (c) 1989-2010. + * On-Line Applications Research Corporation (OAR). + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION + * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS + * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + * $Id$ + */ + +#ifndef _SCHED_H_ +#define _SCHED_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(_POSIX_PRIORITY_SCHEDULING) +/* + * XBD 13 - Set Scheduling Parameters, P1003.1b-2008, p. 1803 + */ +int sched_setparam( + pid_t __pid, + const struct sched_param *__param +); + +/* + * XBD 13 - Set Scheduling Parameters, P1003.1b-2008, p. 1800 + */ +int sched_getparam( + pid_t __pid, + struct sched_param *__param +); + +/* + * XBD 13 - Set Scheduling Policy and Scheduling Parameters, + * P1003.1b-2008, p. 1805 + */ +int sched_setscheduler( + pid_t __pid, + int __policy, + const struct sched_param *__param +); + +/* + * XBD 13 - Get Scheduling Policy, P1003.1b-2008, p. 1801 + */ +int sched_getscheduler( + pid_t __pid +); + +/* + * XBD 13 - Get Scheduling Parameter Limits, P1003.1b-2008, p. 1799 + */ +int sched_get_priority_max( + int __policy +); + +int sched_get_priority_min( + int __policy +); + +/* + * XBD 13 - Get Scheduling Parameter Limits, P1003.1b-2008, p. 1802 + */ +int sched_rr_get_interval( + pid_t __pid, + struct timespec *__interval +); +#endif /* _POSIX_PRIORITY_SCHEDULING */ + +#if defined(_POSIX_THREADS) || defined(_POSIX_PRIORITY_SCHEDULING) + +/* + * XBD 13 - Yield Processor, P1003.1b-2008, p. 1807 + */ +int sched_yield( void ); + +#endif /* _POSIX_THREADS or _POSIX_PRIORITY_SCHEDULING */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SCHED_H_ */ diff --git a/tools/sdk/include/newlib/search.h b/tools/sdk/include/newlib/search.h new file mode 100644 index 00000000..ed321b0f --- /dev/null +++ b/tools/sdk/include/newlib/search.h @@ -0,0 +1,64 @@ +/* $NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $ */ +/* $FreeBSD: src/include/search.h,v 1.4 2002/03/23 17:24:53 imp Exp $ */ + +/* + * Written by J.T. Conklin + * Public domain. + */ + +#ifndef _SEARCH_H_ +#define _SEARCH_H_ + +#include +#include +#include + +typedef struct entry { + char *key; + void *data; +} ENTRY; + +typedef enum { + FIND, ENTER +} ACTION; + +typedef enum { + preorder, + postorder, + endorder, + leaf +} VISIT; + +#ifdef _SEARCH_PRIVATE +typedef struct node { + char *key; + struct node *llink, *rlink; +} node_t; +#endif + +struct hsearch_data +{ + struct internal_head *htable; + size_t htablesize; +}; + +#ifndef __compar_fn_t_defined +#define __compar_fn_t_defined +typedef int (*__compar_fn_t) (const void *, const void *); +#endif + +__BEGIN_DECLS +int hcreate(size_t); +void hdestroy(void); +ENTRY *hsearch(ENTRY, ACTION); +int hcreate_r(size_t, struct hsearch_data *); +void hdestroy_r(struct hsearch_data *); +int hsearch_r(ENTRY, ACTION, ENTRY **, struct hsearch_data *); +void *tdelete(const void *__restrict, void **__restrict, __compar_fn_t); +void tdestroy (void *, void (*)(void *)); +void *tfind(const void *, void **, __compar_fn_t); +void *tsearch(const void *, void **, __compar_fn_t); +void twalk(const void *, void (*)(const void *, VISIT, int)); +__END_DECLS + +#endif /* !_SEARCH_H_ */ diff --git a/tools/sdk/include/newlib/setjmp.h b/tools/sdk/include/newlib/setjmp.h new file mode 100644 index 00000000..3d815d9b --- /dev/null +++ b/tools/sdk/include/newlib/setjmp.h @@ -0,0 +1,27 @@ +/* + setjmp.h + stubs for future use. +*/ + +#ifndef _SETJMP_H_ +#define _SETJMP_H_ + +#include "_ansi.h" +#include + +_BEGIN_STD_C + +#ifdef __GNUC__ +void _EXFUN(longjmp,(jmp_buf __jmpb, int __retval)) + __attribute__ ((__noreturn__)); +#else +void _EXFUN(longjmp,(jmp_buf __jmpb, int __retval)); +#endif +int _EXFUN(setjmp,(jmp_buf __jmpb)); +#define setjmp(env) setjmp(env) + + +_END_STD_C + +#endif /* _SETJMP_H_ */ + diff --git a/tools/sdk/include/newlib/signal.h b/tools/sdk/include/newlib/signal.h new file mode 100644 index 00000000..8c50a2eb --- /dev/null +++ b/tools/sdk/include/newlib/signal.h @@ -0,0 +1,32 @@ +#ifndef _SIGNAL_H_ +#define _SIGNAL_H_ + +#include "_ansi.h" +#include + +_BEGIN_STD_C + +typedef int sig_atomic_t; /* Atomic entity type (ANSI) */ +#ifndef _POSIX_SOURCE +typedef _sig_func_ptr sig_t; /* BSD naming */ +typedef _sig_func_ptr sighandler_t; /* glibc naming */ +#endif /* !_POSIX_SOURCE */ + +#define SIG_DFL ((_sig_func_ptr)0) /* Default action */ +#define SIG_IGN ((_sig_func_ptr)1) /* Ignore action */ +#define SIG_ERR ((_sig_func_ptr)-1) /* Error return */ + +struct _reent; + +_sig_func_ptr _EXFUN(_signal_r, (struct _reent *, int, _sig_func_ptr)); +int _EXFUN(_raise_r, (struct _reent *, int)); + +#ifndef _REENT_ONLY +_sig_func_ptr _EXFUN(signal, (int, _sig_func_ptr)); +int _EXFUN(raise, (int)); +void _EXFUN(psignal, (int, const char *)); +#endif + +_END_STD_C + +#endif /* _SIGNAL_H_ */ diff --git a/tools/sdk/include/newlib/spawn.h b/tools/sdk/include/newlib/spawn.h new file mode 100644 index 00000000..5a6692f1 --- /dev/null +++ b/tools/sdk/include/newlib/spawn.h @@ -0,0 +1,119 @@ +/*- + * Copyright (c) 2008 Ed Schouten + * 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 AUTHOR 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 AUTHOR 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. + */ + +#ifndef _SPAWN_H_ +#define _SPAWN_H_ + +#include <_ansi.h> +#include +#include +#include +#define __need_sigset_t +#include + +struct sched_param; + +typedef struct __posix_spawnattr *posix_spawnattr_t; +typedef struct __posix_spawn_file_actions *posix_spawn_file_actions_t; + +#define POSIX_SPAWN_RESETIDS 0x01 +#define POSIX_SPAWN_SETPGROUP 0x02 +#define POSIX_SPAWN_SETSCHEDPARAM 0x04 +#define POSIX_SPAWN_SETSCHEDULER 0x08 +#define POSIX_SPAWN_SETSIGDEF 0x10 +#define POSIX_SPAWN_SETSIGMASK 0x20 + +_BEGIN_STD_C +/* + * Spawn routines + * + * XXX both arrays should be __restrict, but this does not work when GCC + * is invoked with -std=c99. + */ +int _EXFUN(posix_spawn, (pid_t * __restrict, const char * __restrict, + const posix_spawn_file_actions_t *, const posix_spawnattr_t * __restrict, + char * const [], char * const []) +); +int _EXFUN(posix_spawnp, (pid_t * __restrict, const char * __restrict, + const posix_spawn_file_actions_t *, const posix_spawnattr_t * __restrict, + char * const [], char * const []) +); + +/* + * File descriptor actions + */ +int _EXFUN(posix_spawn_file_actions_init, (posix_spawn_file_actions_t *)); +int _EXFUN(posix_spawn_file_actions_destroy, (posix_spawn_file_actions_t *)); + +int _EXFUN(posix_spawn_file_actions_addopen, + (posix_spawn_file_actions_t * __restrict, int, const char * __restrict, int, mode_t) +); +int _EXFUN(posix_spawn_file_actions_adddup2, + (posix_spawn_file_actions_t *, int, int) +); +int _EXFUN(posix_spawn_file_actions_addclose, + (posix_spawn_file_actions_t *, int) +); + +/* + * Spawn attributes + */ +int _EXFUN(posix_spawnattr_init, (posix_spawnattr_t *)); +int _EXFUN(posix_spawnattr_destroy, (posix_spawnattr_t *)); + +int _EXFUN(posix_spawnattr_getflags, + (const posix_spawnattr_t * __restrict, short * __restrict) +); +int _EXFUN(posix_spawnattr_getpgroup, + (const posix_spawnattr_t * __restrict, pid_t * __restrict)); +int _EXFUN(posix_spawnattr_getschedparam, + (const posix_spawnattr_t * __restrict, struct sched_param * __restrict) +); +int _EXFUN(posix_spawnattr_getschedpolicy, + (const posix_spawnattr_t * __restrict, int * __restrict) +); +int _EXFUN(posix_spawnattr_getsigdefault, + (const posix_spawnattr_t * __restrict, sigset_t * __restrict) +); +int _EXFUN(posix_spawnattr_getsigmask, + (const posix_spawnattr_t * __restrict, sigset_t * __restrict) +); + +int _EXFUN(posix_spawnattr_setflags, (posix_spawnattr_t *, short)); +int _EXFUN(posix_spawnattr_setpgroup, (posix_spawnattr_t *, pid_t)); +int _EXFUN(posix_spawnattr_setschedparam, + (posix_spawnattr_t * __restrict, const struct sched_param * __restrict) +); +int _EXFUN(posix_spawnattr_setschedpolicy, (posix_spawnattr_t *, int)); +int _EXFUN(posix_spawnattr_setsigdefault, + (posix_spawnattr_t * __restrict, const sigset_t * __restrict) +); +int _EXFUN(posix_spawnattr_setsigmask, + (posix_spawnattr_t * __restrict, const sigset_t * __restrict) +); +_END_STD_C + +#endif /* !_SPAWN_H_ */ diff --git a/tools/sdk/include/newlib/stdatomic.h b/tools/sdk/include/newlib/stdatomic.h new file mode 100644 index 00000000..09c0cf73 --- /dev/null +++ b/tools/sdk/include/newlib/stdatomic.h @@ -0,0 +1,413 @@ +/*- + * Copyright (c) 2011 Ed Schouten + * David Chisnall + * 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 AUTHOR 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 AUTHOR 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. + * + * $FreeBSD$ + */ + +#ifndef _STDATOMIC_H_ +#define _STDATOMIC_H_ + +#include +#include + +#if __has_extension(c_atomic) || __has_extension(cxx_atomic) +#define __CLANG_ATOMICS +#elif __GNUC_PREREQ__(4, 7) +#define __GNUC_ATOMICS +#elif defined(__GNUC__) +#define __SYNC_ATOMICS +#else +#error "stdatomic.h does not support your compiler" +#endif + +/* + * 7.17.1 Atomic lock-free macros. + */ + +#ifdef __GCC_ATOMIC_BOOL_LOCK_FREE +#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE +#endif +#ifdef __GCC_ATOMIC_CHAR_LOCK_FREE +#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE +#endif +#ifdef __GCC_ATOMIC_CHAR16_T_LOCK_FREE +#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE +#endif +#ifdef __GCC_ATOMIC_CHAR32_T_LOCK_FREE +#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE +#endif +#ifdef __GCC_ATOMIC_WCHAR_T_LOCK_FREE +#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE +#endif +#ifdef __GCC_ATOMIC_SHORT_LOCK_FREE +#define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE +#endif +#ifdef __GCC_ATOMIC_INT_LOCK_FREE +#define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE +#endif +#ifdef __GCC_ATOMIC_LONG_LOCK_FREE +#define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE +#endif +#ifdef __GCC_ATOMIC_LLONG_LOCK_FREE +#define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE +#endif +#ifdef __GCC_ATOMIC_POINTER_LOCK_FREE +#define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE +#endif + +/* + * 7.17.2 Initialization. + */ + +#if defined(__CLANG_ATOMICS) +#define ATOMIC_VAR_INIT(value) (value) +#define atomic_init(obj, value) __c11_atomic_init(obj, value) +#else +#define ATOMIC_VAR_INIT(value) { .__val = (value) } +#define atomic_init(obj, value) ((void)((obj)->__val = (value))) +#endif + +/* + * Clang and recent GCC both provide predefined macros for the memory + * orderings. If we are using a compiler that doesn't define them, use the + * clang values - these will be ignored in the fallback path. + */ + +#ifndef __ATOMIC_RELAXED +#define __ATOMIC_RELAXED 0 +#endif +#ifndef __ATOMIC_CONSUME +#define __ATOMIC_CONSUME 1 +#endif +#ifndef __ATOMIC_ACQUIRE +#define __ATOMIC_ACQUIRE 2 +#endif +#ifndef __ATOMIC_RELEASE +#define __ATOMIC_RELEASE 3 +#endif +#ifndef __ATOMIC_ACQ_REL +#define __ATOMIC_ACQ_REL 4 +#endif +#ifndef __ATOMIC_SEQ_CST +#define __ATOMIC_SEQ_CST 5 +#endif + +/* + * 7.17.3 Order and consistency. + * + * The memory_order_* constants that denote the barrier behaviour of the + * atomic operations. + */ + +typedef enum { + memory_order_relaxed = __ATOMIC_RELAXED, + memory_order_consume = __ATOMIC_CONSUME, + memory_order_acquire = __ATOMIC_ACQUIRE, + memory_order_release = __ATOMIC_RELEASE, + memory_order_acq_rel = __ATOMIC_ACQ_REL, + memory_order_seq_cst = __ATOMIC_SEQ_CST +} memory_order; + +/* + * 7.17.4 Fences. + */ + +static __inline void +atomic_thread_fence(memory_order __order __unused) +{ + +#ifdef __CLANG_ATOMICS + __c11_atomic_thread_fence(__order); +#elif defined(__GNUC_ATOMICS) + __atomic_thread_fence(__order); +#else + __sync_synchronize(); +#endif +} + +static __inline void +atomic_signal_fence(memory_order __order __unused) +{ + +#ifdef __CLANG_ATOMICS + __c11_atomic_signal_fence(__order); +#elif defined(__GNUC_ATOMICS) + __atomic_signal_fence(__order); +#else + __asm volatile ("" ::: "memory"); +#endif +} + +/* + * 7.17.5 Lock-free property. + */ + +#if defined(_KERNEL) +/* Atomics in kernelspace are always lock-free. */ +#define atomic_is_lock_free(obj) \ + ((void)(obj), (_Bool)1) +#elif defined(__CLANG_ATOMICS) +#define atomic_is_lock_free(obj) \ + __atomic_is_lock_free(sizeof(*(obj)), obj) +#elif defined(__GNUC_ATOMICS) +#define atomic_is_lock_free(obj) \ + __atomic_is_lock_free(sizeof((obj)->__val), &(obj)->__val) +#else +#define atomic_is_lock_free(obj) \ + ((void)(obj), sizeof((obj)->__val) <= sizeof(void *)) +#endif + +/* + * 7.17.6 Atomic integer types. + */ + +typedef _Atomic(_Bool) atomic_bool; +typedef _Atomic(char) atomic_char; +typedef _Atomic(signed char) atomic_schar; +typedef _Atomic(unsigned char) atomic_uchar; +typedef _Atomic(short) atomic_short; +typedef _Atomic(unsigned short) atomic_ushort; +typedef _Atomic(int) atomic_int; +typedef _Atomic(unsigned int) atomic_uint; +typedef _Atomic(long) atomic_long; +typedef _Atomic(unsigned long) atomic_ulong; +typedef _Atomic(long long) atomic_llong; +typedef _Atomic(unsigned long long) atomic_ullong; +#if 0 +typedef _Atomic(__char16_t) atomic_char16_t; +typedef _Atomic(__char32_t) atomic_char32_t; +#endif +typedef _Atomic(wchar_t) atomic_wchar_t; +typedef _Atomic(int_least8_t) atomic_int_least8_t; +typedef _Atomic(uint_least8_t) atomic_uint_least8_t; +typedef _Atomic(int_least16_t) atomic_int_least16_t; +typedef _Atomic(uint_least16_t) atomic_uint_least16_t; +typedef _Atomic(int_least32_t) atomic_int_least32_t; +typedef _Atomic(uint_least32_t) atomic_uint_least32_t; +typedef _Atomic(int_least64_t) atomic_int_least64_t; +typedef _Atomic(uint_least64_t) atomic_uint_least64_t; +typedef _Atomic(int_fast8_t) atomic_int_fast8_t; +typedef _Atomic(uint_fast8_t) atomic_uint_fast8_t; +typedef _Atomic(int_fast16_t) atomic_int_fast16_t; +typedef _Atomic(uint_fast16_t) atomic_uint_fast16_t; +typedef _Atomic(int_fast32_t) atomic_int_fast32_t; +typedef _Atomic(uint_fast32_t) atomic_uint_fast32_t; +typedef _Atomic(int_fast64_t) atomic_int_fast64_t; +typedef _Atomic(uint_fast64_t) atomic_uint_fast64_t; +typedef _Atomic(intptr_t) atomic_intptr_t; +typedef _Atomic(uintptr_t) atomic_uintptr_t; +typedef _Atomic(size_t) atomic_size_t; +typedef _Atomic(ptrdiff_t) atomic_ptrdiff_t; +typedef _Atomic(intmax_t) atomic_intmax_t; +typedef _Atomic(uintmax_t) atomic_uintmax_t; + +/* + * 7.17.7 Operations on atomic types. + */ + +/* + * Compiler-specific operations. + */ + +#if defined(__CLANG_ATOMICS) +#define atomic_compare_exchange_strong_explicit(object, expected, \ + desired, success, failure) \ + __c11_atomic_compare_exchange_strong(object, expected, desired, \ + success, failure) +#define atomic_compare_exchange_weak_explicit(object, expected, \ + desired, success, failure) \ + __c11_atomic_compare_exchange_weak(object, expected, desired, \ + success, failure) +#define atomic_exchange_explicit(object, desired, order) \ + __c11_atomic_exchange(object, desired, order) +#define atomic_fetch_add_explicit(object, operand, order) \ + __c11_atomic_fetch_add(object, operand, order) +#define atomic_fetch_and_explicit(object, operand, order) \ + __c11_atomic_fetch_and(object, operand, order) +#define atomic_fetch_or_explicit(object, operand, order) \ + __c11_atomic_fetch_or(object, operand, order) +#define atomic_fetch_sub_explicit(object, operand, order) \ + __c11_atomic_fetch_sub(object, operand, order) +#define atomic_fetch_xor_explicit(object, operand, order) \ + __c11_atomic_fetch_xor(object, operand, order) +#define atomic_load_explicit(object, order) \ + __c11_atomic_load(object, order) +#define atomic_store_explicit(object, desired, order) \ + __c11_atomic_store(object, desired, order) +#elif defined(__GNUC_ATOMICS) +#define atomic_compare_exchange_strong_explicit(object, expected, \ + desired, success, failure) \ + __atomic_compare_exchange_n(&(object)->__val, expected, \ + desired, 0, success, failure) +#define atomic_compare_exchange_weak_explicit(object, expected, \ + desired, success, failure) \ + __atomic_compare_exchange_n(&(object)->__val, expected, \ + desired, 1, success, failure) +#define atomic_exchange_explicit(object, desired, order) \ + __atomic_exchange_n(&(object)->__val, desired, order) +#define atomic_fetch_add_explicit(object, operand, order) \ + __atomic_fetch_add(&(object)->__val, operand, order) +#define atomic_fetch_and_explicit(object, operand, order) \ + __atomic_fetch_and(&(object)->__val, operand, order) +#define atomic_fetch_or_explicit(object, operand, order) \ + __atomic_fetch_or(&(object)->__val, operand, order) +#define atomic_fetch_sub_explicit(object, operand, order) \ + __atomic_fetch_sub(&(object)->__val, operand, order) +#define atomic_fetch_xor_explicit(object, operand, order) \ + __atomic_fetch_xor(&(object)->__val, operand, order) +#define atomic_load_explicit(object, order) \ + __atomic_load_n(&(object)->__val, order) +#define atomic_store_explicit(object, desired, order) \ + __atomic_store_n(&(object)->__val, desired, order) +#else +#define __atomic_apply_stride(object, operand) \ + (((__typeof__((object)->__val))0) + (operand)) +#define atomic_compare_exchange_strong_explicit(object, expected, \ + desired, success, failure) __extension__ ({ \ + __typeof__(expected) __ep = (expected); \ + __typeof__(*__ep) __e = *__ep; \ + (void)(success); (void)(failure); \ + (_Bool)((*__ep = __sync_val_compare_and_swap(&(object)->__val, \ + __e, desired)) == __e); \ +}) +#define atomic_compare_exchange_weak_explicit(object, expected, \ + desired, success, failure) \ + atomic_compare_exchange_strong_explicit(object, expected, \ + desired, success, failure) +#if __has_builtin(__sync_swap) +/* Clang provides a full-barrier atomic exchange - use it if available. */ +#define atomic_exchange_explicit(object, desired, order) \ + ((void)(order), __sync_swap(&(object)->__val, desired)) +#else +/* + * __sync_lock_test_and_set() is only an acquire barrier in theory (although in + * practice it is usually a full barrier) so we need an explicit barrier before + * it. + */ +#define atomic_exchange_explicit(object, desired, order) \ +__extension__ ({ \ + __typeof__(object) __o = (object); \ + __typeof__(desired) __d = (desired); \ + (void)(order); \ + __sync_synchronize(); \ + __sync_lock_test_and_set(&(__o)->__val, __d); \ +}) +#endif +#define atomic_fetch_add_explicit(object, operand, order) \ + ((void)(order), __sync_fetch_and_add(&(object)->__val, \ + __atomic_apply_stride(object, operand))) +#define atomic_fetch_and_explicit(object, operand, order) \ + ((void)(order), __sync_fetch_and_and(&(object)->__val, operand)) +#define atomic_fetch_or_explicit(object, operand, order) \ + ((void)(order), __sync_fetch_and_or(&(object)->__val, operand)) +#define atomic_fetch_sub_explicit(object, operand, order) \ + ((void)(order), __sync_fetch_and_sub(&(object)->__val, \ + __atomic_apply_stride(object, operand))) +#define atomic_fetch_xor_explicit(object, operand, order) \ + ((void)(order), __sync_fetch_and_xor(&(object)->__val, operand)) +#define atomic_load_explicit(object, order) \ + ((void)(order), __sync_fetch_and_add(&(object)->__val, 0)) +#define atomic_store_explicit(object, desired, order) \ + ((void)atomic_exchange_explicit(object, desired, order)) +#endif + +/* + * Convenience functions. + * + * Don't provide these in kernel space. In kernel space, we should be + * disciplined enough to always provide explicit barriers. + */ + +#ifndef _KERNEL +#define atomic_compare_exchange_strong(object, expected, desired) \ + atomic_compare_exchange_strong_explicit(object, expected, \ + desired, memory_order_seq_cst, memory_order_seq_cst) +#define atomic_compare_exchange_weak(object, expected, desired) \ + atomic_compare_exchange_weak_explicit(object, expected, \ + desired, memory_order_seq_cst, memory_order_seq_cst) +#define atomic_exchange(object, desired) \ + atomic_exchange_explicit(object, desired, memory_order_seq_cst) +#define atomic_fetch_add(object, operand) \ + atomic_fetch_add_explicit(object, operand, memory_order_seq_cst) +#define atomic_fetch_and(object, operand) \ + atomic_fetch_and_explicit(object, operand, memory_order_seq_cst) +#define atomic_fetch_or(object, operand) \ + atomic_fetch_or_explicit(object, operand, memory_order_seq_cst) +#define atomic_fetch_sub(object, operand) \ + atomic_fetch_sub_explicit(object, operand, memory_order_seq_cst) +#define atomic_fetch_xor(object, operand) \ + atomic_fetch_xor_explicit(object, operand, memory_order_seq_cst) +#define atomic_load(object) \ + atomic_load_explicit(object, memory_order_seq_cst) +#define atomic_store(object, desired) \ + atomic_store_explicit(object, desired, memory_order_seq_cst) +#endif /* !_KERNEL */ + +/* + * 7.17.8 Atomic flag type and operations. + * + * XXX: Assume atomic_bool can be used as an atomic_flag. Is there some + * kind of compiler built-in type we could use? + */ + +typedef struct { + atomic_bool __flag; +} atomic_flag; + +#define ATOMIC_FLAG_INIT { ATOMIC_VAR_INIT(0) } + +static __inline _Bool +atomic_flag_test_and_set_explicit(volatile atomic_flag *__object, + memory_order __order) +{ + return (atomic_exchange_explicit(&__object->__flag, 1, __order)); +} + +static __inline void +atomic_flag_clear_explicit(volatile atomic_flag *__object, memory_order __order) +{ + + atomic_store_explicit(&__object->__flag, 0, __order); +} + +#ifndef _KERNEL +static __inline _Bool +atomic_flag_test_and_set(volatile atomic_flag *__object) +{ + + return (atomic_flag_test_and_set_explicit(__object, + memory_order_seq_cst)); +} + +static __inline void +atomic_flag_clear(volatile atomic_flag *__object) +{ + + atomic_flag_clear_explicit(__object, memory_order_seq_cst); +} +#endif /* !_KERNEL */ + +#endif /* !_STDATOMIC_H_ */ diff --git a/tools/sdk/include/newlib/stdint.h b/tools/sdk/include/newlib/stdint.h new file mode 100644 index 00000000..7386164b --- /dev/null +++ b/tools/sdk/include/newlib/stdint.h @@ -0,0 +1,511 @@ +/* + * Copyright (c) 2004, 2005 by + * Ralf Corsepius, Ulm/Germany. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +#ifndef _STDINT_H +#define _STDINT_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef ___int8_t_defined +typedef __int8_t int8_t ; +typedef __uint8_t uint8_t ; +#define __int8_t_defined 1 +#endif + +#ifdef ___int_least8_t_defined +typedef __int_least8_t int_least8_t; +typedef __uint_least8_t uint_least8_t; +#define __int_least8_t_defined 1 +#endif + +#ifdef ___int16_t_defined +typedef __int16_t int16_t ; +typedef __uint16_t uint16_t ; +#define __int16_t_defined 1 +#endif + +#ifdef ___int_least16_t_defined +typedef __int_least16_t int_least16_t; +typedef __uint_least16_t uint_least16_t; +#define __int_least16_t_defined 1 +#endif + +#ifdef ___int32_t_defined +typedef __int32_t int32_t ; +typedef __uint32_t uint32_t ; +#define __int32_t_defined 1 +#endif + +#ifdef ___int_least32_t_defined +typedef __int_least32_t int_least32_t; +typedef __uint_least32_t uint_least32_t; +#define __int_least32_t_defined 1 +#endif + +#ifdef ___int64_t_defined +typedef __int64_t int64_t ; +typedef __uint64_t uint64_t ; +#define __int64_t_defined 1 +#endif + +#ifdef ___int_least64_t_defined +typedef __int_least64_t int_least64_t; +typedef __uint_least64_t uint_least64_t; +#define __int_least64_t_defined 1 +#endif + +/* + * Fastest minimum-width integer types + * + * Assume int to be the fastest type for all types with a width + * less than __INT_MAX__ rsp. INT_MAX + */ +#ifdef __INT_FAST8_TYPE__ + typedef __INT_FAST8_TYPE__ int_fast8_t; + typedef __UINT_FAST8_TYPE__ uint_fast8_t; +#define __int_fast8_t_defined 1 +#elif __STDINT_EXP(INT_MAX) >= 0x7f + typedef signed int int_fast8_t; + typedef unsigned int uint_fast8_t; +#define __int_fast8_t_defined 1 +#endif + +#ifdef __INT_FAST16_TYPE__ + typedef __INT_FAST16_TYPE__ int_fast16_t; + typedef __UINT_FAST16_TYPE__ uint_fast16_t; +#define __int_fast16_t_defined 1 +#elif __STDINT_EXP(INT_MAX) >= 0x7fff + typedef signed int int_fast16_t; + typedef unsigned int uint_fast16_t; +#define __int_fast16_t_defined 1 +#endif + +#ifdef __INT_FAST32_TYPE__ + typedef __INT_FAST32_TYPE__ int_fast32_t; + typedef __UINT_FAST32_TYPE__ uint_fast32_t; +#define __int_fast32_t_defined 1 +#elif __STDINT_EXP(INT_MAX) >= 0x7fffffff + typedef signed int int_fast32_t; + typedef unsigned int uint_fast32_t; +#define __int_fast32_t_defined 1 +#endif + +#ifdef __INT_FAST64_TYPE__ + typedef __INT_FAST64_TYPE__ int_fast64_t; + typedef __UINT_FAST64_TYPE__ uint_fast64_t; +#define __int_fast64_t_defined 1 +#elif __STDINT_EXP(INT_MAX) > 0x7fffffff + typedef signed int int_fast64_t; + typedef unsigned int uint_fast64_t; +#define __int_fast64_t_defined 1 +#endif + +/* + * Fall back to [u]int_least_t for [u]int_fast_t types + * not having been defined, yet. + * Leave undefined, if [u]int_least_t should not be available. + */ +#if !__int_fast8_t_defined +#if __int_least8_t_defined + typedef int_least8_t int_fast8_t; + typedef uint_least8_t uint_fast8_t; +#define __int_fast8_t_defined 1 +#endif +#endif + +#if !__int_fast16_t_defined +#if __int_least16_t_defined + typedef int_least16_t int_fast16_t; + typedef uint_least16_t uint_fast16_t; +#define __int_fast16_t_defined 1 +#endif +#endif + +#if !__int_fast32_t_defined +#if __int_least32_t_defined + typedef int_least32_t int_fast32_t; + typedef uint_least32_t uint_fast32_t; +#define __int_fast32_t_defined 1 +#endif +#endif + +#if !__int_fast64_t_defined +#if __int_least64_t_defined + typedef int_least64_t int_fast64_t; + typedef uint_least64_t uint_fast64_t; +#define __int_fast64_t_defined 1 +#endif +#endif + +/* Greatest-width integer types */ +/* Modern GCCs provide __INTMAX_TYPE__ */ +#if defined(__INTMAX_TYPE__) + typedef __INTMAX_TYPE__ intmax_t; +#elif __have_longlong64 + typedef signed long long intmax_t; +#else + typedef signed long intmax_t; +#endif + +/* Modern GCCs provide __UINTMAX_TYPE__ */ +#if defined(__UINTMAX_TYPE__) + typedef __UINTMAX_TYPE__ uintmax_t; +#elif __have_longlong64 + typedef unsigned long long uintmax_t; +#else + typedef unsigned long uintmax_t; +#endif + +typedef __intptr_t intptr_t; +typedef __uintptr_t uintptr_t; + +#ifdef __INTPTR_TYPE__ +#define INTPTR_MIN (-__INTPTR_MAX__ - 1) +#define INTPTR_MAX __INTPTR_MAX__ +#define UINTPTR_MAX __UINTPTR_MAX__ +#elif defined(__PTRDIFF_TYPE__) +#define INTPTR_MAX PTRDIFF_MAX +#define INTPTR_MIN PTRDIFF_MIN +#ifdef __UINTPTR_MAX__ +#define UINTPTR_MAX __UINTPTR_MAX__ +#else +#define UINTPTR_MAX (2UL * PTRDIFF_MAX + 1) +#endif +#else +/* + * Fallback to hardcoded values, + * should be valid on cpu's with 32bit int/32bit void* + */ +#define INTPTR_MAX __STDINT_EXP(LONG_MAX) +#define INTPTR_MIN (-__STDINT_EXP(LONG_MAX) - 1) +#define UINTPTR_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1) +#endif + +/* Limits of Specified-Width Integer Types */ + +#ifdef __INT8_MAX__ +#define INT8_MIN (-__INT8_MAX__ - 1) +#define INT8_MAX __INT8_MAX__ +#define UINT8_MAX __UINT8_MAX__ +#elif defined(__int8_t_defined) +#define INT8_MIN -128 +#define INT8_MAX 127 +#define UINT8_MAX 255 +#endif + +#ifdef __INT_LEAST8_MAX__ +#define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1) +#define INT_LEAST8_MAX __INT_LEAST8_MAX__ +#define UINT_LEAST8_MAX __UINT_LEAST8_MAX__ +#elif defined(__int_least8_t_defined) +#define INT_LEAST8_MIN -128 +#define INT_LEAST8_MAX 127 +#define UINT_LEAST8_MAX 255 +#else +#error required type int_least8_t missing +#endif + +#ifdef __INT16_MAX__ +#define INT16_MIN (-__INT16_MAX__ - 1) +#define INT16_MAX __INT16_MAX__ +#define UINT16_MAX __UINT16_MAX__ +#elif defined(__int16_t_defined) +#define INT16_MIN -32768 +#define INT16_MAX 32767 +#define UINT16_MAX 65535 +#endif + +#ifdef __INT_LEAST16_MAX__ +#define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1) +#define INT_LEAST16_MAX __INT_LEAST16_MAX__ +#define UINT_LEAST16_MAX __UINT_LEAST16_MAX__ +#elif defined(__int_least16_t_defined) +#define INT_LEAST16_MIN -32768 +#define INT_LEAST16_MAX 32767 +#define UINT_LEAST16_MAX 65535 +#else +#error required type int_least16_t missing +#endif + +#ifdef __INT32_MAX__ +#define INT32_MIN (-__INT32_MAX__ - 1) +#define INT32_MAX __INT32_MAX__ +#define UINT32_MAX __UINT32_MAX__ +#elif defined(__int32_t_defined) +#if __have_long32 +#define INT32_MIN (-2147483647L-1) +#define INT32_MAX 2147483647L +#define UINT32_MAX 4294967295UL +#else +#define INT32_MIN (-2147483647-1) +#define INT32_MAX 2147483647 +#define UINT32_MAX 4294967295U +#endif +#endif + +#ifdef __INT_LEAST32_MAX__ +#define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1) +#define INT_LEAST32_MAX __INT_LEAST32_MAX__ +#define UINT_LEAST32_MAX __UINT_LEAST32_MAX__ +#elif defined(__int_least32_t_defined) +#if __have_long32 +#define INT_LEAST32_MIN (-2147483647L-1) +#define INT_LEAST32_MAX 2147483647L +#define UINT_LEAST32_MAX 4294967295UL +#else +#define INT_LEAST32_MIN (-2147483647-1) +#define INT_LEAST32_MAX 2147483647 +#define UINT_LEAST32_MAX 4294967295U +#endif +#else +#error required type int_least32_t missing +#endif + +#ifdef __INT64_MAX__ +#define INT64_MIN (-__INT64_MAX__ - 1) +#define INT64_MAX __INT64_MAX__ +#define UINT64_MAX __UINT64_MAX__ +#elif defined(__int64_t_defined) +#if __have_long64 +#define INT64_MIN (-9223372036854775807L-1L) +#define INT64_MAX 9223372036854775807L +#define UINT64_MAX 18446744073709551615U +#elif __have_longlong64 +#define INT64_MIN (-9223372036854775807LL-1LL) +#define INT64_MAX 9223372036854775807LL +#define UINT64_MAX 18446744073709551615ULL +#endif +#endif + +#ifdef __INT_LEAST64_MAX__ +#define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1) +#define INT_LEAST64_MAX __INT_LEAST64_MAX__ +#define UINT_LEAST64_MAX __UINT_LEAST64_MAX__ +#elif defined(__int_least64_t_defined) +#if __have_long64 +#define INT_LEAST64_MIN (-9223372036854775807L-1L) +#define INT_LEAST64_MAX 9223372036854775807L +#define UINT_LEAST64_MAX 18446744073709551615U +#elif __have_longlong64 +#define INT_LEAST64_MIN (-9223372036854775807LL-1LL) +#define INT_LEAST64_MAX 9223372036854775807LL +#define UINT_LEAST64_MAX 18446744073709551615ULL +#endif +#endif + +#ifdef __INT_FAST8_MAX__ +#define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1) +#define INT_FAST8_MAX __INT_FAST8_MAX__ +#define UINT_FAST8_MAX __UINT_FAST8_MAX__ +#elif defined(__int_fast8_t_defined) +#if __STDINT_EXP(INT_MAX) >= 0x7f +#define INT_FAST8_MIN (-__STDINT_EXP(INT_MAX)-1) +#define INT_FAST8_MAX __STDINT_EXP(INT_MAX) +#define UINT_FAST8_MAX (__STDINT_EXP(INT_MAX)*2U+1U) +#else +#define INT_FAST8_MIN INT_LEAST8_MIN +#define INT_FAST8_MAX INT_LEAST8_MAX +#define UINT_FAST8_MAX UINT_LEAST8_MAX +#endif +#endif + +#ifdef __INT_FAST16_MAX__ +#define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1) +#define INT_FAST16_MAX __INT_FAST16_MAX__ +#define UINT_FAST16_MAX __UINT_FAST16_MAX__ +#elif defined(__int_fast16_t_defined) +#if __STDINT_EXP(INT_MAX) >= 0x7fff +#define INT_FAST16_MIN (-__STDINT_EXP(INT_MAX)-1) +#define INT_FAST16_MAX __STDINT_EXP(INT_MAX) +#define UINT_FAST16_MAX (__STDINT_EXP(INT_MAX)*2U+1U) +#else +#define INT_FAST16_MIN INT_LEAST16_MIN +#define INT_FAST16_MAX INT_LEAST16_MAX +#define UINT_FAST16_MAX UINT_LEAST16_MAX +#endif +#endif + +#ifdef __INT_FAST32_MAX__ +#define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1) +#define INT_FAST32_MAX __INT_FAST32_MAX__ +#define UINT_FAST32_MAX __UINT_FAST32_MAX__ +#elif defined(__int_fast32_t_defined) +#if __STDINT_EXP(INT_MAX) >= 0x7fffffff +#define INT_FAST32_MIN (-__STDINT_EXP(INT_MAX)-1) +#define INT_FAST32_MAX __STDINT_EXP(INT_MAX) +#define UINT_FAST32_MAX (__STDINT_EXP(INT_MAX)*2U+1U) +#else +#define INT_FAST32_MIN INT_LEAST32_MIN +#define INT_FAST32_MAX INT_LEAST32_MAX +#define UINT_FAST32_MAX UINT_LEAST32_MAX +#endif +#endif + +#ifdef __INT_FAST64_MAX__ +#define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1) +#define INT_FAST64_MAX __INT_FAST64_MAX__ +#define UINT_FAST64_MAX __UINT_FAST64_MAX__ +#elif defined(__int_fast64_t_defined) +#if __STDINT_EXP(INT_MAX) > 0x7fffffff +#define INT_FAST64_MIN (-__STDINT_EXP(INT_MAX)-1) +#define INT_FAST64_MAX __STDINT_EXP(INT_MAX) +#define UINT_FAST64_MAX (__STDINT_EXP(INT_MAX)*2U+1U) +#else +#define INT_FAST64_MIN INT_LEAST64_MIN +#define INT_FAST64_MAX INT_LEAST64_MAX +#define UINT_FAST64_MAX UINT_LEAST64_MAX +#endif +#endif + +#ifdef __INTMAX_MAX__ +#define INTMAX_MAX __INTMAX_MAX__ +#define INTMAX_MIN (-INTMAX_MAX - 1) +#elif defined(__INTMAX_TYPE__) +/* All relevant GCC versions prefer long to long long for intmax_t. */ +#define INTMAX_MAX INT64_MAX +#define INTMAX_MIN INT64_MIN +#endif + +#ifdef __UINTMAX_MAX__ +#define UINTMAX_MAX __UINTMAX_MAX__ +#elif defined(__UINTMAX_TYPE__) +/* All relevant GCC versions prefer long to long long for intmax_t. */ +#define UINTMAX_MAX UINT64_MAX +#endif + +/* This must match size_t in stddef.h, currently long unsigned int */ +#ifdef __SIZE_MAX__ +#define SIZE_MAX __SIZE_MAX__ +#else +#define SIZE_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1) +#endif + +/* This must match sig_atomic_t in (currently int) */ +#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1) +#define SIG_ATOMIC_MAX __STDINT_EXP(INT_MAX) + +/* This must match ptrdiff_t in (currently long int) */ +#ifdef __PTRDIFF_MAX__ +#define PTRDIFF_MAX __PTRDIFF_MAX__ +#else +#define PTRDIFF_MAX __STDINT_EXP(LONG_MAX) +#endif +#define PTRDIFF_MIN (-PTRDIFF_MAX - 1) + +/* This must match definition in */ +#ifndef WCHAR_MIN +#ifdef __WCHAR_MIN__ +#define WCHAR_MIN __WCHAR_MIN__ +#elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0) +#define WCHAR_MIN (0 + L'\0') +#else +#define WCHAR_MIN (-0x7fffffff - 1 + L'\0') +#endif +#endif + +/* This must match definition in */ +#ifndef WCHAR_MAX +#ifdef __WCHAR_MAX__ +#define WCHAR_MAX __WCHAR_MAX__ +#elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0) +#define WCHAR_MAX (0xffffffffu + L'\0') +#else +#define WCHAR_MAX (0x7fffffff + L'\0') +#endif +#endif + +/* wint_t is unsigned int on almost all GCC targets. */ +#ifdef __WINT_MAX__ +#define WINT_MAX __WINT_MAX__ +#else +#define WINT_MAX (__STDINT_EXP(INT_MAX) * 2U + 1U) +#endif +#ifdef __WINT_MIN__ +#define WINT_MIN __WINT_MIN__ +#else +#define WINT_MIN 0U +#endif + +/** Macros for minimum-width integer constant expressions */ +#ifdef __INT8_C +#define INT8_C(x) __INT8_C(x) +#define UINT8_C(x) __UINT8_C(x) +#else +#define INT8_C(x) x +#if __STDINT_EXP(INT_MAX) > 0x7f +#define UINT8_C(x) x +#else +#define UINT8_C(x) x##U +#endif +#endif + +#ifdef __INT16_C +#define INT16_C(x) __INT16_C(x) +#define UINT16_C(x) __UINT16_C(x) +#else +#define INT16_C(x) x +#if __STDINT_EXP(INT_MAX) > 0x7fff +#define UINT16_C(x) x +#else +#define UINT16_C(x) x##U +#endif +#endif + +#ifdef __INT32_C +#define INT32_C(x) __INT32_C(x) +#define UINT32_C(x) __UINT32_C(x) +#else +#if __have_long32 +#define INT32_C(x) x##L +#define UINT32_C(x) x##UL +#else +#define INT32_C(x) x +#define UINT32_C(x) x##U +#endif +#endif + +#ifdef __INT64_C +#define INT64_C(x) __INT64_C(x) +#define UINT64_C(x) __UINT64_C(x) +#else +#if __int64_t_defined +#if __have_long64 +#define INT64_C(x) x##L +#define UINT64_C(x) x##UL +#else +#define INT64_C(x) x##LL +#define UINT64_C(x) x##ULL +#endif +#endif +#endif + +/** Macros for greatest-width integer constant expression */ +#ifdef __INTMAX_C +#define INTMAX_C(x) __INTMAX_C(x) +#define UINTMAX_C(x) __UINTMAX_C(x) +#else +#if __have_long64 +#define INTMAX_C(x) x##L +#define UINTMAX_C(x) x##UL +#else +#define INTMAX_C(x) x##LL +#define UINTMAX_C(x) x##ULL +#endif +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _STDINT_H */ diff --git a/tools/sdk/include/newlib/stdio.h b/tools/sdk/include/newlib/stdio.h new file mode 100644 index 00000000..e336ee6e --- /dev/null +++ b/tools/sdk/include/newlib/stdio.h @@ -0,0 +1,727 @@ +/* + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * @(#)stdio.h 5.3 (Berkeley) 3/15/86 + */ + +/* + * NB: to fit things in six character monocase externals, the + * stdio code uses the prefix `__s' for stdio objects, typically + * followed by a three-character attempt at a mnemonic. + */ + +#ifndef _STDIO_H_ +#define _STDIO_H_ + +#include "_ansi.h" + +#define _FSTDIO /* ``function stdio'' */ + +#define __need_size_t +#define __need_NULL +#include +#include + +#define __need___va_list +#include + +/* + * defines __FILE, _fpos_t. + * They must be defined there because struct _reent needs them (and we don't + * want reent.h to include this file. + */ + +#include +#include + +_BEGIN_STD_C + +typedef __FILE FILE; + +#ifdef __CYGWIN__ +typedef _fpos64_t fpos_t; +#else +typedef _fpos_t fpos_t; +#ifdef __LARGE64_FILES +typedef _fpos64_t fpos64_t; +#endif +#endif /* !__CYGWIN__ */ + +#include + +#define __SLBF 0x0001 /* line buffered */ +#define __SNBF 0x0002 /* unbuffered */ +#define __SRD 0x0004 /* OK to read */ +#define __SWR 0x0008 /* OK to write */ + /* RD and WR are never simultaneously asserted */ +#define __SRW 0x0010 /* open for reading & writing */ +#define __SEOF 0x0020 /* found EOF */ +#define __SERR 0x0040 /* found error */ +#define __SMBF 0x0080 /* _buf is from malloc */ +#define __SAPP 0x0100 /* fdopen()ed in append mode - so must write to end */ +#define __SSTR 0x0200 /* this is an sprintf/snprintf string */ +#define __SOPT 0x0400 /* do fseek() optimisation */ +#define __SNPT 0x0800 /* do not do fseek() optimisation */ +#define __SOFF 0x1000 /* set iff _offset is in fact correct */ +#define __SORD 0x2000 /* true => stream orientation (byte/wide) decided */ +#if defined(__CYGWIN__) +# define __SCLE 0x4000 /* convert line endings CR/LF <-> NL */ +#endif +#define __SL64 0x8000 /* is 64-bit offset large file */ + +/* _flags2 flags */ +#define __SNLK 0x0001 /* stdio functions do not lock streams themselves */ +#define __SWID 0x2000 /* true => stream orientation wide, false => byte, only valid if __SORD in _flags is true */ + +/* + * The following three definitions are for ANSI C, which took them + * from System V, which stupidly took internal interface macros and + * made them official arguments to setvbuf(), without renaming them. + * Hence, these ugly _IOxxx names are *supposed* to appear in user code. + * + * Although these happen to match their counterparts above, the + * implementation does not rely on that (so these could be renumbered). + */ +#define _IOFBF 0 /* setvbuf should set fully buffered */ +#define _IOLBF 1 /* setvbuf should set line buffered */ +#define _IONBF 2 /* setvbuf should set unbuffered */ + +#define EOF (-1) + +#ifdef __BUFSIZ__ +#define BUFSIZ __BUFSIZ__ +#else +#define BUFSIZ 1024 +#endif + +#ifdef __FOPEN_MAX__ +#define FOPEN_MAX __FOPEN_MAX__ +#else +#define FOPEN_MAX 20 +#endif + +#ifdef __FILENAME_MAX__ +#define FILENAME_MAX __FILENAME_MAX__ +#else +#define FILENAME_MAX 1024 +#endif + +#ifdef __L_tmpnam__ +#define L_tmpnam __L_tmpnam__ +#else +#define L_tmpnam FILENAME_MAX +#endif + +#ifndef __STRICT_ANSI__ +#define P_tmpdir "/tmp" +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 /* set file offset to offset */ +#endif +#ifndef SEEK_CUR +#define SEEK_CUR 1 /* set file offset to current plus offset */ +#endif +#ifndef SEEK_END +#define SEEK_END 2 /* set file offset to EOF plus offset */ +#endif + +#define TMP_MAX 26 + +#define stdin (_REENT->_stdin) +#define stdout (_REENT->_stdout) +#define stderr (_REENT->_stderr) + +#define _stdin_r(x) ((x)->_stdin) +#define _stdout_r(x) ((x)->_stdout) +#define _stderr_r(x) ((x)->_stderr) + +/* + * Functions defined in ANSI C standard. + */ + +#ifndef __VALIST +#ifdef __GNUC__ +#define __VALIST __gnuc_va_list +#else +#define __VALIST char* +#endif +#endif + +FILE * _EXFUN(tmpfile, (void)); +char * _EXFUN(tmpnam, (char *)); +#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 +char * _EXFUN(tempnam, (const char *, const char *)); +#endif +int _EXFUN(fclose, (FILE *)); +int _EXFUN(fflush, (FILE *)); +FILE * _EXFUN(freopen, (const char *__restrict, const char *__restrict, FILE *__restrict)); +void _EXFUN(setbuf, (FILE *__restrict, char *__restrict)); +int _EXFUN(setvbuf, (FILE *__restrict, char *__restrict, int, size_t)); +int _EXFUN(fprintf, (FILE *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(fscanf, (FILE *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +int _EXFUN(printf, (const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 1, 2)))); +int _EXFUN(scanf, (const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 1, 2)))); +int _EXFUN(sscanf, (const char *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +int _EXFUN(vfprintf, (FILE *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(vprintf, (const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 1, 0)))); +int _EXFUN(vsprintf, (char *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(fgetc, (FILE *)); +char * _EXFUN(fgets, (char *__restrict, int, FILE *__restrict)); +int _EXFUN(fputc, (int, FILE *)); +int _EXFUN(fputs, (const char *__restrict, FILE *__restrict)); +int _EXFUN(getc, (FILE *)); +int _EXFUN(getchar, (void)); +char * _EXFUN(gets, (char *)); +int _EXFUN(putc, (int, FILE *)); +int _EXFUN(putchar, (int)); +int _EXFUN(puts, (const char *)); +int _EXFUN(ungetc, (int, FILE *)); +size_t _EXFUN(fread, (_PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +size_t _EXFUN(fwrite, (const _PTR __restrict , size_t _size, size_t _n, FILE *)); +#ifdef _COMPILING_NEWLIB +int _EXFUN(fgetpos, (FILE *, _fpos_t *)); +#else +int _EXFUN(fgetpos, (FILE *__restrict, fpos_t *__restrict)); +#endif +int _EXFUN(fseek, (FILE *, long, int)); +#ifdef _COMPILING_NEWLIB +int _EXFUN(fsetpos, (FILE *, const _fpos_t *)); +#else +int _EXFUN(fsetpos, (FILE *, const fpos_t *)); +#endif +long _EXFUN(ftell, ( FILE *)); +void _EXFUN(rewind, (FILE *)); +void _EXFUN(clearerr, (FILE *)); +int _EXFUN(feof, (FILE *)); +int _EXFUN(ferror, (FILE *)); +void _EXFUN(perror, (const char *)); +#ifndef _REENT_ONLY +FILE * _EXFUN(fopen, (const char *__restrict _name, const char *__restrict _type)); +int _EXFUN(sprintf, (char *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(remove, (const char *)); +int _EXFUN(rename, (const char *, const char *)); +#ifdef _COMPILING_NEWLIB +int _EXFUN(_rename, (const char *, const char *)); +#endif +#endif +#if !defined(__STRICT_ANSI__) || defined(__USE_XOPEN2K) +#ifdef _COMPILING_NEWLIB +int _EXFUN(fseeko, (FILE *, _off_t, int)); +_off_t _EXFUN(ftello, ( FILE *)); +#else +int _EXFUN(fseeko, (FILE *, off_t, int)); +off_t _EXFUN(ftello, ( FILE *)); +#endif +#endif +#if __GNU_VISIBLE +int _EXFUN(fcloseall, (_VOID)); +#endif +#if !defined(__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L) || (__cplusplus >= 201103L) +#ifndef _REENT_ONLY +int _EXFUN(asiprintf, (char **, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +char * _EXFUN(asniprintf, (char *, size_t *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +char * _EXFUN(asnprintf, (char *__restrict, size_t *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(asprintf, (char **__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +#ifndef diprintf +int _EXFUN(diprintf, (int, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +#endif +int _EXFUN(fiprintf, (FILE *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(fiscanf, (FILE *, const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +int _EXFUN(iprintf, (const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 1, 2)))); +int _EXFUN(iscanf, (const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 1, 2)))); +int _EXFUN(siprintf, (char *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(siscanf, (const char *, const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +int _EXFUN(snprintf, (char *__restrict, size_t, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(sniprintf, (char *, size_t, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(vasiprintf, (char **, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +char * _EXFUN(vasniprintf, (char *, size_t *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +char * _EXFUN(vasnprintf, (char *, size_t *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(vasprintf, (char **, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(vdiprintf, (int, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(vfiprintf, (FILE *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(vfiscanf, (FILE *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +int _EXFUN(vfscanf, (FILE *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +int _EXFUN(viprintf, (const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 1, 0)))); +int _EXFUN(viscanf, (const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 1, 0)))); +int _EXFUN(vscanf, (const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 1, 0)))); +int _EXFUN(vsiprintf, (char *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(vsiscanf, (const char *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +int _EXFUN(vsniprintf, (char *, size_t, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(vsnprintf, (char *__restrict, size_t, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(vsscanf, (const char *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +#endif /* !_REENT_ONLY */ +#endif /* !__STRICT_ANSI__ */ + +/* + * Routines in POSIX 1003.1:2001. + */ + +#ifndef __STRICT_ANSI__ +#ifndef _REENT_ONLY +FILE * _EXFUN(fdopen, (int, const char *)); +#endif +int _EXFUN(fileno, (FILE *)); +int _EXFUN(getw, (FILE *)); +int _EXFUN(pclose, (FILE *)); +FILE * _EXFUN(popen, (const char *, const char *)); +int _EXFUN(putw, (int, FILE *)); +void _EXFUN(setbuffer, (FILE *, char *, int)); +int _EXFUN(setlinebuf, (FILE *)); +int _EXFUN(getc_unlocked, (FILE *)); +int _EXFUN(getchar_unlocked, (void)); +void _EXFUN(flockfile, (FILE *)); +int _EXFUN(ftrylockfile, (FILE *)); +void _EXFUN(funlockfile, (FILE *)); +int _EXFUN(putc_unlocked, (int, FILE *)); +int _EXFUN(putchar_unlocked, (int)); +#endif /* ! __STRICT_ANSI__ */ + +/* + * Routines in POSIX 1003.1:200x. + */ + +#ifndef __STRICT_ANSI__ +# ifndef _REENT_ONLY +# ifndef dprintf +int _EXFUN(dprintf, (int, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +# endif +FILE * _EXFUN(fmemopen, (void *__restrict, size_t, const char *__restrict)); +/* getdelim - see __getdelim for now */ +/* getline - see __getline for now */ +FILE * _EXFUN(open_memstream, (char **, size_t *)); +#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 +int _EXFUN(renameat, (int, const char *, int, const char *)); +#endif +int _EXFUN(vdprintf, (int, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +# endif +#endif + +/* + * Recursive versions of the above. + */ + +int _EXFUN(_asiprintf_r, (struct _reent *, char **, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +char * _EXFUN(_asniprintf_r, (struct _reent *, char *, size_t *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 4, 5)))); +char * _EXFUN(_asnprintf_r, (struct _reent *, char *__restrict, size_t *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 4, 5)))); +int _EXFUN(_asprintf_r, (struct _reent *, char **__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_diprintf_r, (struct _reent *, int, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_dprintf_r, (struct _reent *, int, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_fclose_r, (struct _reent *, FILE *)); +int _EXFUN(_fcloseall_r, (struct _reent *)); +FILE * _EXFUN(_fdopen_r, (struct _reent *, int, const char *)); +int _EXFUN(_fflush_r, (struct _reent *, FILE *)); +int _EXFUN(_fgetc_r, (struct _reent *, FILE *)); +int _EXFUN(_fgetc_unlocked_r, (struct _reent *, FILE *)); +char * _EXFUN(_fgets_r, (struct _reent *, char *__restrict, int, FILE *__restrict)); +char * _EXFUN(_fgets_unlocked_r, (struct _reent *, char *__restrict, int, FILE *__restrict)); +#ifdef _COMPILING_NEWLIB +int _EXFUN(_fgetpos_r, (struct _reent *, FILE *__restrict, _fpos_t *__restrict)); +int _EXFUN(_fsetpos_r, (struct _reent *, FILE *, const _fpos_t *)); +#else +int _EXFUN(_fgetpos_r, (struct _reent *, FILE *, fpos_t *)); +int _EXFUN(_fsetpos_r, (struct _reent *, FILE *, const fpos_t *)); +#endif +int _EXFUN(_fiprintf_r, (struct _reent *, FILE *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_fiscanf_r, (struct _reent *, FILE *, const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 3, 4)))); +FILE * _EXFUN(_fmemopen_r, (struct _reent *, void *__restrict, size_t, const char *__restrict)); +FILE * _EXFUN(_fopen_r, (struct _reent *, const char *__restrict, const char *__restrict)); +FILE * _EXFUN(_freopen_r, (struct _reent *, const char *__restrict, const char *__restrict, FILE *__restrict)); +int _EXFUN(_fprintf_r, (struct _reent *, FILE *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_fpurge_r, (struct _reent *, FILE *)); +int _EXFUN(_fputc_r, (struct _reent *, int, FILE *)); +int _EXFUN(_fputc_unlocked_r, (struct _reent *, int, FILE *)); +int _EXFUN(_fputs_r, (struct _reent *, const char *__restrict, FILE *__restrict)); +int _EXFUN(_fputs_unlocked_r, (struct _reent *, const char *__restrict, FILE *__restrict)); +size_t _EXFUN(_fread_r, (struct _reent *, _PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +size_t _EXFUN(_fread_unlocked_r, (struct _reent *, _PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +int _EXFUN(_fscanf_r, (struct _reent *, FILE *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 3, 4)))); +int _EXFUN(_fseek_r, (struct _reent *, FILE *, long, int)); +int _EXFUN(_fseeko_r,(struct _reent *, FILE *, _off_t, int)); +long _EXFUN(_ftell_r, (struct _reent *, FILE *)); +_off_t _EXFUN(_ftello_r,(struct _reent *, FILE *)); +void _EXFUN(_rewind_r, (struct _reent *, FILE *)); +size_t _EXFUN(_fwrite_r, (struct _reent *, const _PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +size_t _EXFUN(_fwrite_unlocked_r, (struct _reent *, const _PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +int _EXFUN(_getc_r, (struct _reent *, FILE *)); +int _EXFUN(_getc_unlocked_r, (struct _reent *, FILE *)); +int _EXFUN(_getchar_r, (struct _reent *)); +int _EXFUN(_getchar_unlocked_r, (struct _reent *)); +char * _EXFUN(_gets_r, (struct _reent *, char *)); +int _EXFUN(_iprintf_r, (struct _reent *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(_iscanf_r, (struct _reent *, const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +FILE * _EXFUN(_open_memstream_r, (struct _reent *, char **, size_t *)); +void _EXFUN(_perror_r, (struct _reent *, const char *)); +int _EXFUN(_printf_r, (struct _reent *, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(_putc_r, (struct _reent *, int, FILE *)); +int _EXFUN(_putc_unlocked_r, (struct _reent *, int, FILE *)); +int _EXFUN(_putchar_unlocked_r, (struct _reent *, int)); +int _EXFUN(_putchar_r, (struct _reent *, int)); +int _EXFUN(_puts_r, (struct _reent *, const char *)); +int _EXFUN(_remove_r, (struct _reent *, const char *)); +int _EXFUN(_rename_r, (struct _reent *, + const char *_old, const char *_new)); +int _EXFUN(_scanf_r, (struct _reent *, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +int _EXFUN(_siprintf_r, (struct _reent *, char *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_siscanf_r, (struct _reent *, const char *, const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 3, 4)))); +int _EXFUN(_sniprintf_r, (struct _reent *, char *, size_t, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 4, 5)))); +int _EXFUN(_snprintf_r, (struct _reent *, char *__restrict, size_t, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 4, 5)))); +int _EXFUN(_sprintf_r, (struct _reent *, char *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_sscanf_r, (struct _reent *, const char *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 3, 4)))); +char * _EXFUN(_tempnam_r, (struct _reent *, const char *, const char *)); +FILE * _EXFUN(_tmpfile_r, (struct _reent *)); +char * _EXFUN(_tmpnam_r, (struct _reent *, char *)); +int _EXFUN(_ungetc_r, (struct _reent *, int, FILE *)); +int _EXFUN(_vasiprintf_r, (struct _reent *, char **, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +char * _EXFUN(_vasniprintf_r, (struct _reent*, char *, size_t *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 4, 0)))); +char * _EXFUN(_vasnprintf_r, (struct _reent*, char *, size_t *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 4, 0)))); +int _EXFUN(_vasprintf_r, (struct _reent *, char **, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vdiprintf_r, (struct _reent *, int, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vdprintf_r, (struct _reent *, int, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vfiprintf_r, (struct _reent *, FILE *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vfiscanf_r, (struct _reent *, FILE *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 3, 0)))); +int _EXFUN(_vfprintf_r, (struct _reent *, FILE *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vfscanf_r, (struct _reent *, FILE *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 3, 0)))); +int _EXFUN(_viprintf_r, (struct _reent *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(_viscanf_r, (struct _reent *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +int _EXFUN(_vprintf_r, (struct _reent *, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(_vscanf_r, (struct _reent *, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +int _EXFUN(_vsiprintf_r, (struct _reent *, char *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vsiscanf_r, (struct _reent *, const char *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 3, 0)))); +int _EXFUN(_vsniprintf_r, (struct _reent *, char *, size_t, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 4, 0)))); +int _EXFUN(_vsnprintf_r, (struct _reent *, char *__restrict, size_t, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 4, 0)))); +int _EXFUN(_vsprintf_r, (struct _reent *, char *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vsscanf_r, (struct _reent *, const char *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 3, 0)))); + +/* Other extensions. */ + +int _EXFUN(fpurge, (FILE *)); +ssize_t _EXFUN(__getdelim, (char **, size_t *, int, FILE *)); +ssize_t _EXFUN(__getline, (char **, size_t *, FILE *)); + +#if __BSD_VISIBLE +void _EXFUN(clearerr_unlocked, (FILE *)); +int _EXFUN(feof_unlocked, (FILE *)); +int _EXFUN(ferror_unlocked, (FILE *)); +int _EXFUN(fileno_unlocked, (FILE *)); +int _EXFUN(fflush_unlocked, (FILE *)); +int _EXFUN(fgetc_unlocked, (FILE *)); +int _EXFUN(fputc_unlocked, (int, FILE *)); +size_t _EXFUN(fread_unlocked, (_PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +size_t _EXFUN(fwrite_unlocked, (const _PTR __restrict , size_t _size, size_t _n, FILE *)); +#endif + +#if __GNU_VISIBLE +char * _EXFUN(fgets_unlocked, (char *__restrict, int, FILE *__restrict)); +int _EXFUN(fputs_unlocked, (const char *__restrict, FILE *__restrict)); +#endif + +#ifdef __LARGE64_FILES +#if !defined(__CYGWIN__) || defined(_COMPILING_NEWLIB) +FILE * _EXFUN(fdopen64, (int, const char *)); +FILE * _EXFUN(fopen64, (const char *, const char *)); +FILE * _EXFUN(freopen64, (_CONST char *, _CONST char *, FILE *)); +_off64_t _EXFUN(ftello64, (FILE *)); +_off64_t _EXFUN(fseeko64, (FILE *, _off64_t, int)); +int _EXFUN(fgetpos64, (FILE *, _fpos64_t *)); +int _EXFUN(fsetpos64, (FILE *, const _fpos64_t *)); +FILE * _EXFUN(tmpfile64, (void)); + +FILE * _EXFUN(_fdopen64_r, (struct _reent *, int, const char *)); +FILE * _EXFUN(_fopen64_r, (struct _reent *,const char *, const char *)); +FILE * _EXFUN(_freopen64_r, (struct _reent *, _CONST char *, _CONST char *, FILE *)); +_off64_t _EXFUN(_ftello64_r, (struct _reent *, FILE *)); +_off64_t _EXFUN(_fseeko64_r, (struct _reent *, FILE *, _off64_t, int)); +int _EXFUN(_fgetpos64_r, (struct _reent *, FILE *, _fpos64_t *)); +int _EXFUN(_fsetpos64_r, (struct _reent *, FILE *, const _fpos64_t *)); +FILE * _EXFUN(_tmpfile64_r, (struct _reent *)); +#endif /* !__CYGWIN__ */ +#endif /* __LARGE64_FILES */ + +/* + * Routines internal to the implementation. + */ + +int _EXFUN(__srget_r, (struct _reent *, FILE *)); +int _EXFUN(__swbuf_r, (struct _reent *, int, FILE *)); + +/* + * Stdio function-access interface. + */ + +#ifndef __STRICT_ANSI__ +# ifdef __LARGE64_FILES +FILE *_EXFUN(funopen,(const _PTR __cookie, + int (*__readfn)(_PTR __c, char *__buf, + _READ_WRITE_BUFSIZE_TYPE __n), + int (*__writefn)(_PTR __c, const char *__buf, + _READ_WRITE_BUFSIZE_TYPE __n), + _fpos64_t (*__seekfn)(_PTR __c, _fpos64_t __off, int __whence), + int (*__closefn)(_PTR __c))); +FILE *_EXFUN(_funopen_r,(struct _reent *, const _PTR __cookie, + int (*__readfn)(_PTR __c, char *__buf, + _READ_WRITE_BUFSIZE_TYPE __n), + int (*__writefn)(_PTR __c, const char *__buf, + _READ_WRITE_BUFSIZE_TYPE __n), + _fpos64_t (*__seekfn)(_PTR __c, _fpos64_t __off, int __whence), + int (*__closefn)(_PTR __c))); +# else +FILE *_EXFUN(funopen,(const _PTR __cookie, + int (*__readfn)(_PTR __cookie, char *__buf, + _READ_WRITE_BUFSIZE_TYPE __n), + int (*__writefn)(_PTR __cookie, const char *__buf, + _READ_WRITE_BUFSIZE_TYPE __n), + fpos_t (*__seekfn)(_PTR __cookie, fpos_t __off, int __whence), + int (*__closefn)(_PTR __cookie))); +FILE *_EXFUN(_funopen_r,(struct _reent *, const _PTR __cookie, + int (*__readfn)(_PTR __cookie, char *__buf, + _READ_WRITE_BUFSIZE_TYPE __n), + int (*__writefn)(_PTR __cookie, const char *__buf, + _READ_WRITE_BUFSIZE_TYPE __n), + fpos_t (*__seekfn)(_PTR __cookie, fpos_t __off, int __whence), + int (*__closefn)(_PTR __cookie))); +# endif /* !__LARGE64_FILES */ + +# define fropen(__cookie, __fn) funopen(__cookie, __fn, (int (*)())0, \ + (fpos_t (*)())0, (int (*)())0) +# define fwopen(__cookie, __fn) funopen(__cookie, (int (*)())0, __fn, \ + (fpos_t (*)())0, (int (*)())0) + +typedef ssize_t cookie_read_function_t(void *__cookie, char *__buf, size_t __n); +typedef ssize_t cookie_write_function_t(void *__cookie, const char *__buf, + size_t __n); +# ifdef __LARGE64_FILES +typedef int cookie_seek_function_t(void *__cookie, _off64_t *__off, + int __whence); +# else +typedef int cookie_seek_function_t(void *__cookie, off_t *__off, int __whence); +# endif /* !__LARGE64_FILES */ +typedef int cookie_close_function_t(void *__cookie); +typedef struct +{ + /* These four struct member names are dictated by Linux; hopefully, + they don't conflict with any macros. */ + cookie_read_function_t *read; + cookie_write_function_t *write; + cookie_seek_function_t *seek; + cookie_close_function_t *close; +} cookie_io_functions_t; +FILE *_EXFUN(fopencookie,(void *__cookie, + const char *__mode, cookie_io_functions_t __functions)); +FILE *_EXFUN(_fopencookie_r,(struct _reent *, void *__cookie, + const char *__mode, cookie_io_functions_t __functions)); +#endif /* ! __STRICT_ANSI__ */ + +#ifndef __CUSTOM_FILE_IO__ +/* + * The __sfoo macros are here so that we can + * define function versions in the C library. + */ +#define __sgetc_raw_r(__ptr, __f) (--(__f)->_r < 0 ? __srget_r(__ptr, __f) : (int)(*(__f)->_p++)) + +#ifdef __SCLE +/* For a platform with CR/LF, additional logic is required by + __sgetc_r which would otherwise simply be a macro; therefore we + use an inlined function. The function is only meant to be inlined + in place as used and the function body should never be emitted. + + There are two possible means to this end when compiling with GCC, + one when compiling with a standard C99 compiler, and for other + compilers we're just stuck. At the moment, this issue only + affects the Cygwin target, so we'll most likely be using GCC. */ + +_ELIDABLE_INLINE int __sgetc_r(struct _reent *__ptr, FILE *__p); + +_ELIDABLE_INLINE int __sgetc_r(struct _reent *__ptr, FILE *__p) + { + int __c = __sgetc_raw_r(__ptr, __p); + if ((__p->_flags & __SCLE) && (__c == '\r')) + { + int __c2 = __sgetc_raw_r(__ptr, __p); + if (__c2 == '\n') + __c = __c2; + else + ungetc(__c2, __p); + } + return __c; + } +#else +#define __sgetc_r(__ptr, __p) __sgetc_raw_r(__ptr, __p) +#endif + +#ifdef _never /* __GNUC__ */ +/* If this inline is actually used, then systems using coff debugging + info get hopelessly confused. 21sept93 rich@cygnus.com. */ +_ELIDABLE_INLINE int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) { + if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) + return (*_p->_p++ = _c); + else + return (__swbuf_r(_ptr, _c, _p)); +} +#else +/* + * This has been tuned to generate reasonable code on the vax using pcc + */ +#define __sputc_raw_r(__ptr, __c, __p) \ + (--(__p)->_w < 0 ? \ + (__p)->_w >= (__p)->_lbfsize ? \ + (*(__p)->_p = (__c)), *(__p)->_p != '\n' ? \ + (int)*(__p)->_p++ : \ + __swbuf_r(__ptr, '\n', __p) : \ + __swbuf_r(__ptr, (int)(__c), __p) : \ + (*(__p)->_p = (__c), (int)*(__p)->_p++)) +#ifdef __SCLE +#define __sputc_r(__ptr, __c, __p) \ + ((((__p)->_flags & __SCLE) && ((__c) == '\n')) \ + ? __sputc_raw_r(__ptr, '\r', (__p)) : 0 , \ + __sputc_raw_r((__ptr), (__c), (__p))) +#else +#define __sputc_r(__ptr, __c, __p) __sputc_raw_r(__ptr, __c, __p) +#endif +#endif + +#define __sfeof(p) ((int)(((p)->_flags & __SEOF) != 0)) +#define __sferror(p) ((int)(((p)->_flags & __SERR) != 0)) +#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF))) +#define __sfileno(p) ((p)->_file) + +#ifndef _REENT_SMALL +#define feof(p) __sfeof(p) +#define ferror(p) __sferror(p) +#define clearerr(p) __sclearerr(p) + +#if __BSD_VISIBLE +#define feof_unlocked(p) __sfeof(p) +#define ferror_unlocked(p) __sferror(p) +#define clearerr_unlocked(p) __sclearerr(p) +#endif /* __BSD_VISIBLE */ +#endif /* _REENT_SMALL */ + +#if 0 /*ndef __STRICT_ANSI__ - FIXME: must initialize stdio first, use fn */ +#define fileno(p) __sfileno(p) +#endif + +#ifndef __CYGWIN__ +#ifndef lint +#define getc(fp) __sgetc_r(_REENT, fp) +#define putc(x, fp) __sputc_r(_REENT, x, fp) +#endif /* lint */ +#endif /* __CYGWIN__ */ + +#ifndef __STRICT_ANSI__ +/* fast always-buffered version, true iff error */ +#define fast_putc(x,p) (--(p)->_w < 0 ? \ + __swbuf_r(_REENT, (int)(x), p) == EOF : (*(p)->_p = (x), (p)->_p++, 0)) + +#define L_cuserid 9 /* posix says it goes in stdio.h :( */ +#ifdef __CYGWIN__ +#define L_ctermid 16 +#endif +#endif + +#endif /* !__CUSTOM_FILE_IO__ */ + +#define getchar() getc(stdin) +#define putchar(x) putc(x, stdout) + +#ifndef __STRICT_ANSI__ +#define getchar_unlocked() getc_unlocked(stdin) +#define putchar_unlocked(x) putc_unlocked(x, stdout) +#endif + +_END_STD_C + +#endif /* _STDIO_H_ */ diff --git a/tools/sdk/include/newlib/stdio_ext.h b/tools/sdk/include/newlib/stdio_ext.h new file mode 100644 index 00000000..029ab025 --- /dev/null +++ b/tools/sdk/include/newlib/stdio_ext.h @@ -0,0 +1,79 @@ +/* + * stdio_ext.h + * + * Definitions for I/O internal operations, originally from Solaris. + */ + +#ifndef _STDIO_EXT_H_ +#define _STDIO_EXT_H_ + +#ifdef __rtems__ +#error " not supported" +#endif + +#include + +#define FSETLOCKING_QUERY 0 +#define FSETLOCKING_INTERNAL 1 +#define FSETLOCKING_BYCALLER 2 + +_BEGIN_STD_C + +void _EXFUN(__fpurge,(FILE *)); +int _EXFUN(__fsetlocking,(FILE *, int)); + +/* TODO: + + void _flushlbf (void); +*/ + +#ifdef __GNUC__ + +_ELIDABLE_INLINE size_t +__fbufsize (FILE *__fp) { return (size_t) __fp->_bf._size; } + +_ELIDABLE_INLINE int +__freading (FILE *__fp) { return (__fp->_flags & __SRD) != 0; } + +_ELIDABLE_INLINE int +__fwriting (FILE *__fp) { return (__fp->_flags & __SWR) != 0; } + +_ELIDABLE_INLINE int +__freadable (FILE *__fp) { return (__fp->_flags & (__SRD | __SRW)) != 0; } + +_ELIDABLE_INLINE int +__fwritable (FILE *__fp) { return (__fp->_flags & (__SWR | __SRW)) != 0; } + +_ELIDABLE_INLINE int +__flbf (FILE *__fp) { return (__fp->_flags & __SLBF) != 0; } + +_ELIDABLE_INLINE size_t +__fpending (FILE *__fp) { return __fp->_p - __fp->_bf._base; } + +#else + +size_t _EXFUN(__fbufsize,(FILE *)); +int _EXFUN(__freading,(FILE *)); +int _EXFUN(__fwriting,(FILE *)); +int _EXFUN(__freadable,(FILE *)); +int _EXFUN(__fwritable,(FILE *)); +int _EXFUN(__flbf,(FILE *)); +size_t _EXFUN(__fpending,(FILE *)); + +#ifndef __cplusplus + +#define __fbufsize(__fp) ((size_t) (__fp)->_bf._size) +#define __freading(__fp) (((__fp)->_flags & __SRD) != 0) +#define __fwriting(__fp) (((__fp)->_flags & __SWR) != 0) +#define __freadable(__fp) (((__fp)->_flags & (__SRD | __SRW)) != 0) +#define __fwritable(__fp) (((__fp)->_flags & (__SWR | __SRW)) != 0) +#define __flbf(__fp) (((__fp)->_flags & __SLBF) != 0) +#define __fpending(__fp) ((size_t) ((__fp)->_p - (__fp)->_bf._base)) + +#endif /* __cplusplus */ + +#endif /* __GNUC__ */ + +_END_STD_C + +#endif /* _STDIO_EXT_H_ */ diff --git a/tools/sdk/include/newlib/stdlib.h b/tools/sdk/include/newlib/stdlib.h new file mode 100644 index 00000000..254ddd71 --- /dev/null +++ b/tools/sdk/include/newlib/stdlib.h @@ -0,0 +1,297 @@ +/* + * stdlib.h + * + * Definitions for common types, variables, and functions. + */ + +#ifndef _STDLIB_H_ +#define _STDLIB_H_ + +#include +#include "_ansi.h" + +#define __need_size_t +#define __need_wchar_t +#define __need_NULL +#include + +#include +#include +#include +#ifndef __STRICT_ANSI__ +#include +#endif + +#ifdef __CYGWIN__ +#include +#endif + +_BEGIN_STD_C + +typedef struct +{ + int quot; /* quotient */ + int rem; /* remainder */ +} div_t; + +typedef struct +{ + long quot; /* quotient */ + long rem; /* remainder */ +} ldiv_t; + +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +typedef struct +{ + long long int quot; /* quotient */ + long long int rem; /* remainder */ +} lldiv_t; +#endif + +#ifndef __compar_fn_t_defined +#define __compar_fn_t_defined +typedef int (*__compar_fn_t) (const _PTR, const _PTR); +#endif + +#ifndef NULL +#define NULL 0 +#endif + +#define EXIT_FAILURE 1 +#define EXIT_SUCCESS 0 + +#define RAND_MAX __RAND_MAX + +int _EXFUN(__locale_mb_cur_max,(_VOID)); + +#define MB_CUR_MAX __locale_mb_cur_max() + +_VOID _EXFUN(abort,(_VOID) _ATTRIBUTE ((__noreturn__))); +int _EXFUN(abs,(int)); +int _EXFUN(atexit,(_VOID (*__func)(_VOID))); +double _EXFUN(atof,(const char *__nptr)); +#ifndef __STRICT_ANSI__ +float _EXFUN(atoff,(const char *__nptr)); +#endif +int _EXFUN(atoi,(const char *__nptr)); +int _EXFUN(_atoi_r,(struct _reent *, const char *__nptr)); +long _EXFUN(atol,(const char *__nptr)); +long _EXFUN(_atol_r,(struct _reent *, const char *__nptr)); +_PTR _EXFUN(bsearch,(const _PTR __key, + const _PTR __base, + size_t __nmemb, + size_t __size, + __compar_fn_t _compar)); +_PTR _EXFUN_NOTHROW(calloc,(size_t __nmemb, size_t __size)); +div_t _EXFUN(div,(int __numer, int __denom)); +_VOID _EXFUN(exit,(int __status) _ATTRIBUTE ((__noreturn__))); +_VOID _EXFUN_NOTHROW(free,(_PTR)); +char * _EXFUN(getenv,(const char *__string)); +char * _EXFUN(_getenv_r,(struct _reent *, const char *__string)); +char * _EXFUN(_findenv,(_CONST char *, int *)); +char * _EXFUN(_findenv_r,(struct _reent *, _CONST char *, int *)); +#ifndef __STRICT_ANSI__ +extern char *suboptarg; /* getsubopt(3) external variable */ +int _EXFUN(getsubopt,(char **, char * const *, char **)); +#endif +long _EXFUN(labs,(long)); +ldiv_t _EXFUN(ldiv,(long __numer, long __denom)); +_PTR _EXFUN_NOTHROW(malloc,(size_t __size)); +int _EXFUN(mblen,(const char *, size_t)); +int _EXFUN(_mblen_r,(struct _reent *, const char *, size_t, _mbstate_t *)); +int _EXFUN(mbtowc,(wchar_t *__restrict, const char *__restrict, size_t)); +int _EXFUN(_mbtowc_r,(struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *)); +int _EXFUN(wctomb,(char *, wchar_t)); +int _EXFUN(_wctomb_r,(struct _reent *, char *, wchar_t, _mbstate_t *)); +size_t _EXFUN(mbstowcs,(wchar_t *__restrict, const char *__restrict, size_t)); +size_t _EXFUN(_mbstowcs_r,(struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *)); +size_t _EXFUN(wcstombs,(char *__restrict, const wchar_t *__restrict, size_t)); +size_t _EXFUN(_wcstombs_r,(struct _reent *, char *__restrict, const wchar_t *__restrict, size_t, _mbstate_t *)); +#ifndef __STRICT_ANSI__ +#ifndef _REENT_ONLY +char * _EXFUN(mkdtemp,(char *)); +int _EXFUN(mkostemp,(char *, int)); +int _EXFUN(mkostemps,(char *, int, int)); +int _EXFUN(mkstemp,(char *)); +int _EXFUN(mkstemps,(char *, int)); +#if (__GNUC__ < 4) || defined(__XTENSA__) +char * _EXFUN(mktemp,(char *)); +#else +char * _EXFUN(mktemp,(char *) _ATTRIBUTE ((__warning__ ("the use of `mktemp' is dangerous; use `mkstemp' instead")))); +#endif +#endif +char * _EXFUN(_mkdtemp_r, (struct _reent *, char *)); +int _EXFUN(_mkostemp_r, (struct _reent *, char *, int)); +int _EXFUN(_mkostemps_r, (struct _reent *, char *, int, int)); +int _EXFUN(_mkstemp_r, (struct _reent *, char *)); +int _EXFUN(_mkstemps_r, (struct _reent *, char *, int)); +#if (__GNUC__ < 4) || defined(__XTENSA__) +char * _EXFUN(_mktemp_r, (struct _reent *, char *)); +#else +char * _EXFUN(_mktemp_r, (struct _reent *, char *) _ATTRIBUTE ((__warning__ ("the use of `mktemp' is dangerous; use `mkstemp' instead")))); +#endif +#endif +_VOID _EXFUN(qsort,(_PTR __base, size_t __nmemb, size_t __size, __compar_fn_t _compar)); +int _EXFUN(rand,(_VOID)); +_PTR _EXFUN_NOTHROW(realloc,(_PTR __r, size_t __size)); +#ifndef __STRICT_ANSI__ +_PTR _EXFUN(reallocf,(_PTR __r, size_t __size)); +char * _EXFUN(realpath, (const char *__restrict path, char *__restrict resolved_path)); +#endif +_VOID _EXFUN(srand,(unsigned __seed)); +double _EXFUN(strtod,(const char *__restrict __n, char **__restrict __end_PTR)); +double _EXFUN(_strtod_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR)); +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +float _EXFUN(strtof,(const char *__restrict __n, char **__restrict __end_PTR)); +#endif +#ifndef __STRICT_ANSI__ +/* the following strtodf interface is deprecated...use strtof instead */ +# ifndef strtodf +# define strtodf strtof +# endif +#endif +long _EXFUN(strtol,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); +long _EXFUN(_strtol_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base)); +unsigned long _EXFUN(strtoul,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); +unsigned long _EXFUN(_strtoul_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base)); + +int _EXFUN(system,(const char *__string)); + +#ifndef __STRICT_ANSI__ +long _EXFUN(a64l,(const char *__input)); +char * _EXFUN(l64a,(long __input)); +char * _EXFUN(_l64a_r,(struct _reent *,long __input)); +int _EXFUN(on_exit,(_VOID (*__func)(int, _PTR),_PTR __arg)); +#endif /* ! __STRICT_ANSI__ */ +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +_VOID _EXFUN(_Exit,(int __status) _ATTRIBUTE ((__noreturn__))); +#endif +#ifndef __STRICT_ANSI__ +int _EXFUN(putenv,(char *__string)); +int _EXFUN(_putenv_r,(struct _reent *, char *__string)); +_PTR _EXFUN(_reallocf_r,(struct _reent *, _PTR, size_t)); +int _EXFUN(setenv,(const char *__string, const char *__value, int __overwrite)); +int _EXFUN(_setenv_r,(struct _reent *, const char *__string, const char *__value, int __overwrite)); + +char * _EXFUN(gcvt,(double,int,char *)); +char * _EXFUN(gcvtf,(float,int,char *)); +char * _EXFUN(fcvt,(double,int,int *,int *)); +char * _EXFUN(fcvtf,(float,int,int *,int *)); +char * _EXFUN(ecvt,(double,int,int *,int *)); +char * _EXFUN(ecvtbuf,(double, int, int*, int*, char *)); +char * _EXFUN(fcvtbuf,(double, int, int*, int*, char *)); +char * _EXFUN(ecvtf,(float,int,int *,int *)); +char * _EXFUN(dtoa,(double, int, int, int *, int*, char**)); +#endif +char * _EXFUN(__itoa,(int, char *, int)); +char * _EXFUN(__utoa,(unsigned, char *, int)); +#ifndef __STRICT_ANSI__ +char * _EXFUN(itoa,(int, char *, int)); +char * _EXFUN(utoa,(unsigned, char *, int)); +int _EXFUN(rand_r,(unsigned *__seed)); + +double _EXFUN(drand48,(_VOID)); +double _EXFUN(_drand48_r,(struct _reent *)); +double _EXFUN(erand48,(unsigned short [3])); +double _EXFUN(_erand48_r,(struct _reent *, unsigned short [3])); +long _EXFUN(jrand48,(unsigned short [3])); +long _EXFUN(_jrand48_r,(struct _reent *, unsigned short [3])); +_VOID _EXFUN(lcong48,(unsigned short [7])); +_VOID _EXFUN(_lcong48_r,(struct _reent *, unsigned short [7])); +long _EXFUN(lrand48,(_VOID)); +long _EXFUN(_lrand48_r,(struct _reent *)); +long _EXFUN(mrand48,(_VOID)); +long _EXFUN(_mrand48_r,(struct _reent *)); +long _EXFUN(nrand48,(unsigned short [3])); +long _EXFUN(_nrand48_r,(struct _reent *, unsigned short [3])); +unsigned short * + _EXFUN(seed48,(unsigned short [3])); +unsigned short * + _EXFUN(_seed48_r,(struct _reent *, unsigned short [3])); +_VOID _EXFUN(srand48,(long)); +_VOID _EXFUN(_srand48_r,(struct _reent *, long)); +#endif /* ! __STRICT_ANSI__ */ +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +long long _EXFUN(atoll,(const char *__nptr)); +#endif +#ifndef __STRICT_ANSI__ +long long _EXFUN(_atoll_r,(struct _reent *, const char *__nptr)); +#endif /* ! __STRICT_ANSI__ */ +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +long long _EXFUN(llabs,(long long)); +lldiv_t _EXFUN(lldiv,(long long __numer, long long __denom)); +long long _EXFUN(strtoll,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); +#endif +#ifndef __STRICT_ANSI__ +long long _EXFUN(_strtoll_r,(struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base)); +#endif /* ! __STRICT_ANSI__ */ +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +unsigned long long _EXFUN(strtoull,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); +#endif +#ifndef __STRICT_ANSI__ +unsigned long long _EXFUN(_strtoull_r,(struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base)); + +#ifndef __CYGWIN__ +_VOID _EXFUN(cfree,(_PTR)); +int _EXFUN(unsetenv,(const char *__string)); +int _EXFUN(_unsetenv_r,(struct _reent *, const char *__string)); +#endif + +#ifdef __rtems__ +int _EXFUN(posix_memalign,(void **, size_t, size_t)); +#endif + +#endif /* ! __STRICT_ANSI__ */ + +char * _EXFUN(_dtoa_r,(struct _reent *, double, int, int, int *, int*, char**)); +#ifndef __CYGWIN__ +_PTR _EXFUN_NOTHROW(_malloc_r,(struct _reent *, size_t)); +_PTR _EXFUN_NOTHROW(_calloc_r,(struct _reent *, size_t, size_t)); +_VOID _EXFUN_NOTHROW(_free_r,(struct _reent *, _PTR)); +_PTR _EXFUN_NOTHROW(_realloc_r,(struct _reent *, _PTR, size_t)); +_VOID _EXFUN(_mstats_r,(struct _reent *, char *)); +#endif +int _EXFUN(_system_r,(struct _reent *, const char *)); + +_VOID _EXFUN(__eprintf,(const char *, const char *, unsigned int, const char *)); + +/* There are two common qsort_r variants. If you request + _BSD_SOURCE, you get the BSD version; otherwise you get the GNU + version. We want that #undef qsort_r will still let you + invoke the underlying function, but that requires gcc support. */ +#ifdef _BSD_SOURCE +# ifdef __GNUC__ +_VOID _EXFUN(qsort_r,(_PTR __base, size_t __nmemb, size_t __size, _PTR __thunk, int (*_compar)(_PTR, const _PTR, const _PTR))) + __asm__ (__ASMNAME ("__bsd_qsort_r")); +# else +_VOID _EXFUN(__bsd_qsort_r,(_PTR __base, size_t __nmemb, size_t __size, _PTR __thunk, int (*_compar)(_PTR, const _PTR, const _PTR))); +# define qsort_r __bsd_qsort_r +# endif +#elif __GNU_VISIBLE +_VOID _EXFUN(qsort_r,(_PTR __base, size_t __nmemb, size_t __size, int (*_compar)(const _PTR, const _PTR, _PTR), _PTR __thunk)); +#endif + +/* On platforms where long double equals double. */ +#ifdef _HAVE_LONG_DOUBLE +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +extern long double strtold (const char *__restrict, char **__restrict); +#endif +#endif /* _HAVE_LONG_DOUBLE */ + +_END_STD_C + +#endif /* _STDLIB_H_ */ diff --git a/tools/sdk/include/newlib/string.h b/tools/sdk/include/newlib/string.h new file mode 100644 index 00000000..af5c9da4 --- /dev/null +++ b/tools/sdk/include/newlib/string.h @@ -0,0 +1,167 @@ +/* + * string.h + * + * Definitions for memory and string functions. + */ + +#ifndef _STRING_H_ +#define _STRING_H_ + +#include "_ansi.h" +#include +#include +#include + +#define __need_size_t +#define __need_NULL +#include + +_BEGIN_STD_C + +_PTR _EXFUN(memchr,(const _PTR, int, size_t)); +int _EXFUN(memcmp,(const _PTR, const _PTR, size_t)); +_PTR _EXFUN(memcpy,(_PTR __restrict, const _PTR __restrict, size_t)); +_PTR _EXFUN(memmove,(_PTR, const _PTR, size_t)); +_PTR _EXFUN(memset,(_PTR, int, size_t)); +char *_EXFUN(strcat,(char *__restrict, const char *__restrict)); +char *_EXFUN(strchr,(const char *, int)); +int _EXFUN(strcmp,(const char *, const char *)); +int _EXFUN(strcoll,(const char *, const char *)); +char *_EXFUN(strcpy,(char *__restrict, const char *__restrict)); +size_t _EXFUN(strcspn,(const char *, const char *)); +char *_EXFUN(strerror,(int)); +size_t _EXFUN(strlen,(const char *)); +char *_EXFUN(strncat,(char *__restrict, const char *__restrict, size_t)); +int _EXFUN(strncmp,(const char *, const char *, size_t)); +char *_EXFUN(strncpy,(char *__restrict, const char *__restrict, size_t)); +char *_EXFUN(strpbrk,(const char *, const char *)); +char *_EXFUN(strrchr,(const char *, int)); +size_t _EXFUN(strspn,(const char *, const char *)); +char *_EXFUN(strstr,(const char *, const char *)); +#ifndef _REENT_ONLY +char *_EXFUN(strtok,(char *__restrict, const char *__restrict)); +#endif +size_t _EXFUN(strxfrm,(char *__restrict, const char *__restrict, size_t)); + +#if __POSIX_VISIBLE +char *_EXFUN(strtok_r,(char *__restrict, const char *__restrict, char **__restrict)); +#endif +#if __BSD_VISIBLE +int _EXFUN(bcmp,(const void *, const void *, size_t)); +void _EXFUN(bcopy,(const void *, void *, size_t)); +void _EXFUN(bzero,(void *, size_t)); +int _EXFUN(ffs,(int)); +char *_EXFUN(index,(const char *, int)); +#endif +#if __BSD_VISIBLE || __XSI_VISIBLE +_PTR _EXFUN(memccpy,(_PTR __restrict, const _PTR __restrict, int, size_t)); +#endif +#if __GNU_VISIBLE +_PTR _EXFUN(mempcpy,(_PTR, const _PTR, size_t)); +_PTR _EXFUN(memmem, (const _PTR, size_t, const _PTR, size_t)); +#endif +_PTR _EXFUN(memrchr,(const _PTR, int, size_t)); +#if __GNU_VISIBLE +_PTR _EXFUN(rawmemchr,(const _PTR, int)); +#endif +#if __BSD_VISIBLE +char *_EXFUN(rindex,(const char *, int)); +#endif +char *_EXFUN(stpcpy,(char *__restrict, const char *__restrict)); +char *_EXFUN(stpncpy,(char *__restrict, const char *__restrict, size_t)); +#if __BSD_VISIBLE || __POSIX_VISIBLE +int _EXFUN(strcasecmp,(const char *, const char *)); +#endif +#if __GNU_VISIBLE +char *_EXFUN(strcasestr,(const char *, const char *)); +char *_EXFUN(strchrnul,(const char *, int)); +#endif +#if __XSI_VISIBLE >= 500 +char *_EXFUN(strdup,(const char *)); +#endif +#ifndef __STRICT_ANSI__ +char *_EXFUN(_strdup_r,(struct _reent *, const char *)); +#endif +#if __XSI_VISIBLE >= 700 +char *_EXFUN(strndup,(const char *, size_t)); +#endif + +#ifndef __STRICT_ANSI__ +char *_EXFUN(_strndup_r,(struct _reent *, const char *, size_t)); +#endif + +#if __GNU_VISIBLE +int _EXFUN(ffsl,(long)); +int _EXFUN(ffsll, (long long)); +#endif + +/* There are two common strerror_r variants. If you request + _GNU_SOURCE, you get the GNU version; otherwise you get the POSIX + version. POSIX requires that #undef strerror_r will still let you + invoke the underlying function, but that requires gcc support. */ +#if __GNU_VISIBLE +char *_EXFUN(strerror_r,(int, char *, size_t)); +#else +# ifdef __GNUC__ +int _EXFUN(strerror_r,(int, char *, size_t)) + __asm__ (__ASMNAME ("__xpg_strerror_r")); +# else +int _EXFUN(__xpg_strerror_r,(int, char *, size_t)); +# define strerror_r __xpg_strerror_r +# endif +#endif + +/* Reentrant version of strerror. */ +char * _EXFUN(_strerror_r, (struct _reent *, int, int, int *)); + +#if __BSD_VISIBLE +size_t _EXFUN(strlcat,(char *, const char *, size_t)); +size_t _EXFUN(strlcpy,(char *, const char *, size_t)); +#endif +#if __BSD_VISIBLE || __POSIX_VISIBLE +int _EXFUN(strncasecmp,(const char *, const char *, size_t)); +#endif +#if !defined(__STRICT_ANSI__) || __POSIX_VISIBLE >= 200809 || \ + __XSI_VISIBLE >= 700 +size_t _EXFUN(strnlen,(const char *, size_t)); +#endif +#if __BSD_VISIBLE +char *_EXFUN(strsep,(char **, const char *)); +#endif + +/* + * The origin of these is unknown to me so I am conditionalizing them + * on __STRICT_ANSI__. Finetuning this is definitely needed. --joel + */ +#if !defined(__STRICT_ANSI__) +char *_EXFUN(strlwr,(char *)); +char *_EXFUN(strupr,(char *)); +#endif + +#ifndef DEFS_H /* Kludge to work around problem compiling in gdb */ +char *_EXFUN(strsignal, (int __signo)); +#endif + +#ifdef __CYGWIN__ +int _EXFUN(strtosigno, (const char *__name)); +#endif + +#if defined _GNU_SOURCE && defined __GNUC__ +#define strdupa(__s) \ + (__extension__ ({const char *__in = (__s); \ + size_t __len = strlen (__in) + 1; \ + char * __out = (char *) __builtin_alloca (__len); \ + (char *) memcpy (__out, __in, __len);})) +#define strndupa(__s, __n) \ + (__extension__ ({const char *__in = (__s); \ + size_t __len = strnlen (__in, (__n)) + 1; \ + char *__out = (char *) __builtin_alloca (__len); \ + __out[__len-1] = '\0'; \ + (char *) memcpy (__out, __in, __len-1);})) +#endif /* _GNU_SOURCE && __GNUC__ */ + +#include + +_END_STD_C + +#endif /* _STRING_H_ */ diff --git a/tools/sdk/include/newlib/strings.h b/tools/sdk/include/newlib/strings.h new file mode 100644 index 00000000..131d81d2 --- /dev/null +++ b/tools/sdk/include/newlib/strings.h @@ -0,0 +1,35 @@ +/* + * strings.h + * + * Definitions for string operations. + */ + +#ifndef _STRINGS_H_ +#define _STRINGS_H_ + +#include "_ansi.h" +#include + +#include /* for size_t */ + +_BEGIN_STD_C + +#if !defined __STRICT_ANSI__ && _POSIX_VERSION < 200809L +/* + * Marked LEGACY in Open Group Base Specifications Issue 6/IEEE Std 1003.1-2004 + * Removed from Open Group Base Specifications Issue 7/IEEE Std 1003.1-2008 + */ +int _EXFUN(bcmp,(const void *, const void *, size_t)); +void _EXFUN(bcopy,(const void *, void *, size_t)); +void _EXFUN(bzero,(void *, size_t)); +char *_EXFUN(index,(const char *, int)); +char *_EXFUN(rindex,(const char *, int)); +#endif /* ! __STRICT_ANSI__ */ + +int _EXFUN(ffs,(int)); +int _EXFUN(strcasecmp,(const char *, const char *)); +int _EXFUN(strncasecmp,(const char *, const char *, size_t)); + +_END_STD_C + +#endif /* _STRINGS_H_ */ diff --git a/tools/sdk/include/newlib/sys/_default_fcntl.h b/tools/sdk/include/newlib/sys/_default_fcntl.h new file mode 100644 index 00000000..eb674ae7 --- /dev/null +++ b/tools/sdk/include/newlib/sys/_default_fcntl.h @@ -0,0 +1,213 @@ + +#ifndef _SYS__DEFAULT_FCNTL_H_ +#ifdef __cplusplus +extern "C" { +#endif +#define _SYS__DEFAULT_FCNTL_H_ +#include <_ansi.h> +#include +#define _FOPEN (-1) /* from sys/file.h, kernel use only */ +#define _FREAD 0x0001 /* read enabled */ +#define _FWRITE 0x0002 /* write enabled */ +#define _FAPPEND 0x0008 /* append (writes guaranteed at the end) */ +#define _FMARK 0x0010 /* internal; mark during gc() */ +#define _FDEFER 0x0020 /* internal; defer for next gc pass */ +#define _FASYNC 0x0040 /* signal pgrp when data ready */ +#define _FSHLOCK 0x0080 /* BSD flock() shared lock present */ +#define _FEXLOCK 0x0100 /* BSD flock() exclusive lock present */ +#define _FCREAT 0x0200 /* open with file create */ +#define _FTRUNC 0x0400 /* open with truncation */ +#define _FEXCL 0x0800 /* error on open if file exists */ +#define _FNBIO 0x1000 /* non blocking I/O (sys5 style) */ +#define _FSYNC 0x2000 /* do all writes synchronously */ +#define _FNONBLOCK 0x4000 /* non blocking I/O (POSIX style) */ +#define _FNDELAY _FNONBLOCK /* non blocking I/O (4.2 style) */ +#define _FNOCTTY 0x8000 /* don't assign a ctty on this open */ + +#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR) + +/* + * Flag values for open(2) and fcntl(2) + * The kernel adds 1 to the open modes to turn it into some + * combination of FREAD and FWRITE. + */ +#define O_RDONLY 0 /* +1 == FREAD */ +#define O_WRONLY 1 /* +1 == FWRITE */ +#define O_RDWR 2 /* +1 == FREAD|FWRITE */ +#define O_APPEND _FAPPEND +#define O_CREAT _FCREAT +#define O_TRUNC _FTRUNC +#define O_EXCL _FEXCL +#define O_SYNC _FSYNC +/* O_NDELAY _FNDELAY set in include/fcntl.h */ +/* O_NDELAY _FNBIO set in include/fcntl.h */ +#define O_NONBLOCK _FNONBLOCK +#define O_NOCTTY _FNOCTTY +/* For machines which care - */ +#if defined (__CYGWIN__) +#define _FBINARY 0x10000 +#define _FTEXT 0x20000 +#define _FNOINHERIT 0x40000 +#define _FDIRECT 0x80000 +#define _FNOFOLLOW 0x100000 +#define _FDIRECTORY 0x200000 +#define _FEXECSRCH 0x400000 + +#define O_BINARY _FBINARY +#define O_TEXT _FTEXT +#define O_CLOEXEC _FNOINHERIT +#define O_DIRECT _FDIRECT +#define O_NOFOLLOW _FNOFOLLOW +#define O_DSYNC _FSYNC +#define O_RSYNC _FSYNC +#define O_DIRECTORY _FDIRECTORY +#define O_EXEC _FEXECSRCH +#define O_SEARCH _FEXECSRCH +#endif + +#ifndef _POSIX_SOURCE + +/* + * Flags that work for fcntl(fd, F_SETFL, FXXXX) + */ +#define FAPPEND _FAPPEND +#define FSYNC _FSYNC +#define FASYNC _FASYNC +#define FNBIO _FNBIO +#define FNONBIO _FNONBLOCK /* XXX fix to be NONBLOCK everywhere */ +#define FNDELAY _FNDELAY + +/* + * Flags that are disallowed for fcntl's (FCNTLCANT); + * used for opens, internal state, or locking. + */ +#define FREAD _FREAD +#define FWRITE _FWRITE +#define FMARK _FMARK +#define FDEFER _FDEFER +#define FSHLOCK _FSHLOCK +#define FEXLOCK _FEXLOCK + +/* + * The rest of the flags, used only for opens + */ +#define FOPEN _FOPEN +#define FCREAT _FCREAT +#define FTRUNC _FTRUNC +#define FEXCL _FEXCL +#define FNOCTTY _FNOCTTY + +#endif /* !_POSIX_SOURCE */ + +/* XXX close on exec request; must match UF_EXCLOSE in user.h */ +#define FD_CLOEXEC 1 /* posix */ + +/* fcntl(2) requests */ +#define F_DUPFD 0 /* Duplicate fildes */ +#define F_GETFD 1 /* Get fildes flags (close on exec) */ +#define F_SETFD 2 /* Set fildes flags (close on exec) */ +#define F_GETFL 3 /* Get file flags */ +#define F_SETFL 4 /* Set file flags */ +#ifndef _POSIX_SOURCE +#define F_GETOWN 5 /* Get owner - for ASYNC */ +#define F_SETOWN 6 /* Set owner - for ASYNC */ +#endif /* !_POSIX_SOURCE */ +#define F_GETLK 7 /* Get record-locking information */ +#define F_SETLK 8 /* Set or Clear a record-lock (Non-Blocking) */ +#define F_SETLKW 9 /* Set or Clear a record-lock (Blocking) */ +#ifndef _POSIX_SOURCE +#define F_RGETLK 10 /* Test a remote lock to see if it is blocked */ +#define F_RSETLK 11 /* Set or unlock a remote lock */ +#define F_CNVT 12 /* Convert a fhandle to an open fd */ +#define F_RSETLKW 13 /* Set or Clear remote record-lock(Blocking) */ +#endif /* !_POSIX_SOURCE */ +#ifdef __CYGWIN__ +#define F_DUPFD_CLOEXEC 14 /* As F_DUPFD, but set close-on-exec flag */ +#endif + +/* fcntl(2) flags (l_type field of flock structure) */ +#define F_RDLCK 1 /* read lock */ +#define F_WRLCK 2 /* write lock */ +#define F_UNLCK 3 /* remove lock(s) */ +#ifndef _POSIX_SOURCE +#define F_UNLKSYS 4 /* remove remote locks for a given system */ +#endif /* !_POSIX_SOURCE */ + +#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || defined(__CYGWIN__) +/* Special descriptor value to denote the cwd in calls to openat(2) etc. */ +#define AT_FDCWD -2 + +/* Flag values for faccessat2) et al. */ +#define AT_EACCESS 1 +#define AT_SYMLINK_NOFOLLOW 2 +#define AT_SYMLINK_FOLLOW 4 +#define AT_REMOVEDIR 8 +#endif + +#if __BSD_VISIBLE +/* lock operations for flock(2) */ +#define LOCK_SH 0x01 /* shared file lock */ +#define LOCK_EX 0x02 /* exclusive file lock */ +#define LOCK_NB 0x04 /* don't block when locking */ +#define LOCK_UN 0x08 /* unlock file */ +#endif + +/*#include */ + +#ifndef __CYGWIN__ +/* file segment locking set data type - information passed to system by user */ +struct flock { + short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */ + short l_whence; /* flag to choose starting offset */ + long l_start; /* relative offset, in bytes */ + long l_len; /* length, in bytes; 0 means lock to EOF */ + short l_pid; /* returned with F_GETLK */ + short l_xxx; /* reserved for future use */ +}; +#endif /* __CYGWIN__ */ + +#ifndef _POSIX_SOURCE +/* extended file segment locking set data type */ +struct eflock { + short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */ + short l_whence; /* flag to choose starting offset */ + long l_start; /* relative offset, in bytes */ + long l_len; /* length, in bytes; 0 means lock to EOF */ + short l_pid; /* returned with F_GETLK */ + short l_xxx; /* reserved for future use */ + long l_rpid; /* Remote process id wanting this lock */ + long l_rsys; /* Remote system id wanting this lock */ +}; +#endif /* !_POSIX_SOURCE */ + +#include +#include /* sigh. for the mode bits for open/creat */ + +extern int open _PARAMS ((const char *, int, ...)); +#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || defined(__CYGWIN__) +extern int openat _PARAMS ((int, const char *, int, ...)); +#endif +extern int creat _PARAMS ((const char *, mode_t)); +extern int fcntl _PARAMS ((int, int, ...)); +#if __BSD_VISIBLE +extern int flock _PARAMS ((int, int)); +#endif +#ifdef __CYGWIN__ +#include +extern int futimesat _PARAMS ((int, const char *, const struct timeval *)); +#endif + +/* Provide _ prototypes for functions provided by some versions + of newlib. */ +#ifdef _COMPILING_NEWLIB +extern int _open _PARAMS ((const char *, int, ...)); +extern int _fcntl _PARAMS ((int, int, ...)); +#ifdef __LARGE64_FILES +extern int _open64 _PARAMS ((const char *, int, ...)); +#endif +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !_SYS__DEFAULT_FCNTL_H_ */ diff --git a/tools/sdk/include/newlib/sys/_intsup.h b/tools/sdk/include/newlib/sys/_intsup.h new file mode 100644 index 00000000..fa78426c --- /dev/null +++ b/tools/sdk/include/newlib/sys/_intsup.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2004, 2005 by + * Ralf Corsepius, Ulm/Germany. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + * + * Modified for xtensa arch & non-long int32_t, removes automatic setting of __have_long32. + */ + +#ifndef _SYS__INTSUP_H +#define _SYS__INTSUP_H + +#include + +#define __STDINT_EXP(x) __##x##__ + +#define __have_longlong64 1 + +#endif /* _SYS__INTSUP_H */ diff --git a/tools/sdk/include/newlib/sys/_types.h b/tools/sdk/include/newlib/sys/_types.h new file mode 100644 index 00000000..07bc2767 --- /dev/null +++ b/tools/sdk/include/newlib/sys/_types.h @@ -0,0 +1,91 @@ +/* ANSI C namespace clean utility typedefs */ + +/* This file defines various typedefs needed by the system calls that support + the C library. Basically, they're just the POSIX versions with an '_' + prepended. This file lives in the `sys' directory so targets can provide + their own if desired (or they can put target dependant conditionals here). +*/ + +#ifndef _SYS__TYPES_H +#define _SYS__TYPES_H + +#include +#include + +#ifndef __off_t_defined +typedef long _off_t; +#endif + +#ifndef __dev_t_defined +typedef short __dev_t; +#endif + +#ifndef __uid_t_defined +typedef unsigned short __uid_t; +#endif +#ifndef __gid_t_defined +typedef unsigned short __gid_t; +#endif + +#ifndef __off64_t_defined +__extension__ typedef long long _off64_t; +#endif + +/* + * We need fpos_t for the following, but it doesn't have a leading "_", + * so we use _fpos_t instead. + */ +#ifndef __fpos_t_defined +typedef long _fpos_t; /* XXX must match off_t in */ + /* (and must be `long' for now) */ +#endif + +#ifdef __LARGE64_FILES +#ifndef __fpos64_t_defined +typedef _off64_t _fpos64_t; +#endif +#endif + +#ifndef __ssize_t_defined +#ifdef __SIZE_TYPE__ +/* If __SIZE_TYPE__ is defined (gcc) we define ssize_t based on size_t. + We simply change "unsigned" to "signed" for this single definition + to make sure ssize_t and size_t only differ by their signedness. */ +#define unsigned signed +typedef __SIZE_TYPE__ _ssize_t; +#undef unsigned +#else +#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647 +typedef int _ssize_t; +#else +typedef long _ssize_t; +#endif +#endif +#endif + +#define __need_wint_t +#include + +#ifndef __mbstate_t_defined +/* Conversion state information. */ +typedef struct +{ + int __count; + union + { + wint_t __wch; + unsigned char __wchb[4]; + } __value; /* Value so far. */ +} _mbstate_t; +#endif + +#ifndef __flock_t_defined +typedef _LOCK_RECURSIVE_T _flock_t; +#endif + +#ifndef __iconv_t_defined +/* Iconv descriptor type */ +typedef void *_iconv_t; +#endif + +#endif /* _SYS__TYPES_H */ diff --git a/tools/sdk/include/newlib/sys/cdefs.h b/tools/sdk/include/newlib/sys/cdefs.h new file mode 100644 index 00000000..a5e613c6 --- /dev/null +++ b/tools/sdk/include/newlib/sys/cdefs.h @@ -0,0 +1,710 @@ +/* libc/sys/linux/sys/cdefs.h - Helper macros for K&R vs. ANSI C compat. */ + +/* Written 2000 by Werner Almesberger */ + +/*- + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Berkeley Software Design, Inc. + * + * 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. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + * + * @(#)cdefs.h 8.8 (Berkeley) 1/9/95 + * $FreeBSD$ + */ + +#ifndef _SYS_CDEFS_H_ +#define _SYS_CDEFS_H_ + +#include +#include +#include + +#define __PMT(args) args +#define __DOTS , ... +#define __THROW + +#ifdef __GNUC__ +# define __ASMNAME(cname) __XSTRING (__USER_LABEL_PREFIX__) cname +#endif + +#define __ptr_t void * +#define __long_double_t long double + +#define __attribute_malloc__ +#define __attribute_pure__ +#define __attribute_format_strfmon__(a,b) +#define __flexarr [0] + +#ifndef __BOUNDED_POINTERS__ +# define __bounded /* nothing */ +# define __unbounded /* nothing */ +# define __ptrvalue /* nothing */ +#endif + +/* + * Testing against Clang-specific extensions. + */ + +#ifndef __has_extension +#define __has_extension __has_feature +#endif +#ifndef __has_feature +#define __has_feature(x) 0 +#endif +#ifndef __has_include +#define __has_include(x) 0 +#endif +#ifndef __has_builtin +#define __has_builtin(x) 0 +#endif + +#if defined(__cplusplus) +#define __BEGIN_DECLS extern "C" { +#define __END_DECLS } +#else +#define __BEGIN_DECLS +#define __END_DECLS +#endif + +/* + * This code has been put in place to help reduce the addition of + * compiler specific defines in FreeBSD code. It helps to aid in + * having a compiler-agnostic source tree. + */ + +#if defined(__GNUC__) || defined(__INTEL_COMPILER) + +#if __GNUC__ >= 3 || defined(__INTEL_COMPILER) +#define __GNUCLIKE_ASM 3 +#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS +#else +#define __GNUCLIKE_ASM 2 +#endif +#define __GNUCLIKE___TYPEOF 1 +#define __GNUCLIKE___OFFSETOF 1 +#define __GNUCLIKE___SECTION 1 + +#ifndef __INTEL_COMPILER +# define __GNUCLIKE_CTOR_SECTION_HANDLING 1 +#endif + +#define __GNUCLIKE_BUILTIN_CONSTANT_P 1 +# if defined(__INTEL_COMPILER) && defined(__cplusplus) \ + && __INTEL_COMPILER < 800 +# undef __GNUCLIKE_BUILTIN_CONSTANT_P +# endif + +#if (__GNUC_MINOR__ > 95 || __GNUC__ >= 3) && !defined(__INTEL_COMPILER) +# define __GNUCLIKE_BUILTIN_VARARGS 1 +# define __GNUCLIKE_BUILTIN_STDARG 1 +# define __GNUCLIKE_BUILTIN_VAALIST 1 +#endif + +#if defined(__GNUC__) +# define __GNUC_VA_LIST_COMPATIBILITY 1 +#endif + +/* + * Compiler memory barriers, specific to gcc and clang. + */ +#if defined(__GNUC__) +#define __compiler_membar() __asm __volatile(" " : : : "memory") +#endif + +#ifndef __INTEL_COMPILER +# define __GNUCLIKE_BUILTIN_NEXT_ARG 1 +# define __GNUCLIKE_MATH_BUILTIN_RELOPS +#endif + +#define __GNUCLIKE_BUILTIN_MEMCPY 1 + +/* XXX: if __GNUC__ >= 2: not tested everywhere originally, where replaced */ +#define __CC_SUPPORTS_INLINE 1 +#define __CC_SUPPORTS___INLINE 1 +#define __CC_SUPPORTS___INLINE__ 1 + +#define __CC_SUPPORTS___FUNC__ 1 +#define __CC_SUPPORTS_WARNING 1 + +#define __CC_SUPPORTS_VARADIC_XXX 1 /* see varargs.h */ + +#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1 + +#endif /* __GNUC__ || __INTEL_COMPILER */ + +/* + * The __CONCAT macro is used to concatenate parts of symbol names, e.g. + * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo. + * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI + * mode -- there must be no spaces between its arguments, and for nested + * __CONCAT's, all the __CONCAT's must be at the left. __CONCAT can also + * concatenate double-quoted strings produced by the __STRING macro, but + * this only works with ANSI C. + * + * __XSTRING is like __STRING, but it expands any macros in its argument + * first. It is only available with ANSI C. + */ +#if defined(__STDC__) || defined(__cplusplus) +#define __P(protos) protos /* full-blown ANSI C */ +#define __CONCAT1(x,y) x ## y +#define __CONCAT(x,y) __CONCAT1(x,y) +#define __STRING(x) #x /* stringify without expanding x */ +#define __XSTRING(x) __STRING(x) /* expand x, then stringify */ + +#define __const const /* define reserved names to standard */ +#define __signed signed +#define __volatile volatile +#if defined(__cplusplus) +#define __inline inline /* convert to C++ keyword */ +#else +#if !(defined(__CC_SUPPORTS___INLINE)) +#define __inline /* delete GCC keyword */ +#endif /* ! __CC_SUPPORTS___INLINE */ +#endif /* !__cplusplus */ + +#else /* !(__STDC__ || __cplusplus) */ +#define __P(protos) () /* traditional C preprocessor */ +#define __CONCAT(x,y) x/**/y +#define __STRING(x) "x" + +#if !defined(__CC_SUPPORTS___INLINE) +#define __const /* delete pseudo-ANSI C keywords */ +#define __inline +#define __signed +#define __volatile +/* + * In non-ANSI C environments, new programs will want ANSI-only C keywords + * deleted from the program and old programs will want them left alone. + * When using a compiler other than gcc, programs using the ANSI C keywords + * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS. + * When using "gcc -traditional", we assume that this is the intent; if + * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone. + */ +#ifndef NO_ANSI_KEYWORDS +#define const /* delete ANSI C keywords */ +#define inline +#define signed +#define volatile +#endif /* !NO_ANSI_KEYWORDS */ +#endif /* !__CC_SUPPORTS___INLINE */ +#endif /* !(__STDC__ || __cplusplus) */ + +/* + * Compiler-dependent macros to help declare dead (non-returning) and + * pure (no side effects) functions, and unused variables. They are + * null except for versions of gcc that are known to support the features + * properly (old versions of gcc-2 supported the dead and pure features + * in a different (wrong) way). If we do not provide an implementation + * for a given compiler, let the compile fail if it is told to use + * a feature that we cannot live without. + */ +#ifdef lint +#define __dead2 +#define __pure2 +#define __unused +#define __packed +#define __aligned(x) +#define __section(x) +#else +#if !__GNUC_PREREQ__(2, 5) && !defined(__INTEL_COMPILER) +#define __dead2 +#define __pure2 +#define __unused +#endif +#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7 && !defined(__INTEL_COMPILER) +#define __dead2 __attribute__((__noreturn__)) +#define __pure2 __attribute__((__const__)) +#define __unused +/* XXX Find out what to do for __packed, __aligned and __section */ +#endif +#if __GNUC_PREREQ__(2, 7) +#define __dead2 __attribute__((__noreturn__)) +#define __pure2 __attribute__((__const__)) +#define __unused __attribute__((__unused__)) +#define __used __attribute__((__used__)) +#define __packed __attribute__((__packed__)) +#define __aligned(x) __attribute__((__aligned__(x))) +#define __section(x) __attribute__((__section__(x))) +#endif +#if defined(__INTEL_COMPILER) +#define __dead2 __attribute__((__noreturn__)) +#define __pure2 __attribute__((__const__)) +#define __unused __attribute__((__unused__)) +#define __used __attribute__((__used__)) +#define __packed __attribute__((__packed__)) +#define __aligned(x) __attribute__((__aligned__(x))) +#define __section(x) __attribute__((__section__(x))) +#endif +#endif + +#if !__GNUC_PREREQ__(2, 95) +#define __alignof(x) __offsetof(struct { char __a; x __b; }, __b) +#endif + +/* + * Keywords added in C11. + */ + +#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L + +#if !__has_extension(c_alignas) +#if (defined(__cplusplus) && __cplusplus >= 201103L) || \ + __has_extension(cxx_alignas) +#define _Alignas(x) alignas(x) +#else +/* XXX: Only emulates _Alignas(constant-expression); not _Alignas(type-name). */ +#define _Alignas(x) __aligned(x) +#endif +#endif + +#if defined(__cplusplus) && __cplusplus >= 201103L +#define _Alignof(x) alignof(x) +#else +#define _Alignof(x) __alignof(x) +#endif + +#if !__has_extension(c_atomic) && !__has_extension(cxx_atomic) +/* + * No native support for _Atomic(). Place object in structure to prevent + * most forms of direct non-atomic access. + */ +#define _Atomic(T) struct { T volatile __val; } +#endif + +#if defined(__cplusplus) && __cplusplus >= 201103L +#define _Noreturn [[noreturn]] +#else +#define _Noreturn __dead2 +#endif + +#if __GNUC_PREREQ__(4, 6) && !defined(__cplusplus) +/* Do nothing: _Static_assert() works as per C11 */ +#elif !__has_extension(c_static_assert) +#if (defined(__cplusplus) && __cplusplus >= 201103L) || \ + __has_extension(cxx_static_assert) +#define _Static_assert(x, y) static_assert(x, y) +#elif defined(__COUNTER__) +#define _Static_assert(x, y) __Static_assert(x, __COUNTER__) +#define __Static_assert(x, y) ___Static_assert(x, y) +#define ___Static_assert(x, y) typedef char __assert_ ## y[(x) ? 1 : -1] +#else +#define _Static_assert(x, y) struct __hack +#endif +#endif + +#if !__has_extension(c_thread_local) +/* XXX: Change this to test against C++11 when clang in base supports it. */ +#if /* (defined(__cplusplus) && __cplusplus >= 201103L) || */ \ + __has_extension(cxx_thread_local) +#define _Thread_local thread_local +#else +#define _Thread_local __thread +#endif +#endif + +#endif /* __STDC_VERSION__ || __STDC_VERSION__ < 201112L */ + +/* + * Emulation of C11 _Generic(). Unlike the previously defined C11 + * keywords, it is not possible to implement this using exactly the same + * syntax. Therefore implement something similar under the name + * __generic(). Unlike _Generic(), this macro can only distinguish + * between a single type, so it requires nested invocations to + * distinguish multiple cases. + */ + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +#define __generic(expr, t, yes, no) \ + _Generic(expr, t: yes, default: no) +#elif __GNUC_PREREQ__(3, 1) && !defined(__cplusplus) +#define __generic(expr, t, yes, no) \ + __builtin_choose_expr( \ + __builtin_types_compatible_p(__typeof(expr), t), yes, no) +#endif + +#if __GNUC_PREREQ__(2, 96) +#define __malloc_like __attribute__((__malloc__)) +#define __pure __attribute__((__pure__)) +#else +#define __malloc_like +#define __pure +#endif + +#if __GNUC_PREREQ__(3, 1) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800) +#define __always_inline __attribute__((__always_inline__)) +#else +#define __always_inline +#endif + +#if __GNUC_PREREQ__(3, 1) +#define __noinline __attribute__ ((__noinline__)) +#else +#define __noinline +#endif + +#if __GNUC_PREREQ__(3, 3) +#define __nonnull(x) __attribute__((__nonnull__(x))) +#else +#define __nonnull(x) +#endif + +#if __GNUC_PREREQ__(3, 4) +#define __fastcall __attribute__((__fastcall__)) +#else +#define __fastcall +#endif + +#if __GNUC_PREREQ__(4, 1) +#define __returns_twice __attribute__((__returns_twice__)) +#else +#define __returns_twice +#endif + +/* XXX: should use `#if __STDC_VERSION__ < 199901'. */ +#if !__GNUC_PREREQ__(2, 7) && !defined(__INTEL_COMPILER) +#define __func__ NULL +#endif + +/* + * GCC 2.95 provides `__restrict' as an extension to C90 to support the + * C99-specific `restrict' type qualifier. We happen to use `__restrict' as + * a way to define the `restrict' type qualifier without disturbing older + * software that is unaware of C99 keywords. + */ +#if !(__GNUC__ == 2 && __GNUC_MINOR__ == 95) +#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901 || defined(lint) +#define __restrict +#else +#define __restrict restrict +#endif +#endif + +/* + * GNU C version 2.96 adds explicit branch prediction so that + * the CPU back-end can hint the processor and also so that + * code blocks can be reordered such that the predicted path + * sees a more linear flow, thus improving cache behavior, etc. + * + * The following two macros provide us with a way to utilize this + * compiler feature. Use __predict_true() if you expect the expression + * to evaluate to true, and __predict_false() if you expect the + * expression to evaluate to false. + * + * A few notes about usage: + * + * * Generally, __predict_false() error condition checks (unless + * you have some _strong_ reason to do otherwise, in which case + * document it), and/or __predict_true() `no-error' condition + * checks, assuming you want to optimize for the no-error case. + * + * * Other than that, if you don't know the likelihood of a test + * succeeding from empirical or other `hard' evidence, don't + * make predictions. + * + * * These are meant to be used in places that are run `a lot'. + * It is wasteful to make predictions in code that is run + * seldomly (e.g. at subsystem initialization time) as the + * basic block reordering that this affects can often generate + * larger code. + */ +#if __GNUC_PREREQ__(2, 96) +#define __predict_true(exp) __builtin_expect((exp), 1) +#define __predict_false(exp) __builtin_expect((exp), 0) +#else +#define __predict_true(exp) (exp) +#define __predict_false(exp) (exp) +#endif + +#if __GNUC_PREREQ__(4, 2) +#define __hidden __attribute__((__visibility__("hidden"))) +#define __exported __attribute__((__visibility__("default"))) +#else +#define __hidden +#define __exported +#endif + +#define __offsetof(type, field) offsetof(type, field) +#define __rangeof(type, start, end) \ + (__offsetof(type, end) - __offsetof(type, start)) + +/* + * Given the pointer x to the member m of the struct s, return + * a pointer to the containing structure. When using GCC, we first + * assign pointer x to a local variable, to check that its type is + * compatible with member m. + */ +#if __GNUC_PREREQ__(3, 1) +#define __containerof(x, s, m) ({ \ + const volatile __typeof__(((s *)0)->m) *__x = (x); \ + __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));\ +}) +#else +#define __containerof(x, s, m) \ + __DEQUALIFY(s *, (const volatile char *)(x) - __offsetof(s, m)) +#endif + +/* + * Compiler-dependent macros to declare that functions take printf-like + * or scanf-like arguments. They are null except for versions of gcc + * that are known to support the features properly (old versions of gcc-2 + * didn't permit keeping the keywords out of the application namespace). + */ +#if !__GNUC_PREREQ__(2, 7) && !defined(__INTEL_COMPILER) +#define __printflike(fmtarg, firstvararg) +#define __scanflike(fmtarg, firstvararg) +#define __format_arg(fmtarg) +#define __strfmonlike(fmtarg, firstvararg) +#define __strftimelike(fmtarg, firstvararg) +#else +#define __printflike(fmtarg, firstvararg) \ + __attribute__((__format__ (__printf__, fmtarg, firstvararg))) +#define __scanflike(fmtarg, firstvararg) \ + __attribute__((__format__ (__scanf__, fmtarg, firstvararg))) +#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg))) +#define __strfmonlike(fmtarg, firstvararg) \ + __attribute__((__format__ (__strfmon__, fmtarg, firstvararg))) +#define __strftimelike(fmtarg, firstvararg) \ + __attribute__((__format__ (__strftime__, fmtarg, firstvararg))) +#endif + +/* Compiler-dependent macros that rely on FreeBSD-specific extensions. */ +#if defined(__FreeBSD_cc_version) && __FreeBSD_cc_version >= 300001 && \ + defined(__GNUC__) && !defined(__INTEL_COMPILER) +#define __printf0like(fmtarg, firstvararg) \ + __attribute__((__format__ (__printf0__, fmtarg, firstvararg))) +#else +#define __printf0like(fmtarg, firstvararg) +#endif + +#if defined(__GNUC__) || defined(__INTEL_COMPILER) +#ifndef __INTEL_COMPILER +#define __strong_reference(sym,aliassym) \ + extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym))) +#endif +#ifdef __ELF__ +#ifdef __STDC__ +#define __weak_reference(sym,alias) \ + __asm__(".weak " #alias); \ + __asm__(".equ " #alias ", " #sym) +#define __warn_references(sym,msg) \ + __asm__(".section .gnu.warning." #sym); \ + __asm__(".asciz \"" msg "\""); \ + __asm__(".previous") +#define __sym_compat(sym,impl,verid) \ + __asm__(".symver " #impl ", " #sym "@" #verid) +#define __sym_default(sym,impl,verid) \ + __asm__(".symver " #impl ", " #sym "@@" #verid) +#else +#define __weak_reference(sym,alias) \ + __asm__(".weak alias"); \ + __asm__(".equ alias, sym") +#define __warn_references(sym,msg) \ + __asm__(".section .gnu.warning.sym"); \ + __asm__(".asciz \"msg\""); \ + __asm__(".previous") +#define __sym_compat(sym,impl,verid) \ + __asm__(".symver impl, sym@verid") +#define __sym_default(impl,sym,verid) \ + __asm__(".symver impl, sym@@verid") +#endif /* __STDC__ */ +#else /* !__ELF__ */ +#ifdef __STDC__ +#define __weak_reference(sym,alias) \ + __asm__(".stabs \"_" #alias "\",11,0,0,0"); \ + __asm__(".stabs \"_" #sym "\",1,0,0,0") +#define __warn_references(sym,msg) \ + __asm__(".stabs \"" msg "\",30,0,0,0"); \ + __asm__(".stabs \"_" #sym "\",1,0,0,0") +#else +#define __weak_reference(sym,alias) \ + __asm__(".stabs \"_/**/alias\",11,0,0,0"); \ + __asm__(".stabs \"_/**/sym\",1,0,0,0") +#define __warn_references(sym,msg) \ + __asm__(".stabs msg,30,0,0,0"); \ + __asm__(".stabs \"_/**/sym\",1,0,0,0") +#endif /* __STDC__ */ +#endif /* __ELF__ */ +#endif /* __GNUC__ || __INTEL_COMPILER */ + +#ifndef __FBSDID +#define __FBSDID(s) struct __hack +#endif + +#ifndef __RCSID +#define __RCSID(s) struct __hack +#endif + +#ifndef __RCSID_SOURCE +#define __RCSID_SOURCE(s) struct __hack +#endif + +#ifndef __SCCSID +#define __SCCSID(s) struct __hack +#endif + +#ifndef __COPYRIGHT +#define __COPYRIGHT(s) struct __hack +#endif + +#ifndef __DECONST +#define __DECONST(type, var) ((type)(__uintptr_t)(const void *)(var)) +#endif + +#ifndef __DEVOLATILE +#define __DEVOLATILE(type, var) ((type)(__uintptr_t)(volatile void *)(var)) +#endif + +#ifndef __DEQUALIFY +#define __DEQUALIFY(type, var) ((type)(__uintptr_t)(const volatile void *)(var)) +#endif + +/*- + * The following definitions are an extension of the behavior originally + * implemented in , but with a different level of granularity. + * POSIX.1 requires that the macros we test be defined before any standard + * header file is included. + * + * Here's a quick run-down of the versions: + * defined(_POSIX_SOURCE) 1003.1-1988 + * _POSIX_C_SOURCE == 1 1003.1-1990 + * _POSIX_C_SOURCE == 2 1003.2-1992 C Language Binding Option + * _POSIX_C_SOURCE == 199309 1003.1b-1993 + * _POSIX_C_SOURCE == 199506 1003.1c-1995, 1003.1i-1995, + * and the omnibus ISO/IEC 9945-1: 1996 + * _POSIX_C_SOURCE == 200112 1003.1-2001 + * _POSIX_C_SOURCE == 200809 1003.1-2008 + * + * In addition, the X/Open Portability Guide, which is now the Single UNIX + * Specification, defines a feature-test macro which indicates the version of + * that specification, and which subsumes _POSIX_C_SOURCE. + * + * Our macros begin with two underscores to avoid namespace screwage. + */ + +/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */ +#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1 +#undef _POSIX_C_SOURCE /* Probably illegal, but beyond caring now. */ +#define _POSIX_C_SOURCE 199009 +#endif + +/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */ +#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 199209 +#endif + +/* Deal with various X/Open Portability Guides and Single UNIX Spec. */ +#ifdef _XOPEN_SOURCE +#if _XOPEN_SOURCE - 0 >= 700 +#define __XSI_VISIBLE 700 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200809 +#elif _XOPEN_SOURCE - 0 >= 600 +#define __XSI_VISIBLE 600 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200112 +#elif _XOPEN_SOURCE - 0 >= 500 +#define __XSI_VISIBLE 500 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 199506 +#endif +#endif + +/* + * Deal with all versions of POSIX. The ordering relative to the tests above is + * important. + */ +#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) +#define _POSIX_C_SOURCE 198808 +#endif +#ifdef _POSIX_C_SOURCE +#if _POSIX_C_SOURCE >= 200809 +#define __POSIX_VISIBLE 200809 +#define __ISO_C_VISIBLE 1999 +#elif _POSIX_C_SOURCE >= 200112 +#define __POSIX_VISIBLE 200112 +#define __ISO_C_VISIBLE 1999 +#elif _POSIX_C_SOURCE >= 199506 +#define __POSIX_VISIBLE 199506 +#define __ISO_C_VISIBLE 1990 +#elif _POSIX_C_SOURCE >= 199309 +#define __POSIX_VISIBLE 199309 +#define __ISO_C_VISIBLE 1990 +#elif _POSIX_C_SOURCE >= 199209 +#define __POSIX_VISIBLE 199209 +#define __ISO_C_VISIBLE 1990 +#elif _POSIX_C_SOURCE >= 199009 +#define __POSIX_VISIBLE 199009 +#define __ISO_C_VISIBLE 1990 +#else +#define __POSIX_VISIBLE 198808 +#define __ISO_C_VISIBLE 0 +#endif /* _POSIX_C_SOURCE */ +#else +/*- + * Deal with _ANSI_SOURCE: + * If it is defined, and no other compilation environment is explicitly + * requested, then define our internal feature-test macros to zero. This + * makes no difference to the preprocessor (undefined symbols in preprocessing + * expressions are defined to have value zero), but makes it more convenient for + * a test program to print out the values. + * + * If a program mistakenly defines _ANSI_SOURCE and some other macro such as + * _POSIX_C_SOURCE, we will assume that it wants the broader compilation + * environment (and in fact we will never get here). + */ +#if defined(_ANSI_SOURCE) /* Hide almost everything. */ +#define __POSIX_VISIBLE 0 +#define __XSI_VISIBLE 0 +#define __BSD_VISIBLE 0 +#define __ISO_C_VISIBLE 1990 +#elif defined(_C99_SOURCE) /* Localism to specify strict C99 env. */ +#define __POSIX_VISIBLE 0 +#define __XSI_VISIBLE 0 +#define __BSD_VISIBLE 0 +#define __ISO_C_VISIBLE 1999 +#elif defined(_C11_SOURCE) /* Localism to specify strict C11 env. */ +#define __POSIX_VISIBLE 0 +#define __XSI_VISIBLE 0 +#define __BSD_VISIBLE 0 +#define __ISO_C_VISIBLE 2011 +#elif defined(_GNU_SOURCE) /* Everything and the kitchen sink. */ +#define __POSIX_VISIBLE 200809 +#define __XSI_VISIBLE 700 +#define __BSD_VISIBLE 1 +#define __ISO_C_VISIBLE 2011 +#define __GNU_VISIBLE 1 +#else /* Default: everything except __GNU_VISIBLE. */ +#define __POSIX_VISIBLE 200809 +#define __XSI_VISIBLE 700 +#define __BSD_VISIBLE 1 +#define __ISO_C_VISIBLE 2011 +#endif +#endif + +#endif /* !_SYS_CDEFS_H_ */ diff --git a/tools/sdk/include/newlib/sys/config.h b/tools/sdk/include/newlib/sys/config.h new file mode 100644 index 00000000..b5adfe10 --- /dev/null +++ b/tools/sdk/include/newlib/sys/config.h @@ -0,0 +1,300 @@ +#ifndef __SYS_CONFIG_H__ +#define __SYS_CONFIG_H__ + +#include /* floating point macros */ +#include /* POSIX defs */ + +#ifdef __aarch64__ +#define MALLOC_ALIGNMENT 16 +#endif + +/* exceptions first */ +#if defined(__H8500__) || defined(__W65__) +#define __SMALL_BITFIELDS +/* ??? This conditional is true for the h8500 and the w65, defining H8300 + in those cases probably isn't the right thing to do. */ +#define H8300 1 +#endif + +/* 16 bit integer machines */ +#if defined(__Z8001__) || defined(__Z8002__) || defined(__H8500__) || defined(__W65__) || defined (__mn10200__) || defined (__AVR__) + +#undef INT_MAX +#undef UINT_MAX +#define INT_MAX 32767 +#define UINT_MAX 65535 +#endif + +#if defined (__H8300__) || defined (__H8300H__) || defined(__H8300S__) || defined (__H8300SX__) +#define __SMALL_BITFIELDS +#define H8300 1 +#undef INT_MAX +#undef UINT_MAX +#define INT_MAX __INT_MAX__ +#define UINT_MAX (__INT_MAX__ * 2U + 1) +#endif + +#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__)) +#ifndef __INT32__ +#define __SMALL_BITFIELDS +#undef INT_MAX +#undef UINT_MAX +#define INT_MAX 32767 +#define UINT_MAX (__INT_MAX__ * 2U + 1) +#else /* INT32 */ +#undef INT_MAX +#undef UINT_MAX +#define INT_MAX 2147483647 +#define UINT_MAX (__INT_MAX__ * 2U + 1) +#endif /* INT32 */ + +#endif /* CR16C */ + +#if defined (__xc16x__) || defined (__xc16xL__) || defined (__xc16xS__) +#define __SMALL_BITFIELDS +#endif + +#ifdef __W65__ +#define __SMALL_BITFIELDS +#endif + +#if defined(__D10V__) +#define __SMALL_BITFIELDS +#undef INT_MAX +#undef UINT_MAX +#define INT_MAX __INT_MAX__ +#define UINT_MAX (__INT_MAX__ * 2U + 1) +#define _POINTER_INT short +#endif + +#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__) +#undef INT_MAX +#undef UINT_MAX +#define INT_MAX __INT_MAX__ +#define UINT_MAX (__INT_MAX__ * 2U + 1) +#define _POINTER_INT short +#endif + +#if defined(__m68k__) || defined(__mc68000__) +#define _READ_WRITE_RETURN_TYPE _ssize_t +#endif + +#ifdef ___AM29K__ +#define _FLOAT_RET double +#endif + +#ifdef __i386__ +#ifndef __unix__ +/* in other words, go32 */ +#define _FLOAT_RET double +#endif +#if defined(__linux__) || defined(__RDOS__) +/* we want the reentrancy structure to be returned by a function */ +#define __DYNAMIC_REENT__ +#define HAVE_GETDATE +#define _HAVE_SYSTYPES +#define _READ_WRITE_RETURN_TYPE _ssize_t +#define __LARGE64_FILES 1 +/* we use some glibc header files so turn on glibc large file feature */ +#define _LARGEFILE64_SOURCE 1 +#endif +#endif + +#ifdef __mn10200__ +#define __SMALL_BITFIELDS +#endif + +#ifdef __AVR__ +#define __SMALL_BITFIELDS +#define _POINTER_INT short +#endif + +#ifdef __v850 +#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__sda__)) +#endif + +/* For the PowerPC eabi, force the _impure_ptr to be in .sdata */ +#if defined(__PPC__) +#if defined(_CALL_SYSV) +#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata"))) +#endif +#ifdef __SPE__ +#define _LONG_DOUBLE double +#endif +#endif + +/* Configure small REENT structure for Xilinx MicroBlaze platforms */ +#if defined (__MICROBLAZE__) +#ifndef _REENT_SMALL +#define _REENT_SMALL +#endif +/* Xilinx XMK uses Unix98 mutex */ +#ifdef __XMK__ +#define _UNIX98_THREAD_MUTEX_ATTRIBUTES +#endif +#endif + +#if defined(__mips__) && !defined(__rtems__) +#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata"))) +#endif + +#ifdef __xstormy16__ +#define __SMALL_BITFIELDS +#undef INT_MAX +#undef UINT_MAX +#define INT_MAX __INT_MAX__ +#define UINT_MAX (__INT_MAX__ * 2U + 1) +#define MALLOC_ALIGNMENT 8 +#define _POINTER_INT short +#define __BUFSIZ__ 16 +#define _REENT_SMALL +#endif + +#if defined __MSP430__ +#ifndef _REENT_SMALL +#define _REENT_SMALL +#endif + +#define __SMALL_BITFIELDS + +#ifdef __MSP430X_LARGE__ +#define _POINTER_INT long +#else +#define _POINTER_INT int +#endif +#endif + +#ifdef __m32c__ +#define __SMALL_BITFIELDS +#undef INT_MAX +#undef UINT_MAX +#define INT_MAX __INT_MAX__ +#define UINT_MAX (__INT_MAX__ * 2U + 1) +#define MALLOC_ALIGNMENT 8 +#if defined(__r8c_cpu__) || defined(__m16c_cpu__) +#define _POINTER_INT short +#else +#define _POINTER_INT long +#endif +#define __BUFSIZ__ 16 +#define _REENT_SMALL +#endif /* __m32c__ */ + +#ifdef __SPU__ +#define MALLOC_ALIGNMENT 16 +#define __CUSTOM_FILE_IO__ +#endif + +#ifdef __XTENSA__ +#include +#define MALLOC_ALIGNMENT ((XCHAL_DATA_WIDTH) < 16 ? 16 : (XCHAL_DATA_WIDTH)) +/* esp8266-specific: shrink the default fd buffer size */ +#define __BUFSIZ__ 128 +#ifndef __DYNAMIC_REENT__ +#define __DYNAMIC_REENT__ +#endif +#ifndef _REENT_SMALL +#define _REENT_SMALL +#endif +#define HAVE_GETOPT +#endif + +/* This block should be kept in sync with GCC's limits.h. The point + of having these definitions here is to not include limits.h, which + would pollute the user namespace, while still using types of the + the correct widths when deciding how to define __int32_t and + __int64_t. */ +#ifndef __INT_MAX__ +# ifdef INT_MAX +# define __INT_MAX__ INT_MAX +# else +# define __INT_MAX__ 2147483647 +# endif +#endif + +#ifndef __LONG_MAX__ +# ifdef LONG_MAX +# define __LONG_MAX__ LONG_MAX +# else +# if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) \ + || defined (__sparcv9) +# define __LONG_MAX__ 9223372036854775807L +# else +# define __LONG_MAX__ 2147483647L +# endif /* __alpha__ || sparc64 */ +# endif +#endif +/* End of block that should be kept in sync with GCC's limits.h. */ + +#ifndef _POINTER_INT +#define _POINTER_INT long +#endif + +#ifdef __frv__ +#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata"))) +#endif +#undef __RAND_MAX +#if __INT_MAX__ == 32767 +#define __RAND_MAX 32767 +#else +#define __RAND_MAX 0x7fffffff +#endif + +#if defined(__CYGWIN__) +#include +#if !defined (__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L) +#define __USE_XOPEN2K 1 +#endif +#endif + +#if defined(__rtems__) +#define __FILENAME_MAX__ 255 +#define _READ_WRITE_RETURN_TYPE _ssize_t +#define __DYNAMIC_REENT__ +#define _REENT_GLOBAL_ATEXIT +#endif + +#ifndef __EXPORT +#define __EXPORT +#endif + +#ifndef __IMPORT +#define __IMPORT +#endif + +/* Define return type of read/write routines. In POSIX, the return type + for read()/write() is "ssize_t" but legacy newlib code has been using + "int" for some time. If not specified, "int" is defaulted. */ +#ifndef _READ_WRITE_RETURN_TYPE +#define _READ_WRITE_RETURN_TYPE int +#endif +/* Define `count' parameter of read/write routines. In POSIX, the `count' + parameter is "size_t" but legacy newlib code has been using "int" for some + time. If not specified, "int" is defaulted. */ +#ifndef _READ_WRITE_BUFSIZE_TYPE +#define _READ_WRITE_BUFSIZE_TYPE int +#endif + +#ifndef __WCHAR_MAX__ +#if __INT_MAX__ == 32767 || defined (_WIN32) +#define __WCHAR_MAX__ 0xffffu +#endif +#endif + +/* See if small reent asked for at configuration time and + is not chosen by the platform by default. */ +#ifdef _WANT_REENT_SMALL +#ifndef _REENT_SMALL +#define _REENT_SMALL +#endif +#endif + +/* If _MB_EXTENDED_CHARSETS_ALL is set, we want all of the extended + charsets. The extended charsets add a few functions and a couple + of tables of a few K each. */ +#ifdef _MB_EXTENDED_CHARSETS_ALL +#define _MB_EXTENDED_CHARSETS_ISO 1 +#define _MB_EXTENDED_CHARSETS_WINDOWS 1 +#endif + +#endif /* __SYS_CONFIG_H__ */ diff --git a/tools/sdk/include/newlib/sys/custom_file.h b/tools/sdk/include/newlib/sys/custom_file.h new file mode 100644 index 00000000..96314fb9 --- /dev/null +++ b/tools/sdk/include/newlib/sys/custom_file.h @@ -0,0 +1,2 @@ +#error System-specific custom_file.h is missing. + diff --git a/tools/sdk/include/newlib/sys/dir.h b/tools/sdk/include/newlib/sys/dir.h new file mode 100644 index 00000000..220150dc --- /dev/null +++ b/tools/sdk/include/newlib/sys/dir.h @@ -0,0 +1,10 @@ +/* BSD predecessor of POSIX.1 and struct dirent */ + +#ifndef _SYS_DIR_H_ +#define _SYS_DIR_H_ + +#include + +#define direct dirent + +#endif /*_SYS_DIR_H_*/ diff --git a/tools/sdk/include/newlib/sys/dirent.h b/tools/sdk/include/newlib/sys/dirent.h new file mode 100644 index 00000000..a3fb5c02 --- /dev/null +++ b/tools/sdk/include/newlib/sys/dirent.h @@ -0,0 +1,13 @@ +/* includes , which is this file. On a + system which supports , this file is overridden by + dirent.h in the libc/sys/.../sys directory. On a system which does + not support , we will get this file which uses #error to force + an error. */ + +#ifdef __cplusplus +extern "C" { +#endif +#error " not supported" +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/include/newlib/sys/errno.h b/tools/sdk/include/newlib/sys/errno.h new file mode 100644 index 00000000..a72c3732 --- /dev/null +++ b/tools/sdk/include/newlib/sys/errno.h @@ -0,0 +1,192 @@ +/* errno is not a global variable, because that would make using it + non-reentrant. Instead, its address is returned by the function + __errno. */ + +#ifndef _SYS_ERRNO_H_ +#ifdef __cplusplus +extern "C" { +#endif +#define _SYS_ERRNO_H_ + +#include + +#ifndef _REENT_ONLY +#define errno (*__errno()) +extern int *__errno _PARAMS ((void)); +#endif + +/* Please don't use these variables directly. + Use strerror instead. */ +extern __IMPORT _CONST char * _CONST _sys_errlist[]; +extern __IMPORT int _sys_nerr; +#ifdef __CYGWIN__ +extern __IMPORT const char * const sys_errlist[]; +extern __IMPORT int sys_nerr; +extern __IMPORT char *program_invocation_name; +extern __IMPORT char *program_invocation_short_name; +#endif + +#define __errno_r(ptr) ((ptr)->_errno) + +#define EPERM 1 /* Not owner */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Arg list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No children */ +#define EAGAIN 11 /* No more processes */ +#define ENOMEM 12 /* Not enough space */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define ENOTBLK 15 /* Block device required */ +#endif +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* Too many open files in system */ +#define EMFILE 24 /* File descriptor value too large */ +#define ENOTTY 25 /* Not a character device */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Mathematics argument out of domain of function */ +#define ERANGE 34 /* Result too large */ +#define ENOMSG 35 /* No message of desired type */ +#define EIDRM 36 /* Identifier removed */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define ECHRNG 37 /* Channel number out of range */ +#define EL2NSYNC 38 /* Level 2 not synchronized */ +#define EL3HLT 39 /* Level 3 halted */ +#define EL3RST 40 /* Level 3 reset */ +#define ELNRNG 41 /* Link number out of range */ +#define EUNATCH 42 /* Protocol driver not attached */ +#define ENOCSI 43 /* No CSI structure available */ +#define EL2HLT 44 /* Level 2 halted */ +#endif +#define EDEADLK 45 /* Deadlock */ +#define ENOLCK 46 /* No lock */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define EBADE 50 /* Invalid exchange */ +#define EBADR 51 /* Invalid request descriptor */ +#define EXFULL 52 /* Exchange full */ +#define ENOANO 53 /* No anode */ +#define EBADRQC 54 /* Invalid request code */ +#define EBADSLT 55 /* Invalid slot */ +#define EDEADLOCK 56 /* File locking deadlock error */ +#define EBFONT 57 /* Bad font file fmt */ +#endif +#define ENOSTR 60 /* Not a stream */ +#define ENODATA 61 /* No data (for no delay io) */ +#define ETIME 62 /* Stream ioctl timeout */ +#define ENOSR 63 /* No stream resources */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define ENONET 64 /* Machine is not on the network */ +#define ENOPKG 65 /* Package not installed */ +#define EREMOTE 66 /* The object is remote */ +#endif +#define ENOLINK 67 /* Virtual circuit is gone */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define EADV 68 /* Advertise error */ +#define ESRMNT 69 /* Srmount error */ +#define ECOMM 70 /* Communication error on send */ +#endif +#define EPROTO 71 /* Protocol error */ +#define EMULTIHOP 74 /* Multihop attempted */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define ELBIN 75 /* Inode is remote (not really error) */ +#define EDOTDOT 76 /* Cross mount point (not really error) */ +#endif +#define EBADMSG 77 /* Bad message */ +#define EFTYPE 79 /* Inappropriate file type or format */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define ENOTUNIQ 80 /* Given log. name not unique */ +#define EBADFD 81 /* f.d. invalid for this operation */ +#define EREMCHG 82 /* Remote address changed */ +#define ELIBACC 83 /* Can't access a needed shared lib */ +#define ELIBBAD 84 /* Accessing a corrupted shared lib */ +#define ELIBSCN 85 /* .lib section in a.out corrupted */ +#define ELIBMAX 86 /* Attempting to link in too many libs */ +#define ELIBEXEC 87 /* Attempting to exec a shared library */ +#endif +#define ENOSYS 88 /* Function not implemented */ +#ifdef __CYGWIN__ +#define ENMFILE 89 /* No more files */ +#endif +#define ENOTEMPTY 90 /* Directory not empty */ +#define ENAMETOOLONG 91 /* File or path name too long */ +#define ELOOP 92 /* Too many symbolic links */ +#define EOPNOTSUPP 95 /* Operation not supported on socket */ +#define EPFNOSUPPORT 96 /* Protocol family not supported */ +#define ECONNRESET 104 /* Connection reset by peer */ +#define ENOBUFS 105 /* No buffer space available */ +#define EAFNOSUPPORT 106 /* Address family not supported by protocol family */ +#define EPROTOTYPE 107 /* Protocol wrong type for socket */ +#define ENOTSOCK 108 /* Socket operation on non-socket */ +#define ENOPROTOOPT 109 /* Protocol not available */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define ESHUTDOWN 110 /* Can't send after socket shutdown */ +#endif +#define ECONNREFUSED 111 /* Connection refused */ +#define EADDRINUSE 112 /* Address already in use */ +#define ECONNABORTED 113 /* Software caused connection abort */ +#define ENETUNREACH 114 /* Network is unreachable */ +#define ENETDOWN 115 /* Network interface is not configured */ +#define ETIMEDOUT 116 /* Connection timed out */ +#define EHOSTDOWN 117 /* Host is down */ +#define EHOSTUNREACH 118 /* Host is unreachable */ +#define EINPROGRESS 119 /* Connection already in progress */ +#define EALREADY 120 /* Socket already connected */ +#define EDESTADDRREQ 121 /* Destination address required */ +#define EMSGSIZE 122 /* Message too long */ +#define EPROTONOSUPPORT 123 /* Unknown protocol */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define ESOCKTNOSUPPORT 124 /* Socket type not supported */ +#endif +#define EADDRNOTAVAIL 125 /* Address not available */ +#define ENETRESET 126 /* Connection aborted by network */ +#define EISCONN 127 /* Socket is already connected */ +#define ENOTCONN 128 /* Socket is not connected */ +#define ETOOMANYREFS 129 +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define EPROCLIM 130 +#define EUSERS 131 +#endif +#define EDQUOT 132 +#define ESTALE 133 +#define ENOTSUP 134 /* Not supported */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define ENOMEDIUM 135 /* No medium (in tape drive) */ +#endif +#ifdef __CYGWIN__ +#define ENOSHARE 136 /* No such host or network path */ +#define ECASECLASH 137 /* Filename exists with different case */ +#endif +#define EILSEQ 138 /* Illegal byte sequence */ +#define EOVERFLOW 139 /* Value too large for defined data type */ +#define ECANCELED 140 /* Operation canceled */ +#define ENOTRECOVERABLE 141 /* State not recoverable */ +#define EOWNERDEAD 142 /* Previous owner died */ +#ifdef __LINUX_ERRNO_EXTENSIONS__ +#define ESTRPIPE 143 /* Streams pipe error */ +#endif +#define EWOULDBLOCK EAGAIN /* Operation would block */ + +#define __ELASTERROR 2000 /* Users can add values starting here */ + +#ifdef __cplusplus +} +#endif +#endif /* _SYS_ERRNO_H */ diff --git a/tools/sdk/include/newlib/sys/fcntl.h b/tools/sdk/include/newlib/sys/fcntl.h new file mode 100644 index 00000000..be85f40c --- /dev/null +++ b/tools/sdk/include/newlib/sys/fcntl.h @@ -0,0 +1,4 @@ +#ifndef _SYS_FCNTL_H_ +#define _SYS_FCNTL_H_ +#include +#endif diff --git a/tools/sdk/include/newlib/sys/features.h b/tools/sdk/include/newlib/sys/features.h new file mode 100644 index 00000000..1d90921a --- /dev/null +++ b/tools/sdk/include/newlib/sys/features.h @@ -0,0 +1,235 @@ +/* + * Written by Joel Sherrill . + * + * COPYRIGHT (c) 1989-2000. + * + * On-Line Applications Research Corporation (OAR). + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION + * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS + * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + * $Id$ + */ + +#ifndef _SYS_FEATURES_H +#define _SYS_FEATURES_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Macros to determine that newlib is being used. Put in this header to + * be similar to where glibc stores its version of these macros. + */ +#define __NEWLIB__ 2 +#define __NEWLIB_MINOR__ 1 + +/* Macro to test version of GCC. Returns 0 for non-GCC or too old GCC. */ +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif /* __GNUC_PREREQ */ +/* Version with trailing underscores for BSD compatibility. */ +#define __GNUC_PREREQ__(ma, mi) __GNUC_PREREQ(ma, mi) + +/* RTEMS adheres to POSIX -- 1003.1b with some features from annexes. */ + +#ifdef __rtems__ +#define _POSIX_JOB_CONTROL 1 +#define _POSIX_SAVED_IDS 1 +#define _POSIX_VERSION 199309L +#define _POSIX_ASYNCHRONOUS_IO 1 +#define _POSIX_FSYNC 1 +#define _POSIX_MAPPED_FILES 1 +#define _POSIX_MEMLOCK 1 +#define _POSIX_MEMLOCK_RANGE 1 +#define _POSIX_MEMORY_PROTECTION 1 +#define _POSIX_MESSAGE_PASSING 1 +#define _POSIX_MONOTONIC_CLOCK 200112L +#define _POSIX_PRIORITIZED_IO 1 +#define _POSIX_PRIORITY_SCHEDULING 1 +#define _POSIX_REALTIME_SIGNALS 1 +#define _POSIX_SEMAPHORES 1 +/* #define _POSIX_SHARED_MEMORY_OBJECTS 1 */ +#define _POSIX_SYNCHRONIZED_IO 1 +#define _POSIX_TIMERS 1 +#define _POSIX_BARRIERS 200112L +#define _POSIX_READER_WRITER_LOCKS 200112L +#define _POSIX_SPIN_LOCKS 200112L + + +/* In P1003.1b but defined by drafts at least as early as P1003.1c/D10 */ +#define _POSIX_THREADS 1 +#define _POSIX_THREAD_ATTR_STACKADDR 1 +#define _POSIX_THREAD_ATTR_STACKSIZE 1 +#define _POSIX_THREAD_PRIORITY_SCHEDULING 1 +#define _POSIX_THREAD_PRIO_INHERIT 1 +#define _POSIX_THREAD_PRIO_PROTECT 1 +#define _POSIX_THREAD_PROCESS_SHARED 1 +#define _POSIX_THREAD_SAFE_FUNCTIONS 1 + +/* P1003.4b/D8 defines the constants below this comment. */ +#define _POSIX_SPAWN 1 +#define _POSIX_TIMEOUTS 1 +#define _POSIX_CPUTIME 1 +#define _POSIX_THREAD_CPUTIME 1 +#define _POSIX_SPORADIC_SERVER 1 +#define _POSIX_THREAD_SPORADIC_SERVER 1 +#define _POSIX_DEVICE_CONTROL 1 +#define _POSIX_DEVCTL_DIRECTION 1 +#define _POSIX_INTERRUPT_CONTROL 1 +#define _POSIX_ADVISORY_INFO 1 + +/* UNIX98 added some new pthread mutex attributes */ +#define _UNIX98_THREAD_MUTEX_ATTRIBUTES 1 + +#endif + +/* XMK loosely adheres to POSIX -- 1003.1 */ +#ifdef __XMK__ +#define _POSIX_THREADS 1 +#define _POSIX_THREAD_PRIORITY_SCHEDULING 1 +#endif + + +#ifdef __svr4__ +# define _POSIX_JOB_CONTROL 1 +# define _POSIX_SAVED_IDS 1 +# define _POSIX_VERSION 199009L +#endif + +#ifdef __CYGWIN__ + +#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L +#define _POSIX_VERSION 200112L +#define _POSIX2_VERSION 200112L +#define _XOPEN_VERSION 600 + +#define _POSIX_ADVISORY_INFO 200112L +/* #define _POSIX_ASYNCHRONOUS_IO -1 */ +/* #define _POSIX_BARRIERS -1 */ +#define _POSIX_CHOWN_RESTRICTED 1 +#define _POSIX_CLOCK_SELECTION 200112L +#define _POSIX_CPUTIME 200112L +#define _POSIX_FSYNC 200112L +#define _POSIX_IPV6 200112L +#define _POSIX_JOB_CONTROL 1 +#define _POSIX_MAPPED_FILES 200112L +/* #define _POSIX_MEMLOCK -1 */ +#define _POSIX_MEMLOCK_RANGE 200112L +#define _POSIX_MEMORY_PROTECTION 200112L +#define _POSIX_MESSAGE_PASSING 200112L +#define _POSIX_MONOTONIC_CLOCK 200112L +#define _POSIX_NO_TRUNC 1 +/* #define _POSIX_PRIORITIZED_IO -1 */ +#define _POSIX_PRIORITY_SCHEDULING 200112L +#define _POSIX_RAW_SOCKETS 200112L +#define _POSIX_READER_WRITER_LOCKS 200112L +#define _POSIX_REALTIME_SIGNALS 200112L +#define _POSIX_REGEXP 1 +#define _POSIX_SAVED_IDS 1 +#define _POSIX_SEMAPHORES 200112L +#define _POSIX_SHARED_MEMORY_OBJECTS 200112L +#define _POSIX_SHELL 1 +/* #define _POSIX_SPAWN -1 */ +#define _POSIX_SPIN_LOCKS 200112L +/* #define _POSIX_SPORADIC_SERVER -1 */ +#define _POSIX_SYNCHRONIZED_IO 200112L +#define _POSIX_THREAD_ATTR_STACKADDR 200112L +#define _POSIX_THREAD_ATTR_STACKSIZE 200112L +#define _POSIX_THREAD_CPUTIME 200112L +/* #define _POSIX_THREAD_PRIO_INHERIT -1 */ +/* #define _POSIX_THREAD_PRIO_PROTECT -1 */ +#define _POSIX_THREAD_PRIORITY_SCHEDULING 200112L +#define _POSIX_THREAD_PROCESS_SHARED 200112L +#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L +/* #define _POSIX_THREAD_SPORADIC_SERVER -1 */ +#define _POSIX_THREADS 200112L +/* #define _POSIX_TIMEOUTS -1 */ +#define _POSIX_TIMERS 1 +/* #define _POSIX_TRACE -1 */ +/* #define _POSIX_TRACE_EVENT_FILTER -1 */ +/* #define _POSIX_TRACE_INHERIT -1 */ +/* #define _POSIX_TRACE_LOG -1 */ +/* #define _POSIX_TYPED_MEMORY_OBJECTS -1 */ +#define _POSIX_VDISABLE '\0' +#define _POSIX2_C_BIND 200112L +#define _POSIX2_C_DEV 200112L +#define _POSIX2_CHAR_TERM 200112L +/* #define _POSIX2_FORT_DEV -1 */ +/* #define _POSIX2_FORT_RUN -1 */ +/* #define _POSIX2_LOCALEDEF -1 */ +/* #define _POSIX2_PBS -1 */ +/* #define _POSIX2_PBS_ACCOUNTING -1 */ +/* #define _POSIX2_PBS_CHECKPOINT -1 */ +/* #define _POSIX2_PBS_LOCATE -1 */ +/* #define _POSIX2_PBS_MESSAGE -1 */ +/* #define _POSIX2_PBS_TRACK -1 */ +#define _POSIX2_SW_DEV 200112L +#define _POSIX2_UPE 200112L +#define _POSIX_V6_ILP32_OFF32 -1 +#ifdef __LP64__ +#define _POSIX_V6_ILP32_OFFBIG -1 +#define _POSIX_V6_LP64_OFF64 1 +#define _POSIX_V6_LPBIG_OFFBIG 1 +#else +#define _POSIX_V6_ILP32_OFFBIG 1 +#define _POSIX_V6_LP64_OFF64 -1 +#define _POSIX_V6_LPBIG_OFFBIG -1 +#endif +#define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32 +#define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG +#define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64 +#define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG +#define _XOPEN_CRYPT 1 +#define _XOPEN_ENH_I18N 1 +/* #define _XOPEN_LEGACY -1 */ +/* #define _XOPEN_REALTIME -1 */ +/* #define _XOPEN_REALTIME_THREADS -1 */ +#define _XOPEN_SHM 1 +/* #define _XOPEN_STREAMS -1 */ +/* #define _XOPEN_UNIX -1 */ + +#endif /* !__STRICT_ANSI__ || __cplusplus || __STDC_VERSION__ >= 199901L */ + +/* The value corresponds to UNICODE version 4.0, which is the version + supported by XP. Newlib supports 5.2 (2011) but so far Cygwin needs + the MS conversions for double-byte charsets. */ +#define __STDC_ISO_10646__ 200305L + +#endif /* __CYGWIN__ */ + +/* Per the permission given in POSIX.1-2008 section 2.2.1, define + * _POSIX_C_SOURCE if _XOPEN_SOURCE is defined and _POSIX_C_SOURCE is not. + * (_XOPEN_SOURCE indicates that XSI extensions are desired by an application.) + * This permission is first granted in 2008, but use it for older ones, also. + * Allow for _XOPEN_SOURCE to be empty (from the earliest form of it, before it + * was required to have specific values). + */ +#if !defined(_POSIX_C_SOURCE) && defined(_XOPEN_SOURCE) + #if (_XOPEN_SOURCE - 0) == 700 /* POSIX.1-2008 */ + #define _POSIX_C_SOURCE 200809L + #elif (_XOPEN_SOURCE - 0) == 600 /* POSIX.1-2001 or 2004 */ + #define _POSIX_C_SOURCE 200112L + #elif (_XOPEN_SOURCE - 0) == 500 /* POSIX.1-1995 */ + #define _POSIX_C_SOURCE 199506L + #elif (_XOPEN_SOURCE - 0) < 500 /* really old */ + #define _POSIX_C_SOURCE 2 + #endif +#endif + +#ifdef __cplusplus +} +#endif +#endif /* _SYS_FEATURES_H */ diff --git a/tools/sdk/include/newlib/sys/file.h b/tools/sdk/include/newlib/sys/file.h new file mode 100644 index 00000000..be88c6a5 --- /dev/null +++ b/tools/sdk/include/newlib/sys/file.h @@ -0,0 +1,33 @@ +/* Copyright (c) 2005-2006 Tensilica 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. + + 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 TENSILICA + INCORPORATED 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. */ + +#include + +/* Alternate names for values for the WHENCE argument to `lseek'. + These are the same as SEEK_SET, SEEK_CUR, and SEEK_END, respectively. */ +#ifndef L_SET +#define L_SET 0 /* Seek from beginning of file. */ +#define L_INCR 1 /* Seek from current position. */ +#define L_XTND 2 /* Seek from end of file. */ +#endif diff --git a/tools/sdk/include/newlib/sys/iconvnls.h b/tools/sdk/include/newlib/sys/iconvnls.h new file mode 100644 index 00000000..09ea1831 --- /dev/null +++ b/tools/sdk/include/newlib/sys/iconvnls.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2003-2004, Artem B. Bityuckiy. + * Rights transferred to Franklin Electronic Publishers. + * + * 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 AUTHOR 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 AUTHOR 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. + */ + +/* + * Funtions, macros, etc implimented in iconv library but used by other + * NLS-related subsystems too. + */ +#ifndef __SYS_ICONVNLS_H__ +#define __SYS_ICONVNLS_H__ + +#include <_ansi.h> +#include +#include +#include + +/* Iconv data path environment variable name */ +#define NLS_ENVVAR_NAME "NLSPATH" +/* Default NLSPATH value */ +#define ICONV_DEFAULT_NLSPATH "/usr/locale" +/* Direction markers */ +#define ICONV_NLS_FROM 0 +#define ICONV_NLS_TO 1 + +_VOID +_EXFUN(_iconv_nls_get_state, (iconv_t cd, mbstate_t *ps, int direction)); + +int +_EXFUN(_iconv_nls_set_state, (iconv_t cd, mbstate_t *ps, int direction)); + +int +_EXFUN(_iconv_nls_is_stateful, (iconv_t cd, int direction)); + +int +_EXFUN(_iconv_nls_get_mb_cur_max, (iconv_t cd, int direction)); + +size_t +_EXFUN(_iconv_nls_conv, (struct _reent *rptr, iconv_t cd, + _CONST char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft)); + +_CONST char * +_EXFUN(_iconv_nls_construct_filename, (struct _reent *rptr, _CONST char *file, + _CONST char *dir, _CONST char *ext)); + + +int +_EXFUN(_iconv_nls_open, (struct _reent *rptr, _CONST char *encoding, + iconv_t *towc, iconv_t *fromwc, int flag)); + +char * +_EXFUN(_iconv_resolve_encoding_name, (struct _reent *rptr, _CONST char *ca)); + +#endif /* __SYS_ICONVNLS_H__ */ + diff --git a/tools/sdk/include/newlib/sys/lock.h b/tools/sdk/include/newlib/sys/lock.h new file mode 100644 index 00000000..0ff34758 --- /dev/null +++ b/tools/sdk/include/newlib/sys/lock.h @@ -0,0 +1,50 @@ +#ifndef _XTENSA_LOCK_H__ +#define _XTENSA_LOCK_H__ + +/* generic lock implementation. + + Weak linked stub _lock functions in lock.c, can be + replaced with a lock implementation at link time. + + */ + +typedef int _lock_t; +typedef _lock_t _LOCK_RECURSIVE_T; +typedef _lock_t _LOCK_T; + +#include <_ansi.h> + +/* NOTE: some parts of newlib statically initialise locks via + __LOCK_INIT, some initialise at runtime via __lock_init. So need to + support possibility that a _lock_t is null during first call to + _lock_acquire or _lock_try_acquire. + + Lock functions all take a pointer to the _lock_t entry, so the + value stored there can be manipulated. +*/ +#define __LOCK_INIT(CLASS,NAME) CLASS _lock_t NAME = 0; +#define __LOCK_INIT_RECURSIVE(CLASS,NAME) CLASS _lock_t NAME = 0; + +void _lock_init(_lock_t *lock); +void _lock_init_recursive(_lock_t *lock); +void _lock_close(_lock_t *lock); +void _lock_close_recursive(_lock_t *lock); +void _lock_acquire(_lock_t *lock); +void _lock_acquire_recursive(_lock_t *lock); +int _lock_try_acquire(_lock_t *lock); +int _lock_try_acquire_recursive(_lock_t *lock); +void _lock_release(_lock_t *lock); +void _lock_release_recursive(_lock_t *lock); + +#define __lock_init(lock) _lock_init(&(lock)) +#define __lock_init_recursive(lock) _lock_init_recursive(&(lock)) +#define __lock_close(lock) _lock_close(&(lock)) +#define __lock_close_recursive(lock) _lock_close_recursive(&(lock)) +#define __lock_acquire(lock) _lock_acquire(&(lock)) +#define __lock_acquire_recursive(lock) _lock_acquire_recursive(&(lock)) +#define __lock_try_acquire(lock) _lock_try_acquire(&(lock)) +#define __lock_try_acquire_recursive(lock) _lock_try_acquire_recursive(&(lock)) +#define __lock_release(lock) _lock_release(&(lock)) +#define __lock_release_recursive(lock) _lock_release_recursive(&(lock)) + +#endif /* _XTENSA_LOCK_H__ */ diff --git a/tools/sdk/include/newlib/sys/param.h b/tools/sdk/include/newlib/sys/param.h new file mode 100644 index 00000000..ef203d3e --- /dev/null +++ b/tools/sdk/include/newlib/sys/param.h @@ -0,0 +1,28 @@ +/* This is a dummy file, not customized for any + particular system. If there is a param.h in libc/sys/SYSDIR/sys, + it will override this one. */ + +#ifndef _SYS_PARAM_H +# define _SYS_PARAM_H + +#include +#include +#include +#include + +#ifndef HZ +# define HZ (60) +#endif +#ifndef NOFILE +# define NOFILE (60) +#endif +#ifndef PATHSIZE +# define PATHSIZE (1024) +#endif + +#define MAXPATHLEN PATH_MAX + +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#define MIN(a,b) ((a) < (b) ? (a) : (b)) + +#endif diff --git a/tools/sdk/include/newlib/sys/queue.h b/tools/sdk/include/newlib/sys/queue.h new file mode 100644 index 00000000..4bc7dac0 --- /dev/null +++ b/tools/sdk/include/newlib/sys/queue.h @@ -0,0 +1,691 @@ +/*- + * Copyright (c) 1991, 1993 + * The Regents of the University of California. 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. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + * + * @(#)queue.h 8.5 (Berkeley) 8/20/94 + * $FreeBSD$ + */ + +#ifndef _SYS_QUEUE_H_ +#define _SYS_QUEUE_H_ + +#include + +/* + * This file defines four types of data structures: singly-linked lists, + * singly-linked tail queues, lists and tail queues. + * + * A singly-linked list is headed by a single forward pointer. The elements + * are singly linked for minimum space and pointer manipulation overhead at + * the expense of O(n) removal for arbitrary elements. New elements can be + * added to the list after an existing element or at the head of the list. + * Elements being removed from the head of the list should use the explicit + * macro for this purpose for optimum efficiency. A singly-linked list may + * only be traversed in the forward direction. Singly-linked lists are ideal + * for applications with large datasets and few or no removals or for + * implementing a LIFO queue. + * + * A singly-linked tail queue is headed by a pair of pointers, one to the + * head of the list and the other to the tail of the list. The elements are + * singly linked for minimum space and pointer manipulation overhead at the + * expense of O(n) removal for arbitrary elements. New elements can be added + * to the list after an existing element, at the head of the list, or at the + * end of the list. Elements being removed from the head of the tail queue + * should use the explicit macro for this purpose for optimum efficiency. + * A singly-linked tail queue may only be traversed in the forward direction. + * Singly-linked tail queues are ideal for applications with large datasets + * and few or no removals or for implementing a FIFO queue. + * + * A list is headed by a single forward pointer (or an array of forward + * pointers for a hash table header). The elements are doubly linked + * so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before + * or after an existing element or at the head of the list. A list + * may be traversed in either direction. + * + * A tail queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or + * after an existing element, at the head of the list, or at the end of + * the list. A tail queue may be traversed in either direction. + * + * For details on the use of these macros, see the queue(3) manual page. + * + * + * SLIST LIST STAILQ TAILQ + * _HEAD + + + + + * _HEAD_INITIALIZER + + + + + * _ENTRY + + + + + * _INIT + + + + + * _EMPTY + + + + + * _FIRST + + + + + * _NEXT + + + + + * _PREV - + - + + * _LAST - - + + + * _FOREACH + + + + + * _FOREACH_SAFE + + + + + * _FOREACH_REVERSE - - - + + * _FOREACH_REVERSE_SAFE - - - + + * _INSERT_HEAD + + + + + * _INSERT_BEFORE - + - + + * _INSERT_AFTER + + + + + * _INSERT_TAIL - - + + + * _CONCAT - - + + + * _REMOVE_AFTER + - + - + * _REMOVE_HEAD + - + - + * _REMOVE + + + + + * _SWAP + + + + + * + */ +#ifdef QUEUE_MACRO_DEBUG +/* Store the last 2 places the queue element or head was altered */ +struct qm_trace { + unsigned long lastline; + unsigned long prevline; + const char *lastfile; + const char *prevfile; +}; + +#define TRACEBUF struct qm_trace trace; +#define TRACEBUF_INITIALIZER { __FILE__, __LINE__, NULL, 0 } , +#define TRASHIT(x) do {(x) = (void *)-1;} while (0) +#define QMD_SAVELINK(name, link) void **name = (void *)&(link) + +#define QMD_TRACE_HEAD(head) do { \ + (head)->trace.prevline = (head)->trace.lastline; \ + (head)->trace.prevfile = (head)->trace.lastfile; \ + (head)->trace.lastline = __LINE__; \ + (head)->trace.lastfile = __FILE__; \ +} while (0) + +#define QMD_TRACE_ELEM(elem) do { \ + (elem)->trace.prevline = (elem)->trace.lastline; \ + (elem)->trace.prevfile = (elem)->trace.lastfile; \ + (elem)->trace.lastline = __LINE__; \ + (elem)->trace.lastfile = __FILE__; \ +} while (0) + +#else +#define QMD_TRACE_ELEM(elem) +#define QMD_TRACE_HEAD(head) +#define QMD_SAVELINK(name, link) +#define TRACEBUF +#define TRACEBUF_INITIALIZER +#define TRASHIT(x) +#endif /* QUEUE_MACRO_DEBUG */ + +/* + * Singly-linked List declarations. + */ +#define SLIST_HEAD(name, type) \ +struct name { \ + struct type *slh_first; /* first element */ \ +} + +#define SLIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define SLIST_ENTRY(type) \ +struct { \ + struct type *sle_next; /* next element */ \ +} + +/* + * Singly-linked List functions. + */ +#define SLIST_EMPTY(head) ((head)->slh_first == NULL) + +#define SLIST_FIRST(head) ((head)->slh_first) + +#define SLIST_FOREACH(var, head, field) \ + for ((var) = SLIST_FIRST((head)); \ + (var); \ + (var) = SLIST_NEXT((var), field)) + +#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = SLIST_FIRST((head)); \ + (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ + for ((varp) = &SLIST_FIRST((head)); \ + ((var) = *(varp)) != NULL; \ + (varp) = &SLIST_NEXT((var), field)) + +#define SLIST_INIT(head) do { \ + SLIST_FIRST((head)) = NULL; \ +} while (0) + +#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ + SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \ + SLIST_NEXT((slistelm), field) = (elm); \ +} while (0) + +#define SLIST_INSERT_HEAD(head, elm, field) do { \ + SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \ + SLIST_FIRST((head)) = (elm); \ +} while (0) + +#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) + +#define SLIST_REMOVE(head, elm, type, field) do { \ + QMD_SAVELINK(oldnext, (elm)->field.sle_next); \ + if (SLIST_FIRST((head)) == (elm)) { \ + SLIST_REMOVE_HEAD((head), field); \ + } \ + else { \ + struct type *curelm = SLIST_FIRST((head)); \ + while (SLIST_NEXT(curelm, field) != (elm)) \ + curelm = SLIST_NEXT(curelm, field); \ + SLIST_REMOVE_AFTER(curelm, field); \ + } \ + TRASHIT(*oldnext); \ +} while (0) + +#define SLIST_REMOVE_AFTER(elm, field) do { \ + SLIST_NEXT(elm, field) = \ + SLIST_NEXT(SLIST_NEXT(elm, field), field); \ +} while (0) + +#define SLIST_REMOVE_HEAD(head, field) do { \ + SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \ +} while (0) + +#define SLIST_SWAP(head1, head2, type) do { \ + struct type *swap_first = SLIST_FIRST(head1); \ + SLIST_FIRST(head1) = SLIST_FIRST(head2); \ + SLIST_FIRST(head2) = swap_first; \ +} while (0) + +/* + * Singly-linked Tail queue declarations. + */ +#define STAILQ_HEAD(name, type) \ +struct name { \ + struct type *stqh_first;/* first element */ \ + struct type **stqh_last;/* addr of last next element */ \ +} + +#define STAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).stqh_first } + +#define STAILQ_ENTRY(type) \ +struct { \ + struct type *stqe_next; /* next element */ \ +} + +/* + * Singly-linked Tail queue functions. + */ +#define STAILQ_CONCAT(head1, head2) do { \ + if (!STAILQ_EMPTY((head2))) { \ + *(head1)->stqh_last = (head2)->stqh_first; \ + (head1)->stqh_last = (head2)->stqh_last; \ + STAILQ_INIT((head2)); \ + } \ +} while (0) + +#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) + +#define STAILQ_FIRST(head) ((head)->stqh_first) + +#define STAILQ_FOREACH(var, head, field) \ + for((var) = STAILQ_FIRST((head)); \ + (var); \ + (var) = STAILQ_NEXT((var), field)) + + +#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = STAILQ_FIRST((head)); \ + (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define STAILQ_INIT(head) do { \ + STAILQ_FIRST((head)) = NULL; \ + (head)->stqh_last = &STAILQ_FIRST((head)); \ +} while (0) + +#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \ + if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ + STAILQ_NEXT((tqelm), field) = (elm); \ +} while (0) + +#define STAILQ_INSERT_HEAD(head, elm, field) do { \ + if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ + STAILQ_FIRST((head)) = (elm); \ +} while (0) + +#define STAILQ_INSERT_TAIL(head, elm, field) do { \ + STAILQ_NEXT((elm), field) = NULL; \ + *(head)->stqh_last = (elm); \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ +} while (0) + +#define STAILQ_LAST(head, type, field) \ + (STAILQ_EMPTY((head)) ? NULL : \ + __containerof((head)->stqh_last, struct type, field.stqe_next)) + +#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) + +#define STAILQ_REMOVE(head, elm, type, field) do { \ + QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \ + if (STAILQ_FIRST((head)) == (elm)) { \ + STAILQ_REMOVE_HEAD((head), field); \ + } \ + else { \ + struct type *curelm = STAILQ_FIRST((head)); \ + while (STAILQ_NEXT(curelm, field) != (elm)) \ + curelm = STAILQ_NEXT(curelm, field); \ + STAILQ_REMOVE_AFTER(head, curelm, field); \ + } \ + TRASHIT(*oldnext); \ +} while (0) + +#define STAILQ_REMOVE_AFTER(head, elm, field) do { \ + if ((STAILQ_NEXT(elm, field) = \ + STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ +} while (0) + +#define STAILQ_REMOVE_HEAD(head, field) do { \ + if ((STAILQ_FIRST((head)) = \ + STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \ + (head)->stqh_last = &STAILQ_FIRST((head)); \ +} while (0) + +#define STAILQ_REMOVE_HEAD_UNTIL(head, elm, field) do { \ + if ((STAILQ_FIRST((head)) = STAILQ_NEXT((elm), field)) == NULL) \ + (head)->stqh_last = &STAILQ_FIRST((head)); \ +} while (0) + +#define STAILQ_SWAP(head1, head2, type) do { \ + struct type *swap_first = STAILQ_FIRST(head1); \ + struct type **swap_last = (head1)->stqh_last; \ + STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \ + (head1)->stqh_last = (head2)->stqh_last; \ + STAILQ_FIRST(head2) = swap_first; \ + (head2)->stqh_last = swap_last; \ + if (STAILQ_EMPTY(head1)) \ + (head1)->stqh_last = &STAILQ_FIRST(head1); \ + if (STAILQ_EMPTY(head2)) \ + (head2)->stqh_last = &STAILQ_FIRST(head2); \ +} while (0) + + +/* + * List declarations. + */ +#define LIST_HEAD(name, type) \ +struct name { \ + struct type *lh_first; /* first element */ \ +} + +#define LIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define LIST_ENTRY(type) \ +struct { \ + struct type *le_next; /* next element */ \ + struct type **le_prev; /* address of previous next element */ \ +} + +/* + * List functions. + */ + +#if (defined(_KERNEL) && defined(INVARIANTS)) +#define QMD_LIST_CHECK_HEAD(head, field) do { \ + if (LIST_FIRST((head)) != NULL && \ + LIST_FIRST((head))->field.le_prev != \ + &LIST_FIRST((head))) \ + panic("Bad list head %p first->prev != head", (head)); \ +} while (0) + +#define QMD_LIST_CHECK_NEXT(elm, field) do { \ + if (LIST_NEXT((elm), field) != NULL && \ + LIST_NEXT((elm), field)->field.le_prev != \ + &((elm)->field.le_next)) \ + panic("Bad link elm %p next->prev != elm", (elm)); \ +} while (0) + +#define QMD_LIST_CHECK_PREV(elm, field) do { \ + if (*(elm)->field.le_prev != (elm)) \ + panic("Bad link elm %p prev->next != elm", (elm)); \ +} while (0) +#else +#define QMD_LIST_CHECK_HEAD(head, field) +#define QMD_LIST_CHECK_NEXT(elm, field) +#define QMD_LIST_CHECK_PREV(elm, field) +#endif /* (_KERNEL && INVARIANTS) */ + +#define LIST_EMPTY(head) ((head)->lh_first == NULL) + +#define LIST_FIRST(head) ((head)->lh_first) + +#define LIST_FOREACH(var, head, field) \ + for ((var) = LIST_FIRST((head)); \ + (var); \ + (var) = LIST_NEXT((var), field)) + +#define LIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = LIST_FIRST((head)); \ + (var) && ((tvar) = LIST_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define LIST_INIT(head) do { \ + LIST_FIRST((head)) = NULL; \ +} while (0) + +#define LIST_INSERT_AFTER(listelm, elm, field) do { \ + QMD_LIST_CHECK_NEXT(listelm, field); \ + if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\ + LIST_NEXT((listelm), field)->field.le_prev = \ + &LIST_NEXT((elm), field); \ + LIST_NEXT((listelm), field) = (elm); \ + (elm)->field.le_prev = &LIST_NEXT((listelm), field); \ +} while (0) + +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ + QMD_LIST_CHECK_PREV(listelm, field); \ + (elm)->field.le_prev = (listelm)->field.le_prev; \ + LIST_NEXT((elm), field) = (listelm); \ + *(listelm)->field.le_prev = (elm); \ + (listelm)->field.le_prev = &LIST_NEXT((elm), field); \ +} while (0) + +#define LIST_INSERT_HEAD(head, elm, field) do { \ + QMD_LIST_CHECK_HEAD((head), field); \ + if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \ + LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\ + LIST_FIRST((head)) = (elm); \ + (elm)->field.le_prev = &LIST_FIRST((head)); \ +} while (0) + +#define LIST_NEXT(elm, field) ((elm)->field.le_next) + +#define LIST_PREV(elm, head, type, field) \ + ((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \ + __containerof((elm)->field.le_prev, struct type, field.le_next)) + +#define LIST_REMOVE(elm, field) do { \ + QMD_SAVELINK(oldnext, (elm)->field.le_next); \ + QMD_SAVELINK(oldprev, (elm)->field.le_prev); \ + QMD_LIST_CHECK_NEXT(elm, field); \ + QMD_LIST_CHECK_PREV(elm, field); \ + if (LIST_NEXT((elm), field) != NULL) \ + LIST_NEXT((elm), field)->field.le_prev = \ + (elm)->field.le_prev; \ + *(elm)->field.le_prev = LIST_NEXT((elm), field); \ + TRASHIT(*oldnext); \ + TRASHIT(*oldprev); \ +} while (0) + +#define LIST_SWAP(head1, head2, type, field) do { \ + struct type *swap_tmp = LIST_FIRST((head1)); \ + LIST_FIRST((head1)) = LIST_FIRST((head2)); \ + LIST_FIRST((head2)) = swap_tmp; \ + if ((swap_tmp = LIST_FIRST((head1))) != NULL) \ + swap_tmp->field.le_prev = &LIST_FIRST((head1)); \ + if ((swap_tmp = LIST_FIRST((head2))) != NULL) \ + swap_tmp->field.le_prev = &LIST_FIRST((head2)); \ +} while (0) + +/* + * Tail queue declarations. + */ +#define TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ + TRACEBUF \ +} + +#define TAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).tqh_first, TRACEBUF_INITIALIZER } + +#define TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ + TRACEBUF \ +} + +/* + * Tail queue functions. + */ +#if (defined(_KERNEL) && defined(INVARIANTS)) +#define QMD_TAILQ_CHECK_HEAD(head, field) do { \ + if (!TAILQ_EMPTY(head) && \ + TAILQ_FIRST((head))->field.tqe_prev != \ + &TAILQ_FIRST((head))) \ + panic("Bad tailq head %p first->prev != head", (head)); \ +} while (0) + +#define QMD_TAILQ_CHECK_TAIL(head, field) do { \ + if (*(head)->tqh_last != NULL) \ + panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \ +} while (0) + +#define QMD_TAILQ_CHECK_NEXT(elm, field) do { \ + if (TAILQ_NEXT((elm), field) != NULL && \ + TAILQ_NEXT((elm), field)->field.tqe_prev != \ + &((elm)->field.tqe_next)) \ + panic("Bad link elm %p next->prev != elm", (elm)); \ +} while (0) + +#define QMD_TAILQ_CHECK_PREV(elm, field) do { \ + if (*(elm)->field.tqe_prev != (elm)) \ + panic("Bad link elm %p prev->next != elm", (elm)); \ +} while (0) +#else +#define QMD_TAILQ_CHECK_HEAD(head, field) +#define QMD_TAILQ_CHECK_TAIL(head, headname) +#define QMD_TAILQ_CHECK_NEXT(elm, field) +#define QMD_TAILQ_CHECK_PREV(elm, field) +#endif /* (_KERNEL && INVARIANTS) */ + +#define TAILQ_CONCAT(head1, head2, field) do { \ + if (!TAILQ_EMPTY(head2)) { \ + *(head1)->tqh_last = (head2)->tqh_first; \ + (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ + (head1)->tqh_last = (head2)->tqh_last; \ + TAILQ_INIT((head2)); \ + QMD_TRACE_HEAD(head1); \ + QMD_TRACE_HEAD(head2); \ + } \ +} while (0) + +#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) + +#define TAILQ_FIRST(head) ((head)->tqh_first) + +#define TAILQ_FOREACH(var, head, field) \ + for ((var) = TAILQ_FIRST((head)); \ + (var); \ + (var) = TAILQ_NEXT((var), field)) + +#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ + for ((var) = TAILQ_LAST((head), headname); \ + (var); \ + (var) = TAILQ_PREV((var), headname, field)) + +#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ + for ((var) = TAILQ_LAST((head), headname); \ + (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ + (var) = (tvar)) + +#define TAILQ_INIT(head) do { \ + TAILQ_FIRST((head)) = NULL; \ + (head)->tqh_last = &TAILQ_FIRST((head)); \ + QMD_TRACE_HEAD(head); \ +} while (0) + +#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + QMD_TAILQ_CHECK_NEXT(listelm, field); \ + if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\ + TAILQ_NEXT((elm), field)->field.tqe_prev = \ + &TAILQ_NEXT((elm), field); \ + else { \ + (head)->tqh_last = &TAILQ_NEXT((elm), field); \ + QMD_TRACE_HEAD(head); \ + } \ + TAILQ_NEXT((listelm), field) = (elm); \ + (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \ + QMD_TRACE_ELEM(&(elm)->field); \ + QMD_TRACE_ELEM(&listelm->field); \ +} while (0) + +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ + QMD_TAILQ_CHECK_PREV(listelm, field); \ + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ + TAILQ_NEXT((elm), field) = (listelm); \ + *(listelm)->field.tqe_prev = (elm); \ + (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \ + QMD_TRACE_ELEM(&(elm)->field); \ + QMD_TRACE_ELEM(&listelm->field); \ +} while (0) + +#define TAILQ_INSERT_HEAD(head, elm, field) do { \ + QMD_TAILQ_CHECK_HEAD(head, field); \ + if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \ + TAILQ_FIRST((head))->field.tqe_prev = \ + &TAILQ_NEXT((elm), field); \ + else \ + (head)->tqh_last = &TAILQ_NEXT((elm), field); \ + TAILQ_FIRST((head)) = (elm); \ + (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \ + QMD_TRACE_HEAD(head); \ + QMD_TRACE_ELEM(&(elm)->field); \ +} while (0) + +#define TAILQ_INSERT_TAIL(head, elm, field) do { \ + QMD_TAILQ_CHECK_TAIL(head, field); \ + TAILQ_NEXT((elm), field) = NULL; \ + (elm)->field.tqe_prev = (head)->tqh_last; \ + *(head)->tqh_last = (elm); \ + (head)->tqh_last = &TAILQ_NEXT((elm), field); \ + QMD_TRACE_HEAD(head); \ + QMD_TRACE_ELEM(&(elm)->field); \ +} while (0) + +#define TAILQ_LAST(head, headname) \ + (*(((struct headname *)((head)->tqh_last))->tqh_last)) + +#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) + +#define TAILQ_PREV(elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) + +#define TAILQ_REMOVE(head, elm, field) do { \ + QMD_SAVELINK(oldnext, (elm)->field.tqe_next); \ + QMD_SAVELINK(oldprev, (elm)->field.tqe_prev); \ + QMD_TAILQ_CHECK_NEXT(elm, field); \ + QMD_TAILQ_CHECK_PREV(elm, field); \ + if ((TAILQ_NEXT((elm), field)) != NULL) \ + TAILQ_NEXT((elm), field)->field.tqe_prev = \ + (elm)->field.tqe_prev; \ + else { \ + (head)->tqh_last = (elm)->field.tqe_prev; \ + QMD_TRACE_HEAD(head); \ + } \ + *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \ + TRASHIT(*oldnext); \ + TRASHIT(*oldprev); \ + QMD_TRACE_ELEM(&(elm)->field); \ +} while (0) + +#define TAILQ_SWAP(head1, head2, type, field) do { \ + struct type *swap_first = (head1)->tqh_first; \ + struct type **swap_last = (head1)->tqh_last; \ + (head1)->tqh_first = (head2)->tqh_first; \ + (head1)->tqh_last = (head2)->tqh_last; \ + (head2)->tqh_first = swap_first; \ + (head2)->tqh_last = swap_last; \ + if ((swap_first = (head1)->tqh_first) != NULL) \ + swap_first->field.tqe_prev = &(head1)->tqh_first; \ + else \ + (head1)->tqh_last = &(head1)->tqh_first; \ + if ((swap_first = (head2)->tqh_first) != NULL) \ + swap_first->field.tqe_prev = &(head2)->tqh_first; \ + else \ + (head2)->tqh_last = &(head2)->tqh_first; \ +} while (0) + +#ifdef _KERNEL + +/* + * XXX insque() and remque() are an old way of handling certain queues. + * They bogusly assumes that all queue heads look alike. + */ + +struct quehead { + struct quehead *qh_link; + struct quehead *qh_rlink; +}; + +#ifdef __GNUC__ + +static __inline void +insque(void *a, void *b) +{ + struct quehead *element = (struct quehead *)a, + *head = (struct quehead *)b; + + element->qh_link = head->qh_link; + element->qh_rlink = head; + head->qh_link = element; + element->qh_link->qh_rlink = element; +} + +static __inline void +remque(void *a) +{ + struct quehead *element = (struct quehead *)a; + + element->qh_link->qh_rlink = element->qh_rlink; + element->qh_rlink->qh_link = element->qh_link; + element->qh_rlink = 0; +} + +#else /* !__GNUC__ */ + +void insque(void *a, void *b); +void remque(void *a); + +#endif /* __GNUC__ */ + +#endif /* _KERNEL */ + +#endif /* !_SYS_QUEUE_H_ */ diff --git a/tools/sdk/include/newlib/sys/reent.h b/tools/sdk/include/newlib/sys/reent.h new file mode 100644 index 00000000..bb52ae65 --- /dev/null +++ b/tools/sdk/include/newlib/sys/reent.h @@ -0,0 +1,793 @@ +/* This header file provides the reentrancy. */ + +/* WARNING: All identifiers here must begin with an underscore. This file is + included by stdio.h and others and we therefore must only use identifiers + in the namespace allotted to us. */ + +#ifndef _SYS_REENT_H_ +#ifdef __cplusplus +extern "C" { +#endif +#define _SYS_REENT_H_ + +#include <_ansi.h> +#include +#include + +#define _NULL 0 + +#ifndef __Long +#if __LONG_MAX__ == 2147483647L +#define __Long long +typedef unsigned __Long __ULong; +#elif __INT_MAX__ == 2147483647 +#define __Long int +typedef unsigned __Long __ULong; +#endif +#endif + +#if !defined( __Long) +#include +#endif + +#ifndef __Long +#define __Long __int32_t +typedef __uint32_t __ULong; +#endif + +struct _reent; + +/* + * If _REENT_SMALL is defined, we make struct _reent as small as possible, + * by having nearly everything possible allocated at first use. + */ + +struct _Bigint +{ + struct _Bigint *_next; + int _k, _maxwds, _sign, _wds; + __ULong _x[1]; +}; + +/* needed by reentrant structure */ +struct __tm +{ + int __tm_sec; + int __tm_min; + int __tm_hour; + int __tm_mday; + int __tm_mon; + int __tm_year; + int __tm_wday; + int __tm_yday; + int __tm_isdst; +}; + +/* + * atexit() support. + */ + +#define _ATEXIT_SIZE 32 /* must be at least 32 to guarantee ANSI conformance */ + +struct _on_exit_args { + void * _fnargs[_ATEXIT_SIZE]; /* user fn args */ + void * _dso_handle[_ATEXIT_SIZE]; + /* Bitmask is set if user function takes arguments. */ + __ULong _fntypes; /* type of exit routine - + Must have at least _ATEXIT_SIZE bits */ + /* Bitmask is set if function was registered via __cxa_atexit. */ + __ULong _is_cxa; +}; + +#ifdef _REENT_SMALL +struct _atexit { + struct _atexit *_next; /* next in list */ + int _ind; /* next index in this table */ + void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */ + struct _on_exit_args * _on_exit_args_ptr; +}; +# define _ATEXIT_INIT {_NULL, 0, {_NULL}, _NULL} +#else +struct _atexit { + struct _atexit *_next; /* next in list */ + int _ind; /* next index in this table */ + /* Some entries may already have been called, and will be NULL. */ + void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */ + struct _on_exit_args _on_exit_args; +}; +# define _ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}} +#endif + +#ifdef _REENT_GLOBAL_ATEXIT +# define _REENT_INIT_ATEXIT +#else +# define _REENT_INIT_ATEXIT \ + _NULL, _ATEXIT_INIT, +#endif + +/* + * Stdio buffers. + * + * This and __FILE are defined here because we need them for struct _reent, + * but we don't want stdio.h included when stdlib.h is. + */ + +struct __sbuf { + unsigned char *_base; + int _size; +}; + +/* + * Stdio state variables. + * + * The following always hold: + * + * if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR), + * _lbfsize is -_bf._size, else _lbfsize is 0 + * if _flags&__SRD, _w is 0 + * if _flags&__SWR, _r is 0 + * + * This ensures that the getc and putc macros (or inline functions) never + * try to write or read from a file that is in `read' or `write' mode. + * (Moreover, they can, and do, automatically switch from read mode to + * write mode, and back, on "r+" and "w+" files.) + * + * _lbfsize is used only to make the inline line-buffered output stream + * code as compact as possible. + * + * _ub, _up, and _ur are used when ungetc() pushes back more characters + * than fit in the current _bf, or when ungetc() pushes back a character + * that does not match the previous one in _bf. When this happens, + * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff + * _ub._base!=NULL) and _up and _ur save the current values of _p and _r. + */ + +#ifdef _REENT_SMALL +/* + * struct __sFILE_fake is the start of a struct __sFILE, with only the + * minimal fields allocated. In __sinit() we really allocate the 3 + * standard streams, etc., and point away from this fake. + */ +struct __sFILE_fake { + unsigned char *_p; /* current position in (some) buffer */ + int _r; /* read space left for getc() */ + int _w; /* write space left for putc() */ + short _flags; /* flags, below; this FILE is free if 0 */ + short _file; /* fileno, if Unix descriptor, else -1 */ + struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ + int _lbfsize; /* 0 or -_bf._size, for inline putc */ + + struct _reent *_data; +}; + +/* Following is needed both in libc/stdio and libc/stdlib so we put it + * here instead of libc/stdio/local.h where it was previously. */ + +extern _VOID _EXFUN(__sinit,(struct _reent *)); + +# define _REENT_SMALL_CHECK_INIT(ptr) \ + do \ + { \ + if ((ptr) && !(ptr)->__sdidinit) \ + __sinit (ptr); \ + } \ + while (0) +#else +# define _REENT_SMALL_CHECK_INIT(ptr) /* nothing */ +#endif + +struct __sFILE { + unsigned char *_p; /* current position in (some) buffer */ + int _r; /* read space left for getc() */ + int _w; /* write space left for putc() */ + short _flags; /* flags, below; this FILE is free if 0 */ + short _file; /* fileno, if Unix descriptor, else -1 */ + struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ + int _lbfsize; /* 0 or -_bf._size, for inline putc */ + +#ifdef _REENT_SMALL + struct _reent *_data; +#endif + + /* operations */ + _PTR _cookie; /* cookie passed to io functions */ + + _READ_WRITE_RETURN_TYPE _EXFNPTR(_read, (struct _reent *, _PTR, + char *, _READ_WRITE_BUFSIZE_TYPE)); + _READ_WRITE_RETURN_TYPE _EXFNPTR(_write, (struct _reent *, _PTR, + const char *, + _READ_WRITE_BUFSIZE_TYPE)); + _fpos_t _EXFNPTR(_seek, (struct _reent *, _PTR, _fpos_t, int)); + int _EXFNPTR(_close, (struct _reent *, _PTR)); + + /* separate buffer for long sequences of ungetc() */ + struct __sbuf _ub; /* ungetc buffer */ + unsigned char *_up; /* saved _p when _p is doing ungetc data */ + int _ur; /* saved _r when _r is counting ungetc data */ + + /* tricks to meet minimum requirements even when malloc() fails */ + unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */ + unsigned char _nbuf[1]; /* guarantee a getc() buffer */ + + /* separate buffer for fgetline() when line crosses buffer boundary */ + struct __sbuf _lb; /* buffer for fgetline() */ + + /* Unix stdio files get aligned to block boundaries on fseek() */ + int _blksize; /* stat.st_blksize (may be != _bf._size) */ + _off_t _offset; /* current lseek offset */ + +#ifndef _REENT_SMALL + struct _reent *_data; /* Here for binary compatibility? Remove? */ +#endif + +#ifndef __SINGLE_THREAD__ + _flock_t _lock; /* for thread-safety locking */ +#endif + _mbstate_t _mbstate; /* for wide char stdio functions. */ + int _flags2; /* for future use */ +}; + +#ifdef __CUSTOM_FILE_IO__ + +/* Get custom _FILE definition. */ +#include + +#else /* !__CUSTOM_FILE_IO__ */ +#ifdef __LARGE64_FILES +struct __sFILE64 { + unsigned char *_p; /* current position in (some) buffer */ + int _r; /* read space left for getc() */ + int _w; /* write space left for putc() */ + short _flags; /* flags, below; this FILE is free if 0 */ + short _file; /* fileno, if Unix descriptor, else -1 */ + struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ + int _lbfsize; /* 0 or -_bf._size, for inline putc */ + + struct _reent *_data; + + /* operations */ + _PTR _cookie; /* cookie passed to io functions */ + + _READ_WRITE_RETURN_TYPE _EXFNPTR(_read, (struct _reent *, _PTR, + char *, _READ_WRITE_BUFSIZE_TYPE)); + _READ_WRITE_RETURN_TYPE _EXFNPTR(_write, (struct _reent *, _PTR, + const char *, + _READ_WRITE_BUFSIZE_TYPE)); + _fpos_t _EXFNPTR(_seek, (struct _reent *, _PTR, _fpos_t, int)); + int _EXFNPTR(_close, (struct _reent *, _PTR)); + + /* separate buffer for long sequences of ungetc() */ + struct __sbuf _ub; /* ungetc buffer */ + unsigned char *_up; /* saved _p when _p is doing ungetc data */ + int _ur; /* saved _r when _r is counting ungetc data */ + + /* tricks to meet minimum requirements even when malloc() fails */ + unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */ + unsigned char _nbuf[1]; /* guarantee a getc() buffer */ + + /* separate buffer for fgetline() when line crosses buffer boundary */ + struct __sbuf _lb; /* buffer for fgetline() */ + + /* Unix stdio files get aligned to block boundaries on fseek() */ + int _blksize; /* stat.st_blksize (may be != _bf._size) */ + int _flags2; /* for future use */ + + _off64_t _offset; /* current lseek offset */ + _fpos64_t _EXFNPTR(_seek64, (struct _reent *, _PTR, _fpos64_t, int)); + +#ifndef __SINGLE_THREAD__ + _flock_t _lock; /* for thread-safety locking */ +#endif + _mbstate_t _mbstate; /* for wide char stdio functions. */ +}; +typedef struct __sFILE64 __FILE; +#else +typedef struct __sFILE __FILE; +#endif /* __LARGE64_FILES */ +#endif /* !__CUSTOM_FILE_IO__ */ + +struct _glue +{ + struct _glue *_next; + int _niobs; + __FILE *_iobs; +}; + +/* + * rand48 family support + * + * Copyright (c) 1993 Martin Birgmeier + * All rights reserved. + * + * You may redistribute unmodified or modified versions of this source + * code provided that the above copyright notice and this and the + * following conditions are retained. + * + * This software is provided ``as is'', and comes with no warranties + * of any kind. I shall in no event be liable for anything that happens + * to anyone/anything when using this software. + */ +#define _RAND48_SEED_0 (0x330e) +#define _RAND48_SEED_1 (0xabcd) +#define _RAND48_SEED_2 (0x1234) +#define _RAND48_MULT_0 (0xe66d) +#define _RAND48_MULT_1 (0xdeec) +#define _RAND48_MULT_2 (0x0005) +#define _RAND48_ADD (0x000b) +struct _rand48 { + unsigned short _seed[3]; + unsigned short _mult[3]; + unsigned short _add; +#ifdef _REENT_SMALL + /* Put this in here as well, for good luck. */ + __extension__ unsigned long long _rand_next; +#endif +}; + +/* How big the some arrays are. */ +#define _REENT_EMERGENCY_SIZE 25 +#define _REENT_ASCTIME_SIZE 26 +#define _REENT_SIGNAL_SIZE 24 + +/* + * struct _reent + * + * This structure contains *all* globals needed by the library. + * It's raison d'etre is to facilitate threads by making all library routines + * reentrant. IE: All state information is contained here. + */ + +#ifdef _REENT_SMALL + +struct _mprec +{ + /* used by mprec routines */ + struct _Bigint *_result; + int _result_k; + struct _Bigint *_p5s; + struct _Bigint **_freelist; +}; + + +struct _misc_reent +{ + /* miscellaneous reentrant data */ + char *_strtok_last; + _mbstate_t _mblen_state; + _mbstate_t _wctomb_state; + _mbstate_t _mbtowc_state; + char _l64a_buf[8]; + int _getdate_err; + _mbstate_t _mbrlen_state; + _mbstate_t _mbrtowc_state; + _mbstate_t _mbsrtowcs_state; + _mbstate_t _wcrtomb_state; + _mbstate_t _wcsrtombs_state; +}; + +/* This version of _reent is laid out with "int"s in pairs, to help + * ports with 16-bit int's but 32-bit pointers, align nicely. */ +struct _reent +{ + /* As an exception to the above put _errno first for binary + compatibility with non _REENT_SMALL targets. */ + int _errno; /* local copy of errno */ + + /* FILE is a big struct and may change over time. To try to achieve binary + compatibility with future versions, put stdin,stdout,stderr here. + These are pointers into member __sf defined below. */ + __FILE *_stdin, *_stdout, *_stderr; /* XXX */ + + int _inc; /* used by tmpnam */ + + char *_emergency; + + int __sdidinit; /* 1 means stdio has been init'd */ + + int _current_category; /* unused */ + _CONST char *_current_locale; /* unused */ + + struct _mprec *_mp; + + void _EXFNPTR(__cleanup, (struct _reent *)); + + int _gamma_signgam; + + /* used by some fp conversion routines */ + int _cvtlen; /* should be size_t */ + char *_cvtbuf; + + struct _rand48 *_r48; + struct __tm *_localtime_buf; + char *_asctime_buf; + + /* signal info */ + void (**(_sig_func))(int); + +# ifndef _REENT_GLOBAL_ATEXIT + /* atexit stuff */ + struct _atexit *_atexit; + struct _atexit _atexit0; +# endif + + struct _glue __sglue; /* root of glue chain */ + __FILE *__sf; /* file descriptors */ + struct _misc_reent *_misc; /* strtok, multibyte states */ + char *_signal_buf; /* strsignal */ +}; + +extern const struct __sFILE_fake __sf_fake_stdin; +extern const struct __sFILE_fake __sf_fake_stdout; +extern const struct __sFILE_fake __sf_fake_stderr; + +# define _REENT_INIT(var) \ + { 0, \ + (__FILE *)&__sf_fake_stdin, \ + (__FILE *)&__sf_fake_stdout, \ + (__FILE *)&__sf_fake_stderr, \ + 0, \ + _NULL, \ + 0, \ + 0, \ + "C", \ + _NULL, \ + _NULL, \ + 0, \ + 0, \ + _NULL, \ + _NULL, \ + _NULL, \ + _NULL, \ + _NULL, \ + _REENT_INIT_ATEXIT \ + {_NULL, 0, _NULL}, \ + _NULL, \ + _NULL, \ + _NULL \ + } + +#define _REENT_INIT_PTR(var) \ + { memset((var), 0, sizeof(*(var))); \ + (var)->_stdin = (__FILE *)&__sf_fake_stdin; \ + (var)->_stdout = (__FILE *)&__sf_fake_stdout; \ + (var)->_stderr = (__FILE *)&__sf_fake_stderr; \ + (var)->_current_locale = "C"; \ + } + +/* Only built the assert() calls if we are built with debugging. */ +#if DEBUG +#include +#define __reent_assert(x) assert(x) +#else +#define __reent_assert(x) ((void)0) +#endif + +#ifdef __CUSTOM_FILE_IO__ +#error Custom FILE I/O and _REENT_SMALL not currently supported. +#endif + +/* Generic _REENT check macro. */ +#define _REENT_CHECK(var, what, type, size, init) do { \ + struct _reent *_r = (var); \ + if (_r->what == NULL) { \ + _r->what = (type)malloc(size); \ + __reent_assert(_r->what); \ + init; \ + } \ +} while (0) + +#define _REENT_CHECK_TM(var) \ + _REENT_CHECK(var, _localtime_buf, struct __tm *, sizeof *((var)->_localtime_buf), \ + /* nothing */) + +#define _REENT_CHECK_ASCTIME_BUF(var) \ + _REENT_CHECK(var, _asctime_buf, char *, _REENT_ASCTIME_SIZE, \ + memset((var)->_asctime_buf, 0, _REENT_ASCTIME_SIZE)) + +/* Handle the dynamically allocated rand48 structure. */ +#define _REENT_INIT_RAND48(var) do { \ + struct _reent *_r = (var); \ + _r->_r48->_seed[0] = _RAND48_SEED_0; \ + _r->_r48->_seed[1] = _RAND48_SEED_1; \ + _r->_r48->_seed[2] = _RAND48_SEED_2; \ + _r->_r48->_mult[0] = _RAND48_MULT_0; \ + _r->_r48->_mult[1] = _RAND48_MULT_1; \ + _r->_r48->_mult[2] = _RAND48_MULT_2; \ + _r->_r48->_add = _RAND48_ADD; \ + _r->_r48->_rand_next = 1; \ +} while (0) +#define _REENT_CHECK_RAND48(var) \ + _REENT_CHECK(var, _r48, struct _rand48 *, sizeof *((var)->_r48), _REENT_INIT_RAND48((var))) + +#define _REENT_INIT_MP(var) do { \ + struct _reent *_r = (var); \ + _r->_mp->_result_k = 0; \ + _r->_mp->_result = _r->_mp->_p5s = _NULL; \ + _r->_mp->_freelist = _NULL; \ +} while (0) +#define _REENT_CHECK_MP(var) \ + _REENT_CHECK(var, _mp, struct _mprec *, sizeof *((var)->_mp), _REENT_INIT_MP(var)) + +#define _REENT_CHECK_EMERGENCY(var) \ + _REENT_CHECK(var, _emergency, char *, _REENT_EMERGENCY_SIZE, /* nothing */) + +#define _REENT_INIT_MISC(var) do { \ + struct _reent *_r = (var); \ + _r->_misc->_strtok_last = _NULL; \ + _r->_misc->_mblen_state.__count = 0; \ + _r->_misc->_mblen_state.__value.__wch = 0; \ + _r->_misc->_wctomb_state.__count = 0; \ + _r->_misc->_wctomb_state.__value.__wch = 0; \ + _r->_misc->_mbtowc_state.__count = 0; \ + _r->_misc->_mbtowc_state.__value.__wch = 0; \ + _r->_misc->_mbrlen_state.__count = 0; \ + _r->_misc->_mbrlen_state.__value.__wch = 0; \ + _r->_misc->_mbrtowc_state.__count = 0; \ + _r->_misc->_mbrtowc_state.__value.__wch = 0; \ + _r->_misc->_mbsrtowcs_state.__count = 0; \ + _r->_misc->_mbsrtowcs_state.__value.__wch = 0; \ + _r->_misc->_wcrtomb_state.__count = 0; \ + _r->_misc->_wcrtomb_state.__value.__wch = 0; \ + _r->_misc->_wcsrtombs_state.__count = 0; \ + _r->_misc->_wcsrtombs_state.__value.__wch = 0; \ + _r->_misc->_l64a_buf[0] = '\0'; \ + _r->_misc->_getdate_err = 0; \ +} while (0) +#define _REENT_CHECK_MISC(var) \ + _REENT_CHECK(var, _misc, struct _misc_reent *, sizeof *((var)->_misc), _REENT_INIT_MISC(var)) + +#define _REENT_CHECK_SIGNAL_BUF(var) \ + _REENT_CHECK(var, _signal_buf, char *, _REENT_SIGNAL_SIZE, /* nothing */) + +#define _REENT_SIGNGAM(ptr) ((ptr)->_gamma_signgam) +#define _REENT_RAND_NEXT(ptr) ((ptr)->_r48->_rand_next) +#define _REENT_RAND48_SEED(ptr) ((ptr)->_r48->_seed) +#define _REENT_RAND48_MULT(ptr) ((ptr)->_r48->_mult) +#define _REENT_RAND48_ADD(ptr) ((ptr)->_r48->_add) +#define _REENT_MP_RESULT(ptr) ((ptr)->_mp->_result) +#define _REENT_MP_RESULT_K(ptr) ((ptr)->_mp->_result_k) +#define _REENT_MP_P5S(ptr) ((ptr)->_mp->_p5s) +#define _REENT_MP_FREELIST(ptr) ((ptr)->_mp->_freelist) +#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_asctime_buf) +#define _REENT_TM(ptr) ((ptr)->_localtime_buf) +#define _REENT_EMERGENCY(ptr) ((ptr)->_emergency) +#define _REENT_STRTOK_LAST(ptr) ((ptr)->_misc->_strtok_last) +#define _REENT_MBLEN_STATE(ptr) ((ptr)->_misc->_mblen_state) +#define _REENT_MBTOWC_STATE(ptr)((ptr)->_misc->_mbtowc_state) +#define _REENT_WCTOMB_STATE(ptr)((ptr)->_misc->_wctomb_state) +#define _REENT_MBRLEN_STATE(ptr) ((ptr)->_misc->_mbrlen_state) +#define _REENT_MBRTOWC_STATE(ptr) ((ptr)->_misc->_mbrtowc_state) +#define _REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_misc->_mbsrtowcs_state) +#define _REENT_WCRTOMB_STATE(ptr) ((ptr)->_misc->_wcrtomb_state) +#define _REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_misc->_wcsrtombs_state) +#define _REENT_L64A_BUF(ptr) ((ptr)->_misc->_l64a_buf) +#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_misc->_getdate_err)) +#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_signal_buf) + +#else /* !_REENT_SMALL */ + +struct _reent +{ + int _errno; /* local copy of errno */ + + /* FILE is a big struct and may change over time. To try to achieve binary + compatibility with future versions, put stdin,stdout,stderr here. + These are pointers into member __sf defined below. */ + __FILE *_stdin, *_stdout, *_stderr; + + int _inc; /* used by tmpnam */ + char _emergency[_REENT_EMERGENCY_SIZE]; + + int _current_category; /* used by setlocale */ + _CONST char *_current_locale; + + int __sdidinit; /* 1 means stdio has been init'd */ + + void _EXFNPTR(__cleanup, (struct _reent *)); + + /* used by mprec routines */ + struct _Bigint *_result; + int _result_k; + struct _Bigint *_p5s; + struct _Bigint **_freelist; + + /* used by some fp conversion routines */ + int _cvtlen; /* should be size_t */ + char *_cvtbuf; + + union + { + struct + { + unsigned int _unused_rand; + char * _strtok_last; + char _asctime_buf[_REENT_ASCTIME_SIZE]; + struct __tm _localtime_buf; + int _gamma_signgam; + __extension__ unsigned long long _rand_next; + struct _rand48 _r48; + _mbstate_t _mblen_state; + _mbstate_t _mbtowc_state; + _mbstate_t _wctomb_state; + char _l64a_buf[8]; + char _signal_buf[_REENT_SIGNAL_SIZE]; + int _getdate_err; + _mbstate_t _mbrlen_state; + _mbstate_t _mbrtowc_state; + _mbstate_t _mbsrtowcs_state; + _mbstate_t _wcrtomb_state; + _mbstate_t _wcsrtombs_state; + int _h_errno; + } _reent; + /* Two next two fields were once used by malloc. They are no longer + used. They are used to preserve the space used before so as to + allow addition of new reent fields and keep binary compatibility. */ + struct + { +#define _N_LISTS 30 + unsigned char * _nextf[_N_LISTS]; + unsigned int _nmalloc[_N_LISTS]; + } _unused; + } _new; + +# ifndef _REENT_GLOBAL_ATEXIT + /* atexit stuff */ + struct _atexit *_atexit; /* points to head of LIFO stack */ + struct _atexit _atexit0; /* one guaranteed table, required by ANSI */ +# endif + + /* signal info */ + void (**(_sig_func))(int); + + /* These are here last so that __FILE can grow without changing the offsets + of the above members (on the off chance that future binary compatibility + would be broken otherwise). */ + struct _glue __sglue; /* root of glue chain */ + __FILE __sf[3]; /* first three file descriptors */ +}; + +#define _REENT_INIT(var) \ + { 0, \ + &(var).__sf[0], \ + &(var).__sf[1], \ + &(var).__sf[2], \ + 0, \ + "", \ + 0, \ + "C", \ + 0, \ + _NULL, \ + _NULL, \ + 0, \ + _NULL, \ + _NULL, \ + 0, \ + _NULL, \ + { \ + { \ + 0, \ + _NULL, \ + "", \ + {0, 0, 0, 0, 0, 0, 0, 0, 0}, \ + 0, \ + 1, \ + { \ + {_RAND48_SEED_0, _RAND48_SEED_1, _RAND48_SEED_2}, \ + {_RAND48_MULT_0, _RAND48_MULT_1, _RAND48_MULT_2}, \ + _RAND48_ADD \ + }, \ + {0, {0}}, \ + {0, {0}}, \ + {0, {0}}, \ + "", \ + "", \ + 0, \ + {0, {0}}, \ + {0, {0}}, \ + {0, {0}}, \ + {0, {0}}, \ + {0, {0}} \ + } \ + }, \ + _REENT_INIT_ATEXIT \ + _NULL, \ + {_NULL, 0, _NULL} \ + } + +#define _REENT_INIT_PTR(var) \ + { memset((var), 0, sizeof(*(var))); \ + (var)->_stdin = &(var)->__sf[0]; \ + (var)->_stdout = &(var)->__sf[1]; \ + (var)->_stderr = &(var)->__sf[2]; \ + (var)->_current_locale = "C"; \ + (var)->_new._reent._rand_next = 1; \ + (var)->_new._reent._r48._seed[0] = _RAND48_SEED_0; \ + (var)->_new._reent._r48._seed[1] = _RAND48_SEED_1; \ + (var)->_new._reent._r48._seed[2] = _RAND48_SEED_2; \ + (var)->_new._reent._r48._mult[0] = _RAND48_MULT_0; \ + (var)->_new._reent._r48._mult[1] = _RAND48_MULT_1; \ + (var)->_new._reent._r48._mult[2] = _RAND48_MULT_2; \ + (var)->_new._reent._r48._add = _RAND48_ADD; \ + } + +#define _REENT_CHECK_RAND48(ptr) /* nothing */ +#define _REENT_CHECK_MP(ptr) /* nothing */ +#define _REENT_CHECK_TM(ptr) /* nothing */ +#define _REENT_CHECK_ASCTIME_BUF(ptr) /* nothing */ +#define _REENT_CHECK_EMERGENCY(ptr) /* nothing */ +#define _REENT_CHECK_MISC(ptr) /* nothing */ +#define _REENT_CHECK_SIGNAL_BUF(ptr) /* nothing */ + +#define _REENT_SIGNGAM(ptr) ((ptr)->_new._reent._gamma_signgam) +#define _REENT_RAND_NEXT(ptr) ((ptr)->_new._reent._rand_next) +#define _REENT_RAND48_SEED(ptr) ((ptr)->_new._reent._r48._seed) +#define _REENT_RAND48_MULT(ptr) ((ptr)->_new._reent._r48._mult) +#define _REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add) +#define _REENT_MP_RESULT(ptr) ((ptr)->_result) +#define _REENT_MP_RESULT_K(ptr) ((ptr)->_result_k) +#define _REENT_MP_P5S(ptr) ((ptr)->_p5s) +#define _REENT_MP_FREELIST(ptr) ((ptr)->_freelist) +#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_new._reent._asctime_buf) +#define _REENT_TM(ptr) (&(ptr)->_new._reent._localtime_buf) +#define _REENT_EMERGENCY(ptr) ((ptr)->_emergency) +#define _REENT_STRTOK_LAST(ptr) ((ptr)->_new._reent._strtok_last) +#define _REENT_MBLEN_STATE(ptr) ((ptr)->_new._reent._mblen_state) +#define _REENT_MBTOWC_STATE(ptr)((ptr)->_new._reent._mbtowc_state) +#define _REENT_WCTOMB_STATE(ptr)((ptr)->_new._reent._wctomb_state) +#define _REENT_MBRLEN_STATE(ptr)((ptr)->_new._reent._mbrlen_state) +#define _REENT_MBRTOWC_STATE(ptr)((ptr)->_new._reent._mbrtowc_state) +#define _REENT_MBSRTOWCS_STATE(ptr)((ptr)->_new._reent._mbsrtowcs_state) +#define _REENT_WCRTOMB_STATE(ptr)((ptr)->_new._reent._wcrtomb_state) +#define _REENT_WCSRTOMBS_STATE(ptr)((ptr)->_new._reent._wcsrtombs_state) +#define _REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf) +#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf) +#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err)) + +#endif /* !_REENT_SMALL */ + +/* This value is used in stdlib/misc.c. reent/reent.c has to know it + as well to make sure the freelist is correctly free'd. Therefore + we define it here, rather than in stdlib/misc.c, as before. */ +#define _Kmax (sizeof (size_t) << 3) + +/* + * All references to struct _reent are via this pointer. + * Internally, newlib routines that need to reference it should use _REENT. + */ + +#ifndef __ATTRIBUTE_IMPURE_PTR__ +#define __ATTRIBUTE_IMPURE_PTR__ +#endif + +#if !defined(__DYNAMIC_REENT__) || defined(__SINGLE_THREAD__) +extern struct _reent *_impure_ptr __ATTRIBUTE_IMPURE_PTR__; +#endif + +extern struct _reent *_global_impure_ptr __ATTRIBUTE_IMPURE_PTR__; + +void _reclaim_reent _PARAMS ((struct _reent *)); + +/* #define _REENT_ONLY define this to get only reentrant routines */ + +#if defined(__DYNAMIC_REENT__) && !defined(__SINGLE_THREAD__) +#ifndef __getreent + struct _reent * _EXFUN(__getreent, (void)); +#endif +# define _REENT (__getreent()) +#else /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */ +# define _REENT _impure_ptr +#endif /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */ + +#define _GLOBAL_REENT _global_impure_ptr + +#ifdef _REENT_GLOBAL_ATEXIT +extern struct _atexit *_global_atexit; /* points to head of LIFO stack */ +# define _GLOBAL_ATEXIT _global_atexit +#else +# define _GLOBAL_ATEXIT (_GLOBAL_REENT->_atexit) +#endif + +#ifdef __cplusplus +} +#endif +#endif /* _SYS_REENT_H_ */ diff --git a/tools/sdk/include/newlib/sys/resource.h b/tools/sdk/include/newlib/sys/resource.h new file mode 100644 index 00000000..c35ac2a4 --- /dev/null +++ b/tools/sdk/include/newlib/sys/resource.h @@ -0,0 +1,17 @@ +#ifndef _SYS_RESOURCE_H_ +#define _SYS_RESOURCE_H_ + +#include + +#define RUSAGE_SELF 0 /* calling process */ +#define RUSAGE_CHILDREN -1 /* terminated child processes */ + +struct rusage { + struct timeval ru_utime; /* user time used */ + struct timeval ru_stime; /* system time used */ +}; + +int _EXFUN(getrusage, (int, struct rusage*)); + +#endif + diff --git a/tools/sdk/include/newlib/sys/sched.h b/tools/sdk/include/newlib/sys/sched.h new file mode 100644 index 00000000..58f99d68 --- /dev/null +++ b/tools/sdk/include/newlib/sys/sched.h @@ -0,0 +1,67 @@ +/* + * Written by Joel Sherrill . + * + * COPYRIGHT (c) 1989-2010. + * On-Line Applications Research Corporation (OAR). + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION + * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS + * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + * $Id$ + */ + + +#ifndef _SYS_SCHED_H_ +#define _SYS_SCHED_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Scheduling Policies */ +/* Open Group Specifications Issue 6 */ +#if defined(__CYGWIN__) +#define SCHED_OTHER 3 +#else +#define SCHED_OTHER 0 +#endif + +#define SCHED_FIFO 1 +#define SCHED_RR 2 + +#if defined(_POSIX_SPORADIC_SERVER) +#define SCHED_SPORADIC 4 +#endif + +/* Scheduling Parameters */ +/* Open Group Specifications Issue 6 */ + +struct sched_param { + int sched_priority; /* Process execution scheduling priority */ + +#if defined(_POSIX_SPORADIC_SERVER) || defined(_POSIX_THREAD_SPORADIC_SERVER) + int sched_ss_low_priority; /* Low scheduling priority for sporadic */ + /* server */ + struct timespec sched_ss_repl_period; + /* Replenishment period for sporadic server */ + struct timespec sched_ss_init_budget; + /* Initial budget for sporadic server */ + int sched_ss_max_repl; /* Maximum pending replenishments for */ + /* sporadic server */ +#endif +}; + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ + diff --git a/tools/sdk/include/newlib/sys/signal.h b/tools/sdk/include/newlib/sys/signal.h new file mode 100644 index 00000000..a29f525c --- /dev/null +++ b/tools/sdk/include/newlib/sys/signal.h @@ -0,0 +1,357 @@ +/* sys/signal.h */ + +#ifndef _SYS_SIGNAL_H +#define _SYS_SIGNAL_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "_ansi.h" +#include +#include + +/* #ifndef __STRICT_ANSI__*/ + +/* Cygwin defines it's own sigset_t in include/cygwin/signal.h */ +#ifndef __CYGWIN__ +typedef unsigned long sigset_t; +#endif + +#if defined(__rtems__) + +#if defined(_POSIX_REALTIME_SIGNALS) + +/* sigev_notify values + NOTE: P1003.1c/D10, p. 34 adds SIGEV_THREAD. */ + +#define SIGEV_NONE 1 /* No asynchronous notification shall be delivered */ + /* when the event of interest occurs. */ +#define SIGEV_SIGNAL 2 /* A queued signal, with an application defined */ + /* value, shall be delivered when the event of */ + /* interest occurs. */ +#define SIGEV_THREAD 3 /* A notification function shall be called to */ + /* perform notification. */ + +/* Signal Generation and Delivery, P1003.1b-1993, p. 63 + NOTE: P1003.1c/D10, p. 34 adds sigev_notify_function and + sigev_notify_attributes to the sigevent structure. */ + +union sigval { + int sival_int; /* Integer signal value */ + void *sival_ptr; /* Pointer signal value */ +}; + +struct sigevent { + int sigev_notify; /* Notification type */ + int sigev_signo; /* Signal number */ + union sigval sigev_value; /* Signal value */ + +#if defined(_POSIX_THREADS) + void (*sigev_notify_function)( union sigval ); + /* Notification function */ + pthread_attr_t *sigev_notify_attributes; /* Notification Attributes */ +#endif +}; + +/* Signal Actions, P1003.1b-1993, p. 64 */ +/* si_code values, p. 66 */ + +#define SI_USER 1 /* Sent by a user. kill(), abort(), etc */ +#define SI_QUEUE 2 /* Sent by sigqueue() */ +#define SI_TIMER 3 /* Sent by expiration of a timer_settime() timer */ +#define SI_ASYNCIO 4 /* Indicates completion of asycnhronous IO */ +#define SI_MESGQ 5 /* Indicates arrival of a message at an empty queue */ + +typedef struct { + int si_signo; /* Signal number */ + int si_code; /* Cause of the signal */ + union sigval si_value; /* Signal value */ +} siginfo_t; +#endif + +/* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 */ + +#define SA_NOCLDSTOP 0x1 /* Do not generate SIGCHLD when children stop */ +#define SA_SIGINFO 0x2 /* Invoke the signal catching function with */ + /* three arguments instead of one. */ +#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 +#define SA_ONSTACK 0x4 /* Signal delivery will be on a separate stack. */ +#endif + +/* struct sigaction notes from POSIX: + * + * (1) Routines stored in sa_handler should take a single int as + * their argument although the POSIX standard does not require this. + * This is not longer true since at least POSIX.1-2008 + * (2) The fields sa_handler and sa_sigaction may overlap, and a conforming + * application should not use both simultaneously. + */ + +typedef void (*_sig_func_ptr)(int); + +struct sigaction { + int sa_flags; /* Special flags to affect behavior of signal */ + sigset_t sa_mask; /* Additional set of signals to be blocked */ + /* during execution of signal-catching */ + /* function. */ + union { + _sig_func_ptr _handler; /* SIG_DFL, SIG_IGN, or pointer to a function */ +#if defined(_POSIX_REALTIME_SIGNALS) + void (*_sigaction)( int, siginfo_t *, void * ); +#endif + } _signal_handlers; +}; + +#define sa_handler _signal_handlers._handler +#if defined(_POSIX_REALTIME_SIGNALS) +#define sa_sigaction _signal_handlers._sigaction +#endif + +#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 +/* + * Minimum and default signal stack constants. Allow for target overrides + * from . + */ +#ifndef MINSIGSTKSZ +#define MINSIGSTKSZ 2048 +#endif +#ifndef SIGSTKSZ +#define SIGSTKSZ 8192 +#endif + +/* + * Possible values for ss_flags in stack_t below. + */ +#define SS_ONSTACK 0x1 +#define SS_DISABLE 0x2 + +/* + * Structure used in sigaltstack call. + */ +typedef struct sigaltstack { + void *ss_sp; /* Stack base or pointer. */ + int ss_flags; /* Flags. */ + size_t ss_size; /* Stack size. */ +} stack_t; +#endif + +#elif defined(__CYGWIN__) +#include +#else +#define SA_NOCLDSTOP 1 /* only value supported now for sa_flags */ + +typedef void (*_sig_func_ptr)(int); + +struct sigaction +{ + _sig_func_ptr sa_handler; + sigset_t sa_mask; + int sa_flags; +}; +#endif /* defined(__rtems__) */ + +#define SIG_SETMASK 0 /* set mask with sigprocmask() */ +#define SIG_BLOCK 1 /* set of signals to block */ +#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ + +/* These depend upon the type of sigset_t, which right now + is always a long.. They're in the POSIX namespace, but + are not ANSI. */ +#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0) +#define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0) +#define sigemptyset(what) (*(what) = 0, 0) +#define sigfillset(what) (*(what) = ~(0), 0) +#define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) + +int _EXFUN(sigprocmask, (int how, const sigset_t *set, sigset_t *oset)); + +#if defined(_POSIX_THREADS) +int _EXFUN(pthread_sigmask, (int how, const sigset_t *set, sigset_t *oset)); +#endif + +#if defined(__CYGWIN__) || defined(__rtems__) +#undef sigaddset +#undef sigdelset +#undef sigemptyset +#undef sigfillset +#undef sigismember + +#ifdef _COMPILING_NEWLIB +int _EXFUN(_kill, (pid_t, int)); +#endif /* _COMPILING_NEWLIB */ +#endif /* __CYGWIN__ || __rtems__ */ +#if defined(__CYGWIN__) || defined(__rtems__) || defined(__SPU__) +int _EXFUN(kill, (pid_t, int)); +#endif /* __CYGWIN__ || __rtems__ || __SPU__ */ +#if defined(__CYGWIN__) || defined(__rtems__) +int _EXFUN(killpg, (pid_t, int)); +int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *)); +int _EXFUN(sigaddset, (sigset_t *, const int)); +int _EXFUN(sigdelset, (sigset_t *, const int)); +int _EXFUN(sigismember, (const sigset_t *, int)); +int _EXFUN(sigfillset, (sigset_t *)); +int _EXFUN(sigemptyset, (sigset_t *)); +int _EXFUN(sigpending, (sigset_t *)); +int _EXFUN(sigsuspend, (const sigset_t *)); +int _EXFUN(sigpause, (int)); + +#ifdef __rtems__ +#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 +int _EXFUN(sigaltstack, (const stack_t *__restrict, stack_t *__restrict)); +#endif +#endif + +#if defined(_POSIX_THREADS) +#ifdef __CYGWIN__ +# ifndef _CYGWIN_TYPES_H +# error You need the winsup sources or a cygwin installation to compile the cygwin version of newlib. +# endif +#endif +int _EXFUN(pthread_kill, (pthread_t thread, int sig)); +#endif + +#if defined(_POSIX_REALTIME_SIGNALS) + +/* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 + NOTE: P1003.1c/D10, p. 39 adds sigwait(). */ + +int _EXFUN(sigwaitinfo, (const sigset_t *set, siginfo_t *info)); +int _EXFUN(sigtimedwait, + (const sigset_t *set, siginfo_t *info, const struct timespec *timeout) +); +int _EXFUN(sigwait, (const sigset_t *set, int *sig)); + +/* 3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78 */ +int _EXFUN(sigqueue, (pid_t pid, int signo, const union sigval value)); + +#endif /* defined(_POSIX_REALTIME_SIGNALS) */ + +#endif /* defined(__CYGWIN__) || defined(__rtems__) */ + +/* #endif __STRICT_ANSI__ */ + +#if defined(___AM29K__) +/* These all need to be defined for ANSI C, but I don't think they are + meaningful. */ +#define SIGABRT 1 +#define SIGFPE 1 +#define SIGILL 1 +#define SIGINT 1 +#define SIGSEGV 1 +#define SIGTERM 1 +/* These need to be defined for POSIX, and some others do too. */ +#define SIGHUP 1 +#define SIGQUIT 1 +#define NSIG 2 +#elif defined(__GO32__) +#define SIGINT 1 +#define SIGKILL 2 +#define SIGPIPE 3 +#define SIGFPE 4 +#define SIGHUP 5 +#define SIGTERM 6 +#define SIGSEGV 7 +#define SIGTSTP 8 +#define SIGQUIT 9 +#define SIGTRAP 10 +#define SIGILL 11 +#define SIGEMT 12 +#define SIGALRM 13 +#define SIGBUS 14 +#define SIGLOST 15 +#define SIGSTOP 16 +#define SIGABRT 17 +#define SIGUSR1 18 +#define SIGUSR2 19 +#define NSIG 20 +#elif !defined(SIGTRAP) +#define SIGHUP 1 /* hangup */ +#define SIGINT 2 /* interrupt */ +#define SIGQUIT 3 /* quit */ +#define SIGILL 4 /* illegal instruction (not reset when caught) */ +#define SIGTRAP 5 /* trace trap (not reset when caught) */ +#define SIGIOT 6 /* IOT instruction */ +#define SIGABRT 6 /* used by abort, replace SIGIOT in the future */ +#define SIGEMT 7 /* EMT instruction */ +#define SIGFPE 8 /* floating point exception */ +#define SIGKILL 9 /* kill (cannot be caught or ignored) */ +#define SIGBUS 10 /* bus error */ +#define SIGSEGV 11 /* segmentation violation */ +#define SIGSYS 12 /* bad argument to system call */ +#define SIGPIPE 13 /* write on a pipe with no one to read it */ +#define SIGALRM 14 /* alarm clock */ +#define SIGTERM 15 /* software termination signal from kill */ + +#if defined(__rtems__) +#define SIGURG 16 /* urgent condition on IO channel */ +#define SIGSTOP 17 /* sendable stop signal not from tty */ +#define SIGTSTP 18 /* stop signal from tty */ +#define SIGCONT 19 /* continue a stopped process */ +#define SIGCHLD 20 /* to parent on child stop or exit */ +#define SIGCLD 20 /* System V name for SIGCHLD */ +#define SIGTTIN 21 /* to readers pgrp upon background tty read */ +#define SIGTTOU 22 /* like TTIN for output if (tp->t_local<OSTOP) */ +#define SIGIO 23 /* input/output possible signal */ +#define SIGPOLL SIGIO /* System V name for SIGIO */ +#define SIGWINCH 24 /* window changed */ +#define SIGUSR1 25 /* user defined signal 1 */ +#define SIGUSR2 26 /* user defined signal 2 */ + +/* Real-Time Signals Range, P1003.1b-1993, p. 61 + NOTE: By P1003.1b-1993, this should be at least RTSIG_MAX + (which is a minimum of 8) signals. + */ +#define SIGRTMIN 27 +#define SIGRTMAX 31 +#define __SIGFIRSTNOTRT SIGHUP +#define __SIGLASTNOTRT SIGUSR2 + +#define NSIG 32 /* signal 0 implied */ + +#elif defined(__svr4__) +/* svr4 specifics. different signals above 15, and sigaction. */ +#define SIGUSR1 16 +#define SIGUSR2 17 +#define SIGCLD 18 +#define SIGPWR 19 +#define SIGWINCH 20 +#define SIGPOLL 22 /* 20 for x.out binaries!!!! */ +#define SIGSTOP 23 /* sendable stop signal not from tty */ +#define SIGTSTP 24 /* stop signal from tty */ +#define SIGCONT 25 /* continue a stopped process */ +#define SIGTTIN 26 /* to readers pgrp upon background tty read */ +#define SIGTTOU 27 /* like TTIN for output if (tp->t_local<OSTOP) */ +#define NSIG 28 +#else +#define SIGURG 16 /* urgent condition on IO channel */ +#define SIGSTOP 17 /* sendable stop signal not from tty */ +#define SIGTSTP 18 /* stop signal from tty */ +#define SIGCONT 19 /* continue a stopped process */ +#define SIGCHLD 20 /* to parent on child stop or exit */ +#define SIGCLD 20 /* System V name for SIGCHLD */ +#define SIGTTIN 21 /* to readers pgrp upon background tty read */ +#define SIGTTOU 22 /* like TTIN for output if (tp->t_local<OSTOP) */ +#define SIGIO 23 /* input/output possible signal */ +#define SIGPOLL SIGIO /* System V name for SIGIO */ +#define SIGXCPU 24 /* exceeded CPU time limit */ +#define SIGXFSZ 25 /* exceeded file size limit */ +#define SIGVTALRM 26 /* virtual time alarm */ +#define SIGPROF 27 /* profiling time alarm */ +#define SIGWINCH 28 /* window changed */ +#define SIGLOST 29 /* resource lost (eg, record-lock lost) */ +#define SIGUSR1 30 /* user defined signal 1 */ +#define SIGUSR2 31 /* user defined signal 2 */ +#define NSIG 32 /* signal 0 implied */ +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#ifndef _SIGNAL_H_ +/* Some applications take advantage of the fact that + * and are equivalent in glibc. Allow for that here. */ +#include +#endif +#endif /* _SYS_SIGNAL_H */ diff --git a/tools/sdk/include/newlib/sys/stat.h b/tools/sdk/include/newlib/sys/stat.h new file mode 100644 index 00000000..11b9d808 --- /dev/null +++ b/tools/sdk/include/newlib/sys/stat.h @@ -0,0 +1,192 @@ +#ifndef _SYS_STAT_H +#define _SYS_STAT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <_ansi.h> +#include +#include +#include + +/* dj's stat defines _STAT_H_ */ +#ifndef _STAT_H_ + +/* It is intended that the layout of this structure not change when the + sizes of any of the basic types change (short, int, long) [via a compile + time option]. */ + +#ifdef __CYGWIN__ +#include +#ifdef _COMPILING_NEWLIB +#define stat64 stat +#endif +#else +struct stat +{ + dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + off_t st_size; +#if defined(__rtems__) + struct timespec st_atim; + struct timespec st_mtim; + struct timespec st_ctim; + blksize_t st_blksize; + blkcnt_t st_blocks; +#else + /* SysV/sco doesn't have the rest... But Solaris, eabi does. */ +#if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__) + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +#else + time_t st_atime; + long st_spare1; + time_t st_mtime; + long st_spare2; + time_t st_ctime; + long st_spare3; + long st_blksize; + long st_blocks; + long st_spare4[2]; +#endif +#endif +}; + +#if defined(__rtems__) +#define st_atime st_atim.tv_sec +#define st_ctime st_ctim.tv_sec +#define st_mtime st_mtim.tv_sec +#endif + +#endif + +#define _IFMT 0170000 /* type of file */ +#define _IFDIR 0040000 /* directory */ +#define _IFCHR 0020000 /* character special */ +#define _IFBLK 0060000 /* block special */ +#define _IFREG 0100000 /* regular */ +#define _IFLNK 0120000 /* symbolic link */ +#define _IFSOCK 0140000 /* socket */ +#define _IFIFO 0010000 /* fifo */ + +#define S_BLKSIZE 1024 /* size of a block */ + +#define S_ISUID 0004000 /* set user id on execution */ +#define S_ISGID 0002000 /* set group id on execution */ +#define S_ISVTX 0001000 /* save swapped text even after use */ +#ifndef _POSIX_SOURCE +#define S_IREAD 0000400 /* read permission, owner */ +#define S_IWRITE 0000200 /* write permission, owner */ +#define S_IEXEC 0000100 /* execute/search permission, owner */ +#define S_ENFMT 0002000 /* enforcement-mode locking */ +#endif /* !_POSIX_SOURCE */ + +#define S_IFMT _IFMT +#define S_IFDIR _IFDIR +#define S_IFCHR _IFCHR +#define S_IFBLK _IFBLK +#define S_IFREG _IFREG +#define S_IFLNK _IFLNK +#define S_IFSOCK _IFSOCK +#define S_IFIFO _IFIFO + +#ifdef _WIN32 +/* The Windows header files define _S_ forms of these, so we do too + for easier portability. */ +#define _S_IFMT _IFMT +#define _S_IFDIR _IFDIR +#define _S_IFCHR _IFCHR +#define _S_IFIFO _IFIFO +#define _S_IFREG _IFREG +#define _S_IREAD 0000400 +#define _S_IWRITE 0000200 +#define _S_IEXEC 0000100 +#endif + +#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) +#define S_IRUSR 0000400 /* read permission, owner */ +#define S_IWUSR 0000200 /* write permission, owner */ +#define S_IXUSR 0000100/* execute/search permission, owner */ +#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) +#define S_IRGRP 0000040 /* read permission, group */ +#define S_IWGRP 0000020 /* write permission, grougroup */ +#define S_IXGRP 0000010/* execute/search permission, group */ +#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) +#define S_IROTH 0000004 /* read permission, other */ +#define S_IWOTH 0000002 /* write permission, other */ +#define S_IXOTH 0000001/* execute/search permission, other */ + +#ifndef _POSIX_SOURCE +#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO) /* 0777 */ +#define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) /* 07777 */ +#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) /* 0666 */ +#endif + +#define S_ISBLK(m) (((m)&_IFMT) == _IFBLK) +#define S_ISCHR(m) (((m)&_IFMT) == _IFCHR) +#define S_ISDIR(m) (((m)&_IFMT) == _IFDIR) +#define S_ISFIFO(m) (((m)&_IFMT) == _IFIFO) +#define S_ISREG(m) (((m)&_IFMT) == _IFREG) +#define S_ISLNK(m) (((m)&_IFMT) == _IFLNK) +#define S_ISSOCK(m) (((m)&_IFMT) == _IFSOCK) + +#if defined(__CYGWIN__) +/* Special tv_nsec values for futimens(2) and utimensat(2). */ +#define UTIME_NOW -2L +#define UTIME_OMIT -1L +#endif + +int _EXFUN(chmod,( const char *__path, mode_t __mode )); +int _EXFUN(fchmod,(int __fd, mode_t __mode)); +int _EXFUN(fstat,( int __fd, struct stat *__sbuf )); +int _EXFUN(mkdir,( const char *_path, mode_t __mode )); +int _EXFUN(mkfifo,( const char *__path, mode_t __mode )); +int _EXFUN(stat,( const char *__restrict __path, struct stat *__restrict __sbuf )); +mode_t _EXFUN(umask,( mode_t __mask )); + +#if defined (__SPU__) || defined(__rtems__) || defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(lstat,( const char *__restrict __path, struct stat *__restrict __buf )); +int _EXFUN(mknod,( const char *__path, mode_t __mode, dev_t __dev )); +#endif + +#if (__POSIX_VISIBLE >= 200809 || defined (__CYGWIN__)) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(fchmodat, (int, const char *, mode_t, int)); +#endif +#if (__BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || defined (__CYGWIN__)) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(fstatat, (int, const char *__restrict , struct stat *__restrict, int)); +int _EXFUN(mkdirat, (int, const char *, mode_t)); +int _EXFUN(mkfifoat, (int, const char *, mode_t)); +#endif +#if (__BSD_VISIBLE || __XSI_VISIBLE >= 700 || defined (__CYGWIN__)) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(mknodat, (int, const char *, mode_t, dev_t)); +#endif +#if (__BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || defined (__CYGWIN__)) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(utimensat, (int, const char *, const struct timespec *, int)); +int _EXFUN(futimens, (int, const struct timespec *)); +#endif + +/* Provide prototypes for most of the _ names that are + provided in newlib for some compilers. */ +#ifdef _COMPILING_NEWLIB +int _EXFUN(_fstat,( int __fd, struct stat *__sbuf )); +int _EXFUN(_stat,( const char *__restrict __path, struct stat *__restrict __sbuf )); +int _EXFUN(_mkdir,( const char *_path, mode_t __mode )); +#ifdef __LARGE64_FILES +struct stat64; +int _EXFUN(_stat64,( const char *__restrict __path, struct stat64 *__restrict __sbuf )); +int _EXFUN(_fstat64,( int __fd, struct stat64 *__sbuf )); +#endif +#endif + +#endif /* !_STAT_H_ */ +#ifdef __cplusplus +} +#endif +#endif /* _SYS_STAT_H */ diff --git a/tools/sdk/include/newlib/sys/stdio.h b/tools/sdk/include/newlib/sys/stdio.h new file mode 100644 index 00000000..0918fe15 --- /dev/null +++ b/tools/sdk/include/newlib/sys/stdio.h @@ -0,0 +1,27 @@ +#ifndef _NEWLIB_STDIO_H +#define _NEWLIB_STDIO_H + +#include +#include + +/* Internal locking macros, used to protect stdio functions. In the + general case, expand to nothing. Use __SSTR flag in FILE _flags to + detect if FILE is private to sprintf/sscanf class of functions; if + set then do nothing as lock is not initialised. */ +#if !defined(_flockfile) +#ifndef __SINGLE_THREAD__ +# define _flockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_acquire_recursive((fp)->_lock)) +#else +# define _flockfile(fp) (_CAST_VOID 0) +#endif +#endif + +#if !defined(_funlockfile) +#ifndef __SINGLE_THREAD__ +# define _funlockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_release_recursive((fp)->_lock)) +#else +# define _funlockfile(fp) (_CAST_VOID 0) +#endif +#endif + +#endif /* _NEWLIB_STDIO_H */ diff --git a/tools/sdk/include/newlib/sys/string.h b/tools/sdk/include/newlib/sys/string.h new file mode 100644 index 00000000..ceedf4be --- /dev/null +++ b/tools/sdk/include/newlib/sys/string.h @@ -0,0 +1,2 @@ +/* This is a dummy used as a placeholder for + systems that need to have a special header file. */ diff --git a/tools/sdk/include/newlib/sys/syslimits.h b/tools/sdk/include/newlib/sys/syslimits.h new file mode 100644 index 00000000..ba9dbd66 --- /dev/null +++ b/tools/sdk/include/newlib/sys/syslimits.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 1988, 1993 + * The Regents of the University of California. 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + * + * @(#)syslimits.h 8.1 (Berkeley) 6/2/93 + * $FreeBSD: src/sys/sys/syslimits.h,v 1.10 2001/06/18 20:24:54 wollman Exp $ + */ + +#ifndef _SYS_SYSLIMITS_H_ +#define _SYS_SYSLIMITS_H_ + +#define ARG_MAX 65536 /* max bytes for an exec function */ +#ifndef CHILD_MAX +#define CHILD_MAX 40 /* max simultaneous processes */ +#endif +#define LINK_MAX 32767 /* max file link count */ +#define MAX_CANON 255 /* max bytes in term canon input line */ +#define MAX_INPUT 255 /* max bytes in terminal input */ +#define NAME_MAX 255 /* max bytes in a file name */ +#define NGROUPS_MAX 16 /* max supplemental group id's */ +#ifndef OPEN_MAX +#define OPEN_MAX 64 /* max open files per process */ +#endif +#define PATH_MAX 1024 /* max bytes in pathname */ +#define PIPE_BUF 512 /* max bytes for atomic pipe writes */ +#define IOV_MAX 1024 /* max elements in i/o vector */ + +#define BC_BASE_MAX 99 /* max ibase/obase values in bc(1) */ +#define BC_DIM_MAX 2048 /* max array elements in bc(1) */ +#define BC_SCALE_MAX 99 /* max scale value in bc(1) */ +#define BC_STRING_MAX 1000 /* max const string length in bc(1) */ +#define COLL_WEIGHTS_MAX 0 /* max weights for order keyword */ +#define EXPR_NEST_MAX 32 /* max expressions nested in expr(1) */ +#define LINE_MAX 2048 /* max bytes in an input line */ +#define RE_DUP_MAX 255 /* max RE's in interval notation */ + +#endif diff --git a/tools/sdk/include/newlib/sys/time.h b/tools/sdk/include/newlib/sys/time.h new file mode 100644 index 00000000..be16497f --- /dev/null +++ b/tools/sdk/include/newlib/sys/time.h @@ -0,0 +1,91 @@ +/* time.h -- An implementation of the standard Unix file. + Written by Geoffrey Noer + Public domain; no rights reserved. */ + +#ifndef _SYS_TIME_H_ +#define _SYS_TIME_H_ + +#include <_ansi.h> +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _TIMEVAL_DEFINED +#define _TIMEVAL_DEFINED +struct timeval { + time_t tv_sec; + suseconds_t tv_usec; +}; + +/* BSD time macros used by RTEMS code */ +#if defined (__rtems__) || defined (__CYGWIN__) + +/* Convenience macros for operations on timevals. + NOTE: `timercmp' does not work for >= or <=. */ +#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) +#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) +#define timercmp(a, b, CMP) \ + (((a)->tv_sec == (b)->tv_sec) ? \ + ((a)->tv_usec CMP (b)->tv_usec) : \ + ((a)->tv_sec CMP (b)->tv_sec)) +#define timeradd(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \ + (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \ + if ((result)->tv_usec >= 1000000) \ + { \ + ++(result)->tv_sec; \ + (result)->tv_usec -= 1000000; \ + } \ + } while (0) +#define timersub(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ + (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ + if ((result)->tv_usec < 0) { \ + --(result)->tv_sec; \ + (result)->tv_usec += 1000000; \ + } \ + } while (0) +#endif /* defined (__rtems__) || defined (__CYGWIN__) */ +#endif /* !_TIMEVAL_DEFINED */ + +struct timezone { + int tz_minuteswest; + int tz_dsttime; +}; + +#ifdef __CYGWIN__ +#include +#endif /* __CYGWIN__ */ + +#define ITIMER_REAL 0 +#define ITIMER_VIRTUAL 1 +#define ITIMER_PROF 2 + +struct itimerval { + struct timeval it_interval; + struct timeval it_value; +}; + +#ifdef _COMPILING_NEWLIB +int _EXFUN(_gettimeofday, (struct timeval *__p, void *__tz)); +#endif + +int _EXFUN(gettimeofday, (struct timeval *__restrict __p, + void *__restrict __tz)); +#if __BSD_VISIBLE +int _EXFUN(settimeofday, (const struct timeval *, const struct timezone *)); +int _EXFUN(adjtime, (const struct timeval *, struct timeval *)); +#endif +int _EXFUN(utimes, (const char *__path, const struct timeval *__tvp)); +int _EXFUN(getitimer, (int __which, struct itimerval *__value)); +int _EXFUN(setitimer, (int __which, const struct itimerval *__restrict __value, + struct itimerval *__restrict __ovalue)); + +#ifdef __cplusplus +} +#endif +#endif /* _SYS_TIME_H_ */ diff --git a/tools/sdk/include/newlib/sys/timeb.h b/tools/sdk/include/newlib/sys/timeb.h new file mode 100644 index 00000000..0a2c3de8 --- /dev/null +++ b/tools/sdk/include/newlib/sys/timeb.h @@ -0,0 +1,39 @@ +/* timeb.h -- An implementation of the standard Unix file. + Written by Ian Lance Taylor + Public domain; no rights reserved. + + declares the structure used by the ftime function, as + well as the ftime function itself. Newlib does not provide an + implementation of ftime. */ + +#ifndef _SYS_TIMEB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define _SYS_TIMEB_H + +#include <_ansi.h> +#include + +#ifndef __time_t_defined +typedef _TIME_T_ time_t; +#define __time_t_defined +#endif + +struct timeb +{ + time_t time; + unsigned short millitm; + short timezone; + short dstflag; +}; + +extern int ftime _PARAMS ((struct timeb *)); + +#ifdef __cplusplus +} +#endif + +#endif /* ! defined (_SYS_TIMEB_H) */ diff --git a/tools/sdk/include/newlib/sys/times.h b/tools/sdk/include/newlib/sys/times.h new file mode 100644 index 00000000..927812cb --- /dev/null +++ b/tools/sdk/include/newlib/sys/times.h @@ -0,0 +1,31 @@ +#ifndef _SYS_TIMES_H +#ifdef __cplusplus +extern "C" { +#endif +#define _SYS_TIMES_H + +#include <_ansi.h> +#include + +#ifndef __clock_t_defined +typedef _CLOCK_T_ clock_t; +#define __clock_t_defined +#endif + +/* Get Process Times, P1003.1b-1993, p. 92 */ +struct tms { + clock_t tms_utime; /* user time */ + clock_t tms_stime; /* system time */ + clock_t tms_cutime; /* user time, children */ + clock_t tms_cstime; /* system time, children */ +}; + +clock_t _EXFUN(times,(struct tms *)); +#ifdef _COMPILING_NEWLIB +clock_t _EXFUN(_times,(struct tms *)); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !_SYS_TIMES_H */ diff --git a/tools/sdk/include/newlib/sys/types.h b/tools/sdk/include/newlib/sys/types.h new file mode 100644 index 00000000..ed33e0a6 --- /dev/null +++ b/tools/sdk/include/newlib/sys/types.h @@ -0,0 +1,521 @@ +/* unified sys/types.h: + start with sef's sysvi386 version. + merge go32 version -- a few ifdefs. + h8300hms, h8300xray, and sysvnecv70 disagree on the following types: + + typedef int gid_t; + typedef int uid_t; + typedef int dev_t; + typedef int ino_t; + typedef int mode_t; + typedef int caddr_t; + + however, these aren't "reasonable" values, the sysvi386 ones make far + more sense, and should work sufficiently well (in particular, h8300 + doesn't have a stat, and the necv70 doesn't matter.) -- eichin + */ + +#ifndef _SYS_TYPES_H + +#include <_ansi.h> + +#ifndef __INTTYPES_DEFINED__ +#define __INTTYPES_DEFINED__ + +#include + +#if defined(__rtems__) || defined(__XMK__) +/* + * The following section is RTEMS specific and is needed to more + * closely match the types defined in the BSD sys/types.h. + * This is needed to let the RTEMS/BSD TCP/IP stack compile. + */ + +/* deprecated */ +#if ___int8_t_defined +typedef __uint8_t u_int8_t; +#endif +#if ___int16_t_defined +typedef __uint16_t u_int16_t; +#endif +#if ___int32_t_defined +typedef __uint32_t u_int32_t; +#endif + +#if ___int64_t_defined +typedef __uint64_t u_int64_t; + +/* deprecated */ +typedef __uint64_t u_quad_t; +typedef __int64_t quad_t; +typedef quad_t * qaddr_t; +#endif + +#endif + +#endif /* ! __INTTYPES_DEFINED */ + +#ifndef __need_inttypes + +#define _SYS_TYPES_H +#include + +#ifdef __i386__ +#if defined (GO32) || defined (__MSDOS__) +#define __MS_types__ +#endif +#endif + +# include +# include + +/* To ensure the stat struct's layout doesn't change when sizeof(int), etc. + changes, we assume sizeof short and long never change and have all types + used to define struct stat use them and not int where possible. + Where not possible, _ST_INTxx are used. It would be preferable to not have + such assumptions, but until the extra fluff is necessary, it's avoided. + No 64 bit targets use stat yet. What to do about them is postponed + until necessary. */ +#ifdef __GNUC__ +#define _ST_INT32 __attribute__ ((__mode__ (__SI__))) +#else +#define _ST_INT32 +#endif + +# ifndef _POSIX_SOURCE + +# define physadr physadr_t +# define quad quad_t + +#ifndef _BSDTYPES_DEFINED +/* also defined in mingw/gmon.h and in w32api/winsock[2].h */ +#ifndef __u_char_defined +typedef unsigned char u_char; +#define __u_char_defined +#endif +#ifndef __u_short_defined +typedef unsigned short u_short; +#define __u_short_defined +#endif +#ifndef __u_int_defined +typedef unsigned int u_int; +#define __u_int_defined +#endif +#ifndef __u_long_defined +typedef unsigned long u_long; +#define __u_long_defined +#endif +#define _BSDTYPES_DEFINED +#endif + +typedef unsigned short ushort; /* System V compatibility */ +typedef unsigned int uint; /* System V compatibility */ +typedef unsigned long ulong; /* System V compatibility */ +# endif /*!_POSIX_SOURCE */ + +#ifndef __clock_t_defined +typedef _CLOCK_T_ clock_t; +#define __clock_t_defined +#endif + +#ifndef __time_t_defined +typedef _TIME_T_ time_t; +#define __time_t_defined +#endif + +#ifndef __timespec_defined +#define __timespec_defined +/* Time Value Specification Structures, P1003.1b-1993, p. 261 */ + +struct timespec { + time_t tv_sec; /* Seconds */ + long tv_nsec; /* Nanoseconds */ +}; +#endif + +struct itimerspec { + struct timespec it_interval; /* Timer period */ + struct timespec it_value; /* Timer expiration */ +}; + +#ifndef __daddr_t_defined +typedef long daddr_t; +#define __daddr_t_defined +#endif +#ifndef __caddr_t_defined +typedef char * caddr_t; +#define __caddr_t_defined +#endif + +#ifndef __CYGWIN__ +#if defined(__MS_types__) || defined(__rtems__) || \ + defined(__sparc__) || defined(__SPU__) +typedef unsigned long ino_t; +#else +typedef unsigned short ino_t; +#endif +#endif /*__CYGWIN__*/ + +#ifdef __MS_types__ +typedef unsigned long vm_offset_t; +typedef unsigned long vm_size_t; + +#define __BIT_TYPES_DEFINED__ + +typedef signed char int8_t; +typedef unsigned char u_int8_t; +typedef short int16_t; +typedef unsigned short u_int16_t; +typedef int int32_t; +typedef unsigned int u_int32_t; +typedef long long int64_t; +typedef unsigned long long u_int64_t; +typedef int32_t register_t; +#endif /* __MS_types__ */ + +/* + * All these should be machine specific - right now they are all broken. + * However, for all of Cygnus' embedded targets, we want them to all be + * the same. Otherwise things like sizeof (struct stat) might depend on + * how the file was compiled (e.g. -mint16 vs -mint32, etc.). + */ + +#ifndef __CYGWIN__ /* which defines these types in it's own types.h. */ +typedef _off_t off_t; +typedef __dev_t dev_t; +typedef __uid_t uid_t; +typedef __gid_t gid_t; +#endif + +#if defined(__XMK__) +typedef signed char pid_t; +#else +typedef int pid_t; +#endif + +#if defined(__rtems__) +typedef _mode_t mode_t; +#endif + +#ifndef __CYGWIN__ +typedef long key_t; +#endif +typedef _ssize_t ssize_t; + +#if !defined(__CYGWIN__) && !defined(__rtems__) +#ifdef __MS_types__ +typedef char * addr_t; +typedef int mode_t; +#else +#if defined (__sparc__) && !defined (__sparc_v9__) +#ifdef __svr4__ +typedef unsigned long mode_t; +#else +typedef unsigned short mode_t; +#endif +#else +typedef unsigned int mode_t _ST_INT32; +#endif +#endif /* ! __MS_types__ */ +#endif /*__CYGWIN__*/ + +typedef unsigned short nlink_t; + +/* We don't define fd_set and friends if we are compiling POSIX + source, or if we have included (or may include as indicated + by __USE_W32_SOCKETS) the W32api winsock[2].h header which + defines Windows versions of them. Note that a program which + includes the W32api winsock[2].h header must know what it is doing; + it must not call the cygwin32 select function. +*/ +# if !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) +# define _SYS_TYPES_FD_SET +# define NBBY 8 /* number of bits in a byte */ +/* + * Select uses bit masks of file descriptors in longs. + * These macros manipulate such bit fields (the filesystem macros use chars). + * FD_SETSIZE may be defined by the user, but the default here + * should be >= NOFILE (param.h). + */ +# ifndef FD_SETSIZE +# define FD_SETSIZE 64 +# endif + +typedef long fd_mask; +# define NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */ +# ifndef howmany +# define howmany(x,y) (((x)+((y)-1))/(y)) +# endif + +/* We use a macro for fd_set so that including Sockets.h afterwards + can work. */ +typedef struct _types_fd_set { + fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; +} _types_fd_set; + +#define fd_set _types_fd_set + +# define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS))) +# define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS))) +# define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS))) +# define FD_ZERO(p) (__extension__ (void)({ \ + size_t __i; \ + char *__tmp = (char *)p; \ + for (__i = 0; __i < sizeof (*(p)); ++__i) \ + *__tmp++ = 0; \ +})) + +# endif /* !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) */ + +#undef __MS_types__ +#undef _ST_INT32 + + +#ifndef __clockid_t_defined +typedef _CLOCKID_T_ clockid_t; +#define __clockid_t_defined +#endif + +#ifndef __timer_t_defined +typedef _TIMER_T_ timer_t; +#define __timer_t_defined +#endif + +typedef unsigned long useconds_t; +typedef long suseconds_t; + +#include + + +/* Cygwin will probably never have full posix compliance due to little things + * like an inability to set the stackaddress. Cygwin is also using void * + * pointers rather than structs to ensure maximum binary compatability with + * previous releases. + * This means that we don't use the types defined here, but rather in + * + */ +#if defined(_POSIX_THREADS) && !defined(__CYGWIN__) + +#include + +/* + * 2.5 Primitive System Data Types, P1003.1c/D10, p. 19. + */ + +#if defined(__XMK__) +typedef unsigned int pthread_t; /* identify a thread */ +#else +typedef __uint32_t pthread_t; /* identify a thread */ +#endif + +/* P1003.1c/D10, p. 118-119 */ +#define PTHREAD_SCOPE_PROCESS 0 +#define PTHREAD_SCOPE_SYSTEM 1 + +/* P1003.1c/D10, p. 111 */ +#define PTHREAD_INHERIT_SCHED 1 /* scheduling policy and associated */ + /* attributes are inherited from */ + /* the calling thread. */ +#define PTHREAD_EXPLICIT_SCHED 2 /* set from provided attribute object */ + +/* P1003.1c/D10, p. 141 */ +#define PTHREAD_CREATE_DETACHED 0 +#define PTHREAD_CREATE_JOINABLE 1 + +#if defined(__rtems__) + #include +#endif + +#if defined(__XMK__) +typedef struct pthread_attr_s { + int contentionscope; + struct sched_param schedparam; + int detachstate; + void *stackaddr; + size_t stacksize; +} pthread_attr_t; + +#define PTHREAD_STACK_MIN 200 + +#else /* !defined(__XMK__) */ +typedef struct { + int is_initialized; + void *stackaddr; + int stacksize; + int contentionscope; + int inheritsched; + int schedpolicy; + struct sched_param schedparam; +#if defined(__rtems__) + size_t guardsize; +#endif + + /* P1003.4b/D8, p. 54 adds cputime_clock_allowed attribute. */ +#if defined(_POSIX_THREAD_CPUTIME) + int cputime_clock_allowed; /* see time.h */ +#endif + int detachstate; +#if defined(__rtems__) + size_t affinitysetsize; + cpu_set_t *affinityset; + cpu_set_t affinitysetpreallocated; +#endif +} pthread_attr_t; + +#endif /* !defined(__XMK__) */ + +#if defined(_POSIX_THREAD_PROCESS_SHARED) +/* NOTE: P1003.1c/D10, p. 81 defines following values for process_shared. */ + +#define PTHREAD_PROCESS_PRIVATE 0 /* visible within only the creating process */ +#define PTHREAD_PROCESS_SHARED 1 /* visible too all processes with access to */ + /* the memory where the resource is */ + /* located */ +#endif + +#if defined(_POSIX_THREAD_PRIO_PROTECT) +/* Mutexes */ + +/* Values for blocking protocol. */ + +#define PTHREAD_PRIO_NONE 0 +#define PTHREAD_PRIO_INHERIT 1 +#define PTHREAD_PRIO_PROTECT 2 +#endif + +#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) + +/* Values for mutex type */ + +/* The following defines are part of the X/Open System Interface (XSI). */ + +/* + * This type of mutex does not detect deadlock. A thread attempting to + * relock this mutex without first unlocking it shall deadlock. Attempting + * to unlock a mutex locked by a different thread results in undefined + * behavior. Attempting to unlock an unlocked mutex results in undefined + * behavior. + */ +#define PTHREAD_MUTEX_NORMAL 0 + +/* + * A thread attempting to relock this mutex without first unlocking + * it shall succeed in locking the mutex. The relocking deadlock which + * can occur with mutexes of type PTHREAD_MUTEX_NORMAL cannot occur with + * this type of mutex. Multiple locks of this mutex shall require the + * same number of unlocks to release the mutex before another thread can + * acquire the mutex. A thread attempting to unlock a mutex which another + * thread has locked shall return with an error. A thread attempting to + * unlock an unlocked mutex shall return with an error. + */ +#define PTHREAD_MUTEX_RECURSIVE 1 + +/* + * This type of mutex provides error checking. A thread attempting + * to relock this mutex without first unlocking it shall return with an + * error. A thread attempting to unlock a mutex which another thread has + * locked shall return with an error. A thread attempting to unlock an + * unlocked mutex shall return with an error. + */ +#define PTHREAD_MUTEX_ERRORCHECK 2 + +/* + * Attempting to recursively lock a mutex of this type results + * in undefined behavior. Attempting to unlock a mutex of this type + * which was not locked by the calling thread results in undefined + * behavior. Attempting to unlock a mutex of this type which is not locked + * results in undefined behavior. An implementation may map this mutex to + * one of the other mutex types. + */ +#define PTHREAD_MUTEX_DEFAULT 3 + +#endif /* !defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) */ + +#if defined(__XMK__) +typedef unsigned int pthread_mutex_t; /* identify a mutex */ + +typedef struct { + int type; +} pthread_mutexattr_t; + +#else /* !defined(__XMK__) */ +typedef __uint32_t pthread_mutex_t; /* identify a mutex */ + +typedef struct { + int is_initialized; +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow mutex to be shared amongst processes */ +#endif +#if defined(_POSIX_THREAD_PRIO_PROTECT) + int prio_ceiling; + int protocol; +#endif +#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) + int type; +#endif + int recursive; +} pthread_mutexattr_t; +#endif /* !defined(__XMK__) */ + +/* Condition Variables */ + +typedef __uint32_t pthread_cond_t; /* identify a condition variable */ + +typedef struct { + int is_initialized; +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow this to be shared amongst processes */ +#endif +} pthread_condattr_t; /* a condition attribute object */ + +/* Keys */ + +typedef __uint32_t pthread_key_t; /* thread-specific data keys */ + +typedef struct { + int is_initialized; /* is this structure initialized? */ + int init_executed; /* has the initialization routine been run? */ +} pthread_once_t; /* dynamic package initialization */ +#else +#if defined (__CYGWIN__) +#include +#endif +#endif /* defined(_POSIX_THREADS) */ + +/* POSIX Barrier Types */ + +#if defined(_POSIX_BARRIERS) +typedef __uint32_t pthread_barrier_t; /* POSIX Barrier Object */ +typedef struct { + int is_initialized; /* is this structure initialized? */ +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow this to be shared amongst processes */ +#endif +} pthread_barrierattr_t; +#endif /* defined(_POSIX_BARRIERS) */ + +/* POSIX Spin Lock Types */ + +#if !defined (__CYGWIN__) +#if defined(_POSIX_SPIN_LOCKS) +typedef __uint32_t pthread_spinlock_t; /* POSIX Spin Lock Object */ +#endif /* defined(_POSIX_SPIN_LOCKS) */ + +/* POSIX Reader/Writer Lock Types */ + +#if defined(_POSIX_READER_WRITER_LOCKS) +typedef __uint32_t pthread_rwlock_t; /* POSIX RWLock Object */ +typedef struct { + int is_initialized; /* is this structure initialized? */ +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow this to be shared amongst processes */ +#endif +} pthread_rwlockattr_t; +#endif /* defined(_POSIX_READER_WRITER_LOCKS) */ +#endif /* __CYGWIN__ */ + +#endif /* !__need_inttypes */ + +#undef __need_inttypes + +#endif /* _SYS_TYPES_H */ diff --git a/tools/sdk/include/newlib/sys/unistd.h b/tools/sdk/include/newlib/sys/unistd.h new file mode 100644 index 00000000..a741383d --- /dev/null +++ b/tools/sdk/include/newlib/sys/unistd.h @@ -0,0 +1,516 @@ +#ifndef _SYS_UNISTD_H +#define _SYS_UNISTD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <_ansi.h> +#define __need_size_t +#define __need_ptrdiff_t +#include +#include +#include +#include + +extern char **environ; + +void _EXFUN(_exit, (int __status ) _ATTRIBUTE ((__noreturn__))); + +int _EXFUN(access,(const char *__path, int __amode )); +unsigned _EXFUN(alarm, (unsigned __secs )); +int _EXFUN(chdir, (const char *__path )); +int _EXFUN(chmod, (const char *__path, mode_t __mode )); +#if !defined(__INSIDE_CYGWIN__) +int _EXFUN(chown, (const char *__path, uid_t __owner, gid_t __group )); +#endif +#if defined(__CYGWIN__) || defined(__rtems__) +int _EXFUN(chroot, (const char *__path )); +#endif +int _EXFUN(close, (int __fildes )); +#if defined(__CYGWIN__) +size_t _EXFUN(confstr, (int __name, char *__buf, size_t __len)); +#endif +char * _EXFUN(ctermid, (char *__s )); +char * _EXFUN(cuserid, (char *__s )); +#if defined(__CYGWIN__) +int _EXFUN(daemon, (int nochdir, int noclose)); +#endif +int _EXFUN(dup, (int __fildes )); +int _EXFUN(dup2, (int __fildes, int __fildes2 )); +#if defined(__CYGWIN__) +int _EXFUN(dup3, (int __fildes, int __fildes2, int flags)); +int _EXFUN(eaccess, (const char *__path, int __mode)); +void _EXFUN(endusershell, (void)); +int _EXFUN(euidaccess, (const char *__path, int __mode)); +#endif +int _EXFUN(execl, (const char *__path, const char *, ... )); +int _EXFUN(execle, (const char *__path, const char *, ... )); +int _EXFUN(execlp, (const char *__file, const char *, ... )); +#if defined(__CYGWIN__) +int _EXFUN(execlpe, (const char *__file, const char *, ... )); +#endif +int _EXFUN(execv, (const char *__path, char * const __argv[] )); +int _EXFUN(execve, (const char *__path, char * const __argv[], char * const __envp[] )); +int _EXFUN(execvp, (const char *__file, char * const __argv[] )); +#if defined(__CYGWIN__) +int _EXFUN(execvpe, (const char *__file, char * const __argv[], char * const __envp[] )); +#endif +#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE || defined(__CYGWIN__) +int _EXFUN(faccessat, (int __dirfd, const char *__path, int __mode, int __flags)); +#endif +#if defined(__CYGWIN__) || defined(__rtems__) || defined(__SPU__) +int _EXFUN(fchdir, (int __fildes)); +#endif +int _EXFUN(fchmod, (int __fildes, mode_t __mode )); +#if !defined(__INSIDE_CYGWIN__) +int _EXFUN(fchown, (int __fildes, uid_t __owner, gid_t __group )); +#endif +#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE || defined(__CYGWIN__) +int _EXFUN(fchownat, (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags)); +#endif +#if defined(__CYGWIN__) +int _EXFUN(fexecve, (int __fd, char * const __argv[], char * const __envp[] )); +#endif +pid_t _EXFUN(fork, (void )); +long _EXFUN(fpathconf, (int __fd, int __name )); +int _EXFUN(fsync, (int __fd)); +int _EXFUN(fdatasync, (int __fd)); +#if defined(__CYGWIN__) +char * _EXFUN(get_current_dir_name, (void)); +#endif +char * _EXFUN(getcwd, (char *__buf, size_t __size )); +#if defined(__CYGWIN__) +int _EXFUN(getdomainname ,(char *__name, size_t __len)); +#endif +#if !defined(__INSIDE_CYGWIN__) +gid_t _EXFUN(getegid, (void )); +uid_t _EXFUN(geteuid, (void )); +gid_t _EXFUN(getgid, (void )); +#endif +int _EXFUN(getgroups, (int __gidsetsize, gid_t __grouplist[] )); +#if defined(__CYGWIN__) +long _EXFUN(gethostid, (void)); +#endif +char * _EXFUN(getlogin, (void )); +#if defined(_POSIX_THREAD_SAFE_FUNCTIONS) +int _EXFUN(getlogin_r, (char *name, size_t namesize) ); +#endif +char * _EXFUN(getpass, (const char *__prompt)); +int _EXFUN(getpagesize, (void)); +#if defined(__CYGWIN__) +int _EXFUN(getpeereid, (int, uid_t *, gid_t *)); +#endif +pid_t _EXFUN(getpgid, (pid_t)); +pid_t _EXFUN(getpgrp, (void )); +pid_t _EXFUN(getpid, (void )); +pid_t _EXFUN(getppid, (void )); +#if defined(__CYGWIN__) || defined(__rtems__) +pid_t _EXFUN(getsid, (pid_t)); +#endif +#if !defined(__INSIDE_CYGWIN__) +uid_t _EXFUN(getuid, (void )); +#endif +#ifdef __CYGWIN__ +char * _EXFUN(getusershell, (void)); +char * _EXFUN(getwd, (char *__buf )); +int _EXFUN(iruserok, (unsigned long raddr, int superuser, const char *ruser, const char *luser)); +#endif +int _EXFUN(isatty, (int __fildes )); +#if !defined(__INSIDE_CYGWIN__) +int _EXFUN(lchown, (const char *__path, uid_t __owner, gid_t __group )); +#endif +int _EXFUN(link, (const char *__path1, const char *__path2 )); +#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE || defined(__CYGWIN__) +int _EXFUN(linkat, (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags )); +#endif +int _EXFUN(nice, (int __nice_value )); +#if !defined(__INSIDE_CYGWIN__) +off_t _EXFUN(lseek, (int __fildes, off_t __offset, int __whence )); +#endif +#if defined(__SPU__) || defined(__CYGWIN__) +#define F_ULOCK 0 +#define F_LOCK 1 +#define F_TLOCK 2 +#define F_TEST 3 +int _EXFUN(lockf, (int __fd, int __cmd, off_t __len)); +#endif +long _EXFUN(pathconf, (const char *__path, int __name )); +int _EXFUN(pause, (void )); +#ifdef __CYGWIN__ +int _EXFUN(pthread_atfork, (void (*)(void), void (*)(void), void (*)(void))); +#endif +int _EXFUN(pipe, (int __fildes[2] )); +#ifdef __CYGWIN__ +int _EXFUN(pipe2, (int __fildes[2], int flags)); +#endif +ssize_t _EXFUN(pread, (int __fd, void *__buf, size_t __nbytes, off_t __offset)); +ssize_t _EXFUN(pwrite, (int __fd, const void *__buf, size_t __nbytes, off_t __offset)); +_READ_WRITE_RETURN_TYPE _EXFUN(read, (int __fd, void *__buf, size_t __nbyte )); +#if defined(__CYGWIN__) +int _EXFUN(rresvport, (int *__alport)); +int _EXFUN(revoke, (char *__path)); +#endif +int _EXFUN(rmdir, (const char *__path )); +#if defined(__CYGWIN__) +int _EXFUN(ruserok, (const char *rhost, int superuser, const char *ruser, const char *luser)); +#endif +void * _EXFUN(sbrk, (ptrdiff_t __incr)); +#if !defined(__INSIDE_CYGWIN__) +#if defined(__CYGWIN__) || defined(__rtems__) +int _EXFUN(setegid, (gid_t __gid )); +int _EXFUN(seteuid, (uid_t __uid )); +#endif +int _EXFUN(setgid, (gid_t __gid )); +#endif +#if defined(__CYGWIN__) +int _EXFUN(setgroups, (int ngroups, const gid_t *grouplist )); +#endif +#if __BSD_VISIBLE || (defined(_XOPEN_SOURCE) && __XSI_VISIBLE < 500) +int _EXFUN(sethostname, (const char *, size_t)); +#endif +int _EXFUN(setpgid, (pid_t __pid, pid_t __pgid )); +int _EXFUN(setpgrp, (void )); +#if defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(setregid, (gid_t __rgid, gid_t __egid)); +int _EXFUN(setreuid, (uid_t __ruid, uid_t __euid)); +#endif +pid_t _EXFUN(setsid, (void )); +#if !defined(__INSIDE_CYGWIN__) +int _EXFUN(setuid, (uid_t __uid )); +#endif +#if defined(__CYGWIN__) +void _EXFUN(setusershell, (void)); +#endif +unsigned _EXFUN(sleep, (unsigned int __seconds )); +void _EXFUN(swab, (const void *__restrict, void *__restrict, ssize_t)); +long _EXFUN(sysconf, (int __name )); +pid_t _EXFUN(tcgetpgrp, (int __fildes )); +int _EXFUN(tcsetpgrp, (int __fildes, pid_t __pgrp_id )); +char * _EXFUN(ttyname, (int __fildes )); +#if defined(__CYGWIN__) || defined(__rtems__) +int _EXFUN(ttyname_r, (int, char *, size_t)); +#endif +int _EXFUN(unlink, (const char *__path )); +int _EXFUN(usleep, (useconds_t __useconds)); +int _EXFUN(vhangup, (void )); +_READ_WRITE_RETURN_TYPE _EXFUN(write, (int __fd, const void *__buf, size_t __nbyte )); + +#ifdef __CYGWIN__ +# define __UNISTD_GETOPT__ +# include +# undef __UNISTD_GETOPT__ +#else +extern char *optarg; /* getopt(3) external variables */ +extern int optind, opterr, optopt; +int getopt(int, char * const [], const char *); +extern int optreset; /* getopt(3) external variable */ +#endif + +#ifndef _POSIX_SOURCE +pid_t _EXFUN(vfork, (void )); +#endif /* _POSIX_SOURCE */ + +#ifdef _COMPILING_NEWLIB +/* Provide prototypes for most of the _ names that are + provided in newlib for some compilers. */ +int _EXFUN(_close, (int __fildes )); +pid_t _EXFUN(_fork, (void )); +pid_t _EXFUN(_getpid, (void )); +int _EXFUN(_isatty, (int __fildes )); +int _EXFUN(_link, (const char *__path1, const char *__path2 )); +_off_t _EXFUN(_lseek, (int __fildes, _off_t __offset, int __whence )); +#ifdef __LARGE64_FILES +_off64_t _EXFUN(_lseek64, (int __filedes, _off64_t __offset, int __whence )); +#endif +_READ_WRITE_RETURN_TYPE _EXFUN(_read, (int __fd, void *__buf, size_t __nbyte )); +void * _EXFUN(_sbrk, (ptrdiff_t __incr)); +int _EXFUN(_unlink, (const char *__path )); +_READ_WRITE_RETURN_TYPE _EXFUN(_write, (int __fd, const void *__buf, size_t __nbyte )); +int _EXFUN(_execve, (const char *__path, char * const __argv[], char * const __envp[] )); +#endif + +#if defined(__CYGWIN__) || defined(__rtems__) || defined(__aarch64__) || defined (__arm__) || defined(__sh__) || defined(__SPU__) +#if !defined(__INSIDE_CYGWIN__) +int _EXFUN(ftruncate, (int __fd, off_t __length)); +int _EXFUN(truncate, (const char *, off_t __length)); +#endif +#endif + +#if defined(__CYGWIN__) || defined(__rtems__) +int _EXFUN(getdtablesize, (void)); +int _EXFUN(setdtablesize, (int)); +useconds_t _EXFUN(ualarm, (useconds_t __useconds, useconds_t __interval)); +#if !(defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) +/* winsock[2].h defines as __stdcall, and with int as 2nd arg */ + int _EXFUN(gethostname, (char *__name, size_t __len)); +#endif +char * _EXFUN(mktemp, (char *)); +#endif + +#if defined(__CYGWIN__) || defined(__SPU__) || defined(__rtems__) +void _EXFUN(sync, (void)); +#endif + +ssize_t _EXFUN(readlink, (const char *__restrict __path, + char *__restrict __buf, size_t __buflen)); +#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE || defined(__CYGWIN__) +ssize_t _EXFUN(readlinkat, (int __dirfd1, const char *__restrict __path, + char *__restrict __buf, size_t __buflen)); +#endif +int _EXFUN(symlink, (const char *__name1, const char *__name2)); +#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE || defined(__CYGWIN__) +int _EXFUN(symlinkat, (const char *, int, const char *)); +int _EXFUN(unlinkat, (int, const char *, int)); +#endif + +#define F_OK 0 +#define R_OK 4 +#define W_OK 2 +#define X_OK 1 + +# define SEEK_SET 0 +# define SEEK_CUR 1 +# define SEEK_END 2 + +#include + +#define STDIN_FILENO 0 /* standard input file descriptor */ +#define STDOUT_FILENO 1 /* standard output file descriptor */ +#define STDERR_FILENO 2 /* standard error file descriptor */ + +/* + * sysconf values per IEEE Std 1003.1, 2008 Edition + */ + +#define _SC_ARG_MAX 0 +#define _SC_CHILD_MAX 1 +#define _SC_CLK_TCK 2 +#define _SC_NGROUPS_MAX 3 +#define _SC_OPEN_MAX 4 +#define _SC_JOB_CONTROL 5 +#define _SC_SAVED_IDS 6 +#define _SC_VERSION 7 +#define _SC_PAGESIZE 8 +#define _SC_PAGE_SIZE _SC_PAGESIZE +/* These are non-POSIX values we accidentally introduced in 2000 without + guarding them. Keeping them unguarded for backward compatibility. */ +#define _SC_NPROCESSORS_CONF 9 +#define _SC_NPROCESSORS_ONLN 10 +#define _SC_PHYS_PAGES 11 +#define _SC_AVPHYS_PAGES 12 +/* End of non-POSIX values. */ +#define _SC_MQ_OPEN_MAX 13 +#define _SC_MQ_PRIO_MAX 14 +#define _SC_RTSIG_MAX 15 +#define _SC_SEM_NSEMS_MAX 16 +#define _SC_SEM_VALUE_MAX 17 +#define _SC_SIGQUEUE_MAX 18 +#define _SC_TIMER_MAX 19 +#define _SC_TZNAME_MAX 20 +#define _SC_ASYNCHRONOUS_IO 21 +#define _SC_FSYNC 22 +#define _SC_MAPPED_FILES 23 +#define _SC_MEMLOCK 24 +#define _SC_MEMLOCK_RANGE 25 +#define _SC_MEMORY_PROTECTION 26 +#define _SC_MESSAGE_PASSING 27 +#define _SC_PRIORITIZED_IO 28 +#define _SC_REALTIME_SIGNALS 29 +#define _SC_SEMAPHORES 30 +#define _SC_SHARED_MEMORY_OBJECTS 31 +#define _SC_SYNCHRONIZED_IO 32 +#define _SC_TIMERS 33 +#define _SC_AIO_LISTIO_MAX 34 +#define _SC_AIO_MAX 35 +#define _SC_AIO_PRIO_DELTA_MAX 36 +#define _SC_DELAYTIMER_MAX 37 +#define _SC_THREAD_KEYS_MAX 38 +#define _SC_THREAD_STACK_MIN 39 +#define _SC_THREAD_THREADS_MAX 40 +#define _SC_TTY_NAME_MAX 41 +#define _SC_THREADS 42 +#define _SC_THREAD_ATTR_STACKADDR 43 +#define _SC_THREAD_ATTR_STACKSIZE 44 +#define _SC_THREAD_PRIORITY_SCHEDULING 45 +#define _SC_THREAD_PRIO_INHERIT 46 +/* _SC_THREAD_PRIO_PROTECT was _SC_THREAD_PRIO_CEILING in early drafts */ +#define _SC_THREAD_PRIO_PROTECT 47 +#define _SC_THREAD_PRIO_CEILING _SC_THREAD_PRIO_PROTECT +#define _SC_THREAD_PROCESS_SHARED 48 +#define _SC_THREAD_SAFE_FUNCTIONS 49 +#define _SC_GETGR_R_SIZE_MAX 50 +#define _SC_GETPW_R_SIZE_MAX 51 +#define _SC_LOGIN_NAME_MAX 52 +#define _SC_THREAD_DESTRUCTOR_ITERATIONS 53 +#define _SC_ADVISORY_INFO 54 +#define _SC_ATEXIT_MAX 55 +#define _SC_BARRIERS 56 +#define _SC_BC_BASE_MAX 57 +#define _SC_BC_DIM_MAX 58 +#define _SC_BC_SCALE_MAX 59 +#define _SC_BC_STRING_MAX 60 +#define _SC_CLOCK_SELECTION 61 +#define _SC_COLL_WEIGHTS_MAX 62 +#define _SC_CPUTIME 63 +#define _SC_EXPR_NEST_MAX 64 +#define _SC_HOST_NAME_MAX 65 +#define _SC_IOV_MAX 66 +#define _SC_IPV6 67 +#define _SC_LINE_MAX 68 +#define _SC_MONOTONIC_CLOCK 69 +#define _SC_RAW_SOCKETS 70 +#define _SC_READER_WRITER_LOCKS 71 +#define _SC_REGEXP 72 +#define _SC_RE_DUP_MAX 73 +#define _SC_SHELL 74 +#define _SC_SPAWN 75 +#define _SC_SPIN_LOCKS 76 +#define _SC_SPORADIC_SERVER 77 +#define _SC_SS_REPL_MAX 78 +#define _SC_SYMLOOP_MAX 79 +#define _SC_THREAD_CPUTIME 80 +#define _SC_THREAD_SPORADIC_SERVER 81 +#define _SC_TIMEOUTS 82 +#define _SC_TRACE 83 +#define _SC_TRACE_EVENT_FILTER 84 +#define _SC_TRACE_EVENT_NAME_MAX 85 +#define _SC_TRACE_INHERIT 86 +#define _SC_TRACE_LOG 87 +#define _SC_TRACE_NAME_MAX 88 +#define _SC_TRACE_SYS_MAX 89 +#define _SC_TRACE_USER_EVENT_MAX 90 +#define _SC_TYPED_MEMORY_OBJECTS 91 +#define _SC_V7_ILP32_OFF32 92 +#define _SC_V6_ILP32_OFF32 _SC_V7_ILP32_OFF32 +#define _SC_XBS5_ILP32_OFF32 _SC_V7_ILP32_OFF32 +#define _SC_V7_ILP32_OFFBIG 93 +#define _SC_V6_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG +#define _SC_XBS5_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG +#define _SC_V7_LP64_OFF64 94 +#define _SC_V6_LP64_OFF64 _SC_V7_LP64_OFF64 +#define _SC_XBS5_LP64_OFF64 _SC_V7_LP64_OFF64 +#define _SC_V7_LPBIG_OFFBIG 95 +#define _SC_V6_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG +#define _SC_XBS5_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG +#define _SC_XOPEN_CRYPT 96 +#define _SC_XOPEN_ENH_I18N 97 +#define _SC_XOPEN_LEGACY 98 +#define _SC_XOPEN_REALTIME 99 +#define _SC_STREAM_MAX 100 +#define _SC_PRIORITY_SCHEDULING 101 +#define _SC_XOPEN_REALTIME_THREADS 102 +#define _SC_XOPEN_SHM 103 +#define _SC_XOPEN_STREAMS 104 +#define _SC_XOPEN_UNIX 105 +#define _SC_XOPEN_VERSION 106 +#define _SC_2_CHAR_TERM 107 +#define _SC_2_C_BIND 108 +#define _SC_2_C_DEV 109 +#define _SC_2_FORT_DEV 110 +#define _SC_2_FORT_RUN 111 +#define _SC_2_LOCALEDEF 112 +#define _SC_2_PBS 113 +#define _SC_2_PBS_ACCOUNTING 114 +#define _SC_2_PBS_CHECKPOINT 115 +#define _SC_2_PBS_LOCATE 116 +#define _SC_2_PBS_MESSAGE 117 +#define _SC_2_PBS_TRACK 118 +#define _SC_2_SW_DEV 119 +#define _SC_2_UPE 120 +#define _SC_2_VERSION 121 +#define _SC_THREAD_ROBUST_PRIO_INHERIT 122 +#define _SC_THREAD_ROBUST_PRIO_PROTECT 123 +#define _SC_XOPEN_UUCP 124 + +/* + * pathconf values per IEEE Std 1003.1, 2008 Edition + */ + +#define _PC_LINK_MAX 0 +#define _PC_MAX_CANON 1 +#define _PC_MAX_INPUT 2 +#define _PC_NAME_MAX 3 +#define _PC_PATH_MAX 4 +#define _PC_PIPE_BUF 5 +#define _PC_CHOWN_RESTRICTED 6 +#define _PC_NO_TRUNC 7 +#define _PC_VDISABLE 8 +#define _PC_ASYNC_IO 9 +#define _PC_PRIO_IO 10 +#define _PC_SYNC_IO 11 +#define _PC_FILESIZEBITS 12 +#define _PC_2_SYMLINKS 13 +#define _PC_SYMLINK_MAX 14 +#define _PC_ALLOC_SIZE_MIN 15 +#define _PC_REC_INCR_XFER_SIZE 16 +#define _PC_REC_MAX_XFER_SIZE 17 +#define _PC_REC_MIN_XFER_SIZE 18 +#define _PC_REC_XFER_ALIGN 19 +#define _PC_TIMESTAMP_RESOLUTION 20 +#ifdef __CYGWIN__ +/* Ask for POSIX permission bits support. */ +#define _PC_POSIX_PERMISSIONS 90 +/* Ask for full POSIX permission support including uid/gid settings. */ +#define _PC_POSIX_SECURITY 91 +#endif + +/* + * confstr values per IEEE Std 1003.1, 2004 Edition + */ + +#ifdef __CYGWIN__ /* Only defined on Cygwin for now. */ +#define _CS_PATH 0 +#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1 +#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS +#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS +#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS 2 +#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS +#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS +#define _CS_POSIX_V7_ILP32_OFF32_LIBS 3 +#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS +#define _CS_XBS5_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS +#define _CS_XBS5_ILP32_OFF32_LINTFLAGS 4 +#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS 5 +#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS +#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS +#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS 6 +#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS +#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS +#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS 7 +#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS +#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS +#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS 8 +#define _CS_POSIX_V7_LP64_OFF64_CFLAGS 9 +#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS +#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS +#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS 10 +#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS +#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS +#define _CS_POSIX_V7_LP64_OFF64_LIBS 11 +#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS +#define _CS_XBS5_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS +#define _CS_XBS5_LP64_OFF64_LINTFLAGS 12 +#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS 13 +#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS +#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS +#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS 14 +#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS +#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS +#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS 15 +#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS +#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS +#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS 16 +#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS 17 +#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS +#define _CS_XBS5_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS +#define _CS_POSIX_V7_THREADS_CFLAGS 18 +#define _CS_POSIX_V7_THREADS_LDFLAGS 19 +#define _CS_V7_ENV 20 +#define _CS_V6_ENV _CS_V7_ENV +#endif + +#ifdef __cplusplus +} +#endif +#endif /* _SYS_UNISTD_H */ diff --git a/tools/sdk/include/newlib/sys/utime.h b/tools/sdk/include/newlib/sys/utime.h new file mode 100644 index 00000000..5e937f10 --- /dev/null +++ b/tools/sdk/include/newlib/sys/utime.h @@ -0,0 +1,22 @@ +#ifndef _SYS_UTIME_H +#define _SYS_UTIME_H + +/* This is a dummy file, not customized for any + particular system. If there is a utime.h in libc/sys/SYSDIR/sys, + it will override this one. */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct utimbuf +{ + time_t actime; + time_t modtime; +}; + +#ifdef __cplusplus +}; +#endif + +#endif /* _SYS_UTIME_H */ diff --git a/tools/sdk/include/newlib/sys/wait.h b/tools/sdk/include/newlib/sys/wait.h new file mode 100644 index 00000000..73fe3720 --- /dev/null +++ b/tools/sdk/include/newlib/sys/wait.h @@ -0,0 +1,44 @@ +#ifndef _SYS_WAIT_H +#define _SYS_WAIT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define WNOHANG 1 +#define WUNTRACED 2 + +/* A status looks like: + <2 bytes info> <2 bytes code> + + == 0, child has exited, info is the exit value + == 1..7e, child has exited, info is the signal number. + == 7f, child has stopped, info was the signal number. + == 80, there was a core dump. +*/ + +#define WIFEXITED(w) (((w) & 0xff) == 0) +#define WIFSIGNALED(w) (((w) & 0x7f) > 0 && (((w) & 0x7f) < 0x7f)) +#define WIFSTOPPED(w) (((w) & 0xff) == 0x7f) +#define WEXITSTATUS(w) (((w) >> 8) & 0xff) +#define WTERMSIG(w) ((w) & 0x7f) +#define WSTOPSIG WEXITSTATUS + +pid_t wait (int *); +pid_t waitpid (pid_t, int *, int); + +#ifdef _COMPILING_NEWLIB +pid_t _wait (int *); +#endif + +/* Provide prototypes for most of the _ names that are + provided in newlib for some compilers. */ +pid_t _wait (int *); + +#ifdef __cplusplus +}; +#endif + +#endif diff --git a/tools/sdk/include/newlib/tar.h b/tools/sdk/include/newlib/tar.h new file mode 100644 index 00000000..07b06dd7 --- /dev/null +++ b/tools/sdk/include/newlib/tar.h @@ -0,0 +1,39 @@ +/* + * tar.h + */ + +#ifndef _TAR_H +#define _TAR_H + +/* General definitions */ +#define TMAGIC "ustar" /* ustar plus null byte. */ +#define TMAGLEN 6 /* Length of the above. */ +#define TVERSION "00" /* 00 without a null byte. */ +#define TVERSLEN 2 /* Length of the above. */ + +/* Typeflag field definitions */ +#define REGTYPE '0' /* Regular file. */ +#define AREGTYPE '\0' /* Regular file. */ +#define LNKTYPE '1' /* Link. */ +#define SYMTYPE '2' /* Symbolic link. */ +#define CHRTYPE '3' /* Character special. */ +#define BLKTYPE '4' /* Block special. */ +#define DIRTYPE '5' /* Directory. */ +#define FIFOTYPE '6' /* FIFO special. */ +#define CONTTYPE '7' /* Reserved. */ + +/* Mode field bit definitions (octal) */ +#define TSUID 04000 /* Set UID on execution. */ +#define TSGID 02000 /* Set GID on execution. */ +#define TSVTX 01000 /* On directories, restricted deletion flag. */ +#define TUREAD 00400 /* Read by owner. */ +#define TUWRITE 00200 /* Write by owner. */ +#define TUEXEC 00100 /* Execute/search by owner. */ +#define TGREAD 00040 /* Read by group. */ +#define TGWRITE 00020 /* Write by group. */ +#define TGEXEC 00010 /* Execute/search by group. */ +#define TOREAD 00004 /* Read by other. */ +#define TOWRITE 00002 /* Write by other. */ +#define TOEXEC 00001 /* Execute/search by other. */ + +#endif diff --git a/tools/sdk/include/newlib/termios.h b/tools/sdk/include/newlib/termios.h new file mode 100644 index 00000000..ee1820ce --- /dev/null +++ b/tools/sdk/include/newlib/termios.h @@ -0,0 +1,7 @@ +#ifdef __cplusplus +extern "C" { +#endif +#include +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/include/newlib/tgmath.h b/tools/sdk/include/newlib/tgmath.h new file mode 100644 index 00000000..f9c8311c --- /dev/null +++ b/tools/sdk/include/newlib/tgmath.h @@ -0,0 +1,184 @@ +/* http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/tgmath.h.html */ +/*- + * Copyright (c) 2004 Stefan Farfeleder. + * 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 AUTHOR 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 AUTHOR 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. + * + * $FreeBSD$ + */ + +#ifndef _TGMATH_H_ +#define _TGMATH_H_ + +#include +#include + +#ifdef log2 +#undef log2 +#endif + +/* + * This implementation of requires two implementation-dependent + * macros to be defined: + * __tg_impl_simple(x, y, z, fn, fnf, fnl, ...) + * Invokes fnl() if the corresponding real type of x, y or z is long + * double, fn() if it is double or any has an integer type, and fnf() + * otherwise. + * __tg_impl_full(x, y, z, fn, fnf, fnl, cfn, cfnf, cfnl, ...) + * Invokes [c]fnl() if the corresponding real type of x, y or z is long + * double, [c]fn() if it is double or any has an integer type, and + * [c]fnf() otherwise. The function with the 'c' prefix is called if + * any of x, y or z is a complex number. + * Both macros call the chosen function with all additional arguments passed + * to them, as given by __VA_ARGS__. + * + * Note that these macros cannot be implemented with C's ?: operator, + * because the return type of the whole expression would incorrectly be long + * double complex regardless of the argument types. + */ + +/* requires GCC >= 3.1 */ +#if !__GNUC_PREREQ (3, 1) +#error " not implemented for this compiler" +#endif + +#define __tg_type(__e, __t) \ + __builtin_types_compatible_p(__typeof__(__e), __t) +#define __tg_type3(__e1, __e2, __e3, __t) \ + (__tg_type(__e1, __t) || __tg_type(__e2, __t) || \ + __tg_type(__e3, __t)) +#define __tg_type_corr(__e1, __e2, __e3, __t) \ + (__tg_type3(__e1, __e2, __e3, __t) || \ + __tg_type3(__e1, __e2, __e3, __t _Complex)) +#define __tg_integer(__e1, __e2, __e3) \ + (((__typeof__(__e1))1.5 == 1) || ((__typeof__(__e2))1.5 == 1) || \ + ((__typeof__(__e3))1.5 == 1)) +#define __tg_is_complex(__e1, __e2, __e3) \ + (__tg_type3(__e1, __e2, __e3, float _Complex) || \ + __tg_type3(__e1, __e2, __e3, double _Complex) || \ + __tg_type3(__e1, __e2, __e3, long double _Complex) || \ + __tg_type3(__e1, __e2, __e3, __typeof__(_Complex_I))) + +#ifdef _LDBL_EQ_DBL +#define __tg_impl_simple(x, y, z, fn, fnf, fnl, ...) \ + __builtin_choose_expr(__tg_type_corr(x, y, z, long double), \ + fnl(__VA_ARGS__), __builtin_choose_expr( \ + __tg_type_corr(x, y, z, double) || __tg_integer(x, y, z),\ + fn(__VA_ARGS__), fnf(__VA_ARGS__))) +#else +#define __tg_impl_simple(__x, __y, __z, __fn, __fnf, __fnl, ...) \ + (__tg_type_corr(__x, __y, __z, double) || __tg_integer(__x, __y, __z)) \ + ? __fn(__VA_ARGS__) : __fnf(__VA_ARGS__) +#endif + +#define __tg_impl_full(__x, __y, __z, __fn, __fnf, __fnl, __cfn, __cfnf, __cfnl, ...) \ + __builtin_choose_expr(__tg_is_complex(__x, __y, __z), \ + __tg_impl_simple(__x, __y, __z, __cfn, __cfnf, __cfnl, __VA_ARGS__), \ + __tg_impl_simple(__x, __y, __z, __fn, __fnf, __fnl, __VA_ARGS__)) + +/* Macros to save lots of repetition below */ +#define __tg_simple(__x, __fn) \ + __tg_impl_simple(__x, __x, __x, __fn, __fn##f, __fn##l, __x) +#define __tg_simple2(__x, __y, __fn) \ + __tg_impl_simple(__x, __x, __y, __fn, __fn##f, __fn##l, __x, __y) +#define __tg_simplev(__x, __fn, ...) \ + __tg_impl_simple(__x, __x, __x, __fn, __fn##f, __fn##l, __VA_ARGS__) +#define __tg_full(__x, __fn) \ + __tg_impl_full(__x, __x, __x, __fn, __fn##f, __fn##l, c##__fn, c##__fn##f, c##__fn##l, __x) + +/* 7.22#4 -- These macros expand to real or complex functions, depending on + * the type of their arguments. */ +#define acos(__x) __tg_full(__x, acos) +#define asin(__x) __tg_full(__x, asin) +#define atan(__x) __tg_full(__x, atan) +#define acosh(__x) __tg_full(__x, acosh) +#define asinh(__x) __tg_full(__x, asinh) +#define atanh(__x) __tg_full(__x, atanh) +#define cos(__x) __tg_full(__x, cos) +#define sin(__x) __tg_full(__x, sin) +#define tan(__x) __tg_full(__x, tan) +#define cosh(__x) __tg_full(__x, cosh) +#define sinh(__x) __tg_full(__x, sinh) +#define tanh(__x) __tg_full(__x, tanh) +#define exp(__x) __tg_full(__x, exp) +#define log(__x) __tg_full(__x, log) +#define pow(__x, __y) __tg_impl_full(__x, __x, __y, pow, powf, powl, \ + cpow, cpowf, cpowl, __x, __y) +#define sqrt(__x) __tg_full(__x, sqrt) + +/* "The corresponding type-generic macro for fabs and cabs is fabs." */ +#define fabs(__x) __tg_impl_full(__x, __x, __x, fabs, fabsf, fabsl, \ + cabs, cabsf, cabsl, __x) + +/* 7.22#5 -- These macros are only defined for arguments with real type. */ +#define atan2(__x, __y) __tg_simple2(__x, __y, atan2) +#define cbrt(__x) __tg_simple(__x, cbrt) +#define ceil(__x) __tg_simple(__x, ceil) +#define copysign(__x, __y) __tg_simple2(__x, __y, copysign) +#define erf(__x) __tg_simple(__x, erf) +#define erfc(__x) __tg_simple(__x, erfc) +#define exp2(__x) __tg_simple(__x, exp2) +#define expm1(__x) __tg_simple(__x, expm1) +#define fdim(__x, __y) __tg_simple2(__x, __y, fdim) +#define floor(__x) __tg_simple(__x, floor) +#define fma(__x, __y, __z) __tg_impl_simple(__x, __y, __z, fma, fmaf, fmal, \ + __x, __y, __z) +#define fmax(__x, __y) __tg_simple2(__x, __y, fmax) +#define fmin(__x, __y) __tg_simple2(__x, __y, fmin) +#define fmod(__x, __y) __tg_simple2(__x, __y, fmod) +#define frexp(__x, __y) __tg_simplev(__x, frexp, __x, __y) +#define hypot(__x, __y) __tg_simple2(__x, __y, hypot) +#define ilogb(__x) __tg_simple(__x, ilogb) +#define ldexp(__x, __y) __tg_simplev(__x, ldexp, __x, __y) +#define lgamma(__x) __tg_simple(__x, lgamma) +#define llrint(__x) __tg_simple(__x, llrint) +#define llround(__x) __tg_simple(__x, llround) +#define log10(__x) __tg_simple(__x, log10) +#define log1p(__x) __tg_simple(__x, log1p) +#define log2(__x) __tg_simple(__x, log2) +#define logb(__x) __tg_simple(__x, logb) +#define lrint(__x) __tg_simple(__x, lrint) +#define lround(__x) __tg_simple(__x, lround) +#define nearbyint(__x) __tg_simple(__x, nearbyint) +#define nextafter(__x, __y) __tg_simple2(__x, __y, nextafter) +/* not yet implemented even for _LDBL_EQ_DBL platforms +#define nexttoward(__x, __y) __tg_simplev(__x, nexttoward, __x, __y) +*/ +#define remainder(__x, __y) __tg_simple2(__x, __y, remainder) +#define remquo(__x, __y, __z) __tg_impl_simple(__x, __x, __y, remquo, remquof, \ + remquol, __x, __y, __z) +#define rint(__x) __tg_simple(__x, rint) +#define round(__x) __tg_simple(__x, round) +#define scalbn(__x, __y) __tg_simplev(__x, scalbn, __x, __y) +#define scalbln(__x, __y) __tg_simplev(__x, scalbln, __x, __y) +#define tgamma(__x) __tg_simple(__x, tgamma) +#define trunc(__x) __tg_simple(__x, trunc) + +/* 7.22#6 -- These macros always expand to complex functions. */ +#define carg(__x) __tg_simple(__x, carg) +#define cimag(__x) __tg_simple(__x, cimag) +#define conj(__x) __tg_simple(__x, conj) +#define cproj(__x) __tg_simple(__x, cproj) +#define creal(__x) __tg_simple(__x, creal) + +#endif /* !_TGMATH_H_ */ diff --git a/tools/sdk/include/newlib/time.h b/tools/sdk/include/newlib/time.h new file mode 100644 index 00000000..d7b6612d --- /dev/null +++ b/tools/sdk/include/newlib/time.h @@ -0,0 +1,291 @@ +/* + * time.h + * + * Struct and function declarations for dealing with time. + */ + +#ifndef _TIME_H_ +#define _TIME_H_ + +#include "_ansi.h" +#include + +#define __need_size_t +#define __need_NULL +#include + +/* Get _CLOCKS_PER_SEC_ */ +#include + +#ifndef _CLOCKS_PER_SEC_ +#define _CLOCKS_PER_SEC_ 1000 +#endif + +#define CLOCKS_PER_SEC _CLOCKS_PER_SEC_ +#define CLK_TCK CLOCKS_PER_SEC + +#include + +_BEGIN_STD_C + +struct tm +{ + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; +#ifdef __TM_GMTOFF + long __TM_GMTOFF; +#endif +#ifdef __TM_ZONE + const char *__TM_ZONE; +#endif +}; + +clock_t _EXFUN(clock, (void)); +double _EXFUN(difftime, (time_t _time2, time_t _time1)); +time_t _EXFUN(mktime, (struct tm *_timeptr)); +time_t _EXFUN(time, (time_t *_timer)); +#ifndef _REENT_ONLY +char *_EXFUN(asctime, (const struct tm *_tblock)); +char *_EXFUN(ctime, (const time_t *_time)); +struct tm *_EXFUN(gmtime, (const time_t *_timer)); +struct tm *_EXFUN(localtime,(const time_t *_timer)); +#endif +size_t _EXFUN(strftime, (char *__restrict _s, + size_t _maxsize, const char *__restrict _fmt, + const struct tm *__restrict _t)); + +char *_EXFUN(asctime_r, (const struct tm *__restrict, + char *__restrict)); +char *_EXFUN(ctime_r, (const time_t *, char *)); +struct tm *_EXFUN(gmtime_r, (const time_t *__restrict, + struct tm *__restrict)); +struct tm *_EXFUN(localtime_r, (const time_t *__restrict, + struct tm *__restrict)); + +_END_STD_C + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __STRICT_ANSI__ +char *_EXFUN(strptime, (const char *__restrict, + const char *__restrict, + struct tm *__restrict)); +_VOID _EXFUN(tzset, (_VOID)); +_VOID _EXFUN(_tzset_r, (struct _reent *)); + +typedef struct __tzrule_struct +{ + char ch; + int m; + int n; + int d; + int s; + time_t change; + long offset; /* Match type of _timezone. */ +} __tzrule_type; + +typedef struct __tzinfo_struct +{ + int __tznorth; + int __tzyear; + __tzrule_type __tzrule[2]; +} __tzinfo_type; + +__tzinfo_type *_EXFUN (__gettzinfo, (_VOID)); + +/* getdate functions */ + +#ifdef HAVE_GETDATE +#ifndef _REENT_ONLY +#define getdate_err (*__getdate_err()) +int *_EXFUN(__getdate_err,(_VOID)); + +struct tm * _EXFUN(getdate, (const char *)); +/* getdate_err is set to one of the following values to indicate the error. + 1 the DATEMSK environment variable is null or undefined, + 2 the template file cannot be opened for reading, + 3 failed to get file status information, + 4 the template file is not a regular file, + 5 an error is encountered while reading the template file, + 6 memory allication failed (not enough memory available), + 7 there is no line in the template that matches the input, + 8 invalid input specification */ +#endif /* !_REENT_ONLY */ + +/* getdate_r returns the error code as above */ +int _EXFUN(getdate_r, (const char *, struct tm *)); +#endif /* HAVE_GETDATE */ + +/* defines for the opengroup specifications Derived from Issue 1 of the SVID. */ +extern __IMPORT long _timezone; +extern __IMPORT int _daylight; +extern __IMPORT char *_tzname[2]; + +/* POSIX defines the external tzname being defined in time.h */ +#ifndef tzname +#define tzname _tzname +#endif +#endif /* !__STRICT_ANSI__ */ + +#ifdef __cplusplus +} +#endif + +#include + +#ifdef __CYGWIN__ +#include +#endif /*__CYGWIN__*/ + +#if defined(_POSIX_TIMERS) + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Clocks, P1003.1b-1993, p. 263 */ + +int _EXFUN(clock_settime, (clockid_t clock_id, const struct timespec *tp)); +int _EXFUN(clock_gettime, (clockid_t clock_id, struct timespec *tp)); +int _EXFUN(clock_getres, (clockid_t clock_id, struct timespec *res)); + +/* Create a Per-Process Timer, P1003.1b-1993, p. 264 */ + +int _EXFUN(timer_create, + (clockid_t clock_id, + struct sigevent *__restrict evp, + timer_t *__restrict timerid)); + +/* Delete a Per_process Timer, P1003.1b-1993, p. 266 */ + +int _EXFUN(timer_delete, (timer_t timerid)); + +/* Per-Process Timers, P1003.1b-1993, p. 267 */ + +int _EXFUN(timer_settime, + (timer_t timerid, int flags, + const struct itimerspec *__restrict value, + struct itimerspec *__restrict ovalue)); +int _EXFUN(timer_gettime, (timer_t timerid, struct itimerspec *value)); +int _EXFUN(timer_getoverrun, (timer_t timerid)); + +/* High Resolution Sleep, P1003.1b-1993, p. 269 */ + +int _EXFUN(nanosleep, (const struct timespec *rqtp, struct timespec *rmtp)); + +#ifdef __cplusplus +} +#endif +#endif /* _POSIX_TIMERS */ + +#if defined(_POSIX_CLOCK_SELECTION) + +#ifdef __cplusplus +extern "C" { +#endif + +int _EXFUN(clock_nanosleep, + (clockid_t clock_id, int flags, const struct timespec *rqtp, + struct timespec *rmtp)); + +#ifdef __cplusplus +} +#endif + +#endif /* _POSIX_CLOCK_SELECTION */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* CPU-time Clock Attributes, P1003.4b/D8, p. 54 */ + +/* values for the clock enable attribute */ + +#define CLOCK_ENABLED 1 /* clock is enabled, i.e. counting execution time */ +#define CLOCK_DISABLED 0 /* clock is disabled */ + +/* values for the pthread cputime_clock_allowed attribute */ + +#define CLOCK_ALLOWED 1 /* If a thread is created with this value a */ + /* CPU-time clock attached to that thread */ + /* shall be accessible. */ +#define CLOCK_DISALLOWED 0 /* If a thread is created with this value, the */ + /* thread shall not have a CPU-time clock */ + /* accessible. */ + +/* Manifest Constants, P1003.1b-1993, p. 262 */ + +#define CLOCK_REALTIME (clockid_t)1 + +/* Flag indicating time is "absolute" with respect to the clock + associated with a time. */ + +#define TIMER_ABSTIME 4 + +/* Manifest Constants, P1003.4b/D8, p. 55 */ + +#if defined(_POSIX_CPUTIME) + +/* When used in a clock or timer function call, this is interpreted as + the identifier of the CPU_time clock associated with the PROCESS + making the function call. */ + +#define CLOCK_PROCESS_CPUTIME_ID (clockid_t)2 + +#endif + +#if defined(_POSIX_THREAD_CPUTIME) + +/* When used in a clock or timer function call, this is interpreted as + the identifier of the CPU_time clock associated with the THREAD + making the function call. */ + +#define CLOCK_THREAD_CPUTIME_ID (clockid_t)3 + +#endif + +#if defined(_POSIX_MONOTONIC_CLOCK) + +/* The identifier for the system-wide monotonic clock, which is defined + * as a clock whose value cannot be set via clock_settime() and which + * cannot have backward clock jumps. */ + +#define CLOCK_MONOTONIC (clockid_t)4 + +#endif + +#if defined(_POSIX_CPUTIME) + +/* Accessing a Process CPU-time CLock, P1003.4b/D8, p. 55 */ + +int _EXFUN(clock_getcpuclockid, (pid_t pid, clockid_t *clock_id)); + +#endif /* _POSIX_CPUTIME */ + +#if defined(_POSIX_CPUTIME) || defined(_POSIX_THREAD_CPUTIME) + +/* CPU-time Clock Attribute Access, P1003.4b/D8, p. 56 */ + +int _EXFUN(clock_setenable_attr, (clockid_t clock_id, int attr)); +int _EXFUN(clock_getenable_attr, (clockid_t clock_id, int *attr)); + +#endif /* _POSIX_CPUTIME or _POSIX_THREAD_CPUTIME */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TIME_H_ */ + diff --git a/tools/sdk/include/newlib/unctrl.h b/tools/sdk/include/newlib/unctrl.h new file mode 100644 index 00000000..00407523 --- /dev/null +++ b/tools/sdk/include/newlib/unctrl.h @@ -0,0 +1,46 @@ +/* From curses.h. */ +/* + * Copyright (c) 1981, 1993 + * The Regents of the University of California. 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + */ + +#ifndef _UNCTRL_H_ +#define _UNCTRL_H_ + +#include <_ansi.h> + +#define unctrl(c) __unctrl[(c) & 0xff] +#define unctrllen(ch) __unctrllen[(ch) & 0xff] + +extern __IMPORT _CONST char * _CONST __unctrl[256]; /* Control strings. */ +extern __IMPORT _CONST char __unctrllen[256]; /* Control strings length. */ + +#endif /* _UNCTRL_H_ */ diff --git a/tools/sdk/include/newlib/unistd.h b/tools/sdk/include/newlib/unistd.h new file mode 100644 index 00000000..4f6fd29a --- /dev/null +++ b/tools/sdk/include/newlib/unistd.h @@ -0,0 +1,13 @@ +#ifndef _UNISTD_H_ +#define _UNISTD_H_ + +# include + +#ifndef L_SET +/* Old BSD names for the same constants; just for compatibility. */ +#define L_SET SEEK_SET +#define L_INCR SEEK_CUR +#define L_XTND SEEK_END +#endif + +#endif /* _UNISTD_H_ */ diff --git a/tools/sdk/include/newlib/utime.h b/tools/sdk/include/newlib/utime.h new file mode 100644 index 00000000..652891aa --- /dev/null +++ b/tools/sdk/include/newlib/utime.h @@ -0,0 +1,12 @@ +#ifdef __cplusplus +extern "C" { +#endif + +#include <_ansi.h> + +/* The utime function is defined in libc/sys//sys if it exists. */ +#include + +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/include/newlib/utmp.h b/tools/sdk/include/newlib/utmp.h new file mode 100644 index 00000000..88cf6f85 --- /dev/null +++ b/tools/sdk/include/newlib/utmp.h @@ -0,0 +1,8 @@ +#ifdef __cplusplus +extern "C" { +#endif +#include +#ifdef __cplusplus +} +#endif + diff --git a/tools/sdk/include/newlib/wchar.h b/tools/sdk/include/newlib/wchar.h new file mode 100644 index 00000000..810a6c0e --- /dev/null +++ b/tools/sdk/include/newlib/wchar.h @@ -0,0 +1,254 @@ +#ifndef _WCHAR_H_ +#define _WCHAR_H_ + +#include <_ansi.h> + +#include + +#define __need_size_t +#define __need_wchar_t +#define __need_wint_t +#define __need_NULL +#include + +#define __need___va_list +#include + +/* For _mbstate_t definition. */ +#include +#include +/* For __STDC_ISO_10646__ */ +#include + +#ifndef WEOF +# define WEOF ((wint_t)-1) +#endif + +/* This must match definition in */ +#ifndef WCHAR_MIN +#ifdef __WCHAR_MIN__ +#define WCHAR_MIN __WCHAR_MIN__ +#elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0) +#define WCHAR_MIN (0 + L'\0') +#else +#define WCHAR_MIN (-0x7fffffff - 1 + L'\0') +#endif +#endif + +/* This must match definition in */ +#ifndef WCHAR_MAX +#ifdef __WCHAR_MAX__ +#define WCHAR_MAX __WCHAR_MAX__ +#elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0) +#define WCHAR_MAX (0xffffffffu + L'\0') +#else +#define WCHAR_MAX (0x7fffffff + L'\0') +#endif +#endif + +_BEGIN_STD_C + +/* As in stdio.h, defines __FILE. */ +typedef __FILE FILE; + +/* As required by POSIX.1-2008, declare tm as incomplete type. + The actual definition is in time.h. */ +struct tm; + +#ifndef _MBSTATE_T +#define _MBSTATE_T +typedef _mbstate_t mbstate_t; +#endif /* _MBSTATE_T */ + +wint_t _EXFUN(btowc, (int)); +int _EXFUN(wctob, (wint_t)); +size_t _EXFUN(mbrlen, (const char *__restrict, size_t, mbstate_t *__restrict)); +size_t _EXFUN(mbrtowc, (wchar_t *__restrict, const char *__restrict, size_t, + mbstate_t *__restrict)); +size_t _EXFUN(_mbrtowc_r, (struct _reent *, wchar_t * , const char * , + size_t, mbstate_t *)); +int _EXFUN(mbsinit, (const mbstate_t *)); +size_t _EXFUN(mbsnrtowcs, (wchar_t *__restrict, const char **__restrict, + size_t, size_t, mbstate_t *__restrict)); +size_t _EXFUN(_mbsnrtowcs_r, (struct _reent *, wchar_t * , const char ** , + size_t, size_t, mbstate_t *)); +size_t _EXFUN(mbsrtowcs, (wchar_t *__restrict, const char **__restrict, size_t, + mbstate_t *__restrict)); +size_t _EXFUN(_mbsrtowcs_r, (struct _reent *, wchar_t * , const char ** , size_t, mbstate_t *)); +size_t _EXFUN(wcrtomb, (char *__restrict, wchar_t, mbstate_t *__restrict)); +size_t _EXFUN(_wcrtomb_r, (struct _reent *, char * , wchar_t, mbstate_t *)); +size_t _EXFUN(wcsnrtombs, (char *__restrict, const wchar_t **__restrict, + size_t, size_t, mbstate_t *__restrict)); +size_t _EXFUN(_wcsnrtombs_r, (struct _reent *, char * , const wchar_t ** , + size_t, size_t, mbstate_t *)); +size_t _EXFUN(wcsrtombs, (char *__restrict, const wchar_t **__restrict, + size_t, mbstate_t *__restrict)); +size_t _EXFUN(_wcsrtombs_r, (struct _reent *, char * , const wchar_t ** , + size_t, mbstate_t *)); +int _EXFUN(wcscasecmp, (const wchar_t *, const wchar_t *)); +wchar_t *_EXFUN(wcscat, (wchar_t *__restrict, const wchar_t *__restrict)); +wchar_t *_EXFUN(wcschr, (const wchar_t *, wchar_t)); +int _EXFUN(wcscmp, (const wchar_t *, const wchar_t *)); +int _EXFUN(wcscoll, (const wchar_t *, const wchar_t *)); +wchar_t *_EXFUN(wcscpy, (wchar_t *__restrict, const wchar_t *__restrict)); +wchar_t *_EXFUN(wcpcpy, (wchar_t *__restrict, + const wchar_t *__restrict)); +wchar_t *_EXFUN(wcsdup, (const wchar_t *)); +wchar_t *_EXFUN(_wcsdup_r, (struct _reent *, const wchar_t * )); +size_t _EXFUN(wcscspn, (const wchar_t *, const wchar_t *)); +size_t _EXFUN(wcsftime, (wchar_t *__restrict, size_t, + const wchar_t *__restrict, const struct tm *__restrict)); +size_t _EXFUN(wcslcat, (wchar_t *, const wchar_t *, size_t)); +size_t _EXFUN(wcslcpy, (wchar_t *, const wchar_t *, size_t)); +size_t _EXFUN(wcslen, (const wchar_t *)); +int _EXFUN(wcsncasecmp, (const wchar_t *, const wchar_t *, size_t)); +wchar_t *_EXFUN(wcsncat, (wchar_t *__restrict, + const wchar_t *__restrict, size_t)); +int _EXFUN(wcsncmp, (const wchar_t *, const wchar_t *, size_t)); +wchar_t *_EXFUN(wcsncpy, (wchar_t *__restrict, + const wchar_t *__restrict, size_t)); +wchar_t *_EXFUN(wcpncpy, (wchar_t *__restrict, + const wchar_t *__restrict, size_t)); +size_t _EXFUN(wcsnlen, (const wchar_t *, size_t)); +wchar_t *_EXFUN(wcspbrk, (const wchar_t *, const wchar_t *)); +wchar_t *_EXFUN(wcsrchr, (const wchar_t *, wchar_t)); +size_t _EXFUN(wcsspn, (const wchar_t *, const wchar_t *)); +wchar_t *_EXFUN(wcsstr, (const wchar_t *__restrict, + const wchar_t *__restrict)); +wchar_t *_EXFUN(wcstok, (wchar_t *__restrict, const wchar_t *__restrict, + wchar_t **__restrict)); +double _EXFUN(wcstod, (const wchar_t *__restrict, wchar_t **__restrict)); +double _EXFUN(_wcstod_r, (struct _reent *, const wchar_t *, wchar_t **)); +float _EXFUN(wcstof, (const wchar_t *__restrict, wchar_t **__restrict)); +float _EXFUN(_wcstof_r, (struct _reent *, const wchar_t *, wchar_t **)); +#ifdef _LDBL_EQ_DBL +long double _EXFUN(wcstold, (const wchar_t *, wchar_t **)); +#endif /* _LDBL_EQ_DBL */ +int _EXFUN(wcswidth, (const wchar_t *, size_t)); +size_t _EXFUN(wcsxfrm, (wchar_t *__restrict, const wchar_t *__restrict, + size_t)); +int _EXFUN(wcwidth, (const wchar_t)); +wchar_t *_EXFUN(wmemchr, (const wchar_t *, wchar_t, size_t)); +int _EXFUN(wmemcmp, (const wchar_t *, const wchar_t *, size_t)); +wchar_t *_EXFUN(wmemcpy, (wchar_t *__restrict, const wchar_t *__restrict, + size_t)); +wchar_t *_EXFUN(wmemmove, (wchar_t *, const wchar_t *, size_t)); +wchar_t *_EXFUN(wmemset, (wchar_t *, wchar_t, size_t)); + +long _EXFUN(wcstol, (const wchar_t *__restrict, wchar_t **__restrict, int)); +long long _EXFUN(wcstoll, (const wchar_t *__restrict, wchar_t **__restrict, + int)); +unsigned long _EXFUN(wcstoul, (const wchar_t *__restrict, wchar_t **__restrict, + int)); +unsigned long long _EXFUN(wcstoull, (const wchar_t *__restrict, + wchar_t **__restrict, int)); +long _EXFUN(_wcstol_r, (struct _reent *, const wchar_t *, wchar_t **, int)); +long long _EXFUN(_wcstoll_r, (struct _reent *, const wchar_t *, wchar_t **, int)); +unsigned long _EXFUN(_wcstoul_r, (struct _reent *, const wchar_t *, wchar_t **, int)); +unsigned long long _EXFUN(_wcstoull_r, (struct _reent *, const wchar_t *, wchar_t **, int)); +/* On platforms where long double equals double. */ +#ifdef _LDBL_EQ_DBL +long double _EXFUN(wcstold, (const wchar_t *, wchar_t **)); +#endif /* _LDBL_EQ_DBL */ + +wint_t _EXFUN(fgetwc, (__FILE *)); +wchar_t *_EXFUN(fgetws, (wchar_t *__restrict, int, __FILE *__restrict)); +wint_t _EXFUN(fputwc, (wchar_t, __FILE *)); +int _EXFUN(fputws, (const wchar_t *__restrict, __FILE *__restrict)); +int _EXFUN (fwide, (__FILE *, int)); +wint_t _EXFUN (getwc, (__FILE *)); +wint_t _EXFUN (getwchar, (void)); +wint_t _EXFUN(putwc, (wchar_t, __FILE *)); +wint_t _EXFUN(putwchar, (wchar_t)); +wint_t _EXFUN (ungetwc, (wint_t wc, __FILE *)); + +wint_t _EXFUN(_fgetwc_r, (struct _reent *, __FILE *)); +wint_t _EXFUN(_fgetwc_unlocked_r, (struct _reent *, __FILE *)); +wchar_t *_EXFUN(_fgetws_r, (struct _reent *, wchar_t *, int, __FILE *)); +wchar_t *_EXFUN(_fgetws_unlocked_r, (struct _reent *, wchar_t *, int, __FILE *)); +wint_t _EXFUN(_fputwc_r, (struct _reent *, wchar_t, __FILE *)); +wint_t _EXFUN(_fputwc_unlocked_r, (struct _reent *, wchar_t, __FILE *)); +int _EXFUN(_fputws_r, (struct _reent *, const wchar_t *, __FILE *)); +int _EXFUN(_fputws_unlocked_r, (struct _reent *, const wchar_t *, __FILE *)); +int _EXFUN (_fwide_r, (struct _reent *, __FILE *, int)); +wint_t _EXFUN (_getwc_r, (struct _reent *, __FILE *)); +wint_t _EXFUN (_getwc_unlocked_r, (struct _reent *, __FILE *)); +wint_t _EXFUN (_getwchar_r, (struct _reent *ptr)); +wint_t _EXFUN (_getwchar_unlocked_r, (struct _reent *ptr)); +wint_t _EXFUN(_putwc_r, (struct _reent *, wchar_t, __FILE *)); +wint_t _EXFUN(_putwc_unlocked_r, (struct _reent *, wchar_t, __FILE *)); +wint_t _EXFUN(_putwchar_r, (struct _reent *, wchar_t)); +wint_t _EXFUN(_putwchar_unlocked_r, (struct _reent *, wchar_t)); +wint_t _EXFUN (_ungetwc_r, (struct _reent *, wint_t wc, __FILE *)); + +#if __GNU_VISIBLE +wint_t _EXFUN(fgetwc_unlocked, (__FILE *)); +wchar_t *_EXFUN(fgetws_unlocked, (wchar_t *__restrict, int, __FILE *__restrict)); +wint_t _EXFUN(fputwc_unlocked, (wchar_t, __FILE *)); +int _EXFUN(fputws_unlocked, (const wchar_t *__restrict, __FILE *__restrict)); +wint_t _EXFUN(getwc_unlocked, (__FILE *)); +wint_t _EXFUN(getwchar_unlocked, (void)); +wint_t _EXFUN(putwc_unlocked, (wchar_t, __FILE *)); +wint_t _EXFUN(putwchar_unlocked, (wchar_t)); +#endif + +__FILE *_EXFUN (open_wmemstream, (wchar_t **, size_t *)); +__FILE *_EXFUN (_open_wmemstream_r, (struct _reent *, wchar_t **, size_t *)); + +#ifndef __VALIST +#ifdef __GNUC__ +#define __VALIST __gnuc_va_list +#else +#define __VALIST char* +#endif +#endif + +int _EXFUN(fwprintf, (__FILE *__restrict, const wchar_t *__restrict, ...)); +int _EXFUN(swprintf, (wchar_t *__restrict, size_t, + const wchar_t *__restrict, ...)); +int _EXFUN(vfwprintf, (__FILE *__restrict, const wchar_t *__restrict, + __VALIST)); +int _EXFUN(vswprintf, (wchar_t *__restrict, size_t, + const wchar_t *__restrict, __VALIST)); +int _EXFUN(vwprintf, (const wchar_t *__restrict, __VALIST)); +int _EXFUN(wprintf, (const wchar_t *__restrict, ...)); + +int _EXFUN(_fwprintf_r, (struct _reent *, __FILE *, const wchar_t *, ...)); +int _EXFUN(_swprintf_r, (struct _reent *, wchar_t *, size_t, const wchar_t *, ...)); +int _EXFUN(_vfwprintf_r, (struct _reent *, __FILE *, const wchar_t *, __VALIST)); +int _EXFUN(_vswprintf_r, (struct _reent *, wchar_t *, size_t, const wchar_t *, __VALIST)); +int _EXFUN(_vwprintf_r, (struct _reent *, const wchar_t *, __VALIST)); +int _EXFUN(_wprintf_r, (struct _reent *, const wchar_t *, ...)); + +int _EXFUN(fwscanf, (__FILE *__restrict, const wchar_t *__restrict, ...)); +int _EXFUN(swscanf, (const wchar_t *__restrict, + const wchar_t *__restrict, ...)); +int _EXFUN(vfwscanf, (__FILE *__restrict, const wchar_t *__restrict, + __VALIST)); +int _EXFUN(vswscanf, (const wchar_t *__restrict, const wchar_t *__restrict, + __VALIST)); +int _EXFUN(vwscanf, (const wchar_t *__restrict, __VALIST)); +int _EXFUN(wscanf, (const wchar_t *__restrict, ...)); + +int _EXFUN(_fwscanf_r, (struct _reent *, __FILE *, const wchar_t *, ...)); +int _EXFUN(_swscanf_r, (struct _reent *, const wchar_t *, const wchar_t *, ...)); +int _EXFUN(_vfwscanf_r, (struct _reent *, __FILE *, const wchar_t *, __VALIST)); +int _EXFUN(_vswscanf_r, (struct _reent *, const wchar_t *, const wchar_t *, __VALIST)); +int _EXFUN(_vwscanf_r, (struct _reent *, const wchar_t *, __VALIST)); +int _EXFUN(_wscanf_r, (struct _reent *, const wchar_t *, ...)); + +#define getwc(fp) fgetwc(fp) +#define putwc(wc,fp) fputwc((wc), (fp)) +#define getwchar() fgetwc(_REENT->_stdin) +#define putwchar(wc) fputwc((wc), _REENT->_stdout) + +#if __GNU_VISIBLE +#define getwc_unlocked(fp) fgetwc_unlocked(fp) +#define putwc_unlocked(wc,fp) fputwc_unlocked((wc), (fp)) +#define getwchar_unlocked() fgetwc_unlocked(_REENT->_stdin) +#define putwchar_unlocked(wc) fputwc_unlocked((wc), _REENT->_stdout) +#endif + +_END_STD_C + +#endif /* _WCHAR_H_ */ diff --git a/tools/sdk/include/newlib/wctype.h b/tools/sdk/include/newlib/wctype.h new file mode 100644 index 00000000..c72c9dec --- /dev/null +++ b/tools/sdk/include/newlib/wctype.h @@ -0,0 +1,47 @@ +#ifndef _WCTYPE_H_ +#define _WCTYPE_H_ + +#include <_ansi.h> +#include + +#define __need_wint_t +#include + +#ifndef WEOF +# define WEOF ((wint_t)-1) +#endif + +_BEGIN_STD_C + +#ifndef _WCTYPE_T +#define _WCTYPE_T +typedef int wctype_t; +#endif + +#ifndef _WCTRANS_T +#define _WCTRANS_T +typedef int wctrans_t; +#endif + +int _EXFUN(iswalpha, (wint_t)); +int _EXFUN(iswalnum, (wint_t)); +int _EXFUN(iswblank, (wint_t)); +int _EXFUN(iswcntrl, (wint_t)); +int _EXFUN(iswctype, (wint_t, wctype_t)); +int _EXFUN(iswdigit, (wint_t)); +int _EXFUN(iswgraph, (wint_t)); +int _EXFUN(iswlower, (wint_t)); +int _EXFUN(iswprint, (wint_t)); +int _EXFUN(iswpunct, (wint_t)); +int _EXFUN(iswspace, (wint_t)); +int _EXFUN(iswupper, (wint_t)); +int _EXFUN(iswxdigit, (wint_t)); +wint_t _EXFUN(towctrans, (wint_t, wctrans_t)); +wint_t _EXFUN(towupper, (wint_t)); +wint_t _EXFUN(towlower, (wint_t)); +wctrans_t _EXFUN(wctrans, (const char *)); +wctype_t _EXFUN(wctype, (const char *)); + +_END_STD_C + +#endif /* _WCTYPE_H_ */ diff --git a/tools/sdk/include/newlib/wordexp.h b/tools/sdk/include/newlib/wordexp.h new file mode 100644 index 00000000..1f09a64c --- /dev/null +++ b/tools/sdk/include/newlib/wordexp.h @@ -0,0 +1,53 @@ +/* Copyright (C) 2002, 2010 by Red Hat, Incorporated. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +#ifndef _WORDEXP_H_ +#define _WORDEXP_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct _wordexp_t +{ + size_t we_wordc; /* Count of words matched by words. */ + char **we_wordv; /* Pointer to list of expanded words. */ + size_t we_offs; /* Slots to reserve at the beginning of we_wordv. */ +}; + +typedef struct _wordexp_t wordexp_t; + +#define WRDE_DOOFFS 0x0001 /* Use we_offs. */ +#define WRDE_APPEND 0x0002 /* Append to output from previous call. */ +#define WRDE_NOCMD 0x0004 /* Don't perform command substitution. */ +#define WRDE_REUSE 0x0008 /* pwordexp points to a wordexp_t struct returned from + a previous successful call to wordexp. */ +#define WRDE_SHOWERR 0x0010 /* Print error messages to stderr. */ +#define WRDE_UNDEF 0x0020 /* Report attempt to expand undefined shell variable. */ + +enum { + WRDE_SUCCESS, + WRDE_NOSPACE, + WRDE_BADCHAR, + WRDE_BADVAL, + WRDE_CMDSUB, + WRDE_SYNTAX, + WRDE_NOSYS +}; + +/* Note: This implementation of wordexp requires a version of bash + that supports the --wordexp and --protected arguments to be present + on the system. It does not support the WRDE_UNDEF flag. */ +int wordexp(const char *__restrict, wordexp_t *__restrict, int); +void wordfree(wordexp_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* _WORDEXP_H_ */ diff --git a/tools/sdk/include/newlib/xtensa/config/core-isa.h b/tools/sdk/include/newlib/xtensa/config/core-isa.h new file mode 100644 index 00000000..f3f4e45f --- /dev/null +++ b/tools/sdk/include/newlib/xtensa/config/core-isa.h @@ -0,0 +1,655 @@ +/* + * xtensa/config/core-isa.h -- HAL definitions that are dependent on Xtensa + * processor CORE configuration + * + * See , which includes this file, for more details. + */ + +/* Xtensa processor core configuration information. + + Copyright (c) 1999-2016 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef _XTENSA_CORE_CONFIGURATION_H +#define _XTENSA_CORE_CONFIGURATION_H + + +/**************************************************************************** + Parameters Useful for Any Code, USER or PRIVILEGED + ****************************************************************************/ + +/* + * Note: Macros of the form XCHAL_HAVE_*** have a value of 1 if the option is + * configured, and a value of 0 otherwise. These macros are always defined. + */ + + +/*---------------------------------------------------------------------- + ISA + ----------------------------------------------------------------------*/ + +#define XCHAL_HAVE_BE 0 /* big-endian byte ordering */ +#define XCHAL_HAVE_WINDOWED 1 /* windowed registers option */ +#define XCHAL_NUM_AREGS 64 /* num of physical addr regs */ +#define XCHAL_NUM_AREGS_LOG2 6 /* log2(XCHAL_NUM_AREGS) */ +#define XCHAL_MAX_INSTRUCTION_SIZE 3 /* max instr bytes (3..8) */ +#define XCHAL_HAVE_DEBUG 1 /* debug option */ +#define XCHAL_HAVE_DENSITY 1 /* 16-bit instructions */ +#define XCHAL_HAVE_LOOPS 1 /* zero-overhead loops */ +#define XCHAL_LOOP_BUFFER_SIZE 256 /* zero-ov. loop instr buffer size */ +#define XCHAL_HAVE_NSA 1 /* NSA/NSAU instructions */ +#define XCHAL_HAVE_MINMAX 1 /* MIN/MAX instructions */ +#define XCHAL_HAVE_SEXT 1 /* SEXT instruction */ +#define XCHAL_HAVE_DEPBITS 0 /* DEPBITS instruction */ +#define XCHAL_HAVE_CLAMPS 1 /* CLAMPS instruction */ +#define XCHAL_HAVE_MUL16 1 /* MUL16S/MUL16U instructions */ +#define XCHAL_HAVE_MUL32 1 /* MULL instruction */ +#define XCHAL_HAVE_MUL32_HIGH 1 /* MULUH/MULSH instructions */ +#define XCHAL_HAVE_DIV32 1 /* QUOS/QUOU/REMS/REMU instructions */ +#define XCHAL_HAVE_L32R 1 /* L32R instruction */ +#define XCHAL_HAVE_ABSOLUTE_LITERALS 0 /* non-PC-rel (extended) L32R */ +#define XCHAL_HAVE_CONST16 0 /* CONST16 instruction */ +#define XCHAL_HAVE_ADDX 1 /* ADDX#/SUBX# instructions */ +#define XCHAL_HAVE_WIDE_BRANCHES 0 /* B*.W18 or B*.W15 instr's */ +#define XCHAL_HAVE_PREDICTED_BRANCHES 0 /* B[EQ/EQZ/NE/NEZ]T instr's */ +#define XCHAL_HAVE_CALL4AND12 1 /* (obsolete option) */ +#define XCHAL_HAVE_ABS 1 /* ABS instruction */ +/*#define XCHAL_HAVE_POPC 0*/ /* POPC instruction */ +/*#define XCHAL_HAVE_CRC 0*/ /* CRC instruction */ +#define XCHAL_HAVE_RELEASE_SYNC 1 /* L32AI/S32RI instructions */ +#define XCHAL_HAVE_S32C1I 1 /* S32C1I instruction */ +#define XCHAL_HAVE_SPECULATION 0 /* speculation */ +#define XCHAL_HAVE_FULL_RESET 1 /* all regs/state reset */ +#define XCHAL_NUM_CONTEXTS 1 /* */ +#define XCHAL_NUM_MISC_REGS 4 /* num of scratch regs (0..4) */ +#define XCHAL_HAVE_TAP_MASTER 0 /* JTAG TAP control instr's */ +#define XCHAL_HAVE_PRID 1 /* processor ID register */ +#define XCHAL_HAVE_EXTERN_REGS 1 /* WER/RER instructions */ +#define XCHAL_HAVE_MX 0 /* MX core (Tensilica internal) */ +#define XCHAL_HAVE_MP_INTERRUPTS 0 /* interrupt distributor port */ +#define XCHAL_HAVE_MP_RUNSTALL 0 /* core RunStall control port */ +#define XCHAL_HAVE_PSO 0 /* Power Shut-Off */ +#define XCHAL_HAVE_PSO_CDM 0 /* core/debug/mem pwr domains */ +#define XCHAL_HAVE_PSO_FULL_RETENTION 0 /* all regs preserved on PSO */ +#define XCHAL_HAVE_THREADPTR 1 /* THREADPTR register */ +#define XCHAL_HAVE_BOOLEANS 1 /* boolean registers */ +#define XCHAL_HAVE_CP 1 /* CPENABLE reg (coprocessor) */ +#define XCHAL_CP_MAXCFG 8 /* max allowed cp id plus one */ +#define XCHAL_HAVE_MAC16 1 /* MAC16 package */ + +#define XCHAL_HAVE_FUSION 0 /* Fusion*/ +#define XCHAL_HAVE_FUSION_FP 0 /* Fusion FP option */ +#define XCHAL_HAVE_FUSION_LOW_POWER 0 /* Fusion Low Power option */ +#define XCHAL_HAVE_FUSION_AES 0 /* Fusion BLE/Wifi AES-128 CCM option */ +#define XCHAL_HAVE_FUSION_CONVENC 0 /* Fusion Conv Encode option */ +#define XCHAL_HAVE_FUSION_LFSR_CRC 0 /* Fusion LFSR-CRC option */ +#define XCHAL_HAVE_FUSION_BITOPS 0 /* Fusion Bit Operations Support option */ +#define XCHAL_HAVE_FUSION_AVS 0 /* Fusion AVS option */ +#define XCHAL_HAVE_FUSION_16BIT_BASEBAND 0 /* Fusion 16-bit Baseband option */ +#define XCHAL_HAVE_FUSION_VITERBI 0 /* Fusion Viterbi option */ +#define XCHAL_HAVE_FUSION_SOFTDEMAP 0 /* Fusion Soft Bit Demap option */ +#define XCHAL_HAVE_HIFIPRO 0 /* HiFiPro Audio Engine pkg */ +#define XCHAL_HAVE_HIFI4 0 /* HiFi4 Audio Engine pkg */ +#define XCHAL_HAVE_HIFI4_VFPU 0 /* HiFi4 Audio Engine VFPU option */ +#define XCHAL_HAVE_HIFI3 0 /* HiFi3 Audio Engine pkg */ +#define XCHAL_HAVE_HIFI3_VFPU 0 /* HiFi3 Audio Engine VFPU option */ +#define XCHAL_HAVE_HIFI2 0 /* HiFi2 Audio Engine pkg */ +#define XCHAL_HAVE_HIFI2EP 0 /* HiFi2EP */ +#define XCHAL_HAVE_HIFI_MINI 0 + + +#define XCHAL_HAVE_VECTORFPU2005 0 /* vector or user floating-point pkg */ +#define XCHAL_HAVE_USER_DPFPU 0 /* user DP floating-point pkg */ +#define XCHAL_HAVE_USER_SPFPU 0 /* user DP floating-point pkg */ +#define XCHAL_HAVE_FP 1 /* single prec floating point */ +#define XCHAL_HAVE_FP_DIV 1 /* FP with DIV instructions */ +#define XCHAL_HAVE_FP_RECIP 1 /* FP with RECIP instructions */ +#define XCHAL_HAVE_FP_SQRT 1 /* FP with SQRT instructions */ +#define XCHAL_HAVE_FP_RSQRT 1 /* FP with RSQRT instructions */ +#define XCHAL_HAVE_DFP 0 /* double precision FP pkg */ +#define XCHAL_HAVE_DFP_DIV 0 /* DFP with DIV instructions */ +#define XCHAL_HAVE_DFP_RECIP 0 /* DFP with RECIP instructions*/ +#define XCHAL_HAVE_DFP_SQRT 0 /* DFP with SQRT instructions */ +#define XCHAL_HAVE_DFP_RSQRT 0 /* DFP with RSQRT instructions*/ +#define XCHAL_HAVE_DFP_ACCEL 1 /* double precision FP acceleration pkg */ +#define XCHAL_HAVE_DFP_accel XCHAL_HAVE_DFP_ACCEL /* for backward compatibility */ + +#define XCHAL_HAVE_DFPU_SINGLE_ONLY 1 /* DFPU Coprocessor, single precision only */ +#define XCHAL_HAVE_DFPU_SINGLE_DOUBLE 0 /* DFPU Coprocessor, single and double precision */ +#define XCHAL_HAVE_VECTRA1 0 /* Vectra I pkg */ +#define XCHAL_HAVE_VECTRALX 0 /* Vectra LX pkg */ +#define XCHAL_HAVE_PDX4 0 /* PDX4 */ +#define XCHAL_HAVE_CONNXD2 0 /* ConnX D2 pkg */ +#define XCHAL_HAVE_CONNXD2_DUALLSFLIX 0 /* ConnX D2 & Dual LoadStore Flix */ +#define XCHAL_HAVE_BBE16 0 /* ConnX BBE16 pkg */ +#define XCHAL_HAVE_BBE16_RSQRT 0 /* BBE16 & vector recip sqrt */ +#define XCHAL_HAVE_BBE16_VECDIV 0 /* BBE16 & vector divide */ +#define XCHAL_HAVE_BBE16_DESPREAD 0 /* BBE16 & despread */ +#define XCHAL_HAVE_BBENEP 0 /* ConnX BBENEP pkgs */ +#define XCHAL_HAVE_BSP3 0 /* ConnX BSP3 pkg */ +#define XCHAL_HAVE_BSP3_TRANSPOSE 0 /* BSP3 & transpose32x32 */ +#define XCHAL_HAVE_SSP16 0 /* ConnX SSP16 pkg */ +#define XCHAL_HAVE_SSP16_VITERBI 0 /* SSP16 & viterbi */ +#define XCHAL_HAVE_TURBO16 0 /* ConnX Turbo16 pkg */ +#define XCHAL_HAVE_BBP16 0 /* ConnX BBP16 pkg */ +#define XCHAL_HAVE_FLIX3 0 /* basic 3-way FLIX option */ +#define XCHAL_HAVE_GRIVPEP 0 /* GRIVPEP is General Release of IVPEP */ +#define XCHAL_HAVE_GRIVPEP_HISTOGRAM 0 /* Histogram option on GRIVPEP */ + + +/*---------------------------------------------------------------------- + MISC + ----------------------------------------------------------------------*/ + +#define XCHAL_NUM_LOADSTORE_UNITS 1 /* load/store units */ +#define XCHAL_NUM_WRITEBUFFER_ENTRIES 4 /* size of write buffer */ +#define XCHAL_INST_FETCH_WIDTH 4 /* instr-fetch width in bytes */ +#define XCHAL_DATA_WIDTH 4 /* data width in bytes */ +#define XCHAL_DATA_PIPE_DELAY 2 /* d-side pipeline delay + (1 = 5-stage, 2 = 7-stage) */ +#define XCHAL_CLOCK_GATING_GLOBAL 1 /* global clock gating */ +#define XCHAL_CLOCK_GATING_FUNCUNIT 1 /* funct. unit clock gating */ +/* In T1050, applies to selected core load and store instructions (see ISA): */ +#define XCHAL_UNALIGNED_LOAD_EXCEPTION 0 /* unaligned loads cause exc. */ +#define XCHAL_UNALIGNED_STORE_EXCEPTION 0 /* unaligned stores cause exc.*/ +#define XCHAL_UNALIGNED_LOAD_HW 1 /* unaligned loads work in hw */ +#define XCHAL_UNALIGNED_STORE_HW 1 /* unaligned stores work in hw*/ + +#define XCHAL_SW_VERSION 1100003 /* sw version of this header */ + +#define XCHAL_CORE_ID "esp32_v3_49_prod" /* alphanum core name + (CoreID) set in the Xtensa + Processor Generator */ + +#define XCHAL_BUILD_UNIQUE_ID 0x0005FE96 /* 22-bit sw build ID */ + +/* + * These definitions describe the hardware targeted by this software. + */ +#define XCHAL_HW_CONFIGID0 0xC2BCFFFE /* ConfigID hi 32 bits*/ +#define XCHAL_HW_CONFIGID1 0x1CC5FE96 /* ConfigID lo 32 bits*/ +#define XCHAL_HW_VERSION_NAME "LX6.0.3" /* full version name */ +#define XCHAL_HW_VERSION_MAJOR 2600 /* major ver# of targeted hw */ +#define XCHAL_HW_VERSION_MINOR 3 /* minor ver# of targeted hw */ +#define XCHAL_HW_VERSION 260003 /* major*100+minor */ +#define XCHAL_HW_REL_LX6 1 +#define XCHAL_HW_REL_LX6_0 1 +#define XCHAL_HW_REL_LX6_0_3 1 +#define XCHAL_HW_CONFIGID_RELIABLE 1 +/* If software targets a *range* of hardware versions, these are the bounds: */ +#define XCHAL_HW_MIN_VERSION_MAJOR 2600 /* major v of earliest tgt hw */ +#define XCHAL_HW_MIN_VERSION_MINOR 3 /* minor v of earliest tgt hw */ +#define XCHAL_HW_MIN_VERSION 260003 /* earliest targeted hw */ +#define XCHAL_HW_MAX_VERSION_MAJOR 2600 /* major v of latest tgt hw */ +#define XCHAL_HW_MAX_VERSION_MINOR 3 /* minor v of latest tgt hw */ +#define XCHAL_HW_MAX_VERSION 260003 /* latest targeted hw */ + + +/*---------------------------------------------------------------------- + CACHE + ----------------------------------------------------------------------*/ + +#define XCHAL_ICACHE_LINESIZE 4 /* I-cache line size in bytes */ +#define XCHAL_DCACHE_LINESIZE 4 /* D-cache line size in bytes */ +#define XCHAL_ICACHE_LINEWIDTH 2 /* log2(I line size in bytes) */ +#define XCHAL_DCACHE_LINEWIDTH 2 /* log2(D line size in bytes) */ + +#define XCHAL_ICACHE_SIZE 0 /* I-cache size in bytes or 0 */ +#define XCHAL_DCACHE_SIZE 0 /* D-cache size in bytes or 0 */ + +#define XCHAL_DCACHE_IS_WRITEBACK 0 /* writeback feature */ +#define XCHAL_DCACHE_IS_COHERENT 0 /* MP coherence feature */ + +#define XCHAL_HAVE_PREFETCH 0 /* PREFCTL register */ +#define XCHAL_HAVE_PREFETCH_L1 0 /* prefetch to L1 dcache */ +#define XCHAL_PREFETCH_CASTOUT_LINES 0 /* dcache pref. castout bufsz */ +#define XCHAL_PREFETCH_ENTRIES 0 /* cache prefetch entries */ +#define XCHAL_PREFETCH_BLOCK_ENTRIES 0 /* prefetch block streams */ +#define XCHAL_HAVE_CACHE_BLOCKOPS 0 /* block prefetch for caches */ +#define XCHAL_HAVE_ICACHE_TEST 0 /* Icache test instructions */ +#define XCHAL_HAVE_DCACHE_TEST 0 /* Dcache test instructions */ +#define XCHAL_HAVE_ICACHE_DYN_WAYS 0 /* Icache dynamic way support */ +#define XCHAL_HAVE_DCACHE_DYN_WAYS 0 /* Dcache dynamic way support */ + + + + +/**************************************************************************** + Parameters Useful for PRIVILEGED (Supervisory or Non-Virtualized) Code + ****************************************************************************/ + + +#ifndef XTENSA_HAL_NON_PRIVILEGED_ONLY + +/*---------------------------------------------------------------------- + CACHE + ----------------------------------------------------------------------*/ + +#define XCHAL_HAVE_PIF 1 /* any outbound PIF present */ +#define XCHAL_HAVE_AXI 0 /* AXI bus */ + +#define XCHAL_HAVE_PIF_WR_RESP 0 /* pif write response */ +#define XCHAL_HAVE_PIF_REQ_ATTR 0 /* pif attribute */ + +/* If present, cache size in bytes == (ways * 2^(linewidth + setwidth)). */ + +/* Number of cache sets in log2(lines per way): */ +#define XCHAL_ICACHE_SETWIDTH 0 +#define XCHAL_DCACHE_SETWIDTH 0 + +/* Cache set associativity (number of ways): */ +#define XCHAL_ICACHE_WAYS 1 +#define XCHAL_DCACHE_WAYS 1 + +/* Cache features: */ +#define XCHAL_ICACHE_LINE_LOCKABLE 0 +#define XCHAL_DCACHE_LINE_LOCKABLE 0 +#define XCHAL_ICACHE_ECC_PARITY 0 +#define XCHAL_DCACHE_ECC_PARITY 0 + +/* Cache access size in bytes (affects operation of SICW instruction): */ +#define XCHAL_ICACHE_ACCESS_SIZE 1 +#define XCHAL_DCACHE_ACCESS_SIZE 1 + +#define XCHAL_DCACHE_BANKS 0 /* number of banks */ + +/* Number of encoded cache attr bits (see for decoded bits): */ +#define XCHAL_CA_BITS 4 + + +/*---------------------------------------------------------------------- + INTERNAL I/D RAM/ROMs and XLMI + ----------------------------------------------------------------------*/ + +#define XCHAL_NUM_INSTROM 1 /* number of core instr. ROMs */ +#define XCHAL_NUM_INSTRAM 2 /* number of core instr. RAMs */ +#define XCHAL_NUM_DATAROM 1 /* number of core data ROMs */ +#define XCHAL_NUM_DATARAM 2 /* number of core data RAMs */ +#define XCHAL_NUM_URAM 0 /* number of core unified RAMs*/ +#define XCHAL_NUM_XLMI 1 /* number of core XLMI ports */ + +/* Instruction ROM 0: */ +#define XCHAL_INSTROM0_VADDR 0x40800000 /* virtual address */ +#define XCHAL_INSTROM0_PADDR 0x40800000 /* physical address */ +#define XCHAL_INSTROM0_SIZE 4194304 /* size in bytes */ +#define XCHAL_INSTROM0_ECC_PARITY 0 /* ECC/parity type, 0=none */ + +/* Instruction RAM 0: */ +#define XCHAL_INSTRAM0_VADDR 0x40000000 /* virtual address */ +#define XCHAL_INSTRAM0_PADDR 0x40000000 /* physical address */ +#define XCHAL_INSTRAM0_SIZE 4194304 /* size in bytes */ +#define XCHAL_INSTRAM0_ECC_PARITY 0 /* ECC/parity type, 0=none */ + +/* Instruction RAM 1: */ +#define XCHAL_INSTRAM1_VADDR 0x40400000 /* virtual address */ +#define XCHAL_INSTRAM1_PADDR 0x40400000 /* physical address */ +#define XCHAL_INSTRAM1_SIZE 4194304 /* size in bytes */ +#define XCHAL_INSTRAM1_ECC_PARITY 0 /* ECC/parity type, 0=none */ + +/* Data ROM 0: */ +#define XCHAL_DATAROM0_VADDR 0x3F400000 /* virtual address */ +#define XCHAL_DATAROM0_PADDR 0x3F400000 /* physical address */ +#define XCHAL_DATAROM0_SIZE 4194304 /* size in bytes */ +#define XCHAL_DATAROM0_ECC_PARITY 0 /* ECC/parity type, 0=none */ +#define XCHAL_DATAROM0_BANKS 1 /* number of banks */ + +/* Data RAM 0: */ +#define XCHAL_DATARAM0_VADDR 0x3FF80000 /* virtual address */ +#define XCHAL_DATARAM0_PADDR 0x3FF80000 /* physical address */ +#define XCHAL_DATARAM0_SIZE 524288 /* size in bytes */ +#define XCHAL_DATARAM0_ECC_PARITY 0 /* ECC/parity type, 0=none */ +#define XCHAL_DATARAM0_BANKS 1 /* number of banks */ + +/* Data RAM 1: */ +#define XCHAL_DATARAM1_VADDR 0x3F800000 /* virtual address */ +#define XCHAL_DATARAM1_PADDR 0x3F800000 /* physical address */ +#define XCHAL_DATARAM1_SIZE 4194304 /* size in bytes */ +#define XCHAL_DATARAM1_ECC_PARITY 0 /* ECC/parity type, 0=none */ +#define XCHAL_DATARAM1_BANKS 1 /* number of banks */ + +/* XLMI Port 0: */ +#define XCHAL_XLMI0_VADDR 0x3FF00000 /* virtual address */ +#define XCHAL_XLMI0_PADDR 0x3FF00000 /* physical address */ +#define XCHAL_XLMI0_SIZE 524288 /* size in bytes */ +#define XCHAL_XLMI0_ECC_PARITY 0 /* ECC/parity type, 0=none */ + +#define XCHAL_HAVE_IMEM_LOADSTORE 1 /* can load/store to IROM/IRAM*/ + + +/*---------------------------------------------------------------------- + INTERRUPTS and TIMERS + ----------------------------------------------------------------------*/ + +#define XCHAL_HAVE_INTERRUPTS 1 /* interrupt option */ +#define XCHAL_HAVE_HIGHPRI_INTERRUPTS 1 /* med/high-pri. interrupts */ +#define XCHAL_HAVE_NMI 1 /* non-maskable interrupt */ +#define XCHAL_HAVE_CCOUNT 1 /* CCOUNT reg. (timer option) */ +#define XCHAL_NUM_TIMERS 3 /* number of CCOMPAREn regs */ +#define XCHAL_NUM_INTERRUPTS 32 /* number of interrupts */ +#define XCHAL_NUM_INTERRUPTS_LOG2 5 /* ceil(log2(NUM_INTERRUPTS)) */ +#define XCHAL_NUM_EXTINTERRUPTS 26 /* num of external interrupts */ +#define XCHAL_NUM_INTLEVELS 6 /* number of interrupt levels + (not including level zero) */ +#define XCHAL_EXCM_LEVEL 3 /* level masked by PS.EXCM */ + /* (always 1 in XEA1; levels 2 .. EXCM_LEVEL are "medium priority") */ + +/* Masks of interrupts at each interrupt level: */ +#define XCHAL_INTLEVEL1_MASK 0x000637FF +#define XCHAL_INTLEVEL2_MASK 0x00380000 +#define XCHAL_INTLEVEL3_MASK 0x28C08800 +#define XCHAL_INTLEVEL4_MASK 0x53000000 +#define XCHAL_INTLEVEL5_MASK 0x84010000 +#define XCHAL_INTLEVEL6_MASK 0x00000000 +#define XCHAL_INTLEVEL7_MASK 0x00004000 + +/* Masks of interrupts at each range 1..n of interrupt levels: */ +#define XCHAL_INTLEVEL1_ANDBELOW_MASK 0x000637FF +#define XCHAL_INTLEVEL2_ANDBELOW_MASK 0x003E37FF +#define XCHAL_INTLEVEL3_ANDBELOW_MASK 0x28FEBFFF +#define XCHAL_INTLEVEL4_ANDBELOW_MASK 0x7BFEBFFF +#define XCHAL_INTLEVEL5_ANDBELOW_MASK 0xFFFFBFFF +#define XCHAL_INTLEVEL6_ANDBELOW_MASK 0xFFFFBFFF +#define XCHAL_INTLEVEL7_ANDBELOW_MASK 0xFFFFFFFF + +/* Level of each interrupt: */ +#define XCHAL_INT0_LEVEL 1 +#define XCHAL_INT1_LEVEL 1 +#define XCHAL_INT2_LEVEL 1 +#define XCHAL_INT3_LEVEL 1 +#define XCHAL_INT4_LEVEL 1 +#define XCHAL_INT5_LEVEL 1 +#define XCHAL_INT6_LEVEL 1 +#define XCHAL_INT7_LEVEL 1 +#define XCHAL_INT8_LEVEL 1 +#define XCHAL_INT9_LEVEL 1 +#define XCHAL_INT10_LEVEL 1 +#define XCHAL_INT11_LEVEL 3 +#define XCHAL_INT12_LEVEL 1 +#define XCHAL_INT13_LEVEL 1 +#define XCHAL_INT14_LEVEL 7 +#define XCHAL_INT15_LEVEL 3 +#define XCHAL_INT16_LEVEL 5 +#define XCHAL_INT17_LEVEL 1 +#define XCHAL_INT18_LEVEL 1 +#define XCHAL_INT19_LEVEL 2 +#define XCHAL_INT20_LEVEL 2 +#define XCHAL_INT21_LEVEL 2 +#define XCHAL_INT22_LEVEL 3 +#define XCHAL_INT23_LEVEL 3 +#define XCHAL_INT24_LEVEL 4 +#define XCHAL_INT25_LEVEL 4 +#define XCHAL_INT26_LEVEL 5 +#define XCHAL_INT27_LEVEL 3 +#define XCHAL_INT28_LEVEL 4 +#define XCHAL_INT29_LEVEL 3 +#define XCHAL_INT30_LEVEL 4 +#define XCHAL_INT31_LEVEL 5 +#define XCHAL_DEBUGLEVEL 6 /* debug interrupt level */ +#define XCHAL_HAVE_DEBUG_EXTERN_INT 1 /* OCD external db interrupt */ +#define XCHAL_NMILEVEL 7 /* NMI "level" (for use with + EXCSAVE/EPS/EPC_n, RFI n) */ + +/* Type of each interrupt: */ +#define XCHAL_INT0_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT1_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT2_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT3_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT4_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT5_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT6_TYPE XTHAL_INTTYPE_TIMER +#define XCHAL_INT7_TYPE XTHAL_INTTYPE_SOFTWARE +#define XCHAL_INT8_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT9_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT10_TYPE XTHAL_INTTYPE_EXTERN_EDGE +#define XCHAL_INT11_TYPE XTHAL_INTTYPE_PROFILING +#define XCHAL_INT12_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT13_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT14_TYPE XTHAL_INTTYPE_NMI +#define XCHAL_INT15_TYPE XTHAL_INTTYPE_TIMER +#define XCHAL_INT16_TYPE XTHAL_INTTYPE_TIMER +#define XCHAL_INT17_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT18_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT19_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT20_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT21_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT22_TYPE XTHAL_INTTYPE_EXTERN_EDGE +#define XCHAL_INT23_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT24_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT25_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT26_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT27_TYPE XTHAL_INTTYPE_EXTERN_LEVEL +#define XCHAL_INT28_TYPE XTHAL_INTTYPE_EXTERN_EDGE +#define XCHAL_INT29_TYPE XTHAL_INTTYPE_SOFTWARE +#define XCHAL_INT30_TYPE XTHAL_INTTYPE_EXTERN_EDGE +#define XCHAL_INT31_TYPE XTHAL_INTTYPE_EXTERN_LEVEL + +/* Masks of interrupts for each type of interrupt: */ +#define XCHAL_INTTYPE_MASK_UNCONFIGURED 0x00000000 +#define XCHAL_INTTYPE_MASK_SOFTWARE 0x20000080 +#define XCHAL_INTTYPE_MASK_EXTERN_EDGE 0x50400400 +#define XCHAL_INTTYPE_MASK_EXTERN_LEVEL 0x8FBE333F +#define XCHAL_INTTYPE_MASK_TIMER 0x00018040 +#define XCHAL_INTTYPE_MASK_NMI 0x00004000 +#define XCHAL_INTTYPE_MASK_WRITE_ERROR 0x00000000 +#define XCHAL_INTTYPE_MASK_PROFILING 0x00000800 + +/* Interrupt numbers assigned to specific interrupt sources: */ +#define XCHAL_TIMER0_INTERRUPT 6 /* CCOMPARE0 */ +#define XCHAL_TIMER1_INTERRUPT 15 /* CCOMPARE1 */ +#define XCHAL_TIMER2_INTERRUPT 16 /* CCOMPARE2 */ +#define XCHAL_TIMER3_INTERRUPT XTHAL_TIMER_UNCONFIGURED +#define XCHAL_NMI_INTERRUPT 14 /* non-maskable interrupt */ +#define XCHAL_PROFILING_INTERRUPT 11 /* profiling interrupt */ + +/* Interrupt numbers for levels at which only one interrupt is configured: */ +#define XCHAL_INTLEVEL7_NUM 14 +/* (There are many interrupts each at level(s) 1, 2, 3, 4, 5.) */ + + +/* + * External interrupt mapping. + * These macros describe how Xtensa processor interrupt numbers + * (as numbered internally, eg. in INTERRUPT and INTENABLE registers) + * map to external BInterrupt pins, for those interrupts + * configured as external (level-triggered, edge-triggered, or NMI). + * See the Xtensa processor databook for more details. + */ + +/* Core interrupt numbers mapped to each EXTERNAL BInterrupt pin number: */ +#define XCHAL_EXTINT0_NUM 0 /* (intlevel 1) */ +#define XCHAL_EXTINT1_NUM 1 /* (intlevel 1) */ +#define XCHAL_EXTINT2_NUM 2 /* (intlevel 1) */ +#define XCHAL_EXTINT3_NUM 3 /* (intlevel 1) */ +#define XCHAL_EXTINT4_NUM 4 /* (intlevel 1) */ +#define XCHAL_EXTINT5_NUM 5 /* (intlevel 1) */ +#define XCHAL_EXTINT6_NUM 8 /* (intlevel 1) */ +#define XCHAL_EXTINT7_NUM 9 /* (intlevel 1) */ +#define XCHAL_EXTINT8_NUM 10 /* (intlevel 1) */ +#define XCHAL_EXTINT9_NUM 12 /* (intlevel 1) */ +#define XCHAL_EXTINT10_NUM 13 /* (intlevel 1) */ +#define XCHAL_EXTINT11_NUM 14 /* (intlevel 7) */ +#define XCHAL_EXTINT12_NUM 17 /* (intlevel 1) */ +#define XCHAL_EXTINT13_NUM 18 /* (intlevel 1) */ +#define XCHAL_EXTINT14_NUM 19 /* (intlevel 2) */ +#define XCHAL_EXTINT15_NUM 20 /* (intlevel 2) */ +#define XCHAL_EXTINT16_NUM 21 /* (intlevel 2) */ +#define XCHAL_EXTINT17_NUM 22 /* (intlevel 3) */ +#define XCHAL_EXTINT18_NUM 23 /* (intlevel 3) */ +#define XCHAL_EXTINT19_NUM 24 /* (intlevel 4) */ +#define XCHAL_EXTINT20_NUM 25 /* (intlevel 4) */ +#define XCHAL_EXTINT21_NUM 26 /* (intlevel 5) */ +#define XCHAL_EXTINT22_NUM 27 /* (intlevel 3) */ +#define XCHAL_EXTINT23_NUM 28 /* (intlevel 4) */ +#define XCHAL_EXTINT24_NUM 30 /* (intlevel 4) */ +#define XCHAL_EXTINT25_NUM 31 /* (intlevel 5) */ +/* EXTERNAL BInterrupt pin numbers mapped to each core interrupt number: */ +#define XCHAL_INT0_EXTNUM 0 /* (intlevel 1) */ +#define XCHAL_INT1_EXTNUM 1 /* (intlevel 1) */ +#define XCHAL_INT2_EXTNUM 2 /* (intlevel 1) */ +#define XCHAL_INT3_EXTNUM 3 /* (intlevel 1) */ +#define XCHAL_INT4_EXTNUM 4 /* (intlevel 1) */ +#define XCHAL_INT5_EXTNUM 5 /* (intlevel 1) */ +#define XCHAL_INT8_EXTNUM 6 /* (intlevel 1) */ +#define XCHAL_INT9_EXTNUM 7 /* (intlevel 1) */ +#define XCHAL_INT10_EXTNUM 8 /* (intlevel 1) */ +#define XCHAL_INT12_EXTNUM 9 /* (intlevel 1) */ +#define XCHAL_INT13_EXTNUM 10 /* (intlevel 1) */ +#define XCHAL_INT14_EXTNUM 11 /* (intlevel 7) */ +#define XCHAL_INT17_EXTNUM 12 /* (intlevel 1) */ +#define XCHAL_INT18_EXTNUM 13 /* (intlevel 1) */ +#define XCHAL_INT19_EXTNUM 14 /* (intlevel 2) */ +#define XCHAL_INT20_EXTNUM 15 /* (intlevel 2) */ +#define XCHAL_INT21_EXTNUM 16 /* (intlevel 2) */ +#define XCHAL_INT22_EXTNUM 17 /* (intlevel 3) */ +#define XCHAL_INT23_EXTNUM 18 /* (intlevel 3) */ +#define XCHAL_INT24_EXTNUM 19 /* (intlevel 4) */ +#define XCHAL_INT25_EXTNUM 20 /* (intlevel 4) */ +#define XCHAL_INT26_EXTNUM 21 /* (intlevel 5) */ +#define XCHAL_INT27_EXTNUM 22 /* (intlevel 3) */ +#define XCHAL_INT28_EXTNUM 23 /* (intlevel 4) */ +#define XCHAL_INT30_EXTNUM 24 /* (intlevel 4) */ +#define XCHAL_INT31_EXTNUM 25 /* (intlevel 5) */ + + +/*---------------------------------------------------------------------- + EXCEPTIONS and VECTORS + ----------------------------------------------------------------------*/ + +#define XCHAL_XEA_VERSION 2 /* Xtensa Exception Architecture + number: 1 == XEA1 (old) + 2 == XEA2 (new) + 0 == XEAX (extern) or TX */ +#define XCHAL_HAVE_XEA1 0 /* Exception Architecture 1 */ +#define XCHAL_HAVE_XEA2 1 /* Exception Architecture 2 */ +#define XCHAL_HAVE_XEAX 0 /* External Exception Arch. */ +#define XCHAL_HAVE_EXCEPTIONS 1 /* exception option */ +#define XCHAL_HAVE_HALT 0 /* halt architecture option */ +#define XCHAL_HAVE_BOOTLOADER 0 /* boot loader (for TX) */ +#define XCHAL_HAVE_MEM_ECC_PARITY 0 /* local memory ECC/parity */ +#define XCHAL_HAVE_VECTOR_SELECT 1 /* relocatable vectors */ +#define XCHAL_HAVE_VECBASE 1 /* relocatable vectors */ +#define XCHAL_VECBASE_RESET_VADDR 0x40000000 /* VECBASE reset value */ +#define XCHAL_VECBASE_RESET_PADDR 0x40000000 +#define XCHAL_RESET_VECBASE_OVERLAP 0 + +#define XCHAL_RESET_VECTOR0_VADDR 0x50000000 +#define XCHAL_RESET_VECTOR0_PADDR 0x50000000 +#define XCHAL_RESET_VECTOR1_VADDR 0x40000400 +#define XCHAL_RESET_VECTOR1_PADDR 0x40000400 +#define XCHAL_RESET_VECTOR_VADDR 0x40000400 +#define XCHAL_RESET_VECTOR_PADDR 0x40000400 +#define XCHAL_USER_VECOFS 0x00000340 +#define XCHAL_USER_VECTOR_VADDR 0x40000340 +#define XCHAL_USER_VECTOR_PADDR 0x40000340 +#define XCHAL_KERNEL_VECOFS 0x00000300 +#define XCHAL_KERNEL_VECTOR_VADDR 0x40000300 +#define XCHAL_KERNEL_VECTOR_PADDR 0x40000300 +#define XCHAL_DOUBLEEXC_VECOFS 0x000003C0 +#define XCHAL_DOUBLEEXC_VECTOR_VADDR 0x400003C0 +#define XCHAL_DOUBLEEXC_VECTOR_PADDR 0x400003C0 +#define XCHAL_WINDOW_OF4_VECOFS 0x00000000 +#define XCHAL_WINDOW_UF4_VECOFS 0x00000040 +#define XCHAL_WINDOW_OF8_VECOFS 0x00000080 +#define XCHAL_WINDOW_UF8_VECOFS 0x000000C0 +#define XCHAL_WINDOW_OF12_VECOFS 0x00000100 +#define XCHAL_WINDOW_UF12_VECOFS 0x00000140 +#define XCHAL_WINDOW_VECTORS_VADDR 0x40000000 +#define XCHAL_WINDOW_VECTORS_PADDR 0x40000000 +#define XCHAL_INTLEVEL2_VECOFS 0x00000180 +#define XCHAL_INTLEVEL2_VECTOR_VADDR 0x40000180 +#define XCHAL_INTLEVEL2_VECTOR_PADDR 0x40000180 +#define XCHAL_INTLEVEL3_VECOFS 0x000001C0 +#define XCHAL_INTLEVEL3_VECTOR_VADDR 0x400001C0 +#define XCHAL_INTLEVEL3_VECTOR_PADDR 0x400001C0 +#define XCHAL_INTLEVEL4_VECOFS 0x00000200 +#define XCHAL_INTLEVEL4_VECTOR_VADDR 0x40000200 +#define XCHAL_INTLEVEL4_VECTOR_PADDR 0x40000200 +#define XCHAL_INTLEVEL5_VECOFS 0x00000240 +#define XCHAL_INTLEVEL5_VECTOR_VADDR 0x40000240 +#define XCHAL_INTLEVEL5_VECTOR_PADDR 0x40000240 +#define XCHAL_INTLEVEL6_VECOFS 0x00000280 +#define XCHAL_INTLEVEL6_VECTOR_VADDR 0x40000280 +#define XCHAL_INTLEVEL6_VECTOR_PADDR 0x40000280 +#define XCHAL_DEBUG_VECOFS XCHAL_INTLEVEL6_VECOFS +#define XCHAL_DEBUG_VECTOR_VADDR XCHAL_INTLEVEL6_VECTOR_VADDR +#define XCHAL_DEBUG_VECTOR_PADDR XCHAL_INTLEVEL6_VECTOR_PADDR +#define XCHAL_NMI_VECOFS 0x000002C0 +#define XCHAL_NMI_VECTOR_VADDR 0x400002C0 +#define XCHAL_NMI_VECTOR_PADDR 0x400002C0 +#define XCHAL_INTLEVEL7_VECOFS XCHAL_NMI_VECOFS +#define XCHAL_INTLEVEL7_VECTOR_VADDR XCHAL_NMI_VECTOR_VADDR +#define XCHAL_INTLEVEL7_VECTOR_PADDR XCHAL_NMI_VECTOR_PADDR + + +/*---------------------------------------------------------------------- + DEBUG MODULE + ----------------------------------------------------------------------*/ + +/* Misc */ +#define XCHAL_HAVE_DEBUG_ERI 1 /* ERI to debug module */ +#define XCHAL_HAVE_DEBUG_APB 1 /* APB to debug module */ +#define XCHAL_HAVE_DEBUG_JTAG 1 /* JTAG to debug module */ + +/* On-Chip Debug (OCD) */ +#define XCHAL_HAVE_OCD 1 /* OnChipDebug option */ +#define XCHAL_NUM_IBREAK 2 /* number of IBREAKn regs */ +#define XCHAL_NUM_DBREAK 2 /* number of DBREAKn regs */ +#define XCHAL_HAVE_OCD_DIR_ARRAY 0 /* faster OCD option (to LX4) */ +#define XCHAL_HAVE_OCD_LS32DDR 1 /* L32DDR/S32DDR (faster OCD) */ + +/* TRAX (in core) */ +#define XCHAL_HAVE_TRAX 1 /* TRAX in debug module */ +#define XCHAL_TRAX_MEM_SIZE 16384 /* TRAX memory size in bytes */ +#define XCHAL_TRAX_MEM_SHAREABLE 1 /* start/end regs; ready sig. */ +#define XCHAL_TRAX_ATB_WIDTH 32 /* ATB width (bits), 0=no ATB */ +#define XCHAL_TRAX_TIME_WIDTH 0 /* timestamp bitwidth, 0=none */ + +/* Perf counters */ +#define XCHAL_NUM_PERF_COUNTERS 2 /* performance counters */ + + +/*---------------------------------------------------------------------- + MMU + ----------------------------------------------------------------------*/ + +/* See core-matmap.h header file for more details. */ + +#define XCHAL_HAVE_TLBS 1 /* inverse of HAVE_CACHEATTR */ +#define XCHAL_HAVE_SPANNING_WAY 1 /* one way maps I+D 4GB vaddr */ +#define XCHAL_SPANNING_WAY 0 /* TLB spanning way number */ +#define XCHAL_HAVE_IDENTITY_MAP 1 /* vaddr == paddr always */ +#define XCHAL_HAVE_CACHEATTR 0 /* CACHEATTR register present */ +#define XCHAL_HAVE_MIMIC_CACHEATTR 1 /* region protection */ +#define XCHAL_HAVE_XLT_CACHEATTR 0 /* region prot. w/translation */ +#define XCHAL_HAVE_PTP_MMU 0 /* full MMU (with page table + [autorefill] and protection) + usable for an MMU-based OS */ +/* If none of the above last 4 are set, it's a custom TLB configuration. */ + +#define XCHAL_MMU_ASID_BITS 0 /* number of bits in ASIDs */ +#define XCHAL_MMU_RINGS 1 /* number of rings (1..4) */ +#define XCHAL_MMU_RING_BITS 0 /* num of bits in RING field */ + +#endif /* !XTENSA_HAL_NON_PRIVILEGED_ONLY */ + + +#endif /* _XTENSA_CORE_CONFIGURATION_H */ + diff --git a/tools/sdk/include/nghttp/config.h b/tools/sdk/include/nghttp/config.h new file mode 100644 index 00000000..f193b0af --- /dev/null +++ b/tools/sdk/include/nghttp/config.h @@ -0,0 +1,36 @@ +#ifndef __HAVE_CONFIG_H_ +#define __HAVE_CONFIG_H_ + +#define _U_ + +#define SIZEOF_INT_P 2 + +//#define DEBUGBUILD +#include "stdio.h" +#include "stdlib.h" +#include "string.h" + +#if (!defined(nghttp_unlikely)) +#define nghttp_unlikely(Expression) !!(Expression) +#endif + +#define nghttp_ASSERT(Expression) do{if (!(Expression)) printf("%d\n", __LINE__);}while(0) + +#define CU_ASSERT(a) nghttp_ASSERT(a) +#define CU_ASSERT_FATAL(a) nghttp_ASSERT(a) + +#if 1 +#define NGHTTP2_DEBUG_INFO() printf("%s %d\n", __FILE__, __LINE__) +#else +#define NGHTTP2_DEBUG_INFO() +#endif + +#define NGHTTP_PLATFORM_HTONS(_n) ((uint16_t)((((_n) & 0xff) << 8) | (((_n) >> 8) & 0xff))) +#define NGHTTP_PLATFORM_HTONL(_n) ((uint32_t)( (((_n) & 0xff) << 24) | (((_n) & 0xff00) << 8) | (((_n) >> 8) & 0xff00) | (((_n) >> 24) & 0xff) )) + +#define htons(x) NGHTTP_PLATFORM_HTONS(x) +#define ntohs(x) NGHTTP_PLATFORM_HTONS(x) +#define htonl(x) NGHTTP_PLATFORM_HTONL(x) +#define ntohl(x) NGHTTP_PLATFORM_HTONL(x) + +#endif diff --git a/tools/sdk/include/nghttp/http_parser.h b/tools/sdk/include/nghttp/http_parser.h new file mode 100644 index 00000000..105ae510 --- /dev/null +++ b/tools/sdk/include/nghttp/http_parser.h @@ -0,0 +1,362 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +#ifndef http_parser_h +#define http_parser_h +#ifdef __cplusplus +extern "C" { +#endif + +/* Also update SONAME in the Makefile whenever you change these. */ +#define HTTP_PARSER_VERSION_MAJOR 2 +#define HTTP_PARSER_VERSION_MINOR 7 +#define HTTP_PARSER_VERSION_PATCH 0 + +#include +#if defined(_WIN32) && !defined(__MINGW32__) && \ + (!defined(_MSC_VER) || _MSC_VER<1600) && !defined(__WINE__) +#include +#include +typedef __int8 int8_t; +typedef unsigned __int8 uint8_t; +typedef __int16 int16_t; +typedef unsigned __int16 uint16_t; +typedef __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else +#include +#endif + +/* Compile with -DHTTP_PARSER_STRICT=0 to make less checks, but run + * faster + */ +#ifndef HTTP_PARSER_STRICT +# define HTTP_PARSER_STRICT 1 +#endif + +/* Maximium header size allowed. If the macro is not defined + * before including this header then the default is used. To + * change the maximum header size, define the macro in the build + * environment (e.g. -DHTTP_MAX_HEADER_SIZE=). To remove + * the effective limit on the size of the header, define the macro + * to a very large number (e.g. -DHTTP_MAX_HEADER_SIZE=0x7fffffff) + */ +#ifndef HTTP_MAX_HEADER_SIZE +# define HTTP_MAX_HEADER_SIZE (80*1024) +#endif + +typedef struct http_parser http_parser; +typedef struct http_parser_settings http_parser_settings; + + +/* Callbacks should return non-zero to indicate an error. The parser will + * then halt execution. + * + * The one exception is on_headers_complete. In a HTTP_RESPONSE parser + * returning '1' from on_headers_complete will tell the parser that it + * should not expect a body. This is used when receiving a response to a + * HEAD request which may contain 'Content-Length' or 'Transfer-Encoding: + * chunked' headers that indicate the presence of a body. + * + * Returning `2` from on_headers_complete will tell parser that it should not + * expect neither a body nor any futher responses on this connection. This is + * useful for handling responses to a CONNECT request which may not contain + * `Upgrade` or `Connection: upgrade` headers. + * + * http_data_cb does not return data chunks. It will be called arbitrarily + * many times for each string. E.G. you might get 10 callbacks for "on_url" + * each providing just a few characters more data. + */ +typedef int (*http_data_cb) (http_parser*, const char *at, size_t length); +typedef int (*http_cb) (http_parser*); + + +/* Request Methods */ +#define HTTP_METHOD_MAP(XX) \ + XX(0, DELETE, DELETE) \ + XX(1, GET, GET) \ + XX(2, HEAD, HEAD) \ + XX(3, POST, POST) \ + XX(4, PUT, PUT) \ + /* pathological */ \ + XX(5, CONNECT, CONNECT) \ + XX(6, OPTIONS, OPTIONS) \ + XX(7, TRACE, TRACE) \ + /* WebDAV */ \ + XX(8, COPY, COPY) \ + XX(9, LOCK, LOCK) \ + XX(10, MKCOL, MKCOL) \ + XX(11, MOVE, MOVE) \ + XX(12, PROPFIND, PROPFIND) \ + XX(13, PROPPATCH, PROPPATCH) \ + XX(14, SEARCH, SEARCH) \ + XX(15, UNLOCK, UNLOCK) \ + XX(16, BIND, BIND) \ + XX(17, REBIND, REBIND) \ + XX(18, UNBIND, UNBIND) \ + XX(19, ACL, ACL) \ + /* subversion */ \ + XX(20, REPORT, REPORT) \ + XX(21, MKACTIVITY, MKACTIVITY) \ + XX(22, CHECKOUT, CHECKOUT) \ + XX(23, MERGE, MERGE) \ + /* upnp */ \ + XX(24, MSEARCH, M-SEARCH) \ + XX(25, NOTIFY, NOTIFY) \ + XX(26, SUBSCRIBE, SUBSCRIBE) \ + XX(27, UNSUBSCRIBE, UNSUBSCRIBE) \ + /* RFC-5789 */ \ + XX(28, PATCH, PATCH) \ + XX(29, PURGE, PURGE) \ + /* CalDAV */ \ + XX(30, MKCALENDAR, MKCALENDAR) \ + /* RFC-2068, section 19.6.1.2 */ \ + XX(31, LINK, LINK) \ + XX(32, UNLINK, UNLINK) \ + +enum http_method + { +#define XX(num, name, string) HTTP_##name = num, + HTTP_METHOD_MAP(XX) +#undef XX + }; + + +enum http_parser_type { HTTP_REQUEST, HTTP_RESPONSE, HTTP_BOTH }; + + +/* Flag values for http_parser.flags field */ +enum flags + { F_CHUNKED = 1 << 0 + , F_CONNECTION_KEEP_ALIVE = 1 << 1 + , F_CONNECTION_CLOSE = 1 << 2 + , F_CONNECTION_UPGRADE = 1 << 3 + , F_TRAILING = 1 << 4 + , F_UPGRADE = 1 << 5 + , F_SKIPBODY = 1 << 6 + , F_CONTENTLENGTH = 1 << 7 + }; + + +/* Map for errno-related constants + * + * The provided argument should be a macro that takes 2 arguments. + */ +#define HTTP_ERRNO_MAP(XX) \ + /* No error */ \ + XX(OK, "success") \ + \ + /* Callback-related errors */ \ + XX(CB_message_begin, "the on_message_begin callback failed") \ + XX(CB_url, "the on_url callback failed") \ + XX(CB_header_field, "the on_header_field callback failed") \ + XX(CB_header_value, "the on_header_value callback failed") \ + XX(CB_headers_complete, "the on_headers_complete callback failed") \ + XX(CB_body, "the on_body callback failed") \ + XX(CB_message_complete, "the on_message_complete callback failed") \ + XX(CB_status, "the on_status callback failed") \ + XX(CB_chunk_header, "the on_chunk_header callback failed") \ + XX(CB_chunk_complete, "the on_chunk_complete callback failed") \ + \ + /* Parsing-related errors */ \ + XX(INVALID_EOF_STATE, "stream ended at an unexpected time") \ + XX(HEADER_OVERFLOW, \ + "too many header bytes seen; overflow detected") \ + XX(CLOSED_CONNECTION, \ + "data received after completed connection: close message") \ + XX(INVALID_VERSION, "invalid HTTP version") \ + XX(INVALID_STATUS, "invalid HTTP status code") \ + XX(INVALID_METHOD, "invalid HTTP method") \ + XX(INVALID_URL, "invalid URL") \ + XX(INVALID_HOST, "invalid host") \ + XX(INVALID_PORT, "invalid port") \ + XX(INVALID_PATH, "invalid path") \ + XX(INVALID_QUERY_STRING, "invalid query string") \ + XX(INVALID_FRAGMENT, "invalid fragment") \ + XX(LF_EXPECTED, "LF character expected") \ + XX(INVALID_HEADER_TOKEN, "invalid character in header") \ + XX(INVALID_CONTENT_LENGTH, \ + "invalid character in content-length header") \ + XX(UNEXPECTED_CONTENT_LENGTH, \ + "unexpected content-length header") \ + XX(INVALID_CHUNK_SIZE, \ + "invalid character in chunk size header") \ + XX(INVALID_CONSTANT, "invalid constant string") \ + XX(INVALID_INTERNAL_STATE, "encountered unexpected internal state")\ + XX(STRICT, "strict mode assertion failed") \ + XX(PAUSED, "parser is paused") \ + XX(UNKNOWN, "an unknown error occurred") + + +/* Define HPE_* values for each errno value above */ +#define HTTP_ERRNO_GEN(n, s) HPE_##n, +enum http_errno { + HTTP_ERRNO_MAP(HTTP_ERRNO_GEN) +}; +#undef HTTP_ERRNO_GEN + + +/* Get an http_errno value from an http_parser */ +#define HTTP_PARSER_ERRNO(p) ((enum http_errno) (p)->http_errno) + + +struct http_parser { + /** PRIVATE **/ + unsigned int type : 2; /* enum http_parser_type */ + unsigned int flags : 8; /* F_* values from 'flags' enum; semi-public */ + unsigned int state : 7; /* enum state from http_parser.c */ + unsigned int header_state : 7; /* enum header_state from http_parser.c */ + unsigned int index : 7; /* index into current matcher */ + unsigned int lenient_http_headers : 1; + + uint32_t nread; /* # bytes read in various scenarios */ + uint64_t content_length; /* # bytes in body (0 if no Content-Length header) */ + + /** READ-ONLY **/ + unsigned short http_major; + unsigned short http_minor; + unsigned int status_code : 16; /* responses only */ + unsigned int method : 8; /* requests only */ + unsigned int http_errno : 7; + + /* 1 = Upgrade header was present and the parser has exited because of that. + * 0 = No upgrade header present. + * Should be checked when http_parser_execute() returns in addition to + * error checking. + */ + unsigned int upgrade : 1; + + /** PUBLIC **/ + void *data; /* A pointer to get hook to the "connection" or "socket" object */ +}; + + +struct http_parser_settings { + http_cb on_message_begin; + http_data_cb on_url; + http_data_cb on_status; + http_data_cb on_header_field; + http_data_cb on_header_value; + http_cb on_headers_complete; + http_data_cb on_body; + http_cb on_message_complete; + /* When on_chunk_header is called, the current chunk length is stored + * in parser->content_length. + */ + http_cb on_chunk_header; + http_cb on_chunk_complete; +}; + + +enum http_parser_url_fields + { UF_SCHEMA = 0 + , UF_HOST = 1 + , UF_PORT = 2 + , UF_PATH = 3 + , UF_QUERY = 4 + , UF_FRAGMENT = 5 + , UF_USERINFO = 6 + , UF_MAX = 7 + }; + + +/* Result structure for http_parser_parse_url(). + * + * Callers should index into field_data[] with UF_* values iff field_set + * has the relevant (1 << UF_*) bit set. As a courtesy to clients (and + * because we probably have padding left over), we convert any port to + * a uint16_t. + */ +struct http_parser_url { + uint16_t field_set; /* Bitmask of (1 << UF_*) values */ + uint16_t port; /* Converted UF_PORT string */ + + struct { + uint16_t off; /* Offset into buffer in which field starts */ + uint16_t len; /* Length of run in buffer */ + } field_data[UF_MAX]; +}; + + +/* Returns the library version. Bits 16-23 contain the major version number, + * bits 8-15 the minor version number and bits 0-7 the patch level. + * Usage example: + * + * unsigned long version = http_parser_version(); + * unsigned major = (version >> 16) & 255; + * unsigned minor = (version >> 8) & 255; + * unsigned patch = version & 255; + * printf("http_parser v%u.%u.%u\n", major, minor, patch); + */ +unsigned long http_parser_version(void); + +void http_parser_init(http_parser *parser, enum http_parser_type type); + + +/* Initialize http_parser_settings members to 0 + */ +void http_parser_settings_init(http_parser_settings *settings); + + +/* Executes the parser. Returns number of parsed bytes. Sets + * `parser->http_errno` on error. */ +size_t http_parser_execute(http_parser *parser, + const http_parser_settings *settings, + const char *data, + size_t len); + + +/* If http_should_keep_alive() in the on_headers_complete or + * on_message_complete callback returns 0, then this should be + * the last message on the connection. + * If you are the server, respond with the "Connection: close" header. + * If you are the client, close the connection. + */ +int http_should_keep_alive(const http_parser *parser); + +/* Returns a string version of the HTTP method. */ +const char *http_method_str(enum http_method m); + +/* Return a string name of the given error */ +const char *http_errno_name(enum http_errno err); + +/* Return a string description of the given error */ +const char *http_errno_description(enum http_errno err); + +/* Initialize all http_parser_url members to 0 */ +void http_parser_url_init(struct http_parser_url *u); + +/* Parse a URL; return nonzero on failure */ +int http_parser_parse_url(const char *buf, size_t buflen, + int is_connect, + struct http_parser_url *u); + +/* Pause or un-pause the parser; a nonzero value pauses */ +void http_parser_pause(http_parser *parser, int paused); + +/* Checks if this is the final chunk of the body. */ +int http_body_is_final(const http_parser *parser); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/tools/sdk/include/nghttp/nghttp2/nghttp2.h b/tools/sdk/include/nghttp/nghttp2/nghttp2.h new file mode 100644 index 00000000..0ed36051 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2/nghttp2.h @@ -0,0 +1,5030 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2013, 2014 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_H +#define NGHTTP2_H + +/* Define WIN32 when build target is Win32 API (borrowed from + libcurl) */ +#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) +#define WIN32 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#if defined(_MSC_VER) && (_MSC_VER < 1800) +/* MSVC < 2013 does not have inttypes.h because it is not C99 + compliant. See compiler macros and version number in + https://sourceforge.net/p/predef/wiki/Compilers/ */ +#include +#else /* !defined(_MSC_VER) || (_MSC_VER >= 1800) */ +#include +#endif /* !defined(_MSC_VER) || (_MSC_VER >= 1800) */ +#include + +#include + +#ifdef NGHTTP2_STATICLIB +#define NGHTTP2_EXTERN +#elif defined(WIN32) +#ifdef BUILDING_NGHTTP2 +#define NGHTTP2_EXTERN __declspec(dllexport) +#else /* !BUILDING_NGHTTP2 */ +#define NGHTTP2_EXTERN __declspec(dllimport) +#endif /* !BUILDING_NGHTTP2 */ +#else /* !defined(WIN32) */ +#ifdef BUILDING_NGHTTP2 +#define NGHTTP2_EXTERN __attribute__((visibility("default"))) +#else /* !BUILDING_NGHTTP2 */ +#define NGHTTP2_EXTERN +#endif /* !BUILDING_NGHTTP2 */ +#endif /* !defined(WIN32) */ + +/** + * @macro + * + * The protocol version identification string of this library + * supports. This identifier is used if HTTP/2 is used over TLS. + */ +#define NGHTTP2_PROTO_VERSION_ID "h2" +/** + * @macro + * + * The length of :macro:`NGHTTP2_PROTO_VERSION_ID`. + */ +#define NGHTTP2_PROTO_VERSION_ID_LEN 2 + +/** + * @macro + * + * The serialized form of ALPN protocol identifier this library + * supports. Notice that first byte is the length of following + * protocol identifier. This is the same wire format of `TLS ALPN + * extension `_. This is useful + * to process incoming ALPN tokens in wire format. + */ +#define NGHTTP2_PROTO_ALPN "\x2h2" + +/** + * @macro + * + * The length of :macro:`NGHTTP2_PROTO_ALPN`. + */ +#define NGHTTP2_PROTO_ALPN_LEN (sizeof(NGHTTP2_PROTO_ALPN) - 1) + +/** + * @macro + * + * The protocol version identification string of this library + * supports. This identifier is used if HTTP/2 is used over cleartext + * TCP. + */ +#define NGHTTP2_CLEARTEXT_PROTO_VERSION_ID "h2c" + +/** + * @macro + * + * The length of :macro:`NGHTTP2_CLEARTEXT_PROTO_VERSION_ID`. + */ +#define NGHTTP2_CLEARTEXT_PROTO_VERSION_ID_LEN 3 + +struct nghttp2_session; +/** + * @struct + * + * The primary structure to hold the resources needed for a HTTP/2 + * session. The details of this structure are intentionally hidden + * from the public API. + */ +typedef struct nghttp2_session nghttp2_session; + +/** + * @macro + * + * The age of :type:`nghttp2_info` + */ +#define NGHTTP2_VERSION_AGE 1 + +/** + * @struct + * + * This struct is what `nghttp2_version()` returns. It holds + * information about the particular nghttp2 version. + */ +typedef struct { + /** + * Age of this struct. This instance of nghttp2 sets it to + * :macro:`NGHTTP2_VERSION_AGE` but a future version may bump it and + * add more struct fields at the bottom + */ + int age; + /** + * the :macro:`NGHTTP2_VERSION_NUM` number (since age ==1) + */ + int version_num; + /** + * points to the :macro:`NGHTTP2_VERSION` string (since age ==1) + */ + const char *version_str; + /** + * points to the :macro:`NGHTTP2_PROTO_VERSION_ID` string this + * instance implements (since age ==1) + */ + const char *proto_str; + /* -------- the above fields all exist when age == 1 */ +} nghttp2_info; + +/** + * @macro + * + * The default weight of stream dependency. + */ +#define NGHTTP2_DEFAULT_WEIGHT 16 + +/** + * @macro + * + * The maximum weight of stream dependency. + */ +#define NGHTTP2_MAX_WEIGHT 256 + +/** + * @macro + * + * The minimum weight of stream dependency. + */ +#define NGHTTP2_MIN_WEIGHT 1 + +/** + * @macro + * + * The maximum window size + */ +#define NGHTTP2_MAX_WINDOW_SIZE ((int32_t)((1U << 31) - 1)) + +/** + * @macro + * + * The initial window size for stream level flow control. + */ +#define NGHTTP2_INITIAL_WINDOW_SIZE ((1 << 16) - 1) +/** + * @macro + * + * The initial window size for connection level flow control. + */ +#define NGHTTP2_INITIAL_CONNECTION_WINDOW_SIZE ((1 << 16) - 1) + +/** + * @macro + * + * The default header table size. + */ +#define NGHTTP2_DEFAULT_HEADER_TABLE_SIZE (1 << 12) + +/** + * @macro + * + * The client magic string, which is the first 24 bytes byte string of + * client connection preface. + */ +#define NGHTTP2_CLIENT_MAGIC "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" + +/** + * @macro + * + * The length of :macro:`NGHTTP2_CLIENT_MAGIC`. + */ +#define NGHTTP2_CLIENT_MAGIC_LEN 24 + +/** + * @enum + * + * Error codes used in this library. The code range is [-999, -500], + * inclusive. The following values are defined: + */ +typedef enum { + /** + * Invalid argument passed. + */ + NGHTTP2_ERR_INVALID_ARGUMENT = -501, + /** + * Out of buffer space. + */ + NGHTTP2_ERR_BUFFER_ERROR = -502, + /** + * The specified protocol version is not supported. + */ + NGHTTP2_ERR_UNSUPPORTED_VERSION = -503, + /** + * Used as a return value from :type:`nghttp2_send_callback`, + * :type:`nghttp2_recv_callback` and + * :type:`nghttp2_send_data_callback` to indicate that the operation + * would block. + */ + NGHTTP2_ERR_WOULDBLOCK = -504, + /** + * General protocol error + */ + NGHTTP2_ERR_PROTO = -505, + /** + * The frame is invalid. + */ + NGHTTP2_ERR_INVALID_FRAME = -506, + /** + * The peer performed a shutdown on the connection. + */ + NGHTTP2_ERR_EOF = -507, + /** + * Used as a return value from + * :func:`nghttp2_data_source_read_callback` to indicate that data + * transfer is postponed. See + * :func:`nghttp2_data_source_read_callback` for details. + */ + NGHTTP2_ERR_DEFERRED = -508, + /** + * Stream ID has reached the maximum value. Therefore no stream ID + * is available. + */ + NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE = -509, + /** + * The stream is already closed; or the stream ID is invalid. + */ + NGHTTP2_ERR_STREAM_CLOSED = -510, + /** + * RST_STREAM has been added to the outbound queue. The stream is + * in closing state. + */ + NGHTTP2_ERR_STREAM_CLOSING = -511, + /** + * The transmission is not allowed for this stream (e.g., a frame + * with END_STREAM flag set has already sent). + */ + NGHTTP2_ERR_STREAM_SHUT_WR = -512, + /** + * The stream ID is invalid. + */ + NGHTTP2_ERR_INVALID_STREAM_ID = -513, + /** + * The state of the stream is not valid (e.g., DATA cannot be sent + * to the stream if response HEADERS has not been sent). + */ + NGHTTP2_ERR_INVALID_STREAM_STATE = -514, + /** + * Another DATA frame has already been deferred. + */ + NGHTTP2_ERR_DEFERRED_DATA_EXIST = -515, + /** + * Starting new stream is not allowed (e.g., GOAWAY has been sent + * and/or received). + */ + NGHTTP2_ERR_START_STREAM_NOT_ALLOWED = -516, + /** + * GOAWAY has already been sent. + */ + NGHTTP2_ERR_GOAWAY_ALREADY_SENT = -517, + /** + * The received frame contains the invalid header block (e.g., There + * are duplicate header names; or the header names are not encoded + * in US-ASCII character set and not lower cased; or the header name + * is zero-length string; or the header value contains multiple + * in-sequence NUL bytes). + */ + NGHTTP2_ERR_INVALID_HEADER_BLOCK = -518, + /** + * Indicates that the context is not suitable to perform the + * requested operation. + */ + NGHTTP2_ERR_INVALID_STATE = -519, + /** + * The user callback function failed due to the temporal error. + */ + NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE = -521, + /** + * The length of the frame is invalid, either too large or too small. + */ + NGHTTP2_ERR_FRAME_SIZE_ERROR = -522, + /** + * Header block inflate/deflate error. + */ + NGHTTP2_ERR_HEADER_COMP = -523, + /** + * Flow control error + */ + NGHTTP2_ERR_FLOW_CONTROL = -524, + /** + * Insufficient buffer size given to function. + */ + NGHTTP2_ERR_INSUFF_BUFSIZE = -525, + /** + * Callback was paused by the application + */ + NGHTTP2_ERR_PAUSE = -526, + /** + * There are too many in-flight SETTING frame and no more + * transmission of SETTINGS is allowed. + */ + NGHTTP2_ERR_TOO_MANY_INFLIGHT_SETTINGS = -527, + /** + * The server push is disabled. + */ + NGHTTP2_ERR_PUSH_DISABLED = -528, + /** + * DATA or HEADERS frame for a given stream has been already + * submitted and has not been fully processed yet. Application + * should wait for the transmission of the previously submitted + * frame before submitting another. + */ + NGHTTP2_ERR_DATA_EXIST = -529, + /** + * The current session is closing due to a connection error or + * `nghttp2_session_terminate_session()` is called. + */ + NGHTTP2_ERR_SESSION_CLOSING = -530, + /** + * Invalid HTTP header field was received and stream is going to be + * closed. + */ + NGHTTP2_ERR_HTTP_HEADER = -531, + /** + * Violation in HTTP messaging rule. + */ + NGHTTP2_ERR_HTTP_MESSAGING = -532, + /** + * Stream was refused. + */ + NGHTTP2_ERR_REFUSED_STREAM = -533, + /** + * Unexpected internal error, but recovered. + */ + NGHTTP2_ERR_INTERNAL = -534, + /** + * Indicates that a processing was canceled. + */ + NGHTTP2_ERR_CANCEL = -535, + /** + * The errors < :enum:`NGHTTP2_ERR_FATAL` mean that the library is + * under unexpected condition and processing was terminated (e.g., + * out of memory). If application receives this error code, it must + * stop using that :type:`nghttp2_session` object and only allowed + * operation for that object is deallocate it using + * `nghttp2_session_del()`. + */ + NGHTTP2_ERR_FATAL = -900, + /** + * Out of memory. This is a fatal error. + */ + NGHTTP2_ERR_NOMEM = -901, + /** + * The user callback function failed. This is a fatal error. + */ + NGHTTP2_ERR_CALLBACK_FAILURE = -902, + /** + * Invalid client magic (see :macro:`NGHTTP2_CLIENT_MAGIC`) was + * received and further processing is not possible. + */ + NGHTTP2_ERR_BAD_CLIENT_MAGIC = -903, + /** + * Possible flooding by peer was detected in this HTTP/2 session. + * Flooding is measured by how many PING and SETTINGS frames with + * ACK flag set are queued for transmission. These frames are + * response for the peer initiated frames, and peer can cause memory + * exhaustion on server side to send these frames forever and does + * not read network. + */ + NGHTTP2_ERR_FLOODED = -904 +} nghttp2_error; + +/** + * @struct + * + * The object representing single contiguous buffer. + */ +typedef struct { + /** + * The pointer to the buffer. + */ + uint8_t *base; + /** + * The length of the buffer. + */ + size_t len; +} nghttp2_vec; + +struct nghttp2_rcbuf; + +/** + * @struct + * + * The object representing reference counted buffer. The details of + * this structure are intentionally hidden from the public API. + */ +typedef struct nghttp2_rcbuf nghttp2_rcbuf; + +/** + * @function + * + * Increments the reference count of |rcbuf| by 1. + */ +NGHTTP2_EXTERN void nghttp2_rcbuf_incref(nghttp2_rcbuf *rcbuf); + +/** + * @function + * + * Decrements the reference count of |rcbuf| by 1. If the reference + * count becomes zero, the object pointed by |rcbuf| will be freed. + * In this case, application must not use |rcbuf| again. + */ +NGHTTP2_EXTERN void nghttp2_rcbuf_decref(nghttp2_rcbuf *rcbuf); + +/** + * @function + * + * Returns the underlying buffer managed by |rcbuf|. + */ +NGHTTP2_EXTERN nghttp2_vec nghttp2_rcbuf_get_buf(nghttp2_rcbuf *rcbuf); + +/** + * @enum + * + * The flags for header field name/value pair. + */ +typedef enum { + /** + * No flag set. + */ + NGHTTP2_NV_FLAG_NONE = 0, + /** + * Indicates that this name/value pair must not be indexed ("Literal + * Header Field never Indexed" representation must be used in HPACK + * encoding). Other implementation calls this bit as "sensitive". + */ + NGHTTP2_NV_FLAG_NO_INDEX = 0x01, + /** + * This flag is set solely by application. If this flag is set, the + * library does not make a copy of header field name. This could + * improve performance. + */ + NGHTTP2_NV_FLAG_NO_COPY_NAME = 0x02, + /** + * This flag is set solely by application. If this flag is set, the + * library does not make a copy of header field value. This could + * improve performance. + */ + NGHTTP2_NV_FLAG_NO_COPY_VALUE = 0x04 +} nghttp2_nv_flag; + +/** + * @struct + * + * The name/value pair, which mainly used to represent header fields. + */ +typedef struct { + /** + * The |name| byte string. If this struct is presented from library + * (e.g., :type:`nghttp2_on_frame_recv_callback`), |name| is + * guaranteed to be NULL-terminated. For some callbacks + * (:type:`nghttp2_before_frame_send_callback`, + * :type:`nghttp2_on_frame_send_callback`, and + * :type:`nghttp2_on_frame_not_send_callback`), it may not be + * NULL-terminated if header field is passed from application with + * the flag :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME`). When application + * is constructing this struct, |name| is not required to be + * NULL-terminated. + */ + uint8_t *name; + /** + * The |value| byte string. If this struct is presented from + * library (e.g., :type:`nghttp2_on_frame_recv_callback`), |value| + * is guaranteed to be NULL-terminated. For some callbacks + * (:type:`nghttp2_before_frame_send_callback`, + * :type:`nghttp2_on_frame_send_callback`, and + * :type:`nghttp2_on_frame_not_send_callback`), it may not be + * NULL-terminated if header field is passed from application with + * the flag :enum:`NGHTTP2_NV_FLAG_NO_COPY_VALUE`). When + * application is constructing this struct, |value| is not required + * to be NULL-terminated. + */ + uint8_t *value; + /** + * The length of the |name|, excluding terminating NULL. + */ + size_t namelen; + /** + * The length of the |value|, excluding terminating NULL. + */ + size_t valuelen; + /** + * Bitwise OR of one or more of :type:`nghttp2_nv_flag`. + */ + uint8_t flags; +} nghttp2_nv; + +/** + * @enum + * + * The frame types in HTTP/2 specification. + */ +typedef enum { + /** + * The DATA frame. + */ + NGHTTP2_DATA = 0, + /** + * The HEADERS frame. + */ + NGHTTP2_HEADERS = 0x01, + /** + * The PRIORITY frame. + */ + NGHTTP2_PRIORITY = 0x02, + /** + * The RST_STREAM frame. + */ + NGHTTP2_RST_STREAM = 0x03, + /** + * The SETTINGS frame. + */ + NGHTTP2_SETTINGS = 0x04, + /** + * The PUSH_PROMISE frame. + */ + NGHTTP2_PUSH_PROMISE = 0x05, + /** + * The PING frame. + */ + NGHTTP2_PING = 0x06, + /** + * The GOAWAY frame. + */ + NGHTTP2_GOAWAY = 0x07, + /** + * The WINDOW_UPDATE frame. + */ + NGHTTP2_WINDOW_UPDATE = 0x08, + /** + * The CONTINUATION frame. This frame type won't be passed to any + * callbacks because the library processes this frame type and its + * preceding HEADERS/PUSH_PROMISE as a single frame. + */ + NGHTTP2_CONTINUATION = 0x09, + /** + * The ALTSVC frame, which is defined in `RFC 7383 + * `_. + */ + NGHTTP2_ALTSVC = 0x0a +} nghttp2_frame_type; + +/** + * @enum + * + * The flags for HTTP/2 frames. This enum defines all flags for all + * frames. + */ +typedef enum { + /** + * No flag set. + */ + NGHTTP2_FLAG_NONE = 0, + /** + * The END_STREAM flag. + */ + NGHTTP2_FLAG_END_STREAM = 0x01, + /** + * The END_HEADERS flag. + */ + NGHTTP2_FLAG_END_HEADERS = 0x04, + /** + * The ACK flag. + */ + NGHTTP2_FLAG_ACK = 0x01, + /** + * The PADDED flag. + */ + NGHTTP2_FLAG_PADDED = 0x08, + /** + * The PRIORITY flag. + */ + NGHTTP2_FLAG_PRIORITY = 0x20 +} nghttp2_flag; + +/** + * @enum + * The SETTINGS ID. + */ +typedef enum { + /** + * SETTINGS_HEADER_TABLE_SIZE + */ + NGHTTP2_SETTINGS_HEADER_TABLE_SIZE = 0x01, + /** + * SETTINGS_ENABLE_PUSH + */ + NGHTTP2_SETTINGS_ENABLE_PUSH = 0x02, + /** + * SETTINGS_MAX_CONCURRENT_STREAMS + */ + NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS = 0x03, + /** + * SETTINGS_INITIAL_WINDOW_SIZE + */ + NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE = 0x04, + /** + * SETTINGS_MAX_FRAME_SIZE + */ + NGHTTP2_SETTINGS_MAX_FRAME_SIZE = 0x05, + /** + * SETTINGS_MAX_HEADER_LIST_SIZE + */ + NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE = 0x06 +} nghttp2_settings_id; +/* Note: If we add SETTINGS, update the capacity of + NGHTTP2_INBOUND_NUM_IV as well */ + +/** + * @macro + * + * .. warning:: + * + * Deprecated. The initial max concurrent streams is 0xffffffffu. + * + * Default maximum number of incoming concurrent streams. Use + * `nghttp2_submit_settings()` with + * :enum:`NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS` to change the + * maximum number of incoming concurrent streams. + * + * .. note:: + * + * The maximum number of outgoing concurrent streams is 100 by + * default. + */ +#define NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS ((1U << 31) - 1) + +/** + * @enum + * The status codes for the RST_STREAM and GOAWAY frames. + */ +typedef enum { + /** + * No errors. + */ + NGHTTP2_NO_ERROR = 0x00, + /** + * PROTOCOL_ERROR + */ + NGHTTP2_PROTOCOL_ERROR = 0x01, + /** + * INTERNAL_ERROR + */ + NGHTTP2_INTERNAL_ERROR = 0x02, + /** + * FLOW_CONTROL_ERROR + */ + NGHTTP2_FLOW_CONTROL_ERROR = 0x03, + /** + * SETTINGS_TIMEOUT + */ + NGHTTP2_SETTINGS_TIMEOUT = 0x04, + /** + * STREAM_CLOSED + */ + NGHTTP2_STREAM_CLOSED = 0x05, + /** + * FRAME_SIZE_ERROR + */ + NGHTTP2_FRAME_SIZE_ERROR = 0x06, + /** + * REFUSED_STREAM + */ + NGHTTP2_REFUSED_STREAM = 0x07, + /** + * CANCEL + */ + NGHTTP2_CANCEL = 0x08, + /** + * COMPRESSION_ERROR + */ + NGHTTP2_COMPRESSION_ERROR = 0x09, + /** + * CONNECT_ERROR + */ + NGHTTP2_CONNECT_ERROR = 0x0a, + /** + * ENHANCE_YOUR_CALM + */ + NGHTTP2_ENHANCE_YOUR_CALM = 0x0b, + /** + * INADEQUATE_SECURITY + */ + NGHTTP2_INADEQUATE_SECURITY = 0x0c, + /** + * HTTP_1_1_REQUIRED + */ + NGHTTP2_HTTP_1_1_REQUIRED = 0x0d +} nghttp2_error_code; + +/** + * @struct + * The frame header. + */ +typedef struct { + /** + * The length field of this frame, excluding frame header. + */ + size_t length; + /** + * The stream identifier (aka, stream ID) + */ + int32_t stream_id; + /** + * The type of this frame. See `nghttp2_frame_type`. + */ + uint8_t type; + /** + * The flags. + */ + uint8_t flags; + /** + * Reserved bit in frame header. Currently, this is always set to 0 + * and application should not expect something useful in here. + */ + uint8_t reserved; +} nghttp2_frame_hd; + +/** + * @union + * + * This union represents the some kind of data source passed to + * :type:`nghttp2_data_source_read_callback`. + */ +typedef union { + /** + * The integer field, suitable for a file descriptor. + */ + int fd; + /** + * The pointer to an arbitrary object. + */ + void *ptr; +} nghttp2_data_source; + +/** + * @enum + * + * The flags used to set in |data_flags| output parameter in + * :type:`nghttp2_data_source_read_callback`. + */ +typedef enum { + /** + * No flag set. + */ + NGHTTP2_DATA_FLAG_NONE = 0, + /** + * Indicates EOF was sensed. + */ + NGHTTP2_DATA_FLAG_EOF = 0x01, + /** + * Indicates that END_STREAM flag must not be set even if + * NGHTTP2_DATA_FLAG_EOF is set. Usually this flag is used to send + * trailer fields with `nghttp2_submit_request()` or + * `nghttp2_submit_response()`. + */ + NGHTTP2_DATA_FLAG_NO_END_STREAM = 0x02, + /** + * Indicates that application will send complete DATA frame in + * :type:`nghttp2_send_data_callback`. + */ + NGHTTP2_DATA_FLAG_NO_COPY = 0x04 +} nghttp2_data_flag; + +/** + * @functypedef + * + * Callback function invoked when the library wants to read data from + * the |source|. The read data is sent in the stream |stream_id|. + * The implementation of this function must read at most |length| + * bytes of data from |source| (or possibly other places) and store + * them in |buf| and return number of data stored in |buf|. If EOF is + * reached, set :enum:`NGHTTP2_DATA_FLAG_EOF` flag in |*data_flags|. + * + * Sometime it is desirable to avoid copying data into |buf| and let + * application to send data directly. To achieve this, set + * :enum:`NGHTTP2_DATA_FLAG_NO_COPY` to |*data_flags| (and possibly + * other flags, just like when we do copy), and return the number of + * bytes to send without copying data into |buf|. The library, seeing + * :enum:`NGHTTP2_DATA_FLAG_NO_COPY`, will invoke + * :type:`nghttp2_send_data_callback`. The application must send + * complete DATA frame in that callback. + * + * If this callback is set by `nghttp2_submit_request()`, + * `nghttp2_submit_response()` or `nghttp2_submit_headers()` and + * `nghttp2_submit_data()` with flag parameter + * :enum:`NGHTTP2_FLAG_END_STREAM` set, and + * :enum:`NGHTTP2_DATA_FLAG_EOF` flag is set to |*data_flags|, DATA + * frame will have END_STREAM flag set. Usually, this is expected + * behaviour and all are fine. One exception is send trailer fields. + * You cannot send trailer fields after sending frame with END_STREAM + * set. To avoid this problem, one can set + * :enum:`NGHTTP2_DATA_FLAG_NO_END_STREAM` along with + * :enum:`NGHTTP2_DATA_FLAG_EOF` to signal the library not to set + * END_STREAM in DATA frame. Then application can use + * `nghttp2_submit_trailer()` to send trailer fields. + * `nghttp2_submit_trailer()` can be called inside this callback. + * + * If the application wants to postpone DATA frames (e.g., + * asynchronous I/O, or reading data blocks for long time), it is + * achieved by returning :enum:`NGHTTP2_ERR_DEFERRED` without reading + * any data in this invocation. The library removes DATA frame from + * the outgoing queue temporarily. To move back deferred DATA frame + * to outgoing queue, call `nghttp2_session_resume_data()`. In case + * of error, there are 2 choices. Returning + * :enum:`NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will close the stream + * by issuing RST_STREAM with :enum:`NGHTTP2_INTERNAL_ERROR`. If a + * different error code is desirable, use + * `nghttp2_submit_rst_stream()` with a desired error code and then + * return :enum:`NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`. Returning + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` will signal the entire session + * failure. + */ +typedef ssize_t (*nghttp2_data_source_read_callback)( + nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t length, + uint32_t *data_flags, nghttp2_data_source *source, void *user_data); + +/** + * @struct + * + * This struct represents the data source and the way to read a chunk + * of data from it. + */ +typedef struct { + /** + * The data source. + */ + nghttp2_data_source source; + /** + * The callback function to read a chunk of data from the |source|. + */ + nghttp2_data_source_read_callback read_callback; +} nghttp2_data_provider; + +/** + * @struct + * + * The DATA frame. The received data is delivered via + * :type:`nghttp2_on_data_chunk_recv_callback`. + */ +typedef struct { + nghttp2_frame_hd hd; + /** + * The length of the padding in this frame. This includes PAD_HIGH + * and PAD_LOW. + */ + size_t padlen; +} nghttp2_data; + +/** + * @enum + * + * The category of HEADERS, which indicates the role of the frame. In + * HTTP/2 spec, request, response, push response and other arbitrary + * headers (e.g., trailer fields) are all called just HEADERS. To + * give the application the role of incoming HEADERS frame, we define + * several categories. + */ +typedef enum { + /** + * The HEADERS frame is opening new stream, which is analogous to + * SYN_STREAM in SPDY. + */ + NGHTTP2_HCAT_REQUEST = 0, + /** + * The HEADERS frame is the first response headers, which is + * analogous to SYN_REPLY in SPDY. + */ + NGHTTP2_HCAT_RESPONSE = 1, + /** + * The HEADERS frame is the first headers sent against reserved + * stream. + */ + NGHTTP2_HCAT_PUSH_RESPONSE = 2, + /** + * The HEADERS frame which does not apply for the above categories, + * which is analogous to HEADERS in SPDY. If non-final response + * (e.g., status 1xx) is used, final response HEADERS frame will be + * categorized here. + */ + NGHTTP2_HCAT_HEADERS = 3 +} nghttp2_headers_category; + +/** + * @struct + * + * The structure to specify stream dependency. + */ +typedef struct { + /** + * The stream ID of the stream to depend on. Specifying 0 makes + * stream not depend any other stream. + */ + int32_t stream_id; + /** + * The weight of this dependency. + */ + int32_t weight; + /** + * nonzero means exclusive dependency + */ + uint8_t exclusive; +} nghttp2_priority_spec; + +/** + * @struct + * + * The HEADERS frame. It has the following members: + */ +typedef struct { + /** + * The frame header. + */ + nghttp2_frame_hd hd; + /** + * The length of the padding in this frame. This includes PAD_HIGH + * and PAD_LOW. + */ + size_t padlen; + /** + * The priority specification + */ + nghttp2_priority_spec pri_spec; + /** + * The name/value pairs. + */ + nghttp2_nv *nva; + /** + * The number of name/value pairs in |nva|. + */ + size_t nvlen; + /** + * The category of this HEADERS frame. + */ + nghttp2_headers_category cat; +} nghttp2_headers; + +/** + * @struct + * + * The PRIORITY frame. It has the following members: + */ +typedef struct { + /** + * The frame header. + */ + nghttp2_frame_hd hd; + /** + * The priority specification. + */ + nghttp2_priority_spec pri_spec; +} nghttp2_priority; + +/** + * @struct + * + * The RST_STREAM frame. It has the following members: + */ +typedef struct { + /** + * The frame header. + */ + nghttp2_frame_hd hd; + /** + * The error code. See :type:`nghttp2_error_code`. + */ + uint32_t error_code; +} nghttp2_rst_stream; + +/** + * @struct + * + * The SETTINGS ID/Value pair. It has the following members: + */ +typedef struct { + /** + * The SETTINGS ID. See :type:`nghttp2_settings_id`. + */ + int32_t settings_id; + /** + * The value of this entry. + */ + uint32_t value; +} nghttp2_settings_entry; + +/** + * @struct + * + * The SETTINGS frame. It has the following members: + */ +typedef struct { + /** + * The frame header. + */ + nghttp2_frame_hd hd; + /** + * The number of SETTINGS ID/Value pairs in |iv|. + */ + size_t niv; + /** + * The pointer to the array of SETTINGS ID/Value pair. + */ + nghttp2_settings_entry *iv; +} nghttp2_settings; + +/** + * @struct + * + * The PUSH_PROMISE frame. It has the following members: + */ +typedef struct { + /** + * The frame header. + */ + nghttp2_frame_hd hd; + /** + * The length of the padding in this frame. This includes PAD_HIGH + * and PAD_LOW. + */ + size_t padlen; + /** + * The name/value pairs. + */ + nghttp2_nv *nva; + /** + * The number of name/value pairs in |nva|. + */ + size_t nvlen; + /** + * The promised stream ID + */ + int32_t promised_stream_id; + /** + * Reserved bit. Currently this is always set to 0 and application + * should not expect something useful in here. + */ + uint8_t reserved; +} nghttp2_push_promise; + +/** + * @struct + * + * The PING frame. It has the following members: + */ +typedef struct { + /** + * The frame header. + */ + nghttp2_frame_hd hd; + /** + * The opaque data + */ + uint8_t opaque_data[8]; +} nghttp2_ping; + +/** + * @struct + * + * The GOAWAY frame. It has the following members: + */ +typedef struct { + /** + * The frame header. + */ + nghttp2_frame_hd hd; + /** + * The last stream stream ID. + */ + int32_t last_stream_id; + /** + * The error code. See :type:`nghttp2_error_code`. + */ + uint32_t error_code; + /** + * The additional debug data + */ + uint8_t *opaque_data; + /** + * The length of |opaque_data| member. + */ + size_t opaque_data_len; + /** + * Reserved bit. Currently this is always set to 0 and application + * should not expect something useful in here. + */ + uint8_t reserved; +} nghttp2_goaway; + +/** + * @struct + * + * The WINDOW_UPDATE frame. It has the following members: + */ +typedef struct { + /** + * The frame header. + */ + nghttp2_frame_hd hd; + /** + * The window size increment. + */ + int32_t window_size_increment; + /** + * Reserved bit. Currently this is always set to 0 and application + * should not expect something useful in here. + */ + uint8_t reserved; +} nghttp2_window_update; + +/** + * @struct + * + * The extension frame. It has following members: + */ +typedef struct { + /** + * The frame header. + */ + nghttp2_frame_hd hd; + /** + * The pointer to extension payload. The exact pointer type is + * determined by hd.type. + * + * Currently, no extension is supported. This is a place holder for + * the future extensions. + */ + void *payload; +} nghttp2_extension; + +/** + * @union + * + * This union includes all frames to pass them to various function + * calls as nghttp2_frame type. The CONTINUATION frame is omitted + * from here because the library deals with it internally. + */ +typedef union { + /** + * The frame header, which is convenient to inspect frame header. + */ + nghttp2_frame_hd hd; + /** + * The DATA frame. + */ + nghttp2_data data; + /** + * The HEADERS frame. + */ + nghttp2_headers headers; + /** + * The PRIORITY frame. + */ + nghttp2_priority priority; + /** + * The RST_STREAM frame. + */ + nghttp2_rst_stream rst_stream; + /** + * The SETTINGS frame. + */ + nghttp2_settings settings; + /** + * The PUSH_PROMISE frame. + */ + nghttp2_push_promise push_promise; + /** + * The PING frame. + */ + nghttp2_ping ping; + /** + * The GOAWAY frame. + */ + nghttp2_goaway goaway; + /** + * The WINDOW_UPDATE frame. + */ + nghttp2_window_update window_update; + /** + * The extension frame. + */ + nghttp2_extension ext; +} nghttp2_frame; + +/** + * @functypedef + * + * Callback function invoked when |session| wants to send data to the + * remote peer. The implementation of this function must send at most + * |length| bytes of data stored in |data|. The |flags| is currently + * not used and always 0. It must return the number of bytes sent if + * it succeeds. If it cannot send any single byte without blocking, + * it must return :enum:`NGHTTP2_ERR_WOULDBLOCK`. For other errors, + * it must return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. The + * |user_data| pointer is the third argument passed in to the call to + * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`. + * + * This callback is required if the application uses + * `nghttp2_session_send()` to send data to the remote endpoint. If + * the application uses solely `nghttp2_session_mem_send()` instead, + * this callback function is unnecessary. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_send_callback()`. + * + * .. note:: + * + * The |length| may be very small. If that is the case, and + * application disables Nagle algorithm (``TCP_NODELAY``), then just + * writing |data| to the network stack leads to very small packet, + * and it is very inefficient. An application should be responsible + * to buffer up small chunks of data as necessary to avoid this + * situation. + */ +typedef ssize_t (*nghttp2_send_callback)(nghttp2_session *session, + const uint8_t *data, size_t length, + int flags, void *user_data); + +/** + * @functypedef + * + * Callback function invoked when :enum:`NGHTTP2_DATA_FLAG_NO_COPY` is + * used in :type:`nghttp2_data_source_read_callback` to send complete + * DATA frame. + * + * The |frame| is a DATA frame to send. The |framehd| is the + * serialized frame header (9 bytes). The |length| is the length of + * application data to send (this does not include padding). The + * |source| is the same pointer passed to + * :type:`nghttp2_data_source_read_callback`. + * + * The application first must send frame header |framehd| of length 9 + * bytes. If ``frame->data.padlen > 0``, send 1 byte of value + * ``frame->data.padlen - 1``. Then send exactly |length| bytes of + * application data. Finally, if ``frame->data.padlen > 1``, send + * ``frame->data.padlen - 1`` bytes of zero as padding. + * + * The application has to send complete DATA frame in this callback. + * If all data were written successfully, return 0. + * + * If it cannot send any data at all, just return + * :enum:`NGHTTP2_ERR_WOULDBLOCK`; the library will call this callback + * with the same parameters later (It is recommended to send complete + * DATA frame at once in this function to deal with error; if partial + * frame data has already sent, it is impossible to send another data + * in that state, and all we can do is tear down connection). When + * data is fully processed, but application wants to make + * `nghttp2_session_mem_send()` or `nghttp2_session_send()` return + * immediately without processing next frames, return + * :enum:`NGHTTP2_ERR_PAUSE`. If application decided to reset this + * stream, return :enum:`NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`, then + * the library will send RST_STREAM with INTERNAL_ERROR as error code. + * The application can also return + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`, which will result in + * connection closure. Returning any other value is treated as + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` is returned. + */ +typedef int (*nghttp2_send_data_callback)(nghttp2_session *session, + nghttp2_frame *frame, + const uint8_t *framehd, size_t length, + nghttp2_data_source *source, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked when |session| wants to receive data from + * the remote peer. The implementation of this function must read at + * most |length| bytes of data and store it in |buf|. The |flags| is + * currently not used and always 0. It must return the number of + * bytes written in |buf| if it succeeds. If it cannot read any + * single byte without blocking, it must return + * :enum:`NGHTTP2_ERR_WOULDBLOCK`. If it gets EOF before it reads any + * single byte, it must return :enum:`NGHTTP2_ERR_EOF`. For other + * errors, it must return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * Returning 0 is treated as :enum:`NGHTTP2_ERR_WOULDBLOCK`. The + * |user_data| pointer is the third argument passed in to the call to + * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`. + * + * This callback is required if the application uses + * `nghttp2_session_recv()` to receive data from the remote endpoint. + * If the application uses solely `nghttp2_session_mem_recv()` + * instead, this callback function is unnecessary. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_recv_callback()`. + */ +typedef ssize_t (*nghttp2_recv_callback)(nghttp2_session *session, uint8_t *buf, + size_t length, int flags, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked by `nghttp2_session_recv()` and + * `nghttp2_session_mem_recv()` when a frame is received. The + * |user_data| pointer is the third argument passed in to the call to + * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`. + * + * If frame is HEADERS or PUSH_PROMISE, the ``nva`` and ``nvlen`` + * member of their data structure are always ``NULL`` and 0 + * respectively. The header name/value pairs are emitted via + * :type:`nghttp2_on_header_callback`. + * + * For HEADERS, PUSH_PROMISE and DATA frames, this callback may be + * called after stream is closed (see + * :type:`nghttp2_on_stream_close_callback`). The application should + * check that stream is still alive using its own stream management or + * :func:`nghttp2_session_get_stream_user_data()`. + * + * Only HEADERS and DATA frame can signal the end of incoming data. + * If ``frame->hd.flags & NGHTTP2_FLAG_END_STREAM`` is nonzero, the + * |frame| is the last frame from the remote peer in this stream. + * + * This callback won't be called for CONTINUATION frames. + * HEADERS/PUSH_PROMISE + CONTINUATIONs are treated as single frame. + * + * The implementation of this function must return 0 if it succeeds. + * If nonzero value is returned, it is treated as fatal error and + * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_frame_recv_callback()`. + */ +typedef int (*nghttp2_on_frame_recv_callback)(nghttp2_session *session, + const nghttp2_frame *frame, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked by `nghttp2_session_recv()` and + * `nghttp2_session_mem_recv()` when an invalid non-DATA frame is + * received. The error is indicated by the |lib_error_code|, which is + * one of the values defined in :type:`nghttp2_error`. When this + * callback function is invoked, the library automatically submits + * either RST_STREAM or GOAWAY frame. The |user_data| pointer is the + * third argument passed in to the call to + * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`. + * + * If frame is HEADERS or PUSH_PROMISE, the ``nva`` and ``nvlen`` + * member of their data structure are always ``NULL`` and 0 + * respectively. + * + * The implementation of this function must return 0 if it succeeds. + * If nonzero is returned, it is treated as fatal error and + * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_invalid_frame_recv_callback()`. + */ +typedef int (*nghttp2_on_invalid_frame_recv_callback)( + nghttp2_session *session, const nghttp2_frame *frame, int lib_error_code, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked when a chunk of data in DATA frame is + * received. The |stream_id| is the stream ID this DATA frame belongs + * to. The |flags| is the flags of DATA frame which this data chunk + * is contained. ``(flags & NGHTTP2_FLAG_END_STREAM) != 0`` does not + * necessarily mean this chunk of data is the last one in the stream. + * You should use :type:`nghttp2_on_frame_recv_callback` to know all + * data frames are received. The |user_data| pointer is the third + * argument passed in to the call to `nghttp2_session_client_new()` or + * `nghttp2_session_server_new()`. + * + * If the application uses `nghttp2_session_mem_recv()`, it can return + * :enum:`NGHTTP2_ERR_PAUSE` to make `nghttp2_session_mem_recv()` + * return without processing further input bytes. The memory by + * pointed by the |data| is retained until + * `nghttp2_session_mem_recv()` or `nghttp2_session_recv()` is called. + * The application must retain the input bytes which was used to + * produce the |data| parameter, because it may refer to the memory + * region included in the input bytes. + * + * The implementation of this function must return 0 if it succeeds. + * If nonzero is returned, it is treated as fatal error, and + * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_data_chunk_recv_callback()`. + */ +typedef int (*nghttp2_on_data_chunk_recv_callback)(nghttp2_session *session, + uint8_t flags, + int32_t stream_id, + const uint8_t *data, + size_t len, void *user_data); + +/** + * @functypedef + * + * Callback function invoked just before the non-DATA frame |frame| is + * sent. The |user_data| pointer is the third argument passed in to + * the call to `nghttp2_session_client_new()` or + * `nghttp2_session_server_new()`. + * + * The implementation of this function must return 0 if it succeeds. + * It can also return :enum:`NGHTTP2_ERR_CANCEL` to cancel the + * transmission of the given frame. + * + * If there is a fatal error while executing this callback, the + * implementation should return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`, + * which makes `nghttp2_session_send()` and + * `nghttp2_session_mem_send()` functions immediately return + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * If the other value is returned, it is treated as if + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` is returned. But the + * implementation should not rely on this since the library may define + * new return value to extend its capability. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_before_frame_send_callback()`. + */ +typedef int (*nghttp2_before_frame_send_callback)(nghttp2_session *session, + const nghttp2_frame *frame, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked after the frame |frame| is sent. The + * |user_data| pointer is the third argument passed in to the call to + * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`. + * + * The implementation of this function must return 0 if it succeeds. + * If nonzero is returned, it is treated as fatal error and + * `nghttp2_session_send()` and `nghttp2_session_mem_send()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_frame_send_callback()`. + */ +typedef int (*nghttp2_on_frame_send_callback)(nghttp2_session *session, + const nghttp2_frame *frame, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked after the non-DATA frame |frame| is not + * sent because of the error. The error is indicated by the + * |lib_error_code|, which is one of the values defined in + * :type:`nghttp2_error`. The |user_data| pointer is the third + * argument passed in to the call to `nghttp2_session_client_new()` or + * `nghttp2_session_server_new()`. + * + * The implementation of this function must return 0 if it succeeds. + * If nonzero is returned, it is treated as fatal error and + * `nghttp2_session_send()` and `nghttp2_session_mem_send()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * `nghttp2_session_get_stream_user_data()` can be used to get + * associated data. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_frame_not_send_callback()`. + */ +typedef int (*nghttp2_on_frame_not_send_callback)(nghttp2_session *session, + const nghttp2_frame *frame, + int lib_error_code, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked when the stream |stream_id| is closed. + * The reason of closure is indicated by the |error_code|. The + * |error_code| is usually one of :enum:`nghttp2_error_code`, but that + * is not guaranteed. The stream_user_data, which was specified in + * `nghttp2_submit_request()` or `nghttp2_submit_headers()`, is still + * available in this function. The |user_data| pointer is the third + * argument passed in to the call to `nghttp2_session_client_new()` or + * `nghttp2_session_server_new()`. + * + * This function is also called for a stream in reserved state. + * + * The implementation of this function must return 0 if it succeeds. + * If nonzero is returned, it is treated as fatal error and + * `nghttp2_session_recv()`, `nghttp2_session_mem_recv()`, + * `nghttp2_session_send()`, and `nghttp2_session_mem_send()` + * functions immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_stream_close_callback()`. + */ +typedef int (*nghttp2_on_stream_close_callback)(nghttp2_session *session, + int32_t stream_id, + uint32_t error_code, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked when the reception of header block in + * HEADERS or PUSH_PROMISE is started. Each header name/value pair + * will be emitted by :type:`nghttp2_on_header_callback`. + * + * The ``frame->hd.flags`` may not have + * :enum:`NGHTTP2_FLAG_END_HEADERS` flag set, which indicates that one + * or more CONTINUATION frames are involved. But the application does + * not need to care about that because the header name/value pairs are + * emitted transparently regardless of CONTINUATION frames. + * + * The server applications probably create an object to store + * information about new stream if ``frame->hd.type == + * NGHTTP2_HEADERS`` and ``frame->headers.cat == + * NGHTTP2_HCAT_REQUEST``. If |session| is configured as server side, + * ``frame->headers.cat`` is either ``NGHTTP2_HCAT_REQUEST`` + * containing request headers or ``NGHTTP2_HCAT_HEADERS`` containing + * trailer fields and never get PUSH_PROMISE in this callback. + * + * For the client applications, ``frame->hd.type`` is either + * ``NGHTTP2_HEADERS`` or ``NGHTTP2_PUSH_PROMISE``. In case of + * ``NGHTTP2_HEADERS``, ``frame->headers.cat == + * NGHTTP2_HCAT_RESPONSE`` means that it is the first response + * headers, but it may be non-final response which is indicated by 1xx + * status code. In this case, there may be zero or more HEADERS frame + * with ``frame->headers.cat == NGHTTP2_HCAT_HEADERS`` which has + * non-final response code and finally client gets exactly one HEADERS + * frame with ``frame->headers.cat == NGHTTP2_HCAT_HEADERS`` + * containing final response headers (non-1xx status code). The + * trailer fields also has ``frame->headers.cat == + * NGHTTP2_HCAT_HEADERS`` which does not contain any status code. + * + * Returning :enum:`NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will close + * the stream (promised stream if frame is PUSH_PROMISE) by issuing + * RST_STREAM with :enum:`NGHTTP2_INTERNAL_ERROR`. In this case, + * :type:`nghttp2_on_header_callback` and + * :type:`nghttp2_on_frame_recv_callback` will not be invoked. If a + * different error code is desirable, use + * `nghttp2_submit_rst_stream()` with a desired error code and then + * return :enum:`NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`. Again, use + * ``frame->push_promise.promised_stream_id`` as stream_id parameter + * in `nghttp2_submit_rst_stream()` if frame is PUSH_PROMISE. + * + * The implementation of this function must return 0 if it succeeds. + * It can return :enum:`NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` to + * reset the stream (promised stream if frame is PUSH_PROMISE). For + * critical errors, it must return + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. If the other value is + * returned, it is treated as if :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` + * is returned. If :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` is returned, + * `nghttp2_session_mem_recv()` function will immediately return + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_begin_headers_callback()`. + */ +typedef int (*nghttp2_on_begin_headers_callback)(nghttp2_session *session, + const nghttp2_frame *frame, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked when a header name/value pair is received + * for the |frame|. The |name| of length |namelen| is header name. + * The |value| of length |valuelen| is header value. The |flags| is + * bitwise OR of one or more of :type:`nghttp2_nv_flag`. + * + * If :enum:`NGHTTP2_NV_FLAG_NO_INDEX` is set in |flags|, the receiver + * must not index this name/value pair when forwarding it to the next + * hop. More specifically, "Literal Header Field never Indexed" + * representation must be used in HPACK encoding. + * + * When this callback is invoked, ``frame->hd.type`` is either + * :enum:`NGHTTP2_HEADERS` or :enum:`NGHTTP2_PUSH_PROMISE`. After all + * header name/value pairs are processed with this callback, and no + * error has been detected, :type:`nghttp2_on_frame_recv_callback` + * will be invoked. If there is an error in decompression, + * :type:`nghttp2_on_frame_recv_callback` for the |frame| will not be + * invoked. + * + * Both |name| and |value| are guaranteed to be NULL-terminated. The + * |namelen| and |valuelen| do not include terminal NULL. If + * `nghttp2_option_set_no_http_messaging()` is used with nonzero + * value, NULL character may be included in |name| or |value| before + * terminating NULL. + * + * Please note that unless `nghttp2_option_set_no_http_messaging()` is + * used, nghttp2 library does perform validation against the |name| + * and the |value| using `nghttp2_check_header_name()` and + * `nghttp2_check_header_value()`. In addition to this, nghttp2 + * performs validation based on HTTP Messaging rule, which is briefly + * explained in :ref:`http-messaging` section. + * + * If the application uses `nghttp2_session_mem_recv()`, it can return + * :enum:`NGHTTP2_ERR_PAUSE` to make `nghttp2_session_mem_recv()` + * return without processing further input bytes. The memory pointed + * by |frame|, |name| and |value| parameters are retained until + * `nghttp2_session_mem_recv()` or `nghttp2_session_recv()` is called. + * The application must retain the input bytes which was used to + * produce these parameters, because it may refer to the memory region + * included in the input bytes. + * + * Returning :enum:`NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will close + * the stream (promised stream if frame is PUSH_PROMISE) by issuing + * RST_STREAM with :enum:`NGHTTP2_INTERNAL_ERROR`. In this case, + * :type:`nghttp2_on_header_callback` and + * :type:`nghttp2_on_frame_recv_callback` will not be invoked. If a + * different error code is desirable, use + * `nghttp2_submit_rst_stream()` with a desired error code and then + * return :enum:`NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`. Again, use + * ``frame->push_promise.promised_stream_id`` as stream_id parameter + * in `nghttp2_submit_rst_stream()` if frame is PUSH_PROMISE. + * + * The implementation of this function must return 0 if it succeeds. + * It may return :enum:`NGHTTP2_ERR_PAUSE` or + * :enum:`NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`. For other critical + * failures, it must return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. If + * the other nonzero value is returned, it is treated as + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. If + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` is returned, + * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_header_callback()`. + * + * .. warning:: + * + * Application should properly limit the total buffer size to store + * incoming header fields. Without it, peer may send large number + * of header fields or large header fields to cause out of memory in + * local endpoint. Due to how HPACK works, peer can do this + * effectively without using much memory on their own. + */ +typedef int (*nghttp2_on_header_callback)(nghttp2_session *session, + const nghttp2_frame *frame, + const uint8_t *name, size_t namelen, + const uint8_t *value, size_t valuelen, + uint8_t flags, void *user_data); + +/** + * @functypedef + * + * Callback function invoked when a header name/value pair is received + * for the |frame|. The |name| is header name. The |value| is header + * value. The |flags| is bitwise OR of one or more of + * :type:`nghttp2_nv_flag`. + * + * This callback behaves like :type:`nghttp2_on_header_callback`, + * except that |name| and |value| are stored in reference counted + * buffer. If application wishes to keep these references without + * copying them, use `nghttp2_rcbuf_incref()` to increment their + * reference count. It is the application's responsibility to call + * `nghttp2_rcbuf_decref()` if they called `nghttp2_rcbuf_incref()` so + * as not to leak memory. If the |session| is created by + * `nghttp2_session_server_new3()` or `nghttp2_session_client_new3()`, + * the function to free memory is the one belongs to the mem + * parameter. As long as this free function alives, |name| and + * |value| can live after |session| was destroyed. + */ +typedef int (*nghttp2_on_header_callback2)(nghttp2_session *session, + const nghttp2_frame *frame, + nghttp2_rcbuf *name, + nghttp2_rcbuf *value, uint8_t flags, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked when the library asks application how + * many padding bytes are required for the transmission of the + * |frame|. The application must choose the total length of payload + * including padded bytes in range [frame->hd.length, max_payloadlen], + * inclusive. Choosing number not in this range will be treated as + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. Returning + * ``frame->hd.length`` means no padding is added. Returning + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` will make + * `nghttp2_session_send()` and `nghttp2_session_mem_send()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_select_padding_callback()`. + */ +typedef ssize_t (*nghttp2_select_padding_callback)(nghttp2_session *session, + const nghttp2_frame *frame, + size_t max_payloadlen, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked when library wants to get max length of + * data to send data to the remote peer. The implementation of this + * function should return a value in the following range. [1, + * min(|session_remote_window_size|, |stream_remote_window_size|, + * |remote_max_frame_size|)]. If a value greater than this range is + * returned than the max allow value will be used. Returning a value + * smaller than this range is treated as + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. The |frame_type| is provided + * for future extensibility and identifies the type of frame (see + * :type:`nghttp2_frame_type`) for which to get the length for. + * Currently supported frame types are: :enum:`NGHTTP2_DATA`. + * + * This callback can be used to control the length in bytes for which + * :type:`nghttp2_data_source_read_callback` is allowed to send to the + * remote endpoint. This callback is optional. Returning + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` will signal the entire session + * failure. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_data_source_read_length_callback()`. + */ +typedef ssize_t (*nghttp2_data_source_read_length_callback)( + nghttp2_session *session, uint8_t frame_type, int32_t stream_id, + int32_t session_remote_window_size, int32_t stream_remote_window_size, + uint32_t remote_max_frame_size, void *user_data); + +/** + * @functypedef + * + * Callback function invoked when a frame header is received. The + * |hd| points to received frame header. + * + * Unlike :type:`nghttp2_on_frame_recv_callback`, this callback will + * also be called when frame header of CONTINUATION frame is received. + * + * If both :type:`nghttp2_on_begin_frame_callback` and + * :type:`nghttp2_on_begin_headers_callback` are set and HEADERS or + * PUSH_PROMISE is received, :type:`nghttp2_on_begin_frame_callback` + * will be called first. + * + * The implementation of this function must return 0 if it succeeds. + * If nonzero value is returned, it is treated as fatal error and + * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_begin_frame_callback()`. + */ +typedef int (*nghttp2_on_begin_frame_callback)(nghttp2_session *session, + const nghttp2_frame_hd *hd, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked when chunk of extension frame payload is + * received. The |hd| points to frame header. The received + * chunk is |data| of length |len|. + * + * The implementation of this function must return 0 if it succeeds. + * + * To abort processing this extension frame, return + * :enum:`NGHTTP2_ERR_CANCEL`. + * + * If fatal error occurred, application should return + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. In this case, + * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. If the + * other values are returned, currently they are treated as + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + */ +typedef int (*nghttp2_on_extension_chunk_recv_callback)( + nghttp2_session *session, const nghttp2_frame_hd *hd, const uint8_t *data, + size_t len, void *user_data); + +/** + * @functypedef + * + * Callback function invoked when library asks the application to + * unpack extension payload from its wire format. The extension + * payload has been passed to the application using + * :type:`nghttp2_on_extension_chunk_recv_callback`. The frame header + * is already unpacked by the library and provided as |hd|. + * + * To receive extension frames, the application must tell desired + * extension frame type to the library using + * `nghttp2_option_set_user_recv_extension_type()`. + * + * The implementation of this function may store the pointer to the + * created object as a result of unpacking in |*payload|, and returns + * 0. The pointer stored in |*payload| is opaque to the library, and + * the library does not own its pointer. |*payload| is initialized as + * ``NULL``. The |*payload| is available as ``frame->ext.payload`` in + * :type:`nghttp2_on_frame_recv_callback`. Therefore if application + * can free that memory inside :type:`nghttp2_on_frame_recv_callback` + * callback. Of course, application has a liberty not ot use + * |*payload|, and do its own mechanism to process extension frames. + * + * To abort processing this extension frame, return + * :enum:`NGHTTP2_ERR_CANCEL`. + * + * If fatal error occurred, application should return + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. In this case, + * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. If the + * other values are returned, currently they are treated as + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + */ +typedef int (*nghttp2_unpack_extension_callback)(nghttp2_session *session, + void **payload, + const nghttp2_frame_hd *hd, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked when library asks the application to pack + * extension payload in its wire format. The frame header will be + * packed by library. Application must pack payload only. + * ``frame->ext.payload`` is the object passed to + * `nghttp2_submit_extension()` as payload parameter. Application + * must pack extension payload to the |buf| of its capacity |len| + * bytes. The |len| is at least 16KiB. + * + * The implementation of this function should return the number of + * bytes written into |buf| when it succeeds. + * + * To abort processing this extension frame, return + * :enum:`NGHTTP2_ERR_CANCEL`, and + * :type:`nghttp2_on_frame_not_send_callback` will be invoked. + * + * If fatal error occurred, application should return + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. In this case, + * `nghttp2_session_send()` and `nghttp2_session_mem_send()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. If the + * other values are returned, currently they are treated as + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. If the return value is + * strictly larger than |len|, it is treated as + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + */ +typedef ssize_t (*nghttp2_pack_extension_callback)(nghttp2_session *session, + uint8_t *buf, size_t len, + const nghttp2_frame *frame, + void *user_data); + +/** + * @functypedef + * + * Callback function invoked when library provides the error message + * intended for human consumption. This callback is solely for + * debugging purpose. The |msg| is typically NULL-terminated string + * of length |len|. |len| does not include the sentinel NULL + * character. + * + * The format of error message may change between nghttp2 library + * versions. The application should not depend on the particular + * format. + * + * Normally, application should return 0 from this callback. If fatal + * error occurred while doing something in this callback, application + * should return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. In this case, + * library will return immediately with return value + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. Currently, if nonzero value + * is returned from this callback, they are treated as + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`, but application should not + * rely on this details. + */ +typedef int (*nghttp2_error_callback)(nghttp2_session *session, const char *msg, + size_t len, void *user_data); + +struct nghttp2_session_callbacks; + +/** + * @struct + * + * Callback functions for :type:`nghttp2_session`. The details of + * this structure are intentionally hidden from the public API. + */ +typedef struct nghttp2_session_callbacks nghttp2_session_callbacks; + +/** + * @function + * + * Initializes |*callbacks_ptr| with NULL values. + * + * The initialized object can be used when initializing multiple + * :type:`nghttp2_session` objects. + * + * When the application finished using this object, it can use + * `nghttp2_session_callbacks_del()` to free its memory. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int +nghttp2_session_callbacks_new(nghttp2_session_callbacks **callbacks_ptr); + +/** + * @function + * + * Frees any resources allocated for |callbacks|. If |callbacks| is + * ``NULL``, this function does nothing. + */ +NGHTTP2_EXTERN void +nghttp2_session_callbacks_del(nghttp2_session_callbacks *callbacks); + +/** + * @function + * + * Sets callback function invoked when a session wants to send data to + * the remote peer. This callback is not necessary if the application + * uses solely `nghttp2_session_mem_send()` to serialize data to + * transmit. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_send_callback( + nghttp2_session_callbacks *cbs, nghttp2_send_callback send_callback); + +/** + * @function + * + * Sets callback function invoked when the a session wants to receive + * data from the remote peer. This callback is not necessary if the + * application uses solely `nghttp2_session_mem_recv()` to process + * received data. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_recv_callback( + nghttp2_session_callbacks *cbs, nghttp2_recv_callback recv_callback); + +/** + * @function + * + * Sets callback function invoked by `nghttp2_session_recv()` and + * `nghttp2_session_mem_recv()` when a frame is received. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_frame_recv_callback( + nghttp2_session_callbacks *cbs, + nghttp2_on_frame_recv_callback on_frame_recv_callback); + +/** + * @function + * + * Sets callback function invoked by `nghttp2_session_recv()` and + * `nghttp2_session_mem_recv()` when an invalid non-DATA frame is + * received. + */ +NGHTTP2_EXTERN void +nghttp2_session_callbacks_set_on_invalid_frame_recv_callback( + nghttp2_session_callbacks *cbs, + nghttp2_on_invalid_frame_recv_callback on_invalid_frame_recv_callback); + +/** + * @function + * + * Sets callback function invoked when a chunk of data in DATA frame + * is received. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_data_chunk_recv_callback( + nghttp2_session_callbacks *cbs, + nghttp2_on_data_chunk_recv_callback on_data_chunk_recv_callback); + +/** + * @function + * + * Sets callback function invoked before a non-DATA frame is sent. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_before_frame_send_callback( + nghttp2_session_callbacks *cbs, + nghttp2_before_frame_send_callback before_frame_send_callback); + +/** + * @function + * + * Sets callback function invoked after a frame is sent. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_frame_send_callback( + nghttp2_session_callbacks *cbs, + nghttp2_on_frame_send_callback on_frame_send_callback); + +/** + * @function + * + * Sets callback function invoked when a non-DATA frame is not sent + * because of an error. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_frame_not_send_callback( + nghttp2_session_callbacks *cbs, + nghttp2_on_frame_not_send_callback on_frame_not_send_callback); + +/** + * @function + * + * Sets callback function invoked when the stream is closed. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_stream_close_callback( + nghttp2_session_callbacks *cbs, + nghttp2_on_stream_close_callback on_stream_close_callback); + +/** + * @function + * + * Sets callback function invoked when the reception of header block + * in HEADERS or PUSH_PROMISE is started. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_begin_headers_callback( + nghttp2_session_callbacks *cbs, + nghttp2_on_begin_headers_callback on_begin_headers_callback); + +/** + * @function + * + * Sets callback function invoked when a header name/value pair is + * received. If both + * `nghttp2_session_callbacks_set_on_header_callback()` and + * `nghttp2_session_callbacks_set_on_header_callback2()` are used to + * set callbacks, the latter has the precedence. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_header_callback( + nghttp2_session_callbacks *cbs, + nghttp2_on_header_callback on_header_callback); + +/** + * @function + * + * Sets callback function invoked when a header name/value pair is + * received. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_header_callback2( + nghttp2_session_callbacks *cbs, + nghttp2_on_header_callback2 on_header_callback2); + +/** + * @function + * + * Sets callback function invoked when the library asks application + * how many padding bytes are required for the transmission of the + * given frame. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_select_padding_callback( + nghttp2_session_callbacks *cbs, + nghttp2_select_padding_callback select_padding_callback); + +/** + * @function + * + * Sets callback function determine the length allowed in + * :type:`nghttp2_data_source_read_callback`. + */ +NGHTTP2_EXTERN void +nghttp2_session_callbacks_set_data_source_read_length_callback( + nghttp2_session_callbacks *cbs, + nghttp2_data_source_read_length_callback data_source_read_length_callback); + +/** + * @function + * + * Sets callback function invoked when a frame header is received. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_begin_frame_callback( + nghttp2_session_callbacks *cbs, + nghttp2_on_begin_frame_callback on_begin_frame_callback); + +/** + * @function + * + * Sets callback function invoked when + * :enum:`NGHTTP2_DATA_FLAG_NO_COPY` is used in + * :type:`nghttp2_data_source_read_callback` to avoid data copy. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_send_data_callback( + nghttp2_session_callbacks *cbs, + nghttp2_send_data_callback send_data_callback); + +/** + * @function + * + * Sets callback function invoked when the library asks the + * application to pack extension frame payload in wire format. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_pack_extension_callback( + nghttp2_session_callbacks *cbs, + nghttp2_pack_extension_callback pack_extension_callback); + +/** + * @function + * + * Sets callback function invoked when the library asks the + * application to unpack extension frame payload from wire format. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_unpack_extension_callback( + nghttp2_session_callbacks *cbs, + nghttp2_unpack_extension_callback unpack_extension_callback); + +/** + * @function + * + * Sets callback function invoked when chunk of extension frame + * payload is received. + */ +NGHTTP2_EXTERN void +nghttp2_session_callbacks_set_on_extension_chunk_recv_callback( + nghttp2_session_callbacks *cbs, + nghttp2_on_extension_chunk_recv_callback on_extension_chunk_recv_callback); + +/** + * @function + * + * Sets callback function invoked when library tells error message to + * the application. + */ +NGHTTP2_EXTERN void nghttp2_session_callbacks_set_error_callback( + nghttp2_session_callbacks *cbs, nghttp2_error_callback error_callback); + +/** + * @functypedef + * + * Custom memory allocator to replace malloc(). The |mem_user_data| + * is the mem_user_data member of :type:`nghttp2_mem` structure. + */ +typedef void *(*nghttp2_malloc)(size_t size, void *mem_user_data); + +/** + * @functypedef + * + * Custom memory allocator to replace free(). The |mem_user_data| is + * the mem_user_data member of :type:`nghttp2_mem` structure. + */ +typedef void (*nghttp2_free)(void *ptr, void *mem_user_data); + +/** + * @functypedef + * + * Custom memory allocator to replace calloc(). The |mem_user_data| + * is the mem_user_data member of :type:`nghttp2_mem` structure. + */ +typedef void *(*nghttp2_calloc)(size_t nmemb, size_t size, void *mem_user_data); + +/** + * @functypedef + * + * Custom memory allocator to replace realloc(). The |mem_user_data| + * is the mem_user_data member of :type:`nghttp2_mem` structure. + */ +typedef void *(*nghttp2_realloc)(void *ptr, size_t size, void *mem_user_data); + +/** + * @struct + * + * Custom memory allocator functions and user defined pointer. The + * |mem_user_data| member is passed to each allocator function. This + * can be used, for example, to achieve per-session memory pool. + * + * In the following example code, ``my_malloc``, ``my_free``, + * ``my_calloc`` and ``my_realloc`` are the replacement of the + * standard allocators ``malloc``, ``free``, ``calloc`` and + * ``realloc`` respectively:: + * + * void *my_malloc_cb(size_t size, void *mem_user_data) { + * return my_malloc(size); + * } + * + * void my_free_cb(void *ptr, void *mem_user_data) { my_free(ptr); } + * + * void *my_calloc_cb(size_t nmemb, size_t size, void *mem_user_data) { + * return my_calloc(nmemb, size); + * } + * + * void *my_realloc_cb(void *ptr, size_t size, void *mem_user_data) { + * return my_realloc(ptr, size); + * } + * + * void session_new() { + * nghttp2_session *session; + * nghttp2_session_callbacks *callbacks; + * nghttp2_mem mem = {NULL, my_malloc_cb, my_free_cb, my_calloc_cb, + * my_realloc_cb}; + * + * ... + * + * nghttp2_session_client_new3(&session, callbacks, NULL, NULL, &mem); + * + * ... + * } + */ +typedef struct { + /** + * An arbitrary user supplied data. This is passed to each + * allocator function. + */ + void *mem_user_data; + /** + * Custom allocator function to replace malloc(). + */ + nghttp2_malloc malloc; + /** + * Custom allocator function to replace free(). + */ + nghttp2_free free; + /** + * Custom allocator function to replace calloc(). + */ + nghttp2_calloc calloc; + /** + * Custom allocator function to replace realloc(). + */ + nghttp2_realloc realloc; +} nghttp2_mem; + +struct nghttp2_option; + +/** + * @struct + * + * Configuration options for :type:`nghttp2_session`. The details of + * this structure are intentionally hidden from the public API. + */ +typedef struct nghttp2_option nghttp2_option; + +/** + * @function + * + * Initializes |*option_ptr| with default values. + * + * When the application finished using this object, it can use + * `nghttp2_option_del()` to free its memory. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int nghttp2_option_new(nghttp2_option **option_ptr); + +/** + * @function + * + * Frees any resources allocated for |option|. If |option| is + * ``NULL``, this function does nothing. + */ +NGHTTP2_EXTERN void nghttp2_option_del(nghttp2_option *option); + +/** + * @function + * + * This option prevents the library from sending WINDOW_UPDATE for a + * connection automatically. If this option is set to nonzero, the + * library won't send WINDOW_UPDATE for DATA until application calls + * `nghttp2_session_consume()` to indicate the consumed amount of + * data. Don't use `nghttp2_submit_window_update()` for this purpose. + * By default, this option is set to zero. + */ +NGHTTP2_EXTERN void +nghttp2_option_set_no_auto_window_update(nghttp2_option *option, int val); + +/** + * @function + * + * This option sets the SETTINGS_MAX_CONCURRENT_STREAMS value of + * remote endpoint as if it is received in SETTINGS frame. Without + * specifying this option, before the local endpoint receives + * SETTINGS_MAX_CONCURRENT_STREAMS in SETTINGS frame from remote + * endpoint, SETTINGS_MAX_CONCURRENT_STREAMS is unlimited. This may + * cause problem if local endpoint submits lots of requests initially + * and sending them at once to the remote peer may lead to the + * rejection of some requests. Specifying this option to the sensible + * value, say 100, may avoid this kind of issue. This value will be + * overwritten if the local endpoint receives + * SETTINGS_MAX_CONCURRENT_STREAMS from the remote endpoint. + */ +NGHTTP2_EXTERN void +nghttp2_option_set_peer_max_concurrent_streams(nghttp2_option *option, + uint32_t val); + +/** + * @function + * + * By default, nghttp2 library, if configured as server, requires + * first 24 bytes of client magic byte string (MAGIC). In most cases, + * this will simplify the implementation of server. But sometimes + * server may want to detect the application protocol based on first + * few bytes on clear text communication. + * + * If this option is used with nonzero |val|, nghttp2 library does not + * handle MAGIC. It still checks following SETTINGS frame. This + * means that applications should deal with MAGIC by themselves. + * + * If this option is not used or used with zero value, if MAGIC does + * not match :macro:`NGHTTP2_CLIENT_MAGIC`, `nghttp2_session_recv()` + * and `nghttp2_session_mem_recv()` will return error + * :enum:`NGHTTP2_ERR_BAD_CLIENT_MAGIC`, which is fatal error. + */ +NGHTTP2_EXTERN void +nghttp2_option_set_no_recv_client_magic(nghttp2_option *option, int val); + +/** + * @function + * + * By default, nghttp2 library enforces subset of HTTP Messaging rules + * described in `HTTP/2 specification, section 8 + * `_. See + * :ref:`http-messaging` section for details. For those applications + * who use nghttp2 library as non-HTTP use, give nonzero to |val| to + * disable this enforcement. + */ +NGHTTP2_EXTERN void nghttp2_option_set_no_http_messaging(nghttp2_option *option, + int val); + +/** + * @function + * + * RFC 7540 does not enforce any limit on the number of incoming + * reserved streams (in RFC 7540 terms, streams in reserved (remote) + * state). This only affects client side, since only server can push + * streams. Malicious server can push arbitrary number of streams, + * and make client's memory exhausted. This option can set the + * maximum number of such incoming streams to avoid possible memory + * exhaustion. If this option is set, and pushed streams are + * automatically closed on reception, without calling user provided + * callback, if they exceed the given limit. The default value is + * 200. If session is configured as server side, this option has no + * effect. Server can control the number of streams to push. + */ +NGHTTP2_EXTERN void +nghttp2_option_set_max_reserved_remote_streams(nghttp2_option *option, + uint32_t val); + +/** + * @function + * + * Sets extension frame type the application is willing to handle with + * user defined callbacks (see + * :type:`nghttp2_on_extension_chunk_recv_callback` and + * :type:`nghttp2_unpack_extension_callback`). The |type| is + * extension frame type, and must be strictly greater than 0x9. + * Otherwise, this function does nothing. The application can call + * this function multiple times to set more than one frame type to + * receive. The application does not have to call this function if it + * just sends extension frames. + */ +NGHTTP2_EXTERN void +nghttp2_option_set_user_recv_extension_type(nghttp2_option *option, + uint8_t type); + +/** + * @function + * + * Sets extension frame type the application is willing to receive + * using builtin handler. The |type| is the extension frame type to + * receive, and must be strictly greater than 0x9. Otherwise, this + * function does nothing. The application can call this function + * multiple times to set more than one frame type to receive. The + * application does not have to call this function if it just sends + * extension frames. + * + * If same frame type is passed to both + * `nghttp2_option_set_builtin_recv_extension_type()` and + * `nghttp2_option_set_user_recv_extension_type()`, the latter takes + * precedence. + */ +NGHTTP2_EXTERN void +nghttp2_option_set_builtin_recv_extension_type(nghttp2_option *option, + uint8_t type); + +/** + * @function + * + * This option prevents the library from sending PING frame with ACK + * flag set automatically when PING frame without ACK flag set is + * received. If this option is set to nonzero, the library won't send + * PING frame with ACK flag set in the response for incoming PING + * frame. The application can send PING frame with ACK flag set using + * `nghttp2_submit_ping()` with :enum:`NGHTTP2_FLAG_ACK` as flags + * parameter. + */ +NGHTTP2_EXTERN void nghttp2_option_set_no_auto_ping_ack(nghttp2_option *option, + int val); + +/** + * @function + * + * This option sets the maximum length of header block (a set of + * header fields per one HEADERS frame) to send. The length of a + * given set of header fields is calculated using + * `nghttp2_hd_deflate_bound()`. The default value is 64KiB. If + * application attempts to send header fields larger than this limit, + * the transmission of the frame fails with error code + * :enum:`NGHTTP2_ERR_FRAME_SIZE_ERROR`. + */ +NGHTTP2_EXTERN void +nghttp2_option_set_max_send_header_block_length(nghttp2_option *option, + size_t val); + +/** + * @function + * + * Initializes |*session_ptr| for client use. The all members of + * |callbacks| are copied to |*session_ptr|. Therefore |*session_ptr| + * does not store |callbacks|. The |user_data| is an arbitrary user + * supplied data, which will be passed to the callback functions. + * + * The :type:`nghttp2_send_callback` must be specified. If the + * application code uses `nghttp2_session_recv()`, the + * :type:`nghttp2_recv_callback` must be specified. The other members + * of |callbacks| can be ``NULL``. + * + * If this function fails, |*session_ptr| is left untouched. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int +nghttp2_session_client_new(nghttp2_session **session_ptr, + const nghttp2_session_callbacks *callbacks, + void *user_data); + +/** + * @function + * + * Initializes |*session_ptr| for server use. The all members of + * |callbacks| are copied to |*session_ptr|. Therefore |*session_ptr| + * does not store |callbacks|. The |user_data| is an arbitrary user + * supplied data, which will be passed to the callback functions. + * + * The :type:`nghttp2_send_callback` must be specified. If the + * application code uses `nghttp2_session_recv()`, the + * :type:`nghttp2_recv_callback` must be specified. The other members + * of |callbacks| can be ``NULL``. + * + * If this function fails, |*session_ptr| is left untouched. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int +nghttp2_session_server_new(nghttp2_session **session_ptr, + const nghttp2_session_callbacks *callbacks, + void *user_data); + +/** + * @function + * + * Like `nghttp2_session_client_new()`, but with additional options + * specified in the |option|. + * + * The |option| can be ``NULL`` and the call is equivalent to + * `nghttp2_session_client_new()`. + * + * This function does not take ownership |option|. The application is + * responsible for freeing |option| if it finishes using the object. + * + * The library code does not refer to |option| after this function + * returns. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int +nghttp2_session_client_new2(nghttp2_session **session_ptr, + const nghttp2_session_callbacks *callbacks, + void *user_data, const nghttp2_option *option); + +/** + * @function + * + * Like `nghttp2_session_server_new()`, but with additional options + * specified in the |option|. + * + * The |option| can be ``NULL`` and the call is equivalent to + * `nghttp2_session_server_new()`. + * + * This function does not take ownership |option|. The application is + * responsible for freeing |option| if it finishes using the object. + * + * The library code does not refer to |option| after this function + * returns. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int +nghttp2_session_server_new2(nghttp2_session **session_ptr, + const nghttp2_session_callbacks *callbacks, + void *user_data, const nghttp2_option *option); + +/** + * @function + * + * Like `nghttp2_session_client_new2()`, but with additional custom + * memory allocator specified in the |mem|. + * + * The |mem| can be ``NULL`` and the call is equivalent to + * `nghttp2_session_client_new2()`. + * + * This function does not take ownership |mem|. The application is + * responsible for freeing |mem|. + * + * The library code does not refer to |mem| pointer after this + * function returns, so the application can safely free it. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int nghttp2_session_client_new3( + nghttp2_session **session_ptr, const nghttp2_session_callbacks *callbacks, + void *user_data, const nghttp2_option *option, nghttp2_mem *mem); + +/** + * @function + * + * Like `nghttp2_session_server_new2()`, but with additional custom + * memory allocator specified in the |mem|. + * + * The |mem| can be ``NULL`` and the call is equivalent to + * `nghttp2_session_server_new2()`. + * + * This function does not take ownership |mem|. The application is + * responsible for freeing |mem|. + * + * The library code does not refer to |mem| pointer after this + * function returns, so the application can safely free it. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int nghttp2_session_server_new3( + nghttp2_session **session_ptr, const nghttp2_session_callbacks *callbacks, + void *user_data, const nghttp2_option *option, nghttp2_mem *mem); + +/** + * @function + * + * Frees any resources allocated for |session|. If |session| is + * ``NULL``, this function does nothing. + */ +NGHTTP2_EXTERN void nghttp2_session_del(nghttp2_session *session); + +/** + * @function + * + * Sends pending frames to the remote peer. + * + * This function retrieves the highest prioritized frame from the + * outbound queue and sends it to the remote peer. It does this as + * many as possible until the user callback + * :type:`nghttp2_send_callback` returns + * :enum:`NGHTTP2_ERR_WOULDBLOCK` or the outbound queue becomes empty. + * This function calls several callback functions which are passed + * when initializing the |session|. Here is the simple time chart + * which tells when each callback is invoked: + * + * 1. Get the next frame to send from outbound queue. + * + * 2. Prepare transmission of the frame. + * + * 3. If the control frame cannot be sent because some preconditions + * are not met (e.g., request HEADERS cannot be sent after GOAWAY), + * :type:`nghttp2_on_frame_not_send_callback` is invoked. Abort + * the following steps. + * + * 4. If the frame is HEADERS, PUSH_PROMISE or DATA, + * :type:`nghttp2_select_padding_callback` is invoked. + * + * 5. If the frame is request HEADERS, the stream is opened here. + * + * 6. :type:`nghttp2_before_frame_send_callback` is invoked. + * + * 7. If :enum:`NGHTTP2_ERR_CANCEL` is returned from + * :type:`nghttp2_before_frame_send_callback`, the current frame + * transmission is canceled, and + * :type:`nghttp2_on_frame_not_send_callback` is invoked. Abort + * the following steps. + * + * 8. :type:`nghttp2_send_callback` is invoked one or more times to + * send the frame. + * + * 9. :type:`nghttp2_on_frame_send_callback` is invoked. + * + * 10. If the transmission of the frame triggers closure of the + * stream, the stream is closed and + * :type:`nghttp2_on_stream_close_callback` is invoked. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` + * The callback function failed. + */ +NGHTTP2_EXTERN int nghttp2_session_send(nghttp2_session *session); + +/** + * @function + * + * Returns the serialized data to send. + * + * This function behaves like `nghttp2_session_send()` except that it + * does not use :type:`nghttp2_send_callback` to transmit data. + * Instead, it assigns the pointer to the serialized data to the + * |*data_ptr| and returns its length. The other callbacks are called + * in the same way as they are in `nghttp2_session_send()`. + * + * If no data is available to send, this function returns 0. + * + * This function may not return all serialized data in one invocation. + * To get all data, call this function repeatedly until it returns 0 + * or one of negative error codes. + * + * The assigned |*data_ptr| is valid until the next call of + * `nghttp2_session_mem_send()` or `nghttp2_session_send()`. + * + * The caller must send all data before sending the next chunk of + * data. + * + * This function returns the length of the data pointed by the + * |*data_ptr| if it succeeds, or one of the following negative error + * codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * + * .. note:: + * + * This function may produce very small byte string. If that is the + * case, and application disables Nagle algorithm (``TCP_NODELAY``), + * then writing this small chunk leads to very small packet, and it + * is very inefficient. An application should be responsible to + * buffer up small chunks of data as necessary to avoid this + * situation. + */ +NGHTTP2_EXTERN ssize_t +nghttp2_session_mem_send(nghttp2_session *session, const uint8_t **data_ptr); + +/** + * @function + * + * Receives frames from the remote peer. + * + * This function receives as many frames as possible until the user + * callback :type:`nghttp2_recv_callback` returns + * :enum:`NGHTTP2_ERR_WOULDBLOCK`. This function calls several + * callback functions which are passed when initializing the + * |session|. Here is the simple time chart which tells when each + * callback is invoked: + * + * 1. :type:`nghttp2_recv_callback` is invoked one or more times to + * receive frame header. + * + * 2. When frame header is received, + * :type:`nghttp2_on_begin_frame_callback` is invoked. + * + * 3. If the frame is DATA frame: + * + * 1. :type:`nghttp2_recv_callback` is invoked to receive DATA + * payload. For each chunk of data, + * :type:`nghttp2_on_data_chunk_recv_callback` is invoked. + * + * 2. If one DATA frame is completely received, + * :type:`nghttp2_on_frame_recv_callback` is invoked. If the + * reception of the frame triggers the closure of the stream, + * :type:`nghttp2_on_stream_close_callback` is invoked. + * + * 4. If the frame is the control frame: + * + * 1. :type:`nghttp2_recv_callback` is invoked one or more times to + * receive whole frame. + * + * 2. If the received frame is valid, then following actions are + * taken. If the frame is either HEADERS or PUSH_PROMISE, + * :type:`nghttp2_on_begin_headers_callback` is invoked. Then + * :type:`nghttp2_on_header_callback` is invoked for each header + * name/value pair. After all name/value pairs are emitted + * successfully, :type:`nghttp2_on_frame_recv_callback` is + * invoked. For other frames, + * :type:`nghttp2_on_frame_recv_callback` is invoked. If the + * reception of the frame triggers the closure of the stream, + * :type:`nghttp2_on_stream_close_callback` is invoked. + * + * 3. If the received frame is unpacked but is interpreted as + * invalid, :type:`nghttp2_on_invalid_frame_recv_callback` is + * invoked. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_EOF` + * The remote peer did shutdown on the connection. + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` + * The callback function failed. + * :enum:`NGHTTP2_ERR_BAD_CLIENT_MAGIC` + * Invalid client magic was detected. This error only returns + * when |session| was configured as server and + * `nghttp2_option_set_no_recv_client_magic()` is not used with + * nonzero value. + * :enum:`NGHTTP2_ERR_FLOODED` + * Flooding was detected in this HTTP/2 session, and it must be + * closed. This is most likely caused by misbehaviour of peer. + */ +NGHTTP2_EXTERN int nghttp2_session_recv(nghttp2_session *session); + +/** + * @function + * + * Processes data |in| as an input from the remote endpoint. The + * |inlen| indicates the number of bytes in the |in|. + * + * This function behaves like `nghttp2_session_recv()` except that it + * does not use :type:`nghttp2_recv_callback` to receive data; the + * |in| is the only data for the invocation of this function. If all + * bytes are processed, this function returns. The other callbacks + * are called in the same way as they are in `nghttp2_session_recv()`. + * + * In the current implementation, this function always tries to + * processes all input data unless either an error occurs or + * :enum:`NGHTTP2_ERR_PAUSE` is returned from + * :type:`nghttp2_on_header_callback` or + * :type:`nghttp2_on_data_chunk_recv_callback`. If + * :enum:`NGHTTP2_ERR_PAUSE` is used, the return value includes the + * number of bytes which was used to produce the data or frame for the + * callback. + * + * This function returns the number of processed bytes, or one of the + * following negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` + * The callback function failed. + * :enum:`NGHTTP2_ERR_BAD_CLIENT_MAGIC` + * Invalid client magic was detected. This error only returns + * when |session| was configured as server and + * `nghttp2_option_set_no_recv_client_magic()` is not used with + * nonzero value. + * :enum:`NGHTTP2_ERR_FLOODED` + * Flooding was detected in this HTTP/2 session, and it must be + * closed. This is most likely caused by misbehaviour of peer. + */ +NGHTTP2_EXTERN ssize_t nghttp2_session_mem_recv(nghttp2_session *session, + const uint8_t *in, + size_t inlen); + +/** + * @function + * + * Puts back previously deferred DATA frame in the stream |stream_id| + * to the outbound queue. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The stream does not exist; or no deferred data exist. + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int nghttp2_session_resume_data(nghttp2_session *session, + int32_t stream_id); + +/** + * @function + * + * Returns nonzero value if |session| wants to receive data from the + * remote peer. + * + * If both `nghttp2_session_want_read()` and + * `nghttp2_session_want_write()` return 0, the application should + * drop the connection. + */ +NGHTTP2_EXTERN int nghttp2_session_want_read(nghttp2_session *session); + +/** + * @function + * + * Returns nonzero value if |session| wants to send data to the remote + * peer. + * + * If both `nghttp2_session_want_read()` and + * `nghttp2_session_want_write()` return 0, the application should + * drop the connection. + */ +NGHTTP2_EXTERN int nghttp2_session_want_write(nghttp2_session *session); + +/** + * @function + * + * Returns stream_user_data for the stream |stream_id|. The + * stream_user_data is provided by `nghttp2_submit_request()`, + * `nghttp2_submit_headers()` or + * `nghttp2_session_set_stream_user_data()`. Unless it is set using + * `nghttp2_session_set_stream_user_data()`, if the stream is + * initiated by the remote endpoint, stream_user_data is always + * ``NULL``. If the stream does not exist, this function returns + * ``NULL``. + */ +NGHTTP2_EXTERN void * +nghttp2_session_get_stream_user_data(nghttp2_session *session, + int32_t stream_id); + +/** + * @function + * + * Sets the |stream_user_data| to the stream denoted by the + * |stream_id|. If a stream user data is already set to the stream, + * it is replaced with the |stream_user_data|. It is valid to specify + * ``NULL`` in the |stream_user_data|, which nullifies the associated + * data pointer. + * + * It is valid to set the |stream_user_data| to the stream reserved by + * PUSH_PROMISE frame. + * + * This function returns 0 if it succeeds, or one of following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The stream does not exist + */ +NGHTTP2_EXTERN int +nghttp2_session_set_stream_user_data(nghttp2_session *session, + int32_t stream_id, void *stream_user_data); + +/** + * @function + * + * Returns the number of frames in the outbound queue. This does not + * include the deferred DATA frames. + */ +NGHTTP2_EXTERN size_t +nghttp2_session_get_outbound_queue_size(nghttp2_session *session); + +/** + * @function + * + * Returns the number of DATA payload in bytes received without + * WINDOW_UPDATE transmission for the stream |stream_id|. The local + * (receive) window size can be adjusted by + * `nghttp2_submit_window_update()`. This function takes into account + * that and returns effective data length. In particular, if the + * local window size is reduced by submitting negative + * window_size_increment with `nghttp2_submit_window_update()`, this + * function returns the number of bytes less than actually received. + * + * This function returns -1 if it fails. + */ +NGHTTP2_EXTERN int32_t +nghttp2_session_get_stream_effective_recv_data_length(nghttp2_session *session, + int32_t stream_id); + +/** + * @function + * + * Returns the local (receive) window size for the stream |stream_id|. + * The local window size can be adjusted by + * `nghttp2_submit_window_update()`. This function takes into account + * that and returns effective window size. + * + * This function returns -1 if it fails. + */ +NGHTTP2_EXTERN int32_t +nghttp2_session_get_stream_effective_local_window_size(nghttp2_session *session, + int32_t stream_id); + +/** + * @function + * + * Returns the number of DATA payload in bytes received without + * WINDOW_UPDATE transmission for a connection. The local (receive) + * window size can be adjusted by `nghttp2_submit_window_update()`. + * This function takes into account that and returns effective data + * length. In particular, if the local window size is reduced by + * submitting negative window_size_increment with + * `nghttp2_submit_window_update()`, this function returns the number + * of bytes less than actually received. + * + * This function returns -1 if it fails. + */ +NGHTTP2_EXTERN int32_t +nghttp2_session_get_effective_recv_data_length(nghttp2_session *session); + +/** + * @function + * + * Returns the local (receive) window size for a connection. The + * local window size can be adjusted by + * `nghttp2_submit_window_update()`. This function takes into account + * that and returns effective window size. + * + * This function returns -1 if it fails. + */ +NGHTTP2_EXTERN int32_t +nghttp2_session_get_effective_local_window_size(nghttp2_session *session); + +/** + * @function + * + * Returns the remote window size for a given stream |stream_id|. + * + * This is the amount of flow-controlled payload (e.g., DATA) that the + * local endpoint can send without stream level WINDOW_UPDATE. There + * is also connection level flow control, so the effective size of + * payload that the local endpoint can actually send is + * min(`nghttp2_session_get_stream_remote_window_size()`, + * `nghttp2_session_get_remote_window_size()`). + * + * This function returns -1 if it fails. + */ +NGHTTP2_EXTERN int32_t +nghttp2_session_get_stream_remote_window_size(nghttp2_session *session, + int32_t stream_id); + +/** + * @function + * + * Returns the remote window size for a connection. + * + * This function always succeeds. + */ +NGHTTP2_EXTERN int32_t +nghttp2_session_get_remote_window_size(nghttp2_session *session); + +/** + * @function + * + * Returns 1 if local peer half closed the given stream |stream_id|. + * Returns 0 if it did not. Returns -1 if no such stream exists. + */ +NGHTTP2_EXTERN int +nghttp2_session_get_stream_local_close(nghttp2_session *session, + int32_t stream_id); + +/** + * @function + * + * Returns 1 if remote peer half closed the given stream |stream_id|. + * Returns 0 if it did not. Returns -1 if no such stream exists. + */ +NGHTTP2_EXTERN int +nghttp2_session_get_stream_remote_close(nghttp2_session *session, + int32_t stream_id); + +/** + * @function + * + * Signals the session so that the connection should be terminated. + * + * The last stream ID is the minimum value between the stream ID of a + * stream for which :type:`nghttp2_on_frame_recv_callback` was called + * most recently and the last stream ID we have sent to the peer + * previously. + * + * The |error_code| is the error code of this GOAWAY frame. The + * pre-defined error code is one of :enum:`nghttp2_error_code`. + * + * After the transmission, both `nghttp2_session_want_read()` and + * `nghttp2_session_want_write()` return 0. + * + * This function should be called when the connection should be + * terminated after sending GOAWAY. If the remaining streams should + * be processed after GOAWAY, use `nghttp2_submit_goaway()` instead. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int nghttp2_session_terminate_session(nghttp2_session *session, + uint32_t error_code); + +/** + * @function + * + * Signals the session so that the connection should be terminated. + * + * This function behaves like `nghttp2_session_terminate_session()`, + * but the last stream ID can be specified by the application for fine + * grained control of stream. The HTTP/2 specification does not allow + * last_stream_id to be increased. So the actual value sent as + * last_stream_id is the minimum value between the given + * |last_stream_id| and the last_stream_id we have previously sent to + * the peer. + * + * The |last_stream_id| is peer's stream ID or 0. So if |session| is + * initialized as client, |last_stream_id| must be even or 0. If + * |session| is initialized as server, |last_stream_id| must be odd or + * 0. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |last_stream_id| is invalid. + */ +NGHTTP2_EXTERN int nghttp2_session_terminate_session2(nghttp2_session *session, + int32_t last_stream_id, + uint32_t error_code); + +/** + * @function + * + * Signals to the client that the server started graceful shutdown + * procedure. + * + * This function is only usable for server. If this function is + * called with client side session, this function returns + * :enum:`NGHTTP2_ERR_INVALID_STATE`. + * + * To gracefully shutdown HTTP/2 session, server should call this + * function to send GOAWAY with last_stream_id (1u << 31) - 1. And + * after some delay (e.g., 1 RTT), send another GOAWAY with the stream + * ID that the server has some processing using + * `nghttp2_submit_goaway()`. See also + * `nghttp2_session_get_last_proc_stream_id()`. + * + * Unlike `nghttp2_submit_goaway()`, this function just sends GOAWAY + * and does nothing more. This is a mere indication to the client + * that session shutdown is imminent. The application should call + * `nghttp2_submit_goaway()` with appropriate last_stream_id after + * this call. + * + * If one or more GOAWAY frame have been already sent by either + * `nghttp2_submit_goaway()` or `nghttp2_session_terminate_session()`, + * this function has no effect. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_STATE` + * The |session| is initialized as client. + */ +NGHTTP2_EXTERN int nghttp2_submit_shutdown_notice(nghttp2_session *session); + +/** + * @function + * + * Returns the value of SETTINGS |id| notified by a remote endpoint. + * The |id| must be one of values defined in + * :enum:`nghttp2_settings_id`. + */ +NGHTTP2_EXTERN uint32_t +nghttp2_session_get_remote_settings(nghttp2_session *session, + nghttp2_settings_id id); + +/** + * @function + * + * Tells the |session| that next stream ID is |next_stream_id|. The + * |next_stream_id| must be equal or greater than the value returned + * by `nghttp2_session_get_next_stream_id()`. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |next_stream_id| is strictly less than the value + * `nghttp2_session_get_next_stream_id()` returns; or + * |next_stream_id| is invalid (e.g., even integer for client, or + * odd integer for server). + */ +NGHTTP2_EXTERN int nghttp2_session_set_next_stream_id(nghttp2_session *session, + int32_t next_stream_id); + +/** + * @function + * + * Returns the next outgoing stream ID. Notice that return type is + * uint32_t. If we run out of stream ID for this session, this + * function returns 1 << 31. + */ +NGHTTP2_EXTERN uint32_t +nghttp2_session_get_next_stream_id(nghttp2_session *session); + +/** + * @function + * + * Tells the |session| that |size| bytes for a stream denoted by + * |stream_id| were consumed by application and are ready to + * WINDOW_UPDATE. The consumed bytes are counted towards both + * connection and stream level WINDOW_UPDATE (see + * `nghttp2_session_consume_connection()` and + * `nghttp2_session_consume_stream()` to update consumption + * independently). This function is intended to be used without + * automatic window update (see + * `nghttp2_option_set_no_auto_window_update()`). + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |stream_id| is 0. + * :enum:`NGHTTP2_ERR_INVALID_STATE` + * Automatic WINDOW_UPDATE is not disabled. + */ +NGHTTP2_EXTERN int nghttp2_session_consume(nghttp2_session *session, + int32_t stream_id, size_t size); + +/** + * @function + * + * Like `nghttp2_session_consume()`, but this only tells library that + * |size| bytes were consumed only for connection level. Note that + * HTTP/2 maintains connection and stream level flow control windows + * independently. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_STATE` + * Automatic WINDOW_UPDATE is not disabled. + */ +NGHTTP2_EXTERN int nghttp2_session_consume_connection(nghttp2_session *session, + size_t size); + +/** + * @function + * + * Like `nghttp2_session_consume()`, but this only tells library that + * |size| bytes were consumed only for stream denoted by |stream_id|. + * Note that HTTP/2 maintains connection and stream level flow control + * windows independently. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |stream_id| is 0. + * :enum:`NGHTTP2_ERR_INVALID_STATE` + * Automatic WINDOW_UPDATE is not disabled. + */ +NGHTTP2_EXTERN int nghttp2_session_consume_stream(nghttp2_session *session, + int32_t stream_id, + size_t size); + +/** + * @function + * + * Changes priority of existing stream denoted by |stream_id|. The + * new priority specification is |pri_spec|. + * + * The priority is changed silently and instantly, and no PRIORITY + * frame will be sent to notify the peer of this change. This + * function may be useful for server to change the priority of pushed + * stream. + * + * If |session| is initialized as server, and ``pri_spec->stream_id`` + * points to the idle stream, the idle stream is created if it does + * not exist. The created idle stream will depend on root stream + * (stream 0) with weight 16. + * + * Otherwise, if stream denoted by ``pri_spec->stream_id`` is not + * found, we use default priority instead of given |pri_spec|. That + * is make stream depend on root stream with weight 16. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * Attempted to depend on itself; or no stream exist for the given + * |stream_id|; or |stream_id| is 0 + */ +NGHTTP2_EXTERN int +nghttp2_session_change_stream_priority(nghttp2_session *session, + int32_t stream_id, + const nghttp2_priority_spec *pri_spec); + +/** + * @function + * + * Creates idle stream with the given |stream_id|, and priority + * |pri_spec|. + * + * The stream creation is done without sending PRIORITY frame, which + * means that peer does not know about the existence of this idle + * stream in the local endpoint. + * + * RFC 7540 does not disallow the use of creation of idle stream with + * odd or even stream ID regardless of client or server. So this + * function can create odd or even stream ID regardless of client or + * server. But probably it is a bit safer to use the stream ID the + * local endpoint can initiate (in other words, use odd stream ID for + * client, and even stream ID for server), to avoid potential + * collision from peer's instruction. Also we can use + * `nghttp2_session_set_next_stream_id()` to avoid to open created + * idle streams accidentally if we follow this recommendation. + * + * If |session| is initialized as server, and ``pri_spec->stream_id`` + * points to the idle stream, the idle stream is created if it does + * not exist. The created idle stream will depend on root stream + * (stream 0) with weight 16. + * + * Otherwise, if stream denoted by ``pri_spec->stream_id`` is not + * found, we use default priority instead of given |pri_spec|. That + * is make stream depend on root stream with weight 16. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * Attempted to depend on itself; or stream denoted by |stream_id| + * already exists; or |stream_id| cannot be used to create idle + * stream (in other words, local endpoint has already opened + * stream ID greater than or equal to the given stream ID; or + * |stream_id| is 0 + */ +NGHTTP2_EXTERN int +nghttp2_session_create_idle_stream(nghttp2_session *session, int32_t stream_id, + const nghttp2_priority_spec *pri_spec); + +/** + * @function + * + * Performs post-process of HTTP Upgrade request. This function can + * be called from both client and server, but the behavior is very + * different in each other. + * + * .. warning:: + * + * This function is deprecated in favor of + * `nghttp2_session_upgrade2()`, because this function lacks the + * parameter to tell the library the request method used in the + * original HTTP request. This information is required for client + * to validate actual response body length against content-length + * header field (see `nghttp2_option_set_no_http_messaging()`). If + * HEAD is used in request, the length of response body must be 0 + * regardless of value included in content-length header field. + * + * If called from client side, the |settings_payload| must be the + * value sent in ``HTTP2-Settings`` header field and must be decoded + * by base64url decoder. The |settings_payloadlen| is the length of + * |settings_payload|. The |settings_payload| is unpacked and its + * setting values will be submitted using `nghttp2_submit_settings()`. + * This means that the client application code does not need to submit + * SETTINGS by itself. The stream with stream ID=1 is opened and the + * |stream_user_data| is used for its stream_user_data. The opened + * stream becomes half-closed (local) state. + * + * If called from server side, the |settings_payload| must be the + * value received in ``HTTP2-Settings`` header field and must be + * decoded by base64url decoder. The |settings_payloadlen| is the + * length of |settings_payload|. It is treated as if the SETTINGS + * frame with that payload is received. Thus, callback functions for + * the reception of SETTINGS frame will be invoked. The stream with + * stream ID=1 is opened. The |stream_user_data| is ignored. The + * opened stream becomes half-closed (remote). + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |settings_payload| is badly formed. + * :enum:`NGHTTP2_ERR_PROTO` + * The stream ID 1 is already used or closed; or is not available. + */ +NGHTTP2_EXTERN int nghttp2_session_upgrade(nghttp2_session *session, + const uint8_t *settings_payload, + size_t settings_payloadlen, + void *stream_user_data); + +/** + * @function + * + * Performs post-process of HTTP Upgrade request. This function can + * be called from both client and server, but the behavior is very + * different in each other. + * + * If called from client side, the |settings_payload| must be the + * value sent in ``HTTP2-Settings`` header field and must be decoded + * by base64url decoder. The |settings_payloadlen| is the length of + * |settings_payload|. The |settings_payload| is unpacked and its + * setting values will be submitted using `nghttp2_submit_settings()`. + * This means that the client application code does not need to submit + * SETTINGS by itself. The stream with stream ID=1 is opened and the + * |stream_user_data| is used for its stream_user_data. The opened + * stream becomes half-closed (local) state. + * + * If called from server side, the |settings_payload| must be the + * value received in ``HTTP2-Settings`` header field and must be + * decoded by base64url decoder. The |settings_payloadlen| is the + * length of |settings_payload|. It is treated as if the SETTINGS + * frame with that payload is received. Thus, callback functions for + * the reception of SETTINGS frame will be invoked. The stream with + * stream ID=1 is opened. The |stream_user_data| is ignored. The + * opened stream becomes half-closed (remote). + * + * If the request method is HEAD, pass nonzero value to + * |head_request|. Otherwise, pass 0. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |settings_payload| is badly formed. + * :enum:`NGHTTP2_ERR_PROTO` + * The stream ID 1 is already used or closed; or is not available. + */ +NGHTTP2_EXTERN int nghttp2_session_upgrade2(nghttp2_session *session, + const uint8_t *settings_payload, + size_t settings_payloadlen, + int head_request, + void *stream_user_data); + +/** + * @function + * + * Serializes the SETTINGS values |iv| in the |buf|. The size of the + * |buf| is specified by |buflen|. The number of entries in the |iv| + * array is given by |niv|. The required space in |buf| for the |niv| + * entries is ``8*niv`` bytes and if the given buffer is too small, an + * error is returned. This function is used mainly for creating a + * SETTINGS payload to be sent with the ``HTTP2-Settings`` header + * field in an HTTP Upgrade request. The data written in |buf| is NOT + * base64url encoded and the application is responsible for encoding. + * + * This function returns the number of bytes written in |buf|, or one + * of the following negative error codes: + * + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |iv| contains duplicate settings ID or invalid value. + * + * :enum:`NGHTTP2_ERR_INSUFF_BUFSIZE` + * The provided |buflen| size is too small to hold the output. + */ +NGHTTP2_EXTERN ssize_t +nghttp2_pack_settings_payload(uint8_t *buf, size_t buflen, + const nghttp2_settings_entry *iv, size_t niv); + +/** + * @function + * + * Returns string describing the |lib_error_code|. The + * |lib_error_code| must be one of the :enum:`nghttp2_error`. + */ +NGHTTP2_EXTERN const char *nghttp2_strerror(int lib_error_code); + +/** + * @function + * + * Returns string representation of HTTP/2 error code |error_code| + * (e.g., ``PROTOCOL_ERROR`` is returned if ``error_code == + * NGHTTP2_PROTOCOL_ERROR``). If string representation is unknown for + * given |error_code|, this function returns string ``unknown``. + */ +NGHTTP2_EXTERN const char *nghttp2_http2_strerror(uint32_t error_code); + +/** + * @function + * + * Initializes |pri_spec| with the |stream_id| of the stream to depend + * on with |weight| and its exclusive flag. If |exclusive| is + * nonzero, exclusive flag is set. + * + * The |weight| must be in [:enum:`NGHTTP2_MIN_WEIGHT`, + * :enum:`NGHTTP2_MAX_WEIGHT`], inclusive. + */ +NGHTTP2_EXTERN void nghttp2_priority_spec_init(nghttp2_priority_spec *pri_spec, + int32_t stream_id, + int32_t weight, int exclusive); + +/** + * @function + * + * Initializes |pri_spec| with the default values. The default values + * are: stream_id = 0, weight = :macro:`NGHTTP2_DEFAULT_WEIGHT` and + * exclusive = 0. + */ +NGHTTP2_EXTERN void +nghttp2_priority_spec_default_init(nghttp2_priority_spec *pri_spec); + +/** + * @function + * + * Returns nonzero if the |pri_spec| is filled with default values. + */ +NGHTTP2_EXTERN int +nghttp2_priority_spec_check_default(const nghttp2_priority_spec *pri_spec); + +/** + * @function + * + * Submits HEADERS frame and optionally one or more DATA frames. + * + * The |pri_spec| is priority specification of this request. ``NULL`` + * means the default priority (see + * `nghttp2_priority_spec_default_init()`). To specify the priority, + * use `nghttp2_priority_spec_init()`. If |pri_spec| is not ``NULL``, + * this function will copy its data members. + * + * The ``pri_spec->weight`` must be in [:enum:`NGHTTP2_MIN_WEIGHT`, + * :enum:`NGHTTP2_MAX_WEIGHT`], inclusive. If ``pri_spec->weight`` is + * strictly less than :enum:`NGHTTP2_MIN_WEIGHT`, it becomes + * :enum:`NGHTTP2_MIN_WEIGHT`. If it is strictly greater than + * :enum:`NGHTTP2_MAX_WEIGHT`, it becomes :enum:`NGHTTP2_MAX_WEIGHT`. + * + * The |nva| is an array of name/value pair :type:`nghttp2_nv` with + * |nvlen| elements. The application is responsible to include + * required pseudo-header fields (header field whose name starts with + * ":") in |nva| and must place pseudo-headers before regular header + * fields. + * + * This function creates copies of all name/value pairs in |nva|. It + * also lower-cases all names in |nva|. The order of elements in + * |nva| is preserved. For header fields with + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME` and + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set, header field name + * and value are not copied respectively. With + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME`, application is responsible to + * pass header field name in lowercase. The application should + * maintain the references to them until + * :type:`nghttp2_on_frame_send_callback` or + * :type:`nghttp2_on_frame_not_send_callback` is called. + * + * HTTP/2 specification has requirement about header fields in the + * request HEADERS. See the specification for more details. + * + * If |data_prd| is not ``NULL``, it provides data which will be sent + * in subsequent DATA frames. In this case, a method that allows + * request message bodies + * (https://tools.ietf.org/html/rfc7231#section-4) must be specified + * with ``:method`` key in |nva| (e.g. ``POST``). This function does + * not take ownership of the |data_prd|. The function copies the + * members of the |data_prd|. If |data_prd| is ``NULL``, HEADERS have + * END_STREAM set. The |stream_user_data| is data associated to the + * stream opened by this request and can be an arbitrary pointer, + * which can be retrieved later by + * `nghttp2_session_get_stream_user_data()`. + * + * This function returns assigned stream ID if it succeeds, or one of + * the following negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE` + * No stream ID is available because maximum stream ID was + * reached. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * Trying to depend on itself (new stream ID equals + * ``pri_spec->stream_id``). + * :enum:`NGHTTP2_ERR_PROTO` + * The |session| is server session. + * + * .. warning:: + * + * This function returns assigned stream ID if it succeeds. But + * that stream is not opened yet. The application must not submit + * frame to that stream ID before + * :type:`nghttp2_before_frame_send_callback` is called for this + * frame. + * + */ +NGHTTP2_EXTERN int32_t +nghttp2_submit_request(nghttp2_session *session, + const nghttp2_priority_spec *pri_spec, + const nghttp2_nv *nva, size_t nvlen, + const nghttp2_data_provider *data_prd, + void *stream_user_data); + +/** + * @function + * + * Submits response HEADERS frame and optionally one or more DATA + * frames against the stream |stream_id|. + * + * The |nva| is an array of name/value pair :type:`nghttp2_nv` with + * |nvlen| elements. The application is responsible to include + * required pseudo-header fields (header field whose name starts with + * ":") in |nva| and must place pseudo-headers before regular header + * fields. + * + * This function creates copies of all name/value pairs in |nva|. It + * also lower-cases all names in |nva|. The order of elements in + * |nva| is preserved. For header fields with + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME` and + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set, header field name + * and value are not copied respectively. With + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME`, application is responsible to + * pass header field name in lowercase. The application should + * maintain the references to them until + * :type:`nghttp2_on_frame_send_callback` or + * :type:`nghttp2_on_frame_not_send_callback` is called. + * + * HTTP/2 specification has requirement about header fields in the + * response HEADERS. See the specification for more details. + * + * If |data_prd| is not ``NULL``, it provides data which will be sent + * in subsequent DATA frames. This function does not take ownership + * of the |data_prd|. The function copies the members of the + * |data_prd|. If |data_prd| is ``NULL``, HEADERS will have + * END_STREAM flag set. + * + * This method can be used as normal HTTP response and push response. + * When pushing a resource using this function, the |session| must be + * configured using `nghttp2_session_server_new()` or its variants and + * the target stream denoted by the |stream_id| must be reserved using + * `nghttp2_submit_push_promise()`. + * + * To send non-final response headers (e.g., HTTP status 101), don't + * use this function because this function half-closes the outbound + * stream. Instead, use `nghttp2_submit_headers()` for this purpose. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |stream_id| is 0. + * :enum:`NGHTTP2_ERR_DATA_EXIST` + * DATA or HEADERS has been already submitted and not fully + * processed yet. Normally, this does not happen, but when + * application wrongly calls `nghttp2_submit_response()` twice, + * this may happen. + * :enum:`NGHTTP2_ERR_PROTO` + * The |session| is client session. + * + * .. warning:: + * + * Calling this function twice for the same stream ID may lead to + * program crash. It is generally considered to a programming error + * to commit response twice. + */ +NGHTTP2_EXTERN int +nghttp2_submit_response(nghttp2_session *session, int32_t stream_id, + const nghttp2_nv *nva, size_t nvlen, + const nghttp2_data_provider *data_prd); + +/** + * @function + * + * Submits trailer fields HEADERS against the stream |stream_id|. + * + * The |nva| is an array of name/value pair :type:`nghttp2_nv` with + * |nvlen| elements. The application is responsible not to include + * pseudo-header fields (header field whose name starts with ":") in + * |nva|. + * + * This function creates copies of all name/value pairs in |nva|. It + * also lower-cases all names in |nva|. The order of elements in + * |nva| is preserved. For header fields with + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME` and + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set, header field name + * and value are not copied respectively. With + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME`, application is responsible to + * pass header field name in lowercase. The application should + * maintain the references to them until + * :type:`nghttp2_on_frame_send_callback` or + * :type:`nghttp2_on_frame_not_send_callback` is called. + * + * For server, trailer fields must follow response HEADERS or response + * DATA without END_STREAM flat set. The library does not enforce + * this requirement, and applications should do this for themselves. + * If `nghttp2_submit_trailer()` is called before any response HEADERS + * submission (usually by `nghttp2_submit_response()`), the content of + * |nva| will be sent as response headers, which will result in error. + * + * This function has the same effect with `nghttp2_submit_headers()`, + * with flags = :enum:`NGHTTP2_FLAG_END_STREAM` and both pri_spec and + * stream_user_data to NULL. + * + * To submit trailer fields after `nghttp2_submit_response()` is + * called, the application has to specify + * :type:`nghttp2_data_provider` to `nghttp2_submit_response()`. + * Inside of :type:`nghttp2_data_source_read_callback`, when setting + * :enum:`NGHTTP2_DATA_FLAG_EOF`, also set + * :enum:`NGHTTP2_DATA_FLAG_NO_END_STREAM`. After that, the + * application can send trailer fields using + * `nghttp2_submit_trailer()`. `nghttp2_submit_trailer()` can be used + * inside :type:`nghttp2_data_source_read_callback`. + * + * This function returns 0 if it succeeds and |stream_id| is -1. + * Otherwise, this function returns 0 if it succeeds, or one of the + * following negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |stream_id| is 0. + */ +NGHTTP2_EXTERN int nghttp2_submit_trailer(nghttp2_session *session, + int32_t stream_id, + const nghttp2_nv *nva, size_t nvlen); + +/** + * @function + * + * Submits HEADERS frame. The |flags| is bitwise OR of the + * following values: + * + * * :enum:`NGHTTP2_FLAG_END_STREAM` + * + * If |flags| includes :enum:`NGHTTP2_FLAG_END_STREAM`, this frame has + * END_STREAM flag set. + * + * The library handles the CONTINUATION frame internally and it + * correctly sets END_HEADERS to the last sequence of the PUSH_PROMISE + * or CONTINUATION frame. + * + * If the |stream_id| is -1, this frame is assumed as request (i.e., + * request HEADERS frame which opens new stream). In this case, the + * assigned stream ID will be returned. Otherwise, specify stream ID + * in |stream_id|. + * + * The |pri_spec| is priority specification of this request. ``NULL`` + * means the default priority (see + * `nghttp2_priority_spec_default_init()`). To specify the priority, + * use `nghttp2_priority_spec_init()`. If |pri_spec| is not ``NULL``, + * this function will copy its data members. + * + * The ``pri_spec->weight`` must be in [:enum:`NGHTTP2_MIN_WEIGHT`, + * :enum:`NGHTTP2_MAX_WEIGHT`], inclusive. If ``pri_spec->weight`` is + * strictly less than :enum:`NGHTTP2_MIN_WEIGHT`, it becomes + * :enum:`NGHTTP2_MIN_WEIGHT`. If it is strictly greater than + * :enum:`NGHTTP2_MAX_WEIGHT`, it becomes :enum:`NGHTTP2_MAX_WEIGHT`. + * + * The |nva| is an array of name/value pair :type:`nghttp2_nv` with + * |nvlen| elements. The application is responsible to include + * required pseudo-header fields (header field whose name starts with + * ":") in |nva| and must place pseudo-headers before regular header + * fields. + * + * This function creates copies of all name/value pairs in |nva|. It + * also lower-cases all names in |nva|. The order of elements in + * |nva| is preserved. For header fields with + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME` and + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set, header field name + * and value are not copied respectively. With + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME`, application is responsible to + * pass header field name in lowercase. The application should + * maintain the references to them until + * :type:`nghttp2_on_frame_send_callback` or + * :type:`nghttp2_on_frame_not_send_callback` is called. + * + * The |stream_user_data| is a pointer to an arbitrary data which is + * associated to the stream this frame will open. Therefore it is + * only used if this frame opens streams, in other words, it changes + * stream state from idle or reserved to open. + * + * This function is low-level in a sense that the application code can + * specify flags directly. For usual HTTP request, + * `nghttp2_submit_request()` is useful. Likewise, for HTTP response, + * prefer `nghttp2_submit_response()`. + * + * This function returns newly assigned stream ID if it succeeds and + * |stream_id| is -1. Otherwise, this function returns 0 if it + * succeeds, or one of the following negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE` + * No stream ID is available because maximum stream ID was + * reached. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |stream_id| is 0; or trying to depend on itself (stream ID + * equals ``pri_spec->stream_id``). + * :enum:`NGHTTP2_ERR_DATA_EXIST` + * DATA or HEADERS has been already submitted and not fully + * processed yet. This happens if stream denoted by |stream_id| + * is in reserved state. + * :enum:`NGHTTP2_ERR_PROTO` + * The |stream_id| is -1, and |session| is server session. + * + * .. warning:: + * + * This function returns assigned stream ID if it succeeds and + * |stream_id| is -1. But that stream is not opened yet. The + * application must not submit frame to that stream ID before + * :type:`nghttp2_before_frame_send_callback` is called for this + * frame. + * + */ +NGHTTP2_EXTERN int32_t +nghttp2_submit_headers(nghttp2_session *session, uint8_t flags, + int32_t stream_id, const nghttp2_priority_spec *pri_spec, + const nghttp2_nv *nva, size_t nvlen, + void *stream_user_data); + +/** + * @function + * + * Submits one or more DATA frames to the stream |stream_id|. The + * data to be sent are provided by |data_prd|. If |flags| contains + * :enum:`NGHTTP2_FLAG_END_STREAM`, the last DATA frame has END_STREAM + * flag set. + * + * This function does not take ownership of the |data_prd|. The + * function copies the members of the |data_prd|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_DATA_EXIST` + * DATA or HEADERS has been already submitted and not fully + * processed yet. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |stream_id| is 0. + * :enum:`NGHTTP2_ERR_STREAM_CLOSED` + * The stream was already closed; or the |stream_id| is invalid. + * + * .. note:: + * + * Currently, only one DATA or HEADERS is allowed for a stream at a + * time. Submitting these frames more than once before first DATA + * or HEADERS is finished results in :enum:`NGHTTP2_ERR_DATA_EXIST` + * error code. The earliest callback which tells that previous + * frame is done is :type:`nghttp2_on_frame_send_callback`. In side + * that callback, new data can be submitted using + * `nghttp2_submit_data()`. Of course, all data except for last one + * must not have :enum:`NGHTTP2_FLAG_END_STREAM` flag set in + * |flags|. This sounds a bit complicated, and we recommend to use + * `nghttp2_submit_request()` and `nghttp2_submit_response()` to + * avoid this cascading issue. The experience shows that for HTTP + * use, these two functions are enough to implement both client and + * server. + */ +NGHTTP2_EXTERN int nghttp2_submit_data(nghttp2_session *session, uint8_t flags, + int32_t stream_id, + const nghttp2_data_provider *data_prd); + +/** + * @function + * + * Submits PRIORITY frame to change the priority of stream |stream_id| + * to the priority specification |pri_spec|. + * + * The |flags| is currently ignored and should be + * :enum:`NGHTTP2_FLAG_NONE`. + * + * The |pri_spec| is priority specification of this request. ``NULL`` + * is not allowed for this function. To specify the priority, use + * `nghttp2_priority_spec_init()`. This function will copy its data + * members. + * + * The ``pri_spec->weight`` must be in [:enum:`NGHTTP2_MIN_WEIGHT`, + * :enum:`NGHTTP2_MAX_WEIGHT`], inclusive. If ``pri_spec->weight`` is + * strictly less than :enum:`NGHTTP2_MIN_WEIGHT`, it becomes + * :enum:`NGHTTP2_MIN_WEIGHT`. If it is strictly greater than + * :enum:`NGHTTP2_MAX_WEIGHT`, it becomes :enum:`NGHTTP2_MAX_WEIGHT`. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |stream_id| is 0; or the |pri_spec| is NULL; or trying to + * depend on itself. + */ +NGHTTP2_EXTERN int +nghttp2_submit_priority(nghttp2_session *session, uint8_t flags, + int32_t stream_id, + const nghttp2_priority_spec *pri_spec); + +/** + * @function + * + * Submits RST_STREAM frame to cancel/reject the stream |stream_id| + * with the error code |error_code|. + * + * The pre-defined error code is one of :enum:`nghttp2_error_code`. + * + * The |flags| is currently ignored and should be + * :enum:`NGHTTP2_FLAG_NONE`. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |stream_id| is 0. + */ +NGHTTP2_EXTERN int nghttp2_submit_rst_stream(nghttp2_session *session, + uint8_t flags, int32_t stream_id, + uint32_t error_code); + +/** + * @function + * + * Stores local settings and submits SETTINGS frame. The |iv| is the + * pointer to the array of :type:`nghttp2_settings_entry`. The |niv| + * indicates the number of :type:`nghttp2_settings_entry`. + * + * The |flags| is currently ignored and should be + * :enum:`NGHTTP2_FLAG_NONE`. + * + * This function does not take ownership of the |iv|. This function + * copies all the elements in the |iv|. + * + * While updating individual stream's local window size, if the window + * size becomes strictly larger than NGHTTP2_MAX_WINDOW_SIZE, + * RST_STREAM is issued against such a stream. + * + * SETTINGS with :enum:`NGHTTP2_FLAG_ACK` is automatically submitted + * by the library and application could not send it at its will. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |iv| contains invalid value (e.g., initial window size + * strictly greater than (1 << 31) - 1. + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int nghttp2_submit_settings(nghttp2_session *session, + uint8_t flags, + const nghttp2_settings_entry *iv, + size_t niv); + +/** + * @function + * + * Submits PUSH_PROMISE frame. + * + * The |flags| is currently ignored. The library handles the + * CONTINUATION frame internally and it correctly sets END_HEADERS to + * the last sequence of the PUSH_PROMISE or CONTINUATION frame. + * + * The |stream_id| must be client initiated stream ID. + * + * The |nva| is an array of name/value pair :type:`nghttp2_nv` with + * |nvlen| elements. The application is responsible to include + * required pseudo-header fields (header field whose name starts with + * ":") in |nva| and must place pseudo-headers before regular header + * fields. + * + * This function creates copies of all name/value pairs in |nva|. It + * also lower-cases all names in |nva|. The order of elements in + * |nva| is preserved. For header fields with + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME` and + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set, header field name + * and value are not copied respectively. With + * :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME`, application is responsible to + * pass header field name in lowercase. The application should + * maintain the references to them until + * :type:`nghttp2_on_frame_send_callback` or + * :type:`nghttp2_on_frame_not_send_callback` is called. + * + * The |promised_stream_user_data| is a pointer to an arbitrary data + * which is associated to the promised stream this frame will open and + * make it in reserved state. It is available using + * `nghttp2_session_get_stream_user_data()`. The application can + * access it in :type:`nghttp2_before_frame_send_callback` and + * :type:`nghttp2_on_frame_send_callback` of this frame. + * + * The client side is not allowed to use this function. + * + * To submit response headers and data, use + * `nghttp2_submit_response()`. + * + * This function returns assigned promised stream ID if it succeeds, + * or one of the following negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_PROTO` + * This function was invoked when |session| is initialized as + * client. + * :enum:`NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE` + * No stream ID is available because maximum stream ID was + * reached. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |stream_id| is 0; The |stream_id| does not designate stream + * that peer initiated. + * :enum:`NGHTTP2_ERR_STREAM_CLOSED` + * The stream was already closed; or the |stream_id| is invalid. + * + * .. warning:: + * + * This function returns assigned promised stream ID if it succeeds. + * As of 1.16.0, stream object for pushed resource is created when + * this function succeeds. In that case, the application can submit + * push response for the promised frame. + * + * In 1.15.0 or prior versions, pushed stream is not opened yet when + * this function succeeds. The application must not submit frame to + * that stream ID before :type:`nghttp2_before_frame_send_callback` + * is called for this frame. + * + */ +NGHTTP2_EXTERN int32_t +nghttp2_submit_push_promise(nghttp2_session *session, uint8_t flags, + int32_t stream_id, const nghttp2_nv *nva, + size_t nvlen, void *promised_stream_user_data); + +/** + * @function + * + * Submits PING frame. You don't have to send PING back when you + * received PING frame. The library automatically submits PING frame + * in this case. + * + * The |flags| is bitwise OR of 0 or more of the following value. + * + * * :enum:`NGHTTP2_FLAG_ACK` + * + * Unless `nghttp2_option_set_no_auto_ping_ack()` is used, the |flags| + * should be :enum:`NGHTTP2_FLAG_NONE`. + * + * If the |opaque_data| is non ``NULL``, then it should point to the 8 + * bytes array of memory to specify opaque data to send with PING + * frame. If the |opaque_data| is ``NULL``, zero-cleared 8 bytes will + * be sent as opaque data. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int nghttp2_submit_ping(nghttp2_session *session, uint8_t flags, + const uint8_t *opaque_data); + +/** + * @function + * + * Submits GOAWAY frame with the last stream ID |last_stream_id| and + * the error code |error_code|. + * + * The pre-defined error code is one of :enum:`nghttp2_error_code`. + * + * The |flags| is currently ignored and should be + * :enum:`NGHTTP2_FLAG_NONE`. + * + * The |last_stream_id| is peer's stream ID or 0. So if |session| is + * initialized as client, |last_stream_id| must be even or 0. If + * |session| is initialized as server, |last_stream_id| must be odd or + * 0. + * + * The HTTP/2 specification says last_stream_id must not be increased + * from the value previously sent. So the actual value sent as + * last_stream_id is the minimum value between the given + * |last_stream_id| and the last_stream_id previously sent to the + * peer. + * + * If the |opaque_data| is not ``NULL`` and |opaque_data_len| is not + * zero, those data will be sent as additional debug data. The + * library makes a copy of the memory region pointed by |opaque_data| + * with the length |opaque_data_len|, so the caller does not need to + * keep this memory after the return of this function. If the + * |opaque_data_len| is 0, the |opaque_data| could be ``NULL``. + * + * After successful transmission of GOAWAY, following things happen. + * All incoming streams having strictly more than |last_stream_id| are + * closed. All incoming HEADERS which starts new stream are simply + * ignored. After all active streams are handled, both + * `nghttp2_session_want_read()` and `nghttp2_session_want_write()` + * return 0 and the application can close session. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |opaque_data_len| is too large; the |last_stream_id| is + * invalid. + */ +NGHTTP2_EXTERN int nghttp2_submit_goaway(nghttp2_session *session, + uint8_t flags, int32_t last_stream_id, + uint32_t error_code, + const uint8_t *opaque_data, + size_t opaque_data_len); + +/** + * @function + * + * Returns the last stream ID of a stream for which + * :type:`nghttp2_on_frame_recv_callback` was invoked most recently. + * The returned value can be used as last_stream_id parameter for + * `nghttp2_submit_goaway()` and + * `nghttp2_session_terminate_session2()`. + * + * This function always succeeds. + */ +NGHTTP2_EXTERN int32_t +nghttp2_session_get_last_proc_stream_id(nghttp2_session *session); + +/** + * @function + * + * Returns nonzero if new request can be sent from local endpoint. + * + * This function return 0 if request is not allowed for this session. + * There are several reasons why request is not allowed. Some of the + * reasons are: session is server; stream ID has been spent; GOAWAY + * has been sent or received. + * + * The application can call `nghttp2_submit_request()` without + * consulting this function. In that case, `nghttp2_submit_request()` + * may return error. Or, request is failed to sent, and + * :type:`nghttp2_on_stream_close_callback` is called. + */ +NGHTTP2_EXTERN int +nghttp2_session_check_request_allowed(nghttp2_session *session); + +/** + * @function + * + * Returns nonzero if |session| is initialized as server side session. + */ +NGHTTP2_EXTERN int +nghttp2_session_check_server_session(nghttp2_session *session); + +/** + * @function + * + * Submits WINDOW_UPDATE frame. + * + * The |flags| is currently ignored and should be + * :enum:`NGHTTP2_FLAG_NONE`. + * + * The |stream_id| is the stream ID to send this WINDOW_UPDATE. To + * send connection level WINDOW_UPDATE, specify 0 to |stream_id|. + * + * If the |window_size_increment| is positive, the WINDOW_UPDATE with + * that value as window_size_increment is queued. If the + * |window_size_increment| is larger than the received bytes from the + * remote endpoint, the local window size is increased by that + * difference. If the sole purpose is to increase the local window + * size, consider to use `nghttp2_session_set_local_window_size()`. + * + * If the |window_size_increment| is negative, the local window size + * is decreased by -|window_size_increment|. If automatic + * WINDOW_UPDATE is enabled + * (`nghttp2_option_set_no_auto_window_update()`), and the library + * decided that the WINDOW_UPDATE should be submitted, then + * WINDOW_UPDATE is queued with the current received bytes count. If + * the sole purpose is to decrease the local window size, consider to + * use `nghttp2_session_set_local_window_size()`. + * + * If the |window_size_increment| is 0, the function does nothing and + * returns 0. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_FLOW_CONTROL` + * The local window size overflow or gets negative. + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int nghttp2_submit_window_update(nghttp2_session *session, + uint8_t flags, + int32_t stream_id, + int32_t window_size_increment); + +/** + * @function + * + * Set local window size (local endpoints's window size) to the given + * |window_size| for the given stream denoted by |stream_id|. To + * change connection level window size, specify 0 to |stream_id|. To + * increase window size, this function may submit WINDOW_UPDATE frame + * to transmission queue. + * + * The |flags| is currently ignored and should be + * :enum:`NGHTTP2_FLAG_NONE`. + * + * This sounds similar to `nghttp2_submit_window_update()`, but there + * are 2 differences. The first difference is that this function + * takes the absolute value of window size to set, rather than the + * delta. To change the window size, this may be easier to use since + * the application just declares the intended window size, rather than + * calculating delta. The second difference is that + * `nghttp2_submit_window_update()` affects the received bytes count + * which has not acked yet. By the specification of + * `nghttp2_submit_window_update()`, to strictly increase the local + * window size, we have to submit delta including all received bytes + * count, which might not be desirable in some cases. On the other + * hand, this function does not affect the received bytes count. It + * just sets the local window size to the given value. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The |stream_id| is negative. + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int +nghttp2_session_set_local_window_size(nghttp2_session *session, uint8_t flags, + int32_t stream_id, int32_t window_size); + +/** + * @function + * + * Submits extension frame. + * + * Application can pass arbitrary frame flags and stream ID in |flags| + * and |stream_id| respectively. The |payload| is opaque pointer, and + * it can be accessible though ``frame->ext.payload`` in + * :type:`nghttp2_pack_extension_callback`. The library will not own + * passed |payload| pointer. + * + * The application must set :type:`nghttp2_pack_extension_callback` + * using `nghttp2_session_callbacks_set_pack_extension_callback()`. + * + * The application should retain the memory pointed by |payload| until + * the transmission of extension frame is done (which is indicated by + * :type:`nghttp2_on_frame_send_callback`), or transmission fails + * (which is indicated by :type:`nghttp2_on_frame_not_send_callback`). + * If application does not touch this memory region after packing it + * into a wire format, application can free it inside + * :type:`nghttp2_pack_extension_callback`. + * + * The standard HTTP/2 frame cannot be sent with this function, so + * |type| must be strictly grater than 0x9. Otherwise, this function + * will fail with error code :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_INVALID_STATE` + * If :type:`nghttp2_pack_extension_callback` is not set. + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * If |type| specifies standard HTTP/2 frame type. The frame + * types in the rage [0x0, 0x9], both inclusive, are standard + * HTTP/2 frame type, and cannot be sent using this function. + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory + */ +NGHTTP2_EXTERN int nghttp2_submit_extension(nghttp2_session *session, + uint8_t type, uint8_t flags, + int32_t stream_id, void *payload); + +/** + * @struct + * + * The payload of ALTSVC frame. ALTSVC frame is a non-critical + * extension to HTTP/2. If this frame is received, and + * `nghttp2_option_set_user_recv_extension_type()` is not set, and + * `nghttp2_option_set_builtin_recv_extension_type()` is set for + * :enum:`NGHTTP2_ALTSVC`, ``nghttp2_extension.payload`` will point to + * this struct. + * + * It has the following members: + */ +typedef struct { + /** + * The pointer to origin which this alternative service is + * associated with. This is not necessarily NULL-terminated. + */ + uint8_t *origin; + /** + * The length of the |origin|. + */ + size_t origin_len; + /** + * The pointer to Alt-Svc field value contained in ALTSVC frame. + * This is not necessarily NULL-terminated. + */ + uint8_t *field_value; + /** + * The length of the |field_value|. + */ + size_t field_value_len; +} nghttp2_ext_altsvc; + +/** + * @function + * + * Submits ALTSVC frame. + * + * ALTSVC frame is a non-critical extension to HTTP/2, and defined in + * is defined in `RFC 7383 + * `_. + * + * The |flags| is currently ignored and should be + * :enum:`NGHTTP2_FLAG_NONE`. + * + * The |origin| points to the origin this alternative service is + * associated with. The |origin_len| is the length of the origin. If + * |stream_id| is 0, the origin must be specified. If |stream_id| is + * not zero, the origin must be empty (in other words, |origin_len| + * must be 0). + * + * The ALTSVC frame is only usable from server side. If this function + * is invoked with client side session, this function returns + * :enum:`NGHTTP2_ERR_INVALID_STATE`. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory + * :enum:`NGHTTP2_ERR_INVALID_STATE` + * The function is called from client side session + * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT` + * The sum of |origin_len| and |field_value_len| is larger than + * 16382; or |origin_len| is 0 while |stream_id| is 0; or + * |origin_len| is not 0 while |stream_id| is not 0. + */ +NGHTTP2_EXTERN int nghttp2_submit_altsvc(nghttp2_session *session, + uint8_t flags, int32_t stream_id, + const uint8_t *origin, + size_t origin_len, + const uint8_t *field_value, + size_t field_value_len); + +/** + * @function + * + * Compares ``lhs->name`` of length ``lhs->namelen`` bytes and + * ``rhs->name`` of length ``rhs->namelen`` bytes. Returns negative + * integer if ``lhs->name`` is found to be less than ``rhs->name``; or + * returns positive integer if ``lhs->name`` is found to be greater + * than ``rhs->name``; or returns 0 otherwise. + */ +NGHTTP2_EXTERN int nghttp2_nv_compare_name(const nghttp2_nv *lhs, + const nghttp2_nv *rhs); + +/** + * @function + * + * A helper function for dealing with NPN in client side or ALPN in + * server side. The |in| contains peer's protocol list in preferable + * order. The format of |in| is length-prefixed and not + * null-terminated. For example, ``h2`` and + * ``http/1.1`` stored in |in| like this:: + * + * in[0] = 2 + * in[1..2] = "h2" + * in[3] = 8 + * in[4..11] = "http/1.1" + * inlen = 12 + * + * The selection algorithm is as follows: + * + * 1. If peer's list contains HTTP/2 protocol the library supports, + * it is selected and returns 1. The following step is not taken. + * + * 2. If peer's list contains ``http/1.1``, this function selects + * ``http/1.1`` and returns 0. The following step is not taken. + * + * 3. This function selects nothing and returns -1 (So called + * non-overlap case). In this case, |out| and |outlen| are left + * untouched. + * + * Selecting ``h2`` means that ``h2`` is written into |*out| and its + * length (which is 2) is assigned to |*outlen|. + * + * For ALPN, refer to https://tools.ietf.org/html/rfc7301 + * + * See http://technotes.googlecode.com/git/nextprotoneg.html for more + * details about NPN. + * + * For NPN, to use this method you should do something like:: + * + * static int select_next_proto_cb(SSL* ssl, + * unsigned char **out, + * unsigned char *outlen, + * const unsigned char *in, + * unsigned int inlen, + * void *arg) + * { + * int rv; + * rv = nghttp2_select_next_protocol(out, outlen, in, inlen); + * if (rv == -1) { + * return SSL_TLSEXT_ERR_NOACK; + * } + * if (rv == 1) { + * ((MyType*)arg)->http2_selected = 1; + * } + * return SSL_TLSEXT_ERR_OK; + * } + * ... + * SSL_CTX_set_next_proto_select_cb(ssl_ctx, select_next_proto_cb, my_obj); + * + */ +NGHTTP2_EXTERN int nghttp2_select_next_protocol(unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen); + +/** + * @function + * + * Returns a pointer to a nghttp2_info struct with version information + * about the run-time library in use. The |least_version| argument + * can be set to a 24 bit numerical value for the least accepted + * version number and if the condition is not met, this function will + * return a ``NULL``. Pass in 0 to skip the version checking. + */ +NGHTTP2_EXTERN nghttp2_info *nghttp2_version(int least_version); + +/** + * @function + * + * Returns nonzero if the :type:`nghttp2_error` library error code + * |lib_error| is fatal. + */ +NGHTTP2_EXTERN int nghttp2_is_fatal(int lib_error_code); + +/** + * @function + * + * Returns nonzero if HTTP header field name |name| of length |len| is + * valid according to http://tools.ietf.org/html/rfc7230#section-3.2 + * + * Because this is a header field name in HTTP2, the upper cased alphabet + * is treated as error. + */ +NGHTTP2_EXTERN int nghttp2_check_header_name(const uint8_t *name, size_t len); + +/** + * @function + * + * Returns nonzero if HTTP header field value |value| of length |len| + * is valid according to + * http://tools.ietf.org/html/rfc7230#section-3.2 + */ +NGHTTP2_EXTERN int nghttp2_check_header_value(const uint8_t *value, size_t len); + +/* HPACK API */ + +struct nghttp2_hd_deflater; + +/** + * @struct + * + * HPACK deflater object. + */ +typedef struct nghttp2_hd_deflater nghttp2_hd_deflater; + +/** + * @function + * + * Initializes |*deflater_ptr| for deflating name/values pairs. + * + * The |deflate_hd_table_bufsize_max| is the upper bound of header + * table size the deflater will use. + * + * If this function fails, |*deflater_ptr| is left untouched. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int nghttp2_hd_deflate_new(nghttp2_hd_deflater **deflater_ptr, + size_t deflate_hd_table_bufsize_max); + +/** + * @function + * + * Like `nghttp2_hd_deflate_new()`, but with additional custom memory + * allocator specified in the |mem|. + * + * The |mem| can be ``NULL`` and the call is equivalent to + * `nghttp2_hd_deflate_new()`. + * + * This function does not take ownership |mem|. The application is + * responsible for freeing |mem|. + * + * The library code does not refer to |mem| pointer after this + * function returns, so the application can safely free it. + */ +NGHTTP2_EXTERN int nghttp2_hd_deflate_new2(nghttp2_hd_deflater **deflater_ptr, + size_t deflate_hd_table_bufsize_max, + nghttp2_mem *mem); + +/** + * @function + * + * Deallocates any resources allocated for |deflater|. + */ +NGHTTP2_EXTERN void nghttp2_hd_deflate_del(nghttp2_hd_deflater *deflater); + +/** + * @function + * + * Changes header table size of the |deflater| to + * |settings_hd_table_bufsize_max| bytes. This may trigger eviction + * in the dynamic table. + * + * The |settings_hd_table_bufsize_max| should be the value received in + * SETTINGS_HEADER_TABLE_SIZE. + * + * The deflater never uses more memory than + * ``deflate_hd_table_bufsize_max`` bytes specified in + * `nghttp2_hd_deflate_new()`. Therefore, if + * |settings_hd_table_bufsize_max| > ``deflate_hd_table_bufsize_max``, + * resulting maximum table size becomes + * ``deflate_hd_table_bufsize_max``. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int +nghttp2_hd_deflate_change_table_size(nghttp2_hd_deflater *deflater, + size_t settings_hd_table_bufsize_max); + +/** + * @function + * + * Deflates the |nva|, which has the |nvlen| name/value pairs, into + * the |buf| of length |buflen|. + * + * If |buf| is not large enough to store the deflated header block, + * this function fails with :enum:`NGHTTP2_ERR_INSUFF_BUFSIZE`. The + * caller should use `nghttp2_hd_deflate_bound()` to know the upper + * bound of buffer size required to deflate given header name/value + * pairs. + * + * Once this function fails, subsequent call of this function always + * returns :enum:`NGHTTP2_ERR_HEADER_COMP`. + * + * After this function returns, it is safe to delete the |nva|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_HEADER_COMP` + * Deflation process has failed. + * :enum:`NGHTTP2_ERR_INSUFF_BUFSIZE` + * The provided |buflen| size is too small to hold the output. + */ +NGHTTP2_EXTERN ssize_t +nghttp2_hd_deflate_hd(nghttp2_hd_deflater *deflater, uint8_t *buf, + size_t buflen, const nghttp2_nv *nva, size_t nvlen); + +/** + * @function + * + * Returns an upper bound on the compressed size after deflation of + * |nva| of length |nvlen|. + */ +NGHTTP2_EXTERN size_t nghttp2_hd_deflate_bound(nghttp2_hd_deflater *deflater, + const nghttp2_nv *nva, + size_t nvlen); + +/** + * @function + * + * Returns the number of entries that header table of |deflater| + * contains. This is the sum of the number of static table and + * dynamic table, so the return value is at least 61. + */ +NGHTTP2_EXTERN +size_t nghttp2_hd_deflate_get_num_table_entries(nghttp2_hd_deflater *deflater); + +/** + * @function + * + * Returns the table entry denoted by |idx| from header table of + * |deflater|. The |idx| is 1-based, and idx=1 returns first entry of + * static table. idx=62 returns first entry of dynamic table if it + * exists. Specifying idx=0 is error, and this function returns NULL. + * If |idx| is strictly greater than the number of entries the tables + * contain, this function returns NULL. + */ +NGHTTP2_EXTERN +const nghttp2_nv * +nghttp2_hd_deflate_get_table_entry(nghttp2_hd_deflater *deflater, size_t idx); + +/** + * @function + * + * Returns the used dynamic table size, including the overhead 32 + * bytes per entry described in RFC 7541. + */ +NGHTTP2_EXTERN +size_t nghttp2_hd_deflate_get_dynamic_table_size(nghttp2_hd_deflater *deflater); + +/** + * @function + * + * Returns the maximum dynamic table size. + */ +NGHTTP2_EXTERN +size_t +nghttp2_hd_deflate_get_max_dynamic_table_size(nghttp2_hd_deflater *deflater); + +struct nghttp2_hd_inflater; + +/** + * @struct + * + * HPACK inflater object. + */ +typedef struct nghttp2_hd_inflater nghttp2_hd_inflater; + +/** + * @function + * + * Initializes |*inflater_ptr| for inflating name/values pairs. + * + * If this function fails, |*inflater_ptr| is left untouched. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +NGHTTP2_EXTERN int nghttp2_hd_inflate_new(nghttp2_hd_inflater **inflater_ptr); + +/** + * @function + * + * Like `nghttp2_hd_inflate_new()`, but with additional custom memory + * allocator specified in the |mem|. + * + * The |mem| can be ``NULL`` and the call is equivalent to + * `nghttp2_hd_inflate_new()`. + * + * This function does not take ownership |mem|. The application is + * responsible for freeing |mem|. + * + * The library code does not refer to |mem| pointer after this + * function returns, so the application can safely free it. + */ +NGHTTP2_EXTERN int nghttp2_hd_inflate_new2(nghttp2_hd_inflater **inflater_ptr, + nghttp2_mem *mem); + +/** + * @function + * + * Deallocates any resources allocated for |inflater|. + */ +NGHTTP2_EXTERN void nghttp2_hd_inflate_del(nghttp2_hd_inflater *inflater); + +/** + * @function + * + * Changes header table size in the |inflater|. This may trigger + * eviction in the dynamic table. + * + * The |settings_hd_table_bufsize_max| should be the value transmitted + * in SETTINGS_HEADER_TABLE_SIZE. + * + * This function must not be called while header block is being + * inflated. In other words, this function must be called after + * initialization of |inflater|, but before calling + * `nghttp2_hd_inflate_hd2()`, or after + * `nghttp2_hd_inflate_end_headers()`. Otherwise, + * `NGHTTP2_ERR_INVALID_STATE` was returned. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_INVALID_STATE` + * The function is called while header block is being inflated. + * Probably, application missed to call + * `nghttp2_hd_inflate_end_headers()`. + */ +NGHTTP2_EXTERN int +nghttp2_hd_inflate_change_table_size(nghttp2_hd_inflater *inflater, + size_t settings_hd_table_bufsize_max); + +/** + * @enum + * + * The flags for header inflation. + */ +typedef enum { + /** + * No flag set. + */ + NGHTTP2_HD_INFLATE_NONE = 0, + /** + * Indicates all headers were inflated. + */ + NGHTTP2_HD_INFLATE_FINAL = 0x01, + /** + * Indicates a header was emitted. + */ + NGHTTP2_HD_INFLATE_EMIT = 0x02 +} nghttp2_hd_inflate_flag; + +/** + * @function + * + * .. warning:: + * + * Deprecated. Use `nghttp2_hd_inflate_hd2()` instead. + * + * Inflates name/value block stored in |in| with length |inlen|. This + * function performs decompression. For each successful emission of + * header name/value pair, :enum:`NGHTTP2_HD_INFLATE_EMIT` is set in + * |*inflate_flags| and name/value pair is assigned to the |nv_out| + * and the function returns. The caller must not free the members of + * |nv_out|. + * + * The |nv_out| may include pointers to the memory region in the |in|. + * The caller must retain the |in| while the |nv_out| is used. + * + * The application should call this function repeatedly until the + * ``(*inflate_flags) & NGHTTP2_HD_INFLATE_FINAL`` is nonzero and + * return value is non-negative. This means the all input values are + * processed successfully. Then the application must call + * `nghttp2_hd_inflate_end_headers()` to prepare for the next header + * block input. + * + * The caller can feed complete compressed header block. It also can + * feed it in several chunks. The caller must set |in_final| to + * nonzero if the given input is the last block of the compressed + * header. + * + * This function returns the number of bytes processed if it succeeds, + * or one of the following negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_HEADER_COMP` + * Inflation process has failed. + * :enum:`NGHTTP2_ERR_BUFFER_ERROR` + * The header field name or value is too large. + * + * Example follows:: + * + * int inflate_header_block(nghttp2_hd_inflater *hd_inflater, + * uint8_t *in, size_t inlen, int final) + * { + * ssize_t rv; + * + * for(;;) { + * nghttp2_nv nv; + * int inflate_flags = 0; + * + * rv = nghttp2_hd_inflate_hd(hd_inflater, &nv, &inflate_flags, + * in, inlen, final); + * + * if(rv < 0) { + * fprintf(stderr, "inflate failed with error code %zd", rv); + * return -1; + * } + * + * in += rv; + * inlen -= rv; + * + * if(inflate_flags & NGHTTP2_HD_INFLATE_EMIT) { + * fwrite(nv.name, nv.namelen, 1, stderr); + * fprintf(stderr, ": "); + * fwrite(nv.value, nv.valuelen, 1, stderr); + * fprintf(stderr, "\n"); + * } + * if(inflate_flags & NGHTTP2_HD_INFLATE_FINAL) { + * nghttp2_hd_inflate_end_headers(hd_inflater); + * break; + * } + * if((inflate_flags & NGHTTP2_HD_INFLATE_EMIT) == 0 && + * inlen == 0) { + * break; + * } + * } + * + * return 0; + * } + * + */ +NGHTTP2_EXTERN ssize_t nghttp2_hd_inflate_hd(nghttp2_hd_inflater *inflater, + nghttp2_nv *nv_out, + int *inflate_flags, uint8_t *in, + size_t inlen, int in_final); + +/** + * @function + * + * Inflates name/value block stored in |in| with length |inlen|. This + * function performs decompression. For each successful emission of + * header name/value pair, :enum:`NGHTTP2_HD_INFLATE_EMIT` is set in + * |*inflate_flags| and name/value pair is assigned to the |nv_out| + * and the function returns. The caller must not free the members of + * |nv_out|. + * + * The |nv_out| may include pointers to the memory region in the |in|. + * The caller must retain the |in| while the |nv_out| is used. + * + * The application should call this function repeatedly until the + * ``(*inflate_flags) & NGHTTP2_HD_INFLATE_FINAL`` is nonzero and + * return value is non-negative. This means the all input values are + * processed successfully. Then the application must call + * `nghttp2_hd_inflate_end_headers()` to prepare for the next header + * block input. + * + * The caller can feed complete compressed header block. It also can + * feed it in several chunks. The caller must set |in_final| to + * nonzero if the given input is the last block of the compressed + * header. + * + * This function returns the number of bytes processed if it succeeds, + * or one of the following negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + * :enum:`NGHTTP2_ERR_HEADER_COMP` + * Inflation process has failed. + * :enum:`NGHTTP2_ERR_BUFFER_ERROR` + * The header field name or value is too large. + * + * Example follows:: + * + * int inflate_header_block(nghttp2_hd_inflater *hd_inflater, + * uint8_t *in, size_t inlen, int final) + * { + * ssize_t rv; + * + * for(;;) { + * nghttp2_nv nv; + * int inflate_flags = 0; + * + * rv = nghttp2_hd_inflate_hd2(hd_inflater, &nv, &inflate_flags, + * in, inlen, final); + * + * if(rv < 0) { + * fprintf(stderr, "inflate failed with error code %zd", rv); + * return -1; + * } + * + * in += rv; + * inlen -= rv; + * + * if(inflate_flags & NGHTTP2_HD_INFLATE_EMIT) { + * fwrite(nv.name, nv.namelen, 1, stderr); + * fprintf(stderr, ": "); + * fwrite(nv.value, nv.valuelen, 1, stderr); + * fprintf(stderr, "\n"); + * } + * if(inflate_flags & NGHTTP2_HD_INFLATE_FINAL) { + * nghttp2_hd_inflate_end_headers(hd_inflater); + * break; + * } + * if((inflate_flags & NGHTTP2_HD_INFLATE_EMIT) == 0 && + * inlen == 0) { + * break; + * } + * } + * + * return 0; + * } + * + */ +NGHTTP2_EXTERN ssize_t +nghttp2_hd_inflate_hd2(nghttp2_hd_inflater *inflater, nghttp2_nv *nv_out, + int *inflate_flags, const uint8_t *in, size_t inlen, + int in_final); + +/** + * @function + * + * Signals the end of decompression for one header block. + * + * This function returns 0 if it succeeds. Currently this function + * always succeeds. + */ +NGHTTP2_EXTERN int +nghttp2_hd_inflate_end_headers(nghttp2_hd_inflater *inflater); + +/** + * @function + * + * Returns the number of entries that header table of |inflater| + * contains. This is the sum of the number of static table and + * dynamic table, so the return value is at least 61. + */ +NGHTTP2_EXTERN +size_t nghttp2_hd_inflate_get_num_table_entries(nghttp2_hd_inflater *inflater); + +/** + * @function + * + * Returns the table entry denoted by |idx| from header table of + * |inflater|. The |idx| is 1-based, and idx=1 returns first entry of + * static table. idx=62 returns first entry of dynamic table if it + * exists. Specifying idx=0 is error, and this function returns NULL. + * If |idx| is strictly greater than the number of entries the tables + * contain, this function returns NULL. + */ +NGHTTP2_EXTERN +const nghttp2_nv * +nghttp2_hd_inflate_get_table_entry(nghttp2_hd_inflater *inflater, size_t idx); + +/** + * @function + * + * Returns the used dynamic table size, including the overhead 32 + * bytes per entry described in RFC 7541. + */ +NGHTTP2_EXTERN +size_t nghttp2_hd_inflate_get_dynamic_table_size(nghttp2_hd_inflater *inflater); + +/** + * @function + * + * Returns the maximum dynamic table size. + */ +NGHTTP2_EXTERN +size_t +nghttp2_hd_inflate_get_max_dynamic_table_size(nghttp2_hd_inflater *inflater); + +struct nghttp2_stream; + +/** + * @struct + * + * The structure to represent HTTP/2 stream. The details of this + * structure are intentionally hidden from the public API. + */ +typedef struct nghttp2_stream nghttp2_stream; + +/** + * @function + * + * Returns pointer to :type:`nghttp2_stream` object denoted by + * |stream_id|. If stream was not found, returns NULL. + * + * Returns imaginary root stream (see + * `nghttp2_session_get_root_stream()`) if 0 is given in |stream_id|. + * + * Unless |stream_id| == 0, the returned pointer is valid until next + * call of `nghttp2_session_send()`, `nghttp2_session_mem_send()`, + * `nghttp2_session_recv()`, and `nghttp2_session_mem_recv()`. + */ +NGHTTP2_EXTERN nghttp2_stream * +nghttp2_session_find_stream(nghttp2_session *session, int32_t stream_id); + +/** + * @enum + * + * State of stream as described in RFC 7540. + */ +typedef enum { + /** + * idle state. + */ + NGHTTP2_STREAM_STATE_IDLE = 1, + /** + * open state. + */ + NGHTTP2_STREAM_STATE_OPEN, + /** + * reserved (local) state. + */ + NGHTTP2_STREAM_STATE_RESERVED_LOCAL, + /** + * reserved (remote) state. + */ + NGHTTP2_STREAM_STATE_RESERVED_REMOTE, + /** + * half closed (local) state. + */ + NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL, + /** + * half closed (remote) state. + */ + NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE, + /** + * closed state. + */ + NGHTTP2_STREAM_STATE_CLOSED +} nghttp2_stream_proto_state; + +/** + * @function + * + * Returns state of |stream|. The root stream retrieved by + * `nghttp2_session_get_root_stream()` will have stream state + * :enum:`NGHTTP2_STREAM_STATE_IDLE`. + */ +NGHTTP2_EXTERN nghttp2_stream_proto_state +nghttp2_stream_get_state(nghttp2_stream *stream); + +/** + * @function + * + * Returns root of dependency tree, which is imaginary stream with + * stream ID 0. The returned pointer is valid until |session| is + * freed by `nghttp2_session_del()`. + */ +NGHTTP2_EXTERN nghttp2_stream * +nghttp2_session_get_root_stream(nghttp2_session *session); + +/** + * @function + * + * Returns the parent stream of |stream| in dependency tree. Returns + * NULL if there is no such stream. + */ +NGHTTP2_EXTERN nghttp2_stream * +nghttp2_stream_get_parent(nghttp2_stream *stream); + +NGHTTP2_EXTERN int32_t nghttp2_stream_get_stream_id(nghttp2_stream *stream); + +/** + * @function + * + * Returns the next sibling stream of |stream| in dependency tree. + * Returns NULL if there is no such stream. + */ +NGHTTP2_EXTERN nghttp2_stream * +nghttp2_stream_get_next_sibling(nghttp2_stream *stream); + +/** + * @function + * + * Returns the previous sibling stream of |stream| in dependency tree. + * Returns NULL if there is no such stream. + */ +NGHTTP2_EXTERN nghttp2_stream * +nghttp2_stream_get_previous_sibling(nghttp2_stream *stream); + +/** + * @function + * + * Returns the first child stream of |stream| in dependency tree. + * Returns NULL if there is no such stream. + */ +NGHTTP2_EXTERN nghttp2_stream * +nghttp2_stream_get_first_child(nghttp2_stream *stream); + +/** + * @function + * + * Returns dependency weight to the parent stream of |stream|. + */ +NGHTTP2_EXTERN int32_t nghttp2_stream_get_weight(nghttp2_stream *stream); + +/** + * @function + * + * Returns the sum of the weight for |stream|'s children. + */ +NGHTTP2_EXTERN int32_t +nghttp2_stream_get_sum_dependency_weight(nghttp2_stream *stream); + +#ifdef __cplusplus +} +#endif + +#endif /* NGHTTP2_H */ diff --git a/tools/sdk/include/nghttp/nghttp2/nghttp2ver.h b/tools/sdk/include/nghttp/nghttp2/nghttp2ver.h new file mode 100644 index 00000000..a12cb708 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2/nghttp2ver.h @@ -0,0 +1,42 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012, 2013 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2VER_H +#define NGHTTP2VER_H + +/** + * @macro + * Version number of the nghttp2 library release + */ +#define NGHTTP2_VERSION "@PACKAGE_VERSION@" + +/** + * @macro + * Numerical representation of the version number of the nghttp2 library + * release. This is a 24 bit number with 8 bits for major number, 8 bits + * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203. + */ +#define NGHTTP2_VERSION_NUM 0x010203 + +#endif /* NGHTTP2VER_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_buf.h b/tools/sdk/include/nghttp/nghttp2_buf.h new file mode 100644 index 00000000..6770d6f3 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_buf.h @@ -0,0 +1,388 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2014 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_BUF_H +#define NGHTTP2_BUF_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include + +#include "nghttp2_int.h" +#include "nghttp2_mem.h" + +typedef struct { + /* This points to the beginning of the buffer. The effective range + of buffer is [begin, end). */ + uint8_t *begin; + /* This points to the memory one byte beyond the end of the + buffer. */ + uint8_t *end; + /* The position indicator for effective start of the buffer. pos <= + last must be hold. */ + uint8_t *pos; + /* The position indicator for effective one beyond of the end of the + buffer. last <= end must be hold. */ + uint8_t *last; + /* Mark arbitrary position in buffer [begin, end) */ + uint8_t *mark; +} nghttp2_buf; + +#define nghttp2_buf_len(BUF) ((size_t)((BUF)->last - (BUF)->pos)) +#define nghttp2_buf_avail(BUF) ((size_t)((BUF)->end - (BUF)->last)) +#define nghttp2_buf_mark_avail(BUF) ((size_t)((BUF)->mark - (BUF)->last)) +#define nghttp2_buf_cap(BUF) ((size_t)((BUF)->end - (BUF)->begin)) + +#define nghttp2_buf_pos_offset(BUF) ((size_t)((BUF)->pos - (BUF)->begin)) +#define nghttp2_buf_last_offset(BUF) ((size_t)((BUF)->last - (BUF)->begin)) + +#define nghttp2_buf_shift_right(BUF, AMT) \ + do { \ + (BUF)->pos += AMT; \ + (BUF)->last += AMT; \ + } while (0) + +#define nghttp2_buf_shift_left(BUF, AMT) \ + do { \ + (BUF)->pos -= AMT; \ + (BUF)->last -= AMT; \ + } while (0) + +/* + * Initializes the |buf|. No memory is allocated in this function. Use + * nghttp2_buf_reserve() to allocate memory. + */ +void nghttp2_buf_init(nghttp2_buf *buf); + +/* + * Initializes the |buf| and allocates at least |initial| bytes of + * memory. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_buf_init2(nghttp2_buf *buf, size_t initial, nghttp2_mem *mem); + +/* + * Frees buffer in |buf|. + */ +void nghttp2_buf_free(nghttp2_buf *buf, nghttp2_mem *mem); + +/* + * Extends buffer so that nghttp2_buf_cap() returns at least + * |new_cap|. If extensions took place, buffer pointers in |buf| will + * change. + * + * This function returns 0 if it succeeds, or one of the followings + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_buf_reserve(nghttp2_buf *buf, size_t new_cap, nghttp2_mem *mem); + +/* + * Resets pos, last, mark member of |buf| to buf->begin. + */ +void nghttp2_buf_reset(nghttp2_buf *buf); + +/* + * Initializes |buf| using supplied buffer |begin| of length + * |len|. Semantically, the application should not call *_reserve() or + * nghttp2_free() functions for |buf|. + */ +void nghttp2_buf_wrap_init(nghttp2_buf *buf, uint8_t *begin, size_t len); + +struct nghttp2_buf_chain; + +typedef struct nghttp2_buf_chain nghttp2_buf_chain; + +/* Chains 2 buffers */ +struct nghttp2_buf_chain { + /* Points to the subsequent buffer. NULL if there is no such + buffer. */ + nghttp2_buf_chain *next; + nghttp2_buf buf; +}; + +typedef struct { + /* Points to the first buffer */ + nghttp2_buf_chain *head; + /* Buffer pointer where write occurs. */ + nghttp2_buf_chain *cur; + /* Memory allocator */ + nghttp2_mem *mem; + /* The buffer capacity of each buf */ + size_t chunk_length; + /* The maximum number of nghttp2_buf_chain */ + size_t max_chunk; + /* The number of nghttp2_buf_chain allocated */ + size_t chunk_used; + /* The number of nghttp2_buf_chain to keep on reset */ + size_t chunk_keep; + /* pos offset from begin in each buffers. On initialization and + reset, buf->pos and buf->last are positioned at buf->begin + + offset. */ + size_t offset; +} nghttp2_bufs; + +/* + * This is the same as calling nghttp2_bufs_init2 with the given + * arguments and offset = 0. + */ +int nghttp2_bufs_init(nghttp2_bufs *bufs, size_t chunk_length, size_t max_chunk, + nghttp2_mem *mem); + +/* + * This is the same as calling nghttp2_bufs_init3 with the given + * arguments and chunk_keep = max_chunk. + */ +int nghttp2_bufs_init2(nghttp2_bufs *bufs, size_t chunk_length, + size_t max_chunk, size_t offset, nghttp2_mem *mem); + +/* + * Initializes |bufs|. Each buffer size is given in the + * |chunk_length|. The maximum number of buffers is given in the + * |max_chunk|. On reset, first |chunk_keep| buffers are kept and + * remaining buffers are deleted. Each buffer will have bufs->pos and + * bufs->last shifted to left by |offset| bytes on creation and reset. + * + * This function allocates first buffer. bufs->head and bufs->cur + * will point to the first buffer after this call. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_INVALID_ARGUMENT + * chunk_keep is 0; or max_chunk < chunk_keep; or offset is too + * long. + */ +int nghttp2_bufs_init3(nghttp2_bufs *bufs, size_t chunk_length, + size_t max_chunk, size_t chunk_keep, size_t offset, + nghttp2_mem *mem); + +/* + * Frees any related resources to the |bufs|. + */ +void nghttp2_bufs_free(nghttp2_bufs *bufs); + +/* + * Initializes |bufs| using supplied buffer |begin| of length |len|. + * The first buffer bufs->head uses buffer |begin|. The buffer size + * is fixed and no allocate extra chunk buffer is allocated. In other + * words, max_chunk = chunk_keep = 1. To free the resource allocated + * for |bufs|, use nghttp2_bufs_wrap_free(). + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_bufs_wrap_init(nghttp2_bufs *bufs, uint8_t *begin, size_t len, + nghttp2_mem *mem); + +/* + * Frees any related resource to the |bufs|. This function does not + * free supplied buffer provided in nghttp2_bufs_wrap_init(). + */ +void nghttp2_bufs_wrap_free(nghttp2_bufs *bufs); + +/* + * Reallocates internal buffer using |chunk_length|. The max_chunk, + * chunk_keep and offset do not change. After successful allocation + * of new buffer, previous buffers are deallocated without copying + * anything into new buffers. chunk_used is reset to 1. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_INVALID_ARGUMENT + * chunk_length < offset + */ +int nghttp2_bufs_realloc(nghttp2_bufs *bufs, size_t chunk_length); + +/* + * Appends the |data| of length |len| to the |bufs|. The write starts + * at bufs->cur->buf.last. A new buffers will be allocated to store + * all data. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_BUFFER_ERROR + * Out of buffer space. + */ +int nghttp2_bufs_add(nghttp2_bufs *bufs, const void *data, size_t len); + +/* + * Appends a single byte |b| to the |bufs|. The write starts at + * bufs->cur->buf.last. A new buffers will be allocated to store all + * data. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_BUFFER_ERROR + * Out of buffer space. + */ +int nghttp2_bufs_addb(nghttp2_bufs *bufs, uint8_t b); + +/* + * Behaves like nghttp2_bufs_addb(), but this does not update + * buf->last pointer. + */ +int nghttp2_bufs_addb_hold(nghttp2_bufs *bufs, uint8_t b); + +#define nghttp2_bufs_fast_addb(BUFS, B) \ + do { \ + *(BUFS)->cur->buf.last++ = B; \ + } while (0) + +#define nghttp2_bufs_fast_addb_hold(BUFS, B) \ + do { \ + *(BUFS)->cur->buf.last = B; \ + } while (0) + +/* + * Performs bitwise-OR of |b| at bufs->cur->buf.last. A new buffers + * will be allocated if necessary. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_BUFFER_ERROR + * Out of buffer space. + */ +int nghttp2_bufs_orb(nghttp2_bufs *bufs, uint8_t b); + +/* + * Behaves like nghttp2_bufs_orb(), but does not update buf->last + * pointer. + */ +int nghttp2_bufs_orb_hold(nghttp2_bufs *bufs, uint8_t b); + +#define nghttp2_bufs_fast_orb(BUFS, B) \ + do { \ + uint8_t **p = &(BUFS)->cur->buf.last; \ + **p = (uint8_t)(**p | (B)); \ + ++(*p); \ + } while (0) + +#define nghttp2_bufs_fast_orb_hold(BUFS, B) \ + do { \ + uint8_t *p = (BUFS)->cur->buf.last; \ + *p = (uint8_t)(*p | (B)); \ + } while (0) + +/* + * Copies all data stored in |bufs| to the contiguous buffer. This + * function allocates the contiguous memory to store all data in + * |bufs| and assigns it to |*out|. + * + * The contents of |bufs| is left unchanged. + * + * This function returns the length of copied data and assigns the + * pointer to copied data to |*out| if it succeeds, or one of the + * following negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +ssize_t nghttp2_bufs_remove(nghttp2_bufs *bufs, uint8_t **out); + +/* + * Copies all data stored in |bufs| to |out|. This function assumes + * that the buffer space pointed by |out| has at least + * nghttp2_bufs(bufs) bytes. + * + * The contents of |bufs| is left unchanged. + * + * This function returns the length of copied data. + */ +size_t nghttp2_bufs_remove_copy(nghttp2_bufs *bufs, uint8_t *out); + +/* + * Resets |bufs| and makes the buffers empty. + */ +void nghttp2_bufs_reset(nghttp2_bufs *bufs); + +/* + * Moves bufs->cur to bufs->cur->next. If resulting bufs->cur is + * NULL, this function allocates new buffers and bufs->cur points to + * it. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + * NGHTTP2_ERR_BUFFER_ERROR + * Out of buffer space. + */ +int nghttp2_bufs_advance(nghttp2_bufs *bufs); + +/* Sets bufs->cur to bufs->head */ +#define nghttp2_bufs_rewind(BUFS) \ + do { \ + (BUFS)->cur = (BUFS)->head; \ + } while (0) + +/* + * Move bufs->cur, from the current position, using next member, to + * the last buf which has nghttp2_buf_len(buf) > 0 without seeing buf + * which satisfies nghttp2_buf_len(buf) == 0. If + * nghttp2_buf_len(&bufs->cur->buf) == 0 or bufs->cur->next is NULL, + * bufs->cur is unchanged. + */ +void nghttp2_bufs_seek_last_present(nghttp2_bufs *bufs); + +/* + * Returns nonzero if bufs->cur->next is not emtpy. + */ +int nghttp2_bufs_next_present(nghttp2_bufs *bufs); + +#define nghttp2_bufs_cur_avail(BUFS) nghttp2_buf_avail(&(BUFS)->cur->buf) + +/* + * Returns the buffer length of |bufs|. + */ +size_t nghttp2_bufs_len(nghttp2_bufs *bufs); + +#endif /* NGHTTP2_BUF_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_callbacks.h b/tools/sdk/include/nghttp/nghttp2_callbacks.h new file mode 100644 index 00000000..5f08474a --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_callbacks.h @@ -0,0 +1,117 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2014 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_CALLBACKS_H +#define NGHTTP2_CALLBACKS_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include + +/* + * Callback functions. + */ +struct nghttp2_session_callbacks { + /** + * Callback function invoked when the session wants to send data to + * the remote peer. This callback is not necessary if the + * application uses solely `nghttp2_session_mem_send()` to serialize + * data to transmit. + */ + nghttp2_send_callback send_callback; + /** + * Callback function invoked when the session wants to receive data + * from the remote peer. This callback is not necessary if the + * application uses solely `nghttp2_session_mem_recv()` to process + * received data. + */ + nghttp2_recv_callback recv_callback; + /** + * Callback function invoked by `nghttp2_session_recv()` when a + * frame is received. + */ + nghttp2_on_frame_recv_callback on_frame_recv_callback; + /** + * Callback function invoked by `nghttp2_session_recv()` when an + * invalid non-DATA frame is received. + */ + nghttp2_on_invalid_frame_recv_callback on_invalid_frame_recv_callback; + /** + * Callback function invoked when a chunk of data in DATA frame is + * received. + */ + nghttp2_on_data_chunk_recv_callback on_data_chunk_recv_callback; + /** + * Callback function invoked before a non-DATA frame is sent. + */ + nghttp2_before_frame_send_callback before_frame_send_callback; + /** + * Callback function invoked after a frame is sent. + */ + nghttp2_on_frame_send_callback on_frame_send_callback; + /** + * The callback function invoked when a non-DATA frame is not sent + * because of an error. + */ + nghttp2_on_frame_not_send_callback on_frame_not_send_callback; + /** + * Callback function invoked when the stream is closed. + */ + nghttp2_on_stream_close_callback on_stream_close_callback; + /** + * Callback function invoked when the reception of header block in + * HEADERS or PUSH_PROMISE is started. + */ + nghttp2_on_begin_headers_callback on_begin_headers_callback; + /** + * Callback function invoked when a header name/value pair is + * received. + */ + nghttp2_on_header_callback on_header_callback; + nghttp2_on_header_callback2 on_header_callback2; + /** + * Callback function invoked when the library asks application how + * many padding bytes are required for the transmission of the given + * frame. + */ + nghttp2_select_padding_callback select_padding_callback; + /** + * The callback function used to determine the length allowed in + * `nghttp2_data_source_read_callback()` + */ + nghttp2_data_source_read_length_callback read_length_callback; + /** + * Sets callback function invoked when a frame header is received. + */ + nghttp2_on_begin_frame_callback on_begin_frame_callback; + nghttp2_send_data_callback send_data_callback; + nghttp2_pack_extension_callback pack_extension_callback; + nghttp2_unpack_extension_callback unpack_extension_callback; + nghttp2_on_extension_chunk_recv_callback on_extension_chunk_recv_callback; + nghttp2_error_callback error_callback; +}; + +#endif /* NGHTTP2_CALLBACKS_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_frame.h b/tools/sdk/include/nghttp/nghttp2_frame.h new file mode 100644 index 00000000..6493465a --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_frame.h @@ -0,0 +1,581 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_FRAME_H +#define NGHTTP2_FRAME_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include +#include "nghttp2_hd.h" +#include "nghttp2_buf.h" + +#define NGHTTP2_STREAM_ID_MASK ((1u << 31) - 1) +#define NGHTTP2_PRI_GROUP_ID_MASK ((1u << 31) - 1) +#define NGHTTP2_PRIORITY_MASK ((1u << 31) - 1) +#define NGHTTP2_WINDOW_SIZE_INCREMENT_MASK ((1u << 31) - 1) +#define NGHTTP2_SETTINGS_ID_MASK ((1 << 24) - 1) + +/* The number of bytes of frame header. */ +#define NGHTTP2_FRAME_HDLEN 9 + +#define NGHTTP2_MAX_FRAME_SIZE_MAX ((1 << 24) - 1) +#define NGHTTP2_MAX_FRAME_SIZE_MIN (1 << 14) + +#define NGHTTP2_MAX_PAYLOADLEN 8192//16384--LiuHan/0812 +/* The one frame buffer length for tranmission. We may use several of + them to support CONTINUATION. To account for Pad Length field, we + allocate extra 1 byte, which saves extra large memcopying. */ +#define NGHTTP2_FRAMEBUF_CHUNKLEN \ + (NGHTTP2_FRAME_HDLEN + 1 + NGHTTP2_MAX_PAYLOADLEN) + +/* The default length of DATA frame payload. */ +#define NGHTTP2_DATA_PAYLOADLEN NGHTTP2_MAX_FRAME_SIZE_MIN + +/* Maximum headers block size to send, calculated using + nghttp2_hd_deflate_bound(). This is the default value, and can be + overridden by nghttp2_option_set_max_send_header_block_size(). */ +#define NGHTTP2_MAX_HEADERSLEN 65536 + +/* The number of bytes for each SETTINGS entry */ +#define NGHTTP2_FRAME_SETTINGS_ENTRY_LENGTH 6 + +/* Length of priority related fields in HEADERS/PRIORITY frames */ +#define NGHTTP2_PRIORITY_SPECLEN 5 + +/* Maximum length of padding in bytes. */ +#define NGHTTP2_MAX_PADLEN 256 + +/* Union of extension frame payload */ +typedef union { nghttp2_ext_altsvc altsvc; } nghttp2_ext_frame_payload; + +void nghttp2_frame_pack_frame_hd(uint8_t *buf, const nghttp2_frame_hd *hd); + +void nghttp2_frame_unpack_frame_hd(nghttp2_frame_hd *hd, const uint8_t *buf); + +/** + * Initializes frame header |hd| with given parameters. Reserved bit + * is set to 0. + */ +void nghttp2_frame_hd_init(nghttp2_frame_hd *hd, size_t length, uint8_t type, + uint8_t flags, int32_t stream_id); + +/** + * Returns the number of priority field depending on the |flags|. If + * |flags| has neither NGHTTP2_FLAG_PRIORITY_GROUP nor + * NGHTTP2_FLAG_PRIORITY_DEPENDENCY set, return 0. + */ +size_t nghttp2_frame_priority_len(uint8_t flags); + +/** + * Packs the |pri_spec| in |buf|. This function assumes |buf| has + * enough space for serialization. + */ +void nghttp2_frame_pack_priority_spec(uint8_t *buf, + const nghttp2_priority_spec *pri_spec); + +/** + * Unpacks the priority specification from payload |payload| of length + * |payloadlen| to |pri_spec|. The |flags| is used to determine what + * kind of priority specification is in |payload|. This function + * assumes the |payload| contains whole priority specification. + */ +void nghttp2_frame_unpack_priority_spec(nghttp2_priority_spec *pri_spec, + uint8_t flags, const uint8_t *payload, + size_t payloadlen); + +/* + * Returns the offset from the HEADERS frame payload where the + * compressed header block starts. The frame payload does not include + * frame header. + */ +size_t nghttp2_frame_headers_payload_nv_offset(nghttp2_headers *frame); + +/* + * Packs HEADERS frame |frame| in wire format and store it in |bufs|. + * This function expands |bufs| as necessary to store frame. + * + * The caller must make sure that nghttp2_bufs_reset(bufs) is called + * before calling this function. + * + * frame->hd.length is assigned after length is determined during + * packing process. CONTINUATION frames are also serialized in this + * function. This function does not handle padding. + * + * This function returns 0 if it succeeds, or returns one of the + * following negative error codes: + * + * NGHTTP2_ERR_HEADER_COMP + * The deflate operation failed. + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_frame_pack_headers(nghttp2_bufs *bufs, nghttp2_headers *frame, + nghttp2_hd_deflater *deflater); + +/* + * Unpacks HEADERS frame byte sequence into |frame|. This function + * only unapcks bytes that come before name/value header block and + * after possible Pad Length field. + * + * This function always succeeds and returns 0. + */ +int nghttp2_frame_unpack_headers_payload(nghttp2_headers *frame, + const uint8_t *payload, + size_t payloadlen); + +/* + * Packs PRIORITY frame |frame| in wire format and store it in + * |bufs|. + * + * The caller must make sure that nghttp2_bufs_reset(bufs) is called + * before calling this function. + * + * This function always succeeds and returns 0. + */ +int nghttp2_frame_pack_priority(nghttp2_bufs *bufs, nghttp2_priority *frame); + +/* + * Unpacks PRIORITY wire format into |frame|. + */ +void nghttp2_frame_unpack_priority_payload(nghttp2_priority *frame, + const uint8_t *payload, + size_t payloadlen); + +/* + * Packs RST_STREAM frame |frame| in wire frame format and store it in + * |bufs|. + * + * The caller must make sure that nghttp2_bufs_reset(bufs) is called + * before calling this function. + * + * This function always succeeds and returns 0. + */ +int nghttp2_frame_pack_rst_stream(nghttp2_bufs *bufs, + nghttp2_rst_stream *frame); + +/* + * Unpacks RST_STREAM frame byte sequence into |frame|. + */ +void nghttp2_frame_unpack_rst_stream_payload(nghttp2_rst_stream *frame, + const uint8_t *payload, + size_t payloadlen); + +/* + * Packs SETTINGS frame |frame| in wire format and store it in + * |bufs|. + * + * The caller must make sure that nghttp2_bufs_reset(bufs) is called + * before calling this function. + * + * This function returns 0 if it succeeds, or returns one of the + * following negative error codes: + * + * NGHTTP2_ERR_FRAME_SIZE_ERROR + * The length of the frame is too large. + */ +int nghttp2_frame_pack_settings(nghttp2_bufs *bufs, nghttp2_settings *frame); + +/* + * Packs the |iv|, which includes |niv| entries, in the |buf|, + * assuming the |buf| has at least 8 * |niv| bytes. + * + * Returns the number of bytes written into the |buf|. + */ +size_t nghttp2_frame_pack_settings_payload(uint8_t *buf, + const nghttp2_settings_entry *iv, + size_t niv); + +void nghttp2_frame_unpack_settings_entry(nghttp2_settings_entry *iv, + const uint8_t *payload); + +/* + * Initializes payload of frame->settings. The |frame| takes + * ownership of |iv|. + */ +void nghttp2_frame_unpack_settings_payload(nghttp2_settings *frame, + nghttp2_settings_entry *iv, + size_t niv); + +/* + * Unpacks SETTINGS payload into |*iv_ptr|. The number of entries are + * assigned to the |*niv_ptr|. This function allocates enough memory + * to store the result in |*iv_ptr|. The caller is responsible to free + * |*iv_ptr| after its use. + * + * This function returns 0 if it succeeds or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_frame_unpack_settings_payload2(nghttp2_settings_entry **iv_ptr, + size_t *niv_ptr, + const uint8_t *payload, + size_t payloadlen, nghttp2_mem *mem); + +/* + * Packs PUSH_PROMISE frame |frame| in wire format and store it in + * |bufs|. This function expands |bufs| as necessary to store + * frame. + * + * The caller must make sure that nghttp2_bufs_reset(bufs) is called + * before calling this function. + * + * frame->hd.length is assigned after length is determined during + * packing process. CONTINUATION frames are also serialized in this + * function. This function does not handle padding. + * + * This function returns 0 if it succeeds, or returns one of the + * following negative error codes: + * + * NGHTTP2_ERR_HEADER_COMP + * The deflate operation failed. + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_frame_pack_push_promise(nghttp2_bufs *bufs, + nghttp2_push_promise *frame, + nghttp2_hd_deflater *deflater); + +/* + * Unpacks PUSH_PROMISE frame byte sequence into |frame|. This + * function only unapcks bytes that come before name/value header + * block and after possible Pad Length field. + * + * This function returns 0 if it succeeds or one of the following + * negative error codes: + * + * NGHTTP2_ERR_PROTO + * TODO END_HEADERS flag is not set + */ +int nghttp2_frame_unpack_push_promise_payload(nghttp2_push_promise *frame, + const uint8_t *payload, + size_t payloadlen); + +/* + * Packs PING frame |frame| in wire format and store it in + * |bufs|. + * + * The caller must make sure that nghttp2_bufs_reset(bufs) is called + * before calling this function. + * + * This function always succeeds and returns 0. + */ +int nghttp2_frame_pack_ping(nghttp2_bufs *bufs, nghttp2_ping *frame); + +/* + * Unpacks PING wire format into |frame|. + */ +void nghttp2_frame_unpack_ping_payload(nghttp2_ping *frame, + const uint8_t *payload, + size_t payloadlen); + +/* + * Packs GOAWAY frame |frame| in wire format and store it in |bufs|. + * This function expands |bufs| as necessary to store frame. + * + * The caller must make sure that nghttp2_bufs_reset(bufs) is called + * before calling this function. + * + * This function returns 0 if it succeeds or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_FRAME_SIZE_ERROR + * The length of the frame is too large. + */ +int nghttp2_frame_pack_goaway(nghttp2_bufs *bufs, nghttp2_goaway *frame); + +/* + * Unpacks GOAWAY wire format into |frame|. The |payload| of length + * |payloadlen| contains first 8 bytes of payload. The + * |var_gift_payload| of length |var_gift_payloadlen| contains + * remaining payload and its buffer is gifted to the function and then + * |frame|. The |var_gift_payloadlen| must be freed by + * nghttp2_frame_goaway_free(). + */ +void nghttp2_frame_unpack_goaway_payload(nghttp2_goaway *frame, + const uint8_t *payload, + size_t payloadlen, + uint8_t *var_gift_payload, + size_t var_gift_payloadlen); + +/* + * Unpacks GOAWAY wire format into |frame|. This function only exists + * for unit test. After allocating buffer for debug data, this + * function internally calls nghttp2_frame_unpack_goaway_payload(). + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_frame_unpack_goaway_payload2(nghttp2_goaway *frame, + const uint8_t *payload, + size_t payloadlen, nghttp2_mem *mem); + +/* + * Packs WINDOW_UPDATE frame |frame| in wire frame format and store it + * in |bufs|. + * + * The caller must make sure that nghttp2_bufs_reset(bufs) is called + * before calling this function. + * + * This function always succeeds and returns 0. + */ +int nghttp2_frame_pack_window_update(nghttp2_bufs *bufs, + nghttp2_window_update *frame); + +/* + * Unpacks WINDOW_UPDATE frame byte sequence into |frame|. + */ +void nghttp2_frame_unpack_window_update_payload(nghttp2_window_update *frame, + const uint8_t *payload, + size_t payloadlen); + +/* + * Packs ALTSVC frame |frame| in wire frame format and store it in + * |bufs|. + * + * The caller must make sure that nghttp2_bufs_reset(bufs) is called + * before calling this function. + * + * This function always succeeds and returns 0. + */ +int nghttp2_frame_pack_altsvc(nghttp2_bufs *bufs, nghttp2_extension *ext); + +/* + * Unpacks ALTSVC wire format into |frame|. The |payload| of + * |payloadlen| bytes contains frame payload. This function assumes + * that frame->payload points to the nghttp2_ext_altsvc object. + * + * This function always succeeds and returns 0. + */ +void nghttp2_frame_unpack_altsvc_payload(nghttp2_extension *frame, + size_t origin_len, uint8_t *payload, + size_t payloadlen); + +/* + * Unpacks ALTSVC wire format into |frame|. This function only exists + * for unit test. After allocating buffer for fields, this function + * internally calls nghttp2_frame_unpack_altsvc_payload(). + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_FRAME_SIZE_ERROR + * The payload is too small. + */ +int nghttp2_frame_unpack_altsvc_payload2(nghttp2_extension *frame, + const uint8_t *payload, + size_t payloadlen, nghttp2_mem *mem); + +/* + * Initializes HEADERS frame |frame| with given values. |frame| takes + * ownership of |nva|, so caller must not free it. If |stream_id| is + * not assigned yet, it must be -1. + */ +void nghttp2_frame_headers_init(nghttp2_headers *frame, uint8_t flags, + int32_t stream_id, nghttp2_headers_category cat, + const nghttp2_priority_spec *pri_spec, + nghttp2_nv *nva, size_t nvlen); + +void nghttp2_frame_headers_free(nghttp2_headers *frame, nghttp2_mem *mem); + +void nghttp2_frame_priority_init(nghttp2_priority *frame, int32_t stream_id, + const nghttp2_priority_spec *pri_spec); + +void nghttp2_frame_priority_free(nghttp2_priority *frame); + +void nghttp2_frame_rst_stream_init(nghttp2_rst_stream *frame, int32_t stream_id, + uint32_t error_code); + +void nghttp2_frame_rst_stream_free(nghttp2_rst_stream *frame); + +/* + * Initializes PUSH_PROMISE frame |frame| with given values. |frame| + * takes ownership of |nva|, so caller must not free it. + */ +void nghttp2_frame_push_promise_init(nghttp2_push_promise *frame, uint8_t flags, + int32_t stream_id, + int32_t promised_stream_id, + nghttp2_nv *nva, size_t nvlen); + +void nghttp2_frame_push_promise_free(nghttp2_push_promise *frame, + nghttp2_mem *mem); + +/* + * Initializes SETTINGS frame |frame| with given values. |frame| takes + * ownership of |iv|, so caller must not free it. The |flags| are + * bitwise-OR of one or more of nghttp2_settings_flag. + */ +void nghttp2_frame_settings_init(nghttp2_settings *frame, uint8_t flags, + nghttp2_settings_entry *iv, size_t niv); + +void nghttp2_frame_settings_free(nghttp2_settings *frame, nghttp2_mem *mem); + +/* + * Initializes PING frame |frame| with given values. If the + * |opqeue_data| is not NULL, it must point to 8 bytes memory region + * of data. The data pointed by |opaque_data| is copied. It can be + * NULL. In this case, 8 bytes NULL is used. + */ +void nghttp2_frame_ping_init(nghttp2_ping *frame, uint8_t flags, + const uint8_t *opque_data); + +void nghttp2_frame_ping_free(nghttp2_ping *frame); + +/* + * Initializes GOAWAY frame |frame| with given values. On success, + * this function takes ownership of |opaque_data|, so caller must not + * free it. If the |opaque_data_len| is 0, opaque_data could be NULL. + */ +void nghttp2_frame_goaway_init(nghttp2_goaway *frame, int32_t last_stream_id, + uint32_t error_code, uint8_t *opaque_data, + size_t opaque_data_len); + +void nghttp2_frame_goaway_free(nghttp2_goaway *frame, nghttp2_mem *mem); + +void nghttp2_frame_window_update_init(nghttp2_window_update *frame, + uint8_t flags, int32_t stream_id, + int32_t window_size_increment); + +void nghttp2_frame_window_update_free(nghttp2_window_update *frame); + +void nghttp2_frame_extension_init(nghttp2_extension *frame, uint8_t type, + uint8_t flags, int32_t stream_id, + void *payload); + +void nghttp2_frame_extension_free(nghttp2_extension *frame); + +/* + * Initializes ALTSVC frame |frame| with given values. This function + * assumes that frame->payload points to nghttp2_ext_altsvc object. + * Also |origin| and |field_value| are allocated in single buffer, + * starting |origin|. On success, this function takes ownership of + * |origin|, so caller must not free it. + */ +void nghttp2_frame_altsvc_init(nghttp2_extension *frame, int32_t stream_id, + uint8_t *origin, size_t origin_len, + uint8_t *field_value, size_t field_value_len); + +/* + * Frees up resources under |frame|. This function does not free + * nghttp2_ext_altsvc object pointed by frame->payload. This function + * only frees origin pointed by nghttp2_ext_altsvc.origin. Therefore, + * other fields must be allocated in the same buffer with origin. + */ +void nghttp2_frame_altsvc_free(nghttp2_extension *frame, nghttp2_mem *mem); + +/* + * Returns the number of padding bytes after payload. The total + * padding length is given in the |padlen|. The returned value does + * not include the Pad Length field. If |padlen| is 0, this function + * returns 0, regardless of frame->hd.flags. + */ +size_t nghttp2_frame_trail_padlen(nghttp2_frame *frame, size_t padlen); + +void nghttp2_frame_data_init(nghttp2_data *frame, uint8_t flags, + int32_t stream_id); + +void nghttp2_frame_data_free(nghttp2_data *frame); + +/* + * Makes copy of |iv| and return the copy. The |niv| is the number of + * entries in |iv|. This function returns the pointer to the copy if + * it succeeds, or NULL. + */ +nghttp2_settings_entry *nghttp2_frame_iv_copy(const nghttp2_settings_entry *iv, + size_t niv, nghttp2_mem *mem); + +/* + * Sorts the |nva| in ascending order of name and value. If names are + * equivalent, sort them by value. + */ +void nghttp2_nv_array_sort(nghttp2_nv *nva, size_t nvlen); + +/* + * Copies name/value pairs from |nva|, which contains |nvlen| pairs, + * to |*nva_ptr|, which is dynamically allocated so that all items can + * be stored. The resultant name and value in nghttp2_nv are + * guaranteed to be NULL-terminated even if the input is not + * null-terminated. + * + * The |*nva_ptr| must be freed using nghttp2_nv_array_del(). + * + * This function returns 0 if it succeeds or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_nv_array_copy(nghttp2_nv **nva_ptr, const nghttp2_nv *nva, + size_t nvlen, nghttp2_mem *mem); + +/* + * Returns nonzero if the name/value pair |a| equals to |b|. The name + * is compared in case-sensitive, because we ensure that this function + * is called after the name is lower-cased. + */ +int nghttp2_nv_equal(const nghttp2_nv *a, const nghttp2_nv *b); + +/* + * Frees |nva|. + */ +void nghttp2_nv_array_del(nghttp2_nv *nva, nghttp2_mem *mem); + +/* + * Checks that the |iv|, which includes |niv| entries, does not have + * invalid values. + * + * This function returns nonzero if it succeeds, or 0. + */ +int nghttp2_iv_check(const nghttp2_settings_entry *iv, size_t niv); + +/* + * Sets Pad Length field and flags and adjusts frame header position + * of each buffers in |bufs|. The number of padding is given in the + * |padlen| including Pad Length field. The |hd| is the frame header + * for the serialized data. This function fills zeros padding region + * unless framehd_only is nonzero. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_FRAME_SIZE_ERROR + * The length of the resulting frame is too large. + */ +int nghttp2_frame_add_pad(nghttp2_bufs *bufs, nghttp2_frame_hd *hd, + size_t padlen, int framehd_only); + +#endif /* NGHTTP2_FRAME_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_hd.h b/tools/sdk/include/nghttp/nghttp2_hd.h new file mode 100644 index 00000000..1da9eb58 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_hd.h @@ -0,0 +1,430 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2013 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_HD_H +#define NGHTTP2_HD_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include + +#include "nghttp2_hd_huffman.h" +#include "nghttp2_buf.h" +#include "nghttp2_mem.h" +#include "nghttp2_rcbuf.h" + +#define NGHTTP2_HD_DEFAULT_MAX_BUFFER_SIZE NGHTTP2_DEFAULT_HEADER_TABLE_SIZE +#define NGHTTP2_HD_ENTRY_OVERHEAD 32 + +/* The maximum length of one name/value pair. This is the sum of the + length of name and value. This is not specified by the spec. We + just chose the arbitrary size */ +#define NGHTTP2_HD_MAX_NV 65536 + +/* Default size of maximum table buffer size for encoder. Even if + remote decoder notifies larger buffer size for its decoding, + encoder only uses the memory up to this value. */ +#define NGHTTP2_HD_DEFAULT_MAX_DEFLATE_BUFFER_SIZE (1 << 12) + +/* Exported for unit test */ +#define NGHTTP2_STATIC_TABLE_LENGTH 61 + +/* Generated by genlibtokenlookup.py */ +typedef enum { + NGHTTP2_TOKEN__AUTHORITY = 0, + NGHTTP2_TOKEN__METHOD = 1, + NGHTTP2_TOKEN__PATH = 3, + NGHTTP2_TOKEN__SCHEME = 5, + NGHTTP2_TOKEN__STATUS = 7, + NGHTTP2_TOKEN_ACCEPT_CHARSET = 14, + NGHTTP2_TOKEN_ACCEPT_ENCODING = 15, + NGHTTP2_TOKEN_ACCEPT_LANGUAGE = 16, + NGHTTP2_TOKEN_ACCEPT_RANGES = 17, + NGHTTP2_TOKEN_ACCEPT = 18, + NGHTTP2_TOKEN_ACCESS_CONTROL_ALLOW_ORIGIN = 19, + NGHTTP2_TOKEN_AGE = 20, + NGHTTP2_TOKEN_ALLOW = 21, + NGHTTP2_TOKEN_AUTHORIZATION = 22, + NGHTTP2_TOKEN_CACHE_CONTROL = 23, + NGHTTP2_TOKEN_CONTENT_DISPOSITION = 24, + NGHTTP2_TOKEN_CONTENT_ENCODING = 25, + NGHTTP2_TOKEN_CONTENT_LANGUAGE = 26, + NGHTTP2_TOKEN_CONTENT_LENGTH = 27, + NGHTTP2_TOKEN_CONTENT_LOCATION = 28, + NGHTTP2_TOKEN_CONTENT_RANGE = 29, + NGHTTP2_TOKEN_CONTENT_TYPE = 30, + NGHTTP2_TOKEN_COOKIE = 31, + NGHTTP2_TOKEN_DATE = 32, + NGHTTP2_TOKEN_ETAG = 33, + NGHTTP2_TOKEN_EXPECT = 34, + NGHTTP2_TOKEN_EXPIRES = 35, + NGHTTP2_TOKEN_FROM = 36, + NGHTTP2_TOKEN_HOST = 37, + NGHTTP2_TOKEN_IF_MATCH = 38, + NGHTTP2_TOKEN_IF_MODIFIED_SINCE = 39, + NGHTTP2_TOKEN_IF_NONE_MATCH = 40, + NGHTTP2_TOKEN_IF_RANGE = 41, + NGHTTP2_TOKEN_IF_UNMODIFIED_SINCE = 42, + NGHTTP2_TOKEN_LAST_MODIFIED = 43, + NGHTTP2_TOKEN_LINK = 44, + NGHTTP2_TOKEN_LOCATION = 45, + NGHTTP2_TOKEN_MAX_FORWARDS = 46, + NGHTTP2_TOKEN_PROXY_AUTHENTICATE = 47, + NGHTTP2_TOKEN_PROXY_AUTHORIZATION = 48, + NGHTTP2_TOKEN_RANGE = 49, + NGHTTP2_TOKEN_REFERER = 50, + NGHTTP2_TOKEN_REFRESH = 51, + NGHTTP2_TOKEN_RETRY_AFTER = 52, + NGHTTP2_TOKEN_SERVER = 53, + NGHTTP2_TOKEN_SET_COOKIE = 54, + NGHTTP2_TOKEN_STRICT_TRANSPORT_SECURITY = 55, + NGHTTP2_TOKEN_TRANSFER_ENCODING = 56, + NGHTTP2_TOKEN_USER_AGENT = 57, + NGHTTP2_TOKEN_VARY = 58, + NGHTTP2_TOKEN_VIA = 59, + NGHTTP2_TOKEN_WWW_AUTHENTICATE = 60, + NGHTTP2_TOKEN_TE, + NGHTTP2_TOKEN_CONNECTION, + NGHTTP2_TOKEN_KEEP_ALIVE, + NGHTTP2_TOKEN_PROXY_CONNECTION, + NGHTTP2_TOKEN_UPGRADE, +} nghttp2_token; + +struct nghttp2_hd_entry; +typedef struct nghttp2_hd_entry nghttp2_hd_entry; + +typedef struct { + /* The buffer containing header field name. NULL-termination is + guaranteed. */ + nghttp2_rcbuf *name; + /* The buffer containing header field value. NULL-termination is + guaranteed. */ + nghttp2_rcbuf *value; + /* nghttp2_token value for name. It could be -1 if we have no token + for that header field name. */ + int32_t token; + /* Bitwise OR of one or more of nghttp2_nv_flag. */ + uint8_t flags; +} nghttp2_hd_nv; + +struct nghttp2_hd_entry { + /* The header field name/value pair */ + nghttp2_hd_nv nv; + /* This is solely for nghttp2_hd_{deflate,inflate}_get_table_entry + APIs to keep backward compatibility. */ + nghttp2_nv cnv; + /* The next entry which shares same bucket in hash table. */ + nghttp2_hd_entry *next; + /* The sequence number. We will increment it by one whenever we + store nghttp2_hd_entry to dynamic header table. */ + uint32_t seq; + /* The hash value for header name (nv.name). */ + uint32_t hash; +}; + +/* The entry used for static header table. */ +typedef struct { + nghttp2_rcbuf name; + nghttp2_rcbuf value; + nghttp2_nv cnv; + int32_t token; + uint32_t hash; +} nghttp2_hd_static_entry; + +typedef struct { + nghttp2_hd_entry **buffer; + size_t mask; + size_t first; + size_t len; +} nghttp2_hd_ringbuf; + +typedef enum { + NGHTTP2_HD_OPCODE_NONE, + NGHTTP2_HD_OPCODE_INDEXED, + NGHTTP2_HD_OPCODE_NEWNAME, + NGHTTP2_HD_OPCODE_INDNAME +} nghttp2_hd_opcode; + +typedef enum { + NGHTTP2_HD_STATE_EXPECT_TABLE_SIZE, + NGHTTP2_HD_STATE_INFLATE_START, + NGHTTP2_HD_STATE_OPCODE, + NGHTTP2_HD_STATE_READ_TABLE_SIZE, + NGHTTP2_HD_STATE_READ_INDEX, + NGHTTP2_HD_STATE_NEWNAME_CHECK_NAMELEN, + NGHTTP2_HD_STATE_NEWNAME_READ_NAMELEN, + NGHTTP2_HD_STATE_NEWNAME_READ_NAMEHUFF, + NGHTTP2_HD_STATE_NEWNAME_READ_NAME, + NGHTTP2_HD_STATE_CHECK_VALUELEN, + NGHTTP2_HD_STATE_READ_VALUELEN, + NGHTTP2_HD_STATE_READ_VALUEHUFF, + NGHTTP2_HD_STATE_READ_VALUE +} nghttp2_hd_inflate_state; + +typedef enum { + NGHTTP2_HD_WITH_INDEXING, + NGHTTP2_HD_WITHOUT_INDEXING, + NGHTTP2_HD_NEVER_INDEXING +} nghttp2_hd_indexing_mode; + +typedef struct { + /* dynamic header table */ + nghttp2_hd_ringbuf hd_table; + /* Memory allocator */ + nghttp2_mem *mem; + /* Abstract buffer size of hd_table as described in the spec. This + is the sum of length of name/value in hd_table + + NGHTTP2_HD_ENTRY_OVERHEAD bytes overhead per each entry. */ + size_t hd_table_bufsize; + /* The effective header table size. */ + size_t hd_table_bufsize_max; + /* Next sequence number for nghttp2_hd_entry */ + uint32_t next_seq; + /* If inflate/deflate error occurred, this value is set to 1 and + further invocation of inflate/deflate will fail with + NGHTTP2_ERR_HEADER_COMP. */ + uint8_t bad; +} nghttp2_hd_context; + +#define HD_MAP_SIZE 128 + +typedef struct { nghttp2_hd_entry *table[HD_MAP_SIZE]; } nghttp2_hd_map; + +struct nghttp2_hd_deflater { + nghttp2_hd_context ctx; + nghttp2_hd_map map; + /* The upper limit of the header table size the deflater accepts. */ + size_t deflate_hd_table_bufsize_max; + /* Minimum header table size notified in the next context update */ + size_t min_hd_table_bufsize_max; + /* If nonzero, send header table size using encoding context update + in the next deflate process */ + uint8_t notify_table_size_change; +}; + +struct nghttp2_hd_inflater { + nghttp2_hd_context ctx; + /* Stores current state of huffman decoding */ + nghttp2_hd_huff_decode_context huff_decode_ctx; + /* header buffer */ + nghttp2_buf namebuf, valuebuf; + nghttp2_rcbuf *namercbuf, *valuercbuf; + /* Pointer to the name/value pair which are used in the current + header emission. */ + nghttp2_rcbuf *nv_name_keep, *nv_value_keep; + /* The number of bytes to read */ + size_t left; + /* The index in indexed repr or indexed name */ + size_t index; + /* The maximum header table size the inflater supports. This is the + same value transmitted in SETTINGS_HEADER_TABLE_SIZE */ + size_t settings_hd_table_bufsize_max; + /* Minimum header table size set by nghttp2_hd_inflate_change_table_size */ + size_t min_hd_table_bufsize_max; + /* The number of next shift to decode integer */ + size_t shift; + nghttp2_hd_opcode opcode; + nghttp2_hd_inflate_state state; + /* nonzero if string is huffman encoded */ + uint8_t huffman_encoded; + /* nonzero if deflater requires that current entry is indexed */ + uint8_t index_required; + /* nonzero if deflater requires that current entry must not be + indexed */ + uint8_t no_index; +}; + +/* + * Initializes the |ent| members. The reference counts of nv->name + * and nv->value are increased by one for each. + */ +void nghttp2_hd_entry_init(nghttp2_hd_entry *ent, nghttp2_hd_nv *nv); + +/* + * This function decreases the reference counts of nv->name and + * nv->value. + */ +void nghttp2_hd_entry_free(nghttp2_hd_entry *ent); + +/* + * Initializes |deflater| for deflating name/values pairs. + * + * The encoder only uses up to + * NGHTTP2_HD_DEFAULT_MAX_DEFLATE_BUFFER_SIZE bytes for header table + * even if the larger value is specified later in + * nghttp2_hd_change_table_size(). + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_hd_deflate_init(nghttp2_hd_deflater *deflater, nghttp2_mem *mem); + +/* + * Initializes |deflater| for deflating name/values pairs. + * + * The encoder only uses up to |deflate_hd_table_bufsize_max| bytes + * for header table even if the larger value is specified later in + * nghttp2_hd_change_table_size(). + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_hd_deflate_init2(nghttp2_hd_deflater *deflater, + size_t deflate_hd_table_bufsize_max, + nghttp2_mem *mem); + +/* + * Deallocates any resources allocated for |deflater|. + */ +void nghttp2_hd_deflate_free(nghttp2_hd_deflater *deflater); + +/* + * Deflates the |nva|, which has the |nvlen| name/value pairs, into + * the |bufs|. + * + * This function expands |bufs| as necessary to store the result. If + * buffers is full and the process still requires more space, this + * funtion fails and returns NGHTTP2_ERR_HEADER_COMP. + * + * After this function returns, it is safe to delete the |nva|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_HEADER_COMP + * Deflation process has failed. + * NGHTTP2_ERR_BUFFER_ERROR + * Out of buffer space. + */ +int nghttp2_hd_deflate_hd_bufs(nghttp2_hd_deflater *deflater, + nghttp2_bufs *bufs, const nghttp2_nv *nva, + size_t nvlen); + +/* + * Initializes |inflater| for inflating name/values pairs. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +int nghttp2_hd_inflate_init(nghttp2_hd_inflater *inflater, nghttp2_mem *mem); + +/* + * Deallocates any resources allocated for |inflater|. + */ +void nghttp2_hd_inflate_free(nghttp2_hd_inflater *inflater); + +/* + * Similar to nghttp2_hd_inflate_hd(), but this takes nghttp2_hd_nv + * instead of nghttp2_nv as output parameter |nv_out|. Other than + * that return values and semantics are the same as + * nghttp2_hd_inflate_hd(). + */ +ssize_t nghttp2_hd_inflate_hd_nv(nghttp2_hd_inflater *inflater, + nghttp2_hd_nv *nv_out, int *inflate_flags, + const uint8_t *in, size_t inlen, int in_final); + +/* For unittesting purpose */ +int nghttp2_hd_emit_indname_block(nghttp2_bufs *bufs, size_t index, + nghttp2_nv *nv, int indexing_mode); + +/* For unittesting purpose */ +int nghttp2_hd_emit_newname_block(nghttp2_bufs *bufs, nghttp2_nv *nv, + int indexing_mode); + +/* For unittesting purpose */ +int nghttp2_hd_emit_table_size(nghttp2_bufs *bufs, size_t table_size); + +/* For unittesting purpose */ +nghttp2_hd_nv nghttp2_hd_table_get(nghttp2_hd_context *context, size_t index); + +/* For unittesting purpose */ +ssize_t nghttp2_hd_decode_length(uint32_t *res, size_t *shift_ptr, int *final, + uint32_t initial, size_t shift, uint8_t *in, + uint8_t *last, size_t prefix); + +/* Huffman encoding/decoding functions */ + +/* + * Counts the required bytes to encode |src| with length |len|. + * + * This function returns the number of required bytes to encode given + * data, including padding of prefix of terminal symbol code. This + * function always succeeds. + */ +size_t nghttp2_hd_huff_encode_count(const uint8_t *src, size_t len); + +/* + * Encodes the given data |src| with length |srclen| to the |bufs|. + * This function expands extra buffers in |bufs| if necessary. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_BUFFER_ERROR + * Out of buffer space. + */ +int nghttp2_hd_huff_encode(nghttp2_bufs *bufs, const uint8_t *src, + size_t srclen); + +void nghttp2_hd_huff_decode_context_init(nghttp2_hd_huff_decode_context *ctx); + +/* + * Decodes the given data |src| with length |srclen|. The |ctx| must + * be initialized by nghttp2_hd_huff_decode_context_init(). The result + * will be written to |buf|. This function assumes that |buf| has the + * enough room to store the decoded byte string. + * + * The caller must set the |final| to nonzero if the given input is + * the final block. + * + * This function returns the number of read bytes from the |in|. + * + * If this function fails, it returns one of the following negative + * return codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_HEADER_COMP + * Decoding process has failed. + */ +ssize_t nghttp2_hd_huff_decode(nghttp2_hd_huff_decode_context *ctx, + nghttp2_buf *buf, const uint8_t *src, + size_t srclen, int final); + +#endif /* NGHTTP2_HD_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_hd_huffman.h b/tools/sdk/include/nghttp/nghttp2_hd_huffman.h new file mode 100644 index 00000000..83323400 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_hd_huffman.h @@ -0,0 +1,77 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2013 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_HD_HUFFMAN_H +#define NGHTTP2_HD_HUFFMAN_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include + +typedef enum { + /* FSA accepts this state as the end of huffman encoding + sequence. */ + NGHTTP2_HUFF_ACCEPTED = 1, + /* This state emits symbol */ + NGHTTP2_HUFF_SYM = (1 << 1), + /* If state machine reaches this state, decoding fails. */ + NGHTTP2_HUFF_FAIL = (1 << 2) +} nghttp2_huff_decode_flag; + +typedef struct { + /* huffman decoding state, which is actually the node ID of internal + huffman tree. We have 257 leaf nodes, but they are identical to + root node other than emitting a symbol, so we have 256 internal + nodes [1..255], inclusive. */ + uint8_t state; + /* bitwise OR of zero or more of the nghttp2_huff_decode_flag */ + uint8_t flags; + /* symbol if NGHTTP2_HUFF_SYM flag set */ + uint8_t sym; +} nghttp2_huff_decode; + +typedef nghttp2_huff_decode huff_decode_table_type[16]; + +typedef struct { + /* Current huffman decoding state. We stripped leaf nodes, so the + value range is [0..255], inclusive. */ + uint8_t state; + /* nonzero if we can say that the decoding process succeeds at this + state */ + uint8_t accept; +} nghttp2_hd_huff_decode_context; + +typedef struct { + /* The number of bits in this code */ + uint32_t nbits; + /* Huffman code aligned to LSB */ + uint32_t code; +} nghttp2_huff_sym; + +extern const nghttp2_huff_sym huff_sym_table[]; +extern const nghttp2_huff_decode huff_decode_table[][16]; + +#endif /* NGHTTP2_HD_HUFFMAN_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_helper.h b/tools/sdk/include/nghttp/nghttp2_helper.h new file mode 100644 index 00000000..4a32564f --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_helper.h @@ -0,0 +1,122 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_HELPER_H +#define NGHTTP2_HELPER_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include +#include + +#include +#include "nghttp2_mem.h" + +#define nghttp2_min(A, B) ((A) < (B) ? (A) : (B)) +#define nghttp2_max(A, B) ((A) > (B) ? (A) : (B)) + +#define lstreq(A, B, N) ((sizeof((A)) - 1) == (N) && memcmp((A), (B), (N)) == 0) + +#define nghttp2_struct_of(ptr, type, member) \ + ((type *)(void *)((char *)(ptr)-offsetof(type, member))) + +/* + * Copies 2 byte unsigned integer |n| in host byte order to |buf| in + * network byte order. + */ +void nghttp2_put_uint16be(uint8_t *buf, uint16_t n); + +/* + * Copies 4 byte unsigned integer |n| in host byte order to |buf| in + * network byte order. + */ +void nghttp2_put_uint32be(uint8_t *buf, uint32_t n); + +/* + * Retrieves 2 byte unsigned integer stored in |data| in network byte + * order and returns it in host byte order. + */ +uint16_t nghttp2_get_uint16(const uint8_t *data); + +/* + * Retrieves 4 byte unsigned integer stored in |data| in network byte + * order and returns it in host byte order. + */ +uint32_t nghttp2_get_uint32(const uint8_t *data); + +void nghttp2_downcase(uint8_t *s, size_t len); + +/* + * Adjusts |*local_window_size_ptr|, |*recv_window_size_ptr|, + * |*recv_reduction_ptr| with |*delta_ptr| which is the + * WINDOW_UPDATE's window_size_increment sent from local side. If + * |delta| is strictly larger than |*recv_window_size_ptr|, + * |*local_window_size_ptr| is increased by delta - + * *recv_window_size_ptr. If |delta| is negative, + * |*local_window_size_ptr| is decreased by delta. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_FLOW_CONTROL + * local_window_size overflow or gets negative. + */ +int nghttp2_adjust_local_window_size(int32_t *local_window_size_ptr, + int32_t *recv_window_size_ptr, + int32_t *recv_reduction_ptr, + int32_t *delta_ptr); + +/* + * This function works like nghttp2_adjust_local_window_size(). The + * difference is that this function assumes *delta_ptr >= 0, and + * *recv_window_size_ptr is not decreased by *delta_ptr. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_FLOW_CONTROL + * local_window_size overflow or gets negative. + */ +int nghttp2_increase_local_window_size(int32_t *local_window_size_ptr, + int32_t *recv_window_size_ptr, + int32_t *recv_reduction_ptr, + int32_t *delta_ptr); + +/* + * Returns non-zero if the function decided that WINDOW_UPDATE should + * be sent. + */ +int nghttp2_should_send_window_update(int32_t local_window_size, + int32_t recv_window_size); + +/* + * Copies the buffer |src| of length |len| to the destination pointed + * by the |dest|, assuming that the |dest| is at lest |len| bytes long + * . Returns dest + len. + */ +uint8_t *nghttp2_cpymem(uint8_t *dest, const void *src, size_t len); + +#endif /* NGHTTP2_HELPER_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_http.h b/tools/sdk/include/nghttp/nghttp2_http.h new file mode 100644 index 00000000..ac684c4d --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_http.h @@ -0,0 +1,97 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2015 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_HTTP_H +#define NGHTTP2_HTTP_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include +#include "nghttp2_session.h" +#include "nghttp2_stream.h" + +/* + * This function is called when HTTP header field |nv| in |frame| is + * received for |stream|. This function will validate |nv| against + * the current state of stream. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_HTTP_HEADER + * Invalid HTTP header field was received. + * NGHTTP2_ERR_IGN_HTTP_HEADER + * Invalid HTTP header field was received but it can be treated as + * if it was not received because of compatibility reasons. + */ +int nghttp2_http_on_header(nghttp2_session *session, nghttp2_stream *stream, + nghttp2_frame *frame, nghttp2_hd_nv *nv, + int trailer); + +/* + * This function is called when request header is received. This + * function performs validation and returns 0 if it succeeds, or -1. + */ +int nghttp2_http_on_request_headers(nghttp2_stream *stream, + nghttp2_frame *frame); + +/* + * This function is called when response header is received. This + * function performs validation and returns 0 if it succeeds, or -1. + */ +int nghttp2_http_on_response_headers(nghttp2_stream *stream); + +/* + * This function is called trailer header (for both request and + * response) is received. This function performs validation and + * returns 0 if it succeeds, or -1. + */ +int nghttp2_http_on_trailer_headers(nghttp2_stream *stream, + nghttp2_frame *frame); + +/* + * This function is called when END_STREAM flag is seen in incoming + * frame. This function performs validation and returns 0 if it + * succeeds, or -1. + */ +int nghttp2_http_on_remote_end_stream(nghttp2_stream *stream); + +/* + * This function is called when chunk of data is received. This + * function performs validation and returns 0 if it succeeds, or -1. + */ +int nghttp2_http_on_data_chunk(nghttp2_stream *stream, size_t n); + +/* + * This function inspects header field in |frame| and records its + * method in stream->http_flags. If frame->hd.type is neither + * NGHTTP2_HEADERS nor NGHTTP2_PUSH_PROMISE, this function does + * nothing. + */ +void nghttp2_http_record_request_method(nghttp2_stream *stream, + nghttp2_frame *frame); + +#endif /* NGHTTP2_HTTP_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_int.h b/tools/sdk/include/nghttp/nghttp2_int.h new file mode 100644 index 00000000..c26c8e99 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_int.h @@ -0,0 +1,58 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_INT_H +#define NGHTTP2_INT_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +/* Macros, types and constants for internal use */ + +#ifdef DEBUGBUILD +#define DEBUGF(x) x +#else +#define DEBUGF(x) \ + do { \ + } while (0) +#endif + +/* "less" function, return nonzero if |lhs| is less than |rhs|. */ +typedef int (*nghttp2_less)(const void *lhs, const void *rhs); + +/* Internal error code. They must be in the range [-499, -100], + inclusive. */ +typedef enum { + NGHTTP2_ERR_CREDENTIAL_PENDING = -101, + NGHTTP2_ERR_IGN_HEADER_BLOCK = -103, + NGHTTP2_ERR_IGN_PAYLOAD = -104, + /* + * Invalid HTTP header field was received but it can be treated as + * if it was not received because of compatibility reasons. + */ + NGHTTP2_ERR_IGN_HTTP_HEADER = -105 +} nghttp2_internal_error; + +#endif /* NGHTTP2_INT_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_map.h b/tools/sdk/include/nghttp/nghttp2_map.h new file mode 100644 index 00000000..21262488 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_map.h @@ -0,0 +1,144 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_MAP_H +#define NGHTTP2_MAP_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include +#include "nghttp2_int.h" +#include "nghttp2_mem.h" + +/* Implementation of unordered map */ + +typedef int32_t key_type; + +typedef struct nghttp2_map_entry { + struct nghttp2_map_entry *next; + key_type key; +#if SIZEOF_INT_P == 4 + /* we requires 8 bytes aligment */ + int64_t pad; +#endif +} nghttp2_map_entry; + +typedef struct { + nghttp2_map_entry **table; + nghttp2_mem *mem; + size_t size; + uint32_t tablelen; +} nghttp2_map; + +/* + * Initializes the map |map|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_map_init(nghttp2_map *map, nghttp2_mem *mem); + +/* + * Deallocates any resources allocated for |map|. The stored entries + * are not freed by this function. Use nghttp2_map_each_free() to free + * each entries. + */ +void nghttp2_map_free(nghttp2_map *map); + +/* + * Deallocates each entries using |func| function and any resources + * allocated for |map|. The |func| function is responsible for freeing + * given the |entry| object. The |ptr| will be passed to the |func| as + * send argument. The return value of the |func| will be ignored. + */ +void nghttp2_map_each_free(nghttp2_map *map, + int (*func)(nghttp2_map_entry *entry, void *ptr), + void *ptr); + +/* + * Initializes the |entry| with the |key|. All entries to be inserted + * to the map must be initialized with this function. + */ +void nghttp2_map_entry_init(nghttp2_map_entry *entry, key_type key); + +/* + * Inserts the new |entry| with the key |entry->key| to the map |map|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_INVALID_ARGUMENT + * The item associated by |key| already exists. + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_map_insert(nghttp2_map *map, nghttp2_map_entry *entry); + +/* + * Returns the entry associated by the key |key|. If there is no such + * entry, this function returns NULL. + */ +nghttp2_map_entry *nghttp2_map_find(nghttp2_map *map, key_type key); + +/* + * Removes the entry associated by the key |key| from the |map|. The + * removed entry is not freed by this function. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_INVALID_ARGUMENT + * The entry associated by |key| does not exist. + */ +int nghttp2_map_remove(nghttp2_map *map, key_type key); + +/* + * Returns the number of items stored in the map |map|. + */ +size_t nghttp2_map_size(nghttp2_map *map); + +/* + * Applies the function |func| to each entry in the |map| with the + * optional user supplied pointer |ptr|. + * + * If the |func| returns 0, this function calls the |func| with the + * next entry. If the |func| returns nonzero, it will not call the + * |func| for further entries and return the return value of the + * |func| immediately. Thus, this function returns 0 if all the + * invocations of the |func| return 0, or nonzero value which the last + * invocation of |func| returns. + * + * Don't use this function to free each entry. Use + * nghttp2_map_each_free() instead. + */ +int nghttp2_map_each(nghttp2_map *map, + int (*func)(nghttp2_map_entry *entry, void *ptr), + void *ptr); + +#endif /* NGHTTP2_MAP_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_mem.h b/tools/sdk/include/nghttp/nghttp2_mem.h new file mode 100644 index 00000000..2d1bd6a0 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_mem.h @@ -0,0 +1,45 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2014 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_MEM_H +#define NGHTTP2_MEM_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include + +/* The default, system standard memory allocator */ +nghttp2_mem *nghttp2_mem_default(void); + +/* Convenient wrapper functions to call allocator function in + |mem|. */ +void *nghttp2_mem_malloc(nghttp2_mem *mem, size_t size); +void nghttp2_mem_free(nghttp2_mem *mem, void *ptr); +void nghttp2_mem_free2(nghttp2_free free_func, void *ptr, void *mem_user_data); +void *nghttp2_mem_calloc(nghttp2_mem *mem, size_t nmemb, size_t size); +void *nghttp2_mem_realloc(nghttp2_mem *mem, void *ptr, size_t size); + +#endif /* NGHTTP2_MEM_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_net.h b/tools/sdk/include/nghttp/nghttp2_net.h new file mode 100644 index 00000000..587f4189 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_net.h @@ -0,0 +1,91 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_NET_H +#define NGHTTP2_NET_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#ifdef HAVE_ARPA_INET_H +#include +#endif /* HAVE_ARPA_INET_H */ + +#ifdef HAVE_NETINET_IN_H +#include +#endif /* HAVE_NETINET_IN_H */ + +#include + +#if defined(WIN32) +/* Windows requires ws2_32 library for ntonl family functions. We + define inline functions for those function so that we don't have + dependeny on that lib. */ + +#ifdef _MSC_VER +#define STIN static __inline +#else +#define STIN static inline +#endif + +STIN uint32_t htonl(uint32_t hostlong) { + uint32_t res; + unsigned char *p = (unsigned char *)&res; + *p++ = hostlong >> 24; + *p++ = (hostlong >> 16) & 0xffu; + *p++ = (hostlong >> 8) & 0xffu; + *p = hostlong & 0xffu; + return res; +} + +STIN uint16_t htons(uint16_t hostshort) { + uint16_t res; + unsigned char *p = (unsigned char *)&res; + *p++ = hostshort >> 8; + *p = hostshort & 0xffu; + return res; +} + +STIN uint32_t ntohl(uint32_t netlong) { + uint32_t res; + unsigned char *p = (unsigned char *)&netlong; + res = *p++ << 24; + res += *p++ << 16; + res += *p++ << 8; + res += *p; + return res; +} + +STIN uint16_t ntohs(uint16_t netshort) { + uint16_t res; + unsigned char *p = (unsigned char *)&netshort; + res = *p++ << 8; + res += *p; + return res; +} + +#endif /* WIN32 */ + +#endif /* NGHTTP2_NET_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_npn.h b/tools/sdk/include/nghttp/nghttp2_npn.h new file mode 100644 index 00000000..a481bde3 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_npn.h @@ -0,0 +1,34 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_NPN_H +#define NGHTTP2_NPN_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include + +#endif /* NGHTTP2_NPN_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_option.h b/tools/sdk/include/nghttp/nghttp2_option.h new file mode 100644 index 00000000..fb79b920 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_option.h @@ -0,0 +1,116 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2014 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_OPTION_H +#define NGHTTP2_OPTION_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include + +/** + * Configuration options + */ +typedef enum { + /** + * This option prevents the library from sending WINDOW_UPDATE for a + * connection automatically. If this option is set to nonzero, the + * library won't send WINDOW_UPDATE for DATA until application calls + * nghttp2_session_consume() to indicate the amount of consumed + * DATA. By default, this option is set to zero. + */ + NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE = 1, + /** + * This option sets the SETTINGS_MAX_CONCURRENT_STREAMS value of + * remote endpoint as if it is received in SETTINGS frame. Without + * specifying this option, before the local endpoint receives + * SETTINGS_MAX_CONCURRENT_STREAMS in SETTINGS frame from remote + * endpoint, SETTINGS_MAX_CONCURRENT_STREAMS is unlimited. This may + * cause problem if local endpoint submits lots of requests + * initially and sending them at once to the remote peer may lead to + * the rejection of some requests. Specifying this option to the + * sensible value, say 100, may avoid this kind of issue. This value + * will be overwritten if the local endpoint receives + * SETTINGS_MAX_CONCURRENT_STREAMS from the remote endpoint. + */ + NGHTTP2_OPT_PEER_MAX_CONCURRENT_STREAMS = 1 << 1, + NGHTTP2_OPT_NO_RECV_CLIENT_MAGIC = 1 << 2, + NGHTTP2_OPT_NO_HTTP_MESSAGING = 1 << 3, + NGHTTP2_OPT_MAX_RESERVED_REMOTE_STREAMS = 1 << 4, + NGHTTP2_OPT_USER_RECV_EXT_TYPES = 1 << 5, + NGHTTP2_OPT_NO_AUTO_PING_ACK = 1 << 6, + NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES = 1 << 7, + NGHTTP2_OPT_MAX_SEND_HEADER_BLOCK_LENGTH = 1 << 8, +} nghttp2_option_flag; + +/** + * Struct to store option values for nghttp2_session. + */ +struct nghttp2_option { + /** + * NGHTTP2_OPT_MAX_SEND_HEADER_BLOCK_LENGTH + */ + size_t max_send_header_block_length; + /** + * Bitwise OR of nghttp2_option_flag to determine that which fields + * are specified. + */ + uint32_t opt_set_mask; + /** + * NGHTTP2_OPT_PEER_MAX_CONCURRENT_STREAMS + */ + uint32_t peer_max_concurrent_streams; + /** + * NGHTTP2_OPT_MAX_RESERVED_REMOTE_STREAMS + */ + uint32_t max_reserved_remote_streams; + /** + * NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES + */ + uint32_t builtin_recv_ext_types; + /** + * NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE + */ + int no_auto_window_update; + /** + * NGHTTP2_OPT_NO_RECV_CLIENT_MAGIC + */ + int no_recv_client_magic; + /** + * NGHTTP2_OPT_NO_HTTP_MESSAGING + */ + int no_http_messaging; + /** + * NGHTTP2_OPT_NO_AUTO_PING_ACK + */ + int no_auto_ping_ack; + /** + * NGHTTP2_OPT_USER_RECV_EXT_TYPES + */ + uint8_t user_recv_ext_types[32]; +}; + +#endif /* NGHTTP2_OPTION_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_outbound_item.h b/tools/sdk/include/nghttp/nghttp2_outbound_item.h new file mode 100644 index 00000000..8bda776b --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_outbound_item.h @@ -0,0 +1,166 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_OUTBOUND_ITEM_H +#define NGHTTP2_OUTBOUND_ITEM_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include +#include "nghttp2_frame.h" +#include "nghttp2_mem.h" + +/* struct used for HEADERS and PUSH_PROMISE frame */ +typedef struct { + nghttp2_data_provider data_prd; + void *stream_user_data; + /* error code when request HEADERS is canceled by RST_STREAM while + it is in queue. */ + uint32_t error_code; + /* nonzero if request HEADERS is canceled. The error code is stored + in |error_code|. */ + uint8_t canceled; +} nghttp2_headers_aux_data; + +/* struct used for DATA frame */ +typedef struct { + /** + * The data to be sent for this DATA frame. + */ + nghttp2_data_provider data_prd; + /** + * The flags of DATA frame. We use separate flags here and + * nghttp2_data frame. The latter contains flags actually sent to + * peer. This |flags| may contain NGHTTP2_FLAG_END_STREAM and only + * when |eof| becomes nonzero, flags in nghttp2_data has + * NGHTTP2_FLAG_END_STREAM set. + */ + uint8_t flags; + /** + * The flag to indicate whether EOF was reached or not. Initially + * |eof| is 0. It becomes 1 after all data were read. + */ + uint8_t eof; + /** + * The flag to indicate that NGHTTP2_DATA_FLAG_NO_COPY is used. + */ + uint8_t no_copy; +} nghttp2_data_aux_data; + +typedef enum { + NGHTTP2_GOAWAY_AUX_NONE = 0x0, + /* indicates that session should be terminated after the + transmission of this frame. */ + NGHTTP2_GOAWAY_AUX_TERM_ON_SEND = 0x1, + /* indicates that this GOAWAY is just a notification for graceful + shutdown. No nghttp2_session.goaway_flags should be updated on + the reaction to this frame. */ + NGHTTP2_GOAWAY_AUX_SHUTDOWN_NOTICE = 0x2 +} nghttp2_goaway_aux_flag; + +/* struct used for GOAWAY frame */ +typedef struct { + /* bitwise-OR of one or more of nghttp2_goaway_aux_flag. */ + uint8_t flags; +} nghttp2_goaway_aux_data; + +/* struct used for extension frame */ +typedef struct { + /* nonzero if this extension frame is serialized by library + function, instead of user-defined callbacks. */ + uint8_t builtin; +} nghttp2_ext_aux_data; + +/* Additional data which cannot be stored in nghttp2_frame struct */ +typedef union { + nghttp2_data_aux_data data; + nghttp2_headers_aux_data headers; + nghttp2_goaway_aux_data goaway; + nghttp2_ext_aux_data ext; +} nghttp2_aux_data; + +struct nghttp2_outbound_item; +typedef struct nghttp2_outbound_item nghttp2_outbound_item; + +struct nghttp2_outbound_item { + nghttp2_frame frame; + /* Storage for extension frame payload. frame->ext.payload points + to this structure to avoid frequent memory allocation. */ + nghttp2_ext_frame_payload ext_frame_payload; + nghttp2_aux_data aux_data; + /* The priority used in priority comparion. Smaller is served + ealier. For PING, SETTINGS and non-DATA frames (excluding + response HEADERS frame) have dedicated cycle value defined above. + For DATA frame, cycle is computed by taking into account of + effective weight and frame payload length previously sent, so + that the amount of transmission is distributed across streams + proportional to effective weight (inside a tree). */ + uint64_t cycle; + nghttp2_outbound_item *qnext; + /* nonzero if this object is queued, except for DATA or HEADERS + which are attached to stream as item. */ + uint8_t queued; +}; + +/* + * Initializes |item|. No memory allocation is done in this function. + * Don't call nghttp2_outbound_item_free() until frame member is + * initialized. + */ +void nghttp2_outbound_item_init(nghttp2_outbound_item *item); + +/* + * Deallocates resource for |item|. If |item| is NULL, this function + * does nothing. + */ +void nghttp2_outbound_item_free(nghttp2_outbound_item *item, nghttp2_mem *mem); + +/* + * queue for nghttp2_outbound_item. + */ +typedef struct { + nghttp2_outbound_item *head, *tail; + /* number of items in this queue. */ + size_t n; +} nghttp2_outbound_queue; + +void nghttp2_outbound_queue_init(nghttp2_outbound_queue *q); + +/* Pushes |item| into |q| */ +void nghttp2_outbound_queue_push(nghttp2_outbound_queue *q, + nghttp2_outbound_item *item); + +/* Pops |item| at the top from |q|. If |q| is empty, nothing + happens. */ +void nghttp2_outbound_queue_pop(nghttp2_outbound_queue *q); + +/* Returns the top item. */ +#define nghttp2_outbound_queue_top(Q) ((Q)->head) + +/* Returns the size of the queue */ +#define nghttp2_outbound_queue_size(Q) ((Q)->n) + +#endif /* NGHTTP2_OUTBOUND_ITEM_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_pq.h b/tools/sdk/include/nghttp/nghttp2_pq.h new file mode 100644 index 00000000..6b0ecfb4 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_pq.h @@ -0,0 +1,128 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_PQ_H +#define NGHTTP2_PQ_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include +#include "nghttp2_int.h" +#include "nghttp2_mem.h" + +/* Implementation of priority queue */ + +typedef struct { size_t index; } nghttp2_pq_entry; + +typedef struct { + /* The pointer to the pointer to the item stored */ + nghttp2_pq_entry **q; + /* Memory allocator */ + nghttp2_mem *mem; + /* The number of items sotred */ + size_t length; + /* The maximum number of items this pq can store. This is + automatically extended when length is reached to this value. */ + size_t capacity; + /* The less function between items */ + nghttp2_less less; +} nghttp2_pq; + +/* + * Initializes priority queue |pq| with compare function |cmp|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_pq_init(nghttp2_pq *pq, nghttp2_less less, nghttp2_mem *mem); + +/* + * Deallocates any resources allocated for |pq|. The stored items are + * not freed by this function. + */ +void nghttp2_pq_free(nghttp2_pq *pq); + +/* + * Adds |item| to the priority queue |pq|. + * + * This function returns 0 if it succeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_pq_push(nghttp2_pq *pq, nghttp2_pq_entry *item); + +/* + * Returns item at the top of the queue |pq|. If the queue is empty, + * this function returns NULL. + */ +nghttp2_pq_entry *nghttp2_pq_top(nghttp2_pq *pq); + +/* + * Pops item at the top of the queue |pq|. The popped item is not + * freed by this function. + */ +void nghttp2_pq_pop(nghttp2_pq *pq); + +/* + * Returns nonzero if the queue |pq| is empty. + */ +int nghttp2_pq_empty(nghttp2_pq *pq); + +/* + * Returns the number of items in the queue |pq|. + */ +size_t nghttp2_pq_size(nghttp2_pq *pq); + +typedef int (*nghttp2_pq_item_cb)(nghttp2_pq_entry *item, void *arg); + +/* + * Updates each item in |pq| using function |fun| and re-construct + * priority queue. The |fun| must return non-zero if it modifies the + * item in a way that it affects ordering in the priority queue. The + * |arg| is passed to the 2nd parameter of |fun|. + */ +void nghttp2_pq_update(nghttp2_pq *pq, nghttp2_pq_item_cb fun, void *arg); + +/* + * Applys |fun| to each item in |pq|. The |arg| is passed as arg + * parameter to callback function. This function must not change the + * ordering key. If the return value from callback is nonzero, this + * function returns 1 immediately without iterating remaining items. + * Otherwise this function returns 0. + */ +int nghttp2_pq_each(nghttp2_pq *pq, nghttp2_pq_item_cb fun, void *arg); + +/* + * Removes |item| from priority queue. + */ +void nghttp2_pq_remove(nghttp2_pq *pq, nghttp2_pq_entry *item); + +#endif /* NGHTTP2_PQ_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_priority_spec.h b/tools/sdk/include/nghttp/nghttp2_priority_spec.h new file mode 100644 index 00000000..98fac210 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_priority_spec.h @@ -0,0 +1,42 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2014 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_PRIORITY_SPEC_H +#define NGHTTP2_PRIORITY_SPEC_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include + +/* + * This function normalizes pri_spec->weight if it is out of range. + * If pri_spec->weight is less than NGHTTP2_MIN_WEIGHT, it is set to + * NGHTTP2_MIN_WEIGHT. If pri_spec->weight is larger than + * NGHTTP2_MAX_WEIGHT, it is set to NGHTTP2_MAX_WEIGHT. + */ +void nghttp2_priority_spec_normalize_weight(nghttp2_priority_spec *pri_spec); + +#endif /* NGHTTP2_PRIORITY_SPEC_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_queue.h b/tools/sdk/include/nghttp/nghttp2_queue.h new file mode 100644 index 00000000..d872b07b --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_queue.h @@ -0,0 +1,49 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_QUEUE_H +#define NGHTTP2_QUEUE_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /* HAVE_CONFIG_H */ + +#include + +typedef struct nghttp2_queue_cell { + void *data; + struct nghttp2_queue_cell *next; +} nghttp2_queue_cell; + +typedef struct { nghttp2_queue_cell *front, *back; } nghttp2_queue; + +void nghttp2_queue_init(nghttp2_queue *queue); +void nghttp2_queue_free(nghttp2_queue *queue); +int nghttp2_queue_push(nghttp2_queue *queue, void *data); +void nghttp2_queue_pop(nghttp2_queue *queue); +void *nghttp2_queue_front(nghttp2_queue *queue); +void *nghttp2_queue_back(nghttp2_queue *queue); +int nghttp2_queue_empty(nghttp2_queue *queue); + +#endif /* NGHTTP2_QUEUE_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_rcbuf.h b/tools/sdk/include/nghttp/nghttp2_rcbuf.h new file mode 100644 index 00000000..29d1543e --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_rcbuf.h @@ -0,0 +1,80 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2016 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_RCBUF_H +#define NGHTTP2_RCBUF_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include + +struct nghttp2_rcbuf { + /* custom memory allocator belongs to the mem parameter when + creating this object. */ + void *mem_user_data; + nghttp2_free free; + /* The pointer to the underlying buffer */ + uint8_t *base; + /* Size of buffer pointed by |base|. */ + size_t len; + /* Reference count */ + int32_t ref; +}; + +/* + * Allocates nghttp2_rcbuf object with |size| as initial buffer size. + * When the function succeeds, the reference count becomes 1. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM: + * Out of memory. + */ +int nghttp2_rcbuf_new(nghttp2_rcbuf **rcbuf_ptr, size_t size, nghttp2_mem *mem); + +/* + * Like nghttp2_rcbuf_new(), but initializes the buffer with |src| of + * length |srclen|. This function allocates additional byte at the + * end and puts '\0' into it, so that the resulting buffer could be + * used as NULL-terminated string. Still (*rcbuf_ptr)->len equals to + * |srclen|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM: + * Out of memory. + */ +int nghttp2_rcbuf_new2(nghttp2_rcbuf **rcbuf_ptr, const uint8_t *src, + size_t srclen, nghttp2_mem *mem); + +/* + * Frees |rcbuf| itself, regardless of its reference cout. + */ +void nghttp2_rcbuf_del(nghttp2_rcbuf *rcbuf); + +#endif /* NGHTTP2_RCBUF_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_session.h b/tools/sdk/include/nghttp/nghttp2_session.h new file mode 100644 index 00000000..53470028 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_session.h @@ -0,0 +1,878 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_SESSION_H +#define NGHTTP2_SESSION_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include +#include "nghttp2_map.h" +#include "nghttp2_frame.h" +#include "nghttp2_hd.h" +#include "nghttp2_stream.h" +#include "nghttp2_outbound_item.h" +#include "nghttp2_int.h" +#include "nghttp2_buf.h" +#include "nghttp2_callbacks.h" +#include "nghttp2_mem.h" + +/* The global variable for tests where we want to disable strict + preface handling. */ +extern int nghttp2_enable_strict_preface; + +/* + * Option flags. + */ +typedef enum { + NGHTTP2_OPTMASK_NO_AUTO_WINDOW_UPDATE = 1 << 0, + NGHTTP2_OPTMASK_NO_RECV_CLIENT_MAGIC = 1 << 1, + NGHTTP2_OPTMASK_NO_HTTP_MESSAGING = 1 << 2, + NGHTTP2_OPTMASK_NO_AUTO_PING_ACK = 1 << 3 +} nghttp2_optmask; + +/* + * bitmask for built-in type to enable the default handling for that + * type of the frame. + */ +typedef enum { + NGHTTP2_TYPEMASK_NONE = 0, + NGHTTP2_TYPEMASK_ALTSVC = 1 << 0 +} nghttp2_typemask; + +typedef enum { + NGHTTP2_OB_POP_ITEM, + NGHTTP2_OB_SEND_DATA, + NGHTTP2_OB_SEND_NO_COPY, + NGHTTP2_OB_SEND_CLIENT_MAGIC +} nghttp2_outbound_state; + +typedef struct { + nghttp2_outbound_item *item; + nghttp2_bufs framebufs; + nghttp2_outbound_state state; +} nghttp2_active_outbound_item; + +/* Buffer length for inbound raw byte stream used in + nghttp2_session_recv(). */ +#define NGHTTP2_INBOUND_BUFFER_LENGTH 3072//16384--LiuHan/08.12 + +/* The default maximum number of incoming reserved streams */ +#define NGHTTP2_MAX_INCOMING_RESERVED_STREAMS 200 + +/* Even if we have less SETTINGS_MAX_CONCURRENT_STREAMS than this + number, we keep NGHTTP2_MIN_IDLE_STREAMS streams in idle state */ +#define NGHTTP2_MIN_IDLE_STREAMS 16 + +/* The maximum number of items in outbound queue, which is considered + as flooding caused by peer. All frames are not considered here. + We only consider PING + ACK and SETTINGS + ACK. This is because + they both are response to the frame initiated by peer and peer can + send as many of them as they want. If peer does not read network, + response frames are stacked up, which leads to memory exhaustion. + The value selected here is arbitrary, but safe value and if we have + these frames in this number, it is considered suspicious. */ +#define NGHTTP2_MAX_OBQ_FLOOD_ITEM 10000 + +/* The default value of maximum number of concurrent streams. */ +#define NGHTTP2_DEFAULT_MAX_CONCURRENT_STREAMS 0xffffffffu + +/* Internal state when receiving incoming frame */ +typedef enum { + /* Receiving frame header */ + NGHTTP2_IB_READ_CLIENT_MAGIC, + NGHTTP2_IB_READ_FIRST_SETTINGS, + NGHTTP2_IB_READ_HEAD, + NGHTTP2_IB_READ_NBYTE, + NGHTTP2_IB_READ_HEADER_BLOCK, + NGHTTP2_IB_IGN_HEADER_BLOCK, + NGHTTP2_IB_IGN_PAYLOAD, + NGHTTP2_IB_FRAME_SIZE_ERROR, + NGHTTP2_IB_READ_SETTINGS, + NGHTTP2_IB_READ_GOAWAY_DEBUG, + NGHTTP2_IB_EXPECT_CONTINUATION, + NGHTTP2_IB_IGN_CONTINUATION, + NGHTTP2_IB_READ_PAD_DATA, + NGHTTP2_IB_READ_DATA, + NGHTTP2_IB_IGN_DATA, + NGHTTP2_IB_IGN_ALL, + NGHTTP2_IB_READ_ALTSVC_PAYLOAD, + NGHTTP2_IB_READ_EXTENSION_PAYLOAD +} nghttp2_inbound_state; + +typedef struct { + nghttp2_frame frame; + /* Storage for extension frame payload. frame->ext.payload points + to this structure to avoid frequent memory allocation. */ + nghttp2_ext_frame_payload ext_frame_payload; + /* The received SETTINGS entry. For the standard settings entries, + we only keep the last seen value. For + SETTINGS_HEADER_TABLE_SIZE, we also keep minimum value in the + last index. */ + nghttp2_settings_entry *iv; + /* buffer pointers to small buffer, raw_sbuf */ + nghttp2_buf sbuf; + /* buffer pointers to large buffer, raw_lbuf */ + nghttp2_buf lbuf; + /* Large buffer, malloced on demand */ + uint8_t *raw_lbuf; + /* The number of entry filled in |iv| */ + size_t niv; + /* The number of entries |iv| can store. */ + size_t max_niv; + /* How many bytes we still need to receive for current frame */ + size_t payloadleft; + /* padding length for the current frame */ + size_t padlen; + nghttp2_inbound_state state; + /* Small buffer. Currently the largest contiguous chunk to buffer + is frame header. We buffer part of payload, but they are smaller + than frame header. */ + uint8_t raw_sbuf[NGHTTP2_FRAME_HDLEN]; +} nghttp2_inbound_frame; + +typedef struct { + uint32_t header_table_size; + uint32_t enable_push; + uint32_t max_concurrent_streams; + uint32_t initial_window_size; + uint32_t max_frame_size; + uint32_t max_header_list_size; +} nghttp2_settings_storage; + +typedef enum { + NGHTTP2_GOAWAY_NONE = 0, + /* Flag means that connection should be terminated after sending GOAWAY. */ + NGHTTP2_GOAWAY_TERM_ON_SEND = 0x1, + /* Flag means GOAWAY to terminate session has been sent */ + NGHTTP2_GOAWAY_TERM_SENT = 0x2, + /* Flag means GOAWAY was sent */ + NGHTTP2_GOAWAY_SENT = 0x4, + /* Flag means GOAWAY was received */ + NGHTTP2_GOAWAY_RECV = 0x8 +} nghttp2_goaway_flag; + +/* nghttp2_inflight_settings stores the SETTINGS entries which local + endpoint has sent to the remote endpoint, and has not received ACK + yet. */ +struct nghttp2_inflight_settings { + struct nghttp2_inflight_settings *next; + nghttp2_settings_entry *iv; + size_t niv; +}; + +typedef struct nghttp2_inflight_settings nghttp2_inflight_settings; + +struct nghttp2_session { + nghttp2_map /* */ streams; + /* root of dependency tree*/ + nghttp2_stream root; + /* Queue for outbound urgent frames (PING and SETTINGS) */ + nghttp2_outbound_queue ob_urgent; + /* Queue for non-DATA frames */ + nghttp2_outbound_queue ob_reg; + /* Queue for outbound stream-creating HEADERS (request or push + response) frame, which are subject to + SETTINGS_MAX_CONCURRENT_STREAMS limit. */ + nghttp2_outbound_queue ob_syn; + nghttp2_active_outbound_item aob; + nghttp2_inbound_frame iframe; + nghttp2_hd_deflater hd_deflater; + nghttp2_hd_inflater hd_inflater; + nghttp2_session_callbacks callbacks; + /* Memory allocator */ + nghttp2_mem mem; + /* Base value when we schedule next DATA frame write. This is + updated when one frame was written. */ + uint64_t last_cycle; + void *user_data; + /* Points to the latest incoming closed stream. NULL if there is no + closed stream. Only used when session is initialized as + server. */ + nghttp2_stream *closed_stream_head; + /* Points to the oldest incoming closed stream. NULL if there is no + closed stream. Only used when session is initialized as + server. */ + nghttp2_stream *closed_stream_tail; + /* Points to the latest idle stream. NULL if there is no idle + stream. Only used when session is initialized as server .*/ + nghttp2_stream *idle_stream_head; + /* Points to the oldest idle stream. NULL if there is no idle + stream. Only used when session is initialized as erver. */ + nghttp2_stream *idle_stream_tail; + /* Queue of In-flight SETTINGS values. SETTINGS bearing ACK is not + considered as in-flight. */ + nghttp2_inflight_settings *inflight_settings_head; + /* The number of outgoing streams. This will be capped by + remote_settings.max_concurrent_streams. */ + size_t num_outgoing_streams; + /* The number of incoming streams. This will be capped by + local_settings.max_concurrent_streams. */ + size_t num_incoming_streams; + /* The number of incoming reserved streams. This is the number of + streams in reserved (remote) state. RFC 7540 does not limit this + number. nghttp2 offers + nghttp2_option_set_max_reserved_remote_streams() to achieve this. + If it is used, num_incoming_streams is capped by + max_incoming_reserved_streams. Client application should + consider to set this because without that server can send + arbitrary number of PUSH_PROMISE, and exhaust client's memory. */ + size_t num_incoming_reserved_streams; + /* The maximum number of incoming reserved streams (reserved + (remote) state). RST_STREAM will be sent for the pushed stream + which exceeds this limit. */ + size_t max_incoming_reserved_streams; + /* The number of closed streams still kept in |streams| hash. The + closed streams can be accessed through single linked list + |closed_stream_head|. The current implementation only keeps + incoming streams and session is initialized as server. */ + size_t num_closed_streams; + /* The number of idle streams kept in |streams| hash. The idle + streams can be accessed through doubly linked list + |idle_stream_head|. The current implementation only keeps idle + streams if session is initialized as server. */ + size_t num_idle_streams; + /* The number of bytes allocated for nvbuf */ + size_t nvbuflen; + /* Counter for detecting flooding in outbound queue */ + size_t obq_flood_counter_; + /* The maximum length of header block to send. Calculated by the + same way as nghttp2_hd_deflate_bound() does. */ + size_t max_send_header_block_length; + /* Next Stream ID. Made unsigned int to detect >= (1 << 31). */ + uint32_t next_stream_id; + /* The last stream ID this session initiated. For client session, + this is the last stream ID it has sent. For server session, it + is the last promised stream ID sent in PUSH_PROMISE. */ + int32_t last_sent_stream_id; + /* The largest stream ID received so far */ + int32_t last_recv_stream_id; + /* The largest stream ID which has been processed in some way. This + value will be used as last-stream-id when sending GOAWAY + frame. */ + int32_t last_proc_stream_id; + /* Counter of unique ID of PING. Wraps when it exceeds + NGHTTP2_MAX_UNIQUE_ID */ + uint32_t next_unique_id; + /* This is the last-stream-ID we have sent in GOAWAY */ + int32_t local_last_stream_id; + /* This is the value in GOAWAY frame received from remote endpoint. */ + int32_t remote_last_stream_id; + /* Current sender window size. This value is computed against the + current initial window size of remote endpoint. */ + int32_t remote_window_size; + /* Keep track of the number of bytes received without + WINDOW_UPDATE. This could be negative after submitting negative + value to WINDOW_UPDATE. */ + int32_t recv_window_size; + /* The number of bytes consumed by the application and now is + subject to WINDOW_UPDATE. This is only used when auto + WINDOW_UPDATE is turned off. */ + int32_t consumed_size; + /* The amount of recv_window_size cut using submitting negative + value to WINDOW_UPDATE */ + int32_t recv_reduction; + /* window size for local flow control. It is initially set to + NGHTTP2_INITIAL_CONNECTION_WINDOW_SIZE and could be + increased/decreased by submitting WINDOW_UPDATE. See + nghttp2_submit_window_update(). */ + int32_t local_window_size; + /* Settings value received from the remote endpoint. We just use ID + as index. The index = 0 is unused. */ + nghttp2_settings_storage remote_settings; + /* Settings value of the local endpoint. */ + nghttp2_settings_storage local_settings; + /* Option flags. This is bitwise-OR of 0 or more of nghttp2_optmask. */ + uint32_t opt_flags; + /* Unacked local SETTINGS_MAX_CONCURRENT_STREAMS value. We use this + to refuse the incoming stream if it exceeds this value. */ + uint32_t pending_local_max_concurrent_stream; + /* The bitwose OR of zero or more of nghttp2_typemask to indicate + that the default handling of extension frame is enabled. */ + uint32_t builtin_recv_ext_types; + /* Unacked local ENABLE_PUSH value. We use this to refuse + PUSH_PROMISE before SETTINGS ACK is received. */ + uint8_t pending_enable_push; + /* Nonzero if the session is server side. */ + uint8_t server; + /* Flags indicating GOAWAY is sent and/or recieved. The flags are + composed by bitwise OR-ing nghttp2_goaway_flag. */ + uint8_t goaway_flags; + /* This flag is used to reduce excessive queuing of WINDOW_UPDATE to + this session. The nonzero does not necessarily mean + WINDOW_UPDATE is not queued. */ + uint8_t window_update_queued; + /* Bitfield of extension frame types that application is willing to + receive. To designate the bit of given frame type i, use + user_recv_ext_types[i / 8] & (1 << (i & 0x7)). First 10 frame + types are standard frame types and not used in this bitfield. If + bit is set, it indicates that incoming frame with that type is + passed to user defined callbacks, otherwise they are ignored. */ + uint8_t user_recv_ext_types[32]; +}; + +/* Struct used when updating initial window size of each active + stream. */ +typedef struct { + nghttp2_session *session; + int32_t new_window_size, old_window_size; +} nghttp2_update_window_size_arg; + +typedef struct { + nghttp2_session *session; + /* linked list of streams to close */ + nghttp2_stream *head; + int32_t last_stream_id; + /* nonzero if GOAWAY is sent to peer, which means we are going to + close incoming streams. zero if GOAWAY is received from peer and + we are going to close outgoing streams. */ + int incoming; +} nghttp2_close_stream_on_goaway_arg; + +/* TODO stream timeout etc */ + +/* + * Returns nonzero value if |stream_id| is initiated by local + * endpoint. + */ +int nghttp2_session_is_my_stream_id(nghttp2_session *session, + int32_t stream_id); + +/* + * Adds |item| to the outbound queue in |session|. When this function + * succeeds, it takes ownership of |item|. So caller must not free it + * on success. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_STREAM_CLOSED + * Stream already closed (DATA and PUSH_PROMISE frame only) + */ +int nghttp2_session_add_item(nghttp2_session *session, + nghttp2_outbound_item *item); + +/* + * Adds RST_STREAM frame for the stream |stream_id| with the error + * code |error_code|. This is a convenient function built on top of + * nghttp2_session_add_frame() to add RST_STREAM easily. + * + * This function simply returns 0 without adding RST_STREAM frame if + * given stream is in NGHTTP2_STREAM_CLOSING state, because multiple + * RST_STREAM for a stream is redundant. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_session_add_rst_stream(nghttp2_session *session, int32_t stream_id, + uint32_t error_code); + +/* + * Adds PING frame. This is a convenient functin built on top of + * nghttp2_session_add_frame() to add PING easily. + * + * If the |opaque_data| is not NULL, it must point to 8 bytes memory + * region of data. The data pointed by |opaque_data| is copied. It can + * be NULL. In this case, 8 bytes NULL is used. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_FLOODED + * There are too many items in outbound queue; this only happens + * if NGHTTP2_FLAG_ACK is set in |flags| + */ +int nghttp2_session_add_ping(nghttp2_session *session, uint8_t flags, + const uint8_t *opaque_data); + +/* + * Adds GOAWAY frame with the last-stream-ID |last_stream_id| and the + * error code |error_code|. This is a convenient function built on top + * of nghttp2_session_add_frame() to add GOAWAY easily. The + * |aux_flags| are bitwise-OR of one or more of + * nghttp2_goaway_aux_flag. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_INVALID_ARGUMENT + * The |opaque_data_len| is too large. + */ +int nghttp2_session_add_goaway(nghttp2_session *session, int32_t last_stream_id, + uint32_t error_code, const uint8_t *opaque_data, + size_t opaque_data_len, uint8_t aux_flags); + +/* + * Adds WINDOW_UPDATE frame with stream ID |stream_id| and + * window-size-increment |window_size_increment|. This is a convenient + * function built on top of nghttp2_session_add_frame() to add + * WINDOW_UPDATE easily. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + */ +int nghttp2_session_add_window_update(nghttp2_session *session, uint8_t flags, + int32_t stream_id, + int32_t window_size_increment); + +/* + * Adds SETTINGS frame. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_FLOODED + * There are too many items in outbound queue; this only happens + * if NGHTTP2_FLAG_ACK is set in |flags| + */ +int nghttp2_session_add_settings(nghttp2_session *session, uint8_t flags, + const nghttp2_settings_entry *iv, size_t niv); + +/* + * Creates new stream in |session| with stream ID |stream_id|, + * priority |pri_spec| and flags |flags|. The |flags| is bitwise OR + * of nghttp2_stream_flag. Since this function is called when initial + * HEADERS is sent or received, these flags are taken from it. The + * state of stream is set to |initial_state|. The |stream_user_data| + * is a pointer to the arbitrary user supplied data to be associated + * to this stream. + * + * If |initial_state| is NGHTTP2_STREAM_RESERVED, this function sets + * NGHTTP2_STREAM_FLAG_PUSH flag set. + * + * This function returns a pointer to created new stream object, or + * NULL. + * + * This function adjusts neither the number of closed streams or idle + * streams. The caller should manually call + * nghttp2_session_adjust_closed_stream() or + * nghttp2_session_adjust_idle_stream() respectively. + */ +nghttp2_stream *nghttp2_session_open_stream(nghttp2_session *session, + int32_t stream_id, uint8_t flags, + nghttp2_priority_spec *pri_spec, + nghttp2_stream_state initial_state, + void *stream_user_data); + +/* + * Closes stream whose stream ID is |stream_id|. The reason of closure + * is indicated by the |error_code|. When closing the stream, + * on_stream_close_callback will be called. + * + * If the session is initialized as server and |stream| is incoming + * stream, stream is just marked closed and this function calls + * nghttp2_session_keep_closed_stream() with |stream|. Otherwise, + * |stream| will be deleted from memory. + * + * This function returns 0 if it succeeds, or one the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + * NGHTTP2_ERR_INVALID_ARGUMENT + * The specified stream does not exist. + * NGHTTP2_ERR_CALLBACK_FAILURE + * The callback function failed. + */ +int nghttp2_session_close_stream(nghttp2_session *session, int32_t stream_id, + uint32_t error_code); + +/* + * Deletes |stream| from memory. After this function returns, stream + * cannot be accessed. + * + * This function returns 0 if it succeeds, or one the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_session_destroy_stream(nghttp2_session *session, + nghttp2_stream *stream); + +/* + * Tries to keep incoming closed stream |stream|. Due to the + * limitation of maximum number of streams in memory, |stream| is not + * closed and just deleted from memory (see + * nghttp2_session_destroy_stream). + */ +void nghttp2_session_keep_closed_stream(nghttp2_session *session, + nghttp2_stream *stream); + +/* + * Appends |stream| to linked list |session->idle_stream_head|. We + * apply fixed limit for list size. To fit into that limit, one or + * more oldest streams are removed from list as necessary. + */ +void nghttp2_session_keep_idle_stream(nghttp2_session *session, + nghttp2_stream *stream); + +/* + * Detaches |stream| from idle streams linked list. + */ +void nghttp2_session_detach_idle_stream(nghttp2_session *session, + nghttp2_stream *stream); + +/* + * Deletes closed stream to ensure that number of incoming streams + * including active and closed is in the maximum number of allowed + * stream. + * + * This function returns 0 if it succeeds, or one the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_session_adjust_closed_stream(nghttp2_session *session); + +/* + * Deletes idle stream to ensure that number of idle streams is in + * certain limit. + * + * This function returns 0 if it succeeds, or one the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_session_adjust_idle_stream(nghttp2_session *session); + +/* + * If further receptions and transmissions over the stream |stream_id| + * are disallowed, close the stream with error code NGHTTP2_NO_ERROR. + * + * This function returns 0 if it + * succeeds, or one of the following negative error codes: + * + * NGHTTP2_ERR_INVALID_ARGUMENT + * The specified stream does not exist. + */ +int nghttp2_session_close_stream_if_shut_rdwr(nghttp2_session *session, + nghttp2_stream *stream); + +int nghttp2_session_on_request_headers_received(nghttp2_session *session, + nghttp2_frame *frame); + +int nghttp2_session_on_response_headers_received(nghttp2_session *session, + nghttp2_frame *frame, + nghttp2_stream *stream); + +int nghttp2_session_on_push_response_headers_received(nghttp2_session *session, + nghttp2_frame *frame, + nghttp2_stream *stream); + +/* + * Called when HEADERS is received, assuming |frame| is properly + * initialized. This function does first validate received frame and + * then open stream and call callback functions. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_IGN_HEADER_BLOCK + * Frame was rejected and header block must be decoded but + * result must be ignored. + * NGHTTP2_ERR_CALLBACK_FAILURE + * The read_callback failed + */ +int nghttp2_session_on_headers_received(nghttp2_session *session, + nghttp2_frame *frame, + nghttp2_stream *stream); + +/* + * Called when PRIORITY is received, assuming |frame| is properly + * initialized. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_CALLBACK_FAILURE + * The read_callback failed + */ +int nghttp2_session_on_priority_received(nghttp2_session *session, + nghttp2_frame *frame); + +/* + * Called when RST_STREAM is received, assuming |frame| is properly + * initialized. + * + * This function returns 0 if it succeeds, or one the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + * NGHTTP2_ERR_CALLBACK_FAILURE + * The read_callback failed + */ +int nghttp2_session_on_rst_stream_received(nghttp2_session *session, + nghttp2_frame *frame); + +/* + * Called when SETTINGS is received, assuming |frame| is properly + * initialized. If |noack| is non-zero, SETTINGS with ACK will not be + * submitted. If |frame| has NGHTTP2_FLAG_ACK flag set, no SETTINGS + * with ACK will not be submitted regardless of |noack|. + * + * This function returns 0 if it succeeds, or one the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + * NGHTTP2_ERR_CALLBACK_FAILURE + * The read_callback failed + * NGHTTP2_ERR_FLOODED + * There are too many items in outbound queue, and this is most + * likely caused by misbehaviour of peer. + */ +int nghttp2_session_on_settings_received(nghttp2_session *session, + nghttp2_frame *frame, int noack); + +/* + * Called when PUSH_PROMISE is received, assuming |frame| is properly + * initialized. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_IGN_HEADER_BLOCK + * Frame was rejected and header block must be decoded but + * result must be ignored. + * NGHTTP2_ERR_CALLBACK_FAILURE + * The read_callback failed + */ +int nghttp2_session_on_push_promise_received(nghttp2_session *session, + nghttp2_frame *frame); + +/* + * Called when PING is received, assuming |frame| is properly + * initialized. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_CALLBACK_FAILURE + * The callback function failed. + * NGHTTP2_ERR_FLOODED + * There are too many items in outbound queue, and this is most + * likely caused by misbehaviour of peer. + */ +int nghttp2_session_on_ping_received(nghttp2_session *session, + nghttp2_frame *frame); + +/* + * Called when GOAWAY is received, assuming |frame| is properly + * initialized. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_CALLBACK_FAILURE + * The callback function failed. + */ +int nghttp2_session_on_goaway_received(nghttp2_session *session, + nghttp2_frame *frame); + +/* + * Called when WINDOW_UPDATE is recieved, assuming |frame| is properly + * initialized. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_CALLBACK_FAILURE + * The callback function failed. + */ +int nghttp2_session_on_window_update_received(nghttp2_session *session, + nghttp2_frame *frame); + +/* + * Called when ALTSVC is recieved, assuming |frame| is properly + * initialized. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_CALLBACK_FAILURE + * The callback function failed. + */ +int nghttp2_session_on_altsvc_received(nghttp2_session *session, + nghttp2_frame *frame); + +/* + * Called when DATA is received, assuming |frame| is properly + * initialized. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_CALLBACK_FAILURE + * The callback function failed. + */ +int nghttp2_session_on_data_received(nghttp2_session *session, + nghttp2_frame *frame); + +/* + * Returns nghttp2_stream* object whose stream ID is |stream_id|. It + * could be NULL if such stream does not exist. This function returns + * NULL if stream is marked as closed. + */ +nghttp2_stream *nghttp2_session_get_stream(nghttp2_session *session, + int32_t stream_id); + +/* + * This function behaves like nghttp2_session_get_stream(), but it + * returns stream object even if it is marked as closed or in + * NGHTTP2_STREAM_IDLE state. + */ +nghttp2_stream *nghttp2_session_get_stream_raw(nghttp2_session *session, + int32_t stream_id); + +/* + * Packs DATA frame |frame| in wire frame format and stores it in + * |bufs|. Payload will be read using |aux_data->data_prd|. The + * length of payload is at most |datamax| bytes. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_DEFERRED + * The DATA frame is postponed. + * NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE + * The read_callback failed (stream error). + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_CALLBACK_FAILURE + * The read_callback failed (session error). + */ +int nghttp2_session_pack_data(nghttp2_session *session, nghttp2_bufs *bufs, + size_t datamax, nghttp2_frame *frame, + nghttp2_data_aux_data *aux_data, + nghttp2_stream *stream); + +/* + * Pops and returns next item to send. If there is no such item, + * returns NULL. This function takes into account max concurrent + * streams. That means if session->ob_syn has item and max concurrent + * streams is reached, the even if other queues contain items, then + * this function returns NULL. + */ +nghttp2_outbound_item * +nghttp2_session_pop_next_ob_item(nghttp2_session *session); + +/* + * Returns next item to send. If there is no such item, this function + * returns NULL. This function takes into account max concurrent + * streams. That means if session->ob_syn has item and max concurrent + * streams is reached, the even if other queues contain items, then + * this function returns NULL. + */ +nghttp2_outbound_item * +nghttp2_session_get_next_ob_item(nghttp2_session *session); + +/* + * Updates local settings with the |iv|. The number of elements in the + * array pointed by the |iv| is given by the |niv|. This function + * assumes that the all settings_id member in |iv| are in range 1 to + * NGHTTP2_SETTINGS_MAX, inclusive. + * + * While updating individual stream's local window size, if the window + * size becomes strictly larger than NGHTTP2_MAX_WINDOW_SIZE, + * RST_STREAM is issued against such a stream. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_session_update_local_settings(nghttp2_session *session, + nghttp2_settings_entry *iv, + size_t niv); + +/* + * Re-prioritize |stream|. The new priority specification is + * |pri_spec|. Caller must ensure that stream->hd.stream_id != + * pri_spec->stream_id. + * + * This function does not adjust the number of idle streams. The + * caller should call nghttp2_session_adjust_idle_stream() later. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_session_reprioritize_stream(nghttp2_session *session, + nghttp2_stream *stream, + const nghttp2_priority_spec *pri_spec); + +/* + * Terminates current |session| with the |error_code|. The |reason| + * is NULL-terminated debug string. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory. + * NGHTTP2_ERR_INVALID_ARGUMENT + * The |reason| is too long. + */ +int nghttp2_session_terminate_session_with_reason(nghttp2_session *session, + uint32_t error_code, + const char *reason); + +#endif /* NGHTTP2_SESSION_H */ diff --git a/tools/sdk/include/nghttp/nghttp2_stream.h b/tools/sdk/include/nghttp/nghttp2_stream.h new file mode 100644 index 00000000..da0e5d53 --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_stream.h @@ -0,0 +1,436 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_STREAM_H +#define NGHTTP2_STREAM_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include +#include "nghttp2_outbound_item.h" +#include "nghttp2_map.h" +#include "nghttp2_pq.h" +#include "nghttp2_int.h" + +/* + * If local peer is stream initiator: + * NGHTTP2_STREAM_OPENING : upon sending request HEADERS + * NGHTTP2_STREAM_OPENED : upon receiving response HEADERS + * NGHTTP2_STREAM_CLOSING : upon queuing RST_STREAM + * + * If remote peer is stream initiator: + * NGHTTP2_STREAM_OPENING : upon receiving request HEADERS + * NGHTTP2_STREAM_OPENED : upon sending response HEADERS + * NGHTTP2_STREAM_CLOSING : upon queuing RST_STREAM + */ +typedef enum { + /* Initial state */ + NGHTTP2_STREAM_INITIAL, + /* For stream initiator: request HEADERS has been sent, but response + HEADERS has not been received yet. For receiver: request HEADERS + has been received, but it does not send response HEADERS yet. */ + NGHTTP2_STREAM_OPENING, + /* For stream initiator: response HEADERS is received. For receiver: + response HEADERS is sent. */ + NGHTTP2_STREAM_OPENED, + /* RST_STREAM is received, but somehow we need to keep stream in + memory. */ + NGHTTP2_STREAM_CLOSING, + /* PUSH_PROMISE is received or sent */ + NGHTTP2_STREAM_RESERVED, + /* Stream is created in this state if it is used as anchor in + dependency tree. */ + NGHTTP2_STREAM_IDLE +} nghttp2_stream_state; + +typedef enum { + NGHTTP2_SHUT_NONE = 0, + /* Indicates further receptions will be disallowed. */ + NGHTTP2_SHUT_RD = 0x01, + /* Indicates further transmissions will be disallowed. */ + NGHTTP2_SHUT_WR = 0x02, + /* Indicates both further receptions and transmissions will be + disallowed. */ + NGHTTP2_SHUT_RDWR = NGHTTP2_SHUT_RD | NGHTTP2_SHUT_WR +} nghttp2_shut_flag; + +typedef enum { + NGHTTP2_STREAM_FLAG_NONE = 0, + /* Indicates that this stream is pushed stream and not opened + yet. */ + NGHTTP2_STREAM_FLAG_PUSH = 0x01, + /* Indicates that this stream was closed */ + NGHTTP2_STREAM_FLAG_CLOSED = 0x02, + /* Indicates the item is deferred due to flow control. */ + NGHTTP2_STREAM_FLAG_DEFERRED_FLOW_CONTROL = 0x04, + /* Indicates the item is deferred by user callback */ + NGHTTP2_STREAM_FLAG_DEFERRED_USER = 0x08, + /* bitwise OR of NGHTTP2_STREAM_FLAG_DEFERRED_FLOW_CONTROL and + NGHTTP2_STREAM_FLAG_DEFERRED_USER. */ + NGHTTP2_STREAM_FLAG_DEFERRED_ALL = 0x0c + +} nghttp2_stream_flag; + +/* HTTP related flags to enforce HTTP semantics */ +typedef enum { + NGHTTP2_HTTP_FLAG_NONE = 0, + /* header field seen so far */ + NGHTTP2_HTTP_FLAG__AUTHORITY = 1, + NGHTTP2_HTTP_FLAG__PATH = 1 << 1, + NGHTTP2_HTTP_FLAG__METHOD = 1 << 2, + NGHTTP2_HTTP_FLAG__SCHEME = 1 << 3, + /* host is not pseudo header, but we require either host or + :authority */ + NGHTTP2_HTTP_FLAG_HOST = 1 << 4, + NGHTTP2_HTTP_FLAG__STATUS = 1 << 5, + /* required header fields for HTTP request except for CONNECT + method. */ + NGHTTP2_HTTP_FLAG_REQ_HEADERS = NGHTTP2_HTTP_FLAG__METHOD | + NGHTTP2_HTTP_FLAG__PATH | + NGHTTP2_HTTP_FLAG__SCHEME, + NGHTTP2_HTTP_FLAG_PSEUDO_HEADER_DISALLOWED = 1 << 6, + /* HTTP method flags */ + NGHTTP2_HTTP_FLAG_METH_CONNECT = 1 << 7, + NGHTTP2_HTTP_FLAG_METH_HEAD = 1 << 8, + NGHTTP2_HTTP_FLAG_METH_OPTIONS = 1 << 9, + NGHTTP2_HTTP_FLAG_METH_UPGRADE_WORKAROUND = 1 << 10, + NGHTTP2_HTTP_FLAG_METH_ALL = NGHTTP2_HTTP_FLAG_METH_CONNECT | + NGHTTP2_HTTP_FLAG_METH_HEAD | + NGHTTP2_HTTP_FLAG_METH_OPTIONS | + NGHTTP2_HTTP_FLAG_METH_UPGRADE_WORKAROUND, + /* :path category */ + /* path starts with "/" */ + NGHTTP2_HTTP_FLAG_PATH_REGULAR = 1 << 11, + /* path "*" */ + NGHTTP2_HTTP_FLAG_PATH_ASTERISK = 1 << 12, + /* scheme */ + /* "http" or "https" scheme */ + NGHTTP2_HTTP_FLAG_SCHEME_HTTP = 1 << 13, + /* set if final response is expected */ + NGHTTP2_HTTP_FLAG_EXPECT_FINAL_RESPONSE = 1 << 14 +} nghttp2_http_flag; + +struct nghttp2_stream { + /* Intrusive Map */ + nghttp2_map_entry map_entry; + /* Entry for dep_prev->obq */ + nghttp2_pq_entry pq_entry; + /* Priority Queue storing direct descendant (nghttp2_stream). Only + streams which itself has some data to send, or has a descendant + which has some data to sent. */ + nghttp2_pq obq; + /* Content-Length of request/response body. -1 if unknown. */ + int64_t content_length; + /* Received body so far */ + int64_t recv_content_length; + /* Base last_cycle for direct descendent streams. */ + uint32_t descendant_last_cycle; + /* Next scheduled time to sent item */ + uint32_t cycle; + /* Next seq used for direct descendant streams */ + uint64_t descendant_next_seq; + /* Secondary key for prioritization to break a tie for cycle. This + value is monotonically increased for single parent stream. */ + uint64_t seq; + /* pointers to form dependency tree. If multiple streams depend on + a stream, only one stream (left most) has non-NULL dep_prev which + points to the stream it depends on. The remaining streams are + linked using sib_prev and sib_next. The stream which has + non-NULL dep_prev always NULL sib_prev. The right most stream + has NULL sib_next. If this stream is a root of dependency tree, + dep_prev and sib_prev are NULL. */ + nghttp2_stream *dep_prev, *dep_next; + nghttp2_stream *sib_prev, *sib_next; + /* When stream is kept after closure, it may be kept in doubly + linked list pointed by nghttp2_session closed_stream_head. + closed_next points to the next stream object if it is the element + of the list. */ + nghttp2_stream *closed_prev, *closed_next; + /* The arbitrary data provided by user for this stream. */ + void *stream_user_data; + /* Item to send */ + nghttp2_outbound_item *item; + /* Last written length of frame payload */ + size_t last_writelen; + /* stream ID */ + int32_t stream_id; + /* Current remote window size. This value is computed against the + current initial window size of remote endpoint. */ + int32_t remote_window_size; + /* Keep track of the number of bytes received without + WINDOW_UPDATE. This could be negative after submitting negative + value to WINDOW_UPDATE */ + int32_t recv_window_size; + /* The number of bytes consumed by the application and now is + subject to WINDOW_UPDATE. This is only used when auto + WINDOW_UPDATE is turned off. */ + int32_t consumed_size; + /* The amount of recv_window_size cut using submitting negative + value to WINDOW_UPDATE */ + int32_t recv_reduction; + /* window size for local flow control. It is initially set to + NGHTTP2_INITIAL_WINDOW_SIZE and could be increased/decreased by + submitting WINDOW_UPDATE. See nghttp2_submit_window_update(). */ + int32_t local_window_size; + /* weight of this stream */ + int32_t weight; + /* This is unpaid penalty (offset) when calculating cycle. */ + uint32_t pending_penalty; + /* sum of weight of direct descendants */ + int32_t sum_dep_weight; + nghttp2_stream_state state; + /* status code from remote server */ + int16_t status_code; + /* Bitwise OR of zero or more nghttp2_http_flag values */ + uint16_t http_flags; + /* This is bitwise-OR of 0 or more of nghttp2_stream_flag. */ + uint8_t flags; + /* Bitwise OR of zero or more nghttp2_shut_flag values */ + uint8_t shut_flags; + /* Nonzero if this stream has been queued to stream pointed by + dep_prev. We maintain the invariant that if a stream is queued, + then its ancestors, except for root, are also queued. This + invariant may break in fatal error condition. */ + uint8_t queued; + /* This flag is used to reduce excessive queuing of WINDOW_UPDATE to + this stream. The nonzero does not necessarily mean WINDOW_UPDATE + is not queued. */ + uint8_t window_update_queued; +}; + +void nghttp2_stream_init(nghttp2_stream *stream, int32_t stream_id, + uint8_t flags, nghttp2_stream_state initial_state, + int32_t weight, int32_t remote_initial_window_size, + int32_t local_initial_window_size, + void *stream_user_data, nghttp2_mem *mem); + +void nghttp2_stream_free(nghttp2_stream *stream); + +/* + * Disallow either further receptions or transmissions, or both. + * |flag| is bitwise OR of one or more of nghttp2_shut_flag. + */ +void nghttp2_stream_shutdown(nghttp2_stream *stream, nghttp2_shut_flag flag); + +/* + * Defer |stream->item|. We won't call this function in the situation + * where |stream->item| == NULL. The |flags| is bitwise OR of zero or + * more of NGHTTP2_STREAM_FLAG_DEFERRED_USER and + * NGHTTP2_STREAM_FLAG_DEFERRED_FLOW_CONTROL. The |flags| indicates + * the reason of this action. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_stream_defer_item(nghttp2_stream *stream, uint8_t flags); + +/* + * Put back deferred data in this stream to active state. The |flags| + * are one or more of bitwise OR of the following values: + * NGHTTP2_STREAM_FLAG_DEFERRED_USER and + * NGHTTP2_STREAM_FLAG_DEFERRED_FLOW_CONTROL and given masks are + * cleared if they are set. So even if this function is called, if + * one of flag is still set, data does not become active. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_stream_resume_deferred_item(nghttp2_stream *stream, uint8_t flags); + +/* + * Returns nonzero if item is deferred by whatever reason. + */ +int nghttp2_stream_check_deferred_item(nghttp2_stream *stream); + +/* + * Returns nonzero if item is deferred by flow control. + */ +int nghttp2_stream_check_deferred_by_flow_control(nghttp2_stream *stream); + +/* + * Updates the remote window size with the new value + * |new_initial_window_size|. The |old_initial_window_size| is used to + * calculate the current window size. + * + * This function returns 0 if it succeeds or -1. The failure is due to + * overflow. + */ +int nghttp2_stream_update_remote_initial_window_size( + nghttp2_stream *stream, int32_t new_initial_window_size, + int32_t old_initial_window_size); + +/* + * Updates the local window size with the new value + * |new_initial_window_size|. The |old_initial_window_size| is used to + * calculate the current window size. + * + * This function returns 0 if it succeeds or -1. The failure is due to + * overflow. + */ +int nghttp2_stream_update_local_initial_window_size( + nghttp2_stream *stream, int32_t new_initial_window_size, + int32_t old_initial_window_size); + +/* + * Call this function if promised stream |stream| is replied with + * HEADERS. This function makes the state of the |stream| to + * NGHTTP2_STREAM_OPENED. + */ +void nghttp2_stream_promise_fulfilled(nghttp2_stream *stream); + +/* + * Returns nonzero if |target| is an ancestor of |stream|. + */ +int nghttp2_stream_dep_find_ancestor(nghttp2_stream *stream, + nghttp2_stream *target); + +/* + * Computes distributed weight of a stream of the |weight| under the + * |stream| if |stream| is removed from a dependency tree. + */ +int32_t nghttp2_stream_dep_distributed_weight(nghttp2_stream *stream, + int32_t weight); + +/* + * Makes the |stream| depend on the |dep_stream|. This dependency is + * exclusive. All existing direct descendants of |dep_stream| become + * the descendants of the |stream|. This function assumes + * |stream->item| is NULL. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_stream_dep_insert(nghttp2_stream *dep_stream, + nghttp2_stream *stream); + +/* + * Makes the |stream| depend on the |dep_stream|. This dependency is + * not exclusive. This function assumes |stream->item| is NULL. + */ +void nghttp2_stream_dep_add(nghttp2_stream *dep_stream, nghttp2_stream *stream); + +/* + * Removes the |stream| from the current dependency tree. This + * function assumes |stream->item| is NULL. + */ +int nghttp2_stream_dep_remove(nghttp2_stream *stream); + +/* + * Attaches |item| to |stream|. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_stream_attach_item(nghttp2_stream *stream, + nghttp2_outbound_item *item); + +/* + * Detaches |stream->item|. This function does not free + * |stream->item|. The caller must free it. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_stream_detach_item(nghttp2_stream *stream); + +/* + * Makes the |stream| depend on the |dep_stream|. This dependency is + * exclusive. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_stream_dep_insert_subtree(nghttp2_stream *dep_stream, + nghttp2_stream *stream); + +/* + * Makes the |stream| depend on the |dep_stream|. This dependency is + * not exclusive. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +int nghttp2_stream_dep_add_subtree(nghttp2_stream *dep_stream, + nghttp2_stream *stream); + +/* + * Removes subtree whose root stream is |stream|. The + * effective_weight of streams in removed subtree is not updated. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * NGHTTP2_ERR_NOMEM + * Out of memory + */ +void nghttp2_stream_dep_remove_subtree(nghttp2_stream *stream); + +/* + * Returns nonzero if |stream| is in any dependency tree. + */ +int nghttp2_stream_in_dep_tree(nghttp2_stream *stream); + +/* + * Schedules transmission of |stream|'s item, assuming stream->item is + * attached, and stream->last_writelen was updated. + */ +void nghttp2_stream_reschedule(nghttp2_stream *stream); + +/* + * Changes |stream|'s weight to |weight|. If |stream| is queued, it + * will be rescheduled based on new weight. + */ +void nghttp2_stream_change_weight(nghttp2_stream *stream, int32_t weight); + +/* + * Returns a stream which has highest priority, updating + * descendant_last_cycle of selected stream's ancestors. + */ +nghttp2_outbound_item * +nghttp2_stream_next_outbound_item(nghttp2_stream *stream); + +#endif /* NGHTTP2_STREAM */ diff --git a/tools/sdk/include/nghttp/nghttp2_submit.h b/tools/sdk/include/nghttp/nghttp2_submit.h new file mode 100644 index 00000000..545388cf --- /dev/null +++ b/tools/sdk/include/nghttp/nghttp2_submit.h @@ -0,0 +1,34 @@ +/* + * nghttp2 - HTTP/2 C Library + * + * Copyright (c) 2012 Tatsuhiro Tsujikawa + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef NGHTTP2_SUBMIT_H +#define NGHTTP2_SUBMIT_H + +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ + +#include + +#endif /* NGHTTP2_SUBMIT_H */ diff --git a/tools/sdk/include/nvs_flash/nvs.h b/tools/sdk/include/nvs_flash/nvs.h new file mode 100644 index 00000000..912ea221 --- /dev/null +++ b/tools/sdk/include/nvs_flash/nvs.h @@ -0,0 +1,251 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef ESP_NVS_H +#define ESP_NVS_H + +#include +#include +#include +#include "esp_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Opaque pointer type representing non-volatile storage handle + */ +typedef uint32_t nvs_handle; + +#define ESP_ERR_NVS_BASE 0x1100 +#define ESP_ERR_NVS_NOT_INITIALIZED (ESP_ERR_NVS_BASE + 0x01) +#define ESP_ERR_NVS_NOT_FOUND (ESP_ERR_NVS_BASE + 0x02) +#define ESP_ERR_NVS_TYPE_MISMATCH (ESP_ERR_NVS_BASE + 0x03) +#define ESP_ERR_NVS_READ_ONLY (ESP_ERR_NVS_BASE + 0x04) +#define ESP_ERR_NVS_NOT_ENOUGH_SPACE (ESP_ERR_NVS_BASE + 0x05) +#define ESP_ERR_NVS_INVALID_NAME (ESP_ERR_NVS_BASE + 0x06) +#define ESP_ERR_NVS_INVALID_HANDLE (ESP_ERR_NVS_BASE + 0x07) +#define ESP_ERR_NVS_REMOVE_FAILED (ESP_ERR_NVS_BASE + 0x08) +#define ESP_ERR_NVS_KEY_TOO_LONG (ESP_ERR_NVS_BASE + 0x09) +#define ESP_ERR_NVS_PAGE_FULL (ESP_ERR_NVS_BASE + 0x0a) +#define ESP_ERR_NVS_INVALID_STATE (ESP_ERR_NVS_BASE + 0x0b) +#define ESP_ERR_NVS_INVALID_LENGTH (ESP_ERR_NVS_BASE + 0x0c) + +typedef enum { + NVS_READONLY, + NVS_READWRITE +} nvs_open_mode; + +/** + * @brief Open non-volatile storage with a given namespace + * + * Multiple internal ESP-IDF and third party application modules can store + * their key-value pairs in the NVS module. In order to reduce possible + * conflicts on key names, each module can use its own namespace. + * + * @param[in] name Namespace name. Maximal length is determined by the + * underlying implementation, but is guaranteed to be + * at least 16 characters. Shouldn't be empty. + * @param[in] open_mode NVS_READWRITE or NVS_READONLY. If NVS_READONLY, will + * open a handle for reading only. All write requests will + * be rejected for this handle. + * @param[out] out_handle If successful (return code is zero), handle will be + * returned in this argument. + * + * @return - ESP_OK if storage handle was opened successfully + * - ESP_ERR_NVS_NOT_INITIALIZED if the storage driver is not initialized + * - ESP_ERR_NVS_NOT_FOUND id namespace doesn't exist yet and + * mode is NVS_READONLY + * - ESP_ERR_NVS_INVALID_NAME if namespace name doesn't satisfy constraints + * - other error codes from the underlying storage driver + */ +esp_err_t nvs_open(const char* name, nvs_open_mode open_mode, nvs_handle *out_handle); + +/** + * @brief nvs_set_X - set value for given key + * + * This family of functions set value for the key, given its name. Note that + * actual storage will not be updated until nvs_commit function is called. + * + * @param[in] handle Handle obtained from nvs_open function. + * Handles that were opened read only cannot be used. + * @param[in] key Key name. Maximal length is determined by the underlying + * implementation, but is guaranteed to be at least + * 16 characters. Shouldn't be empty. + * @param[in] value The value to set. + * @param[in] length For nvs_set_blob: length of binary value to set, in bytes. + * + * @return - ESP_OK if value was set successfully + * - ESP_ERR_NVS_INVALID_HANDLE if handle has been closed or is NULL + * - ESP_ERR_NVS_READ_ONLY if storage handle was opened as read only + * - ESP_ERR_NVS_INVALID_NAME if key name doesn't satisfy constraints + * - ESP_ERR_NVS_NOT_ENOUGH_SPACE if there is not enough space in the + * underlying storage to save the value + * - ESP_ERR_NVS_REMOVE_FAILED if the value wasn't updated because flash + * write operation has failed. The value was written however, and + * update will be finished after re-initialization of nvs, provided that + * flash operation doesn't fail again. + */ +esp_err_t nvs_set_i8 (nvs_handle handle, const char* key, int8_t value); +esp_err_t nvs_set_u8 (nvs_handle handle, const char* key, uint8_t value); +esp_err_t nvs_set_i16 (nvs_handle handle, const char* key, int16_t value); +esp_err_t nvs_set_u16 (nvs_handle handle, const char* key, uint16_t value); +esp_err_t nvs_set_i32 (nvs_handle handle, const char* key, int32_t value); +esp_err_t nvs_set_u32 (nvs_handle handle, const char* key, uint32_t value); +esp_err_t nvs_set_i64 (nvs_handle handle, const char* key, int64_t value); +esp_err_t nvs_set_u64 (nvs_handle handle, const char* key, uint64_t value); +esp_err_t nvs_set_str (nvs_handle handle, const char* key, const char* value); +esp_err_t nvs_set_blob(nvs_handle handle, const char* key, const void* value, size_t length); + +/** + * @brief nvs_get_X - get value for given key + * + * These functions retrieve value for the key, given its name. If key does not + * exist, or the requested variable type doesn't match the type which was used + * when setting a value, an error is returned. + * + * In case of any error, out_value is not modified. + * + * All functions expect out_value to be a pointer to an already allocated variable + * of the given type. + * Additionally, nvs_get_str and nvs_get_blob support WinAPI-style length queries. + * To get the size necessary to store the value, call nvs_get_str or nvs_get_blob + * with zero out_value and non-zero pointer to length. Variable pointed to + * by length argument will be set to the required length. For nvs_get_str, + * this length includes the zero terminator. When calling nvs_get_str and + * nvs_get_blob with non-zero out_value, length has to be non-zero and has to + * point to the length available in out_value. + * It is suggested that nvs_get/set_str is used for zero-terminated C strings, and + * nvs_get/set_blob used for arbitrary data structures. + * + * Example of using nvs_get_i32: + * int32_t max_buffer_size = 4096; // default value + * esp_err_t err = nvs_get_i32(my_handle, "max_buffer_size", &max_buffer_size); + * assert(err == ESP_OK || err == ESP_ERR_NVS_NOT_FOUND); + * // if ESP_ERR_NVS_NOT_FOUND was returned, max_buffer_size will still + * // have its default value. + * + * Example (without error checking) of using nvs_get_str to get a string into dynamic array: + * size_t required_size; + * nvs_get_str(my_handle, "server_name", NULL, &required_size); + * char* server_name = malloc(required_size); + * nvs_get_str(my_handle, "server_name", server_name, &required_size); + * + * Example (without error checking) of using nvs_get_blob to get a binary data + * into a static array: + * uint8_t mac_addr[6]; + * size_t size = sizeof(mac_addr); + * nvs_get_blob(my_handle, "dst_mac_addr", mac_addr, &size); + * + * @param[in] handle Handle obtained from nvs_open function. + * @param[in] key Key name. Maximal length is determined by the underlying + * implementation, but is guaranteed to be at least + * 16 characters. Shouldn't be empty. + * @param out_value Pointer to the output value. + * May be NULL for nvs_get_str and nvs_get_blob, in this + * case required length will be returned in length argument. + * @param[inout] length For nvs_get_str and nvs_get_blob, non-zero pointer + * to the variable holding the length of out_value. + * In case out_value a zero, will be set to the length + * required to hold the value. In case out_value is not + * zero, will be set to the actual length of the value + * written. For nvs_get_str this includes zero terminator. + * + * @return - ESP_OK if the value was retrieved successfully + * - ESP_ERR_NVS_NOT_FOUND if the requested key doesn't exist + * - ESP_ERR_NVS_INVALID_HANDLE if handle has been closed or is NULL + * - ESP_ERR_NVS_INVALID_NAME if key name doesn't satisfy constraints + * - ESP_ERR_NVS_INVALID_LENGTH if length is not sufficient to store data + */ +esp_err_t nvs_get_i8 (nvs_handle handle, const char* key, int8_t* out_value); +esp_err_t nvs_get_u8 (nvs_handle handle, const char* key, uint8_t* out_value); +esp_err_t nvs_get_i16 (nvs_handle handle, const char* key, int16_t* out_value); +esp_err_t nvs_get_u16 (nvs_handle handle, const char* key, uint16_t* out_value); +esp_err_t nvs_get_i32 (nvs_handle handle, const char* key, int32_t* out_value); +esp_err_t nvs_get_u32 (nvs_handle handle, const char* key, uint32_t* out_value); +esp_err_t nvs_get_i64 (nvs_handle handle, const char* key, int64_t* out_value); +esp_err_t nvs_get_u64 (nvs_handle handle, const char* key, uint64_t* out_value); +esp_err_t nvs_get_str (nvs_handle handle, const char* key, char* out_value, size_t* length); +esp_err_t nvs_get_blob(nvs_handle handle, const char* key, void* out_value, size_t* length); + +/** + * @brief Erase key-value pair with given key name. + * + * Note that actual storage may not be updated until nvs_commit function is called. + * + * @param[in] handle Storage handle obtained with nvs_open. + * Handles that were opened read only cannot be used. + * + * @param[in] key Key name. Maximal length is determined by the underlying + * implementation, but is guaranteed to be at least + * 16 characters. Shouldn't be empty. + * + * @return - ESP_OK if erase operation was successful + * - ESP_ERR_NVS_INVALID_HANDLE if handle has been closed or is NULL + * - ESP_ERR_NVS_READ_ONLY if handle was opened as read only + * - ESP_ERR_NVS_NOT_FOUND if the requested key doesn't exist + * - other error codes from the underlying storage driver + */ +esp_err_t nvs_erase_key(nvs_handle handle, const char* key); + +/** + * @brief Erase all key-value pairs in a namespace + * + * Note that actual storage may not be updated until nvs_commit function is called. + * + * @param[in] handle Storage handle obtained with nvs_open. + * Handles that were opened read only cannot be used. + * + * @return - ESP_OK if erase operation was successful + * - ESP_ERR_NVS_INVALID_HANDLE if handle has been closed or is NULL + * - ESP_ERR_NVS_READ_ONLY if handle was opened as read only + * - other error codes from the underlying storage driver + */ +esp_err_t nvs_erase_all(nvs_handle handle); + +/** + * @brief Write any pending changes to non-volatile storage + * + * After setting any values, nvs_commit() must be called to ensure changes are written + * to non-volatile storage. Individual implementations may write to storage at other times, + * but this is not guaranteed. + * + * @param[in] handle Storage handle obtained with nvs_open. + * Handles that were opened read only cannot be used. + * + * @return - ESP_OK if the changes have been written successfully + * - ESP_ERR_NVS_INVALID_HANDLE if handle has been closed or is NULL + * - other error codes from the underlying storage driver + */ +esp_err_t nvs_commit(nvs_handle handle); + +/** + * @brief Close the storage handle and free any allocated resources + * + * This function should be called for each handle opened with nvs_open once + * the handle is not in use any more. Closing the handle may not automatically + * write the changes to nonvolatile storage. This has to be done explicitly using + * nvs_commit function. + * Once this function is called on a handle, the handle should no longer be used. + * + * @param[in] handle Storage handle to close + */ +void nvs_close(nvs_handle handle); + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif //ESP_NVS_H diff --git a/tools/sdk/include/nvs_flash/nvs_flash.h b/tools/sdk/include/nvs_flash/nvs_flash.h new file mode 100644 index 00000000..ce98f394 --- /dev/null +++ b/tools/sdk/include/nvs_flash/nvs_flash.h @@ -0,0 +1,46 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +#ifndef nvs_flash_h +#define nvs_flash_h + +#ifdef __cplusplus +extern "C" { +#endif + +/** Initialise NVS flash storage with default flash sector layout + + Temporarily, this region is hardcoded as a 12KB (0x3000 byte) + region starting at 24KB (0x6000 byte) offset in flash. +*/ +esp_err_t nvs_flash_init(void); + +/** Initialise NVS flash storage with custom flash sector layout + + @param baseSector Flash sector (units of 4096 bytes) offset to start NVS. + @param sectorCount Length (in flash sectors) of NVS region. + + @return ESP_OK if flash was successfully initialised. + + @note Use this parameter if you're not using the options in menuconfig for + configuring flash layout & partition table. +*/ +esp_err_t nvs_flash_init_custom(uint32_t baseSector, uint32_t sectorCount); + + +#ifdef __cplusplus +} +#endif + + +#endif /* nvs_flash_h */ diff --git a/tools/sdk/include/spi_flash/esp_spi_flash.h b/tools/sdk/include/spi_flash/esp_spi_flash.h new file mode 100644 index 00000000..6d635880 --- /dev/null +++ b/tools/sdk/include/spi_flash/esp_spi_flash.h @@ -0,0 +1,116 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef ESP_SPI_FLASH_H +#define ESP_SPI_FLASH_H + +#include +#include "esp_err.h" +#include "sdkconfig.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ESP_ERR_FLASH_BASE 0x10010 +#define ESP_ERR_FLASH_OP_FAIL (ESP_ERR_FLASH_BASE + 1) +#define ESP_ERR_FLASH_OP_TIMEOUT (ESP_ERR_FLASH_BASE + 2) + +#define SPI_FLASH_SEC_SIZE 4096 /**< SPI Flash sector size */ + +/** + * @brief Initialize SPI flash access driver + * + * This function must be called exactly once, before any other + * spi_flash_* functions are called. + * + */ +void spi_flash_init(); + +/** + * @brief Erase the Flash sector. + * + * @param uint16 sec : Sector number, the count starts at sector 0, 4KB per sector. + * + * @return esp_err_t + */ +esp_err_t spi_flash_erase_sector(uint16_t sec); + +/** + * @brief Write data to Flash. + * + * @param uint32 des_addr : destination address in Flash. + * @param uint32 *src_addr : source address of the data. + * @param uint32 size : length of data + * + * @return esp_err_t + */ +esp_err_t spi_flash_write(uint32_t des_addr, const uint32_t *src_addr, uint32_t size); + +/** + * @brief Read data from Flash. + * + * @param uint32 src_addr : source address of the data in Flash. + * @param uint32 *des_addr : destination address. + * @param uint32 size : length of data + * + * @return esp_err_t + */ +esp_err_t spi_flash_read(uint32_t src_addr, uint32_t *des_addr, uint32_t size); + + +#if CONFIG_SPI_FLASH_ENABLE_COUNTERS + +/** + * Structure holding statistics for one type of operation + */ +typedef struct { + uint32_t count; // number of times operation was executed + uint32_t time; // total time taken, in microseconds + uint32_t bytes; // total number of bytes, for read and write operations +} spi_flash_counter_t; + +typedef struct { + spi_flash_counter_t read; + spi_flash_counter_t write; + spi_flash_counter_t erase; +} spi_flash_counters_t; + +/** + * @brief Reset SPI flash operation counters + */ +void spi_flash_reset_counters(); + +/** + * @brief Print SPI flash operation counters + */ +void spi_flash_dump_counters(); + +/** + * @brief Return current SPI flash operation counters + * + * @return pointer to the spi_flash_counters_t structure holding values + * of the operation counters + */ +const spi_flash_counters_t* spi_flash_get_counters(); + +#endif //CONFIG_SPI_FLASH_ENABLE_COUNTERS + +#ifdef __cplusplus +} +#endif + + +#endif /* ESP_SPI_FLASH_H */ + diff --git a/tools/sdk/include/tcpip_adapter/tcpip_adapter.h b/tools/sdk/include/tcpip_adapter/tcpip_adapter.h new file mode 100644 index 00000000..5b0fc4c6 --- /dev/null +++ b/tools/sdk/include/tcpip_adapter/tcpip_adapter.h @@ -0,0 +1,388 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +#ifndef _TCPIP_ADAPTER_H_ +#define _TCPIP_ADAPTER_H_ + +/** + * @brief TCPIP adapter library + * + * The aim of this adapter is to provide an abstract layer upon TCPIP stack. + * With this layer, switch to other TCPIP stack is possible and easy in esp-idf. + * + * If users want to use other TCPIP stack, all those functions should be implemented + * by using the specific APIs of that stack. The macros in CONFIG_TCPIP_LWIP should be + * re-defined. + * + * tcpip_adapter_init should be called in the start of app_main for only once. + * + * Currently most adapter APIs are called in event_default_handlers.c. + * + * We recommend users only use set/get IP APIs, DHCP server/client APIs, + * get free station list APIs in application side. Other APIs are used in esp-idf internal, + * otherwise the state maybe wrong. + * + * TODO: ipv6 support will be added, use menuconfig to disable CONFIG_TCPIP_LWIP + */ + +#include +#include "rom/queue.h" +#include "esp_wifi_types.h" + +#define CONFIG_TCPIP_LWIP 1 +#define CONFIG_DHCP_STA_LIST 1 + +#if CONFIG_TCPIP_LWIP +#include "lwip/ip_addr.h" +#include "apps/dhcpserver.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \ + ip4_addr2_16(ipaddr), \ + ip4_addr3_16(ipaddr), \ + ip4_addr4_16(ipaddr) + +#define IPSTR "%d.%d.%d.%d" + +typedef struct { + ip4_addr_t ip; + ip4_addr_t netmask; + ip4_addr_t gw; +} tcpip_adapter_ip_info_t; + +typedef dhcps_lease_t tcpip_adapter_dhcps_lease_t; + +#if CONFIG_DHCP_STA_LIST +struct station_list { + STAILQ_ENTRY(station_list) next; + uint8_t mac[6]; + ip4_addr_t ip; +}; +#endif + +#endif + +#define ESP_ERR_TCPIP_ADAPTER_BASE 0x5000 // TODO: move base address to esp_err.h + +#define ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS ESP_ERR_TCPIP_ADAPTER_BASE + 0x00 +#define ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY ESP_ERR_TCPIP_ADAPTER_BASE + 0x01 +#define ESP_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED ESP_ERR_TCPIP_ADAPTER_BASE + 0x02 +#define ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STARTED ESP_ERR_TCPIP_ADAPTER_BASE + 0x03 +#define ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED ESP_ERR_TCPIP_ADAPTER_BASE + 0x04 +#define ESP_ERR_TCPIP_ADAPTER_NO_MEM ESP_ERR_TCPIP_ADAPTER_BASE + 0x05 +#define ESP_ERR_TCPIP_ADAPTER_DHCP_NOT_STOPPED ESP_ERR_TCPIP_ADAPTER_BASE + 0x06 + +/* TODO: add Ethernet interface */ +typedef enum { + TCPIP_ADAPTER_IF_STA = 0, /**< ESP32 station interface */ + TCPIP_ADAPTER_IF_AP, /**< ESP32 soft-AP interface */ + TCPIP_ADAPTER_IF_MAX +} tcpip_adapter_if_t; + +/* status of DHCP client or DHCP server */ +typedef enum { + TCPIP_ADAPTER_DHCP_INIT = 0, /**< DHCP client/server in initial state */ + TCPIP_ADAPTER_DHCP_STARTED, /**< DHCP client/server already been started */ + TCPIP_ADAPTER_DHCP_STOPPED, /**< DHCP client/server already been stopped */ + TCPIP_ADAPTER_DHCP_STATUS_MAX +} tcpip_adapter_dhcp_status_t; + +/* set the option mode for DHCP client or DHCP server */ +typedef enum{ + TCPIP_ADAPTER_OP_START = 0, + TCPIP_ADAPTER_OP_SET, /**< set option mode */ + TCPIP_ADAPTER_OP_GET, /**< get option mode */ + TCPIP_ADAPTER_OP_MAX +} tcpip_adapter_option_mode_t; + +typedef enum{ + TCPIP_ADAPTER_ROUTER_SOLICITATION_ADDRESS = 32, /**< solicitation router address */ + TCPIP_ADAPTER_REQUESTED_IP_ADDRESS = 50, /**< request IP address pool */ + TCPIP_ADAPTER_IP_ADDRESS_LEASE_TIME = 51, /**< request IP address lease time */ + TCPIP_ADAPTER_IP_REQUEST_RETRY_TIME = 52, /**< request IP address retry counter */ +} tcpip_adapter_option_id_t; + +/** + * @brief Initialize tcpip adpater + * + * This will initialize TCPIP stack inside. + */ +void tcpip_adapter_init(void); + +/** + * @brief Start an interface with specific MAC and IP + * + * softAP or station interface will be initialized, connect WiFi stack with TCPIP stack. + * + * For softAP interface, DHCP server will be started automatically. + * + * @param[in] tcpip_if: the interface which we will start + * @param[in] mac: set MAC address of this interface + * @param[in] ip_info: set IP address of this interface + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + * ESP_ERR_NO_MEM + */ +esp_err_t tcpip_adapter_start(tcpip_adapter_if_t tcpip_if, uint8_t *mac, tcpip_adapter_ip_info_t *ip_info); + +/** + * @brief Stop an interface + * + * The interface will be cleanup in this API, if DHCP server/client are started, will be stopped. + * + * @param[in] tcpip_if: the interface which will be started + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + * ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY + */ +esp_err_t tcpip_adapter_stop(tcpip_adapter_if_t tcpip_if); + +/** + * @brief Bring up an interface + * + * Only station interface need to be brought up, since station interface will be shut down when disconnect. + * + * @param[in] tcpip_if: the interface which will be up + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY + */ +esp_err_t tcpip_adapter_up(tcpip_adapter_if_t tcpip_if); + +/** + * @brief Shut down an interface + * + * Only station interface need to be shut down, since station interface will be brought up when connect. + * + * @param[in] tcpip_if: the interface which will be down + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY + */ +esp_err_t tcpip_adapter_down(tcpip_adapter_if_t tcpip_if); + +/** + * @brief Get interface's IP information + * + * There has an IP information copy in adapter library, if interface is up, get IP information from + * interface, otherwise get from copy. + * + * @param[in] tcpip_if: the interface which we want to get IP information + * @param[out] ip_info: If successful, IP information will be returned in this argument. + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + */ +esp_err_t tcpip_adapter_get_ip_info(tcpip_adapter_if_t tcpip_if, tcpip_adapter_ip_info_t *ip_info); + +/** + * @brief Set interface's IP information + * + * There has an IP information copy in adapter library, if interface is up, also set interface's IP. + * DHCP client/server should be stopped before set new IP information. + * + * This function is mainly used for setting static IP. + * + * @param[in] tcpip_if: the interface which we want to set IP information + * @param[in] ip_info: If successful, IP information will be returned in this argument. + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + */ +esp_err_t tcpip_adapter_set_ip_info(tcpip_adapter_if_t tcpip_if, tcpip_adapter_ip_info_t *ip_info); + +#if 0 +esp_err_t tcpip_adapter_get_mac(tcpip_adapter_if_t tcpip_if, uint8_t *mac); + +esp_err_t tcpip_adapter_set_mac(tcpip_adapter_if_t tcpip_if, uint8_t *mac); +#endif + +/** + * @brief Get DHCP server's status + * + * @param[in] tcpip_if: the interface which we will get status of DHCP server + * @param[out] status: If successful, the status of DHCP server will be return in this argument. + * + * @return ESP_OK + */ +esp_err_t tcpip_adapter_dhcps_get_status(tcpip_adapter_if_t tcpip_if, tcpip_adapter_dhcp_status_t *status); + +/** + * @brief Set or Get DHCP server's option + * + * @param[in] opt_op: option operate type, 1 for SET, 2 for GET. + * @param[in] opt_id: option index, 32 for ROUTER, 50 for IP POLL, 51 for LEASE TIME, 52 for REQUEST TIME + * @param[in] opt_val: option parameter + * @param[in] opt_len: option length + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + * ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED + * ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STARTED + */ +esp_err_t tcpip_adapter_dhcps_option(tcpip_adapter_option_mode_t opt_op, tcpip_adapter_option_id_t opt_id, void *opt_val, uint32_t opt_len); + +/** + * @brief Start DHCP server + * + * @note Currently DHCP server is bind to softAP interface. + * + * @param[in] tcpip_if: the interface which we will start DHCP server + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + * ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STARTED + */ +esp_err_t tcpip_adapter_dhcps_start(tcpip_adapter_if_t tcpip_if); + +/** + * @brief Stop DHCP server + * + * @note Currently DHCP server is bind to softAP interface. + * + * @param[in] tcpip_if: the interface which we will stop DHCP server + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + * ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPED + * ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY + */ +esp_err_t tcpip_adapter_dhcps_stop(tcpip_adapter_if_t tcpip_if); + +/** + * @brief Get DHCP client status + * + * @param[in] tcpip_if: the interface which we will get status of DHCP client + * @param[out] status: If successful, the status of DHCP client will be return in this argument. + * + * @return ESP_OK + */ +esp_err_t tcpip_adapter_dhcpc_get_status(tcpip_adapter_if_t tcpip_if, tcpip_adapter_dhcp_status_t *status); + +/** + * @brief Set or Get DHCP client's option + * + * @note This function is not implement now. + * + * @param[in] opt_op: option operate type, 1 for SET, 2 for GET. + * @param[in] opt_id: option index, 32 for ROUTER, 50 for IP POLL, 51 for LEASE TIME, 52 for REQUEST TIME + * @param[in] opt_val: option parameter + * @param[in] opt_len: option length + * + * @return ESP_OK + */ +esp_err_t tcpip_adapter_dhcpc_option(tcpip_adapter_option_mode_t opt_op, tcpip_adapter_option_id_t opt_id, void *opt_val, uint32_t opt_len); + +/** + * @brief Start DHCP client + * + * @note Currently DHCP client is bind to station interface. + * + * @param[in] tcpip_if: the interface which we will start DHCP client + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + * ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STARTED + * ESP_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED + */ +esp_err_t tcpip_adapter_dhcpc_start(tcpip_adapter_if_t tcpip_if); + +/** + * @brief Stop DHCP client + * + * @note Currently DHCP client is bind to station interface. + * + * @param[in] tcpip_if: the interface which we will stop DHCP client + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + * ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPED + * ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY + */ +esp_err_t tcpip_adapter_dhcpc_stop(tcpip_adapter_if_t tcpip_if); + +/** + * @brief Get data from station interface + * + * This function should be installed by esp_wifi_reg_rxcb, so WiFi packets will be forward to TCPIP stack. + * + * @param[in] void *buffer: the received data point + * @param[in] uint16_t len: the received data length + * @param[in] void *eb: parameter + * + * @return ESP_OK + */ +esp_err_t tcpip_adapter_sta_input(void *buffer, uint16_t len, void *eb); + +/** + * @brief Get data from softAP interface + * + * This function should be installed by esp_wifi_reg_rxcb, so WiFi packets will be forward to TCPIP stack. + * + * @param[in] void *buffer: the received data point + * @param[in] uint16_t len: the received data length + * @param[in] void *eb: parameter + * + * @return ESP_OK + */ +esp_err_t tcpip_adapter_ap_input(void *buffer, uint16_t len, void *eb); + +/** + * @brief Get WiFi interface index + * + * Get WiFi interface from TCPIP interface struct pointer. + * + * @param[in] void *dev: adapter interface + * + * @return WIFI_IF_STA + * WIFI_IF_AP + * WIFI_IF_MAX + */ +wifi_interface_t tcpip_adapter_get_wifi_if(void *dev); + +/** + * @brief Get the station information list + * + * @note This function should be called in AP mode and dhcp server started, and the list should + * be by using tcpip_adapter_free_sta_list. + * + * @param[in] sta_info: station information + * @param[out] sta_list: station information list + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_NO_MEM + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + */ +esp_err_t tcpip_adapter_get_sta_list(struct station_info *sta_info, struct station_list **sta_list); + +/** + * @brief Free the station information list's memory + * + * @param sta_list: station information list + * + * @return ESP_OK + */ +esp_err_t tcpip_adapter_free_sta_list(struct station_list *sta_list); + +#ifdef __cplusplus +} +#endif + +#endif /* _TCPIP_ADAPTER_H_ */ + diff --git a/tools/sdk/ld/esp32.common.ld b/tools/sdk/ld/esp32.common.ld new file mode 100644 index 00000000..a3c63678 --- /dev/null +++ b/tools/sdk/ld/esp32.common.ld @@ -0,0 +1,168 @@ +/* Default entry point: */ +ENTRY(call_start_cpu0); + +SECTIONS +{ + /* Send .iram0 code to iram */ + .iram0.vectors : + { + /* Vectors go to IRAM */ + _init_start = ABSOLUTE(.); + /* Vectors according to builds/RF-2015.2-win32/esp108_v1_2_s5_512int_2/config.html */ + . = 0x0; + KEEP(*(.WindowVectors.text)); + . = 0x180; + KEEP(*(.Level2InterruptVector.text)); + . = 0x1c0; + KEEP(*(.Level3InterruptVector.text)); + . = 0x200; + KEEP(*(.Level4InterruptVector.text)); + . = 0x240; + KEEP(*(.Level5InterruptVector.text)); + . = 0x280; + KEEP(*(.DebugExceptionVector.text)); + . = 0x2c0; + KEEP(*(.NMIExceptionVector.text)); + . = 0x300; + KEEP(*(.KernelExceptionVector.text)); + . = 0x340; + KEEP(*(.UserExceptionVector.text)); + . = 0x3C0; + KEEP(*(.DoubleExceptionVector.text)); + . = 0x400; + *(.*Vector.literal) + + *(.UserEnter.literal); + *(.UserEnter.text); + . = ALIGN (16); + *(.entry.text) + *(.init.literal) + *(.init) + _init_end = ABSOLUTE(.); + } > iram0_0_seg + + .iram0.text : + { + /* Code marked as runnning out of IRAM */ + _iram_text_start = ABSOLUTE(.); + *(.iram1 .iram1.*) + *libfreertos.a:(.literal .text .literal.* .text.*) + *libphy.a:(.literal .text .literal.* .text.*) + *librtc.a:(.literal .text .literal.* .text.*) + *libpp.a:(.literal .text .literal.* .text.*) + *libhal.a:(.literal .text .literal.* .text.*) + _iram_text_end = ABSOLUTE(.); + } > iram0_0_seg + + /* Shared RAM */ + .dram0.bss (NOLOAD) : + { + . = ALIGN (8); + _bss_start = ABSOLUTE(.); + *(.dynsbss) + *(.sbss) + *(.sbss.*) + *(.gnu.linkonce.sb.*) + *(.scommon) + *(.sbss2) + *(.sbss2.*) + *(.gnu.linkonce.sb2.*) + *(.dynbss) + KEEP(*(.bss)) + *(.bss.*) + *(.share.mem) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN (8); + _bss_end = ABSOLUTE(.); + } >dram0_0_seg + + .dram0.data : + { + _data_start = ABSOLUTE(.); + KEEP(*(.data)) + KEEP(*(.data.*)) + KEEP(*(.gnu.linkonce.d.*)) + KEEP(*(.data1)) + KEEP(*(.sdata)) + KEEP(*(.sdata.*)) + KEEP(*(.gnu.linkonce.s.*)) + KEEP(*(.sdata2)) + KEEP(*(.sdata2.*)) + KEEP(*(.gnu.linkonce.s2.*)) + KEEP(*(.jcr)) + *(.dram1 .dram1.*) + _data_end = ABSOLUTE(.); + . = ALIGN(4); + _heap_start = ABSOLUTE(.); + } >dram0_0_seg + + .flash.rodata : + { + _rodata_start = ABSOLUTE(.); + *(.rodata) + *(.rodata.*) + *(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */ + *(.gnu.linkonce.r.*) + *(.rodata1) + __XT_EXCEPTION_TABLE_ = ABSOLUTE(.); + *(.xt_except_table) + *(.gcc_except_table) + *(.gnu.linkonce.e.*) + *(.gnu.version_r) + *(.eh_frame) + . = (. + 3) & ~ 3; + /* C++ constructor and destructor tables, properly ordered: */ + __init_array_start = ABSOLUTE(.); + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + __init_array_end = ABSOLUTE(.); + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + /* C++ exception handlers table: */ + __XT_EXCEPTION_DESCS_ = ABSOLUTE(.); + *(.xt_except_desc) + *(.gnu.linkonce.h.*) + __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.); + *(.xt_except_desc_end) + *(.dynamic) + *(.gnu.version_d) + _rodata_end = ABSOLUTE(.); + /* Literals are also RO data. */ + _lit4_start = ABSOLUTE(.); + *(*.lit4) + *(.lit4.*) + *(.gnu.linkonce.lit4.*) + _lit4_end = ABSOLUTE(.); + . = ALIGN(4); + } >drom0_0_seg + + .flash.text : + { + _stext = .; + _text_start = ABSOLUTE(.); + *(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*) + *(.irom0.text) /* catch stray ICACHE_RODATA_ATTR */ + *(.fini.literal) + *(.fini) + *(.gnu.version) + _text_end = ABSOLUTE(.); + _etext = .; + } >iram0_2_seg + + .rtc.text : + { + . = ALIGN(4); + *(.rtc.literal .rtc.text) + } >rtc_iram_seg + + .rtc.data : + { + *(.rtc.data) + *(.rtc.rodata) + } > rtc_slow_seg +} diff --git a/tools/sdk/ld/esp32.ld b/tools/sdk/ld/esp32.ld new file mode 100644 index 00000000..d6b0ac42 --- /dev/null +++ b/tools/sdk/ld/esp32.ld @@ -0,0 +1,55 @@ +/* ESP32 Linker Script Memory Layout + + This file describes the memory layout (memory blocks) as virtual + memory addresses. + + esp32.common.ld contains output sections to link compiler output + into these memory blocks. + + *** + + This linker script is passed through the C preprocessor to include + configuration options. + + Please use preprocessor features sparingly! Restrict + to simple macros with numeric values, and/or #if/#endif blocks. +*/ +#include "sdkconfig.h" + +MEMORY +{ + /* All these values assume the flash cache is on, and have the blocks this uses subtracted from the length + of the various regions. The 'data access port' dram/drom regions map to the same iram/irom regions but + are connected to the data port of the CPU and eg allow bytewise access. */ + + /* IRAM for PRO cpu. Not sure if happy with this, this is MMU area... */ + iram0_0_seg (RX) : org = 0x40080000, len = 0x20000 + + /* Even though the segment name is iram, it is actually mapped to flash */ + iram0_2_seg (RX) : org = 0x400D0018, len = 0x330000 + + /* Shared data RAM, excluding memory reserved for ROM bss/data/stack. + + Enabling Bluetooth & Trace Memory features in menuconfig will decrease + the amount of RAM available. + */ + dram0_0_seg (RW) : org = 0x3FFB0000 + CONFIG_BT_RESERVE_DRAM, + len = 0x50000 - CONFIG_TRACEMEM_RESERVE_DRAM - CONFIG_BT_RESERVE_DRAM + + /* Flash mapped constant data */ + drom0_0_seg (R) : org = 0x3F400010, len = 0x800000 + + /* RTC fast memory (executable). Persists over deep sleep. + */ + rtc_iram_seg(RWX) : org = 0x400C0000, len = 0x2000 + + /* RTC slow memory (data accessible). Persists over deep sleep. + + Start of RTC slow memory is reserved for ULP co-processor code + data, if enabled. + */ + rtc_slow_seg(RW) : org = 0x50000000 + CONFIG_ULP_COPROC_RESERVE_MEM, + len = 0x1000 - CONFIG_ULP_COPROC_RESERVE_MEM +} + +/* Heap ends at top of dram0_0_seg */ +_heap_end = 0x40000000 - CONFIG_TRACEMEM_RESERVE_DRAM; diff --git a/tools/sdk/ld/esp32.peripherals.ld b/tools/sdk/ld/esp32.peripherals.ld new file mode 100644 index 00000000..aaadedce --- /dev/null +++ b/tools/sdk/ld/esp32.peripherals.ld @@ -0,0 +1,20 @@ +PROVIDE ( UART0 = 0x3ff40000 ); +PROVIDE ( SPI1 = 0x3ff42000 ); +PROVIDE ( SPI0 = 0x3ff43000 ); +PROVIDE ( GPIO = 0x3ff44000 ); +PROVIDE ( SIGMADELTA = 0x3ff44f00 ); +PROVIDE ( UHCI1 = 0x3ff4C000 ); +PROVIDE ( I2S0 = 0x3ff4F000 ); +PROVIDE ( UART1 = 0x3ff50000 ); +PROVIDE ( I2C0 = 0x3ff53000 ); +PROVIDE ( UHCI0 = 0x3ff54000 ); +PROVIDE ( RMT = 0x3ff56000 ); +PROVIDE ( PCNT = 0x3ff57000 ); +PROVIDE ( LEDC = 0x3ff59000 ); +PROVIDE ( TIMERG0 = 0x3ff5F000 ); +PROVIDE ( TIMERG1 = 0x3ff60000 ); +PROVIDE ( SPI2 = 0x3ff64000 ); +PROVIDE ( SPI3 = 0x3ff65000 ); +PROVIDE ( I2C1 = 0x3ff67000 ); +PROVIDE ( I2S1 = 0x3ff6D000 ); +PROVIDE ( UART2 = 0x3ff6E000 ); diff --git a/tools/sdk/ld/esp32.rom.ld b/tools/sdk/ld/esp32.rom.ld new file mode 100644 index 00000000..cc14d325 --- /dev/null +++ b/tools/sdk/ld/esp32.rom.ld @@ -0,0 +1,1841 @@ +/* +ESP32 ROM address table +Generated for ROM with MD5sum: +ab8282ae908fe9e7a63fb2a4ac2df013 ../../rom_image/prorom.elf +*/ +PROVIDE ( abort = 0x4000bba4 ); +PROVIDE ( abs = 0x40056340 ); +PROVIDE ( __absvdi2 = 0x4006387c ); +PROVIDE ( __absvsi2 = 0x40063868 ); +PROVIDE ( Add2SelfBigHex256 = 0x40015b7c ); +PROVIDE ( AddBigHex256 = 0x40015b28 ); +PROVIDE ( AddBigHexModP256 = 0x40015c98 ); +PROVIDE ( __adddf3 = 0x40002590 ); +PROVIDE ( AddP256 = 0x40015c74 ); +PROVIDE ( AddPdiv2_256 = 0x40015ce0 ); +PROVIDE ( __addsf3 = 0x400020e8 ); +PROVIDE ( __addvdi3 = 0x40002cbc ); +PROVIDE ( __addvsi3 = 0x40002c98 ); +PROVIDE ( aes_128_cbc_decrypt = 0x4005cc7c ); +PROVIDE ( aes_128_cbc_encrypt = 0x4005cc18 ); +PROVIDE ( aes_unwrap = 0x4005ccf0 ); +PROVIDE ( app_gpio_arg = 0x3ffe003c ); +PROVIDE ( app_gpio_handler = 0x3ffe0040 ); +PROVIDE ( __ascii_wctomb = 0x40058ef0 ); +PROVIDE ( asctime = 0x40059588 ); +PROVIDE ( asctime_r = 0x40000ec8 ); +PROVIDE ( __ashldi3 = 0x4000c818 ); +PROVIDE ( __ashrdi3 = 0x4000c830 ); +PROVIDE ( asiprintf = 0x40056d9c ); +PROVIDE ( _asiprintf_r = 0x40056d4c ); +PROVIDE ( asniprintf = 0x40056cd8 ); +PROVIDE ( _asniprintf_r = 0x40056c64 ); +PROVIDE ( asnprintf = 0x40056cd8 ); +PROVIDE ( _asnprintf_r = 0x40056c64 ); +PROVIDE ( asprintf = 0x40056d9c ); +PROVIDE ( _asprintf_r = 0x40056d4c ); +PROVIDE ( atoi = 0x400566c4 ); +PROVIDE ( _atoi_r = 0x400566d4 ); +PROVIDE ( atol = 0x400566ec ); +PROVIDE ( _atol_r = 0x400566fc ); +PROVIDE ( base64_decode = 0x4005ced8 ); +PROVIDE ( base64_encode = 0x4005cdbc ); +PROVIDE ( BasePoint_x_256 = 0x3ff97488 ); +PROVIDE ( BasePoint_y_256 = 0x3ff97468 ); +PROVIDE ( bigHexInversion256 = 0x400168f0 ); +PROVIDE ( bigHexP256 = 0x3ff973bc ); +PROVIDE ( __bswapdi2 = 0x400649c4 ); +PROVIDE ( __bswapsi2 = 0x4006499c ); +PROVIDE ( btdm_r_ble_bt_handler_tab_p_get = 0x40019b0c ); +PROVIDE ( btdm_r_btdm_option_data_p_get = 0x40010004 ); +PROVIDE ( btdm_r_btdm_rom_version_get = 0x40010078 ); +PROVIDE ( btdm_r_data_init = 0x4001002c ); +PROVIDE ( btdm_r_import_rf_phy_func_p_get = 0x40054298 ); +PROVIDE ( btdm_r_ip_func_p_get = 0x40019af0 ); +PROVIDE ( btdm_r_ip_func_p_set = 0x40019afc ); +PROVIDE ( btdm_r_modules_func_p_get = 0x4005427c ); +PROVIDE ( btdm_r_modules_func_p_set = 0x40054270 ); +PROVIDE ( btdm_r_plf_func_p_set = 0x40054288 ); +PROVIDE ( bt_util_buf_env = 0x3ffb8bd4 ); +PROVIDE ( bzero = 0x4000c1f4 ); +PROVIDE ( cache_flash_mmu_set = 0x400095e0 ); +PROVIDE ( Cache_Flush = 0x40009a14 ); +PROVIDE ( Cache_Read_Disable = 0x40009ab8 ); +PROVIDE ( Cache_Read_Enable = 0x40009a84 ); +PROVIDE ( Cache_Read_Init = 0x40009950 ); +PROVIDE ( cache_sram_mmu_set = 0x400097f4 ); +/* This is static function, but can be used, not generated by script*/ +PROVIDE ( calc_rtc_memory_crc = 0x40008170 ); +PROVIDE ( calloc = 0x4000bee4 ); +PROVIDE ( _calloc_r = 0x4000bbf8 ); +PROVIDE ( check_pos = 0x400068b8 ); +PROVIDE ( _cleanup = 0x40001df8 ); +PROVIDE ( _cleanup_r = 0x40001d48 ); +PROVIDE ( __clear_cache = 0x40063860 ); +PROVIDE ( close = 0x40001778 ); +PROVIDE ( _close_r = 0x4000bd3c ); +PROVIDE ( __clrsbdi2 = 0x40064a38 ); +PROVIDE ( __clrsbsi2 = 0x40064a20 ); +PROVIDE ( __clzdi2 = 0x4000ca50 ); +PROVIDE ( __clzsi2 = 0x4000c7e8 ); +PROVIDE ( __cmpdi2 = 0x40063820 ); +PROVIDE ( co_default_bdaddr = 0x3ffae704 ); +PROVIDE ( co_null_bdaddr = 0x3ffb80e0 ); +PROVIDE ( co_sca2ppm = 0x3ff971e8 ); +PROVIDE ( crc16_be = 0x4005d09c ); +PROVIDE ( crc16_le = 0x4005d05c ); +PROVIDE ( crc32_be = 0x4005d024 ); +PROVIDE ( crc32_le = 0x4005cfec ); +PROVIDE ( crc8_be = 0x4005d114 ); +PROVIDE ( crc8_le = 0x4005d0e0 ); +PROVIDE ( creat = 0x40000e8c ); +PROVIDE ( ctime = 0x400595b0 ); +PROVIDE ( ctime_r = 0x400595c4 ); +PROVIDE ( _ctype_ = 0x3ff96354 ); +PROVIDE ( __ctype_ptr__ = 0x3ff96350 ); +PROVIDE ( __ctzdi2 = 0x4000ca64 ); +PROVIDE ( __ctzsi2 = 0x4000c7f0 ); +PROVIDE ( _data_end = 0x4000d5c8 ); +PROVIDE ( _data_end_btdm_rom = 0x4000d4f8 ); +PROVIDE ( _data_start = 0x4000d4f8 ); +PROVIDE ( _data_start_btdm_rom = 0x4000d4f4 ); +PROVIDE ( _data_start_btdm = 0x3ffae6e0); +PROVIDE ( _data_end_btdm = 0x3ffaff10); +PROVIDE ( _bss_start_btdm = 0x3ffb8000); +PROVIDE ( _bss_end_btdm = 0x3ffbff70); +PROVIDE ( _daylight = 0x3ffae0a4 ); +PROVIDE ( dbg_default_handler = 0x3ff97218 ); +PROVIDE ( dbg_state = 0x3ffb8d5d ); +PROVIDE ( DebugE256PublicKey_x = 0x3ff97428 ); +PROVIDE ( DebugE256PublicKey_y = 0x3ff97408 ); +PROVIDE ( DebugE256SecretKey = 0x3ff973e8 ); +PROVIDE ( _DebugExceptionVector = 0x40000280 ); +PROVIDE ( debug_timer = 0x3ffe042c ); +PROVIDE ( debug_timerfn = 0x3ffe0430 ); +PROVIDE ( dh_group14_generator = 0x3ff9ac60 ); +PROVIDE ( dh_group14_prime = 0x3ff9ab60 ); +PROVIDE ( dh_group15_generator = 0x3ff9ab5f ); +PROVIDE ( dh_group15_prime = 0x3ff9a9df ); +PROVIDE ( dh_group16_generator = 0x3ff9a9de ); +PROVIDE ( dh_group16_prime = 0x3ff9a7de ); +PROVIDE ( dh_group17_generator = 0x3ff9a7dd ); +PROVIDE ( dh_group17_prime = 0x3ff9a4dd ); +PROVIDE ( dh_group18_generator = 0x3ff9a4dc ); +PROVIDE ( dh_group18_prime = 0x3ff9a0dc ); +PROVIDE ( dh_group1_generator = 0x3ff9ae03 ); +PROVIDE ( dh_group1_prime = 0x3ff9ada3 ); +PROVIDE ( dh_group2_generator = 0x3ff9ada2 ); +PROVIDE ( dh_group2_prime = 0x3ff9ad22 ); +PROVIDE ( dh_group5_generator = 0x3ff9ad21 ); +PROVIDE ( dh_group5_prime = 0x3ff9ac61 ); +PROVIDE ( div = 0x40056348 ); +PROVIDE ( __divdc3 = 0x40064460 ); +PROVIDE ( __divdf3 = 0x40002954 ); +PROVIDE ( __divdi3 = 0x4000ca84 ); +PROVIDE ( __divsc3 = 0x40064200 ); +PROVIDE ( __divsf3 = 0x4000234c ); +PROVIDE ( __divsi3 = 0x4000c7b8 ); +PROVIDE ( _DoubleExceptionVector = 0x400003c0 ); +PROVIDE ( dummy_len_plus = 0x3ffae290 ); +PROVIDE ( __dummy_lock = 0x4000c728 ); +PROVIDE ( __dummy_lock_try = 0x4000c730 ); +PROVIDE ( ecc_env = 0x3ffb8d60 ); +PROVIDE ( ecc_Jacobian_InfinityPoint256 = 0x3ff972e8 ); +PROVIDE ( em_buf_env = 0x3ffb8d74 ); +PROVIDE ( environ = 0x3ffae0b4 ); +PROVIDE ( __env_lock = 0x40001fd4 ); +PROVIDE ( __env_unlock = 0x40001fe0 ); +PROVIDE ( __eqdf2 = 0x400636a8 ); +PROVIDE ( __eqsf2 = 0x40063374 ); +PROVIDE ( esp_crc8 = 0x4005d144 ); +PROVIDE ( _etext = 0x4000d66c ); +PROVIDE ( ets_aes_crypt = 0x4005c9b8 ); +PROVIDE ( ets_aes_disable = 0x4005c8f8 ); +PROVIDE ( ets_aes_enable = 0x4005c8cc ); +PROVIDE ( ets_aes_set_endian = 0x4005c928 ); +PROVIDE ( ets_aes_setkey_dec = 0x4005c994 ); +PROVIDE ( ets_aes_setkey_enc = 0x4005c97c ); +PROVIDE ( ets_bigint_disable = 0x4005c4e0 ); +PROVIDE ( ets_bigint_enable = 0x4005c498 ); +PROVIDE ( ets_bigint_mod_mult_getz = 0x4005c818 ); +PROVIDE ( ets_bigint_mod_mult_prepare = 0x4005c7b4 ); +PROVIDE ( ets_bigint_mod_power_getz = 0x4005c614 ); +PROVIDE ( ets_bigint_mod_power_prepare = 0x4005c54c ); +PROVIDE ( ets_bigint_montgomery_mult_getz = 0x4005c7a4 ); +PROVIDE ( ets_bigint_montgomery_mult_prepare = 0x4005c6fc ); +PROVIDE ( ets_bigint_mult_getz = 0x4005c6e8 ); +PROVIDE ( ets_bigint_mult_prepare = 0x4005c630 ); +PROVIDE ( ets_bigint_wait_finish = 0x4005c520 ); +PROVIDE ( ets_delay_us = 0x40008534 ); +PROVIDE ( ets_efuse_get_8M_clock = 0x40008710 ); +PROVIDE ( ets_efuse_get_spiconfig = 0x40008658 ); +PROVIDE ( ets_efuse_program_op = 0x40008628 ); +PROVIDE ( ets_efuse_read_op = 0x40008600 ); +PROVIDE ( ets_get_cpu_frequency = 0x4000855c ); +PROVIDE ( ets_get_detected_xtal_freq = 0x40008588 ); +PROVIDE ( ets_get_xtal_scale = 0x4000856c ); +PROVIDE ( ets_install_putc1 = 0x40007d18 ); +PROVIDE ( ets_install_putc2 = 0x40007d38 ); +PROVIDE ( ets_install_uart_printf = 0x40007d28 ); +PROVIDE ( ets_intr_count = 0x3ffe03fc ); +PROVIDE ( ets_intr_lock = 0x400067b0 ); +PROVIDE ( ets_intr_unlock = 0x400067c4 ); +PROVIDE ( ets_isr_attach = 0x400067ec ); +PROVIDE ( ets_isr_mask = 0x400067fc ); +PROVIDE ( ets_isr_unmask = 0x40006808 ); +PROVIDE ( ets_post = 0x4000673c ); +PROVIDE ( ets_printf = 0x40007d54 ); +PROVIDE ( ets_readySet_ = 0x3ffe01f0 ); +PROVIDE ( ets_run = 0x400066bc ); +PROVIDE ( ets_secure_boot_check = 0x4005cb40 ); +PROVIDE ( ets_secure_boot_check_finish = 0x4005cc04 ); +PROVIDE ( ets_secure_boot_check_start = 0x4005cbcc ); +PROVIDE ( ets_secure_boot_finish = 0x4005ca84 ); +PROVIDE ( ets_secure_boot_hash = 0x4005cad4 ); +PROVIDE ( ets_secure_boot_obtain = 0x4005cb14 ); +PROVIDE ( ets_secure_boot_rd_abstract = 0x4005cba8 ); +PROVIDE ( ets_secure_boot_rd_iv = 0x4005cb84 ); +PROVIDE ( ets_secure_boot_start = 0x4005ca34 ); +PROVIDE ( ets_set_appcpu_boot_addr = 0x4000689c ); +PROVIDE ( ets_set_idle_cb = 0x40006674 ); +PROVIDE ( ets_set_startup_callback = 0x4000688c ); +PROVIDE ( ets_set_user_start = 0x4000687c ); +PROVIDE ( ets_sha_disable = 0x4005c0a8 ); +PROVIDE ( ets_sha_enable = 0x4005c07c ); +PROVIDE ( ets_sha_finish = 0x4005c104 ); +PROVIDE ( ets_sha_init = 0x4005c0d4 ); +PROVIDE ( ets_sha_update = 0x4005c2a0 ); +PROVIDE ( ets_startup_callback = 0x3ffe0404 ); +PROVIDE ( ets_task = 0x40006688 ); +PROVIDE ( ets_timer_arm = 0x40008368 ); +PROVIDE ( ets_timer_arm_us = 0x400083ac ); +PROVIDE ( ets_timer_disarm = 0x400083ec ); +PROVIDE ( ets_timer_done = 0x40008428 ); +PROVIDE ( ets_timer_handler_isr = 0x40008454 ); +PROVIDE ( ets_timer_init = 0x400084e8 ); +PROVIDE ( ets_timer_setfn = 0x40008350 ); +PROVIDE ( ets_unpack_flash_code = 0x40007018 ); +PROVIDE ( ets_unpack_flash_code_legacy = 0x4000694c ); +PROVIDE ( ets_update_cpu_frequency = 0x40008550 ); +PROVIDE ( ets_waiti0 = 0x400067d8 ); +PROVIDE ( exc_cause_table = 0x3ff991d0 ); +PROVIDE ( _exit_r = 0x4000bd28 ); +PROVIDE ( __extendsfdf2 = 0x40002c34 ); +PROVIDE ( fclose = 0x400020ac ); +PROVIDE ( _fclose_r = 0x40001fec ); +PROVIDE ( fflush = 0x40059394 ); +PROVIDE ( _fflush_r = 0x40059320 ); +PROVIDE ( __ffsdi2 = 0x4000ca2c ); +PROVIDE ( __ffssi2 = 0x4000c804 ); +PROVIDE ( FilePacketSendDeflatedReqMsgProc = 0x40008b24 ); +PROVIDE ( FilePacketSendReqMsgProc = 0x40008860 ); +PROVIDE ( _findenv_r = 0x40001f44 ); +PROVIDE ( fiprintf = 0x40056efc ); +PROVIDE ( _fiprintf_r = 0x40056ed8 ); +PROVIDE ( fiscanf = 0x40058884 ); +PROVIDE ( _fiscanf_r = 0x400588b4 ); +PROVIDE ( __fixdfdi = 0x40002ac4 ); +PROVIDE ( __fixdfsi = 0x40002a78 ); +PROVIDE ( __fixsfdi = 0x4000244c ); +PROVIDE ( __fixsfsi = 0x4000240c ); +PROVIDE ( __fixunsdfsi = 0x40002b30 ); +PROVIDE ( __fixunssfdi = 0x40002504 ); +PROVIDE ( __fixunssfsi = 0x400024ac ); +PROVIDE ( FlashDwnLdDeflatedStartMsgProc = 0x40008ad8 ); +PROVIDE ( FlashDwnLdParamCfgMsgProc = 0x4000891c ); +PROVIDE ( FlashDwnLdStartMsgProc = 0x40008820 ); +PROVIDE ( FlashDwnLdStopDeflatedReqMsgProc = 0x40008c18 ); +PROVIDE ( FlashDwnLdStopReqMsgProc = 0x400088ec ); +PROVIDE ( __floatdidf = 0x4000c988 ); +PROVIDE ( __floatdisf = 0x4000c8c0 ); +PROVIDE ( __floatsidf = 0x4000c944 ); +PROVIDE ( __floatsisf = 0x4000c870 ); +PROVIDE ( __floatundidf = 0x4000c978 ); +PROVIDE ( __floatundisf = 0x4000c8b0 ); +PROVIDE ( __floatunsidf = 0x4000c938 ); +PROVIDE ( __floatunsisf = 0x4000c864 ); +PROVIDE ( __fp_lock_all = 0x40001f1c ); +PROVIDE ( fprintf = 0x40056efc ); +PROVIDE ( _fprintf_r = 0x40056ed8 ); +PROVIDE ( __fp_unlock_all = 0x40001f30 ); +PROVIDE ( fputwc = 0x40058ea8 ); +PROVIDE ( __fputwc = 0x40058da0 ); +PROVIDE ( _fputwc_r = 0x40058e4c ); +PROVIDE ( free = 0x4000beb8 ); +PROVIDE ( _free_r = 0x4000bbcc ); +PROVIDE ( fscanf = 0x40058884 ); +PROVIDE ( _fscanf_r = 0x400588b4 ); +PROVIDE ( _fstat_r = 0x4000bccc ); +PROVIDE ( _fwalk = 0x4000c738 ); +PROVIDE ( _fwalk_reent = 0x4000c770 ); +PROVIDE ( __gcc_bcmp = 0x40064a70 ); +PROVIDE ( __gedf2 = 0x40063768 ); +PROVIDE ( _GeneralException = 0x40000e14 ); +PROVIDE ( __gesf2 = 0x4006340c ); +PROVIDE ( __get_current_time_locale = 0x40001834 ); +PROVIDE ( _getenv_r = 0x40001fbc ); +PROVIDE ( _getpid_r = 0x4000bcfc ); +PROVIDE ( __getreent = 0x4000be8c ); +PROVIDE ( _gettimeofday_r = 0x4000bc58 ); +PROVIDE ( __gettzinfo = 0x40001fcc ); +PROVIDE ( GetUartDevice = 0x40009598 ); +PROVIDE ( GF_Jacobian_Point_Addition256 = 0x400163a4 ); +PROVIDE ( GF_Jacobian_Point_Double256 = 0x40016260 ); +PROVIDE ( GF_Point_Jacobian_To_Affine256 = 0x40016b0c ); +PROVIDE ( _global_impure_ptr = 0x3ffae0b0 ); +PROVIDE ( gmtime = 0x40059848 ); +PROVIDE ( gmtime_r = 0x40059868 ); +PROVIDE ( g_phyFuns_instance = 0x3ffae0c4 ); +PROVIDE ( gpio_init = 0x40009c20 ); +PROVIDE ( gpio_input_get = 0x40009b88 ); +PROVIDE ( gpio_input_get_high = 0x40009b9c ); +PROVIDE ( gpio_intr_ack = 0x40009dd4 ); +PROVIDE ( gpio_intr_ack_high = 0x40009e1c ); +PROVIDE ( gpio_intr_handler_register = 0x40009e6c ); +PROVIDE ( gpio_intr_pending = 0x40009cec ); +PROVIDE ( gpio_intr_pending_high = 0x40009cf8 ); +PROVIDE ( gpio_matrix_in = 0x40009edc ); +PROVIDE ( gpio_matrix_out = 0x40009f0c ); +PROVIDE ( gpio_output_set = 0x40009b24 ); +PROVIDE ( gpio_output_set_high = 0x40009b5c ); +PROVIDE ( gpio_pad_hold = 0x4000a734 ); +PROVIDE ( gpio_pad_pulldown = 0x4000a348 ); +PROVIDE ( gpio_pad_pullup = 0x4000a22c ); +PROVIDE ( gpio_pad_select_gpio = 0x40009fdc ); +PROVIDE ( gpio_pad_set_drv = 0x4000a11c ); +PROVIDE ( gpio_pad_unhold = 0x4000a484 ); +PROVIDE ( gpio_pending_mask = 0x3ffe0038 ); +PROVIDE ( gpio_pending_mask_high = 0x3ffe0044 ); +PROVIDE ( gpio_pin_intr_state_set = 0x40009d04 ); +PROVIDE ( gpio_pin_wakeup_disable = 0x40009eb0 ); +PROVIDE ( gpio_pin_wakeup_enable = 0x40009e7c ); +PROVIDE ( gpio_register_get = 0x40009cbc ); +PROVIDE ( gpio_register_set = 0x40009bbc ); +PROVIDE ( __gtdf2 = 0x400636dc ); +PROVIDE ( __gtsf2 = 0x400633a0 ); +PROVIDE ( gTxMsg = 0x3ffe0050 ); +PROVIDE ( hci_cmd_desc_root_tab = 0x3ff976d4 ); +PROVIDE ( hci_cmd_desc_tab_ctrl_bb = 0x3ff97b70 ); +PROVIDE ( hci_cmd_desc_tab_info_par = 0x3ff97b1c ); +PROVIDE ( hci_cmd_desc_tab_le = 0x3ff97870 ); +PROVIDE ( hci_cmd_desc_tab_lk_ctrl = 0x3ff97fc0 ); +PROVIDE ( hci_cmd_desc_tab_lk_pol = 0x3ff97f3c ); +PROVIDE ( hci_cmd_desc_tab_stat_par = 0x3ff97ac8 ); +PROVIDE ( hci_cmd_desc_tab_testing = 0x3ff97a98 ); +PROVIDE ( hci_cmd_desc_tab_vs = 0x3ff97714 ); +PROVIDE ( hci_command_handler = 0x4004c928 ); +PROVIDE ( hci_env = 0x3ffb9350 ); +PROVIDE ( hci_evt_dbg_desc_tab = 0x3ff9750c ); +PROVIDE ( hci_evt_desc_tab = 0x3ff9751c ); +PROVIDE ( hci_evt_le_desc_tab = 0x3ff974b4 ); +PROVIDE ( hci_fc_env = 0x3ffb9340 ); +PROVIDE ( hmac_md5 = 0x4005d264 ); +PROVIDE ( hmac_md5_vector = 0x4005d17c ); +PROVIDE ( hmac_sha1 = 0x40060acc ); +PROVIDE ( hmac_sha1_vector = 0x400609e4 ); +PROVIDE ( hmac_sha256 = 0x40060d58 ); +PROVIDE ( hmac_sha256_vector = 0x40060c84 ); +PROVIDE ( intr_matrix_set = 0x4000681c ); +PROVIDE ( iprintf = 0x40056978 ); +PROVIDE ( _iprintf_r = 0x40056944 ); +PROVIDE ( isalnum = 0x40000f04 ); +PROVIDE ( isalpha = 0x40000f18 ); +PROVIDE ( isascii = 0x4000c20c ); +PROVIDE ( _isatty_r = 0x40000ea0 ); +PROVIDE ( isblank = 0x40000f2c ); +PROVIDE ( iscanf = 0x40058760 ); +PROVIDE ( _iscanf_r = 0x4005879c ); +PROVIDE ( iscntrl = 0x40000f50 ); +PROVIDE ( isdigit = 0x40000f64 ); +PROVIDE ( isgraph = 0x40000f94 ); +PROVIDE ( islower = 0x40000f78 ); +PROVIDE ( isprint = 0x40000fa8 ); +PROVIDE ( ispunct = 0x40000fc0 ); +PROVIDE ( isspace = 0x40000fd4 ); +PROVIDE ( isupper = 0x40000fe8 ); +PROVIDE ( itoa = 0x400566b4 ); +PROVIDE ( __itoa = 0x40056678 ); +PROVIDE ( jd_decomp = 0x400613e8 ); +PROVIDE ( jd_prepare = 0x40060fa8 ); +PROVIDE ( ke_env = 0x3ffb93cc ); +PROVIDE ( _KernelExceptionVector = 0x40000300 ); +PROVIDE ( _kill_r = 0x4000bd10 ); +PROVIDE ( labs = 0x40056370 ); +PROVIDE ( lb_default_handler = 0x3ff982b8 ); +PROVIDE ( lb_default_state_tab_p_get = 0x4001c198 ); +PROVIDE ( lb_env = 0x3ffb9424 ); +PROVIDE ( lb_hci_cmd_handler_tab_p_get = 0x4001c18c ); +PROVIDE ( lb_state = 0x3ffb94e8 ); +PROVIDE ( lc_default_handler = 0x3ff98648 ); +PROVIDE ( lc_default_state_tab_p_get = 0x4002f494 ); +PROVIDE ( lc_env = 0x3ffb94ec ); +PROVIDE ( lc_hci_cmd_handler_tab_p_get = 0x4002f488 ); +PROVIDE ( lc_state = 0x3ffb9508 ); +PROVIDE ( ld_acl_br_sizes = 0x3ff98a2a ); +PROVIDE ( ld_acl_br_types = 0x3ff98a36 ); +PROVIDE ( ld_acl_edr_sizes = 0x3ff98a14 ); +PROVIDE ( ld_acl_edr_types = 0x3ff98a22 ); +PROVIDE ( ld_env = 0x3ffb9510 ); +PROVIDE ( ldiv = 0x40056378 ); +PROVIDE ( ld_pcm_settings_dft = 0x3ff98a0c ); +PROVIDE ( ld_sched_params = 0x3ffb96c0 ); +PROVIDE ( ld_sync_train_channels = 0x3ff98a3c ); +PROVIDE ( __ledf2 = 0x40063704 ); +PROVIDE ( __lesf2 = 0x400633c0 ); +PROVIDE ( _Level2FromVector = 0x40000954 ); +PROVIDE ( _Level2Vector = 0x40000180 ); +PROVIDE ( _Level3FromVector = 0x40000a28 ); +PROVIDE ( _Level3Vector = 0x400001c0 ); +PROVIDE ( _Level4FromVector = 0x40000af8 ); +PROVIDE ( _Level4Vector = 0x40000200 ); +PROVIDE ( _Level5FromVector = 0x40000c68 ); +PROVIDE ( _Level5Vector = 0x40000240 ); +PROVIDE ( _LevelOneInterrupt = 0x40000835 ); +PROVIDE ( _link_r = 0x4000bc9c ); +PROVIDE ( llc_default_handler = 0x3ff98b3c ); +PROVIDE ( llc_default_state_tab_p_get = 0x40046058 ); +PROVIDE ( llc_env = 0x3ffb96d0 ); +PROVIDE ( llc_hci_acl_data_tx_handler = 0x40042398 ); +PROVIDE ( llc_hci_cmd_handler_tab_p_get = 0x40042358 ); +PROVIDE ( llc_hci_command_handler = 0x40042360 ); +PROVIDE ( llcp_pdu_handler_tab_p_get = 0x40043f64 ); +PROVIDE ( llc_state = 0x3ffb96f8 ); +PROVIDE ( lldesc_build_chain = 0x4000a850 ); +PROVIDE ( lldesc_num2link = 0x4000a948 ); +PROVIDE ( lldesc_set_owner = 0x4000a974 ); +PROVIDE ( lld_evt_env = 0x3ffb9704 ); +PROVIDE ( lld_pdu_adv_pk_desc_tab = 0x3ff98c70 ); +PROVIDE ( lld_pdu_llcp_pk_desc_tab = 0x3ff98b68 ); +PROVIDE ( LLM_AA_CT1 = 0x3ff98d8a ); +PROVIDE ( LLM_AA_CT2 = 0x3ff98d88 ); +PROVIDE ( llm_default_handler = 0x3ff98d80 ); +PROVIDE ( llm_default_state_tab_p_get = 0x4004e718 ); +PROVIDE ( llm_hci_cmd_handler_tab_p_get = 0x4004c920 ); +PROVIDE ( llm_le_env = 0x3ffb976c ); +PROVIDE ( llm_local_cmds = 0x3ff98d38 ); +PROVIDE ( llm_local_data_len_values = 0x3ff98d1c ); +PROVIDE ( llm_local_le_feats = 0x3ff98d30 ); +PROVIDE ( llm_local_le_states = 0x3ff98d28 ); +PROVIDE ( llm_state = 0x3ffb985c ); +PROVIDE ( lm_default_handler = 0x3ff990e0 ); +PROVIDE ( lm_default_state_tab_p_get = 0x40054268 ); +PROVIDE ( lm_env = 0x3ffb9860 ); +PROVIDE ( lm_hci_cmd_handler_tab_p_get = 0x4005425c ); +PROVIDE ( lm_local_supp_feats = 0x3ff990ee ); +PROVIDE ( lm_n_page_tab = 0x3ff990e8 ); +PROVIDE ( lmp_desc_tab = 0x3ff96e6c ); +PROVIDE ( lmp_ext_desc_tab = 0x3ff96d9c ); +PROVIDE ( lm_state = 0x3ffb9a1c ); +PROVIDE ( __locale_charset = 0x40059540 ); +PROVIDE ( __locale_cjk_lang = 0x40059558 ); +PROVIDE ( localeconv = 0x4005957c ); +PROVIDE ( _localeconv_r = 0x40059560 ); +PROVIDE ( __locale_mb_cur_max = 0x40059548 ); +PROVIDE ( __locale_msgcharset = 0x40059550 ); +PROVIDE ( localtime = 0x400595dc ); +PROVIDE ( localtime_r = 0x400595fc ); +PROVIDE ( _lock_acquire = 0x4000be14 ); +PROVIDE ( _lock_acquire_recursive = 0x4000be28 ); +PROVIDE ( _lock_close = 0x4000bdec ); +PROVIDE ( _lock_close_recursive = 0x4000be00 ); +PROVIDE ( _lock_init = 0x4000bdc4 ); +PROVIDE ( _lock_init_recursive = 0x4000bdd8 ); +PROVIDE ( _lock_release = 0x4000be64 ); +PROVIDE ( _lock_release_recursive = 0x4000be78 ); +PROVIDE ( _lock_try_acquire = 0x4000be3c ); +PROVIDE ( _lock_try_acquire_recursive = 0x4000be50 ); +PROVIDE ( longjmp = 0x400562cc ); +PROVIDE ( _lseek_r = 0x4000bd8c ); +PROVIDE ( __lshrdi3 = 0x4000c84c ); +PROVIDE ( __ltdf2 = 0x40063790 ); +PROVIDE ( __ltsf2 = 0x4006342c ); +PROVIDE ( malloc = 0x4000bea0 ); +PROVIDE ( _malloc_r = 0x4000bbb4 ); +PROVIDE ( maxSecretKey_256 = 0x3ff97448 ); +PROVIDE ( __mb_cur_max = 0x3ff96530 ); +PROVIDE ( MD5Final = 0x4005db1c ); +PROVIDE ( MD5Init = 0x4005da7c ); +PROVIDE ( MD5Update = 0x4005da9c ); +PROVIDE ( md5_vector = 0x4005db80 ); +PROVIDE ( memccpy = 0x4000c220 ); +PROVIDE ( memchr = 0x4000c244 ); +PROVIDE ( memcmp = 0x4000c260 ); +PROVIDE ( memcpy = 0x4000c2c8 ); +PROVIDE ( MemDwnLdStartMsgProc = 0x40008948 ); +PROVIDE ( MemDwnLdStopReqMsgProc = 0x400089dc ); +PROVIDE ( memmove = 0x4000c3c0 ); +PROVIDE ( MemPacketSendReqMsgProc = 0x40008978 ); +PROVIDE ( memrchr = 0x4000c400 ); +PROVIDE ( memset = 0x4000c44c ); +PROVIDE ( mktime = 0x4005a5e8 ); +PROVIDE ( mmu_init = 0x400095a4 ); +PROVIDE ( __moddi3 = 0x4000cd4c ); +PROVIDE ( __modsi3 = 0x4000c7c0 ); +PROVIDE ( __month_lengths = 0x3ff9609c ); +PROVIDE ( __muldc3 = 0x40063bf4 ); +PROVIDE ( __muldf3 = 0x4006358c ); +PROVIDE ( __muldi3 = 0x4000c9fc ); +PROVIDE ( __mulsc3 = 0x40063934 ); +PROVIDE ( __mulsf3 = 0x400632c8 ); +PROVIDE ( __mulsi3 = 0x4000c7b0 ); +PROVIDE ( MultiplyBigHexByUint32_256 = 0x40016214 ); +PROVIDE ( MultiplyBigHexModP256 = 0x400160b8 ); +PROVIDE ( MultiplyByU32ModP256 = 0x40015fdc ); +PROVIDE ( multofup = 0x4000ab8c ); +PROVIDE ( __mulvdi3 = 0x40002d78 ); +PROVIDE ( __mulvsi3 = 0x40002d60 ); +PROVIDE ( mz_adler32 = 0x4005edbc ); +PROVIDE ( mz_crc32 = 0x4005ee88 ); +PROVIDE ( mz_free = 0x4005eed4 ); +PROVIDE ( __nedf2 = 0x400636a8 ); +PROVIDE ( __negdf2 = 0x400634a0 ); +PROVIDE ( __negdi2 = 0x4000ca14 ); +PROVIDE ( __negsf2 = 0x400020c0 ); +PROVIDE ( __negvdi2 = 0x40002e98 ); +PROVIDE ( __negvsi2 = 0x40002e78 ); +PROVIDE ( __nesf2 = 0x40063374 ); +PROVIDE ( _NMIExceptionVector = 0x400002c0 ); +PROVIDE ( notEqual256 = 0x40015b04 ); +PROVIDE ( __nsau_data = 0x3ff96544 ); +PROVIDE ( one_bits = 0x3ff971f8 ); +PROVIDE ( open = 0x4000178c ); +PROVIDE ( _open_r = 0x4000bd54 ); +PROVIDE ( __paritysi2 = 0x40002f3c ); +PROVIDE ( pbkdf2_sha1 = 0x40060ba4 ); +PROVIDE ( phy_get_romfuncs = 0x40004100 ); +PROVIDE ( __popcountdi2 = 0x40002ef8 ); +PROVIDE ( __popcountsi2 = 0x40002ed0 ); +PROVIDE ( __popcount_tab = 0x3ff96544 ); +PROVIDE ( __powidf2 = 0x400638d4 ); +PROVIDE ( __powisf2 = 0x4006389c ); +PROVIDE ( _Pri_4_HandlerAddress = 0x3ffe0648 ); +PROVIDE ( _Pri_5_HandlerAddress = 0x3ffe064c ); +PROVIDE ( printf = 0x40056978 ); +PROVIDE ( _printf_common = 0x40057338 ); +PROVIDE ( _printf_float = 0x4000befc ); +PROVIDE ( _printf_i = 0x40057404 ); +PROVIDE ( _printf_r = 0x40056944 ); +PROVIDE ( qsort = 0x40056424 ); +PROVIDE ( _raise_r = 0x4000bc70 ); +PROVIDE ( rand = 0x40001058 ); +PROVIDE ( rand_r = 0x400010d4 ); +PROVIDE ( r_btdm_option_data = 0x3ffae6e0 ); +PROVIDE ( r_bt_util_buf_acl_rx_alloc = 0x40010218 ); +PROVIDE ( r_bt_util_buf_acl_rx_free = 0x40010234 ); +PROVIDE ( r_bt_util_buf_acl_tx_alloc = 0x40010268 ); +PROVIDE ( r_bt_util_buf_acl_tx_free = 0x40010280 ); +PROVIDE ( r_bt_util_buf_init = 0x400100e4 ); +PROVIDE ( r_bt_util_buf_lmp_tx_alloc = 0x400101d0 ); +PROVIDE ( r_bt_util_buf_lmp_tx_free = 0x400101ec ); +PROVIDE ( r_bt_util_buf_sync_clear = 0x400103c8 ); +PROVIDE ( r_bt_util_buf_sync_init = 0x400102c4 ); +PROVIDE ( r_bt_util_buf_sync_rx_alloc = 0x40010468 ); +PROVIDE ( r_bt_util_buf_sync_rx_free = 0x4001049c ); +PROVIDE ( r_bt_util_buf_sync_tx_alloc = 0x400103ec ); +PROVIDE ( r_bt_util_buf_sync_tx_free = 0x40010428 ); +PROVIDE ( rc4_skip = 0x40060928 ); +PROVIDE ( r_co_bdaddr_compare = 0x40014324 ); +PROVIDE ( r_co_bytes_to_string = 0x400142e4 ); +PROVIDE ( r_co_list_check_size_available = 0x400142c4 ); +PROVIDE ( r_co_list_extract = 0x4001404c ); +PROVIDE ( r_co_list_extract_after = 0x40014118 ); +PROVIDE ( r_co_list_find = 0x4001419c ); +PROVIDE ( r_co_list_init = 0x40013f14 ); +PROVIDE ( r_co_list_insert_after = 0x40014254 ); +PROVIDE ( r_co_list_insert_before = 0x40014200 ); +PROVIDE ( r_co_list_merge = 0x400141bc ); +PROVIDE ( r_co_list_pool_init = 0x40013f30 ); +PROVIDE ( r_co_list_pop_front = 0x40014028 ); +PROVIDE ( r_co_list_push_back = 0x40013fb8 ); +PROVIDE ( r_co_list_push_front = 0x40013ff4 ); +PROVIDE ( r_co_list_size = 0x400142ac ); +PROVIDE ( r_co_nb_good_channels = 0x40014360 ); +PROVIDE ( r_co_slot_to_duration = 0x40014348 ); +PROVIDE ( RcvMsg = 0x4000954c ); +PROVIDE ( r_dbg_init = 0x40014394 ); +PROVIDE ( r_dbg_platform_reset_complete = 0x400143d0 ); +PROVIDE ( r_dbg_swdiag_init = 0x40014470 ); +PROVIDE ( r_dbg_swdiag_read = 0x400144a4 ); +PROVIDE ( r_dbg_swdiag_write = 0x400144d0 ); +PROVIDE ( r_E1 = 0x400108e8 ); +PROVIDE ( r_E21 = 0x40010968 ); +PROVIDE ( r_E22 = 0x400109b4 ); +PROVIDE ( r_E3 = 0x40010a58 ); +PROVIDE ( r_ea_alarm_clear = 0x40015ab4 ); +PROVIDE ( r_ea_alarm_set = 0x40015a10 ); +PROVIDE ( read = 0x400017dc ); +PROVIDE ( _read_r = 0x4000bda8 ); +PROVIDE ( r_ea_elt_cancel = 0x400150d0 ); +PROVIDE ( r_ea_elt_create = 0x40015264 ); +PROVIDE ( r_ea_elt_insert = 0x400152a8 ); +PROVIDE ( r_ea_elt_remove = 0x400154f0 ); +PROVIDE ( r_ea_finetimer_isr = 0x400155d4 ); +PROVIDE ( r_ea_init = 0x40015228 ); +PROVIDE ( r_ea_interval_create = 0x4001555c ); +PROVIDE ( r_ea_interval_delete = 0x400155a8 ); +PROVIDE ( r_ea_interval_duration_req = 0x4001597c ); +PROVIDE ( r_ea_interval_insert = 0x4001557c ); +PROVIDE ( r_ea_interval_remove = 0x40015590 ); +PROVIDE ( realloc = 0x4000becc ); +PROVIDE ( _realloc_r = 0x4000bbe0 ); +PROVIDE ( r_ea_offset_req = 0x40015748 ); +PROVIDE ( r_ea_sleep_check = 0x40015928 ); +PROVIDE ( r_ea_sw_isr = 0x40015724 ); +PROVIDE ( r_ea_time_get_halfslot_rounded = 0x40015894 ); +PROVIDE ( r_ea_time_get_slot_rounded = 0x400158d4 ); +PROVIDE ( r_ecc_abort_key256_generation = 0x40017070 ); +PROVIDE ( r_ecc_generate_key256 = 0x40016e00 ); +PROVIDE ( r_ecc_gen_new_public_key = 0x400170c0 ); +PROVIDE ( r_ecc_gen_new_secret_key = 0x400170e4 ); +PROVIDE ( r_ecc_get_debug_Keys = 0x40017224 ); +PROVIDE ( r_ecc_init = 0x40016dbc ); +PROVIDE ( RecvBuff = 0x3ffe009c ); +PROVIDE ( recv_packet = 0x40009424 ); +PROVIDE ( r_em_buf_init = 0x4001729c ); +PROVIDE ( r_em_buf_rx_buff_addr_get = 0x400173e8 ); +PROVIDE ( r_em_buf_rx_free = 0x400173c4 ); +PROVIDE ( r_em_buf_tx_buff_addr_get = 0x40017404 ); +PROVIDE ( r_em_buf_tx_free = 0x4001741c ); +PROVIDE ( _rename_r = 0x4000bc28 ); +PROVIDE ( _ResetHandler = 0x40000450 ); +PROVIDE ( _ResetVector = 0x40000400 ); +PROVIDE ( r_F1_256 = 0x400133e4 ); +PROVIDE ( r_F2_256 = 0x40013568 ); +PROVIDE ( r_F3_256 = 0x40013664 ); +PROVIDE ( RFPLL_ICP_TABLE = 0x3ffb8b7c ); +PROVIDE ( r_G_256 = 0x40013470 ); +PROVIDE ( r_H3 = 0x40013760 ); +PROVIDE ( r_H4 = 0x40013830 ); +PROVIDE ( r_h4tl_init = 0x40017878 ); +PROVIDE ( r_h4tl_start = 0x40017924 ); +PROVIDE ( r_h4tl_stop = 0x40017934 ); +PROVIDE ( r_h4tl_write = 0x400178d0 ); +PROVIDE ( r_H5 = 0x400138dc ); +PROVIDE ( r_hashConcat = 0x40013a38 ); +PROVIDE ( r_hci_acl_tx_data_alloc = 0x4001951c ); +PROVIDE ( r_hci_acl_tx_data_received = 0x40019654 ); +PROVIDE ( r_hci_bt_acl_bdaddr_register = 0x40018900 ); +PROVIDE ( r_hci_bt_acl_bdaddr_unregister = 0x400189ac ); +PROVIDE ( r_hci_bt_acl_conhdl_register = 0x4001895c ); +PROVIDE ( r_hci_cmd_get_max_param_size = 0x400192d0 ); +PROVIDE ( r_hci_cmd_received = 0x400192f8 ); +PROVIDE ( r_hci_evt_filter_add = 0x40018a64 ); +PROVIDE ( r_hci_evt_mask_set = 0x400189e4 ); +PROVIDE ( r_hci_fc_acl_buf_size_set = 0x40017988 ); +PROVIDE ( r_hci_fc_acl_en = 0x400179d8 ); +PROVIDE ( r_hci_fc_acl_packet_sent = 0x40017a3c ); +PROVIDE ( r_hci_fc_check_host_available_nb_acl_packets = 0x40017aa4 ); +PROVIDE ( r_hci_fc_check_host_available_nb_sync_packets = 0x40017ac8 ); +PROVIDE ( r_hci_fc_host_nb_acl_pkts_complete = 0x40017a6c ); +PROVIDE ( r_hci_fc_host_nb_sync_pkts_complete = 0x40017a88 ); +PROVIDE ( r_hci_fc_init = 0x40017974 ); +PROVIDE ( r_hci_fc_sync_buf_size_set = 0x400179b0 ); +PROVIDE ( r_hci_fc_sync_en = 0x40017a30 ); +PROVIDE ( r_hci_fc_sync_packet_sent = 0x40017a54 ); +PROVIDE ( r_hci_init = 0x40018538 ); +PROVIDE ( r_hci_look_for_cmd_desc = 0x40018454 ); +PROVIDE ( r_hci_look_for_dbg_evt_desc = 0x400184c4 ); +PROVIDE ( r_hci_look_for_evt_desc = 0x400184a0 ); +PROVIDE ( r_hci_look_for_le_evt_desc = 0x400184e0 ); +PROVIDE ( r_hci_reset = 0x4001856c ); +PROVIDE ( r_hci_send_2_host = 0x400185bc ); +PROVIDE ( r_hci_sync_tx_data_alloc = 0x40019754 ); +PROVIDE ( r_hci_sync_tx_data_received = 0x400197c0 ); +PROVIDE ( r_hci_tl_init = 0x40019290 ); +PROVIDE ( r_hci_tl_send = 0x40019228 ); +PROVIDE ( r_hci_util_pack = 0x40019874 ); +PROVIDE ( r_hci_util_unpack = 0x40019998 ); +PROVIDE ( r_hci_voice_settings_get = 0x40018bdc ); +PROVIDE ( r_hci_voice_settings_set = 0x40018be8 ); +PROVIDE ( r_HMAC = 0x40013968 ); +PROVIDE ( r_import_rf_phy_func = 0x3ffb8354 ); +PROVIDE ( r_import_rf_phy_func_p = 0x3ffafd64 ); +PROVIDE ( r_ip_funcs = 0x3ffae710 ); +PROVIDE ( r_ip_funcs_p = 0x3ffae70c ); +PROVIDE ( r_ke_check_malloc = 0x40019de0 ); +PROVIDE ( r_ke_event_callback_set = 0x40019ba8 ); +PROVIDE ( r_ke_event_clear = 0x40019c2c ); +PROVIDE ( r_ke_event_flush = 0x40019ccc ); +PROVIDE ( r_ke_event_get = 0x40019c78 ); +PROVIDE ( r_ke_event_get_all = 0x40019cc0 ); +PROVIDE ( r_ke_event_init = 0x40019b90 ); +PROVIDE ( r_ke_event_schedule = 0x40019cdc ); +PROVIDE ( r_ke_event_set = 0x40019be0 ); +PROVIDE ( r_ke_flush = 0x4001a374 ); +PROVIDE ( r_ke_free = 0x4001a014 ); +PROVIDE ( r_ke_get_max_mem_usage = 0x4001a1c8 ); +PROVIDE ( r_ke_get_mem_usage = 0x4001a1a0 ); +PROVIDE ( r_ke_init = 0x4001a318 ); +PROVIDE ( r_ke_is_free = 0x4001a184 ); +PROVIDE ( r_ke_malloc = 0x40019eb4 ); +PROVIDE ( r_ke_mem_init = 0x40019d3c ); +PROVIDE ( r_ke_mem_is_empty = 0x40019d8c ); +PROVIDE ( r_ke_msg_alloc = 0x4001a1e0 ); +PROVIDE ( r_ke_msg_dest_id_get = 0x4001a2e0 ); +PROVIDE ( r_ke_msg_discard = 0x4001a850 ); +PROVIDE ( r_ke_msg_forward = 0x4001a290 ); +PROVIDE ( r_ke_msg_forward_new_id = 0x4001a2ac ); +PROVIDE ( r_ke_msg_free = 0x4001a2cc ); +PROVIDE ( r_ke_msg_in_queue = 0x4001a2f8 ); +PROVIDE ( r_ke_msg_save = 0x4001a858 ); +PROVIDE ( r_ke_msg_send = 0x4001a234 ); +PROVIDE ( r_ke_msg_send_basic = 0x4001a26c ); +PROVIDE ( r_ke_msg_src_id_get = 0x4001a2ec ); +PROVIDE ( r_ke_queue_extract = 0x40055fd0 ); +PROVIDE ( r_ke_queue_insert = 0x40056020 ); +PROVIDE ( r_ke_sleep_check = 0x4001a3d8 ); +PROVIDE ( r_ke_state_get = 0x4001a7d8 ); +PROVIDE ( r_ke_state_set = 0x4001a6fc ); +PROVIDE ( r_ke_stats_get = 0x4001a3f0 ); +PROVIDE ( r_ke_task_check = 0x4001a8a4 ); +PROVIDE ( r_ke_task_create = 0x4001a674 ); +PROVIDE ( r_ke_task_delete = 0x4001a6c0 ); +PROVIDE ( r_ke_task_init = 0x4001a650 ); +PROVIDE ( r_ke_task_msg_flush = 0x4001a860 ); +PROVIDE ( r_ke_timer_active = 0x4001ac08 ); +PROVIDE ( r_ke_timer_adjust_all = 0x4001ac30 ); +PROVIDE ( r_ke_timer_clear = 0x4001ab90 ); +PROVIDE ( r_ke_timer_init = 0x4001aa9c ); +PROVIDE ( r_ke_timer_set = 0x4001aac0 ); +PROVIDE ( r_ke_timer_sleep_check = 0x4001ac50 ); +PROVIDE ( r_KPrimC = 0x40010ad4 ); +PROVIDE ( r_lb_clk_adj_activate = 0x4001ae70 ); +PROVIDE ( r_lb_clk_adj_id_get = 0x4001af14 ); +PROVIDE ( r_lb_clk_adj_period_update = 0x4001af20 ); +PROVIDE ( r_lb_init = 0x4001acd4 ); +PROVIDE ( r_lb_mst_key = 0x4001afc0 ); +PROVIDE ( r_lb_mst_key_cmp = 0x4001af74 ); +PROVIDE ( r_lb_mst_key_restart_enc = 0x4001b0d4 ); +PROVIDE ( r_lb_mst_start_act_bcst_enc = 0x4001b198 ); +PROVIDE ( r_lb_mst_stop_act_bcst_enc = 0x4001b24c ); +PROVIDE ( r_lb_reset = 0x4001ad38 ); +PROVIDE ( r_lb_send_lmp = 0x4001adbc ); +PROVIDE ( r_lb_send_pdu_clk_adj = 0x4001af3c ); +PROVIDE ( r_lb_util_get_csb_mode = 0x4001ada4 ); +PROVIDE ( r_lb_util_get_nb_broadcast = 0x4001ad80 ); +PROVIDE ( r_lb_util_get_res_lt_addr = 0x4001ad98 ); +PROVIDE ( r_lb_util_set_nb_broadcast = 0x4001ad8c ); +PROVIDE ( r_lc_afh_set = 0x4001cc74 ); +PROVIDE ( r_lc_afh_start = 0x4001d240 ); +PROVIDE ( r_lc_auth_cmp = 0x4001cd54 ); +PROVIDE ( r_lc_calc_link_key = 0x4001ce7c ); +PROVIDE ( r_lc_chg_pkt_type_cmp = 0x4001d038 ); +PROVIDE ( r_lc_chg_pkt_type_cont = 0x4001cfbc ); +PROVIDE ( r_lc_chg_pkt_type_retry = 0x4001d0ac ); +PROVIDE ( r_lc_chk_to = 0x4001d2a8 ); +PROVIDE ( r_lc_cmd_stat_send = 0x4001c914 ); +PROVIDE ( r_lc_comb_key_svr = 0x4001d30c ); +PROVIDE ( r_lc_con_cmp = 0x4001d44c ); +PROVIDE ( r_lc_con_cmp_evt_send = 0x4001d4fc ); +PROVIDE ( r_lc_conn_seq_done = 0x40021334 ); +PROVIDE ( r_lc_detach = 0x4002037c ); +PROVIDE ( r_lc_dhkey = 0x4001d564 ); +PROVIDE ( r_lc_enc_cmp = 0x4001d8bc ); +PROVIDE ( r_lc_enc_key_refresh = 0x4001d720 ); +PROVIDE ( r_lc_end_chk_colli = 0x4001d858 ); +PROVIDE ( r_lc_end_of_sniff_nego = 0x4001d9a4 ); +PROVIDE ( r_lc_enter_sniff_mode = 0x4001ddb8 ); +PROVIDE ( r_lc_epr_change_lk = 0x4001db38 ); +PROVIDE ( r_lc_epr_cmp = 0x4001da88 ); +PROVIDE ( r_lc_epr_resp = 0x4001e0b4 ); +PROVIDE ( r_lc_epr_rsw_cmp = 0x4001dd40 ); +PROVIDE ( r_lc_ext_feat = 0x40020d6c ); +PROVIDE ( r_lc_feat = 0x40020984 ); +PROVIDE ( r_lc_hl_connect = 0x400209e8 ); +PROVIDE ( r_lc_init = 0x4001c948 ); +PROVIDE ( r_lc_init_calc_f3 = 0x4001deb0 ); +PROVIDE ( r_lc_initiator_epr = 0x4001e064 ); +PROVIDE ( r_lc_init_passkey_loop = 0x4001dfc0 ); +PROVIDE ( r_lc_init_start_mutual_auth = 0x4001df60 ); +PROVIDE ( r_lc_key_exch_end = 0x4001e140 ); +PROVIDE ( r_lc_legacy_pair = 0x4001e1c0 ); +PROVIDE ( r_lc_local_switch = 0x4001e22c ); +PROVIDE ( r_lc_local_trans_mode = 0x4001e2e4 ); +PROVIDE ( r_lc_local_untrans_mode = 0x4001e3a0 ); +PROVIDE ( r_lc_loc_auth = 0x40020ecc ); +PROVIDE ( r_lc_locepr_lkref = 0x4001d648 ); +PROVIDE ( r_lc_locepr_rsw = 0x4001d5d0 ); +PROVIDE ( r_lc_loc_sniff = 0x40020a6c ); +PROVIDE ( r_lc_max_slot_mgt = 0x4001e410 ); +PROVIDE ( r_lc_mst_key = 0x4001e7c0 ); +PROVIDE ( r_lc_mst_qos_done = 0x4001ea80 ); +PROVIDE ( r_lc_mst_send_mst_key = 0x4001e8f4 ); +PROVIDE ( r_lc_mutual_auth_end = 0x4001e670 ); +PROVIDE ( r_lc_mutual_auth_end2 = 0x4001e4f4 ); +PROVIDE ( r_lc_packet_type = 0x40021038 ); +PROVIDE ( r_lc_pair = 0x40020ddc ); +PROVIDE ( r_lc_pairing_cont = 0x4001eafc ); +PROVIDE ( r_lc_passkey_comm = 0x4001ed20 ); +PROVIDE ( r_lc_prepare_all_links_for_clk_adj = 0x40021430 ); +PROVIDE ( r_lc_proc_rcv_dhkey = 0x4001edec ); +PROVIDE ( r_lc_ptt = 0x4001ee2c ); +PROVIDE ( r_lc_ptt_cmp = 0x4001eeec ); +PROVIDE ( r_lc_qos_setup = 0x4001ef50 ); +PROVIDE ( r_lc_rd_rem_name = 0x4001efd0 ); +PROVIDE ( r_lc_release = 0x4001f8a8 ); +PROVIDE ( r_lc_rem_enc = 0x4001f124 ); +PROVIDE ( r_lc_rem_name_cont = 0x4001f290 ); +PROVIDE ( r_lc_rem_nego_trans_mode = 0x4001f1b4 ); +PROVIDE ( r_lc_rem_sniff = 0x40020ca4 ); +PROVIDE ( r_lc_rem_sniff_sub_rate = 0x40020b10 ); +PROVIDE ( r_lc_rem_switch = 0x4001f070 ); +PROVIDE ( r_lc_rem_trans_mode = 0x4001f314 ); +PROVIDE ( r_lc_rem_unsniff = 0x400207a0 ); +PROVIDE ( r_lc_rem_untrans_mode = 0x4001f36c ); +PROVIDE ( r_lc_reset = 0x4001c99c ); +PROVIDE ( r_lc_resp_auth = 0x4001f518 ); +PROVIDE ( r_lc_resp_calc_f3 = 0x4001f710 ); +PROVIDE ( r_lc_resp_num_comp = 0x40020074 ); +PROVIDE ( r_lc_resp_oob_nonce = 0x4001f694 ); +PROVIDE ( r_lc_resp_oob_wait_nonce = 0x4001f66c ); +PROVIDE ( r_lc_resp_pair = 0x400208a4 ); +PROVIDE ( r_lc_resp_sec_auth = 0x4001f4a0 ); +PROVIDE ( r_lc_resp_wait_dhkey_cont = 0x4001f86c ); +PROVIDE ( r_lc_restart_enc = 0x4001f8ec ); +PROVIDE ( r_lc_restart_enc_cont = 0x4001f940 ); +PROVIDE ( r_lc_restore_afh_reporting = 0x4001f028 ); +PROVIDE ( r_lc_restore_to = 0x4001f9e0 ); +PROVIDE ( r_lc_ret_sniff_max_slot_chg = 0x4001fa30 ); +PROVIDE ( r_lc_rsw_clean_up = 0x4001dc70 ); +PROVIDE ( r_lc_rsw_done = 0x4001db94 ); +PROVIDE ( r_lc_sco_baseband_ack = 0x40022b00 ); +PROVIDE ( r_lc_sco_detach = 0x40021e40 ); +PROVIDE ( r_lc_sco_host_accept = 0x40022118 ); +PROVIDE ( r_lc_sco_host_reject = 0x400222b8 ); +PROVIDE ( r_lc_sco_host_request = 0x40021f4c ); +PROVIDE ( r_lc_sco_host_request_disc = 0x4002235c ); +PROVIDE ( r_lc_sco_init = 0x40021dc8 ); +PROVIDE ( r_lc_sco_peer_accept = 0x40022780 ); +PROVIDE ( r_lc_sco_peer_accept_disc = 0x40022a08 ); +PROVIDE ( r_lc_sco_peer_reject = 0x40022824 ); +PROVIDE ( r_lc_sco_peer_reject_disc = 0x40022a8c ); +PROVIDE ( r_lc_sco_peer_request = 0x4002240c ); +PROVIDE ( r_lc_sco_peer_request_disc = 0x400228ec ); +PROVIDE ( r_lc_sco_release = 0x40021eec ); +PROVIDE ( r_lc_sco_reset = 0x40021dfc ); +PROVIDE ( r_lc_sco_timeout = 0x40022bd4 ); +PROVIDE ( r_lc_sec_auth_compute_sres = 0x4001f3ec ); +PROVIDE ( r_lc_semi_key_cmp = 0x40020294 ); +PROVIDE ( r_lc_send_enc_chg_evt = 0x4002134c ); +PROVIDE ( r_lc_send_enc_mode = 0x40020220 ); +PROVIDE ( r_lc_send_lmp = 0x4001c1a8 ); +PROVIDE ( r_lc_send_pdu_acc = 0x4001c21c ); +PROVIDE ( r_lc_send_pdu_acc_ext4 = 0x4001c240 ); +PROVIDE ( r_lc_send_pdu_au_rand = 0x4001c308 ); +PROVIDE ( r_lc_send_pdu_auto_rate = 0x4001c5d0 ); +PROVIDE ( r_lc_send_pdu_clk_adj_ack = 0x4001c46c ); +PROVIDE ( r_lc_send_pdu_clk_adj_req = 0x4001c494 ); +PROVIDE ( r_lc_send_pdu_comb_key = 0x4001c368 ); +PROVIDE ( r_lc_send_pdu_dhkey_chk = 0x4001c8e8 ); +PROVIDE ( r_lc_send_pdu_encaps_head = 0x4001c440 ); +PROVIDE ( r_lc_send_pdu_encaps_payl = 0x4001c410 ); +PROVIDE ( r_lc_send_pdu_enc_key_sz_req = 0x4001c670 ); +PROVIDE ( r_lc_send_pdu_esco_lk_rem_req = 0x4001c5a8 ); +PROVIDE ( r_lc_send_pdu_feats_ext_req = 0x4001c6ec ); +PROVIDE ( r_lc_send_pdu_feats_res = 0x4001c694 ); +PROVIDE ( r_lc_send_pdu_in_rand = 0x4001c338 ); +PROVIDE ( r_lc_send_pdu_io_cap_res = 0x4001c72c ); +PROVIDE ( r_lc_send_pdu_lsto = 0x4001c64c ); +PROVIDE ( r_lc_send_pdu_max_slot = 0x4001c3c8 ); +PROVIDE ( r_lc_send_pdu_max_slot_req = 0x4001c3ec ); +PROVIDE ( r_lc_send_pdu_not_acc = 0x4001c26c ); +PROVIDE ( r_lc_send_pdu_not_acc_ext4 = 0x4001c294 ); +PROVIDE ( r_lc_send_pdu_num_comp_fail = 0x4001c770 ); +PROVIDE ( r_lc_send_pdu_pause_enc_aes_req = 0x4001c794 ); +PROVIDE ( r_lc_send_pdu_paus_enc_req = 0x4001c7c0 ); +PROVIDE ( r_lc_send_pdu_ptt_req = 0x4001c4c0 ); +PROVIDE ( r_lc_send_pdu_qos_req = 0x4001c82c ); +PROVIDE ( r_lc_send_pdu_resu_enc_req = 0x4001c7e4 ); +PROVIDE ( r_lc_send_pdu_sco_lk_rem_req = 0x4001c580 ); +PROVIDE ( r_lc_send_pdu_set_afh = 0x4001c2c8 ); +PROVIDE ( r_lc_send_pdu_setup_cmp = 0x4001c808 ); +PROVIDE ( r_lc_send_pdu_slot_off = 0x4001c854 ); +PROVIDE ( r_lc_send_pdu_sniff_req = 0x4001c5f0 ); +PROVIDE ( r_lc_send_pdu_sp_cfm = 0x4001c518 ); +PROVIDE ( r_lc_send_pdu_sp_nb = 0x4001c4e8 ); +PROVIDE ( r_lc_send_pdu_sres = 0x4001c548 ); +PROVIDE ( r_lc_send_pdu_tim_acc = 0x4001c6cc ); +PROVIDE ( r_lc_send_pdu_unit_key = 0x4001c398 ); +PROVIDE ( r_lc_send_pdu_unsniff_req = 0x4001c894 ); +PROVIDE ( r_lc_send_pdu_vers_req = 0x4001c8b4 ); +PROVIDE ( r_lc_skip_hl_oob_req = 0x400201bc ); +PROVIDE ( r_lc_sniff_init = 0x40022cac ); +PROVIDE ( r_lc_sniff_max_slot_chg = 0x40020590 ); +PROVIDE ( r_lc_sniff_reset = 0x40022cc8 ); +PROVIDE ( r_lc_sniff_slot_unchange = 0x40021100 ); +PROVIDE ( r_lc_sniff_sub_mode = 0x400204fc ); +PROVIDE ( r_lc_sp_end = 0x400213a8 ); +PROVIDE ( r_lc_sp_fail = 0x40020470 ); +PROVIDE ( r_lc_sp_oob_tid_fail = 0x400204cc ); +PROVIDE ( r_lc_ssr_nego = 0x4002125c ); +PROVIDE ( r_lc_start = 0x4001ca28 ); +PROVIDE ( r_lc_start_enc = 0x4001fb28 ); +PROVIDE ( r_lc_start_enc_key_size = 0x4001fd9c ); +PROVIDE ( r_lc_start_key_exch = 0x4001fe10 ); +PROVIDE ( r_lc_start_lmp_to = 0x4001fae8 ); +PROVIDE ( r_lc_start_oob = 0x4001fffc ); +PROVIDE ( r_lc_start_passkey = 0x4001feac ); +PROVIDE ( r_lc_start_passkey_loop = 0x4001ff88 ); +PROVIDE ( r_lc_stop_afh_report = 0x40020184 ); +PROVIDE ( r_lc_stop_enc = 0x40020110 ); +PROVIDE ( r_lc_switch_cmp = 0x40020448 ); +PROVIDE ( r_lc_unit_key_svr = 0x400206d8 ); +PROVIDE ( r_lc_unsniff = 0x40020c50 ); +PROVIDE ( r_lc_unsniff_cmp = 0x40020810 ); +PROVIDE ( r_lc_unsniff_cont = 0x40020750 ); +PROVIDE ( r_lc_upd_to = 0x4002065c ); +PROVIDE ( r_lc_util_convert_pref_rate_to_packet_type = 0x4002f9b0 ); +PROVIDE ( r_lc_util_get_max_packet_size = 0x4002f4ac ); +PROVIDE ( r_lc_util_get_offset_clke = 0x4002f538 ); +PROVIDE ( r_lc_util_get_offset_clkn = 0x4002f51c ); +PROVIDE ( r_lc_util_set_loc_trans_coll = 0x4002f500 ); +PROVIDE ( r_lc_version = 0x40020a30 ); +PROVIDE ( r_ld_acl_active_hop_types_get = 0x40036e10 ); +PROVIDE ( r_ld_acl_afh_confirm = 0x40036d40 ); +PROVIDE ( r_ld_acl_afh_prepare = 0x40036c84 ); +PROVIDE ( r_ld_acl_afh_set = 0x40036b60 ); +PROVIDE ( r_ld_acl_allowed_tx_packet_types_set = 0x40036810 ); +PROVIDE ( r_ld_acl_bcst_rx_dec = 0x40036394 ); +PROVIDE ( r_ld_acl_bit_off_get = 0x40036b18 ); +PROVIDE ( r_ld_acl_clk_adj_set = 0x40036a00 ); +PROVIDE ( r_ld_acl_clk_off_get = 0x40036b00 ); +PROVIDE ( r_ld_acl_clk_set = 0x40036950 ); +PROVIDE ( r_ld_acl_clock_offset_get = 0x400364c0 ); +PROVIDE ( r_ld_acl_current_tx_power_get = 0x400368f0 ); +PROVIDE ( r_ld_acl_data_flush = 0x400357bc ); +PROVIDE ( r_ld_acl_data_tx = 0x4003544c ); +PROVIDE ( r_ld_acl_edr_set = 0x4003678c ); +PROVIDE ( r_ld_acl_enc_key_load = 0x40036404 ); +PROVIDE ( r_ld_acl_flow_off = 0x40035400 ); +PROVIDE ( r_ld_acl_flow_on = 0x4003541c ); +PROVIDE ( r_ld_acl_flush_timeout_get = 0x40035f9c ); +PROVIDE ( r_ld_acl_flush_timeout_set = 0x40035fe0 ); +PROVIDE ( r_ld_acl_init = 0x40034d08 ); +PROVIDE ( r_ld_acl_lmp_flush = 0x40035d80 ); +PROVIDE ( r_ld_acl_lmp_tx = 0x40035b34 ); +PROVIDE ( r_ld_acl_lsto_get = 0x400366b4 ); +PROVIDE ( r_ld_acl_lsto_set = 0x400366f8 ); +PROVIDE ( r_ld_acl_reset = 0x40034d24 ); +PROVIDE ( r_ld_acl_role_get = 0x40036b30 ); +PROVIDE ( r_ld_acl_rssi_delta_get = 0x40037028 ); +PROVIDE ( r_ld_acl_rsw_req = 0x40035e74 ); +PROVIDE ( r_ld_acl_rx_enc = 0x40036344 ); +PROVIDE ( r_ld_acl_rx_max_slot_get = 0x40036e58 ); +PROVIDE ( r_ld_acl_rx_max_slot_set = 0x40036ea0 ); +PROVIDE ( r_ld_acl_slot_offset_get = 0x4003653c ); +PROVIDE ( r_ld_acl_slot_offset_set = 0x40036658 ); +PROVIDE ( r_ld_acl_sniff = 0x4003617c ); +PROVIDE ( r_ld_acl_sniff_trans = 0x400360a8 ); +PROVIDE ( r_ld_acl_ssr_set = 0x40036274 ); +PROVIDE ( r_ld_acl_start = 0x40034ddc ); +PROVIDE ( r_ld_acl_stop = 0x4003532c ); +PROVIDE ( r_ld_acl_test_mode_set = 0x40036f24 ); +PROVIDE ( r_ld_acl_timing_accuracy_set = 0x4003673c ); +PROVIDE ( r_ld_acl_t_poll_get = 0x40036024 ); +PROVIDE ( r_ld_acl_t_poll_set = 0x40036068 ); +PROVIDE ( r_ld_acl_tx_enc = 0x400362f8 ); +PROVIDE ( r_ld_acl_unsniff = 0x400361e0 ); +PROVIDE ( r_ld_active_check = 0x4003cac4 ); +PROVIDE ( r_ld_afh_ch_assess_data_get = 0x4003caec ); +PROVIDE ( r_ld_bcst_acl_data_tx = 0x40038d3c ); +PROVIDE ( r_ld_bcst_acl_init = 0x40038bd0 ); +PROVIDE ( r_ld_bcst_acl_reset = 0x40038bdc ); +PROVIDE ( r_ld_bcst_acl_start = 0x4003882c ); +PROVIDE ( r_ld_bcst_afh_update = 0x40038f3c ); +PROVIDE ( r_ld_bcst_enc_key_load = 0x4003906c ); +PROVIDE ( r_ld_bcst_lmp_tx = 0x40038bf8 ); +PROVIDE ( r_ld_bcst_tx_enc = 0x40038ff8 ); +PROVIDE ( r_ld_bd_addr_get = 0x4003ca20 ); +PROVIDE ( r_ld_channel_assess = 0x4003c184 ); +PROVIDE ( r_ld_class_of_dev_get = 0x4003ca34 ); +PROVIDE ( r_ld_class_of_dev_set = 0x4003ca50 ); +PROVIDE ( r_ld_csb_rx_afh_update = 0x40039af4 ); +PROVIDE ( r_ld_csb_rx_init = 0x40039690 ); +PROVIDE ( r_ld_csb_rx_reset = 0x4003969c ); +PROVIDE ( r_ld_csb_rx_start = 0x4003972c ); +PROVIDE ( r_ld_csb_rx_stop = 0x40039bb8 ); +PROVIDE ( r_ld_csb_tx_afh_update = 0x4003a5fc ); +PROVIDE ( r_ld_csb_tx_clr_data = 0x4003a71c ); +PROVIDE ( r_ld_csb_tx_dis = 0x4003a5e8 ); +PROVIDE ( r_ld_csb_tx_en = 0x4003a1c0 ); +PROVIDE ( r_ld_csb_tx_init = 0x4003a0e8 ); +PROVIDE ( r_ld_csb_tx_reset = 0x4003a0f8 ); +PROVIDE ( r_ld_csb_tx_set_data = 0x4003a6c0 ); +PROVIDE ( r_ld_fm_clk_isr = 0x4003a7a8 ); +PROVIDE ( r_ld_fm_frame_isr = 0x4003a82c ); +PROVIDE ( r_ld_fm_init = 0x4003a760 ); +PROVIDE ( r_ld_fm_prog_check = 0x4003ab28 ); +PROVIDE ( r_ld_fm_prog_disable = 0x4003a984 ); +PROVIDE ( r_ld_fm_prog_enable = 0x4003a944 ); +PROVIDE ( r_ld_fm_prog_push = 0x4003a9d4 ); +PROVIDE ( r_ld_fm_reset = 0x4003a794 ); +PROVIDE ( r_ld_fm_rx_isr = 0x4003a7f4 ); +PROVIDE ( r_ld_fm_sket_isr = 0x4003a8a4 ); +PROVIDE ( r_ld_init = 0x4003c294 ); +PROVIDE ( r_ld_inq_init = 0x4003b15c ); +PROVIDE ( r_ld_inq_reset = 0x4003b168 ); +PROVIDE ( r_ld_inq_start = 0x4003b1f0 ); +PROVIDE ( r_ld_inq_stop = 0x4003b4f0 ); +PROVIDE ( r_ld_iscan_eir_get = 0x4003c118 ); +PROVIDE ( r_ld_iscan_eir_set = 0x4003bfa0 ); +PROVIDE ( r_ld_iscan_init = 0x4003b9f0 ); +PROVIDE ( r_ld_iscan_reset = 0x4003ba14 ); +PROVIDE ( r_ld_iscan_restart = 0x4003ba44 ); +PROVIDE ( r_ld_iscan_start = 0x4003bb28 ); +PROVIDE ( r_ld_iscan_stop = 0x4003bf1c ); +PROVIDE ( r_ld_iscan_tx_pwr_get = 0x4003c138 ); +PROVIDE ( r_ld_page_init = 0x4003d808 ); +PROVIDE ( r_ld_page_reset = 0x4003d814 ); +PROVIDE ( r_ld_page_start = 0x4003d848 ); +PROVIDE ( r_ld_page_stop = 0x4003da54 ); +PROVIDE ( r_ld_pca_coarse_clock_adjust = 0x4003e324 ); +PROVIDE ( r_ld_pca_init = 0x4003deb4 ); +PROVIDE ( r_ld_pca_initiate_clock_dragging = 0x4003e4ac ); +PROVIDE ( r_ld_pca_local_config = 0x4003df6c ); +PROVIDE ( r_ld_pca_mws_frame_sync = 0x4003e104 ); +PROVIDE ( r_ld_pca_mws_moment_offset_gt = 0x4003e278 ); +PROVIDE ( r_ld_pca_mws_moment_offset_lt = 0x4003e280 ); +PROVIDE ( r_ld_pca_reporting_enable = 0x4003e018 ); +PROVIDE ( r_ld_pca_reset = 0x4003df0c ); +PROVIDE ( r_ld_pca_update_target_offset = 0x4003e050 ); +PROVIDE ( r_ld_pscan_evt_handler = 0x4003f238 ); +PROVIDE ( r_ld_pscan_init = 0x4003f474 ); +PROVIDE ( r_ld_pscan_reset = 0x4003f498 ); +PROVIDE ( r_ld_pscan_restart = 0x4003f4b8 ); +PROVIDE ( r_ld_pscan_start = 0x4003f514 ); +PROVIDE ( r_ld_pscan_stop = 0x4003f618 ); +PROVIDE ( r_ld_read_clock = 0x4003c9e4 ); +PROVIDE ( r_ld_reset = 0x4003c714 ); +PROVIDE ( r_ld_sched_acl_add = 0x4003f978 ); +PROVIDE ( r_ld_sched_acl_remove = 0x4003f99c ); +PROVIDE ( r_ld_sched_compute = 0x4003f6f8 ); +PROVIDE ( r_ld_sched_init = 0x4003f7ac ); +PROVIDE ( r_ld_sched_inq_add = 0x4003f8a8 ); +PROVIDE ( r_ld_sched_inq_remove = 0x4003f8d0 ); +PROVIDE ( r_ld_sched_iscan_add = 0x4003f7e8 ); +PROVIDE ( r_ld_sched_iscan_remove = 0x4003f808 ); +PROVIDE ( r_ld_sched_page_add = 0x4003f910 ); +PROVIDE ( r_ld_sched_page_remove = 0x4003f938 ); +PROVIDE ( r_ld_sched_pscan_add = 0x4003f828 ); +PROVIDE ( r_ld_sched_pscan_remove = 0x4003f848 ); +PROVIDE ( r_ld_sched_reset = 0x4003f7d4 ); +PROVIDE ( r_ld_sched_sco_add = 0x4003fa4c ); +PROVIDE ( r_ld_sched_sco_remove = 0x4003fa9c ); +PROVIDE ( r_ld_sched_sniff_add = 0x4003f9c4 ); +PROVIDE ( r_ld_sched_sniff_remove = 0x4003fa0c ); +PROVIDE ( r_ld_sched_sscan_add = 0x4003f868 ); +PROVIDE ( r_ld_sched_sscan_remove = 0x4003f888 ); +PROVIDE ( r_ld_sco_audio_isr = 0x40037cc8 ); +PROVIDE ( r_ld_sco_data_tx = 0x40037ee8 ); +PROVIDE ( r_ld_sco_start = 0x40037110 ); +PROVIDE ( r_ld_sco_stop = 0x40037c40 ); +PROVIDE ( r_ld_sco_update = 0x40037a74 ); +PROVIDE ( r_ld_sscan_activated = 0x4004031c ); +PROVIDE ( r_ld_sscan_init = 0x400402f0 ); +PROVIDE ( r_ld_sscan_reset = 0x400402fc ); +PROVIDE ( r_ld_sscan_start = 0x40040384 ); +PROVIDE ( r_ld_strain_init = 0x400409f4 ); +PROVIDE ( r_ld_strain_reset = 0x40040a00 ); +PROVIDE ( r_ld_strain_start = 0x40040a8c ); +PROVIDE ( r_ld_strain_stop = 0x40040df0 ); +PROVIDE ( r_ld_timing_accuracy_get = 0x4003caac ); +PROVIDE ( r_ld_util_active_master_afh_map_get = 0x4004131c ); +PROVIDE ( r_ld_util_active_master_afh_map_set = 0x40041308 ); +PROVIDE ( r_ld_util_bch_create = 0x40040fcc ); +PROVIDE ( r_ld_util_fhs_pk = 0x400411c8 ); +PROVIDE ( r_ld_util_fhs_unpk = 0x40040e54 ); +PROVIDE ( r_ld_util_stp_pk = 0x400413f4 ); +PROVIDE ( r_ld_util_stp_unpk = 0x40041324 ); +PROVIDE ( r_ld_version_get = 0x4003ca6c ); +PROVIDE ( r_ld_wlcoex_set = 0x4003caf8 ); +PROVIDE ( r_llc_ch_assess_get_current_ch_map = 0x40041574 ); +PROVIDE ( r_llc_ch_assess_get_local_ch_map = 0x4004150c ); +PROVIDE ( r_llc_ch_assess_local = 0x40041494 ); +PROVIDE ( r_llc_ch_assess_merge_ch = 0x40041588 ); +PROVIDE ( r_llc_ch_assess_reass_ch = 0x400415c0 ); +PROVIDE ( r_llc_common_cmd_complete_send = 0x40044eac ); +PROVIDE ( r_llc_common_cmd_status_send = 0x40044ee0 ); +PROVIDE ( r_llc_common_enc_change_evt_send = 0x40044f6c ); +PROVIDE ( r_llc_common_enc_key_ref_comp_evt_send = 0x40044f38 ); +PROVIDE ( r_llc_common_flush_occurred_send = 0x40044f0c ); +PROVIDE ( r_llc_common_nb_of_pkt_comp_evt_send = 0x40045000 ); +PROVIDE ( r_llc_con_update_complete_send = 0x40044d68 ); +PROVIDE ( r_llc_con_update_finished = 0x4004518c ); +PROVIDE ( r_llc_con_update_ind = 0x40045038 ); +PROVIDE ( r_llc_discon_event_complete_send = 0x40044a30 ); +PROVIDE ( r_llc_end_evt_defer = 0x40046330 ); +PROVIDE ( r_llc_feats_rd_event_send = 0x40044e0c ); +PROVIDE ( r_llc_init = 0x40044778 ); +PROVIDE ( r_llc_le_con_cmp_evt_send = 0x40044a78 ); +PROVIDE ( r_llc_llcp_ch_map_update_pdu_send = 0x40043f94 ); +PROVIDE ( r_llc_llcp_con_param_req_pdu_send = 0x400442fc ); +PROVIDE ( r_llc_llcp_con_param_rsp_pdu_send = 0x40044358 ); +PROVIDE ( r_llc_llcp_con_update_pdu_send = 0x400442c4 ); +PROVIDE ( r_llc_llcp_enc_req_pdu_send = 0x40044064 ); +PROVIDE ( r_llc_llcp_enc_rsp_pdu_send = 0x40044160 ); +PROVIDE ( r_llc_llcp_feats_req_pdu_send = 0x400443b4 ); +PROVIDE ( r_llc_llcp_feats_rsp_pdu_send = 0x400443f0 ); +PROVIDE ( r_llc_llcp_get_autorize = 0x4004475c ); +PROVIDE ( r_llc_llcp_length_req_pdu_send = 0x40044574 ); +PROVIDE ( r_llc_llcp_length_rsp_pdu_send = 0x400445ac ); +PROVIDE ( r_llc_llcp_pause_enc_req_pdu_send = 0x40043fd8 ); +PROVIDE ( r_llc_llcp_pause_enc_rsp_pdu_send = 0x40044010 ); +PROVIDE ( r_llc_llcp_ping_req_pdu_send = 0x4004454c ); +PROVIDE ( r_llc_llcp_ping_rsp_pdu_send = 0x40044560 ); +PROVIDE ( r_llc_llcp_recv_handler = 0x40044678 ); +PROVIDE ( r_llc_llcp_reject_ind_pdu_send = 0x4004425c ); +PROVIDE ( r_llc_llcp_start_enc_req_pdu_send = 0x4004441c ); +PROVIDE ( r_llc_llcp_start_enc_rsp_pdu_send = 0x400441f8 ); +PROVIDE ( r_llc_llcp_terminate_ind_pdu_send = 0x400444b0 ); +PROVIDE ( r_llc_llcp_tester_send = 0x400445e4 ); +PROVIDE ( r_llc_llcp_unknown_rsp_send_pdu = 0x40044534 ); +PROVIDE ( r_llc_llcp_version_ind_pdu_send = 0x40043f6c ); +PROVIDE ( r_llc_lsto_con_update = 0x40045098 ); +PROVIDE ( r_llc_ltk_req_send = 0x40044dc0 ); +PROVIDE ( r_llc_map_update_finished = 0x40045260 ); +PROVIDE ( r_llc_map_update_ind = 0x400450f0 ); +PROVIDE ( r_llc_pdu_acl_tx_ack_defer = 0x400464dc ); +PROVIDE ( r_llc_pdu_defer = 0x40046528 ); +PROVIDE ( r_llc_pdu_llcp_tx_ack_defer = 0x400463ac ); +PROVIDE ( r_llc_reset = 0x400447b8 ); +PROVIDE ( r_llc_start = 0x400447f4 ); +PROVIDE ( r_llc_stop = 0x400449ac ); +PROVIDE ( r_llc_util_bw_mgt = 0x4004629c ); +PROVIDE ( r_llc_util_clear_operation_ptr = 0x40046234 ); +PROVIDE ( r_llc_util_dicon_procedure = 0x40046130 ); +PROVIDE ( r_llc_util_get_free_conhdl = 0x400460c8 ); +PROVIDE ( r_llc_util_get_nb_active_link = 0x40046100 ); +PROVIDE ( r_llc_util_set_auth_payl_to_margin = 0x400461f4 ); +PROVIDE ( r_llc_util_set_llcp_discard_enable = 0x400461c8 ); +PROVIDE ( r_llc_util_update_channel_map = 0x400461ac ); +PROVIDE ( r_llc_version_rd_event_send = 0x40044e60 ); +PROVIDE ( r_lld_adv_start = 0x40048b38 ); +PROVIDE ( r_lld_adv_stop = 0x40048ea0 ); +PROVIDE ( r_lld_ch_map_ind = 0x4004a2f4 ); +PROVIDE ( r_lld_con_param_req = 0x40049f0c ); +PROVIDE ( r_lld_con_param_rsp = 0x40049e00 ); +PROVIDE ( r_lld_con_start = 0x400491f8 ); +PROVIDE ( r_lld_con_stop = 0x40049fdc ); +PROVIDE ( r_lld_con_update_after_param_req = 0x40049bcc ); +PROVIDE ( r_lld_con_update_ind = 0x4004a30c ); +PROVIDE ( r_lld_con_update_req = 0x40049b60 ); +PROVIDE ( r_lld_core_reset = 0x40048a9c ); +PROVIDE ( r_lld_crypt_isr = 0x4004a324 ); +PROVIDE ( r_lld_evt_adv_create = 0x400481f4 ); +PROVIDE ( r_lld_evt_canceled = 0x400485c8 ); +PROVIDE ( r_lld_evt_channel_next = 0x40046aac ); +PROVIDE ( r_lld_evt_deffered_elt_handler = 0x400482bc ); +PROVIDE ( r_lld_evt_delete_elt_handler = 0x40046974 ); +PROVIDE ( r_lld_evt_delete_elt_push = 0x40046a3c ); +PROVIDE ( r_lld_evt_drift_compute = 0x40047670 ); +PROVIDE ( r_lld_evt_elt_delete = 0x40047538 ); +PROVIDE ( r_lld_evt_elt_insert = 0x400474c8 ); +PROVIDE ( r_lld_evt_end = 0x400483e8 ); +PROVIDE ( r_lld_evt_end_isr = 0x4004862c ); +PROVIDE ( r_lld_evt_init = 0x40046b3c ); +PROVIDE ( r_lld_evt_init_evt = 0x40046cd0 ); +PROVIDE ( r_lld_evt_move_to_master = 0x40047ba0 ); +PROVIDE ( r_lld_evt_move_to_slave = 0x40047e18 ); +PROVIDE ( r_lld_evt_prevent_stop = 0x40047adc ); +PROVIDE ( r_lld_evt_restart = 0x40046d50 ); +PROVIDE ( r_lld_evt_rx = 0x40048578 ); +PROVIDE ( r_lld_evt_rx_isr = 0x40048678 ); +PROVIDE ( r_lld_evt_scan_create = 0x40047ae8 ); +PROVIDE ( r_lld_evt_schedule = 0x40047908 ); +PROVIDE ( r_lld_evt_schedule_next = 0x400477dc ); +PROVIDE ( r_lld_evt_schedule_next_instant = 0x400476a8 ); +PROVIDE ( r_lld_evt_slave_update = 0x40048138 ); +PROVIDE ( r_lld_evt_update_create = 0x40047cd8 ); +PROVIDE ( r_lld_get_mode = 0x40049ff8 ); +PROVIDE ( r_lld_init = 0x4004873c ); +PROVIDE ( r_lld_move_to_master = 0x400499e0 ); +PROVIDE ( r_lld_move_to_slave = 0x4004a024 ); +PROVIDE ( r_lld_pdu_adv_pack = 0x4004b488 ); +PROVIDE ( r_lld_pdu_check = 0x4004ac34 ); +PROVIDE ( r_lld_pdu_data_send = 0x4004b018 ); +PROVIDE ( r_lld_pdu_data_tx_push = 0x4004aecc ); +PROVIDE ( r_lld_pdu_rx_handler = 0x4004b4d4 ); +PROVIDE ( r_lld_pdu_send_packet = 0x4004b774 ); +PROVIDE ( r_lld_pdu_tx_flush = 0x4004b414 ); +PROVIDE ( r_lld_pdu_tx_loop = 0x4004ae40 ); +PROVIDE ( r_lld_pdu_tx_prog = 0x4004b120 ); +PROVIDE ( r_lld_pdu_tx_push = 0x4004b080 ); +PROVIDE ( r_lld_ral_renew_req = 0x4004a73c ); +PROVIDE ( r_lld_scan_start = 0x40048ee0 ); +PROVIDE ( r_lld_scan_stop = 0x40049190 ); +PROVIDE ( r_lld_test_mode_rx = 0x4004a540 ); +PROVIDE ( r_lld_test_mode_tx = 0x4004a350 ); +PROVIDE ( r_lld_test_stop = 0x4004a710 ); +PROVIDE ( r_lld_util_anchor_point_move = 0x4004bacc ); +PROVIDE ( r_lld_util_compute_ce_max = 0x4004bc0c ); +PROVIDE ( r_lld_util_connection_param_set = 0x4004ba40 ); +PROVIDE ( r_lld_util_dle_set_cs_fields = 0x4004ba90 ); +PROVIDE ( r_lld_util_eff_tx_time_set = 0x4004bd88 ); +PROVIDE ( r_lld_util_elt_programmed = 0x4004bce0 ); +PROVIDE ( r_lld_util_flush_list = 0x4004bbd8 ); +PROVIDE ( r_lld_util_freq2chnl = 0x4004b9e4 ); +PROVIDE ( r_lld_util_get_bd_address = 0x4004b8ac ); +PROVIDE ( r_lld_util_get_local_offset = 0x4004ba10 ); +PROVIDE ( r_lld_util_get_peer_offset = 0x4004ba24 ); +PROVIDE ( r_lld_util_get_tx_pkt_cnt = 0x4004bd80 ); +PROVIDE ( r_lld_util_instant_get = 0x4004b890 ); +PROVIDE ( r_lld_util_instant_ongoing = 0x4004bbfc ); +PROVIDE ( r_lld_util_priority_set = 0x4004bd10 ); +PROVIDE ( r_lld_util_priority_update = 0x4004bd78 ); +PROVIDE ( r_lld_util_ral_force_rpa_renew = 0x4004b980 ); +PROVIDE ( r_lld_util_set_bd_address = 0x4004b8f8 ); +PROVIDE ( r_lld_wlcoex_set = 0x4004bd98 ); +PROVIDE ( r_llm_ble_ready = 0x4004cc34 ); +PROVIDE ( r_llm_common_cmd_complete_send = 0x4004d288 ); +PROVIDE ( r_llm_common_cmd_status_send = 0x4004d2b4 ); +PROVIDE ( r_llm_con_req_ind = 0x4004cc54 ); +PROVIDE ( r_llm_con_req_tx_cfm = 0x4004d158 ); +PROVIDE ( r_llm_create_con = 0x4004de78 ); +PROVIDE ( r_llm_encryption_done = 0x4004dff8 ); +PROVIDE ( r_llm_encryption_start = 0x4004e128 ); +PROVIDE ( r_llm_end_evt_defer = 0x4004eb6c ); +PROVIDE ( r_llm_init = 0x4004c9f8 ); +PROVIDE ( r_llm_le_adv_report_ind = 0x4004cdf4 ); +PROVIDE ( r_llm_pdu_defer = 0x4004ec48 ); +PROVIDE ( r_llm_ral_clear = 0x4004e1fc ); +PROVIDE ( r_llm_ral_dev_add = 0x4004e23c ); +PROVIDE ( r_llm_ral_dev_rm = 0x4004e3bc ); +PROVIDE ( r_llm_ral_get_rpa = 0x4004e400 ); +PROVIDE ( r_llm_ral_set_timeout = 0x4004e4a0 ); +PROVIDE ( r_llm_ral_update = 0x4004e4f8 ); +PROVIDE ( r_llm_set_adv_data = 0x4004d960 ); +PROVIDE ( r_llm_set_adv_en = 0x4004d7ec ); +PROVIDE ( r_llm_set_adv_param = 0x4004d5f4 ); +PROVIDE ( r_llm_set_scan_en = 0x4004db64 ); +PROVIDE ( r_llm_set_scan_param = 0x4004dac8 ); +PROVIDE ( r_llm_set_scan_rsp_data = 0x4004da14 ); +PROVIDE ( r_llm_test_mode_start_rx = 0x4004d534 ); +PROVIDE ( r_llm_test_mode_start_tx = 0x4004d2fc ); +PROVIDE ( r_llm_util_adv_data_update = 0x4004e8fc ); +PROVIDE ( r_llm_util_apply_bd_addr = 0x4004e868 ); +PROVIDE ( r_llm_util_bd_addr_in_ral = 0x4004eb08 ); +PROVIDE ( r_llm_util_bd_addr_in_wl = 0x4004e788 ); +PROVIDE ( r_llm_util_bd_addr_wl_position = 0x4004e720 ); +PROVIDE ( r_llm_util_bl_add = 0x4004e9ac ); +PROVIDE ( r_llm_util_bl_check = 0x4004e930 ); +PROVIDE ( r_llm_util_bl_rem = 0x4004ea70 ); +PROVIDE ( r_llm_util_check_address_validity = 0x4004e7e4 ); +PROVIDE ( r_llm_util_check_evt_mask = 0x4004e8b0 ); +PROVIDE ( r_llm_util_check_map_validity = 0x4004e800 ); +PROVIDE ( r_llm_util_get_channel_map = 0x4004e8d4 ); +PROVIDE ( r_llm_util_get_supp_features = 0x4004e8e8 ); +PROVIDE ( r_llm_util_set_public_addr = 0x4004e89c ); +PROVIDE ( r_llm_wl_clr = 0x4004dc54 ); +PROVIDE ( r_llm_wl_dev_add = 0x4004dcc0 ); +PROVIDE ( r_llm_wl_dev_add_hdl = 0x4004dd38 ); +PROVIDE ( r_llm_wl_dev_rem = 0x4004dcfc ); +PROVIDE ( r_llm_wl_dev_rem_hdl = 0x4004dde0 ); +PROVIDE ( r_lm_acl_disc = 0x4004f148 ); +PROVIDE ( r_LM_AddSniff = 0x40022d20 ); +PROVIDE ( r_lm_add_sync = 0x40051358 ); +PROVIDE ( r_lm_afh_activate_timer = 0x4004f444 ); +PROVIDE ( r_lm_afh_ch_ass_en_get = 0x4004f3f8 ); +PROVIDE ( r_lm_afh_host_ch_class_get = 0x4004f410 ); +PROVIDE ( r_lm_afh_master_ch_map_get = 0x4004f43c ); +PROVIDE ( r_lm_afh_peer_ch_class_set = 0x4004f418 ); +PROVIDE ( r_lm_check_active_sync = 0x40051334 ); +PROVIDE ( r_LM_CheckEdrFeatureRequest = 0x4002f90c ); +PROVIDE ( r_LM_CheckSwitchInstant = 0x4002f8c0 ); +PROVIDE ( r_lm_check_sync_hl_rsp = 0x4005169c ); +PROVIDE ( r_lm_clk_adj_ack_pending_clear = 0x4004f514 ); +PROVIDE ( r_lm_clk_adj_instant_pending_set = 0x4004f4d8 ); +PROVIDE ( r_LM_ComputePacketType = 0x4002f554 ); +PROVIDE ( r_LM_ComputeSniffSubRate = 0x400233ac ); +PROVIDE ( r_lm_debug_key_compare_192 = 0x4004f3a8 ); +PROVIDE ( r_lm_debug_key_compare_256 = 0x4004f3d0 ); +PROVIDE ( r_lm_dhkey_calc_init = 0x40013234 ); +PROVIDE ( r_lm_dhkey_compare = 0x400132d8 ); +PROVIDE ( r_lm_dut_mode_en_get = 0x4004f3ec ); +PROVIDE ( r_LM_ExtractMaxEncKeySize = 0x4001aca4 ); +PROVIDE ( r_lm_f1 = 0x40012bb8 ); +PROVIDE ( r_lm_f2 = 0x40012cfc ); +PROVIDE ( r_lm_f3 = 0x40013050 ); +PROVIDE ( r_lm_g = 0x40012f90 ); +PROVIDE ( r_LM_GetAFHSwitchInstant = 0x4002f86c ); +PROVIDE ( r_lm_get_auth_en = 0x4004f1ac ); +PROVIDE ( r_lm_get_common_pkt_types = 0x4002fa1c ); +PROVIDE ( r_LM_GetConnectionAcceptTimeout = 0x4004f1f4 ); +PROVIDE ( r_LM_GetFeature = 0x4002f924 ); +PROVIDE ( r_LM_GetLinkTimeout = 0x400233ec ); +PROVIDE ( r_LM_GetLocalNameSeg = 0x4004f200 ); +PROVIDE ( r_lm_get_loopback_mode = 0x4004f248 ); +PROVIDE ( r_LM_GetMasterEncKeySize = 0x4001b29c ); +PROVIDE ( r_LM_GetMasterEncRand = 0x4001b288 ); +PROVIDE ( r_LM_GetMasterKey = 0x4001b260 ); +PROVIDE ( r_LM_GetMasterKeyRand = 0x4001b274 ); +PROVIDE ( r_lm_get_min_sync_intv = 0x400517a8 ); +PROVIDE ( r_lm_get_nb_acl = 0x4004ef9c ); +PROVIDE ( r_lm_get_nb_sync_link = 0x4005179c ); +PROVIDE ( r_lm_get_nonce = 0x400131c4 ); +PROVIDE ( r_lm_get_oob_local_commit = 0x4004f374 ); +PROVIDE ( r_lm_get_oob_local_data_192 = 0x4004f2d4 ); +PROVIDE ( r_lm_get_oob_local_data_256 = 0x4004f318 ); +PROVIDE ( r_LM_GetPINType = 0x4004f1e8 ); +PROVIDE ( r_lm_get_priv_key_192 = 0x4004f278 ); +PROVIDE ( r_lm_get_priv_key_256 = 0x4004f2b8 ); +PROVIDE ( r_lm_get_pub_key_192 = 0x4004f258 ); +PROVIDE ( r_lm_get_pub_key_256 = 0x4004f298 ); +PROVIDE ( r_LM_GetQoSParam = 0x4002f6e0 ); +PROVIDE ( r_lm_get_sec_con_host_supp = 0x4004f1d4 ); +PROVIDE ( r_LM_GetSniffSubratingParam = 0x4002325c ); +PROVIDE ( r_lm_get_sp_en = 0x4004f1c0 ); +PROVIDE ( r_LM_GetSwitchInstant = 0x4002f7f8 ); +PROVIDE ( r_lm_get_synchdl = 0x4005175c ); +PROVIDE ( r_lm_get_sync_param = 0x400503b4 ); +PROVIDE ( r_lm_init = 0x4004ed34 ); +PROVIDE ( r_lm_init_sync = 0x400512d8 ); +PROVIDE ( r_lm_is_acl_con = 0x4004f47c ); +PROVIDE ( r_lm_is_acl_con_role = 0x4004f49c ); +PROVIDE ( r_lm_is_clk_adj_ack_pending = 0x4004f4e8 ); +PROVIDE ( r_lm_is_clk_adj_instant_pending = 0x4004f4c8 ); +PROVIDE ( r_lm_local_ext_fr_configured = 0x4004f540 ); +PROVIDE ( r_lm_look_for_stored_link_key = 0x4002f948 ); +PROVIDE ( r_lm_look_for_sync = 0x40051774 ); +PROVIDE ( r_lm_lt_addr_alloc = 0x4004ef1c ); +PROVIDE ( r_lm_lt_addr_free = 0x4004ef74 ); +PROVIDE ( r_lm_lt_addr_reserve = 0x4004ef48 ); +PROVIDE ( r_LM_MakeCof = 0x4002f84c ); +PROVIDE ( r_LM_MakeRandVec = 0x400112d8 ); +PROVIDE ( r_lm_master_clk_adj_req_handler = 0x40054180 ); +PROVIDE ( r_LM_MaxSlot = 0x4002f694 ); +PROVIDE ( r_lm_modif_sync = 0x40051578 ); +PROVIDE ( r_lm_n_is_zero = 0x40012170 ); +PROVIDE ( r_lm_num_clk_adj_ack_pending_set = 0x4004f500 ); +PROVIDE ( r_lm_oob_f1 = 0x40012e54 ); +PROVIDE ( r_lm_pca_sscan_link_get = 0x4004f560 ); +PROVIDE ( r_lm_pca_sscan_link_set = 0x4004f550 ); +PROVIDE ( r_lmp_pack = 0x4001135c ); +PROVIDE ( r_lmp_unpack = 0x4001149c ); +PROVIDE ( r_lm_read_features = 0x4004f0d8 ); +PROVIDE ( r_LM_RemoveSniff = 0x40023124 ); +PROVIDE ( r_LM_RemoveSniffSubrating = 0x400233c4 ); +PROVIDE ( r_lm_remove_sync = 0x400517c8 ); +PROVIDE ( r_lm_reset_sync = 0x40051304 ); +PROVIDE ( r_lm_role_switch_finished = 0x4004f028 ); +PROVIDE ( r_lm_role_switch_start = 0x4004efe0 ); +PROVIDE ( r_lm_sco_nego_end = 0x40051828 ); +PROVIDE ( r_LM_SniffSubrateNegoRequired = 0x40023334 ); +PROVIDE ( r_LM_SniffSubratingHlReq = 0x40023154 ); +PROVIDE ( r_LM_SniffSubratingPeerReq = 0x400231dc ); +PROVIDE ( r_lm_sp_debug_mode_get = 0x4004f398 ); +PROVIDE ( r_lm_sp_n192_convert_wnaf = 0x400123c0 ); +PROVIDE ( r_lm_sp_n_one = 0x400123a4 ); +PROVIDE ( r_lm_sp_p192_add = 0x40012828 ); +PROVIDE ( r_lm_sp_p192_dbl = 0x4001268c ); +PROVIDE ( r_lm_sp_p192_invert = 0x40012b6c ); +PROVIDE ( r_lm_sp_p192_point_jacobian_to_affine = 0x40012468 ); +PROVIDE ( r_lm_sp_p192_points_jacobian_to_affine = 0x400124e4 ); +PROVIDE ( r_lm_sp_p192_point_to_inf = 0x40012458 ); +PROVIDE ( r_lm_sp_pre_compute_points = 0x40012640 ); +PROVIDE ( r_lm_sp_sha256_calculate = 0x400121a0 ); +PROVIDE ( r_LM_SuppressAclPacket = 0x4002f658 ); +PROVIDE ( r_lm_sync_flow_ctrl_en_get = 0x4004f404 ); +PROVIDE ( r_LM_UpdateAclEdrPacketType = 0x4002f5d8 ); +PROVIDE ( r_LM_UpdateAclPacketType = 0x4002f584 ); +PROVIDE ( r_modules_funcs = 0x3ffafd6c ); +PROVIDE ( r_modules_funcs_p = 0x3ffafd68 ); +PROVIDE ( r_nvds_del = 0x400544c4 ); +PROVIDE ( r_nvds_get = 0x40054488 ); +PROVIDE ( r_nvds_init = 0x40054410 ); +PROVIDE ( r_nvds_lock = 0x400544fc ); +PROVIDE ( r_nvds_put = 0x40054534 ); +PROVIDE ( rom_abs_temp = 0x400054f0 ); +PROVIDE ( rom_bb_bss_bw_40_en = 0x4000401c ); +PROVIDE ( rom_bb_bss_cbw40_dig = 0x40003bac ); +PROVIDE ( rom_bb_rx_ht20_cen_bcov_en = 0x40003734 ); +PROVIDE ( rom_bb_tx_ht20_cen = 0x40003760 ); +PROVIDE ( rom_bb_wdg_test_en = 0x40003b70 ); +PROVIDE ( rom_cbw2040_cfg = 0x400040b0 ); +PROVIDE ( rom_check_noise_floor = 0x40003c78 ); +PROVIDE ( rom_chip_i2c_readReg = 0x40004110 ); +PROVIDE ( rom_chip_i2c_writeReg = 0x40004168 ); +PROVIDE ( rom_chip_v7_bt_init = 0x40004d8c ); +PROVIDE ( rom_chip_v7_rx_init = 0x40004cec ); +PROVIDE ( rom_chip_v7_rx_rifs_en = 0x40003d90 ); +PROVIDE ( rom_chip_v7_tx_init = 0x40004d18 ); +PROVIDE ( rom_clk_force_on_vit = 0x40003710 ); +PROVIDE ( rom_correct_rf_ana_gain = 0x400062a8 ); +PROVIDE ( rom_dc_iq_est = 0x400055c8 ); +PROVIDE ( rom_disable_agc = 0x40002fa4 ); +PROVIDE ( rom_enable_agc = 0x40002fcc ); +PROVIDE ( rom_en_pwdet = 0x4000506c ); +PROVIDE ( rom_gen_rx_gain_table = 0x40003e3c ); +PROVIDE ( rom_get_data_sat = 0x4000312c ); +PROVIDE ( rom_get_fm_sar_dout = 0x40005204 ); +PROVIDE ( rom_get_power_db = 0x40005fc8 ); +PROVIDE ( rom_get_pwctrl_correct = 0x400065d4 ); +PROVIDE ( rom_get_rfcal_rxiq_data = 0x40005bbc ); +PROVIDE ( rom_get_rf_gain_qdb = 0x40006290 ); +PROVIDE ( rom_get_sar_dout = 0x40006564 ); +PROVIDE ( rom_i2c_readReg = 0x40004148 ); +PROVIDE ( rom_i2c_readReg_Mask = 0x400041c0 ); +PROVIDE ( rom_i2c_writeReg = 0x400041a4 ); +PROVIDE ( rom_i2c_writeReg_Mask = 0x400041fc ); +PROVIDE ( rom_index_to_txbbgain = 0x40004df8 ); +PROVIDE ( rom_iq_est_disable = 0x40005590 ); +PROVIDE ( rom_iq_est_enable = 0x40005514 ); +PROVIDE ( rom_linear_to_db = 0x40005f64 ); +PROVIDE ( rom_loopback_mode_en = 0x400030f8 ); +PROVIDE ( rom_main = 0x400076c4 ); +PROVIDE ( rom_meas_tone_pwr_db = 0x40006004 ); +PROVIDE ( rom_mhz2ieee = 0x4000404c ); +PROVIDE ( rom_noise_floor_auto_set = 0x40003bdc ); +PROVIDE ( rom_pbus_debugmode = 0x40004458 ); +PROVIDE ( rom_pbus_force_mode = 0x40004270 ); +PROVIDE ( rom_pbus_force_test = 0x400043c0 ); +PROVIDE ( rom_pbus_rd = 0x40004414 ); +PROVIDE ( rom_pbus_rd_addr = 0x40004334 ); +PROVIDE ( rom_pbus_rd_shift = 0x40004374 ); +PROVIDE ( rom_pbus_rx_dco_cal = 0x40005620 ); +PROVIDE ( rom_pbus_set_dco = 0x40004638 ); +PROVIDE ( rom_pbus_set_rxgain = 0x40004480 ); +PROVIDE ( rom_pbus_workmode = 0x4000446c ); +PROVIDE ( rom_pbus_xpd_rx_off = 0x40004508 ); +PROVIDE ( rom_pbus_xpd_rx_on = 0x4000453c ); +PROVIDE ( rom_pbus_xpd_tx_off = 0x40004590 ); +PROVIDE ( rom_pbus_xpd_tx_on = 0x400045e0 ); +PROVIDE ( rom_phy_disable_agc = 0x40002f6c ); +PROVIDE ( rom_phy_disable_cca = 0x40003000 ); +PROVIDE ( rom_phy_enable_agc = 0x40002f88 ); +PROVIDE ( rom_phy_enable_cca = 0x4000302c ); +PROVIDE ( rom_phy_freq_correct = 0x40004b44 ); +PROVIDE ( rom_phyFuns = 0x3ffae0c0 ); +PROVIDE ( rom_phy_get_noisefloor = 0x40003c2c ); +PROVIDE ( rom_phy_get_vdd33 = 0x4000642c ); +PROVIDE ( rom_pow_usr = 0x40003044 ); +PROVIDE ( rom_read_sar_dout = 0x400051c0 ); +PROVIDE ( rom_restart_cal = 0x400046e0 ); +PROVIDE ( rom_rfcal_pwrctrl = 0x40006058 ); +PROVIDE ( rom_rfcal_rxiq = 0x40005b4c ); +PROVIDE ( rom_rfcal_txcap = 0x40005dec ); +PROVIDE ( rom_rfpll_reset = 0x40004680 ); +PROVIDE ( rom_rfpll_set_freq = 0x400047f8 ); +PROVIDE ( rom_rtc_mem_backup = 0x40003db4 ); +PROVIDE ( rom_rtc_mem_recovery = 0x40003df4 ); +PROVIDE ( rom_rx_gain_force = 0x4000351c ); +PROVIDE ( rom_rxiq_cover_mg_mp = 0x40005a68 ); +PROVIDE ( rom_rxiq_get_mis = 0x400058e4 ); +PROVIDE ( rom_rxiq_set_reg = 0x40005a00 ); +PROVIDE ( rom_set_cal_rxdc = 0x400030b8 ); +PROVIDE ( rom_set_chan_cal_interp = 0x40005ce0 ); +PROVIDE ( rom_set_channel_freq = 0x40004880 ); +PROVIDE ( rom_set_loopback_gain = 0x40003060 ); +PROVIDE ( rom_set_noise_floor = 0x40003d48 ); +PROVIDE ( rom_set_pbus_mem = 0x400031a4 ); +PROVIDE ( rom_set_rf_freq_offset = 0x40004ca8 ); +PROVIDE ( rom_set_rxclk_en = 0x40003594 ); +PROVIDE ( rom_set_txcap_reg = 0x40005d50 ); +PROVIDE ( rom_set_txclk_en = 0x40003564 ); +PROVIDE ( rom_spur_coef_cfg = 0x40003ac8 ); +PROVIDE ( rom_spur_reg_write_one_tone = 0x400037f0 ); +PROVIDE ( rom_start_tx_tone = 0x400036b4 ); +PROVIDE ( rom_start_tx_tone_step = 0x400035d0 ); +PROVIDE ( rom_stop_tx_tone = 0x40003f98 ); +PROVIDE ( _rom_store = 0x4000d66c ); +PROVIDE ( _rom_store_table = 0x4000d4f8 ); +PROVIDE ( rom_target_power_add_backoff = 0x40006268 ); +PROVIDE ( rom_tx_atten_set_interp = 0x400061cc ); +PROVIDE ( rom_txbbgain_to_index = 0x40004dc0 ); +PROVIDE ( rom_txcal_work_mode = 0x4000510c ); +PROVIDE ( rom_txdc_cal_init = 0x40004e10 ); +PROVIDE ( rom_txdc_cal_v70 = 0x40004ea4 ); +PROVIDE ( rom_txiq_cover = 0x4000538c ); +PROVIDE ( rom_txiq_get_mis_pwr = 0x400052dc ); +PROVIDE ( rom_txiq_set_reg = 0x40005154 ); +PROVIDE ( rom_tx_pwctrl_bg_init = 0x4000662c ); +PROVIDE ( rom_txtone_linear_pwr = 0x40005290 ); +PROVIDE ( rom_wait_rfpll_cal_end = 0x400047a8 ); +PROVIDE ( rom_write_gain_mem = 0x4000348c ); +PROVIDE ( rom_write_rfpll_sdm = 0x40004740 ); +PROVIDE ( roundup2 = 0x4000ab7c ); +PROVIDE ( r_plf_funcs_p = 0x3ffb8360 ); +PROVIDE ( r_rf_rw_bt_init = 0x40054868 ); +PROVIDE ( r_rf_rw_init = 0x40054b0c ); +PROVIDE ( r_rf_rw_le_init = 0x400549d0 ); +PROVIDE ( r_rwble_activity_ongoing_check = 0x40054d8c ); +PROVIDE ( r_rwble_init = 0x40054bf4 ); +PROVIDE ( r_rwble_isr = 0x40054e08 ); +PROVIDE ( r_rwble_reset = 0x40054ce8 ); +PROVIDE ( r_rwble_sleep_check = 0x40054d78 ); +PROVIDE ( r_rwble_version = 0x40054dac ); +PROVIDE ( r_rwbt_init = 0x40055160 ); +PROVIDE ( r_rwbt_isr = 0x40055248 ); +PROVIDE ( r_rwbt_reset = 0x400551bc ); +PROVIDE ( r_rwbt_sleep_check = 0x4005577c ); +PROVIDE ( r_rwbt_sleep_enter = 0x400557a4 ); +PROVIDE ( r_rwbt_sleep_wakeup = 0x400557fc ); +PROVIDE ( r_rwbt_sleep_wakeup_end = 0x400558cc ); +PROVIDE ( r_rwbt_version = 0x4005520c ); +PROVIDE ( r_rwip_assert_err = 0x40055f88 ); +PROVIDE ( r_rwip_check_wakeup_boundary = 0x400558fc ); +PROVIDE ( r_rwip_ext_wakeup_enable = 0x40055f3c ); +PROVIDE ( r_rwip_init = 0x4005595c ); +PROVIDE ( r_rwip_pca_clock_dragging_only = 0x40055f48 ); +PROVIDE ( r_rwip_prevent_sleep_clear = 0x40055ec8 ); +PROVIDE ( r_rwip_prevent_sleep_set = 0x40055e64 ); +PROVIDE ( r_rwip_reset = 0x40055ab8 ); +PROVIDE ( r_rwip_schedule = 0x40055b38 ); +PROVIDE ( r_rwip_sleep = 0x40055b5c ); +PROVIDE ( r_rwip_sleep_enable = 0x40055f30 ); +PROVIDE ( r_rwip_version = 0x40055b20 ); +PROVIDE ( r_rwip_wakeup = 0x40055dc4 ); +PROVIDE ( r_rwip_wakeup_delay_set = 0x40055e4c ); +PROVIDE ( r_rwip_wakeup_end = 0x40055e18 ); +PROVIDE ( r_rwip_wlcoex_set = 0x40055f60 ); +PROVIDE ( r_SHA_256 = 0x40013a90 ); +PROVIDE ( rtc_boot_control = 0x4000821c ); +PROVIDE ( rtc_get_reset_reason = 0x400081d4 ); +PROVIDE ( rtc_get_wakeup_cause = 0x400081f4 ); +PROVIDE ( rtc_select_apb_bridge = 0x40008288 ); +PROVIDE ( rwip_coex_cfg = 0x3ff9914c ); +PROVIDE ( rwip_priority = 0x3ff99159 ); +PROVIDE ( rwip_rf = 0x3ffbdb28 ); +PROVIDE ( rwip_rf_p_get = 0x400558f4 ); +PROVIDE ( r_XorKey = 0x400112c0 ); +PROVIDE ( sbrk = 0x400017f4 ); +PROVIDE ( _sbrk_r = 0x4000bce4 ); +PROVIDE ( scanf = 0x40058760 ); +PROVIDE ( _scanf_chars = 0x40058384 ); +PROVIDE ( _scanf_float = 0x4000bf18 ); +PROVIDE ( _scanf_i = 0x4005845c ); +PROVIDE ( _scanf_r = 0x4005879c ); +PROVIDE ( __sccl = 0x4000c498 ); +PROVIDE ( __sclose = 0x400011b8 ); +PROVIDE ( SelectSpiFunction = 0x40061f84 ); +PROVIDE ( SelectSpiQIO = 0x40061ddc ); +PROVIDE ( SendMsg = 0x40009384 ); +PROVIDE ( send_packet = 0x40009340 ); +PROVIDE ( __seofread = 0x40001148 ); +PROVIDE ( setjmp = 0x40056268 ); +PROVIDE ( setlocale = 0x40059568 ); +PROVIDE ( _setlocale_r = 0x4005950c ); +PROVIDE ( set_rtc_memory_crc = 0x40008208 ); +PROVIDE ( SetSpiDrvs = 0x40061e78 ); +PROVIDE ( __sf_fake_stderr = 0x3ff96458 ); +PROVIDE ( __sf_fake_stdin = 0x3ff96498 ); +PROVIDE ( __sf_fake_stdout = 0x3ff96478 ); +PROVIDE ( __sflush_r = 0x400591e0 ); +PROVIDE ( __sfmoreglue = 0x40001dc8 ); +PROVIDE ( __sfp = 0x40001e90 ); +PROVIDE ( __sfp_lock_acquire = 0x40001e08 ); +PROVIDE ( __sfp_lock_release = 0x40001e14 ); +PROVIDE ( __sfputs_r = 0x40057790 ); +PROVIDE ( __sfvwrite_r = 0x4005893c ); +PROVIDE ( sha1_prf = 0x40060ae8 ); +PROVIDE ( sha1_vector = 0x40060b64 ); +PROVIDE ( sha256_prf = 0x40060d70 ); +PROVIDE ( sha256_vector = 0x40060e08 ); +PROVIDE ( sha_blk_bits = 0x3ff99290 ); +PROVIDE ( sha_blk_bits_bytes = 0x3ff99288 ); +PROVIDE ( sha_blk_hash_bytes = 0x3ff9928c ); +PROVIDE ( sig_matrix = 0x3ffae293 ); +PROVIDE ( __sinit = 0x40001e38 ); +PROVIDE ( __sinit_lock_acquire = 0x40001e20 ); +PROVIDE ( __sinit_lock_release = 0x40001e2c ); +PROVIDE ( sip_after_tx_complete = 0x4000b358 ); +PROVIDE ( sip_alloc_to_host_evt = 0x4000ab9c ); +PROVIDE ( sip_get_ptr = 0x4000b34c ); +PROVIDE ( sip_get_state = 0x4000ae2c ); +PROVIDE ( sip_init_attach = 0x4000ae58 ); +PROVIDE ( sip_install_rx_ctrl_cb = 0x4000ae10 ); +PROVIDE ( sip_install_rx_data_cb = 0x4000ae20 ); +PROVIDE ( sip_is_active = 0x4000b3c0 ); +PROVIDE ( sip_post_init = 0x4000aed8 ); +PROVIDE ( sip_reclaim_from_host_cmd = 0x4000adbc ); +PROVIDE ( sip_reclaim_tx_data_pkt = 0x4000ad5c ); +PROVIDE ( siprintf = 0x40056c08 ); +PROVIDE ( _siprintf_r = 0x40056bbc ); +PROVIDE ( sip_send = 0x4000af54 ); +PROVIDE ( sip_to_host_chain_append = 0x4000aef8 ); +PROVIDE ( sip_to_host_evt_send_done = 0x4000ac04 ); +PROVIDE ( siscanf = 0x400587d0 ); +PROVIDE ( _siscanf_r = 0x40058830 ); +PROVIDE ( slc_add_credits = 0x4000baf4 ); +PROVIDE ( slc_enable = 0x4000b64c ); +PROVIDE ( slc_from_host_chain_fetch = 0x4000b7e8 ); +PROVIDE ( slc_from_host_chain_recycle = 0x4000bb10 ); +PROVIDE ( slc_has_pkt_to_host = 0x4000b5fc ); +PROVIDE ( slc_init_attach = 0x4000b918 ); +PROVIDE ( slc_init_credit = 0x4000badc ); +PROVIDE ( slc_reattach = 0x4000b62c ); +PROVIDE ( slc_send_to_host_chain = 0x4000b6a0 ); +PROVIDE ( slc_set_host_io_max_window = 0x4000b89c ); +PROVIDE ( slc_to_host_chain_recycle = 0x4000b758 ); +PROVIDE ( __smakebuf_r = 0x40059108 ); +PROVIDE ( sniprintf = 0x40056b4c ); +PROVIDE ( _sniprintf_r = 0x40056ae4 ); +PROVIDE ( snprintf = 0x40056b4c ); +PROVIDE ( _snprintf_r = 0x40056ae4 ); +PROVIDE ( software_reset = 0x4000824c ); +PROVIDE ( software_reset_cpu = 0x40008264 ); +PROVIDE ( specialModP256 = 0x4001600c ); +PROVIDE ( spi_cache_sram_init = 0x400626e4 ); +PROVIDE ( SPIClkConfig = 0x40062bc8 ); +PROVIDE ( SPI_Common_Command = 0x4006246c ); +PROVIDE ( spi_dummy_len_fix = 0x40061d90 ); +PROVIDE ( SPI_Encrypt_Write = 0x40062e78 ); +PROVIDE ( SPIEraseArea = 0x400631ac ); +PROVIDE ( SPIEraseBlock = 0x40062c4c ); +PROVIDE ( SPIEraseChip = 0x40062c14 ); +PROVIDE ( SPIEraseSector = 0x40062ccc ); +PROVIDE ( spi_flash_attach = 0x40062a6c ); +PROVIDE ( SPILock = 0x400628f0 ); +PROVIDE ( SPIMasterReadModeCnfig = 0x40062b64 ); +PROVIDE ( spi_modes = 0x3ff99270 ); +PROVIDE ( SPIParamCfg = 0x40063238 ); +PROVIDE ( SPI_Prepare_Encrypt_Data = 0x40062e1c ); +PROVIDE ( SPIRead = 0x40062ed8 ); +PROVIDE ( SPIReadModeCnfig = 0x40062944 ); +/* This is static function, but can be used, not generated by script*/ +PROVIDE ( SPI_read_status = 0x4006226c ); +/* This is static function, but can be used, not generated by script*/ +PROVIDE ( SPI_read_status_high = 0x40062448 ); +PROVIDE ( SPIUnlock = 0x400628b0 ); +PROVIDE ( SPI_user_command_read = 0x400621b0 ); +PROVIDE ( spi_w25q16 = 0x3ffae270 ); +PROVIDE ( SPIWrite = 0x40062d50 ); +/* This is static function, but can be used, not generated by script*/ +PROVIDE ( SPI_write_enable = 0x40062320 ); +PROVIDE ( SPI_Write_Encrypt_Disable = 0x40062e60 ); +PROVIDE ( SPI_Write_Encrypt_Enable = 0x40062df4 ); +/* This is static function, but can be used, not generated by script*/ +PROVIDE ( SPI_write_status = 0x400622f0 ); +PROVIDE ( sprintf = 0x40056c08 ); +PROVIDE ( _sprintf_r = 0x40056bbc ); +PROVIDE ( __sprint_r = 0x400577e4 ); +PROVIDE ( srand = 0x40001004 ); +PROVIDE ( __sread = 0x40001118 ); +PROVIDE ( __srefill_r = 0x400593d4 ); +PROVIDE ( sscanf = 0x400587d0 ); +PROVIDE ( _sscanf_r = 0x40058830 ); +PROVIDE ( __sseek = 0x40001184 ); +PROVIDE ( __ssprint_r = 0x40056ff8 ); +PROVIDE ( __ssputs_r = 0x40056f2c ); +PROVIDE ( __ssrefill_r = 0x40057fec ); +PROVIDE ( __ssvfiscanf_r = 0x4005802c ); +PROVIDE ( __ssvfscanf_r = 0x4005802c ); +PROVIDE ( __stack = 0x3ffe3f20 ); +PROVIDE ( __stack_app = 0x3ffe7e30 ); +PROVIDE ( _stack_sentry = 0x3ffe1320 ); +PROVIDE ( _stack_sentry_app = 0x3ffe5230 ); +PROVIDE ( _start = 0x40000704 ); +PROVIDE ( start_tb_console = 0x4005a980 ); +PROVIDE ( _stat_r = 0x4000bcb4 ); +PROVIDE ( _stext = 0x40000560 ); +PROVIDE ( strcasecmp = 0x400011cc ); +PROVIDE ( strcasestr = 0x40001210 ); +PROVIDE ( strcat = 0x4000c518 ); +PROVIDE ( strchr = 0x4000c53c ); +PROVIDE ( strcmp = 0x40001274 ); +PROVIDE ( strcoll = 0x40001398 ); +PROVIDE ( strcpy = 0x400013ac ); +PROVIDE ( strcspn = 0x4000c558 ); +PROVIDE ( strdup = 0x4000143c ); +PROVIDE ( _strdup_r = 0x40001450 ); +PROVIDE ( strftime = 0x40059ab4 ); +PROVIDE ( strlcat = 0x40001470 ); +PROVIDE ( strlcpy = 0x4000c584 ); +PROVIDE ( strlen = 0x400014c0 ); +PROVIDE ( strlwr = 0x40001524 ); +PROVIDE ( strncasecmp = 0x40001550 ); +PROVIDE ( strncat = 0x4000c5c4 ); +PROVIDE ( strncmp = 0x4000c5f4 ); +PROVIDE ( strncpy = 0x400015d4 ); +PROVIDE ( strndup = 0x400016b0 ); +PROVIDE ( _strndup_r = 0x400016c4 ); +PROVIDE ( strnlen = 0x4000c628 ); +PROVIDE ( strrchr = 0x40001708 ); +PROVIDE ( strsep = 0x40001734 ); +PROVIDE ( strspn = 0x4000c648 ); +PROVIDE ( strstr = 0x4000c674 ); +PROVIDE ( __strtok_r = 0x4000c6a8 ); +PROVIDE ( strtok_r = 0x4000c70c ); +PROVIDE ( strtol = 0x4005681c ); +PROVIDE ( _strtol_r = 0x40056714 ); +PROVIDE ( strtoul = 0x4005692c ); +PROVIDE ( _strtoul_r = 0x40056834 ); +PROVIDE ( strupr = 0x4000174c ); +PROVIDE ( __subdf3 = 0x400026e4 ); +PROVIDE ( __submore = 0x40058f3c ); +PROVIDE ( __subsf3 = 0x400021d0 ); +PROVIDE ( SubtractBigHex256 = 0x40015bcc ); +PROVIDE ( SubtractBigHexMod256 = 0x40015e8c ); +PROVIDE ( SubtractBigHexUint32_256 = 0x40015f8c ); +PROVIDE ( SubtractFromSelfBigHex256 = 0x40015c20 ); +PROVIDE ( SubtractFromSelfBigHexSign256 = 0x40015dc8 ); +PROVIDE ( __subvdi3 = 0x40002d20 ); +PROVIDE ( __subvsi3 = 0x40002cf8 ); +PROVIDE ( _sungetc_r = 0x40057f6c ); +PROVIDE ( _svfiprintf_r = 0x40057100 ); +PROVIDE ( __svfiscanf_r = 0x40057b08 ); +PROVIDE ( _svfprintf_r = 0x40057100 ); +PROVIDE ( __svfscanf = 0x40057f04 ); +PROVIDE ( __svfscanf_r = 0x40057b08 ); +PROVIDE ( __swbuf = 0x40058cb4 ); +PROVIDE ( __swbuf_r = 0x40058bec ); +PROVIDE ( __swrite = 0x40001150 ); +PROVIDE ( __swsetup_r = 0x40058cc8 ); +PROVIDE ( sw_to_hw = 0x3ffb8d40 ); +PROVIDE ( _SyscallException = 0x400007cf ); +PROVIDE ( syscall_table_ptr_app = 0x3ffae020 ); +PROVIDE ( syscall_table_ptr_pro = 0x3ffae024 ); +PROVIDE ( _system_r = 0x4000bc10 ); +PROVIDE ( tdefl_compress = 0x400600bc ); +PROVIDE ( tdefl_compress_buffer = 0x400607f4 ); +PROVIDE ( tdefl_compress_mem_to_mem = 0x40060900 ); +PROVIDE ( tdefl_compress_mem_to_output = 0x400608e0 ); +PROVIDE ( tdefl_get_adler32 = 0x400608d8 ); +PROVIDE ( tdefl_get_prev_return_status = 0x400608d0 ); +PROVIDE ( tdefl_init = 0x40060810 ); +PROVIDE ( tdefl_write_image_to_png_file_in_memory = 0x4006091c ); +PROVIDE ( tdefl_write_image_to_png_file_in_memory_ex = 0x40060910 ); +PROVIDE ( time = 0x40001844 ); +PROVIDE ( __time_load_locale = 0x4000183c ); +PROVIDE ( times = 0x40001808 ); +PROVIDE ( _times_r = 0x4000bc40 ); +PROVIDE ( _timezone = 0x3ffae0a0 ); +PROVIDE ( tinfl_decompress = 0x4005ef30 ); +PROVIDE ( tinfl_decompress_mem_to_callback = 0x40060090 ); +PROVIDE ( tinfl_decompress_mem_to_mem = 0x40060050 ); +PROVIDE ( toascii = 0x4000c720 ); +PROVIDE ( tolower = 0x40001868 ); +PROVIDE ( toupper = 0x40001884 ); +PROVIDE ( __truncdfsf2 = 0x40002b90 ); +PROVIDE ( __tzcalc_limits = 0x400018a0 ); +PROVIDE ( __tz_lock = 0x40001a04 ); +PROVIDE ( _tzname = 0x3ffae030 ); +PROVIDE ( tzset = 0x40001a1c ); +PROVIDE ( _tzset_r = 0x40001a28 ); +PROVIDE ( __tz_unlock = 0x40001a10 ); +PROVIDE ( uartAttach = 0x40008fd0 ); +PROVIDE ( uart_baudrate_detect = 0x40009034 ); +PROVIDE ( uart_buff_switch = 0x400093c0 ); +PROVIDE ( UartConnCheck = 0x40008738 ); +PROVIDE ( UartConnectProc = 0x40008a04 ); +PROVIDE ( UartDev = 0x3ffe019c ); +PROVIDE ( uart_div_modify = 0x400090cc ); +PROVIDE ( UartDwnLdProc = 0x40008ce8 ); +PROVIDE ( UartGetCmdLn = 0x40009564 ); +PROVIDE ( Uart_Init = 0x40009120 ); +PROVIDE ( UartRegReadProc = 0x40008a58 ); +PROVIDE ( UartRegWriteProc = 0x40008a14 ); +PROVIDE ( uart_rx_intr_handler = 0x40008f4c ); +PROVIDE ( uart_rx_one_char = 0x400092d0 ); +PROVIDE ( uart_rx_one_char_block = 0x400092a4 ); +PROVIDE ( uart_rx_readbuff = 0x40009394 ); +PROVIDE ( UartRxString = 0x400092fc ); +PROVIDE ( UartSetBaudProc = 0x40008aac ); +PROVIDE ( UartSpiAttachProc = 0x40008a6c ); +PROVIDE ( UartSpiReadProc = 0x40008a80 ); +PROVIDE ( uart_tx_flush = 0x40009258 ); +PROVIDE ( uart_tx_one_char = 0x40009200 ); +PROVIDE ( uart_tx_one_char2 = 0x4000922c ); +PROVIDE ( uart_tx_switch = 0x40009028 ); +PROVIDE ( uart_tx_wait_idle = 0x40009278 ); +PROVIDE ( __ucmpdi2 = 0x40063840 ); +PROVIDE ( __udivdi3 = 0x4000cff8 ); +PROVIDE ( __udivmoddi4 = 0x40064ab0 ); +PROVIDE ( __udivsi3 = 0x4000c7c8 ); +PROVIDE ( __udiv_w_sdiv = 0x40064aa8 ); +PROVIDE ( __umoddi3 = 0x4000d280 ); +PROVIDE ( __umodsi3 = 0x4000c7d0 ); +PROVIDE ( __umulsidi3 = 0x4000c7d8 ); +PROVIDE ( ungetc = 0x400590f4 ); +PROVIDE ( _ungetc_r = 0x40058fa0 ); +PROVIDE ( _unlink_r = 0x4000bc84 ); +PROVIDE ( __unorddf2 = 0x400637f4 ); +PROVIDE ( __unordsf2 = 0x40063478 ); +PROVIDE ( user_code_start = 0x3ffe0400 ); +PROVIDE ( _UserExceptionVector = 0x40000340 ); +PROVIDE ( utoa = 0x40056258 ); +PROVIDE ( __utoa = 0x400561f0 ); +PROVIDE ( vasiprintf = 0x40056eb8 ); +PROVIDE ( _vasiprintf_r = 0x40056e80 ); +PROVIDE ( vasniprintf = 0x40056e58 ); +PROVIDE ( _vasniprintf_r = 0x40056df8 ); +PROVIDE ( vasnprintf = 0x40056e58 ); +PROVIDE ( _vasnprintf_r = 0x40056df8 ); +PROVIDE ( vasprintf = 0x40056eb8 ); +PROVIDE ( _vasprintf_r = 0x40056e80 ); +PROVIDE ( VerifyFlashMd5Proc = 0x40008c44 ); +PROVIDE ( veryBigHexP256 = 0x3ff9736c ); +PROVIDE ( vfiprintf = 0x40057ae8 ); +PROVIDE ( _vfiprintf_r = 0x40057850 ); +PROVIDE ( vfiscanf = 0x40057eb8 ); +PROVIDE ( _vfiscanf_r = 0x40057f24 ); +PROVIDE ( vfprintf = 0x40057ae8 ); +PROVIDE ( _vfprintf_r = 0x40057850 ); +PROVIDE ( vfscanf = 0x40057eb8 ); +PROVIDE ( _vfscanf_r = 0x40057f24 ); +PROVIDE ( viprintf = 0x400569b4 ); +PROVIDE ( _viprintf_r = 0x400569e4 ); +PROVIDE ( viscanf = 0x40058698 ); +PROVIDE ( _viscanf_r = 0x400586c8 ); +PROVIDE ( vprintf = 0x400569b4 ); +PROVIDE ( _vprintf_r = 0x400569e4 ); +PROVIDE ( vscanf = 0x40058698 ); +PROVIDE ( _vscanf_r = 0x400586c8 ); +PROVIDE ( vsiprintf = 0x40056ac4 ); +PROVIDE ( _vsiprintf_r = 0x40056a90 ); +PROVIDE ( vsiscanf = 0x40058740 ); +PROVIDE ( _vsiscanf_r = 0x400586f8 ); +PROVIDE ( vsniprintf = 0x40056a68 ); +PROVIDE ( _vsniprintf_r = 0x40056a14 ); +PROVIDE ( vsnprintf = 0x40056a68 ); +PROVIDE ( _vsnprintf_r = 0x40056a14 ); +PROVIDE ( vsprintf = 0x40056ac4 ); +PROVIDE ( _vsprintf_r = 0x40056a90 ); +PROVIDE ( vsscanf = 0x40058740 ); +PROVIDE ( _vsscanf_r = 0x400586f8 ); +PROVIDE ( wcrtomb = 0x40058920 ); +PROVIDE ( _wcrtomb_r = 0x400588d8 ); +PROVIDE ( __wctomb = 0x3ff96540 ); +PROVIDE ( _wctomb_r = 0x40058f14 ); +PROVIDE ( _WindowOverflow12 = 0x40000100 ); +PROVIDE ( _WindowOverflow4 = 0x40000000 ); +PROVIDE ( _WindowOverflow8 = 0x40000080 ); +PROVIDE ( _WindowUnderflow12 = 0x40000140 ); +PROVIDE ( _WindowUnderflow4 = 0x40000040 ); +PROVIDE ( _WindowUnderflow8 = 0x400000c0 ); +PROVIDE ( write = 0x4000181c ); +PROVIDE ( _write_r = 0x4000bd70 ); +PROVIDE ( xthal_bcopy = 0x4000c098 ); +PROVIDE ( xthal_copy123 = 0x4000c124 ); +PROVIDE ( xthal_get_ccompare = 0x4000c078 ); +PROVIDE ( xthal_get_ccount = 0x4000c050 ); +PROVIDE ( xthal_get_interrupt = 0x4000c1e4 ); +PROVIDE ( xthal_get_intread = 0x4000c1e4 ); +PROVIDE ( Xthal_intlevel = 0x3ff9c2b4 ); +PROVIDE ( xthal_memcpy = 0x4000c0bc ); +PROVIDE ( xthal_set_ccompare = 0x4000c058 ); +PROVIDE ( xthal_set_intclear = 0x4000c1ec ); +PROVIDE ( _xtos_alloca_handler = 0x40000010 ); +PROVIDE ( _xtos_cause3_handler = 0x40000dd8 ); +PROVIDE ( _xtos_c_handler_table = 0x3ffe0548 ); +PROVIDE ( _xtos_c_wrapper_handler = 0x40000de8 ); +PROVIDE ( _xtos_enabled = 0x3ffe0650 ); +PROVIDE ( _xtos_exc_handler_table = 0x3ffe0448 ); +PROVIDE ( _xtos_interrupt_mask_table = 0x3ffe0758 ); +PROVIDE ( _xtos_interrupt_table = 0x3ffe0658 ); +PROVIDE ( _xtos_ints_off = 0x4000bfac ); +PROVIDE ( _xtos_ints_on = 0x4000bf88 ); +PROVIDE ( _xtos_intstruct = 0x3ffe0650 ); +PROVIDE ( _xtos_l1int_handler = 0x40000814 ); +PROVIDE ( _xtos_p_none = 0x4000bfd4 ); +PROVIDE ( _xtos_restore_intlevel = 0x40000928 ); +PROVIDE ( _xtos_return_from_exc = 0x4000c034 ); +PROVIDE ( _xtos_set_exception_handler = 0x4000074c ); +PROVIDE ( _xtos_set_interrupt_handler = 0x4000bf78 ); +PROVIDE ( _xtos_set_interrupt_handler_arg = 0x4000bf34 ); +PROVIDE ( _xtos_set_intlevel = 0x4000bfdc ); +PROVIDE ( _xtos_set_min_intlevel = 0x4000bff8 ); +PROVIDE ( _xtos_set_vpri = 0x40000934 ); +PROVIDE ( _xtos_syscall_handler = 0x40000790 ); +PROVIDE ( _xtos_unhandled_exception = 0x4000c024 ); +PROVIDE ( _xtos_unhandled_interrupt = 0x4000c01c ); +PROVIDE ( _xtos_vpri_enabled = 0x3ffe0654 ); diff --git a/tools/sdk/ld/esp32_out.ld b/tools/sdk/ld/esp32_out.ld new file mode 100644 index 00000000..5e7cd392 --- /dev/null +++ b/tools/sdk/ld/esp32_out.ld @@ -0,0 +1,52 @@ +/* ESP32 Linker Script Memory Layout + + This file describes the memory layout (memory blocks) as virtual + memory addresses. + + esp32.common.ld contains output sections to link compiler output + into these memory blocks. + + *** + + This linker script is passed through the C preprocessor to include + configuration options. + + Please use preprocessor features sparingly! Restrict + to simple macros with numeric values, and/or #if/#endif blocks. +*/ +/* + * + * Automatically generated file; DO NOT EDIT. + * Espressif IoT Development Framework Configuration + * + */ +MEMORY +{ + /* All these values assume the flash cache is on, and have the blocks this uses subtracted from the length + of the various regions. The 'data access port' dram/drom regions map to the same iram/irom regions but + are connected to the data port of the CPU and eg allow bytewise access. */ + /* IRAM for PRO cpu. Not sure if happy with this, this is MMU area... */ + iram0_0_seg (RX) : org = 0x40080000, len = 0x20000 + /* Even though the segment name is iram, it is actually mapped to flash */ + iram0_2_seg (RX) : org = 0x400D0018, len = 0x330000 + /* Shared data RAM, excluding memory reserved for ROM bss/data/stack. + + Enabling Bluetooth & Trace Memory features in menuconfig will decrease + the amount of RAM available. + */ + dram0_0_seg (RW) : org = 0x3FFB0000 + 0x0, + len = 0x50000 - 0x0 - 0x0 + /* Flash mapped constant data */ + drom0_0_seg (R) : org = 0x3F400010, len = 0x800000 + /* RTC fast memory (executable). Persists over deep sleep. + */ + rtc_iram_seg(RWX) : org = 0x400C0000, len = 0x2000 + /* RTC slow memory (data accessible). Persists over deep sleep. + + Start of RTC slow memory is reserved for ULP co-processor code + data, if enabled. + */ + rtc_slow_seg(RW) : org = 0x50000000 + 0, + len = 0x1000 - 0 +} +/* Heap ends at top of dram0_0_seg */ +_heap_end = 0x40000000 - 0x0; diff --git a/tools/sdk/lib/libbt.a b/tools/sdk/lib/libbt.a new file mode 100644 index 0000000000000000000000000000000000000000..40e814d02a0b630910b1e2eb3b36280626fb8de3 GIT binary patch literal 198132 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 literal 0 HcmV?d00001 diff --git a/tools/sdk/lib/libbtdm_app.a b/tools/sdk/lib/libbtdm_app.a new file mode 100644 index 0000000000000000000000000000000000000000..b8ec4f9871694654aa50b9108a23a6abf4b58ffb GIT binary patch literal 62124 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≠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%0DOEc#QD_f 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

Mm|U{s8tUN3y>O+u^=`# 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%0A!zfaY<2TUOI#g z-WjWx0a>U9-M&79k&&4LynmgEQ=Wm5xr~#Q0U-j}%MRMz&cewH-s28p*MrqVcD=*c zAeHsdz3&_hjLa;YJYe;#42%p+ER4*xoGc8C%$%I;U_KLbIar>XlZ}CqnGGb$%*e?F zmV>FS2HVI4R>1={8Db+dSOm7u9^@X-PJ2dXm`gw+EMPTEV81YNg51N%$q#l9$i8}z zP0Y+tGX>$|j9@o0fqjQ;z5v*L3}A7H8|uO4GjcM3T@Ug*6WBCnuw4+BFoWF>QO^w4 z%L-Bh3Jo@922L>sMmA<9PH}Kp2{SMX~anI+-~@?gR7d zIQhUjKz?Ne`!WtpDudN=f=QTrLE(@Y3{4&7oKg&o%tBz2nNyMhlwLrw3Nev|lbeB&nVC}nEDrJ=#4k+XIA;UPf?W07{$e;Is-#H{jF&R#gLv4Q6&wI5RM@Ffmtx_+S}!unQq66%sa#;1mP# z7jjBMHjNEp8z?PsfzkpOI26Es2Ac|T6*zBz?W+QZ2^Yv#X5^FsieGlH?^r-?W99~v zu-FHM0L;H2U$JnSGcYnwtOYA#0ta6mlnsh_CU5|;fvtjR0~rBv3JWAcs0Y&N%=nho0yFIuHW+ z^a+M|*pUd(^A*5Gf=r7qN=?kk$xjAt+Xt8Qpc5k!(~IHf8o>7D!%qPKRV48x@G}h{ z^$q;|kQCTaC1|I7pdOz9JLUp>Oa{n9AX}m5RKQL!fgOl|dS*j$Vj1{Q0ML;M@Ka1c zhkalBx=v zVmI)?F;F42lR1#i`N)JHc>zl&uyZNkhkL}sPV6XxoKyimnFGp(pM(QTbl?*<(x4}_ zK#r{edj)bf4#@qvnRyJLvq&}$Kehx@l9w=Ht z2bg3QC&xpr1)uQ)JplxCRsj4|98m0oWZ3goyOl8=Oe9ODDB337G~DET5E9RxY6rnn@r2z<;D((xUm?&JF~1wm{;bp>5C>8jv{nSOU<3MFs{2(0DXxOASaIG%gLY z7o;A<25tKSiT6S62Z@8+2-<=Q5(kar!_M zeIOd71~ftk+O`N{dx6&4Ld^k<$AONd0EvS}|G?&eu3BeeV1U^R8mohegV->8LE~It zaSa9r5F4}|4rCu_^bHo*pusP&8U_Xi5F2JDXbu;q<}rB05pu2!Xz89iG<(Tp=n_mE#D;}u8E738)Ev+i9iVszsRtcD0CF!VoI#^& zpheCganQmTm^mOeO#M70_kh?SaghEcpwo$=ZUzmt!SsUIpzTf|GtVOF1+igi{yKP! z4B~gta2#kGBS`%xBsYHnk6c31%r7K!Ky1*KTabFt;2g|e5F2JMXmAd+9SWodG;Ru3 zqrt!c8oknj<`Xv-NPY!{1L*W=SiS>Y>ki7_AaT&DYS2+6Aag*&M=){F*}SmupAQ~- zf%pY9{sJ=xeAEFn{P%!XG(p4a5O`Dxq8>EL1X?%(XK202=Cpg)?ZN5SB+^gGC^>jh=x7iVY|x<_siI!U8D=6}U{G zl}R8D6f>iooDUjS1O-1-5K02r?g(2$A`q42sMLP0@m8-9QTg zL1!v~Dp+KB(CSiTK4_{AR3U)&j)2s|$3Gb$XD)#%S!DH~W80DWpt*5S!4BGE0@4p! zb%iY73>qP2VPF95H37-P8Y+6p(56c&1NbDT_#y^adpbUK8Fw0n_T_3_{?E@%xpXwn)Qg`ltoE${%j9dzabBd8<* zO@@NhfJ%J^1_n^2$q0=?&|X(YX!L>h#lp^;0;`t7@>MW6+KK1=wyAEIiT=l z1eNFv3=H6V(x4Fz3Rgzx0a&1wkc^zEGoo@hQgBm}eJ3c^ckXyPL7#Kio(3*#ZP&R0>0BHFD zNF2llopcXkgZAKn7QTY)0u^#UKIZPeO|~}7@)<`AaRg43!&nm z#>i9-{WAT>-344~P& zYA8F8nSo&{lnrWB%!ac2m>C#$LfN1xyHij$XqxT{68k-r4XWtBL)kBw85lqlcOZK~ z6Lrp@tuRas44{fB0m=qdSS=tnFXWDz2_QBT0|RL02edj6q!*-q2UHw1^Rpky-o(Pd z0GcQPsR7OKaDjHmFflNIW_3i6*xFDwXjTVwP7z4GDk}qnA5Opx3w2lSD26YfX zd=MKHN1(fKKx|NhAC&GvY*1$bbdDK_4QlX%?y~@~L92N5Kxvg1a;67}%?&L>KWQ=3qWc>9gQ528t7_+E)biSfdN!rg4i&>gRY|hsRwl;mO<5k%25!T8(Nlv?hFK} z0p(rL`DP%$fXY`8n;Tljo&@P-VqgGuDDFbppt2FP=Lw`9RPKS;+|Y6uv@RYb4l0j9 zY;I5jWME+U3)KtiuyBF$7cZoo2C-pomIsM5F))BSDdr$HFQlUiV#C4#G$9UhGpNG? znh^)t1uEA;Y*-ow-6aT81L~xJFo+H6$bhE!L2OWG1hlCG#0GUbKztAz)OlG5vKO>t zj)j2%BnJ{-$IQTR6eK^+s&96v}6sB`faDh}#UfcPMBP-g^Gc7WKR4h85c z0ub96v=kp&4uBfNAU;SO)Nugq9|E!MSQr>UTLwUEP&os-&;`t9VPNov>IHQuKwI@d z;^8a|3?Wc)keN|XHmIzMg|b2ALk)<{%fJAt13_$9*n*~WLFRxuBcM58P}qX%Mi3ho zwxBx(L25u95D*5jL7kMdATya57(gA6J5V;L0|J_T2dM!~LxcDrHmEbg3N5=p9Swdc z8`K#AZ4Cmc0d*)q7{ms3IzVL~hz;sc#Ddg=dZi2u3|SyHs22fBl%VsqK)Vv5?J{A| z&M8oN25O&xdM6B!dK7ks6)0)K&fNlaieYR}Sp(7wYRiByBUCTAJp;81R7QZ*gW8dn zAbUZ1oDp*V5=bwo-UMNoUQnG1vlmo%g7kvgl%R8)U~Evm2+|9x6G0fJ7gWx|^n&s^ zNIj@M32K+X*r0p}(hJIWAPmzBYOBEXg34`>dQhje5$a|T8{|FM8Ec?A19lD=sDlP$ zgNjQS8`PnLnF)#pkeQ(12ZbT*{4`J)!qkI0yfC&cC@w&jfcC&6u|Zd=z|?@2qQTgp zn=@c+kl$hKY$UxPzr)1AgIrMa+mO^uMq-1{-h`?F-Jt~23#zkVY|xcVFg9qHFN_Vo zLkz0-Cz6@qvp1pQf}nK_P_`TrTN{ZD+Fb=R(*{XA7>ON^#0J%6F!eK$#6frEz{EEq ziSI>XpG0C`MPffhV!uUV|3qSgX7FL=gU*nHvE@Mvv!H&|Mq-;Iu|aF`VCq3_P8d56 zNeyUyA50u{01Avf2}up;UM`q8=pHT@`xcU#w@Bt7rgQc$_A}pgSi28jS7t2iKKTL5*xI6AEssllK5UEHmF?+Qv)8%g4zY%&IDzH zcHYC(fZC-nHu!oIs2b1?Oqe)m2R4jt2^v&_s!2m)7a_5`kl3IyAEtK^lK46#_AVqg zXp=ik{Us!ECeWY{)LuR$HfS>$Og(4=HjHhDq{a)09frj2L}G*P=Yi?f1)X&XwaW^L z?T*9--@gh~lZPZ;jl}LiVoyb4FG6C2?^cDHa~4Vb783h868j4h8+@NCRIe!L+)F51 z35l(b#I`|Vdm^#Jkl4vc>;fcqEfTv6i9H>O{T+$@4~fkTIvW$}HdQ3H0TSC9i5-Z< zjzMClBeAQI*prahGeB%;-8zSZfdN*h>;s8IholaJ*iiReMPlCvv7u_7fY?wq??7y* zICvQiR9qFbqy{Rk1!6GMG1P&FkW zHdM_DB=$}a8*1iZ5F4uIIMf_ayW$c^9IECHhz&LKA&3nXe}}~W0b)bd`~|V0YS_6L z7(o69)zP5caj^U%h9oWxVnfxdg4j@Vv_NdAxCw|26?a5phk)2nHE|#|R82C74fR(J z61xqFJr~4=>Rk?EL)EY5f`liijkFCU4pnmy#D+Eem2p)o3HJ?Llm)IbI+(REfHchL)CBLhWH)S#ybTPhnjgF#D=QB1!6cRU^xT@S`?} z4YgOF2VyU1oCdTj6c!HdAT?0Ec_22_{9+Irs<$19Jp+k-42gXm#D<#l2*if!eFn7` z)E4~%5{H`4$cu0%KN4FC#D=Po2eF}MYJu2LaeWXQDsGF!2HmOz%L@r0ai|+ocp-iV zt&A-Ji9^k4LSlC#v8N!h=OVF}A+cA3*iiG=Bbk2!Bn~zIA`<%^hz(UQ#K*t@Yh$Y* zv15?f)gU(1k6V%0=aJaAk=VbH*r2iiR>p$HA7O0JXg`b%x>Fd&1`WHw*vS1RWoSPF zWFF{{7nmAQUkS#B^_4(sK%1yx;-EwLU~EwT2*!r>k3i}{liV9FjU*15tAL4vcFDomptD$E?59ZTL1S$& zanS95FgEC_UKks6Ob3k3&j?BXpl|@)9RL%TLJ|k{Wnki<{tJu^I(7_cjHt6C^7#l=`Feu!_L6iN^{0q7Q7$y!n@CC*Oop=FbgSG>~*r3C} zU~EvI2*z$fGP47T-H*fujn%`{gU0({Y|vOAjJ*~~{YE7A6(sfzBsS@*}cXwM5wJ?JnF z7`qlpO$!pc1Bne9>w~GEgCq{>qrt?NBZ+TBVuOxogQ)?H{lVA=kklMUVxLB0UqWJE zLt@`YVn0S=gN_n{ng0$+95gop6aS4Q4mx%OCeFu#h$B%Xwj>f8bS?=@y$+H%XuJ_7 z4mxuS#s-~E0%HdusRxZQ!o)#mgTUCSNNPZJDoh;I--NNtkko*VCV`2A`k^p3s2>Vr z&q7iUI*I}&z6wcv8xkATKZU6Q9c}_+gZig1_Dv-9cahkjD^+1?ULlEpL1Oc-pu0t2>^(?&L1P^-@smj6pm7hF_!T7a8%S)>{Ub0nZ;`}7SNX!k zK}%3zY|xooFg7?kl447*e{XTZ;{xb`&?k=Am8T#Iw=Sy4mzy|#+E`F z^N~YhgH95HsWC$mw?$%u?siG$7tf{C{viFY8eL5CH= z)XYW_UyQ_Fj>KMv#NLF&-i5>ljd8)uJc=ZK5{V5u2MMO;E|U0LB=$!n_75cXA0)N_ zbbJZaUKK%NgAP=JnQw|D4mw{6CJq`0gRx_f)FdFW(~;QONNmtJ7));kl6XB5yBUey zgT$VI#Ga1Co{hv_g2V=mv%&0Ik0ibsiMvM|FOVBRXH~((m660j<8m-@JtT2cB(^0I+X0E~g2VDEXekEF9MGLaFmce;)S&q!kRL&7 zDnM+|n%s{__Y;8@YJ=ny#&8#KoVT5ADfgVwizPHX_N zL1PS{wH6?@69WSSXsrc^4O-);4w~m@g4_qA3uS}Wzktq-1*rjzLxAp*1F=EtVLu2P5D8_2<|N~xY|y+bXi+#wFKGP?s1FEYcQPu4IG;-GN_(4BN3anKr@UZ^-|Eg7ia2NDO3F@V;4fY@6Z7#QY5)qv(RmqOW~ zLv~g}*`TopP#+Ma9&~vE=!h^78#L#+7pexdZU?ju1SAexs|H#J0%C*4w?X&cf!Lt) zTCPIXzhYouxD924PGorqWrM~covR9t}D>kxFD1bno|{rvO(*KWT9-(n1nJC8`LKSnFCs9qz@IhV1%qW z1Bru<=LXIFf!NNB3=ED?H35ta4DL`iXl@qNZw09VtxW>;RY7dfnx%NC8qgZOR4BWZ zk%1u_$_A}30^QjMQV%*#r5q{_TCWG{w}QlvGeXw1f!LsfRC=LmKx_G?L)mv385rh5 z*`Ry_>bHW_gU) zt#JXdL3s;w^finPx)Tt@2CZ)b^;Hr%-c1{MS%6DF1=xD?wr^ObiU5ek+Kr z#>Bwz7pexdCW@H_5~rZGQlOodAT^*fPxztYpmmF&J}gKawDt+K_#VUt zW?LJo9<;vE6v|Fuf~=nbsR6B-a)gS5#$DW@>=Gsh245%}wEij>$_9}~AxIpwW@;l;T#1>1VLOx!T0^xL$_5=G zc^JwD9sF_<$_A~a0-faxG6%Gt>MB$mv{njqtT0GCnwf#&DO4PEu*z#F8?+`9bgU{! z4JcjzhKhsMTY>I<1&M>!Q-S)zAa*k|1A`zdB(6d0ut4`Pg2X2 zM-Usdh7;5m2C+fwu*{))L1QzvP&Q~?mNS$MI;I7*#t5VywBFMnDh?W_0rh`D;-I@O zL495j8?>Ga)aM1ULF>6d8w@~f(0Z+Es9w-%>5Wh}XuW7Rlnq)JIuXhSt@D}=WrL3S zUI=A_PPhj3b3tZ;)_<*qii6gdZicc!Ygu3c{bG=t zL392bY>@a`4%$2dWrNb42$T&PYmtJoL2JQ4$5w;%g4TekLB&Dq!a#>wgTz7W!i=Ee zptWEYP&ViY6gwyzv^LBI$_AZ=;ss^@XJKFnfU-er$HJg&(AuyVC|ib=fguUX2CbpZ zfU-4N85lrw{UA4h)|7$z)F3u!Em;**jWsI+Lj#lzT5Hx0WrNaGFO&^hQ#TpP292Z4 zgt9?tYA%!wT3-ih(}3o#Kr{%$*r2HzSo;Swp8{ip)||uGpm`G*8`O@0u|e}AFgBPA}}^+?Iw(kyzUFMMi(Xyn#+K(=YZBPLC32>a~3f1ElA>^xe1u~86-G=}Z*Fh2o)y*(*7bI~|eGC%^%^kql8AxhM zkk}1K>>eaGs6K}21>FY+V}t5u7<&(r`V&ZO(7XUl4d`x782b&98c@9p6K4UfM}qoS z0EsPw#0J%cF!d%#;toh`Q2hr}6M-b2g2XOBVuR`}n0nCM0gOEbNzDQzHfTLCOwA4? zanK30)9CU~*j4c6L`veUW6(lzJ9%QJv4U#x`Ef!Qf z1W6oJC&A1Ft^0+s!SxVSJ!mcfCJw4^U~JI%Ka9Ns$;>TCY|z*~Obz&cWT=^-dIBa6 zUZVvS|A3?yR3E_9fa(Ak8+^_gRJ{UdtrV0E8i$9e0j&Xsv0aeV1R$|vkk}bW>=Gn) z0}{Iji9G{}y#$F3THgz^7gVOh*e8(GTtQ-kZhe8Nd4nVl8XJd+vw+rXLH#Iz#0Hhu zFf|%T;-E5<7!2C`0@_Um>U)CJgXWn*FH2UIpfY0&;N(8fkW>cH!Xp?W|RsQv`4;Rdlm7-TPq2K9MCY?yx&oER8D zh3GE6TtCnm+@vK^P_n+DigsgT(7385n9nyG=nHq;LWCp+RQD?CtSqUEOCCmym71r#oz&9N}^Ky&=a=1HkA zFo4F)(ai&0Z~@W-b028a(hClV`#}3@Kyo1Wq2DdLM~i{s8g#QQ$V`x3AdG&u>?8x? z?v}l5K-}H3+=h_-Wgt627-T1iM!#G3MFw$q%L*GZFqokE17sfh-LhXYAnHKj4BGAk z3m4G(a#)%N>2o(D?rvEP(D}Mdkh^6;TN6R%fx;V<7Lm=AhozyBk);{q~^)3dm%z8ESSd>$P1B zI@gk18Kg_OU5@?#pR^zy;*d;69=5YgnSytj-?IFL-rJ|kwm@|<_>ML+6!$q?QGhxR zl>Twu-3AI7$en8n@H^T-Ym2angZ5Zq69=`0v5AAq4o}d9WuOGXX8<=JH1-8*d&BGn zt?>h;9|i^%Mo|9*yyoo@w6X#%x&cKS69-EW=&V~77EqU&nS~W}d<+u{_&PNvCU)>a z5R7b~8^)LzIY1*mOiZlxppyqUSPz2^2jE}_HOE=JKxRPha|3m;nRq~(7+65Pb7le1 zdLt$lR?vyeETG%InAJfdte`DjEGgh~_t{vOy-tGebE^ZL^WZZN!~~6sGW&u=88|>Y zC~ku8a|03J``keHF>!G)yMxyJaDy5h%+UMXK%GryKhSU@3j+(NN6qXH+T*~o5OkDw zFleb14+{&Z<-jVY0&+78J80O3cM~H6g9NK?9q2wc&^QUJK8T5OpWA=XbwS`e+&H*r zgKq2rvw64|gDwUFv!VC7wSe}~G4Qj1#_u>l1Aw5#Ih-J;GcfSpgxu!_8e8H94P3(R za|3ONg5Bo^y4?YGpBrf6n-zMW+eOf=2G*ck5d^qFgPgGY+*W{G0KLx*v{0WFdY>C; zf}Rz2pBrcwE(as4hcD=Yv_6pgJwZ&^eQqFjgCJ=6JgX1L%?yl!x*$dVAP(q0H_(+I zu}lmMV2{W%@Pc+I^solc0vQJmu@DfGf%^d{n4tH$O#_(_25N_MaNh&5!$IS*9Sr;| zAd@&iNBDv;)JT37(5_n{eil&R@Pc-+aj+JH(ku64(49ynASMI18Hf$P&kd9^gxSFZ z07Z;?pv_sJJ0DnK_qmyZEUjit2JM^@0rgc_Ash}7&?ZPIhezZ#$jz|(+(1nc)_O+J ziU1K2(B4+~eQuz|QSkfRKqG^!EsUVS5BPm<8^HIueFd4;!FUjSpW7~w3t;!T$$=uU z7kq7qfk-4srVnh7i3s?nvk8pH*%=rtL}Wo1N=;-u3%<`S6QpMnSeb(eXn6BxF?2P^0j2G9r* z>xnzy``mOufpQWwwqw8-Uz)_gdIn@Z>^?V;D^c%r1Kpph>8ff9*0$UovB zkBEc0p!~_e&(Z`sDuj^(v^j;J1r(g%3*bP>1xW*#3)KJ`I+FnD;%Dgx-PHz~HUW7Z zNjXReaz_b2%RZ1AkXBHTAk;AMvpiyDfE1Y^4}nRgp0kw5brBmzBY61`%hFhhg`*f!3q3s)7>|=sq`4>f&bsnJEk!%>mu#wi;vr zXo(i99V3X%AOaeHX0-=%*hH#9NyLE>bnOZc7iR85tNr z_qqKAnFv}y$QsEAE|En*vj?oO``jEs5gQGb;Slixc`1ewqy==J8%ViuK4@%>HGvVd zhCl=~=*^l8PVWpN=Rm4c7(o%sA_AInVoe2ectk+^&{@;K91#)F;4*7ESig)&2gn1k z``kdoFRYnhWf~%&^|Gv4V2*)EJ}4<=gE1NIEDp=`y1{E3L zI0D`01_}X5P`Lq)PX>OLZQv{0GTA^^VS#E9Nl?y*rGO`3$;)7p8PrDuZT@510ZN3R znjO@1V4M@r!N4G$!ob)Ix;PIcEOQDpgwYF1IgBAPnV@l`oes7%1Y#+K6Dn&6y7ZhKWN94OrdXyDuzjElh@?P!3E6gmY=X6z z80Xk=LcF&YrO;GPaIAOBB3=9mQ%@;VmClA_+%eEI}9jqb7 zI0rQS4hqffAdi6@1@YK+uys(6Z3kNi^%#T`DhrxF1%(PIAVEQh>@oQWRt5&PZ6KRq zO*_Up>Rb?y9Rhi58Uq7^0@!1RKsN1TU|@jU%XbK*=?-Y_7d&uu9K>Y|RRT4jKs!Zb zH!(0UyoN*~Q#k|3@)8C)(3Ns!Ac}#BBb|Xk9<&aZZ97OStOdz92Nd%lk1hgv6tu`1 z;?YGQ>luTUK_}-iE&^#`3{goePGMkN4ss{x?pN6h3=9mQZ~~pc zpqvJ_ZS-;{QZIM1mxSHSRuNbZL@2 z{PrI3EkB?Ogy1(Nfi8REv*NY}nIO)2*j0OU{FHbqXfF>3FHl^j0*I=BM?`d zfk7433dlu5YM2)ZsiUg{m5vMy44`g2>D(b*lfguP)nKFPb zjsV^Ap#xU}Dx*M+GMG^yHfXd7-6&Au0_rR=G6aDr(8dmk5`@$!oXb6#!ArwSGWI_8*z_OsM4?4_*ks$~~fx3qf z;}OmPt)~FVu`zsQ()q4BAH)W!<6r>${5!%Spx}Y@Ga>y?kPRS}AR2_D!N&`NuU#Si zOnkCVh##=?><8=wf9z-CLk5PxN8*Fd&DG0bU_v?upP7LHeo#Krk@yhdoXjN1G5Fwf zU(t@ipUB9_3^{k25qv^52lzZ{WDyYz5ll4@5%3}3%#5HD-kBjMT|*A2haH}-#K6cL z0X}mZWE7ndZKfRDTe9qpW(R16gWA0!MWO7lSH#HOYwfJRf|VP{-}jxuA2ANYf=!Ka}? zk4#2C-5PYD8bkabIpP|0BzFo!JmmD}_-qEyNz6o^ZVfuDoAOhwAtx%M#wI9c2_I4o z8h}lM9aRlF}*)U*Ogf$Rmft3ZSDAoZ{&5NJYl#GUlY0H3P_1q}w*~1tbo#4aA0>AqUFZAaRhpKy28#aiFyoBA^Lh1_lPu z!Q>z{AoqgU+)y`zZa4&qgWL{c!}NmuECL#8V_;yY1D)r_13AYH#D<-r2s-Nv<~Gm} zAIKb#UqNj6d52KFAb*1fGht^Og4Vr*)Pss95F2JMXx+OAC?SG83EEo^z5ovrF2bO5 z=RoFx)+<2gz`@}RD#JiSY#{YeHt1Y5*d7Q_aSYN68ZrW5&{|oL@t|}HTMGkPHv&=* zazE^BIS?DP&H$trH2DI;FullY13`NhKzc#x98^@p*q{+skX}%F1!0(8&!J_V!~G@A*+FukDOHB2vP z9R)}|C?A2=UclI(K*LfN4F4^soWnG(j11jRd44LA&;Y|!8}ObvKFCRDr}Nj+!}2uuxV z<_E?Gg#(NY8X|$QLFY!m*q~ue7#lRE31fq%Lt*T%NOm!S#;&1m0PVSesR5nq0As5o zsR6ISgsKOv8G@|z)jbf+zh4T@(Nn-4Tt4|OwWuMbQdw7&<&2JPvAvB7I9q3Yw1^n%VqhN%Hf zr@+{tbCF@}J|y+~kl5gXXQ-Liki=givA-d)LFXUC%oG5v8HDNu?O%b3gU&^Uu|a2` z!q}ii2rxG2>;xD)4#^zw`bVgltw`dNkl6E)*lUp3p!M@GGmjyOgZ6^J#6dIIFgEDi zQy3d`_9=`FnsSD*LCX(dY(>yIL8#k6do^IWG> ziOm8!`wi-5K_s>u5?dRIZGpsgMPdgbvEz~0IY{hEBz7ATdomLHBNF>Jhz+ez|0C@) z76P5|25Lxv2Bkr4sQXor*oH`KI}jUc4rm`REPM)(#7m(2WkGdrJ4hUAeh-KZHGd`& zdl?dYGl&f}{{n~&ReuY_hKk>Vnh&a@L3?&#XRm$(se!6z2A$sqWrOzY!rUnf5{H^& z4`M^rc!JnaabM`ZQcyh(+M5eAKNX|~s=f$`4cdbXGat0?7F4!^+9WHH)PVNR!o;^j z%?H)>r$B0;;d36uhMIp9#DMIbg*yd1=a>g@xup=!1xu^%9@-ypF;{s*-~Ks2Z=3uA-&2rxFN zO$=j$+7&Q1s9gtRgJwQpY|yer7#q~CfU!Zd9xyiOo&gv;9;popYLmmnL2U^b8`K7d zu|e$$7#lPj3S-YgGG`eQ8?*onrUulmfU!YsU>F;;whYDwwTEGBP}>8>2CW@~v7aNE z{~C!6njVFz`G+KqdvFD_5*>I3W6?*0zR4qC@*1Z9IR z<^rvS0;vJDqe16Of!Lsa8R*Pi5F51j7ql)B#0KS;0H|Kj{8Si}4cg-iI#(W~1~efJ z3JdW1M-T(lh6HuQU~O+`xFPp(K>a0HnSk7X0j+d_i6i$-K>mk`gWJqdGr{d-C>yy? zLCL-)s22!QpuQkzcnq3!!0UEFc^Re=l=newP&XOG2KB)}{1zF=9TlK8%^>|CIZ$wc z`ne!J%sfzE3pS($(g#upqS5ydJdt5w0PTwcnFmUTAax+~Kz%`wc_1;6KG3;qAR2~2 zav(PP9s*qIzUyeKjLk)DTJZRlENDgEk`W^z%*^si(w1I3M`W^yieg+26 z{SY8EAPln?l%GIm!|Z*b&cFcL;|1~u$Ucx9h(_N-;3YuZ9)cN~kg*exdHD7aWC<`Z zfX)K|xebJ2?gRDtKyHA!Z;vJeg90PrJp?C(7#KhoXMxNDVUT$sjJ}6JM}oLL1i2E# z?IBnyLEIjKJ6go;Ay_NHzyR7~2=W66gZu!Z(f1I%(1NG~g)?Xj5EN#hcms_E!14x2 zU#=u^dk6xg7#Kil6_l?*W`N8C)$O3Ph-{vM3y=VG%zqTGf_}5Gd8n;C?&jypaImdU}gZ9MWpN@FiT`u3tGwVa0I%TU(A$k zEemAzel6EpRtRe)2g6=g=_9L_ zL4?5@44_JMxnPRdGO;l;KsPNw)Pc4ufZ_$$nt#xE5M=GW0mE@71_n^LgVx@I)-p1J z8V{hu9zg*OQV61%KqE^`tf2Y@w(uS#%zO=WngMC`nvv1X9nAg3|T(PLs@-~uHdMt%?zB*6{3eTI=Ayni#83pA?9 z$PYTq15`MJ4zpr_a2Z2+K+Qr%(JlrC2GD>S4=<>;6$AMZH15L#QqL$3;+_Ikzo0vn z7$rbl&_YaJP;vzwF9|w=f)BjTkdHB%shEL}F^Z{(fq@s)TnS}jV8~)*0E?9{Fz|xz zlmv-^)_a1~l`=5!g0B4m4S9gJ!tyajag;Mm3}91IW@6w49gYGz=wJufgczoB29OOU zVAIMN7`XL! zguxpVqQJVaFPIZ!fGi606lP#xR$<`gw&Mn!sLldq@-Z;5@-uLAGcd4$D3B_4H3ksH z0g5e7)Rk9|MPSfXWn4(h$ix{KxRJOL3=BL-Yr@1C7DJ43QH?7PJ8kyMj`G7AO%j1c4|}D~^TXGh@(v5DOHmj0`~_3Y2vq z5+EHg44MRBWC#IKAoU;xAxJtykadQDatK%>sF(&dkC+$?=7VUERz`*}5Czfz5(cY- zY{+5&T~GuP1JNKgj11u*3Y$_;0}!MXM1u|-Vq}N{Q6S|^3=;!DG&XG@pM$i4XpkC4 zh9D4yt`w9%AuSq6;RkXgC|p1^2u}uWxnTemQ;ftf{7NiJuOjo#ZRGVnnR&@Mr75Wl z`cznw#gLj;Ru!L^lA;G*N(H{Y8nTuOzJ3b4XsRePFC8upSwO|azyR_PL=T944?&85R!+1k-46eiGh)s8LAQ?!pO-2mxU~k zV&VkJGJ;L3=j32uWM<`L1MB5s0I6nRWCX2ziZ5X(OUx-vWynj+O^we<%>y&Q9t9Ke zMX9;@WvQTR8bOlD`FY8SU@c&^@Fg+7%-PYVOdX;T2z!@6kh_d19V+C z+$hl6DX0!0|)V9;&f3~5EFsSta>ia=U&Q*%N0!b7YA34nqd6juz0gXjlhSE`Vr|JZKaPRDOV(Q=q9-P&ooBF+glsc>z*0;#Nt3 z0tXauAUqP+NPrRq$nT&;09tbZ8mj{FK^WAB0nImq*dPqzgQ_tQ8-zi8(7Y#z4Z$(WFW9G3qfVyML(G#f+97Ep!*l@yTT2V@q`H4D(YCqe## z-P;PX7j}0ns5=B>gU6phEot%7A8m>;;7(NDasz zAU5p2Nzix+NF3xR5E~{A>SKb$LH+}=VQV5lV`Ct3P@@6FhTSm<8utZ>gWLsT!_N=CVn5uF7TW@DDf~bFuX$&|Bb{3jeo<;;X;}l z2aN^7#6i1@Vdg7?)IiMyor4GyH$oCO2eCml2?GN|I1(GwwTAht9!VU0pBz*@czzzr z291lu)c-?L4;n9qiCZJhX@kaRfN_#LiXoLX9#&z!q zsLX+>0hK8*Ht23r7#mbBz}TR>qG4>%8W0#8)VqPPL3b0v*sGD!A?UnMnD{m%aZryG zCJq`nfU(aZskw&4zJzC)NfACc69Mj~M1pfn6)gVvb9*q|;9j4gpQR|7iZ z6DAHWXFvp=c^l9vMyO zgVKc$lnv@Qg3fjTsR5PWptC$dY|y%^IH(#>8cBh&L48!vzzRqWXb!IcDh`_G0o_Le z5(kaf)Ih~SLnWX)hC$+>eqjex95ng?I$!`K4oWYRpyHr30`eOz=V3tR6N5o@3#hFH zjUMoLBq)Eu^n&s!hz%M91F>Oa*k5=c_q2n?YC-xza-g~reQpG_CJoev0hs~9Aax)b zeQpGFPZQ`YIgojvxCW^MnFoqHkoh1nkUr2nB#4G#kQ|5&%KM-qlaM;}xe<_gptJ%q z1B5~Lf@n~E4r0Un3%ZjDG|vTcAHKN}4n_us)6g;wWDd-I=yM}W_!t;K=eU8)1C2+6 z>;m~0)GmPO0qF;=$3b2&43k5j8@bHFzyMm;1=0h;Fm>p2BcSz}pmXa$_JZt#*^53m z@}HHsxe*>=;^s!=*%%n6!yE;w8$pg_U|>L>8!-?@oZAIz+rZq1e!dcDL--Li^FUnm zxsfVP;^szna}qZ<@|lykxe)~s;^sy`=YxahOrgO6k81R}5gif8eeIxl!#6kL&qdta zhygbP18CzuC|`rhQ&2dA!W)zpVR;DTrVTs{44^y%VuLU!j6t-%iG?L(t^-06nj0}O zH#CB%Bs@350h(mPGB;wD$e<}`$#{&9VJ(aI#=q%FuQre zgpxCrht3>6FuPeyl99WkQ?NtOiG!i%i~5X@8iKMPIvB%V{MO}={lFmI(J9#W>puf1 zAK;qH0JRHXa~YsI2NX`AxeQRf4eqaiF4Y1B2uLA_W`dj?#0>HS(>2g2GYbnl=;TTk zCU$V7GO|4bO=mE2fSRl2uM96LkNfhX@f|Bbbv6Z9|x&gAgK@}22us0K{y#asQevN zx{^AmOogFf@&@#<4NODE9a8g3iYg()%J8vdCI+yaUIysM(WKI}__WNtl;V;iv`x6e zpdn(&a4~3bmY4B1T!8%$g1t^hoQEDGLX zTL~gLK?@Wa!2_&d0yHoR8i9>3A!R}CIi z1ruPEV5el{7nOi_+LAm_3)TrY8*Er+dLC@-HXbRc89?lUk|Hn-@&tMD4%#VGoT!^x zTwrKmp_`hMhA|9{@G8VPRjJ^CZcr%1gF|v)M|xpd5JbZ&MNlS$jr4-{B7ib0hz5y+ z8mAyOXp#vux(mwtpo0xTY)}~hQv+gyDq)Z~Xwe|ZY>-}1kpOCVg2Z8&9wa{EMutcC z&w-j2pyUEd2B5KF&^QT*55k}}9Jq{xX z1+hUZEI{Ug#vnneL2TIADrgK9qz0rO)Fy?oLH#-q8F;k~yHgSTJ$WktZ-VXxsqCu0&FgJgx~^`wLS8TH6O3I|1D#0~>b% zjUmC*fVSeo#u`EEfMMdNk<16(`vOw~8aINed4Z$`bk_^aF3=saFg4(~1C@861|iZI z5-12@?xAFC544a4W)5f!2gU|9Utw(Iu{}^agNcLEGmMREY!9@y2&M+K%^Ai9jf*gX z2s~p~EJ)*~pc4l{<2|780FCd0*r5ItXweaf4Ql6u*8YLmpgadUIS|AKrGHTW9mEEW z-GlD10kJ`CKG5lWAT~I^K*x|kc?dS91EJ~4!9mq1NDkE3Lm#68%~OENQgrh` zWf@2h%)BX_3=E*LJ5YHCic^pr$UIQIfXoMpfy@An^@3;^2FZcgpmGCLWfM{d>RZ6{ zfb@YngT#zcNpL~#xdOQll(t~*1D8J_gP<5R-(iPj0gQ=0MwP&YSPu+plEBPEAEN@T zl?Tn6K#hlwVW5vuf$qSmhbaP;DNr{07}XVS1_sdG6Ci(p!WU*Q`WTf3GjU^7Yj}to zqXOOa1lsEebr#$o=wnnDco-N!YX(8?1JzS7_o0tb?Pp)W0Au`WTf58*yV) zoovL7Q5|F>Zj7pe7m+_e^UE-QfWjW+PFOgA_LzavJ&X^N0}p2)oweS=i^w1N#;APR zi5#QiU|;~PT?gfBd}CCg{ZF8IM|Ah;n;MWdMrCASLhKk-3@BmZ9;0&OKpCT&qopBe zbF+zwVfqYaX(ibYXEb=2WIt#yhBf^?_UAvyC|u)Dpt1!v{sh{q3yLGq_!H>#Qbt!s z1_sciDahj>g&-R1_!HN!MmEsg3=1O%Xv;AR6YF_UjSU}v0v!p$!omtZ zE}n%QG{eEd!Va2Pfsa2O1TU(c09rT+9)ALr8q7SPfgX_cAZIYn5de)pfv0&9<4>Rz z1{;6k1TS<2%Q1#^J%G$zCe+Qf-{90)u-0U8zokIJBos1O|60qadqEg^G_Cn-ZJ z;DIAB0d^;NgateX1Y*&1^oW?Hh>(~@2}{tZ8+bTqK+j)-Wit>Bs}w;QjnEhnD5HYL zabT4es8I-FgZddDaqxIK^gJaH8zc`Bhh=6Ee{|djG-&|}Z7?1Q=O%&L2_Vmck^yMk z2UMei_#g~wheF1EAh`uzmJl)K14?4Bu^Lc617sGyF&~h6&>mUPxD6=Tf-r~;5(o9I zKx|MA1#%Z?37eyH zFmZ5vK^hR?JzKCb5ReftHu4w_sJJ3DHUd7I25Khg9s$r;1jruHj3S5)>I;L`4T0F8 zu@TTZAP^hWe+Au30%C*Gk`{E_12i@Q>Jxy(K}8~LoCLIH1#~VtNF08;~5xedyyJpng0kjeyJmVVL_sJs6N4n0cV{F+el+AoK8z zdw}+q5;N`ry2Bf^?iOSx2*d0}ANTme#lQgS7=i2sxgX>v5RE?Wv4x4aaSs)4;>JC$ zFflNIHdTV$2Es7+fx-*q23WXwa5I4K76rKvRGx$6K<+~y_fTeGU;y2V4KfRaLFR!l z`nbmmR^rAzUa}H5?x9HJxW^4{ME(HPp)h}d%S(`hp%`?g4`>kulnWmZLLc{d!p*<{ zQU?kbeB&Mq*@zqWXkjOA++zy|0|TfGM0cOQsgXHk90NiUTAO2LVM+AboF34`50-Hc zm>Y1>W{C{7Ogv1UjFE!AOm0#PYgzuNLDuis++Gj`-OJn~mE^^+f_(?`S?E6IKV56t z_cEV_?r&z}Vqk#jiRFT@da{(f7^H8xF)-X^0;`4U)P?VbUctCS5N3ieSC5pK(hu1W zc-Q=Z#&2O`F0YaHFE0g+On?@Hf(jduM?nffG}CR+4PYqymqB$FeE%|N@hl4yJLoJ9 z7Dl$KphZ2591B6?E=;VTL3|btR(p^j2Ro=*WMN^Q1LCo;gI3b8g7zmkVb{Mw*}+QFRQc^vS@WzgUb zsFY)1X{fA)KJo`Q_M z1XhS_EU4H8Z3g}XmH`=yVgyeW0|Ub$CI$vJCWs?T85sCMO|{ElKIqODUdCwVi6Lyf zj8V)JL5F&wY+DA+2(ko#LI7kvWN)$nc=%EpBna{lSWplYDhvXk3yxX2K{6n3L1aMj z0A?`=fX1WQz#Ei7P8I}3rXVN^q0*owv#j7v>mV1SNkh~KftIbYM}b@q*~lyms*BiU zKvoKZ350c67il4{%pz@%vmPVPOEZucXNfZ~An$etEzUw(t0m6Bzyn*W1=`-si?mvc zud|7fL6Ff2sCm5Y0ZNwO|TF+a3CxOhTGsFM)1TisY8rp?FYrS ze2jYgnsZZ&(o-RWj702gPR%Q;g6v@iZHt4jAa^T3*zldrB8kC;Encewi$fN#F@kq0L-smDb~8gnU>8Dw)I*lGv2hB3cSwVFHpA3|%!H_i znFdnN0$S3>%nY^#yek^K=q(AfGn#>k1-u|m0JI=Z3FKBzP_@Ab@}d!VpEGCxF1`e` z2|78Wh#|i$wWugFB^A7*J3cS903>ZMYt?62dotoOyF@!Ec>&;!>@?l*`Tn6EZTvD zB4`UZF{7j4&_&*=P4e(9(n>$DBXUyn26k;7s51{LQ9v}P;{alVFl<~ER4{=`ArK7` z2aSh<*r4VGs6h-`V+YzW24aIY^MK3%sR0$GFg2jU5~df#2I&W>2Q9tgCpj>eM3OYX! znGb5$BJ(|A9O$|uNbv*9>)>n(=DB5m0;pezZND~1l7Ru-Tmp>? zgPJfPzk=AHhB&C*0%C(2EuiJFAT}tQg3O1FL4(+^b%&r95l9^5UJx6$UmMh_0qF&0 zeNe+1qz2><5F35(HYkgO_J@Mhfcyty!}e%{?S`I<4`RdY1+{=c>OpP+v0?UtnouBn zK}85??;l7F$jcx$c_%JK8Ou+4+szRcsgjz6*i6x8drp|LF@BiZ192r&|oqH0|RL9EleD= zgaO6|?SFx>skQGLyjKTm?^;l!9#p0?Fff3Q2ZN1kgU-){*$Z0y09yx%ygm{0y z69>R-@WK-joHXk`bCJpoA#=-fn@IPyO6%SdWI zBeB^*?Lw&eptDP1Zg2;QL;ahG#KyHx{4kOl(0C-w9B`V4nh#3%u=oNQ4PztENq|N( zVB(-^8^#8WX~Wo{wY)GkXt)E$2KC%wY*5~Zu|eq;#s&?6z}TQQjxaVTt-{!#acdYG zG)4krgVw&m*zHJbWI;Q+VB(gTz5&{!Y;OAyB&TfU-e-b5QyRsR5OjAy9Ep zJrf0GgUZeXC>zu?OoOsPWpxge4XS5~plnb*Qvqdz>UhxZJCOOHdIxmhJ%|k||GJ=R zKvBRu7k2cUHL6gHmI%vU8fGx z3#vCk`(QzAP`w7a6&l0_)w9>2>OpnLEhrmQr+~tApy$9qi}YdFsR%B(V%8Mhz*<1c*9Hl9(GW>4`c=igUkTYpfUx- zhM5<^$H3qMJ=YbKRzY&0_65j2Aoqd9K>9%S1&D@WkQ|7OK2L^A9jN^T(*x26TAxqM zJlPz6;?@U)*4w>@mboDFVRoUQU|7QhImZ?>f(-L7D1E~8fb{=oW?%sAiwChm z7$%3lKA4@AfdMoZ3{nHaFm<4IBFJo5I8P8_U^oE{XHfWp#bpAMq4Zw}+&5;srQ z$;H4h2WmEmg4qkIUqF6`h4Tkdh&oU?i*KGxm7BPEG7cUF22j}w%Gcllc4!|3lonxm z4dk8~ypZ-Lhz-Ip_vxFOkTg$bVqs|pnNcIWhy4Jk!$@GB%*>HtkrKluWd`_Rz6-n* z_H;oewoWj0FiS^uomsVHxeULpl!1l6(P7PpTVh1fF zWnp9kFlxTqg2^ zZl40pZt#E%WE254xImj@ctImtjG~~r8`Qtx12q6ZhbDmvI)3o!x(s|E8$pM=fEJzb zL#C$qKm~F)BLf3y0}el9G;0Y%DT5MJQUFx5uL30{HWrXQY~Wq)f}lM=Oxz#=kYPd~ z2Z2wk1+y3gK}SR}D}sjKLFPgQ!AV5|bea{&JRuN62z1UZSR;clsJX$~1r`MpAl=wc zqa|`XJu#=zg0|?xZ#YMuogsV{tqB7&>{4=Z1_sa+4I^lZ1~j_Bk2H59fS9`xM4c#t zOv?yCHr?ZzodGq<85x2=6ezi(u7n1q575j$BSQ#?f+;{fR~94#n&tq}AQfnHFv_4g zT?T{sAR4@z4>9oqY8*o9M^NzwvJAC=0VPo;2GAJUa5&u+asVK78U#MaQCxy@rfW)S z8e~^K))@~W#0jlJ;ImvoGZM_;IgMJ-f@Th5!R2C+PMVw1w8WskxBz zS2L?pVaKIHoCp~s1Lbwh0eR4{KHiP>#0<4VtO4(-1x;?iNBqGf`CtNUF=!1nVqBl( z;rNmwkQX2Zz^wqAi9S#d8R(eZ zRC0rID2N6%H9$iFpyn$`48#WIcaVDUD2ZNiWo}7g5`$iGNfCt3fU$~Fa}xD(K+{2q zIShJWUI}RIR4*m5B#}Wcskj&_nv$ASnjW84l$e`}B9fVxmd~IEkxfiWDoQOwkp>-! z3o#a|q$n{jJr&i^oXosbm=U1qD81zT+}zZ>5(YiUihn(b9bm^*lz?0dwW6X#ub?O& z)OrSa6@gI#Yy{pv3vO3H#~?vt`JnbAEObB#3N)69%m%ZLatEn!D64`U z5)B@Ehh)=YNWO*@U$D#tH3&AY4ysTbpX8jw98Hf)?6)MNsQgUkl8VPoSU`#@vPATvSX z1Y(26Pe6E}$DcuQ1RFC1`3=Sfjp@PIpcWg94X)8agGCGs4B&O5P&R0s1*QfxwgO}0 z+Mf>^--D?EjoZW6piNmYHn`shDtQ)Pm%Ry?OVbX)d zUX8>Crw6Dxpfmv+>jPyf2 ziNT=p6Ht8t3M-I$P&on0`ye(5gW?@TgUV148`jtNL0ZcU(hrgYl_%(H&_Vq+SY-?{ z2c!-}gF1I0Hq5*lF2ovJP?&?{K<0tm12P{Z2GR%WH-Tsv2FZcgpfCkx3qtBZ?t$q6 z=>v6ai5Xi1t=$HdFQBmv(0DY=ec-YMWDpdC#^MhmSpZ{#%50Dxn15}!5o27S@eGh0 z$iL`gYmH0{44_4TP~+iil+nl5YMB`rK;vHM>Oidnkl8SMS$Gk5FoEm?$$@B4=N#r% zkQsl8+@w1{jT4;KRiXbufzHVA{l z7)0xv!tTO?jF=HxgKlbMO!OLb0gyuojIDv(VCKlc!|Kc020Aa&<~C&H?9DCMZCS_z zYy#i`wty`S@Da8S=75L;k<2`zE0}h`7ohucg<1XXSqc(@n6{Eh_5&myaqZs+Ew6-) zxxGgka|6{?jG(Rbp!L%r$AT1sXslyypxGoACU(%_;Vg`7pnEe}7&#__hS!)_K{MKj zF*oqu7#3F0F+eOV?4T1@!DDWq<`I0%4b(QlGUf&vuV4iQEd$6cjB`N8337qUFMbe{ zF^CH^slv#g32FiabAxU%WfTUDbb*}B1M0Ifih!zh&~zDOl{k3B4Yay~7t}-q9YO#a z9s}JY#bFD&p$c?s6==d1bVvrM;)IET7Ou}@WMBZDZ@>o|cY{fSN=ne^Wh7|JKV#!i#{?dR0~s#} z8fycupcVwRPZ$J1w{0@ZfJ_6~BnV=FWgxnRKnFmxfk){eI>DN-uBWEQC>@qH)TqO9 zcyEk?E~!SjF$%OW8q_htwvHMk2VIX0+V=n&R0GlAWQ4k~86*sn2Bjo$(;P9V1}arx z(jXc%=*-9v3Zg)ZNSGK5=Ywd7q3|`(*oNXjN09qN$48AFe8MG3Z8FPG&iBph) zk+}jiRtH`&TmxP~%nud?uP^50V_;y!KWc}(Tn$umfXB^H#+kq(U;;%L)S+g8bf`%k zSc97b9;pKpVDrI4Yw*JlKw$}4!A#7EASf0<5t3J$lM|noUz(Q!T960w5y+vSCBT^l z3vhK&b;G8aq@ zXiX|e4X7OtV#CG*L48}08c>D;?Y9G|0c98v8#W#YI!6#B4(bPj*s$?HP`@3d7nCtU z?L-h8lmS6&tI3d1C1Gi+yIgTvB7Qxjah*fbTKe6fZPTfZvoZqurVCa zxCx968jGOzy+xn~GHmP%G*$p(gBvNJ0WAhd{|Y8P*v1b*T?v@mKzG5w*x>#oC_-WD zRH5uQpfHE}3%pJhDh|H42vmYHFffRM8v0N+sG9yX$GnWRN%wJLE~sJHfXadj19`eFgBzyJyl(AWv6 z-UP{k(jEF(CCIIy`UGSK2!qstX!Nm4(76ksv3-zvpg0Ao1DS_DR=EzO83}{z25~{< z4=6i=^n&=f)S-`6g2uK$WR) zKxGGLtv84b!Z0~d4;-Wi7Jdpm3=CJG>+wL1GLRg|JW#J3rU#@SbT1BQ_c(|R!Z11X zvC19HkSnu6YCssK4t=ch3z1`$IxNJUm$8M9xUotf76yhYn4>`DD9Djm)&bt&LyV<@ z$}U*AppR7^V`X4ifMyHMSmkme$13j=IaWD?A2P-TN-y}vDxb4M z*3*LA3c?__gJ|@z$|d{|bs+Qbja3G75VsD{gp+{*RQG`LHNLURC0v+ey&(7HWG2NY z>ZTSHW#*Nn>E-Ja8mqK0A%3j#0jLp!G*&6a0P-=&RtPq8gdSVPIfZ2Z^wjf)36|VFZo0v9U0F?FMbA&u3y_VDKzm>HmK4sOtdCq$fwdp1ZpSd9Q*d<6rmA!tNNgn^$0Gz!bX&B(ye z#>l_`b~*zC?-UTxkbl%W$)T^xA{i3Je0EGrc$% zSv~BT7#O%g7eBIkf|v~8W*4g$h}|HV2r|hBL3=ACHpnV6d;VYRK7&;jE zSwJRnEMj6{0AX<0$TRS>tYBhb5aMS61rBc)XiYe4F=(p~H)t-KwFJau;0DzjtfgS{ z8TeU1DMOfvg@NG%YZ0RY3j>3QF31aIj35OJBA^3tS*saC*%%mDM81Mt1L1Ip%tml{ zM6Q9{TnpACAOb3MSnC<{SQ!{ZL^gm-YXr+ki2McVX$Es-L>_?jv@p&GU4teXpIgAd z+Qztuoq<6`;+gdY@XysC;hvhc;1Gq7$0F*(3TyRdEtwG?=`r-Gce1H|Uz zi%&{pVBNW%iGe|Y8`K77-33xF!L0|fa4#sDWVk`;iS;0eRNw~fRbf3`&C0-_!aWP5 z=IAO`1_ljod61bW&apBu=y1z}0_EfjRt5$GzWCB42G%nm^G*2TOA8oS&w^ZO!xvv# z#K3wEWS0Xs==@{Wi|<$&7+kpjgUq?~kClPJoi9EoiGlShNUsMsXipsL4UqZ(ZqV8W z)|EKT5^<1!#6cbr2XjH< z4E!u5tPBiHj2tE`3=I4%px^{+03{bB4PY)*!%|iT1__WZewId71_m+Egeu7ENXkJ% z;!x!qKx#m2P>>+hFz~ZnVP$|6nII2?^A;0?&&LKYhgfHWyd}%1#=^iLyo!Z^frnL* z(VvZhK?IzamBDNV5fhMyRlo_BMI;rZMHQToI2ia@K&gwL1!Sf$Xt}fmt1aVPkO7>a zz_tUk8ALol9D6W_O{5IOabN^ZeDH|u1DWQ`2x?LaFmQmx*20{}#2^e>F(JSj#`qp& zVminbk&NIHS>ymH+eAT~WCBVQ(O?-45nYgpF<>n`4E!u0<-%Dk3=9FR35=8285l%D zK=vnt(>sI6Ns#IkMo`4Eh=2}jXH5ljctq4dhNgizA|ks%deXuAWki}moD8ttDk7jx z5Njq_nT81HjyBdTFvmayv|Wrf8_cl~0re4BbHE%25zs^^Yc81M!N38EY*3K_jw5yk zeil#&NP@}@aD0LaM0QZ>iDmM!Wbf*4U!QB%Y@2+ z+Up?AvY-L78V&}AG!6y^ImS4qQU*E3Sf&yNImQ^KVg@|t1{siT^FVzQ`7Thb zu`z>khk`jX0|OfaIN)Y*FffRN36KSf4E!vQ*cljhw(8mARjJ-eCQA> zl*0vX%m?CtWH=ZZJ%vG{oQe#d!us3{3|zuUYPk_=EkFmr z@iTC9GcfQ9Gcxlb4CLd5FJ1>J;s+@LnJoZT#tO0uWP>1*S*#2ULZS@nk_-&OU_~Iu zv4RwdKozli3WLlNg&Gaziit9+OG4Z$4q53g0lDE$5+niAF9lx}&#EqovL0U=^=3O6 z#7cTuoGvjVqyhZYa_|Ppnz;XXbKNxsUm0qP6@7Q6zkFAptJyL zRf6zi@VP&rg)JmZvq7e%sC^hrNn%mDZf0I`PH9T2esN_nndW0TSqNgt!&oBFztiMx7W~!NV@hqKHfM z#27%Q2Qe@*#-|kL$7dwwrR1bC#DmVZVTdnE%u6w`V2DozA4idwT*(lhSdv;FOa6lbO*Zn!H=DotaEPf9FKWrznU&&V$=Vu+6~ zPGgAA&x;57CqA(#y_g{_zbH4cgdsjTKR-JYq_#Lcr!*B}GRV;Q+=8OiWQO>(oW%5E zhWO0l_~eR2hWO%=l*~Ma_@ta{u+QQ_F%=IormO^Paei7_acT+38=xR6Plg2%$X_|B zc`$FK<$)a$pO#k)3jg#xkVW~)*&w5eOHxvciWuUZGSk5hNl(npO^gS5GCeVuA-*Uz zF$F{xm*$kjXM;V7>a}>#rGBUp5nrC1kpy;peksVYrA0-lc_s15i6yD&`9+ls@yTT+ zpt(*gaaaUO6W~Si@p+l~NyXSELBWno%mJNH%@ChhoLrKbn+o9+rGlKv5D#(yLwROi z3CM$>Fa!BFF}>J`AwE7mwFI1+8QeU5Tp8lai!woJ3>0^jsfk4l@wu7B$qb;-24w}X zf8%rW^I)ly%u)fe;vUzvg^*;)5TBox268ayyp^2H;u40mOh_(eNXrCe93OvY@Ax2B z=g^>F&oI~c5X4P~;7RFtaCoIw6cnWv7iZ?@L4yt)sbKG=BvyiwCOF~5L-PPbd^{u^ za+AQh4P<|OF^Ui*uR`Xw<8zacl2vA2GDCc3UJ65eGBk>F@{hWPm8{L;JGAqnu!;g9&B^P!A2v1QW~* z(1V%4Jdk=($T$#ai!TEM186=RG>!|E2A@X-nma+}gXT1l`3%r*H*adxWBD}yH67#P5z%?M?K!VSg-xdAp`1zKweo96?~RWpJ* zRtyXbp!pb>deD3%j1B54!r0(>9H{xA`E{5$Xm10I4Vr_5u|anj!q}jD3t?=~*-|ie zBPh(FW`Yi{g^7a}jl$UAc?hVQ4M^(2^T$we(77-$^`P@8U~JHMBa97NI0|EfI;Ai+ zXh;~w2A%5DU9ZAh$ zBsOS_5~c=pP$`W497zpmz6&PK06LQhYCbO#TM~&4I*=Ep9(?{0RDA%FniwQ@1`@jj zi48s%395GklK37Z_6a2RZ6x*!B=%P%HWR3$4>gk?i7kV~)c5@zqFd&>SC3%~2%rOGxbdNbEOA?4L+%Hqgih)Q`eQY;`0yXkZ9t zR|1lF1roaji47htftoo7NqhwodkYf#022EH68jGlTZEN?0prk=Ra1>=-0=CK9_0iQSCEo`A$&hs55E#6E$zMyUvL}G)^Z-K?BHj=mnhz&Kz5s96S#4ZG}p=Q=1vF9VPLCZ-9?N2)gD!ZU| z-GHv!09A?iplnbb`v}Sg)mI=nFyH3u{V1gqCT>WRUi_5-Mu0&+7*J!q{1 z$V?C$gh6#Vhz8Bkg4nRN0}`T;Id`y~pbZV6W8xVY7(nBy$mW66gIcE`Ge8(*28af= zQ$TExJcw^23R$NGG7sc;kQ~SzAoqaG1BrpufzF)-(J%~>1F_N9Uf@y(uCqZJpcu4X z1yt8VxzM>-1_t!C7cEHc!?*SVw3l=lsG$Qj5avGgwHIeZ85ltM6y#q}lLO{o^tBgy zoD2-0^ZcO3!P~#+YcHO2VP7kOzV;$U1`%(d@P*mi32H~cECJ2=ax*Z1>Q|T$%pagL zzd(9m@zx*%*}Dbu2WSl=NDgG~RH%8dH4yK37#N(v!&DFxLFR!l_zrBO{a=Pcm~;Ig zb)fyXpm2xiW?(21!oIHyG&2oS4^y{F2>ZS+&?GO&tuTLVkb$g~0Qm#dJO#;t`~kZA z0olAwLXhx-nGcf#?fnJmftj}lDV#xVPmmnQJWx{^mX<+gToYnoxCmlEG0Z#=4b9eI znH9ne44^%ypt1neRtA{|qCsf~*}NAb3=E+5Dp(UV4nS<^S_#Og9}#OMEGl31c%yhP6z4nIWqt76~)>LYarwUx0||axD^JwB?3ya(E#0UGB47 zdzlp$LGK>{sbPYtse!6F%XOCLWt<`|7 zNdx665E~}WzzONYfYxx_0JR;SGcz!3g~lEz!+?STwm*!89dzs;GZVWUXi)_t8)%M; znUTW)Ox&RL7%WDJH5>vU_24xe%q*mX}5F5+Ip!OX(mkGzIM2()g)6J$99w-ksCTfmN*Y5-z$aD#T6LD)Rp zOF+uO;>4`sSc|lV1Jqq&H3yl zh%LZf4`SPZ*dp93L3(XLYzgip(A1(LPbT?)h63+5Pz7=vVB zYdCm7(Ft3_Aqk2%*cuL7kPK`M$2pL5U~4!)F@Svy2WTB6d=1AbP~gGVaCCx9gRS8J zU1h_HwuYk>&l(PJphMPhfS4TIpz~N+p=&tift-eA4F~9K3)WpA^%C5IAlvtXW_4vC z3zeX2IOc+a0=kBy0;C4IhC>NtCUgyl1}IR7TEhXd%YhrTMi#b)19Sm3E0#4J(ja?p zfYb+YTZ7opH5~CEH$c~L^nzj&x`rbaB>otrK7~OHM1dD=fc%5Bh65xHUBki5$N^f! z0A0fYk^s$HgD2=A8o*qTI0HWmv1>S>%E4u{I4{H2aDdjg zv8sR*EQ?4GNDJXL91lUtU~4$SKrskg!vX3BvpRrh@_9t2ft115aDW!0fL1VomoqRi z2!qzoz}Ikifr1^jh6A+Pjx`GEBwJ9TfUV)s0GWukh6B_Khp*vC0yze@hGQW}HEazB z=&o`28V-Gsp|CX^M?iXDYd9u?I2mBORYX7s{=(OAfJVpQYdAp5=HY8NKz#%F8V=B6 zc*@ssfMT72p9Osl2QvqY4ye*(VG#$_dmJn?K*y)bf|gI50AM^Z3{ha27$(jO z46>l@JRq?=nAigbdC>8~ATiJi56%yuH7KAcR=5kg+5IHQHL&&x;~bDh5C_PD902On zC{{8sFns4=V2}qb_x#QdS~UV*Bf_Ah2U_eQ0x}wsk3d=<Dc@jwX<~AYI}h2KZhp z29;b;;(;tB!M8$$1F=GckAZ;&x+sJjv^-qC%CpAIoy5wYY%3BHU3yjTQew=%L2Y-NcGd{GH}1qvu#Gk|vQ zFfs&zC{WVJJjfB$t!88h22mgdNXImS5-8|U6Gnz05Cv)?qiP2&zJ|1)LH!)CbqpX? z5EcW26B7di6T=zM7z**%RY7NYsl07>ge_Zvb|A@Gwvv;X1X;HNH6#Nxnvt7Wk^vEg z-?Jr*Si!=@z{p$&y2pwcyhELt5xiTy9xMX6L#v(>axx_^n#ww`I5Q{61UB%Fc-Z}0 z+~lo_$w^7AC;%;n0k4IDt?VdI1}*%^O@b}_057Qk6R1lvU~6MQ3qz16nQ6A*B^46L z)LQY9l3$txT3C=gy6}bKg)fBGynvGrEWkl4Bj~&SB`qf(v{DM1fZ~f7;^7No;)z-U z135PV$GR6c@Twnru67~391W6Hz*FSd7RFRS7tN&PLloj)DHESdoi#F}%VRu2XRw9_ zyT&^@1^fGihPcN2c!szJIr;?K8gMx}dDw3KcLO{A+5U3sS(Y1+70pj&Kkk zG04;qa}=8MDE*nmVqW9rDG*C0MSvKe*_W-xfjHSsRwmsLE<2{gV?aOMxb-$LE<2PfY>l|Ktt&uagd)tY?wKq`8JR^ z$bTR<%pA~;Bak@AuOK$;?l;i6u_8!G476qm?6~gD^}l z$iJ}pT+mntXkHtXu0Us+z}TR9TWX)F0h&L8%`bxnAYg3p+9&9`FYr7nlnq|{1Z4+- z(jk-$Ui$=PgV#Pm+2FNLP&R0E2WCEa?GscSy!Hvo1`X!J)PUDMLB+vqpP+2;+9xO* zy!Hvo2CsdBvcYSgpltBkCny^<8V@rcy!Hty4qp2NWrNo~LD}H7Pf#{^?Guy@Ui$=P zgV#Pm+2FNLP&Rn&6O;{J`vhf!*FHhn;I&UsHhAq5lnq|{1Z9KfW?^myuYH1wgV#Pm z+2FNLP&Rn&6O;{J`vhf!*FHhn;I&UsHhAq5lnq|{1Z9KQK0(>wwNFqscwwNFqscy-?3CaeqeS)&VYoDNO@Y*LR8@%=j$_A~efQ1Qo?GscS zy!Hvo2CsdBvcYSgpltBkCny`d_6f=cuYH2D!E2wOZ1CDAC>y-?3CaeqeS)&VYoDNO z@Y*LR8@%=j$_B4}g0jJDpP+2;+9xRcDQJxol>G*Y{TYe<1BuN9T8{*3+k!@gIS^~2 zBthb!%9nwG0lW?hYNiH~xGsnd)$5MLjz(hVBeB~+Y^XUCKy0YqDNuVsbryJi6jaSh zkQ%5P)`8ei_1lryCqQhd`g=(1A4qIan*&r2f@n}33}b_|!Pu0XV-9Lpz{~+nFTmKi z&K?5S#UKLDSwc5KW0p|=f;QiQ&gcQT|0Q&-7icX9=)75wIB2Q>v^yTe2DLAKL)C!V zQ=oPMNE|f$3cAY^#0K4e04noAY;c_Y`(G2ELaZo&h=1f82pf-^sR2(#s0P+L1&lm!kNel+H-9WtnXwWl& z+Dah*!}NmE28a!6Z-UscH9AYg5oeQw^n>I;?N88*2Z#?d4|En9tcwUT2c!-}qpx9; zk${}(Ed}m(K-PqS%mcXxWF9DPLHZtm2qX-W193s|1j-hK)PdVxAPrCqG7sh_kPys$ zp!5r3!{j6+8Nj3HAoqdV>L59g`#_t$VQv8F2i@n%0$NxE;(*$7P#S#=+Z;&-hCghC z?-5ktVqgHB8v->3-rq!D!zRSTzyMm0hprBk?m%vZ`D2Cx0|V$V5|BSY?gz<%XwW`< zWPcR#U|$mlnsWf@ftjbF2wBqwG7otT8))}9vU!tu7#Q53c^BkHnA{ZT`bU^~K8g$s zpfi|2=7I7p$S#okz-?EgwQituhJ3KBi37K5k<_V(U|$or6SPhbXA1X?aHE|$+fO^d!IgmdSLqP%>)e0>E4LgxpWTNo34k6;hTlSpggVCM(H*PrQfftI7;JtqiM{=?Roi6EU5 zqz>9E5Y5cMU;y$l^pbXv#}I4G+Ci(mnAmrMC`Pt8FvY&=K+W5&mfI41~H9mCd` zfvz`Zg|0DU0XYD=#td{l3@dbv8K~LM3SDEi6XY7`8na5!@)+nEvwI+M=o+)#AaU3l zvpJyCdSK@SO$5n6&k5=REu4U!69hWUjTN@W%n@W1&U1o5=SafVn1MqKy2cE2p93p& zjTxvv%L-j%76-DDgf(WMvl=;|=LFpW1qgJF*>{k0OF==;0$XEt4f&iP&gRc`~bej>pv9mNgRU_H-Q&UvU1RnGBo19;_7tR-gf(WM zb}wv=8R(uAY-`Lw2aK^o*O-CV!a>)Vtq0i!U1J71ZiW@Q#thV+VgS{JW}`?vuU7A2wP(YIt7&#ZH*ad`5b(W*ejTv|`BkY_YVURM|8Z%JSfEBjJ40IMQD{PG!cu5=VoS;>p)DJr+2sD%k zUt@L`MslEf>%~h4**)HGtL3=q(SW&ZjdlP3n&lE$beisy6%dB zf|GeLS4K%ARz}HSS@8s#H-I$#p=~Z`6oGOT2!qZ|W&+D2CrJ0h*cvouUCc;3Pg9>3|a05ip<=TVRKxpsxyoxCDOK z3EJrs@N;+I$8wb9#^-_#ors5=hLM{DT4aQDx(xV~mg15W@bNAX?eIfgpod*xtki&> z=K?!#1RRv8r*g!D*P4LNyMdpyfwc4kawrV=1RLa&b->5Z#6#C}K+ekmALIdE!~!P3 z3qfEf;K0{Gp`057N(2nhg%co0Ku+mE=mwwX13zK}c1{WO)Q&WeZqT_Ukh6e5`ay>V zfqer$4hS^6nvOU!2y_w&wPis{r81@HkWU^jvZxGiA+f={tQ6^e%( zIfQyH5!!k%NP0un2U~IlJGuyR*b(^f6tENG(M}A?16_0*4?b1}dZrMVL8?LV3|bR|YyxP^4&Ee)2OSUvPQCCmYC!s6Yf?Zp zKjRfQp0HQ$X3^^%PJxcs&J_4PH+HWrN40p=|KDGn5VL1i{P)ucv^D zgV$3)*`VTeU3aB`EJq45vUQYpKgV$3)+2HjQP&Rly1(Xe5PXT3v#-Cv3gV$3) z#lh<-pltAZ3Md=Ao&w4Sucv^r!RslYY|wBD%uMil3aB`EJq45vUQYpKgV$3)*`T>K zm|oC)8jKB^LxZuw>nWh>!RslYZ18#tC>y+<0?G!jr+~7->nWgY@Ola;8@!$Z$_B5e zfU?2sDWGi7Kn2VV;Pn(xanSH4OdPzP0xAw(PXT3v*Hb{*pb;~edhmJ*s5p2%1(Xe5 zPXT3v*Hb{*;Pn(xHh4V+lnq`_0cC^NQ$X3^^%PJxcs&J_4PH+HWrNpKK-u8+6i_yJ zJq45v8d!z78N8kXDh^&x0cC^NQ$X3^^%PJxcs&J_4PH+HWrNpKK-u8+6i_yJJq45v zUQYpKgV$3)+2HjQP&Rly1(Xe5PXT3v*Hb{*;Pn(xHh4V+lnq`_0cC^NQ$X4LNawPE z*Hb{n!RslYZ18#tC>y+<0?G!jr+~7->nWgY@Ola;8@!$Z$_B5efU?2sDWGiddI~5T zyq*He2Ct`pvcc;qpltAZ3Md=Ao&w4Sucv^r!RslYZ18#tC>y+<0?G!jr+~7->nWgY z@Ola;8@!$Z$_B5efU?2sDWGiRvt-_a)=hvKAq)%*ACbz14x(jr>DM%bvH^SDffYia*p!qhKImq=FXk8*q9HgEY zjBTDARA0jM!q}ieGY}g#511ninFj>h51s1-xeI-s9JCG=RKKH}hdxhUAq=@M3}hZC z96)w~%tN0i2i<7|GYdq+S|OlGB2YUKq!%QPOC7jQ1u1}H&?)%X)&-!?lTQ$a%u|Bg zhi{%7G%qayatPFXnEOC;jUYe4!taJK1A_`1#Lu9(2FZc^3z`Lk=>Zwh!NC9?K?1Qs z7$%24PyT@u`@A;DJs`7T_WqHC%xi=E0kRJy2cpr>dJ*7aU;u5V2iXb2Fnd939zc3v z<|#-Kch<{1(D~e0=C#q!dRZ-ieO?>=td}nE(1aN?6RSFCju&*E00RRv2YWk6j)iq2m|_Pt9hq6!K{k_nVEKs^LV z;SX^?$iW~CDm|DOKx_F)7}16F&>2#}VGrIU2{~dKJdOey7(yA^p~bKR#06mcQ0xMW zfC&^~I0rnG1SY_WKyD>4C>h^^%H<8T5)$a}xDZQj<#4<1;~f zo1pB(q@<$MG8Ad}Fa$(3_`GDO>f(|j2EF9`++5Ik&U%o8t@R+rfz7Wd(JLs*2h{~2 zHzH$1t_H15`v~f?!KInOxfsr6U|?fY^p0|9}`!3{nR= z9t6sTr$Ep$B9Pgz`t=M8WIY|I4g`sVFepC3<0ml93=9mQ_JBDOA7*a=n!TT(_tnCb z!qkDrT|j2T>|MeNX(xc}1*K+?9LQd9+`%+6Ffed2LfVTkA((lfH3=X#Xde$qE{KtV z0W_uoVuLV94us2~?t`fV-3H|dQUJvuH6RSCV?pkK3NyT6!rm?dkMF<~F)%QwFhl$S z69Sn9V)uZmQKb7NLFe9p{0H(cD5=5x3(7CBxCQAmU}j(dolpj1gD}iI5DlqGL81%{ zXP6lnKxnXr%_n27N zUxUtvD@VHH54?~AdF>wPWE&RlE1)GE;Jf@dxWTtLf!RFV?I6RzY+}~#%|kjLt{b#Q z3wp;NXvl~addDB+d^nJ;9Nem)!-}AH{4E15xq#mB2R^C_ddFW6$OX_l{!&1$gx>M@ z5hM<~;}7M0IPfAW=-NF{yua^WoS*UVz>42O0!sg)G-&5jhF+4}`-Z0zTmn z!r>9w017m$cl?1y-B@9F{DF=vWQE=Fw+o~P>)O3jAQ{-&JV-2;uUvO?GHaf31fQET@=ZbLmE?ls75Sk8wN2Biq-9e<#swP1Jr zfyT^Pp=KWTUT@eR^D{z^gKg09^It$>5C-2>-k*xEe~kcVM+{DpwD zU|qWh+6x3J54(yIU(7I|?_}V>CYYX{&IMA)~@U?rO`({~T zYxkyr;tY1jA7}uZ6}EOy3uH0c+C4kuJN`h2ps~W%?t#~f!q)E9f=Xi8+C3pqN`tN4 zTMlwFZ0%k+hy%Oh&lThl*xEhNu6+3Ua3&xb`rq*29Om81A{CGGe$ES$TEVDeUk%e2mlL$`3&+YAg}&o0v#ZyAPK%O5F`!0 zUJ!h=A%h}l!wH8FScC!J$!nu`^Wnamj~jM3AJVyN&?^Z+!$P3D`4|Nm4Z#-^$|7CJ zCxaWfzMNHs;|Bh_$T$p=aUpvC|Q{{*$?7*2!s367p^rVkn4 zK)$%kM9)IcR3Ca#Aeq;JVYwubfdO<`92sj8A;-!=jxd8P#nS^HY*w0=SzM9=xw8*` zw3#&{GaLBuGA8iBWQ?4g4AA9^oS+FNI$zX>w)hOk?R(%`^w5SeQO5Nk>+T@S(m+eI zz>Ds%+`%_``QAWZzDMA)J=`O&kVLKz%_88XmEeVSkOWU=F2u~+$oUdtCHzvpc+hw; zI4KqsQId}S>18p6aB&_#b(F5in!&&f|p%!$v;EhsHY z1+U*t&QD1NmwybSr;ZVQ>KJIK3{+u*Xwc9Xhz-KvX#oZX@FfVKK_1YsGH7@de2f&H z=>qWReNJXcYEfbibTR1EuW(m|rT(b-) z0WkvZ=L1D7DAGX~G`0yETL-a0EjrLTN6?xJ5Fdm=@}Mzr5F3O+d~mJE zbX8|!P7ZRp2NnitXJ7;y0Gi8TV1S+91#%DQC|{5QP?rO?RuVLB3}S=EAwg`|Iai?B zPZ1_aVg77PD1zBVtu>k;^Fj83FsS|p(V+Sn#D>jPKM+Bz^#irRKyn~`=xa1V>OpN2kQpEh zQU{{Z*J!ecLgutV{sGO^g4BV`1FZo7nGX^J=}QC=NEjps;-at7#H9|j$_l0jq%Q?} z_b!MH!XSG=H2NA%A0+pI+A|<^Aoro4WdxezjsrDlK!!l)*+ERux(tvWPT<9i{Eh&Pb?L2d%k=xa20aWOD}W~xADgD}i4 z^fj71GKhEsEw+Q1hkhU5b{+->&}}Rrvp^VR9tfka(R?OI+!{@FBJbmiC-OeN5F+p6 zOBW(;jb;MUJ%yk(Kd^8CtxbTXWl%UwC-OeN3?lF2TOq>0fNf0*WNkydYXx+11EI5r zjExP6Ufb{hl-{wdZ7_3WfM1yhN@KXzE`a1h93l;$rD8k_GI0IY=ylR%<*eTc#ddUo6 z)nGG0KBMv)Tf{0_&{p7*%7WB^T_y`l_#hfoy+ASn0|RV~43vezS!8rv3>Gw?wXdK> z_Q-rtD;Jp$YVjcRK`ZKz`JfX}k@=utM&^S`Yh*sC<&4Znjw+CQK(!>YJZRMcG9PK6 z2vh_!h{D(Ef@}tjgMrRrh3Np>2Fng$ngNodpb8kF)`5Ht8jk`AgV;l1uP;K`S3%;^6itRJ;mF4d|>(Sbqf6 zR)qD5`jOPk0kOfkkbwbI;lj)Wg*lDhPCzYutDl!P~QfmA0!7#r|5kp(E4PMILIsz z2B`zl=zXOZY>>TOAoD=}1*rq+1GxueK1d9t4;1ep8iqk~AU1km370yMI7|;nABYc1 zZy+`ZgX{&-=zS&7Qhdl|X1TqMUVdjC;DpU+atzaZ>KU)R|aebu|j0_C?Fv~z`8)OLs^!;q>Ss>wuZXWu6wmnGUg0HW1nT5Fh zY@l`Y#O!A~!p6V=vJc&T(7sZ9YDIye0TFkXn;01qeNO8KP*sW4SCVA_9o!0YfeJW? z%^VrN1@SgAFf=G_Si!VI2y}HPdlE1AB2@;4gWw==V`5NP=%~uT0J?M>vOXMgwK&wE z51=dwT8R%fkAWc)LOb+B=#IkV44sKWu-KF7qw8VlmV`(vOAfr*86Ke$`Qo(_^@VFxYFV`Ah0 z6$(roETHtn#KN)+q=bVd5abfjp?!>;pesc|_JZtZoC9(ZYXt)%Cum_TNSF;&05kG{ zvLs}y9y>?|)CzdVz`($f$G|8JGJ#W@fq|h9yq_Y9rHH{$m4Sg1v`QZ;#8gzzz`zYs z2r`HVG*HCCzzedBge7puT{TZ(NM{ea01VXGL%MjA4Z66C+fx{{9*muv5u_S4wZ>t> zzzkK$z`%*<6LKN-3Aq^=J;6)IcoZ2th4n!jV$~p>LQsH!BAbyR2t_|) zMGQe83KW(Q36KsD289KrmIh^TkO(5iK|FBhnE_M)k+5MA(nn(e9U27AUEq!ze7O=A zBQpnhxf1N|L_P*aW+t!*3nz%p2wuj-#0ffi4Rk62zD`_0etAh^5-odi;9eEHTL$W0 zfknUsiZJ-nCA1D4YQGG6{T`{^Gs3+c?ky4dGat3P;vzI z4M2QQQUdiqkqS6SIizA_VQ$F~4_Z_OzHtqj-9UO^eI8Kx3@Y$JVxT^T2&j<=J@W&! zW&%`9g9>GkIH*XLXJB9eu|c5+O5Pwfpgtg|>IShvz5-(=1_n@a2hAyofCQj(9xygY z56B#l{UA2VIt+HmdJm8vh1nUvx7&e?fSp+dYLmnIV<5M|`g@=uTNoSU7ubGNkR7mn zrJ!sHV}n8*#s;|)W+rIAJ_+Dq2i$a3QQc_?}dtk`@K*$ zXbn9~4Y=P66$kfwp=@x!7s>|rC7^8Z;4qX8+E)rQrwh~vfQo~fIWTeX{SKh=hJk@$ zE@+JllnolMhV_BBBI!K{VuJ#Yfq?;ZR{|_dK-+vkVFHTNJ0LYsbHF3JP&OzHfz*I# zP+EbpLHQEK2IU$U8x-a+HgcGQ<`iM#pfHEALC%8hT?VBMnA<>U1E$6g$!(y$$e{i? z$UUI5#6WCNIt4YWKx~kCSquyeAU4Ph(0+0d8I@799FV>~NF1aeBnR>n`q%*|t%J%QkQpEhQU{{Z z#|}I=ApKI1d7$tIsRNk@au3LSkQhiGXzwqGhGCE#h>bpWfJ+^y0|L?m4N3-3T!GRL z$P5q$m02JfbPo_n9f%FWpzWu~>Ok%TiG%JD02ph z1_lOEBmo!`lp!^LpZy}m_ubCJaK=;=`jfam3fX3!PdSKzg!_B||8m9r72P&^Ya-eVlkJ};L z8B@T_zyLb?9@#vQpLam*1?4f2+yfTu^Shw34m4H-QUk(@tl0OOgYI|%nF~?_!jY`l z&)@-_CkS#Y%pVopkTDC8KR~rPNDkx=(0*}b^AcGh{soy0!Z10|nS>xcF!NfF!Ua^W zfaE~tfx-xuhd}zzvNABd1Tml(W*&%!g!%uMW@ObiUnjBJZQjYdWe(3yqIOst?Q3z#`rL7Uo`p?liJK*JA^ z`)IB)F)%>yqd5xF4c^nv%)$zuBLFj zGzOpzmeBiXR)ThzLhqwV0kNU?(UgK*0KJcf4P*}VKAJ}$aoBw{CqW}Ou={90hjy}J z+0*_Iq#L%U{U2zfC(b?Xo0u3FV0+rZAqL&ko(M7mdLKn^Xw1Z9+g>pDVGC|IP?P-qz>4Dux0~$_b zh22N93lz+-`)EL0{8(Z4(WHU&VBOPR29km8X$RjG1iOz0bQ=@=J{r&oS@1pW-$BlS z?P-4tiZ|Gvb`6jVV0+pZfn;EN+CedZeNQ|1b{p89_9LLcgWX4y2Qm$I9}W0g3bZ}# z#(4I$gHkFBWKTPY$-(^{Wb}4WE02de3*nhQju=&j2MI*q(M~5C?W24ft*-tb5w^K*@@Rd)h&MXW(bK#?HXN&vFz@ zer01|V2NO2U|=)h16}Z_%*w#PRs;?uP}L4 zo7v?Am>C!teLz;gS`dtLyf_#bVnIFSPc9uk3bDoq|^UE1NC@L02G6t0LZ|=3gxhZ7HqMJGjelV zaa(hP27TChk(6=3hVwaL!}(moNNTweYArzRT7Cv@(1^bqp^aFFCp^O^b7o{uO=EK1jfuB`*Fh$HWiM=UG#Af^=*bBIs)4n&&ddr&xRzz3BT$mr8qx6BQY-}CzT-{G%dmq54$D=>0%7XK4k+2^t&_AFX{nL6@dwq ziJADEq%?@xxk*Jx*QnswF%LEXOhD#p(h-->l!9&*iXYu8uK)@e=zTh%yO+Q>8Nu#5 zL0pQGTvn2kng^K#LyZye6-eOe9O%VHkjXJrMW6{a*qux$7Y-Grg6?r*06TyIb{P)n zG8qQQRZT_=Zk|4_@C%#bOLF5Ox6*)iSR)QC#XH@XnXiwWJuo)S$0J?01HFnWttd4$ zC$qSOAs*xUCb-AI^OW)63$7quhJ+-@g`g{O;8ud}e*q`9c!*b!uHK0+MiGMK82Al6 zNOxr+uFHW%4LGNQ?wEn!?gP8I2YfgyLppM0M8?!&G--wD7QdZpe^`C4Dl$L3Ny>Y)q*SqjkALWpF!hfAU4P{=-dFT$qO1s z76D}d1_to_HHZyL&mat9gGN(9Y;I`qfaU>3Kpupe54z(Bqz2?a5F2C#2*b_>291Nm z=E!i(1%t+}L3%-_z=1GKFKB)MrWZ691)4(ynQaN3Ck3%VU2@pGGsqjTHNGHk!`R?? zWY8oh^gs-lnIOM_%mjG_JdX^TuPF3}u7j4rV@h9vLbQo=1kV zLGwv4HQ+fYs5tnpBq$rapC8HwEuMm@2j7(h6$hWC3uS}vN`kUCAh{DXw*k`&nwNmF zK||CqHu$b2s9w;THJCW)m`oTOd{+`w4QMzICJtJ}2V*;ex;RiZpkY^-IOtqq7#n<7 z5>yTNt|TZMd{+{b4ZbT0$_DS}hq6JVnlN*~cO^l^!FMG=+2Fg9pltA6Nl-TENN$*3 z@LfqzaqwM9P&W9kBq$qvR}z#B8ViHz1>cnf6$jsy1Z9Ip>0xTXcO^l^!FMG=*?X86 z7+`8nAhE%BB|+7I<{e;az;`7<#lidep=|J7Nl-TUt|TZMd{+{b4ZbT0$_C$+1Z9Ko zN`kV%cO^mD;JcEbZ17!4P&W9kBq$qvR}z#Bn%#i86MR<^R2+O)5|j`+R2Axj`WrOcZg0jK;`Jrs^T}e}vj#$;i7!FMG=#X(0+!o}vj?@EHQ!FMG=+2Fg9pltA6Nl-TUt|TZMd{+{b4ZbT0$_C$+1Z9KoN`kV%cO^mD z;JcEbZ17!4P&W9kBq$qvR}z#BzAFjJ2H%wgWrOcZg0jK;`JwE0p#A(%_D>KS)EHx6 zVEBu)w_gafKOa&VF#D?lM0sdxO|e_2EctP@Mr% z528W!AB+uB3S)!j+F@*PJq02_qrjkY8)`4eKA4(wpmG%|eiLaQ%Y7&tR9Azh_CV`f zK!cp1qpLw|kQpDLYCvre(7p8_anSH4$bGQ&QOIm?T?w@dxsC?4Szz@ea{Y_E1_opf zF&Jb&sFelvHUp>*2iXhL3ko+78#Mn8V#DUqkBCCnD}bi0K>9&)AbsfTTR`eT?gg0v z!XR}Z8hw4s3sD9Jko!UAfx-}^4rCt4Js|TzVjz8>bw?l?hCy;5Hv0M&Tc`L70`MhkRF(M0kVj607~y5IgokaHFF?? zpxBt3f#DaD1u!OPHXo!1W?qRb0|RKy7RY^|_9{pYWFELpg|u!(mzROT3TgWz$UG1R zx3`egf%g47LfrtOKx#mECj$e@>edxF&LudF6y_lP4{)4I09xksAacEQvms;0eevNb6Pv7=Be?u`QRn3>o? zshOFP4YUb_nUMpuj)$3vbp~iP2?wh=XoUv{`y~*Mg%vcH%*?_L>L)X^u!DMw%#0jH zpwL2^D8fBS1nz-C!WH5=kOM#%v@Vm00n{PG*kr+g*iZl(k^_(b!bj~uBD5Hqf{eO> z#yMfvEI|eZQ7ncCft*0<2o%^8U;@QJI0rl!36=+$4jLi{?>WakE(&(9J~VwHZ-$2( zGH}CEcy<@yJBX3kV;4y|aS@c%P%tRv!UQnKdyr*8<0Fui3sXNJcQ?VKc@3;wRb=?41?rAZ1C6zsK^3w7#P6qG$<2H!PKGOv4qP!&^Q-N z56A$JI?z2*AT|iYbs^|_0FW9G2B`yK z(3*7+4Qf||#NC*%uX_cpp9Z-Dqy~iBaon*4s#}rk=l!7dYak6!46+Nv1kuR3(T5ol z&Y=DYD11TTjIDm=VPQbIAq`{>$UJEMoRVLVng_ZSiD3O~U}_233`_WKM;6fP3Z(iO zeO)QYer(t*kzp^(S|)*m3XrX@zFcR#c$j2AAg@6cJN2(gOOpKsUy~Hu^cNh9PDMb} z8U?W%GB7v=u~|+sWMI&2vRq`yz+kxvL>w|wl4O6(J^cyCqC-&CvL7JpSRZgO>}5L3 ztjfSZXe}#ftu$oKssXr82e}_42I{v##1$B-IU##$Ky8qppfQnkObiS`pqOD`056mW zX+pF`?tvN_Ozak*)u@bYpav&1BZn$zp(qn8Xc&l@gLO41M{}@)1|C^JsgVh?mQ@&W zKND!Ii5a$*6|~%y3wi!661+%L*FXV}-6|Z2_48 zUCVj~#3o@aYdF$cR#3FFLf5i_`Xgv-SwTaEA6SbRK?|uwK7axMwwBctWGQ6DDvQV` z1cyTew5FI9BEusx6Ql>WmQ@)P`mnXE-$B6)TgwXS0>am_g70_1x|S8ZnijT}6?E(a zD{L(*56HA$@Cq{n5zxRkd@ZXQNCvi+71T9^-_H~dl7X#deF=&m*jiRl48Yg2g0>^U z?`HztZo>*&%L*E-XN9e0T>&x;wwBc!#6erj3ffYU!MZtsm4SgTzJP&s%N0<;&KF2jg4cgS*Rmb~IStENR?yxlR`6ms32tqWh0wLEpk48>`p(+Oni9?lx?lA-#`2s}^13$|Z(C!pak@=66fdO1(GC_(^&?-kTpMilj4&*K9 zTGpGO<_W7Jqd#cjC^#>}*0LIcJPcdQ3R>pOighh3s2vEup9yp!A}eeyD;FqLz}B)_ zfH<(Vtc@TC;9Scp&&a?4zn=-bZXdRm6*Qj23R}w>2Z~tOT2@YwiD+wCb&&685(C)} zTg%!5QVm(rGCSjLskfL1U0I ze?SXaok6KG8q^d`D_~&s0O?{3lKTv5Gk_~u#t=F1Kq;8RG%-LP)U*@eWMHV`03DeV z!!$8Kfiaq?gh2svWT8B0n=oi7un#N`z5q%dG+gS%$-uA}BF0>FgMmR2wC^nubniQ3 z6j%Vd>{SXhUdUz%_6^7gmtbTF0Z}joA#epC5%A5*3_&0YG6)W`8>Sny zYywov!#W5cagZty4Z@M2-DwQ_K$Ax#9pO2;?l?8Is3gBwzc{xbHMdkBy4)E;#Y0!) z8R;468Nj4+GLw?ww|+6CK{~+T(`rD=HX(ET6_=!>q^9X*fM$NcgN|@v ze2b2cF)%W-gU`2N

CJWaa~%Y{SgV$;-gVz{JAH#>@Z`U}NUynF9;?X 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

^w&B{sh>0jCVjXu$9-~3$jsGUay5YkBLDTw5tPt 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�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

93fkEX9D4;sP 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

Ir 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

OGhnKzxwBAR06t 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�H(P1ylbBNgTB92`2s)N&FWQ8+48( zObsg&;{0CFO+qkn&~g+Q8`Lg_u|Zdu!r1aidO>$c!o)#~onUOx0tFZwbiO5w4O)H( zWBVhS16siV6VE^rFF<0KAhBzZ*bPYR4kUID5*xH60%raKB=HqU>@`U2%}DI+NbLPc z?88WG&>9Pv`PY!d?;^1uBC$cE3WWAufZ`o=Y6_?<1f5?B+G_z~gW?^;28~>R;u^#T zm5ZQrp+Iat1_lODyo1=FZW;^d3@s)G2GD*6*qNoE{w64XL25wrys$G%LE~1iGfP4J zeo*{^)PUwyb)e>e=G;MNJAuSOGr*wZq(E#?pVSVj26Qc?3zY58z`y{CYmgdHUlnv4 zF^CPic`XL226QGW>?~7IUlo)FKx#mD+Jn~CfY_iJc~BYvu|a)X&;m^m8`S3or2!Bd z)JJcFnh9D{4@v_danSwrlc3_D8C=j+xgc>+KOJ=4G>8o<3ztCEfcmwopzN~@3=A8f zY|ur^+n{VvpYwaAP~Y?slnv^uzJRhp7uCLlvO(8Y ze}S^~85tOULD`^reFkO*29TMcJ}(=T4eIBD&a?-KgT@|&pyHtZt^||~n)8=~vZEOp z7*wEa(D}hyPwaC~d*mpfm(ygX&)x8&v1Q*r1DvVQf%Zfw4j7lfl@a^+_-` z=y*UF8r{S2pU5Ju|XJQFNg-6Dh6W1{QE#2;a||I z9grNzeV|1*$mW5{%2?2bCy*haIEK>b`=c}z7#LiLINP?6n}GqeuMTPqe3Tb`f0PL? z0|V&lZgh3%`=fHy85kb0K*Aa1ewaVd_eZG;5Vt?dM~ArmQLX|E41uu7K?)c2{ZR!v z3=BJ<=>Rmg26G>%?FtHKP`(HGahfm#Lo8_G0>puu2a*Ss1uIvqlC>K}|;uK~F_n z)*vAU?WDD=kUc~_R=S}5Prj@=SHq`pdnY*wG4cp$Lia!IT0VuvNr=%qDd&@dvcQ{5 zJW>W)%{E*L3MI>@$ZQg0ShW8Bg53f!UCX7J+B6xQ#296mz0=x25yP`e!D@2NF9WSZ zJgf$*9<4O2Wp!8r-L}+pba+HD8^;`;?ylzqXX2!%;^`lcVPQF-8Up z#sY-|gQCeEigQFP1e1>a3ox5($pWh9dAi(g{MTid1=TC?^MCg;on^kuqRPOa%LS4E zr5DgTK5ToHK!;Gm_9}tKu|Z)CI&T3qG!GG1U^veSJAsXb@ds!;3e*r-3$3j5Kmo+S zz`(@94(h8gF|vWWm`scunV^MiOst^OOqrP2#h4fvm?6goGjXtjdZ$br?4Sl73+Top zCT>vu%>rtKF!98Kw$p-+2xb-lwdj~wSV4!NvN(gz3swh-um*rm=1l<~s>sH|?6n)T ztk4T&fe)zqWi?x4+3+`1q`JwcW;aGQeI zexOR9g@I)|XbYA9C6H5cLB<7x8lXHZtjj=~o7@>e!vHMvKx@&#dzhG5*g=;A@Pb-B zurqSnb7v01o52O+asg4i6~NuUMwRvj(_Y7Jrwa5sb2_1l2h zBHSlIF0ci$CAg=9mgd`m*fQLDAiee=wgQ8|HP97-urq<9K<`i8+({s7pnI4=_gCRM6BraW z@}MIyL2Y8_nZOH?_Ang;?GQlO!vr>;fu9AGN`yiC);_QnF@hH9i-31clre%7Fo+0) z901v=#3FJ5!Ql`oLvVORUV{Ry7OY1=1XN(d_b}ZA1xO=UMnVL%6`r*j%#jiK3etmh z4-+3q4{Q$;s2F1H0_)Kcc?Ghx7tApb0d)@Gdze5yIry2tmY{fp?O`$nMKo*=(>svS zusuwm7=Z6#0-tdV+rtDtEqE>?=*pxUA{Rk{2iwEc3o;G1he;E}K|2!|bX8Rb>t@iV z8;m_npfH7=2@GO#aI=8?vmMlu0)zMr46GYK-jZcBVqstqzRbeF0N=v|&dabpO#C1Z ztAGY#)G+rtDpE1ng$hiN8A#sORe^N3sqndZz0YK{vqaDa+s(22O< z(uIjZ_%CP$0BaZ{_)K6YkSkz&m}Z0GDGKT&P=k^cwugxyWFp!gCeW^<0M-OX@R`7% zE6`YBdzkKlRHrb4B9=u2bVxmGDwx9~0=kWiH4V%W5dm%eg`Wuw+QGt_0k&I31T^5t znh92>Ap*K3i8Tw%F%Yo^IWZf|u@JEaWxpIS$3X-%c*2?s<{+O542lyH&IAU=1LJX! z4^J^MFergmO)?$_1qNfVGB_xXgZ#i4q5>MIKE}zwpa9x@`i>p6X)2bfgh8G$hN+lA zo-vvURMM$}_7k(KfV6&8`X( z1X%?URLcRSf5>6W_;yb5F)+XmQwH4yfqZ^4E0n|PDa^nydYCe3PZRZbPO&mDb69a( zb9)MdHd`qnaU~cSlvx>=VH>q17#LI#hc&CBZ>|ElP7U*@W>D4zrAr1zh9FR<50t-| z7$$K~T8)t*0z`pYJd6w> zAUA*O4OYj%zyKip(RWAsZJ!mL$VXf-L}rY_tMxqtMG>U}9j1 z2knk1*2@58{Nj?7l+-l64A4nk;AQ&|VesY)$mXi@WRP+Q8@|!1hY_~X3bJttyp;*G zHHn!Uw1o)Ff^2v~-c|+KOa$3bRSw>W1nOjfP9 zoZwANkgZf8l93a%Wr>+nl!1{Myxj@pO3+p+Uda9_HfBcHrZJSQRQ2GkT#)TpHQ?<~ zsN1JNW`oURt_N+0VrB-b0h`4P37s_XW-J-7I49WOj9@bvIr$ktDnRG3ryw0`4BEj0 z*^*&m!4QwMeF}M7!|490VYhz@d{{k|c28yImEhVu6%RVg9-P@32Hid?&?NyNcN5wf zMeKeny=1(bsG!@6;A`F?*CF89O9dU0XBf(Rsz5s|OY%!|Kqvkemyoir3S2FKPOBgE zTdD@_ZYtR5KZu5o>4V!zu-#Ok6(OL;6o>{%fM#7mY|wra&<+t$%Md0GVuNNKK;ocQ zB5bD=Xg3td43J(>(;w8h2dM$=JOH(XL2OWS7qsF8#0E7LVP=BZAiW@QP_rLo28a!6 z55v@e*r3%dAaPKm7A6j2gN~5^iGzCaApe2%gIbp`H-K80F!dldsL2RY4{D!+#Wf%; zPSDH<$Q`hTB*>hRw`&R%f}l_V;gPs!3bdXISzE%Eq9%9S|E-1c1Aa3=FXSQXn_L_DIP=_uqiJ3OLX@Usi~}KcVQf$^!PuY@8fGTwnp==LAibdYW&~}9Wnf?cxd)~m zRI9+)p!M1?wk;?PLo+C7;0h)V8r*=fL2I;OY~(u;K$py-FmcfR ziZC{KtqRoM4M^%iaSBs&8%Z2At^^YY4}wAUg3cF(iG$K8j13B37#p<48O8>UB*WOF z_aJ~$3^-1a3TQZ=Kw@7(Vn0V>gVtKY^fH2G8=!jmkl4~l?9qKr zknjgB0f2=Y=&oECdk$!N2O5T;dtPDUqx+m7;dXok+=DQ>&j}LO;-LLZpsoZ11A{at zWWNQdjMoE+gBlwQ3=9q+HZ;HZg4j^?VMy#^5F4td1BpEsiM;sR-_EE0{Q_oe5)u+KVuD zIg)x%eGL-_t#^R2LDRu7HmL4~u|bQdU~Evk4#oz}SHsw#g>5kQb|kw%YeZn;hmgcU zYeQk;pgjUGHfSjgj16iF!q}jF@G$mMBy(OOu|aJ?m>T4LRG^7;m^f$w2aFABFT&WM zz6y*jgS77lw8k7J4r)Wf*r26FFgECHUKktH#(=Rw`wn1iXCyPdkl21mY|x$pn0nCp z2QYRXlA0nUc0Cdsbp9bseHW5=9}*k1t^=k9bgvVPy$neWXbl-md?S+hRwOoPEh9_~ z^1iF%NNPa$e8bd$7AwHm50KP=?u3GgzeW=Oi^K-Cd0}cmGzf$8CFtaL7#p zVmBhOTannHHW*Cr1SE0Lx(%54VkB|U-Wr(rIwWz>-Wr%V==NwB8?@>I#y*Fn{wfmt zCK4OmHvti#6+)mkIkcPs^*7<>fF=f^;-I^RL3>$1@p2z}mknr+^eL1L+8gj5$_7oV z|AewZePq!6Um(4p?lx#&9f%E@ngp%h1hGLA>4Km&i%gLI4Jh70;-INwS*SRukEIM{ zgZet4MRy=IpmjkeP;pTI7qqVqB<{|@z~BfK2kpghhq6KaUtcI2RHg<)*`O(U(3#sH zz2N>bR2Ysu3R)EyMWnf_V4iyKL z!GED_&^QJ&bZ--Ar5`7h4eGanR+54Ag34e~s5q#82lW>~;-J2}JX9RihXbXp(S1=2 z44|{g3JSzCm?ko^FZza znGX^J=>sh^2GKAKk^`|p>C}%CAuC;QMmW_diWhXJ7#BT>$w5w3iv=KG1j_%zfZ7B?iP@N?U~)7;->U79hi*;S4epJl=$) zPEnG${ZC0m?thv^&WU52zf2?eS4zgp3t~?kNJ*V~n6d ze$YW@Acuhzf@s)1MId)FT?1|ZW?^9mwc=SpO$jDfC z6`5E;yN_8w*HN_*ua+pzvY<55zMBfhbVD#K;f=qCmsy%nT(= z^Fa(y{ldrq3PZ3C5CLkIGBN~%C~#CD)@y>o5K?hPf#zf&vY^YUK-w5URTSvxH_*~S z5Difo1foEyLBb#!Vk2m*9;^$b5>yFuGL$e(VFDjB58^`VZ@Af@<}{?G4k|pr8W}*= zLs*b29aR_@7}OaU7(jl6Sp<^@9reM)0BYEgbn1FhW?uRrTw7P3nNpGgSzHHSM#sd! z0A3^kSw;swD_1WAQv87WBn%A9deGHp%yppEW{{O=%)*>p;A6f)E7TzC&A_YJU@O#^ zK*x(`bAnd134_+xF@q2J25rz`WCWi=4JJT`|ALl|#g~AlF~P25z_(5Y6s-E?$;Dum zddUo6L%;;eLEF&7ioxEBFF`wn7<_UsSP#f{+8nS9awkJUd2%ttg(!|A^+?|0jQpY! z1r#Gd$5E%ID1dzekp_7sKE6B|954tEgM>lh3tA7!FrY{B!g3#o1{bE#3!cWu% zB^1zF3S<*NZEJWTq?Zh5G9a=Q*f7xU2@nHRH-hHfK?xINGmH(YgG4}sJD{<91_lP$ zx&crX2vP$|u%LoEfdNvjL)jp|!^RZw&aZ<8{23S+K(#tdJ;>cKHmF|+V}shoFgB=V z0Aqu;bHmu6H5M>7cupPa9#HayiG#-LVQkPjJ}@?D8y$=d8l#7?L1XkV_FPc=8EWQo z5F1o7FfcG6kJoPli9^+Z&uIad7z_-cv3N!(8#E>aV}r)oVeEGxz2J5tbUXs89@Kn? z#fvy-d=P3rI8LE%0L3dTjzGZ*VjFgB>M0%L=kv@kX(USMoT zq`3jm+83BOC|+P}&|T0lHfS9TjGc_67t}0LFbt9du|Z)CN;ibmp^u}1%mb}S0+|8AAbUYHsJsNRVeaGLf}A4+av#2NG|=3m z2Fy{QG6-ZC0|Nv4I9dP~149pJ^DF}ccsC!&E|7o0{l9_aE-&>3hTvq2ap z2dYazdSLFG!OOq^iW89gK=U^sIgtB6=fZ*Xfbtkf|9ch&hH{Vqhy#r`5EpW17-IY` zjSc&_+!@drCQ!W~YB?MBbBRE6#2|A)YC!lt8}@UFK-V;a+zRuD2_GWAfm%!;Igmd< z+XRu#d(Otd0GeM1nGM1)xo6OIqA>Fu_#o;);R0$`z{~@+mtc7aq(7LQfdRC(4a5dv zn0X)?S`>qX89X>3_qK!9{lUT+6n~&0Wn}X}>l={Q)`H9d82~?*s3NT>mxyzTjLl6< zh#i-60JQ^<#^q!fKt2YK%dKVF%j|FjdK3`ov>i~G;u>!Q)j6>7Hqf=mpfCfCw}Jf3 z_?3Zyp#$U-(1KJbjdi>&5Ogd6=qOplcpGQ}pM{YPboK-bBL^t@SeRJdK_hzb@itJK zjfI7^9u$o%>~SDD7Ix49tt^Zjpqo=6V{8qe(KC?cAg40U0X2x&6B!uwKn##DM-l_0 z9%u?LY2^c%%Lg)#55%R*=o-@AY7W%B)trdyE4jLw7#Wx(COSzlFmS`h)Oa9cYP^_Z zYJ5mzYM{gm-J=W&M8X?VL8?Gu3&Nn;E+z(0UKP~fbX45~_Sj6%V8Z5n~LT7tGK zGIH|5HXeeAR|I3-a#HP zDo-xXNiL{_Dgy-}n$oJ&!9QFC${V0s0z`xJ2Z+!suFNe-Ok&UjZ4m?0888-jm?bB( zB(*3p2Rdp}0=leA54?9#FR2)HC?>5aF*g;e4l+0c8GC`S6O)pPQp-@JbMli>_=%(A zJK!6FK+yuh%nYCc5W)tL)VQAr)aL@31xf{=@f_$@6_60b_VVOnXr_R&K*KuV)DKp} z2z3&u8VBv0011NFuze*UK4=UER3C$?G7uYN7YI`{9s_kas7(Z0=L{Z?fr^7#5wN}& zs0{$?kAlW{VEY}w<1tY6pgs!B98muP#s<~xFgCb92UQOqkAbqm{Q@W(JRSpOgWC5n zz2NZ}s5q$K4-*Hs?V;kJDM6Sxcx(nLJ{#2L1!YwR1_scY9++Q1=PJX-RKVjdP&J_Q zkYVP4!yhURiUXKlkkK$U^4JMzSb)&k*q{TMU||b71q#%+2H68T7zD%ywJF)5{cKR2 zgXCaiOUP_cdk$s}u6{O1Juw*69|E;kLGA~s2lY)s{spl?7{&&TErQsvw)P!%NZTDW zP6W~qk^{L5TVENJW8 z$${9Qbcozn#-$FuuMAR0OkbIS1JZ{Bxes4o8PxZNOxc25g}BEJy{`=FTY$!3K<0t^ z6EOdR^8`dIm;|jU1&u+0IiU0mWuW(!J((C7KzS4@4Qk+knV`G`G8-0e4V;jEAIM%% z_=4m>G&nzjbwCKv8cR^xfbbChK<_JW;Dq#*LFVD>D|az5Fo4#dp__-^SH6PeK2RQj zxetBK$uwpL2GCKJ$mW640{WVhzbx4MwmZ@Kwsx%8`?jF-%RuJB>?vc#-nRv915#WNT1BEkkUl~-6!}12mjCHKUow+-K zje!Al_XH?kgUkTA4;0>@w1{lp0d~kZ8OUr9hPe;cw=Ky}(#zLZAh_nl(7?dh2;8|P zyym0bV`k6^q%7(n5mr0U(L|6nF>EX>UZ8_$*+F+>u=s#RsMt?|I`Fi*SQ> znX%e}*b?0JAXnOf*fQL_Aiee=wgQ6yXuC28BdZ7K>IrVp9SE$RASU=~Rt8ot5W7Jz z4CD$QkeeA81wjQYt3Qat!pOh@8i7dzT|Ef$h&%%?XggsKYcOab7urn}Nh)96qZ6f0}b_NC;5zv+g)=6Mx4kBkk z&Y8;ioSlKeMFbQBtTP!w!R{dfI>wZB79%KJeMCS@xmo8j8nQ7k+zJs0G(9UwOBSleSv3=9I?pzTYnyFltCxVbq zUz)_gdIn^^3156^0R!tHox3b;@P0WUHgSH8M^X+F5{D{34pIYRgMtL1hJl~uH7f(8$OL&9oVS=Dd{s7hIm9{v zs-$F$S!Khk>63 zq+B?jg@FNdtnEsWIi4WjnA4dU7}#t;K9T}WcCk5tk_V`^2i5wFbN+HLFi4jtGca<3Dp-)X3=61zzzs^k zj3KhQNyQ9|JU`hP7?>so$QI-#F);Fik`U9x2+&elhK(Ey46^Y>42)tB4f3FwU(hN> z1yECz5uCo8IY1o;B~WSP2I?nsFfb^?wSan63@V`cBpXf!235u=CJxY{oNAz6CuryA zc@B_h45NiAV>F`yNPc1fgF49W98LxXbx`G9!O6g&0czzl6)~tX#xYF{P-To}niv66 z3~F+K9ihOVPN2p1m$j!8z9*n6s+Rl;e2h-1|e29W>A3WWV0|ZuycUQ0IIB^6=&q;2Az@$ zTBpO#3qKTC%BjfUDXh=Uz`!Mpq?Q|@)`FXX0lZ+Afq_?;k(m!+ARjM$ z*)2#BKWqj-0IZA^X0ITUS*#2ULZS@nk_-&OU_~Iuv4Wf-0#(H7DGV}86lye-D<;aQ zE(vk3IAjt*0y4`W36cQmmqMLxKv^veI(!ysK10R?9u7i^T1jixDYo)9Vl-yKvo4UvFqVgThm(EVXZYnnk*n2^yYNXG!A6r>SEgD@zIfx7#kr4=BpATbaI zU2Dd~0BVVoG+C39lbJMtYlb0<40ThB3k(e`bW?NE^r0to()t8avd&9|x-BO&3FY)q zP)`_RVhMVVC^OPIqAUyy;1iD^$B2Swdm!h9BCUTeE&(m$g$TnZq&OLwS)nIkf~KXI z!E2kDz^7$0g3r=~t%U}SZ!@tlf==sX2Cao=;tT?x04fbTx|0E<9I{**e6}WJZFGDJ z;#AGt#2nDPLOf^%F9V1G9Wz*zn3sZf#%5wkYDH#=0YiLwa#2ZsZc==4Nn%MVh+7Qi z7efWWvr1qBWyU8yCn*hNIzxPJQc+2Mc`{Uae0egmY4Ihw@x`ggYpyf%N*Iu5mf}m3 zO4AtPlM;(l8R9|8GxAG|7~Xe;q$cK-7BIx;CRUWE z6f?wwOCyH(;?&d>NXf(yAD^6Gng@!;vP4iO0m)@E#HSVH7lWcLwWugBp8?_tP=w`z za!4*X-t#~+oAIEj&;0E8oW$Z1hWNBRP}~(m;u2FNr}ao>G5f$dC4SC%g5(|Q!>bs%;FS~55R6kr19jOd{8Na?a)k6`pZp%CO?o1 z2Xx~DY~BS#!^UkvjRe@n2T(Hw)W`tQpk@YW*cH@R0jUAarGVI=fj^KqtnmR7XBgzO z-Sn6MM+wi-{SDyto}hFC!k~Es==3&t-W4=I4r;@Lo*02l4hOa`Ko;Kc)|%zzYRu%-)o5d$)bfdMw}4odHgpo{@KUlKG)13O<5 zv=AOV%E7<@J6{sC&K$P40yIAY+BX5pA0U5%#6jkP*syaLLH-4agYpZA4Lf@g)L;kc z1vT11eg>%lb;dz#Zm7K=IgmKW-yk;ZEJaW+8l)F=r}}izl04Ap0mNGjp!ESDH-Pkj z*dVWgFhy$xKn@#1dpE#yqEI)3<|$!w=b*777#r7q4bWZym>SSPB#aHZunxus4S>Sf z;BA>uyFf!Ahp|Be!7w&xiV4P60i8<-4F>}xwha;+ zG&c=X4;t};v5S$^)FZLGk=WCb*r2miV0uC4r@+{tGgDyfPe|(jBe6mEO~cfHFNuP> zSq*efB9v{6#CAYp`y#QUkl5)+>_#MZ9}*k1rWZedp{EUG!h#; zmkD(nXh0ukKB#V70#O_66&q88@*1^N8fU#G&Rd0I{KJHX*Su zAhB;Eu^%C^)j?+qLhZ6eV*4SnbCKAUNNkWlVe7p>^(%~xYaJM9dLE_*dHo!y-iL{U z<||=r&4I1`_u|aKeLhH$JxeXL#FmpiOhOw`M%6VuQK7_6_1DOFj4-U5e>@8Fr zWIt%09V8BlO4!+9ptcO`>@d(EBxo8Gqy{t?37UHXu|a+X)e#^zD6V1Wg@M{K8qhPU zKy4XgC>zwCF^952dniF}qUHWFkom-5&?FhCoev5Nkb2NsG*Fug#0FtddH~U&H8dbL zZ0%2l1mrv>&>${IKS&M~59n*-KzrU`{VI?-Aax)beQn$p3B-OMP}>uv4rCt4Js|Tz zVjz8>lSe=_41?rAY)~2lr3pgn(AUPjfSzp)G6RG`_JU~8I!_QA=HCEG$l5rNfAOu2 z6JTUuXaOxS0vUp|mJNMv+zd$u1`&1!29S9mH*h-; zCdk0RaE%B1xjE=-%7ab*tI*@sw@*E@w z3K!5iIanS7=|3P!+&;1`VvzgoLG=MFoI&viO54chnMg1&fX<@@nGM1)_aWBW<$@R6 z5j@|?zzlM|y#nF2b}gWa3~8+$(mpZ+gD-QMnil*w-@yl2@TRn&OOp$<+|I~}fkz1c zIZmKD0J6SKfdO=uAt($%>)SwOB_n8qJLo`1kS9S3K{OL6hcI0O%{4Q#u!n-yl7ZHQ zGr2Q5GcYhPGqHnL-#~6_XJ%vrZ`fkw03|JECRWf+WoF2}GG-2T&5$1fw9MDxWYnGoLgcXeLuYoPmJ}`Q#i z3@lJ_@Rg;k&=Z+B7#P@KbGq!P(~uzZ;HNPmZx9n_VBkbLoJoR#feSIw$&F)<5|l$2 z8G=9*C_zG|B0((BFdrjB5QqW=21EiB1|ST|3y`J*Bql*(AXOk5gj*RI7?>D9u`-k< z9KKa+5F*K7!01Ku$ga52!=t1L3oMmasbmIl*&&;4_SvA@h8U zoZR5^k66I7dZ4*L@O^ubSv>G08<+siYJn!Lz+2QZ5{pP42?vd^V1{K-BCHIHyj=Jrwr1 zfo^+)?F9pkMZnmgvp-;L(0Vx-o7Q{WCV|2k6sQag44|=pn7s=@;-GxYz`(E+G(H1m zgWK@n{LH|x7o-NN_Y{Z?RdWTzhKhrt5;jf%s^MX5kTi^qyx$GfE{2JN;uyvTr6Cv_ zd7J~(hbAOpR- zg0ewwY=E*s{rVOt8 zL4E_N2lekkaRFk3FpLdqLxb3`{z?J|r2hlj8wAo1k^{LNeY^pbc0ut2G7E%3>OeI5 zctZ{cq@M{g4;1Dgbs+OV?g5z(5(DW2?IQuvFbt9dvC+pHaH&HdZvd$Sr5TVJAPlk> zM5B*4%pr0w9_ZY6(3}m(3=oF74}HAh2?qm%3nK#q$iJXI8OUCcf6>PqG8rLx3}hAv z!^}e;Z{TBMU;u>yNDTesEka-`O85pub0w4}3 z4?r5Ag4N(UQ7f?3}BnOH=P`wGu8zB9l_4c5?FNh7oF!Mk( zw3q-1gU7l+bAq6J4Kf2{9w@v)X%X2x7Y+vKDKB7c@OBG)e4r>Xub7B)W-Lt%48U9Q zh!`I*02N9|;{&qbT!K0-19FX-Bf~}phPBL)kpdoxIbItX7z`FecjWPC^mxf6TQc!* z=yJ$@Fmr^S5xtj5m4N|tLQP42PJVf65kpCSX+c3M=-f9@c;ebS2U^Gt8(RSN$U*jl z#6ZmunD{OZ*g0P;jG#Ln7(rX$KogxH#h`(95DnW?$HM-S2|UICx&?umkqxxxiJ6fD zboMzj6Dw%TIx`3BR7M5{W)Ai=O<1k3`UUFys% ztmi=^7g><-#N4&H3W4Bb2j+P=)}2ij%A!oc!}nSp`XAGCXj1$2!H zb1>)xY#tVt5YQ$FG01$t1f6VnL7@&twJBfMA4&s_j*w}5V*%L2Iox_J&XoylqgTE;KJ-3`(U-8|<6QUl#Q z2Rc@a6}EZqA7~33Bddo!69WVHVvr6`5R-u$G>OUT1!6Y{-UW&KfTrvj7zNLQJmwGL zfHu#829Nwfo993tk!Roq&GGlJ27|7QfrMBHh{?d+4RQc<^BkxQWDT1HvY8tco~+@Z zjdUFh{45}oI6%8PL6{R_BtOdv(3}T93n*}SLG4El)?&~OF>cU4OV$z)lYv_lv|k3k zc@C5^guk#rHqU`}W{Q9}LBTf9fzmW?l~yjIv6*DH_w5#lEOF7v4MgY zws}quq^u8YkBP`fP&7{f@4mAT0aX*M6B$7}XKX~kn+_*|l{tujkCmDV-ecz?0*V3F znT()d_YeVXiD#X~2ntspk#C@cHJ4Eeym{^h$kKV>FnA*J7$h^F5wzpxg$SrxWnBO^ z8nk)t783&luQDrm^IQOY^Bg$TacrIgZJ%Y`4r;*-W47V9b{XtNwQs8C>sX1H?-aNMw6cR^Qfj7^^fW%Ln18<&l0J;3+3#83+ zAoF3H=RmGR-8>f#Qh)IsD`@i^=-yh^OaE9Ao994!J-BN@=0i8nf$qv-y$Rat7s3s? zCxi6?D10Nhn?P=U1S)4@xIsrevLbJu10@o1kblHM9uWs~L3xsapQVJAfq|Kk!;2ZT zF$WZ!;C(%yJp@xB< z|X!9H>b@8)+%oMf)m!7tab3q1xw*lLM*$g84KnB=@Icy@J zYmHbP7(u;99uZI*iPf1AbVZ2(0|!WKEzEgL48obr3=E*nbMHYWCV`?Uk`YvbFo=Ne zKw^b$o&znqV2uXLaEO3+1jjIfw176xfs_khfNq|f1ll~O4l*YhoZcBkKi>9L_mkJu;zj}9t<3y$OaV|;5Y(po&$w|B&gf~$0q|n%L?%R zxM=X^IZ!Pk3EEu?O97zGwfrnc!Aib@O1NSc1_m~;tQ4ph$LR406lI{b2%z@ooN&v8 zsCx;OV33k#Wnf^_0@(zr$w4g+#yKFBAj2a;hJz+>rd2%lGBg$RPu76StVXay%DLlB4pB@NW+ z6ObBE*PD?c7(~Go1jDEQK_cMs1BM_F1!@_hnt*Kr2BZpPG6*YxPJv)J2pU3R{LRP9 zzzDh31;ocaaGnfWnosQ!d|GeXDk#d&(#P1Ep<8BRsh^XXq@SLgj47*cqGzFJs-Kyc zoKu>TN~Vvo%<+IOuqXj{yTDt&KpS23G8mYUwtF!%Fu+e5MB4hr4Axm$kP6x4g>}Q% zDfs*jWX7kSlZgRz9|nkIRQ0b;}EhCuT{;F%z1Ht^ms@ZK(FuwG8kvOGrEZl=uq zq+QHiPd^Dann` z1?{tlhwKE&O#&HLo($V|7GDI~uU1@=l3xniV*=i+#t@%eR+5vN#{k{vfw4^|J`WN; z@ot_zt_;x0BhdPC_?{H-4zpa)t{3<&6Qq4V;B)=r)AEW@x1PlploWyXxq){-F@TK# zZ(;$@Q-KN4OjCSX9%P>y%C;&{x?+fjY_UOXOhIS@?{kA~v>|T-6C*>x_F#hdIzbAG zc*xe5;*z4|+yYPn%1_P)C5%!~3IO{Ev`Y`n0PnwpPn&@!QR}Xix4uB zPW)K5`bE_T+v5k@G6>mS2;PVU@lbkVZf;^c zC_Seq<}$=XHa~&)R6#cr#+T&cnYIK6DrnCdD93@eHlS=Nf^8_vO)5glpGbS1pj#BN zgaKlY7ih~S)LlsX?ut?qQyAi%GSeX;2Hgh+N?72%cc}Zf!281DK?Z^H5?B#9$AQu$ zDDq*Owu)0zvq785pc?=|IWs>GG<5{>9Y`U34`pUvGDCc3UJ7WNDDpN>_-4=)#75Nk z0@Gp!a1b-ZCzlo#rRJ5yCnuJqrso$`qHZaJ?M{QK0+$`BAQyoyGC|*4H_&2HGe@32v9qKLxX_<#0E7@L26)a1W+rM z;?P}v4LHjf8cBx8fk;W6+>^Ggxv0$%A?>Q0=gDPGRjI(57v0UN2&R z))3{%U^xb)k{_fOwkHXcbYW~z$bnkdAbC(I!Pp=-Fhacn>Y{=6MS;|Sk~fGAG6SR+ z#0JqI%nc1DkY3OnG$@;Z)-8k7fXoK5VQN6b+b}iY`*3&}!2SZUxuN!g#&tzN7J@7W z&9Q=dpV0kb!k`{IXfGD1&k3El1DOw-`vW!GVe_G&ekY6#auY}|C~QF(Ha7~ID}m_+ z&9{NngXAqi_A)`THpm*-`K2KLz~(MNa|bXs$muXPXdV=1CMZ5ZW`eu|at~}C8RTD> zdeFTtFt#noUm!~u7#Ki>rNPulf;vf1aXBP5=>B7v z8sxoMpmT&^;*m(|LFX62#3v((gYJBXiG#*BVeIWlY7Qf@K~o1XHMfz(LF@Ek;-Izp zFgB>a0b}zb?Rk^(^A6G-gaNbDC# z?5{{{CZzpLp!=y|_R1iMYa+2hW2rDT&Pd_`NbD>mb~zHe1&KWoi9HXAy&8$V1BrbU ziG2x)eIJSa28sO>iOmM;fI-ukFcKRyNC)!^Xr2bfPC!yqfy8b>VuOb9VCv@}iGxlT zgo$rK5^LNLHWIr6iQS6CevHI^hs6E?VuRXt3=9l^*b)1&!27g7lg6O&P0;=)C|eQ4hN?FL zu|aD985kJsKy0YEH;4@tj{vcuX*CJNhN?+}?#%+#N0lIPsQGmuHdIYJ5_<-S4K)Y6 zXA8;()jhB}2vmQ=*tpgjf$Axk8c_QK#s;|q#s<}!Fg9oi7RCmx(Sor-XOhF%pfw;c zHn={8jva&A46wQq)S7~+0q>oK`Vn-hBxtP>$RGEi>xe*Ylc!KNXlNO9a3n|#$h?nG zaZnTDJCqF?Vg3tcgW4d>pt(RM1_n@59<-1bq!+XXjUOrwYA=XF*&u&QL)oBuTOP^= z4K{<^G?e#F6^KFhPJz}!fLgbp^Z`mX=xdokGjFi24amivM^K=y*x9>Mg0^snT`zUB$Efdixm zW*&(EB^uOh0U;yo12C+dHWF82ECZ<6&Or3-<_BBtS6N8~e4oEvgq%ih9QJ~36ka=K5 z3=9ktg;Ceuz~ru?`Qw5-WKAH*AD})R%pc&kG0ZRq28Nl!khM%OA((lfGlM~TVBvg6 z9- zf&2|}GbkKD z*}fTU+$i!Z*w|6{JJ^^}_$TnM0ZYuuE6rs{%qhr7WJtja5LDGJwvO0hP!83=9mQ#ZBm1-O#`(V;A_*afYzoxK&(yMjb&{bXo&)JZ5pUQhkI=rXtf@EZ5n9l zC2Vb)BWQ>Twl)oP;yZM08fYCDd~F(du>)*v+GA!023~3K>I%r(G|(*%te9)lltGIO zz-!Prxc9)>Jlu0YYZSoZ#H>vN9mfG%o0bEbe21=0a|11VfUZp|1&Kosb_WeNutL|S zfx2X@(6wpWAQwQ_rh%5#!VY#10Et7_rkwaIQ`J!@$4*Tbl+BG3eSf&^aEg(6woxwac)zX`r?8q^wN?jqkwLrh(2v zfvruG1T7syU7Pj;d2N~z$O~B4rh!Ifpv%!XL_kAZP!5ks7bpl|Yt#5Z7Qoh~fsd(& ztxY=wQU+U__5#Ggx;E`ADBNIc)4)r8Ul!Rbw(?H9M;cL^jgJfW9(?Fx5tY~Y~t{|^XGX<%} zx;AYJNCvhx4YX*Q6}C1F)HQ~$O|t|A8fw-ys&!CXfN>7!gc<1~21ZZhwP~K9#bBVZ4jE8m zawjMDwP`Y-9w|sN3bsBCG<*SFpC$v^iVl)2he?9ksxZkY1_lO@*(q|2AZBF4_l-MnjEC^>OIgIAdCz_APST;P}kmpGA?M9DWfF^rJSMOmiMWW^E zJGs5^)a!mv}{L8GIfrU-}ziGwDKKy1(~BuE@Iatad%u|cEqAaT%W zDoh;2hKYklSYhHIHcT8e+6of~v0>t%5m%Tvhz%15b;w}iAU4cBpix+uIEW2X4;qz) ziG$cManJ}YOdP}p%?g3s59$hnx=NsK z2!q3r($nv;ETSv|i!ltr6_qF{jOyp$BZoa`JtJtQ5)=;*jJckY4v%!&)OpMK{IK{e9-QHWIm|RjLesUuKI>R1du#v zVKTIohg9Q;`VzuNUt9_5g@BSdG=-zAuY|7e0F4R2#6fnz*r53e7#rjh7#q}ifw4ik z62=Dg^I>ez`UDsoG}i!QgL?EZHh9h*WC;Ugt`m0tKB(^wV}s@!VQlbvL#TStd_PPa zwCNqj23W9Vd_C8BS;(+_MrRiVd9{Y5hM(g{WVk^ zyv78|2F>)r)PUDtL&ZV!KrnIe`fI2-c>Oh$4PJi@WrNpWL)qZ<*HAWSrU7OSc>Oh0 z95f>i69=!qhKhsNUqjj8_191~Xm$jq9=!eOh$4PJi@ zWrNpWL)qZ<*HAWi{WX*gUVjZ`gV$d}+2HlpP&Rn|HIxlre+^}C0L?5w+2HlpP&R13 z9_AO&k^mSRy#5-h2E6_n$_B5$hO)uyuc2)4`fDf~y#5->2Cu({vcc=Gp=|K_YbYDM z{u;^#ufK+}!RxP~Z1DPPC>y-~8p;N*zlO5G>#w0~@cL^g8@&D+$_B5$hO)uyuc2)4 z`fDf~y#5->2Cu({vcc=Gp=|K_YbYDM{u;^#P4>gW5WM~xDh^(M4P}GZUqjj8_191~ zc>Oh$4PJi@WrNpWL)qZ<*HAWi{WX*gUVjZ`gV$d}+2HlpP&Rn|HIxlre+^}W*Iz@~ z;Pux~HhBFtlnq{g4P}GZUqjj8_191~c>Oh$4PJi@WrNpWL)qZ<*HAWi{WX*gUVjZ` zgV$d}*;hg9tf6f1`fDf~y#5->2Cu({vcc=Gp=|K_YbYDM{u;^#ufK+}!RxP~Z1DPP zC>y-~8p;N*zlO5G>#w0~@cL^g8@&D+$_B5$hO+UlzlL^EWI$`5p=@H-U;Bg9L)+)k zAU3EA%D}(?I*Sk1ey%_g?*y@->ZgL(Q1#0|Y^XSR%{5f~Fp@av)@E4!_y9@#4Tud@ z54u|!W-lk`J`AY16o?HqUk${DikpMjP;qAv8!8?GVnf9fKy0Wu_`VIOcoj$-8n&SO z0bp+H;DoGg2i3o`L297kxd6n5nzIs#y$i&KnsWt-4Q?|))q~nppn4o6HlXXxK@B?S z9x|AJL2VeA+s=Zff}m~&9cctw4-RtkJ?NTo&>G1nP&TN)@(RiZO|O1{vO(>dZ%{U< zeenm%2F)NdLD!6f`Y{|(HfZt~bao-gE^t2vDh`@AmV&ZD{TR?u6CgF9DPuLLIH(_^ z17(9|i$Qf9NDZhT1G z(9u#LanRaV&?#OZHmF|%TB8SIgVNzVsCrQQ9dwu%NE|dx42l~@Q0EE60QD=OY*6zK z7Qe`Ca^$u*a+?#mEsfk}Ms6E}`WP@XL48RW8+3OCj1B4s!Pubn)-X0Gd|_@YUyRDT%T z0!cmSJWiN+07x9v=!S+ZF%-C;16qUuRSfF8fJQ{2Tn11%0Ahp2UqEb7zXim{1i3?TDBc^0G&WFE*pAoD?D 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 literal 0 HcmV?d00001 diff --git a/tools/sdk/lib/libcrypto.a b/tools/sdk/lib/libcrypto.a new file mode 100644 index 0000000000000000000000000000000000000000..b146ef7a19b4f00bf72eca048daadbf1848f7039 GIT binary patch literal 129180 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

iZd{%Lltv-3foKCNHQ>JAPX=_FfeGUfx}Hp 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

kNc3t+W-0?idO>EsUNWeZiBCyQODxSPi7%-v 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ĝQ7=e0iV9g*qAjim}#2={X2$o0P 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�N4O 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 z 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

4Tti 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%0ATC5S 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�TYmG-QejK)VuVF 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

(xRKaGNNh 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

U8YjA;WJp|3MS?XC5 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�R;8P69>S$)f-o%SlO1Qz$Me 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�iF|u$$}&_L6ZnzNsy00XB&Vf`Ag86FOVV` zw5BK+va1brMmUxMLvZ5*beaSB&|=U4A!u3%zPA!$4AKy*AxaAmoOeLoTLyP$XDbDb zjl%fP?@ zQUkJU3X+)%7#J9&pz3!)-2zg-2g#iGNOnP)3^4a+LiK=XkQ_)ahz)Wp$jvLE;R9mt z1u0-)0J|B)7Khq<1xXyrgqtr2H6KKS8vq29P=sJBopU zffcGg9%KmA4Inls{6T8!ki$uCdcYQ2^e5o0yZ6pB$f@SWq0FnU`6@fT{%fU=Z--1-PXd z^h#1IN*MG~5=#;p^pc8;8T5+sK^%}f4fRZ*CW92=b{bd~kGsI~I2?r`2XTuYp|FwNl8ViWhl})`N=5!#G=H!^i+@~peTT7 z!y=TMm|T>PqA@2kFO>mmPjN{RgI;oeZffFsC;>$-RC`5C=Wt0GZ;Y_P?DL!gaKy58F03S7KYy_d{zb>ZH&(hSQ{_%aN)QTVb9!fbHE7#JAj7(7t; z@(eX7dql`s12edRi7XFltReF`5gc&-hqkYwqRb53P!@z@1~+^mY!J!J zzzd?_n3;hO&IU1<8TdgI95XWrz}X-MGq^zrVnHx7xG@c3gGgq0?Fiz5>IYE69>NBZ z%nYI+3XYi>#NccYgP8%;paroYn3)08NQJOLBr}5~h=OBgaKjtUWnhNa#t<=P1{nwg zN-{IZLRk=snL!T1fRfDM&IFVL4qs4*2bmA*SRnI34P0ctGJ_vd`U8bt0vbOXjbDbw zZ-VkcO?n{)BZlcvKFAi3d0U`-P_tTy!Gz%`ln;}?0p)|5?n0o_60KFKm&^cb7-DHC z!`g`Dxh8rBdP%0{rpZP|CKf5C=82}sCWeNINhZk#i3S#?DTzsj1`Hr&X{m`NrA4X5 zdKsV&WKwFXL1JpENusfZxkZ|(p@o@YvbniwN}8obTB31kB3KJ(dvaoFPDy-8WdT^D zp{1U2vY|n;L6TXDk%fVgiD6<|N}6%9321yL$=KAwC>f$LGq0q$v_LOI&(KKE*u>D# zJkdNk#WW=?DK$0G(8wssI3?N4EXBYy(IN$+qqrm`Gp_{VwltGOV`KAVV@rz^izKrY z3nRlsOLHRwBNG#gq-28>h3*K zOie74lT(w8z>X@;PX;;2OfNCfAUVxAInBT*(K5v#Ey*~=IMLA5D8(c((Zt-?)DWy1 zbU;vXB{;OqO!Sh|EKQ9~lM)RQO;XbmQ&W?Z%uSQcEDep#Q;p2c6HUNcic3;bQq%M@ z^o%X_%uNgpjgyj-j8cu0O)Zm*Ez=AQ4ULjhEzQl0ElrZlAR1D#A+yxl#%ab$#s(I~U@dM%si~k%SkC!*X_@IDeHMCYCZ?$- z$*Jb1=0?euMv110$;K&(iIyhDMk%J|rqBS+NX*g8&@(a6GfXlDonD?~V47%dlAM-o zZkd*xW@MgbU}|WdWNr=#D@fbEEVZaOGd~X$2*##*$ri>&#)(EI$%ZDzriP|wrb%Yz zMu|xlscEUHriPZOVD}~G7o}zvCxQaONYB8~&?3>qA~D&-#Ly(o!Zgmn3QN}Y++`ZXqsl2Xklt%WMXP!W?~Mp zrX({JWQDO_vZ)~`;ti6F5|a!p6H`+RlTD4%%*~CAQqs(l3?LB$vH}!TmU@YaspdwB zrYR;SX~wB0iAkwODMl%#X%=aQ$);(>78YPX6jv6Pq~?OmH`6mWvM{o+0EKR%MOw0j ziD|NN8Ym1>l1wa3lP%4`8bIbJWtM=$$wbfGA~nf8EfsVhUy@mpnPqCKg<+y)vZ1N5 zg{h^P5hVFmloXZbm1O3of_ru#okkXVW)^12=7xqA=80xTX(owD#zw|QMy6)w=BXAY ziD~93V9Ov;6Q7))2kua2=$RVo873N}ni-^88mC$qTN;~Lq?x3eSfnJISR|)ffO0jO zMo7vrG%(S#G_Wv8Ni;XKG)}fOPEIp4vP@1hO-o5KOExz#Gc>aVYs5%%hDL^Z<_5{8 z#%3uN7Kth5hN+23=1B&im`(zPtASZ6ByJ0e^0QJ>(?H%c2c3UnY?7Q}Y-(VbYG7_) zY-V6;X_k^=VPc+?WSL@N2ua|@1*yqJsi2f?WT|IiXl!DTlw@I;lwy#QY?^42Y@BEb z8bvlsF-$W~fy6F6C_&Kx-be;26fE>i4Ghf;%*|304N}umlarFoOe{>zjLnRa%}gzg zVZ{hsGbp-E^bCy+QVo*L(<}{B42;dqj7*bLEK>|p4b99`O-&OMA?X9OUkKb$*2~bd zG}lWrw6sh~vrM#1O)*Y2NwY98O-?g3v@l6YOG!>iPJ<*7kRJH@5|CZSdPXJ&7G}vQ zhRNnhre=obrUvFF#zvNAX{l)zmPQtdkgx~ogV|+hWUOawnr4|~oSK+oVPcSInr2~{ zm}X?0oMdERXq;khkPInIL7EbiazI(c(7;G9&B)ZqJT=ME(Ad<>z|_zn$=oc}+&J0X z(#X)#!Wdef!Xg<|M4FrGfl`2lS&CswTB1c-s)>=QsfD?*rAex#k(p&;Vp1A7VW3x8 z8G44MdKO9MhKc5esmA6hDaj@&mMNxb2F4~P1}VvDCdQVqlCLBsu?Q5&#)f+4M#;vB zi54kl7D+~yhL)zrX^EyrNtPz&hDpgOY0&UXEiQ=9$p`5$G&9pPGBZpwH%m!NPE9jR zGchx;Of$AHF;6x$OEWW1vPes0fGUp%<*?$C#M}agRK$UA@kzzS@sM?&$ZJ5+d;=M7 zDg$i*b4g9h%u7YwuTu=UU)Cga+#cje9aMfJZZ6W`c%M8KKQp(5M8A4H|KPu|Y$YFt!V5d;_Z9 z1BvZ}#0~(l`ylp$NJeOL6zpcCjvOO&m;uy!6oEDgK`lEGHU@^r3=9mQQ3sf~8)&!` zss=O~08;aifq?&LB&D#g1ik9 z2lYZ`LB&DC%^(aC2MsYVhKhsOAPf=*>D>He8zv628zc^jPY@d>ZVhseBm)D;A0ReN95j*zQV&Y|AT~@KGy(+@2jv408zv4K zNddVZG~5r$5-|2AkolYp44{#qV^B6|=pQtG2r>s0P9QcnND~7C1IUjeQjoL?%1$C& z3=E)A9Z*<<#6f8lG%5!Y2aP6z(;*ime`JBo2hC+bhyFooKtunaQ9%$JG#UrOAU0^^ z4&(9x5zCq@L(gujl4b8t1ATzlb7(i13MNl@VZvt`?NG~YugSsptphN_nV&MiQ ze2_yy(>VMPzkt${Fh69f2$aqkL5Y!pfdQ1ZU}X*{ZNbJ9Ks_}W8LkgkgF? z@yG}YFz7UqFq91n7Z@89-ypr9_yu8@UQoO;Lc8Cfa1e&FK_iYZHpuTFy`V4#VVK?o zP`L-nI1CI7DIh;W*`PQUhO$A)lo1qA(5WUyXxA7d1Y?8JEsPDyu8g37flhxhLc7+g zAiF>c85kJAeutW42oi^~L8HVlb3h}$FgD0vFgD09FgB;3468kZT4Q)TXL1KRa zv7vf@f!NUe@(*M_lr0FF7lFD#48(?t%OkPvk=UT|QCJ=?PEZejU-5=b1XW)6rAHD@7+4OM>^#D=PQ31Wi^c+fZ% z3nD%9gV@k^pa_T!RWFak)_bTGlSu5dNbEZxHZ%`DKw>{f zV!uXW|3+f}M`E*s$`GhI+(>LGB(@w9TNR0|iNrQQVw)hbosrn?NbE2qb`%mj35lJC z#Lh)x7b3A6kk~CqY;YM1EnB98#G&kYNbE&OY*17&f*NArnJ5MZSb7FkQLwfaxIG4q zFK~Md$_BMRVeKVQIRGo4!Q}wdUQqi4RvzLib3pA&n7trvFgDm;kOLVQz@z>!aj?Bm zH-PMgr7N(#&^QIz3v(N|O$ag=+9qU#vO#?!Sepv$29W1K?O9O1gO;)2vJT1ywXtDs z4A7iEBS;cvCa9Cdz`$S&(hFKY!@vNZd1nMUmVto*-0lK3U>O(~Kr_^g&}jxxKZp_3 zDS`H9VdjI&H>ka3ATvQ8Wnf?c^>blrIzZx}#vlU&1E{OO2y!3;1H*KXI8^U^5L+D- z@(c{1eh5tOMvyotz!(@9K>aL6P{)pef#EPn9MlnDU|<0CK^V0mdM|;*L4nG^z;GMH zhAy)}ZkxRYiGu=$fq~&0hz;sMGcYjx0kJ`m09v*L%7dVWDrmV8hz(s%0dBv6)@U&> zFi3;Mq3%~fVuQ;usJJg?0z-=~Di2EZz;?SiSp!r}%PzA-nz>o$K z2Xz=37#P6i8#FviLE@lJ0|Ns?HHZxw0AOHX0GD;33XOq*p&uj;>Qpi?Fw6w8p>6}0 zdrf6HDp#D3I4X&3#mNPIgfW|vu;-LN>jE&rn z0Ih6*iGx-xz}TREB8&~{Bg5FpeG1Uf2232(b%e2}g3=Py4YQHh;JOEfRY( z5*u8PL)C-E7hvWeMN)GbiG2}?eI1E?7l{oTw}P4T5=k7ijtD0H6-gYlZUH9Fh?EA{ zk=VRQY;e5~b+aUrxI7YD6^X5l#5P1?Bj+7kByndXHaH(a?ea$w4@F`}Be9YDLFq{1 zxk&6{BsREz1U0`NNgSNNpyJ@Z5|lj=NzHU5_FN=3a=ruio1l8vBdOVn#76EnA?HDG z9}21$-1dO7FC*!_iNwB-#D0pz2Dd|?dOsqGe@9~fMPf69>Sd^UP9!!z5?d6BEsexh zL}IHWv2~Hy#z<^SBsRG32DR4}N!%NW9f-sZM`Fh!v6GS5nMmw>Bz7qhyBdkzh{SG3 zV)r7k!EGC;J7*$^&qrb}MPjc;VsAuZZ%1P9MPh^2?ZEQmNhI;}NbIXf?Au7}he+(_ zNNjK)7V75DNa8<{*#D8(te`$1R6TNkRuD;C9EmN9#8yUPYa+4rk=Uk4Y-=R8BNE#k zi4E=-L){aMBp!*xjz?mrBC)fP*o8>!awK*w5*yr)hT7GMB;Jq2o{Getjl>4`siAt8 zBZ;p?VsA!b??htnM`9mEVxLB0UqoVGM`9!Q-yb81gZuJO_q<0E|BA%^jl^a|>YKA8 zv3Zf$!bogMBsTIm0B9{3EDdWTsWC)inS%KN33>i5-o^PDEm-Be8Rl z*u_ZfN+fnY61x?N-HpVah{Oi1XM_21E|U0SB=$-q_If1tRwVXrB=$ih_HiWkStRyl zB=$`t_I)JwQzZ6lB=$!n_ID)qUnDj&D`L!t6N$}_#1=(jQ_@zXL@zPzOk&I@Mhz$n z!Qz_MZCyX4wi&pO2C|%ifdM?u4`qW^`@-A#voJMnNalm)1!3Z# zxj+~jxlOwWNj-Ak4SD<=G+zeOyAMe{ayu5>kAu4ZGLo8GNNmvjBFvl@NaDzCS8$&W zY7Tg83d&|dYQu0Nv4xP>$n8}HByn{lHgf;Y6iM6$iH+Pw^+FO4L}G*cdQi8;BZ-6i zdQfrXc4-Nc8gO3^s-_7^yc3CyJZ_KN7M+KrW+@VT4HA1Z5*yqHgxZDN{yc%C<~$Pn z8WQ_168i}f8@bK-2}zuiyhe#$V#k=WqzaHyHc zeaRFgHQ7k)A|!St5*s`o4mAh4|JaA5W-1bU4ibAY5_=UA8@bQ814(>868jhu`z#Xs z3KAQ+pZEw#{3R0m0}}f?68j$#8@X@DgVc8rMq*1Lu@#Zn8c1y9{-7C>xGfUf1&QsA z#73SQMeYM8AgM`5V&@^TOOe<$NNnVOUl)@2L?reMB=&qH_A(?ka$j!?lK5^U_8}zp zNhJ0KBsOyY?jDl(QzZ5qB=%<{_Aewha-WU^shtm=&xNK{F(h$WB(@3?8@V56gd}c> z#CAYpyCbpvkl4t5w-_YxWF&SL61xzIU4g_#?yt2WiT5J0ry#LsBe54Dv61^|8<51e zBeC}(v5z9L&mggp`(?L~#2+HDUm&sHBeB0Bu|ZQ!ur@Ggx*f&_&4t0(pe0Q(HfRb5 z#zr1*2TgUr#EEG;f#ar#1k($e&VjK((=9MIXnF(2Mjpcl&#gnv0j=qRsR6Ag zgRw!oAz|z|q;@{?xIM1*KcIDtFumY;cBoz8c_=6wd8~dKlKJ3ycBmR$>w-Y*;$Y?@ zw}lQMnFCt42~%?pNgO=S4mJM{k~s31JZL>6OfT{}q8~`=L7R(VYS@tKQ{-`Y5hQWs zxhf?japd(y21w$_WAAoI;;u++ zBEf5rpmr%DsnI}U<62{h+}CqKQtyq#2G8R|&5uM92d`OziX+cC<{_y8&*MYY)F6pB zBeA=X*vRvYGmyl=>zbhEEJG4si^K-c??crf&n<%2H9^I}>zbf!@cK+B`#O?2_mJ4g z^NHYfn^5(ik<@_KZ9>Hvk@^c9NNnUeMDQ9;sCro>H7ZDKZ6vl45*vBm&;dytyv7M? zrXP}cC=wgIE)=Q;d9E-ENey_76I4wFl6XB5yA6qrJU=)ENqjaE8@%2LYUWBL@eN39 z1TDBvP+mEhGfwWad*QG$hVYseK8LdYk@jF_N zK*E8Z^$7A>ku;>bCKriag2b*yVmBeNk=KVzKoXyh#GZ%5UW&wCgTzK&6S50Q{2&th z1QPo^68jnw8+jeb6C`oaSv{~i^b?Z!Pb4;I6Dmv%^4bqRq_HVcB(@9^TN#P1g~Uc) z?_q%?ZjZ!vLt^_Pu|ts9$ZI^3ki;{Q*ab-JawK*g5*vA4M-P(tWF+=1B=$li_6j66 z@>-5>MOE=xirg+N(kmZ$x5uAhG+A*wc{M zbCK9fkl3q{*qe~pJCWE2kl4qO*yoVgSCQCvkl2rr*sqY-ACcHUkl6o`*lcWw^)|dn zY|wsdSeQs7i7O$oHIdi`NNjT?wjC1N6^ZSG#12McMA4X!ILSkP;V&6bw-$!CULt?*0Vt+wm|3+dn zu_NM(6NxQ=#1=J_D5oeA+ckT*eOVC(AiM1v{Zy7 zKH8sxv^_@G`9s11d42(TYz=wc)aW{YNLW#8oj)zsS^Y#Bmjj()4a@uB{f5vnC_bby zALRA?GDzZ}GbdqswUEROk=PbUY~(fkZb;(3NbC?Kb~F+jy!R05Hsp2t1xRYjk=S)e z>{cXp4-y-Bt^O<|@r6k26-ey$NbGG$Y~=O%N07u%BeB8z$D!`Oi6s62iH*D_{~eMz z=xk0{I3w>XXGUtDb0M*j*Wn}YF_%YDqlU!RMPi#Ev60u_J0XdCBC!LI*x^X*I3zam zdixwC@nR%)6%xAb!6A~MFUHt(h@#9GBb4cu~NbEaE zY~;1{uaLw)BC&rUvHv5n*^t`j$m{2k_s&ZrsZl~=Ya+1?kl4s;=IxNgU6I&6NbF!F zb`%mDd7XR)l6XE6y9|k4i^Oh0Vk57OpM)en6N$Y5iMip17IVjCl|t&rG` zNNf)zwm%X(42d0!#7;qCXCtwTkl2+->;@!uI}*DOi9HpGJqL-s7>T_KiM;xosIubh%iCv1s2AxX`b8|D2co!0TA`*KB5_>)p zdl?dYEfRYR5_>li`w$ZQBog}q68kz5`yLYeDH8h)68kd}`xg?M5vdQtfyCxVVv8ZM zWs%q_NNjB+whxv9cnlId8Ht^R#4bc)S0J(Lk=SiW>|P}H z6eRX+B=#aC_DUr71|;@&B=$ZeHt4Kgm|xByiC;!y-$G(PL}I@{V!uaXe?wybMPjpX zAo{=DNNgb_wj>f;0g0`S#MVP%n`#Fjx~D{f zV!uOTe??;dL1Hs=A>xY*i7kl4mOx_5BeB(x*t$q;6C}1Z659!h?TN$=Kw^g@vEz`~ zsYvV`Bz7?py9$Zjh{WzdV)rAlry;TDBC(esu~#FpHzBciBC!u3v5zCM&mpm|BC+ov zu^%I`Um>wSBC&rUvHv5n*|-sL$BV=kL1IfIv6Yb6nn-K|B(^yc+YX8Cip2IoVh1C! zqmbB%NbC$Gc0Llj42fNf#BM=icO$VUA+cv7u@@k*mm{&)A+fh2vG*Xc4kcF24#b;%z&ARd{zk`(%6?M5?cm|jeG_p_>3~BnaJmpSRkplM`DA|D}$={MG_A| zVk4hPl7u9liNr2IVwWSa>yX&U=a7Kzi-GxfGLjnbnT=5QEJPAtfy72Wdjx#$8C3mV zBsE8n*r$=$myp=V=Z%2RJ%gG9KKBgDeut#~D-!z;5*zu95iX>0Fz^|VP;(@Z#KC7g zLdDgP#F5Vx0iSyYRb!2$#tDh-iNp>-Vk4g=5{D$7ip0)AVizN^tB}~p=ZAD4iT5M1 zry;TDBC(esv60UV*@Ps%6N!BQiG3W2eGZ9@d``$6Byr^PEngvtgU+{vrLiAK;>c%% zfX}*whBGhHc$WwgTN;TCKKBx;9{D^F10*%(NbI3rJ|pj88H#654fS>1BQ5=a&cBA` zS@2n-(7XmdYZS_!j8vb3&U=TcM?S9%eAXyb{dy$z+mP7cvqqt6z-Ns@*~n*CC^Gl(6JCMY|XZk_Kry+?W zpEI@uNgRB>A5=Z~j8iCkCz6^2NNnV@#m*s#Uqxbr&p3se13tGI%6^5U2KhX(A4uZh zGftuE*^ufHUL>{%5*zspF(o8%@ENC2bHHbuLfPg>YV45M$mfRnAc+SfvBBq^Ld{7; z63;+lBcBxpK06w!z7|Oh_`Fl7csG*xBqTQS`Cto>#Frzn*CDaDBC+=%v60UNJB1{E z5s7^RiG3f5{S1kXd=A(bB=O%!Y$l|-m=lRDfW$^V`%4Z_Q}V1roa+iQR_8 z?nPoxL1NEFVlP5suS8;RKw@u4V(&v@A4OuHL1JG5UdkqqMGZK3j68j($`vemEJQDjF68kO^`w0^JH4^(1 z68k3-8*~LKERNWb=Ck;a*rG^m86>tc5?c$2ZHUCSKw{e?vE7i^zDVp4Bz80sI|+%M ziNr2IVwWSa>yX&3NbDXY_GBdXEF|_qB=!m<_If1tHYE05B=!*`_Gu*cB_#GuB=!R& z_H!imJ0$j3B=#R9HZ#(E78ep*5Q!~;#Fj^5t0A#$4B$^TtQdX@sor9m(f3j;oy4*Pjp*cch+kh-@b4 z$}U*=2qT3X=xSS-IOuvU7#no86^xC1{}FN;0A0%jQv<#S7CPqajbuLP-dmU&h-K@y>d?DAr zMo8){k=PDMYT6c}lqQBQEj5d>LyzIofhUJn>pHMfaJTu)@DGCBjkFS7Uyq+uK9$uc|g}~ z!q~1z?H2IetkCuea@`k&q$UxGoq@#8M`DBTX@#1DJkH#Lq^28*Jqd|D6N$Y5iH$ra zvkpmoD-wGT5*vJfE7T3Aki?PCAHIPkejkbb42ccC%N1(Q7bJ1yx{L{_t;LDN7C>T) zBeB8vQ$x)}zNb-D|0}=<_bCL)Z2aTnrL)oA+_;aCb(47y(P&R1HtP;uw-8TZ-rw=j*)JFlW znE|mu;nNLO0~+I;3T0<9Ffh!AvO#CFoFKFCbayw)M8 zIOy)glTh|*1_p*JP&Vl9#M@9dC=BmI*`RTs=Xp#AtlTnr4L zbOl-)17h=q~+boWaalnvVV&m$U|`??wI?M(A`A=yAT}sK7#J8p(u|aaIC#${lnuVe z0m=sN-GH*eW3W&*_|6(A8@#Rq$_BT+p=|KJODG$B7Xv6!F)%QI_g_HS;Biza8+`8! zlnuT^6Uqj+pP_8<-bpAMe4hf84clW2H%4TWrN$mP&Rn~Ba{uk z69LKw?}LD{Hz1h_zS|Be4nAWI$_BS%p=|ITMkpJ69yKVE85kJAdl{f?7Et>K$_C$0 z2Te%ebJ9Q=4Vq4fp+NdU`4OfTbcYfs9fJ1X+A}bKj^G7jbakM#1XJgLM;&PX0HzL9 z7P3IqqMHZGr!aM(`7ohd4{QT$D%8MYgKp5RTP+o(n1KnK(QUk*1>Ogy|VCq2gXCO5o zjIIuJr!Gt#Xg&v|287Yof$}m;9Vl)OtO0YcPoR`fH1l`&^!}NT^OEl0gXw( z)Pe3a1DOTF=;ndSQkXhWT?kSG!szNicNoLef!Zt}H6Vv+psD~=wj!Gcx&sK5?m&7#7^DtFgY<&fF!NqKWMlx9 zF(C6mZ7Yx*$UIQFh-@C{4j+&>$P5q$sRPllFoKzv^N11LUICd0nrjBB1L*_L?IQUX zwD%7r2QmYMVQf$v3dDw)*Yb!F+>Qj92WszuuGh=v)a)JI9gS2O3KP&4VGU z1F=E(`GNcd^Y4U5j0~W*2gtvmwi`$ep=E`_w|BxK#0wP3=9?!CYXfT3%Uyo**t*{j0~VQ5y(7H*#nXTnFk){1?z+m zuLT(xV15UQz{~^P2@lc(ldJi_$N=g~fXsun>pqG4i^Ih$UIoP4x4#Ak_-%> z`%j_9;WY2eUqm?$Yu8~jPfwD80hG@OnaA;ukpWZ>f!qgc*I_d+Ns@s<3}zToIz{ss9L)~>^5 z-a!QhhFn;n;W4j(n~4E*?lj0eSi26Jd3s6=450g2VNQe@jUFElc$pYL{Ya2`uy!3b z^GuYn=U;U5p71jW-Mx+@uE76{{V z-7a737a0X@wp7O6Fo{0f; zpB2bF(D*AZ^HhT%W2YdufiTQy^zup~nF-!csl?-7(;x;0&^_KDvp^V^c?QW$@OC2T ztUFxp+Z#k&eXf(j1h3CQb0E0P`xwN)pa*go6ytJVPYNQv)Z_85d@ut8=-zLraX8DX z2PsSppm9!6e1Pse$K^ip5aQyaB@GcDpuQq5^VCBa7;0giG(72LP8t)#7if6^I)ez8 zc}v2HOV1N>5a}6or!g+`zJ)U|fW}h@g`Z9?69Z_B929<_y-B#t^NV0$K<<~}ir*`_ zObnngbdY(VwKOpEz~js?$1pH3T!>&`*Z}J2Ld9U_9cF}#^}^cYYx0;F&M-sDXVAPG z%slW|H3I_!sBa1~q9Kui!6yr53IjO3fOz*o&YWgs0QD0 zKtf>5dxjBf{{wuNFIWYHa6QAw02)Jq@F4br*k957QBlMMb}J}cKXnvGY{0)MM{f^=;TAU6sl7W#S4(@M|&<4<< zJdjuF57(ip+AU2pTacfZnpaY+pITgCY^1NJ56TCic5`w;X=aLot*t^uKz>n) zduoYueo?BYiw0VhTx?|)BpZVKZRW_($iVP`gF#(NU?Bs8&hLW^3>O)oVulP1 z21*MG85j~77y=m>RxoW^z;I~&|GV4}EoxG%5XJ!o1`GBB3Je}>2NW1OSno(QGBB** z*tCFQ!)XPW;CQi7(i;7(}Xt}GBB)Q=HcFOT4BR&1&A?h&;K)+IWl}x%7yUL zv@$`qvhr}({DCWK1RG(=0Wr#xnTOdCBEsUxz~G>?UV4-5>Td=1LGW{nJs7BE88C^9gtWa5$H;pVYH5>RAd zuwc>nFY!5C5gqL=013g`2YX^ z|Ct#WYZ!PK8IZ@)LHm6{cZf6aDWHgh${TFr;Pxe`@a1zrQ7;N=H-W`b%|R9qWQWuj z3=Axc7eHrDbb?F+r8XqY#KM}HSHi%|!v0T@k%5_sohgWsftis_(2J3Q<#iAP1CtOa ze=;+22%P~91G0ifZCGBkFfcHQ8G{^QsK&^^B&iBw-h9r$z$B#u8Y<;r<(kOIz|6sZ zGJ%nSnT7Se3W#F=B*DPI%EHXTKKT*@12ZGXL{&xxHWtt(DRxjv$HoFGk2qLX`Y{(#PdvGx_uxEoD&+@^8 zk%7JN7RXBza~T*oazI9KUpT|Sz{4>GH0sG?^qGNyV;V@9fydXKfq`Q>ST&D24+8_o z3=o@xfyG9Ek%40-Xtb9dv_zPV1+>tXMe-H{17`$CE6dg!3=CZUpk=DOER4#aX$Zar zphdcTuWdlB2$r@AMg~ST(D8-*$BY;l7(tF>0Hq+tIiNeV1QLtV85ngyMu8$!uril{ zfl&`616ma&w9$u=0d$QPD=3*T2+J}sFo0@7&`G+2re_%#7%f2y8bA}=B4C58Kn5{} zh=PWK<=7Y)Kv$88F~%|)h%v@6asC%$jAk@o5C;ul`m!-Fh=O{`A#4l`pc8&!%0OyC zsw6QAvz3mX#Tl;iUN-!Y*NrUQG4hDA6(oLBsy^IWu5ujahpdbO|D#kgWwxg{1 zdj}35Qy3T{KoJ634=oNFtXK*1Gbmg^L6gtS zzyR|KJZMBgbH5-@g6`=OV~k}gW&nj8h>T_`W?&Ent)T+xUJua?l?R6`NL~_@oI(1r z=w*;o?_y+N1O*ENC=)Zz0bLv=ANGiWfiVEYWSSTt3|jLBn*S+gVPH_mWMB*grE4!n z1_n{ks4nPsP&F2iyJHxQ!I3G(7{zGF0Jau%<);{9JbMv?kxDUxk{DwgqX)?lOGqY#omQ0y=S#W1=ZQqGJF44?~nq5hJOImy7lCI62rruDJ@b072XWy9jhjEjy_2R_)MdVBpve z)&;r(i3?oXgCdU$%msS|q?${Koq>T%7es)rL4x`Wv>Jn5ot=S!jRh26?4a2vc5^V_ zmYsot9aPS16|Q4o;5^9+ats&PdIm;8MpZsxZf3qvaY04_@tIEI3=B*v4BXsy+@N!~ zn4wHQ1_l-}24+4hZfkB&VFm_Peg&=-F@Puz&^$M%D5JV0qc8&l7b{qh zTbPlVkDD8$6(q{T3pdAtn}LCsg%Kggr@_F?C&SCYz^}&$u}oc3kWq-uL1MZS*hm3Z z24)VBNuI(?;tULeCUCPrTpb2Bi=AROu` z46+aIR9RLOx5?=-+Dk(GgrZCy$bMWEdH6C;+Xp0*$;fGJxibzu z5Coz?{a%QnAQrd^VF&_IkO4=KZ6Fq;`x^wJKy@cX2goQG1~ow#8G=C+sNcd0SpjtspkOq*}5G1Xj2`iYT3_{@02?bFwwV_CA zK{Yy9EvNoR7`#~?9o0ajiaM+OFFenGGX7G?nJ$iS@22NM#JVrA0&0dljLG?G>pW1M< z7c@qtw8gI4;(EP;hZzAmf4=WYfD zW??<3Mp1nT1DRw_WrJ{;Gq_p3eWx)nFozqky8pikGB=K$)wyCm0|T?KAuIph%^;yb zBUb5aix?P~<`lNOXZjcFKat zTc#lLUJ^*$-V#JwwS&mt;UMw;`ylp$IuNw!c^uH!kjRqBAhNIvB%ZqpL`s77 zy1xUlSr>!IJGvmU4J_*%3R1spF^J3%1Brv~5nyGARRf7^&jE?--U=cQ6oEt(+(GQ) z;4q9l17e>|1c_&C2C*%FfXFxn5P1&l>rKTV*~4!^BAyx`wo)UA>;Z>%OE*Z|UJpbn zwt&R{m4n!yz&?rthx4RQAdz>3 zK_K=V5fHgK5JY-cfk-!SN?6bbV*7)-^9=1^zfZ9NnV^uu%hpYgx!&iXVJ>Yox@D;@F{0AZzP6x^6J^-=Z4}!?wB_Q%YI8GzL@xC9N z>L!E3!8-#aYXvs>#|9AlW(CNEN$wzW3pf{4<%7hPeL-XbBS^du9FKDsfY?spyddiZ zVoQKSxCNZ*j9Wn>3s^uTXuhA7VSg0Jgz4Z|>jsN^fzuvnWg9DlXe>zOnGz6rBN?Rf zG#`lEZw4ZRXMxBla9)eg0^NSDk;5c_Exh|C3>Pzuh2;x9oW^57gK zcLBt{0}lU-ydd^0evsb9N+32nIQ8yq1hMz528lbY1(C02gUB^t*J{oM$rh`CL=rSW z>{tO1Th{g$XQT4Pu|N0FkqY~;%$)Zqn#k~{3H;0Sp`I@G=OAN^g(RVNg%f54G?=bs3XSkWCDooCJ7RMlnx?y zf_--koLWA&fMnl;#dG(A*dpa1HQ}I59V`qCtm?~}85vkLQa~kwmj5pX2G$P7$cYRL zteuPoppfrkZ28Qr|73~cil|AHcE zC*uZ?TXr$Vf~eh$B@-AKSobhK0$H<{F%Og;_A&B-ih%u$e?a~?z<2_b*$*-vP+(+W zJ;cav$jHEYnDKZb0|V<3#;KrWdX#Y3MGO(I&0~O2`e_R+CSS@!wVPIgj`Ufgv zt+#;+7@NDGL}9xKl=bc2?qFbGwOZU7a5PVpdrI3EXvxr-o3z3bZ? zMg~?lb5Ig;@2g~FVD;bwRcM})pt$y049XV1s(Tn1Sp8mrvY`J4P;nS=160%np8n0i zz#8-slof*4<}xy{hCBilkf9qvnJnzI4+8^h_$yGRk2trFfq^xW-;@2r9M{q(KQT=@_U&NS?Zgfq^yUEhw9&o(C21Y4;Z} zFtDaGf{KugM?4G+teM+ESuHCb6l2+IL4|h?dnW?}Ywi~zMh4bA5m187_XLG@!7@-$ zROo5M$iP~3$DDzIwfK<N;-94K$)k0HK;;sUV=msi_dl-*{5^*o1#AOBs);`8bpenqd@hhmFpTNis zDvl;HPTmH}5sY_0h4f@bZjhN%7}Y_(oXU6>R0B+7d=IK9r!!s!wTEUf=E^fNu+C)M z4GOGTjL$$SXEW{wC7wl$cR=zy zj0tKCpn|3~h>?MHFJlxaR`)SVpJQNP-OuO;a>N0~XNrsrtOpsD6&XMUP1bA%P(iZ@ zWY`hLc2E*J#^?&FCXO?n0OjKojCG(~aFWpspjM( zNCpPh`;2z)85md}Fp92cU|@a7_;W1-1M4HkQjjAaGlDMfWqrc9w1R{sR1?i& zV%){Rz&e|$2c&WiQ$`>o1M6HSM^K`k$24D(fq`{CQ!A)&S;WNllYxPCF_Q$S1+;`| zI;e5Glt~#BRV$cEL8bXhrkkMl%qpgL+zbq?tC=i8S$iGRAy8si&*TmORQSurrM zZe;ozz`($|g=tF+BLnMJrq`gh)i$P$pv1SGsS*^(JDBo8d3-mM?|M)@!{h`?yL*{T zK=uDVCNmF42G;#da-hU_h^YWnnjdCL2Nh~Zm~t~28CZ`p*)=gTupVQo0X2S3GD!$C zFtDCt(gal$r!~MZ(n8l+sDYjdX4EOs1qn+!P!9jZ^n4*B1M63&raVRl)^AJ}pkn?zlQyVC`oVM#6dgaA zltAV5FQ#Tt>-#rT07%~-rWR0L`IpHO&3-b?952cm)DyX5~#_R`b!?rWWfWoDNnG;lxb~3wwYU(a#X;Dy9g1Ht{ zF7`0Hfl_2IvlXcJ?_-VywYvJ5%Rrs53Cv=kHrqsIc`r~A#OwfS^-pH51(n)Um{+uz$|OX zz`(kYc_paIT*O>950qM&T|oul66Sq*3=FJGnXiCy+%o0>P#v|L*%Z{$U%~vkhk=20 zC9@%@XSIr%S)Y-Cbv3gjsOnn7{1jAzt!2&twZ7Le{{>~y^~@Dkpu&n-^)4tSGv|Ps zJe!#JfjV`YnG-8JDmpK(wVeVs=1(ihmnO~JLGO!+C{=5WKtT8VHl_7_ilx;p94`zK(2lgj( zgEj*L>o4XcP{sF~*-@I2f%Olw0w`GjGM@rfA^(`SgDm>b%m=E*8(8{4RaPTQ4XAO@ z#F79?gUu`(KvhT!OAM&3)ygsj6t`_Gji9z$JIiWNLDs>-2ujJFEGIzOsf$Gv)G_I1 z*((5QbF#>RI)A+^v7ofn$5I1I!u>4TZx|R@C$MY)m6#J**g!?>43={s+vl*@fZFPF zS-e5o=domh`jqoo%0a1M0gH?WDABT<1UYvRiwh|F7qbW&GcvF)VOb68r!HkN0tMtU zmM3!<7+9CH90Nt;N|w*>85mesu_%M8g4HaqKz+?MEHgkhtYtar3aV3C>OoPpp2Z%N zVK=b61l124S$={VA)8p9fI9n|S+0Xh#VsuVL2a9@ED0Ausg>mqsDrVcWyw@V2G$)c zA=5yqm1Q?*>|+;8Cn#y`W~l=;y!Nns1a$@XvM94NFtF}p$p?9QKg%yrfpkZ)hJ1c3tN4NDowhPNz^py+?cvJ6ykzGry@ zswqFQECe-vl1Q-}tT|a?xpIZ^A7IMD~D%m_`K+Q{^*PwPXh?XLoQ*l0yX`YvM7Q^n3l1CE^cF8 z&cXrGzJi4tWZz1bm7tdADi&u@NUUZt0r_tYO9-f#TFWvC)Pz{a@&RPndX^Qk3=FIr zSgJs6_l+!4Km;AD5(Es{RGtJ zwNVH4!)bqQ$c4{P;DP!6tn1!_;%g06F7ZDgDc z>NRvQ9s%_edKk}wJ;k^eR5DIroCzA+p3E2zlAFTF0veT`%BTrSB-0uDKx2|K7&}0% zh*^v^pk}}vMmtc&zm|~;9L|iYoeT`D>lwF$1|2pqN`Sh88yO=?85meMGX{X7X$#}+ z9tH;1t&CGayl;#*KxOuK##Nw3@()Hs(Ad#W##x|}_!r|E(74-g#$BKm=^w^AP=P#? zNfQ(<3z#B6&A$~)TA(mr$K(p?(j8-B2eqSbG8L=@H{U;iGQk6;L{QFn&J+bI3*Rz5 z01at;W=aC3{+~>$pi%DsOkJQs@X5?aK?!dQvj}L+X)ALaCfR_A(#h0u6OB z-~SI9>S7K8bym(XZv>UlPndszBJ~-w7bsR=Fe`y7{+G;41Q{7vUo*Q&fm-;?&7d0p z7xN)dclJN?Mo^qLu{;Ik%QlvNP=Iu>@CAdKsVrMSqYUd=NdW73q?tq#r zyIJmlD%AZft3Z8-!z>b@5sKq1EzO{QGpo@F1_ssxto5Ka=s{LdP{DSHH4(Iu1(ZZN zGGZAR*mxU3jRXM!(BdqRsF@n5VQ1$Ks!Z&;K+RppE1;NjRR-nDS&Uae%gsOvIqrd) z{QTfDTL4~Ka~p!1RK!1Jyx9Zl)G=1_fttdMpe^&P9~pZ=?VV4IwxF4W&y43ldAyNn z7szoE( z&@|N+rfd#S9$@+c>NXx`;s!Ouk1&OTI@d>;EI~nindvXcfmfKyK&9?grWQ~xe#~^| zJE#HA)C3B@r%cyCZMM%$UqSYLVR8U9^8PS=1%*`$b2F%b=wj9aIij0+HK?P}&s+|& zVKTEGsHHN4*$hr?aXM;wubeS|Lx$v(8i3-YrYH*1^pz#UmbD&neToO#l^Qd=a1&&u;>12MEju zwVnj~Ksik)9@L=|769dI5jIe-M>GzUB*nx)b%Z!SC>$gvgNg#l2vB=lsteRtkX8lF zN6EYcwKinyKyf2?8PxZe?*a8P6#PI*ThSR*oGAH%1__l@$`}|}Rk%ToLe=%4qEamd zG~lEz0qWLkd;%5!nx{eS4Xyd0cD(jcQ0bu~1FF<@jX=K8dkE@P>N|t_s|FsRvf5C! z1Df&tq(BKa*cmjK7xEaCv_exs`62AaYX%0k@HL=e(ioxm|poVBo7|4H3jNd>-b}M5WXg;Wo@d7A; z?q{k3W#a=(hd{O7L8jZF7(2vN3aYdZGX;R+_y|)fsMI*hqzZD=F{WprO5r$DEvVW% z!Bhzv1vtsn><8*;FiC+D=xL^jpzt`uOn&N4j!DLKbv25LZ@XPO1-3146;0Xh3R zlQ$?^-C$Ax^{d`6eE~JE-ZO=PnvWlt-WV`|#%)qSk@<<~6Q~UO%v1xanJzFlg7VBo z=5A1?zRc_bDm$+;OSOZ>6`3c3%IcfUr$Hn2x0pRa>Gn2r87O(&Vg3lpqj#A#K`rfj z%se3N_nGTJW229lpM#p>kC}gh^6xX|HK69fbLM@Z2GUDrB~VUy#oP(Xhp(B>fI2^K zn2SLzoVUz^pdsgX%uhgl%FoP`L4o|0`8{Zg@CUO1sC@d(yabfg|1v9q#tRx){(?H- zO)Qf^)%bLlB+#_%43;KPojH?b2WVtr7K6*E7mInIiplZNl;PedLA?q?PdsSVYugmS_mF-pdn+= zVo)OWN(Tjs_f}Bf!e=3<9QVBns@MGNK}#R}!$58hs0DRw0(a_w=6QaATpqj(R9J@8 zf&wk{DySO}_5;+M2i!9^d8ibPEG(dr&9iaD%#XU(8zDvY>;evFep`J%m7U&WR`<^8d)nC z7#UczCxA+loKR4uo%;yX1I<$d_44zRLCYWtCV<+(g#w_#_oC&Xu5_^|XxOFX0%*jk zbRno(Dq9IExXQgjBUu&JpjJkuA*dBn^&T`7P^}Fv#3Dg%tNjORyw>@ELbbjb)Vye5 zd<=?`M#gGTf4YfL0p$H=MmbR7(Zcu%R4%nL)`J>>ZHytH_H#R9FsNP8!MFj`^6g}F z0986&j2)ona5rNUXuzh2aW1He?PW9pWy(HA>jDM_)_%sLpib)q#;u^n|3t>?pelV5 z<5kdj`DDg?Q2TNUqbq1iWGZ7asIZ#Gco7sK(;1aP74QtkgP_zplW`Wv-?JG1fy%+z zj9QKi46Jh)e}W3fxr_#&N%47%Ye2Qie8$(H3VH$KCJsgh)`g5GK<$G?j4Gh%w8f0K zL7nR*j9Wp?i=~X&p!BtjQ5Mu;UCyWuN)sy>3qfm6Rx+LgrRr6T{h;BS)r>}<{@WTx zc2IL|En^s{6kf-;1XOgbXWR_RKpPm1K_iJ98LL18e47|gff|LI8S6j;FIyOSK;_a_ z#vIT{!ZyZ>pc-~N<2_J5*unS{)UeyhI0sbn?P7cks{3{`c7ys3dlmT#+RU`&^1P7(Ae*F#tP81{0+uRP^P@e z7!J~Ri_r`;dVZVnCMaLtVN|OD&0;W~0rk`FF>-+l`1_2vK#he5jK!dA^O$iFsAu+s z5wx_K^(mtc$kWdlH!fmiV13T`8q^_t!MGAMUiXr*3RL91V(bG=x4vf71&!ptVcZ3( zLf$g|1f`{SjC`QP_nz@0Xh7rxqdTZ5`^fkcvu+Z(5&ST#`mDfg`bRfKuPfz<5G~(zZnHU`u;FVfjV!08IwTGuz!qG zL3O}?#uU)Za|4qM$l6Ax%b>nU6Vnn<%cz;D6BHmVOg}&=q?O45q_2%>A}EElGZ}-L zCml@YpcY~$(=L#6yO<R3%-QU(kiMBrvq2T+ zEG83BaWtE$A5{9xVQK`m*5)!@1dXZAW4aBRU7gSL3=~xhnD{_d-9n~gpwfI1(@fBy z-D0L~pa5CIv=bCOOPTh8s=8%N(?NML6+Z(+1G|-$tf&pyalRNgPz^Y-U;tT2HZs zX)&lE+{!c?l=!wW@q?=J?MzER_U&NGvIPw*GyMehbaydnf(r88Ogtb*>|qiCHQM$v zb$~)?ACncR&9|Q^2h_wpz?1^2MGrFF07cv(rf5()JItg9>KYtj5(d@%Czzgtvf4?e zIiMEy8Ky4KT)|l;Ay9;$V|oM{_B+oc2b%o4z*GmCEWN}e4q6ips&)h`FDTirXM7Cm(QRN109CLX89##>>6;k;gUZa!jBKFp!4}3sP|JBI zV?L<6zl$*%WY2C!ZqT^&9!3?AfA=#^2Q8>O#MlPfnsJnIGid7XB;#{X^YRoU=wffy z(~O@%>EH}wGpI5+%jgSg+@52+1FHYdGnRuUB`+{O2aTp*WV8o0;w~|61I?^mVO$6b zhpUW?pkn75qc*6KbDfbBRKeU}{0mCNHyL?BbEvl%uY!u)+l<>l;d_^HbqZ)&iSday zXfTEGA*dRDz&HbxY#%a;g2qZ8G5!Q){Kt%ELCN6><6Ka1J!4!1nz?_@SP1IWzF^!6 zYUjOV`~ylVuNc>Y8WgV?PlJ5>hA|q{{(Z~n3~KnkXS@W;3LhB%g8G^t8K;3tgHMc% zphoIv#@V10^M&yeXae{vV-F~MePfITHSB*g?gNbg{9(KYYK8q}GzVpce~j6nF^EPc zW02olm{r5A1J;jGl_#*eN&jkKo$Korgl(vp3VeX+s-6g1vHx} z9~1#|m?S|1D|4AxKq+KCQ!QvZV*%3(&{*0+rhd>=z#^t1P&Qf2^b6FsTf(#yq+}^m z9B5U}GA1oh%3HydWeHkx!L(TmG)u%332OhXX0irV?Q57mfZAqjnbbfH=5tdF>Pa-2b#{<&a@bm=XNluf)3II zg`46`&`^SMJ}9_ULP6D)Di5d$r#2Hbsjt}%8WGo84)TX~1jxlY44_de-RYo$${-O` z=NZlgHG_=qfpW1i2WTeDWFe@%Vk!e_R+;sIM%c`IK}DIx5f?@VR?BRVjaJJ+0~6M4 zpyrN^E2tQx=<4;gD&SAU`3WB+emq5Ls`Ha^=6Tk}? zLqWNC5o0ST%`av=0t%j`j3+@(S;kljYPPLp3;@lQtY)+aT~-1LGygtN%^0jxz`($o z;0qc~O6&kFQ_Effs)BN&K(j)*TR=_SyvA}y2G;z;pr%EE0;p?M*a<4;iV8rPzxY3> zLsgOt+5=W<28w|)2~bE^27;!jt8zfev^oWpGU{)E27wzG*MVAVjf}5AiLHr|85I1@ zjD4U!R}14qknydIF`zWi#<(4n=GqwzK||YJjEsWdHeVwsLCs~{25O?tW9$V@SI%cF z2aPu_U~~tK7cXR-4r*mDVypv=DJ*7O1)4Wn!uT0f?k;DX3hJ`0Vmt~;|7#fqlNdn@ z0$JvON7cT7T7Vr)zd%j$iA?ICb#;@OdO^!zrZKgG*1s%c-UeEExtv)M)NES8>;Xz6 zE14BQy`fdi3qZ}7)y$osIodVMT;Qb6Tny@!uVc;z`F1_C(r?hPKJzC~8r{fz5Hwt} ziMbNgjM>b57_^*r3$qI-RJSr`f=c9V%)jLs7+AM6M}iXU4(1b}MF2aQ?Ld=syO^~> zg1ec+K-J(L<_1vu+shmbiuHZW+@P_!{miwX(&Yg2T2LxJ$Xo=P6gtFQ4QekPW)1}v zjYpWLfVzQ4nH52${4wUepuzd$%zr?w<`c}NpmyC!W(80Ibc)#)l;%$}zX3Hs&M<$i zV`N}G%ghWKiaE#p0+b%lGp`5rMJ_PAfjU_inY}ox4AOp+`FIF%(0R8LQ1Q3VaIPiNr)bv9?PNP`m5OqMoK!8MEJ04OWZX4wO( z)8??~gLX97|Z1f>Ovb7EzG3 z%UKjajjt6fwxEHpl`MUrXk5jT2u^$~9H7j#mL&%?y}gcQ9cY$pJqtf5KWt#>0`-VC zvitxwB{s3l0Cg=lv+M@73bwFhgA(5fmORk9ppz_jK~>EumVKaJ<7t+=ptk85md~Ir z+gX<9;0R}t1f`|(EP|k->H>>2s7-W{B^_kuC6;fX^^=!b>_A!O3X2%1w{(q#71U0? z&cX@G0XJAAKtsVdSw4gM*tb~rfQC$Nv*dvqFn3sDK+|}4SrofL)jCToD7D^aIR^64 z0~UW!$NC|Q8>l)mJxqo*#fHCKC;XN zl~SKr)_`iGFD#~@_TX2RH=xk{#-arp&i>Al42t3(EDWGT^ou106xP34>_J`2KP(qP zPWsF85|lpwv9yB%@;{3z$l3P_^p9tL&%dRcivxwwyYDX1OL z&-w?HLME^-04-3R$hr&E-<-tS2I`tDX59u_M!1A^325YUDQgX=eYA{q3uuI31*wp0_E@>tdl{V`kkz7paIie ztgk`E{chIJpi+1b>qk)OwwKikG#?BIvX^8bemNLG>&_RH6PTd zxX-#Al+host^>8Xp0QSdc+XjHgO+r>W-SB_8opsY2MUmntdBtP@QKv})MWd?8VhRU z{bY>*^^5MmMot292UOvrPwefjikkL4sXur$J*e6WA_;iu;Ld>Y#Kz zmCXWF)+NqJkPVkPg+QTnh4VhB@W0M^22`-z;Jg7UDsOVefx1bbI1hm` z>}O6>(8%)_&NHC)=2yYd zMAIt-#i0Ia&}ve{^Pn+6swGi zGjuhmm<~$>EddUf1(^^j3QDh0S3sp)^nOsC6Xy;Z<%|CXYGx(u1(hmE%%D;AM>D*hmisjSXhlg2sb0dqC+w>o2G)pJN4zrrh74WKJiuzk^PqgNj!_>p0J@$r4OFUaV4MzWd~Rgq2K8AsF|vXZ!FEOkP)gjvm<}oi zcQOWpDvMo=pqp!1cQZdfhZ)a+x|c^7c|gU|QN~bEU*H(y3ea|e6O2iq z=J-iQ4^U#g#`ps?o^hSA1vDITgE0}5Aa61{f=s!^*asS`y2I!MDpT(=R)9vzo-lp} zW&Wp(T%d4z#&{akm3Yp09@KaI#MlSwW_)J+4r-fxVO$P!{8z?mP}=*(xB@i$^PTY} zsAm1a7y(L3KN;78Z2!gB2Xg#x#*?5-^@lMSR6ze_Yyh?V{xLFxS|k4%qd=pl4NQwb z5!T2w0n|KeVwws{iOoz)Kt*y3(=AY|zm;h@Xpp~+=^vUwrCse*=QJDH|} zs+=ySbkN{&H&YNO9(tIxL6OtTWDA;->SL1J44p|++5_^GYBMP8)lP!e0_iq^#_9B= zLH$DgrJy`$@Cp=9h8dvB&gcoKJz|^*ig=SwP^6kNf(j?IkDz|5`6|%D6pI2->0_x3 zs)?+RgQC->9W*dxdll4&vwH|?pW1hVx)TofL0x=DUQplMc_%12y1oVVD%@6rS`+T~ zKoylIH>e-zwH8#Y`mllKqWZF+qhatTH)Mm~I1~rH>-+i=Q=74I-R>ojZ@!Q7O0;-+b z852O`^Bs)aKyA}*MoUnuxrb37)a~nKEC3aweT*)k_C!D9D^Qx6z~~5S3{7P02Nh$J z7&n2+naPZipt@rUqcJFnOl3R_5}d}k7nItkGg^UK2{RalK;vgK8KXcsXci;rfGXD6 zjN+gaG>1_IWbIr=K2R!|$M_#)!+geLpg!Ls#<`$0yqK{AG_A9Q@fWBZT*`PGD4UEd5*`|$*mp}#HCdRoSi#9WcfClEbFg^oiz^#l9H=+4L=70fc2ikg2uT*ma zs2QtO0IFfN1wnPU&TUW?RsI*W?6%SjG}JebaVKaSJE-Ae?3vEMz-Ai+I_1Jn#)grB z%{~b0*3#2dYDM4yc+@+ziSiO7lSzUCJjxZEl0m|4q|HFXU@}~w@k?0=khya2L1WqSN+4Yd<)Fbl z#eUH2gwh&NvQth0&B?1g1Qm{|5g>1>DT8`G>S>@^3JrfyDW=&3>RW2HgJM)WnU9fy zRVNixg6Pf#jr8dq2Q^ys{XwbMpcK?hH=F`;r_p>+JKp#yDEpZF15F;8+kmo}#TL-q ztMxsQKW$7wQEKN7@~z`ZP_^Q63p9}C9s?Q^_Syz&`1;NVl}Z6TpzsWS1nO#s6@vQK zk$Ir?M==JV)@{5dDAOdZ0j0&%GoS@G8LglaHv1o_vdDW6%Fu;pK_x|r1}Fr|>p{~W zRsNtkqT0ov3crC-1Qb;*jEg}jrIk?zl>OQm#X!DoXPf})$#yVq2Gu#8jPantri<|| zD8qF##)5iYJ&b0cUA6s;W}r^b1V$IodW4CL>p>OYBt}C}V`4JnUr?n#g;5YxQch(& z51Lh-#%KbnBBwK609Erd7%zc(+%p-!fgCxDQ4JKkvl)Xx`FsxJbx^;3E~6%>M>>!3 zJg7M`pYa>W`wJLvfX2iYGJ1o?Ru(bN1=U828J~h$2}>BCfEM5`Wz+%<87*TB0!=C` zXWRp-ZdNclgT~cXG8%x|va1+>g4(&O8UKMY>KaA^kUQ5hGJqy3)-mdWx-#n-eL+#X zf$=Y>*RqlEBdD0z#FzvM&CQHipsH#MBO9n(-pa@i8Y9`pC=VLT+|Kv})UnyYI0w|? z-^rK*n(^7oXbozJ?PH7wl`{Jo{Xl*{z_Mvw5c&6G0`(X~tEcTI>uXBdB+EmT?m( z$DU)f0oCv48Dl{;;swSK(D2JeMiEdBxWpI?S{QVh@fWCsxWbqYnijpvs0V5hUt=@} z_2REHE&+8IZZOJ$3h$eY`$470Eylf|s`)l!BB(IE!x#YCNp+X87nCaRG2R1pMej2% z22H>{U^E0Ze;zVk0)_k|Mio%vd(1ck)SG+4SPQDcpE8~T1?w|Ldr%YZIpa}Kq`qL3 z1T|bt<-pi%PIjB=o8e8V^!)G>X_m<}2ZeaCnJH2(FT(HAu2{(+GT)VBS| znDCo{f%Ow(1ZZCKGh-8|ZSjSX6I8H&Wz+<9i@z~$1r;FQ84W>w`X7w%L4%k-8O1@l z?-%1jP><#};}Ov8(;r4l&?B2Ffz)n1Uo28CcgdEd@2=H!)2B6$qP|)`NQSTbNWHLW{l* zCUH>d(8aVHG?>`I@(k1_=w!(QmHf9@9)bpyZnOLWO>x{~dGZdbsZzL*fq}J^(GV17 zvlyd5BT2Ivg+Yy|xs27IaGB3I2~@W|E~W@j<8uO& zBxnq8BGcVAXs^tj4>Z#pkOAuM2DyV8fx(|a5fl0gl)=NEf(G5fi$M+Gi2IR@46M;w zpwceJ7Zhu;lR-X8Yy)*3(|f9+ktF*UG_0*MAC%ZtB|&*o?K#NH>c0~i7+5t#LGIAB z2IWqz>!3ua%?Zj*Ix|3vA#@!l{fD*~Bme+<;p zap(r6dB@eD#N%`Yl%t)^K*8>E4%Gi~)d4j=-1tCiu-vObeN&H6P;=R{6Vw6l$^?~~ z-esUl(B}rocfRvM11NsZpmv%6DUkXAS5RCA@`6+b-2jOMgRXjE4Y2@~j-k4s$}VgM zsDBf#4I00QxBzO9MwWxrN4bJ3@#wFhsy5~us4S250gXGyWr3Q`@phmDnBWJJO-uqc zj+3}S6C=q@An`OY(9m?c6R6b9m{5;aO>3#kf(8aObU@X+rY5LKqICdN zJ?b0;Rg1dvpo&xfCMb^?w165fhGC#WCR_^Cz=?hYsxVTff~Mm#PJ%inZH&J_t(^|W z-=I!OCu24!Lv%A<0kutg825mxt|^TAp#Cn%9f|Wm<4#HEL7nepbC6$B^g-)pQtLsj zwlpbFQI~E48v8CPgRNjzECn?+)ZIY!o`xGJ-)KsJ%+fjpBDH-$9YLKM&}<%vU%ed^ z=lzVPpweLiqcNzPGLg{<6giU^*+2^eCo{ePH43IMHh|)4Dq|O@Vw}df2b3CSF&2Wn zznpO@Xo_V8qZhc;WE2856xTAY1xI9Q6Xw>l>(+|)v*A*rOP%gd2WC_YH_nEpu!~IW~zJm&$S4^it(*&QH)Iojb-%LwD z<3i2M(V(H-Zst1B8vLouMW9yIOlDTl;M`p1`=EMbA+rT24K8K=0LmOIna_cyj@B~E zf`-60GVcZ%ww1XYRLJaPo(Rfsdzrt1iid;Dr6A`XW&Q_B_$Qf#KqFaanNvYMz>CZ} zpdP_h=5L@Oikr+jpyK>4vlU3+L+0tA{QZ=<0hBRcGVcYA;Jjs)2hHJpWEKYb{VTI9 z$Voq$7lPVRf0@sM+TM*Ub)b@^m1PlVlDw0}10>hW5(DZnPh{x_jT%p7@dp*eGg%Td z7#LXRvT%Z;a3RZ5P{b`|*#laRv64j=R0*wRc>_uk8(A7b&6}+(??IL2PL_Wlm+fWI z09E)0S=vCMbd+TsXkEfdmJSaF2G+AI%Rz)?A@%*payV1s|IL& z%4AkXP@i@>YYeC%Fq`!^XuM!Ct2HPUENA@#ij~!@cR<5Pn^|vxMvb?#+JnmJ-K>{E zs}zp2?g6!c&a<+De0!a>64WTW&ng9~+#a*;0onJ8)dN(KzGhtmDvjQ-ihA*I#RRs!pdg>f<_ek_ zoy5ipDikNP9S1d>r?Wkkg;vf?S3wmgJLn!tR=!&cp`vnYK!uS_rZ%Vx%?m309K0AA z8Q45xK|LhTc2NcfHm`nA#qB+B0wV*Pp8=>c3~F*?WMB(_4ay18(H4vhY_YYVAJ9Vk9(W*%fH|w{Vxy8dUl|W7GkSE~N=$uiI z$D+ePMQ=p=&QuR-J9aQF0gYWgWXc6?wtK|H2wE(*ocRi9 za%mp#T+roiAg6fT1J#O|A3=?vtYT0W&1MCasd8A5 z>%}`k6WnVVJwW}t|BRC05`{?-G+MKixdzm=`oSCzDor=A)`JH0*RchFI;X815uBi% z!W=%JVTQ$=xuCg`x1466?(atK51@)+6L%M=R^QBR4YFYi_XkiL=N7k41T@D4-UBtZ zgQkO;vB7Gf(Sc@0N6>Emos4>*zT+Rp-=G1Dn@oE^we}094p28^IrDW;W9~QeL{QPt z$+8ucM4qsyfCk&zSZ9Occq?l-sQ7-v`W)2nTFvGT$_P8zrh~@6PO!~PWn^IB-~`?G z*vHPmz{vQUkC%ZFa)|{a0|O%!t`cCN#EiVu@|?^h{mi`NoYIt3{oKUljLf`LDjG?V zQIN|LppK)+q_m>c)S{C7Vz^IX0z{ZvQIeWhoTv+SjBaX9nm#DR(vy?*F(gd%Ec8ra zRuEw_?rS2@;-$ETdny{JgZxbRx_x0N-Mvo0FMTteaGtnUkUqA*m5D z*jz@0lW>O|s)0rMxl}Z*I6s++ra_XAen}=V`3<6&0xDHD9A4=$xTcy%Gb+aU}azcU26eh6_%!!rb3v-sksFiAfuq_6O(eFGKs~-sYOs5 zi%U{+GLs;-7nh`@q^9X*fUcR&OifKqD}cB#J~6L26QTr?Gazh83f9X2-N=-dnpjd= z1ojd;14D9tQL1icaiU%Z0|x^`QEDpKf9wnlaDOASnHU&y@{_Y61|>s1$6pp zBxGPbXK)sTh!v+~!~Mg_zyOKxc(@QN14Bk)j$Q@>7sPiEpFvdVmZcUIXXfXD;sz?M zo10jYn+S3W2LnS%CMeuF7#NBxi%U{-k+p&>C`qjV#RV(G;H1nFs5uoSMWuNqnYpRD zX+?>-;GpGVU`Q<~jxVkRDd7f%L`qVAKFC>Y3=GBj$$A+KJPZsesRc!;$%!SYDWK$* znU`4tbsQ_mU-6*G(aT`q1#zG@K>Sr)keXbS3JO>bBspD>dfnoZ#1fD%xFBgSDK#%S zBR8=K6ltss47mlR@#RH{1qG=^AeXT+Fyv(BLOjBZ#O4FBi=mzc9sK}0W0_fpk(r5; znSqgkiG`7knSqm&fsu`wl~a&`k(rf~je(Jw5hM#y!(0Jn3o|e>Gec!r89*k0NJdU} zFdHPx$O#eQW?FtIQ(gIx+`34_Cd ziMftb0n7r22ooekm>C#Rt$G7D3~UuA3$i;tVv{US%q)pd%P(SxkB`sHD={>SFM*_y z)D#6nh6ra5N1u4-0OR;z$9TU`Uj+lGkV}YmTD$J5!>FW5ES&(YUaLCMfi&p-*9AbdSR$v{IRCBHN&Csor(&&bHs zz}(ov)WX!j+{nPtBvsegz`{op9>vbij-kP>@y`AMLH^FJ!NLAP=J76`!5|O2C>UEZ z#K*h&gn&|CyrDt7YeYbNyn?X>gKGp-A2{pzhWdnfdU%E?7@5M&1tlG`cyK5|0~M6O zzM))6LT)KFlp3RKbA3H6%Db)Wg}+5R^NE;)DG| zgPdIz42_}2cm_H88bA{Y#F3tU!667im@;^I;~4Def?VKWxHLR5vjpT!^h6%u=;!Gi z9}olzlpt3pfBz6r-UYkb+cn6~)d!ZcV5!ywlxmF)3>e~rTwVP_;(Y_aIR=!>H3~|K zG!-||a8ExM z|8OVAU{?imkQ68n_`Ai2J9{_=#fQYlD;Pn83lhE|9F?BVGaqF~10JFAP zFfcSQFaVeJA+Et8@u0wo_Y86M1;w_jdyr=csMPl?NzH{P98mG(;~yRn>uhE z0!s7n-~p#yaP8$7-!;u?{NP{GDCmeS(dRK;qexc4jp5CtUPNAMYA)bEmVUCWV$VQDk zuxYO5@d2<#fr3GWD>#r03_!(tyqjZihy^GWDnM#$I6pp~Ap&f@uVVx#?SPA|U~^#`RWQ2Nj)s0c|c&ekcd@JlTZD9X$)$}FkWRA6xT3srDd0C)Tq zbaO$qe{y0@PO*Y+x-kU%rz_|dm!#OH=apJoD(I$x(i5mTtXrI#45Et_bkkB2OA?X! zpgu)%iEdebPGU)BPO5HFW=UFRYEDWqG;M%OJx_3xA|8|t6bu+D0zv(*;MBa7kbJkI z{JavkqWoOX;2;f%gib*jC{u*wgO%wNRCr{jXQURvJOc7scz$+jo~8msy?bh2YEfn~ z$UK-q3K~#31x+0V4Fwbfp+dM!1xbVZg~6_VF7YA$@oqu>ej(sS7g{nliwC7A%%lb` z&`jfDNeNos7{r6xh=#`K$z3ClP*MkF1cvx{7guLPBa8UpP$xhCAYVtHcu3`Hpa)Gu zI4MI{T{A-yV;3K2DhhV=jSmm<3~_aGboP$-^LO;|@plH5SVpiS5|R2rZBtLz;CLT@ zcOwO3NO}tlbq#fm4{~*O^$c^>D1bzQrUFAeII5kU<30U6Je@p4;(h%613)3@cg>K^ar8V|0D3@VJ%(o8^=36?U+6;vh}#TzJq>IqO) z5gP0f1a93ZXuw%o3PuXr3Wl&IlBZt?xaAW9N=+6F@j;G$E+!W7!LF_@@kR=uK7f(2 z2~08AzivLB5yqf`9PGacSI2mGC5N0v-9o|bb0^Ob{{T=0gJ`LOLju7K0P&$ZL9Q`` zR8tG-QM_wFu&0kdsA&qy z8!m2$2BdR<0aAO@2paLw`VG>$4n}ES8=6}%_y&Z=hX*+Z1h@tTgX&{YE6Uf?j{zL~ z?ye#J0U@xKAy~-ARlyL{aB_5kP z!o|oU9uyb~8ioosHqa^)F5?&K3u@5%fI4WPA_JU!Kn-UNU1I}tO$J|AU*`~?co*mJ zcxRs=s6hz9P=siW0z%jkE(|i#NH7F?F1Jn}3ED=GKuYqN}fdaVlg>@^O1I!>@ z1_Nj?gW4>R9w)TXYf#|`N*183fv`Cgp0uE?SU=ZrA5SMxgUCNLB;L`*#W@HRzKCks z*D=HcUN;B1`uGO~!{Wm^z!226a`yKNarFxcj`#6&a&ZEe)G$|qnq;0%L9UM83Pud^ zt`Tm20U<#ed5O8HIt4}fCHa~P8d?eW$HOQ(pP~oqj2`jHay$}PW zBFhxiz=!5tSoac~G=ibY3npj)7KI81y9Pj6Flj^l(nk2DjqyvH;FmVVFAd6C!QN2! zV!GTMzitcs(w6w84G9Gsfp9Y<5O9VBLe7vt&>2F)jv?MH*wxiL-ajD3)7LY~5maTu z8?_NWzMcm0us(*dn;ST*LemVqM;_+rtc7fM$RANR6|9kZXviuPdl`Xb3A({C(lYHLR9}bT?4@wJ>jhlDz?_ zU+d}T>=WwZ8V_zs2c;I5=B7d$mkNg9e!GvW3#g?N0`In)7&CjwA2the0kstj%cLgoCJkuJ2_8?daig5n z#NrZTBh-N-aP0#ckAqeJM&Q8)AAdi0P!$GJj_`%ErwhoV(7wJ!yoG|1IV}2oom^c) ze1hYHgMC1C9ccIhR1||o85Io8j4ezUf+2~-(@#M|7s_^wP|yXniNO6I*D%lsgnN*G zXaK196Yu015)5j!gKGaEjSAPY)Vvb+qWsbVoze=Y%#z}e{NU6QO$Bhr95e_EYUlep z26?*%p$x);hGRkfkoXdX1Mnen@Od%a$Qv*;37}TkQ49*&wfm;Fb@e0Km`9&q5pk#=T5B2m5F#}~;P+S{Y zn3$NEo0u4w8=D(gnwlD#8JdRr_%Kw2Wag&&mzIQ77Njab+3_U|$m5Z@;E5q{9Sx2@ z*PtNBkWk-v6H`P35u8whg98lB;=@3VV<%4q15hK)$OPPo0%vkq-RR@&2p-i?fOJnm z4K7Ii?T%cm!W(1c%DF~3y9R*E9!OpS7uFP;iqAFpZ5)cSMERDXII}7hG;)qB$r>ww zQm%n9G@XOSBfz5%ppjp2j@3{wGy`?Fz{v|%z8J&G7nIRMLuUg9L?Va8EWFx48URLZ zkcaw!iWpEy0WI!8?X%DzN5u4tr(cLMXlxi<{u!A-l|jabKt%(nZCFu~UmRbYS`wdH zk(yip8rq1@NX$#gNi9-{N0LiUMUjK{pM70@T?69X;$edtj-XK>a7hH|8G{E7+=Bce zF|`a{y8wEo%&|D8x#Mjf$KPWz4!Om7e1EfI{p+WB9+*3<}OA?c_K_f8Xi6yB;zKKQI3WngKJ~#w4d;l5_Qz*^ME3t?# z0oRKm?gsH82Jx;g?yjI>4PHH(!fHK8OrSIgj9>){Byb@8K9@+pc<|tx0YiK|xc7qS zwt*%R3`|VS3`{JIObv_;jSW+E4b6O@aSbuWEg(KPFen5R!r;^h=@3C1W|%!COHiv{ zlL6N6h8hK`OfA7hGPI0?bv|7qLR^FVAYEUmT8IVaAafKfq1`G4OLK;T6gNkoU{~O9RDyV>tFHz7`Fi_BBsBq2?$}cU+%uDqECqM->etZdNXfxd3RUsfaKHT3G+^%GZ zhZML0L9TADAHA9OZYfE zqE3R0!<)t%Du6~SKvQ#&F;wJ%-ykQ@SiL3c><}!MgZvG00dzPQO&FSYkhSyH)sT)$!LHkH=%P7PC+65;m+}(VH#KP^aIi?L}qa^ zXfh(Hs3gBUIUYPg56cEHm%z(I za6=mwsNg*48sY2>2_ZpHcv)E^xj_NPv}VLVE_mp1z*`&>|P!i*bfDZ(zj{Bu7KLdYDCq z1t`hGQf!bbXne*MG%D*K1Ro58S7_iFjDR4|Fi#&>cURC{7o=GS9`#4G`bzVPGt=`@ zQ@{;B(2QBItFynK3%HeqHg^>7?BVL{9UtcC6Y8n}YM~iI$I(C?1Oo}t`UgwO;Be5GVBMEfz{!l&}D$s!JdB5 zu=fa$4|4U1_lYor_YUD65A_2l8&?+vOBB_vj=`|Ng2cB+IBZ}N5{9rg2soueXPzL1 z6lk&#JUtDXKLyn{K90^Im^F@>Awzt8aY<2rUV3~{YFcVhYF=`xMsa1XPGU}GVsUY0 zuBJk2MM-K=o??!xYr;|!tPC+j4klQz8yH(4 zJOj#eppj>YSIpu~6^uX~Q`l5BIG+S~y1^=0*O1VF_z-6&(43C56Q~1HmY7DCYV>MB92%4Q!09PrnJP#TH0oN)>0`c(-ur)0ZX(S$K)EDM) z#Da|=H_*_431}JtJbsR(0^&)~=qq^Y(+rd{+?}0a3md?>7&N*Lp1X(70E1f8zMjF( zpoxrN1rvt&cqdPHchC$rI4AppdfV}!*~fwuuXtLbb z(=XgJ$khc@g@7kCAX0uI#t@@G<2bN&BR>9)F5sm=uAuQ_aJlIpq+kdu89{A%$1q1v zA9zJ!3acnUMNqJdr+>VMe{cv&gVz|cPy`g3kddm;AkZ=vP^fzP`yrBvM>uHA!_Cv( z(*=~?oQ<5E-Q3(i~8X`qE=;JGlkY7LM|O&tyJS}2$iU@k|5t=qO8W8=O znwm8l8X90DH5JqpFcm0hf+iCnwT`QwqZ2IiKvHEqXb}^rO3^R`O=v}gfCU^O(Fbct zg!qSm@~b1Hsi6rf3!n=Xe0*Hp9eqFxAL79&*3-{3M8ny~F*sNU)cMp@0J9b1L2F~< zOB6t23bqOc)`)@^J_rSF#G1z&DwtTJ$inIv*Z?DB36yIbXHg4q_ z8~~b00bi+?C+jTU6x6EqWmrWWHpeSG{B3@Y3V%v>OaH)u{5 z6v>dqOlF2Armz`eSX&O;f(V!#XaNNF1rgAuwUcK&yxfGZ)(LkG3i0;^O_?}`;AknA zCl{6E=O&@Hl${;pgTf;~vy5&A3N;D_72u|ZfdQxu?(696;pyiJnx}Si4D|^C7xUo4 z5>od2`FeutMx?bNM$Rw?DQLvUr>B;Hmp*HN>Qr!6g%lc~AqtBZmW zylO}2wTL%}H^4G-4JwF1(_mOr9eCA%S-c4()j{iTgqh~?hVd5hz5!T_g{Ehtc;5hM zN&`1GA?r;HQF;MJuwpA7w64)VT!En&yl5ysu_ztIRp6QfGE8X*su*CE3P>E>dT|F; zI;Qak3P$E2Gm%#Y1c0Utu#JC&#Dg1>pcW(~?ZBK1S~3OA=ir$(P`esrD>xZ|y5R8P zY^V-+bc6E&e8HcgIRnz-CNL9Jn?TlW!B+)=C;K8G%P}D~K$1&{qkFs?bR-1SSOE1y zL0wb#P{$w_1yhFj_`KBAl=$+@yps451&EIWK!eAi(SGnqibe&j<_pOWNX<*pDJX+4 z4KUO}S|?znQv@D@hOQO}cJcLfMw)#y1NGJzKx5Oef*IWH2bIn`xrxQunhIEoZ3Q(2 z4X`ArM*{8R!J-SY;tJH#GXb^qps5RKdI8*qFpW0`&&eAYGk`~bf=d!hN{d0m72uj3 z!UYd0ySTzew>7}+#Ii*2l0OhzQzJee)Z{EEDT*)A)PSuEQUEtwwKO$AN@2Mc+^hqw zhy=CxLF3Gjc9pNEpC@R63uJ@|oLn?OYc{|GPN4P~SjY~vhS)^G93%`intJ*{7n*A58XB3xobCcnsGz|H{~%W| z8yrOn1{I*V17`_H(+*U&qpTi<2R^()0?+M$iVO=_vV)I%APwxmhb7!#HiY{4C}=Ba zXlTHl4O-I$Ue>LNbA(9K#>T_~RK|jb9l_l;SI{6~B4}7KQ71PsD+$C(0*x@{CT1mS zD%gP1RaTOwLQM^1JTXyI!PXWgs0K=QnRy^}AhFE6Bu!0C2I!21vqlAIMKlr*nt`1I zz#V!}4-M3!fv&U#^;P2?{lHDO_>iDb*Dy!Wsv&S(E=o--NrjpMPCx$6*n0%< zYTO9aSc9&WbN38$jrR==ag6{iUwXn?1KigYS`Q;Ule(^EZN;LI>ks}M}+ zR0O4#losWId=5?yprzKqzM%Quc>e$o*9b@x4m8^spaEXpPz+t=09)PX=@()OuIZtp zbI_(LsJuoR9tE2X9fyG@Z4Xa(511}U0SuGUu+Rke-{5Pk1Bx>9!0VQwtBu2*2{&Ib zTQ86qU!)NZ$iNe%c>5RfvB)sC^y@ zYG8s|YM?&9CaltCs3^%u%mFo=K)X|lQWH}YP()ITib@MgK-=l!L0jHnOFcY1{oIi1 z8WShb@)~gK7PMvw5*m;kUfKucPKT!UQ^gY5x9 z{_a7JzBmFK+zf!Mrh*1FvbCUzPOL3Huya7Ax>IC`YrKDuiz{fBBOc1~@eB#^agBHN zbMXXiK7keypdkli!YLHe4uI~XfX)%X3tR)xHV<$RxJ3Fng0=)emP{H#hvs1=zkz`P zxIv7t+5+Cygv={=`Z2f$1jm~x7+S)nL%?O2i)Waz5olt{#nmm;FFwrQ(*?Z5NE1BL zq5)c@8RQ-e@_KNHi!*4D2U0`(<(FipRk~-ErD}jni;#SXh^7LV3*mq!tifEEENBSX zKu00fGcUO)H8(Y{L_rfam;+hV0Zy={MkYoUpfv!XCKPCF6SQ*(y*7hQxq#bRC`~x% zR2z60(#6*m+OC2vM}UqPgC@!~ib2H>N(6vM(U5xzpo$T!0%^($v;fisG)iM+1}dh& zA#VWLQvogxjZk{yrm*D^;P8elgot-^MH(0YjTwO3%mI$>uE9~@C9j}%iGmSq;1ZH6 zpi65oM=^{c^#ZK;E(4X>&N-=xd7%YCsm1xFMaikfpv(hnOCyGGAk8z-I#ATvzW8{J zTu{9XszX7&7sMo>jzVrGY83?Sy+ZmeP@}-JW}qm8bS@1Ij7%6nOWd5}eLQ_Zt0X)? z1B5={O#txrHX>WQ;+#T=2ZwOHr=JU`j)3(X5WN-f;vGXQeHCz}Y!q+E09qsqYT!C~ zhG@hW>BNKD8(N6gBB%uk8no2X)QB$v4L4}SCuzc#SA=*vd&dVkhPcLiL@8)s?AY>% z0?k0fLK&$EYzkVh4W7V;B|~sx05w336bv9WDe__x=O9;5{}^cn322owsKp-~;u7zy z0NGasawf*MKtKO@a59Sb1uYA8QP4GomHMDTf_TvIh!65eCQ{HD;^;kso9HI-uqGmS zh}GW%Tyug)SxwBKacbJQNIJ^CX~=4e(eT%1CECcx=btEgm|~=m#2| zh825|ykuwqEg&J~Kcu7ybM-;llVu2AIuC1jgBw(yE(%KE&GYeP#_=YW@dZWsDezTO zh_D28#IdD9P)8gzA_`B1kTGviI!pt#dqIg4RPTb*o}Hb7MtqurvT}T|CL|@M!Be7V za1f|!cJ>B)72NB9MgllU9DNNT5~%CQ!G$HPsR3#AK^lY@vj|{GXj8(`#|ONa4l-v2 z+II+9Jsjc@6bjv;X=rF@1gevuv-+R`R1MIyubQ!@jSW)K3GNWXrY>-q3#sD_DnJ`Q z!3IO(2+~kOs@NfmI*=t{UIWX(!z089Ht=c;UMLV0?i3Oa8Wn0~ciR-~!M!2sBv`>Z+lM)Qn0_&MyTuJ)v>n84Ox7;SAj!3m#Af2R|hGuxy}( zD}e?BB-w+9t`rbi0lIq;JhlYR(8xnqpm0In3m5JftH4*gF-8INCz5JxqxuI0jjIVaB$Lvv954W69@Z77Tnat`)%0ksOCdw1jGGZK@tVdbZ5a6pK^ zzfVA9ypv<7i-M(*p&5Ku6I}ASxFJ^6fV#Kt1iH6&u%0Y|?k#9FO)j*13rX!@>tM@F z3?UnmVfzgg7@VE`eFGeWT)}HLjbP3XjtmCv0EARC;5I(eD2I`O2`IL~!%U!^*bJ~~ z7|_6si8*FHi|l` zM+KxU1?w5%3F|R2t9%T+-L{24$#K_AZf%Llng;rqXrDV;F29O#R8hlQ_z4`w=Rw$j`5I1 z5(=OtWeWD7)qGY8n9`aI@s57Mo-VG=KJgy$@D;8|Gppc1Y0yd`Q_#REXqOUbzz15a zK!XCdbQt0dP}u^R_k-}^iohFKASEoQI}P4{1gh{r$qUqXg{Nv*Qx7t=4xZKpO|8QU zO6LG`&|VKvzX8^8feL}=HQ^EE0^VT_4o-+mK;Z%x10AK{3)+OpB&Hz)iDJlZ z5=YR4En@Zn5p<9iydh`_33!z@WGV@%!UZ=9z%yZv!M>o0E{$Z!+KE_lAL0?@9}ezl!uGO&41(-qQGm&V8Wf;~XW&MIf}sU8GeWae zP-=2&W*KZi4q9D1f(Hs9O&?h3!`e26hM*BXCs!YT(2i^P1`L?AIjSsZj?4+NFdV*b z$=Co?NP_!AVUYF5@!+C1#M8;s$1?O}SOL7@8#MO{b2c=KfF^sPs=-M)7;7I5k|QlZYpy_Z zqo65d_W)0SzmF6a;7Wt=vmbMpz$8i-xQ8XBU7qUZAKDaysZQ}&h9`RsbgWKQWC3cXU4=&pv zjTTV90$hB6vO4NwEw~i41b`+K(3Fb{bZ7u#Ba#GkE(TLan1VqCELlO-gL5mW@B>ZS z_&P>9xhm*_4+=0=ForFy0gq6@+NO}PKj;jmiGcwqmBZSW(3EZlA83sSmza(UrjR}& zxY~wx4nb$Kl!t&;<}iScWC5j-2xrjnXON?U0a6DGwO3`Tpve#qpD_g`MWmThNMOP? zyt#sBQ^D0Tq`+e+1J_=mc}1z|nZ+fkMPM#;=^=b51yU+Ow;5s9Hqb6rJa|0;IF^GW z{hT5BD99C*2jhdo9RolIwScmqt23xBLYfINwlD&XMj?hn%}l_xAnqJhn&Xq2mtK8wrMPu!nYE!I=oUlr}!t544}y6*PTrU<4C%aSlgpMO3KMfCU>! z*w-=GTN8Yygo%P7Xb1^5CV(>XVq^fCbcLML0Ls#keB~DcIiUf%%FYnlH-O|McqoHI z&co3MG4KgGv%?U&eG!tP;XOg*?hsfbIHExvIRyihc}tY(Bm)yjqJy*;!Obv8OC8h> z2Q}5P?r;IEHFe7`0Cx2GRIpXhfQ{gQX8dwA5v^eZ1tSyC@fDH5 z;Q6uO&;am+2)G!54LyNM8%W?mlChx?F|{kSrvsfMfUJ%T@dZyfDj*AjM0CI_MG|vB zCx*o*m8R*y4ho8oFUeKV(oq1de9KQ$&;qS^Dbm!n11&5;DA&{h4Kab;3>sjD4fC3S zcJ+dmM+JMj`+*j+fY!ShnLvvHa61|@t`BMRySN5~cz`w+rDdjL&Uu2*sRNDbxrF+- z27zj0&`?8Ah^q_cN^(QEa}YJ3Kl}(CL!>Ru#^AHwK<#SK*$?qaIr+)inR)5ZLKdzY zl(-aN14^K#1XBA0QglM%2PB13q(TjX#iRlFbSuzUk_99ggUe1&Kj$DSf=)tG08RXY7~sZ)CPQjb5o8D|60}NDK|?_oRFt9&xw@q0 zq?V+DT65s$lczs;4i$Qo71$V1VG2EY1L|DxG6L}6ud5;A)Gm}pCOER4156=X^`N7L zkSK-CyFrgcZ~?8=%*;*2J^2RlCZzF+vD6yeNCme@p-ZjJKnt>AE2Kc1ra=d4c}BTv zLYCozN7sBEBha>Pz>dpsPb~q31=#uEQpYz!!2os;gR7s526%O+rb4X(m;svzz%suL zYB+Rx=$SMfvc}$q+et{Y&h{6=qRQ^alvG#Sut z2#5`^hN%UpE+@LRjiW0CT5t{SJ7O7v01x#W;~MHWj)yg5ks||A!9mg!B-EhIIM@tu zysxW^XQ(f$4a5cm!z(D5jcREHR026ew6N1lPU?Lv-Wf@ehVtUY846}UhG%@l(+l7hFBLQ5V< zAplw-0NV8mJ%9jqP8@RSisgBhfa$q~@j;rGri=1BDxS zbO7N2NMFP(-arAojtkZ?hBsPJM)aY}mB1kr?1DUrY?5YR02?m~2=_&jG6j{iP|t#T z*3c1gNGgT)tRZ3yCB@mEEZ`AL{2B80s4D37%pxFfesS+t<3s(NLfztnLxNl#!D}f%6T6_vNYF+Skh2VpV3U!cwQc60-U28u7{ZRe^O$nX?sHUqk>0n#Cbp7?2O0j_W0qo6^l#i`)+ED&wDW?;ZOyO1Ve zpp972U>fwuAGC~KWMZLf7hjy3ngW|GgC-@Mi)anOQxP!L;Oq!mQxEQ{C>T^2yFrJ7 zp;m|ZqS**KXBggyMoJW*DjB>^6gFgO}mM?nL)@xB3|euAb#O1?rhymJ6vp{$@4Uj%BJfL1bEE5sLp_7#E- zIV?&o1|3$N4PJMSA+BJHBvfEp4B~@QGqMS=V-gW^wF>1KnK`Knpo$&5I0)Q+4ss0+ z^>sy@aR52*EhHauP6eoS3C?<+;5k`vN`#dmNP8xr*#eS6j7*8>VHrVJz9EhiMXNU9 z%?CsW8#Wee3@H=9eLl3&ZA&8~V`Fn817kA_QxkJ@QwsxgAK1DQP-zaEBZf8WAZrJm z-P}PlXppJ^QJ-1jIFt>X4h=zvvVk@pfEoed5mZp|7hjYLY6GM~%0g&a2@`{tkgyPh z9JOi+>-4~K3OJvDdbSXCpfP!H+rR*vfZ;hGG(H3_t>S}RK}XNJYUHJsLw2JoV0IIs zgGQhcO^C6OjdtL6DEJ7ic*hXX+D<6FLNm+_VI>IKe}F;MS!ka=Q|oK){V$P^JN; z5zIk5=w3=#wr~t~1{JRHPN8mSr9fhFGOQyFDg&@JS$zx@Ag4KjmY_qE9=JOKZ}Ndu zK!d>D)z1~Yz5_l(3mR}ltkrP|^7lm@WPz4kP(hfBLEUh7NAxl)Jux>oF&?zfGCeUD zRQ17Db%Com@aY(kRE4xY8a$n09uHb$uV7>Z-h3Dz4_@L7?Vvz|Pd6e9-sE@+o{P_|WIi1&k>;0A8(IU*(%@bWjGQKnC@b;vsvEz%w5Tuu2Nl+H{OS>}UoT#h_D#8Nj_l&|ZpE(9jH+2kRrk z*O`J^APUv-p!R`|f`JZ{S*xP}7ODl!LHa?DbB7!eh=|JcALJVE5(-|2tYBmc+9Lxhy+Jcy!M>o99#k_ZSb%oNg8C|Euy!!S_wdXJ z>Hdq+zu*A>U{{bFc+Xcn z^vL~SM>p4aXCF@|kPIY{;Hz$3&ErAa3n8n>D-2*88$iMA;_BlV393~gV@1$n0aWdQ z4?jT}D?*b5jTJ$YK)j2qo2Q?vivnm`54^+NSiuPOd^GnU&#(Yj(DI>RN5mNp&W@0U zcA)N9d{8)iS}!6b-pL=dH4Hu%iR>Bp-4DpeJVUY#IH*E`96@K9Lqyy>gFyEKc)EMQ zkN$?Oy1g4f>gqrf(E%@#|eS9i$NAfYv>vp7#SjMH+Jz1 z^K@~IcZ!UUat-o_PlSM5J)lF_!RrxG>m5U4dQgVY9uzq2Kh z3ULJQPDPGQe>V$I=L0!5L35j6C6KrSTLL=P11ttgK%UT@4Z#SnKt-UtoD3=~Oh7Bh z5Dh%IJaj+g$nq}uakv4& z@t`wez@;v1^b6E$g$xKnOC?Yp3vTd(>LT#07^r%3g0w6lV?V(fnhKzL8k+=ik>%{~ z=NI7uTI>zUcc8EV)m`9*6=MO$65c4`sF04rm zNiS{z@j=k@t{~UdSRn02f|XEUrB43-pz#!tPoW)lL_T$P^z--g1YL{*?!AI9^8k%( zgGL|S9D_lJ#`q#mLqa*X0&*fFBwQis5PUukXq7m4I6gE$BM&;C44PEU0UcPTk*BF^ z2wGIFtC0sUwZORyHW>%nS_HmA2Xivc*D(_8AJ{2|5w4Dg-r*qEK^y^=1PLmD_9#Nd z&?j=hQzIInn+SA_G!+zW6%0Vz9I+_Y0Bs!5F#v6Dgvf$xR>bflXt6c)=qpSa=scN= zt220GE99USOGuv)q8ep6325?AQvrE;&(n_~J|1}$a6I^oQE)E;;vCQcqn<9Vejy5O z0in<}TEVF$zNw()KG3tpz$-=21mS0NKsr>QYm0Erfr3wuOw<5Pje~ZiB$a07lw{_` zBMZZN-o8$tTY^Bnb{yvmi}9W1D(|ifFG|1+DipH@E&xF5Og#Zw1*sWfVzQ!0ce5=Ty{D; z!sd;^^*$t|!RgA;DcIj9G{iL?euBIKLwpGQJ|a-3#vi)V0u&0K&Y<;l5CH|ycuyv1 zEE!zmfqEM83Wj>-mgZ)b#)ifw7G_4qhNkAJ+Mug(p#FrPq7)A*u0Vw*^h8WpB?M|t z#5;yKLDp}AZbw0k89>bdHQ-?#ZdgAY?3ZBI2+%q9(82&bq7Q1E!;i-?R)F{Oz||6D zN)_A>^@A?nGJ#G0fKxMgl?qDF3LF)X~Q>PFCwIY`t0P$xnB0O=uv&a|iqPR&g$$jC2B z4N1&S)j)7{Dx5%Lrl9j>(ay3%iX?D311WRB2OVlCAPfLS7NlRRp@1+8B#MZzShF=QbvTMduj=I*Sbf3PD*MKXg&=zcmv)z0zHNwoN_$Ei@`BGTuK(BT)ym`A|b6QPbAe5LEkXB!O74(Q=4{0k{zXk}v>C z7${gl=NrL`O<_&3VAlX6g<73z*uDsGkpr6@bpjop2|9NOJbaAg7nBYr{5}@wmLt$! z4mTfv#}LpBRNz4kc)sI4jP&OpP2-%R^mZByg(T`9MlK(5Ap;x>R?$AG;*W^-5CSg z6$NnyXh0M^N(0`FW(-Syh;}_>iUD+-kuhkS5X3j2=9D9Nhp3qeXix-FuY=oxzMjFs z3h={|p$l+8tF^Pa7 zn5R=(;R(8VH8BUwh1D#m>fu!qc!V6T7gTj7^7U<{B!2x;T)tZy@~? zGgxv$F3liY){PZF2L(d{3*6|52c;3vF>UY)0d_hHM1zq6coPP6p9-V`1kK*~xocFw zHl%_|JZ#Nt@KFLj&aMjJmH}v94V)9>L8}9T5FriT8j6@3uYimU;8z4{SVGba*e?OW zAmbpJ5mqH(u4n`=Ie=an02+tZsQ@3Uf^B%Z0wfQX1uYyJrfEaWhy(23$I|!N$fqDk)h!7tq$jB1(YGkx_2WVkLFtn)*ZgoJC6=+}!>@o-! zI=%&7@dCQvMWdk1F(suawYXTPG&4A}DiyxQ1*wcSMH>PJwFiR(JVDJtq(z*tUDwV5 zCZOgIsHKQrmw|>?LD%Sl8&M!{L&tSsbsf4qtb9aNw~)oihVh09mY@s^+KG;Qg$Is= zgwYBIw-`bD#K4Ezf=of%9v>Xw=m**i4mv0wG}jtmo|>4A?XY9ecuit)ZhX9kk{(En zf|7zV_$XsdYfyCnl}Rlug-a+X>44avQ;wn03raMW(89(DGB^dQ-m#VR;2VTtA&ov} z09ybEEqNgGhTzczXxqZr5WE)|ye%BMo`9hs1vDHAzBCoOB?nymDi~ClCPHAS4+H$R zSNK#9B*B6cCg_?^7tbK*u3W?^T96SH$Otfa^P~}|!t)P?9?}7-37~__ShoFvmuMq; z;;^PZxcdazTW0XH8ZDHSQbg9cO#L08&<1yZFN!uIn(1hH4ChTzd{_?kiA0MLrA zP@fRArBUGPk0C1qQ3s-6Nd>WA9<&z}wLuA;%mmG`K&~A&w1iX$;812jJzxdWuZWLV zuwa0k(E;9M1e!B}oJ#`TSq>V-M=V`|4-0`;e?S&M`8ov=9K0<;8oh;t5;W+*+t?Kh zVOM4%t%!v!V25}S();%F2lpa1G{Bv2@X$M$WeDnHYZ&T+dzNTDZBVfex^dCd5tKFI ztMkpwq2U2(6e5jyfxHH7X8C}QTnh#rsumgyzJw97Y&tn7zZln|X>>XGg1{huUpGHU zgPI{8KJW{l+5(q3jxH|XNnUWR4q80}snsECXCP-)1qXPdo>T=Ilm@S`M8B&YTtC9< zAVcUu0^o5jP#pu?{OaiB2|kO|K*12vrvufh(77=e1!EJG&6AJ@t|9btS5WZ;nOXqt zhDB;dlX$WzxUuf(7wj4VzFHRKLdeaW7=A?k%{IskudxMeX$vA2AXy2surtGP026pb%OoD9;|{ti9W)~E8U(Kx zONz50`47JM2fUL2F=_1=0&B7(wW7hD4Ks}8I&N-mZcc8XA&=s}Dp#7YXN&&QT2zIwHcpw6N2?sdsqYO}Jf-Y-^+;bZb zI-MHKjE{$0S>fUfzO5DHPRQM8F0O&0jy|4lks6@mWpzNSt`#)EY_y|h!P{ySkaovp zrYN8tI15_y10LsvHThs|5KsU?TOXi|1Wu$#)f>Da20muR5Hrm{mN|otZwB9<178IO zy2t=L1!({s0s zI)biefgj)n>M(=PG==P5fy5NT^`P`@f@SFiI6a%igBFT{mPUa`*x@%vxcY#S88o3l z%XV1f4^rTJf>)qn9M%QBM+u?^oWj8Ezj)Um(AnsaP7%I?l0fskMxZ6OhHjXx7Y*z! z7qBoaQb4KD1A06&WHBeofz+@xjeai|EG2+)Go&#Jo@qfTMB)2rL7f5(VJsno7a!u`8658zco+=LPXw8R5-n~|sGK#de= zETzwruE9K%rdl#J@Lku-4bSgC!DnKIxmEhIi;FAu09Z_#d zg%!N8IS)`h0a;WBDKTIxf}oiXA_!VbY6x!E;qxan+(6?6L7?MXJfgrCt22PN7At^` zM**#M0FTz7Z3>5N;sAHn!AA;#+gi}&bD$a$bUrgo6?m%$NENug1P>zzhkJ%Nd$_v9 zd-{PYOHdOv#N9AH#1PA^M4&@xK(kw*v%|K%_S}AID%1w;| z=qfVwCC;G5mf?<(2B7^b3Xp9!@J_CuYcP1e%+n8acM@X445SA#pl^zDF9Q7Pv3Sr` zFQDiPjtmAbfk#hNkYgplT`T`E*C01gIpOE;2kJ~f&Sh~-Ndaxd0v*j#R0$8gWWU5* z(4ZB_Xi&-k-&h51^MT4Tcqhil5YnfI)LWpi&_L8v@$to#xsb!AOF;Kj>15^>;@!{7{*aha!^uGhA0PBNRZS8+6I%F0xbtYBRqr;ONRKt zAU@m$+ofAb11q4$3ZmBmTi)m&U;sL0(AN>PfE{#>Xt08@4k|R#K|o_2q}w;Z%YDFe zQ-)^X!#hDY))RSztSxBgALtNSM`vdre+5G`hIr8aAXgU!lrRVg@^|y}0Zq1o2Asfq zwG<3NLvP??4?t_5K&1${GJ|%{VJkU6=S0EEC-87E_{d4n5@ih&SSbqj05}CY2DyPp z>_8*##zrV3?%;#R!D8S=DR31Pnhe39QrE*j$Q86p0@9<0ZvZeeH8nPc?w|rym(X1m z;7)yzqaS#Q54c?O^YsKLJq6e*An3p`XeJi2i@}J&*U>pRBuGI?)xfC23KyXS9R&op zFu;?WphNt06%2hq85dCuAumOQF319<3+PGn;2|z>KNi*>f>d?H?0<%C>3~!dp!rOQ zR@i`@kr}j`Z7ztAe)rAtoS6K#!$@O|69ld7^Ajh7RLHNBKchSSZrq z$ym^WacIs0WrbizP*sVv%^$q%72e$d&#r;Gaq*DJTF@?PL=PUmiUHDHhi|rbf(#Ra z_UfjknHqwsC5Ts$>ubj_P~!-+Ko-UMT?^Ko%F!=jj^| z8srL+1?|FvR38DUsYv%~LKb{st$$Dtq{FO#AX>3kJq0PC+a^Fq3xG2SXsQ&tl@Qu) z1P?HPj`IaK0-%WkOE(5JSzu9slrUgH1d4Oek{NikgD#+lt%e4zK=cIP4FKsnfomRD z7o_8OK=B7nhVXF*XVCNoNCMOo0G-QkWCU6lhIG{ixcBDo>1To(Y#=*9g(zqb1ibJ?I&2TrVuB56K-b=ZvOM~Md*CPpNq|<8L*oz3^#kvIhUQ3U zR`(2!clP&i1vQSr#W7@oI%wc1UI9{|Lb4O23F;aV0_r3f!PXW*4S}qEhm|fcCmO=n z)*s181& z4|MPj%n{IV0>>%1(ATsEuaw8KBN=Kcc+HIhV%s^y|GvJVpbf(D0U@s7lg+_1bfB&t zw1I@y9`*HiagBHJ^arO0Pz44%`vSDb40PtNDWv~r02;}L#t5Y7Hir(RL97KQQ&;ps z26Ir!2^vmEzC#W?CK4K;VQ8iUI@1R<)D!H8G_MFgR|%9SKy?#5{TUm9(_cLF+&JVj z<_s9(-NL~6HQv(?dYlK?M-ZnWFA@MH3PUs48d&h8BX}>TL4|QznhE$I2~f8Xyw=b| z0djW(WFaH?W+ey{)UE)hU1+L8nJb6b2~Wn3zMw8OxF`m-SfQ5_f_w)GS5P$ot_eW7 z3UpwjTYNyUKS&0W5)HvE4A7B&ju8rwRs@6-9}g-pK&c;8k%Pw!pd8T7J+R}j)?}a& zEzp6S;Da$h!<`|XexS-OIKD z5ESAZ4_fU8t}D<-%Mj~Vib|68N>VFIz)M&lA%`z??e3{ zC!!`6rGt9TI*CQ;#n5{=z)Wzd7!c&?7viR&r>CchyzULe2T!*nI-%gJc{TDt2Sgc$ z`had?2XSDz9a`+74$#5_0g@vOabAc5-x>|6N)SVSkdB=RXyOO7_A)Ior#KaP02*8p zfX^^M+C~K0)B~*uLA57h{WxgbGpKHa*aEK8p|e+zv3mmr$cjdAa>U&fLO#a@c48aS z-3q~}B~F3}2sF!X2);bU0J`@Jqc8`Zu^#Uq;sH4vU%}AO6mf?% zsA&=z;20dNV1#shrGgP?g%`Nf5f7gfjrYbqEgGK<%M6gyEkM^ugIeq0(O>W}f6&cc zP&RT88G7O#VwwukTQ12h0`EltPlkb7;tHTO>qX9qIXOv*$;emK!peU5YFAJ}3GIj@ zpSlU189|y80VjBTjXdPRY)BM?Iy<1#AbdT8!4;OP3+SL)=mftjXtWGbahQRc)38w+ zl+0}kI#CC-Aql=;4{R8yhK4qHKn+&NUJyhd0=zmHGJp!%UI0IFD$LaxWG!e48+4&8 z$dQm68o~7i%n69eAIN$DBL&dDDFe`%fY5vPd_l!MWYwTC${dKlj|*ti3S>|h5)$CV z4w@TbC`j=Qjt}vV2QBFf2Au|(o9db8TMQYQ)KCEJ3jtk12-`{kibs&Vf~JBN^z=-S zPWX*5nhN>~Xu3cZB60}^%159kH{|p)i+B^zp&p>=CWzC(l?G^^r>kE`5a{qq@I)3Q zD}jcPkfh>${N0UUD;Hte5L~i?n&9wk2<}mVrXFF(CqM@ZKtkZL0vFi6BxqyE(=P<; zLSxX-D`+D*Y$zJmV1agHVLfQXID@MZ%19Ty9SO}GKHwfepn?XdAqI+VJ3A9ia4F~N z1{y>_-k@p%yWShLg*!e1M1oo&;BbMCg#^2XKt>Q?#V>4H1-!lnT=+m;YHSF$CD_Lq zb%B1hhC8G_1adK2h2~+zC8Y1ipmD&=hhD3;Y;5Sh)vU1PEUP2x@?V z^D(&f1!94kUXVHfUIt*9&4VpDf~6l&It33j!FSc8-B1Bl2zE4dT;JK>FU-}?8NS2a zH6p;(IRrGU4LX(&6xi`ju5O^wr(hpf*8ouDLmYZDfO(X)A$Z9Ns5gK%YYV#l#|TSE!PY8)ml5M%7Yy2| zmkL=xjJi|`G{EfYq5+YIh9qc_1#EH|Tr+@fD}c7lp(QGKav0Jw2Rjxe+`ub=j6hW% zXq*K!${G;v3r^hd@nK`wRbf>xw~*rl3$ia9o0>mSFJ* zFA>4h`bP1lkZFC;zI;gc4LT_SUoZromH?+w(2hCi;dr2}VeutJm9T>dQI6C?7Kg8* zfzElsQ#Q19V+y(>4^$i(z=n;%WimKHI|h5YKspzo0Ruz}3CRqoCrlvAFX6{B`lc0S|&tSxv7N8IWXHw`iD9po%X+TCMngNCo1I!h46f8j2>lk1-0A#%Z$QMbd&NnhJ0c$o<&`~fnBc!=F z8GPkusv)Wa44lDc7#iX80o(<-2B^A?ApSQdQa762Mi9>%8xv=@5t`jbV3!+%ypJ>T z5H2@H(`^jVZA!>)LmdMhg)}phqIk5(H+FS|rXCYKkq>eJ!U(kJH+FS`8evML5ydFJ zFm`o@>Ni8u&yZW<44UY3ba#yhUr+4o807651e)cAo|OG1wRFoLZ)_VjfP0*&B%2D!pdC5JDa2X_ZRn+3sR+F08A zhyoRSd<(WK?O}Bmct8oVyacsd4Zb)OA_Qv3fXf*~SqWV_0-o##Z9hp*%}XuHOx8%P zC@9h?(Wy)=*2&8UO>V-@8c5E_2QAeE$!jRY$HRm{E5nMRQ=^$lIjQjl8u9TU!TdC^ zS(-WuC7L=4AoCRR@-@LzhwuyjG_c$|30gQ7Uj$!V1FG6_P2Z#z7sRI)6@l+XhmV2z zI)-?}qYs1yDGDL18DL;BfqEwwDB2w0xe?6F6L!5ko$Zf zqgLQsnjyngkb8Wf=_4RG9@OrH4pc&tF08u(J?aNM1qZHkp?V-`3OvOIPut-A#L&Sy z(285=LZ!r_bm+n+P;4RALm@9_N-Ro`k5_;x1BESm;{!6B1nO3rf;wa1)&)49z(Myfu9VcQ(a^wh6fLOF z0^iTzp#bhIc^UWk1)n<+9}k}JE+{EV$xKTFr*6=i2pvelv z*?ExWS_NoLD=5}bG6VPuMrdX*K%62H92DXo?i>ud`2w`Pp#(IH3U0lD4&8+`+j5hN zi%Rm#lZ#=ei6E_9L!Njx1l>Ur>KCG51R9!vB|Vf=I88u17~ne^;q&^C3nXA;0iXZ` z4RV6FEGj5hKr;*42^}8c3Wkv6666fK{1|>n2IS~L#z2bE*lla{#t`5k9GavIh~=u?YeV;29VgT7Zr@gE$LZOM_hk;lqkP z)CJd=lVuF?(DPw}U0q$`4HPsCDvXT{QZ->a^5E@u@DOXfzq5-YXmm!wkRd-UtvIzL zKTQJ^d^*0azD}+|pt2EGWx?bXAPN+qDxgsYubVMj4^F`@;C^&`2xzv#)6dlfbO9eY z{y+l>2C$I?_yh~27$@dOG1`mn}Y5-1Z60Arw2M1qLHUlo{?ChsQ}&3 z2TQCPc{&R5poNPdSp`klJRW2O3^XtbU0wlNCI-%u;PFOK#DWWb_#g(jcZV2^h724) zXJaA5OXw;vb1=jUpc^;9g9Y#z|)VAWeT9N9neUae-JpWLY)TfQG*WkboC2?Uv`10=ds-)23i>lI+3lUv?#AQ zzN9=e8OwTk$Pu$pY4Cdacxd{oD2Y$bFG`K~aCLNX4MM%N(TJGIW+V7)GjzxXK2!p3 z{DS6Tj6k7c!~kgqfNmB>K7$@~06p~Rc~IrAiE^JbG+>}{hP0UzzQ+JuyMnBYhixh~ zQm}v}Y|xx2=xQ?1VfnCvEjT0yv`__Ha3JmBg~YpGs4r+h5~db%m^morLpJmJh5EuG zKGeh66Zr@y6VO2dSduF^5J2mCKpD=!z>onv6A|F(qM)H+44-}nd(g+>U%Sb_60kq-BAl}i*Qww|~oUtYY!}uUQi>%wjb!Q61-X9;py%Ho#H@~(y)My zufa-RgLqtX6cC5O${7RH${Jqs85kh9BvIxVpo3wMCIjk*IAi!`4#W+SpmkrU2kL;P z(ZI)BLb4Mi936v0EI^9}6f}^xRlxcv;KMGVE(cHT#DmsVg3CtOu1LsMP4qQfu>O|` zXp9zI)*u@7khNi;b{%*z3DkJlF;OlqL9W5U3cAJ&pgjih&ag=x#{efd2b##hl?SvQ zfdmz}^No_SoP8X913;Vjq17a;gQStC6A!8(VS{QgaYXq6l4St5zd^f+;!{%7GV@YX z6buHA~(hE-`5j# zw6}jyNIdxPcu=zrG`j(ARlyhC_=6871lN6#!@xmv0-$6Fx|Yt_Khy^_i5CLBEHngk zFnwSsXygUdi1rVP1l?8#I=kODDBcLP2@~}|N9fsrh78b^mlbq^z#pj4{{BI=C>eM(3p!WD1rJ1F@Wxz$}PyuNiB-cP0dY8EYbiqLKBN~ z72@MzTjeyA6qFRKz)&eSH8;PgQVHG$0^jw7Xabpl<`1Ds2~;wffyXPLHp3d?;5Ilk zY{8`p_Pa$*K;8Tlku6u&7lL1@e2sw8G9%Z1+3@!dZF$m4c zpfj*ZS)e5<(xuDyBz+CX*?x3|H`Dvh0sKg>oO-*YBuoUPbpOTc!JkWtLkmIrxv^3S? zJrh zoRvW5azXlIj=qQ$l;C-CaH@3lb%G1S3VdkQ1YJxDjT=ajioU|n2sWt)j!tN;gnF$s z^h%;|XV4gduM^%eg7Re07(s3l(ij1#e2GuVF9nSjmMDOD3J@N2Ne#+v!LWIJ(0B%P zhQ`wkv?>sEnu4Z6SwMbKiDPkbYEg-2nr9wZ5H^MZ*)W29cM5n1E7bL1Sx|iID8wV( zqN1Y!nqC9lLkd*~(+{dfbWoBI=t{0)`1LE`1cgNpXtWI+l;DI4T9*^*7aZc~139V* zG`!;M4Jt9ft##0a@F7Tt6KjLkQ-bfJ16dDRUI9(AD3gJjn$Yo!;M5Yxf<^`KW+6B? zz692`4Dv-;wGQg&fX_Y*@No=r^A7?Qv!MG^q>=8!9z(38emG-E*^4!R&Hqy_yl z@Jdj}U|$9Jb~nV*AowT}tN~#V?`np!N(I!{01pv@{0UkEp#a%Y3S!2`Lna$QD^xW= zr3Z+irC=1QpsipS3M*^C>BZO64LABiK|p*l*zGKPU-6YA{4o5i)=P>REvD6?kk4R&hxI-o zCV|otmaZi9@@#eX zdp_WM(Go#-^Cs%#CT1mpSV^FvnB2syL`?-71<<`|N#L;805KCaVHc$(LBcIJGY_gR zGcO5rBqD~_Aeq7tvIx?U0d}1dWQhoz2U{irDte)pOoG>=!4sz`%Ft(ot0U+r4&<|g zoxS5d{J}XD5(AKw06Oa3GbAz|vGXp+M>0Cdv~XgN1HqoSPW2fA4g zQet41S?2MeJ!kMy52VuB6y=H<^1RBxBS3pC;AGV|saZ&_ias+&E5BOH4_%P34PbVK&1tS9k3j^4iE$AdN zXbKh<<)GRex?~Kp+s(f$wWz!(vm_O|4j#UNxD09gv`#^VM`n6PY7y*?Z_p%4cz$+j z9_-*$=w3L`Mr@ctpd&89?J>v>xB_GYp+dM!1xbT9XM+|(fODRLCS(=1yJwgy^r#rb z8C#$U0Pu1H@D!G&0&K3t*VPv^`XB5I+7AM$>q-)fvx`B4lwSUxevq>=5<#O0NeuDv z{y{FFQ*}H;LVR4~As4@ZDksqF9a0kmHpdPsX#+r~KttjPG%#uaY0N?eK%2iniyc5M z3ar&O;-Dc=84k&S0YR?u;H8f70YU!GuEC(o%|M5iB39T1M+Sq&Ex~7QKsLiwfYv7$ z1*GPsz>Z7;tvOc!pJ``k1g$4PgQf7=1u_Z?Ub~Mp{AdW;-~djXh=DTjdI{()#h|{3 zt6zv~P&{ngJNOtB1@PdbYhFoek#kXINoI0l4pe#QQ-nDL~y*qX0UB zCNCdyI1P9-9c5$_dTJf0`wn&=_!J6ood6et9H;>bYtV2rbQ}pq5W21bGDHg-I|JUNGRY7ieQJkI)c`enwT(D_`3S~2StL`^LhIF zL7nd$U1t*uvDv z!on<78#IFm8lZ>lU59SLfpFsEVbu!w8fg9i#> zhANmCS(;dynHyP}hC+P~PAH%xg0|ljb?ODyss}HhFp4(;_oZMazXRSHt=c!R~OJ|pb7M@x=>Iujt3oT7arso5a1dFZUV#d7C2`a8l#PV zLm~(^Hg1k83r;7HfeMW>=pDw8quR@`9M!I%TB?BKSawZo*iKMGO@-=OYlT_`q$`Q7 zk;d2E3ADKEh-`6z)WKR@;1B=}-hoSjU~pg3$<^J{FW$w~*(Vq_HUL`T4w{*FHc+TR zTDAjU5)N+ZKxSQ_2YHz&n8KEqBi3zz2L(a9RM4(g0jCq_nj#;!U{HArS|T40as=dj zB~ZQOs%vTL;s)NS7~~Ib*nmz0MlDx0G*I^{7UicTmLx)UD`IJsfs-64^FvzA;Gt5C zmN4p$a|~&4bq(77#NZkb3~Jw5g7*A_m-c`LapFr9uvUiPi8PaVQ%GtDEpf{%NRCfV z%*g@O8ID2j!Qgvu5%nNE7!_d69i*8CNH;JZ+UNo`9YGV;&`g9f8G=;*89T!dNHmUj z@kKrD(bNQdhyd6T3R+N;V41Vm|_<0;JP2QipdXh?J8sfAzs0d0qiT# zsWYJ6SfE4$ZcJk|z#&Bs*lW-W)#6=39esR)-F!UJIxj(v&aUxpj?SJwpuUQcf&l~k zSZW0gT__vUMe^~1XIR9*gIT;myalYUiV%j323W*fz!EP)3bgzU+te^PGZ}%Wh9Lzb z_>@b9_;^r-1scZ(XD`&N06>$`pdl7;RKf!qQci%Q6TBZ8e0BwBJ2AZaMod+pbble) z7<7Ld=;&#TgRwz^kh3|U8`zEGQ8uuHxZox&XoU{wjD`46KhPi~Y|sYmN?6(fRXa$l zLkwV7cYsDE90LM;Je|RdLm=mZgKilFO*+Oy(hG*mz=;Sv#sYO2$f@vYd{8GQ*b(Y7 zP^%O)T?CmI0wqvLYJs*SVE0c!1VODJa1MYDkH8fnO-rMU!=tQJHi7q4A^N~44=RAF zf24^Q$Y3vMgdJK97MB#2CYLBcuJ}{XiU-evfQIC)72=EFW5C6!sVUJ0u?n^ds0+X_ z6&YeEGQ?D5grUd?MNw{PP6?`Ypwa1g158CI)`1nFS_d`>#X7JeRO=E`QjmP+=;DH6 zPf=oCN_<{w1!y+O5LDwM&Vq>dbM*5E4V?KphJg2lfev^;9D@eCuRh+>&%-syGX!+b zwX>6d8n_^ZTvPbDf|$HqZ`hNUI4vW&yep0+Ohq>$eQzVapBS z86UlFH;Xq=FtLF2PD32MF?y#O1r=b|Xo9bSg-nEl2RcB(-jTjA&nIt45~IK;)r(+PZdSbTg&Vp%G9 zDjQUAn}KIM!9EHIjt}>Dg`6RXbi^b$Gk_cSkmX_uCJf-EM4<8*yt>FpBR)+hz6>;w z1z9v4pQfO!93Kq2LlL~Xhyi{}3SUX$$IV!fiH&ofHf@0S5ITACN1-mx+Rl5@^E# z)Wn1@;tK|E=~XZVUE~$y>g)(g=ipcdUlyhhiuRV&7z@f&oyU=hh3!(TAvMTW*{}hAVXK+ zb_G1J3{1f5BtXm7{KNfRgW~<&z>DR;c`XvYRzgETLk)B+1mxar&`FWta}{0lQWP{b zb?pi&{8B4QbnObt{L3MiaHB47aEbJD1hs-3gMu6*<3V%cpc!)Tov_g57m$;8P#0i; zPKq&vxfF7KG-y^1d2$(kqb;NoFoe_sMkWmL;h-5ONL3K*3!3VL1qigl0xb#wZ|sA_ z1w_9QbTb5&`7Q9mELfUEbhW`_GSK5sK}LdF0^rlHU4w$ai%%em19(1b@s2z2@va%d`eSGPt4#{4fx95go);u;YW?-=9?tMDO#2O3-(hR}wPg5?Nnh0HWi zwkgX8okpzyI@18z9)t$)^aHd%qoAn(&1)z|BQl%<$oU$SxT;nGq&>vhNkJ38FCh6D zyxaqv(m)4cK^k|c19i~S3mm7QMK;0yKJk#-jKK}Z&;Sk4O@=xO5hcO-Ic`OXxvAiL zT%fUvQb;0|bg;Y+n$U+#0sFhfLwbzh1ACBHxPi{@R4_8r0*$Rg)WZg$AZNfMCLzJO z1-5D#JoSs#MKnW^1dpbG4tzl_ZB0#K^_z=xxFb?_GX`y{fX-|}ZsYxf)2`L-9Gd3dH4e zuq4zKu-euTS~!9yz`-s62MuUN0jSXu>I=GD5td2}jR+?buv+LGE+mvdrKAZw)(t`3 zR8WdDLOLMR2kI(l8wygq8d@-bT3etK)su5dQ&K^r^ajx3Dfp^X=m}@wDML3mkOvsx zeKyee5co(C_|S(DXjM0C0RVKE6r7ep6V0$ITR{gKK#g@#0Bz5QjpM-00}nZYu6;BD zZOJhNA8QkzmzbMc3|azGT7+dadqHVYDtOo(lEoZ-<2^h>zzsMB)D>1RVfZy9;EE1< zK@O;r1+Q#T03Qtp8vlcE)zlOe!7N?7`1sT8AXm_Nn4bQA@NPD|IENgn z2ih13Z6JUq=0m}4Y>oR0##2a|$LvYfCi1EHDA$g4Ut<_<&cUfX6eyjaBHN z9O@E>3aEkb91ObG8nkd9W}~qiXqgbaj|Llg?8uwf%eGtn6w7GMHy4f2F3xTuG3{(v|e61+&eKfuD! z3=3*zgYTP!w6H-ZQhI_`bRkWb8bVHm0c`<8zu(1-Avh!`)HwvY$1)kTy;lb`hN)9f zl&S;DP?`#0K?M-o8fqtsS3py*W}xxUl+?r&BlNM^`1rhh$UYKi-a`*4Xv51y!N`~a zaxWaDCPG;~2s+Ocyqwt48NB)zwC)VFaxxq1nHY)5g{7HAsT%M(4baMC@ag4{)heLg z1|&>D)dhH}SjjCQ6m-fr_^b_3hDDho0SmxQLv~DjkgE^;;COH@3<(W#@&_FN2H&U% zk7v-*T5#Hh4D-r|3eT|S-=$U~k2Uy*J7+Zuakue6Xu>G0&u+(k94pT z^27(EWu>8O2|D2#blN1eE(9%t2l)uzvIogQcfx_o4Glw6_^Da`;3+Z49f>aR;4=pY zF}(cq2nY2(+&tYqT|g<>6V%UEfS%F@K7$`V_~haljCcIWzbG?3GcPd*Y4`~eLy+(Z zKz27Qfk8TlhTv6Bh!G;t@B-?75$Ny&R1kC#k&_R2T`er23=ND7H9=E^hGy}I;VvkL z0iIujT?6BtgG1o$DNu@z@bLv*q2d_i4q67OU}9hiDnT>zN>Fz>2f4a~Vhc331m1`a zTJ?nGgaa*2@TRmHTLq1H(5dK1LEz*HuZ_V&W8hPFTn*6^Tu3lvt0QdZg)w~Rg*oCT zK2T)@E=WL?DWs`wPyuRKfnpa{qC0{IxuBT|+yDSogfP{JiV%`yF+0Pci^{>BVQ|0O z2fpFj9#XKmg6_U>bb{_Kw?H}~-8VGE6?8!tmIWojAuf(V?x2hUu1i7PPDAh*H?)ia zI}@~Y6jUHWoet^+!>{Evf|U*-L5>liC4%w69-w|RXk8F;x(#v-4)t{f4V8kg?h8sS zE(Ko|5FZblECindk9MX4R4zVVqXM)zEg(2PAjsbx>P5&=L*RxnWQ4E9fGRpdkMs(C!d$)Fb5qW3)T~Yo9y8&ss78 zbzqFZ<2<0|KB&bATZ9LmD2#_R7C^(n;8nPwMw^SP8+f=F;xK4Y19q7qLwrR^eld9C zRB>WiY6|E~{nWg~q?}X*h)iZ)NpXCB9;7Mm>Ff>hC}?9+JnFI_(8LU;Fu4B)s#u*I zL1)^4_65Oq1u1AKD4}l)0?ljU%7muz&=cR13rgcNVOL7Pt9fU~;1K`N5XfdYMEL@# zT|kwh4>U1BLIJt9gh*hij-hAXK~^n-P7HzS^@FUaf}WdeP+)KH6I84&CwKV|UacH1m zr2x77&=9;@7bF3`{LoOr3fe02b&Pa!1x@)O#tY$#TA(MCg9}(t{tt5WMc-8j8RiG? z-UxF=oC^rBC6iO4<3 z1Erw8l945}f9~juwCV!2gA3n#p$SgmC6hFs(d z6^!=^4Gsa-`H*%A`0hJntc1P_M6TEpP62vE`mE!TnM z0$7R$kDU6u1%tCI_?QgP&Bp#N@xH;}#U!xdBJg3ph6V-(3i?>j@P)Idr8#DiAeggXYg#5?=@1~`UzI)PWufOb*CCwJX5%TnR%lr&&d+R$i)EnPw=04@Fo zN40_`q6$Y81CVpKK*zPt547u#xL5)d8lZjdt}dWfIV7pVw%j^9 z`uY2T@3)4Gkp#Kv8W|Xx>KQ9Rnya9>xX1w5K}^O5pdJ`_eJE&WFZlW*a4QWi1YWrc z-pLPM6NOm#4w}mWm2r@j01BE4Mhcn?@xG4E9w_tvpo9cA48G+GWziO*LJ0_R1#NWz zjevp@Am~gTq(ih#jbVi-N~Z^$E5XAMprz`N@W#9t2GVYU$RZB708N&IWgu%LAQc+w z(dMPe;0bP!7f}xj1hsa+dcmtKp~I8Kskz{70FX{RD0VS3I(QcbXoeY77=Q{hQ13KY zqbN09CnK{UzgQ+Up#j#UsS6X=Hq_MA zHPi$(k}~r^`zedj`ozcs#;|Er_;3ff=LiWVa90iF1<29q3I+_Jh&5^&2qxMvFKBoi zq$>zC3lah!#W4l-&wcXq(!p(hhImK6U{82^A7wloy1LZR%*hk7Gu8=w=MpqaKr1O& zBLd=7P&)w9VuA4Ciok29;(eXsL6>-g+F7t^Z_pS5cxufl)D5%&4YrmBwi4C_am0`( zWP};qg9OzJ;KC32!V~bJ5ipGqtBG0K1-`vf6BH6I3OeAvM{t0rA?E5%*x(arTMm59 zz9ndvlY*f+d<+{=fPt0?8sl0fXc`Y|c7Z|wywE)Ysr?472b@8BQXs{rV@?UtcTOSh zJcQkI4=QQFxd*gqMni$njrFi=ry!*nIFo}1 zXyF0wWBovf`oYfh1Ftay-L;5xCo6a*ICupE#B#q7W7yFGuvt5J9R{jp++Bk}Yq>mK zT;rW0r@oh%5Y_ z38bb9;vgpEK_mFs7BqXKG@U@jGi(4E+@dkE0L_7d=7wFv9DU+_T|+$lLA!Lp_bdj3 z?w2-EFoIv?08Y#5Q~{3{>5LlQXOr z0A9g>&;m;3exW`-ItrN8fDUApG|GBnP!XM!pPv(7QdF7>+4vrxSd@x%QVe8B1-#k> zvOXD9{(w8wkgfb~@z9|v&;Xo*3Ahk}-cjZWn%^-5*X@Yg6JfK*6`Bn3paU$y10>*8 zT=DU+Gx#*Xb4h8LsW~Z{3aEk#5K-`nv7qs5P{9WoR@I5m)l>kT+L51=Sdy8OssNi) zfR3!%;*(SZT}GL!si{x{+G_>ca;l&ap9>zz^A8Gfa`kie039@pnErvMWNZtxZzxPcH74-QXg(T7;Q1Db|_O&frAGlEjID`W*ZtjI*P?p#gK$4WqB z`k-_Dz_&|525A%w7(k8wU{DPn9~ul@lEDC8t?c9(q7Vk;m0Vp;|#Nw-mJG2Gqv~se+ur6Xxhs0}}yF zo`Lr1E7T$-@{q)AjHa?qg%fD{475`Zmgqssz)fVVt!5oixenKZy%i1K0_5xI5)WyD z8XAK7a`B+nj%P4vn;vK=47|7l(j)~9Q~O}tQ?7xy!6qJgbsQ)JL7T-uWe@nu4p;d2 zBrJ;JT{ZG_GO?d<2$e%Q9d~jUHx_p)tgKSdR!ahz4;9Xs8b9x)lXb`w!}HG%4_; zGH8+!I&BN8M?niZAV+6`&MPwp9f1MS3=1=Zc+7c?2xmy?Zv>j%gti<(X)qqNsFEQ* z9&`XFY=bYXZG~i>IeIn$djwnt2e?F-K(8vs-13Fe(g!&ndJiaQgE>QdJg8@YcG@OH z5L9KyD`;pyPOs54)HAmVCFY{QNQ zkB`^T&?r{W(lpT2wae91(29=-l`k3Fa|<*TtQ24erh%4;)`B-mXc#~@$3wc-;N}nbggVdQAn?5&;JxwSMisnw zjnwr*J7&hfzyOq)z-0)$4S+NvV~jK+V~SFQKwAPqpe@7(mY^-bptb<$B6)KKLkq}O zVo#%Ba8m-F<&BLY!vfF&0dO}EbQd;ai!^k1KiuiCC;$)qfm*MS!qcDvl*SD}tyj=k z2y{>ly3-fR12+LO5{qHS_(Rt0fh%*zh98C0Y}L8uRdXMl5jxT9wXXhRC9 zD-jgJ0BTz*#5?8Z=Rh0R;1m|_7zs;0#U({0`6+3ju2M;U8fZKYG`t8Jozehb(qs&| zqX{Gk$z0ILM7{_P-VQ{%y-=sL!YQ+)I3zzfwM0{aAs94RXnnS|dPPT3s-RKO zW=UmyyoORrYFc7x4&>%c*qSLr1w%7K*qL1c;l9Yn!J2^zCD0jvexc6bOQWGP(4Y&1 zLw&*C1SfjP;($=_b){gZL*}MIEp_|+%0W%& zJ*|*^p8=V9d8sKO`Of)8sTu{~GZvilQ&M#blKm2MQ*}yesGG2j5u3*w#v5W8Vu4QS7^6pdNRR=1J%|Z-HUNBNJ!HuU_=G%# z__U&m642asX+eB(d1gs+hK43$VWif)?PA_ABU84Cr(zY^^-(DnL-f3bYs9-!C`> z(vt;`5ov(gni`PBZUrSp@gMfT2Knrpc)d_Mp@8Oa?oa3 z&~d+@_93Vs0qsaZh$%o4UoQ9rZw-*q;5KzpYHD6dd?NUyObwW7O=|^^wV)|?q_ZU; z?GW&!0;mDv?-vhAYM}NMQbLQ5FD@xc%gxWjc|lTqJlfJJ=#@3`pjI4Ib9}sxLRxM~ zVo|z|LRw}~aY;roaV+fq@&eFa_O{2c8rO@dye9l~G2HP`#jm5!j^}pb_wR z(Bv*?s@G5fl%Dg`G$Kk|E0V!mnKZ#iG#D!wTEgPi&Djy$&VbfbsON}6LJoXODY%ym zl7;NMg;q|3QVPBn2dg88u`Dz}KH#J{gjYm0oJwCgbwLJMZq-|YLS7t00ca8 zr~qH&4PL$z4_Xr!2I+$+7%;#)w4l>vQ&W&y<;d4_fLHoJQ?{coXc4wQXalnXc+?D> z)IeKj!RIDAhPZ+T%lw1Ei-mnX{Xjht@ZhpWW?o57YFTQIrh*1~Pg+L-+@Ust(#ANu z(nZ+1(x5K1Qf_`(Ca0L6*LfwK#Yw**Bv>A`hd<)35^Fy$NPFjDQGExRuLH(7=T)Zpn^HR1nF)v z(DVeTF94oM0k4q*yBV~02{cv#9ySCoW-u@?0JWNs24cViY<|!TXo5KD2s}Lsz9&n; z5Pl2=BF2Nj>k5qGO(EMTK-cVm8W|;-xvAtgQ9!!!v{4YtNgRDbT!Z`^LqO*;g02dK zUoeY)aGrB$aEQNeyql+wD`dK&AhD<u@CiNhP ztAf|+z?#F*TX-Q!9x;>v-_{oI8=zoj0-L}E_iH>{9Rna!+Zt-|8L5c{@u_(!3c3nV zPH{vSDo!$YD8G?@Z zfn17Z=7O^34t7{DtlbN#G>KWd0zS9_l!+l-JET=m=HTH2-_Quq_za|%22B_SZf?+o z3U9F*gO;GhyMd+-^uO?Ax4OwUVA(I_Z`%mLHcxZu?fpYUF zq@0H45+mqxPjJZt4SY!2gsj|#e-rtd$vf~0WpqX3hI`C zmpefZVev8WbP9Egcl86cd_n8aT>V@?LkXa>_28FJg3j85EHH&`z=UkqiFechZ?}Z( z!At~&5PT=5P9E}J%;>yW^cAsS<*6weU>bDk1#&bxIR$`sC4xpSLBn>SQM#a@&;U^9 zI~X+i=?}Ww8nj;lqyqH}RM?_$P(lK2mH=(?Ltb3~&ePBp1fUj{8#Eda1!ZK2hrgeK zQbA=&Mt+_W1FX{zI)NVA|A%+M!AS{xft7+G1E{J2jY5aG#)D4fatsL#0$siBWaw<_ z=;rFe;OiOe44Mp%H&8G#F@c=52I*IVH->rR1|=E`$i1lnMzP{i4Q?s5eR8NfV>{2U{C=$l@=8H;F7?=hyk+n3)~P? zFfxW+Kj#q++H?oLeB2Ry&|`iP=tS*&(0!bcu^!N=+pd8c(7plst>ik8E)TLW=-L_` zh1|p}m{AI#4H2My4+fC#l&ONDr8zWrfMyV(T`3R~ddv+p(I6@*R|Ax51R#DgKrEF3 zogQxj8exI1oiIY2sSiKO6MTrLfia@R4L-yS+;+g&a|G?QK?d}UjEvl1i{xFwA-KU}Xl4MPWCtf6@V*R}0Ji{8Q3MGi@Qej$${RWz77xpauoZ)lBGnMQ99;pl z%M9!`ut`WeJm7H(It&R?8X#%_&|ogM^>X0BT+4V+qXm?C;&W0Hi%U?l5G=_3LX1qo zOKG670vnV>IR>N*zFrwJ(&v~WEmcG5fVfrC}SYaq9|x8 zfNnd-dk#2s^$}7Ib3!}q7c^xDIh+MCBB`LMplGWA8qb0ru>z{T6*LtPD!^-|&>gJ_ z9=u|R2Oky(8X{CMs4$04R55_pJ%FaoKm`J1uu>+cmkSloj?hx=i9jNUK-;)MyFd*7ekYQ8900l!c zhM*86@bOQ$ZoNbrdJJ-Pb_KQR!E7@EVX641CB)}x{Vg8bb)eLVf#p#vDuEr6h9Q=mD$O zRI`ICW>8Q-eCFvFf|$kv%RvihaP8va>KE)80zMTV;#I#8umhllG-x+1VzdCZl>*Wo zMA|@s&HLa^t^sUO0o40JAkE&duv;s6W3sR4ze0L0X1)14!Nra zwq^!(yCc%F80d~-&|QqMaWv$0HLx-bVK3;YU2LrgaN;n8uet}#L0MvJE5If&8RC6B zeLX{hK@05Q4OMUgh7T%(7FB}=&zv2>KsPi(f)><+Gy-=l!Sm7@(B51mXc4dmthR+D9@h|qcvoYTmL+(+ z52@n|T8jv7uYoE7cW38#u=7C|0megDf`C?1#s`Nx27nIX#tchC!+6lb2WVbHgfZk^ zGt+qZVhMy4WMUXJwrC6*TLjk@$n!+tr7_^aFYqiH*6AYX6cKzi57^nz-6-(o_GpE_ zr(1kD=)%e10MIaaVsSQF4-7Q9pIcf1x&0c495~>ELjwXp8@l2lONJf&Tp)XqH7Z=e zm!GAkc&6l}LKf*li#1QbkYLx45b!oRaB&VV2EhdzNC!1us{M+}jg3gDAz;3r%|hsHod74X%`3I-KU z#>U`E3p3gw#RI4y1+9`bFkpxe^9Nnq?c)kxX^1FbKpWWN6^b+Ri%QUH5Lh9B^*$x= z&LqgZ3shxeZS8|KF%*EuNqoU` zy|9sz3Y~(|3h6x7~_H@EFUM-n0#1#0wHK-L+8cF8MXXocre z=vGe?(C`V;upwx%0VMjs?gX!NgLeE3;X~et{A3;v8Xm#Sf#6P&c|5$}MJn9E!&NW(OG*a)ylWL3;Y2ybHZI26X8dxHk)Gs6+e& zui=nZ1DYbO1~g{?UEv5i=F`_T-VJmz0H}b4bt1tTJ;2i~KFBo?vd@ej-f8`mPUqV1_n;>jykCRGK39a8)DggW)Tm%jTSTEfL2}_BI-eKkb@@G zjpM^09e%`y!g$DeVz6`M;O%gb-LN55V{oAv5ab!=>Er4SK0F$nrBFM@pzwk&%mo#z z;CeUSGZ=cwF}x@T4;4Yil^}@?GGqkx1UQL9o4Sy#Xpr?s;Bp4+57sP z%W@Id;Xy~$U{jjVtFOQtQ2auI<9$4xT$~i3y;A5#cksXzxZ?+I2SMlK-P~YzyMgV7 zjfPr+s#C;)eb7-Sm@N9n1kjO4U_-$>cR;6SV>u8>0kUrgd>m?g8Fbkvq>u!yIf2dZ zBKBuMQWQ$c1zi~liU9Cr5^VkhG*JSrKR^vSaCaAUz-NySsDp#ynzd$e=NnvO z1vvUb#|S`IDuTwl3_)c?0C>0!l$`Da6M^j?MtB6N8>^?hm@c7c>D0 zIua1Pt}s5pB>=Rv#?#R+K3>7t#L$QVeCRHy)1d%6xCpeI3zXWSL(|}17rr@jJagpu zr>{}xtx@jh28~@I=B2SDDd^Cn0?srA&JUo@251eU5oi%2XrKsG(n1?S;8X!FCg2GL zR2qQ`6nukz$VCV^mBO2_3WkOzutRgf2fag~1!c#k!gb;Nd>Fqy~hqg}S;H zyw?J>nH@BH2|4Qud^SIHuLUTrfL2(+c1nQwpgk4fo@-cQPHC!wCIe)ps3-W?Q*dHN z?5zdQ)H?cr(lfXiVF1r0nVH0wAkAYS#v?)d)?j!1Aw&sZ5eVI|4AZKh0lBT2;66`~ zw{YA(2x_Z=!x}u|2|Io&9^M}Sx9yw*LW5F4gXVIYCC1Q+nk2q*97re3`+_ExY@O5-H0`2oi)Kt(&)QmQW)dACnP}&Ge8$)Rm zC~X=Gb1*oWI>&=1X2DEwmjbq)0MtE%w5CD#(}9jt1I_V(PQeDr1P6G=gO(A4ZkGU+ zKj15wK;=HHc?HUB2E^tz%&cLk0A36PIZrjjARe^a3cNuU)Eq-wr2_7JVq4q|K48lP z)bs^sP;imp767{K$P=_-9yvOQX?KCwPGMKex!nzUMg`pMgGH>di2>~7Ldd~|s8=0;Rwsbg=YUrAGC+sM zKu2UF4GV(D++od6r;vEiz&y&arqFHjuD-58?yi2$k&qc-BhY9EsAvNZ8$(B?6by}E zL#yEU33GJ@kN$&-P5IDzWfTkDVi<_at{7CDYq0U6qj1U(?V-h|pgfw^z4kFNiqY)^T z!MgCE6b3$`7L+#PLFd`{ID#8{;Di8LwG$BU7VqpI6y)j*9$o>>^*}6#tjBV93;{V6 zRD*{4fv(A6hzD(_cXn}gL+)3C8oOwXHRPfL)Rce?cf}nJC@|J*cym>(ZnG;{a;1mR3xCk2^g>Ehf?FP_P zfZp|rCWo@|95PcB0X}pObX*~56%}}Z7dFHW@8h~Czz>)PE$E2{t)b8W?OK7H_6Ixf z1iY;P%Uxd3SwQffzwG#&#A48uR`H-p7JA_oR6%Z1PHGWe}fN z4sAhu`ng7cHizlLRx?3oW5Mkw&^lnyNI!g)9%ybJb4xO)=zz=}LOL&~9U16YJ@TE0 z;0Yk`y$n|VTws@` z8iLNd0F97=W_N>qX3{($s~pvxgZYbgxD^Z%em5n=@Zloub*0NHz^09l3vK9L2qZ^qC7v>!A+UO_|G z*uWg-7l_Y|4Ix7Um_CP%On~;Lg9ej8JIe@+AQgb`*n=-|a1MwM@CWZmgj@zmubnf*}KR%`gM}GGkb` z$j8w+Bp$P0gk|y*y2LL&Ajs9jKLk{^LF)@dpB$U^DQT_Q0n7F=fngng%(T7CLx};%eAh9Zb^< z@dN^FNgoznxP!qEcQ_d04hTcsAptrfEi%9ro3{*chlL^Tz%axe8b-K7!w7e17~u{L zBix~3ggZ2haEFEw?u224J2Z@NhlUaE&@jdw8pe>&fHldCQ3h#@VIx$a7BsZ#0?h=1 z%W_ZwuYt9Sr~oxqibL{23z%R>_#xE_;I$)QBcNqJa{U4kLN);;0zT*&tp>od)&|nf z0QE!+%|KNpWbqPcUL8^lBFanfs5-Xwap3VT(5bYb?JM9(`XJCsX5U~1xB%z?WbmQs z&^jII_9M`JxQ5Qorf#m5ur?XE5eHsO?uvdb6r?iEe$2T z;>z5z)FK5X1!a)Df)Z$>uX1r^u7Z+-gOY+WL_OBIY$M2AHnieF3~53Zx`Dc#;N_$+ zFU5Ph#6#9mz(m0J)MGS6(c=ZQT+#^Fa!JriJ4n08&joR|EM#jdT2mg>yaLU(gBBVa zS(;dynHyP}hB82QvVt}$!d8ZY8j10Uh=lc~eL*{56d(uZ1UUPFhr{4wmnN{K6R_q7 zcySZPo>jyWCukId90f{@;9?lu+H()`3=41#i1+Xe4)J#na`XlFqtbFxD-w%}6rv4c zVQ~SSs{%KwLCeArM)(Cg!h6Y}qp89{{a;t?M^k~TO6ZLhpbigc{1w{*cld^O$P#E! zzYDfN2(ld>v`@_d+#ClF-$F(}p$CW|iGU6f3-kAMQ2KU5%^3p z1!G7-6CB`agn8~ateFc=xS(TSIC2K@Au@!TB6=t%!mpXkgM8>;dQS(0FH` zAjsH6od$F_unR~SG!qItvL^_1hDeyBr%!wsC_8``(|`su4Gdt*c;H&VNzA~&5VWr* zAQ*J^5yA%`=R=2&O+ZVX4M9gOK$e?^d%AgoZqGp8gMpM#VLA~@h>Soh@8Q#)h{hIZ z!Wdhn4xJ5!4=+O(>KnwnnxWht13JzS>0Puy7kfso{9SyyP60}j@4Vu^@Kr7ck1Dv3ZFW{?akY;PalAyV5 zSfc~Jmd4o^vbYActr}d=`a1fB#JhO9$HyZEY6F7f5vyxpA?_3z;%WfhO9#4=!ac+z zSix8a6&mRvAV_9Zfe|=_Mn*V5iz)C4grG~|zzt7W5;Qa*X{j$H{lhfF8_g*5IiN;! ze7v)NKxB}oyGICS{RTd)4RVqxxQK)mWr*Si)~GawobqA}F9`g?;$2~f#uyocW*fkF zG?*$F85$$6QUn*weqhtV-7jdn6gsMi+0J)HJsT2KFvbUg$Jq=)#}8RR*HU}C2Kl-A zfc8OvjPMK&@&`5dL33{4J7`e1jer`8kn+Pl$Ui*9LqS79*AP_ef!EexEZadWuQ8~A zFUv+OIRtHth7HCdM2Q&7%`8iW=_6tlBBAw%(1FBw&_#TZiMo{3)MQY(1!|7FIR=Lq zLq=d=w}C=hmY@Lj^!EerjDc2%p5V9ym*}AV!JrMJC@B*)T_Oz?f>#7%PqrunZD4hV zsK#I$xdN**B2t|(k?Kr{REK_eDI|ko`ooM!^U&7j+9F34rN79OVcWg~Y~) zA+b?nNNk)K5*sP#7c)Rh4@9rl)c~b+18UiTFmy5;)_z2u6o(zRi)9`fw7VM;?eINE z;MOekjv(-rxuAXcNO$IfJ8+($i)BG;W5M@|fX_SyZH)wVG(4R_cS!o6-ev*Gi74Yf zMxZTO;N=E}4DcCnq{}@}uP{V8Spw1{LsJ0iav+~Jp~(R1h>M(p|_Aj$5@~|*sQltxMx5-*87h<{ajol;A2kkBoZ9p>KqE% z%joZ?09&96nG}T_LI65F4YZyMd?t>ef{}?S^dw?@>!~5h5Y)Vd-p~e`vqwzmfJ$+A zTp`^u5*z|PMI6xzfVPI?;~^9HpmhWc@$s%cZeSL~7SPm=F{Ih60E>1=R|?e0^AC!Q z2T#_4d=6ej3EK$-t|y`S!3^F4Fjp`#GzBjng^bOB#$v%SkGy;oypI4jcMkGp5NIA3 zW!w?!Ht^;lNW0&FAs%UAAEN37T~3x+mWm})fMim^=Z(Yq;ozZiNVgGuGp7d9i6@|r zH)zcq@pn8SXCQEtzy=yXS4_et;Gv@ypp%GvKw${3Tfu$?^^(E;P1xKuJWYXXLPL0u zMZtujB(XRflt&?BSV5tFexTI~py7X%&OGRrM#xqeEC-FaxVnMP6@;!D#-acmqfU;_ z-k1$RL!)?5mlo<{L~aa%-K-1E>Y;w%Lqc3#AR9d6J;D_XL1_ar)e9QDg?7qZ6u<}e zfW|{%>$2k^sZIg39~Yd`K!?`C7f~A+S%7C&z?WbdK+-EHVZn!zLF-z;f$QlPVhY>G z2s`r)x-$p-iwLqSXQL1!_74qY))Ff>Qmbr&BW4B2uA z*;H&~0q%K#-2}^&;CkB`bdo%Hg$Q)G0X}Suwfql&oVNlRBZsOFjtmZQ^^J#&$w9{0 zz|n|QB8R}|3sI7YYXs>0O7Q#>LwtNhuxC8%rX_O&$YcO0XI#W{E!1hRC)47?=@Jk19lIYvDZ0o)t_&--B!hk6P;r2;Pc z5F_D8B@K8Jx>>v#6NHzQ@R4tj8Q?7D39eiq!;uhwgIjf=8V4*0wcRZ{UN3vY`R4P&R~a0D{;CQBBO%+u)qHsfCH5k%^h9Nvf`~kqLO|yfbKw8?*Bd9)5=;TIhBR%&oui z&@>M!XTcq7%nXgRwi7&Z2dyCxty@T)XaqVa9#kH|rolbIEfsKffdmscQeaggLp&%M zX2%ynw$Q~Fr6!ja6@zMd(CL$!3bL3f{M>cE7+cc8$z$hVWg1(CN zK|alV$glo@vyDWL9RZI5w0#sx!xICzxu;Zsx?D8A^|qX3d--`W7wdR zLJHuT5M2DDREIDT#9SL_^2P*|?IGs}!v|@QvL|@9A9O|pXqpOiPzz{5s;i@m0{HMj z^hyeHP8diz_?$3UxeRI`1UsVcKtT*;8>4jgKqKU!LY)CpLPDku30K?jMi#gi3GW7i zn(5#y0q(5CLyt8F9cSkXo*<8pPfIK=NlwfG6^&@)+%OsNz4sBIgPWl(8RYo`M@Tsf zUz3K&A&@KtYBL&vt|bQzSAj;8A$OAay81!R169y~gugNP)K$=QGdP-vm~)2q8$c~o z(DVdkOwTCZL;<{W3btet9xm|leNfUT0V<8bJw7bk{=xMMc(FQY=EVr*AcTM*@LWD<`wa9b25^}T9Zo@B$_^H1 zfEAA55qr?-C*Udo>=Y*_S3mH^|9Hr)XBCQy#EXY+?a_hWxqy6?ab|Hc z+EPEb;o$jlP)iWeas%-Y`PS1f1Ttw3X*5FEprr(mWsP7*L5^|t0Ua)Y)5V|_!HGGb z-5EOIWx=2|iO|)Hph!b8CU<=`4NfESi7IHL(0cbx3 ztZoZ2gf#$Q6(BfGf)3Jv3BY`YIv@x-(FwNK40`?#Tmi@f8hM~GU+_W=&~Eb*&?Fvc z^-^YDY6|F>d1&TG4Dmo(;NbBl&_#LB`WiHf0Xja!Ljis>l>&p0s~>2uAZ&yQ-jim4 zUrz?k{Gc8gcm*!F?FMQqz>5Jx*oX+q(ycJqt=S3&&`Tc;3>ZLxnpuz>U!Is*0$S#e z65H@oq2aL&&es9K@!|fi;OYW44+jobA7i5+@Hiakk~G(VU{4=^&_Nf5dWM!p29`z^ zmZqi#<`#xVrm4E-ZqSA#{4!!t2>>=7S{b1(v;tcOs{cUU7U*HXxrtecpksm)b#fE4 zl0d8^(9!51VNC^FTLle}uqJ4iwnlDdULsU1GcQR~lL0j1pr8RhJ{^2RC$vBUdm|it zhd1KrNoZW5tPTOUicLX>t$||`>~Lsr3N+*ZY9xSepUKS2$;?Yd-RuIok~uyvA0h>= zyW&G2BX0@}@t|E!DVfP7;2W$pQY#8TYu}PeGjmEZ^Wsy%=ay-Jg>@7Racy-6p9O4T z;0r4J!C4X1_lNE{@ecqml?G=O@7N5R+#tk6IcT5Dj@UW~5Y5~|&pfOe44 z3TdFrI}nx|7=v7-W1v8kUPGux1rr@mU>F1IhtN`kY01*^je_lwE*e0AWp9( znqEtgUQ6Qi8lopGN04SiVpA4+(sBapCNgaqq9-nAux=t#mmzxcaslfmGJP4MCoosA zZX#2dA$k&X1M5afW6)w2(l8>GypLmW z2-wjI=m%9JZBf^REH#3xHv+d`!Avj#+LWfNVCdtc$q)~+7c@)|AEJO5NCq`m5R)#T z9#cS&D`ce*NGCod-z7CCwIo%ipaOjCX+UaTN@iZVrUER$L172IxLpCf zZC*zK%8ds}>45HkjfjYMbn=XccA`L+@fd-}PQeRP;fr=bL#Ie0@$sG>8kXx4{F~;6{{!AvkhTE^|(2@S2<9onWIcSvy^5KN>LH@qbj0B(1K$*nxbqx*zouUrvzCn_bA-t#W=UfHC;sJ|m<#TFA7L0({yP z!Ur{FVUY{p-2yHwVABQAv0!k#!`IhhzVpuMgcN=0bcG1zW*x(-W7l~&>=;xkr}SRQzJ7_ z6C2)FL&Q7!JpjbO9Cr~upf9~9#33EJft47#AiI4#Y@0@SsG>O+*vh_NWh zkP>Jotug2%QpoJ70eEYz5oksNe0eP>vBiUyUxRLt@$_}{fvyiUgxuc)8Tvs)ORxs? zqES#Om6V#7oROPYl#Lj#hMrfgVW4TPfVnUcB#L~_L415cVsbXNd#)kkkY+r%(1fl( z0PUSdS$_bU5CTsJ#d|t}oC%L1Gx*kT9M^h)?jbWYgLQsDQv&Equc0XmbPN>oE!v=g zUjuN5A2Ej+92y+p>gVF>f^SK(kAHYT5NPFWus5{v4(lbOtzH4A*?@3g)J<0=M$pb( zL`ZzFr!T0+@JCFRfcsbxpo`W(WfABEN(BQ3=Kx3qDi|4os&G&*50+6;&uc|4m_XN< zfS0Ai51jz7`$tTYnSqiLsQLmGQJ|r41540J2rddn#-`wT6VRL*Xm1Rpl(YaRLCAO? zsC)z6zXoy%eE11m_!v|eIDsMq+{H&EXVAVMGb{@vz&%B?cr&ospwtYWfdi#xNO^)N zF5&%i&;SF%6$Z#PHu%b3aIpX;KrM)P*z5pO`H6G|7i^pZ>5d)n8T=62k*>@EiDKLv zgmJ40sBweXJYo#mJOU}zAu~dtDhE=&LskzU%fZ$Sg31eqAXi5h(7d82xK9b56jjjB z0`A_U$z^;Bv5gWg+2=h~;p{Ncd0( zX!0fA)5pgz9yIa{N*v$;JO6+XPhZfT0`Url@BtdoCC1Ri?}xZ?T*1TwzODt7Y@jE1 zfhrI9PBHN9WbvS^80Css+Jlr@kmeA;CrvwnHX$G#f}x?2l3$vXld6epzDttda)+!BUzM_6%QVs5Gqgh0C>%o=IXg}8k}6< zlWmX!K*0doq7R8jUKj;hKLBbAV62YPC;)fUG!224C0!s+z!?8RLUo!=T&eP&PS&+!!1X?-}3>y88mY@C(tl!!fgm(NqJS zU5|6|pIN*C>rpfe=E_s_x_$>0P9 zo>B;gUYZ6Q9#1RHO9q`O5%1;{?BeMH8Wcs{w1z%e0IdYU>yHp&0c%DfLIhbIG*mzi zK&nTjrbx>1v@(h4OstNQ$Y>HfwwNe zu61z@0QU<)>CD;R&)G3Vqe7<=G@1b68G^YC;4vgnry6lr8|3^J*oqH#&)|@tNYH{X z=sr%Jf@JXONWa9~RM5}}avuV=3(6u|TS zur9iDfH`Q<4QLPxl#&_ZK|>EE@dYJCDVb?$kWI(&@d3Ue8i_^e#hMBr5}MLryRblw z4RE}IY<7k$o`PgP=mK8|Cq5pfosFambb&KyJDhVo=%NfPjo_Il4gR zd_gm$pe7^atPxNOfs`w-CY45>4%V|FHS%;&&V@v|UKF|EP*8-s)c~5Mg{}Vp56#7c z4#a|7c?9wdq-}y!gu(lgpl$iE?2cul8??&?I;Yvy&p9YEAOtBkO`Qxtm$g7f_k085 z15AU_2lfhd?cxhei$SxH&>knW=vM$Y;ar_jyU0ijbD+a>pfxr+1>m(cI>>8kP>w9u zL9C%6Y7LJ9WatlMHfUY1h62O_2picJhzRns9f%0RJ_sLW)eb}mJaq?ZJ}SUiCB@l( z{_&1(;A?p!L9^lDrT{pBfcuBAJ`nOPSfHK)q}D~QP#{OYo58LggQPSU|4=6%SBxSV zdU>%iXjLh=&w=H4gz?P-JQZ9~NC@^WX?KZHHUC06l`0>&j zxQ<;)%}p&zPt8lN#8}<{*9-1Of>$_z;}qV!gO$dRQ>q|~A{64&bMliCbK)~|3rdSp zLFE~GuzLFVxVk&~#DjWXL699L@ZK1t5;Zgj4TLEe88Luwpon)3bM%S#bq(?GcL5E< zK@9}2UWT4SVFoGU!N(y4hkJ%Nd$_v9`-g^rHvdBsP_VOOJgBgRHqt;tIM4;wP)6nR&S7@=Hr_OQseT>3|G|PMa8jIZDn-I`D}UP}v9;H9!}G>OrFr z?uO36C{#mLzznFxYLG%LG)!DD*874dClKp>VcWvMD?9^=GV_ZvODcm?OF+vMz* z|BN6lO3YQ%hDM;AsfjqW1=5#A z^(sK;9YIdufUoC;uKNS^dmvpu(DaG{bT|;LhYNBQs6LD@Pb|ud2OZsAl$w{ES`0qg zEw?xw)OCiR>6V&Y0=ipOFFmhR52QXbFI`Vb0d%aJCVVJXLrE{OI61RQAx23_A-6bP zK`BN_2}Qb~D77pzzqD8hbPOlx;vLXzKWx!4G`0}|1e$Guoy-MEvEZT=)X9Uk#b6Uq zC^N-SrJ!I0hjW0VyK8V%ypO-T5u}M{WXa&?6Ym)04jKkP-jW2KX+~=>gKsHu0|N{P zx*DLxAb1+YF(?Fl((Mab?DW6+6X zp#D4P0AFwq1{@%;0VYTkR)7^4gU%;_be9mOK!=1O2euo52UOl@6*0lqV!osezf`mD|YXr)uW+tFzAfRC$ z&{23Ax}JU^V2)!1WZN95O7(S&fCVbzf)nt`7?2hQXx$&!bD(W(o_-;SL&lBZlkE(k zF$w6}-vh36p@QQ5EHZn-CKssHnE}%>e-sTHy?-V414ow0bqm)>j4I1VF zWqELB#OPOoM+@Qi06BvOn~F25QsYY$kQO{ZHq1C><|P(YYM>o_1(5^I(V<@3Xb9e2 z8|>=q7~tU_<=sFZ|YDSsIHZ)_1 zcXkX8i3gvT2VPnW%82pK0rAek@xdX;ySu$Ia6b!lQ4Hu1`}lw${}6x5E?k2puMm)JC~XN)DgwI3$Wn@V^B5$EenH=H-QF)LHmBsnLuOtHXl@!Yu>ikd06afq8gB+F6rrUL zY_J5{u>lo3#*hetOz(k)1DyRmz&#MqHgHhgY6d%e6{gu7Rw^UM9QsCQ=;$}ND+C*V zMZVJq>LBDXd`Ni+nOrqw2yg^Pe1rnhXatNhv0MY2 zRt7D@FaoVIG62s=AgVQ_L38lRP|z5l5$ME3P$>*byGEE({mJ=x#U0xmAl zPh>HuFtTuSbpov}fQ|b)206MoBMteQSXdZ9<|>Jrr&M4-8}#%9?^laph_5KgFOE+J z9ibmzoLH8c5}%n@lA4#8l#{9ek;}|0DUQ!iOM@j|M12lB2hSLMVTXYM?7U1^8iXz$ z10`T^y$Q)6pbN49-Io$kJ~Y*Fn5Bc z0%(H_xsZZv?=u1iJ$#FA8K)`uR8fwEi_ytFzyzNDx!J`r-s9*&K_*j2zc|3W>5a5UshNkjOY zVn8scx^@T0CGz=akOCRhehZEa2Gwn#bOc#liP%>T$zkB7AmGr249~*0)+xa57=vGn z?rLmd0*{gq{}9k-IY;nlvVx%zXk{08G8y4m$V@tD5tM?Gp`jAEoB)-?kdzK9rJ(5o zG)o1p_dv^dLFFH$OoZJq2A+8UPg{eI+yTphEB9byBWFWTc+DLU91rrXr=K$fq}CDq>%!eRSj{4OsIlx>zHZjObM6QNZHjr!$W;1|xR)W_J87UZe?9q^_Qq>@Bx3PI$d3#Y(6Y6TMp26ty?D+P_@qWt3GlKlJ}T|ajP1ScfGz%IHQU@|0 zBn(muV}sPg*dRUF*dRSDAcYJNdzhfKBm)D35(5K+D+2?A3Y4A6z`&peW%q+LGB7Z3 zKxq&KGpB@sfdOO=hz5y+)PUHmP`#BPL8x938zx?dBo1XVz{~{kVQg!t`7jz}zAXa- zgB8^La*$%E`A{a@98suV5Dk(8=>^ds3^N}j2Xa4%28m-+0}_X+rwSW%Y<)>$5`!LS zCkB|#fU$~Fa}xD3ixP7U^>Q*xQi~FE81%qmP@W!a2@2{OBJ66wiv+Ptfwbc@ISF)x zLuOt&gI-B$MG1pmN@7VOgI-c`F@s)FK8OQyyP=*5)C{nTp=^)_yv~FefK4@$gE36O zrXJ*rc!X0S2J69Yrcp6AHZTP{TCX@BwyPD!2QT4CEJ{b_!`L9TprfZj{)K8SPR&J@ z%`GiStw0t49SsEv8&LG6q$ZW7$EOt~=B7d&4H3x%6$W|`c4AUeQEC~AbWVOU3O^Bi zeHW^sScGyDlZ*0EG=g@GFhK1oE-7NrOU}>DP0cG|(1RR6rU!8dI9XMcfYKRMdqs&} zK~a7IgI;=3erW+HsiR_8p#lh2gByaw z0OGqdutP;S!G&lr19GNhWQbsphsr|=xG-=51rmbrLm3P~90mpk2tS0u28ACEw-HpJ zF)_G9Wg!$ZgC~POgbCFj$q)_Yg9B8&`CP#%P0 zhMNxK2SON7l9?eG%7ReL3?UE(lw@WIg|Z+NGea1J0VSCk!l5h(#mo=^VL(Y{hDaz2 zLNQ~w59V8#d@O_kC7BuGp)3f+%#Z+KKuKnXBq$3)F*Bq<7*LX#Aq~ocP|OTBAPgwU z%y0|Jf>6v1mJkM%WCm9SP!2e~fT{sxzCD5imUl$sXQ1)3(D*rM{5&*1YKCBDC_ zxSd=K=_q_|hN&og9)@Emd|rkhD11H!4Q9Au3=9nX3=t@N0fr6~z97R+6uuC{OBB8^ zgA}OZf*UEq;Df>!WvE5ri!rQ2;fpgoK;cU;2!mSNaPuS?+)(&Z4D~2{X@<2Zd>Mvk zD12E4X*RfF3=9l%44x=_d4>uUz5>Ha6uu(E9TdJ2gBYyB2OF!*;E%#rVdy~Nt1|3D z;j1ycK;f%1NP{X~uvs8NgCP`!ugTDX!q;Nhg~Hcn_>RKYVbBIOL_kJ?u`WYA3SW<5 zItpK(;S37jfPn$pxnlqWLk1HRz7azT3g4JvDhl6(;W!H4l;JxH-;6xh!VIA%&39Oz|4T+c?M>1cN}6Ch-7Bq1yOL!%)kd{gBZ*V{2&UB znHdD&Y!HK)K@dd2F*Ab@oDE_yGYEqyIA&%LfwMsjW_W8B!~^+948nkt%nagC7KCDE zkbp3tBr^l3n-1lG<4+2~0rREN_%djGSv0;J8XwlWh6po*hcX~+5XsD-2%_Ma89ZbF z=Q1!eC?hyv_ke~H5JJohst68P9yGjw5MpLfM{vOM(2)wLC^Lg5lm(%f8MGh_D9OyA z4P`+nX82GFjIRq}KuKl>Jtzx8F*E2x7*LX#!2rsFP|Wb&1&nV5VL(Y{24g4-LNPO# zKp0SxnZXpwf>6v1W)KFHWM(jjvLF;Qg9Sr7Qj!Lx#%XB$C20JeX#D+X{EKM(7f?QE z5JiZ=m*Fdv4{`y>K6cQE7Kp>Z0L~54XnZ{=AJk71V(@3MM&SoCFk}`a>m|c)iiPyY zAzg7$f4Vpx)Cp&RQ1PI?I7AM-D+{04pmlNl8gf)638^w$w8>F*Gzz zN=`CLHBL6QOft4iGc+_bN=~&jH#4?0NiqX#$V)BH$xPDA(6i7>N;XI_PfAWoGf%cO zOf)pGOg2wSG%-m{OiQ$|G_f=Xt4~W!EGaEYE!N8b4Iw6_rWz!srkW%gTbNs%c9A%_uU}$KOXkw9=Y+_<)l4fC?mS~)moS0&q znr3KfZfOZ|6lC07FGJ7J(m>C`&>+>wD9O+?EhW+1AkoCk)FL^>)I80=+|0r>#RQ@w zJ~6L26XYgiJsqD7i< za-xZesRbxt4ULV>6D24Ke2fR(KMo2nOFfgMG!s)ZBMalCltiP{6a!0R zQ%ehjWRtYy)HKVa6i5_;hO0n6(K9wkG)_)5Pc}u0*4k|8AEh+)|*ig?rE!8qL$;iYoDb*~=AT2f3+}tS9 zFxAY`ILX2=G1VAs0ca|+xU>MI!${BA#L&<@(L6cDG$k!5H8s)D$SBD;CE3g@#lSSt zA|)BD1H48WWQCEDUYbdwv9Wowv86?dMUq*Hg^^*RrMZ!Tk%@@~C`&?8MIy4B3`~qI zOpOvv4GmL_%@b4249pVK5)BNEQq9a$P0S$)15~V}78QX~l7*hJfnlPVrMZELaiV#0 zYO<+;xtURtk%gtPp`}G)vRN9~O&}ehRSh6-nCe-WrX?90nOme;nweXe8>U#Knk1Q~ zC8eeqni?4y8bdr@oRSUCtLA#fX@<#3hDm9umX-!)rj{lKX{iRLW~L^_X~s#$1{M%4 zZbhl7pt}^E^YhX&)Acg+%q{fNOiWWvl2gr1&5e>RjS@{0lZ{gn6D>`QjZ#d_O`$=S zk(i^Gp=V;CXP9JcWMFKTWMG`R! zP--+b)l0T8HZo2$GD$WxF*Y?cH8V{zGdD_1vPex!O*J*NOa+GmsILn(onj0mWrkI$d8K;^gCZ!ss7^Rq| zS)>^zo2D6CK=M;@WpPPrF35Z{J#!-qBMS>qSS4DdC0m%7CL5=Le3X)8VriNTEu%r^ zCuNp^eQly=ZjqW~o|bB8U~G_NmSkp`nrdN~XqjwiYHVR@X=VgTUKJ%prFkWpxvAi> zUXV^B3q3Onvt)BaLksgnGov(<#3W-QV%CBvWwOhO0L=&`UN- zN;Ef0wlKCZOi8meOiML022BYYn5G#Sm>WYq0@q+@Y_4aLoNQtQ3fUy%L<EP)*h=Gu$r@r86GKdJ&9Eb$WB=Bjr zP$8Hpph-Q{qY~gVe9*oKBXlSMG~C4q?M8!!ZeZe|ZU`f^I}GZ_FhaY|pdL9Rv|A0L z7@=KmP*0f=+MNbZ;6tY-Ks{K-n-EJuy-`N!6a{$V9Xgx>>LoHlhf+X2J{TLMixFfn zY(5I=2CzFpmNPJbM<`%!0J{_FX0SVgX!u|al; zK)d-M>p^T#9D?iuu|e(vSqWl;)PhD7Kx|OhfJO^IY>-;eNC1cpau;Y848#Vx3p8T` zVuQp%iw!_*kT_^&Lxc^o=m9iJ1ri5^ABfEjjcd^85=afmeo(RisR8*3#O8*k0Z@+} zBn}E=5Stqs=Ad~-kY3ON3eYSRNDU~BfY{v7bOM^q1E~QmtVm{HU;wEBr5zBP8ya7r z86%JykY3R24M+_rO@Y`jHK0){5s(8I7{DVkAT}rr!C|7o03J01jYNRNL1745I00gV z!Y}}2uLc8nWD4YW5k3Y6(5w|G%0X&C;Ra%JL(>~bKS&KIEI~;Vqy`k8AU4eJUQjbZ z;R#~H+!+HE2ZbSs4O0)Abpx3L@&bqrQx8rv$oU$|2D<^|IR*v>P~3=UGBAMr3tF%O zVuR8QXygXO2B`&&%7EA)|AIzbKx|N&0gZ-=2r+7>k8zc_$BZv(X2e}_44)P<2%?(ZepqW9CU7#6C(2$AxX?U~JF~D@ZRWO@c5?FKFhJ5j4oez`y{SB^8FU8$oV>vOz(> z2#O$Bxe6*U7#P5#wv13VNGT(zP=Tf;M(B_vDBKu9k;uRR9tDJ{2jy`X8x)r?wi75E zpk{*B48X)eWf6=GnoWnXK{MYlHfW6ij18LMg|S@7&_T}bSMNNmvjAI$xiK;oc8!N9<9jgf%?mM>m|#6c0xz`*bU#D>P> zFAy6l{vX7KigPkCFu>Xvd>}T|Od%$SnV>RB8YB)?uL@#A%`peDq3T1C*l|egY9w|y z5_>5UdmR#cH;4@_8;^k4(Du(|5F0A~1;mEB=O2g-&ErhW3=FV5&dZF5YjF@8>Sh@b z8>&|g#D~+6U2s!e+IFkdPP|g;Vchgg9;%A1_otT1_oF;rUw#->a_r|p=R2G z*ii9s5F4tu6U2s!PX)0-iI9PTVHSuD6<-EogDNrx28P`rHdOpLhz+X185kJOfY?y+ z8z45ceRvndhKj!gv7v3(&mcBb{6B~ds)!gE7&zGweiQ|4OQ=l#12Jb z*CVmJkl3q`*xQiU50Kc->OrfrVD%|zg%ykquJ53E0kjedCJt(&!q}j80*no6W5L*R4?KEf^0_r-#>UYpuPZ%52c4dT4=YrbjFmZ6(4AePbU;wXvWCR5O0|R&^ zBO}NF1_p*ykX@io0|Ns?Hi!-CJTWjZ6oc5HKw@A3uVaFl30f5gV^0UEfx2xzhz;s+ zFfcHz1hGMlM+OFl^&mEMY8RaEKphbV1_p4x138?5fdRBK3ufj;kb2PSb_NCp!*389>Siub8nXk%ECYiGhz)h8ED~E4#0GUz z85kI}L2OXNpMinF1jL3epR@w8L4_X!0|Rm!≤P3Ty@jhHwxYYJLh5I|sxDbs!iR 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ⅇ=Rta92-vkC0%HXBEs~YmLDX2WmqbDHuSiX5{5eknRie8YWQ9 z3+fjIhq%N$D8sHtf0^#yq^L|pMr)0xO;?WahQezP7}dX5a8xcW^qb! z2{g!jJ^egE+Y=!3?x3`-paEKc51xhxjaY+)>=Zx|uV4?^g$kOXhf7(3r8L1=0JLD( z6SZ)Fud(ykWeA0b8=iU;jU1n*G;cc;Ka zyaH?uBP5#}8bFJCNSO&KAH!UIP*$B7g7>CqG8811WIziE&`QmCPZtFx@S!g8WybL) zmhlBe`6=)vkcdnL8vVhRr$D1WpgmO#pm`2ZXBsk56JMkgp9bp1frLS&twwy2rh=WF zf<}Crg0gaauqJ5iRUVBL;BKHw#==wqHC9zmg?C2&SYMuvulMxeSG zx&{TbC_n?W`asQC)5Zp=GzX8bz@}SqnG31@4Jtr8qrnD4VhOVF6=@C=c^NQ766Qs) z40OCUA_O!rhVFLoL_27>7VLI6a1IIzcM6FIja@>wmx8L!(!8Yn(!7+^6a{ca9ACl^ z3LX#kb&P=K4$!XKVBdKEfRK3q0Pt)HxEE`J6daIB1uSd~9fSi72tjs1LZ^@nK@-El zu0ioWj!v#Vpen=76I4@!2a-X_Bq-D`9#n6|gNu7tP;1X8)Kx=Mp`s)sF$XlJ8lRjD zS`MZG3t!J*(4rt`=$3QvBmg+dAW@HHS2|n?G`T}E3wZEV!GZziZv~_f0B1w^5G;65 z6kJRokHCV05qaxrxMPqXWNr=;uMk^6EfcIQRU=r<3m%a}j9VgxdJI7mH{k9NXowBA zI|H6CAPxfUPJwPh0S&T(_UJLB1%vfYP7=bgfu$YKd=ZZc=Iyq%MKfD`c$Ed z#*mqBaJ>cU9)<>k8kLY)TJSmyBO`Exg1a3Cu#r+wz6=7dvNk~KGnj(*?qcp^hAq%D zVu<(j_i=IqwXq?ySKu*hjhy`CY)$BV7DPl1B8Jw12Mr1Y1%(ELz&00wI`fcy*`Q&O zc<3H&P>PIah%ZXaOEH1fg3yI!kd`z9w4v$Y7##273feIVZGM6pso?37cyMg{gIo$u zj-V+xH%~v$c*me1$4I1AA)wO(3?Zc*<~WfdBqKvI8KmbAUx9@yr-8;oK!u+NXs*)L zFC+*w0s>ln4q9CST5N@FwYeT>FuS4zzFH7^ItaKiWdQ2SX6B)GWi#_YOPDhAz*QbB zalj`*zzNG7w3PugP7B_*9qi-hjbqH!$In}n!53VGA*R(8G@vaD&~BA@$eJSs8wEo% z&|smNf|UZMG;-e>zAnSik|EyFFWA$?)!7F;o}E^dUyz!o0owNtTD+nYAD@<|sgPEh zhbpW964z1C$jmEI(9qJ<(9|^0QP4;$$S;mZ7C@2)bw@yZCqb<;l-j@$w)+oW7(kj* zP#-`Fb3<5MgBKe(`hfBWXsM$gXg8@5@~%YiHbhV(0#q-8y4dlFC7{(eP&=Ii%t4dF zpiUsHZwM7~1TAWVCp{O$HdKhaKmiRGV~CIU^aY)J0NW-AbtS~*(9vETjX+4E1&t<# zg+zc#BhVs#=*T!Uw}6`C@d}1|CI*H^mKG*vCdNi47KY}Ask$bnZcvYar?^1#5YYY; z){#GG{|`~e!4@XNN;AlWGEx%=R-}PCQphXL{r!CW6hIwNNCbdJcfgf<5O@wfSiv0B z+;9x`1vR`ilJmeL5b^O5pt)^7chD3qxZFf-ifAf;6*9!TM!1Fg#rye(cm(-}gNHA4 zz@wa+;Pph15l;n}Jg6B28nFSl{1gl=pmiX0%_MZ|4TGz*zn@=_t6OL=s2gGkTZ0W< z=IIC?EQ2&`K@JD+LUcqv+Qb0V$N-gB@nMin6`=9k0LKtdCr=;G5Ks{XZ=`_6BtUI8 zCs25)2wdKs05bV+M%HAn>_Cpj9T|rHx3fQ6potMRI;2uHZ4@cxMk+XYY8! z_%KIMgAh_8!UtPWcf`V`#Zppp5-S-X!�IV1q$}H1VFn@vgoB;BjU|DT}gf8MV+Y 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

1*Tos9}gTyvQ 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%0Aqus8O1<3f`I{)wi!VQpMe29>cR-^ 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

OI+tj7=u5cL!;0b)IeNPwu9 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 z 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

;f z4oGYlB(^sa+aHM?hr~`oVrL?;bCKAsNbF7|_Ch4~QY7|XB=$ih_Dv-AT_pB5B=#>P zwh-w46ll1KA+hz5*v3d~A0&1F5<3HlorA<~MPhd%u@@q-mm;zEA+Zl3u}>ng&mytk zBC$Uru^B*jtU&K7VnJeaBeD6B*pf(WStPa!5?cd_ZG^-&Lt@(^u^o}v-bieJBz71Q zI|_-Ng2c{1V&@~Vi;>v1NNn(3Hc-EJAc^-Nv8N%iXCbi{BC(euv9}|!!S~%j%|C=B zehi6y7KwckiG2f!4Za@-YR+RM@#jeFcS!6{NbFxo?0-mX@O?T^GdV$b*+AKXNNiCg zwhR(m0g0`F#MVJ#8zZsJk=XV~Y-c347ZTeKi5-T-jzVH5BC%7E*f~h-0wi`h61y6S z-Gsz$Lt^(Lu_q$2XCSfXAh8!Cv6myU*CDYtA+dKNvG*dek07y6AhFLQu`eUB?;x=s zAhDk#v0o#xKOwQdA+i4=u|ex)VE2x3fbJoJrVSn>Hu%mXsJJ+ixEvB&35l(R#MVP% znN7;VmBeN+mP5Zkl1sO*h`Su zE0EY5kl0(0*n5!J2awn&kl1IC*jJF)H;~vbKy2t;X>X9&pOM(#k=Tr&yP2TsS&`U0 zNNfQlwiFUu4vDRb#MVS&8zZsJk=S-fY$qhP4-z{7i5-r_jz(gqBC#`(*ab-J5+rsV z61xeB-HF8RMPg4!V$VimFG6B3Lt=yP%z}pJ79{cANbLPc?2}0Bvq_0|k(`61W&sj=IT9Ou=NeS+CM5A~NbLPc?88XxQ%LM{ zNbIXf?3+mJ2T1HENbJu@?C(hIe@JX5&^={Pck&>y1(4X{NNi~&wki@^6NzmBVngq; zv_WD!BeC6)*nUXtAS8Aq5<3=&4ZZ^oYJLHdcsUZg8i@_Q4-Trn4N1Hoi9H#Ky$FfD z42iuKiM={Vx`AF==NNn)^bWne-M-tzL#0KA62UT+lN&FlV`zjLqCKCGr68i}f z8+?Zy)J)JFcCfog*+KWdLB+X|*vd$3btJYP659xg?S;hlLt=yOzk}Hoi6ou@VngpC z%|T)pBeBbo*o{c+RwQ;05_~d^CGdqcMd|;NFa$TBC%DG*g8mT@EwIvz2->b)<|q8B(@t8+ZTx)h{R4n zVy7Unvys^ONbE`^b}bUS1&Q5(#GZu2o`%Gpi^N`t#0KAi2=(K7B=K!X>|IFgGf3|i8z3=%s5iJgwb2H(jDb$=0(IQV`>sCYX_9C}A{ zHxhdi5_=jFdjS%A2@-oX5_>%odnXcmFB1C*68i)a8+^AT)IHab#KHGGLd72?kC591=SNiJgPQE=FRPBe5Hi*sVzH9whbzB=#&M_Bb7%8;+K%vH<8$Pk=W0W*sqY-ACcH!k=Xx`*i4|iKB4wu#I8kRHzKjSk=WpSW1;3uLlU2b#9o5L zUV+43kHp@L#NLatg5?ddMZHC0Q zLSlP@*ddVe&=-jvg2awMVy7dqvys?ENbE8sb}JIQ6NwGJBN%G$R3z~^NbChj?Bz)8 z)ky43NbGG$Z16q8Q1cHWiG%MHhKip-62FYZzK+BO-!%+X{}@U96%reK?=V!&S0wSD zNNms^8b+uZR!s&57@G%)Er7%pM`BAOu|ane!}O{liR&V<4UyOmNNg7*wht0J0ErF0 z*BI)~WF+xyBz8U$y9|k4g~V<|Vz(l(!S^6T&7XiIJ{^fY8;QLN#14m~&vi)btw`*h zNbJK%?Bhu6b4ct<38f=Sb|=NbIjj?4L+%2GD)SPbiNx+jVoyV2 z&q87^Lt?K&VsA!bZ%1MuKw=+3VxL7~UqoWxMPffhV!uFQzd>SuLt_6zVl#s7gNFK@ z6^YG<#1=wg%OSCqkl30?Y+WR_84}wHiS3NUc1L1^?!sn-x+fe-JOPQFg2c{6VizK@ zTann{yR)HYPCyc$g2Y}1Vn;&q-6|yZMkMxDB=&wJ_F*LUDJ1qeB=!v?_8lZP_&#o^ zz0Z-vKO(WeBC-D70g3I7 z#P&vF$0D)8cY;IB&p;B-L1GspvCEOzbx7S8-T@Mif#g&0z3Nc*WF+zFNbH43Z15fHQ1xq&#KHHiL&bL?iSI*VA4OuH zL}K4YV&6w%KSN@J?`Maa{}D<2D-xRpbZ0tL4fx)6D4QQiTo{Qhg~XOaV(Ws~aggva zL}FVYv2Bppen{*fBz7bcI~IwZ17asa%r8JT*bk7{&ym=#k=S35*gufi z|B=|t1`G_0(75A4VhbR##gW+3NNg1(wgwX09Eoj>#P$NQGa%{B4~ZR$#EwK_CnK@b zk=S`i>>?y~4HCNniQSIG?nYwIMPe^RVy{GEuSH^SLt^hjVjo0eA4OuHLtUAhBm4u~#9n*CDaDBC&TOu}_28 zpu?3J7#PkYv9BSqZy~YYfY^l)|9(JXe@9~fMq=|CF)%Pf)e9oAC6L%MNNgP>wgD2` z9Eoj>#CAnudm^zTkk~Ou>|`W%Iug48iCu!kZbo9aBeAC;v1cK%7a_5iA+fh2v3DY| z4SnAh91Kv7aNc-y^X>ecc z1SIwhB=#I6_7Wua3MBRhB=#00_HHEhekAsBB=%_}_9Z0tH6->uB=#dD_Ddx8TO{^Z zB=%1vHiHQw-dT{?JV~th{9um6Rs zgV?2zaCnWx{)EK-hQ#JDWnf^0s^>vs3nQ_`k=W`;Y;7dA5fa-BiS2;Ic0pnXBeBDg z*l|egBqVk=5<4G>U5CVOLSj!uVoyb4&qZP{L}G71VsAlW??GZ8Kw=+9VxLB0Uq)hI zM`GVYVn0G+zd~ZaLt=kLV*f;9gZ8Dt;)~S`DejQi0!VBLB(@9^TN#P1j>OhSVjCl| zt&rGuNNhJGwigmR5Q!a%#EwN`CnB*kkk~m$>=Gn)1roa*iQSFFo{Yqvj>Mji#9oZV zUX8?FkHp@F#NLI(K7_yg;ok=VPD*oTqW$C23Qk=U1!*pEQ$N=P_7Lt?*0Vt+(p z|3+f}M`E*CFfcGe&EY~~iy*Njkl6A_Y-J?2E)v@iiEV+zwn1XMA+f!X*nvpwP$YId z5<3}*orT2CLteB=$oj_ERMG8zlAzB=!#^_8%lRvn3*a*^$@+NNf=#wlor39*M1n#MVM$TO+aU zk=SlXY%e5sAQC$ii5-K)PC#PkgV;5YbY6_au0mqhA+bA<*gZ(>$w=(!NbH43?4?NT zHAw6YNbFrm?0rb=qe$$NNbJi<>un??~+5NNiRs1_nlG_;4bz z1(4VxNNhPIwh|Is6N#;h#5PA_TO+ZZkl1cW>^CGdukl0d4Y&9gd782VKiEWC+wnJh&A+f`d*ilIAL?m`961yCU zU5&(UMq;-kvHOtNlaSc6kl6E(*lR)TMo7GDL}KqiV(&p>A4XyyM`E8tVqZdHKSW|b zMPk1}Vt+tle@9~fMq)GBFfcGe-N}Z;=0#!)BC(~A*m6j0RV211659ZYZGyzMMPfT5 zu|1I3K1l3fBz8CwI}VARgv8E7V&@{UOOV(VNbF7|b}tfp3KDw;5_dkGSIH4=M0 z5_>xmdp8pM5EAz7ZUp)5}U&o5$`-mY+)p}I1*bC ziLHvnHUY6)AnDu!iEWR>c1B|RBC!LJ*bzwV7$kNY5<3ftU5LakMPj!jvAdDjlaScc zkl0I+*ej9P8<5yrkl4qN*r$-#H$m)nNI2X@Vn0D*zd&MtLSlbIV*f>AGukmQFhb4b zMq=|LvBi+sQb=qSB(??;TOWySjKsD@Vml(SJ&@QwNbE2qb`%mj5s96O#Lh=z7bCH& zkl1xd><%P$4-$Ja5_>uldm$2gDH3}P5_*PKXf0VK8v5?c<5t%StZL}KeAvCWa#)<|q8B(@t8I{=9t zg2awSV#gz~Gm+T2NbC|Mb_Ei<35nf?#O_66PefubMq)2VVy{DDZ$e`4L}KqnVjn|d zpF(0^L}Fh>V&6kzKSE-^MqNV`Vml$R-H_M;NbC?Kb~F+@9*Lca#Lh)x zmmsk#kl0N~>^3BJFA{qq5_>ihdp;6-84`OH5_=00dj}GGKN9;e68kI?`yvwi1`_)Y z68jkv`xO%VBNF>768k?Ao7sthfe{*aTu5v_B(?++TLy`(jKo$)VjCi{O_A6(NNfir zwigoH4~ZR$#EwK_CnK@bk=S`i>>?y~4HCNniQSIG?nYuyMPkoHVlO~qFF|6jLt<}2 zV(&y^??qxCM`E8wVqZdHUqfO)Kw>{ZV!uXWzei&KL}LF%VzW3S;+g}AEri4tLt@J! zu@#Zn+DL4DB(@n6+X{*8gTxL%VuvHKqmkH2NbEEuc0Llj7>Qkl#I8ePw|RLuwg-uQ7>RuxiG2}?eHDp)2Z{XviTw(R{SJx!6^Z>5iOuZ7 zz`zJ~4?7Z@4~Z>=#Fjx~DX zet^V&j>LYA#QuuJ{)xn9aAja%g!+pGiOq+^7D8f6BC%zW*!oCpV!DAhG8mu@@n+S0b_3BC)q4v3Db}4%odm9pa7ZUq068kt3`x+Aa783g* z68k9<`z;dtBNF=u68jGlo5ceWzZ^(xek8Uq5?dL>o&qVa)REYFNNgh{wi6QD4T`WwfB@(+9iQR(4?m%KsLSj!tVlPEvuS8;RKw@t}Vjn?bpFm-Vuv8HqmkJ0NbEEub`}!55Q$xi#I8YNHz2Y5k=T=w*t3w>^N`p} zk=QGd*gKHedyv?tLG0;}bbcO*eGQ3y3yJ*%iTwhJ{T_+^8HxQDiOuN6z`zK#ivx+x zgTxj?VoM>h6_MDgNNjy1wlNah3W;rp#P&d9`yjD{k=Wr#>_jAXDiS*fiCuuiu0mqh zA+cML*quo1$w=(!NbGq?>_tfIHAw6YNbK!M?A=K0qe$$NNbCzp>?=s@dr0g@NbHwL z?6*kl??~+5NNgr=L|n5Wu?3LWB1mj$B(^*fTN8<`i^MiTVp|}wosigWNNisub|4Zv z8i^f`#7;wEXCbjmkk}PS?0O`2GZMQOi9HdCJp+k72Z_B5iMQ`Vn-se6Oh;`NbEc$b`cW05{X@l#BN7ocO$VUA+e_+u@@k* zmmslMBeB;bv3DY|_ad>6AhAy%u`eO9uOYGTBC#JLv0o#x-y^ZVA+diUu~~c(am|6m z=0{=+Be7+X*osJO4J5V>659-kZH2^kL}I%lvHg+Q!AR^VBz7DUI|GTGgTyXIVwWSa z8vMEF|_kB=%Ay_DUr7W+e7@B=$Ze_8}zp86@@vB=&VA_H88gQzZ6F zB=!d+_7^1fKO{DjA0nXPVy{MGZ$V=3Kw|Gl zVjo6gpF(1vLt+ZBoJiNp>-Vuv8HW02ShNbGbZb~X~b8i`$x#BN7ocO$VUBeAC= zvF9VP7bCG(BeB;bv9}|!cO$V6Be9Pov9E*JvmovB+eqw3NbF}w><>unFG%d)NbLVe zY|a1%21cm)yhv;jB(?++TM3D+hQ!uIVjCi{t&!OFNNhJGwigmR1c@Di#EwT|CnK?Q zk=TVu>Nu*#J-Be zzJtVmfW&@<#D0gw{))u@iNt0OM8q#U5}OZ+Eri6DL1HT)vDJ~-+DL3uB(^0I+X0E~ zg2eViVh16yBazs#NbGbZb~X~b2#H;W#BM-hw;-{*k=Xr6?3qaHxk&6KNbD6z>`h4Q zZAk3BNbG}1?9)i>^GNJ#NbFlk>^Dg44@m6qNbKK8Y^ESY{IVgjd6C$HNNg!2wj2^$ z6^X5h#5O=;n;@~Rk=XV~Y&Rsf7ZN)Vi5-f>jzMB4AhFYt*x5+zA|!Sh61x_O-H62Q zKw|eGv8N)jXCko|AhDMqu~#Fp*CVmFA+dKMu}>ng&mys}AhB;Cu^%C^pCPf|BC$Ur zv40@3{~)p1f)VL~3yCd>#Fj;3t01v8kl6Z2Y-1$06No(*QXjb?v3-%)fk^CVBz8O! zI}M4Qg~TpFVpkxs>yg;aNbFuD_CzH13?%j(B=#~S_9`UyMkMxDB=&wJ_F*LUDJ1qe zB=!v?_8lblV*nCKAQ6#n`5?dLGt&YUjLt+~t zv2Bpp4oGZwB(^saI~0i>iNsDoVy7Un^N`p@NbE`^b}bUS9f{qI#GZu2o`%F;fW%&c z#9ocWUXR4yiNxNE#6E(=K7qu(gv7pv#J-Efeu%_=jl_PB#QuiF{)NP52}Q&;2NIhf zi7kx8mPKMKBC$1)*g8mTJ0!Lf65A7r?Tf??L1ITBu@jNlsYvV+Bz6T7yB>+%jKrP< zVlRM{C)1GFbCK8!k=Uz|*z1wl+mP71kl06%*e8(K=aJZ#k=S>U*bkA|FOb-8kl5dl z*uRk2jA0B6j8K2EBC+|A*uqF`DI~TW5?cd_t%JliMq-;Iu^o}vu1IVjBz6E2I|_*% zhr~`rVrL?;i;>vnNbEW!b`ui22Z=oai9H>OJsXL=6p6hOiM;`dy#{%5?ca^t%Sr@Lt^V9u?>;f z)<|r7B(@t8+Y5;ug2awMV#gz~labh^NbE`^b^{W-1&KWwi9H>OJr9Y!2#LKB#9j=^ z?^}`Bdyv=%kk}WH*jJF)w~^TQk=QSh*l&^8Uy#^8kl0KS3=E7=_pl+cd6C$HNNi;! zwmK494~cDr#CAktyCSiDkk|o8>;xos3KBaTiJgzcE<<8hA+b9_>}8N}?nPoxL1NE9 zVlP5sFGFIlMPhG6V(&&`??+-ELt>voVqZaG-#}vDM`AxlV!uUVe?(&cKw|$vVzWgu zFfc;>%Z0=iL}H5~vE`B2%1CT2B(@$B+X9JggT!`5V!I=;1CiLFNbDFSb^;PR3yGbF z#4bf*S0b^Sk=X4>>^>y+Bqa76B=!O%_HrclY9#hnB=$}u_5mdJ5hV6GB=#jF_Dv-A zT_pB%B=&10_9rCvHzYPg6azedS&-P=NNj#2wj>f;7KyEb#MVG!8zHgHkl40JY)2%v zHxk<)i5-T-jzVImAh9!$*!f88VkCAg61x$J-GRjJL1IrsV$VWiFGON5MPjcvmVxK``Uq)hIM`AxjVn0PSuKw|$wV*f*8vqmH0ofC;IjKmg4V#^`1 zm5|svNNfWnwmA~p8j0?9<1CK5XriCvDwu0~=vA+g(#*b|W0 zQ;^uRk=XN**ej9PYmwMnkk~tr*oTnV$B@`(k=PfJ*te0`_mSAokl3$~*k6#?Kakk} zk=V>Jh`8oOVhbX%C6L%MNNhDEwiXiG5Q%My#I{FbJ0r2Zkl21m>8VdnOWlF%o+@5_=sIdlM3S4-)$T68kt3`!o{!DiZr9 z68ixX`w0^J9TNK!68k3-`!5okJr)ty+(>L8B(@k5TLFo!g2dKFV(TNZEs@x^NNg7* zwg(bB2#Fnr#EwN`CnB-4k=Xf2>@p;F6%xA#i9G>{JspWX8;QLLiMO;8 z#Fj&1DKw{S* zv73?D?MUniNbD&{?Ab`{`AF;)NbEI8?9E8*?MUo>NbEyM?2}0Bvqc0*!&A+ZCI z*r7=57$kNA5<4ANa`wSBM0uuWM68jDk`w0^J1rqxM68j4h`wtSEApt3_k=Q&)Y*8e(BobQ@iLHvn z)vVqZpL-$G*FLt?)`V!uIRe@0?|M`AN3GB7Yg z{mY8P=0Rc$AhD&8*m6j0RV21165AMwZH~mYLt;B2v3-!(0Z8m{Bz80sI~9qYiNr2I zVwWJX>yX$@NbF7|b}tfpIud&}5_=I6dl?dY0}^`+5_>lidp{EUBog~968j1g`vwyG z6%zX$68kF>`zI2cAqf$`EJ$o#B(@+DTLOtKgTz)wVyh#u^^n*`NNj5)wmlNt4T>?y~4HCNniQSIG?nYuy zMPkoHVlO~qFF|6jLt<}2V(&y^??qxCM`E8wVqZdHUqfO)Kw>{ZV!uXWzei#-rXb>! z6^YG*#1=qeizBh6k=QCoYz-u~J`&p)iEV|%wnJjOBC$P@*bzwV7$kNw5<4A5?c?6ZHmOUL}EK5vE7l_ zen{*fBz6oEI{}HEj>OJJVwWPZE0Nd@NbD9Qb{`UZ5)ykR5_>KZdpQz&H4=Lh5_=mG z`vemE3=;b?68kz5`yLYe5fb|)68kL@`x_Gb7ZMwE-v}&zS>=Q`r3rOrMNbK84?E6UU_eku|NbFxo?0-mX-gE{A z#!ZlNLlB8Afy97c`xp}Y6cYOu68jz!`zaFpB@+7w68jGl zn>mAlfe~siI}%$Qi7k!9RzhN{A+gPn*j7kvCnUBT65AJv9f-t^Kw`%ru~U%P8A$AW zBz7?py9$Y2hs170Vs|33Cm^w>AhBm7vF9VPmm{%PBe6Fjv9}?y_adyIA+f(Av40}5IWiIP&V$4jL1IfFvDJ~-+DL3;B(^yc+a8JS zjKuavV*4Yp!;#q0NbF=Jb~+Nf9K_xM$uHGN>?S038xng05_<{~do~h#J`#H+5_>HY zdkYeK2NL@b68jhu`z#XsA`<&C68kw4`yCSd6B7Fm5}P55fq@a~cXlK;HxgR}i7kP| zRzzZ}BC!pT*rrHq8zi;^65A7r?Tf??Lt;lEv6GS5=}7EiBz8Fxy8(&ag2e7cVoyY3 z&q89)Lt?K&Vy{DDZ$)D7L}DLCVjo9hpF?6_LSo-WV&6w%zd&NYL1O?CnVGeMsy>NbEC6>qzX|NbILb?3YOF4@m4U zNbG+|Y^EFr21ck~IFZ=ANNjN=wlor335l(S#5O=;n;@~Rk=XV~Y)>S%FA_Thi5-E& z&O&16A+bx5*p*1^1|)V161y9T-H*hchQywQ#9oNRUW&wChs555#NLU--iyROhQvOF z#J-5czKX=YgT#J-#D0#%evQQbg2euT#Qu-OX3j;#I}Z|D0EsP+#8yUPYay}qkl3b3 zY)d4z0}|T>iS3QV_D5oeA+e*7*ojE&R3vsD61xbAU5Ui5MPj!hvAdAi6Oq_ck=S#P z*b9)@%aPctk=UD%*xQiU`;pj(k=Un@*yoVg*OAz_k=T!r*w2vIUqS4>kaFoK5}P59 zfq@Y!&Vt0|Lt+adu_ck%vPf)oB(^pZ+X#tmhQxM2V!I%*y^+}dNbE!;b}AA(2Z>#P z#4bl-S0k~zkl1}l?5RlXnMmvfNbDs@?9Cwden@z3M`G_oVjn_cUqNEuKw{rVVn0S= ze*&=&LCpV##QuxKX3S?`V1%j>Mq-O2vE`81N=R%&5c>$kd{ZR04HDY{iS3TW_C{g{ zA+f`d*r_1)aftbuNbCY6b_o)@4vF1_#O_35_ad>UBe7>Au@@n+mm#q?AhEX~v3Db} z_am`SBC*dRv9BPpZy>QBA+et!vEL%GKO(VzBeDM@vDpe37#N}9#)ZTdL1IfFvE`B2 z%1CToB(@5?ddMZH&aWMPfT5u|1I3K1l2^Bz6=MI}wSU zip0)GVizN^tB}}rNbC+Ib`KJJG7@__5_=&Mdnpoo4HA0;5_=aCdmj?}C=&Z568kn1 z`#uu;84~*y68kd}`#Tbwtq2j1Tu5v|B(^9LTLy`(fW%fuVrwI@tw8LvkaT5-#CAnu zdm^!ek=Wr#>^LNL5)!)viCuxju18`wBe8ps*b|W0Gm+SHk=QGd*lUs4Taeg0kk|*2 z*hi7rH<8$Pk=Rd=*e{USzmVAfkl1X+3=E9W@Z>^b3nH;ak=U|GY(*rt0f>Db5-%o5 zY-=R8JrdguiS32N4n$&yBC%7D*cnLdd?a=;61xhCU5CVOMPhd%u_qw0ry#NCBC!`D zu~#6m*C4SsBeAz5u@4}zk07y6BeBmTv9BSqZy~WCBC($$vELxEKOnKcBe8!Yv3W`u z7#N}PC4j^hM`BAOv6Ye7>PT!oB(@O}+X{(ohs1V8VtXR7Bazs#NbD3Ob_No=2#H;W z#I8kRHzKjSk=Xr6>}g2sSxD?9NbD6z?Cl`-B}h8ojl@2L#6E_^zJSEOg2cX!#J-Qj zeu>0>i^Tqd#QuTA<|<`iV1&Ad4~Z>`#Fj*2Yap?8kl4mZY;z>GClcEii5&xCUxkE2 z0unnNiJgtaE=6KjBC#8g*eyuxJ|y-eB=$@s_FN?PawPU@B=#mG_BJH;0VMVjB=%_} z_IV`sO(gbRB=!>|_6sETCnWYaB=%nP_r#AYo=#5E@p zTL6hIg2YxsVrwC>4UyQUNNgJ^vlP5fZx+iCv4t zZb4#qAhG+A*prdibCB2zkl4$S*sGD)n~>Pskl1^X*awl=Cy>}@kl2@z*w>NR_mJ3+ zkk~Jg*l&^8Uy#^8kl6o`*vu7(G{A+#=0jr3BC!>b*cwP|9VE6H659%i?TEy7MPmCP zu>+9UQAq4KBz7tiI}?drfyAysVmBkP+mYCPNbE^S?1doq4M;t*6p6hCiM;`dy$gxG z4~cygiG31@eHn>;9f^GpiTwzP{RWBs0g3$`iTxXi&05L8zzB6eClXr#i7kS}mP2AI zA+a@)*t$q;b0oGk659!h?S{k-Kw^g=v7?dL@ks1UBz7(my99|{fy8b?Vz(i&dy&`^ zk=V15*z=Lt%aGWskl0(0*gKHe`;pj(k=SRE*cXx5H;~wOkl4?V*sqY-ACcH!k=Xx{ z*vwUkxaLA)^C7V%kk~RvY-J?2IuhFuiEWC+wn1V$AhErW*nUXtP$YIF5<3}*osPuL zLt+;pv1^dn4M^;EBz89vdnyupCK7uA5_<^}dmR#c6B2tT5_>Na`#ci+G7|e168jz! z`zaFpB@+7+68jqx`!5oku^K6Uk=T4lY*{3>A`)8ziLHagwg$0pL&`UMB(@t8+Y5;u zg2awMV#gz~labiDNbEu+b_Ei<28rE<#O^|3Pefu*MPkoKVlPHwuR>z4Lt-C5Vjn?b zpGIPzM`B+?V&6hyKSp9dM`C|NV*f&7gYLLygoZO~4Fdy=EdpZSg@nHZ5?daLt&GIh zMPeHwu`Q6;Hb`tYB(@h4I}nK-io}jbVkaZ9vyj+%NbCwEb`27{8HwGF#GZ)6o{Get zgT!8d#NLF&-iE~9i^M*N#6E$XA+a5h*e*zHZzQ%q5<3!!9gDq#NLd=-iyROh{QgD#6E+>zJ|oUg~Wb{ z#D0pzevicdjKuzh#QulG=BQ&}V1&jO4-#7#i7k%ARzzZ}BC&Ol*ak>!DAhG8mu@@n+S0b_3BC)q4 zv3Db}4}4SKBS?9*3W>cDiMXPVy{MGZ$e^kLt^hmVjo0epFm=tL1JG~17>KN5Q;5_>KZdkGSI1rmD`5_=mGdoL3EAQJmD68k(7 z`x+Aa783gj68i-b`#lo-GZOnR5}UD!fq@Ykwj4-o9wfFH5?cz1t%$@{MPlnCv5k?~ zR!D3+B(?_<+XsmqjKmH{VkaW8Q<2y?NbCY6b`=u44vF20#O_35Pex)-M`F)IVlP5s zuR&sOKw@u4V(&&`A4OuHL}Fh+VqZaG-$P+CV(MargBz77SI}3?jg2b*sV%H={VxIY{hfNbFTe?2Sn5tw`+sNbJK%>{CeWb4ctPNbEaE?8iv#=Sb|2 zNbIjj>_13sh89Fzb0M+$kl3O~Y)K@xG7?)IiLHmkHbP?CAh8{g*zQPdZzOgo5<3!! zoq)tnL1O12v5Sz{l}PMbBz8LzyBmo;35h)oiM;@cy#$H98i~CgiMO;5#8yONYap?8kl1EO zY%3(TBNE#ciS3WX4n|@}A+h6-*cnLd93*xz61yCU-H60)MPm0Lu_qw07a_5iA+gsY zu{R>IcObF%Ah8c4v5zCM&mpldA+c{FvF{?WpCGYcAhF*gu|FfRe<88|A+g!p5b@59 z#1=wgiy^V)k=V*eY%L_V9unIeiEWLxm`vemE3=;b?68kz5`#uu; zF%tU~68jwz`yUdUsT~p5Tu5v_B(@k5TMCJ-gv3@uV(THXjgZ(@NNhVKwi^=L3yB>C zV!wd2&*PBTsYvWhBz7?pyBvvKhs16|V)r1iCm^w>Be7>Av6mvTS0b@DAhEX~vG*ad z4!7#N}9$&17mL1IfFv6Yb6 zYDjEdB(@7l~bn#I8VM*C4Umkl0;F?1@P1 zsYvYkNbJQ(>{UqYbx7^n&82T1H!NbGk=?5{}dpGa)x zPDK2&BeD6A*g{Bb86>s>5?dXKt&PMsMPgebu^o`uE=X)YBz6!II}(WKZdm$2g1rmD=5_>Zedpi<)9}@cz68j_)`z#Xs3KIJU z68k<9`!N#x6%zX$68kF>`zI2cp$if3EJ$o_BsM=1TLOtKgTz)wVyh#u^^n*`NNh_a zwk;Cd2Z;fcq2@<;+iCvGx?nGkuBC+Qnu@@k*mm{%PBe6Fj zv9}?ykAm2*A@$KoB=!X)_7x=dJtX!cB=$=r_FE+OcO>?2BsNnw0|O(}UN$7Q01{gS zi7k!9mPcZ1BC&Om*d|D93naD^659=l?Tf??L}EuHvEz~0X-MoWBz6fBy8?+_kHl_9 zV)r7kCnB+DAhG8lv6msSS0S-CBC)q3vG*gf4|_6sETcO>?2BsNnoB2L+m*rFizJ4ksViNsbwVyhsr^^n*`NNh_awk;Cd z9f|FY#12AYhas^Okk~0m>}(`he&m*xfBeCxyu^%F_Um&sHAhEw8v40`48T%L*7@_gVip1teVhba& zrI6TiNNf!xwhj{87>R9;#CAktyCSiDkk|o8>?kC591=SfiJghWE=FRPBeCm{*iA_6 z9whbzB=&S9_G~2fQY7|DB=!a*_7)`eJ|y-bB=$)p_E{wMbtLv}B=#dD_A?~*4ze8ew zLSp|!V*f>A^Gsl1VEh6JX8|O(I1*bLiLHvn)+%iNx+jVoyP0&p=`?LSipNVy{JFZ$x76Mq=+rVjn|d zpF(0^L1N!PV&6w%KSpA|MPh$MV*fy5|3PB2O+>^m7ZO_#i7kr6mPcYMBeAuR*m_88 z3naD;65APx?T*9_L}G^`v15?f2}tZLBz7JWyA+9CiNtP3Vz(o)`;gd^kl1sO*b9)@ z%aPctk=R?2*gKKf2awoDkl5#t*q4ylH<8$Pk=W0X*sqb;pODz!kk|~95b?``#O6j~ z^CPh(k=U|GY!xK71`^u{iEW0&wnbt)BC)-Z*#1cDFeG*q5<3Nnoq@#8M`9Nvv1^go zjY#YcBz6xHdm0jZ77}|Q5_>5Udp#0+GZK3j5_=yK`vemE3=;b?68kz5`ymqhDH8h) z68i%Z`xg@X9}=5&G9unNk=VjWY;h#E91>dziLHagHb7#VBeAWK*se%yPb78#5<3Km z9f!nDLSknkv2&5wW5?cm|t%k(bLSh>t zu}zWK_DF1JB(@h4+YgByfy9nMVkaZ9(~;PPNbFK1b`27{0g2s(#O_04Peo$SL}D*S zVlPKxuR~&QLSpYhVjn*eCP-{+B(^;g+YO2Bg~Sd-VuvEJW02ShNbGbZb~X~b1c_aN z#I8qTHzTpTk=Xr6>}g2sSxD@KNbIFZ>@`U24M^_bTGV@T|?NbHM9>>Ehz zJ4o!uNbKiG>~~1)Pe|*h)xjZ6vln659-kZH2^k zL}I%lv3-!(0Z8m{Bz80sI|YfIfyB;7VizN^YmnFtNbGhbb~h4x77}|N5_>5UdnFQk zGZK3{5_=yK`w$ZQBog~968j1g`vwyGJ`(#e68jYr`yCSdD-!!B5}R>4BHme%*gQyV z0VK8r5?cm|t&GH0M`9Zyu}zWKHb`s-B(^^iI~a)_jl_;eVy7dqvys@vNbGVXc0Cfi z8HwGE#O_C8&p=|&L1HgKVy{4AZ$x5mMPlzoVjo0epG0DxMPlDWVn0G+zeHlcMPh$J zV*fy5v(I2)VEhj0cXK1Lg^<`{NNfcpwh9tk8;Pxt#I{6Y+aj@Dkk}qb>>wm|7!o@c ziJgeV&PHPABeBbn*i}gE79@5D61yLXJsF8T7m2+PiM;}ey#|TB4T-%AiG2`>eH4j( z9*KP!iG2%+eGiHK0*U@StVnDgB(?w&TMCIShs0JzVrwF?jgi>q zNNhVKwi6QD2Z_E{wMMI`nOB=#L7_A?~*Dtc5?dXKZHUA+MPl0^u^o`uUPx>|Bz7ng zI}(YVjKoeyV&@^Ti;&nYNbC+Ic0Uq(G7@_h5_=vJdpQz&H4=Lh5_=mGdoL3EAQJlo z68j7i`!*8$J`(#G68jYr`y&$jD-!!Z5}SDrQv4#Z`HOLSj!rV$VQg&qrb}Mq;l; zVsAuZ??7VjL1G_6VxK}{UqoVGMPlDaVn0S=zd~ZaLt_6xV*f#6GtXsUV1$M#*x^X*I3#uw z61xbAU53Q2MPfH1u_u7o4280|O(}{j5lA9wfE^5?daLt&GIhLSpM7vF$)?W=QxrA+bG? z*uF^YSR{5L5<3HlorA=#Mq<|^vD=W?T}bR%NbGq??4?NTl}PNJNbJ2x?4wBRlSu3f zNbD;}?Au7}`$+8PNbJ{0>`zGSZ%FLFNNmOh3=E9Wu;oBv^B}Q>k=Wu$Y&j&h5)xYr ziLHmkHbr7vBC#Ei*e*zHA0&1F5<47;9gW0JLSm;Ov2&5wg-GlQBz6rFyBmq!kHnsi z#GZ}BUWLS7hs557#NLI(K7_O;8#Fj&1DGH4@tuiS3ER4nSguAhFYs*jY&ILL_!6 z61yIW-HgQULSpwJv8N-kXCtwfAhA~x-A+diUv6&Yk;*lMREr7%pL1N1yu@#Znx=3t8B(?<-+Xjj4hQ#(lVh19zLy_2V zNbDpeb~X|_ABkO!#I8qTw;{2+kl2%v*wc~N3y|1Lkl1UH*c*}9dy&`&k=Un@*yoVg z*OAz_k=Rd=*e{USe~{P=i;?0EiOr3~mIbjnAo*7jiLHUe)LtzJSEOj>Nu=#D0s!{)oi>fyDlU#AaT?z`zKNFLoq09}-&#i7ko5mPKN# zA+fcP*oH`KQzW(>659!h?TN(pMPi2_u_KV!@ks1sBz6`OI}eFnio~u&VmBeN+mP73 zNbHG7>{&?cc}VQFNbHSB>>Wt#JxJ`sNbKWC>~l!$OGxaSNbI{v>?cU<7f9^)NbJu@ z>_13shNVbp0Ex|w#1=tfOCYi3k=V*eY%L_V9unIWiEW9*c0gjgAhCUs*nvpw2qbn4 z5<3-%or%OQKw_65v713`Zb*66j>PUmVoyS1&p~1@Kw>XPVy{MGZ$)D7L}DL6Vjn?b zpF?6_LSo-UV&6q#zei$!Mq>X$V*f*8vo2#`V1)XY6NxQ>#Fjx~DJBP6yN65AGu?TEzoKw|qKv7?dL@ks1+Bz86uyBLXGj>K+5Vs|02 zCn2$?A+eW&*iw*iTZzQpfW+Q{#6AXM%RtnhLSkP;VqZmK-$PI-ZVw)ndZIIXwNNg`8wjUBZ6p0;)#7;(H zrz5fRkk~~?>>4C?0}{I(iQSFFo{Pj@h{Rrj#9o8M-i^fGkHkKP#6E?@zJtVmfW&@| z#D0y${*1)_j>P_l#AaHF6pu)3J|wmR5?cj{t&POiM`GI}v7M3FUPx>|Bz7ngI}(YV zfW%HgVrL_<^O4wPNbD*kb~6&Y9f{qC#GZu2o`b|*fW%&p#NLd=-i5^8hr~V)VkZM`Fhzv6GP4IY{gRBz8FxyBdkzip1_jVoyL~ zPeEcYLt?K&VsAuZZ$)D7L1G_3VxLE1Uq)izMq=MbVn0J-zd~YvL}GtMV*f>AGp=D^ zV1$Mt2NIhHi7k!9mPcZ%A+fcP*v3d~b0oGM659!h?Ty6tM`DK|v7?aKDM;)LBz74R zy9$Xt0f{{Yi9H*MJs*j^7KyzPiM=0*eHe*-6U5eqq{F*N>?cU<7f9@1NbG+|Y}U05 z42)27IFZ-_NNf=#wlWf19f_@v#5P7^TOqOSkl3zBY)>S1AQC$ii5-K)PC#PkBe9E- z*i}gEIwW>G61y9TJqd|D4T(J;iM<$!y$XrF4vBpLiG2i#eHw{<9*KPeiG2r&{T9SF zfW+@dB=!#^_8%lR-#P{cMyPrrB(@|HTNa6}g2dK9Vw)qet&!NyNNjf`wjUBZ2#Fnu z#EwN`ry{X4k=O-D>=Gn)GZMQUiQR|9o`l4njl`ah#9oHPUWLTojKtoK#NLO*K7_=+ zg2cXo#J-QjevHI^gT(%T#AaO2z`$q>iCmsoYk=V{iYn~>OTNbFuD_CzH1VkGu*B=$Na_9i6uK@i&<;+~^O z>@!I03rOroNbF}w?6*klk4S9h4Gav7Q1jW5*nCKAAtbgUh;0dRk17&d2Z?Qf#CAer zyCJcCk=TJq>|`W%Iubh{iCv7u?m}YsA+e_-v1cN&7b3BjBC)rC*wzq#?LcDhM`9mF zVxL7~UqoWxKw{rPVn0J-zd~YvL}GtMVzX~#U|@v0hZ~74gv1s@VylAKb`bY#BC!pS z*d|D9J0!Lf65A7r?Tf??M`A}Kv6GP4X-Mn>Bz6fByBdjIkHqdoV)r7kry#LsAh8!A zv6msS*CMeuBC&TPvG*gfk0G&7A+fI@v2P%;?<27vBeCBiu|FcQe;~2{AhFptF)%Pf z^Vs61xW1mNbJo>>|IFgeMs!{AhrXfe7lUq zzJVmm|Be?emZMq>X*Vhe6zU|@8Gs24?I%OJ58kl0#CY&|5lDH7WfiS3NU zc1L3SA+dvy*eOWt3?z0w61y0QU5mtSL}GU!v3ro%^N`q!kk~7c*lUs4dq8XtNcbE; zVjo9hpGIQe1+l#$>K`JpUm&sHAhG{}*uD_;Oj{Wk7@=%VBsMP+TO5fkjl@<$Vyhvs z4UpI-NNj5)wmlL%5Q!a%#EwB?Cm^x2kl1-h>{29lB@(+EiQSLHo`%Gpg~VP7V*5kF zXDt$YD-wGr68iuW`v?;IEE4-768i=c`wkNODH8i768i%Z`wJ5LFA|$^8v_F))Xf}7 zY#t=GC=y!|iLHdhRzqUzBe9K<*iJ}nHzc+n5<3Wq9fib>Lt>{Pv9plaMM&&2Bz7GV zy9tTig~aYdVoyV2&q89a0|C5?d09t&POiM`D{Jv8|EV&PZ%`B(^^iI~a+b1Y!q4 z!YvJnor}aSL}FJXvFnl8ZAk1cB=!^}_6#KUd?fZ_B=%Y)_C_T34kY#-B=#{R_9-Ox zMI`oBB=&tI_G2XWD{cXpClY%C5_<{~dl?dY6%u-q z`#KW)HWK?068jkv`#lo-GZOm`5}RQsB97RR*xX2L5hS(*5?daLt&GGrLSmaCv2Bsq zj!0~OBz7G>=-0=0unnNiJgtaE=6KjBC$J=*gZ(>$w=(!NbKcE z?A1u@O-Sr*NbF-s>{CeWOGxZ%NbI{v?1xC~7f9?kNbKK8?Egq?w%v&M;zDAJAh9Ko z*z!nhWhAyP659}oZGptLL1MchvAvMkfk^C7Bz8IyI~$2zgv2gGVmBkP+mYCPNbE^S z?D?9)i>^GNJ_Aa)ESe?3BCzeHlcMPh$NV*f;9 zGwfktV1$~(g2WaBv11|TOChlpk=Uw8Y;zDh38LN_iS2~Mc0*$OA+dvy*pW!=SR{5n zh@A{EzZi*Kg~YByVow0EQy}W6AhBm7vF9VP*%%lY7^gzi3xL?H;H^arA`A=+!cevZ zNSqxaE&~#WvK2t$+z@dUkT{gB0TSnhi0gpFp=<+?ILHzP1_l$5IFxMx5*LD~w*iSm z*$yCakV6<47+gT&P__q1TnwV#2P6(<2Y|#uj%8qA2my&h*%2UdX^8q5kT{f`01}sj zh^K(Wq3jHhILLDh3=BCSaVWb0B(4lmUjh<`vMWI1Y7p@nkT{gx020@Ph_`^mq3jNj zI4EEk7(hoCGYCW36F}m65cN|)>Y?lzAaPLOF)%R90f|G|3qaz=5cNwy;!ySqkhmE{ zd<{q(%H9AHw}gmq0f|G|J3!)~fM;L;WeWyjDEk0N+#aI-2uMAYeF7xz1Q9<25{I%c zfW%!P;#WZ8P&Vj#bw*I6F)%RP0f|G|4?ya@A?lxi#G!1^bqkDs5b-x4aVYx(NPQqg z9CTErFqHiRBo2yj1_p*dAoWl-Xqy>hI7B@QBLjmllnq*b%@_$0=K+aB*`Q^PjGzR< zz`!5^5{I%S7#SEC;~?rmOWcH^Y|!!-#zcs?3P?SatpQS>3=!7>i9^|-X+_2~h`0$z z9Llx;sRt!G1_lNjkT{eL8m?l@f~a=^i9^|-VH8GC!en4z@BxWK*`RI}V;)3(2uK{t zjsTfo2oVPrdBRY30!X|VA`U7tgrV#Vka#IXJO^YBlwAN4FNcVifW)Ef3XpguM7#zh z4rMoh#6cN?fq|g~Bo1YFfW+$|>U%)qQ1%3ncq2r73P>Evo&gdEWgt-c2Z=-33qa!S z5cNwy;!ySqka!nFd<{q(%H9AH?}dnO0f|G|J3!+75b-@AaVYx$NPHqh{0K-K%02-S z2W3zO28J^raVYx&NPId({S}ZnlzjsvJ_{m#2P6(%wf{4q2#Gz~jkoZ=JxC%%d%GLmhg9;S}1_m9FIFxMw65j<; zZvqmBvMoU3dm-XBAaN+$0VKX3BJKhbhq66D;)fvOJ|J-@I{+jODyTr^KS&(PjsS@t zhp3MMi9^{5An{WW@f46al$`+*KMN7h0f|G|1t9VB5b+X_IFwxh62AlyuK|fe*$p7^ zs}S)PkT{gx0TKrlilFizBo1Xy0Et8IK%W8y$t@spD0>G;98~Cn%72hJlzjjs4!uL+2uK{tJ^>Pkp51*0 zBo1X?0Et7-YQ6#zhq7;g#6bl%sQd?sL)i~N;?T2?o`A%m>=z($=s6p2K;lsL2aq^) zFaH;iIF$VZBn~R3M(kH*VP;?uhV5Mii9`1`@_@vlYyprssB!?6{~&QF zTLL5wUBfQ}5{I%CK;qD~_bMQ9C|d(04ysH*=^rExWgCFRp=;euK;lrg1xOsa{@ey6 z4rM!l#Kj?PGZ&CJl8=Phy=v>bkkT{fm0VEEpoEaDx zu7Jd$>>D6)=v>AfkT{h603;5br+5Mqhq7OQ#G&KfZ$RQu_6LwSsFG)3VE6(Ohq8Zw z#GzxDe?a0;HUkS{T!@8*fk7BLj>iEKhmNuEfW)C}0g!kYB)y4%#Gz~nkT`UVLIxxb zWh;QhL5&Lr1_l+7IFzjc5|4tIqXQC$vJF7upaux2{SOj{vMoU3&_0(9NF2&`0Ex#z z%y9vUL)ji6aZuw0)cyg9L)if!acEyG1SAe+M}WkkeW)0aIFy|L5(hPWKzv-g^7dvJ5X^@e+MQG?$%av_b@i79|2>7idRNx+Yi)VfU&{-1*kZvzW@^l z_Y0tHJW#)Y5y}P?PcSy9UjSo+iW?Xk)GvUsLD`ZK+9m{LIT#z1ZD4Fr(uc9Z?R;ok z1=P-GgtEcyd?*{#&WDME+w;&i2BKE$Jq!~Ew|k-Dpmr}z9Ng}Oii6s{FmZ6Z7b*^F_rk=%?OSNu0Mx#Pt(OM3Z=vF# z_AN{t+`fg1gW9(+ad0~pDh_JL!ocQ<*XqyDoUWKju z1-DnB;&(viK-u8-DwGXsufo)W+oe!(P`eZ+4sMr1#s46g18$c>#X;>-n0j#g6WWFm z0oCbHHn{x>WrNzEj8HbXoe6Cl=z!Ei+2D32lnrWU!sgJy?M$dRsGSKD2e&7oZ39qy z5;orlZcjqRLqO(3+2D2~v<(1iH^SyG!0kq;IH=tS69=~sp<{`l_8}vb4Q?Mo#}ZpW z=0n-w_91jE5!60pgtEcyL+Dr{sC~!?WrN#?ph_4tJ^(TY$_BR&p<{`l_8}vb4Q?NT zDryD>22lHu5y}R)520g;p!OjnlnrhlLdO#KfXs)o!R$OvVF+lSDxL{R&X z5y}R)4?&FrX#0>6$_BR&p<{`l_8}vb4Q?Mo#}Yy9Lq;eY+&+YkC4$zeaHx9gWHGDu|!b&kP*rTw-2H16BAI|49W(#520g;p!Ojn zlnrhlLdOz8?L*iYBe;DC9ZU29nFD2m+lSDxL{R$>HpU2UA410xLG43EC>z{91U0On z?L$T=I|F1UbSyCkiCq9GG0uUQImbe6oy#mCBjwP-^Vs8Mkp<{_#kk~swZ0K0x9whbw z5F6UAJA%YM0b)bP63-y9FM!z4cHI>u_6-mlI+l0`iTwb?hK?mZL1MoEu|W+|(D)b< z`vZs#9ZURz#Qp(dL&p;TAh8)(85kHr4Oj*S1{NeX2Z#-APx2tK1wd@*SfU6LTLQ#} zjwQ+jsUTtZOa%Wb^?eEZ8xSMu`@ty=vZP761xDz1~udv7#K>B*cBi) zbS$w3iQNEVL&p+Zkk}m{Hgqhp2Z=oa#DSmF{S_6iUi zI+nNwiM;{DhK?m}L1OO!u|XXU(D(on`v8ay9ZNid#6AIHL&p-&Ah9oi*wC@WD@g1c zAU1R?@eUIE0f-G9OMHUFegR@b+u?7J*dIV_P^Sk}{v)w}fY{Kn#6L)E1~vu;M(9`~ z3lf_H#DH0mO!mC8i*; zGeB(USYi$my8y(7jwO~Lu`57qP-hWT{v)v)Ky2t(Vha+x1H^`oCH5e(CxFT|5_5~0dI+l0^iG2gahV~ckAh92S*wA+S6D0Nv5F6TleuKpR0AfSO z62Bm^e}LG~vBW<}YzB73-X#_!HV23eZDaEwu?0YE=vbl%5?cbqhK?o5Ah8udY*1$% z)c!$YYk=6$u|yptwgHF@9ZNJpVq1XNpw2z0--pC@0I{KCi7rTN4-gwVmgs}T4gj&C z?f(!Yb_9qG9ZQTsVkdyu(6Pi6Bz6Xf4ebl$Ah8QTZ0J~G2@<;k#D@p-ac$^Jt4tRbX%3g=0W)~9sG!pwd68jz!`zaC|JPrmm^D~n8FC;c2XiNjD20Zo! zWrLC|%r9a{YGjev;PEb~dTk_eBP6yZ5*s|m1y%2kB<_dA4n<;v$F-p9laa);kl2Mt zZ17kXRDC^?cpDPC7l{oXzk;ftjU>JZiMSP)cwGm>~05_=*N8$8YfRX-m|d>ImZEfRYhhz$+%eIPbe z?@=T+czgybei=#p783g*5*s}B0#*MWN&FiU`!5ok57gg;s+U4yt0A#msp@k=V#}y*-k+D-zoqi5-Z<4o70gBC(O{ z{Y)hBd?a=$61y6S-H60)M`9zl0VX4f&qQL+M`ABUVy{MGZ$x5mM`G_qVjo6gpG0CK zw+*f$iQh(IKSW|bM`FK4Vt+#J-NizKg_ujKqG4#71tnd_@xfjl^a|Y6Gw% zv3Zf$!bogMB(^*fTNR0|jl?!YVw)qeZIRf{NNnUbk3W)lC=xpwiJgeVPDf(rBC(5+ z*p*1^dL(u$61y9TJrRjL9f>^`iM<$!y%LGN9*MmbiM<<%eGrL#9Ep7viG3M~eG`d& zABp`GiTxUh{Sk@%9f|!HiOmceD~7feIg!}>NNiCgwlor(n06y*8WmP|%OkZzK+~Ks zaa|;F(4G;PIC5JNc?`r8Nj-Rd6x98o={lHR(3BgDjody&9`^uEU%}K=A(;u9MuLfh z_i;eYM{W~NLsAc#hJmRE?a_d-S0kwbO@Y9~k=udb^-fUpLDLK{HRq7@f~Emr;-I}1 zFg9}A?-i1I&@eho4R~D>)cpTQYCuESFg3{SJ@8s4sCsFnc7hTTTN8;58lr`ngWSdg z4VA*gLBpLeHh9ev)O^tJB1{}K%}gXVcr7Kg3|x*Rjyw*G z+{Xm3pMeHvd4y9rD;d@|?9lQXeD?i5-i?2Jc&emNUrX`N;Fspe2K_IuyKD1*#sj zqz@+Ehh!%57(RG^3RFF4NgPc5DkSwAk=UT+XfQR%ylnWF?RLtp@pl|k1({{xK+fja993=Hz1K0b7v^Cb`)y0$qGw5|ra zp7{y~0|RUgvnD4418m*$b1nu3*jnXXJPZu5^~uJ(3=FU}$vZ%7=sILue$d&@5ck{{ zW?+D=H{L1EzyMogykC-m0k*E#OPYZJwwCy$3i2*V0-*qL2T&y+hZU$ zX!44IfuTy5fq@Y;P{F{!Z~?@IuB~m+V_;weO=^MmJ%QMu48g#_@L!*Sff2fHR>+Wn zff2NbgMoqJDToak*kE8_urNWaiJb{zgE9>R1H*PR1_nmx+Sd{b1_nmZLJtN823<=A z21d}}2Ll5Gn-v2CBXnJBwlxC-Y~NF@Jp%(Hbp7f>Ck6)C{-$_W1_nmZ010TljT-|4 z=zdvHDE@V4V1VsidgH;s0Na<;=8M?RzT1z10d)TXNc|Ik1_sbM;2?HoAOiy)wnYpKu>D8Z%NQ6K zL4^uvzfuJQ10!^8q-iDMPVG}wi2Iu7S0naQFRDe{O$kazusaR+)g$gZlWbsMU<5S= z85kG}Ky2vR#oZt_XmJf_J!B)|?yZL)HgsL$4-gx)=mwO=niv=uq3aLBKy2um!^h2t zJ7_{$5qFwQ1hJv(3A5S|_c9!8N1W|1)(I+GAa$rKhz(sISOQ{$2CEnt7*>MV&~<=X zU5N9v3qfqqAQmWJbTcq8Lf80R1+hVsmJAFGpFwQU;1*~vb`Pk`f!I|9VuKd`FfcGo z0I{L#^xlKmpovWe28I>A4Dd4&)%zG27(t7JKxqKP1`UicFffGnGcYiMCO;V%7}kN< z(DijkL2T%nx*Zc47#N}J=q`ZRpn)_728I_PHgvt5%_If}M(7&3Xb>B^F0L5FhOUL{ z2C<>*-|mCh&^2#=Ky2tbx1Wp*3_{R42sDQXVuRMZftIWZLF*&XS|AV`Bre6ozyM+! zf#Mg$hSpP{IYA+A2GABM26L#mEdv9C7l;k5zd-xigm@upK>ON2Y>+wWAT`i>Ef>lL z*#%nXBP77U05S)(A592a-}Qsk2tmvN&EJ89w1_p*zP&R1& z0%)F22)b_wv~CB)2HAB9q(+2+0b~wn?-)oNWX?0FIH7&hp901z9rl>jt%24c?xm1$7Dp#8XIAU3o;& zgZvAc3lkD!U;s4_K|C!uVR`$21R zKx#nlzX=rwxgRvQ1ri6jA2hcGVuRcd+5-h*gWM0=BM)MO));cKFfa%~+c5l4Hpu;= zP&OX}1A{b_4f3WUlnv6N4rPPZW`fr0fXo5KqcKz*)avD0-i5NaGcYhbhO$9xIbTBApm~hXP&TMt{1eIs?c4qjWrNnUu(Cqp=q3XL z12>cns^$ctY*4!xG~WdBBdD6w0*QkX8v_FaXzz@WG$b#ZLB&CF3feCN5(hOYouJ~N zbO_ob0}^)wwG*J?UZAoX$_AY)76oO4wu6E8!hqC+*3zay#X)@((Eb;YIB0uU5mda4 zfq?kVi>3rHNaSAG#x z95i4l>Qmn7#M`)7#Nfo7#P^0Y|!>VUML%Mwt+B| z4GL#TC>s>c@=!LYOi+cggBTbXw4rQJI2%IQp!LhOXh7MZvkmm1Y|xr76Da#6 zBLjmKlnq+*qxuPO>zw?I1Ock)$_AB7)lfF*?3N}d8?@)61Ih+<@%o_bKt=|JDNr`3D>o0y26f+7K-r+OYaNsw z&&a^A1}yryN!{7 z;S-1rO8g8A3_qZ3P`8eWn}I<{lYs%$z2b$kL3u$K$_DL8l7+HC=~f-e2DP;ep=?lH zX%1zB+EI>BHfZg(HvB)UWKwj zb>)318&p@mgtC7!FfhD_vO!x-e?r-yy+_PEkg(-oWMJThvc(t~7(}3K&@hM;lnq*2 ztpH_%_93Z3*`RHeI#4#~3?U;Z+l`Td!2-(mVq{>jgR=b?85mrkY|z#}e<&MNZ-znH zpdp1AC>u0fkOXCeh6OU9Y|yYk9+VAAlO<4gCL;qw6_gFCXIr3b&>VOllnq*cJq5}x zWn^HO1!dPUGB7NFvYQwg7?wfVp!B&0$_CAcZ-BBv!{bLmZ0LCxr=e_6IeZby2Gs@E zp=?mw^)8eR+OO~!$_DlEUqacSYUMqYtqv-eplmG$28Q2IHh3O`mw`b@hk*f9KC?sF zpfzZ`P&R0ISpv!irGI%S8&p=SLfN46x-_9|P@C2c#0G8n1D$&eWrO_U1!aT$5&&g` zh9JVAY*3vN17(BqW)hSQs;4rbY*3p#56T9$$xEPYP@b)VvO(vKH9*;*zE2yJ4Qk)^ zK-r)?I|<4L^;_pc*`WNp1j+^teXoMD(?R1@P&Q~N`!I+NawG!-!$~L`RL)$6vO(p{ zJt!M=6v-1P8`LI$2W5lW7Y$@8$qygNDkzplnb(JP^tT4R?n_*`Tr|7RmGWrN02 zDxhpoc~S>ugXV=gplne8cM_BhDre?E*`WGs5tI!Y+Fb)>e`a7{*al^PV_;x70A+*f zvSUy-sBF0aWrK!fZ$a6hI_?RS4XW2(L)oA;eIKE0P}%Yw$_A~Y`3q%(+UM;2kT5r5 zWMB}4vO#+v#i49aJtzxhJ2EmbC_~wxp;1jJ8??7WAIb*RgT_!csJ`<6u|Wv{)K7=9 zL4DE?C>zwiih{C1`62SJz(vO#^iy-+r&ZaNHQgXSL3LfN3Y={l4RIw$WTlnolQdI4pF)`z}> zvO)d&FHkn<=!{=bHfYZfs1g=3W&mBy!oViLzyM-{+DigZHfYa~G?Wc$|ENLPptYX{ zP&R1ak2#bL>c=@k*`O%^Zzvmd^g$?;&BMsRkN{lLMU67k%6Ha$_8!! zZ-uhe7#SG)p=?k(nFVEo&a_(sWjir4Fsz2MLG7ijP&R1W`+g`JRA-%pvO(>lD^NCQ z2>KqBoyEw&@C3>RwS`_m*`T)22PhlV7WxKdgZBOWfwDpCu$TlP;n~c{z`y}zgZh1Z zP&VisI}s=w)bEpmvO(*x6rgO-nRaSWHfZ0E4wSu?k%7So%H9mBm!WLXnk+jg`xqkw zgA0@mI$PQc%D&3Tzz_gsgZBD_LD``FyD?BUsNa_aWxr))V90>7zcMl~yjlcR7>|I*V>2lJU$_AYq zX8>h`&VDn4vO)W9ZJ_LzObiT8P&VkSVh<=Av%OENPsWJ1|W%nS@A zP_`N~14A{G4I0;Pg|fAo85sJZY(r)ShM7<{Xs^stC>yj-cLS8|#mvC49m)os<#rIt z_Ge~bI1OcoGBYq-g|b28{STpR(D`j|plr~d-Oo@q=-l7GP)A28Pp6HfRpvB9sj}tL!S29mc}I@Cw8RHRKo=7(PJRp!VS}C>u2H z%__pcAY{hCV93D0AOK~9+Ivz^HfWqd0m=roqqL!HP&>*L$_9uE8P@QE9WrO-h?of6$BLhPql-u0BnF3{l zu6N0TvO#rL0hA5uHbqVj8+7KxbSS%)iGg7u zlntu;RzumKIqHp2Ht5WW-B31YzWOMX4Vte$4`qY)m|lglL3P}HD0?dt1H(%wdp8pU z!)GY_IH*2_vO#D0Gl)aN_97Dl0~?fm8C0J_*`Tv1grIEDIjJ&GHt1XmB`6zI4{AW! zUzr#f^q_3eT(=37{f~)(!3xS|W@cb;fU-gRP2Heu(0)@NC|ej*{zKWKpzBhpmQ(Up=?`b28LcJ8?@haGL#LP zGoJ}%CowZH%!jf;XI(6XvO)9YtD)>RW(J1!P&VjH(<2}@r~}Kuz;Fu629?_vplncI z<{Fd@8Y{j7WrK?PM^H9sz2plh8&p2OgR(*WlrK;=Xbj;Olnt7DVvt~95VB-o0QGs< zplne8g$K$8%`b!IR6%M$eRBz@IH+GN2W5l$!YWWUXnt7>$_AbNV*q7?%5XC%8#JeE z17(BCa3?4mH0I_3WrODEgQ0BDyk{(w4VvFfhq6I)%DGTBXpF8L$_C9{HbU8;a}m0s zY|vQ<6QOL-SqQVCY|xnSQYafVF1H@a2K9ZmLfN2kxjj%eXk6|PlntsEPC(h9df^gX)OCP&R1E5VIsCUO@Zac%f|2*snO04eH~_ zLD`^rD-|fakdc8w3(5xdWelKf&{(b+lnoj~vw^Z385tOyplr~5mIss#sxSPY>^?>Y zh7c$lRCh!{*`T^30m=sLJ4u7GLC09-K-u#d85qi-?1hXB3=L2=s2|h@WrOOJ9w>Vg zBLl-^C>wMS&rB#AG#54>$_Dj`mO|N}bG}zY*`Ra2H$vH@Wu0B5CLU_#;)U_?8%_BXQ6D+ znvE zGqa#PP&R1nNDj&d&3$M<*`T>LJt!NL zPAs5o(DGC#C>vD9`as#Bb?ZS;HYlCMK-r*qkTfV8v}T|H$_ACIDlSP&TN1-VJ4gmUQli zvO(icS3qn~gfcKN+=8+}Y2yKu&BegL@C?cZjW@o5vO)WdzeCyJGyG&37=)Y{7(nyL z+)y?s{Rl$Ypmk!>P&Q~BQWeSutxeL0vO#0orcgF$zQ7*J2JMaTgt9?(eK3>_8k3BK zvO)8?2~aj@S$GKK-r-2?II`}RKHh1*`PF52W9tw)-OTXYZw?9`k-vknD!JX z8?**#7L*ODuNOespgG)SP&R0p^cpA|wC-yIlzkbr78=9`O{Rd>osZ4@C>u1d z{S?XuwS`_o*`W5%M<^R~p3`?IyNi*5;V+a8Y6~&TL*gCO{^5kOCo?iI@I%?4a~4IR zY*61>8p;N>c@&}SrHl*=>QFXl{f`lp4LaM&2FeDtVcei>&|M_~P&R0 zCI*IWP_{J_1H%C*8`S4L1!aT!wilsnP=EG1lnpv>=`NHV&&0s+7|Kor^*5nx(7K)X zP&R1n_bZeQx@Ye_DBtBVF)(l|K;i;)--sBLJ(Y=pK?ceO-4mh)WiMo6 zU@(BPLF2tvP&Q~>*8$1~-3{UeWrNmkhd|k&GnV3@Y|yz%DNr`(K9D>p`z8|uLj{z5 zpNWB?3CaeYx!4J1gVuESL)oA{?^G!JI}-!LY$zMl=UoV8gBG|ihq6KUer$xYLF2=F zplr|`9mk<;XJ!V5i%_;JGXuj7C>wM((jzDvH1_)j$_Cxt@eRrb-TB6-2no+bW(Eds zC_5Rno*K#qos%R3WrN0n)u3$9IIsbfUB%46U=3x1?(T4fvYSBTv`{wa9*;068`S4b zfU^5Q*`V{2CPLYu`#PpW+3T1Y80JFR zp!+%&L)oDFI#xp2dqI70DEkmI1H)D*8#GqD8_EW)H$MnvpJirXI1XiBVrF1C3uS}O zSh@^lgT{?-LfQA285r(E*`RUbr%*QNoXFQu_A6!vhL2D-Xnp!`C>wP45~~sw|bQgyllr6}@z@P$Ui?J{;XhGSa`!@`rY|t8ZGbkH$-lPqb zZN|dD-~?s6u`n=rK-u0b3=BR{b~pU`U6uL3MF1lnttji=k}Ln)ym7 z8`QR`hq6I!m{uqoG_TqXWrN0$Cqmhv@rvnCHfW4uE|d-0>$w=p2Cd^=31x%!eXfVH zL3;$YLfN3X``u7BsD3{PWrNP|ISyrm+B|2WY*3r$GL+rQz`$@5$_CBP-iNY5>ujGw z*`RjyYbYCZr`bm+8#IUe9m)ocY5awJQx^2Yw02g$_A}@-T-BHgVr`c*`V>IJy13%E)GH2pgztCC>s

alc+li_Vo7mk3h1`$l+3b} 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 literal 0 HcmV?d00001 diff --git a/tools/sdk/lib/libfreertos.a b/tools/sdk/lib/libfreertos.a new file mode 100644 index 0000000000000000000000000000000000000000..4c16cea6d44b2853d9a5d016ff5d5e95e204b510 GIT binary patch literal 3529244 zcmY$iNi0gvu;bEKKm~>-=BDN*#>VF63JL~bDP&SX!NlCc1T3tOz{SA8aFl^Tcnt$n ztN{jQl}KP9ggIQlFn}<(n*akk78DR+K*z!dav0FDv_u30DOgV0gMrpqNkD{w9IU#` zg<+^;tygat2w^>s2nG-~h+e_~!$wPM7+}~`cnbqb*wux>6dO)TU@*mnYj_w;X@g5E zLh=hji&IkqiZb(yGD|8M3M!mSi;7b7N}Th9@=HrH^HLcq;7sSD)WnihhBCN-V@gU$ zzDsIOVr6QIPiAoml2mYVMrulF4zl*3)ZF~CRJWr1T-UPHyb`d63NX{XD8IA-YC4ig zcw%OWQ)Wpq1Cp3?PHJKix}bY1SRKe{&)^_r<-rgc6rswzWQHZa>LC%u zQ07=rkdv95Sdy8a7hIBtGg9MXnUJ5KF6)_a# z7nQ_U!1+O?d3l+6>5xziE=epZflEQfDvLuhle1yY0|#7iNq$jkNMdoeZ$M~pYDr0E zUV1Ua;LN;|)S{x&f)c;fVvsPz0glC>aPmy^%mbyYQm{*%^K%Oli&BGAOCV~T143br zuS)eTElI6_i#sM4mSz^A2?nL+q$UM)9 zi;6SLuxN&7E{H=iAvqZoC@9ViN=;5h=nqNE#%?fF8LFWHsj1m8ky41MzNy8#m}_o9NhM4fii}%n zP7X{0q95c0xBMcg9YLwZB}JLZC8?;P3Q7|YbHHUIf(yx0AQKT{!Kpc^$t8HiKvLik z4$90+Pby7IODzg00_B^$w0wpNgdikF8OjhMFwY`H+*3<@6DvRk0Hl;b$Uu??Dj$o@ z&?rN;7b*l(jAVaMYDsBP9>_LiS0O}UT97;e4lr=61gDk+r6#5z+k_$+UX)pqiY$u= zTwMAwRX_}Z*LNY#P7I|Lpn?Hb7lO;>{9I7@mx07lilX@V^wg4~)YQBZ2C!ssX>mbn zUW#K*4g=T__tX+l(F4wuFuy{KcTX+xE6q(xE%HwTnOY3hU!GZ#oZ+0GSCU!*GZJJ( zZmNH2NpK0c+65{1%`7fXO^M7*%}HS>0NV_*DWfPgF~ui8IWY%Ryd|cm27pS})FO!4 zj-a|Hu_VIy1Oor^L{GLsW?AP#Y@$Si@2K!XWf?7`A6$Y`{J9PCGEYKE~BD?{^2GNFco zn;#6|BHcX|8dMP9AVnm^ewY9#2ZGIl#u~&QL8-;1x!~prJjx+L5NS|2XC`NZV-zCd znU`FYnwy#jj%kPxL<1-lfXxrcNlZ@l&jYtCKou+084%IXy!@h+)S}cB?9y;i@I1wrTLt0ueUPyicq@m`X zTH>5vlqfeS=%Xyuha6{KVq z7bKP>XF$0nnYpP&@tJUGaJaz)QH+6UNG#5dPtGqW%1@3j1{c7f;7*2=(DB8IWvSrc zh6xm<7K2)rP%*GBaNt8Uf%!#{W*@Q=kTJ={$Rbd4pn{osB`Jv|iC_hw_{amdc0gv9 z6%=L0=Oz|s!{xwj*Z2~+3V53vDppYf@_uoAejX^6GV@A`V|OKMVSx+|>h9+sM10!m~q`K3uYsTjiEsYQ9IIT*sB#i>OYf)yq4;2u#T zDEWacE-g+iicbYaD9CrPa8Cp|5!56`63j2pOD&2oPGpGpNi9pwF@ia(q9i^yH6=5z z#0Y8*SlSpv+89~d1SSnuYzpJ~`FdiwIXp8jCBGcj2Qp!ZhX{n`r9gT`m?9P!Y7C8F zLNIgSYG49}Mhp!4=!0F5fh?S)p%HYbOCf;^)K?4&@ekI`FG$VHPfpRx*XPPeO)Q8n zf^-z)Q$Udl60Imn%_~lfhvnb=VsNx0$w1RKl1OG=Nl|=aaW0Zj88}rGgG9LW4N#p3 zAEPr>P%t$xR8UYb0;@1IFfcPQQBW{6v9vHY0_jQMs(1BqV`OAxfB{B^I0gidfq}uC ziGhKcfx!f{5Y@49raIH)R+Ym>Jm~?FUgD z_TdZ+%uK9&p^Oa79IPUCAd0<1g^_`og*EdU0|PS)`_r zdr2k<1_o9&22WuI1_luZ1_maOIZ$7KnP5MGMcF}oW(G!P9wt`zZyy;Ln0=VRVl2$j zEUa9Kyo?OYJglsoK0g^4n7P>?QV^1vmmR`@kjzOOtnNR~GB7ZEazaGFBy$!Qt5TyV z0|T=LH&}p$S(ArV)%_I%1G5${RK$o6$}r}KGE4*@3<$}rB?x8c2(hYlGB7YO>k30f z^hF>HWRf{wlvTiD1p@=Kuoy&~SyUXtKqi?}B_Lep3`th+r)G={%;8e3?k?(#3@prX z(yY#&jtmUUzA~)*2GbZASeOH4S*1THGcYjA$wBqW%R?AQBy+g}gvVTo91bjCLFQUT z76^-lnHMU}Dv%ffN@FYx46F?7Tp%*Z+m3`4M2fIp986+OF1te0u14K$kfk-zFkhrk{i0vH&BKu51BBg2| zb{RMZv!;RA>R^$HRv`9NKM*Mlc4xgXNd2;jAd#%IAky*^h`a_)Ell8)kYx@MdF2XH zX}S``p6Lc+I~0J}JsBYKD_CT09*Dik3q&3Qr`|WLAok5aAaW%*e&fL*wlfeU(isgh zr_BpQvVc=sWgkdfsTD;2@&=IsiXho{V1F@sf+F4(`<-htS1;E-_v$Bx}DkjQj!I9vm#_GDj>$OLeVCxd;L0*=!sr$FML zlt5;Bae+vUogk3|;CR^}3t~^>29dYHxkI%V#4e8kk(%KAsK*9k^PdNieNG^9;!O~# z+X*7~gWWS590Ea7AoKabwp;+`i!b23EDg?^cftNz{t%=~{Tzt&ssoV?uRx?1IHp2Q zfY?v8K;-rnAacnv5UFMiGPw|(lD~rUpeWeCKRiI$-7*~Qa>_NthVGInchZuL)GBB_nW?TzO|3?^afimGy#yR&H7+8-n zy0$YgupVb*w_#vlJ;AsHRIr_7Om<;lV7TgAY@sw@hMJoOWx$kP@9g}VN)K&Yuajk6gTSOunoDm0-~cc@8X zf@KU0tTG2diCJkAsPfWyY|F^Ns@D!G@J;OF7#Ucto-ANsV0Cy7s*HS0K=y=91|`J= zrg{bj)~tRxMh4ckjH)t>46N%IpV=`mu&!q`Q)OgeJ<7Ng6qLspgFw9FjHN7$46NrF zg+Q@%fzcCG5V13G%2TIM)7|(-J+H=MNP>%S> zxEhpxJ~8qbGBU7!X7mteWMFM%5@%y%U~OVL1(IuKvILb6lbJ+7MeP)(U(TS=W)hph zz`(kgsl$wsfprN}IjFc=%CrHL#5OZ+17)f$Oc|iEWGmC9cu?A6DhAa3rO;<4c~BMjg(*Ugfr0f8 z)0`Ma2G$nlbWTPF)-L9BP!-Y5ya!Y^_A^U^!f`UQ5U4FMgZU&#ZZUHgD1WYH)&y1B zo0zX~GcvI5WPSlEc6Tvbfy%R^%tsPH$(?!jMg|7fi_Br5)O(4U2UOGDV?HXtz`%N+ zSp(FTdB@xhN~rIdOD{tc13MEaIdd!m*}+-i$iTqL6%)t6z{*|yfq{XQhr^MPft9yA zh>?MnZS7_f=e^4o_ZUkyaXw2t?G$nU|_A*2G#d9+MrUmi7^kG z$aklh7J!27G*b-7Cuf+pfowR-#0qLJo?~JGmG9@7NyUeb93=FLIn5{wO z$bIJEdkhS$kC;!SGcd3|X6^$;<1=P4P{=)JULniK!1|IoPK=R(^%XM{J0k<@Yi7TH z3=FJqn9WZzFtEO5)(7SJcg!pKK*b4jJE)%f%G^Jdfr0f0^HNZ?@|*bV( zVU`k5v2c{-uqmjHV(9_3Gf%P{042LqEZLy2KFy*IN@izRmQQD3U_Hxn2BhR1OYm(5 z2G;W|Wn7>TWH|(?;x4ir-Oj+kdYNTo03!qI6&7hwAYWyf52~N9u{;13o;O%7g7VZ& zmTpibbBkp+C{NsB2?AxPyDTq2MfW|H%b+B8pJkUFBLnLLmRX>z@{r{dsG#4=+6iia zTxa_LD)w%$9RM}uZ?eq;X}HD41Zqs)X6uP%WMEy+ZVNJO1-mCG-dD0mgRbNm6&^;dp!8`h25NwssHrnDu$uCL5{ubnP)%Zf2~-nU1cD;T@+K%itinL) z()v26(Pm=+DphUwgPK-$hd{-r{bNvib9e$uHjez93=FJJYe9vFb1|sd?XnOQ+^#yH z?u6S$P*=p=|1<*wtH+Gz3=FKEEe9DGSiM#WGcd4vD}a3Ja}A`+*Ai6o`bmQtzWzoc zj0~&+zPStxtbtbo7#LWC*rFL2Sc6SLX)?qBR2zlP1J&+fMW8N6cn&DbM=S^VC^80A zvq$NH0xy~g)B%Xm1c}F92Q}j3GC{Ey&j2b26Ot?#7+4b%K{+C6F{rDSd=r$QQ)YpR z;nY5my=i%%nj!rpC}J{tL4{9d0Vq*qDS`@!?ERo*ma`m`wQ}Ess*Ak2p!zRA8`Qim z=mW)0;Y(0V7tI7EZFO$0~9IEj5|Sb*20(% zYJRjbmV$DB8{;-mN!-rJ1?mWNFq(tP(oV)+P*`^{&ILtmH)9q^dk>=psAty8cm!01 z^fCSiCFp*}c|{BitP>cOKrQWwj4MH1lu3+}K*ix?#;u^P(zB4T~6iKmoIuQ4!QASi%?u>IE)kv;q~s%NXZLGBB_%XZ!@p zTq_v&gGQoOGTLutU|?Ovcpj7lS2HSsvgjJdPoTPPEhA_YkaZoSHmHPZcMhj50V=p741|tLOKE_PYSjm3IXi&~Pz$gt$h6fpEf~wg= zj5|S@FE&??vPBGpCS$mqX z6x3}x!}uBG>a&copib90#z0Ve<2>U;P-3{im-W^4m>-|jFPf*QVe z87n}!?jEBesGoSB@fWD0@qjS^%e`Cx66*%7+Z-FY|AB?v^Rme}q zr=XDd#aIYxlK*Br4(fLNVYCH#`Y+=SP*dt3<1SG1??2-MP|4H4lm@Ch8kx?6eA~oi zw}F9ywVBBalvi4q z#K6GX&GZ)(f;~)Opf+SL({@lU?_-Jw$@Md_fm+oQm`p*<;)zTbL1}&xlLM$(F_~!% z$o45r$3PvKsZ94l&G%_cyr4jy&U6t}9?oF00@VmJnXEujJc}t4)MuK_Bm-(F&SBaF zDir53g@fAW^O*L7>XrFS3qTom0aFmDcwfk*0xJC%F_nT^rHh$ng9d|^FvWmcY)hHK zR2UgpmoXWFdicwk_JR7KE12Z185vktGKGSg0IQhpfLaNwneKvG_-mNVK`C-A(`HcT zVI5O2sM250)CC&&*ubO!a?3`h98g1V6O%8sFlY-7>^ z6@3DxWLo^N?DhfRIWp-U4Z80lhP|C8_1{GO0e>oT!SZ(itdIomiK|y1`4O9g? z7=Rjmj=G?<2kl?yKQplEhA12vi47J!Nt_Z6V{@UR7yFP=L<)vlKw8D zJ7W(hQ*|&-2Q?x(8I?d)Y8T^nP#M?F*aAwPJ&beg85vl68Jj^4>SOE!<)41WHc&Tb z0^=D_=`@j%5fm_!7{l&>21OX5P@2uFMR^6QIg| zCSxxszs_R(3L1-^%@_dc^Dkmt462_OGe(2b^AbjLkla$n37}wI#^?j;F|J@-3998+ zGHQW}kkyQTKvBAe(GxVnxR%i$l%&=%-Uk)l8yJs(63iw>>3IwctlJo^L5|ZnV@F!KE`{X%3?p`Ymnm)FkS+=>>y(*D5efE3WB2KFyjVLTj2=fPf#*G z#`q94etDcx7UcI6jG3SsA1+`mlFjjyBZ!yY)^2}{UCs2~P%eWm>Bj00G01Z{$XN&`l89rcq2pW2R z$S4LH*?q*w2&x(%GunaLA5R$DK;_s|#;u^z;u&K*NZ&U`QBWHF&Ugl-;V0v6khQ-U z^+DC`e?~1(v$ugs6_ik#nfyTw?iQv*kl)*x`axxC2NO3aiaVLAKq$91jgJOCP(=pIEzJm4 z(&u`neV`cIz+?^@G1|x!1{y=z!gLl?V{K(p0abY0m_k5FcstWsP<6Y5=_V+`cQdU5 z4R7yZdIuUR+RIc3>Rs()k^$w8{Y>jX4TwWbZJ_4FVJ2gcz9UTEK~?HerkS8t>oKN% zpd5IT=^3cLJjEmfDq2r79Rv+WoMD;->f)Va`UgsGSD7+FP2_7#KS2G=>r4+p3FQWp z0H|QS$+QR*N4J!AGo}}y{P3J93uMs?rh}j~@si0A)S!OD^bVBY-!eIY>XUa&^FYP?dnOT3jr@Tr z36#J-GNpqO^e3hekjk%2pFtxE-H)uYqd1iOf8p^f`(76{z}~%-jtM&ne7Ipdx=Na|Woyp2mC> z^`pi*%o^8`>2e-ramP*-m=vmGcpwlGJ7 zf^I8w4agDOm}h}nP1~81K~?V#=3-F9?PNX-YM1R|&IEa7FY_i)TH43#2WlPcXEp(4 z`vc71LG8zb%+o<3c!-$`RI(ptz6HvnN0^_3lJ{}uH=v1v6U;Y2_2Eh87*PB16!Upd zBla}22xyAx40ADPkoi3GDNxeC%e)`dUAf0x4GQG@%q1X;9x&H|a>qmF0#N>Y#HmDKQlXMjG=+01=O}|WGM$Fz9yFWpdfE%xdbXdTUa_kA<@cG1u9hASUf?Y+s>j0 zs-!zuG(jo3lSKnG;M&E~37To_W;q7(N)L+?sBhQHas|}j=woRIwHo?a@<46%2`nc; z4Zw*kFF_^I43_PnKFl1JeW2Vwmn8=j$n#j7L4h@&0n1)ceY=pQ3sfL2Vvz&& zoENj?g1WFvSU!R(o24vlphoO6mSdpAu$*NMsHR-WvI^7^SjD0YY96d+`2iZBTf>qL z>h`Z?`3f>@9m@vLsOEYWWzcZx1{O0=S-z2_9~AGKSPoueU|`+MvJSNNVGGM8PaK?UwU zmgk_5*w3;H6cPtmK7-2EgDgg%^m&M7C8%$3m}LSes*bRTf%5cGmS3Pud5k3()E+y| z(g+&SJHZkP8t^#D;tnbjPO*4_x)!Hd4uVq18J5kUHso2B3{Wrr9Lr|VP|bOkf1u{& z1(pI(J$8|0KB%R0iDf>hpuWsf3d&ViSnhz@UsqYAKw}8kSn5IguCr8tlHz@qY)}vQ z0gETdEe}~vGW0S|jTtP>s;UnhxqHwzKAfGC~Jy4an7U0C#YdmWdxeMsV+JU$cQV$1T)K<#2dE6& z&3G3S+ItvzLH&UJjEtbHaENg)Xy)Q5qX5YIlZ*#JrQ|8b22hE1no$!}r=MY51B!{W zj7LDl_<`phon0#tWbp#RbO6AV*$gyxDPZ&^MY|2sB!d?ksDNHzGA!t zY8kv{j09B;Zy29J#tprjUY#SVl)CJ#?OrLpz`JmV;QKh z{K_Z`>hpYKTmg#I-;A3;b@Ly_zo5wa%jg4g**``rP=lnAi3yaNT9_I^rCmFdILNSW zrW#OY>tXr|@^mkg!DsMrX8HpXoWk@O zRMJmlS`8W!~6U}F0 z05$LyFtvb6gM~~pK`oy}OwFLUUCeX^6md(Kgh5UDrA&sPgtv@o1t@M;Fu8(Cn3YU9 zAXl$qS_#VPtC^mGB6ST@HmLkw%ft-oo33Lz3o3`#GaUgH9~+s1Kx4O?m`;Mm2{$uE zgM74wX+5avvXw~%)M(tsv>G(bxSh!plpl96IbMb49mOb69#OsxN@6NfpthN+8fgAa zZ31Y1Me_wHA!ASua)b5(hXag#Tr!YPQ1@bh;08ouIopA}MK%B|Q z3+h?TVk`&weGcPtQ0X(5F%mQkH=l70sC%%0ksXxB7BO~9g638k7l0<7mNJ%sJh_Z< zEvO_|$@m>)^lHY5eb6xTzYc021>XYIEeTset&YSApei%_KPb#{4uRTBxu-#W$vl2g zzRZ6Q8vHN#59-twW`Od0Q7xzrDb4|fLCH5zF<5#Z)Y&Q90BTHB{sVX7R1qF2@<9$$$ZeqL(8XRe66amFi3u7H*cI^siT%wIp8`RNkXWR)I=jmef z0TtVG80A1^;9N#2P#bd|;{s4lna>ytimU~U%RoW3kkLejfq``q<9|@YWijJhP(UwX zWB~QtmNQNOH8NH)Hi4QkYZ<#h4Z$OfpFr)9XN)UA#X|>EJ}3?+GPQ%+43n95fQrUx zOshc6&}GaFAl`E31QP}Z))mZ`Kz>}w91KcYtC*jF8qcelbwI`Q8s35b{3zV+TF{^=6!FlGJpt*(%%+o=|-$mxLpbT?~ zSsIk-FEif-jRIU@HU?57zV;2~Z=in1P3Ci;s_+)`UyyHa zGlN#Uvfg2i0QCm%GEW3`=k75-236(vnWur8whx%sgB<^m`7bCuA2A;VHMbr!*Mds< zC(N@zD@UF(PXjGmc+2br3f*_i;-G=V56r2c`1{D54k~iKFh_#gQeTQpRdxeaReE@6oQRo2T`W`J7$%UKqJTGT68eu1itl`ICJa9PDN1(fDjvj~7JTFX)b z8g*UA!VgNA>sg9G&4~>x`k)cSjVz|1cHJfx6OfNKvm}Ft8@90Q13CT#%Vki@@gz$! zDCkbH*n=97r&-)VRmK^XLXZt-Su{Y+h;uBjL5=+LED4}i^92?`P$_?r#R9Zq;SviU zsMfs9QUj_Wudwie3fOBbdq5@4b(Zs>zS9jBKT!PLWa$G{8Mj!@fJV)4vowJQ!0xbo z24#}FEOS87e~;xINbWw%dQg-90gDT$P4bW>5|l6>vCIXPdyiSFKr?htSnhy2g-==Z zK@EUsEZLx8@8>L=LAJkOnE)zFU$U@(s8=j&LBaZ(MI014Z&*%)+VgK&NP`G$xdU>` zFBVtOK;3VaFQ5s4KP>#9^6W2511QVorhz>R^?A1X}pT>I<5$=wht_b(*?a`$6&7 z!`cC=E_+$6K~+W{t2wBp*w3l~O0*MLw}VEaCbH&$^i5(71_jSzR#%V%m$0UT()?1^ z>7b;sjMWX)3|ztb64Z!X$tqgHz`(kS^*E?Kwwl!!B)EpP9yAiQmh~=ZSZf{YKTuh| zo^>~4X59};ky}_rKu!LwtWBWRjoVncKt<(tR!vaN zvx8L`RE+Lq%>#`Z?_!k$WzpTNhe2budsrWW>a@MAYd|IDKGsB#Mf+I`K*MjBSgS!p zEw@>3gUXjXtahOG-+k7rprCue8VG7vJ!6dk)lbh^TR~%8uUVZy16gla|AO54k@X>H z<=!XO?V#lSgLNUOi2cc03TmPJVLb>cIRCQNfJQZ&*b+fa_hz;*a0IZO2W9jwwpXAs zWCGhuP-dRU_63xdrm`IZO}H;$I}8$B#&!XekJhl6gW_mCn>eW4-N&{VG*Pji%@tJc z9$@b_W!3huE%w<{1yONrQZQgpCO__;8f%BdG0khV3z^`aa7h3(5h%+2(;t zlxB7n&{$pzdpD@UY-K+WD)Rc+Ye400Kf4qtcqXuOf=bMZ>}sIeVkhT5&>+_?P99L7 zayRE@P|I{5Co8B@+|Ril)T}wc$pZ?B!<%hU>Xj3mNuW0KNzS97 z=EEsYc~ESg<%|Fo0_Qj{f@+}ioE@N)b&0b9w8rN$=Sfhr>$s+XT)mM?7nJ|@aIu35|Giu@Ku+4nWe6Hp-p}<9l*g`cHG?!f<+=hI zn)}IBqX=D2q_Pe){;sDBYE0^9gUTnv5KyDh*c#O4HJJ!1U@dt-%^mBLpkB9)7RWQU zVxYRm*#T7Jxh@2y(oh#rZVw9rMM-!msNRTN26AbX1gPAORst0|aW6pao%sDA(-QhY zWoS|@XeccC1jyZKdZ6WA={lgoDq{{veWnhm3z~HlROILMftqExBA|YG1rJDNWj$zo zqRJSww6>A44&>-2#y_AIVl!hRDAlwuR)g|g7vm~W3x5vddQhCsWefmSIm;O(K+Uri zj3+_0#7f3npt5)sV>+nkvzjpl)G}JfcoWp!ThG`49`j`k1$C-6GClxx`!_MZ0@WGY z89PAh9(FJ$fztX;#_6D{co$&-4d5F;jG|F_CF#uG{A7PvTS_E;F(GoO+ zd5rNHXu{zH<8Dyv?j&O}s5gF%@d2pmcAb$KT7+XL=^qi3aRPTLad;#i(eP(P2mCRolw}C2>uZ(9w zCHgnU>_-d?tlt^mf-1EijD?^o?kA%dD6oDpZUMD$elr@~1T7?F6a#7h%NPbKAO103 z2GvUc8NETpU;|SvXaKU2=^3bB*~GL2)beX)(gT$bElial+gq6eKw~*=Ov0c%(#~`Z zR91B`eFk;3JDH3@<3n9ca-gKq&2#|NB%A1zuzdCt-ol(((Ffl3COdQkJsHU*UQ?VLcp1baWwc(}uJ&;lICU7)cm=dGZE z+BFkYFt`GWGk*5F_&{%XJ2S|NT zC@A>`{{dx{kd>gmZiF@{<3-wl+V)YMAiJV}ff8VhK4|1E_C09ABkm8#lq66|mU;vlzq0fedYA6ae)!n;64DO`K-N=b#MT!gvc*8niNA z0HvZf#%@qK*v^;=>cn&~E(Ntix*2za`lCIJOF(VtUPd=imE6ZD4Dv=lV+UwReFEb) zP->sZ_z%XtO0pt72`Wl7GKRc57bs%!>9_X|JE{w zfvSmhjK-k8(|X1ipyuQT#$eETnT?F%pg7*d*a^yOn;C6Db-{>)?i_XwJ$jN@-HFtFLW zA7Nl%vr{?Gz`$l7cb$QO&7l?)us&cTeJ6o@h207cqVZ z&6RCnyb0OdKHlwlY1q26cYMNl+1yT?*=! zl_Y?wnkGg~P>O0}JOdgw>16ByjW~BP+AfCbkbMmjP}BqEcco3BR*7;c$n^$mYM?3v z`aso==rWM=#lC>5De+oRkt~q{YCcFxf%1b?Cn#}9F9H>8GPgh#t?YkLbtJa|l;Y)C zK}`z8`prs%-w?Kmdb}69L;3x*_V!QBx#-iNkgWB?5g`hImw-Hpn1k{1*&)_eh zvC}XP(3n&t8>mAPBMh3hiJu5+vL@{YRYj>*pmHHY43t2!SAcwx_Y`DuVG$_VmrMf9 zSC_MbMsKRNfLiypcR-EG2F7WiLa~K08r1S@WwZo!pxYSJK#h=gM$jfX)(*z0pb+b1 z+yqMbU5xyo^w!O|1=JhpVdMtogMP+WpcFZQaWSa%Gm%jYl<+4p27zjl$&9+7;jSr+ zzd^0Ssf-4oe)Kd(X^>B+Gd>3O4Q4RD0+l&48O=Z)lv#|CpaNw!qb8`3n#1@6)Wev| zxEPeA<}vO8^>XJk>VTSV3m89wTBr*d8$r_+ix{VY1|$|UCV*OLOBgLdDS9d6Jy36M z8RI!nEwr3b0aTc;V4MI-<|`ThgG^b)$N*|2t!6w8YF@8l%mnFM%h&>n#&wLbpw{_% z#+#tzwSmzU)WF)vCu`3*$CWY;I*-0m>!Y7{7yJcsnB>Xe;0j z#z4>*=uXC~pbpVqMp;n5VIN}*$hrF&D?o-FU_1%xd>&+U0Hy3hjE6u4=3&M_P($Jf zV<*Vkql`YFRD6u_GpL$8&S(fK<4-U?1dV8)WYhqax2G7dflmR9~dP;nf)W9 zHYol+F>-+#C!ZNJLGAG`jMAW{!B<9q(BS7c#wJiY`_7mHs_=d=&Ib+S{$$(=imG3X zv7qL|Z^mNK%KATy6F>ude;L_8Bh&vF_kg0~KO-Z^um+|qkYFQIJ}5v|F?E23$W}Ay zfLb?em|Q`{$y%mEpf1TerbnQ}x1Q+;s8rp=)DCI{Z)Pe34f<_iQfY%0eH~0TpdjjE zdIzdAJ6NXZFfy=qvgCp)y<03BJryJr~Bfb^YZd=DDRJI7cC zO63wLGvh27+FD!lAbco2epTuF*<%yf1*f$*C`;P>2f5q!Ca65Ny8&{8eIv*{4$naqkYg$+IGuDrk>RWi z%4aTupaR@=JE&@Qdj*=Ga%TeB>#+jla?eSiu`sVIpj_b121@Tf$3P8b-_xMxmY*v~ z)?Xgf0t?s&YAOZtgDT3PY*3;MRs{JXWFn|j5gG;x)3E2D261>ks0@y10d*cC^+E9( zWdVxT=rT}9#(V?~HOFoQg;m^9P*D{>8`OVF2m{4XqC2P|kyH+ijCVf{GdSE1xV29X(pptRq{$PUUg9gMM{u0toICn%!28RbF4r#+0~px)#Z zMp+@KyAstv;}%K!pwc4Q5LET0bbw0#)C-`dcbYwD%pmYW8bx0}b71nSerE+YJ72_9BI$F!<59*Ix zVmu1+_hm*uT?Pi$D~z{6?bNG`t)LdzUB-W)e) ze#v+hlt5oGz5u1icZ@qg9fQw|zd$4BUl`Ltqrg8HBSBgJC!^$11_rh%OtzpAs;Nw> zpqhIcQ#+`UKAnjLRE^AFVljvMJ8cFiO_v??hKAaD#!sO24VxJ+fU1w}jNG6IJ;c}# zDlLyQ>Vg{3j~SPN8iwB)uYo!lzZtiK+|b692^yK2&BO>wne&;lLBl0$m;yir@dl=T z(ERNdra(~rwufmoXi9P~(-}~TImna*Y8Reh+6+p$=a?ix?aV7o7N8>S7E>cAsorPm z1`TvPVcG{uvagspK?9+mncP7w#@|fRpj6(>Yz9go-OS0LX6;nw37~fHOlBugsW6wh z8PvC2$h-_R?6H)2K4@rZCG%uZu35{x6I8rzWDWzBq+6MdKnr1ZGK+yqfxXP9Kn1`- z=C`1R&{5{Spi#1u%u1jJ##!dYpql9-vpuLQe3kh#s3&)mxfs;+zsoEEs>U8NbAcKr zPnjb@b>>TE6;KqtWi|$-p^wb9pmOgkb3dq{{KH%sTA7`}yRkG(Q;Q39GgH!Z3rdr6GL!X_ z^K%RG^HTFliuKcqQd5gc@{9HL7^q@QW?phmX-X>GTp~<`oL!`wT3ldkq??+Prk|6U zq@SLgtdAjKqGzFJst>h-2$OMpJ1?~yWDE6;($7sy&Hx>?Oi5^>x=z2ivX}_ZLgH38 zCo`#7H>or;Cq*AZQp1nnxPb*cG+u~s67KNFW}tp@eqLH;Iu*?=%Fm^uX~p@;R5T5e zxb;giQyCaA&iP6P9fJiE)yn`Ks#IK(l9HOHmjOCAtGEPoHkw`r=$NJWl+?7u(wvg` zlFEYAV!aFoRtAQ&)Wnj~A~27QfdPC}Txo$`1_K+yDraz5LybrXqSWNX zlGGGX2!hV{gL(t1GB+`~C?BGi?Si6<`$I3mlq`#6r>hG9mo(L@9r1s93S8q;_Tt$8s_Q~AFp7_ z5E1O*=o9bl8sz8d6CdX49O54o?-?BA@2g%;cGzna7BKhzM3#&o&EhnTq8o_Jro$6 zo&9|S9D`irjTDSbjG%7vb#(W1j(3gl3{fzsKynPoC7%9%@j=cY#~8*ND;OCY7#J8s z9pvE{<{Ize>E>w?ALbSi3i1Znp)MglPVvF6AqMfzj`2aR!LA_+hEOejzMk=(ej%)z8J#(JwxpAwE775*m)dA;w1WzK#*`@d_qJmL`^F=0=vLp*~Q{ zTqB&JR)O5<>lqxZU}VDJ?ivyw;2Pu^ALQyD@8lU0tWlJju9J~jkYB8mlV4ttU#zL1 zp%LWj=mJ*;QlV*Qrva7LRMXHfw6W390Bh3Jg^6n$YHI2lYJy_JKRDjkG1xoaHNx2! z5e~r$5h4D;pb(4q_4EUYgJT#Tqt3pNDAt5}ARstC)HgoZ!_zGUl&nHPiNnR&(b>Z_ zJ|M`|%{9c?Bi`T5O(6oCjD`Ws80P@9_+ZC)AJ5J&&|_4J~%Qs#ML+6HO$p7Bt8V>``{2q zXYY8h;YJ1~77PKw@y?DuKAwKg5F-sLK#2@wCoBO6hr^SiQ@oLZfqA@K_k?1xXDi|3V7#P4(bcBzur$Ky}ql-(BfgVX> z;|fZLkbD}fp{bCPuTZUkQu@KOF(`|N_y@Ua7-(7}QZmfhV9{EI@{G)!R0Txh^91ER za2erhhA1WsDh!OEsSFe(zMjF(p!^uD01GH^JiA7OxCZ$_Bn)9m1YC5Ygn?gNp3ks1}SlaE94L7}2kP!^B~ zs=7;3iwt#2bKo2!oubqdP!R%7vEWGZjZiRPa13yYclPlHrL;f=3j-}sjs<60r0NbD zXCa0LrUvmQkQjs1Ww0a!Eos2Tf`JKGKiD3ZAV*)r_yBO$gXnN^3~@vVGGHwL<9+w8i8sQTX4=#KiLqdW;bs(nSf*e7GmRYG||9HVpsr~#yk4CIJx@x zhr|jVbh0242CfGFsT=gS`2&goT4>2?_0>!mCRIw*G{6H08 zxTi~qhk^kEypHzqcXWvl1{E*ypm>gV4GQuPQZO_H1(Zf!k*0!%VWzOKIhL6MNg12h3Znh=l{1cOTus7L{2QNwsA$6!#+XPlO1<_t=3 z!68ARpz!c>(J0PK%uUr)s8s+ntReX(Fw`~FH9pwY&qbpEa@T~W0z-U!aEOa@e7u4o zLuyeGM2V|!KuDy5hJuEIQ(|#yNM%84e2Idlf`Ni2wEm3<0o5*u6cz8{>gE{g6QTfV zK4M726Av`C`#Ac>`#FLG)WsbXFGjEu71Ve%iVuklaE1Eb(=PfYcME(f%Cpccs!&;^K=1a7iS|UXE!%DS7?F?337~x_jLs|k{p9vLA9BJ zA)=fGHL@TjwFap8G=e1?4^Z}rh=;k%*U`&ANWsX=zyK1*;I>OZkf(o;XGkO{v1$~6 zPw>|%t?)}Nhn=ObsQ@c#LDehh)aQ7|;9%FFka#yoPoH>4C;uRDo&fs-+&Bi+>mmL@ zu=2*B0u&CQ%)|icx_SCJ`-Hl<#ybWC_;@-yhJZrN#nsKz&($S9AjmV!)5q1_6;f)0 zH{_s6ta-GL27J)J0XVgh66sU{`SqOD%s2{lCa)lKHt`W|z0U)n} z+zjqif$al#ae`f)K{D|^o*}M5jy}PlBnJ-afZ%vonFTHD;EgmyQ^Y(zEWi(xu!2E7 zAy<$aK)D}MxgeS>0gmpj!BOB|0>}v=@y-F}@xhJ?U}uH~KpXB5!FaHsjzR=T6{x|j zpbc#;L)+h=cCaR*z;pER@ppCvwf?}ZcUT?;XLD%jXNIlK1Ic2BkQxSDmwWm-2e~>1 zyT*rjI(x@E`-l34XjH%}X;@$wW7Hi+7H+Oipt=LrS5yEuHNm0i8WiLh66zaoVrmTb zIXIsq5)3%Y_KQ08fI3v5eiOLd(9qH-%g;$H0ksB8GxJJ}jp9ob zv@}6-ux#k*7h-5YsGNdEiC>5bsQ3bv^Ck?i<|4RnYsL^C@9N_QE`8yO!3}9+P=-Tl zNEbv2Ily@V{doqtf@%QpRT9WS zZ3t@y8biwxum({4gt&qW23HpiP{|Px3U4pPgGL6B8&DttXpVrk9YDD&I2h8Cg7rrb zsnpdJYr`7SF)}iQG!-zrZ$^foK9eScr(cMfNxU;C$;5-Q4wM6R0mKwT6OdX3LraE& z6yMgx(E=|l1%m&s@juLmKhUL7pL=&W=7Bxuq4F;LegOrZ@w*ukYd+462pl9esR2VGHeNVd*^?n!>UL zq7($Ti9EvL9tD?vE}mh=h~6(WfrL1^$A>8xRDdc!L}$j#1f09#;}vr9^U@(iXE6K(HT@48WuPQ=E~R zR-&n(0V%X#qbeHU@e&;@V<>7Gbs8E_BS38lh<;6Q>p}x;B&flGsXzhI)##h1&xT1cn|}eX^?vPNG%m(gLoqaLs)(ab9Dwa20@)%kk3Jl zPz8eucnt+=;yL;I`+&yQ;Kd9$O@Mm(pt1?nv;vnq3I-JxZceVo#>TK_IjBWu3Q_|q zzl;nRJi&#uf|0QqxY_R(n2trfF=R}~kO9`>0bdFPy%0*l5SrUTgMy)iF54&T})FHbQKIWAvZmOrd=F!z=fJdL75Zi;-ip!kf5dl_|{1fQ$qno zMnRLo*EKi@)XV~nfkE4e7U04@*aOsX&&(?^G>b0*i@@gr0*W&8NK5sWP4D?pdAhU9}UMg_$>INFdp{ovBV4{QRw5<#7p zKxv5^!^aU}MNXKbkEaW$fKxE20QHXz42<1i{pVm8UteeB4zvZR2@MV!WKV$V5zsI@ zelG+g4J+XpCWa3efD^87s85Kehi8a_5p1*q)D#GI1h-YN7Is142@XiPZ-6xV5F8l{ z8kvR%Qb2HgxW8*W)aM2U;L#`~6G5dTsCxz(gf#{=L_vKnq#ii9CV&-(;851c(^QCu zmql3RVLeKpaL<7FVE_0a*U(^BP_HT^9@ef=V2Fnl5%3uRCm(-j?_iMW8X9?;HU{&0ze87MA;3gZA~Gy zttmKPM1lqmG@!W*Jff-r8{B|(I>2Mu@OlC=uxDTZ8aG8Z9}<$_phVThE=KxdCC>nS+%`YT4 z-pA9)#R+5)C}6;O3{rU*f+nAWy|GP=7=e_-n;p*nL9XCD;GqEZ7R)JzMrhqK)C6LV zDht&N%blR)iIhe`lPRzk2Rx&I8V!&^rg+e}rKeM9h^vB;1+-=Y*ICAp!6H~Q5!8k# z&d4t+Q9x-cLS|Mx96{Y{H%~v%&H!)f>Ko8xB3gX|5(3XJg6kVd&V#p?104NaKt;C!Xod(J~%Mm(m>**H)YBTtP9RuSyMnEb(a0%-R9zM`0D056nDM~Fa z)+x;dT`dc*1VF>s@t!_De(_F`A+ClB1{H3wVG!p4BiyMQBU?i2W>ZMr3@c~B#V>eP z2V2u1AUHlC$lo2(90w&*1;|V$hzSiQNZ%ivIzZ)Hykm&JucvdoqjO+3d=+$u>1^ejUtya;LHl{HaWVuM8J!8u=B$mBOx^-mU103aBZLf z8ovfrir~Q~}wxmqaX!C2G@XK&>Wd1VjwQW&uGNeoL$$`>(%#QMKtmHWx&>x11Vh&s7%CVVfk%Eo^*nee8F?fbG$aJ>9D)av zbwKm#?(y(3BGA|}XmA-ktdAI1t^o}_mw|eMAW2X^5g`Za2!bOOlz@!kUZ^O^NX!9U z3ml)BR|2|_R{=!?a<@1}2)Y`h4V=WsyE{9>(js{D0aUkwX0=?wixj|JYf#J7&pNfFUSL2cb-kn1E)~gTUnl@+1dF@)hdTMVLi=+_LuJO!u+jqLNLWV-)Sm%m zF@HBuF9|$)25r#5Qf0iWMxIWlPJDSrVu>bn_!B0lpscKr2O{EKL1ZR~04qca4pV51 z!lrT{9cNHC8($DXie+pKB3M~q;09`(g0fMlkB@@3f`*0$JmTPEBbqo{R+=_8CKjNi z7ZMce2O0xJ^aR1#%q`T%2ikc;ngRm1j}$Z%bWK5%J{Xw{n(qxkqppZ$2I#GKXx{`D zAV|_+Ca8{uj0Tt@SLvYk5@=P7A!rZ*JiZL-Q9>dgRR6;&CiL3ZSiulf`x-OEI|aLd z%eeRu(8QD{Xbu82(dFdn?(P~K0vYV~1+DamS1^RN)xcp95bPfh4UZ64KhPLGyw!w~ z+CZ&BaJv}RPy?qqSSZ1UX@a1kWTaqW1Zy3mEHr_PaDY;!g0T@pNp2A+dV;{oA3W0v z8lWr!-RGN>n4Arp<&H0bcD;igedC?|J-|g2Sh+!kff>v@V3Q0%NgXn52bzt9jaYyu zgxph0JX3PO*Iz@X-{C$5HGca35l104e$LmdMhg|y@% z9R(98GN>>xcD2w^C@s=4GB(mtFg5}!G=Sw?EZU3FwOc~98xznDGFli4G`h z8iQPDA`g*42+CLp~g#OXCf zv)2@)*OWNDW@viNKzhxH(`$~V*BqqRoH)G}XnHL`dM$|4Yl)`U5~SCXIK77G3Cj_r z*^tO1E_7OU}K|zw4ed|8V7Jg3DT{@ z+24nC_rYqx6*F|@DR=}9(#1JpTouxC@)Kco5U4tUudxdT)nc%*Nl?27R{t9? z#DfN@L9J|9w?`v0uOtU_4Y#I(Mm3_d9v@$lTVSma54tNFyowe!4;vq^p`cV$oSCDb zprC4?qoAY!GBP9x$sDDaJS7Dy1tr@=B?S$zL7ECyAc5S}-29?SB?V1ug<9Bf3UYtQ z5WX@JJY!;FU;wMFLwy3`o&7c#OI;LO=-WW@%0G;wMhNVPb zCs&scpWyi5V8{v;==ff|kE@@8p_#D-EG>k4`nmXr$NRfkfW{S&dPN5C5kgPD5Lh{7 z2^>vo)}J3lI-6goI^jse+NIDFb5J2zU?(X>kc?EeWK(4P9IU z8k|I0Tms^Po9ddd;e%iwI47rgPtZ)4 z3B;Ag*p|S61W{ZG8e~FpC5Q`kCA9oT8rp$2@(mR%kd_|7Moy`JfajcLr8#!;UVKepaB~NBQwz0jeockWZp(2PgBj%RMW;LAUNJX+zC?Y!|GW` z6-3O~I&^3q-hOZeFK+{IaF#;5};L$0R z`p?i5q7gg_2wEcqUSn#c0bf=Ms_1NNV1s!IYM{0kXjBCpC7`uApoQMhQ6n%HvdSBp zL%=B`AS58(*B7w`2|VD6G?EKlzYBJPMlxuNolbFPRjN)RcoDBo9(YMFSX=?bwuX)a zxHfDGj_K<98h{lem1{U8yhU<4bc0XqvkO6zKf zveXcsMnRP%sMZB9zXpdTYP}0v`~lipKyZu@)CvGCXag*gD1Gn>j>JIVgws-hOG@j%4)_Y1`MFRG=>Hy4Dlgg+u{{arsZKpBxrjJcm)7x zp$n*7LRr@ZUHjqV?;h{u?;irnXs$t!K16)DV-RRf0wmEwy#=Z@KqLO~p!Fpo9-zVK z_+Upj*LY_iPbYZ!1xkJau0d{)<&>`A#bTf+gDgSQD1&a4$xKtwP}C^X)KsWe0PSxq z0Id*6(@;_^R!}Wfh{;pZQHYOs^Yn3zj|Z`QJpEkb<29{eyJQSC6{>5k6>1fb_RUx` zKvyCu7#U-!4Pn(6c-0eZ83$}R3TTcIG@uX8P~iOH;ua7ZAMEMp?&BH{8GchRKrB)R zjnjdb?crFX?&#wKu8bfPh@kmH$R36ekDyRcfoo)BWM~Mlgb;}yc~S_p3dG0~RN8@N z)FH*UA!ud{RBM7psv*rSR~Jy&LyBH-vISND@j>pOMdPNhv=kB#9+Qjr^mB0qRc^>F z36x|GnvqA{7G((TwubtGf(OGEa7)oV-W*gcLlO&Y(Aps0)dVF2gBnwy>;h?^TEGV3 zKxrd5z|$z+#n%xfBb&mC1m^&FUj^L4gO+n4{vnP&pzaD-5L(nB*^acg60&Iu$?;Gx zLsoEsCaa)ZBf%>;L1TlUA$IVXA~-=n3VuVJ3qlQ{3qrAkD#QxV=rE#6^Yrm?bq8%K zgE|`ACWh|CfR$blD~)jXo1tAMNQL4U90DG=hOQa{k1K!$;Pp0Az?h&k*5J_scRVQl zfF`pbQ+Y;Ckhwe~hTs5C@X}is&oBj0Hv_h-3$nJ#5ME>+0ee>IgoFi#T$Y8Y>=EB z9O4)hqF`L#oTrAXgWt)8Q>^ z$RG`PX|y@a)h?iYi_j&epn@E=8U_{WuxNy|CgFka#tEflvBHiwQ%s*f$a7M`wV$58F`x49MbAR z)NqJ02+jGBl;-Oj8XpW16an>1vI4>5*hCc9y)@U z11aPUASnQIi59d|0-iAoE=epYEe356PzXsZ&W3Q~OTf!)eI1>H{J|5ekSY%0ddMUo z=!^vL_9XbwBBD*|=HnRb;TGf?sGwwFkgEiZ4Uh*x#YI4fYdok)0&Zl2)~-U_?dca1 z>>3gRiX({I;liL;1q;Oo`@4mNI|jk_n?d8($A#$GiClL07N)hq(s1fp)IK!W~{8I6DT1_=kqXgAy0Wa?lP^OHeBeltn-T4Dp~Q zZBV?Aqm!!-_<#UU&=fEOXz>}y@DSH{P>J9e5*h?*^g9_kn>xC=x-b-^fCmtr{aswa zk%Bx)3eH!!w<3a;6}f@ifNnVIJyTrWW|Mf>S|aGoCAexZhn-a6=;R44xR9HOptX;| zAwi%%y>bP#et`@DfHQ^*ym*GJRRt}#0jFwEYaUzx1}ngtW02$w))wy)=@%dF7zqkg zXq3T=b5|VA49KP#c##Mj;{%r`!2zDeC~ZJcJ09!~NKP??4IM%)!+NrZA+#3`Dn=n& z073oO_!3Y91Kd>s?Op@#gmVmXg?H9`gW?T9GYAlqky=YeD2-U~@DC`-K-9s?aA-3P zREQgc8&uGI1l?5(n_Gs8`Ue<*(ygx}=wK4i27_P)V;xjzq=SIQI>yin8C(wsd-#X? zxWq%&NWiLUP?yZm4Ajzs>@Nb3Mu84=0PW;NJIukH5X6Hwzd`nkqAv#s zPR>Y8Da}bO0+np3Am>9jF~LsV2y*m|4*(~1r12{Fem2lr5L3_yvau1;hAb!tmc!61 zB~Yu}6f|KG4?aOGKG@$m-XmTCvYZ^8wIO?(5DTy&+gXt|ImO5OfI}HPOl_!VZfS02 zX>4e0Vqs=vY-nnpstpQUXtaa3+=4PwJZuj)BoRS+mqq=o%ZC z!&g3|Bvunp6%Jlt1dnylsRWRrQ*b8>Hjrk5a-sxiL!^R{8RAq4aAE2k0G@L|luD2Q zMjAW-ck97X0PBw;r84wQli*GqY?VEz9|yJsHl_hx*alhG22ERNatiUFR0UF@pb0v) zz{nib4Fi{>po$1Qe(x3<6%`rp=O3bx2-;__k*H~FYoJh5qX1?ZYAV<(Xc+2hBx-`D zT_MZbd>td5Ts1+30(2FUkr8Zx61WZv2@P`cH#Ac)0JX+J%WlDm0(r$PXzQAbs~fmb z03Eax0vf7EoMNJ(YizCwEt_w0x=)@+_fJZ>M zFL-$re74ZU0MfX2@pXl!Smf2(AwiDLpiQvOo<5+}s>uS@ z4fOPn2XzWSEp5=5J85Yqpavi)EFinBAk{ANZ~;UlJ{}Yp;GPty4gkdixEL{nlp;Q^ zE~xvwOkjQRAXm_!18Cz1=tuz22ofx%g2UP^AU-${ysaOy8r~PNj2u4B16!OA9_$Av zYS5@SXu1iU0zk6^!M^cMp>E(>zyjhT@b(_a4nXjESdelGmcR_+T}@HSM8upDIA%bd zdrN|ydneBjLnCNVfLFsq(wC!eyoYB9xFLkL0SzV$+AIa$ujJw!?g&X;peBNWF=*dB zWE>2>SJwlyNDw*(0~ro*b%_Tx;Xr!@AT8bq&|t4G=rjU<&@n0?$D4stBy7GEzJ(6F zW#*<9 zffo0J8|2<7N6UfJ5ja9X8$e(?JCM4^$h)91t#*Tquo`1u_W9s#S|EU1FE92^q-DzB0wW%@@7xDAzyWS+ z28VlwID5Fd#QTSW7ob4W0O*`0*b*VA2;`h4s37PhMa0Vc5bz3PKNry1EAb&gp{}5_ z%Rsw@K|KxVCR^~<81Qfuq$)ryH6V6)z!&vE&#CZlc|K`jAjB8Cp?fzt-)5DU<(JA6I?niLUn2`?fP;OmoN-8OUB=qjYe4e>ju zbqYOu5-beOS4dTgUq}$Bjt5P}fXgtX;t0A=+XS*t8umY z@~$Mezz9kk<8)#XHYb9drj(msmdUAV1X^|naXn)79(dKAQffs>X(p$tp$>R)9%w-; zSYJ|330NCQ!Y~ai1X{y~5)kM{8CrqVp|0c8QBbl~gNKcgCMw?;)ZnyIKn^bO@;~cZ zP1p=@fMZaICulu?JY>iWG_46q4h4xtC7C6l<5=U1GxO4OQWFab^pcCqU}*&TfE)!w z@M(LH>k}F@&IFvxrg%PV)Fwf@^sEO8k61@hboqNuVw4{z0JD zZn(cIsL>CaWCeu`G{1wVB0%K>s0|$t8eH^o3_w124cwxS2d_ynv_RSR0V~Q7=aE1% zHRM1Nq`C$=4T&^Y3!1TqmS9Mw3bdsGI&%Zm8aHBqZ^1!csfEx0YAj)!Hv?~=G>nI@ z>qAeNpf-gM_!uqF)=zQw59@jo`a>4k+HG4 zk%6(9g{g_Txv7PLIe4=MsDgmbWWYvhK?4mM1{D?tkRw91H9)(s)eI`!K--8AgG!(! zgU7^2DbbFEDo78 zaB&R|04=G2`v`sP%+t?52tEi4>yCp~|3cykY&v8>0Br^mnx4=H6hKolCI+C>M8V+! z>0mqhxo9NnB%yV&lR%wqP#4=k!Ad~`(&JW8Q&Z3YNr3y_h6+~DQD z#lvo)!Js2AV8s%sc7zQkfhU$hlUAVKB=jhZ_;>~EX$ZPP4?JoN%B7H=t{G^C5j2Sg zJx&ceJ#AnFi!^AV3R%tq>WxE2rH~tV=FlN>@S1b@vS3hmOu>L5*wY<0lMNZh4i0ev zIT^HO4n+GpM!+T@LCdlXAd@GM00FnoK__Q|TIYxsBYGdm5Yz_(Z&!xw(h6{O^@fi^ z!cN0N9HR&^8@c-h@|>X=c(x5ZPz=|sp{Wp`R#Z_EUz}P}S`c4co>`Kd0XlsEQY<0L z5NAg}e?QP!P0$t~=%g}G0}x^tIATGI7mZO5wg!v)JG+3U(!f;`q?Ka?T8w~w%^bM> z0}C&(cBkL~KxguJfL7pu4sZr-)Bu%&j=rF+bgn_Jej#WB3C{i= zU|~%L_%Rmn0XA3>06G;B<*+?)xFcj;jnMY$LShi1Alxw$Ug$v1YIb!79nBu(83K}k z4DULoq=1IKK_k3HmC(Umoq}XP@UlR}xDup6f;_GS5rH>RU?nDa)dkX`HqaRo0YUzV z<;n0vxFIRX3_3*%aXcuSfg1}b%P7HT2f$lhey-s@o=)+>Augb~KSviAXV8Xj@M>|; zQLh+B5rPCEBihi_;-GDTNb9gcTyR!KNvxnF9HEoF;9}I#7ipmvYQ+L>c7S?9Fauy= z0UG84ReiA0QRs2jP+KV~PeA1_lhU0d&aG6>uKx>09t7f@8|CaI%Eh- z+<+D{ft#ob2GHZ53_$w>piME*kZycDw1D#U^z#Q@+5oGsz*#lKF#t4P9O4QZ=!Go% z0!{HcItBatgod~x4sV4uqQJT!!xnAzs7^lZNj<$C_FK<#4R5*-Wwku4k`tpi38qW0fd62SHH+KFJ#vSFjQsbaoxKGrnORn|N2~m=P?x5E&VC7zwzqsbBzZ zu7!Y(q6Iq}%Z@(K$Sj0fdwXsSfC{eoZ}PMFDvRUPJNjfvn8 zZ_r>BX!aVsN*7dufO8?zFdAz9b908=r~&OSfHn{yjw^;F9`JAixH<*NLbn$TVk!LY zAI7rK<}G+o26glZ)cnR;ihz%`2Op>jYWhM?g!1!`cMJ{jj}Lc(REeMp(Zw~u8N6@+ zdMFZTj3(5V0o;0k?~y^>BBKV{nyiV~C<9Ht;Oqq&$_eogg58DyJ-Q6E2p2lDiM$!UR?)1q8=~TMLNl-Q2(pwA~C`$ppIw7%9~1RAVV-r0f;^p(Zh-(Dje>M$KZZ28 ztqfXz3iXCFXiaFmyJHBbGY-0aBh=3maY#JGE9T%D2WdqK(#A#b`DoyCLlNCINWBLw z>OkE!Q|ROb==@6fv;=%731(P>W_Cb(>}G8wxsq7Bp81PI0iR2wX=YjqZYD6S~9{635`u z6-5tpss)!cbafjpX=AXJ*oIuecAMarHpMRutyyu|4ZZjTmo%s^66}rBY0#Z~xO5v5 z3N`}a23uH<(|iIUXGkFE3?X5MS;jyn9t}Xp?!dbt;1&n$DldqOU`Yl(4F)+?2qKA8 ze}jdg84;!jyviB0`2cmq6V%E8CoSk2Bj`?X=t+>UfpJKFH6-R}07K|L7ib#=+$V*O zvp^O%gU)|51a(ZH%{oueqAyTs2d+uX!5t&;EG}f;)f07-k(mVp>Iw`OSJ0XX(Ck*c zf}yLfrKt;OK|Xk^3-T&2BUAV|19)>^kgJ<#gn|;}hCjpwpSnt5tAhhPQJ4D|f$lVd zcaULAZ*ZP$1nx3AIy-}#g^=c{5vV%>I-wA9TMPKO3arD`(0GF$?EoGZgr5fmJ}nix zlMi&Kf)Dr}8Ao@}jW*DIV&KSh^9%|Oi3gSQ0YRS7ff(q>3#g>>@ehZK2WuO`dcfc= ziHmChxQz{6$`2XN3~~h@`HMM_35`Q=)7;r72vRiEX&?)Oq82nZ4~mi?M;Gu)Z6n0S zJaFH@)dh5Tm@`2n0f4Gch29dL`GmwbT6hT$tWpesxft9XpC-^Yeh3czv*xE8X6 z-Kvz9m{SZ|T3Y}<-Pt!WCnrA{cK&mPPC;o!a7kivwo_?Z8feK3=ms7Q1yoT5O$A$9 z1<+Oz1<-T==y2$O{Gt+wQ6LQ!3YuVOrGP~%r~wfV>M;1ZMuZrF51I$@ApHi|ogZKx zXj>mB6ktgSG@e0hlt4$%&^8T#7u{j(J=nb#@t|`j5Dgw!ssJy-0qFymn~+X8wo`~udd<)< z0o{iK8nN?GK&`nGYGP;+9ci-a-a;X7w!pO zy#%RNV7WIq1R)5`E#N@$cXo;Q2{twYZ-<6Tz=9cmwkgCYXoDZLo8QSZ#0(PZ;Pa_r zp$e{Bz|jpG!G|3S8RY5{@9wIRo0yfTlbe~BsFRzRl>}meC(1y=nhJIbAo(Os@S0Q* zGZCCuK&&K9@MIZCr>26Pt%62wW?mBL7AV)?fcO9(#}GIFAkg+&5i$I3egggPb{mSz^E`j(cYR)A#~z^j6gJ&mPN4LYs{TVeXt)hJLKox;8oqJ#19dpS!&2^^ptG1l zLtG=`gIt|MgMvYP(B)O&Q|!UM(o|r89Hd&DS`wd}n4FOsUr>~qmRgdW5uaBMJ!BP& z9Oz8V_`GsxTK4k?Z@&WFi5d_9n$&{ak?8B{8}H;8q@k&hSe&Z>JEclNLqQ321{LbD zQ}7{s@HR5{)Dq{?qN3Ei63{L(^s^TsO(an7Bp%e?0`2btjpu;F4SKXUr~v^w1OOb+ zh;j(h;xq(pp7QVy0kwr-^v>p1_J;$knQ7bry8o2Xv?oVss0% zQqK_F-UX*4KGyIQZ@sxhlbe*Z3Uqe+o1Uta1jxomRMYZR!)Ee z9G0>?7F?X@P-LvOxv5O+=7wMyBybkYi~;v6h)v0#06N<3I87 zpbOXIONvTU;X%aCJ2F4hOA~hG+##f&{@$IH*`S=%{`0#et3?@%};a;EQE7K)V-oj5HM# zZ56;fldve(03AM~V*qOVAxbmQxkE_F33=)_9=_}YR29Y}HBG=v#{K+5Jl&udULsb4 zfqVL1VB56NS9b-u=^7arnt~U2K}rTh+YZ$1Ho?+x0yn$O;=yCspnMJ) zG&2Z=RzR?R7;F?3)I5L`h%g1<+oBIFXj2(4iUnXEJc zopc1Q;^D1R#DFRiv*wJ4>Duw0PXWGTs2zi1+aHb3c~m=ujU)(=j-* zk(a`NgBh$2+~!42Rgmf&(!>Sd8U}9Xf_e&|q4Q8*(0#w)qzLyDQWb`Jb|l0R@V#J$ z7;6npAkAB(y`v#PhOny(jUat&@J%wv3*$_TAWM{joMBsZ;iGGaz=O1+Oyi9qtx97C z@aAa96dz*cCggNRL-4>1e4rQNYH&963wDG@IC$O$av-7!+S&`~coAey`YWV;IkNEhYX^(oBcouQ~`M;#L*|jHOS8~1T@g$7yw#42%?{Q3sUp) zlT-9yS3H1LMS^N4+{f7%nZrBG@YxZ>AvxfK8~sB(T!TP!{tAYMrl4U&qzHqoXpc8E za{{eVatwBL0$*?iEia%c5z?FmEgJw0S3<`l!I=S^uE8-6IwJyddMo%~WHZnXREGF? z@Qpg5exOrmTwNe%zCvng%sS2xe7*)~S{R(gJVCb~gO;Jk2f4a?`ul;8YJuoQO0}T8 zZ3voD25-8DMHi@-Wef`!Lj%Yj7ie0Jhx!e4$|k|9sG$`(co#IZA~$9LU0mfH;-g>* zTTub&E;@tfpj=V}{VN;jT85~ekK*0od&;;6bl#rt@kVlCi?D!JsF@vDSJP6~t z%LI`m;Oi`W3=u~afU6+r1Ow!XFmSj+BL$oz<4%e0*MN zY6^7MG4f(KaNPL8`t^pOQIO!Ec+k0EU`Hs}!|FTm*d1u>0Mbf9RC!HTh zXF*9(N@iLbd^8QI^#EB&2N}149Z3Y8+ypQESAh0jk(+POLpYFbZ3OKI2L~}y@oJ3H zE&&&ipfm?c;YP^Y?BVMb!Q1RX2@Jeh1tJVdK9HTY5E1y&cW|Ky+WP?;Gck69T&@JJ z>4JPwM_Eij%UoeIDd5E+pzZsHCdMv4$k7H~(+wRf40a6(4TukMb^;wY0vfN0SnaDvxlQk2)y48PDkLh z2RcFyE{qby$gKf*5JPN6r~@52790hRV{pJ5!58%)$}CW?#2iF~z zpxwftiDS@ZjDew^t|9S$j-Yinuo4e6p-$@AOge-PZyHsgV+20lYFGpmmRtnx2!q;u zMyOpCBVtY-H-fIMLt703-QWxE0e};61gJ8Co;C$84nXSwupQ-vTsi~gppsAn@-kk#L zse#K*7gxVv(55Rx2B#pDufd*8d2?M$~9yI?48Y>5nv_jf2$XASj_9_`G7@C9D zH$j#o1-O7FMqE6><*c!ZAxJYQt%FAOBLiGvcjuz4HGrQK?C2aA>KO#OLJ}J1;JOR8 zjsa=urUA4O;_K=Qnp%LijNn^7QTNh9TF9`*1GvHhHI_iR0CS!$*fj(s0hypin;C!v zC%8EZ>g<5S5*!)eWQe|=A9QR2yrlzfJt6PP1dZ(ARRNwSgx{#{nO6eZ>;M|)fw%%( zdpZWW!Omj@Z%Kj`AK)-SzK;SlTjC791XuyQn;ATk3%cnLc61TE|A}Z1;5yG6Vm~+m zL;FEKZo!~ac$|^9%Y%nF4B`G)FhM^59<-ttbU*^+SlOUp)J1xxpusappQWNCJ~_WA z6?6lSi)#?*NJsE!AZD@vEwDyf-U2=e5OJ_KYz`WIRWf+lG5DSz=z1YTLqj)Ex7rYN zUZ{ZqXr~su0R)bBP&Wh-@1QNIaCxLdRFDon#CrY=IHQ9@(8UdO$N*B1f_B5gn^GRg zGY_DpCHY05WhkH>FB*^zIcTYhYoG>ns0-Z*I#7cV$Gd=cAL%IMCT78m0?dJyV zzyzlYP$%CBe8+=3sFx4wK|x{z9PFTJW#|q;69scnU>TW!l!3|)Q2QCXl?uiT1u5Wb zBQz8WQb0%5C}@Juw}8|%(CQDu0kxoE7J_U8O=81V6Tt3v#8W;%j!l3TW1zWltS5fK zPPAYEcc&nm4ZxWcsu5JyfnyvxiUuka;M?)xV^ZMU0$ybcI#viAt)N~sbR^S|0WuT- z-n(fIITA6%-7r4fB_tknNCv2@1fOO#gU!W&(*?N94i129V}=AN$SWq`X;awhd%qBH zMn_qw2-@TcIwlHz;VYJd{cv2k0Vx@T~Z24aUl^r!ujfe!?G`h~zQ*MX%d=pY8P&W3EJ2YU=50Ui>8 zwYuPyCP)X!GDw<3YBz$@9B2itIq0f-$c5gZlNFu)LZFQdSfqlx_n>9~tW9R@hEg4X zoeRC?0W!o48kR)QmS*6=08oK|JoXH_<_zo)(DFNYVFEcy(Z$uzKgbuNw7vqmtSufi`VUUDSk8ZkPQfTZ_MT!< z0In)Qt5}dGrNK)Dz&ktP1tRFYyZC@0e-BS5&k$D^1tSZndQf=^nZ$PVbp_ufr=ehI z1}`o^r`^VTx+o~678e*B#g`e!n^?vd6y>MDjz)r{2t%9;!3<#w!C>JAZh$~`Oeh#s zSeSs~6I9H=(mX<)}wkfva6+CzatrcLs6>v=f8s9?S!w(ue0j+9rjc|sf3nOD# zf`Md8&{{rFAc5BnBU)XEy9{CO0V@YBcy;j%igyeOf}Gj_NwDCG7}hKXcSp@Y*Vcna zb+D)aCu-2;}gs zByAW$HwR&M=3r$Pq`(JfTu?g>55Epz-HKfOYa>N~I1s2ZsssZ>MNrrg%Y1#1#N+x<1dZtRy)+#Km8N=olVf$*K zy>HO%e*SK5!LA{og=L_rHfSORwH=VUf)H;){0@?W83z`JuIxiurxx$$4~q~3H_*P5 za?r6;@g?!_QE^CoxP}xSrtkQ(*02Q73z9Gm4&m zA>avq(0W&JMpl5XR)XaTP$q_7XrK-85sDnN83Ag;VUq@zm5>=%O=Lef`#1)@^+nfBn#6cHgo(DUrI6+q{lfQ~-_ zZ@`KO0j+j~$bpu|`UivhyP$juE)?;d--qYCzRVnaN9m!Sp@(r7F8qwV_;~k-hhiQ)U_z(ohNg$TNJ2;3-xHIKl}dC1uo&`b_m9)W&a8@wKe84ln204pKD#WQ$O zrh<{NG3=r_1;m|A;DAP$t6%``$AK4wLNDHftO*2PQG^(DfE*VD_JXOAiID~T{Auu! zso-voL4|Qzni;4i1TBqFCjG%>4lD*ho3Wu&h42|QXd??AsL&M@;3<93_Cpi{K*M?Q z(4HW;0TJTq3ToU!PkRB?&yXYKj3F0Bf{%a!&so75gwBqz+YCYDR3MM}yFpKqh>uq= z0gu6e&aepz^#k9i2D{}BG%p$2iRt3@wl+ z^1;pkm4%S>3>p&#oyh^3k%o#u28E%5pk*jNA)ryQ_;>|lJre^X3nOC_Gc#igQzHut zvs7(k3pa*}kj&gv|I!jrZ%_fs2G4bRf-mR*Uq1v*$;FxJd8sK1p!x&a4vYX#dx5Ga z4}X7eB$t8Q0h%pCS;YtnAkf|0;O-0Pt_G;15erVt(CZ&qGX&m^1n-mw-E(J&(h>um z^0(>LDNHN?Xov=RVzpDS9w z6PEEoH6G})Oi+gcT-JjMefSWAp&4uj8$30SnV7)Bki-Ns0moS~U{`}n5XT7c(h#r! zXdf5KbOU(w1U}sWEziJ5+k@J`pke`Z#W`rL0%-UMQBNvBQwn6=8|eIh$mNlsv;NU9 zkF-)vQP5B=*3?x2c(NO=e8 zlY)-lL+Xq}(j2^ehxHx7zJ}BrhQu76Z3vxGfR2Vk50XOS!HWS%qr{-X0DhfZsE0Gk zJ#VJq0v5Ss0IyImMQU0gt<^Gx?6&~zDg)htjd2tjNDyUL8EEM^(ylTP7u-LG7n=d# zyS7nFD)68TsJRGA_0S>&>4+a_OB32Mge7`#84WrD6tpqcz(5;*0x0xS4diKkNXr~~ zMW!Y!tw1JdK$j`_cshIfxr5f!fNyIzj0ZJRUED!ioDm0ln;9{HOBAq6LqJsqq*DYP zO$F`n1C6s{-S}q<+R&Gng|f*HEC$}>2RW+>)Y)~`fQ>(ck3WU>1E7tbc*wF$&~^my z5>?o3PM-ddLI5)S3J!Bn<^aW?0r*5IP;vpc76@+O1Qo`hsXWj)3}}73E=o%SI^+ZuP|1URTnIL{3GO(A zJ4PCS8l<2B7;u*g&DXH;b@0?3$lK5=9%=CtXaN&waiW3|=)yzL5@4kA7gQPthky>y z1Wn3mD}dOb!LSJM`7S|@(5X030taOYa45sCgbxaF_H{*VmxHW;=1p*^7vkfDsJB2} z7Bf)G925*jD4lm_M9&1ZCkx-Q1a4@8$J{|jr$bMo1x2_qXigKffe2~yPJm;OFZ9-B z3-G8>P`DGgGKH7#(0xsiLJYM23p}vq=;DGnz!BV+g`VOFiTL0U#}H3vSf?=9)yLHt zwDA#A=s|NUX!9C4ZJ0p!J%cYTHZfs{uPDhcj!(`>O)QEpPAp4J0qulJ%}Y$mNmYQz zW#*L>$LFV|AqODnAW`t8Cg7w5YsJF*xu|VCP%|A;r=t(kfjW=i<5mn2dy_$j%Ywqp z$;Z_N)Y^h9GILZgG=U{SKVMI9&8T3`0BYI6ZwLYvphoa3f^>>AGSf;R=M_4-fSPNb zpcQo>c}+Vz4T!9!ng--@w4Yn6a%LfBesXz0V* zMBosCh9JDj>J;jxU@y`Cf0ggegpd~Bu!QqYp@rDZUrW&LIK{-AY)TM@c z8YRAw7ssK+H`p#;Pe0H>mDq<7K~fRw8L>c7j4ytd#=YeT} z4q{ExiO=R)DTht^C3M@ zQw2i{STzXqEp+n>=)`zU1?Z4DnjFfdV2IY3dkARSn+nG;AWmTbk11icD`BV8fChTO z#S1tJKvh*h5Mr+)q>zTRP@p*&R!D;dp{-olXd%)-A-w4X?nr>MJow~ZP)7)~rV>(9 zImd%iA4&=ZHT6MB6m;l~vp?uANI(COc<=}Rhl_A;ma!vIMgj2hYQS1`~#UPRZL*J0ALk4 z^q4Jp-ZB7>Oc*K{nwvwmRJb^XAf1K_8U})vVMr}JaA5^*AA>SKY=976yn|X>pgCdm zg-p=#Bk-~#PyqwF9unRT2M_0f#$V#Wv(>)A3Yc@<82J<&Nl5Er89<%+lFEWqs7grK z8Ja-KJ!nA)DUmR?DS@wI(!{d18ayZkJ`CT*)!EDh`NADnT|-kB*!ESp|G|j}(T)Ud zlmo{ks5uI`nj8Bf0nm^&ynGKwYWr-q30mO;N@Um`Qa1Di zHc+YuV$eYIDF?RC|jX<1agLniGra4 zWa11QT;K=?ml`;af(G}c9DRJk9DO`p;=vgdv@jd(>_sdJz%B~ZPlUo+W}bc_ zust7Ow}7|pf?1$RQ?OEK_@T(amQ{dNqR7C`+rpHAEpWkn2DVxVQ^pWaAi!3eV9|v;7z}ZTgCXvKFvJ}ahPZ>m5O-J@;tmW$+@WEFJ2Z@N zhlUaE&@jRs8b-K7!w7e17~u{LBix~3ggZ2haEFF5?$9uXga)EJ1v)Dc(MN@>4G9VX zwJL*9hp9j{E2QfSp700tfIutnAO}Ohszgv0G=o+?rVPGLt}Y=ypxcA}+&tamL03;H zDCH)lrj+Cq>!%hM#6y;B>18NEd-BepjnrnK4N=ZMp)RiRkS)ECrh0O=M`n6Pcw$Lv zk#AyAHn=1Pb?_ne0LtQ62IP@`NMjUMXu^-11b25Ka!8YMAW_illOcHa3A*Nz!QC%Z z!C3)3AFiOA3pyn!IWZ@vSV1@47=r!N6?BVBQf$-nN-ZrFbkovG^O8X~Yv~rJg6U!f z-L#a%l0;;FaY<2Ta)~ai(W{%3S(28Snv+rtE%!qGfZ>>FaRG525E3Xhfq90aRRyBL!qVy zT3CUrP3Vz6@SRwwvQX_XS;*015R=hXIosL7w#Ohfqrj6NM)3xq*#@Mf1f7Hr0Ua+A z54sr$G^^npV1(_=F_0k2=rHK!4A9^ixU56kR;P(b;^5lKH`FJ@(*tyFFQ~Q#RfwQe zAM6_sx)%j>=>nu4g>@FdfdQHtK%D`CZb$KG z32eyS^hlF^;8W~Doj&M+_Mj$DJo?-OVjVeR#UNx|B%~dQ?eINld)gRs%eFCWlPPEe zYrF!i_X|ympk*6A(3UhLsUbX*s^|5Mul9>08Si`wy`C&bb=ZMo+LzX z8e7Kuh5EuqiZHuEpusr>Lx$jxpit+KcqdnPPd{j$1s%>5?1&ML5WApDeV|t|L8q)C zolDS3^WY{DxDR6h+9?JpNx>nmU~FV=23sj&;RKo4jD=>tnZHCa}R;$P6vG-w&;Spzel_5TNu6 z!Ho^bk;_K$CJGj?8W36^p_I|k4i`Amp*0KAR#VWbMCf{ENHL9ACt?a3^@2tNlCVh%ung)+Pyznn5o45d!yu(QY;p;lSX>}Av_XXdY)TC@0)W_M13Jet zC^R4hHe!re`r_#q0_);~#^XRm0IVW{4)TD9wLyJ9a6ShWCa_j3O10(Z>k0KSJmDdY zRU5)=c2NKyUk|d!*VWfGAl@w=S`L8odi%q;+RG!Qr; zgGT;QNA_X+1R?WP!LEKT@QMvK7>B6eAT~l%A97;~H2DYaKw~C9&{?zK)rIho1`V!3 z4jhOF1tVmQo`NB4Zy4C2&`nKY@O!g-9i4+if)tcg4U8(Ra1o%Zk|AR^pt2G&N?~jP z8*7JDghsFw1n~^^K_VmQAQ5<&5)w4f{p?7Afz+}AXH-Z-4s<~QG#bD@0grjdy9Rke zr^8)CJmNuji6OU>j3IT9Z)ik3XpK84IY63a25xSk<cyrBYU3adB~VL(CO{b3f>~Qa9%iANYs}Xo-aZxTOfnXP`MD z_>7%_5hP#`WkX(xPhv@GUUDU(Pyp5P;6-KN_6a;CB1WFTr;r-L+T{pwcqlT2`hm{! zbajb`Hvr%R(C}1?R6ZCZl@GAQ1)8$}pKhsO20EMzzC^$R%OVWW0h!?KTHvFQ4Gb8- z2?e@1#{;~K8x#~s4R!wjXMY!0NSZK#);GAukidh|palewCbJO(;yNvVaDNo}7-?{M z2|DZtwn7f%c%-u+!P&##88naY3fdA1_ZQ@x1?XfYcrgS-1hj7qoFKvJ9&9{DIf-2H zBhQ6`s}$HMC1PVOICP)|0%WHixGV<^OhQlW1eK1EJc5W_&`2bIFmqA$3ck+p~=oj6mbd#*hvUXrDMZ8^nWW8NtUjfwo0e zz*@v1`2neUDah?&L!Htbcq7?JrzjP)92mJd0xlgPi)|oB#(@@AK&uOo9B6MLY&*Fj zWHkw_KMJZKz(>|OIr@PYDmufa{R|b1Odu!Ug53zZb`4ad8o`g00v#?4wFG^L9dvF0 zxK4tUao~r@gBz$%aocF;?pW`9jNJw{8!3efA4jfSK zLH?lu2FOd~z>Dvp})(uSZxD#)A&cz1XS{ZW)fi6z$!p{rQk9SGAtPnSse}u19%vE z`uMoIJNm?f8)T3Ts|p6-l^vkQ2+~SJ7#EsN!NnVBiqjZmzq6OWryt}x==cZ(2a-7< zEfGi~&C$~beDXPXF%fwEJ*aF3Ei`kCh>uq=Gc`4a4?!T34rB|j0b~a+Xq_OafOm5Q zUF!|4s1PR$fMyI849#Kv8_=m%;Lrs1f?zAQAm9CU4Ah>J7$JY)QaXo0dM zcoiO~UU_ z3!36j0u361lQL+{k!J|#RCdVlF{J+)51KLxcMNiYtcM8kbn^6p9A|-89SC0E30~9* zU4suQ+CBZ8A-NJZ-~(OF9O?$%$$)fCumQaD3LR$z)!&fQ{J{Ab+_NL|(4?%uQZRQS3Nj=&8iSk3 z@y-E|zNLnt5omA}va%4e2M5Flha($-rzw zLx;s2p-l&{RiKGr=oVd2*#{mrKwew`8Gted7d zat_Iau+kbn-~^V07BbMj56;yEMzG}tV0VMcb?{IMqyho$&I2_OK#N~tN6|qygTany zLzIGkA+GMOLGdo0VV*9o@lKKPQLaJ$kTr7P4POdIM&_WA7D)cC0IlQl^b3LU7!ao~ zLx(iM%e2sA1y%!^L5_ShgDt6toe2*~+2H;TC}2Uy-g!F12a-?*D4?Sv;On9ggCZu7 zPha@+-3z;EZ}O#F~k+LXv*C$6m<5U z3urV9w7wJdm_f{f2y%cdN-I?(8MF>U2ecqUr=TcRCl7o(I9N~t#I|NY*_{KaT|m829&ryaMTOfIBI;8zCl;C@^6FXQ$8rjXa&Q#2nC~O${)ut)P*oscWdI zpr)X!kq0Wxz!rj6+`z&OoKhhN?ZHwpq|D0GR6{@G9oz6G_)r?ix(Q=YsSj>?C>Vhj z@IunFt5c{uSTG)XsVum!2pU5Iw-C|mM^GQ$1aV9+I6HubSPc7f$A+-7=y=9K<#4aJfnevCA8TR5fbm@ z?-+!1ycDE~Xb_J&6bSY-XoAELwzkj66x?!xoKy;RJoJuFXkI~@yFe*3aGrV#9U_6W zg1|+Wlas5TE9fW{Uq@%7;E*8Dwh@g)&1i#I9R(0=2&Ijnv@w)6fzqb2&_IGE0{CiV zl+;%krphZ?7`yj4IYG)Y5Bd=0~6vf~Q z4=wdVMl`@9ZlDBZ0FHEH(AoP)dO#@_R1Ud^f>IK!^8mKZ*V8ZDGsx8iv``UzXelHi zh4?suL=56xjnNuBkZBxH;SC*!4F*kPfipN{06925z|q+od{zhKm}>ZBiUMeu6W(ns zMjSf{oj0+BM=E4=2@)uuY4Gup7M3ih}WX#G0aFW_|Q767WA6bwPt5aiTI z3s5^mK?Axy1H6nC7T=KV8Q{_z>c{wiAb-e(?h5A6#rL2dIliU$d9Whe)z1a8{4U5D zI-Fx*U;sMi6_f_R7d*iBCxfOgJ&l6FyBFb&D|m^9G2d-uinIa{whjWt)yN~{(C~t` z=kRSI3Q>UdU;`Y3LOj8>MhJM*wsUB3h`(<Cr?uWQALIOPP1e!7m25mR-1fAmn?Qg@`43L%@xMu;f4&0>x)rp1{kY*0Jpny68 zTuQ*MZ2&dM;b9D})8j!+HIN~oE;Dq%1{we`8K^->BTG0=x&_U##$(^(3F-wyiYLgC zT(H4baPb5Y0*$tUgBn&Y!s{YflPW$09CWaDIyj0!^%W?9Apr=}3hp=fy9Gm?4ps?C z3}7Z`pa9-#@(10H7VI4ly}Sx3{K2Ohg3i90{X%?@hL%h~Z5~JyHNeqDK|{kB-X8=i!Z3m0GB~vLFiz=qbs5j0#1Wy$q_UT0oo}9?nMOz zxdyogf;K9Ec8!9H@c4MJM7)BHje?;W=;L_v8F)NBPuG<0?Xwe6t* zYLcNe#!#AJpf*v60r==X@ahrRlrgNFft^f+T;YX4H-W)RKtyX6$E7Hsa@Wix9$JGS z@fbkC4=x5k$rVy7qI4aNK*#xmSB!&h_Y4M&e8S>1Ucu1P($c`thXHgjV0e&YK!9ry z@;*9H@PYc6h)x8!MuNo?I3_@)UXY_t1ju@5Ac8L&MGZu7wGHZ{7Fao3iGKH+W z17&p3jB}Wy52S?+3pF=4$Qm8c1==pYXvc!Wr*0s{OFa0<4-fcpI^Y38@W4LG<||Nd z1a+;55BM-!@DW#_`AG#saG3?U^cvh60uRVTEdi+jT`~dPHRkUZ4_e{k66yn5?HS@2 z6cX|nb5faa8m@HGr^q?$c+Htjt7JZ?{t7e*Vz%$Y66v`uwFYnq>;)WaN7ue z6hFvo;3hm|urmO3b6>EJt7`zLo8ask9PH`mu2BJ>PX^lrE#E-LU%I&ZI)b{)=sxv` z0-ebN9c6Wgqib~K1D6sM1@BlX%u!RNah97MA=zTTr78bT|)+r@+JF2-i9LIQk;(4uT8{8ybNN3`5ZRU}%W}E3|^# zK__^d#v3RYf%kYrEd={C!qpK`4#BHQ&{fr;KH$Mc1=y@8D5{9*($Yow@+cuR`x?2X$$%-7WxH0%iu8hk*=MzZtn z$HOlwf^NwIbuU1L54d#??zN!I?1H5sO+?h_2T8z(K;v;l2c7_dxDx7poMV5m^-&Pj z;6eb>HuD4*j;QsC0sM9!csU;6=;!GS+PLf&5+CFWIs*%BVX*>eP&*|xO`*7?s5H4m zp&H~T&}3e`xq^`)mWfTvcu+|LU3Gvc2OwQlgLrr~ia5*}d_Hu%BY1Bs_%LT^F9mt~ znWL9~kOKH%5ztx9nwkps3Wf?+3h@1NkZ^*XVhITiP)7-zfuZKX)F7>`h6ouFwPFyu zWDuIneI4N!YnXzHJSjQDC4q8?SzL*nSe|o^uH#iG}CY?LF5o4Pu;Gzl@C|m*Tmf1o=IIAIudk#iF*()8KRiCbKioAa9&`afJm^jX zP|b?H;sK4~8-qsip+}LSrb=f6=%9K)kZU}i3LDXq23<(*=?cBR7!>%R=|<<^_}~!G zVrXzF3#(!b4agY11eKGpEm7dI9#&MLj@+Sp7Bc7yI$H}eehlgnfi?(X+ad~G4G1bE zK!pp~&4{=H?LvZ8zlbbkXow?gL1$eI7$BM65wrmxbZZRQR9Hxup#_9Ng`1n3n-l0t z32FaTv}9=nxd%y-Ke3dfG!1X z&>-?S_!cD3DDZj8kQ4#!r-Bw>0bGe|*%xogSL z4Ac?>B>-?c43Pyvl^eFTjL;Q)urLPg_70B#ZTEJ=zTF$mpRn7W93vErEEzyYtte<{ zfN!tT(lh`~PX~hrf%5l-U~7a3hH2m!8=%x%xnlczf< z1|fHom>3%&of`x`jv3T#@_-#&4Znj5F^C4)%VH643^|enK8K5#WCJfH1P?fvA$kkY z3+_?oNnHbiLF0y&Ca`5`Zmvjmp9yGj9W;R;+P5B_ZlHrAKufqiJpEkbK^2r^s80yE znFsFA$H#+)48XM|VqOC4ew7d-#7%z|;L-v#6G2>Qp$081K;;hT1}(@6Z_wGS;1djj zJ>BD>s~$iDvGL%!Eo4FPA~DF^7C3D}29bQ6V1r7~-8u>yFad}HS3iXs1(=YJfu~cb zTfD0uD9M7#ENIso-n;X4b@2@Kg*HpjBsEMyy3i6j+Q=8^`gc&C1J{P|W{szxKls)k zu)D#{cw}5o1g&Z_s0G?;T7KT3l;ZQ%J z2cQXTMHH;AHG~u_;Bg!?@H%|ZiNpc%!O#^@;4&;UK*P{X2eirxvTF}MK|?`9A=D|cI2CjbDfm_jknQkIaGIV(y*B81si;Q}Tf%A+aG1c0DQF)MQi8$L zDd?8R3eYkP@Twp1bUz~N!dJ6_ia4i`c(him2}67c?8bQTZLmh52_;BV3^dq@-d+JW zr?3^~(B>4ZFo%q(hJYI@!SE&Ypcz~6*oFZ^g>!yTerZW&UMgfTO971^UjptjgU)CM z1uN3sA<(P#0UHP#6#}&f+b$)wO%E``8jT&jhVrjRjF7? z643I0Y&R;yT8prDE_y~Z1Z^IJ#2Jc|324N{*aX^V0F?`%-I!6y6 zCtQs1go`nr^kNJR7nA}9nvW4JQ*bvG(ozfv2?94B{pplr8QlzN>p`euktmgt=)efICM42yy zxCgT(ZUSkE!_Gp1Rt3-#Awg|n@Ejg=^#Yg;TDAZ#uD~5YHy_Uk@ZJZA1qcs=&QQcw zhJ%k$Fo}niZ-@aq*d>FYhP{b`p(SJ@9CC(ryr)~dr(Zm1FO#N1SwMbKi6i*5YR@#! zJg^{A(e4`>;u?YI7JIwKgGE3$U4#Y&gYIK@gKfV6ul3PXfK;`f&fbuy1f5wD;_vGT zx{VJ~rhvwwjbN)WK{qvm>R5j_aC0jjbf&opLuo}wenDt4VxbT$YWzar3EUL68Vj*K z2E3mLbnT~tQc7k%XmxsKUJ2xM81#!!z+n!KX{6(SA=QIpa0qAvAJQSk;AJKtG4!qi zIMV!mTtMe)L5^mDco8ff;pzyB7f1sD=Y=rPyR4wq9U|7j+ciyaZPzr8hwu6E3o(Y@ zQv$km5+TaT21zzNwb-UMK<0N5J(wU@ zXK1noCu7Lq21Gw1*kPdsTAl*(DRNT>d|V%RLKd`D0dyZ0XnGvBHwSdIHaJW`O;*TC zlu$R&K|Ig_Q&8Zd+Xik08)J!Na4Xm}-WVx2I{U{5`G8?)2p%wyaE8^L&}JzjWRN4n7&;>Y5rd3ggD&ZTY|(*>!sakR zy(QTAj(dQoe|)eD@*s~%8a#Yp-DnHaMuySTBWSP=Tk!?1rj0-J@T#)*l;@} z>Jj}^P%8$!dKi>%V52pl=~d9iddS)27NBWG$S@AlsT8h3LEsT4(AXMeV~hgihCh@x z9Vmgt!$u=b6iiJR;)6q6Kxq~}%LYl+hTtJ3#Kn;CBR>$y92|D2$qqhy=JK z)d08xgG~5<@AQR45G-R^-9< zo0&ptYEz_T|EU$J$pxT8@8UBO^HOqBi=b!jgSG^uRwSpQ$bt4^`GXFj1I;;xfKCoZ zx=#nRmj|>03}uWO5@z7q-v>N?2(D?d-ckgbJODW!tO7Pd09y428d8UDSb(-;EDQ`7 z;I)bosPP2W1i4xYwt~bMbodBpKMJS~4=J@F%|Voc93m7S58CSM8RhEl77xiX@$m{4 zp!L-1ZbZF1AG=cA|7%&i=hGBa_0c}0VLomG{is12%1CCq!8_5aJ~UIBoz!z zV7U|Croq>|0Ht-%+#G1^27JbSJUFDlX9Jw21-jlb1hktK9IKF02zYyg{NA`CNxk?z!%jR8Gy@G7vzIv5cwTC z776wz_;e`Hk{Z}}Iku~rL5C_Ef(-|a^`aFv0gj+iJn+aPsH5N(8Wj~8?;ix&j<2Di zk*H~FYX~|yQX>h(f-MJuNEj%nsVRUZ3_ubF3RX~e_&P>9fp>d?>ITqWdsvoHK-y~$ z$>)%$f^5cBFoqRxpg~`p$LoQ%g@f-2j}HomhaZB{f%`kv(LUMC;3<(W#15m=$1h5w+U7&K&#n8J() zmjD{zY-(T(pG^X%YS3AH;X(01uEC&Xv#{0x=-zEhs5cVMG;nVO8n_4dO(8x9r%Lb{G4N%) zrm&Tg(7XgrMW9j$Qmlc>WJu%22xI#tVlojr#0cpP8##e`c#w2}C@ewi16)BD)fhrs z*+`p_VT~}*EEuS|Mp6Nj0<|r{QlJQfwxJOdub|x|;64Pna{#Sc!Syp{OV%1(xnk*P zKurZ-28YyvfX=G=gnI^nyVJq`&fc!zqcFghdAqs>`1^q}1SG|P$}R(>fihzw_$)o> zm>}@kJBDTkpf%?yZjL^|uHb1*)LBf_L667mc zOcV^E134gPAO>wG7;B7*X{X_Bb8o8kLR-j`kkc2^k3b~n@ z&}c_H&JvbEK#L{883Ym=&~gaUJT-!qrQj6-kS-_mECNXM!YWVDAR2f-M+ErR8^|c0 zldGSzhp%IhH{4fH!=cxFU|GiiZtua{XGq}+tx!!N6{;zGp4?Eu&z7 za}i^};DqVoi`cyk-=Tz3&>&yd0h%}m?Q=ve^^8#u=mK@MpxtTncq0Wx0L4`eX6A0`?NCU_aw9yn)4x;p+6$~nzjEzC3Sixcw)K0O0wNs3Yq3H)aDgj%t z4@*7Z?k^}oLV602n$*?V8MHD4ToFKr_&}S0{DVLn>mfG`f%PFd6;b;@daa;?w!uX= ztd;?12+&fzAXjHkP$dd(3BuOWf~|rE9PHREc&ZBybp~x|f%Bcg<*~DyJEX4%X;_0C z14)xtYC!wqh}pJy@B(ukh)0lxJ^lQHbQE$yOXeX)DS$de(1r7`OW8mb0{oaV zaH4}0X~xi1OqfL)eBc*cDFuPf9ze;n2B6j%C?kM-!2uybE}m{~@u12SW+!Nq1-SPK zP2Wfb1GG>883AoZf|kb^LUtlUy$+fw3IbiG3(m5jQE(@pco$E1P?y7$p~5#cH@~Pd zC^bDZKTiRf1K(!m8WiLh66zaoVrhzgA*Spm4cQHBVTq1ovYOXt<20xECG$F z!VVNu(9#4Kt(bGWnwp@Y7emN#F9x71Yz$yM5?Eypwh+-Nfe9nJCZIMrw7f!{O#!!Y zK%F7zPJS#MJGc^PSVE!}((neI^b0O=&=&K950nS>LLmtXlruo%QJ_Q*DM`RJKe!Br z6l`YkW(r2|tsn?lNI7E!UIz(14Hz^kt^hw54q^dHw+`HQ1~2>qU%UvK+CnrqKz4#g z0U-v%3ouaFgJ%>#%ff^GLqSJ+7#TAlud;;JqR??+*N6ZO&=`QPV}vI3+E;MGM^v2P z<;SpPxt@NYWw{W?LW+Y>A4AZF3dk8;peh=cu)%9QA-gtxoKeqXGlY#Ic!Yxv=y&sU z_jHL5a`o{9jpc#^7gSn;4^xc*k?`sURCR&(gMeC-hLEXr$e0(X@KgXLLeTzjXa$KV z=0UUeW>|*app%`@QL4@K&Hz;Q{vz=FXG`2fg~Q($CwQP8 zR)T`u4_k+Vx|;xPX$N+*jGzrDP;U>~1cG+=puG5a=w@Zd2nBG;fh}!-G}%B)#K61k zK^yOV9YaDu+vj2D3xlR^U@P$pl0hfoxTltYDA292@S*`!vBB=+0T)}aemJxX4h{fl z4g;-g(SfqT=?Q754srk)BB>!sK}YeR9V{G2ytsM#xPqq96qE`Qi%K#CIA3EP763Z2662%*_^?SB=&CGGX#+0)K&=O3H>{Ztc{3@b;RYV!f;5Og zD?9u_!wF8FA(k+cz_SSukNbtdR~NymNN8^XwD}-77~Jy$=LZ~pYS4Bf1{c?WAXjHc z(B(AX6Y#(X;vfy!z&(X!Ith}K!I1;*&O^uHpu*6>N>DgJ4s3wLjs8!X5w)qe(Q#!EHR#i zWi{CPdPq(Wa?>?3Ff;}4p2nzt;azhR3kF}$U}w;E7obhTCMK|Rt{}%?BA@$|Se%!b z3pt)p2lMEsf)vn-Dg_M%5Cb$K1KNH9Dtck(+$b1Yn3$NEo0u4w8=D(gnwlD#8JdDl zg@vRHP}YDg3xyBhxqus1;C{bBg>hOMD2ans;DRbV(EJ1Ju5Wl=f{wJI@9F`Mng_dv zXyoaj?&?7g7)S%b$O*nj9@L0|>=;L@&2a7kf^7i;7h0gJM6fhLL6d}#CMd-7;QR_b zQvlwmLf+RIjJ)Cj)IEh}bWo_lmO#SR`+&zMAsZbawY`gLK!}F|q*B8?$`v})?ufZY zPNSd#JgW*HM~4=-DASwqt|6d<0?RZNl*^!wf)}CSV257?18V7k0|nW)j$xph6cP%M zW`YrPlo{69g@_u0D{}=S(CPNjZ84w$icnwhlq$GCf$KPZa6=b<0TpPGC1lM7ctiww z7cAsxEpSUr!BEf8+|F4 zH=5l>5YHPM6KA&(n%zcVmm7n;k2CTRE;mNgZ4A+EO2}?Q9RnSOG&7T;c(lkjc6EfN z9uqu~4{`v)2(;)oc6EXpVM?SC#VEcoc6Em8H$&3T09qGps$ggdK7bf9YXfPzL)hRM z98l%p;~5g-&-Zr>vBN(B#lgB!dW*tVnwr4B&04MbK?LA(^?UPPIsXfzC5kin)SKy6x(cfs|qGiV7Zq}Sl;=O5$?I(aibUcp4q(!{{b z)Xc=x!o<+X#LUzrRoB?a#0S*J0`H|nITZ>f0xpEXyBHz2!$Zq9bboxAKSPgX4AbbD`bl4zx?UiRqYA$&F6^H>E)dBa)5F?Ec zPr@2h;1LPLw45pEfC})se`t_Fj(>#C-^RmdrhGw1|CqrRvVvRjpus=X6ZbJDo**qf zXcY?D<_~VhA%>xYL%@UMD3vdGCJ6g7zM|CPlKi4n@CnZG6(#w_@u2lgnRz8Ssb#4- z8c5R6BUC{5*2kx$re)@(rhrlzI01lbaByG8)ez+fTkwnyXs8a>35IP)PppJ%Ms$?I z0{lSpy{@2*x1b?e)Kxhexuq4F3Sa|V^GZ^SoQpC`GLsW?z~ayVK{y23>4G%Mz(*FC zz&5PG>Rs?%sfhCtL8CiiuFjy75y9CXdHbS9L4{vxId~BnyqSa4BZGFl;2nCJ3$u#I)OqKdS{@gA9SUahOVK3ks)kw z1UerE30CMJC-iDUkY-RQ;~)5jt{Md?#Ivdt8vG!CgVw1)t}lR$w>SoefZF!Z5i%4p zM6QPRSP_L4Xj>n)W#ix;iDkSg1E|Rl8rcFLZ4OR^ppp}1h#fvB2^yk-#3tzC5O~4^ zH!#CookM~g4M9sdifSER8?&>$Z4A`_%ld4`}J6#?<_3dRN& z;EEvF#~H020QI0ShDadk6SONIT*5))4QZqSJo*PZqTL8I#11Q$z(Ea}*K!4&p9#s9 zpd<19gIrOL5`vr^2wty+upCl)g9kB8oRwKnU`w-;gFVtPX?Jy=I`G1us7ZtptUQD#8j5@QPMY!2xZugGQggO?ETLC4?9k zw1V0r=AeTCq4@+H9MF!Ov%g=Ms~>0s5i|+FYgo{cdyrllXbA)81OjJR`vtxh-__F0 z1!)isaReZwwue_m(DScyQWJ|yP>OJdr2PCGg?Oj@{2XWrA74;Xl#-d27GDydp#Ta8 z$RsxMq9;g@fflDiYagTn6Ep^hm|R1;Mh~1xQKAF1a2q2!Ae-eNeJ8Zd+33T_9zh|{ z9uo2mvY>JRJcHxt3-64>tOXUw&@_ukIp#Q4<%7!_Gx(8GpvxA69YITqKq0J+-gE_%zAsl>%Mv$YQvj=$d3#g>QvTO!ghil}emP5;BXo7;JOhXgY#pTeh z984PHv>Qm-gHi#3mkk(#&iDasQbxX;NFfn4X_N$8HsxvL44Uvp8geiNAO8nQ9G-q5 zu*>4X1sR?pZAcnNoi{#dW3=c2$z|BeUpm3OiL4_gYsvhuM40!wj7Vn^f6*S|8 zC@sKu#6c#|LHDzR?&FFF^#p=J2@7(5mPUnZML}wENotB`N=_=M8w2Uj1DrY$>;F)yLuY?KzX%s2P|E|HoRQAu0Np+8=L|kFEfq9d ziDQ`ZmF3!k#6V&O021rN{XlTjR7djPU zW^7@?P>=%3fXJsCfX~bat^7GEiJwzLVIKb059^>>}(4suh zcqi!EqX_WGX9cW9jS+LwZUDvx zTIg9J5SJqLuMo#iLCaQ@8Vg)cTf{@R!$RhwKxX?pPr(5dRLaJXlPvxlooyr&;{bO|GofSclw z`)6QD05XRGsvx12CMd%Pfu=A(Vo0lWL;U@H0wUv`97A0cER77!z_)wAE-OYo+7;Ge z@$`#_cUUxZjSb8-!F`qh&?U;CLn&c*ftn!g_yW~SMW8E8VHcV@C+6gU`{ORIkajfu zgiUkk@)uAfLB?0&13->OULOdbtpMeJ=<;P31!Hs6iLiJ_l&P?s%=A3?WnCDvVG8l_ zi6tdPnMtK3sqyg|8i^p~sVNXzQ&ZC#?8y+w$%)`$JLx85v;Oi6=kf$lY z#W&*06SNyoP_8;r039-xrl|?u$!mdpAUcGD+2R4M{lIp%5xDnf3flYw$rgSg;CKrG zRh<@~g;cK2@vh*5$X!D`{9WP^i$5Scf?y>rdV+&YxEX`*=md``f{p=3x!D9VD+5`e zUdgGQd69o>8! z-Q)fI;gPjA8<TPwhu+@8+ih?Y34_J%by4dP)t=PVc^LgIr%yg^YM>w>3fVw3hGQ`8*PeG}mvLquvPYK#(ffR>EuvJm;q5`sI9+BHXD;=P#1K}CM z&Bxyna`FyD8)Pv%tSMk3&T|jpbgBk$f1ACyA31|>GB*@Vj zH0|aLxqBBh!v#?m835Xkh%!C}u?w88VJ%tLV9?A4C?$uugOBzA?X5$p(@jBnADpTX z!&7GQ2JsfS)>&G_TR=ky)_#Q^#Ai@pWZ`T8&b!DXYVeD#;cf-r)_@pg2u02~hHjw! zXT0jWjT?NkN@!^g^exRfTPHvD0BBqrOYve;xAo|cTc(E^N=oog*9XJG?oB|BZ z;7J)2$%fzqn4pW&un#VQ>rCik6nOL6-^~rC30#%N!(_k*SYWsbUXL1q#Wdr|pvB#w zQw4%T{XpYh@oqtmzMvhX@e0uN333zu9xgP4!N-^Jssc)Z)|( zCntfLPT;J8NHUNr40M5#5#j&jzw2>KjqK6EEfoug`;0kH;gRO)e7LPS-TwHxz zLqL5hA0NfhW7qHjB5>~sv1rZ|w5tu2?!x^+ z2g?O}L&5_zN(O7QfwQ7-0I0-*45)&}Yd|3YK1~5Mu??!54Pd=7BNJG!&k1z9P~meG@!;jT zNT~|kr3wi51&<2DyHX~GU~y1a3w*9MIPgH;gsTAUZif^Oh@_9WHN_Az&kbM00Ga27 zEI9$U*dPL+btho=Vc*FEDME4X^aC$#(}ay!2KzXBfUY1yia?|c2rS&gakcUA!kE_ zM$?T!qv@dZBgSRGQRRWscmpkB0UsFzsZ-I{_Mwz7;C*i>b8VoFz2M8jLPOl*4b4E!4XC4_ z$JW3K2av--RWI5-cCe}*J{AG-J?Jn5(9BSfr!(l1sxXX8US_& zXqep)zU>s`H%Qh7iGzG-3|c1%?$p2*M?mMQAyI}BnBY}CE{-8c+oWNo63A@^(4`Hq zQUkgQ23pgCBN7}|7#ANy5+Aq{hBe{A!->#)Ccv$D&{PI!k%V7-XaH!`4|4r0(rp6; z6(P<}&}!H-I4B;no)%Q5gQluMYf-^lj6utbaMYimUYIGU7Y6YF%9bTRe{dTbRF;E> z60x7b1gelgM{Bvcxgnjw1lm9d9jt~l({ZdP0_z0lRySxWfDBuJA_Uf4g3h9#?nyxk zKS(16dafU6{R(`l1bWjmY6*{YNHMs$ML&rV5)z2nK3G+Ny`sQWXM}1Uv@wRM4*UHe znCh_4tYWG&CDLB>3sZ3U7p>~U=@0Cu*Tq0bgGC{+F=9w;l;F6t1&h_h zMv5U?tUwbv(p(I9juslY$a`EtH$y>(htW<00FO&47*v4TO`zfoyb}|8Nf@|2038B> z4u8NFjGGu38d+MHn3)(GnOGQ_8>Z@-m?APAa=`^&qyiZp05?xSTkFxPK~s2>12QIr z)Z~B&z?&S1fh%W6(Eh;S5Kw`v03G$mSn3MeB~Ii*SCZ~w0TuVq3J1E&4$1>L6kNPP zOQ-+i)LjZfT)nIT2~h(BJ3IKr3ee^fWH14m2(V94fp;Ci1_P0cX;ASDu4kZ~eQ@ay zT0#ZtWFSU+9YaI><30UAlk(uxOW>6lq%(?nBoDaOh7N2&7D|D}(m{P8@Sr1jBvGL_ zvnn+|O(UYjwIUgOSiU9$=!Ox{ospn01XsHnMXBjJxrxQunhF}=c~F=vNCJEXI#?2A zZ2?;A1yV$Tmi+`n_Jo0U93VQfpb7xIm;gKr06LBUyao(30FBmfgLHL4OS!=N(aaba z+?}1R6f}~H@{5a0^7C_a{oEB0oV;{hLp>uSJp)}+W8HKUvou39gEZZg%%YM?O$8G@ z3q4Z?9tH*m1qKENMg|6k2*_l#XI@%918CI7(J9#9Cp5%0-p4b23339IotTtVlv>7sES*@Cn3tXkG7O<5H!-;=p8={TCo?Y<#x5=? zV$e&@&&^HED`C)sOt|YoECAbBQKDB+lwZK0mtK@#S^)PL5(5-AFfI$j$Nw-kh-PL` z1W|Cz%%B8kgBZ*V${-4knHf~zY!HK)K@~*7F*AcYoDE_yGk^jZ#DZXE1}z8!N-{I# zKv@uqnIRX#fRfA%I#3pbVrI~TFrXweg8`HUp_mzrAPgwU%wPg#K`3ShGYA7pGBa2} zSrCeu!3x5FlFSS?P!@z@X0U@Wpd>Sc1C#}!m>HZP3@FLW-~weqC}svX2m?woGk8E* z5Q>?>3&Mbs%nUwI7KCDE@Pja*Br`(*lm(%f8G;}TD9Owa0%bucW`-~b14=S8L_k>( zikTq_!hn*@3^7m^gkolhgD{{ZGeZKD1)-Q3k{}Ey$;^-fWkD!rhBOERN-{HKKv@uq znIVfo1j2-pj11OL7KCELNHOyv5>S$b;Rciip;#HXkTU=S8-q0ppPeBOh0npT9EH!x za218m#lXh|F&RQ~GdQ5|c^FDj_`D2@QTTiemr(fp49v_BlOUu3gBc26kf8vDFT}7C zg)hwT2!$`gAi@GM2||i8IHB;x7)nw2;tcCi_!10{Q23GzBCHUTAfyySAPQfap%sNM z!>|*DFU#-|g)hgT#s)D7Ldr8lq3}VaIYb6TGBf0XC^%+j$cM8*3}yz@B99qd6M$qO zn3(}3uo;*cPy&mAnE}PK49pBDj%8qGKye%cGXp!sU?|DVzyW1JC}svu2m?woGaywq z3=9m+4BSu|2*nJp!60l9$;`kDqTraBfe+3GF_;ERjav%mXgBXZ{V`c_%I2*)ZW{?0;aLmjg31@>C%nVW>3XYi> zq~UB3gPB1FM8PpLgDjj4VlXqvfhag;W{`)oK@4UF1%^Io6oFz=5L7?86{V(v_A2S- z7o_IpC#UEoGnD6==o#oGnVOp>8yT5cq?no~nkJhV8YU*0BpW0eSeT|HCK(!ll@*ty zq@Y1Au8X6}hCmE$0C!1O(8C#|q8X6iUr&^ku8C#kpnSnK=r6!h?7Nr*J zWq=whNvWv@iK(e3iN+S@7HOu27G{RY=H{j;X_gjgiN>jkU@f4XG>N4-CGntZa6uXk zE%l6(4GoeFlFU+!EDVfH3=`8*(u|W$K;4EUV^a$wh#x>_DixO&=w;{`8tECE7#f-< znkT22rlcjMrY0I186_E~B%7I~7?>tnq(F2Om!xFol|bB)!=e@ZrFGq7HUp1GcJnqhL1VNzPErKN$HsilcQTB?DmnW>3! znsJh`frT;HJFozE&d*EBOb6++&`UEhO*KhQH8(XkO13mgG)+u4PDxC(G%+?xF*P@Z zIxZtIM=wLq#6Zt5$r!ZHHOas<(cC0CE!o^MEji7|Jk7w=&^*c9+z4z9r14XhT2!2w zp9cyxV^h6k3u7bWL?e@ALla|DLsK);Br|iP#3YN)Xd^UP@Ed+ z85kN`B$`+xCYzWTnxt76rzILEB`2mBr=}U2np;{z;uNGKH?br)5fs!W7J6oehQ>z8 zsYZ!OiH61&W|oPjX@-dwrY1%vrY2@4<`8R2GE+fT80#gQ8m5|Am>MJ*B_ROSUjEO*T#gg+WS^iKS_>r8!sw$O}oCCE#!} z(KEM5O)^hQH8e0bNHR+@vrJ93Fif;eHZ(Q1Fts!@f<%2qNl|HDNoHBEsQOV%`DPPQcWyUl1(g) z85&t8r3*K zOie74lT(u+$)`9!8I*6#^b!*dlGBWn(+rFfEmI8Al8jS~6Aev`QcMyPP0Wo=4Z-H8 zmK4VqSAxU9%tS9a&C=A^G%3*_(Iho3F*P+g$=o#A%+k=zk$WYJR zAlcN|EXBeiF~!_4H8IIN$pDo2l0Z>yV3rC=ZUsg8St+S$AluAAd&`YYl2eRL4GdEa z%ngjq3`{M}Qc^5T%#)HVQ!ET2d9Ju1HMuAil-Z0d^(+jHO$?HfEDV!U3{sL!6HSth z6D>hw4Q45ZX~roK=fPtalrq5k2ta{np=WAfXl7t;mYQggnwFZJlx${VVQOYG&#jG#URzt%skc9G%*p9WI+R{;C_u> zhMuLlUYen$WlEZ5qGf7|ajHq0g@I{unxUbENlIEua!PUG#rde1TStLS|14tjtE<+<@J!8`}%OvB}#1sn?gGAFb z3(LebBje;GBLhR@6mx@QNZAO|l$ewQ%C&|DMtW&RrbgzeNtTAjre+4Fh6YLIW~t`J z$>x?uhL#q_(Bcsm$)KcUZmI`Llonz-+U!{bVndreD?n^e zp~zl)EsFfwki@^4~cDo#C8C&q1}8>5F6UX z_Xn{-k;cHl5DH?05+efxLoA35?dGR}*wFCL0kJhftuzLPA`lze^{)Z3wISlIAU0He z4~PwQGpH2~i!YE6j17u%7#kENFg7SCVQf$kz}O(`VQl0yhMZqO{Y#h{M^M;;EM#C{ za7SYMBC&&!*pWzV|K z5?d09Esw-TPUqT4;)Y0Ub0oGc65APx4Nm{iI0C1CC>xyqq3mcR^@&LAbR>2z61y0Q zU5Ui5M`DBX1=Rd*B=Lzz?CD7Cxk&8ANbHqJ?Da_Otw`+MNbG}1?Bhu6vq}Di(Clb3Ki9HpGJsXL=5Q)7UiMb|f}05?dIFEs4aIM`EiYv9*!dhDdC4B(^OQ+Zl=N ziNy9tVuvEJqmkH&NbGbZb}kaT7>Qkp#I8qTw<58-k=PTF*wc~NbCKAKk=QGd*r0J< zSedgGNqjdF`ydkgI1>9T68ka|`z8|mJ`(#W68kk0`y&$jI}-aZ5}TP7kp?)C*!)Or zQ6x4oZADO%9p-mXlN!bbHD_ULU8HshXx0cOj@&*3&F;X&J(1LdW?^9B;Yi}({s^=l zM{W~>X1!qQi;>h?KI-)ky43NNnV`-vK1?<4EjtNbIXf z>^n$o*e$n82iBym?H zwht0J7>ON)#71t*Wgv+YliqOkO(@YzOuvR0^NCS|%l*W-fz-YgXhsv37ebNJ325dK zCZ3EWo`u9l?oU-9i6i&x+mOV2k=Rp^*vNe-a33FO)F#76Enf&2SV zb1oyPxrM}jh{S$@#76EbeM1uei^OI@N|W43Y~;Q_a{ovHNsT%Z8+jbS6iM6$iH+PR z@k=R#|*te0`$YZ?7 z<6|F?)O<%`|3hN4B9$#XNNnUWF)1W*MI^Qc5?ddMZHB}~9tU$l68A=82O+T|k=O}H zY~-;o(E1u!Jzk2W20RW74clfU@h&7b@_5$_B=Px3>}5#owMgtONNnUWu0u%TCz03} zkl5Fe*!Pgw$m3dXkizKq1ag~Uc4k9vV5{vL__4T=31iOqsEE`dA-C4?j{iNsbwVyh#u^^n-e z<4!h6;?78HFC=y#5<3EkJzUFn^dYi^87*%lK5mK_ADg!LL~MIBsTJ#!ZsxFy-4gM zNbJ){>`O>&b!6A~M= zW*?U34o?X&Blh9_u)liiy*P3k=RN| zY)vG#0TSCBiEW3(c12?QAhCmy*ilIAL?m_w5<4G>U53Q2MPj!gvAdDjlaSamk=P56 z*vpaF>yX%6k=T2X*oTqWr;ykek=Qqo*!Pjx&yd(}k=S35*uRn3OzepG;zVK#AhE@f z*m6j0RV20!65AMwZH2^kL}Gg&vHg+QVMy#)Bz6iCI~$2zgv1{0PeIxqqwCEe;eb3B zi9EK3JfAYU-V72})LL&wi}{zINMmuJtzfV^h#hI12eh9LCXT$WOa@7fG7?)0iEW6) zwm@PduO)Ls68A-7haj<|k=RK{Y~=N01xVuMNbEW!b}JIQ2Z@cmW^5Lc_(CN13MBS= zB=$BWHu5^LBS_+>k=UU9jj-^%i6s62iH*EA>>ZN$S0wfyBsOS|B+N`Mq_#TpdN2tj zad{-R8WLLt>NbE)=b_Wt0d9Bwp zB=NaO>?KI-)ky43NNnWwT?dfFk0Y_qA+fI_vF{+Uk=Jy+LK6Ro#QuTA{*T0FLu#KR zuj2ykQ-#H;G?E%6B(^3J+W?7;ymreDN!%5Q?SsS)Mq)=Hv60tnWgv;?BeBbn*tJOP z79=+E8m&o4;xm!h3y|2$k=W~y*vRX$_8^HLMq-~rVqZjJ-#}s`uf=+XB>onO{RN5r z8;Q+?)Fww>eOLt?8Uv2~Ex#z<@{B(@_G+XIR1kHii`V#gw}Q;^u%NbDjc zb|n(K0g2s?#O_04Peo$SL1HgPVy{ACZ$x76Kw|GlVjn|dpG9I{L1N!VVn0G+zeHkx zKw^JKV*f*8vm&+6d63w`NNg!2wjvT+1BtDV#5O}>+aj@Dkl5Zx>>wm|BoaFTiJgwb z&O>6CBC%_b*v&}nE+qCuB=!s>_IxDvG9>m|B=#00_HHEhAtd%mB=!X)_H`uoJtX#1 zB=#F5_GcvaFC;c-9~i6*_tfIl}PLjNbK!M?0rb=qe$#CNbJi< z>|03ehe+%fNbL7W>~BcyzesEr4n+T#8;LE1#Fj*2DRV4NuB=%z@_A4azMdB1mj$B(@R~ zTN8~19XBqa7sB=!O% z_HrclIwba1B=#O8_F*LUDJ1qqB=!v?_I)JwGbHv~B=%4r^F-dCj=aCS1ZlloH4?iC ziH$tY3Et}sU57RuNzFVY_EIGF8YDLIUfNwq;s=q~Cy?0Zk=WOe*vR{5pCF09Mq+N7*Vk7T|McyYq8A;77B=$li_6j66@*dc2NaA~u*hi4qr;*r~kl4uk zULPQdKSyG}Lt=kLV*f#6Bky(PLK^Q9L}E)IvE`B2YDjG4{jDZQ;?_uPCnUBf5<38i zjl8Ed4oN%}iJgPQE=FQkA+eG7v34Md_am{VA+hHov6mpRk@v1{LK5GJ#6Ez;K90mb zhr~wSuX+bb{4o;y6%zX+68i@d8+nf^8`2mTFA`e>i7k!9RzhMU?@Kj65;sR;5B2gH zdB59GJOg28B28v60Ws0H5muty|Y4so93a-iyROg2YBX zD+7GS3)GyONNOG+v7aNc-yyM)&&T+KB+iUfcYw~dgw^|kNa7MmY~(pgH6(FeB(@0> z8+0}%%uFXFapZF_0+7VRk=Sua>{KK+_#7B$I3S;WQH7+Y5sBS_#O_C8PeWoOpLekY zNqjXDdlM3SCldPr5*zu9i*rcgpff*V;cy2@{4o;y6%rfyT#Fw_;{TD@Y)JJ8FA`e> ziH&@gg%XmuCKB5KiEWO=wnJhgpI_mFBp!^!jzVH5BC#`&*vMyAlp%@NBC%VL*xg9% zNl0wub1D`fi7!WDuR~&QMPlzkVk4hTaSBQNA`<%s68k<9`xz1&`8^>wm^7#^Tki-`wu~#9nHzKijAhD6plsJYYein&+1&Mtdi48i}7M2H*&yo0m zq~<#k`yUdU6=^<;2Z@b*c7zm?xFQl;1BtDV#5O}>BcB)Hf+X&Z#12AYMm|B=#00Hu6~zhmgciBC#(Zv9BYs z?;){~&wqG>B>owR{R@fBh%|@Afy72W^Fa(rTo#F~g2dKFVjCf`Es@v`NNjf`wjUBZ z6p0;!#7;(HXCbi*k=PYT?0O`28xp%0i9H30JsXL=2#LKCiM;`dy&Z|Y4~cygiG2o% zeHn>;3yJ*@iTwhJ{T_+^4T=31iOqsEpT&*D7D8f6BC!>a*y>1ZJtVd%659re?Tp0s zLShFZu_KV!@ks16Bz7(my99|{jl^z3Vs|33Cm^w>BeCZpv6mvT*C4SsBe8cOu@54# zPav_+BeAa`vF{?WpCGYcBe6drv40}5K}T4_$`*E{`7AypwkQ%?28peV#MVM$8zQkS zkl6M}Y&RsfFA_Thi5-o^PC{a5BC!jQ*yTv061xY9JsF8T3yHlDiM;}ey&j3Z z4T-%MiG2i#eHw{<35k6ZiTwbH{Tzw?4vGC0iTwwO&5Sgk#f8KcL}E)IvE`B2YDjEd zB(@0>+Zu`Ogv9nlVh13x!;#o=NbFQ3b`BD|7>Qkl#BM}lcObF*k=WCa*mIHCOOV*B zk=UD%*gKKf2awpuk=W;u*jJI*caYeRk=U=0*dLMDKakk}k=SfV^I5z|Y!M{(Nb9o? z=5sGc&u@XO?;XkKw~VeIhNJ;f*AI`DV~}t|o@Ycpw+;Cm66CX|kjEiM&+mnV;pq9j zkZ?eryF@;}cMsAS<6$KBDJ1qqB=!v?Hu9Oh&yd95BC)?9v4116nUKcHkk9EAKoS>6 zV#^`1Rgu^_NNnV@d99Gd9g)}`NNj&3b{G;H`8?hfB=Kw{b`cW05{cb_#6~`Yw+~5t zDiV7R5*u{a6RdBw3P~LK+}#~W;`@=<$B@`(k=R#|*vMz?K0*?IiNyYZ#Qu)N{)fay zK3|syY1~X0iB0P=9CQ;KEUaj47xI~ew74H(u&qBKCOkcKK3b}bUS1&NJ(hW{ia@tH{M1xRer9fYv5aUGKQXuS_f zx1;qwBphf_?@J-I0Thwg8c1y9v-CmtRl?G$Es`1+B(^saI|zx5e13icl6X22I}eFn zio~u#Vk4iK--RST5s5tmi9H{Qy$p$sd`|urB=Oxy>_bTGlSu3fNNnV@@$VstKSg4{ zL1KSKV*f&7BcF%Qfiz#nkHi*3V#^}2Rgl=oXW$zliCZGE9gx`WNNhhOHuAamF-YRc zNbD>mb|DhG0*Q@$)_oh2crOxr3KDxZ5_=I68~J?u4M^hKk=Xl?*hi7rXOP&)XWHLF z5`T!qeu2b(kHr3l#0Fi318 z(Cxo4@pL5hpj%sE;^6zXpyt;gsX@Nys0&GaA`*KB5*u{SFU-tkNaDzM8*M=nN4|&a z5R&*wB=!X)Hu8N&_mIS&BC+2fvB7t8LH+d$NgVkOBk-MEP&NEW^|%-kTNa6}g2YB1 z_b@^dw?txt@9Kh@?~Wwyhr~usKOm*BFdPhbX$@w#jo$MGX=5Pg3*>zY$oD=VpJR-C zc0KYs#?f;uA>lcg&#}anA90BfhB5?KKBZROL~Fm(!hB>iN81dLd^gzI49IbWTrbn2 z4GF$e6=Vqm1A`q>Tg4TL4Zc$qss=evMIot4L}F(ku|e0t!rB#ONaD!z`z=V~-AL?7 zNNn(3t57#AKoUou3tNXIz7>hR2Z;^7cNJ>RDI{^^@hgxV!uUVe?ej+ z*JVsdZ7ohDwg3`a9EmN5#74fSQU^)g7>R9##CAktdmyoq@1_hx5(nSS3iV?Ol6W=} z8+^Vqmng zE=WHl@lYgo3=%sTiJgVSM!x^C0!bWHLxI*ngJ@zgXnz{0{RLAGy0Z>+?>6W@IUNQD z&@skfjIIte{{>SAy7P_&suo=xXe^&pu6^9>WuNI1MM4!sRM;2$W9POw-+>q0aFK>R|Kg6 zVRUt%`VOWJG~NPI1H$O)K>O2R>Ol20NDT<1s{`Fv22*E&#~+}3ZD8sw@u&mc5eQRf zg-0D|zdKAF=q^N%+dvrIeW0-ym^x4z1E~RFbakM58m103_5@M`!szNi`|4ooKy4O~ z8W2WT2U@2GQ)iFIAE5hqVCo$3r~}^>ZMmG<%9}uPv)P4i00bz7?p!?xq>fG?y3%W-LrVe!HImj#! zMmG<1CnHRq2Ojf4=L^8pf$qoznFYe==7Gk#VCuZ^mg^aQa%7$ygc8&H}Ai9guI$N);ypmJOl8ZMwd9Qa;QkOC+M?P&z1cPJNh z3WZs=qj0~VL43K%S`VE_T^;`@LVlcx%eH17g-M==c z85vXl0hY!ZPXJ7!es|cCbAXyr+%~450hZVMfB7 zik^R`=rS>Y+QuOBK=mdr^KzYttA8ixF~RHKBs}r4(20Qo)P5l3z7Kkc^aAR;;&R`4 zCk6)4ed&bEbJ1sF0G)jS@-OHtG+gE#cP1`AUKk+a12nda%e?E(3=FlfMlzoGWiVu7 z_yR5eKy6Z(dEl{MnCBQ67((0`7@lBh|AEh9V_;wawWUDHEqoamHiHfs0db)Ag3q+JZ< zg3SZ5LHEIe`~<3NLHsXfOz`$|0aAJajnNGl46_$RLz}Q5VFm}# zWv1*544`od(D*vYE>OM#RgK8zIc#BM0Noh_)&va~5IeajzqBMXFI6vJUjYORP0UTr zO^l7rO%)VO4Ga|&6pReO;syq0CMF6BhUONQ#zr8K1g?5lA2&wOLI#jQU^C<3{ssy0 z%wqy~s6g#V1_lj=oebN+^6_A`3=H6T0tN;K@V)H}3=E*Y2FQQlH6jcQ44F`M;B%oE z7#P6orx_R+K>h@&1K$G)ZL5O#;58%+3=H5qAsHALKzSb|4nE(Hfq?-$&%nUI0KWH~ zfq?o71dz|tgmo`Qja0lasIfq`Kz)IZ=gDhvz^;C(y{3=H6Vg&7zaz~=`t zFff4UF&G#a!1u~CFff49Bq%(G6E<^X;9)XkU;wS_Vo+GL;K3@v1&bRR85kaLFi0zH zQ+jR4z+kXg0V1FXYMVir3&GL$fCChHmK=r*44TZcpgWPx92pEjEp$f)hFq3od<+W7 z3>u~tMvIP1K=dgjFnFu4WrA>;)VYgP7}~cpHKj2$bS!w#A-Ir%p=;G%sI&%i*rVUF z9~jIWLAE^LU{GXW&|p$nb-<8;VI^~$0;u4yV39VqWZ_l{WMI%_4cpAB$iQI1q{zVF z!4$~A;K^#qbWD&z!$`x(La2k)+#UDlp=v?QbZmQ6{8!AOZA%=nif1A_*0nA3Ndy_QU}AIuyX z7A>%V*b&Pmwu-HhfuV!r%!)<^hD8}ruWVChGFrgM!_gEfWx3V!s3xnos=^{@FfTd^ zbyK8kY7|ge@Ix;XAr7##6FL+=K3NI^oc<~6yeyI5bw%?I~ zA%aCqHIRW}kt&1tDu`Qluxd(su()p$RAgXSq{Oi4Gz&zWjTscOE10}@L-;+96&VMr>KL7v!|9@r%#u^45Mh4KjJy_lZ?HK^w3CzH! zfFcf>E5#Mv+Sl42+g` z4B*BU%<&+aiG?*YuY`fQv4equ>6$snc`WQ7azMRq_P>fCt!zgxf+&t7Nem1uOsqnM zj10^g;S3DSVxSHxv$G~61G5xZBL}Nr1S10r2Rnx~BLnj#Uq%KNMNlJ?`P^*=1{PgV zdC$Va>i?2~frW*A#wi8{Ru&dUjy3-o7??k`F)*-Zfkw8N3rrapShGO}GJlF-U|=l- zmCJ0WE;BHQux$mMS<238#K^$519Y4!1ADP8BLmw`kT47T_1g>#Y`Z{g4)*>iMh3Rs zpk@FM`_g^}2DUvQwg3YM3uqXPdAE(ASNF{GWjUTG^okP zKx_^M<~JG)3~VPrC#SKgP5`;;Ea=2h_Cy6n2DS^J1K}9hU$8JTuw4WRv#?9dV_;yr z1Tvn3frCYwk%56(Ns^I)?F#7ZQ|7t(j125yAh$8kQet3WkKDz`z`((BfRTZL6Lk4F z7pOJI1vZs!4j%)91$#7TpB(#9Cq@SLSkU%A2KE&Nj125?Ad^|xFQhXtu*ZYg66`mh zF)*+vfb{CHR|GLIuqT4p2J9+c3=Hf^pdmLC2IdnJ85r1;K~`~Bg)%TO#(=6w22i?Y zoCCUjn+IeHV;mz$D=5M6$}li6TxMfnC}Cn?;A4#9DPk~EDPmAEQYmIoV&DZ$9)V;* z2Ym7|MllsLFz|vJR3I_XrZ|vT5d#B1s4)f-<712h?K=aREbvm6k%193yUqa0K8$l* znHd;B4J8I4qihBS#xEegJOcxRFsQ`?O8lRg7#Ku&w=gg;eg~x&24My0kS^$IZivJm zummqi0(1`p=nf!|6UrqZP6dg9&ffxwft&^ELxUQGe2mddMIc9Uuz-S_+dGnhfe|!# z&cFc5!i;l3he`2FGiGF9WMc%m3pD5|3>tw1l@6erdU$GYFfcF*GJ+I>T0jiKps`<& zt5-5JFo=R(t;z^?oiHe8fMgECWlSJ4VxV>%=)OE&Q0EWi*aytuPzQ%ANE=A(3skH~ zf`K12!36UFs1v}!0@_X@{)Cm0fw33XvSIRfE9xR43?QV zSeV%u7-T__uLvR}*ccd;AT3kLjx+`a#t;rR1_p>~$reyj4FxHK3d{xxgdqvIO=VzU z3W;RB}Nn# z$`}5CN+eJUgJ@BSDPm+`YhnZi0~aXd8C0XcF)*<00~b%f*%%nOKm>y;7> zww@7`f53_%a%z7285lTCSU?U@=lH|Gz_A!q{DP7q7bpWWs4P6iz`)ka2uctTEgGtx z3=C|u7?Df?Wo=bHVQyx=P;o&<0r8nm;tUK-Dh%A*cHE!?d6>l*nE9-@t+_pg85mfg z;(QDYto#hz+zbqC!i>y(+}t1qjKT~I?7VQ*7TgRB93Vv?jhv#4>XIM@T&xTrKDQnt z*i=?^NkK*-HV296PGD&s6Nr9RPhlo;1_s{FCPqd4E!(& z1_lABQQT-o334-riZd_>K~3a_m?+H62(l1lo(MvQfk70?VFkHPth0%c0c0%$gSZ}} zy(HMF-0G5^!XUkH$4an591AsC5^4m9E5X1Zg{%`rpEQy_2?hokxI%bnOoN1mtQt75 z%0eJcS{GYI+RNfM5j$gpDKvgF0LtIBX#5G~j})>XIN;;BpVNU4)6jU_OWjm0FC5 zK|au~TF}Y`Muu<@1**818H#E^olQ_F!vGph2aOCfG6aDr&|n!eLoq@gw2A^${xO0p zTd)=o0jiJ~8G=9*s7hmEC}jZAp!E$b44)Z;=7U(ErUN5G5QqX*B@hXaZWsnl?J+V0 zgD6nZ%E%B5(gsqCW}QE%CSnKyQ6Lo{lS05&K-7W?da#+GiUFj6iNSC_%vz+t0IA^u z8x;hiK-xe?1;IlDBnm3I85x2=6v$yr4Am?k8dRt=F;p{vLJ>4&#mEo@qCm4lASECg z6apOJ2w`9Y-R2Flj)4Ir0}6IVh6oS^nu=v+sH&I`Vu1F;NI-QMffgAtFt8~>8A|g( zve68n#yF_fXJCU$AgO@Z03kth*^CUJ8??Yvgs2_^H4s3}W~9IXIR-Lj1R5QJm;q|f zfmoo16^I5kVn8$~m_als#6UEtvIEheN(w}SFvxyT0tB_XKxTu)V3-nfSwNR>LWkd& z85o(}xLDoOSs59aeL%MeGcd3)N3*bU{Z(XSVCG?F<>cpOWMJmzW(Qf#0wI}sc_0i3 z$(+Q?>Mr_#fq~f*bZ#9314J2f7C)apC1fq~gim6eHc5(5J> ziyA~Hm}G8dR0lI)>I2wNxE}1R?yPx?49vc4P!+6+7h6Cbxp-Mn*OP^Tft4YK2Si5y z0g>AZ85vj^w%LH#>d!&sW*sgOGAQ8|Vt*i_;zJl1&nIPHr*C6(p!yrD}vaeCLrs}DsPaH%RiGxJ4HiFon zxk2nYu$fmRK_Z-B_rxWG*gMTYvTfKm(-Sa}J2zejh|uW`W2waBArRr-V31kjR<@kV@7aAa+qAh<&OO#O^Hyk<-B` z(;TdRZWu`9k}HU;=Kzt7;Mh+B$FCPS#Mt9N;#bQ-=9r~{NJVf;q}8L2QFS5DB_dl$C*NC5UbM3PcJhfyk10kU27} zAacD8h@1*Gtp_Zg2F@cp!Ra>L6Qq815Qsbl4pq-;5ZeWuo<;6~*xSG%V8#S8=K$kzU}KT_FcD=R9akh@lvqex8Ee z{FxV|<^VW%?3@l_ug?IHH^KQDbW}LE8ikm%*?4YcNX#=nV`EY)hF;rZ6zD-C`;dU}RvMza-a!f~qP8R^dW+Mg~^#H>C^=tkUM71SB8V z%D}*?{0kI$>Z?JKr@aLf>iQm_Ruafm9`of446Fi*whRocLI$AmJdmiEbOQqet4so@ z7*YBNDo!Ma5l_$GI%7#Uctxmb%7BlVw51ssSf4OG2Ne}hnU;Y{q0dZCMT`urUzm0)Gcd6JVR`}5(89b% zmXU$Ai}?VkAn9hF2Pzx;nR`ItIGOoeE&~JW3}z)OMh4c!%x<8FU(2isstmU+jV z3`(f)nO}mof`g)+{SqiSbHst{;9Tv^z`)9N0TjsG_n8?PSb4mn85vl4*X1!Xu=4SN zvH`y{h!n^IrEtM;PzfsZA5_l^`+<_a2q&m+5q$!xEybpT>UQx8P!5(*=VV}DmHcAI zz`!ci(g#YcMWDJ%CLNUNW%)oY0y#HORLiq~>TreWpwdI}?qdc9RwdA>_pHh;puDdl z%< z3=FJM$)K7&xj&ncfi=Y}myv-rT@`fU7bp}pIzcLImx7X#og2tb`+rG{46F|8K(2Ol zh-GA8b&>$Jgj@|l#iLsqsK(0c1!d9#j^hjrtVMpH`k=&tlaYb7Obk@`Rl0yos7eF1 z7^;0h^?i*PsMKv@tOGTaS{eC07#UdG82w5>Wh0YW93unk0j7=r85md(GW`a{{UIjM zW$mnonXZFE{|Hk!s2DuTbQsifJjRr1#K^#UoGDI~fr0e|QyVDQPclu;Vq{=F#iYy6 z$iRA<=_RNgbcQJbRIQ(7a<*n*U_HmQ2Gl4x&*TRR>kCY$K>>fAi5*nT-(Y$NDns5d zv4iT8_e}3EGcd4zU{VBC4-P}B4W^Gi_M?l<#dP&45#^KDRj zuYraCBLf3#6N?Ne7fff_36h(^vIgY$nJk{5YIYWjQ#Jzw>ui>1pwOMeA_6KF=Cas> z0^~5uWKgkilx4O(sE%S;0%~WTWH|v!cBfcYg2MVVi##Zqones$6Q1gp!)e5iyo-ac7x?7C{NvF zNdr|fw^$y4^28mMr=W(wT^4CmMh4bx{M607OGB+46K&xK>=cw07{qE zYM`>#rUgXW${8>+u-eTAH3#iifYO`8Gf=W|OyOo=V097%ndw{sYIeI!2L-olBd9y! zmLtKy!0H}*mw|!RW6m!I23F5>P#X7&7h_;x_3i@s)aN!xmoF2j=Jk68YO4CjX)-df z2J8Zv5Xc0o$bw#giu>SApd1)-2o$-Y$)JuzSPiJl5$*=c@(~@NQc|_FEML18dwLQ0&E5gPNNOVNMJTtcmMDIU?yRsH>K22I?TCgn^3T)IBi_ z46JFMpvX&S1f{=>B2eLzxeJsivOpK|vSyotT#|Dcl(llDL5;|~m!QUIK6el!18YGy zsE{r+1eG>LxuAqxJP(w{OFBTYR$2;5e`S|Ijo|XU7)A!xiULr5RT%*)!mIp26=C&J zP_C;H2Xz2yXMV3Ev7+4z^UxR|Lk54{e#V4?o1cF`ZRT!9eUSDZ#_tY{pyuZ#P$AvN z7!PW!^)oitFfg!AVEhXzvnMhJfSLi57zIF)F`2Of)S;fj_!3k;Pi3?L#mY3sa!_++ zI-?w@7@xs-Uy+f4btWSVsQWXEu?W=1n9ca^Is*gi9L8c$_MOX^3mPDp$M|F^0|V=P z#y_Cu!ve+tP!Dz?<1CO3ix|&=O3cNKIiNK* zHG7EhBq);{W;_Y<$`QsAP>daAR0efHjxkOH*>{|gFP)Kr^#r34s75`>C+UgTgT`m>GuDGT8V?v;jtRq&Fr2b7auG1`E7Ca)RgLCu0Uj0&Lk>08DsP&fV^BPXbEdC#~K)Xo3E zm;h>0eq{UyipEcjMxdhWGvhr_TKd9x+KYjK^(*6+a7G5!Z;Xnd0_Qtpm=FU4>kr0F zpep1iV=E{melZ4v>i6G_#h`A-A4X%4r~fj_KVe{C{l_>5)cpI;7z=V|15+L-<25p= zfJ&w&rr8G=7+9N`0zi4Ch3O_JowYKl#WOIlwlVpxU|?WvXQ~I)2pvpWpvHVB(```b zb}>BwwdA^)Hh@B~hp7|PhU{hf3TmA7F)__$U|{WM;s>>=Copk>TE`QaOhD;n5>p4L zD4EQ}2(o<&lOL!fGnL5#R7Ol=3Ie6U=}fml<>3sbRs{wI)|pJJK~X%5=@zKZG@EH5 zC|2e$tpm05<}y{~GcvHwW7^ON%5h9LKpA!clQyV$U&y2fD*YERZ34AQ7c=pIOj*KY z4$A#Ynbw2a*vpuXf|A>EraVwnb_G*>C?f;wN+tzR6JQn7UQpGtn&}s)g};VL29zS# zGD-P?Iyp@8pqO6IbQEO!1|}JhTQ)KsWng4r-NbYWn}LD# z4AT)%cjzqBXHddC$5fmSYDh4df_nQGn67|Q)+Hu^SD@823=FIa??A=7;T2FOHPQto zE#neU6VBuXsN-jvyM%#()yxbO_vVW87#LVBmVqh)%S)iPnALVr;e+<+2US3! zpgT%f!#qH(;qWq0pC;lRs340h01Y8T^@F2`91~)*7&2K zER(Pa6tzibKoxZIc~F8#Sq^Guq%HyJO|t=&#_39+(kA06Xlx~O4QR|aO9Yfrve$zO zv7FVQzDsU9s8O3&4(bc!-(zH8U@c$;6$piMKv7auwS|F!wRj0Avz1hUd{@p6s)#Ds zKm~N=b5O`v#eqVmnhO-#HLF1GtlbaleboH~^&sk77J;kOl4MYyn6Vz@_9n)Kpn9*F z(GgS#w=i0Q>fu&Keo&*io$)UyQ*|(QgBlT?jE6u~Y8T^UP#M?FxFZ@ol=BTVoYBj8 z9@I4LW6T8QpMJ(pkPQ zAA?%N(-~7hU6~n-A)pFxCgV|1ex1cA1SRGh6~%mdZ(D;euS#r0}Nc~CA~!`Ke;*jmQFpf24y#uQL4+`tH0nZmk> z@d0QkWgDXy$nm=wTS2*Z592{l6M8S>b5PT4A7co})%zI}LDjcao70lpIenCV>V|PBR*SGSMYQ zH&9V`neiZ~b$*3W9n@OB%9s!8l3ZuB0X0Z(Fn+9LWMI9;xCInuw;2OKN#-u&A5fuq zk8uHLNaQ|aIcUuA0pmiDVGkLffnxI!V@Dh#1M6c(H&FZI38NXP9DB+r4jS)x#>fsD z;`+vD3reHk8RvjH{687_K{eJdMjud+|7WZR<lUV&pjc^V0xfuD z?O?J4MR6xnI4DJTF+Bw7>t*V*Wdx0o-2v4@6PV;cE}P7h^MZkabr#bLP~6UDx&(^p zIZTg1tR#0DS2@~jsGuEX{9iXoM3Z`^W zY_4R=0Tnu{m~=s{t<_9BKy9dXOueA=xt_@c6k{8hwoPGRVBN@c95jZqg{c`-V{K*n z0~$!(#?%2y!rPh7f~wmcOshZF!=D1OGI1sb4v&ZG~r=mk?7XnN-*(*#fn_lD^* zD8IjD3If$9@0ebLdIs;Awu4IS4@}!ZRsTmOMNk>@iOCYA@+;FH4@L&oZ%oTT1AP4<>QYq}ER+9*`e?F?|71znQ*+LiZ1oKgim@O!q<5KPCgvDBFJ~RZx?*fw>Hn zCK{QWKxKLpvn#0g*vxz!)S_x(ZU==@E3*Ztlhnq%9h9=#nKM9*pbq9$pjxn#IT6(G z?_&N4>H&8%XM)BJdzfc~CIEVwtH7y_*$z~A_cK2Rwecq~uL5<-Co;bTmB*8q3qiwV zlbPi}b-)znsi3CfROVJti9L|fpp<-^ z*&S2~onZb88Yei(d>E7;PBF)T8nLIDL6^F-o?(sv&5oRBUJGhf++|)2s`KwL&j1DT zedZG&iykodfO5w}<|Ux~_lWrcDD^yMjsT^QC(Ls}#r9L?2+(NmGv>XZ0rlt1do36l zSYI%kf|^7xnNvUk@`^bVluTbUGl25L8)gnAMh4cm%>AI+@E!9_P{H}0ITqAV{lI(+ zR6KoT<^c4$s-Uk{O`oSCo>e&2bo(5{%|6+~@ zm7l+vUxMm~Kg=6Ik@}Z;F(|SBV>Skr<^P#~g8KIjEU}=rWh2WrQ2o%vA_ofcW|mUW z2zU!iFsS3!%5ol5sJ5{z28C`rOCzX~?qF#GRT`ZvPe2K!i^T^t!q&~g1RCe>VR;XV zm0p&Mpaw@D%Rf*l)z9)8)G?jFq6De~CbGN)l|(aGNZkmUm?JQuO>fO^i0S=NKP=1W)#L1DI(Wi6=dyNsn8WbJYmMNmz- zl0_OcJiChJ2B=-On#C2=&|1Ti0cu9BWl09*+jT5^L8F@MSGVhNgcy1?=Wlp8OyECRK3F0t$Z71Wnmu7XPFD=aTSLx5LV zHv2F#uwG-~1nIlZas$+vzt2($>H$AsDFqb}4_W#_7Cm7}2c@2;EP0^H`x%QPsIYp@ z@(ENjykJoTIq)@$52&^HhNTo#6})A+0V)LEu|$BX`S&arK|%M4L|9eih?S>4pwDQ^mnp8 z1RW6zN%yL8*QxV+hElyBK$Z%COyxwx9&ChtU_*57^Hb1?meOV%)M5R2wtC z0<{xPGCly6lBXD%K_%L0#+9HZ&lyG@P@!;^u^-ftJIA;l)QCRM$OozjFEG9VRWKJB z|A1P&ml)T8MzpRlt_KbATxHY%1>QBr{UH0UGoA%?CvGrGoM2#Jy~*eVitAg9OF?Gd zW^@IOHQr^60cDzdjITkizR$QElGtpW8QCNh3ApsxNjrgG2}`E({*P+MRI(<@LH zZYEPSsMR-%sUH;bvzfMnnl5vgY7`k6Sm!c*1NDjKGgX5cBny~aL8ZY$rZiB?XAu)K zsJ*tB=>(|6Uc&SaG&sDJ=`Cn@c^T6)P-}4olLn}Jy^@I)8f$uh5~7w3s5!5_ z5Y&g)c>oG@U1QJ~xxpV$?P2%;lt+!egEFk~2T<$Wq!m=VoBjutBW5c=EfVu;|WkcaCr_g!BqrQW95GZ&C?ZJ z0CZjN@vpkE@4dnMZjI%+d z&s@fDp#IBz#<`#&mj#TMK-Kpm#uU(a-(p74N%X8s8Dl}?+{+jlL2ZGRj7LC5uVz#Q zZ8-#mnSVH_eH5$&$_feXpjJoXQ&5$e?GCE5a@s+qV(wK?UotNclrQrmKy9Xi3Q*}$ z*bd6?MTbCxam5!vO{$V|&{TA3Jjlmo)gaeYUIERAR!szTW~+@r;}7+{Ab&S78iA~7 zWHbQ{S~oHJfd(9!8IwT8b_-)4WOgk8R7JKiP6Bl_+Zq3Y%H%FaAJC}J9L509h~-?y z3eXVCJjOMkoHC#BDJX9&U_1#5s)da8poLJ27`K2*!o`fbpa$d;#wDQKzMOFesFAUX zQ4Z9MS<840 z1*)=EFs}glaV7InP#~^ib}?mOU|r2z0Vnf@1R^^C?gz zb%=Q*Xd34*^IuTrIKtcmYE>R(?gmW{A7d5<6&=T!dq5S<31-lp1FR>R=YtB^Q_Omx z@x;^2r$9yj8D=X`!F-mv2UJj=W9|Z_g7eI|prM`%%+a9Y?;^7~XlUmWGcPF9Uk2~^ zV!gs_4H`bX%3KUeJlB{zK{@C;GY81kH<-_XI*d1&>p)rf7V~$|kiu6e~}d&w}Q+o-%&{ zHF(}K&jy9=JLW$%pxIGoYf$`sWEKNex?h;{L2aq8%pD+C|6tYth0;&vzo4ekA7)2T zQvAzY16tD4$#NdlIO$?}4a#p*S&lpftvF#h4x00v&T=25ZwAXlP<1ksB^gxr&SL2W zwZUey=z&In=df%AHO%I+ECF?^=dtvGs_F$SU7-HMLY9M|C|<#j}X0ZZwh?lVR zgDUG~ETHScSeLVSgL3N%mhYej$V!&4pbph4mPw#d-qkD*K;`9HmO9X=>pGTbQ0Heo z%VSWld;^OQXasR1%R^8`*u*j$REuq9u>%$1TUaiG+L$L;mV;W3Cs|g5g6Z=?bkDHt0VS!kEE=G$`Z*SPP{^NW(FLs!yucz2D&;S-RDoK*msnna2E#711c55Z zD=fXB0`?lqZ;%bwSx$rcPB&N#Kw~U7SD#%YPYd{hHh2<@%=={pk3@Wp}u}lXQWZzkSfQChWu*?8eZNFHW zK?8NaSzduA0RFHDgWB_dS;Ro@{Kpam8g2Z~@&V+d237}9N#4k+2C9;pShs`nLo@3l zP?6Wd3OXB>e}CI|3D>5 zGkXDOZDHn3RGCRR)T^vbTgF%JyDkBP{EAuC4xH~HwR2Alkf|7miL{NULNC2sa3|w*P-yL9TncK??q>7_O#mEXtO2z!4>PKOYWX9K_d$a=M;YIM zBJ&udHmF%}g3(9;yjt`is2IG)s15SUb;c8*n(hYULeSXXO~yB%Jb8<;8?+MV4kHVw z(RG)x3{)OHVJrc)3ZF7A0gd%PV`KykT|8&Z2i1F@7NEO9g4^Li%|kpGXG{20Zq*PVdMd6|H~)@N+tgo zr+{ju|BTY0Vz7a!7c>Cb$fN>Ff=x{8KrO#!rn{gxYhf}6+1|>u0o12%W8wt0?%J6I zK_znsQ!q%dlW8uf8tY=x10{`arWv3nQ4iB+P@UMzqzbC7`1$;+1khxlENE z)Erea0F^Jg@}LnDy_ukzO1}$~lnqvbN^ZlApu}hN1XTSRYk(52i9IM9O&dTxax-1f z0E@XF$d48!pbnhnThM%(H8W^f(xw+wYTKHC8Zma$LCtsj+n`pX!&T4%97lW5*p+iP zs4eAs4K%jm<_fAq-B*KL<+&6T>0Z&GvexG=D8=~h1&tH=Re~xt|9a58aKPCM3=FJ+ zlR)ZhbngJ*zT8)6AsWE3F}%6O6SptgM!AIPrg0#HVdF$IM{>>^P2J#HPSgC8#j zYVju=2bq%?2y$&wBdBALd>zz3Oi2QjWT{P{3OX$Y)Y?kt24%C1Qc!ax^AV`6l$8Op zH`^POh;wFu;y7<7sLsf*0u_b@0-(4otOQM}6zPK6Go{l(qd8>chG-pvu2~E2v%9z-R>OC^a&sfLicPjMqW=znL))l%ZP~qd~k@ z#s{EO)W+BhDhJycmx6kW9gJC^c1SnlWKe&!hmi@?rtM|i32KS=F^Yq{(a$&qG^9R( zF$vUTp2)}uTIw^2(GO(bWJX3%J8}x68>kOCm9ZbRB48S$BBCa-^4hpQH@dc>4 zyoB)?sOnkDSOV%5EMvR^YDg?+Oaj$aD;RY_>#|ldI)c2iiZK_|09nmg0%|L+VVnkP zL9Au;1yvL47$1YCS=KXN0}aA#V7v>eb2c(A1ob61F-C&&+GfVnpgLy@<5y5yV=H4P z=x};as*tG!m1!C*ppstm04U39O#l^B+6JK1rK1iiG|Kfsby=kkXc5*tM(JhrdCkqS;6ECS|YTPNf<36!if)U+f>Kni8J|>LW{tftnAJtf2fLl?6&1(gL8ICKCXf zzm@$Ds*dCyf*J?%YM`ct!URxGP*euxUL}KXpr!IhK-Htl0Z>m!l^N7pQdvll)Cglr&6%$3xhI^fgh-zF%$;1evNcM zEkEPypt9d24AgEgzW|c8H~|W8YXi_wp3NiBV1V6DP>JRk4C-RLM1xub?#dt&yf{I# z`MxHg@+BY~RDT8+fr38l252NL@&qU)#VCNv$M}z+CTo%zXtX%h8dNT1906sj?Cqcy zZJrXSj4N~mCHsGD7>t;Lx>J9WTrh)Q7KjS`7ik!gs161`)Wc&fj zlam;eKsCu^#^0bW*A&J`P}ZEv_z_fPO=G+VDwn4-%7HS$48~ueGG`{^Gf*0y#b^vF zP-ZjMf(ofQjHf_7jJb>pKuKyIV-+Zd=QFl}TBr*cFM%4P3mLb9=G_-Do(2s_EM{B* zYNahgHY{Vz0@VP^8J$6e`3lCfpk%(1F%r}OT*Vj<$}FoHi$FutYZwzi z`qnbO22~U57&}2rBG)szgOb+C`?2#UF#jEtaJfxV1NK;`W|#s-jc_cPuB_4E!f)_^M7gN!dg z<@zB;UQmH~m@xs=kT}9v0J8Qd<3dm>KE`+mlpv2YUIf*#Cm5|j?Z1ODaKaN ztnq2a1)xUT8Ac{h0yxWP0gAYDjKZM8`#fUS|wNi~#j{FEhq~ zjK0FC0_w_KWt<2KtZR(Apc4H$qcx~=c7ss>)bYN__z&diTZ|>3BKbDsbx;@f4r2*u zOy(}*E>MAWkMR^ox$ zsKWcf=npFUe=zGWe7#LXBGbw>e)lE#BK;tf( znXZAlaa))sPk`129ZY*cg=ZJjBT${$!BPkscj{!>1*-IJv6O(?1GiaDgPKS8ShPXM z#evGp%737kZe=tF6=ky+FMtQx8AU*S-nopWpd~f)8NEOWWd-9lP*`tbi~t3}cE+8c zTK53seNa(!kWmwq!w)ka1T~211_|C}Gz7)iBgU_wzVc&62T(ct zgmEsY*n7(O9n>Cr#`qi57JklX1}gbpFzSN3zAqVDL2C!zF{*)@Js%l+K*Ne(8P9>n zGk!5n2T$KJE(47~H881z2Cy2L+(8v!6H^i>(Ka*v1r_40O#4B$w=v0sa(_G1YS2h= z7t>ylh6zlYKy}ANCUMZdcTkYJvx6qX0v3V>7K743J%HdIP`VDC1}cccrh_WI@N`ht zk5~=rxkQJ9nqe`Wpac^e2^#B2R1*em8~N}E8nd#~LCs>7`JggHRTDHytL6==)zyXO zF)*-dn1M*m)1U%FD+|;q(f$FNF3@oYg|Y5yP${7&4k}pnPk^c+gPownXebX7F-imF z4r5bLhsdM})V?t_0i_lSM)OzqABU#g%>!WM;-SP#u_Q2^tE?dIIVXX72(OggHx| zGcd5`ihy(#90jG-LIzN0qbTe(G%jV#K<-xk06JR$lv|KMQkQ_5-f1&Hbw;`lsE#S}2AzEka=YSGP})-e391Y=m_c=@<}uLFjaD%z#I>Jh zGcvI1Yy;g|08(9j8dR|MGoAwt1598vVrO7roya&9)PI@8C=W`RlNlR8)$$a^d{Ed= zWwZuqn8x@OlnQ4tPJ-0Ob3x+=D;WJi+E+0egVNDj#)+UF_9ezRP#V3=I2$yKbcOLL zsGWM1aX+X9c9(G$sGt6T@dK!R^^kEoXiVcdqaCQ7|AH|WR1&{rOahH_y<*$}N{{at zg+bB%nNb>)TfQ)Qf|?{h7=MDY{!d23>kJHRQ)k@~~pi!l@%!fh6>qcf{P<6DGxeyd#JDK-@9I==AGN>hfkl6`T8Xjdf1ZAX? z%$}eI##!cBpb^)L%=VzJ@KxqoP+#gMvoL5F?=JH_P;vf{`823y_>|clRA;_qW&=gh zTV_Yl1kFe0Ku}fom3hrW(8vh$I#84LFEbmcq0q=;0BT;hvgm|o}vYY|sjI}H`z{7Yf-Jr^O zD~mR$7~jc~3K|67%c27IA4?UeC3BSJIjD_%lEoENYMf=^2gU7079~)V@G46*C~Mth zc@E;;Ww{IL1V3aE2IbYKERCRf+?OonpxpkJr43Yo{$~*eMMpDh4yf>rBx4qRFfwAO}uotpjC%*{th91^!~zAD}XNIqOVNOs{6`1~pnXv+f5~qSrp`34(C zlxt;c163StY z+C(-1P=6rch4*AouJYppwH5={f>L0VMJO~=v&(>nKKbOK$5OM( z`GX2Yn}h0%3~cs}pd};@dy5$u*gO(JV?CayQy3Z8ys|)TGVe8F3=C|3A)vNfkhLoV z16z0ys6>daJIcVo78?ahGjaQE7#Y~o--G%}8PCEP7}zp5f_h|GdZ5E1b2&iSu23zH zk%6tW2;|E${{RLCwsK)mL{w-`XJBBfZUOnGhGPN)16u>5BxusCkx|N#0d(Hj70`HJ zGvnjM3=C{-jJ2SiSUcmYEes57-Hdsl`n!kmV>S5Du*0CHP9NiiSVji6iHusHmf$4D z7&b-*w&{!qL5`cjSX$4(z&4Xn6x1`C#dvKY0|VP!#zIgbGmr7SIyAI88P9_{_`Qr; zpl0Vp#%@@RlHLQVMcNqCKqDYi7!^S2cq-!uP=!B@@ieHEn9leRR29u&TncLS%w${$ zO0u&UZ-S`VjLSfIV-8~wr2V=BRG!>ryapN&d&YPiR1&;rJS5Ht8Y=w`iu)#}KcHfz zi%AaDRh-213>4Y3n2v%vC5xFXK}l!@(`ry(b{~@^Xh+l?CIiqo=yN6p(BRm6rf^U* z;2YBy&`nUFfRFwQYOTbSf);VbP63Ur$H{?OObL%cS>q^UG^lBDo^dg#$hgbM4Qd+P zWAp{pDQ_6LLDs!xj01JJzcZ$R(rF`;1*ocMV>$wAU$-;$f!d}WOm{%ud&pD=YRf!g z0^K~ox}4c_D+2@TJl_AH1E4`p`NkLon(mp(^cqyk&1P~1wR7e${RU;ZGfYcC<>)fz zP|!SG6U%QJz`(>%!N$PA$oQL&mw^#-I5y}eLH*F;)S_bj zw9Mqxl6-xa)Z*-t`~rQ~-~eMID4AMZpqrVJrdv>&l#`jPpPZjtke`>DS5mB>R+O4r zRFYq;ug5^xn2M6ryy8UN)ZzkTBi+=TH2s{+B>nW{WPJ|PN#L}FS_>#(k)MC91&>?cgB`KMC zC3+bQEDQ_<`9&qUiOEIzdKnC?3=BD$#UKe*BqPD%AZ3Y3IjIm;C5gq^5SCj}YHCo3 ze=vlXmYP^nS_HO+je#LPGq0q$v_LNdbbT63p))uMK$I7!WJ6MfUIysUQAilX!-ZHG z7%~!b^fEx(Nt5%7Kz4I7FhEr4mZcUIXXfXDe8j=P0Fu_tEKbzRVBm!EauZ8(6G4`9 zGBA{6LNymx7MG;vLR3Kv0$Ep*S^@KPeo<;tW(m~Pijtzzypqh^RNb_q#9XkqI2agG zON!%*D?v&?7loCiB<1IW90|HrDnD5-gMpiYp`a)~D4+yVhPAk9FQ1HO3h2o z$W1JQ#!7BMX?%H6VnIP_5!4MinYj>eu`n<|3Li-H!^J@-@-cu;jb&h9zQe@G%*+Wo zLyw7*iGh*14#Z|)Vqs!t;$&rD1heWm`N1qkHf9EpA~t4LkSb^=4P**4BS$9;3pc<=FEaNsA{+<_T2SaQf$U;tL9C z2Dy{D66_WpE5uPCm1{Fv#0g47sf4}%3XHZNS z#v3ab85ISsd^|&Zd?+M59D_rQjpBVBBjV!~OpGi| zEX~Y~EKNgwpq9BtI76)hxzpD(I9S2Rgdx}?CJPPBv_*; zHC-novmn1%CnvwWAir2sK|>?R)zJm645UKS&Q1d=t*NG=VQ6Ecp#j#UsS6X=Hq_MA zHPqB(hzRiyj`wv8_KtUraP~z6NU#D}CfGG3-q+I)Bo2;jc;q_!LSh>hwE@BLp}z6K z9-eL?pv)BlN+&MPj?Nyg@c}`uZmuED9`XKeZVD0DWHbz5#yAI<#Roga`*;S2XcTKI zKodo1uxk)3j|O{2xq_000SFjdzylJLBn{2MUQy66RIssurb|dVG&BcAqb7s1zn`0@ zdwg(YaEPmKyla@NUr2li$oIh^j?UikV8e|JOe`1zg5#YXeSAFqoFPUURDe<&$WB=4 z5F8FqlTPtQ1_tKwMhfNzh6V-(44}C8_4I?f4V*S3Tpf+zNe|*CV~~>+j2YtNU7UR4 zT?2wWef<66;}tYCQu0faa#A&o^o)!QOiauSOe~E|4U7$q4O4Xu&3r(S1}&e^U0|qS zWMp7q088Q#KE9p?@nMcGE)Y4R)f-=vN)ZCDK2(Ka}Gda6B zBtJYcvqYz$A}F=EG^a#Up;|#pLjlHB&{VKhfarD(3Qo;S0T*@<0Zj#PNr!AELwa}>Z^a}y!MpICx@OKM_ zMVgTbQie~lo#K65{XiuQJVko?g%}$^a;?j0IafbNCm&Z(p#Uj8gEcf2Qt}n56+oR0c#9TZ zxPl7a5dR=o4FgSUM6m+%1X#3Ip*$lqCshGa5_p12L~zONYKADh4Jr(bpn>2Q>KpIt z8SD%y9D@~LsTG{rTq8nUgZv;8hOqn!uFX+G#5CRv5+WdH2L!o7N&**GAJ-7qcn^Pn zZ)lYslJAn5lUf2w-;tTAIVl0Dc`2EB>6!`*h*I7H9GuAIK3D`?7r6O=i}QFxgLv17 zfcSU?c(DZvc0*{en=-hD1jh%2`x<}(HYh&WKQzeMRl(R2R6w{o8yZ=}2ZuWO`3Lzr z`hd&icm)GJaE8W17`p138JZZo_%J~7QgCVsB(Exf^Cp}dUji!{eH}ghAOV3?B$^ml znn8md9KgO23I+_00Z#GGKHi{I5~yHdpam-WK&2mY>j@g(A%+H~2Jt44(1x@RV9^gP zvccu6feBbYq~;EC^finR0GC}59WIU`jtD^ptTjozkAFChI>rQ6$9M)g`Wm2^3@+l} zg2*0?@Ck_r*J6$#Awi&41yaip>bD?AQ0Z?LZwmDtLVm8!VVi;~o86oLqhU!(sIiC^tH}xw%1|>l|PRsyQ8f zJl*{i3>lD1cTkJQ(=P;GJA=|$h`V9DkE3%)ysL{lI48psoS7-qM3~i}gdFS*b}+~T z2CxbQoDzavBfw26h_AtU3{)w_hZq_dfnwYoW*9gWK~1r6PnQr61p@|n+sDV>(Iq|@ zR6xXoVmsb7D9Aqu)IfCd4AICd(p1ne4D|t3=pYU}68%C9E#h4xLO`uELs&D=*VWfQ zC=${rgC+w=(+tuwV{i!q6$+qCW*G0}7z}Di7^kI~IfIg2a7a)nC_MaJG>Y>Qb5k`H zY8Ai?Ylf1d#NBOh$#Fv4Zobg4Pwi+55@kN>nY6^84@oAcx zH5wZ6WtuiN8u4ig%F6MqtQg0s~OJ14}WWk4XnItICd>Lmq3M2QJ%yF$ub z4NyU71WP_1pllQo53}3X(aS$b!N|<6j_;5iA@8Uqb~Ip+sK zuHtmg&nqd)&vDAhPtJy=)KJHu5agr^3K`V=7vSm~>f;#V>F=jtz>r)7YL01w8VZo$ zMJk5CU0B0-Lj_AvF2-Ihf{Q9M)Pfou0WNL<@s7^Uu0D{!b@BmKcSseQ0iwJL4gr_1 zuvRCiNC#O6EeAsVz$KI`EXTV>IJ*WwT@OkAVEaN`BSPYXU7bNP@jjj*u0f7I!Jt$F zj`M)vcv#^CE!1FPg6QwLn#YF)_{BT>`vrr#lCB^(fU-HHEMntU2NpKQ78v;ZjcCx zhqn|_l1c!!qyi4=5Kmv%AW*x_Gsx8iR19S1rWS#M8a;zSV#!ni)YLIRszVK74LoCp z_;5$RkoX{1P_HxC*U<-*n~*F4#c7BuxbSdw(Eyb$0io~~Ry=5E3c1Mz5`bnZXh$2A zL4$)K{WL>xT>%X( zF*mU=HZw5?_k}>+kboe6XV>6h|Da$6Bcuu>$Tc|B*A$W=VW*Vu4N> zDDmkOXJn?8Xewwx3P+e~4e;=m4wfM=HH|tA4X6>IRtQADCb(Uq0X7oURKZlBfM}&4 z$~s6^Hi2Yi69!OK1Rfr8jR*;HRM3bBi3c&j84YPL2C0o>Y!GjxU}e}A8N4+Vx`aQgIhj8KS=hqL43q4^wEV}J%~KxHGSu?8;p z6bvdX+?-sEjg4X50Z<#y6r=`Jei|7tc!Dbl1tViKaCgHk$lo{KIUp32fP#!+eN7`+ zYaKH3=^PJAEs#M_$jF{CC_8xig#?5I!Qvkj*^sORDJdb%WFJ>Q_Ye;SLzK~SXm{F~ zq7m{zH8NgOobBfy@95^{>E{^|2`VumwF0;w1nnP&7#bKG#2bRb0=Z`lYI?>aMzhT< zkj6S)Bb-4M8E8rZ)S`g)3(!YFVNC@@x(xykL|VifLk1!Z89e=*eL`JaFz?3^KC=4o1irgMk5P_ys%+?dTit9_kq6q5v8r zhm0pU`Z__xK(&R7tFxI2c&r81hcLD<(nKoZAvLx}0jO6H;_QTI7I+{Ahrw-XQ&6`C zR13k%1Vrn@G1$`uQZ#^?U1&8fv~}v^?`{O{@+lZuLMtxN1VuoQE2y&xYWsuY8r1Iy z234_;^25^)SpZasK%yNfy@2}!M)4+)K7k2%;M&a*Vuq)mf`%?624F(qX$)NjLrsRV zfc&Bo(8>VE9B`ShQBVf%w}j+_1T_`l@}MazBpC%w24C0UAW&-;G>8aoy<32*#9$9l ze%-L{=UABexRUpcJ&NHw9RxXd{c{y6Vp>YUEoY` zg9g-H_jUDk4)KZiG4ON>b&GfP1NDmyArT6h3~&$f4-JTS_HlI#0{02x!6l_r zjy|3)pmJWppaL{JVPIhF2I~|CyZHJ#BadHLfI2qdph5NosG0>$8sYasaB2xC*@9h& zXVL>cS_4kFzM(!Lo*ted3Pz?31x00!DJk%l1E`&om{JKIUeqY4a1H`xi)!$QIE1Hb zhcpRkr%+lEl3xJV9h91wQVHu{g9qyI$=fPm8VMRFF9Wq#JoAcEi%MJ}QwbmeP;W#* zQ$YyVgI3AYs_TO5tWFojsqpgvd!$RoOT70?-3kPc8w88Tl081f0|~@-!9VA%!fge~2y*8_n&dyL%+sMjN6J9AHWvJlP5~s`(P;=8W z7(C1hPL80aHE0S8k~R zpdN+Ig~45irHNx`fZ}IF)P@)un1C}mDBl`^+uPxuZl3YJj?TzK{Dut4Mb7>~{-GhB zey;J({w}UaRXe!3?&;?qAMEPu7~tU_vwrl4j8(ugN$h{46v9W>2^ zsL(-+5YQ@gkPxCmhkMiz=5<4cf(rk#)S|SU{BoDnoW#mhL?I7K>(ID?1eh5pC=@JU zO;T)y9(4Q)ViB~YbcD`UfR-hKXGS$3eP1XW)E)t~@qEEf_w)+^a~vZSz-X%Muj zWD032!NzxBg$`&w2|SL7(ozcujt>a(cZW=*ffBC*WSInr30_bV5)X+f(1?~}h`+C= zbG)N-V0@6P4``SQ;s$V7f=Ya(d0a~~@bC_(Bt#7FfXgdr2?eT~bP6iKr4P8YQh=0H zAaPJ>1uK|r6*Lse@-tHuv=l(fpgKUc8d_;-0xLqWx1^yXQ1Dv82Ncqvfo5>xgv2>G ztil~5A*~`T)fr^Y$Up%!bp&b4Nw`!Bah^PC)_}7Bg~E$I66Vg zh%Ag@&8mQKUt^?vWezHqp@|&qbns*}d`uY>hoIIYNEO%$a5)JcPVq4|3Q{m+a196s zO)y&`hQ>n-jUeR+sHTU-E+}e|`(Vb9%G?;-0`~I{(9i^pH-i}r!O$gBh6;v8;K5f= z3INZ~AWzSLMrFa{Cg2$w9ncCP_jvd)Eoj09G-CsvQA14D)PUx5%0Po8AW6^=3PKJv zMgsO8X#Ca~?uCkyjKrMy^wg60%)FAK)Wj486p_@TqSAsAj1Y7+MjJ$ok9T)=j)x|H z@c0L4od#%H*%iF*3OvaU>Vg=W!3G^r%5zBSf;UhhGl}4NuXxa`t*29Hh%2by1W^a_ zf(6(d?2}*MmJ?#k9#nn=q0CE~fYt^Dfs1DFY9}+;pbcoj4@RWAgC@01;|&yykkb>~ zv4|-FaQM3ThdTMVLc9M+3pkSc!`iO~ZlKN}s89ke1t`0R1cmy62J{d^GvK1lE!4*cI#_`;;|;E^6*LrdO%W|!q!AEkS!)QIY(gwf zL+>p^#{yte`AE`WCTKJRG6-pk+~fl_ltGIt4MAg<&_Nw1(9pQQvm+?m!&)SWnjF$P zGgbgK(hQ6l;+=wBz$3ZwA)tA9Pd`_ec+kAQlc&48Yj6l;%Fh=xV-v4nXojAn5PfUt zngAVG1^}(=h0W}S=VzzpX~NgHK@%yoyMvU4Aejbc0+fdslm{CF%0|#K6&xc0!T#~k zSOGQOL1RI%vI30bHiQ$}8B|HKdti7;mItVFYespmc=%K(n&2j!=lR zlMbX&0a{N7Ds;dd?Bx8s;u26-8bpIc6+mqah(gffI8cUhhRcEbN}hQssTELV*rZ_n zDM;yo)?mS=LBSSeC%jz)?Wv)t1W$s2yKCT428vu&3tEU>5#sCwE{bp&1@8@7E7Zbz z+9>N#AtUFY0$st_h@m962$cVV;z1(=pv4~wpn0((=fs?xq{QTGx6-_1&~B7?*i=if zqi?*kzX!P92P-$IFffC4D#0chf@%rKY!PU64Qy-}ys*JNwZtQq}P%- zy@u!s%Mqm6kl2)kp0u36x`|9%hUkgQ8LXSg)MbdCyj;M#iA-OH=n2dfteeObW{94| z+`zg~(ilU0d_a(+yDz9DfvgXR2dy^*Eq?(OMW6-=c+?5oTsUax2~rTb1o>lI#|jr@ z0M(Ju<~l?Ns06iymY_zMg(7GhQoMlzv`dR<*T7eKqc7bINB@V*&^w4D4zSX~7g#(}R64+hnCut_2CiU>$E z4>Z>dnmz<|abd%Q8ku<|IjLo-IhqO@)re8O`1q3C0&9i%_{8E|@U9%#I;8k`4F#p5 z;>;Wc1qD?D9R($Yc-N5NkRT*;lw$If6s#1KY!j6fG{6RFDp-L8a#M5jiz<~sZI)Wt zfGYA}gdu!m1$ZXk#J~VntB3jo#5?1D`f3~Be>BD9sBlk4gghwptb`;d_1T-9$%iE zkysR85}yH^yA2M9Eq4SjBtz_-g2pOrXab%HAxRKrR@Vp`#fT9G(5g_-l2ANrzd$X! z_%c`!LTrPz5b#+B9qI;!5qLdjXs~NAWD^#s^Bv&t=@$Z;5=;i~OLhzh@bPp8uY-iQ z{#`&L_W_`hn2_N35O;(45a?1YP(uj5-r3NU0o-UpY@td_Nhty?L(x>w(9*!VrVW%X zL;b*G3@+fo0S%BIO-;})7LC$O$l5ne(7F>%#885BfKfbj?T(9ru?eIX10RJ&%wl6{ z2${tj#2aJD^3b_uV_3@bb#iqH@d=I(4u&kygpTNgwtFZTni*Tbc1eVL`nmXr$NRfk zfJWAk1{w_Da{``zA+SQo5afqo&<;Bz1tUZ7_9jqU4m>Ceo*)MCz%4uQxGZv;57s?1 zGBpJ)qk#ACD*v zK^Y%bZ6GXztZ6b-Fk(P-C_!uFobyXT%eBB`t*~MiK3{~`5DVJR=Lt^mi2Zy%hTtuI z1{IE=@dof9D7Xg>8Z!fpxxV5EoE$#x)`UvN%&gS-C<% zSsAou1YGgM5{4Nlmmn1vMxf#XGKPR?h=3a?Mp#NK@QkN%yb-84fg}Ux028Dl(F`F0 zT6hNC69O7)RWLFGjk@}WJ3%IzHS#po3{5p{YyyJg{llFgLr17J3~U+;61X7Wfk$>x zsx#;W9=!443SKG>PLH6GIl`yz;69cGcG!%*o<7nM9}vetsz5_iNCgY6!m+#1&=fSW zrpW*v;|Hyg1+U>X(tz*8fNZ*e4b>~Cfm(8!@O`d`u}3!_$6ya%e-~E;rIgHkC1{QW z&9J)!Ir>7~0Omq=SwR(mQ(HhtK)kOnXj8Qhcv?~cR;+?2UXW&Vpj&9bj@3v8om-+) zoLQBslL+2Nqmu{TRRb1R0I{v1t3=%#edC=XL7N;QB?heULL@239xIc0L&zQ~16Wz_ z=@%C7>IaE_1tZwdA=p{q*&0_vluZDjZ8xCU1sCt21_5{n6gXX=HVI(sAVK@{2oB1E z8YrOB3AFANwB{Y=d~n$d%A81BFrky6;1uWU>I>R{1ac74eiu-d2!=N9;4Ml-Jc7rN zEsYG#3=EtU3>gA~Ji|PFT-{w=;z8wy0)r=b<&k5&fr6nC>U1oqUWpHK1I!zRIh<%1>-?W+d@1*6ISuTj&82;&OV+_ z@PZSRMgv@f+#tIiT)|7OLCrD9LT-&R=uXtkGzASsjWSKp*d*xOmjciVvNR1P)nWzJ zQiYg2B^`zMcsEZU*Z6o4%Lg;GZP{9x-DL5m?klYZdR6r8DC+yX-5gFXG+eO%)q1GNeUh&^PW5naq;9I=JW(Z>f| zg(7Vt12wbI71+>Cj_k$G_nMhtDwb3kjlUilx9G6y`z(7 zJfxNA>H-RTNFfhS(vXA%pV)$=vv}|jW4x!Iiz}!SMsDk%WC3IF!f4R!E;uMaeO+*` zI@A{wJQ%is8@T52=Aa4yl2{N^v92a4nH$sw1mz`2yV?RaMhHq9!2zB|@h-lOpri_K z_nX3s3+DiMmkP2T0b)^ze~66% zBiucCXg@C$JRJ*4C>rq9=n7g2Mhe=XMWB!>%P}|v+{#w~cLgA;b-@Dg)&o+YnV`(i z!=nuD4^Y|yO@>330vI_#)&dwY1P6G6cfz=MhADu0POvT2kafA>BnS>Tq$Vb~AcU+n z01ekb=a++B1LK{8L1$EeXPrSk=J*iMmPzn>XGDzyZp2{gazPt0#?ZP8ec^+ztBYr- zFLY`dO;Q829|L5tq5wg3%Q z_y)xrfx4lPTpk?a7!;yl4qG}6HWSp?19geOj)QE@Lum-YqN<}+}$3tLeJ8WIO(UIPPY)7&*8z!kjV6Wl%r6)y2ku5SK8uJOS>uC4*7 z3j;9wK;ZE=a8QFbI)Gc$3I-M6-IJhx3V7*IfUBQNyj!TBGkA(cqXIUi5|R(v;E#M> zkD*R!4*c*QBb_41l3CEnDbW5rWYIdP4*)(*2I=q=Sb)LXok$0#fZZ1ome9f-y|_80sWm(vAxGmtde%tGRbX?tpd!E=(r7|dkceUm(&#XP>{NnP_rAWN z@xhSg>!6eX&T!y*$;rvp5Zr|W6{9d4z%rgLu6`k)jpV+LpaC;T4G5_v3?MO$xfB)J zdjiiNf`I0W^mQ;l`JMw|V$FItTfK*AYM}M1<=hv(2DmwLnY75Cf=)<}SF~ z;uho@sGwwFkPGX!fIJ8)Q366-<3TMNa2pk6iBGU=NC+s7AZ~|v2W9tEu)kYKxMPqj zYWzAm`gtR^mP1O$_)yGIGG|yZ1=)A+<{uOfS>)#*<{IP%I)efhy6_co&W^z${-L0a z`+nfv>!4F0EJ67jl;A;S66mNQ@HnT30t0xDV@Q5@Vs@w+=3G;tlS4p zrGv{A+y^j#mXErDo7QfyULGPfgPRPdxW+w9;z1*zph6jxa$%)tFlbE)BzZ!ovB8zC zIqWzzM<-8cTLQU34qAi{n#HKlR8X#fF4PS6^!4+RC8l{LY0W|}`olVfG0pJq|9D`ipU2)%_cmvQ>708{C zJ~NmFTa66y1X5Gi2&H!d9(Dv}bBH=v{6kydpyrP;xHSyT*U-~kK;w&`H4RWv{{Vw{ zH~%1CN6=AwpbeJ63dTC9&`1XXjdhHn4Fhl^D%it6)W;#NupC1xU6; z+r6uRW&3W823P}VQ z#Zb@O(%j6_*wEO-!pz9n(9}Ft8x-Ww!~j0{1eBZOVJGT9k``nz0coxSWzz>_)t7&8 zJgAg(iwCV9gY^7i6&6woHbCjDLF*|4h62O{0yv+$2YC9U+$WBSXl^ zN02>D3}xVzqoH|4sp*-;C8nw#z9-up{X2H z_CR9V(+_mE1nAU1T|)ySL*&h+kb}tJ#|J>pAOme;1fLfO%AfE9#WZw{4b0)YZ%`7b z38;AmUh4>tVbFO{knwkL9~m}&YJzg27wC8i1tT-Wsb1iG37G{0Z$*WaOOPfV(zphiGpg|Ro3I$E@ptd5Ts1*m6zEzyBO}-{J8)$h5*p;>Z)m1q0O~D) zwts*V49d=r;1CxVS2u7W0XkL`a>OQbWSVP23vN(b0eTLRr)#i+hJq1zi7hxNK(#q& zstq)LZv;Iw6g(#z44wglRZO4(uz+x1@an%H*amD9&=7iXP`rz;D>Rvd#z;Uj*Wk^! z(0xXp{_&tb8mL1AIzKWk%>>j=2YDSb%mbWjsfFvQ10$JQX78CREhP(u=QUKwQF1n6uFPhZdpQvRTg zmmsg0fo3XUd%xlP?!i<01x01f8L6NXjluiDKx#g>_A!g$DBRPvC)d6V!=AaMXkQ0-$CtQVE3^g*5@KrvROk3Xw%L z;w|DqXEi{>3?U5LxeMJZ4yty8;!$@0!;S?4_aIQ06o6A2IC?-k7A+tH)QItoc$8Ta zOsm0DHm32$@MSxY9$kEZV^D}E_<$@(SJyc-IK;xA!Ny(SV>;kYFSx*kRuLx9;vCf44heE}1|9O` z?CApUbZ>Rw3AmyiNM3lHzB)fr5F-LBw z1c!TuID5Fd#QTSWS7bpV6LicbY>gaL1ay)x=u}Vecq{|TzAx}{3ea&5pyhrcL7}do zV`m|UT7aqq@cAF$$_?Dlgj6=DWfQ~>5BMrK=s{&Z5oUS@dd5o7{gz0jl%Aobk%6U= zg{7&ffw_gDk!h-~IjCC?>Z5~J(}O!N&85781GO$Dr8m530FKz*$ zsAY;FIJbf4;Xz~LL9XC}7}PZYX9$g=)Z&u-qSUg)9MB{!`ua`KGC?F2IG1yl7Z-6t z)^bLGmvROKYbq!ySSu72SLP){7IRuDD50$8R6<_M2|j2Te9kb)k)Y%TYD&X`5ou*8 z#tKu=L~%)Off1B8#_7Z&Y)%9@O({3OER$2!2(%Iv;(Ek_R`5bprPPX&(o9ZOLmlvX zRnXdQu)d_660kOqgkc(32(+vfB_Pm^GPDAzLtWacqo8D~1`it}O;o-ysFiD_fE--l z6|vT}@D(NKl@4eM9g-XnwM~3+W?p(uYGOfw9#Xx7e1sxs)wF$UgqZp2VhoDFXT1_gtrv>{_yu+8A$ zgbSHv^#aX^!4`~w#Ub-FF0R1=phYm?x)>CA&`Bs*;Kh4*x_dxJhtZ@oEMSY_&YyfR88JbAZ#}+_SPbQ!g3h5j}`qPenE*gnCNoYOl zBv9WP)T1^~uu{-~bg&iF)D$#865y`3p@J3EKhRD##8Kcd0Zjp*1d>}QC|E&(1NIB3 zUJ7=EEX4&c5de+Of}0MIUTQq9gz4uK?-=9`8p1X8seFwP#yzCR?bkJH%5bf(20gFq} zNZzYNX5 zlcV6#W4LAwO@;WhqKcCE;?$DTg81U{%#!2`4fsG5B7ZnL`uY2T&bNfN%0S1*f*NHI zyTB0)S|e+Wc6$q?Md}$G4{nP==5-k$=LUiLo}h)c(9#=hgi~;UaePRSqhD}e9eXky~xgSb$~0JPJZ!O_{-!&3n~4G$g#1vew1H4uE{8dCp&OBc^z z$6()h|A3Hq{{RorDlX8KC!h^TAX!IW(C$*#AXmQ-v>^#+e-E&*CIkGGDEMd{tbl9cl2SFAYTFmO@WY#%nUlm5Ah-><3rla5I#%|_)JA; z_utPo+{e=?J~+e$G_CCD;^GWCbOd}fHRvV)j7=6GK}hik-DCmUHH)-U0mKDQq-!!1 zRD|Xw<>V)4r>1~XH)2!@oDIQUBGlRyF0RSo18E6>4#NOPCoJSZoqAAp4{K#WuP}iM zGq?sg$D1n{TEI_ZaRr^0gvhgI;E_j2Xn>~w!KWrdYFKy`0FJ=m-~iAX2hfq>PN3!X zpwbw;FbTOZHiA{d$n_m~Z8LN<6tu|&>F7-G`A4C7C7C%2hLB4?+>lnMz+)M<>>SqKfFEL*@C1i{KyW;$$qJg`1D#F`2|+{_A~doIS!D_>B^7kx(c@_pjC?M= znG0xc6Eb?}4B10~;D83gL6@~4FBmd{HPPXnVyHL31I3`j4#8`rJ^g}RBb*^UVgmzE zpBOeH0GWb?^I)Uh82&RunTAE15C^%@5Zj1jK#;$ir;n$fJ2aCzJ3^`;P}+|V3I`=Q zND~mVPz4?Qi|D%}szCH5jnHfinKOj$rw;}nGYmQ`40PrlI5)x$E(d3;cm)f{Y9`m9 zAn=F@WT40r>Ppa9s}X!TtvS*_qcLO|VSGGfO%r&K5;6*nG*JlO?E_9Y(55Ht`B1M7keiMR!X8W|Xv zDi|<;M*iV9*&v^>j?$(AkH5i2MT`|pjTvC8V^NeLYFHD4c<|W;puIdOtvs|5UvO|c z2Y`w~M1=#L%YxRNo>AcQ-ynTp_?|(O8|A=j8j;tcg*$qNfU|u(xSNf2NgC)*F1LKp z5vK8=<=!FSynwu!4789Ey0H#CCkn2>VW*!#nYLPHDWOJ^YGO@rbFd~*ye(qOd# z=rmvC<%0&u3lLrNQlJSMQBHx*-2(T}6%4@b&=AnY2cSiI;JX6jQTNY+2B1M#2%-u@ z&BVUw3AQ!>>xL%7c+ik5v}{J?Xm~drW->g^T+Pv1E})TA(DKj-(A|chL&Oaj3R2u0 zJ$*n&horbU`UJazj?Mw61aJ}s_3Z+JkZvdh_tC(8T*%}D%EB&ClND=u1ipjE5VWfT z+ysQpuR%s^g4}eC3=B;{?Qj>@0B7)2JM_pp(D+EGFWR;v)LlnvpuOXoHa4)mN6

53a@#HH^7|o3R^YUm;>kVX$j}kwUFbHA-%VWP0$VHfZ}1 zY@*W1(;af95S9#!^X3sq3?Zc-@LF>4y=;(L4;qB9xfqap!5LTqHo**O2SRr-Ls!Is zngEz>Mc4)baEgLxgJ19lDTlG^GX~EK!KN1#EX`rd%R+)YossUs0-cqFbZ1d8x-_^& z22l7y=sY11-7^_45Q>jstNE#DU;D8WoV%b-+#~f^=hzz$be{0ufy8 zLgEH#ddw6$Mh}|9hL6s}x9VU9JZJ(06!O@VfR9o)i#JdJpW6njKA@E%s5b|i^a2kw zKx;!!(A|wNb>O*q@H`r*AqI0Z$ibkYpb+?x@WzPg7x=Ia=zt~Am^?h!B0LKT2m{dZ zJ@CX2E+b)Ahk`Hd^mcU(@b`-cHxQvsCqq#43=-C`A{ahl0G^G3CMKi_1F$eO_F#I< zpcxx_dm1!fgLi>~6B=}R2z1*y^dMQ-=qMzT4T(8tz!19s1X|>R0{~jDLe>m}PHqG( z4}h)L@dT~c0p%C4f6c*73GfUVbOZr)>yMcQ1NkQr>yJV3mHp{uT?sS9X5 zJ9v``@&X+rQ}{SI_(-=PS2xcH1trLRx{LXbe^nfr}Ug=-NzB^7io$2USpD@nCI3*dP_S_HuCz05=q% zE94==PS8ULF$bKG+ZWD0LGj>ttkXai1_^=2Zb4BJqYu=cHwHJ!pu?iDwhMF>Hi}w!;{!4( z0?#@~g^np?Ef{z-6S{L66tLht1KPs@>b8KR9z4|n8(35@f!_HFU7d)SLN&sEK`lxJ z3d^?O^3)P`OJZ7LPBCb)CL{o0y(>_C0qtEuodLP$)DZn9D~L8&sf2!LG<*m`K|>eH zhI9{oKzHZDOvc*p!xpg6kqR_hz)QhF8&*I!FoOG2LH@q+j$xpi-@rvD@_r+DWWZ`P zNH@Yf-cZ2=)=Gh79M}>k0|rEN%GNhA&?NlWAEEcF& z0kb2()fqG};-P?8#N!Fx6a!ho1G;(J1u-BB8G1J}Gy$!qhq?ro!XYOhnZ%nyPSAz* zQar)SO(1hPu!IA>(ikiV&1~R6@ppEK_X##O0`Gr@O2C2{egraD7koO%zyP$2%M23g z;B~FAPz9GuAjd&hZ5V^vao{F=kgHF;yQ@ZSVpgI~Zf0JhPHtjW5{Lz!GXV)}D%dH2 zf+|0Zr(0z-p!2$6BK8_)vMdIKQ1n^Nn z7(F%TRMj0URy*>>khoeUeFR}OBr_`3SWJ2?hvXeuNY=PJNX z(o)b+Py(Hkg?cm=;w}f!LU#Am66eyQqSU++5D$KiBqW_6wVdNYeF4z!EYL6-IC!8J z5P;e#@K!IP@PV{?4MCfqJp4mIO)iW`f+`7s^;W=}VIXHpVA%`<&V!)T1nx?ME{_I{ z5`$-nKn-B%0(1Cz5|DTDw~0YGpp$q}WI-qJ8t5pbdgdh;rRJvQl_+Rh!{!u0#|jxC?RGW;ue^o%0D1{3 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

0b2$$NxwKhnTn=CoUNan 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

u?H*2lv1b%cWpT2tfT_tVbyX1o=Zo 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�rG;Ohn@i}NfVlg8FsQtf$aTO>pFJ&wR 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ž&~U_r7pXk86t9W1n<0}F%8 zXV~Fj;L;I1@(*T#6@ced@hJeW0>h^O>HIO6+rcMPf!YdCr+}*(M_>4AFSL>ta`ZZA zD%%vaoCqTkgBOj!uaH%OotN$693Bt4kQtm{G<;pbdyQP2!$T3GH3|q}N4PMkjs>k) z0vBF}W=K1?;e|Z7TLhl+2~#krFhrV=1r@(g7a~<*@WK(i&jHes3=Rzl0Nvdl4_amv z3`%j3!(}xpTq_DvlS@)lJX3N~LE{LT@THaRt|2a<9=dB#P<#M%y@i?vn4xPI58Vuq zo?4QUSdto_T2!P7UUvaHT?^bt2koZ;WeU``DQMFdxN{6X&B8e#G$FNhM)&shG3)aig z$kU03oIwdG(qZDDd;vLk93;yCb}VSpA{25+95`{p(mN<}<3Se!K&nPiQ=I|YnE(xb zAm1Tj;*6+$K@-51p!^0d(qPjNh|VJS1UW{4R+vNQTFs0tOc)AMK)D`sHJw3)X(9x|*UN$GACO{55dogORsh}lSW%Li zSDXl1fCTN}S%6mk#>XodnZo*`plS;g(IFn70}{Yq0fz;&z2W2;;vWE-0*H4D1E&wr z=_$b>L9ULz;7SV;_h22MLpk6<2Nr=(1%hiYu-S-45h(6K+ekp=Bq(a3?Ok|#Cd320 z8Og^Vv`HMa@!Qee6?UT4fUN<=SWV~XsFZlR) z$mTD^GB4->nc!}AaJXlPvj?a(><3!62OXRMZ&mPfjX*!0yvW1?v_LU2FC{)NwE}T8 zIZ|o`ALRqNDHoO&UBENLNR1az@dp^KfvQaq4|0VQbh)u3=u8}c4_DAV zh6-j#+kis+{e1!=HPz`EU@e(~^bw}!5F~jCUob~X29Ocn_yDli zk=E41hxi-NH^>H>v$N95a86LT`t^K@XhsAH^BKp)5hD^E?)0MnY9n$}=X zLQiG~&xn8~UE!Vu?-&IwX@IXMQ$U^s2Cpbb+?k4YWh%;DsS2QTh0`=O!RNhL#5;pd zw1#x`ARJiT>mLF-ULJZoAE*|DlzWJN7HHugwyojdp$${`VP&9Z31}201XSyThE!c# zo#S0W2e$jVhIsh9fa+bSosj+FunGubA0p*K)88tb9mDXbS@}py3g6s&BxI_-p@ZCeBm!>gJ^{T zboVH@JcN|-;O&{9CIq}m3NA@pU^{z3RWj(v7WD860-g5Ifg3KpgyrIw}t?{hXX!4b7mZ z)5DsV;E)H6_=9$`LGDk2hZi^tz_+=9B^eNvDr6E;0ba>M_@JY1VON;C`hXjFkOPq& zgB=wtV0|c0T%9O*XGsCxhw?=3T4^#sZ=?s0TSM875s;O{5QoE>`v&kM7eI#%#RrFY zgJM6(5q=;oL^=G34Dfzd@FC40rJ#b{P!lmy1Zr_3N+C;Vnd|2t@9P*4;OXbCpbN?q zpwa<6;|L$%LM|cT>uA9hC(@xFK2ENnvDg~4iV=KWAhZJ#>=@*T(q1>Q z0G&R9H2C2d?2CN7EzCH`9V+P3Z2{@V+jEv1e2R-_P#Dns*iz|5ZBnSdyQcnXD0_sQ~SsRx5-kl;!6nmSpCD4#p@;%&}Ie z#Wqh0S)B85=-LT6b4JSMXFj>b?y2GlC?cZ+xP@plXXZ6k(;3}o9HtZ`##WD)Ng5bWvW?*}UITy>3& zU3{QNXo6?lp|Jy+{|O0lbOx=#aQ5^89XSHp$P2OqJm!XR04yTZVciPXV9+cuD4Rf! zw8OYI(G*lRp^bEz#T&$1U>S}DHxn%4Eug-Fbta%ke;ZU7SvVU&%NB6S2A+hqz;G*Q zf{h^_)E+jmh!1vkb%{3w?dM8NN=|_v#seN8gLEW76|8}w8|c6!aFPa%3V@bogEy*! z3#0gO#~?pY5(5VSB;ttaib0Pi$0$c3b1L9{G@z*-*qQp^^z7smU}y$U;-F=xhF}lk z9RLN_YJ#MuM9cN~&ikjC!dO#>s)Km)9s0?O&&aZ98d z>A}Swtd0h+6NL|OLJp;e*U?}}l%fb!&cq`MB1=oqCcIEz)PmE|`9 zcuh@)lHzP=Lm3ojpz7Z*)Yr*1NI@yg0(!1X8f4ZwEi)%oBdq{*Wj2V?wL?A&H#j5+ zw1*LN3=#Nb)a>{o$gpcXVlNd`7idOY6SNl`6fi#M3xC`^eOy7~PN3=vwB;7QN*LSl zmy4^9Ylv$+=<;LGs##cF4lbk&zz4H{8Vc~Pl&J-Be;snU7CcG9vI1loE2wk?ZQp|q zc%TTvM?N8)PxsUk(6DxqOJZtnejd192Ol5@s>S0&Jc9hgk!EC!pvQEBro|wmP(EfR zj-XW%;9+kC^wIAeGm}KnA_dq$8fY<6up@LFH59h>TtNfQ(oz6jGjFH~8#e}bo)K%; zO+m*3fHEWKxPC;z2pVaIwavlhlWzbhQHcq$a!ZUS$Vjt3PFKH!`RE}`MmsPW*n zc}V#S+@lT%_XSVqz@y*95G)SrX@jpqf)x57&%pfxI@JuE4-tg`;zm|O$U-adN*2(; zTJXbCLDe}z05mQIc3(g+=&)vA=!g((SRPWZ;5;e;x}6NtPJpO2!nw-d2)4{WB;FZx zEF|dG$Up@RXkmzFNt_n+IAQqlB3KrqLxxBY$6*;U6r_X%g`_(B5sV4wZq1bI4#fR3m$w1ifwkTFisEQ^0oWIVXG2hZw+fL3CG z4i^9~REBckiQ3r_bS|u`yQ7bSA#BdXGYG!T8=j+sLlA<{ZmXN4FDOH}27uiGn&L8K zh!6F13U!Nz%%FhI)l)Epp8*2$FT8jL#jAlaXhQ>{O^7#u;e{h)xiV;?F#>*xF|4cu zx!eG{G!7Da&{hys5E=pCYS-7(FWfW86?8mX2xtZf+FSq+Q=u&WF^@Nj_YF`0um1sc zO+kz7{Nh6cKqKB71r;IAPN0Rj&>Ql=d}xe#1_yy=Bb>dV(_RKfpv`;WlV9Sojl)6O zC!mhHDdI(}-zYs&BFZu+BE2vEp9|S#p+(^L?bT}wD_aUx<-0L&EZ)e@#UBdpaIraJ7GU1F-kzA^(-ohgy_qTl|B%fDz9 zEi}_&+KYWr8Kyc*BHd?5bc7HaBZkCA362X$G5vyLxeOMCXt4rKzcybJCM;u$o>_S z;YR54TLq2y`1I70qSVy95)DubADmMW1EbE4prZ?dLqO#^&P^_$^L#2?%Tn`7+>7!{ z3*g&YuxxQ5>EcmPtpTmep!@ToJW$OBE)Aj6h^U9WgGUX(F#$RIDg-<^;^FET04bw2 z)Z#Nz6AR)~^HLOa6`-8rlEk7CO$Jb3HYncN#~a!#gM_nzft?-vK0jy!4?4sN$*!Q* zB)If~9+d-A(Z)YLW9)YR9g1asdSWOM^`I0fpNoZyxVw8aCN z#R1JX8G(n3!K-cHlh5#_L7-Y0yA=35tIRy~tw;vnIj6}0y8AQ0H3)o04Y*08QIwjl1Gyhn1H7&SCJU0#1kKce zB|(FM@WoqLcZGmfjs`=v)PvSC!B1xm4sr4H2aSosn<=2W6x6?m3`>EI*8;CVHb)HH zz*T@}icP@>z!(@9m@zQ8J3Ct`Xe1Zq7Z;c0=jZ79xho(zdFi@_dPYWi2D+xky6Gln zX@+J7X}T$yMJ1J*3MP6MdZr9K3=9kk3=9m63=9krkVQD2d1?6!ps`6ur(k~{(9H-w zo*}M5jy}P*23(F#p0);D3=9l<#g(}wiAfB4pli3mbOwx7l3G#1pqG+ZlE|Q!R9wuU zSCpEQsF#wORGJ>22{IhYPE1NFN-aZ?PAp2yOHW1BlAD-Zl+OUw13K~q#x5=?V$e&@ z&&^HED`C)sEFsc^Sdb1Xq8Km$$d@od7KV@iVQdi1%wP?o;Fy`g2F?aCm>FzA6dW@% z*umK#1~Y>Lh=OBg21hs>#9(G{22pU#%&-&A1~Hf!c7Z53W@d1Ovq21I26qqz$IJ|# za5jj+%-{{8;Fy`g7tRJTm>K**6dW@%1j5-M1~Wr2h=OBghEO;g#9(F!2T^d$%n%7@ zgBZ*V(I5(rnHgf?Y!HK)As$4*F*8FVoDE_yGbDp3IA&%@g|k5nW`=YS1;@+`nQ%6U z!OV~iqTraBAs5aDF_;;XM-5b z4AmeCj+q&1;cO6tnV}v;!7(#KBb*IlFf%lRC^%+jXoa&u3}%LQ5CzA~44rT`h{4Rz z4Wi(fnV}cX1~Hf!`au*NGc!ztvq21IhRGlbj+q&z!r34OGsAQc1;@+`GvRCygPCDA zh=OBghPiMyh{4P-A4I`1Gs8kS8^mB{SPY`zn3-WIoDE_yGb{&DaLmlG63zxOm>E`s zC^%+jSPN%^7|aaoK@=P_Gi-#jK@4Vw%^(VnnHjdi*&qfp!*&KS5Ce`G(Mkj+hCH|& zh=J}y7KU3OVK`=G;6W~s7}ywWQTXf(1t@$DhLtFMPKN6!d@cq7Cb;1Y3=G^1PAGgH zhH?}>FT+w4J|Dvs6h1!#D>Jfr0t^-?d_jgH6uuC{Y81XO!xI#~2!j|4vU#EmE+~94 zhH@0XIKxI1z68S)6uu;b7%Q@QQVhW;d})Su6uu0@ZWO*O!)Fw}9D@cMvU&0hF(`Zm zh6yNqMTWB|d?kjzD12oGU3O&iR2bq=_^J#OQ21&L2T=Ix4DV6+8VrgY$mVG>1fuY@ z7@AP{+6-Gz_&N-aQ24qG!kozF=`pyX@bwu=QTPT7OHufS3|CS3MhtAAmI2&IV+J!6 zz6nD*3g47rItt&6;TQ_voZ%Y^--1Dv8*VrQ1A`?)C<@;SS(1U7VK*9o4;mjO^Dry8Bh`r12Y3kEz! z$G{A3t0BC=%)pD_FfcGMGw`AD`O)|SXna95z7QH;7>zH2#ur87qn3`$4B}|=5@>u$ zG`#d&#y3Udo1yW|(fAfr!65{)g)Ez(R4EzAs)&CN|y(kv~~5{*+6!CF9j3_%;bA-fCp zGV}~B^^B7Z4U!F#%uW|C-ZY@TdvX^~=)WR_xK zWSD4aZe(C&Vq%e$Y>)!=e@ZrFI7BZ)&s@(q%`iF1Fexq7($c`p)Y8NtE!Du(%+$m< z%{a-}z`_{p9k-&?RM5#A&iQ$1ndu;X7J6wWrl}^$sph8UM#+{&iKdCk#wm%3mL|qV zDW>M8P{(B?=ICYUnHcC9CK-cH9!fGWO*A)2PD?hoOiNBPGEXxwH8f8$H#Y)X1L>ZX zr4|)u=I4Qe+t^eu*}~Y!IMK)?+0ew;)X>z-G|9}|C^5+*H7zyO)X*{&tT8#iC^fS< z5frCJdIpAu7KtVniOD7=h9+qi#%YPhNy&*R#;IwBrskHGkT?bD$W1KCO#}tCiG`k- zp`o!+a;i~cQlg=;g_&idX_{f8g{g^=iK&U1i8;iYlFU?)6~=nWriQ6z7N!PCMu|xV zmWin;hRLQzY3AleMk#4#Nd_ixM}dOMQZF$v)!Zo2G{wXu%{bL0F)7t3#VExz%_7Y( z*)+}A!UC+kxU#q;H5X*QnVz|kg^`5?D0CAo(vmGqOp}e%Kw*%QWMXNWY-tYG0P;do zW(hc)O!UkxQj^TnQVk7^4U)`~%q&w=EesPalMPLcEle%Vj37~8QBqWz2iiKHR+N|v zNzfL0W)^12=7xqA=80xTX(owD#zw|QMy6)w=BXAYiD~93V9Ov;6Q7))2kN=&W$2k2 z>KP^)q?#F|S{kQX7+V^fS)`eynpmVHn^+{LT7Yr{nnp;ZiK zg3V7YDUL6$1cjcFnTcLKU3FnQ4AYELAkKrwE+}Pyx08Yb&qB}Cz|hRV+$=TGAT=#DIVsu9#KP3f z*vu%|%+%5tRw}?XgHoW0o}sZpszI`Onx$cifw8%nk!f;@Wr{(np_zHAscB*&B*}tC z;=m&>dKr3_=6Y#{mX;}LmWh_BDaNTLX%+^i$!Ug$7A7faDak3xX^>P4(gR<;1G39l z&&b5U!Ynz(FxfoG)XdP_)WF=t*vQf>Ej7);(#Rqak{m$#V0IZA8S5FFrdcK#rzWOY zm>49Qrde1frWqM0Cm9(S8mE{WBtyzZkfy|>98j(`G%(UjGcq+YPffBkG&VIeFf}wt zGB-;#H%>OUG%~cbFoqV7ut)|aC390fP@=RjOEFAIOSDK!H8CcVWOd>nOSnOWul3(nW;sZxtXO!vW0nSqCuiDBoy;f%X2c5 z^fL4;^gxBQc~Wvxnt8INVWOddWwLovqKQdrVp^hwr3p0O=VazWa=p2psi~PMC{3GM znwY00nHZZVnx`39n3*P-n4}sSra%%BT)nY@Ub0bAqPbDBg|UTUN}8o%TB@0`F=!LN zX_}FNxiK`<;2I2#&Gk%@lTD03(U@eMXklS$oN8p8mS&z}WNc)am}FrAN#3B-^FiTd zV611BXlRsVo@AM5o@i)nmTa7yoM@1mYHDm|ZklXrVhQnbNn&v}D9sq^r5Ktg8m5{X zC0Ur7CYoDV7$sSlSehkTm>Z;;8yXrwGB&)rGPE?%voJJBH8M&vG)+rMG&e{zF*CJD zPBAr4GcY%^FikOmI4C|buQ(Hw`i=E0(=5`G(-Msg3@we#&5YBM(~Qkb(vmC<%?(VG zElrZZ5m;Q30*M1dV?C496k`jsG}C0mL<<8@o;Ei!G&i!aFio*EF-uK@I0@c}Ff_H$ zOSUjKG&M6aOteTdPEIs2F|`0SA`Fd<%@ZvRlTsl%Kr5#}F48kLNHk7PG*325OGz?M zwlp&|H8DvuN=dUYF)%SnOoNn8@P>n_iC&6vim^$eaguqOadNVeu|aZ*p{Zq3Vw!=G zQIbiL0VGIK9AuQ1YH6HeY@TM8YG#(41}dTqlG2PUEt3ol3=K>nZ4~fS4=C2m^%4z@ zlPwaHOcM=FEew;)j8ZI&)6$GgQj$zfjFZ!#k(LZCz)Z~b%#6}ZjZIQ5(~ONwEe(xQ zEDa3IlhZ6rjgk@#lF|$yRR(ws8>mjU&`U{6Hb^!%FitixPfa#XHM2A~F|#l-O)@l3 zu}n2HgQ$ncfvJfe$S#xQB-11_%QVZ>L{mc}V?#5GR0~imE-^6`Qr>}DKKY;^1+`+5 zEewo|3=B*xQqs)LElo{QjV)3VQ4A+=v|NlIc7s6aI~(KAj2wJHqFk`0oL zERBBpgOpKl^?Iq6$*IW}$(9C*NyesW=H@AuX(pDIsRm|=sRp2Z*Wg44Q*L3PXKH3{ zU~Xn+U}X{@aT9_M|fSL)Z$%$sk7HP(2 zX_hIe#>OcYDQSj~_=PDqGu1OrGfqu4OiMMjFfvIqH%LhVP^AafO;}8HrV~puDBb>4bW~lXtbRX+64!@AKLu}je^7Uf=09%L4nG^ z03NMogm%HpK;}T*PzPc|yW$-nHdK59hz)W$0|R&@mJt*o3=9m5K;qD@IA}za5!ww0 zjdn6ZyWpUi21Zb%F)%P30jYuLiN9-Sbuu8`?GR2C+ej z8WiRrHq_0Fkl3q0Y-m?~1Beanrtbu?pM%uZzSsLt@*5*wAjh zD~Jv4())tgpiIEPzz_mrgEBNIoIz};ndu-lbV#lc#Ddcg_H@p?Vj9*wAUWl_0h~B)x3~u|XM;fq`K+hz*^3I|5=mLDZZAv7u9NmqBb7 zi1=*~8)_G*n1JO?P|*NmgOUi04a!b1HYgjw*q|f`V}p_oj17ur7#m~_j139`7#rkV z7#q0^1kK>V#6h!jFg9rB4aP<;Pe3zfFmcdq7>tcv9)f1EVB(+|Di|9y`vhZyW|m-V z(5w-R4Vn>xu|cyvFg9o=2gU}?(!kiD85kHFG`j+0gJwQq?ERp!0vf+Zk=Un^*cXx5 z*OAzFk=T!s*e{XT?~&MFk=VbH*o>gO19byC5}Ox^EsVsLL}JS$u~m`S+DL3eBsOw6 z2Ac1Ig@ZGa8gQ8gb&o%icqkG(8i}2V#7;+I=OVF-k=T_;?0O_NxU7TP3oh%R?1@Nf zrX#WEBC!`Eu|e}xFn_H_65oo%-i^dQh{QgQ#6F9}zKq1aiNwB-#D0pzevQQbh{XPm z#QuxKW(Ji5Q2%lwvH6kMqDX9MB(@?FTOEmwT&@};iCZGE!DTGeUT_%;WqTv32}ELt zBe7$V*vUxjOeA(b61xfsL}I%mv3-%)!AR^#Bz8O!I~9qYjl?cQVwWSaYmwN^ zNbF7|c0Uq(DiV7(5_=&MdpQz&EfRY(5_=~Sdp{EUC=&ZL68j<&`#KW)E)x4O68j|* z`#lo-D-!!R5}T0)5!dWUY+fX`FcMo5i7k)BRz+fKBe4yU*yc!VTO_tK65A7r?T^F` zMPf%Iu@jNl=}7EcBz7?pyAp|AkHl_8Vs|64CnB+@BeCZqu@@t;S0b_3BeAz4v3Db} z4%BeBmRvBCXN zs5y6##F5*3uaLw)BC&rUu|bRdVD4l?s`ruGcp^yR$bC{JBymk7wgD0wxm{<6B<_mD z_CaC?BeA29*vM_U3?y-4(i^V62_<@o>DLfrJ~3)=xt|y}klMGR*7#BdQW^uT@PnnX zHY9P-N<5hO6eMxvJ`{M|2Aa-6E8Ae|Hz29sj>O)F#76EnfyZ#5=3GWn16q3qGZQ?9 z16A_^Neyye=^K*xUnDjQQkvvOVhbU$k^4sqNaE^9Y~-;WQzUU4BsOxN$O}n45Qz;Q z=Yjeq9!VTL&I1)k?gy11sR57kK-DxMiFYEgCm^wr`#$rK#Frwm*C4SsBe8cOv61^b z;PD@*8_pxCxrW5Pi^P6{#76Gpd_oc*YT90M}eM9*=Ifl31dWiPGA(29`CK+wu> zSXtVDBo11k4HNG}5=S04n}Z|{TJa21zY0klJXQ}a6LuhpBaf9GLlQrW#J+;W29MiA z&3S|*jyyj00ZIHj68j$#n-!^S0j*hvxfyv(ObSVjA`)8ziLH;sHbY_~kAt}&iF+fl z!DIVSzeFO5Cm^wr$G-BA#KB|xP`x!s;>}3xE+jVcc-IUh@%c#XWk~F`NbD_0Y~(Sn zLrCH$k=PfI*r4^?u&}*{B#u0;g*^WM8A;7ABsL?`m<9(D8+j~C3`txTiLHXf)<$9* zA+eFiuN;uX-I3USNbFD~b_^05dCV#cNgR2;paMy}9*NzC#6}*cnt~)g8;QLLi4C4R zfTo8HNaDz2Q~Qv_k0PKaVHxjac3m97ZN)Vi5-E&9t(k13l{z#QurIW|!K#6%xA|i8z6cRfTiJgJO&PQUGA+c+b*eyuxZY1_3 zB=$@s_5vjKawPUTB=%M$_8uhmVI=k`B=$ul_6;QVeI)iXB=%b*_7^1fZzMJoJ0iX~ zk=O!AY;h#E91>d&FU^#6jmr!2D8&B;Ja|?m=QB zuNj+#B)$-dy#k579*MmTiH*EY47{cn>i*M6YAzwMZz8cDAhD6xhP^`)|BA%^gT!V= zYM*lKBeB(x*t$q;6C^hB8Zaj$aZe<601`VKi5-W;Mqc-ogCt&z#I8bO zHzKh+kl4s;y`~|F&qZP{L1Kf>`+%i~O-SO%>$?shi62K|pF?6_MPlDUVk58VdW9tZ z5sCc+iTxjm&4$!IM_$Jzf+Q}D#8yILYa+1?kl4s;x9pI_U6I&6NbF!Fb`%mDdA(K! zl6XE6y9|k4i^Oh0Vk587nuH`i6N$Y5iM@XyD zED}2fiJgtaE<$2gBC#8g*r4-hVELsFNqj02dkzwNF%o+f5_=;Odj}GGKN9;G68kI? z`w9~KHWK?068j|*`vVgDI}-aJ5}OsNea?f#7Di%AA+Z&a*q}3aU}2(OjWf05WM9EkoeHxgS2i7ko5RzPB_ zBeC_6*rrHq8zim&aQ%)*@+}R0f{{w zi9HXAy%dSP28q2HiMl?MUmJtNNi;!wiXiG5Q%Mp#I{FbyCJcCk=P+f>}Vu*5)wNTiCuuiE=OY5A+cML z*gZ(>$w=&3NbH43>=j7t^+@b(NbJ2x>?26*(@5+~NbH+P><38f=Sb{#NbIjj>_13s zW-dg0aUrn_9-OxMI`nOB=&tI_A?~* zTO{^SAM;E@S{Da8VHQ@lmmrCQPJ)GrHzA25k8^_e??cBiKqsrh)Xzgw4>|!ACcXwq z9CSy77}|Q5_<&_8+i}xHYD-ANbDm>?9)i>OGs?weXkFY#GfOv-yyM)&j6I_aP~wJ4?tog?`e%g5>G{9=OD3* zk=Wq#1fcFm-pAU3q^2KbrX{KP9*jLB=&J6_BkXr@_yAjNaBx? z*sqY-ACcHUkl4t3RN0WmxOkD+B1mj$B(@R~8+l)<0g|{m5__nZ&&d1ThT<6rLw#NM zNJ~H9^Le1<59q{pSXtMDR9AvdR)>ktLJ~(lH)92oIOwEunEGu<;(L+U$mjMTpOtY5 zNzF|p_5&pLb0qdVBsTK;Pw*K&P=7Ha)g4?&Z15RAP&E=r;>dH9YDnU`NNf`%wlxyl z35kt-4n_cycsLRpe6|nN4XH@tIY?~evoETU#2b;=9Z2kcB=$5UHu8BFOOV7@Be6Fj zvB78lK;3o#NgVl%3-FmgP&HSP)Z9U0KSpA|LSiGIYw-g~{67+#4XGaCMPiE}v60WR zP(l*dL}D8tvCWa#c1UdG^DBIi#DkI8QAq4WBz6W88~MzNG9>X@Bz6lDyBmo;35kt- zP6hbvAZR!*M^dv6i48tS2&!fek~s3&6yS4&plU86skwo~zK_IyhQvlbkKzlG_-`aO z6H;BwiNqE_Vk4hHA%`Tcip17IVjCl|t&rHr=T3MaiTfk5!;sjqNbD3OHu6~$pgRFz zWmhGVng%3xI}*DOiH&@|#2h5?#YpT`NbHSB>>WsK;xn>@);3%NaCeP>>4C?GZMQCiH&?N#0(_y`AF<#NbI#p>@7%aY(FG+C=xpciJgqZ&O%}rBC#uw*!4*4HY9d05_<{~do~h#5fXbP5_KQcahjnkl3%0*q@NtKatp=>o8#MXGfaP;zMGKBC%zV z*vd$3EhM%f659faZI8ruLt^_Pu|ts9(MaqhBz7hey8ww@j>N7*Vz(l(dyv?Zk=V14 z*b9-^E0Eahk=Wai*n5%KN08X3k=U1z*f){b50Kc;k=XB$*k6&@e~{SBNb^}-NNhnQ zwgeJe9*M1n#MVV(n;@~Rk=Ra1Y)>S101`VKi5-W;PDNtpAhC;)*i}gEMkICz61yLX zJq?LH7m2+DiM<+$y$OlE6N!BQiG3W2eGZ9z6^VTZiTxOf{R)Zw5sCc+iTxjm&4x6e z#f!uiL1K@zKKo!k_j2_77RdVEk$is3==xzu8X$H3@Mt*(2{+_J)mOgNM8}X(;Zm zL_Px+d|wH)jwnN_6Kj#!El6zSGyEqZiO)o0FF;~1M`Eu-VvpAQkaRm*??b|Y7WKXq zQX4=KiLHUeMm|g53`yJ;iS2^K_C{g{A+eFq&rd)SPe)?sA+bx5*fmIO^~ki;hV7m(P<_Zi(o5`T)s zeuKmY-?Ikw?=K{AKR2O zs+(x-cUqW_Z02a20g~?qTbltnj*#nRTC^cS*M-8`LZE9qVQg2Vc8d=Z8@cX_LK06z zVrL++^O4xdcjh9`@3$bS=|*BtLSoNEVlO~qBhQ7cLlWPL#NLC%K8(aZg~Uc4@4A5` zejkbb42k^~iTwqMja-+3@70C2@i>v%T>?mKaU`}J5*zuRN*yF|V8VdkzvC`AjhIJ-pEH*@&cO2ND~6 z4=+^BF(h&1dnd0TiQh(IBj3sU5=s065*zuhN$~x=P`g->=0tdq*uqF`DI_-X{gN6; z;`&HzKEDY5=XvAvIa@K8HwG6#0KBz3pEG% zK40X!BbOnmUyH=vg2V>j?F%*M5Ry3ZeUTTC#IGZzk#3hc)zXRod{x|ka}l0-5*Lx8m4uAM;?b6Y;93u z)+&$A$3gN7@_bw<(zrwn5<3}*orT0ML}FJUv61Hy+K|M1k=Rp^*t3z?i;&nWk=PrM z*xQlV`;gd2k=SRD*q4#mw~*Kmk=QSg*zb|p-;mgUk=QIqeSdBwwh$6q5{a#V#8yXQ z>mjjCk=Qm!Y-c347ZN)Vi5-E&jz?mrA+d9j*d<8pY9w|O61x+LJpqY59f>^;iA_v- zMT{C^>Sa>R!KI#5abo%-xXdI*FSW{T52SvOKN33(i5-i?PC;TLpNTXW?zAN)Jc&_* zD_v15%#r(&gLxhA=>5Wwx{ucP3lozjAub_Ig3f#dl^-ybCJYP=91IK$`xqD)Kyzg* z3=E*_;TX`>f%X)@)VV>`fYhR^1Ff%usRN~BkQxw1R|lGlgQ)|RF(5S{jIJ&O$$g%9 z?2SQE2ioTVG7E&!%>$KBFndAkzd&k07+qZsl6fGvg4BR8x;oHVoG|l1c@?AvgwfT3 z)`h{;fyReGYCsrW9cT^_rVdozg4BR8x;oIAUodq6c*120l0QIuK0s!HFuHl5ybLoB zv=$De287YoEkQC5)OH7{0bz7?pff~a=7Hi6qy~i1)q&d2Fm<7L`~jN#gsB77Js`6{ z7~MS3S!FPF;dsmg?R|!+1MPnSnFYe==7H`whp7YgPe5uw7+u{Rq;LVvCxg_0FuFR> z*{3k`qVc#7v&=7H9sfYg96x;hag^FVX!AT=P2t`2l&E6ltkJnjRnAB3q(#-k22*9=n! z%JU#QK^Wa$(AjV>b)Y#9kQxw1S7(Fd5753SkQxw1R|mRN9%deBy(mZx2&1d>K{5}t z&H$tagwfT3&YFdpmx;%}pneuiT^1g7pgD4wI#BxzWG4ut+Y36=4yF!N7J}4(FuJ-D zB!7U;C;xYVgb>j6UQ3_<-Qs97KiWF9D9L2M9)*{cH$ zOVC^sNSs58i2+o1f!b@Jbxt5ZfaVIpYurH!pcr&kF=)L#lnXjS8_Wc?6<}tA1VH_V9!N1U zD6l}4p8Uebl)6pCI(O&8e|@<9gEF8A07qFd%rg*XU;v%z1u_eS zaha!J!Nd^23rWwgb}TmYmP;`(d;(2$gABtHeg&>f3|~Yb=E2&r*vy-$#=u|$E4=WS zmlDOquz(d}9;_XU&Ah9c3=E()7Swq-^9M@;6N3X2#5`C#7MppT+6)YmoG{ZEaGK|m z#Kf?LA7UOX?y;GtWWvAzS_1|%5m$WtC}d(d0WGg!?O1H)oi}4(0Nv9_$h-q(Obkb$ z;RkESVl(f#B?E&s%rHFh(Ne?20BWa!(jTlHi_JVGD+Y%BM40!XhKT`m4l>9*SUVP* zc@M1^7(nYIU`FB!KZiOd22ei`WFD*?i_JV?YvRh&DRqeQ6xNQ#W}c}v0|V&pKSJ)i zP{+jZf&-FXVC`6J<{3CJFo4clAY|T-c7%Un?O1H)r8+P$1j7OiPyF(9Ao2&S9gEGp z9gYkPp#D1{_xW@&F@XB~p!k5bW3idX<;1`MYAX^l??o3A!vtnX_`%w-*vz};%)lT3 zGYpS^EBcriKQ?O1H)U2tJw_(6nu4ilIdKz$XEf9tWe*P!j86RyO?$CHVO z_-Mpq-VIjs!NdSMCm&>9J0Aa@^dv6)PRu}rALz_1T<*K+$-n?wKTpVg z4`whifX*QTxev700GD~+y%-oIVTR$!Zy#nM+JB%mAh^sE@Md5*K!kZBvzZt`V<8~- zfzAcPW!?pE1_qG(VMgMLkBB);3?HE5)S&&dxXg?8AufJB<}xvW)@6a*2f8x>mwB6g z7{KKuA@|*w%ftX0a{`$MI{OTldH%k{wZ~cJBjN*eXA>^-QhkZ5k2K~Z$`{Zc6kO)b z@+GeRsF{zbKS1ZZ;WFPVY<}JqK-RrMEHU3 z^1|i5SwRd8*v19W%Rh$|ObnoT8Ib!xdy{aPcQ}Z+^0{LLqI_P7$G`W3h$~NbtU#2f ztMQoko=Ed9Aejf+Z;#8r|AUBYpT1auXrF@aSixnUVlV>(=<)=|yEFqCLJ5kALq4 z6PI2}Rw2?0=#DpB?)wtVzyKNxCgi>utC$$3K>Kf?J!`nkO9&;-eL8Cq?%R&!Ur^f@ zR!4x`R2Is>kjf5XK`=}X)P@4FL2Uw%%|FG2F4ItR%bhEI%43>Gj&Q1d`s(A+9g^M^r;iHQM}A3<^;3^EHwLz`eAF2e;T zCWZ~%kiHq{TnAA2f!fKSt}e294SY-ttyuc|Ihn;JdinYaFkon6Zfb5~Y;10-pkQiX zsGy)=WB`&gG%zqTF;P%3G&eIeH3NwxaMio|xG{nbbpX2r)TfRE`y0w-*aA8XkQvr4 z)?ir4una5@8fOFf2Q)qgqCw+YAR06t1)@RYNFW+C{sW>x<2E1~G~NQDLE|JK8Z^EE zqCw*lAR08D0HQ(T03aGvHi2kRzZ*n@`pY01)XxRcp#CX{2K6gJG^jraqCx#Q5Dn^o zfoNFT0rhu4d{93HM1%SlAR5#!0MVfKJcx#+AyE4n#0Rx|K{Tkn3Zg;nOb`ufAA)F5 zyADKy+A|;;)Q$qtp!N@l2Bjeo4Qg+IXiz%=M1$&g5DluAK{Tj71<{~-(9DscyQx#C z=I2bMPNPmI9*#~XSx`I3%#neIqtgk-?hxt}o}n>Qd4`6iq@{+Yvjvm1u_Z{QnIppv z<}_}W8BT7@4BeC57#QYqbV#n?SibvPhh(R)rN&HUOG#Aq9ZoZZRw%91oT0QrXr<%~ z3H6!GGn8gZ@Nmv_(%|4$(&PYH3hJBu|Ns9#GXrA{0}mqu==>L0dJzTXS5TtmQ$P_1 zrDYZ@;-E2jY~rBvT(F6&A(;=lV-J*97#LU>Gj1|4Fjj+73(O@@nu&!ytcj6ABgH$jXHtUE!%EbQKo85mf1f!G}E zD*22Ith+%o0zB-GCo?dx?g6m{7&utKwQ;8|0|V=R5R>f!3nK#$>p{=~D(qmBk06fe|#_3A(D9fpN|SMg|71RTUsX5EG;tWGSc31V#o%(6ku? zC~Yv#0o@=4F|`C@Do<$y0|R3TNE0ZIc|i_lECX>FBN#Z%JQ)}mLAj3sl!O@PBr!2C zK(zNFYwrcA2Tkno74tJPF!qD2c4A;);8l=gU|^g8(#06fzzqsc{xfWh42+P_VPIeY zr9j3xJZ+~L7#J^rOaTqW^Mbv71#APzb%Knle8Sw!e4*lki~`~_ox~X!m{b_Jx$U@_ z`4||Op-c`21{N^}W_r1_oAs25xQ!1~y?vW2hF8G>Q6}S2k8R21Vn?%84wL}6^I5|4x&M( zfM^&dMLi1x*fwwzfSG}j*`1A*W0L{{12Y#p>oVq(ml+sXn7KJvdE1^bFfj9Tg4MAw z3vjVA&ASaMa@bjzS-GL2dl`8kEDVxafEOahEX2pk9pTN$z|70R!psK~<>zPR+H#(O zftg2um2F`gBLg!#6GQ_GGp`_o1tyuDp;}nLToz_wAy&;4entjnU0#@wh%hTtxFyKp zVj>V#5R%zLl+~SCoRNXqhnIypnwgc$&=lklF^DvTWKI%ib$5Tmz`*P&0TBU{%vqAG zN@`LJ49pr*U;!3pO=(uuUwn)V%vzv(RzTJn%R;40+R5b{fIYXV*`)U#+19P|rtGiP$BLfR_ z91E*6XgrPCSCf_h!%~pz0<~DBd9)Z9nB}yg`s8&W3?!1dTo=M)u0-}eBxspy^;jS* z7G_UYh&mR~sybE%7d{3CRt7s>Mg~>}?RF3;ZUGY6`V~Z`b%I2qz~Z1p%F58T86>`8 z4T#it1(8!1gGkoxATmi6M9vEb>0-47kqv4fasjA>XZQmuO&BBO6Hk0N9+aUm$Vm(;#wn zDTwsF3nIJCL1g{|5V?^Vq@FPaL~e5ik)2&2@%u_3_PsO^S!@Cl@q7p(i@`Q3HG$X~ zdqAXk1V{}>KZty<0}_d<2eGX>KxA45h?Elti7R{okySfDq&L{t8<&9CaV;P(gN(4CoUj%0w;)^0FM2)yFu*F;MBV=0mQcJ z1(|cO3PdKbg21YLLkF2_SMi*k6GkL9$c8ey!}TCi<0pvZRtAx-B_MN7ff_mt5kVk!WGF~H7A)=r&LfiGbX(yG60ZmbkuShG zQKA9F-Vcst{%0WeTyO}i69$>H5p2RHaO`AU2FYFphl71ONOo&9NaSQQh`bE;owziJ zJ@*NSTmX*Q5<`$mxl14s#%~~U3E0ga`9bW*6G7yZIUrIIoPX=U`7u8aq-*6{koXK= z5IOxfi0q#MB6ZJ#$SQCM1i64zT7qrq0q2Wf;Jlm;&YMr7K(fr>@W1*7r0aSQh;-!# ziQ9u?O79U!wM71~r8(SU_=V zIgyExfz?WL8Uq8Xbv-C-ZEo-|FtFOnfO3J|c_BsyR{Jb}Mg~>~6;Qe7c!8Udfz{~_ zsH|{)ug1W@>cR(#N7pb=dFy5iO55&BG8q|IJ+^^j*)tlX-s`eH0|Tq?CQzyCrwOVl z{C^5CFt7$lg35$IRyRfl)}YrM3=FKnaUj2i>@Q|yU=3vi<+3mbE(QkHaBfiP7jamW zfq^x0GAJISEI|H`Rt1&zG4nxXQS3WVNf@Vdl!1XY{;mfj18agI$o)yGpq!PQ07_9Q z`eBR=tf{^ry=knVl$_2U%*eo+Q3Zi`TBE!JpMh4byM!`4+2G$Gs1_suNj1i#XZ4%?`e+&$)lNmQGXJBBR!Z-^g zH8CQc+>>kFZ=?o04dl~ycId~r>Zl%JybMal#~9~=%G2YFB_O|_V0-|o z8Ba3ufRf`W#>Z`p46LUa-D(&aST8ZUf$GT1jH{0^FtA=>JP)e7uQCcbFfy=SXZ#5& zdu}k6gA&y(#$0X&2G-k*zd=3UyNs23j0~*z7%M;(=Y7ULP-*di@gT^shm3bXvH6Hm zvWby_^)X|9I|Bpj6UN)1g6}EgN`D3h)@O|OLHfQizTsqKVExW0wV#23^(P}6sJ{5c zcnK8b{~1|%LFt8QD=48fGo_wlU|?-wdJbv=v@=zL zK2tuZKwHF=398=~GyQRAU|?Os6u6UtfpsZUY78R->k6hRp!#tolRBu-S;e%g9u(6| zQ$WqIbxa#UCEj|bcc7|!1JkOR3=FIrnHKgkFtBc6Ibx^^+jp=$U0|V=J zrmcS&7+7~OWrHGoH@}c`dY%gM1YZj zbt!W)C{r$DPAg(yU|r6957gLR!Mq`mk%4t3^D$7+tzupb3ar)4$3cyuHOyZ?!Mc|D z3n*OHF&~U%U|?O(>;;nBz$^{QIUAWZK^5L6=0s4M-^{!o6f0YpuYiJXEAu%}b7>p% zHwi`t*6qy2peE4{=9eoO7+7~QZwED&b}>hSyt0?s59Ggn%r`(uV?XmgP!Jqo_6Ire zAoE=lMh4bH%#%Sagu~2cpe%ZXc@rpkA7`!rRYE72bwIIll35JYq&&skqW~(;nC%%E z7+B9RuK~4K&NFv{8ijY6`$4UZd(4_38}2hFgNn5W%qv07%!kaMofsKdA2F+gQqN;% zMio#g#XKKWY(HgI0kyZDG2gOeWMF;Hd^?1Jf%OG*AE?fG$@~~p-@am=3`(Z2nO#6t z$Qx!GQ$_~Xx6C~@j0~*rm`}ShGO)g94gn>U56m6mj0~(FnZrQ&{S)&RP&4*3a}h}J z3-dQn2Kve@4D$3h=JlY;^arzRDQupRF?l|76uha4Jr{g&GH`Pl^&Ma5)2Hiy)0s&21g%DH7LXOvv7gR z=6ImXElG_ZHouHoD9G0n|+&`CPIw+9mu}Fhb&wQ5UAi)JJx}Zk%LKc5e zVpznIaGQaFbur7_LPiGGB`kWNFk8yPn!w1wx{M_dWbJYmF;GpplBMqe0|VscOv%H$0!WuUTrBa1C4-Z!z7{9s^U-OREZ z*jn3qPoVzK7)u zsO;IxQZSW)fps5?C#a>qpCt?w5(ikCKrP>cEO$X}Im9wck%58rFv~4aR2^aQ24&cz zEQdkm#4(mVpnmjm7C|#c2G$cSKS7nvNtT(Q=I<$%a!?EJG|Nv=GxH3~Do`8pEX!9= z9dM3C0@N=#&+?8PH1f+b7nB<>vgCtWI+s|^#4<9lUS_!kDxt5iG=QT2DvNj=BLnL- z7EzEpud}QMbusU=FoAj^4_JPJV(cM{1E_iMgheC=RC=@IfhzB3EFVB+)^iqjQ2F_S zo<_AJ6SJ+&b9V0**p3`#*C7_WiKrY0tJ z&_GEW(;ZMRp_eI1g^_`EGSf`Z_$A0(@fMJCb<_hG7+7_yKsBl!XlW#?Q3pty@h4EK zF!=>4&`g6t(QnoViWGA(P)f200=0ZCJGdAaSRE#Vnskn#ptg!rIH>M-4g|H!Tn$0> zh+8J8;&49*%E6x3LCp-GliwK_SW{U*F;>3@R01_K`hcpV7RIfhJ6%9-L)Z_b_e%^=$VthJ(DbkMS}ndF*HW2`XO? zFv@@$SqB+&K$++eV-l!GahUNE$azN?zkzxsM;R4CRsAu>>!4P|amIR3(S3q(2B;c2 z$#@GCI2RbV#4<3jy=D9ZGOUZq0MxGUW?BVua}U#AP&>1iX(taO18X0XIY?hWQzvNf zWdc(ns8KhO=`^Seoy4>iq;E3QcTg2Nh3OQ&c?M8_fghAox*4CVGJ^UG5}?LbFJlGBg?)?%L4Bis#-K0;2DW*O z1+(G)#Ah$-0_Mjs>p4$>Dsf>~P!nAI9jNM%J`QRk%Iks}$;!2$x=8&$C?#mug6z__ z1?`ytIh^SZD5fMWLFq&43aIs^z8%zL)L;RX=$dw*Q53CHpcJ6(0c!o}w1E24x-UR& z9K9oL3=FLLejgYZSPgRfq3OenFPnjZ%_0OeHsmA)n&V@^;VsttOp7=f7}%aMd9Pu> z9=OP!6x<2Q9-=Ej5$GlY>WoER1`Qr&NO^-=!;H(ffeKQlO`w?A&QuF(1MXl_24$d~ zOdg<_w^oM!sRt5&v z|I9kgj0~(zEL%WD%M2EKP)eB1vK`daoyYPP6j}3G`a!+#1uS0=GBB_%WLXKS%onlz z2Kj3-%VJO^vVY(K;9iaZi3YKV4l3mGC3@Y1Ku_S{U+N)Xe zLE{%|Shj-X*0QLA%D#0hRiHv)JH7E@6BVhhXZ z97YD#tt_3OQs+HuA;`Y(taYG9V+Y$0P@?W-n-9u9liALKu7m(3BmLcfK#9NrRHzuX zgM4kW8KlqrD5&dhAq46lS-tcF4Sd9a5|E7~sH(S>1{EO=iJ*Z_$3vjX$|)NZeqP<6 z`qK9*NLPR+s2dgh1=P-nN&z)zqh&#}sp%_0!I2RG8ve-n4r&hMUIleh^Hf28DSQGd z0!n6pTJqH)AeYpf2ekuhH-iR$8X4^>K@ASZdQi{4hcO0JN%S(RfhwK}j1k?So*LtQ zP)#+3Q4AF4QyCv7F@n10UqBgl2IEptZ)_H06lkPt4r4cHL|`rB6HrrO9b+)4E4iNW z8z^2kFjj#o$c>Cw4Hy|%H#5!wRi#@PML^^3TNyh+UAu3LyNnq?ea{Chj0~(l7|(&) zV?P)InrEc^lLTWDWxrB72$7gT_w}GxLHn))D4^pd#}evm_|fJz+i#s&}3- ze*(28UNFA~wL)Gp+c7XQu)b!#2rBEoGUtK@j(;(`gGPV3JIpc(6amLsdO-;Nbw+tq-g z(EcT8Y{roZG?wFf0hCZ?F|GkE00$}LnFi{p3hW1sxCnKER?~n)#RNd5hRkbF+EUU4 z1+0b`DEH`zgC=B5T0t!gt29u#<*-1Lk%8669h9ZR?t=zR6MR9v@ho{zyLc^Q7ie5= z9itOy;CMZwGpKiTl+go}OOG+egLuaoe}l#x&NFTUwW}^L7J=H@7a46pCI4;4EKp{> z!^i@v9PcvbfV$XE8IwU7;u)g{C_0`q&H}Y5KQc;!nqHq6Z-QnWJ~JADiuOjPOCZNJ zF-3ypnwfrpdO4GsPJx=8Q<(Tc)$dd$Jy82+F;hFJUA%1%G3v{JvKA#1r7gh zVLAeG{8pw#1q=+VhnY%2?eHT^yr53RQKsjh;JeJU8#F+Bg=sD*>0f2~1d6}MOaY+e z_Jrv@s9b%@)C3wg{mir;6oOxvYC-*>KTM8&pxy&>8z>)jF>8Q2G~LW{pr&&_a~dcd zCo{`~`j<196W@bc^UTvhortx}Q$WqAP0Ws0z`Z|HP)69r{1`M3ag=#sAp-;JG3FyD z85meEGAn{w$(NX)nlUi2-ecAQb*Jt#zX3(SJLUq=Q1^T07|_mnP_(lLfZ7xs>p^yK zrh`giE?ZFf$h`*C4d%HIYM$~sgNEGrCV|>k{O3WWz-CY~7t{ca^$TqTWg}rG(CmoF zUJxl-019rg7a(7VuL3orB%XreR#FU9dr0j76;;wopb-k09iZV6*?3UDN^SwDgDEcs zs)Q75K}CTU$}^Y!lAgX;K$pd@Ti0?MC;Q$Xj!gF?Yi9@ORxegJZ7$X5>r z2G&qpPzy6`zd9oWTlj5IaT7HeRAD3=G%_-1-V@r zsP}CD0Mt8lr~|p$QLhLz`aK=gOLDyr>a4mQ1Le{@RU<|Q)`DhG1H9-fsG=xIk!ECI zEvp3;DV3fe6RP%udKA^Rpl)og zI>?j`s)P?QfzAMDJt$vx zQ2bqIUIuD_++f}XYGB@E)<4g{zSLQm9lYTHC1hwsdGv5adCI4ma0(IybSad+OLKBNHC>Km; z`3jPo!J-UmXU$~E1x>5WVkrPs`LkKJfI@c;%V*I1gStRbk3scNbRuX-GNuZYFk_uT6Vq`wLB(NwKBxpp zFaY%<5+{OM4oMS0vdOui#ze|;P%)e;3bHrtBdBwkUJOcq8HOPDXJ&#DMOFr=fXEI2 zC9|9YPzjRT0cxw{rGO@9@*6=N{(^s?Lb^~9WLJ>^sD3M62TJ25cA)C8R29@1DoX&( z36#fxn&}m{LG@MTbWoS7N*h!WRy%>8$_cFc*RUv(h?I7*_jHaLw^9hXEpcd&w#v)K-a1x^)C^9B9hJZR1 zQyAkxUY^Rh7ZfYg7>|N->U2gPPzs#EC=42yoXOY^8n2(l=m;87p3PVWnz)+7I0uw{ z=Q1*YhJEKTN`S^@=QBEjO1A}!UqG&2$XEulVG-joaOKV@3ThNAVax95J4xLC!Q21knI{H2WTANI%73xkoyKB6R0(JlW`p=-`!$V=wbxT!5s&6 z^6xON0L|;&Wjqhcb@v#5f@9CFMtjMq3Cc;Y7#ToAK(877L8ZnU#s*OP^ey8bP;c@b;}1}0^F5;# zsPg{6XaFi(KQdm^VqjqX#5f03mVag}1f``fj8&k%{a41x*`UcA#_yow_dBDS0%-Dv zaVw|_`N`;*#>l|>i*YX~;(jyU0+qXe7&$=k@RzX%)Rg+icmUM=`_EVda%Th64^ZXZ z$aDvkvzwS6f_mP~OrSehSzDO4g3?(l(>GAUY-1_`W%70=8&I<8VB!STE1gX5K%v{k zGy&9->t?b8<^3KeS5OG=WJE)HA3*Ef}E7H9x`8q02pUIS&U6?wxUz!j187`vCDT1naj}Z&C@4v-W)cFGTWgrkfeMecOfjHZ zXC2c|kXP0-xq-TL8<^@r1@uNH7f`a<#PkB>z|BlwKn>|FOxB>)Ra==%Kt;(mCOc3( zY-idJY5?wFiUCc7>||O28oJuW^c<8eb~Bv;^|1Fay#@8!_c8^7!et**A86!iKa)48 zRdRr77bwgQGHHSa^8Ej!Z0LpAT8Kpo8d>3Ofs9m|6(GpbP z?_o3srL_HwRiKHULyTKN{r01bPeJ2GCmDM|Bi5%FZ-6HMPBVhGyt1BQEC5Y6oMns! z^_k8wx`M`P&NG^TD$EOv2B7lvBI7AgC3=am9hB;?FnWVx@G2t4dV`9cn~d6^#Bqyp8mLmf%_s>P5xUE01nPI+V|)j4^?k-V62nm#kCf!btW7=M7~X}>a_ z0?m|uV-y6nt9~>70TtYT7{x&4{$Ivvpa#J|#)+T~M3+kyYWwHY$yk$&0ptxPZ^c6Hd zw36u#XdHPJ(*;nOvYIIjPm~Mf(!Rwj+fQpZeOnRX9-zFx0 zP^Gn*$pkc{vV|!d)C}IruhZW*Y#VekP|bQ-3E8lpzOL3SIr zfod0%dQd(!{RJw|%}#?VS#tqUjpYqph&b@3mV?Fo&~DtY_dV2Z5s|6KygS0 zxySK1XoZr?BajKMzd^Yme8jU%4jwaH2r5>mFj|6==`_Ylkm1uA z4MB~ZnT$t4qoT7I1woCDIgDpPRqb5H`Jfise8y>@0(b%Adr%*95o0B&_Fv3+nhCVl zgK;IOE4GYr3201rCF5pL{Hgxz$$T6Xh^v_OK)vhL%ojl;PHUJi zgFTv5naeR2Oe&J`0+0*ui`Rlp=OAXWs?Q?lPYNHQjeJJAw+JJIon^%M>p;zl56pd_`1{Cw8#GAug?T1u z&iyO%5>Q?EgE;XA&7E3&6fyrzZPEb2!4vQ{m2z)L}JZMOF9*Ya8s$Rfi z1ukb<{6W*ii&!i`0}P8i#my|0plrH@ ziKpt0|hENekQcZx+E)UrCw@)fiW^9)NdC|8|jSp-Ua=U8$;#nE||@1T0? z0*f7}l)uQr59(T8V$lTEewSJHfLhd7SQ=-77HYA40oib!MGw?yyTS4ZR2tu8`2=d^ z-C~gdH4<;L1b~_YcUam%ndB~uJ}CO{u~>oR?z7~B8kY}PEJ1y|hb%3iBJL4OFsL2y zm_;9y%Ac@Y08QOIW$6Yr0G_c#frgf!v#5avwqLNwf^yDFmK~rmomVWjpkRH?vIG=4 zZ&=QPdMIyMeuH@LSSEnRm)^5n2KB%`uqcCiC?8p@Ko#UCmV=-I_6tiNXuRSpiwmgC z`o^*zRFHjVxdQ5F{$L3P4MF~5`41Ys`^|C_)ZzHUvI&%g|FUF&D&2o9S3v3IKg)HH zj~ZBCfLaWVtZJa9NfT=eC_gl_MuCcw7FN*ZldP?*nxGy-8>>I4lxk=F0m@DttmU8x z?_|vc^uEL;6^!gXT*5StUS;b^>cEC^jduc7XIv zVm$_moW-m!Kn`5O$^%OCOIfo)iG3Ms9ccV`1?ykXXwFL3ouIzqD%NCB$9*;HO;8A~ zVO0X!QYaXbDyOC7_G?%c6)df^SZ)RNyiuWz7A3y_c zTUnQY8Zp~gOF<(G+gYc8a_SCNAyB(~C+k5_QL>9w4wOZAvvPn+%ss5mppl%ttP-GH zypMG=XdGof>qSs^?h@-OPz&rfD-UQ);0~)gD1F{%?F9wh16Ds!yXqP122f&n&iV%w zsjpeDfXccztihnR=ttH%Q0@MSH3yVJey~b|Qu$BTCQu9I59>!z!TFb!9n=kMVygrd zYt3w%z!AXq7L?Ju*tUR%?Iy520M)h=*-nC*+*8?pf`;D~uRj2&lcepY1xR9e04O2-Mj+$d&|Z=Nw{N2+Es>+2(>fyDF%kGl9Je z6fP6lZ-5$bJ2{I$eVJXH*FnoIc5^-kt*qF`xdG&({hV7tovj0$*`R@?!<-?Y=G+m^ zG>~(Tayo!UGEQ*50yT(Fa!vp>A5L-Z1GRe2a_WN$fpeVaK{e2MPHj*t@)GA~(6q>9 zPD9W@`4vuckOQxCo(C0xH#pCL+V3|x6F~NT;*19sho3o_L9L!Ioby2C;8#vwP@?_L z83CHJ_`?|hs*C?}c7yWK8ZJ#xk7O;^S5UFNj%yakl#N`Gpp>%b1&CKkdyXt z9Rf{*?&neiRjpUJ{6X`dPq}zO(>Fi4f)7GFVk+xElLdN4puDPo9#lRVdVm^@#(zPj zlZh{=B)8N7#kMsQD4*DbfIMUS0W`DZED35DxmtkAfY54CBPNU;)CCLo2NlGT4j`9C zNrT3xqE$eJPMi#=&WINR4Iw0K1C^mkBA}WnIUJM~(%3+gKj|kxosW!pAoZEYK_iM; z?x6ZA=NYJ3mb(FzA1lg1MMGsEXzaA=7^nbiWGn(Xx{2`_sD;?fxD_;<)xy{Ssv5f( zuY$(7<}k{G;&d(}C#cF<&S(Z|8LeQH08Oo}WSj%??JCBbph9>xV>qZ~w2tu&$b0J< zyFddx8yKI0+E5!An?b$4O^lA9L7eT3Pe8-^I~d=C1a~t2ybWrpFfIZ$Xm>M~fEIro zVtfc{VIF2I1=aFL80|rM`6y!*Xhi53<84rP`UIm2Xj1GX;}y`5$2G>CAd9Xuwt{N9 z8;p*iV*V!MUXb^1F&2PYBX<~ML5;4vjDJ90dBS)ZR1`dAOaL`Qo-rzTfEGbAUISIk zpBNKC4d~B|*`Sj73*$pjMe>#L5~xJ~#ux=EY`!zLNP@?CE`X}4pNyarEm?mt9t5>> ze=}NuMq&Rj%7C>0WlRQ@5C0esgKDM!jMG3hWCK$eXyT`l=`^S--^7#vYE3pX%>u<) z3)4nWAF!2a!w%3YMy761mTqU-0va6YU^-$5UJPyw8dB|IDg-r!yP1B18n``7KS1j{ zdYQaHz2QD4)tk`7s?-W zL4GnW1I4jP6et2rGeNyJGk(xQJoAH~ShFw%wSz3Lg7UWYWl&PKu>dvCY!yIB-%b|P zOR)b58eVhI1Vyi-38>%hd=C_MuHQhzOK$NX+ubEVtuoIuph)*J2i1-~GN7KUFEhv% zzh|J#zs!oCTF+sXIZ9g)~7>Yb!k+ zR6Jy`fW|p8V?kkg7k#>1dCbT8v- zP)odzaVE%F{ft(ivU~#LNl+_qA|oqk;C~XM8pyuMj9#EAiYbgWAnj8bw}8e6r!l63 zf@?aX0w^iZU~B~i_Dn`T&dnn#JO!#n=QAz@ zHB}ZdJ_0pu7c+W-n#)TVkAT*ZE@iX=h21j7>!6XD<&674RnH2>kD%IqCF3zrZ+#VG zBB%kfn(-c}t+Wl@oiw72&!{7GKSVMFtBc7Tm_l| z+01ww6ti0xuYlSbTN$5#Zgc__g)&kg^E7sYe6M){lx4LRgGOJq8A1JU9YIjvySxaL zwktn@nnm*%Un@hGp&2{>VPIghZK`5qV6%JimVtrI-u5R01Dk_BC}4fSM*13neB`$! zgpq;OA8gn(#(SVDe=ef~D9J8jd=7Hu2F4Yj_R&MeS)gI7rA(hdHO?}oeV{Rdz#Z!yHsZWOISK`z4D&RZSD4C#be+W1IvU-RNW#2Q}Hd7<)aT z9+oWw2`H9;I(bU@pnR>I4C*->{OE#~G6I62Asx{qP!m;58dSE5w}VPGiEW_1vE%|! zYemWj{Xru!a<@Q@1NkqYc8bDWP|Hy9E~xrYS_m4TQ`QAlk1Exm zhJb1~sI{ba05ox}J{wd=Xt0A~UQ-v;D%DB>B^&JwP+wVx6*Ob2>jf&2^%OzlX!=h< zUNlewOA6^fS_AGepthNpE@*Xt?;+4Yd%z`7{Ta*v>Uo770nMjGt_P*0m=B;d6n`7kWK9YI zO%bPRfXao8XP``#tqSr*UOK3ZD`W*V#!LKy7#LW~y+NZlRrf*Nx!QD4qq2d~5>zO* zFdhP_YGted^`P1q7lX=@cE$iuJGX<85mZfdGF}Fy{4T~Vpc=26@fxVO?_rz{$_M?7 zxuB-v1V$xLX)%#e29)q8F>V7j>n1ZU2X&dJFbacu7*iRQK^c4+<1SFSJe~0}C=<+J z+yH7S&SXphwFG7{9s(68vl)d!!(nq67l3N!xr|RiNopQr1*kHe&nN*JT3f*A3yPJ6 zjCVjwL>4i2f#y{fGp2xAX-gOdL8Z)6#!k@8=Q755psIX1;|)+@zJgH?oc0;tff|6T z7;k|x%WB3cpc%q7jAEcNU@c=GXa;Q^p{lvpmO~XV;HEwJj^HtYDgSm+yk=qDC1O+tB)}*0wu`fjJrVX zmlKS;LDkSnM$oZ5tfv?SKso(1;}cM$?F^$kC;^;hGz8T@=NQF6rSEyh0jLbR!)OW`lex=S2`aGeF@}TMkM|jaK(;?%oC0dmK4jzqH5(r>eg$Ql z$Bef@1{ z{*Uo8D24oI{0M1$-3AFZGOYzw7OR-bK^5$3raz#hv4-gjs4=jX$sLqQ)-kOHMdNy= zcc4mi6O#j|<+zzi0F+R+F#Q5uWdkZsJD93KLDa>R0a|6*!IBEqXDR(U%{vc zN?@B9RY9X#+Zla8W2^@lRY2+GAY&6KhaYB)0u^&d7?*-pZ60Op1GVvwG2R0WRvc%P z0#*Gd7}-Fj%1OpIphEu?BR8nCdxmibD0I&<{sNUD=NPj>pEGuV(%B0}9ne_gOU9d^cz?$@ z88is+k+BNYJO0YJ6*Qjli;)#H67h$z0yJvSz%&um4{Kzq166=cOgbRLnwfe)#YHQV z1t{6HF>L`Qly;^+poOwsOv0dU;{>Knpt@rsQz+MuVM}X?ufGAKmGKd}290|4o zIXAQbGX zP<^c`07@Wge?iNt)YU-EUyTG1skt3g)N2)i3T5rATm}YK9W_uG>z)CnPCW}yg{LFvvg2_$0l29%bJ%|RU^lQK~I#?&9w=`a%jk>-*hS6WO0sj++k3Qw!kpy0Hw z0mY?FG-x!*_9Uo0w(|$Iu=WozhnAbi~F7Vz1YE$^+fEvoa+@MV6w-_|{6;<&^LFOkc1;tR}BTzz3ItZ#{lX*ZxENK%#6<0a~D26g*Ky_fIu?!;v zYgQ4cIi5WWR1oGEfvVu#`=Hs>f>Kau7rp|GeHI!1f;LcO{6X$kJqf++id88U)cIAe z0~Issx}d^aV-=`S(_{mMsMbPIsOYQ$4MgjL&M;)vKL|Q>!+;A^yBK~2sSm#dD(|BC zlNlITQ?fv{Tt*|Px7^0a4$3nfj2A$wygC^zK@ru>SPkmO_b@tvdXrNai*7*OmG~D_ z>m^l!N{eJhP}P@`4a#e&Cqb2B8UrZ*q}zg0MNu-WIi@HCs-)CQKqCek`#}}C<~GpK zjg}H9g=x2e8n!xIvQQhUyFeqo{fuux<@p3gAJBy3M8;*H{>voB>7Y@e$&BrwDS;`B zYe2=qRK^vc5u9m^lAv5Zi*Y|F(Jg0G1dTMTV9Wq%U&S~Xl#bRi)`NQ3ml)@O(&%Nz zC!jT`R~X-dhV!m6P5@QlcNu4Z`soiCZ-d%b4;i&UGc?Z`EkV`t3r1Ox%U&{00=1=H zF-`}i$9IeqK>e%Fj2A$wLB23v0uAT=VAKQ^Z9f?~;u#s(rZDA#Vqq#%7^rPFjj0|~ z3r%M_0;)!4F#WfO`a7*1l%~sSL0A2Na`SpdH&B~?GvnDf(B@6Xji6+Hh;a(2nRlG= z2B=m0n9%|>Ec%@>6x3w;&BzSue77;(0Tn5;nU;a7_&LG#GW8wkTH&>X-KuwBUOdCOc>ibMapyuck zrj4MC`ikivsB-?yqynl)eluMMg?}@%IcT`5n>hnC{xFp}6x3gz$s7gp!(3)xP*z&V ztN|K1Sjy}M8sA#U{17y%w3c})sCeDTdf|bl0^YDI=Yr+ zHK-}FktG~7gt?VvI;h^?$?^|WhU{fw1N)EVGN|itlqCn$k37j@4=Odzvgm^9=Zh?1 zpfd0(3oB^eV7MoT~IBhY&L$*h&2tUH}`7HHIXHfu9z0Ch1d52&_S&Ke0GEn~d` z8cN>G$^xp!x3lgAIes_mVopvv+(>nTvT=ss%`Xl&*&YYAvx`xPr2 zsJZ`|bpdG3;SH-ZXj1+yYZ<7#`NhfwYAgL?wFXtP|5-PJcnxebLH0GWEd!01H?b`R zMO-u6d{BqHg-srm?^@XeK}NT+odY?yosADPsMNtG2I{_bvc-bJvx{vtNUodh9H{Bq z!}b$Y4^3cO2uf}f+5Ure;7np$2I@~wW}65q$)>Zl=tFyu=^mh_ejDQ&Q29ND(E=1u zQyCLL_3$*t4WMK=oiPtI*ExgnJSd=MGJ1iQ5zJz20#UOWUxNaF4&!D}Wj&Yi9jNTS z%XkwMug@6sKuPUAqYbFQ|H-%&lw_Ki`atQnizyk@7n#KL9#qxOVrm1mdKWYCgWR}+ zNe0we+Q;+^Gy-#nX&)%BKWEYcO?kd&nhRQb^^J)IboOZrI|Bm~Loyo!10&;aK3)b! z$l;`n3=E9=p~b01#rkQP$*Cpz`Yx%(*(Lb}`mVtN#zs&wwYWexGbK&8pfo8bGg&`5 zKer%1FEy{ESU;^OHMOWDzgS<7ff8f#Qp4)`DJiLGdKnDt3=Bo7sbFWYGBCiMhs|BC{tyMlDcNvWb1*PK!Y>{!#KORkk(i^G!N3Xe1H}ChRk~%VMa7xO&7J;IQg@GZrpftX`D6ya*wFu;D@X?{H;DbGx&oeMGvv7ir z_GIB?0kc6QBPSCBBQq0-0Aa8V+V+FC)kzkOKsuNBEd{%nY3D42*2d>>!F6Vi?SLkRw^3x|kRk zIZ+J0z{tqV40aRPR%VcsK_YBmFR(H&GP9$&kBtFjECVBBe7w6~sB?UPV~Dedk87B# zPkg+BDMLiChoeutw`-7}t51BGt8<8dP`qbwkiV~j0Yki>e~3qrf4BleNl{{QYKUX7 zcf50ut7C|(MnQ#NYI%sWlcoYggfqwl&k!G{_+Zx%gLqfJkRVUj;CLT@cOwO3hKLYX zzhK9BXMevC*NBjK4+RF-kl^@G4`)w&}51w$hS*9d24$IxKccuzOi z5N8k9pdkMs1tSI*SEo>SsD!hBs9#9DuVb*cf}o;_2uYAI}gUAL{8B67S>c7#w136z}U85g)H$Vq|Gz zX=ZL@X&UMSwG19iV0Zd@1_vt`nJ~D!hQtTB26@H@xw^+Yd4>dQ6s4x?WMmfP7whEY zmlxz0Ybt1H1i3o8z?FeiXxiCnK&3U+G&BrtY&0~$nlyD`;@XCqn!1LXnhX&k{=wj| zk9Uo5_Cp56^A42+<` z72)ISX%HXg=;9KjU{GP~<_7W@%-xs?AC@=4stin^IW)-8H{K~Sz%e)&ZjvKJ1Wan+)}2v zrOa?knd6qSz%6BoTgnh$a2VpzhbKS`@q~yWo**&A6DEdu0>uzds2Ji27DGJYVuUAL zjPQhu5uR`{!V@k=c*4a9Pq-N22^S+g;bMd*T#WF9i!q*XF@}Z-G5A|O6q0bb>RLJu0A3Z~!&P(ZjZYWv67k|91ERR4!Sn_Iq)K0f}= z8UFrF3@pvSu@mCy>h#XARihIl$V`e@{qR%n8w$Q2YbsN&Fc01iIi2n7QM z#{j2zXCH4+8VFRdFwg?kX5b19(%?f5%@9KaQ-gRDNLa>)`Fpx3l;vlpK#hdOGqgem z*PaF@V57h_luMAKuVH)uxB`OI(=Lu7jtD^ptnGw&AOCP1EeI1>3&JzV(boXQWKX}~ z5QHGqfnYyJ_=LoR+bE79Awi&~B35r28^jwc7{Y2SXrsn6I6gecGsM-&(b*f+td7q} zEK7~g$?P>e0m~m8R(^BxfWRDQM}y)WP(Fnk+gBxv9CusU;d9eVV#H)R=z)=B z2)z9V>6iF;dV~Du=@a7V2kI;YhdBC$#0S8eLok~`xee0zM{PcU<0#lQ0^C$biW*QC zAU?##V4kc)%CDX5?*Gp{5qCo?-$BQ3Wi zu_#?9EwiY&q%5&0u_#?rAwE8_q@*Y_sk9_DK3+p3K0YnKC^xYL)NqWChvlm11qu=ARSK(X?R8fk1e@*1_g(JTlnC*#68F}Br+b7C&Ci)*}NK!A^@vttOzZ7!~Eo_?+_@c}`eVV*v&?yfHJZlQk8AURMdK(kP&V^9ck z9s(N-&4u6~3=VL04)p;Wi73Jmoip=z!+1jl=!gYEI0)QxvWSNdW+2yXL5`pfof)il zgTx2eG8eaict>YvS06}RIQf8@4oHmy0}F6V0ODxmp%7zJsGCFmzy+u)tVD8+aCQv< z`5EMRaP|UQ1Rhukb_It5sUoqd>*;2ds@Q6Cvu zxVbuk>LaA;B_5ou{N3O|;~Es?7!v9mZ(?e!V88%sq#4CKgN%;{1(`8~!vGpk0gao0 zbFzk(Mp=GNVhN}%TAGXcZV8d6!18ehT?AD@?+ni5~0nO72D0xMD><5g2@t}c4DS>lR zaBzU386+u~nII(vCx#KPFj#2nl)0QHyx zg8ZFbgMXpw+UF3WG_N=_Jufvy0bD7A2PT~z-FzI~<6R>hox$VI z1_nk31`ME4P|R`Iq|B1|+{6N%GEkz_DbC1DE74TY05^6J!?ED;SRE{5v}zi48X8a| zK&=Oeeob(DLIZ3hsEL88KmpWnhct!}wHc(0HBkWd$w1?CA@Pv$OxK8zAV&p_h>&;? z1DpXttt99uqO+$9sGR^Rp^XjVjT8)FBjRDM&Y(sss0$Aofd)026$~ms-8WDr!T@S8 zI{EwifI6q~jyaj>d5Oi45;hUUNlnqHfM-#^5F=Aqac6{5NrgK`8i1Nvpq6?_aJ*ZP zzi+&AKq#n`4l;(#AQ+i5#K#9{fScaMnvf=VF*MP@N;6QBffQzt;b&t|+34vP5)cvu zi*rx}LlO_D&lMC8X$bqc`niXAfV*~(07Y&Cgcuqa8^jx;%Yp+8G526*0UZnl4N<#B zID^V*&~yu^!3S*)gJh6}VRa-T_TX(1$oR1#1FW@F2FjShrNsrQc`2wl0u=nNj(*@4 z0nF_nr-9m4kZ}&(4@&zQTqWoii>7;yBBcMo+8a!~-yZa~Hg9DSW2Vw#XvvY81=BiYyj)JDb# zD{xECG~Q6b2vi=!G613r1+!N|Q?z;^Rwl zK^^$w%&OGlhhn;GCi zIagoj5TAG-15c+=w|G}SP;U}cuQ&y}z+1@hG=rGZ1eZpBkR~-u8q~P5fR%)Xusnl0 zNei2h0mYVqF?=EkR?vkx`gpoP$7Vny2?hqnZm<{+cJcLfMjmRg01Y)%fPLbh=9yQV zS_GQAXNZqSl+l<&3Q)QDc#R5BFBWZ9GSnx;)59}F!3fru0kuMc9l=c|16b-pE<=OB zbF`4E#Qho25=%6pb8j#?1!ZN0JP;A@3L-N>1Xv-o8iaLNz%zdEiV!mVYhYk(0d70^ zcsj*<#4Er%0{-ECu0iqsZt)(VnQYKngGgv+0MxeDP(ySEz#RclFTpi0ML|lxYM@dXN!sXj{tA0@P9|%}dHJ%}Ys5fz`{- z0j8jFR`BWyzmVW~A5SM2Cs-x}TMKcbA!t28us62ZZX=L#O@?^4Fi3OM(=R?aB*@j# z*V7-K>0nW1XoT8=hsHQe8ohlF$x^T)2~-*(s1Lb&7Wm4Fa_m6yoE-)naOVZc==5X;FM`Vuc2z3F7M;8t>@{ieLCb z6EjfP88n;j;RqTTaRcSKNN_(o-q$JK$JGyPBz#r~kqANz4NSo06R5~B0=GTFJ>5J( zvoZ0Ybs?~YEJ!snc)Y^X&pkfa)z>k=!#~Isl)Rv$RZbyDWw0rzNdak$fQRfrqu(x` zpuV~>qN)Y03PG!CK|qOegSLl*T)|Z%(%3L0vYi9WF%zT$sIdTQ#QB0<@97r;<~T+`8VC@bpsAO5Pahw@ zc&Eq^S3?DZ3O86Ez&XGO(@?Mv-~~S-nu4GW6;nt<#T4d8gbL6wpGCZH0Ircf^LV3p z-vH3Ej({M4cS!FDlz0^&3s*o)XkdaWYSg@L+*AhrmMuKE_5t3Wf}>0l}d8TuazGAW-DNCio2*AafkSsU^Ot zxk;%-9*KD=IjIWZi4QbEP=nLY-_y^>)6W&vwF;oAmc0DTyqwIuRETq7Ap#FG@Wiq) zXek<~!(|L^&HDKVXlN=#gv5gx4Ds>d&K{0I@gec?3Jk%{{=NZ@L9T|N6>^}VNYDTS zc(ws~vH>IkF22F@4LYEOUheVmK}*o|18DvMJa2`VdZ+=-PLzR$4nUHifdzydJg7mT z1Y7E0$WT#|k(d*oo>~&0nO9PjnwX-1B9dBER9a91%^ZkGay3R9a*L05cXp14<`%GD zL2Vh(RI)30)f{*%2GqGQG=p`^Q3qhasQ}*Ogv{50XK~^|)3csVp&_mcMwU>AfV^M< zHV6BFEV$Z53|oT=q9BynKNC<{5Ckg!AfpDLoD0fyj!vHOpvI{IyrP6V32p2foDM+~ z0xq6mpuu~v`$6u4b*VvJUC=;)zZKG_I>|Y}0Mrry4I3F+fQI{m9Nm3Ei*zA_-tn#xA>g5IP-P5CQsBk3*v4}~qkPa> zF~}d=@)EcpLwr2Aa00axHJp7MgM)QIR%j}K*$SYhXLfvv0!U23R>8oU0hG={{lLpy zz(d-QB>@`oe*TU@?!lT2So1V&l@@$j43VM@4dM;r4X`v;z*UJ+yaD<&G;+lNnwUbK zg$9-M3N|(hNHfq_C#4}_1L-{A>^nfa4iL5AYz)cpkQP6rnPCX7;lRtF71DC@6HB1^ z7}NrUF8~V$rDoV*4|tXxQWk)QXFY%S`1s<=-1y}D+=9dsjpE8&oy^>V z9G$Y%qRbS~pj0Brbs9=~#g(~bsYMD(3d$gP1tpNXl#45K6_gy56qF&#VI@GQPe8o0 zKWJhGTs8-Vxq{~U;nfJZv~qL;^(;UmTcBm|@u*9>z+=O%6`3W@MVTd;$%#4Om0r*+ z1s?YYWh!u~0*OmM=Kz=pR2A3~7q06)G^4wP(N_v#RU{}K^h=Enwpvlwh9`hnUE=FP0%!tCbYK< z%L!(3?JP`EDA?-H;fDnOdvHcyi17~aQDHiXU*b4OWmNA z9HOv-EQc_SH-;r%Unf_W5TD@q;9$u52k1}*sH3f5Xl85yTbBtP0`PaU0Qm}O{@TC- zJQ^4b+N@y&8hQtHCPAax;Jzey&>6%-?gYm}>JkNTT@o4qou7aRLTY>+P-`19c%q;U z9mRlf!Tl>uSp6LAgFH}b3LYr+g$(ot`}z9^K*xDuql=IsTF_8Z7-TCAcz6+NK134a zJJ4VkSOz?Z5ESkdf;@l#Sr!uRtll9HO3VgxGNP*-*34_b{OHByjgNI+u{;29Fg02*jjpl7hZk7EdEF{XhbEPI11L1%wI zzX%tjc$ZK|AD>`1A5YL?Xn0=AVWN8hTb_oG{i05*a$of3Q-0&FWA_~+0YZIcMDoUX>1S=9&EuJ?>0674a&jl zd}v!8TnK}P!ob5>!JfXJ{@}t!!Jq=PG!zu{4Dq1ds>LOs)iA|KJza1G3$Epm>H{MS zEQ5aFHnI_}HnMR%(&j?v0F!t`ooI&W_k-33K$bhjgZlakMrNRHzkj$BWQs*2PgBj% zRMW;LAUNJX+zHa3)r2g@4-RpGO;o^Jv97_;RUwddA&^jov{;NRafP6fC2|NtRHN;r z!QN^zG=*pcj|_npBZ1dR8EL>*qe2#*!UlL0)IdD|P534^*WiEd{7nSCgr5&#X~k4gOXus9!Q}9K1JXaH+u2$<;fY~ z9v_N@<;f-axk-c!L{o*=#N4Ek{PJW%CZee#U}6zbo<>nc$VB2CS%jjDfSJW$)y0Ip zj;;`|x#h`4#6=ORG6H6ToRFJD(5>ak=nCaSSR)a=e*qdfG6T8YfC1VX_w);kclCo5$_hrXQAV(z!1DyIhA1nX;WZDa z_XXlDC&VyP23JlQk;CKV*h%nkhzaZ!koq>X(p%K_epd~_(QBTm|8E8AO zA*jn30(L>X0<=|*JUjxHf%zA-MkO9xzJvCVfW}~<>+V49Ae5!3(8Xsy{_gQk{{A7L zdf7DyvU@c?+%X8Wp$L*>p&L z*wfG5$2H!?KNPe;9vYo4AX}Yb;Q}7c0Jn`CeSE-;Ql#B7;L(H-kDyRcYstvS$Pg46 z5YHphHgr`!=)eW=+_jMe2@k-6bv4h4fTZw5K5T@ zpTbixsDPJA;C{UYZ15M9OM?SEjpAK=Q77|FVL9D706vZdX>dXUDa1d-(FZh?1r~%9 zQP44TS3ehc!30~bj@ao0(T?O!1GFhDELj(_3>4HGW`OOoGQhb-3$&rk$OM!KKr^(U z1z3A-a+y#c#GwzMrnjLXu7;zbA*B5WaW^Qf`}l_k1bITT4QOl-J}Bhr z$19lSF)IKUIUy8tw=1{x`W?ZJiYcLL9KfeTBdjvr(? z3YuZ#rK<@V*ao+B z;}eTP%k$tSXj&_PtOZs4C{;fsYa{ASa0kg4cLxcyw+U24psyqFb#?I!^@Wb1ph;?& zqK`J#r8sF9nPm8g@OnU|=Oo0ydZVkLq0%YlS7K_LQCkff=g zrlz0)QUw*u%uCYLMBYgXslcFBJ}APqWIdN5Y$n^+)z>v3-Yp(Fsukkst^nDF13Fm&a-

oW-C5 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%0De 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

dX9$4K^@5oRUNZ?* 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

6v1 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�WTLczC*bn!p#afzlp$$kW5$-y2jm zfJ=C=LhvO4o*|L(pfeN<89=-H%@hnRj6m})z5$>sl0bVKz&RY{TudJy+y$RG{NOOK zJ+N-0LA14#DZo% zA>D4sBntSbEbxt9NOQ{u76!0IZP00P&?YKa41+3X=$bmnNd^98sYT^QnI);vffxAR z{4%7o3v>!9JTlWWQi}qLGV_ZvODaK=E#djusd=!2fZZW013;%BzzhPN<_d0QK~6p> zKsFF6gv(TrH27o$&|w1L?5F^mU4Wh}gLCCYJo-%;(AjLrNiwiwX>=5DoFxNoO8C0^ zf+ik%)p#5?8Z=YR%Sz5G4>AZOepf(9{?7(i35sVU(7 zBn_b z^Aa?c1Zu%x%`J$tzd-dwa(-S~W_m!7Ydm;qX?#GCzq4yF=mtPguNSfMKR7ZNH2w-c zHwQL?0NNB0keZj`R+*3-a?)^Gb^KK?}}7Cwb}X=@(_@r6-l9=_NxOoQR=7 z@Ol-`DDZhsppKC%Xh&u|?EDK2@S%|4Ne9=wlGGySqRf)a8?&?!ZE`I&h+nR%(;Sp?WNDzM?uBQHTC9k8qpyDkIPa)g|@3yMn6s62F} z3`G#St^~3`2R1s0xT_D=rUbV(6ii^#is)C%gW}uAH6C=)AZQ6oa5!{|6LvTpxYYIy z^)WVz2jBJwb027Y*9bl#Xbvg?ojm;g9o!nSu*K&_Yt!?hsI57=fDJ;AvOzu~x=kg+&lz5Dzkw1zHe{)K)`ZSPR~M1{%Eur+UbM8<-g%4;ng!)W6_07OpO! zQBo5HO>h%D6qMNGL5E|82RQ}=xCVjS`mh`bZdMu^qs;<9Vg*)anWM^r)@}Rwc!NS2 z)CL1JpCBVG8fDNc${{x`lwrAPK|!@t0mrQhn%1x_;f9(D)wR|NwF*c#j$1>+6_Qd6 z!DqrDj{gS@YJ#(TFnpC4XgdOEd4aQmLJiWAK~Ta0r(keb5;Xl1kLXC6nlOO8s-Oe4 z3>=BjrC2_0!9nrPL7+_w@$oLM&Y)a17zCGH89@A$p_?CaMD1TO+l)!jGf`P z5LEnuD;tzu(FUL$eBkH=CrjvceDN-!jy^uYZa$u%{tTo+1n#^9IXb(>yE!_0`hfZ> zMhXTDK9Hqd;8{5+8`5h6FYkgBWQeN3EZ!jA0@lez2t!V-w1~HWHO~-IpjCa?rlY~D z`i$aXQ+ufQT!5y;;r%OkK!dXyBs$|ki%`G^wSYF&gU^=-o#2jfzC1_}a>fkwJO|K$ z^Pr(qaF9V)TYwrPphh-$Eo`VCXzUO+VgptNOBSG_I2c+eg8EwqNGB;d1_bzcI)fLQ zK+fL>-8Tt})S}eXypnjxr8A)Rrv_wuv;m~#22C|V=9EB53X)wQ<)0C(;RF%HF+Ko3 zDiGv$&|qJD7-X*qY;6N2(&7}!~!&RlbV_mZ4j$qs{l0tx)2Ogks*d6Lrg_R7>bNg z6oCeWQLO{tLuY`g2*oa`O@X=tP!-GNBZdBl`1VQKKnOH!!jfXgTyFw4> zg_olm1r=aBH5Cw533%iI6d0Z!o*|&+#E>)zE^(mOp@Q1j0YQ%LzMyS5kmChFX$#!p zHe`qo4sih$ZJ-16Kvz|lrGh7_L4~RrcwQ8o76XFgK_?|cC)PppeVI9_dHLWY2Ec1@ zgrF9QuyX~dUl+StGrFe^aU zDKWq=?}5*VK!(TQtKDD+K|_QwDsjkME~w4q8RZ%eo{mkb>z-JRfaxY8(d_u9W zbBIs8r;BrVJm|IsMVfDYeA2-bj>IfB(Xhlj$25rGf_J75<+>0dgcfd<;w&K#L$iYuo(8{al0M{oTL|;)IeumLT=ds->?HZj?^_TML|Az$VUIY|ojI%m+4M}{z$f({*mbP$o}n?ZLMhJ(%ibfHr!eLm_FYMQ%l@ zslKVX(6%U2{DKDz{lJYpSg0Am&k2Hho0v7e@MGOVK=T>S-tmxghQXWqvCPSW#6i;? zA+8Z2@s2^Rj*tmjsQWnHwikZGam+8UNcZjo-4kT5BF3|%e>i81KkrKrv3I!F;`FX`9AW_hI3+N?N z3YyjmpbMuEa^NiBnU|7U0ab=g3YJZ*6*AL6c?r^`Pyn59fou=5S+)uq3UFo642WVh z_+(&kE>r+HpCVV)f;|=D?4+QH-xrWf4qg@lD;5bKni>%jAMEcF54nvRJkb^!pkYt} z+Myaz5}cpoR+N~V3fk2R%XuheDpJ7+Puh@E$ULK5{oUdreLL_0Q^9K3k&oxLFfrPAj7akFMQMjyo?;S9>6&OJZcEe0-(8O*iF8ma~`0^x+s87D}YrA z=*h)U0elWL^h^p+AjF5ngVxL!lonxG2oDkkc^&EnN8fl4&k%4^PXToe7fcwwx(QsH zLNBNS^^hP7RKQ0jf`-E&Ts1WXMKDX(Et8eIf)%({2p@G8+zd2C0y%jHy0!t@21i}q0Gg=+B|Z3ow7~(MDC_wl zhfsjaXmHkstmpNFY`+6}0#TMi`YfP!JLudCuojF}21cf^^%9VVC-n9Y6oZgwJ;7NP zzDopLWIzj5q-`Q#VQ3hE+UVfBQ6bH9xNV4a#h``5nhMZ(ffZ{Sc{&R5pwI`&DnJ^} zpbcT@Hz%1fKrgWdcbGJiL3@>TK#Rz93W`#7^1ug_g9Q~pY}oKDieEt!tY)Ag%aqi_ z6tn^dGF1fGcLL3Dh>=WCCXR;;8-XuhHfDg_y9lYcP?i9~)2O2}c%3k4u^4DUW;WI{ zK49m5z^At1`^}(}obdQ`4lsxZ_fM7F0zyHTHh|9#0p(JZLqos68c@R%JVXr3J@CV^KqVGD;Tc=N_J2Z#UqCmYgUbx` zg>Z=}DWE<+Xodv3Km}eHBaR(MlK~w&4h@A6&`2O?3>!2^6cpwf4_-fPPywrSK}ioZ z6AMeAp}z6p4mWs7G00NTauCqO5V+$4S_5Eggjh-#5bkS)yj#i*Q~^T^7R1mXY+n&* zX)`F_!pB4Kq9WW+Hb$lt@$$uq>&1w7b@h;H!oA!t+?QZ*s@3_Q9C z+P4Hgg&KOf2zbv8e4q!kCb$5+lT)X(!Y{QPX-Efo_5so`)6lg99T^Wg=NMWif|k#N zs%m(T03-+9V+Ss1Gz?8Op`|74glupv=K>E=b5L-CV+P_S#9ecsl#2h3qLCSY%yu8>yfxy_|eNL+GHRCO|D6T|)ySLru`6nxR=d;vh{ZhXJ0SgIxpT zor6OZV9gRx1^{gk21PG8cpwfmB4z>?wn7uU85?yQb^z!E%#_R`1ttBG+yW)=c@Lmi zBks-u(0229(3J&9!Rh1*uilZ8v>|$u4he>A$b_7#9};8?y9L|G9C5WKsB8omQlJxn z!2t@ogAQ#6(1Y|N(shBkZ}Va z`1Wsmh=6NQ5a>#3=y;9=(r7#Q?kf0gR^TOBu!9aY6rd#>yxa$!eh71I5NL%exWI*k zAlUgZF{q-DAkgMDSKs(x4^ZzNbZ!N5E(mfB4)t{fjn9H_;|xkIE(PD@kyM(NmRbZl zgDD`$-yQ1cfZ+I0kU^eqAq-{UAvDPCoebcN9{{?+H?<_Ss2F@^GlB~`w;8 z_b~)r#jJpIx_!Klr>|#7Fz9COcm+tfK`z&Wy1>v7-r)z0(!_(8Z-Ixlpo3YU#ZI6; zH>j@+>ez$$paCt!*cBwGKm!-}IwYVmJZO0X+VqckTLJXU8qndkhK7cq{m`C%Aps#l z;7$&7(JaI&=rkFqae;Juh$r~!4Aglxq!e$Amg1c}LyW-VPM}sFsFZ^(z5~x2#zUGI zpb==uYTe)v7Z+Ezc+dzn#1WAE4&FxruH&E^8L{dHt+)ZFLa;1oyHh;s(i@NhOkr@Z z8B_^7IRL!$z8k|fGi#7Gq^>U|bS z5^j(LhnO`0*FvD4F7#}8P*Vxwe58sJyo3a_%@edN0(5c%$SL`yCFpL+F9j|82m1on zfP$V$ZBStfTJ!>nVW{7s&0~XjR|B*(0a1Y3zJL{6@b(2#*8n_%7!PaETQEQe9id%E z$X%w6elC!ua45H#CTZH*8h~yyH2|H*2)W!8yl@yK0lwzcP{9hif*pFnDcbg1(5Otj z0`wLEaG?w;SAraU(f2<>W+g&{K}Qk0BJOB_%=!lS2Zvx^2M5j$AWI-;=YjeQpv9<= zAchAa@+dE81Avhw)bozMptEaT13(i5XdP$xo(#wwCrY}HM>+0L0o-{8WezM?2?V)< zn_tkA5v?INIY0&Dy+R?C2RMhv%LPE|^^huaXGrG{+-HJMZNaZ*02Owy zi4|D06qfFcpiNVFI|{UT-@p)lx(`UNIV|rP!4J9t=UGU%2i!UYtp&0Gb)CTb7(o#c zkGjYR9Or0FH&|jtG~FibbcXZiv?s1!UVJz861C*P4d{YEJO~Lnn0}*&<#|eDMZlfBOk{gR~PKd zf572u5pMx0@iV~dlR<~G<;RyK7H7vNmV?$O!_S(4taf%!EdkH#Lgtb|O-4w>BCR3> zkI#Wl4F!+S!5Ze^;t=FW&=Mg?0Sb#G@EEYaTQFp-%G2399(2>Wze~JtFnFa3Z1^g^ z1ayACfq{X7K4=F>T4p-9vV=9+U?be1F$&PxIp8I9;Bp9@J0X2E94B0%ItX@80n(5w zL;<+t0UZG4*#1E# zNGAxO4`~^Ij!yuc)B@3t841ww2(SdG%7P3q!Y8splknhWJdhYNG=iNQ;~W6#Si*`t zgug)H7vvfo?COFj?O=PuogMxB{XCr=eV_wHL2kN628O13#!8TuHfX9dG5~gJl`;6} z3-Gd0&;~B>k}7a53l{<}R0SV&0A9z2SmO_x|3X>UWdxct_Jb@41K;ojnuCvzPs}M# ztOO0kgVtZ8j_-qp+fbyzV{Xt!1!z+le0LhkGB!vv0kk+QAjs9#7gC>tR&#*PDndHC z-qaW|qK~w!6nd>P5|n!5A=l^`FoYsj-Dx10pk0_q=d6L|2tc}m!0lEPZBXk}}# zCupq=xF>@$DF9vKYG~%<3EAcA1incP>MCdr3TyE|A__G44QXCM_;5wwEot$-PM}>t zp!yS(Z@>``8Z!aUOge?Sf%f8o)=YT127?;@V0jnBaU;+{cgPw6SXG03{}Ff<5NvA& z#A;$z#6cItfx-(s`tO3ie$|KpTs}B?hA6~??-~Oo6wrzTunR%`Civ=qOVBnh1w(UC zK@J|dMih3Sb&$rm)#+Ni~;Q&(oiTUgXo6vDnK=GaY#PsG9!=(^llx{z%kfEh&CzYkO>3u z*m`gf^o~7P@Pi6daIOn=1~vD=>lr|+u)#wV(7X9S$3TRJ_{WDkLFz5=`V>f*B03Ye zj?M$Gg9F{1igfof_!djhu|$y62f0EGoF3t0bnw~*RQ|iW2F1I0hIzWU#ydrV@1_CO zzz`Qemqfu^?%+}fTylUmH(9_IazgItiTCjbmH42}hoie|yo;-kYltiS;uJ(Yf*O9% z?at6z2|Stv9}I)$EtJL*XgwBqh6iT3kp*axC}>98HO$c`-q$t6!`~%79yE#_;T-H3 z<{EFJUOj_FqbyGbm5-pEV(}$KrKymu^YMvAsqndN z&>m<|D<8Z>22#6$TcRK_$YB6(@z5bJP*^IMfJaEc8@WLRU#PEwp#gX}3o(=h%3hA1 zey%|ThqIjX^GXskAofccu> zyDywv{hU2~9fQ09aJ^egGJRN;Jqg;dHL;ZaGK{r_{R4eG^mR2a(f)D)! zse+tD6z1qt0~&4siGT)(7*^C~qeKo_2CfJVTyH8d*0HNL(^CFl$d z_!`lW#B7X4wN8Z-Xzmbnr4lTYfs}z8(^%WrI-s^TTo1Ut4Q)Umsu=JI{Jx$p(59!M zA-L-aE^;g3gKq z6`J7da$G?NfPhO~SX{=tYUJr;>VPJrF{Y}aawyZ)kkkySiJ^x#z}pwFqSVk7zVrY* zP5>($LLRj$DJL6+`!A` zKusJ_s}bsOP<4kS1)jS{s&PR>K%mu5kfX^!bDzebLqQ;#VPR$v?}{;l6X6W0wv0e? z#L(mdO6{Pbf6#Ilr(hTOW@u0Yz7(`$9$xf9GZ?tC2ylr2ZE6Q)1k9~tD9wD3W1)8d zgLdRI#DjJa#e>f8Lps6~A_!_E#4BiMKo0KFG}JS$$wgvAPg-sC#r;x>E-#9?-NAoV;XUQs(eU>Sz^_+(g( zl%J+ip;N2_sx7KPBP7Ko3h+7uc3gaXyoQEGv4WPSfu^oqF8De;Q2C}&p=qrEnlKIw zb@cIciv%grQP4;RtXJ4Z*+?KJ@SzNV*4& zZ!&~?`nmXr2ZuNYg(#TAi+=C`xihE~^>l%bS%41BG%zrBg9kXM+5oGAmjA|(Dja-w zu3reK?skEm(hRM_q3cgU6H$+gcrvK*2HJXqvY|c95ppgi++0wJfShQ-eH+jk zI{#qM?Q$WYYmi`;Yk&@(&M!(WOUwanyQxMTs2>lSItHyoMN$EZ`o!Yg_;`i*cvy;w zkJnI8DlabLR5j31P*R8p2@VO;2ng0xP*Si~C@QYZOODBdOf4xTDuFHsE6D}l+l82B zvR0@CZ(ITGTY+c?Z7zYapji>AGlzDb4``bKY_lZ1QGzr8WQ;TbWQtPUK$|8(p#99C z`-30@oS?%r%oPkRAp4p<$Rf zq#ESPWl#|bIavekDn5gXG$;u5fvx{>^>qz$clC3QL|guonwwgbo|>0j3CpwKWEt)l z3F^p#Ci6gjU+@APxHeMHu zZM@)^fb{)g*I{GsPcVcZ!JS$Gs?kzYFvrEpGK({lGIKIZD&yldlu}aD5=(PRlt9PN zz*e&vDj1r<>z{ydU*vUzW}qSsbikuus5AId`hehg&|I7Xcy^xwbj?OaB6#i;#MGz& z9i^9oG+_x=77v<L^Gv+(-d56BO*}4qJ~2x~)83K|>d`P!}PH7(Wb!Y}<5< zP=FlJ51N|;j~RiF?(zY3#6X=&w3-@H8Nu_Ur;iWlN@d8(E=b=VbPomSh!e=B+knix zywsGCeCPb4RE+{~h3%Z5lB!dX?3b9Es#97VT#}fa?UGthlA%*jhFHI#Q(6J5*mVjj zAZDe2jMb?C8RhAssQ_L80qu%H6o3nMxE-Lbr-lN=A_yDVHi!tal@Jkxy%0W%%U3b?K@flaTW9JB##HaiC(2GWBa!JYsuGWJ89+l=EFGNdJ1jwvZ2 z`KSdhB(1@Bp~r*9Q(Teej13q-!Gpa?6$I=c;9Y!AC;6x199P0E38 zCWj0KfcCvAXn@(EyDdvI^GXUzisDN&;Z3j16a_6!4UjrbXj{k;v`E7Qw!$pLKg7`o zH1z{n`VJdxa}I#_IiSmqAOqu&aVVsI7-U-jbok9R!qFLg89l_0h#?$E-U4?;iQ7>R zSz84vKp;mT1cy3-E-L^HPJs_YFwg_92SYs*0W{|g+e!tx`V<<%pjJ4vuVVr^``QH2 z*MSu5Mn(|tVixR1;I)9zItda6;K3$v*76Jv0^eW$P%ouq&i6QEu0K`6PPym_076lku!YX<2Ii#R80`4B`fCrhtE3iSUjzR4| zg=)|Z-lfSU3h`LBU4ynAfVN(P`qm1zwhExK4YcnGA*KLHp}C1UIr+&NAfv(E1+ZDL zUFk5@n$`*+YeBmckQY)wGBWtsMexWHY)vS5C=k?&^7o5JL=RE|1&``NWFQSM4bZ;G za#(D^yKAsi0&eyh8pInyjj#N3!1k{@y10PaCk6%vN$?f5!NKupGye?n@p<`qd8Iiypavhx z)*H~&98@kIdbl!Z=as)>NPM_|kPDf{7&=O2g4^UG9bPBb%YmlF-59}nyc<|tv z0(_}AqtpFbH z0S_90w%>w}Omqx!1r77~2gif_0BXR&Dksnd$T_KHsX3Yo8t5H5(3Qv~xdld0+8Ae# zt_WL?4%CxV%FQp!p5$`EiD1Jv#ZuLJ_^WD9}brv_RL1Zfb(y9K!hDri8LI=co37#o4E zHgXL035f?at3cB6z8+BuTF^^M3_uk+sQ8aBi3c?#Aszw^&4U_<;7J7VdL`t_46`mn z>hps~bo`*X$po?L6Fg4{z5+|Z5X*5euye3XAs6F|vDrf)^+I;}c3PR3DS3g+O>vTtYvsJ@5v5}>KyzzsIO2yV%P8h6H^Rb%nsdnjB%H>i2U`}_Gs zf@jhpZUn0g2nmSy^$mre=nE-116+e3hcly3}T7edCpkQQT0y*mq(pd_L z1T86a4FRvA1r0199j^>d6p-n7$SLsP5CBCMeC`sdv8!NE0Xe)DqyStx7#J}?mR^Bt z6$K+>*aAt9aL}ed@ZIl@;8VWyi$I5a=YuXCg^VZvyJUL)P^w7$FY#hdU5_+NOaqq9Xu0f(^2kDmWFsHXc$!K#y@mw5<%yKpWzr zeg-Ym0q?(X32+Ml6)q5Q@W4E1CKx_d1U=P90lI`7tOx0OKzJ;HPHBQ99z;108j8fW zia-z-JFYBofQvk_sSM1&}nXY|2SZEG|LG z9MBvH8oDqAm-x`ZM%dsO%1IRQpmUzwKnV_1gOtJ7OF+h-oHFwgiz-nTBUOXeK){uO z&sc#3KE|Lh(wqWl9XWV068d4h;B9S?6M3NvlaTU~6WRg3paW|lXU-tT$rLmd6d?mB z(34}p=gep-AXI>sQ-j8+5h9>zMet||WZne4K*~2X#5DrxSW4)`67s2Po+02qZ)gzs zxCQWV1URXHrwCCRmEcMdHZ}#@32bI)VuUjH1J>tigtlG=QduCk0-!gvAvFR(1F7In zJ!pM7xOPI+Bd}H@jD`Xbmy6Neo&I9US5a+A`}O1Ujz|G|J@` z>IYu^2%2JxuPDhc294Lp7bljbrhuxI)V#!`oKyvfOlDq5aeRIrgKv<6F|1sM9ySRX zt^zHDLmMMSbbXBsK{Ke(+=oaRuBIp<3qSQAX_zg@)!7x)x4}I`3MrW&?KRly7R;en zL-2L#prsn%4Vs|IC2$7=F~bQl2VC8OZ%T;|3JwfHbaufK0YR=Vp3b1Nm_BMj2 zHw`K*3?Th$ZOBxoL4}*9jg1L-0XL|*|4DtuRQ5&lJ4GB{MB2F+Dz|G&i?0C9xzC zX}<}$MG%iz3IM99K+D&HK?0{{NfSjO#v@xO}qp~13@&|PzodQ1BbD-lfWs?5WX}Y z)T*(>)~bO``5~u%_>NZ4>hJjYc<`N{@ZJdgT29zi6G0beg2$S{Ekz@6{}?=( ztO4zmMrNkwq-ele2ar_e8e$OdimO%zw?1I%Aie{w?gZ!gV6698g67O1Z42lQNN|4x zTw8tYqq9tby3cLq6Pq1$5MTMyu)wcr2<@N|n04+4$j20%ynfQBY=9<1yeoK3SDB`Qav9VX&}IbK=rY6t&{#$g=-L#>YD2^@ zT?pvtANV2QARj|YbVP7NiU&|X6|_bcG)Nuh54uF%#}&S!5K+K@I;-&t;Dn4?K|!41 z=@)|aIx6sPCdhhwH&@4y&>&avcoL-54z9{TGg@F(@u7Z@f$mVyj#yn-i3MsQVC|QH zH8B)`M{#_?6Q8hgoC=+S(hBgJ7050b$nruB1yoT`Uj*J2um_z2iDVSG2LNjLD}d%T zuxN#6KIoF(t57Ebtr_Md_d; zesvOy(u+00ivu*kOlV_C-w&n~z+y$ycVI#wk+W-TCJi|PFT-{wks}aEiSg5^sP&h$X z;)04$a0MLi84O+a1}coeF^DwG1)gY%2TlLM+8y976lir2bSMf`(m}RU!de4pqnt*d z`UZ3W8`x~HM`5Ebu0F2LA)p~&(CReTip&z&)ku&*VCR5P&%Df%%*33`D#*1I(DD{~ z!5DbIj9*A_ypN}oixXsi4t&Q0#!Up^iyy!)hu%a0x|#s#CIS!_Jj#n+epr&U*8zG$ zNqh--I}*4;2Jb}zoqw*SQI?;RSOPkc9yF>58tVbAP>L_o1Rro4UxsC^jiaXz$`Tt$ z`b5bGpvyf$(Q04-S{n-uAJ9}7C|-gbeL+*N;Ql@6LP|tq0di`(0;DMs666>FnoEH+ zbHI%Wh&)P+f(KC{mvyXK;TF z)O>Rc2mlXKg7S-op(beAeh6qJRv|tfa?S{74HsyaJmj2UP{9)qUV92zc@p3f5Dy8c z_;>|l6GI~g@QKQxK9d6Ma42w(4!X(#HWz_!g#(@y4fq!upsq4NI|>P8YDsPZXca+v zY6-}Jpt%<4p>fdhRn!Cr9mB<);=s8D)YAb~ct)T#gOC$c;1xEwzz#|F1Rd}XS>|MD0qzI}`+zQ71?_r-<|?q=kkNl| zvFHaXWkJynwE?qzU<5g(#Q^1)e9$&*P|Snco(cvPMv&F%;4}VUqg)zguq*IT7WQf? zfQLollCa~rQCH%E7xI8M~IBt*xwIab?IMfr8KrVya*9W@E+&LgLC>1m| z52=2TZ|p-Vt#C|-fQAY{6(uzJK${iN<@nIr6O<6Z#RtlnyT;&w08sG>?!6%;UGRJZ z=#XwxBL-hbXCu(=l0;1fjYQ38gIFCfZ3v}}ptLcRHi6Qnu}}v=*5)|JgJ$@_2^!qN zf$fb34I4um{-A68KnLG}j&1>+kq(jx4)BZztsZvq3g4rLFfT@X|b&n2X|>r;$dADZ~@{L0Gb}~1RVeX zsdXUHLQIPgyoL_T*(`28j=>(j{w}TxN-3H7N+^{k%21?nya{B)4PrC$1QfWN2n%{+ z69d>FJ7mQjtG3xh>k*hk%ZJ&J3MRL0Zuq8VsBJ*MPIM6pTQ7Zjg#f zP!$ha^$rhX49 z%fN062=WAtLqrJp{~DhuLbPtXAbu#1kJJlzqEW)ov0 z(6Sj9|Bzq>9R)o-J;=BV+(_84i>sv>{6ycL03nJ(?WK&U?rhVFdV8UeJ+sptXFU)+KzP2j07PQGlOQ z4lcz(i&?-$IOIe}LN~?bLZ)VmONvVJv*U9Ti$NErfm1E?IyI<*+@ze;ym-)J@>D(0 zcInbQkV4qqZdetSf!dFH@$u!!849)vXiCeIOY(D*2pNc`3a^Q|NhSH^$%ITqQ$@hU zBBDHvqKc4-#5uAEMHvAzi@~ak340w~AzpLKlZ%LpB2;Ar%mg_hH;JHI%ahR+;x#wN z%p@^BsWc68{h)e`fjVmHMOt|PNs5@eYCzL=&^>qH^^3uvCFh{Q6eGwcdFN2j8Q7qM zdV@g|wxA2Ap_}B9J5Zoa@TC=grMXF|MgD1^zHqUECagW=X%vjy90E;?gBC`CFK$yX z0v(VCDH#!y#;~)X3=Kg2Uxtd3jKm!9Vu$3!Pkb)k)WX$ zXjk0~A_%ItAw5#iC^@LP2W~`x>sn|N91^ZZPM|}K5G83ms2&F$tEIpI-}b1W5e(Y_ zsQ_b7@8ZV>YA9kf%{(IbKHgG>Rf zfB+r&P?VULo|>Pg0oktyS{tvEnwO#pT6&(JmR6iv0+Uk!3!@yl0oJ1cSx^sY%7daB zvzJG~%bAp{1#z zsR>%M9-o${qo9#ikY5~Mf)GYl1RK|eGbC%`5RCp01$HE0C6pCujpgu!n!Bk4rpwT3o>ZG?ZrsiFyOjU=cK8!Jz@^g+W&_ zdisH;0U&$96d;Stz-Qfn(x;&TXiOP=n}o4}IjTpD4IyI|m>z)*p@1fvK!ahRV_>0$ zH>ik4F2F&2P$3T5A6ZcX+K3L$GtL3=0si2{#?Whrp{@sKUC^BupruR-CWe+K#s;vx zQDC112Se6NV@#BTOMP(H3bAM!+sO{jIjM<7pdGcKR=u$icoZcbdS*Uo@limKKVq2K zKohz`2ejfnB;P49IU8C+A}~pR;b5@Az6v2GEEHP4Ff<`CM04&11{i! zAH?t_Y>*F}XM$Y=5Hhd@gqSjrBn?%Gq6c<$Bc>h`a5liE2eu3WQx9zI1E!2QPSYR< z^Ew`2CCa2i?cxEUyuR?G3Emvr^mK95IhbBI=2_Je+axV0em>UZ!q}$NU#9tU}^Bt z_Rvb$194pz=u&1wXJ=D4S4+@=%;1@b`1rEKcu>_3RSs^jL00OcUpI!BhH}g)0k!W@ z_DMjR{UDjtywsx1WKgXL3OI1MLApZV^Yt~5wkm)^3N#f0-YNm!mH@7<;z28p@KuJ; zyEs9Eso*`RkQ&DTbb=E`ePe3L5FcM$nG0%}fsRwsD6Y)a$;>Ut(J2F6&Ia0c0zR2c zLrJf=GPf+XNI^+K86>Zu1lp;tTwIx}pyc47q@WB@kJ*cW^p`+0{m|)6lrE|tmlRv~P(6x<$k5AqBPa1Ds}@C**|cL%M>0QF+ha#AZ2i;5JY z4Ps$|51noUH?2X7@WAx~Y{<|6e%d9>VW6|S!a==bSL|nZdHR9Yo<@X#RwICH1dRxr zLCQ;5YZ5e2fVOTB+osgSl1c$O<3F}?|%3jzy+Mm%*C;z8q(h}ka?4|Y}y zmKiXRG};sx+;GUQI1>d!a4`bfRRS8uOav`8&QL&E?gG7A0Ly|GNDm!cOhVRDf*MQl zn8PXHwOP=XrGln{QK$lVyGJ~D037Z50=O7>;UIW(IjEd;^9%|Ofoz-wjTB>Cyat)k z_4kVhHRfDGeO!Y;2ZaQM#CwG}!ggu_0U`Q=0f@ERP#Wmpkia17cZsK-vbpxFQqM!j2fGBYFQ>amZ3Bfmd!!i)~;11B?^@z#^ zG;3*qI4OrAJ|1#rJLKMVq}&3Ic}P#vK*7)ybQDr5WLq3)w5u3#6%lAh%$1(+h zj_3(<^z?}j1LZXE+9uF&ENBH6%()=9f@f#JBc-5~q2ME2j2HrfLFY~(Y7Lk|xW6Fl z8$oTNa8EZ+(2@e=Wy(l-0j3kN%*zP04-(792GGnpwuT3IX5BCzK3tC2UTKDMyFJng z8lWyUxb+*aV8H-esjC28xeHod7>}~h3>0kOJZug&16mbA2j`$S*JF-p8A4Z}KwD5K z4KmOwThQ3H5$GB}NWmTN>*(nRsUg7UBSRKWm>5{XMkS%W3fPsd1{KC`&_ovj+S&#h z!v*by0^f;*v^o+j37YnYjo!f5E;;)`E)WOp_V>YZg$=kt6A&B^+B63WEzl_~kkZg8 zGQ`y&-VMCr6LhnQdx%G{g0T)NG}1vpkj$t8BX9_fjBtQv5?G=$G$3hdHYAzBG=sN= zfZFmXb5EeQe0;pKe?VlAr@Kc8s1pX8OOMY;OwMM2uRsB96$>5MPS~7;`f4{JJSJ=@_M#iAY6!1+WrV2)e#>fjr!3{V+u<789{ZRiy$3{VpN7NMt z1_nmXptYLdv3YPC3RDcnLxv3vK__}yK-USu&uRm&i1rK)^7mCRU;x#J;A@Ofdjp`h z0i^735AqKW@leoE&^1IoXvICX#5b`5G$0Jx*9q!;1%-o)Hqc6G?2Dcdi<1m0;5*e2 z{cunx95(Wd5G7*ZIummAG^k}m#0pVDYeQiN5Q6Tfj0ev`rlh7OgNioLC@8ce1a9BQ zgXWK5DF77ipxX#R6C==?(i0rz;6MTGa|hLj;F1uQ8c`E+Fm#X(CW}3tql}t@7gQOd z8Ur;2Q=Ji!>Wqn0XF{Yp^h07HITF)-W<;8YcF_b*|5^}f9`>ysnC`<-@L*9$Y>XHZ z8zqLs#)%=Zk%E4i2egnubjn=~P?|iD_MCwMbfUr24|1CX@{B+1z+^0w?4Z*dAkhwA z)C6w$LQcPq2VXG_I#0qs2z(V5XfG_N6XWR|@8s|AgMGRJn%_Y8WEg=q>w(uz7&5@8 z@IfV#uM_BO6axbb1LO;uQ10Z!GU^8^*-A@ND-p30kJ_;u55Qe99YS^eY5${ve{R0-bJSfH^w_+vW(_>J08SE2QP*Czde4FK`7J z2O3v0G=tsegv5i*_WOi;2E=2%-pkX^#We!d#RZp#@I()F6&>R{0gKY9e5!a-d-L|X&e%8rkRtbKs2sg8H` zaRak_o#LHCLA@=|Ay+y1$%#3s@wrLy$)!c{xrr4Tnha@0si~kthM-9Sv=!GF((qO= zWGG5aOo2#(NAh5s#lUqgG;f)~8y)5fMuw)~WxSB#B+%G1I87lh1g zJf%QtK6vLu!2~?iff(`%3ia~?t;7K3UX=bj=!#Fs?l&w4-@v-?I2C|H)5+1<8&>Nh z@{*xZJZNkj>SKg>5bSDbXsn^1&F&GdUDFd5qaa#1k0V1RC|f^^m4OHDva zXk0^_J>sE#cF^u@aIAyQB8D$5H!y-91&Y)%1dpzp#hWS^!4@xg`h}Rnwz9&`F@)~4 z1P8tWIBc;LRG?NOrZ8v&frn!dXrdXiOC8+CgdhA1TF3xRHhv-SNlmcpVQJRS*Ap68 zNR3`ZE`l|B!DR>dYENHRUq~m{(9GBZ<}K#{b8Jg(K$qkx7=jk#8JdCS3KT#)96}&$ z&=y-*z6K>%(1-NUcWjfBIcxR|YZ|bjA@ZXhVHLm%)M7yoZ8zHGul$@$sm$XbRv1 zf{YXl%~AGL#>WRkHdHEr&$%82=;_u&Sh=@naTjgfiq}i z7_#;p#)XCocz8O*5quj!h-(nMID*tdMwXB$!5pG7f*!F6N!g&YT7!ciBOL||@gW)D z!WmqoE5yf_fVt3(@1PtDFI7NY1tT+1?1M*2AZs1Xz~hzR*-&t=19i+6+%^Eumtqlz zdI~%t1THZVs1ggrQ@}M1K@N;=Vrx$|_hXgn=x64CUu7M8Q%SbGWFUR7{i#qsgrQ7n|jk|uhVCI)7vW+tW%bZ0&}hhy_{-2P!EsYZl0iEO-Sg zc$5!X#UO?OA?Hnj4!i=NHw9Zj;28w3KarvbCI%WV&duT8EG|h-%*jDNvlbx(PMn}iR0E*xAOi+)QUy*rn;O6P$3OaEOTu&Jq7@5FA094ZxF|!V? zv=I(~j1U@u?idDj2w?3MaMc5z`-^uC@`RVN@Fp*O?f?`A#%?f=AyNdSrD6(cshBc= z&4X5`9w6huWgeC@AHdZQc)dPo>c+^($k5ObcG5HG#x2kpG7-+819d=UB)DjY4!R(( z<_C*2z)DW=QPQB3b-;x=*eOm1qZQ25xA10(JcgG>d@xTxQ@M@}OJ7pgcsj1)aMD+E51S!NJ*} z^$}p7#Dmu_#DnJC9eqFtOMsR#Xu>w;f+ayBItuZi714<~plvQX;APREZN1Pn5K!Hq z_K*%}E)vsIpw^fhXxAkPp_XGb3bZ3l3Afz^@lk#krb z2{~HS(Kp^b)G^3K0rhGQuo!6L26!S7KI;ixcx%Am>*VSZ;u9PXO`f0(rl6FYl$uhK zQ>>p_TmZVHGc7Y+F9WtG02I=&#sI8-1E(s`IVdmzm|IZ?{y;~1#ltE<$R1R<0#KgP z$ODb-g4cb3cKnwZnxTv>xPral;vDV>Y0tqI{DS*bpdP2MD|EaaJPZXoauQlYgN8GL zT-`w$}n(hhn|U@o0x_BCT7r;q`8S%pc}l^z;`VtYAS%mz_%_lfY#|LXlQ^| zEP*d~g%&Ab_lARSvqv1B3XM&a_y*UekfTIEl{2`MgZ8>W;~3!P1l+Ce;G?~9yVXts zbgOidra}$q)^U)xpl(HTKS&+e`I-#z(A!BsR}dEzrKV&imw>N-*GR1ZpFN#anwe9Q znHQf5J|Is6EUcqoi0c#s@XaL_2EOnh28}^L_wo1#fES#D_Qx5(uCD+s`veuZL7*O7 zaS5nVt)KxZpmgoxAp)=^4$$^LXov~aM26(VU`Nn^okp>afsTQWp^kx$LRxZ>j)Dmk z8B`b;yISZdlosh285`*+7#o2V8o-WC#iG3!UArYzyDl*EI-pQ8Hq=o_(=jAYuMwJFBamJr;`AD$=`{xFH6~6kETmy>HUa51Ax^I; zn!TnVy{5$JHAB;D2GVOroL+M@z2+dj=EUi>K+|gh(rZDSUQ0B+mLR>B#OXCePgss1 z&4$FLEcB%11lCPt+A>5>T+U$KM5Zo7^yK9N)=gykGDJ^cu3+6nrZ7YFB<2RzjgrQo zMK)xhz!2xij3LU%3}~>y0yfxb1RE~{Rdmqe41SLyqFoJ|CBe2_2z(}wMZ5{@%ofn0 zD)Es0W+k8t9KdIz>)L^iX#tUmc`5OEsTC!f;Bj|QaR@qs544fr6LfPmcvJv%P!sYN zHPH4n@L6E4c`16}$#%#|O}4h+As>*tAy*rN+FHRu@s7^U;4vb|$dM7K5r{OI23aZ% z-t7b$o&(j%kalTsNKlBscf5~da0uAZ3h2kVBb^zb30dX@S?dHI;si6n1gPntt6=B@ zx(OF#FQ}0kAEJO5-UhXZ5EDG0@#BCXSIAN&$W5E^pf#-;knw_$e3#Um)RI)4f(q~n zy8)?rDVcfcpbc^mXM@5Hc9jqK90MH%C^sG?r2{$#E+Qh{(a95bMIGo~E+cRs9K5;~ zG)fEZr-R05kwoI-Ve^QdexUK45EqaF*N6bfxS@iwa)pAjGN@eyuK2+N=-{@Of+09^ zQLfTMJ01l(s{$Qrg|^Na+&o=gQPXk#R z3_6L{$I}J0c{?6*6Ch|`Ye{CZ0_a38(0ERKJjyMv@t~z1$me5%1faPGKFxwMt>fz& z925^aHzx{Jn|h6+CmPFTu_WdYIJDp2POlGbI|%01tSC4hzZi9LKsG{}=Y`CfD8Mhffbc+Z0S0e4Jd}K^@NE5EmC$H&Ejq5&+-=!~oR# zhOAFkFatNv!Pi=YhGyWW?i)aM{eiftH9GnwXnd7@L`x!_H2Dcogg%1rvy7&_YVIy8vJW!3JP)d1nmnAc7;xTSb$Ht zh3G>RzmT2Spph%c02F9*u`%diT+rYNXeVk^i<5h9j?HJ}&1f(oOg)V$=3+{B`6#Hcs)sB{ejO=|_r1&|<7q5S29W=28ndAd?XQ6urLW2Wb{ajpK@GXIco`VVMMMDz_te1+m z1P1IY@FkxpIl&0p+lvT^5BBs0RSf=!DHm{GECO`3qNB5iE9i7m(CtvLp*|zf^d-25 z1_w8JmJeb<69#SJ>3vAM-3?gKs(65x0{uM z?s|dn(D&jMq=W>8f^JNJ48XvLv%uw_L4|=6C;@;+91&T_EZ!jA49hwXa4*&@-VE#? zP!0mmB7$-ddiI8o7=Ys%)XM?oJOcyd#sIh`1s6qN0@OH(X8_-+f!u=z&8tF}0YI+L zgN@#JAnw8f4YooP6w-}XAW@7PyD)AU0)-}GhmA34hYkEf9~`%8L%f2OL|jZA(-(A^Mm%WL09>c~A#S=?0PUj#j~WH}`@-)u1(!6S z^o4Th93)qPDl*7gCGhS%P!$U*7NT4cE0@4SFpvaG$|)l z6W6?*CIe&_3228YC`#i&DO;l`HC-n+u{c{(0X!;>h;WdMrjCLJYBDHFP1jV@sM7#z z(S*luKyW;G@jS$1Cb07r9l@@M_deyaiuZnXkPHv zPtfUW&@>qzuc4p>x?Na70elIuk^=M+1B5x?yNU^%`CAJc%0bGajv?{>LGezmKK|jL z!7JEhbD9boka7t$M(5*7t$XXhGewZ)0PaElp#kxb-U9OOAJ9RAkfsA7l|ZI?jGPoq zp%o2i+{za`)d8J}1@|{VTVTLf^Ed{B7lMF$HQ;3-kU1{c;t41GXtE6@Rx z3aScFDNqtZs-%sO+kUPF@R3Gv)#wb~UI^;Mftm>rmtvcY0xh@!ZHWdYB;?gzpcNLN zb`HjpFO33lPg7F?wvI2 zKqn+2{aMuA&#-O)*fwY9u59GpVkf<2=Y z;z2W7!Jbi|=`M&zV2wf8)FF5Y7b0k2(ue?pR(@c0&_Dt?40I|YR0=%H2yGgGq+mva z#UT|QXuttp;ejd(=qfJQktQafxpMe2VbH}=;5Imf3vo8KV`zwfyr*9nNY(&pjTJb|{em6g6(m>ybQCf8-Zogv2XxW{WDg#A`7>k# zRRkz+fu>17^UbgWZH7d$Qx)P0(J#wK}k_c zW?EW&3FwC4`1k+s{AV(G7h2b|h#i0JsefP9Wgk zt|0@YVDt2YrefrK<-qG9z;!CP&W6?~kd^;tpjr()j}11_#Xr=^#}%UxhTdpu4BCGN zZs>akgYIL4_SGS4EWk}I0!LAU)j(YculkTKH!?z6d<7Z50$;T091sd>_XHWj#?_2q zBZA?celGsu@&0b$H4C8A#b6yNPy-59jUv?yrUsw`+Cl4kVQX<pVhyL2FVY6pUb- zc;V~MpanCu1*xD>oLQBcpQfOZmJ$!{mMCZ`_&GU6YBIz_&NhQML?J#sCqF4MCq6T` zptJ~iTLEO8&(It)k#EERy=$=uavuWHU5lV~mYNFSyB6ayWz{sm@|p}-m-|5X`9Y%{ zd=Xfr9a>i}BD<>46u?k0d*Qji>s=n6oV zzZ%CIfo69=n**TcLKCtPxXQwI=A{uRiEDzd`2?@Pg!J>EH93+7Z+$ifhM=W^8-j*P+`MUNXZ{u8GsgIK}W8zNWrcp!y*OSsf0z!1h;{v zxTVZ+OTjKk#bOt15g8UKOWXz;;tLK#Jo@kih#{U3F~k!jhIqon5Ko{O;t3T)Ji%g! zCtQs1go_cLa52IYE=G95#RyNh7~u&QBRt^(zt#Xtk}$#(E=G951?{FmaE%1ZKE}{+ zVJL%7O+x0mQMRI%f%`{L34*)YK^G|dxrY0AI>BeUm5lU^^bC|3KsPlSfabtK?3aBLy>hD75=wMAa=u$#ZX$t9XfhK5Rn~%|Ym7sZ4&|qC=6K-EyvODs;# ztWtBMo&_oIRFtd2jibr2ZzYypgBxueGk_Pq1 z*we+;*(V-U5kOKnQq&os&BKEyE*yhG!1trVXC94V!>8cJE9kTq&=P)UZ}2rLZa)6u z;G_laOkmc^poR9J-m(dFo&y{>uwffW+*N?&L1zlWy7CB9pd+}D#rj6z#TB4I3{TMD zC1gy)-!0w)G&KXdq9zi0(lcZU4d|c;(1IG|MKlVUdXVFub?v}|oRH--uxNyLKR`$4 znVEnVihzbvKqm)k=z98vfH{s4ka1v8t?BC+0XmN{Ew!j9zeoc->WgbTaZnKYc4E+l zaFDGg;3GdE%@lZ71+?Q1b|yS{fw>WUW*=H@gO>_J3;;7h4gxtG)MSSafI+%Kt}dYb z4;o8?p9xiv3_1Y{v{53lI2$wy1Bya$(!}WPfk)%uS5!HJrfEQ3jQA1-q{SAHPPS8K zUSd(D2HIh25INAi9O|v4hTwxTgI#?c13W;tkwfw|IBI=dL6`8nRm&+$n~Qabvkz3|tREswBvS25k8tLx3YV&qgSK_jyCIA+&S@cf%Dx zcjAEauWL|{V@RlPyosebs8RyE4Rp^-K)hQ#Z2rp8T>)ty4#>-(NgmihfQbTlA1r(@ z58l{vb_DG>3Jw7k^57;Tbf;NjIcT>T==2QG%^R8u8oIimWCFfBQNc#RK*1igE3GI! zwFItCAs#e;VgdtunPdCZ_m86e1>??xwZb_c3?a> z^B7_7tW3_&D=vW~DR5lC(hU0fLk1N_7H+Oipw%a^A$`XnM;B+L(R>pN3j@e?N<>XM zD=@@Yl;ju3Cxh<5h%ZhogPdfUnwOZAld1rb%gie&j?Yg^!)zwP&U}QdW-%~;oi+<| zKXf@GD9wZ0ng-x%1az$f=%{2DcUP1~gBfgH8uY{-Bjmlkpes~B+xtLuDL6ZT1>)mD zyY@l5B_YSAfm2vOaD1pQIR4?&L7*Ar_%QG_x}XzBL5*~nZ;wFOhBS72_UikwKMh4ix8%STg0_+k(OBir9 zwlIN*eTaXEqYtPT4(<~f8o|$QK{yt&mI1U3PC?1gPzhWvfJ$jdl7Fz9=!x-BUr9=Hh?r)K{MYWu2@dj234fc7)DfukQg>rFotzN9i2R(GY6oJ0k9qt z$Vx=^g)H2Hs-5zz%%o&g$_HU=He3JD5$!x$C> z#%?GLW9Sk($f^qy1_pO$XDbDbA+GU0 zo*}M5jy}P*23(F#p0);D3}B!FCK(u9ptK2;2AKz9!sG=&90mpk5h!f~r8S^5OdU)g zOg)U2fU3hqgY<*k4^jql3yckN4~z{m8^%Uf53&O$4ssui4RRxl4RR-pjjR{hOk{JA z*&sK=^b*4c`GEywAp--0AOiyf6O?9QU|>*UU|w-{&*yIJra99 z0|SFJRQ)an1_og$`z+J~kiS4|P`U(}a}!A%#0J>`@}mSJ0|O|WL25J@A>jmKYe54W zWDZm-+|63h@C4DIcm%2UV_;x#fV!cNfq?-QZrh=G0%Xn(283NFpoW6PL2OW*g52`} zN&Q0x1_o=WT{1}S0kJ`03sSFuBo1Q3#8r^QL2QsX$ekcRf~*GF3u1%BLFVWnsRyw^ z;vn?~Na7%UAPkE;IjGw}G$^To)VqNcK+^z}2@khKsCp0$i?0%>B9MDPY*5|-nbX0* zzyK;9Kg;0{s%4HFPM4Jy7CNgTw6h51G#aS$6M4szR8 zBylJctNXQ~=6fQgB`*dB1~I630#cq$ff@wzBb15NOjsTP`AZjSPBhf7Aic2+3=Hg0 zagdoXb~ch5a-jBt{89k545Syz#A+`n{y-R%w?OK!sW*VS14QFe1B!c)y&xKw8c^JW z)PQI{s9%PXdXT?h>2Sc=pnHKz5|bG8KzlmDbOwx7l$w*Mmy=nNT9lZhm!4VzI+q2s zPy^bVWY9xVPy|1_B_toaisbx)N{|`2BQ7u7I0vSd|a|F`j63AQ`nmm$z_f(Vv zt8v-`y6OqHDIi%;n0N*U;Z_9Q*h5eOc7u@ogmgX*s(Z1j!EPK<5P-KBf+rS(Q%izU z6H{=z5JhQtQD#XhZnZ(Fx%rSIxQR0xQ$5szlGKV420ieWA-$yHVyKNEQN5zfymZJK z47Z}xRNvHG2EC$ukV;TGHqF@(5iaX6nLYDyCwX(U8Q2ywpd<#K_DHp6t+N3~AV)ImK^y{3SQRCp$`Go(qC~HtD8GO~FTE(g6xK)rRpxLEZIFZcEDRt2 zgBehQnIR6!f>6v1p#Bqt4I-HtKy5z|3xb&$5*fH5OmL5oi2>9$hYBz-FfcPDBRF7w z3InK@1`-6d;29Zu81z9L1_lODFOP`<)b@i4fYqllI6=9fmOUdw7efe?59(ntF@V~_ zPyw*|42BFSR|wp4>}RNg@i0gE&|}sP6|A0GnUNa0SYRgjX+= z2cei5Dj1$Ym<$m6yP-S?#SHg7j9&v`KuKnXI))!mHYi>g89Jdn2*u3Mz`zAfFrZc~ zBLk>k1(5@h%nVHopxz{i4QgdGGPHx3aLmlm!k`D$uMGBI8(a>=U}iw)qw7bv58ZuT zAYSR%mK;)+Xu^S5HV)>m>P@^>z~8;9uNkUWM%;M6QLZic|HgZm=7A~KnO821RywI z`5-htEVo01nHj<$3@FLW5CLUDC}xHz2m?woGsHky5Q-UG%0Sp4l9^!oDE_yGpqwqaLf!Z4Io0y44WVfD9OyQ1TH9ViPzF*DqQFrXwe1895<$^nPZBLoM`e}cw`m97wBW`-9K29#uG zcm-uaC}xH?5C)WFW_Sl>K`3U14-f{FWM=pTWkD!rhA$8Xlw@Z324z7gW_W20THA1Dh#F*E#wFrXweWPlyY1J%z=XypeB8lMe~&w<8=)eaCNnHhM{pzwtl zuA=aT8TeS?n!$4$4k&z4hCCF$7{fvozBt2e6utxl9~-iHk_-+gd?|)n6uvaWMijmb z!&4N#EQ2gNvUze0K`4BAhBg$w0>ds8z9Pdb6uuIJ6!H)rgEE6R3SWhx7KN|Muoi`{ z#&8FPug<{3iR?ZN23r)qCPO|7UyETr3SXPyEDB$T;U5ZLmjO0Q1+hhsAptZD4B;>^ zFz7Q(K;auO97N$8GJHni8!@QB8r)zrj2S{u_$CakD11|fttfmmhG!^za|SWca5dO0 z5MjaKio&;KC`I90F)TshgXR}N`XHE@K@uf5GBZe_@ukuDvS@r1E(0@o-U(thh-79! z$vh0q;JG7^3@FO^2KB!lK5Ml<;wITCCy%=P^FoFZt59$>mgqXp- z7-T+Z%pRE!>SZAFL316*e9)W&G9T2dK<0zy%#isq2oBgipk4$*h?xP@Ye449BRF97 zpt(zg5Ho`!f&-QZ^(qiT%nYDj1Tr5qe}>FgMR36SLGz3VA!hI#Br+c~?}W?;&ATD< zLGw1qe9+toG9Na+4-sQ#0L^Vc*dUUb0W{wMVnHx7ytfPE!{!`dd_xEWN-{GTL0J%r znZX#sfRfA%u(>3N05gLrgaIX)8O)$82*u1`4q-q^W(Er=3qmn7SV9<3l9|B@%7ReL z4Au-+kdizo_1;J0KSkref$~8;2O)+m21aNW0ri`O7;+edp?r`HAoHZq_e-4fR0FD0%$_I^P z2r-l}a3U1}Apgms@r}{=u24Q`@J5KCj3ENb2hCs!F;p-VLHVGRBg9a}&;jK`{9D7Y z6op^Ma0tqW`R^i>4^iL1@E(QV#2|=NM1kC^3gtu8w=gh3hq(2UVXU;&BG_Oz>S&{( zi6!W~e9+tqXmAxa`+}y()Qkb!91WT(V@n3iA#XG_W@Zd%A{K_|B9@?S2X3K$&Y*SH z@$o7qMh50+YCr>#sOA_Mqnl%70^0b1VvZ?j6)cK~8E6v%s)!jwd9I0`fnJiSxoNVI zk%>i$sd=JlvWcN#VvoRD;CSRFgzw3v-J!Q$q_g z!(?-F)08wzi?l@J)I_iy@hPckiKRIu@!-q2^)mDfE%l6(4GoeFlFU+!EDVfH3=`8* z(u|W$ObiT-l8j9)jFKT5LCYLV3qU%I^o&gm4b2nHlT%Dn(vnhB6Ag`wl8jT5&CF5^ zOcO0qAUcXmQZn;OAZ|-DNi;S#Pd2u+NU=yVOR+FAOtdsNGB7eRu}DfbNP+r4B^$D! zO)o>wT+cYoFgeLEDJ|8~(!k8r(!?Mw)xgxu)WkT=ILX++!Wir-P(lP9ed7#X>V40YjVwh}dlxA*jWR#L-mSkW8cN8e7 zEcFr-Q_YPMO;b!v(u`A05|dJmQjAhe(=5^qlTFi%EiAywiz|yuQgcD(o9USwSr}PZ zfI>IXA}!g%#5CDB4HO0`NhX%2$(H6|4InRoPL~2{G0`)(NKGxTJ7Uqd&MrkIANybLT zMn0*8o^gO=ouQA=vf+A7^Ebc8(JDCTN)>)85&t8rEipAUImz5K+04?=*gVz9+&mEyqZrx1(8y5F+#uQ1*eu1uA~D6>Ff}pBJjno* z_>w?TZD5uPNp1y2`B^EcX&~Fo4fPDojZKnMj7<#;Qw_`wjLi&8EzMF=EKJOkk}Oj! z3?X^0xF9vTC^a3Fu`Ts142?|;l9DV8lTr*)l1&p$l8qBBP0UP;%~A~0j8h=agU2o? zWfYermVi>Lk%gYAfuWg!xmjwWL26oRa#FIHiG`_|v6)e_nW?2QtWd?Nl8mdPDxIKq*{<3_(`iEyNvaWObjf{l2Z(m&67;c49!gq%uS4q zEX~qV(=05FED|Bf0i+LRm!Xldp0R0~Ws-4fVv2={L857zg=J!zk#Ta8k%6Icin&2D zq-+Ff0xcm2B?|*1y)+|JBlFZGOG9H*GXqmYgCujaRCD8Gb4w#bOABLY@d%4#kREeW zJy4>wFiSB^NlUayOEobvHMKA|wlqn#G%~YHOiW4xr=`5q@|?^hy$n4IJy1Doo|K%F zW}a+mm}qEVnQWevXkwC@n3iZ^X#&lg;A1) ziKSVhg}FhhxuKx}ByWQE@_|Z2BRyj?OH*SbgJg3v1B2AGwA5td6hreQ3*%%<%M{~e zgCuZ>7N_PGWE6oy)KJgF+|1I_%+Sy%%{)2HC?&C`&>+>wD9O+?EhW+1AkoCk)FL^>)I80=+|0r>#RTHx_{6;8Oi=bR*0W5rNJ~yj zG%_%>G&VOgPD@TRHZw^}vNSX|Fio~Jfj9|tq6tX3p0PoqadM)0vRPV6l6kVFnW3qP zNt#hgnuUphiAiD_q(e*WN50Fl9*&{XzSmc z7+aX7nI;=1S{Q)JQgb6ib0Z52(-cb+v(z+*2Jrb}po-o?FC{J6Alcl&IN8KJHQ6}T z%+lP%%)-bt$g@KWgfq{udN}9R3rKw4(u|-N^YO--slBJnBq)II=Nl7dM1(LCe zo^c|msbXlBY>;eZX`E!7Vw9R_lnN@u3{5Nyp;ZB_MQCKKXOLoPVrgb!mIP{_q!^kR z8Jd_GrI@588m3uTn501pKDc_lRLkVlWQ$}=gTy3b(=>DQ6w5RdOUqOPv&2*bBhVQm zphhrExrKqAshPQfxtW=PrI}HZk)frfp{0RwnqgXMs(G@ZaZ(bbXo34z&m=L?!raIN z)b>bCPBcrlNHaD|vrI`fHcqifNi&2;aV98u%uMx+(~MJ74bxIhEsRXk%nedfKxK+q zN}{=$af)f8VH!hfNpU=6haE#=QhrehLvCtrazQ2b4N6FhJ)nzcpl8WdfR`0P?@EG7 zl?CJ%l{g24dgf)8WG3chR;Bua?(7ENk<5U6cmneIL(pY6NEV^3wLy{rt)jtlog9i= zVC!hW*BiR#m82Fq7iE@YCMV`FK!hqXOW-0XIw7V*J8o&IMIb(?D+gLu2J;%q_J5dQ z5abvph-aZjW&yTQ%27~(JjL@-d(2zci4H}VTgf5Bz4V^HuLdHZveQ`$U zbPQW_yJ5DGlf&78F_vInGD^90u6JpU!Y+Q_6s{CE+Bq^s0aH6Dh?8X z#Unb@oni$03mS%Ce+fhU4vtf(Ip8>jssYET2t*AyPNCys zAg42mLd3!86KTl>&bWpS&@ zI4IwM*xb;(1Ih~^y`Ys*pr8k_LA%R9Ngu`rc>|;ul-@yXn3=Ai8FG6D22k1uv0-NV zg2Xu(7(hGI!jagZ)rBB)K=y;!Fmphw0zu-SJPKmN%mJ+i1GxdTstX*Rpo$9?o(@Ri z>A(PH57;qQnM7voYhb^NDXMkj|evdcxD&0 zItRoCRe$fHYCw8Ht6D(jfXoN2F9fkcdO;YZ9yF^5iffQK)_8Y->~sT#J1lI$@y^Y_ z0E$m=I&^^SZbQ(@K#oKS#({wW z6z3o|OfN_e$X?J2FVHG7kX}$-1Y*PVf>w)x#6k5Ehz-+w9%Lpr0|RKMB4|Yt$Q)1{ z{RW9UFo0JDg4i%~7#SHDK<0pw5Qq&k2UJah^n!|9d5{`z1_scsKUF9jv_ld!LoMP6 zign1YP!Jmw@1U7t5E~Tdpjk%{8>9*}qX=Sy)PUj=#0IG;1Gx=q4k!#k;vhAka0jtL zYCwJz;bUMp$iTpG6r`Sy0lebsE)p9wT?JAD%1?42aYxARKM)({Ur_vk%mkG!AU4du zpzsCh1+7v9t%L-r0hJ*jHcT&Q#Un@@l*T}8nBGv3U3?4-pj~aCRf!;TKszwOWgs5| zc;#FYNR1-{11Rl**xb;1AGFI2q`r`WfdRC_7{msxs|BSo5F4~gwF#;hls-Xhn0r7g zWI^r$`2)m;xd)tn_!z(|20^PBL25wh6U62QB?blt25>szV_*PPPoR}}AiF@jJs(5u z0;N?D8|KcJAaOoO8UU><1DOd*w;(pmOi=RzWDaN-C}{PC2q^Fv7{DtlKx|N)g5$^u zQU-$bgTz7Q0BCiGh#&)a)c`nMIYG(+5F6%SP`HECgW?6mhWQs1E+BD`7>EsXGib#t zNE{UAAU4b#u-lwLDUt!aN`xEQmIgJyM1&a_K)Xr7<+C%S+y=2>YCzpHm>N)?5pjn2 z1;pltw!J}V2qX^j7l;iL2iK3n4B(aW;5rd%S1KrMp=@v&?hNreh|LXc!-L!evKLg( zRDjewL&`u9n;Y5=Zvcr4Gk{lWgVG7e4WKXqvALn`c5wMG%m7~P4q71%QUeMf5F4gu z3dkI1NPh^#hM5nJBN0g54a$=upu!cpI~Aq|l&?fYAoVOL?m%il@eX3c%m=M30jUAi z1t7aYYCz_J*f2GqGz}65g&~LyGanpxpb8w8u3RB;1Ws43khlQ5QxqvJxkAbTup6Ll z3{bd;xI)4i#70R=q6`e6G6Y;tffg??Fff2t$B4K=>;kQ10kJ`D1_gnLI0JY!H^{9Z zaS#o{+@L}f6qXX#f;$ zB9aUYpjGJL^dO0p9^7%H2Y1Z$09r*P;tt7cAT~FsLIkhgV_*P@gVGMDOn`+6sH+dM z7t~$@l{p|apm+hXVSWdd2_SJ$T!7fz(Ebi+#XCqZXr~RhtZ;|K1&GZJ?bm?)4yt@$ ze)mA~y9dPY;5tZ}fdLeUV82TLZHz?yUK;i}@4hjcQJi*ccI2@qv2l)YHKB&tH z_B$wn!~E`v`aheC>zu-2I&R0r$88{7u1eo1RZz7z`y|7DJKkNH-hv+*`WFhq!-jy0%4e5 zP(PXxG+4sGzyNA52}9YSJ{^n=+T#e)3)*D_!Z5v{T}6zbfM;L;?;sL}vO)DRj1AiP z1JVoH;RC`jy`UXEjL_qFj)2?=WuHW1gLd73^n&&hf-p=kXg3WbbV)F1=Zr9v4eGbR z*q|LRAibb|BnZRwf_Abnf*M2&4B%ZW!cg{4kiAeg=r|{kUeK-*5Qgam?IK|Wbr3=0 zZ;T8K!cev#5*t)pg7kv=K_Cp%3o0fUq05XxeHCFSTN9)g$_DNA1nD(lWMBYcm|hD; z1_nk@!;OJ~!3Lxr%63Fzdw|$x3=BSu5De2B0MZMpq!<_&LO^Pu>_{Yb0*GzKz>vZS z!7#lUAibbW!@$6h15yKJ7b3AMKx{Jxh8ji)hUskp>4h$PZUL!*vOAI36F_V;28Jn& z5De1`+AG5dT@pP9qz1}fh{Rq2Vw*8AtYL&;nBEN_dqJHZ1_p*LAT?0-P9!#{>|z8} zdZ2g&jgf*HIM9=#7@=%Xa)hx#$$}BOWdIZejJBXsh=Bp*EJn~EA_D^hXy_cK9%KZJ z4QlSg*q|~2#s-xMFg9rSGK>xCPr=xrJ`{{yj^xfdBz7|r8`R&1sh^D`4jLbWiG#+( zU~JGHUl@Bgl6uhYIhgosBymvp8zv6w9>Cb3-4HM~Xq*McHU`B7C@?^$L?N+3=@6zS z8c944iCu!ku0~?_A+cv6v6msSHzBe2A+b*(v9BSq-yyMoBeA8J7#LvgR7YYPA+c>h zY-s)Bz{J1+t6xGu;-E@{fq@|s#D<1LE)u&O#D>-{)gZl4c0WiQs&@*A4b?jj#D%HUA-q4OR02#D>lb{6u2^2eF~*IY1lmplnGH z8>&|W#D?lML}HtR*iiKjNbEom8>%+}#D?n4L}KTI*igN*Ky0YL7J%5$I&=v$0|TsX z-3=0lsyPZ`L;ZUS#D@^u>ILnEgUxGLfW)ExvIDW9>OGLyksvlyZw81BRbPn2E(fupdK-|~6G3dK-UT2w zRPRb8_IeN-s&@wx`y_}B)q4ZPhU$HY#C{H9L-l?@VuRXKj8MG-tPBh=|4JgUj7dz?F~d?hlAKqy$ML{LJ%9Ow*kb4>g_~g_k-9_z3V`1X#DN~v7v3J zJ**52ur}2NkT^6>uY%Z6_4h$+sQ42Q8!G+|#Dye?e@hI1?M9tl$B$L7hub zodRM*)k}leQ1x0!Y<&$zd>Su0L&Mx3 z#Dc{6u?2kz7Ur21w7!M=VOlfXJ zng{LWg_ZwWAaSUf#z<^;Bz80sJ0FSNg2Y~i#NLg>ehXql{rdyN1~tYR7#RL=GcdsV zZtOgWcoYJ$q5c&Iv7vgEKy0YEI*1JwH$`Img4j?sK_E6%O)Q8F6;A@Oq2f6pHmKpx zz`#%lVnfC2L2RfyCxF;cH48v&XqsG!#9j|#L)Gs zhz)fEXn!HBuj=&ME{sYwN~q5cBxH-xoyD?s8#D=ENYaljM{cR8%+Nb`3#0Kp}WQ6LK_H`uoM-Uro&JPe9I=1i!WEYgp zE`Z3JqDX9IB(@!h4OJh6#LhutHz2Vmg4j@d=YZItPC4i-E&&DxVJLewNF1tW8;A{! zqun4jRQxiC4HdruVnf9rf!LryK?Vkf=O8xJ%pV{&RGdQ)5l4bZY;h19s$Kz!?FM2) z%?|{zq2nQ;f(#78P<8@H9I7T8#D==90K|rhcYxSX@m>%cDn1>=1}!XNU|^U7VnfYb z3t~gX_k!5aGaE?9sk)6ax;{D3M39ya}~sfy6qN-4Hf?cVnfBhgV<1UP`il{x>k)%n1O*2YNj}d z4HZ`hv7v4@Kw_JL*iiNMNbFP)8)|+v61xeBJs*j^1&MtRiTxFc%_f4#cM?c!cO-T& z5<3NnU5dn>kHp@9#6F6|eu~5f9pwP4M?j-wpnfBW2F;_x*r2W&j18KXfw4i^1~&E% zidq;Ol;vP-P&EK!gVyB0*r4EpvB6_*&@lwilp9POGcf%LfX4};;z>y2X-Mo+Bz7ed8$1>b)e9PnhS@b0qz2j#or%O=fW%&c#9oKQ29Gg9 z^@7HhVRJWok<=VVVuQ|mf~mQLBn}>jgqrgJN&E>C`!y2#JresT68kR_8+4Ww%q|Yl zI3Cn|AtbgK5?dCDt%$@nMq-;IvF(u9PDpG|B(^USI|hlJfW!u!X$5mD9y^7q--RT;4~cygiG31@4IWd4>b-&_eiw-i z9&3fFd5a|e5sCc+iTwwO%>o*Sgz5#4!9v;mNaDgsY-uF6JQ7Y;PoXJQ6z@iJgVS&O>6?A+ei~*quo1UL^KhB=$li_6j8S z8YK2^B=&wJ_Aw;(DJ1qaB=#*NHh5eb8qQCV#NQ*aKO?b!A+i4<8WL)kt^YJ!p2;PGv!nlz9&w7;K)#0HObL&Zyx#M_YA zT}bSSNbIRd?DRsa84?>jJ`YvD2}yh#5*s{j4^?vz zN&F-d`z#Xs4iftT68kw4`!y2#7l;iVbNGkEW(AFbL&Z6f*iuMrIV83!5?d3AZ3SY3 z8v6_k40cFtS0uJ45<41+9goCLLtqVXn(c=iQSIG?nYwIMPh^J5ukckAc?O* zV($a7K^+tZ28KgO?2}0Bvq)_4oB~w+VP+7h7t8f>l&++Tyvr+|j$VRJX2&of~_e6 zt*wI1L4em*LF;1BItpPZ8?>JYwiXDq_7XO34_aph8y5wwvx1EkgV$L>^A32O6_gD+ ze;u|y2edX6HUYQaFIf14`_#~W4JdkG;-EE`Fg7?Ip=~x$ zJi_7#2gesw928$Lad5mq>orikz~TZuUSQ(jc!8=1#S2Uv z9RAR_0EIuSE&zu=R2&rkFmZ7BL&ZUB-eBV3aE7kO0EIIwZG*!Z6iCo@Zm_fs4rgc> zg2EXVZs7hq)W6_0Z%{UP%^Ng5gHFwct-AxSrGd7ALHm7RX&bcu4VIq4>)$|`jDdjx zef=A3Ega~iYFLWrN27pk+1abZA)G2Ca*O zrDyQEIOupUcwHPQQ9#$lF+$m(eQ>b!3?4Utrfu-J0W>|cfclQ1_lPuiR>`F;PqD^0S3srb4Ji+N(Kf7 z(B1=>8qj_LMo{8qU|<04?ShGe$AUl`?-&@sr|vU?7Q8bsFo4!iGJ*!27#P5(wKIYe zI|BpwBz8v7f_4T52GBZ5Mv&zU3=GKYuMUI!4jQ0hU;v*?&Il^B7#P5(jx$29ssP73 zXfqZA0|V$ZaF}~QCwnu3Hs~-gFnk7?11jVg7#Kk78yP{1%NQ6KK$mAQf(E@nYp_9a z2il0qz`%gKrVDi9EzC^NzBw2hbT0yo4IbNp#u4cJYerBeW?*3O1epn1xXQr5;16Ph z2GtlC7(zj8(55j428LJ=87#J9~g4m!!1r+`u zHYk!od-OnTsQG6>Y|th@1_p-9AU0?r9s>izLl7IP20T6kWq(By|A)k82leZrY6Owk z;vhDtFk@g~0FT3fHW7kuodk(P)mtF39g)~xAU0^j3IhW}0Ek@;svQ^@B0y|Vp~%3% z5D#M4Lc}vcY^a&wF&5B5LIwtg3XnJ`Q8O?wG=SKkN(_{qL2Rh{nIJZ3K`{dZ!$J@n zs%ABa4OO!R#0G8HVqjnZkEMVXCo(WF90rMlDnr~H|gQ_1G8&pKX z*q|Z|#s&@L!`R5>3~2cXOdK?Y31fq{fWp|I?L9CyXiET$4JwjgY*3K_V}r6fj19`7 zFg7Twz}TRq3}b_mAdC%)S{NG?+%PsMXkcv6?I18V=w=TX8+ncBLQq)&jSKL2HIxn7 zqXkpH8A;7fB=&wJHfVnqu_ct zhKYmr|H9bdacrpjLE8&q;-D=+Fg9r05{wPnBMf6Bmv!1m`PUGMZH~mYMPfT6vB6~^ z)D7S=5XuIZflxMhOdHBhMA8eoI{@aMTqN;gBsO?_8>+V+NxT(_-HpVah{Oh$lTf|j zauUj3jHG5I5_>%o8(d~W)$c|UKZwKzk9$MafXh!P8(e-u**B5Y-$!CUMPehDs~?fX zzaz21L{dVkaZ9k<03QB=J%tHfYT-ES)qWiMJ!Mdy&|ak=Wq!9O{?(Na9P8*vMu3 zMkMj=NbJ2xY;ZXbH4{8e4rQN5QgaoFeH)1l9w&#Ye~u&$9y5oEe?}4quT_SMgV!oU z*{q;(S}2J3H`k3?d} zBe7GF*x5+zLL@eLj2&ubEs}UM61x+L-H*hcio~9c#0K5}0ZU8Ek;K7c?@+roBZ==s zV(&*{gV$g~)t^QZzlg-Xj>HC!!$Z}B*JDH3FOk%|M`C|PV*f^BGlIr@p?cYo*t|$= z@c2AbjU488;AORI+8eeY#%DV7)czwo*XI;UQZ5XZ$(lA9_NROA4C#Aj>JBT z#J-HgzKO)XkHiL#^Fz&ijU@gNiTxdk{TGSN3>s&K>g7aY^CPiEk=USN0$7^I)m8+L zpFqt7b(LZ2LHns;Y|!#_7#loh0#%RPJ_PL@hN%IsNr0*Wb$4Onpl&CO4eA!c*vM@{ zP?rfN4(i6h*r09zj16k0!`PtaGK`Jf4xEP6j+%?a29I?>-3DH(0A+*MDnQxDZ9nih z22}hwk~yFov|#pLMG^;(Q9#urxA(yPR;c(#B=z9&2dFr>-wI`ej#Yx0kKD!sk1ase zAopRFklGC3bqi26pgngmbCBD0c1Y^MYZajC!D|(u>|i7{QAlj$wj6j59aKFr=?z!k zgc7~P^lOMQpBOc`+)s=fNbOsJwmrk*4m7L-V}piTU~JG(2#gIHhJdk=`%|FqH%uJV z4TiBnT~HVsbOR%d4H~C~v61^w$ouS8BBf#Q*dR0wY)29Yuk(S5BlnxY<9<-_%Sh@$ zx5mNj1?_c(vB6_{Q1!@tCD1KwFg1UX%mI(rLDhrT`9Rso<3Gs#Bk-CZs2X*obdEe0 zWQrsX+M^1y7r9U5g`_4Bi5-E&jz?mH$AzHwBKL!E?G0=~(hJ&W3UdQ!pDB!u-1nJ> zq<$$98?>hsrhYS$_%0+ia)0LplK6QfHh66h)ctpn#KCKOpyJ4VoKHw<23uYm9mjx- zP0@24W1!N&K-o*{F*MK+Ff3n#hFM{3&~PM-4H{~Mv61&vBafSb=ZT>C7j(7{Og-pU zRTvvQwhvVUo&$oik;lrA_gRD2b3)aC=Xap&+eqa$@;E>8_!xNZ2CDu$l6uhjW-#}F zjx~X?!Sgau^~hslpksPqY7~*mBIG^Y`bgqtNNnVBFc&0oZzOgQ5*u{>0L(7X`2#RE z^4J&hesJ*GPNM zYEB}tFCek6BeCxxv608M-XMv8Mq>X$VlyI*b%57!LfwfxmIYqJ2^9y=9YEPCNP4xA z*vR|Vk;kt<`_^Ipbw^U~hr|v=VuROnLhV8xv&uqJQ;5U{&o4mL*CUCyA+eFislaPE zq3UNNsab@?UWvrsfW$@~n*y)lgqj0h!wF@dK~fL8Hx=f0@EinG4f1%@3nca6`3R_* zZ%E>Qk=Wq*2&fw5F(@IV@e1%hdZ-!&Byn{lwjL52dEChcN!%HU?S;e!uiJ#0AAux3 zT+4Rk_WbDl2&AntIzIvlhv7OuGFp#7;&-$jfrJA+>k;HRi!`MAB^QZZg2b*yVuSYr zKPnki?PaBc33MgZBkM z-3;Cr0A>F~QUf}89%d%;90VWI7_}%8TLy^@-Xj1tQwvEPdENnhwhUB_J(3zXB(^US zI|PZ1Jl6oas~zUfOe8f0NNn)=Gf=z0`vstE;Qaznz2N-k=Ox9Z18>os5x;+;;BgN93*xz61xhC-H62QKw^W> z%z>Ie4M}`15_<^}do>b!6B2tT5*xga0BYuOB=K`dY~=HH?jVUjMqC|eUrjR6uHyr%%F#tuo`6^ZSG#0KvpfT{=Y zBY?6KkJcT5F5s7^RiG3f5{S1ly7K!}@i48s@2x>kPXstVx4c&<8}{{r4y4J|_$kj8e9*YWZpi6gHolR*+!Mq+Cru?>;f z$m@HN*OIv*sR8e&hPnrQwj`7tjie?CiH*E|tN=+IeC8xnZyl02cyBdSya!1fdCk}? zBysQ>V5s^PNaE{}*xQiU$m_(8Ac=#|sDzq>ydL-_l9~rdY~;0J?~ug7YlETYfcH>C z+001ob1oz{@_H}{BysS*X{cT`Byn9Nwh0m&c@3BolDH=lI{=9tj>L{bVk58n%0Utb z@2!TqrwU2D5sBS_#7180H4RC8E)pAbekQE_zZyw=6A~MFeb)gb@#9Er@IGs(+pZ#s z-$7y{ujzV)B>oYJ{R4^pABoL|)ILXE$0dR!E{()iLSkzou?>*e$ZNO2=W{~c?~0_x z2Z@P^{-$-mGr1m-T`YZ5xp-}V1k<@_q zUqi)Jk;HY7*v3d~Dxuc2z@Ac=$bUqi*g`>&zwjYw+1=afRl_aliPLt>vrVqZaG-$r6TLSnx}VuSZ$ zL(Tt=B>oSH&5G1k2cKUGRWFPrE``KaL}F_ovB77VLiL&b-y@ejSN@4~hL0i48ty6{`0$k~nx@HdGvR{vxal=RoR@@FTIskl3HmPl*|BsTbrR;XS-B=Jxrb_^0b8Ho+vqYc$th$LQt#I8qTw;{26k=Rp^*t3z? zi;&nWk=WofV4?PIM-m6`|+OG{|OCqrqkl5--Y&|5lDH7WTiS3NU2A@3(H9rtZJOYUwkHk(xV&@{U zOOV*rNbDvgb|(^h0up;V5*vJ;Ez~_rk;K;^u{R^JcOkJ4BC$^(vCkv1uOYGTBC($! zv0o#xKOwPyBC$c2z`^nw`0QM$oB2Rz$wJwpNNgD-Hs~B(m|iU;aYH1w1rpmHiS35O z_C;ccAhE&c?n2#=ge0Dc#4bQ$mm{(3kl3wA>>eccWF$8DY+k5c3z5WEAhFjYv9}?y z!RPcs^&UYIKaIq`gv7py#D0Lp2A|~%HRm0Y_*W$MA0#$2=sa7fdM+fkAQD>wi7k)B zMn3yj7fIX%iEWLt z>?KHS@VUXz@Y#eUz7vUk0ErDgLl~<59Fq7|B=#L7_G2XWDkfFCwvTAhGWw zv7aHakSLaut?#h(1KMg1V}rJW!`Ps$)G#(^OEZj(JkAL|Qvw=~(~;KQ%|l{? z?jwfj1)moIRgb)v7IarGObzIcSQs0876ep1=+0A^IOzUj7#n&2Ecl!UsCw{uk5D$~ zUSpVg@Hqfbaqt-qP&V?OS;++c>;fs)FAJ5i^2j7VUwQCxZ_*^9R5+pYA-c|4!k5Iikk<=VOVjo9hpF?6J?^nHpBo02K0BYtd zBysS$j!<#%xsFga@*Y(-q%kgDB(?|=8+?`{RId_}IP$(!10-?qojXwVL%n=P-tRUP z&p;UJ>$*o;`T-q-0xRc1N07kS;Pa!Pd1^9JojwbRjeKqf_-rVs`t?X^z-K!{#rGnK zgYG?q*@b*o2Ix+6nD|X3_24s|pyq(jc80RwA*n$=9|L?|6I2Z|Qr!W%G8|?;=OnfQ<2!O+#O^?1BcBU24M`mNybJKz&QSALBdGzO?F^n&8$4Kl~NNnVDEq)-0|3_l8A=NLuNNf=#Hu6~(N=V|GNNfWnHuyYesK3DHIYZgV z=U4b3sSieCMeUNe4aDZOz?Tm zQ1(_NHQ>AOpyJ49Q=CFla}kMs1BrbfiTw#0Q2@fRo{z&XFBz7zk8+?W{)EwlqCW?^MR3fn(kl5`= z>^>wm^7#^Tki@~~IYaGQg(MC>&lxHXKF=A-Mm|&G7?S$4NNn)Eeo*zdk;ES%v60V_ z_<$r1zT*$7_aBltE7E)x_-tpW8sxJhq>$7oBC$1)*x)+>p?b}b#F5X7a6u9WpXUr! zAA}?hzAF$ao`58dd`1NLY-gyNQY1AsNbF`Lb{7&G`CNz@NaFL6*vpXEYmwMnkl4s) zK^#I72j4jeb=w6b@#{$Jdq`~L^B>+IiG$C1hMEID=NZZdo$m;%vpA6Evyjhx0H65` zRWFOAMg@tjjl?!WVuR0lhU#@d5_d;p`ysJIk=QXv>|`W1_{?Xhncy>@q3jAIHT6hr z@cGYBHN8mUQ;^uRk=Ton*ej9P8<5!Bk=Xl?*hi7rXOP&Jk=VD8*bkA|FOb;pk=Wmm z*x)-8p?+aOn%m+=VhbU$C6U+)NNjZ^wjL7O6p3wv#CAqvdm*s{k=PMP?06)08WKAf ziCu!k2A>5D^;Z*;cqbBj0up;V5_=vJdnpoo4HA1Z5_=aC8+`sV)ZPV@q2_?^c7(EjBB^0On!{p8V)G%fMUmJtNNi;!Hu(NWsQHFS;uc73dnC3S z65AJv9fHILpAii;GYLsN6Nz1b#4bl-*CDZ6k=Q**?8!*%Sx9W~dC^dN!RJLo+3S(i zY(rx2MPeU8VxLB0UqWJo@1}&B`2b1$IT9Oub~IGYS0r)pot02=W~BKnE+n=f5?ca^ zEsw-jLt^V9u|aoS!pdH2BylGswkHxh0Er!r#EwH^ry{X)kl4jY>?$O7BNDp< z4mo;$FC+{{&+mnV1M=J@^7*}ckj5AfBe72*u`eRAZy>Re&+L7MB>onO{RN5r8;Q+? zG**UuPOkuxIQU$2Xxmi|Nn90)t%JlyKAYDHNgVmSbPptPesP{=s9?h zI)$F+;32O~8jAZXk_bTGlSu3f zNNnV@@$VstKSg4{L1KSKV*f&7BcF#4zONSQW`3kOH8CW%ED~D)KKPDWs5zEM zYQT5YLdC&%)I!;QNNSMJy^lc>2j5o4Z4mC#s*zy z1!E)Ma|F8f2_`-f$zJfieo(i~M-pF##74f`2z+NBR6X)tY=@B4pG0DV@8g52N50SK z9+H};NNn(3drO$KIAPUyj zaz$#lfbV?&k>|qJA*tVr#0KBX3{?-ldl$++g`@^~ybFByE>z8ZBsI^F*l&^8 zUy#_ybr};m#wvkl40JY!@Up z@|}`FNaB%5>;xosIubh%iH&@ZWDSydGZMQCi9HdCJp+l2e0StBB=NOKZ1BCn&~&mJ zN&FBJ8~MJ-3rOPEk=XZ;*iVtzZ;;r?cSQa|5@$pj8{t4=^CPjvkl4ugLaHE%Ya_9Z zkl2<;YzHJZ@?DUANaCSL>=-0=G7>uriH&^!V+E2puDW2bwXblw6PNg4b3gLf1@c_p zKngZghIy-$#jm zDVawe>i2#U6KpRydxt9mm`6`1stcY_tfIl}PLjNbK!M?0rb=qe$#CNbJi<>|03ehe+%f zNbL7W>~BcyzesErq%jt5B(@L|TM~(_fW%fuV(THXO_A6(NNi^$wigmR5Q!au#EwT| zry;R(k=P|j>}n)-6B4@{JspWX4~dPdyrMyj9zNhBOXZZ@ke5ZA+ckT*eOVC5_!(GP2geNg-aK#t3!W?%M> zgU|Q{6%q^#3W?*0l<6&T6l!SFy(P<8+V1H%_6JCuQe;Wv~G zo*(95U;vp3D$m%VY|uHZyij%p0|SFFlnvSw2|5=Yq#m>n5_CoZhz(lnrwUaA%0rq^ zHs~By&{^n0&^UDmiE}eBfc)hLWrO?`31x%)l>lXf{FM!5+cPjQ6hYabvZNNu2F(Ms zK-r)*jG!|IKz7wLFff45900LF_sK7WssXJ-TmfZ+#_!ib*`V`Zw?NsTGvPqzoP+d& z&JhHiIRIjV&VoG#RRfxrJ_BWg?v1|$WrNO*y8&f`&W*bVWrNO*dkJNO=BPhF*`W1S z-=J*J9*aLvHt5V((3t}udqHQy334(pfY_k>;X&t|gV><^;Wa?w&^)3CWrM=j63PaJ ztpk)T#K6Gd4P|RFFfar`*`P7A2q+sg9vlZ{gUaRgfguaZ2CdC0g|b0oOEpk7 zXzf4~l-upaozc4t$_A|$SOaBm zWME(boo5bGzk`8+VGmRsbYAZvC>s<h7_ncXiaejlnq*^Tn%DF%TmyJ=0d`dyx9&F z2PLguC>vzmWGEX{^v#5_L2HxeL)oDDhow+9Xp9+jwmHa5(3<6qP;md z!(J#G)Gj*=WrNycptH?EdO>9r=xlQk8`Lg)096B8&+;6~2F(G!g|b2Az-K7CfPsPG zCzK5;(?DmNgUkV?RW5D@1`r!`_M{+`4LWC92FmVWU|>*&vO(uig3dDssRyNJeW*C- z97Oo`qpmWPXY#9ay zhAOBUP}$fEVnge=8BjJT-seNvpm<*jWrN~CqUxR zy7C;9%?ZjcP&R0O4|FEEkT?Sa$ZMc8$w6!}1_p*VP&J@>=M$6-T9f_*$_AC&|DbG8 zxy{1EzyQ(yja z0|O|I*r05Xdw8I1P@O9VWrN~Q2FeD-of4D{%7YqEb`B`Mpls0I0(%e}+V1j#vO#_c zgt9??35T*leu;&$LFqOb$_AAu=}x}ACzK7+at6ePwhymE*&x05plpy|oCJ|+L3#_JY>?hkC>x{~)XHT9WoiZn22fL#5j3&Pz`!5? z>LY_DvKSZ`Kw-oPnsjAgU;u>?BWR;G0|Ns{KO-n3FfcHH>K;bW0!9V~22eg>bOV{p zzyLCi5mZnxFff4X14aLY;M z1L|lpFff414n|PJhJk?rRCX|eI{gr%7+`(@m2oh?fZY%E3wZto>KCw^p?(4HLx=hW zTjuY=De21Ot!9zkP?P__sX8`Lgggo=aO zA22rfP64R63zB;9*}_n9@R%)>4c>bTZU2{m)I-_eHHuI+_+9`gdj^sk@cF<{aqze+ zlnp*N1Ih;9Jql%m*BL_D;IsXq>^Deeg3tJcii5{ap=|Kk7f?3%{!mcH2c=ukxFVDd zKA#`Tc0dvbpVJE!2akV3+2Hdlplt9Rpink=y&sefK4Txso`Pg1_^e&1_!=Z}@EH_P zaqvB!P&RnY9+V9}Cm+gwfut9FUM^G|)CpsRvccy_K-u8CIH7Ftx;s$A50qy?Yu=!2 z8zeUP%v-2<2uK{-o&@g+g|fl-X+qiHwR2E*3zGT?NNn)AwNN!Hki^0JIzf#P1_lQ3 zotRMe8IT$%`vwyG2@)H8_AIpR^amskWrO!-LfPPZEum}$(B42OTL+140b)bjOW^Zk zq3i%8aq#|1s5tm;N+`PoNlgP1y9bF4J_8o2ehHE|c#kBseFDB;63RXSQUhgQL1I5Z zVuR0dg{t|1B+ddl7ZlpA0N)V_Wy>ImYap>rkl5g}SfT2Dki;X9*x-8}p=t_{#A`ro zXd9pdi48ta6)L^}Nqh~64Xxk7cQr!UN07uXfY_i4hk=0se6Kx}4L%bU%KidU1Ff$a zK<8>g+2H#Yp==2xaTO37T1SKLriZe@=bA#<9!P3JKx}Be48AiF%FaO&uRvmh@0W+x z#o)6^q3k&zHBj~nBsTcoL(pbZQ2GangBnE)3=C&LY|uh5Q27sHgBpGe3=H7&MRh?X zJ_ExCkT|Fj$iTqx2gC+-+(6|&Xeh=ACJ5cLWmHmHLDYQKTl#t?Dv8KI!g z9jILm5(hOVAyPz-g{cGe$3SX87+oEx zT860utwjK-0bz7?pz0N-4m4f?QUk*1>OgfmOdV*>7o-M+(bdI(!V=WxVPs$c)#V^H zAdIdK)J}$(2ih+SQUk*1>OgG#{I}$)@Kp0&eX#Xxu-4tjT zV^arelfcx0#`r*LKp5RTP#nP2O~Ydz$S#;V&>c-6vp^W#JW!hlrViAX1E~RFbahLR z!WlH41X2US=;}b@NHFt2{dABT5Jp!AYE!|~f%=UgH6V@HNDT<1 ztK(sW^g%%7255g6NDT<1s{^%ZVdjDMB7xL^FuFR>m>f(UsLc&h1H$O)Kx1?;b)c~Y zkQxw1R|je{!_=+96E2`TJYecp<56dW>H?IcCzo0x1QUk*1>Og1zz{~^fQ3I&~VRUt%J_}48=zbZH8W2WT z2U=eOQ@0(DKR|o1VCq2Q+aR+*7~MQjp9rRICm!?GAo&+GzX37}gwf60f}{>~?gB^+ z2&1b5^|@g7g33aW8W2WT2fBj|rVe!14oD3MqpJh0i-D=zhsPhFJ{?Tmemv?xcfG*W zf%?WEJ3$!T-X}=@1FfyO7GTyUES#0E9D!RCTE3=9lB z4NMH6wgjl01ht_+a-i`J&=3c*d7!&#Ky4?eHn@2(J)p4}kX%Ir69cI30+|OIdxM#m z3>uF>avx}252$Si(gVUEbs#zp>L-|aE{#kKp!yVK9!LzN4&*-Y86!yMtzd$TCxOfW zVURiy4H~}(u|ax4{0EIp;Bg_4d7z;ikQ~T7P#uBn-xEv>4A{aCRwu&Db7(?@A1Hia z=7Hu0kpAR!+Ob=uR2!qstXwbS>5F2LRnPw*N7#zqvP@5Yh z2Qn`ZG$w=Oz7l5a@d2u*Kzd;2xwIhS12hx{k^`9s-V2Ll9_Y*{P@Vy~34}rFKy)r> zu8sjR)(GNnXhEbG&^RMV9mqWJos>xCf$qk^7Qdi-h&_X)Hj;ukcA4w3_z2VNhD zWZns8$haxU4Im6s2ckjuU4hsz^Bj=O1NB8fav<}-`(=^L1C4ut#x6l-fG|iMhz6B+ zAU4drf>tK**eWPKK;!x#IgokayR4AR1C5tpGmoDM+CKvs&cML11Iawl*euLE@c0;# zd7yC?Z03RPxdiEfxsRa@;XcsZA4m@5KJfS%l6j!<8Eocdqq)xm$vjXW4Q3wr>{lf7 zK;t@4FM%mgS_d%}fyU1mAY=0&J}z~j@(EOKgT~VFsRQ4IiDoZ!mOk~OwD6nL#>4;`+XdMR>bru}f$Rm9Patza^93M%6IdA-K=;ss*dPp22ckje z*n-$Ff4pgDVgQXvg3JS*!wQlEnFqda6Ulvh*cccLKo)=ufz}xyCTNc^NDs`sD_u+s zpz&Ied7wD}kQ~T73(y!Jl6h~~85lt2EyxTI2B`zlpnJVQY?yf;dJy$d7Svvlc@b#l zf$rV__1i#ZfH24m5FN~nnm>AanHWH0<{S2&Nka^(q@Q~bhg@b_sI&1?n2A&QI z(9Ap1$HV~Yql3%?&8NZ4n}p^*22KVBZ1rz1nt2}mi1HLPUk)>GJDPbWoD2-0_AuCS z&~O2jyA81Vx%)Coz=7H8%fYKAl3=jsX1JR)S#XxLWeE3XcVgU6W zLFR$RIzV!u@cV*h9_WsDko!SqfG|iMh<=aeK95NV^FZqWKUe%=Q_*{ zAag+KKr}B4YW%uPW?}&K7eVd=&Fz5Hfy^^UGmn8AGVcX41B5~9Ks4w~KM)&c*PF?R z`lt#T&LHz5(98qfsg5nZ1f#jnX9~hR&=?TNE|7WP@n*yAf!y~G&AbOV z%=?MvK9Ok%_kr>q%sh3_STX|x0~06`LG5fF1_tPmFjxen4#aRoQ)j@#zyMmy0g?k@ zn7U{*bs;>EwL2g+APiGiil(lFhk*e)WDZgWFE{$p)J@^R-kt>CPln`=6+8?Kpfd@< zhC$OGhk_c3`;MmW4G#kYblL;OJVDS{HIn;SK=bBc z6%YazF4}17BzUp6uUyg8fz~Nt^Dp@RF(i9kco`V5)zfuQ^B}HaV2I&mU;y1y3gg4v zSILH2ZuCrJVgSt_fyxcoxGgB1g69EXni&`vWcV2v#E~q9Rf*kb=3SV@#E>D(zyLB2 zHf{?t4?LHEWS+4K0|Th;h6%yUTaV@seRT!~&^=P<>Q! zH1i7e8NlTvx_O|x)Iebb%fAQ zZG~D6;WE$TBBFl@8@I(~-diiw_69EVS}r2$BT%0lmwy$l85lro%s_qxVO-`txyS_W z$AkO}s)uozXKu~F06I$uWEKeHGLPdD69Z_z8e|@9+!mXE^=ug!*kFd>NiQW=nHWH0 zIw134aEXXVnhB*~I{e8I31fDMixeqpO zi_N@?jtmT-JNrOpfiN!f&fH~U2;haJXV|zcHuF3@85lro20>--7 zH3A^_!NzT|nOBg?zyMnNLCCxu8D<91ygSG|*tjh=^ExsZ7_4E2;qkA55;J^!5;ks& z&Ah`I3=E+0Uzm}&{5wa98Qx!ojoV@~uPGDJX9k&x%e*(r%nYD$7m$Bp@d@9i#=D`!41&Fd$FWb@wrsp5}%<%EzbI|rFHvg_J zU|;~vF%U9uiUBhNXzdXwenDqS<8ohl5o&u9=5_S)RK@d*5SRN3 ziy0VxfK7rBxXgQF%FFEj;eaEFmsFCYU4Q12jjD%YBt43=FkIwEtF^Gc$nJ z5rNzXI%^!4dEd$z7(nBp5Z^N3OwV&{nZfO1ka?heLb%NHt02z5E_Mk2KEe}zaTN>< zpz|yVxi7|!nE|vm668M6+5uedtEpsQfG#lu8;L7^a~zoA?KRMx2QKrbRx&Vv>I1N0 zc*>Uv4$KUoId72rUf}U>XcYqkXnheO^R75DGl160g3Nn`$Gits4B&ZgLgpQDVup|Z zf!0*u^6!Ld1_sc+HA3e7ab^au@dddLv`-0_dHglRrN1jK%;5D(AoD=}#${f54FkB` zCFH&oS7rv#ToK5;Pk6$Qxt6%{eu5jKya%l{!R5ZtTH^W(I_`+{_YIHxvTGR_pv%3% zUdEN41Kbhq7f|_z%YEx=85lrw{9wcIq~|^E%nYD)y`b;|?J>h;o>x5s1L)2=LgqDi zF*AVHj)Kesjicf+?`C;a|464&1F@JG}iph6Ot`;3~1i{Cl^i1-Da z?~BVk4hyKx?*enRmE}xb|~T0HXa2n&ZZ0 z-qR)q2GIHwLg9BJ0MTCno%@W-yhY8#r9X)vMEVng&NX9epYCX8U;wRgBIG`sAZ7;8 zz5r1E1+8U+x$g(s_?1d4149*b-9E@nSo-^nHhy&>gqdLnH>AHHhU7jL&{|&5I)9L6 z1_p+ClNlJScf(A9v|m6xel&GA{g@a)Ye}HmKv@`!CD<7l*kOVU3=C5KOyIpfFd>jx zAhs6NJP;d%gZ!DWwu@ESQO8d^5||l4{RvRGNF({f9L>C2{!9!3NDhJ7YlLQANFp;> z9mqV;y)LkD2CY>_Y8EnRg)=d@V=)h8E_7%O#8W@U7L{zrNQSeF)%QsLiy=XIulBR&m?Dnj8B5x558lMfq?;hE)xR-LorlcDU>dU z(%>`885kI;B%W87#JF%;>}RH6-tB8G-qI7=!EjYcl0qZFo4f>VqjqC zhl)>x(vzVyXsrgwebb?Q@Ev{(3=H6NpBNYz=0e5iL+OQ38hj=?0|UcSC?9;sA85ZI zl)oBEuZ7a!`+gZ17{F(yGcYi0hKhsl00ixShVnscJwWaOWit@H7b*@uQ=Nf<;UJU` zz8jcY+BkujM>DfL3S@b zHZ{${XAe1Y^l}@$?MVVPLdXdaG(9kP&qp(FDS{7L(t)Ond@jts7YOr7HVkHl3XSRn znE43^^BX{Cu8{0dBn>b#LFcc4gr^|P25|=j!`zgP)aMuwhYV6nVd0|;>Oi2mF%*j! zni3Q)%&ZC|eJhdJD2hqoz|6gdWY$Y0HVH=g^ z3SVSDFqk0!(xU7Lc+|ELBUBOY%_zxB85f< zh6fxB3#=68Y+kf50m9Se>antX#m3CAmKh@82HGFdvuVYnO$(NuWr2vvegKc>sTNzQ zrYLBr7HjG%Bo-H^7L_QZC1&QNrYLeT=!X`k78UEKWhSSVl4AX|qSVx)lKf(QJ$*>mEt!GA)5QmT$^|$) zc>b`lFmz4c#L3XLXp@)CBu<7NOX-gGJ+FC~jhwt?n%y@u`Z9Z7DoPS|N)qE?HcAp- zbchGy^hJlD-quW#neO0zz_UqnlTnh0_oBV5Cm!8pgDCQ4b_4Y*gAPk5gf8%8^%Rvh z7GwU;!+k)3VN+5Vm<(TZDC5wA4-oZ+3=Bp|(qK{sOv-{uB}g3cFv&DKGBB{QFeofq z@L-kTf+YU`x=9f<4-Ju9$N-AM2OOXSz0gD)!EtWMVhE-+nPov^ z&5*Rv(6j)Y94w(R-oeqn8RV7&3JfclK{hFY@|GKgJGNh*sDWkAg7P&$*b;t_H!>(BGiW+O3`MfI=MaxDM5QGYTOufP zz~TY!7l?obv!$S>p(dkS2m?ewgV{pRKzYFfB|$?51}$X`Cb36?7J?6y1+A1|VirOk z#@$NllNFFuS}9owSqNJSbvwCFX0Z@9N@COy@-X6I(o_U1g2ZZf5JXY*QxHFxOK}x6g95&TBVB@1+IX4rGalh%j0`-&Mv2Tu3mDRb?Tplf3mF*7 zCyPOJfQ$wQWhNJo_%SY6id;Tf8k;;5Lj@z~WatV;9$`zvHSXN)Ji(WEruoy5wQ-a_3)r?(qfpTAu{RYe~1Gfa6rot z4K5`mk+4aa{$8Xc3ULQ0fXxyaDj6*WBNZ(eEe$IUMm%(I_;M!+l12_K@!bw?JW>s_CYy7@l?R|HU(2$W9pVmKE-^2`o^T%VO08oI z3_R?WS{;wMOR6erPBfGYtYzLIc$V#wBCo>}g@CWn%3v+~UZz8eOqUjbqU8Yx!%Aii z!ycs$MoSKOx`&iQ9!%0M2NW2bl0Z!XB_)P5Ay$Z;5NQo2F(;N|pk=QLtq0b!G%Rmk z&`{FQsj#MFAp^q#Xob;p1Hx+3U})0dZ8zg}WMFUrR|l3%$JiL8m5#B1in@sm46~;4 zi2E}2GEHc2ZkSNAOlhSe0|Uqfo=ht)!z^6Bi37r1l*F)L6{yZrWMEje==5fYyWsBU z5prW-sQHv8qz1|4M#>Cx7DLp)%N`3Zi_7Vop+1uRV3x?h!<@*#5Xiuw%j~q&fsLJk zL6cEa&{AtKMlH5M{3>;& zTAYYx#GPblcq~prlYy86&$u02b24B`lhKsIy#~qmGdMb!tSs7h^0aRjHMbP!;a~&p z^=da3GPe}t;Q*&I4mV~79tk!k1|A8}x-JGD2}`Cm5fCfkUSGj=dKE+nLc&5A**dTn zLFKgAC-l%X(qfnc_uX+cCnGf#Adc?f(9(cd1NSn9{m?=bmIffoLBVh4$bbmrCERFs zLDV6~vXC<<_bq{@VT+=*(Bcr%@bh4C7gj?s%QN(Zw|CevZQLmV2pOX|>E50YeRuuy;-ily3YQW7(t!PI8L zV7@~i;#-jaz%2_8E_Welnnn`yxZ=K9nTO>VC#?2Hl5-al;9&u!4;E1R5P_r*k&a7~ zl*FdbV6?nslq5EzX<8P0~g6Wt71ElOy zQexQS1W^Ic4@gD9Qg^gif+z*WKga+JCWt8-OzM-hK>A@_L5MPloje@i#xtU%fW-wk zjU7;6&|sR=gb^(8Iv!*fa{C`%-!5%JbK8ufMh1rVnS2_DK(r8d&nF%xQ2a81;+F{$ zze4a}ftriRPfMSnnFm)2cT1X7EwaxJC@@%Xg*CGpDe*#tkx~~Z<+1QEgF3y!r=4IK zPYJB@fC2-av;xhepz>=W1H&d*HxptOqIlP3Mk{lduE*tmu_92agfz<d;9!t87AyX@7TT}^X=MpJ z@g0)?AQrU!{cq+7s%l|nF)Y2q_~1Bzs12(EHT@rOfcyjRn1(5dfpP&-zx;p#xRrB2 zfx#2rYlNq?0}2cgOkt+1Fl&^Q7~s|N@{4Hk3-P@Nv=x%UbU=Y2lNoF-M7sr(wDAE2 z21{sl0uj_;Qs2tS!{nyMz$4Vg$iTyt$iPs`21?0n7R+Z3*L;DP>dAae7Muty*e#4L zj6ICqw{pQ`+{779J3GK?m5#%p2FhV*1g*FXNiQ9o%XhFIP+(Y;32nDEGBB)Ku@{=Q zEiOZX3^l(PGr8UR-*)Few3!MDH+Y&dFb0*qjtmS|CKk-wlo@#t8JUd*6yhKs!2HX@ z1aYbbb5Ag+$HD+2ApINU=+WRpWd3Dq(E=A9B@mZ_3OA@@j1K=lpuk|11$8DQsx`R6 zocLfN9HzwPX3n5treOqcxEUSdfe+5CxCBaStjl+>98h3b$qs4PLc#~yw!@LF#1ZYx zW6Yoh9=R-m3=9FK3K}e7pMJn>zw_xB=*UcnyL+q-C@@5V;#Y$i+V6D(uMGhWIEdPU zT%f@cCiEAkIZa3zqbP=z+&n^{yTo~zKxG;eJbcj0QOv$FTq(p!@JQdJ1sXftbQ+p; zAhHhNP+q~c=oGZqo5l>4heyEO7$8(Lyx1D7D+dc?{IVhF6hh1(3t)9~mf=tfYm zf*lgUbte_lV!_k{u?w!WgKHuK!vtdm%MOS{0N8*XTndX6(EJFILG~jH@qYAzR@bn+ zgyu&$7gkT=ayK#2utrVxu!n8oN zt;}IMg%NlomPginv@CFy?dd>xdyZhMJXl;`vp%P!0k}v063t) zFoUCmS&c()2PmLG1HxR(rCAp#F)rV!utI3T&I9ec%1g0vtj0enV=>(xDaiJxw$C`xy^@Brt%1}F*EQm;i(fG85m$W4=t3Gv>23>pp8;U z!!bw;TAxC=pmroA@LOR&>vg8B>MCZsV0)G`yE zW|XubBX(hXK8ZcSOvgN+YThY1%ndX?0u5%kUJI@R3JgxlVcg)MzvM8uov?@i_urb5 z!{O-%obTW~h;PFdNh7T0mx7jof~Ei{bTgn< zLR2VeF(iS*H7O}vY%6rU4Qsfv5?^OV1wmZ77iu1aht$x46;yLd;8L)59mt7FVVcmE zE8Ha-AfG5Hg{ui^V$mj%?!1oamw2p2Y3xEuqm`9%*G;bR!# zA`H6k2^tW>pmwI3h7gSF#>BuQ44QXhVBld^lVEaFVemL4R)TNB=m7_)%?@ecdT{-5 zIh_Qn$vmK~oDL569iV~+)QRJ8a9Qxc1=Qd6TD2G2lVxKD-^&Ca6M%&tJUw}Ed0bK7 z!Y<~@z$2uTim2Z}g9Qv^rYlhDQVNrv38It2)FhbNR2V?R(iH^!3NI2mxc+z`>P!6T zrVG)Y!{JvXV>@oB?_d{m2KhA^;aAxY3}qpS#o2!OC7EfJ?wMt&ZbkXIp20y33>64* zY+?}kfTGO&qRf&?m(1eKyo}VM%o2#Wb4F@%wp)HtNM>%Te<|qLBZxi0sU=XM;F81= z(6vVp^+Bn*`4GE9^YV*QQj1bkT+34PN_;YlL7KsCL8w8Nf|whSlbD?9p9hx+N-Zua z%1kavO+k^zW;odY==wqTZh-vnnU`FYnwy$e5|Wvm4Goi^)Z)_IRL7hg28h|gC5c5P z!O0n^DWy57MKJ$>)WE~7pa^V>XEDgk;L_rP)V!3`6sUfPc~G+;a-hX1U>&gV4Ne6G z14AlEzk6y4Ebzc;TvBrqE1_nA*`awQnK=;iTvBsVOHv_ja!<`mEy_%GE=mQ5{Qv*< zn<4oBf6)Gp|NsC0XJ%lmVc=l|-;)G#0|m2d%wl!6FX2G6b7A`0QOQ z>OqMBn|kosWmwdM?qR{E9<grGzK}Yao6UP+}xZDpqD-@eKpfgIaiGz;a$0iOwBMeKtfY18EA`aTa z4l&07B^(gyQN_V~#Icz37_?Upi#YfUFD&9+IMm}xC)$h*3=nsshCg_Z78ditXHQ}g z2krUAW)5gC7dCP5netf70p&?->T#vR6*$}ptCWsiG$8g!6qJuBRoNOUSd;k zi$nc$B=?&*LiUC+Ft9LIfbNhjal+hH!DMd7z`%SBbkzkj3wwkiBLg!Nd*VR`1{N09 z%)Al?W=6J>7)Ayr!%zkW7NKy^k)Mnl3$8LSFf*~PRAppfV(DUFU=ah|m&p|Sg@J)Z z3TzYyYamD|2mA3dMg}H3Zw3ZdZqT{NOrEnD7+85gSEe#;ImO7pCIAXqW){|3V@3uh z#*+*TZ0aBp*60(A49qEvAj8;L*t|ggV!wZifq~5jbX*JjK5qsFHeZk^0|&@a-x(Mf zI6(w612YSIm=ps87YCcWJR<`G_l&Cy3~Zht%Ne*|Ens9|^Mf1+!gPR>k%7%0v|E=+ zTbz-BEf{nu0}l&R#w11tb}=VL29Qzr?=Ud%s)#T!NU-aIHY#&J{KCM%t`A}|@Wp2{ zup59(X5ro<$^d0^a4ST@*gV{SK+3^t1o+}B7}yOLF@jE<<7e>%ow#kz$iT3P5$bdX z2Hs^U3=AslrrJyl4BU|i85!6?vBSW?EoR5az-|GtY1JY|26jsjn}b`ckAZ>R3dH8& zwg_TmV7CUb1-SdJGBB{)fY>73AMY?Qu-k&z65Lhm85!8^Kx`RqPiqDSc6$(8fkB{2 znSp_Wk=+AyPAs=A4~n83F)#>l@7%}8z&;P8UV{6& zJp%*#f^96IUCF}RI~W)~uop3cxFX5nj125$j38wUBDso;4D8j6uR*&`Me5=iU>pvS z1Z%hqk4POTbZWtR1VmJF7#P^=8ClpE7(_%$gBTdt8^JOXA|?8a4D8Kdj*Q6T21W+< z7DiJx1_lMu_}l^p_BKWf4h9Alk=Gj-7}z@)JvkT{G(>{dFfy=rf%WK!*cLJ{u=j#F z1|m1+Ffy?Bf$cF7DKTbXV4uL~&%wZ8A#!*=0|Wa+#!wCh1{;xpKn4c(Nnm9TB77AL z4D3@G(>NFyTtq-|%|4S66u}-M9exZ9?6Vj_G3X=GIgx>ZeJ_A?;!P59zV3mDkX zf?R3C7hhV$z2V1Eo!pTZyp zqCkm69ONHykVnM9T#z^eKMNNd0|PT72d@bu13wEWIKdh~$puLRm2xTevvFtPKkm#>F91o2KH#M z42Q^nQ1*-gYvEzwX8|b}zG}q45Wt?msKLR&AktaO$iSWqPVWpN{@WQC*i#rm5z8WS zwTOX%Jr&I15ve}Mz`&jc=7@-JfjpfK)-NLhy78Gk18ld7$cY$62KG#_G7XUxR~Q)B zv%nk!k@wvU4D8upj)jP71|tJ|4w&O0VrS3Dz@7`{crb8)A{$g>fa8drfu98w0+OI| z100_W{491H3=I4%AK5_UCPoGZNl?y*rGOl;WHgxUW@lhvIvUT&z#$4c)}HBIAtM8a zBB(dUw6d0wfkPLx@sgiqJ_iGXhY7AS2oO_E|{V9Exy2AHy<85x)g`#2aFxLBC#Ko^Dc<(5`3Fx7*Y3=C2r87AG; zj0{XI4vb22b6g%>g~aOZ&BCe6ZK=FG*wAoB!t`iYFlQAP$v8JYDA3`{bI zEEyS?WehelGO#c()v7ZvaM#FiF)&E8a5t2KbmW8j;xdd4ARVqej0{XN`iDU}cn^Vf zWLPsYaJTt!F);AXy8^1(yFqtfb3fH%WZ>>S0CsSoG$R9dAIRe@3`|!X85y|y8$jw? zgBcijxTib>dGI_VBLnv|kW(4B=Xxax*Z1Q!6C7NwY9^ns75P$gr#j9VKgUhJk@m zrvEr20}}(&!Q~7LjJ+TY0&S-l7!nv6r>KLhf&3f7t>eJRz_=MC9>Klp zJ_7^e77#mzdxaPy1LGcZ9tMU4Zd-E(2F88vJPZse+&-m@424AZP0W=)MIOiG<1B2rEiHsl_5F0d5q@?D}$iP^_3km_y#k&mrEO&Sq7$iXXR5@OX zfr0TfXsiT$s5|2v4qgTZC23bi2FA0zAU5dQZ3cdpbRGr<1(!Ys2FAlYAYqWfpj6B_ z=LjzYgW}X1U>Oh_bk~KV(QYvRBrgL4sK2jdwUU8>@hDg)=q@VI{fFSgW!CaCFsOnf z^dS!@Mj3@FCxG>OF)}cyfsP{HYtO)t#0PP85f6hJ=*C`C|f9ps4_Az`hx~A7(iAq&Z*&NU{C`4Fpvl2L(tv1YM{e`)Ez(_1&|FiIJ;sDW;N z0SRZI2y1`_0YJj)j8RaP49fE+FfcGK1-lkB=EykbC_e)OB!rjpfI@gaBLjn?4Lc)9 z6-e$TBLjmr=n8L32L=Z1PzDAD5Q9MiR7@&Q^krmVTn0|)pbq&;ZZ|ZBi(9 zU|`SyoyK1Wj&6A1=q9u=Ffhi0@5lfRq%zLAEWp43x>gs|d}cT)z`&pfDlHgO*g!=I zgEnY1aWW|V={V#uGBD<{fttD?SA&LI8RxJIGB7AD(Pv~}%x43+(vpdRK^wFg8sq>5 z-G?g~85paR~7U_1;i>_8*9jB_%D zVF7!T1H?`R1@zxN3=E7XIY14b3MK{ygZizE4E4ec42DHK;Dc!xK#M3DPjavbF)$c` zk|c<4+{DAc08)++>4SV_aCf2o|%C`X}1OFv?ETC{yJs`1`|-kDT55w-w6snPLMBFfo>}T4e5byjh!OI zz@YU069WUIJZFnA0|V%49|j}PVcDSZ7p+VNMs-e*S6_fMfrLR}c@nNk8LSC({{({y z=%y8reSbl+?T(BLj2>Y7R9P4pj6jm0X;wY3U0z^q3=Gj28n!O1_p^vVNg-V#>K#(>%WSTfw3LDNgXuJ!8qrSFav{Ti4s^8#AXaK z1x2~I2m=GeRyB~P*E=vUd;&W!79y(77{kof$)(O1&B_c)tl(k?v}u_EoZXLtGKvJF z2*_Sg(+lh_keOh2i7-g8i!d;l&GBbsUb^#*+ag11b}CjmC8jd3=B$A)(i}cI$)jiKzwkWqzkSuudpy6 zLXJWA7pM$(1Qi*OoA2lR1DSs>l!1ZKkq2b{a~1{$O>iyc$OEdS7=u;8ra6O6V+;Z{ z{}{lr04mTx)r>l0ETe%sV+@FhW-5kNGYmQ&`xzJ*`FKID1Z8VT*7p;I6>xmKAp1C2 zVfj!1T#jn8GBD_Y3phbuP#%Wc$Dm`jg@J*w4J-;W4>a?^IA^8wj!rRQxf{c`XVn zkzRmh7=yIoWt>jQNk#_7?{Lq8>N&FFo9Y}J|I50_2a<=YW-w`_*~P#>Op#Y*cccz!EFl1b_NDe>F5hq4LaZrTq-n5!b$}d(C9hn5WN`^3=B%#ix?RgqrhtY z*clkqK&Q8#<7Hsbk^lv0Jo7{jHg(20aFa5Yc_Is&I%5o^Nya=egbmb01+{@dO9Ib0 zFfaswH9;~I^TY@?Q0uG+oTbVc7}RbuFff49R61A{tUA{Qo$q;$kAXpL0wV*%2L}d* z7O;FYQ!x*N2Iw%cI!N3?N-qWmHBb`a)#wd69n67&K@Bv|4bo_Zp)mlfMo@wU+X%YbhL4wlAr7oDnt37vILt~I7_>oG zgo2aeDMkhcc2J8^0#tTNR7-+NUQpozt^stFbr~5LMZwJvkg<$&%A^<=APGX84U}q= zpb;(s<}GArU;syWn-o04?Ll)X3=9m9C1EWiJ4nk&4HPt>e5EA?3XymwP-Mk{$yhK6 z>q|hI-(?KyOobevLXxSF1tiZ@$Nh~B*^XH>PDDB0_0s?a|1>OMh;M$g#k1b%Q)wpGy{WT!XpNdC@8E> zv%?BvE@n`!09{N54u*TuuwVd}6`=I@9PB1|`hzt!)j;>YtAZxIq(OlZ1!|C~S%RuE zM+OE7s92E#gBs|DmA1&cu|4QT2FcV9pW)(0#Jw*+)47C5#+Jwgye4Rp;hD1`dJ z3Xwy|ju~4j26fs%A*2nuFAS7k)IbO4gZ#4vYy!Alt__;te8|JVpaE*XfZPGfqM*nC zSL2|-0Ea6#g9Io9bxU?JGB8Gi!xc2e$~dP*mVrSrC!7H!3Sx6{fC@rTXC#^#)XmW5 zU|>)McROO4K`ma!V2e|K85kJjm_bRAL20WcBaGw20Zobhval#H0X6?-$S^P{nSgrJ z*HNhFfgk-EHfbMSvnV<%`qz)8U$zYAJ zWT6I{F9yX@6^gJn=sHqR6f;P4%7RJ*P)JLF26}YY1~D=)?gvL0XpI5moK86g21U0J z29PKyg6cRJ7?i*fbPyatprKMo6di&@5ja=Ol!HYHy#1gC>S=*OM_vv+bdF>78z?lv zegln?fc$0y)(Flw+P=_+f_4Hl18IYOfQp4ppycY&%*epV z23E-!q!g0P$iT?X0%};BbHWM@4i=EkP)=xy?U9EC4?MA%%APz0AuXQ6ta5 zpfhI)BLky1xaSP=GN|xooWrXC^RhSC%eUa3@&)&~e{;h6+Mi~!AVmM)F%Yh z09IfzXbr$o1Rj0>jT3=dSD@(i1It57W(jCDuLeE~SB!xn8zHHo$;iL}(g5y@f#Q|{ zQW1ju4o(6B3=*IK*IjrWG}sL4xHEv(05Q%HRAyjMbo>Yw1*P~?pkM^|dE{6@72#`G zFe)m;gAvq$0)+;6i#UAH2_FCOijY?c6wDAWgMtba42n=Oi_w zg@PsFK@J-10tav@EPz4FCP0xo9jp+!ICp2omcu~zmw_Tx8+5T3sDMxd-3ATv&t9+z zkl;QJGaht31;`z@kR(A@By;DN9TRuCIBjR0x0Re@DHbHg%6H7ls(N#cek z_8*wBG));C3$SnnrD;%b9Rmv^2Uio;-~x4YLBXW~T2ln|4%93L2~dgwmo*@J!QK*M zka(fYz@SqF%9#(rjs?Aa8*4>|?OXs~|o&@jYP$ z4JmW;K)nUh2(c7ipth-iyoK!kXIR}2D^S(cp<^w}z#8G<0cujHDKjwaf(V1E6GXm- zb^O!{q1Dg>sHzeM1~t&db)Z}f8mj;`F2Li+NVynvu^32RRu$yZXr>|sME2AGEh7ST zJP|^W5gXm+1V#o%(EX2)lhPUI#HqmoZ6!F+TzFt{zZx7!pwT&Sr3_Mt7D%hXRwD<} zdcuJO$_l5!8exH?4GJVsu2Tb5JfP5e0g(rVmKtcV7?idDK*c~kx<&>_Uray^;`d?( z25nHk5o`!(v<;M!bitC4{03Te1&ZYa@Ipvx>}J3y-oWio<#nLqEFV-JF@TmF zGR|>RhmK87VqjoUdSk}Gz*x)!%3BL~7#K`I(W#&g3%*A1pw2EH1_l*S<3gT+f#I?m zWZt2V2UP2xZ!$6BM8Rxib!oqI_JE(#HT@k7Tnx$r32{v3D zGzXTsf`Nf?6G(wW6323b5rUtATf0iB8@a*ShU{C=iB~Upt86-KWn}LDx zB0H$1wTKs~7u}!%3RL7oeUTkoK@aNgf=VuJP*(|5A~UFg4qOMt)pD>A;I@<+s2&7~ z?S_gKD=?^m)=7f0?s>3SG^ov`ZNta_9{NL!?Q4Uk+rTLrG~fja&i`QbkQxuv%>zZH zuqMd45HV1t1{%N8f`~zagF!nIYP3cps2+C!tB1-#N(G&s%b=(L_s~I60b2jcIA^jJ zJSxBw4_iS&5AIH_1gpFX3;M-cu(}&QW~T^QE zYl8-wK$76`6Ht(AgQh4!B5I&s5GW0*Rrxej_r&L=J;r-Le1D0nLRm&Z*LaMapAva^?h0 z1%o5uF*s7R_+eu*Pr;GE7z~brEi@y6f`<;M0}l!veSP%MQNcQS1{yvDg^n6%+5wbae83vP6^AzH(oS#? zfD$1{G7~BZYKX$}cqdp4lw8yqqd35;lR?+_sDWA@py-;7M+MsKEK`zh$rBd{k>j!<%@WVHK1_lYxTq8JPfxJepfzOkK#3DvVnlF(%G&*)2mnV&6gWa2 zfcW4Di3XeW85SWWhA0sN^6vx#P{_j~1W{XqT5+J5ISH0WPPYkIV+OP;6C5+3<_Sn6 z=y(}*Mr4f{ST#mNOAIy8I36h0Ewfa4i0EV1_@Ab>fGXDU|{SA2M;KqL7P(;=gc-@U{D0l_V#muW_yJ|OE|7R z1*-&&)G`J`I+zo|`sxIr=^UgDQfa7w<`_Vk^PeHCMRNrh7&Jfw@crOvVsI{I zfLDNeMj$UEht*`PVFj-MLF0m;Ku*WdI0dUlPuv%K7O{ZJHt-!tjB^Z(85k7zf(ENuz_Y=-LCaCVv&}5vKExeRkZrDIU|?hc&o(oL zXf7}UwYPad?Q_OZ$kH!1aJPaBw8#TA`v{6UHBeaqa+>eSodl-W>!LAVkyM{4X6YLfts9Q8Zs}L4|{SKKy z15dg^b2cc&G3Yu>XJBBI1i6XM+nC z2gpSr$KQuI9+Dauv_Xplz@7t@S0MTSsPdp`Ua&l9%`GVL%a}ks51PFK4cLMuVU0gm zup~y=rM(?iXM&3zF$RWIutIq3f+hu_p$K&tgU%z++L3thtT8D4gSwWCb9zi+UXAAi zd9@$z)kLsYe}VYmf+Y#8GgSzh1Ll}w6f7@M+@J=k*FY&&(iG%Dma{ZfW=_iH9#dbNEp4G z0C@ylPKYx|fI>s(y(c3BBfkKs2@47*(9jy=98NRXc&{K>2C1`n7h(^%Hw2r>*9P?? zKryKe%7-9^2FUqP`$0+>bX1ub7#I}JEd<1f5a|9^gzyRR~%|36f{f$=<`rz-TN0TBixJ1Jr?IoU_cFfkAO;23Q7E@6Qo} zHRO%KetQU7&;y?AFa`6Ogc%rAPt0LpU^D}pgyi=-s20P$4;n-Vxj-A#nglc8GZvY! zqzf8C0L7hxIf^eq1rtaIcpwSXtN|^a1q~#D21^z(KxTE-)gGLk<34qiVfcW4htt!0g0%A#*{!|+=6Nt=<;{4 zJZJzC6vhj|^3hDC3=Gq<$qv? z1FQ=lgBiyBETAydaRjaFl@Wx6G-z)n=KT8Oq=hK^+;;=yD<0>!9Qe+NjDn zhsOpM$c5lQP692P0ta#-IFOq`{Cl84E(8a%ych$6rh_db17o2eNH45vF9rvBq!=v7 zOTa;11>%E)ycBHj3^8bs3)#SH4p3zY^16*RC^(S4UV+u?C_xVDT*QDi!h;-C0)Wix z0ShCWw-T#)pwa;xl%Tl|P*8&Vn4n181U3QOBmobPfg0-3B~35pxkK`egolpJJ1$}`Y1rwgFQ3Ik{ZE#sU#TUhK|0LRXD zc<5h%gnqCRxJhye9Qrpvp$$&(m%*X`6BgPaW6%=#DjW3BzJ@h)FhctjSR*{N6QR@g zzre!Cq5Tr8dFjx0zc#3i4+;}-^$iMb1zV7dz&$E8SkuP@ECy=&FsQ*s1_GgCC?O15 z+W<06<0+`TLJeW?tP2OI^VMt%-9IM5V3p0n$iVoj*cO%!t!hDS%-0}gkf5^K?8C^w z_y$Qp6|}SF?QyskDbP5Ml`?3Ja!Uc7(XKk`0z3^Fn$rRgV`+w zn$@-9IKsfd_zR&-wd4>Z10yRVLY-m1NN%f*bE_Mk2^ zGXsOQ6=+lC60m^vehEef_N5SZ3}_eKKc;Og3=ABg0zb(fZof@b1S13E^J05=5C_>a zFxayHU|`@`3~FtGmfnkl+E5I3t3h`KECKECfNVmt1q}}KN`h2@c2Ix?A$yd->g|8n zFfefSGM=|*U=Rlp3=*K;x!tl{1_qw}UqGT@;unYoS~e&S+9|@o&jQ+(B=O%KG#mh$ ztd{`oj&cCm1+odWO99CyPy>a*{vS6316LCxXiQTav{0MDeseh^1J^9Z00#yJun5Ef z_9A+W4D1ZdpwbYsG0^VRZbk;C3!p3^4q7tG;27r4$iQb^E!~I6 zJM|edGVpA%U3ZFsfo~>gQVUduih~p}*ly})VBo(8VuK1wanOz~X9lNVnv4tr?zURC zj0`+&AdiB|KXDL49JH_#;u}!1W3WGv%fP_3o)OfdKytQIT_ytq(?^$_7Dfia7;ri0 z_&S<_foCm9m+R%n3=CZRz{w8cO$J6mMpZsxZf3qvaY04_@tIEI3=B+S49t91+}7Nl z!VC<|Dh%A*cHGQ-3=Aw#CTJfaR0%6c37a@0H#bN%E4n{^#VUQ@NB7>)} zJ}B&kk<@Y{)LL*eF!1m*aC0*-@Cq|B^C1l6<7Hsx0GaM73{u1oQUtP90IZA^Bm=TR z5Xmf71_mKf26agW24S!wkmFcEibSA_SRrPKLXC!U#Y7p^B_Zw=XJr7{A)yAQBta4& z{Zgi2zBCJxCuB4jnE7OQ85m^s7-7MtzztF@XMz+I^4yFJ3<^*stRQ;?8HLy!B&It_ zg48OqLe#Q)3Nwj=Mm$is$_RZZx>UFsL41$_s!+>721qb4sC70mG72&pf-R9BN!OWSy8-X0n%f|ZO!T_EW^#fUW94iF)bHWR3jBi!{+ z(-;_>kcB`_a0a#MT;QVMcmRpJLW~1>3S=Zm2-Ff~01dk^G6aDrN$~a0prKr_3}`tX zXpn`8!C*d!25(1X0L`O;r9tbJLDN5s2qBO-c=HiM5QqZp=U`#@%osEu!~zX0F){>! zC{X_xA_39?!=M$bj10jb3Z@_!wBsKv4>J$R1V#q9Q$b3=lgbRiAPTgo6l6X^J4gX& zB%6^T1Vn*m+!+}_J${e`7=uRh85u%B6ij<4+;)%(&?G4%LpX?nDF}xv0EHE34+|)) zKs0D=G9yC-Xub<%B1jlSg9cI=89*Z%AQQn0t3Z39K++%@RP>|y3N((v$PfggKx>si zz6zQTVu6B)ks$~~fmU}xB*3OZ2~g{iks%mFfz*Q(1cP;glp{F;q#TrH7#V^<6ljwY zNNo_@Zy*t6)T99#XMm;_(B217m@_g2fhbTsu`m?PsE2Dm#K6E%2I{^ufEE#fY-0dz z`2w}H85x2=6ln7o6T?JMq=2PC>#jk;3+yFo*&*e3=*~I)G@Zh+50Y zzyQ(;b{GQ#18A%rW(0@^sbON6=mDZZtNKAk!_ z{CftlRX!kZLe+vsZ@_9niv~agGmH!&pji-*ZAj_2hk=1%9wdf96i5X#LrDcn6r2H@ zZZIE2gF843!Jv-p8?ZKbiiCLyDHVb)cFzC@2wWA&NuY>>#vdppK#~knQURqHP@4@R z0n!1(pv|a^48b4@q#mRocs_^)QjQd%pgaXy{Q?Rf5Diko$N;()j{#&jNEk#zbis=P zkYhlqk$eEM7`&Z}AqYf)QaQ*{L<%RU0Hg&{{K4%ZN)ISEAUOnN49IOv3`L+}Nstj> z3>sTvWC#LLpwf?#Aqqr^gQF%0M1jJJks%61fo3#NT@P9|3DOD*5STs?8>A7W8p#15 z+dwumG6aDrP^v;T3#0%%1I7>pqUM1P)B=~_Al3qKDhL8mp#4OcIzij885x2>6i5LR z!$g!K7BpAP$PfaeK++)nA@DQ`vKf-5z&DhB*}}2tX@fmw`P3PtKs3aL^DABSW|cBLhPqSQd0j64*SD45X+D z0HpZGDLxfWI^+#j0{nrq6#z#$H))` zI+6!84adk31&S+Bj4(1pfh~q^ZvhzricSy>Dmxe%fR1!XekaVib3Iv zNaG+8(6A&UL(onJ1_n@%9w}5n+Cht37#V^<6lmE5s&ZaH!%FYV|QP z1cRu3;NT7hQK0EAW`-ir7(Yl60|Q7iXo)f-LlB4ptt@9|C@z8L3sBU8s!~RV2v8V< z7OEh%BS9N{ryum>1zK*7R0D!+Me;8wv7@>jBm%1b85x2=Cn~%Kn~qYLgUS*{ zh9D3H+WG;}4q`#ta-cB`a0><^0kRN;LGA*ra{}d15DjYMAcZMN8e}5r27?R-Wg13? zAP@zu(@W-q7@Hxk2T`C21WXr!dK2KXFKaP&yN2Nj_pi$FAJ5Sx)92$T)&$!L)5!o@0L#b_1foE>5|XY!EKpoQqYShb5h4NC2HU5^ z5DY2`VG0mc14tCD=L6CUnh<7W2m(={#0W7I#5xS|9f*R}Gl+T&q!ToS$;c24qF@RT zwt*CY+AfR?As`B-0MXI_iGoThq%Z~PiHFz$D3}6NTS0wj zXjdAvj0@ES(An;w*;Ay#0W=E;N-3b&0d4F6X+n|)*$e7GGBN~#D3G&JjRYwG6;O-} z!5|8z0O2Um(i2d0AmwvV9Sq8rAUpSimVQHg4KfObL3J7bxW2q}<$ zEzF?kfCzyoP|t`NR7!vtpx9z$2m(={6)PaK5GfQ?#({J&G6aDrkb2@Yf}9MRre|ab z0#Ts70^pntVn8~7K_Cj0l^`~PSfG7Fj0`~_YA)!QTX1m;Vu8v^Mh396Kub*^IzU!{ zFvyJ{JLqH;C}n`68AOA814?}$8stWhIEV&05-IvYt_1a!7#V^<6sY)SWC#IKAK~5v zu|UmpMurd&1?s}1dJ|+wA2<$!K@>~@BHlrwpyoeP4gu)_b+`xcmnl+r$7;4>CFgNoNSMPDGgn(h1sv!pIN` zqF_cNMyNodpt2LG?l5L#09yeHY?!HN0SxK=2Z1QiSO~~5-~v43_;BXhy;iQ-tfW@45DC0q6Pq{(Z$FR0-`_$fpms|jRY;DU}OjZQ6PgL z5+D|+dCtfX0-`{b5kvySf|Lm%APTf{93lZ?fzlQuLkNfh9jpbB0I@*MVq^#bQ83pb z0vR+^1_}yB1{@&*8t#OYrzq`GkZGVm2GJl>(JB_uwnhlA&XSfCPwks%mF!Q4hD?#OrNPNP;?=j0_Q=<`X34q68|)U{IifXpjYHITX~|f;PH9%{A0O1w|xY z1t9A|V{1r#jwj%z5h&4vcLReM-~;$T3{V>sM1y)QAR09O3!*{QGKdC^sDfxvuLwkg zy80j*)FT1WpkW{o4H_#2(V)%c?U#;YE%#ns=7fmXlMjP!}y>>CO~{pn+QaMdb%JQ)IbB#Fn5E_=LhjYdyqgh zs8a)?LD2-FK@A8H4NCAJ8rC$1`3tlq3nUI|VuEN;o&nJ?dqFJ-5Fgaw0nwnA3y21# zNDvLGpFuQey(x$W)v+KNR7HSjSfd^`x&$iMLE@ld5k!MBA&3U08xRdjAs`xrK_ls) zz7S|-7HE_eBnHB;t`bNbG`tED17T1T1hj1sRF#9W(o6;h2AI1+@*uy18h)TS0(Ch+ zVjv6}(FLV&P!A!P5hQ}ZprJ$%4;J5}=?WAYke#I<)=*4WEDWFqQ(uUMnNJpMk|L}7olgu5%$`aRX)wv0rOc}2IhT=vSwjUZz{0Gl%Bs3AlaYa0OARVwtPW+E zXh0Ycl37a=%FxkbRkPP)U|`nOhKlIxKp2=Lb1El9kU4{g)!ShX0|RroF01?LC!qL@ zV`6oVKfuVq?5oGh|6n&rD3Fg;T6ZM_1GAhyRG+*7gn>jdmm5NO%$3N#g9H$Btq}`^ z#ljrS&FXQ#jDdmK4|I4p0|Rq2qX|SOgk%ojf-oQ?bBG|ThtnBG2Ic^6m=U3-P`NNB z7Upm>R`*&_1_owdbBHK}WQ+Ujz`(#-aRV&2G+GqYE29btecpY zofq``^6K@eC1M4BCqAW%R)-y~KUo$YU-e=M|#=yY(fQi|I zfq}J)nPWL41M56yR|ZA~*44}tUNJDR?qGJ|2Azq_!oa}FaN8V2#>9b0*_j~n4CpEh zhOMVTY&U5}23CeUb3yFOyFg@1JBaiV0g12r4r0&!1R_J$fkezcgV=)aL1e`ukjMfZ z5V_ACMB1c*#HB&29~qQ;KeO_+}=Mnp+tlGEf#o&ie-vzYAIr z#;|@BNF6T7$iHP1w_8w3nFV-Kx8Bzh>Y6^A`L*PouPL( zh%HbB()AJ?ry<~YuK}mJ`%GYQaJs6!4q{jC0Fi|gK)SS|K;$EEE)XaNiQ5H$NKHYI zxC94?+_VcsR)OQ0yTPLg46Gc-o-#17 z^1a&0$iS*J1>^#aWn7F5tVVB~7#LX1R6*sYWqKI{1FOw;P!6|G0hMJQUqGd&_gP^E z23Ei5J_ZKXz{#K-6}1vH=?W@w#Z>GW8Cc~_3K$t!6-@3jFtDnEX8c%n)z-paw3gj-adZ^sRRc46HGopcEBbnZ>}s8m9{~Exrv@k|fyZGcvFyb%`=CuqM9&<&=~t zTSf-fR1Q!)rg<%AU|>xz2Bqo@1zrXQ*36}#*w69;#aQ-6PjM}W zSgU?F&%dU1tdj=lbf)3=FIdjNTax46Kce7eS{4HZl5wvS%}+AIMiN zjM|`t(#n_*DyiBTtwF^~2V)#4mvk~N)dAJoj9WnEemA2PsCejM%*XAxs3$iBslTR?%ggwZX5 zfq``?<1|oKS;lB_fq{W_1>?$iMh4cEj9H+tSk1T(lyKHCmVxS;wTxdt4VQI{Tn&s2 ztQ#2XPlDPnjM<=Ce;Z>6C^PJ4^Z?a*dl-+TF*303WfTO(>ORI~P{F>RQ4EyB4=`$h zg8U%k93=(@)7cwxg9%jq{8Fqy64=4d2V+5UR!FrtWO(+8c>j}nSP%b#h_zmRT zQ;hRLHOXnlGoa|Z#F%=3fr0fh;|euK2G%Q#GeBW|l`(n>0|V=I#=~`t46HX8_kh|< zw-}pOGcd5;W}FJDTJJJ86)-Tc-edHS2DPjh7ykjZtQbFUV_;x?$aoCo%}0!PK*{Yf z<8#nb+b4{>K^5~;M(zC!46M%>*+KFCjWJt;k%9F)BNM1N{K;4WO1Hll!$8^TKjV(2 zp!C920`gHaQyHk0*TUpFm4Sh^ooNH8Uh80*4$5YoOx-6L8CbiRX3YU52BvIK`Pj#F z*_DBTbpq2ZkaH(9>4So97LyjJq@2yP1*CEg)2>uT2G+Sub6r6VK_&rEik#217gSv> zVp$;)4C|S=L50``CNZmtk;+n zK`HAxlWiX;rkNa!1{w}F(^8IGHnO7o_;a$fc*ZONeiU!50jh~BLnMSrW#P`{g25H4#LcW=q2~-!fFeihWv#rd2pj_3)EOQ2w&X_ep;nKk@ z3hI1xGH+i9N@vVzVhjwd-OQDsaVC`q#4Qe4wV6F!h z@e`S2d>I&6CowPi&%nSsnYjp5YENOV;ALcBoyz?3G^hw-4g)ohrZaniGTvTs2G)hlpc!J;Ma+MeFfgz#W@ZN! zfJ>M&K!w~=X2CiJ2G(WFdqKtFa^?+hK*bZY)+A8cWj+jQw60>#2GzK$nFT>r*Ba(Z zPzkn{c~vC?1M50wCQwgcJ##RqAm6~O53+qD^Yve#GK={qsGqT!`O0iY2G%Xiv7nl1 zE3?u$P`YN;07cbyW>Zl0yo32RC^~jB7lEq0UCi~Mnr1JvkP{;V>po@=P)W3(`3k6c zaez5(KO+O{LFOJ%<~qcj0?L$!nUz3I(Id=1KoNJG*&NiwKf!DbYDt}BR;giRU_HhB z3{+~IW_|>!=*}?ff!fUHnb-O=GO*rdJ`D=2d(1mP-G}?kUZC{yfSDOo={;nw0ri6( zF*|~qD36(0Ks|sb%z7YCKV^Ohs*j#ATYw>nqM+kfokbj%sils z{+b!I50~`~^Ab>5@Rr#T)V_Mh>;Y18NX=u>1w7>|~h-QrX4g4{9rSv#bF%T6xtI$MOV}Cg!u0Su--QE@0UL>f$V9 zISX>`B9?qm^e<-Nbzx*+UBY4mDqEMb++PPuv@BVmM)YzPeNYj!l4U8VL|MhM{0pe0 zWr+tB0&7^>K{l*qc@CuwG!90Lm5@Su{Z%%1bPEphJ`{vlumk>Ts6qGDZg0 zt1R=jGBB`SW4V2Zk%9F(O8}?|e4k}6s5kw9#bPI@o@RLg>P0=Pav0McxY*&Oqa; z-z@2%Lgx>Q-yQ}A*1s$(Kz*uzEV`h0_|K9H8X0I{1ueT`ZDiE}^?;jLw}Tp)?W|Iu zEYrdI0p!0<)>+=rzQ#VrZcwxI0HXz{3O&SV2l|- zhVdRqG8Hr)@Z3d~M}#!k%TL8Xhubx<5y3WG{~hk8&m!*L^Mq{N8> zlp>vHgTm4EEofxOZ8xYEa(4seAv5&D5R6Orz zd;n^-9AHcY^{@{z-g^sfC{6-3s}3`&f}-*WqZlabA7vB+h4(Q=9Z)fJoY8p(C{;3U z1)bk;lF*e+gnC&kk`AI1VJTSH`5AGDb~Zp)X&Jk+RHQ-hJ9bFA!j0Ws(4OU?it&GBB`8or`5)U{x0Ybw4!zfwGFG5U3}u)d6y} z_6AV8(fJ7K9_UU0jV$TOBr!0s>R$u3BMi9Op>8odr^?8{W}yvgcseZrO_#CY@D}TR zrlLa(3~bMs3<4Oi2QIQF1($%rUX%+Ix^AmM9j8b?Q1dNg0VuVsU^IURDoB|&fa>k- zOirMZcL&pQP*t>(X%=V%XcyBnP|WUTItQwl_Ao`R0`*Fmct8dINv0rBo8=T!0jQ0% zocX|Ja3dfR)QdjHycE>ky2gA6l&|hHfA#^jIhp@}MsZ&-`-AG{&&-<=85vl=G0Q|S zfNIAhM;RDc|1+n7+5$~1s=m8%US+{3g;Cp%Ahv^%vC^@l|?_ud@D@}1_oAZSI~fwO+ILt!!``mxN?{a zDx4j)K!&iV_GJWh&24iS7+7a8+JhQtvl!okygr9f2f)6K`OA3ab4!GUkHDHa9cg4+8bS7^OgM->r-)psM5>qdF*G zeP@&g^+A3xs)OpupNv01rQHrPS|73a$ z8V&!?v=&r+PiFQ6wQRO9KLaV*%B%tk;yujHpzh*c=4Voj46KKlx9~GEupVJP1L_N& zV}1>)0G}`?fg<%8b6OiCsDY{tYFE8vzI>5^f%P@>Wl(s2W!?Z9g!;uS4(itaXWk2n z^Cp&GpnTcJa&96618WD%o^;R@2+LzoGjKi29Z-97Gs{y@hkHAV7|7_|Ec-$2mHjLZ zav-;`yaM(2jU4C;+Pr$t$gS zW`GJ1fe)ZeF7)pav?LaL0Ge-+`3uUJO3I)y2aQP37=>OsC}EgbfjWCu6<&-CtPUBV zmYh!zsJ#=$4k~>U{)0y8vi>lF6XNSrHk zEC*Ga=NWB4gDw{sUxBLWi;SMn!2>HTpz`SsV+*K_b(irRXvF;~<9Sd=@)_d;P($ZA zqYNm}J~GCEx&ogVQ$W?gXU03ABA}6J4Jcq(NouQYKqalHJVI)&c6uF$sePYqm1I1a;aEGwlFXY)6=kK|>oy zncP7!ahd5h$bnawQbC3CRi^i#zRF`J575NT6QqP9k1vC$|Op)ATKGO1+~Hr#6i37KuJ_!FR1-4+6Wpt5L*Q* z5X2vXhL$CEf=W8cc2G-3$`(|vN%w-5Ju_$Od#pDjCEH*z08fLPX0SZ0q zJs^MDJO(vi?Yu$0byNh^1TJ4eX~4bRih+UEO9a$3^SuWuDgz#Z0yKCZXn-=T2Ne5} z$3a86F;bw`eLO3u*_L!YoPmKgH5Am8&2R%H=eK9H6gm&;zcN;X=8^X^J^+oV9AK;g^>Gd|-UFB2j0K=XcbM@a$hk)tPlKw3 zql_Y;cET~nHc)~&&NvrTzMNpxxW>T1dXn)4sIWT4xC=CEaGKEw)S^4Xm0h2sUrd7wJ&BBKB(2V7#D2&#rIGd6%~=_`zUpwa59j18a;!!^cQ zP>=jN<5^I_a)WUeC~@9o`~&J_-eL>|)rGeiKY^ObcNiCeMsx2nW`a`XJ;oByjMja| zaF7EZFm4CU-aTaO1{LOy7=MC>4<9rB1P!u2VY~vGGkMAw01Am`j59$+<#WdWph$he zcmXtI@RD%~DAm1U>;pBAUNhE!MhD(7MuL+0TSjkC7ycciG03p@j3+=P*aya`pf>SG z#%G}J-zP?XP%ZbFaSfRKgRw9Mh4dZjQc?S`UWONP!KdSxq)20im4am zmDNm^;N~dPY)~&`Ez?3!mRZNt0qWkbXG#a<>`hF0paNktQzU4nWeZaSXzLNE=<8q- z0+kM3OhPxo4Fq{m=eLvPJ}5KaV%gx$$iRA=r37T|Jr)hnebgXL?ChZA#$g4DOwNfQ z$8!AuP0(_CgJgN`gYp%x0H{gCR|3jM{Leu}xxf-oS{3vJm54&sprJ$IE>N_J90Qf< zqK7~+CMKc9z`!cLhLMqhRbo1*RV3*L%Ii`yK%Hr6aZm{=!w;GUlfB2r$iON$6V#oR zR|HMtDdd7W_llyEK$DdQplqdF30f(lk_|FVbv0=GMok_xwV{3mlrJ@Yg3_dBGAKZ` z;z7}`-3gkc&^ZC>-{=N_#xeCmSs58v_2obzYG4AYK@2~GwhMv$>GuYtI=BbaPYSsK zin&lBP!BjP;U@zFTR1bQ0~h5CDru9yfwDx(9nhFj`U-Vuy`=G^3p6zu0jgH*c7YZ` z*o$$28XtE-jS|OdkSm;?gM8q+6f`dEHV0I|<#mC=ub>JPT}8a036K(IP+~3n37WpF zyZ{;%tGWdmMXPQC#dVDb$d)EXdC-(lE8`PTif&`v3@Y>XGj)TSEC-m*f(q(`OgW&c z`4E#Ys3mcj=?bWmdW6XylvR&1T}WgA%{l~vMjehbMT27a1k*E67C*@p3z{J~#Z(Wf zj88MY2ZhHOrW8=0=q!^js8~G5qz&qdooAW?8gsqCS?jX@2V%gl11?%j3f5Kzf^ zgIOKaY`w|c3o6BLF&_n05Vx7RLCNC|^DIz%X5I@TA%>=!R!yJAbvCd0(CC`GA{!4Xc}1h^cX-xwwa(he>%%C&@kx?7G6*x zGLuCTlw)VHaDbXYvsqL@@i2#F188t)E{heYzk8TvH^@mxSsFpv;W*0+knJZ~xr0p5>T4B#=@cunkQm$0#(g7S#&_f{w1?ppRdP+_v3{S_z&Y+&C9s$Vv; z{{@xJo7lgBw$Fevr}A~sS|bBCkU56Tpe$~53N({$yb%;+CLN$Ap(zij18r6YDrU?l zf<`ke)-7RVV70ssD$=apgJylK89|Y6^8hrnZ(9rM9on4%*>A4{8eer#0F84xa)Da0 zP9`AIIR?~$b~y(s>RgpUHIthKXadGP9#r9a$b%;6JUKz(;AII46z@}@wt>%5P@C1a zL;ophO85vlU zG(kff$(f*@Wr_r7o;9@})YM2@4U$cN0vhMaumKe>nR`Jsbyh8?NtRsc`hLgTlE!7t|nbU~~p$nMOueP^+ei z@eim)(9F04WNQoK8BjKCWt_;sz`)wZcodW@+8Mb(Zs}mu0F8!rGA;pCI$exWpmuvV z<4n-hKo8>wPtkdtVPIhGXFLuXznj4L6I7*7WSj=FVG^S zj&m6^Kw&bEu@=;dn$O4z8faa>I9USR@?-?1xkZdS6+xp`j4MFnj7u2HL7lawj6IsCg8&@lcs#x0;4c01#2 zP(Ikf=m=_V?_}fyt-#yG=nSg+b~8GGT0?sn>p*jddl^$eLB5Z16Q~ikpYatJe$XE)hCJr%%f`-5jGyVWIe~&Q!1l0jY8T&!i^f5+FkgJa~>VWF16O4O6Mczrq znV`b>6k|T9jc}Tg0W?E?hS3=mac3FDL5;9;jGq=TGO(U!+ze`cU0{3)ipGnKKA?i^ z5~C%kZF`w96cmtG825uh;ws~0(5TNfMj24$cAfDhXkh3D<5WZUzm1nv1{eadJF zY7RVOoB&$d@SO28Xl(2S<62NV>?Pw8P?7hF@ib^j*lWf=pnUs=@inNm^p^2BsJZ=) zu@ltte9yQVlt(`>o&ptR9~qy39Px=U4^-8CX3PL(i!Y38KuZMzC`kkP*xe~jlrb-;f{?_Hpd z9Fqme+D0aKQ1_*YsUFlaYG!H%1xO3iO;F9%%5)c`uZ^h$ltS8>{+}5&=4O#Uu1%cLq^fP@24Ma^~;s6bqPGq_Z8hV<< z6a?zeO=e;PjWJDO`nCl$v(D54YK~50IshsvrZZ)L)=bV|Is!_AGnpbm73M6aeW2oK zHj^XBe{+~}K&`d8OdcS2&STmDYGBW2>I6mA0;a>DDd2@n%%DkyMNH2?wc28)OP~N* z!gLuFtV@}KK}l*ElObrrdpXleP}#JCsTZ`&VkJ`?sC-$)BmtV~Se{SfG6c0z z)-nl#W(L+V?Ew2x^9sLi*Z zNe9%#J-{>-R5Bc7Itq%oLrgP3>Fh95E@%%GN>Eli$@B-5Ud}Lm1&tD( zWtstM2%cl=2MrXRXL=4={CR;X4KxUGiOCtX>i|@~8e9fVHd!`;8V{cJpiz>@3!v$~ zLIqGGsAwjr8ZDj!Di2CpK!t6oDyVcVV+8rE+!Pe#6*Zt(tc*_uEi+pHnj@%g1r27^ z>;yF|)-&dUB60&`D5!$n$oL-=2%8u$fXd9xj6XmF>020MKrQE;j4hy%&s~feAbWN* zHi5dhdl*eY{@u^$1e&-y#3&BRJ4YEiK)uA1jP9VUeu`1SfRTaqG-EYrwZIw1YoN;D zEaN6nTIVt2c2HULgwY>VR6k>U26FCmM!9Uz$^}OMr3?(LFBy43-h9RA z18PvbW&~A%tZx_@KpEpL<7?1B)_cYlP*(WB7!B%Ye`M4El?I;}b3nsepBaTff%S#a z0TfYR89~Js>o>;TpoaZ##vh>3&OeM1pz+YZjD?_P_dmuJpdp|}rXJ9+Knv3jQ0TTZ zg@8h-o5>%PjCzia-%Cf$0or9Bd*}GH7sW64N5kvckzs z44_uu6eiF?xUAEdo`bUUbSBUSC)OEE3qb9tnM^#On4ZOS4wSEEGZlg&U=C9}XpDI- z6DKHz%x7`{t$$v?v;#D)u#kxhlmHhofo5e{7c<#_+ICBrGC)d}GHn8t%FCEKKq+qp zQ#7bGyprh?D3h*YDh74QRx@1yRi|s1q(PZ&Ez?6#$+V8?38)3Mo+$*>k=V#22TH!1 zm|lUJb(@)%flB2qOu?X}xRvQLsKvC6={9IgV>{C$P@dbt!~r_48I)!eB|sy6%I87B zr4j?Gu2j204MjCI(72xFZ&2e$D-7fhZE28;b*w@z-p2NnkhFu1seV`3jy_d&DVp9GK*x;h?eC#P}9Mx8`O5TP6gGPHs?Tz(KZ4! zmG0mQn!j)i0nz4RP?*hO6akg=a~W5FdO`CUoj|E>0i!x77cXMu2hEo( zW^4xykSt|%1vzCIV>77Xw34wOG+eTpQK=Z(hxVThsu_d7fO@(KTR{Dv#228#GTRk2 zYMhgQhk=1Lw;I$5$nyg=n)26znlc4HK<%$WZ%{E;WChCn#WtWgDFJQSV=YYu#X#9n zP=>0E1}%oF@&YwostIbsuY0jL?XnHh9^ z2kRDQK2WG`WnKY_fNjiupwW%(%#&L|OK+G#_cXKaWM&4nBX=>Uf&_On8-c39J8oYvu~`aZpG4D)UoNp>~b=F{tx+ zo%s|fP26Cf32MdOWZn+yq1jUPCpvvqab1rBQ=n=CYsMdbWJP9-=`-FKGsBC!3oCq3_d&_(b)Y*H-d>d4}e_*Z# z6?h++PlM*wzc2@Z>dCLnP9VqsVDrbjJdg-Jo(}Aqz98mA8mxDmW{%D1vILB`lz8)>xOZh=8nJ&e8%}I<Eu7G6-nd75P(sBLzk>xq433rJ_5VXtXGRp-}je3QJ0W@ZHjpZPyJ9nMs3n-3m zuyD^|U|_w;!U2lgTP%-2<>hUbEYLvX9hQHfIrO_MlRzV>_gE4^sr5dKIcW6Z0ZT0? ztRJ%626g8iv0Mg?)I4V4EoNk3eZq1QRBAkBDF#h0J!9DiD)*kV@PQ^uUa*`8l|3(6 z7J$~@y<#x{b(&tYYyqY6H!Mp)rS4l6XOLmll0x6lqnhWZhEM_eMEl*s+ssZW_EM=_&jY}~1lS;1Nlnz>!c zDhw)ZRiw6xKUfXMj5OJ6ZccYa({BvVuZl zH|t7JDYb_+7gW;jW#s}b^xMZe6V$xj&$=Gep}NGnC09!I>5dR?C4$xYa zLu}ljhV)^!RiJX>2-_=AB09=;2sCnihHVn4Iy=i&2^uT;&87n?)|%OQKw;LxehO5g zw6Y6=il9FBYoPe+XTJg(@1MXf4a#a0+24aQ&`!?jpl;bNPE*k8lHHtJK%umcGaD2x z`#C3qD!v1pDWDqmFsBwM%#Luzf@W5Za^``?8BTBtfmTtR#*K(Z!wcyrq z#e%vb8@Zl?s;oU+s-QmJUapm(B4{61Fes+?b2Wmza)rwc)J%EGWiP?N!1|Lb>oBxo zq>=*al<2jAVo<*Uv~R(19%wAVcm*hKOdLQB70Z(#ldR1_mH0RrtB$pe{|tZ%}sWU)UIO|55Tg>PI6KVv7}UKy!U#H7pY=%}i@SV{t7^^`LG|E7L^KxMv$vKWNaoooOQ|6L&C808M3f zGWme)>tZSg4IXzhMS=QOJxp1k-b*jjE706YACnL0fILvoN9hBoL#$c|%7AJIK>1I% z0W?FQX9nsQ>i-5cA`L=8@nkpyRM{Er1hq$umw-kmO#(oXYAO#3IkOB<^Upj0v@phk zAG9RU(ic<{S^I(t78?yv|JODbH0Nly4U|CbPk_1;4o0BrP)X_b z71Ww={|Kt6JcU6mUoRz4Ht?|qwHM*4L1ohc6c7WPbnOi~en>7)nH+u$Xyf)_~ zs4~sl4a&Ot+@Qj~fCV(lQ+Nh6j#rcjYKfHY0u?u9BB0h``3q3vsUjUT%}|*Q@_W@5 z&`RuDWl+shcMa48tXBtxRRf~|D2^K$kAVE$#JCRBO>Jfj1I2g?V+*LJY-LOXwOHC1 zAA`o4+ZmUEmR@x*{sy&8yBTXht>zv^Mo_n}m(dGUjP@~VfSlORSPe>36BzkGjiHH* zOF+fgBt|Px#W0z1DQHS-3Zo%tD0eEOH%M?AqZuf*PiIsCwGw79z5~r-%w&8Fsy=5i zo&`nEY{n*#zvnQfgRGs)xCWFt=P}*|*)X3`4YaCh5u-V%vA3A<2B?3ugz*rl99+uy z8swv8jFKSVE@ylNnpj%F_ykl+tz?V*AB86`pKYz?D7D9G0`GJsnC>liIS zW!rkjyP%na4UFobhRa6Acc96TO^k0r7Hwv%2Mx?`Ve|!=xs{RU33S1lj0323s{uOu znpN`#Xs$tPDyW9lRtDAGI^RI4qMQlTnya(|4fV}qOaq;f2+C5%-?A7O*la~C85!8@ z=J_%*u-V`H!N9=gzzwQEeZWTgI)mn?{8oTksQzHXrZFmmnvZiCJ3&5Q#JCRBb=|-S zI*pL^A>(&Y17|7IDbS$gGA1QZ3R%uH0aRwMV5$W5pI0&ofONN~?P?}Ikki&M zm4n>5mZ<^MaM-}a18Q1sWI78f-#0NufV!ERnR-F4+REgq3H5n~FDP$h&jsc45^m6t zV-sU1sEOIexD>Q$wv%x?XaK2;@dM~o9gv4B^-CETSX&uifa;%FjEtau&uqpgptLoY z@eioXozJ)zG;XtkF#%-uCPo*~-q!7mJfNI+fbkD#kl-NWJdlRNjMbo?#}P&y(75zb z#%$2=$uY)EP+Qe}XXtG<bp z#`&PK`VQkP(9FzT#KjR>O0~5K!~v z1>;jtmVU_?3yPU{jMkvp>yM1CpqBDi#*d)l;TPj4P+tDSs0-?)H!y{QMq?V8Qb7%b zCZ^9I`YU)m4DhG{kOk@(D4{bxZzfomi zU=4T&O4LC0l;Hv!;l#g{d zK~<6N8Bk`>3kFsC`u9O?SOYnbxZzAtfn{_Ll%b5BK&~{o1)3Z(T>;8eW|u*24f7^Y zI9arV8f=!epg}b&b5KQZEdwh4Y&M%QGO*g}fqH*-k3osaUJO)vIkbc3fgRmJqpnU{ zL0uu|KcIB#@(ZUKn>xfTOje|RFHVu zB9J@N1wc*Bj0#XCktqObnPzeJ@bTF_;9( zTZWFH37K#aP_rqz9n_9Y=>-iQXC#9r2HF^TLG6tW#zmmYwv$l_l+3yr4}n&|^)Q|U zm55Uqmw@KhKyjBS0c!sz^@Ey<$(A6$q<}7=V@-7h#a&u6C>y2k0F_fkQzW5oSM&lE zH0o9$KWkWn@{ML8C{Jh^gG|&;0ktW0W`GXL0`aTUK;hKScp8-GCoqPBnk^F@U-a0O!~sEk>~cmdRs zTg&(ubj-;m#uuP$dYSPXD2rWTtOup-tBk3j=JZ|0PoU=A1I9_9I^ZGW3{WrPIpaN0 z<@ADa18AV~CF5R@lU^~3gGLwMG4_L67@rxxfU3R;YxiUti%Jz+WpN_wxD%0Ugw&rJNF$o$PD3EI!u%zOmYa_?p?0d*dyGWUVH zBr}<3fp~M7+d%ckLS`Y*%Ocqv9(|azOpEC5teqW?IYg2^1Y0S@wad@~tdyL9?PeStf#9wwL8BXnDp#mN3wG%Tbospw7!l zmZP9j@+`|_P(HZGk_&48U1f0u72h{m*g#XycUiJPOF|y9oC7r;pRzQ7nn^EN{8lqE zu)bxf01c7+XPF8rE1FqPfmF7$_JRh4x>@Z(&9Z*h3HFQ(tdm(^fb!3D)_I^YzuBzp zpqhR$s}pFXWI5}4kkPAI>p;0;Gph`!qqv>58#KSaoAoFts*bZ3gVrIOXWa$baC)8f zF=!6|KI;!q(fpWo2gtrxtd~HYtkR|H( zHEcWCCW5-vU2N^3hIcpHE6@Uj9<~LbCdC9cU(htlM7DZRtW0A24_ak4ne8yBzdfDp zj1IKOVqySQob2~Ni(B~S&Vh=`Wq`ueCSMxV;Nu4seh!Pd85!6-5LjZ0Y@=>LO!*1_J|I z<}1)Bf0mj)BLiFR9Z>J1u#|^^fvt2t9|HqxS-~|12Db8tpe$d}UBke@RviJVRBOCX zF)*+-Fir-w(Hj|e$}ljnH8E;}Iv351-wPQT*xDFtKm)7oj0Zt3?`Hf6>LK(nw%ui5 zVC!YP02+PiV~llXWMG@f$Oluu4GZ-1zW-{&pHK%4Vo?5`j zz&4lB3>4Gz7^6UU+JFkIPR5;}jM>XL0aSrcWORd#mZYBpjV`q@P6s90DUAP*ftD38 z-Uc;-r!h8yYU$~W@}R!N48~m0wBk(0&7i*0EJjsO9XOk@6jbHRVYCB{vd?9F1sV*y z%lHH2+h>f^LA{Rmj7p#};-8G1ptWyJOmjgwpo=LOG`K&B=^CgFIg7~|Wcy;KN|2c= znC5{7WcD#F0j*WP!?YH3ipFy$VbD0~d!{*{a_}3|6?15`N1p?Y7{n|ArTW+?P-8Go z0914(Xo2e0ql{NT0|Vz7FM?XUcNy(L-S&Ho%Ry6TZy2|M3me7+P&?*3qd8~{w2`R_ zl#SY$7J;Uj+L_uwL&P0S*`S{GL#8Uw`t?UlUhRwwtjn3ZL7nP(ybkhErz8}DdQyp! zpy*5r2aU)jM}nGiDaxP$sZ@VZlO$~!sGLjJ2c_)H2GE39mLF(=VYV7*h(CuBH2spx z1}eq=F--uK*(;d;ft>JzxdyaQYaWXus5vx?^$lpWTZDZz=OR(5mzw%=-j?bVXWHF~QXu$C;=YCM=Y~=n9s=qdImx5LrZ|3d+wfeSj2Y?nU z-s1k63k}x5d!W{DkN~JO4t4=emNYZUfeu94$#@7<-~M6TBMO>}U}^<5E?zJ#0hN)< znP-BAn13_#fz0k?VNM6nFerg~ux+e8prp8!^%|&_dBghWHfYB^TPJAbV<+1j(1}kc z*pjLl85qJ9KsQ1eu`@6*GXCb{Wng4v1f3)bIzd`Lv^ce>SU)W@IkhBT-zBv;yClCr z-!(YE*a%9d78mGdrljc>lqTh5ChI5X=N9DWrRJ3s>!%f^rWTdt7whXWP{o+cyyTqH zlvKF6M3`DplA2eXsGC|`U~HtDnv?3yi{r$SzK96MdK(k3LLVqV1tG#6%8!P&!wVikVw~0&d*EBOsAr`#rerZ zm!?5E7bDh%f}#%28Nu>Vvrgpi1iTb zK(;3)<)lJ*#U(|VdFgr?3~USx6(vQbc_o>-ASreRhSZYc_~J^CNgNCe#U&{@nMn|J zASFd0aV7?a%+%D>v;v4j;}i3WGa*VKc^krpBqNAZ(^3;lN{hfgV`X4S&M!*U%`8sT z%K+61aNn^oFeF3$z=~uu3j;%9PELL@NI4rw9O`mVz+~o?6qkaW0nw0@pPvH>(Bk}L zy$sNu#BN2YsX-zB!4Pl5c+TJ?4iPI($%Z?X8x$I#A~7B=#Kgdmkq9!C9pZ3^qoJvy zEVZaOGd~X$C{StL+{BXHM39p>85l}3L1D_tz))OST#}lLtQBNINooZ&nm{3vlvx5b z2Oc51X+?>-;80^{U`R0Odv3utm{=H@Yr&$NoNNq?pusLs=K!Mdv@|0#Ggu=#Cl3Q7GY2Ox zSR)SuBPS22MuypNSdx)h0i+*f9vd?QNDl)O3o{!t6Ide)*ajv}ZU&HnAUCjavNA9- zvw}rf!Ln>nl9z#zlL^`IK5<577LbWhhqH2WF)%V$f((FJ$Hc(M#w-k0!vYd#W&)G! zU?V}sfvg1u03;Y7Y8W{=89*k3NM@)?P{2SOD+D%;my?fyk+}{e%fQ6K1Th!N;s6I9 z6LSqzmJ#G}uuFKsdKo!67#Nw^LBYbQhU}s95-{g5ak7AoXNDTZ1kwmLzK)Y0EQT;X0;5^NN8E|soW?)3sv`m_j znG0$k8#v-Yfdp|aC&*i<${%rn!VzQ#*h#Qhf%uAC#3rI5p9G9MxW zKmo}N@)9$cMAg3tt`Ou7P(ng-%V9xA7AEEy1)y+ZVPt;C4^DF|oWkH#1xhzs;FJpX zDKpqJkd(yC14=Q>VD~b!fbHf6g%C3nST8v3!opAj9B@p`3?ReVn3vXrQ_Ot^5Cu~s z23NxZVX-l@Lgks5!6_S@q-sG9Wd>z&P#A(Dv=)>WV5WdmZXH++By&PkLXsVXgya}V z$TNb{H8ZjZL{|+|9275XAXh-*oS7MvlVEmnLfpv=^9B{Oq57o2%D`EG z1(d^?V3~q>XFb@Oli*-sW(TJwlw{v73d$vr6bLqe8Dsz>rv$hF<3caM4#1S7mTRjd zU?~zDSup2A3r>)uL5UC&h2UZXHTfKrfF?hfMu>aB#i9@cBc}jzqU@7`+J&K*8I(9s zOXfCdMrJlpTwy5Y0V#&&Fb)PrP8MW4p24&+GlQ}Zs%yW)OM5m@x`3v}DsWtIfk|*d zjjCyvEGRLtf(sK+v0Md?7jAF@X9lw&r9KmPm3H!1RJkpfqq$X@F7~ig*NATm}>Y%zWT@&ItS2q0WayKFoL#kpIDnpIHEGJR}sj!G?iLWoB+rJfRxa!hu=9 zfLe2)U}OgcFSKO`aUT=N0GNf`APXTWj}?^Wm?2>SPEyP)V3A00zTpFt;6%bK1ZIQt zA8Hys%>nZjIEG=CKw^pbw#5&aF)#zbWdbue-oO1#N2t zwLKX?34)E89ok3$WgKvd;N(V51#`GyWhjbQ;NgYv3TCc?CJrvVxWPpXBB?`C z5<4^{feJWSlN8eK0reBuK*@m_(oTn&3Ce9K4*kIeO<|CxAk4SmA_fvK;8GFVK*|G$ zmk6jxU={$g!ObevwDOP}>UWr7;4BBpoM7e5tkCX=2m>Q?J~#&mgEJefr@)2qEu{So zEpS1>4hoMruzoFYRDn%ItzTDiLlY}52cU>EgXAAxsv@;(Q>@_h zDhP5oYOKGP0QEFLNdl56AtWTRmVko`k_o{X71|<$R9mo~6)4Ub!Ttg_b(tB#Wh=PF z#mowhPe`{BVnPil{$b7qM;Rw5V}L}M4iEH^HSMCns{MZQ+B)9K6m4 z^_{>80M(3T{Ggf)gx9Cna82OLGr9N>Zq((Z*6eqiq~LqZJ_;w)g}AlVvRjDx}j zwGw9oCp0EDW-f4c7U7f!w{Dcd!i>z~V0&4>-nt9!3o>s2bw5BgCa9Uk36{SKX|AsU z%bwG&QWaOItA2N1htwWNr4CA6p*taxdN0GSiyo! zY|M~u4kT-V0|sOda|tNWz$|bA1hZfr5Ju)|aOo%k&Tx>b8&Z!9NDlqecf(JFj%@)ROBslHCtOB{?cExRYSjW0+Nt-WJSY zaIWJ4M<~qopvsvURCO>jV!C*u2sA}7Lvju{wowd&6z#AA8&sUbV-^%>X!Q^q*lJke zkLX5og2h?DgAF)K>Kh`k{0@#Tm@~kE1u6U?%_wlnhRK3`3~?l+L_%>MmO>NKpXNex z5I8YHdKakqrC$_Ve1a`Qu^y7*!H#BzRCC}~H%tw*eGeKl0T*7($VF-%IOTIgNzhOe z#5rKoP@U6)G(-fcy1_Ltyg>r)gM-_~;BEwz1sRcIW(J2E>JZH&2~f@kjf9|dI%mp2 zy$z{^Aw?xK6Q?YA3>*1cx!mI#4P_aSEjFinS9C6H$)-eh9)wYb>O%J z7Zvbq0xCBl1wRYeQz*`30~IY)aUP^7ijR-a%quZ8i!Xsp>ZGP97&1gSdpP>UI|mrY z2Rp|5h59NOK!sdFe4OHgT|*4w!vg%`o&EiSLwp^By%h{944{A^CqFM;0Ze4(l`uqv z#0Q6X$GZjj21hAqIQn?H`-KK*7*rS<=qNzt{9GeKj5HOr6$~nj3^W-cLR|fV9pgR1 zojqNGojqKAUE_ls5F1%}{|pit+K zcqdnPPd^3F>}pDCnnH0&QE76CLN(M7&mezagZMB<7ndLfm_@-M2tkH;kpDcLLPK0N z5=%;oiZvDD<3Wtfq|%bq_;>}VD1(n@a7es|0@PU7h>##hP!tAxM!7-__Hzz^i7$3UkZ+6aEu{B z)5p`<)i2mJ-p|q3RYA$nP|rY#AwJ&4$tT{|(+}iYjgFqyjQ8{l35pN)4-Im5RWLM$ zM!si|qpv}H0D78&3o<|^m?J_!+Fc`@<30TSy@TPI-xHqG9fLhxkh40555f~OOF+(d z_V;u1bdPrna&-kwc*h4g`guBo!qG1zKFHO{-#-Lyy0>ePpQ}%Nn5%P$e-PA>1{Eft zGQ`-xfFVA})zvQ~-Zubj7${L|6qFQcDrkTyUAy?)0$sa!(DEhFLIZee0hbw|ER9rR z7@0A+1~|tXD;S!CQiHQ|d~j$$fPYX(aD13!kfV#Ib9_WZgn}W1Z&18}g0T@pe0+Iw zMq*KXNqoElL%64(i+{M2W3a1&IY4 zGILUk;&W4TlM;(Gz$HgYHB54P0M1QcFq#ZZW$fr&x9kphS^ zFk*;@l&mm|<6SlKbTW0~%QF&7G@*qfOin>rSs@QZ#JhsXOb`K9$Pf@5ALFpZt6zb^{;^`M3=I98@K=7;wj#F^JyPC%bz-n;?g9=x0NE#S0fGRmR z$KVhPki80EH^jsF@$n21A)xx#*D(U*I&k_6RxmWfR&)ltf{V?>;%uGL3cu8Hq(ai& zFI2%<0lcVBK{prFUPw;N$thOQO*e*M|8xc2;*u2G^t@6_O9kDuw9>p}(1H`);#4qQ zte~5gl30?6%m*zhN-oibrEJ}#%#yUs)SQ%JXaWL9j3>Ck5Fg?i9HL;rP!R}PD-xWV zmlBfiR+OJt;#QQO>lqxR0g=!tDDx~y%?-&1E7K{c@W@QhNG*bS1eCAC^RrX)G!-D~ z-Ba^Yi!zfz=D`e7(16M*XzD0vD4-Y!6~bjINE*DBCD_%^B|gMI-Yv-AFGN9;AwE5| zBqgyVH9obd2(vX~77uF6KpRqsDiqR;GL46|Z=hwCK|H91XK0L`K{WCRWe!l*frc!^ zEK{&irr`e|IAVV@P@m z40R24jSq5lcJ&N%)hK`jGN_IPN2RkfsCM>r@(hXh@%Ik^g^-V@le43bj{>yNb}U%fU)gi;5Xsg5rZ*-Q(R{iu&b*} zypaN^2VrDv0#ghQJ~toF2xA2UaPuU@)7cx6)Li{ST!Z4BgFHh#ogIBNa!V^T6+kNy zv4}%MD#Fz<9@L2N^!I~T?+^<@!F>fM&k+9rP;Ch5hk$B8aF`;v0U$oqG*7<}L&JD* zDX9Q!nz=wrAV>Fj7ie7qt(y=MZV(BmDFMOp{^3p#Aq5Mlphq~kJq>khysx8|e~^Na znSlXAZfb6EY6(mks2u_^*vZG=*&FJ3Naphk0rha=L7lkxfFOT2PajV|SVP0W0#u`c z3ws|&-+0epe;>yXS5S3l2x<$txH=mf#k&Rsd;0i;TJ?smx@InJpq3A$(svFpKx&E` zLDLqr4u`b-g5yCU1u_woE)2~rQ1gt30=O>n_4H!^M}WI)h<`u`tep%N@^Mu#1T_~O zUE;ynE=dg}C~K1jqY$ zI=MK-gYv5ZLrHFtv%jyeqn`_?JrfiX@8S>YO$RwTyDESRQ>Vn@)R4-8)c6twO$7r5 zSVr~>^^Ny*3UYPyRxo0Sca3oK3kV6)$V<#k)hQ^-FUi+b(9luul9`;C0}3cN&!FHCNWI`0925@?H_Tu%Q_zGJyP$rb z0aD3p3Tl8t^E<3l08W0v&?F2KGysc21%q7!pe&fQA%1Bi{L;qwr9ti3U~j06n0A}u z*A2?PcyycN*KL7c+7iFCA)#O+5N?J90?v>?$Qcp{Izvd17kOac&E&CaDxrfM?(}& zh6eEl@n#B`ElqHZZyImL04-+VV*<|pL9UQqkO9bLkUpfpFT5TAb#6gL7NkBz9VUQ` zk0A{cK>AIf@gLvN5Z4G-P-6)+D&phn0%{nBzz0Q4j2S}xKn;FS`zzEB+`k=!#~Is+@S^+?BH6>4cyWI^@_n_paDiBxHfZ! z_}s*b@|0qRis01T#Da|cqSTPY>{JZ|SEs@Ww0Q&6=tXPH2BjvaW|pObiePY$#v?H= zB?nRpYbYQL0ChY-gR7tp3&JdrXhDjbqfaoXc?%gm%t=iwE-^Mj89t29&x=p3$SjFZ zEJ`nqFDNNOc;5)t7BT|2(|r8>+(Fee$N;4P7YPF+xEX z)aC>a`?-dJ2A$l4{6hmkotJng&yZkvv8++yT9%qu;$D&Ix9sS}G1uX@Tgc>LgAnFt}b?v|! zT=P;CG(iwLUI6O2$A^KMU68&4dj1PBG%$sXaF`l^MmRtL7Y}ROfE#x43dI@uMJ1px zW{8gu_4EsY4<{H}n3$NEo0u4w8=D(gnwlD#8JdQI1{6Ta#=o=#R6Q#|+3_U|$OF!~ z;QcV50WwGqat#V{3<>p(H!%e@z#(Gbgd7|kU}zQ}2I|W=c`6uy2TV*rMGI;^_i=WN z2l-V2GPD3{Z9>{I?#Q(Tyd_GmoNI)$YXG=Vgg6mg2T^P)KG)#4aVW|XQ1x2|OYODrdpDRYSoL)YJjzNwAD_kgH>e zYrLDIr;n=(qTGfxT8v>mRmfmBw1O~n#y3lV+BFIF0To1`Vgp)If!d*=L5_%tFHgS^ zW6%Twxa2l6fhvQH27<~7P@}n`B)>SmIJG1`wIVgS05nz=p8+mjixlFKT zuD-4T@ow?3(J4oF1;|{1Z)ilkvtJ0j;SQ~A5%mvZnAFGsK6eGqeJ*YRprI4b08mW= zPUmipzL5Dc7f>cNFk?t9DuN8LxcUZ!M1spJ%%(YH4i7X>XQ%**+59w(h!WR|WH-=g z0IcaA5F8I0c=7aehC0>Ii~&065nl=(0C!I<2?p)j0u7;sCzhlZ`6d=+D;R<+0?42z zsK`<%&CDyYh%W(G2O;hT@gWBBt}gDbpt22KDVSO?Kw=DBm_wM5vK%yb1g4AO zQNV!U_;7z$1qcOhhBL%NTo4fC>gF2a>=6$hwg?7I!)j>cY1$ar8(4v8Q+tg(O)$&Q z)E*>bXJ@FXZDeH$3P$i;0C++OHi_&6=}4PGCy~Js4l6=HUICd8og+XKhGtQuF%S(y z8ykot9etf(BO@Sd!LbKPKyc^#ySYItHt4_)OhyAV-HqZ7SVsYAJ{?+RgA+Px>FenaEra1RXU^ch7${`G zS|Rxh+GWKoDl9;$6_(h7TtV$USI|hHe-M0x5#FBz&u9e%d4_rVxVpP47@0v^foQ|= zrFq4f>3OLskanV9eo<;kX;Gd+e0)l3Vu}%{*=A?~t}zTiT^s`jU)SKEc-NpHP@f7S zZeU;pcR#2sF@uyC3Z_thhX%U_fo7Q@1ApLnQh?4fQv{_V_ic5(ozSBgIepb($iK!L!m4`GX>hFhw1>g;6WWxQ1#{G=p2Gs zfteXH#3$$HXJ@7|p!AlYp#>{|%#Z^H7SN!HU6ARajzJ-)lmEu1kjm6GBs3sC#Mue5 zW&z{@up>1Uz-t&7;^SRhox#P3Ur4-*r+a)nX#Orf9@?~sS1@Dl+yxBD!Co zyb79|fMi$D#H=x>#Q|O6;^yh<V zG`AZ=2lE_rN?^TINSUNlQ07#cmX=zCwHR~EDS=M9!E|BF)j)KEN-Yfq^l}VVXTh2= zo_-7iPQ!=0?y02%jGiVwrSiyuLKHkaG-Q6`f1X4%%g8K5{bX^ey zF3cDTQoue1Epv%?_IGhr0QE;a^7FIZpfk(yuo)9b`3oIU#4LZo4IiZR0x9WGn-6d? zXt4yIegiG?0+n#^>9(2UI5e2PqiBO5GrT-+0F`M^7JkRbvXPYCt7Ou#2aEyoY}r1X@o83TRJ%KTztZ2rbUcO9wd|G=`m1=?Fd^qa-y2+`fnU1zh#u zU1$JlL4i7e(8gx4f(1i7DC*%0=oA=0g>-;xkSEA`@Q{o~QEIwQQf5hfZeoE>Sz=CU zs!nl6W?G4+f(B#?2&P&Cq*7ByBM8(;h6@&@rfaHc)M;oyjnK5Q(SYdJ)YPoe(9i%I zsi~l*fT=)16Ew#Isrp>~9Gzg93zDMaK}+jEEA2E4K~tF#Az%SVNL>eOr-b;2fYx|8 zLQ*NH7WWU12aSrl#RmlYL%U7}ph+fwXYY7VKhF>iXCKGlU>#8RSW^MaRsgqe;!6}j zVhXkj2G)o&8a_k@Ztj}L8!DJsqR7IU!>}P*NORaVAXvfB(ue^(MCRlf0vlBWA0!nI z@~e+4XeP(mJ3idg%@f*dbMX&#@^MvwtmcDMD~8|+v0J2OKQQ`ou!Si2D0!W)yaSq#KN6}Li~L}vsjKHuHYqNNGruMi<5Qj;>(kZ zO7e4);=#v{!1AuMV|-9}1ZXnZ%|M|>0XlGCU|^uhP*CQapI4HYnU`9`5bx{g?BVI> z3aU2U97BB|t3tu0C?sq8`FeutX{7Z?M$WKBYzi9jpv4+Rpi^@+G+{PFN*K@(aj-X* zsYdWJGK5-aV+Yb10#`(c^`Htypu|!PT1~1b}8}+&~30Xq6FSMN33TJh&wct{}ik5$00R+CNBX51ASTHUB}jf}07T zwl;if05lU0s`r9JfKYIaUH0qg=dMwqsQ?M*0MJ0ZTd1EictA>{0#?6= zL9IYG14gl59fo&9ic;x;CUqt(3nX%c)CPW0X730?BeU|j5Gsl z2J!&|Xc_=k(}2e^Kvj@VZenq^rUI6FNI^|O11t%u2cUgoP}+hvvQ0qEA@J%&P{^Rk z2Z0+@rt!w$B_9T`wI#5g19Zj_G>~8navG?VaB+prC1`+K>1B!FHMJnNrbc``XyC1& zq$s{bQvJ1T94db)`U~`jECH=K4hi4bXxn@IpsWn-rX~?LeiB ziGn?3^*?A0BwWf0ECpI%;o|BHsz(q5ZicS9#>Or_(9SDj85v}91Eu#0I`1qJ+!cW= z^ntQrE5SYepjDHGuAz}B%u6odH3!b|!6E)Zu3$De_7n^%z+nfPkpve9pdn(=s$ax% zZb-cZ8__`?ssaT)DDxY*!ORHt@lnuL(9qC;I~YEqpow$LOVh^2!~$M%cz`>@;O?zs zNW6bgyrYwUn5#x^Vpe{UPHtviJ}5>ZZUS|h-CZ?c!yZT-V9-J#9Z1!M-Y?csKr%`} zQ^8)rP{B&UKoi_&15ezd&d!;dGe9SmoIx27KE(v$LCY`a08pqwdN7DqJ!s@09=trn zH6%VHDAYB~5x!^-+MjbSN=+;LHpf5DyIshO8z8ujPj?yoc09kg0Sml`?p7qb6uZ1Jr7VEG#TaO$9f3 zg9{RqQ$gdF;7kf?&VlA1-8|hxgTP%XP>(CVD76@L!d^B*e36L-w4)E{;DK5XA^xCM zg26%lh)D-f3mlf8gB8r+6|;hou@S^y;243e7>NfB$7xi6rtFGzDtuFmixbmRJze0; zFi=|=Oz1%SM4*L~@c|m(r8LFRB{i_MvYvh+rg%EH;1zA)Q50}Yf@bd^!ziA9A+GL0 zo*|$SY0z*9D0snh56~(Bo>e?N-94b=qG(bY7MkF34EQ#QfTGMi@D>B;#(;2V!tFiG z<{o4<0n#88WV{cO5g?M#h=BB#z$qI(o$3qPLj;~dMHY&Whpw?tEQ(LdLz)GL#xH1e zF$`Srfp#~6ivt5#+uA4G6Pz{TgZ-VoT|+>fSa99r>mTOo0$C*<;vWy{y+neV-k_!} zXbTD`(m*DHHWyWtWF+Q*+LxeBT%hHk3Me9}MMb3rC6Mh0?x`i9L16Hf9q7_zSY77f z>F0)2m67=jyW3Wk;pt`VLg@xh_apv^dN zMTo8-Xu)}qYp^R~UL+vM-#y6D7e};!n?#^CpMMZEQXtXg=@()FYxaP~3!EZDT;u(N zTwH_V;}zneEFaI15Fc02yu7EQUwk|Rc#hq(*fqDH1hxwUG=^hLFqy|YhJgL$66xm% z+SKFdI0SGT!dSUyaX3%as$$3gp8shc?F!E;Ei-oKL*!;;CM3yLrV(=-yqPo z6o^`IDd^%EW^4p1PhDKyLjB^y{5@U3OXM`c!)qGxe*TU@?!lmXG&sb?88o;DF1>>T zJPqSrd>v6I(qJ1{z$QCJfU0wFB81Eef=d)c8x>Lqf(D#Jj6n?y(E1j{)+X5e7r2p# z(qM(okV50DVG%f=k%Ls6EcMXn; z2dz;DHGdS0U<1#Pi~wE8h1rua2DREX;WMJ(McmFgsfl@^1wpCB`K3k4sl}lD0_#d3 zc0WS4v49p&Lpyl!0YR=ou7UCK8o7x&xtX9HJ)m75P+^duLT)A~`k@u2s}DF0KxZ*Q z!!3}FaE1m(CJdleo6hk*p1z>PE*_wvUmx&h9e4)=k#}8jPUpl!>LE`*7uN`cClEa| z@H#O=Ed4TY#cdRC$N*YP4r)9*d4_1j7wN<&fmV7VnxUYkDQJz5mZnC05ol~iBR)w} z6WSX9FZK=stq|~tQqWLZQi`+I=9_uz466Eozd4|Ezf$kiP*00-IU1F{;l z(9H)tIH3UBWdw?0XaD#h|IiSSL;z$Xqo-@If`)>T0wUBvdyyd7+{e|=J;X!7(14+! zs0>!ngZD8;x%#`sLq}l!KobS91#*z&ZfF1Z+lM)V@hh2JJr9fCZFi zFlYe^Y%4f;Bp4j_km$j(TO6(g8U~QW3LbicZ?S+6ihzg0z@ej-f6JmPUr44JnZH2X6SGBtO`gs|jfC80=4IuQfL@3skq| zCFMb+-w$!Hc#-i^191-#5S!w1-K-$ixWd&EUvj(3~-3$tZYU38~01GB5$9 z4Di4eXca93Y@P}8?V$ui!P# zmS60k<*@V6A*`9SvUHin4P6v<@89vjojjDi|4n9G;V(oE@K> zlV6;w0b*)G=Nlj*Y7jBB9vZ0E7Zem40Gdw*@4g2u(}Qf2hIE|Z?D%+!4$=p0`i9(D zp${7A0iA3gUzC`aVq(EikPNDr{StFip$#SQKG=A0>)zi@!4R^E2sEYQ=IQ4d?-&&1 z7>Tr`0CbK6bR9ot^UV;FRUzXWkPaYt0v%Ln;mTE@CIWm;5qg*gxJrSwXu+*bP;(<7 z$X~&L!53VnLnekm)0YYw&}!7hF~l(*vWi5(2DCWR9z<9vU`lH;#5?*0d%Czf`^0<1 zgBm5EeRJRf8j=Meg&cfG8blCOZeXdlp?-!GprDQ{cwZZ+G6NOspgv-JVhL!SH?#nC z4loDp2Ld(DVLpTkffs4OgW3hL4-sNN$bWD#&~{N@&<1_jHY2E$iD_s+A_+1|?g*M{ z2F+N&x)+Avga8|Hz`D8()<}d+qCqA`3_;6kz&jNn^Ib@_t0#24CO+OV*cUV#r;(hO zn41b}l1BuGfcE!;=6}GQSk#(MQvs}y0kp>{)Gyx8Kg1)*KOEeRgY9$z83ftoqyUp= zD6I%i&PYuu%}Ff^E-fxd1y#nNsyE!<6*_eY-@yP~Yvu^E!7HS}lMyRSoL* zffhDGj^;2%s+=&ESHZ_eA-hiegJBy9<9+p-YcIt93LKKov1)0X}$t z9B6qS#B|WwqtXh$(%hufBL6f{qqSH8RP!l>qG&JxuRwytCb*CR?T!Zb8^ECjZi0h0 z`MQD&3D9;}NYxB#Ge?3>>;Rv9qET7_YYXUtPhOhN1TU_BQ| zg9+3<0heB&atJyc4NaYJDQFP_&M9H8&PW3Q#-O7ez>ULIXiW}kI-&N%OcgXC<8t7m1&S(>W|=|R0cmy_5{R%poUY&* zXmIroDTNuzz%x^!c}1z|nZ+fkMPM#;87L@{z$I5i2&k17AK)1P+D-2cUdI8Spn#Ru zkdhX<*A24{1RoRt8dm_V&;Tc^;7HIU8?=1{9?TDS3;-RY1S%^aOU#hwTZ}D?K)ONm z1@IaaJ_v zl|lP+5qoYG>NKEgU7W)m!R4SP_{bO&1w+u-6H*$7E}ekX3MLAM29SlO@H!rJ~m5t!TYLXyx0g$#R zxPccR?&uj359$hlMkuguT>`BHcFPAZsmo2xFD>y;P6l-WQb5HIbg>|KCILx`0o-GX zhs|$lB&MVkffnF^hiWj#Y813ILB(mPAK0rdpv}cWU_F|enhLfG8n7`P(Bxu{CZe5f zpkQPII%*~|7(Cn<92x+cJ%NNLY%mH`mO(@yY1Yt)nC1brzXhE{fRx@LzTmk{1!O^x zhz_{Xo0tQ-b0|KkG))I~W> zA817-%0_Sh038K`P#pzOrw6=s5Xms4DhU>g2H>p=pn)k1253{#0Fsu$Jt|K>=O9;K z(0T^Y2p`CS$=TrP3s9*B+LHpBJ%*ICpowP4VP~FEu9}ElE#S#t1q}sVP;m?G;KhT- zUR_diQcF@nZBlUg=;;sMWB@%v4$@pQs4#$@i36=Zz$+ubqrk3)hy(DD8^n-sb`CIw zZO(_C^5lzrN*-uu5@>N4sJV=>%pD{M=>tHQxtoC&!^4)3f%g3eJA&P(30Wu&9-Q-a zjDQaaO9nc;DXf`zlk3;$S2WV)5)+vA)&|xglIE;s9 z2)IlG9Wn#W8=$@(s5!D>I;4&}KK|5&J>VWH9%GSfDn+p^Yb4OBcO?4j&hQ z4RS+H`~e-DXaw4DiDl#gJTh;LYh>Oy9=5Cm9A=Qfg(MAF;DVc5&?XpsYS-7*#WU0w z+SNjn)G!4#0*X^IQ$RO}fyWxbEpFsP?2JJBK)_S!h%pjS?+S95Ab1xxEXp8mLOTD? z5Y|_4Q7{H|GLrN2ilIAip=lf1DFv@tf}dLfJBbImj70SAkk-RM4ow3sHx6|R_KX5e zt$=!&kY)nHxsZ;9S-gP)cm)`&i3M*Epsc8_@OAa|4~hgWarN}~gALdOg!>}R%9?`8 zBB&2QJ!t4CG&JoyhByYnMy5ea?mS(5T;UCQa3zA)LkI<(B9)ku0_tx2ftnVeCMxnl zg+8EuCFY?sh%yj7x#1ZF9+9em7WCi=5~w3V2avhMhx&O2hPuXkf~PbL3{2fzEnzhk zBq2G+gT_|DITo6x;zRwMLfztnLxNl#!JFW~!^PkkUx*_OjbIz;+jT1=^q(@9yL8ofibz=?`Da0p1P_8Xbg;E8&{o0BArl!CabwT4D=PFx6@K`@gHFyvTv_c=;R965U zkpUe)g<2iri)JI}N=SJ75Gk7Br7w6?7PLGTd@zIoLqSDAQEFLcera)dVs=0ffv5Vmw}eT!)MAgHDPU4(1>ZgZvd!Otf`QauTTwd3WHZz zDQLwPf!gz+C4$xp@kOxXIbqA4zzftd#1(9jgbGZHL3~h>MK%F6)(bk|6CqctP@a*Q zld1r!DZ$GWzzxM9*WgfJSHw{b1>iL+A^Ab6#igLZI4lG1;1h*S;|&!+N0u3Yw$6YS zn1YVNMLP;P9<(tIW&n7K2GmZ6A4&{be+fR67~EHZcWWW#6!rrfA(mZ-P}R*Pv{kjC5}V=z=_Ndbf_PwNofFTEP~d0f=aXaqEyiF9H^uCFfn+626qqG zF{ZE%0xTPVGXbba22lqZ#|Br$kb~CX*%~nc5abG8MX8aOS`JxluK*nc0Z%|c)-^%L zLJ-66Nb4HG=a|JihJYq^z{?q-#W?a(MbHXH@W2;%wW21{Iz^}}L1#jPl0Rrv2y@s8 zx?2;Lz#W5~L2iq83Ux!v;z*4-PzDFh)1$T7;(b6TC4+X1f(BTiRUf#a4Q~yBR6w@1 zAeLD`gT&p{&lS9K0Y2Xe8kR$>J8=o}_eC91fEH6wL6{GMJ>C7>9nlM@^u*lUL~sI5 zPt4V1s0hd}0`0&rDuE9oBN8^e&;n0Ina6{c$}1QdLDM#PSuk`lFsSJRI?NihiO?q) z7P+9gDo{7g$2B-O9@P2()mM--jGSviz&m}xi&;>15JL{O1a&P@1~L(yU2uaNJW&ij zVGS`1W@umn8YKZ8$%a@jtbu&OG?tzEutFcY{Lb-nxORhV9ReMm_oXcprizDae>-I@G)EiP=gDSIHC2D3AD2T5ya7G0k5lrxfb5xhjgGlqd;SM zkmdmRutIa>Z9_;4UBR1%2y7q%#|C6I2zZbQyjT|O4bV7^1$Z3V5afsWc-Sg9a61Qd z2n@LFGd2Q`$-xHmAfr>@1!%CO6|Z1uX=!O-2wKJsiY`#M(bEq!7Z(xEl}>C^>$gd(UH15QEU;=si%AT&PM z)6d<pq_%J!BI}7e{fm&FI<6~gG3rNZ` z!np{|2)YUl+SUsSarSlfHAHIbnSl#2Nb6I<2z>MssLTUZXU+kj-Fcw70^iVxcwa|% zPo#rBU}+e1jve^O2Jm>lf(g<96LiffXc#9qwMYlwNxGnxQ4zFb?M%d=6TIfvQ7`}v zJK;1NG++fzK@j(XTEdPIh>hXkS_OQ7CPW_8S&R4d@d1ql5_TdD z(gI27LQznYNue6tZU?&w!mQO%01MSZI$e;~0<)f-&krVc^=>2(AAQ8nQQbH8yv1 zV~7v%5B7{OiVt#)cL@crBUUgn1#QRyMHpJ2J05ARHJTJ?tu-Y5g68IeeL1g%tRV8PIw{Xnl=!L;&0yh2<>h237F% z0MeO?kfIWFT|lTGWZhwCkgE%HmtsYR(N;Iq>}V`RvhoPq<4<3oZR{elDhgI&Sxg?Ml?!UHr986WKE<{Izpy3N2=^e*umD%kflI-Th~qe% z9U+SWL7m$8pm6xKU_?l~lRs#m8+EapY>Easi6d51o8srb3 zwgKA*x@rM><`g7WAt7mKN=#D`x<3gVsG!B0$OEddAvbUu1&=eudxbcHb_FBbV@8BE z&@q#E(8MCF2T+gsQ;R^`%~Eqyi_$^26d_MJdipWM$0M(Pj*ka# zx(4kbfjAd*u&$?zt6zwMTRp zByy8-QuAO(NPx;&r;vE)=_#SUpjlS%_`D~yEHekyn4s&8!2X1ccBA_^ZJG4KvHg9-y<(3yy6Q*CDPphIObvLa+Q(KH^`@^W^BO_zh4G>|w4r*TK8 zV1J*`5Z8G4Efxk0@geX|wE{!DpTDOcs8^V_spccTh_y-Z8`pvWOP6oenX| z1T_P6jsk2%1~$6{_Dis91nBY$XlQ`PvOohG&@+fZPaodZHa+r$Fn4b4EOks}sGK+^=o zgOEWJ(BUVLYAha9mc*CDXDBelCzqAvq~?JqWr98YgF-;(=Yb{=7(o3XNC5^ft6=2< z`l4G+^2^e8RQu3s9*uxXb|8S6ygawvp7Bkd zPGibRO)MzTOD--`Lbx7s`yaTngOx3yGm4;x4>7p71~`LH{efg%^yCZf?7|CZ&`Mv& zoXqsR{4`JlBtAY7&VesIK^!3No(jDs5PVS{sBDC_1Bp0f6qX`E`3!Uv24p{sNxUIs z6)kGpAvgeZ<}~DfMbL&g@Ls&~6h5R1SqlOh^8j5K2;Lr~SPkpyDFrZ_af5(eNF1W3XFBw?Un1zl_b zUihksvZ4^Q@CDRbf)0_w54#O^4KPxu)u~1d!=NvV2Av)So&bQP53o;By0U)$U|)cm z`QWM#)O&aH@plB>`xFlzbwR{Dc!587)fqG?f*aJJwmevn0en=5H)!rT2>t9&@ER}B z)&g)!1}}>OHAg{b8ySKQsTNzQrYLBr7HjG%Kw9kzX^ELRsVRyvc}hA8@!;E^;^RRqa5V^K zftpX?tRAmvt&o_MUsR%@X{}I;bk4tHP6^?o{;{5j2yRBfN+j?B^oYy~8Wsi3y@JM0 zah>)LNdlm?jOLIbG)Si!HnN303I)w@pc)n0p)_QO2PYozS~W;lTfq=k!uj~Sg9cW> z2Wx@HE#g7j=->$lG*YDl?r))9*%S{tJ_*NlPH;I;$po2k1YL>>DOV7E3&>;?=-ew~ z(55Sh7eTErNANaVGZTg~_zeq?!$_Pm^Ad|Hk#1T5#XIW72@1B*>)xQ%Geje376Ww! zj-if1acVB&1_;QoGWaA?$aY*E$cBsIdU|8)#{!wL+~zEdyw>FdlT%9@2OPXh_P}GdNfQe(X7P z2pPN(AKJu$wX_hG9JIJGFo4!=pz;uO9%=~m1_)3`1wP6w|Au2EXy zn^*znf$v+*EXhpF0drvo8KbI)`wA2;2)&>*uAu>3=8TCjl!6Tx*FQXd4z{2(N&KsLaFc2hfpkNE^`UxN%Hf`S6lXA6doAYc(k z%2oId9R=qg6t%GHMvS37FvtnSPT;$eA!lkR7*xPdAckC+3po@P_2v!ex(CQ{1jY*R zqvnxP1Nih(NG?NZgn_T&1h2+}?uvr6AV5=>;DfuME(28`*t!nj(}sPVT@}C$Ezm48 zxCn{|t%C_d1Rl7(0-p;4Spk}@!mkLF4X<*h0v30q9g!l=hu-XmAMV(9VE>cqdOk&{|RO zVJQ`c;7$Uhh=R6DiD`HnLC5PLNf5NT*3d8>v_;1dv`P>(&K?OrmM;i&EFW}kRl(2< z)D{Bm)i5)GF8Tr;&Ir071mXy2dkS17!wYLzbpXozh=~r^(Ki;bQUY8V_`3SWqpX62 zG*Y0GM4&|*pp#_5(Sklv=jjJtvIcPoXr#^nJpP2-umG*(0(HEhSplipi!?5RDhldz z`un*<9IAFCG^gL_mRvQdys7pXqs2Ql418Nl-fev;9P1u1h zW`JZ#NP`<^<){F;}Cj9U3KmA)v$pImt65GQbsTE7+|eK2DI4KIjGW z7%Skxx6Xsp6}YJfNob&fMsQkyaKZ7d2^qKoT`r|jQ0ADDQj}U;tW%m9oLQ9$+9Lo~ zk5oLHq7CGOs-)lmPf!az1YQ*x!A`hv4ln_=IYH5c6e{5I6*jU1Zn+|*Cs?SW%fl)e zMAIV(wroqm5)|y91!$1_6hY|@GIL;Q&JZ6DKX3sOu)zV2exMTuKsQr>=P=4s6SL!s zQqxk4QuC5iHHs^9brN$j6CoGG7w5*uYbfb~)F>z^C_^NyL32J(nbg8kxP*d|4v1Y` znF|}n1*HK?Xba8=GV%x7XMiyh0-Lpk1sp~{65KsEWPlbekj^}KfCO5`8XJN)t%Hvf zfG(M8fK^He5)pO9Q5ze8>=%DUIO)3u=l%#-WYSk}_;>3wY%tWZffZ0@gDabe$tK#t^9wR)>Q|nL#H< zLcD^I4+0GV8G;4@!O>v^sw*I2>*nd>6AwCUOF=`ypd!%}v?2&nw}2)+pm&z|2Y7(a z0je+nT}p+%s0Zyp1GFVZCSU`>85dH^8N#+sL82d2M}V^+bZ!%_2(q>tvLwkDbnQ)W zs1L^Br=VNoAk-A4g;ix-uNJ85rU(ShEc}Eesl%h1}L|XbCB*!9fHo z;KHHj{&~89PF{C5a&mTab8}^Y9LoX@LQtgyIaCIEn1CC~);^T|kIp#k7x!qLSAG(n!2l#?2g4_osH-fXH(-c_ngRUzFHF!X)?19~PjJ4w6~n%fi6>SU^Ku zFzaCLZrC^^EOnS+EY<>T#&B{2E!K*MUpNR_>1bpQtqdI%48f~cL7@&B>5NxUGSRcp zGgSg@zJZww?$^NL)4;$DR@Q*dvH?w{1v&bF_Vj`C6J+`ha#jp%c^asift2t_N2WsC zAI6}~w&1}JNILd~EK~uXoCLnh1}f}?5Z7dY+%f?^4->|WkB8g|WafTU9`NgNxwvu%KmH;IVH5(DY?$9&88} z*06x|Iy^kxz^6+>yo^XskR4f|qaMJA>=-hDZ^8l%)FWR?hmi~+vtDNLCXlTHu(kT& z0tP&n3%h|C(ys;;iO4g)6nR%cq6?4iHD~sbZ^Kvrt zQb7%~l9Hm#q|%bq_;}D_oJ3@4q*Xc4rYX3M4BCVU8q{Wp&reGO-};U2aZpAw!Lo1$ zoRQ4pL93@h3v9vj7LZH<$25V5 zvq59k8iu;y@lq?)5o^f&D86I5K%r^`T9Iz(1{n?noivK&Vs{K-SnC^9?07)W2#1WS zp`67I%Pxr3oDhG*QWvPb2x+xK+p|aoJ$%n0s578pY@`idJrJLslb@8B6Q7w|P+F7< zz6dowJ`oYC^e~=Nh0z#95`o#~@s|WSl!1vTct`m$;NlnWH-EajT zcSf9426C%{l732RnSM!0rCzX)qf>lnuv1AsX#PeCbVWDxPVRW{0V3cgD`Em!K@)tc zBJ}bdP;WOLtu+KKQ=lV0(4)gZ1JdB&f@C)ELVx%QI>d?-Eb##~4pFkfD|67YS!2X< zhM*AtaL}3NIB&(sO#-I{NK$}x`@kg|^bAzcT2&X&CB@**W=U>*Zc1V$LxnSFPc3MB z19%*kp`fVD5qbkmh_jPp9`qU*&}=*CP+m{a3J_Rj30rFg%|nnZ23jCY_;@C0_<_3n zu!B7fL8nlGkM&gmtu6)4wL&^nsN4Brdzrv}ZIBj-wa~?lpgI(E_%=)xc*he+6}UzP z4*&;;dxkiBxVpr9`hgm&pf+)cyJ38YA(orHK%0(1bBLfdfQFzuLj&UD6*P2>%|VMU z!E@-)Gy>XLmYSlFoRL@rK5)cT!O#Lr>U8sQ4EAsfat%~avM|V1Vn9qYF+eAzL7Tiv zP#UiAA`gB`HKavv1nPN!dS#IH1&%o-pzHra^4*H^^Gcv+#^@B3fd(zX=hBp>61Z~< zq#ZQS4lxfh$c~~PA_UtX4BFif5&?G#!As~v{6WoKzYx%NlcLGAvDYSG24GIxHFdGz3pvj(a7i@Rm z86XB>KrIef zJQm~_7a{~CH9MC!)@FEIOhXT||j|Z1{$m>a=EfP>tf(}A~u0w-#MPOAAq@pF}tN`dX zDM&2=nh=I)g+z5Q=oU>_qtF06Q36p2^(lA(H_T3`7-*{02Rhn`q8KFM0+E0Y(10ez zP`39&S1Unh7civ3J2F5U3!oVk;#BYod*n{533!|ama3p}i!y7EbT1C?ki~C)EG2mXb8E{8MI3bR8_}=F7_~}a56Rq^@iOLSs&hf zhV;GR=af2yAZD0VV`rp9CwxLFEc)?h@LW z0dxI=LxTK$p|(KF4o}eifF73*eDpo zJd4)UhGipoQyY|%L4`NQeu|WQg=(B=ZNck%RB08dyMnnLOq&={)$Lp=D3QpD^= z2tz>%_Qhrf6{d+080rIB_6F&%f^!UbL?<*r!_W*m^$9u+3~A~U#09$%dUzzfkqhdK zfe!2kUHAb?uEs{-z#r&{T<~c*pwZ+IPd`wd8XV&27ZM);?}Ioyf;Jn2F99}$XJ7ECPLQ4{#M_`D z6NDg^>J&5z3O>FDdI~n=gdgzMHqc6iP(R2i!-+-dprrviiACwf(3@kxOmMR+Ajs1% z#7#p_PfrthStE$g0NFDFYKkF^W`Z`cgYNFg1KmGn80rJc{2F@?x;BJT^pTY#Id61613r;O@$}E94LEw&s7LcKC7NErgNUk*i zpB9MCMaBm4ptXzOLr4)PPlDV0;C)b#v6XE*63;83&(=Z)gU|%Ah7C z{1Pri2@krjAl^U319I7ff}x=);zoN=gC{b;F*sPk2x)D#f|0Q?WU!$Ka-1aWa0BGw z4o%RNsVJ8 z(CN_7oxHBTjwn}of*SWIv$f#CN?4H$)(`RrwBZISkU>M8As&dr7`(O}GP(`kE3aS( z+cXvC>I|wvAtTAqvx1@9TtP#Q(6L>_L>*+Q258*Q1T=03x`P;eH>NMB?tm=QG)9?| z^7nB8?SO)exI;V-&S{{zDu#j--{ANV|9H?E%3w%p_001vhOAuFPyn?e;3w8-KoTxU zUO`hqO98T?2Bb3{d}I;mUL^&61vFit%mq537M71eT|>~!CT#Z21aznn$R`k|fhQh7 z+n!zhLV`R&R}>lA*kG562i>^^zwHIO$qrn$qm%*Q!3)srGVClCXrC7(1YVQp0^9xu zZDDx&gAwZ9ehPA68J$QIcju@PAH9{FpgtvFWJHg_e zeLx#*T>}*~z>7!>3=Hh-Odxk{y1IcTNs#w&o0u?w20cMzv!JF7xU7Q?4+Xo1K*m;J z6)J3a0=$hFGHC_rV;O@FJw21>W(7 zDg@^>=y)eMl*EPu9)z3K+a-trzFb5AGgG6)`;^F&kb-=R& zpyQ^Ys^EITy#UZ5)2WbQ4df-Epm}oWA;F+36&#hIbwBX<1uX}Hwa6f03@bvQEivdi z7tHYnL-2AUEG;q6Rb56{!V$KTjG-d9JhLP@BPg}7G_xobbnYnVpajqaCE8&P;MNuB zx)Ep_9aMBH7*v1{>O(0ak+v&=7j7AWZu|g^+<-=(1Hyg52^ZdUF@{~#ha5w0pp!Zv zH*d!WgKm~UFT#;;KQ~~A2nh=H1EqP;2~FTzp+lUVV5tdFW-Y+#ii zbm9lTR0=%x174s4+GGj7W*oW>3h6{0$bCED4ckkn2J~c@wmb*vsG34>JFq2wFLu z1nx58U%C(4D4Ys8Z~?V%>E{|8;_9LSk%wkWgwI`Z%g6Etz&E(c33l|2hh5MG+E)#$@R4jbK&cDBR)7;UID zD{Vj{x`@mR86xoU3=RPW7^LhCb_AV8rctb8sAHsKsAH(3P?7=K)L&3iq@!R0MIe{B zn(HW(7U>un8|o++8|fH;peC#+M;HPUH`Gx`Ois?phw4@^(J`nnFfugIQ7A6bF*H*k z(twOiGy_1Jor-h}%@uSMEI`)l7+^R6WW52%7fGnjH!?5*+is$uqhM%8NOLiG?yD%( z5Y+(&&R{bPjqv#Z?t)wcRNY1p{~Hsj8_jMbi06%siL=`X&2A&G%Z)+a#~FDDmm8z$ zHiqanC1kguj)9Isnwd#aJX+)%yE;Nsj|ra02RQ&?1X}bPyE;LQFeTE6ViaE(yE;Sl zn<43E$SrXO&9geXyT*gBp!RhP@^%dZbr2xuzdGlqz%CC*ZFFM{K7y)H(9CpZUOKok zg&v;3km>|FMKv`AT82RSPe^yKLyqbIA3+Mbp$>dlDP++wXrqk})$U%0k96(B3ET5y%=?CWI9rGs2pnffBgaJpDo-Y|y3Opb6o`98gsU9cBZM?)f@~ zc*LU*@dYa&jTyv4ZYP6x7{IkZ`XmJC@JwhU2HbXrH)2c-86Y=?LB{aF7q>$O?;tmY zK~ri#a6G7K3?06Or3J{oHt4Bbpn+gW4FuH#NnYTYPtbj5;5y0EFT@hooCdA;hOSsk zEK1i%%PmPPN(aRfVnG{t%_2e#XxR%?8E6S7dXEsYY6;Y{H3jtt!2tmtrGgI<7@C-y zSQwj`m@^=5qJp{>xe*uU8R8n`1iHBz;#07klfQomXvLmukb(h&qqDPzr-Gq5bd4(L zkVg0dY0%Y^;0=ACjY^4PaQ#2Xyj&s&S65@QUp1i6qYZ!3WCV zJiiBJ?IWl}0G;}cv6#RRG{_n17ouQf47r*Ie2q-Jr(1j|=m1xc*FZP6frd4FLnFYm z6$;e~;QhQ9i%%i*QV;{eJwrS^{o)-1JVCQjVD)~WlVoADB4Cq18?nKMoP*9dha_m& zfG7AwA<)n;L>SbigWQz{%@pwUBanlLVM8jQ6ayNq25+@hP_BTgMmsgfBV54{l0Sl+ zVV4P-z`6y9z71s0JSf*1gK{ls(hc2n;F&nEAk?M^A74-C4oy=d6C(=?hKiun^vwJ` z*g6B42MwVo*J2b-NR>wbbnXPwZ>c~#7!h{g4yfn@?YIaI0u3{Q`(2QZE_@R^Jg^YK z1PNAzUC!X855XZ2t3YQ7_=LK+#)J1*xu=#OElYz=dKoapBb^Zi^*wlw(bF#;V~!Eg zQ~>SCMGPK67iWNM1)o6?1nH0%T7b`7M7jYX-T>6IGB!3y)r4)bfp=8EIVRrU*~Jkw zh6SGPE(V<)173d)bs4;QfYBlXk8FS@#}J2J#>2MOfW}xr%Nj#KVGN(Bf>a;G98?Hy zz<}}|Y>{NVf}x(Fxv7bziLt4Hg^`hwg}G^}uCWDdqXXD0kYklFDo=1p2pU9iarN^L z@&!+NLc7Dx{@{`hG>;eW>loteh;)w_c;Xloz|d|GECHhK;D9f5clL#>eAi?ss0d0; z19$onB_r5<@s0sb@F;{YZ3zhS4DJ$Z9RvS?b`65kYN2&^eGLrA2wg@g?P%$yhdw6s00bgEx%C zLvuq#NqlmCQEI%0tD}o+kOC~S5CuDAi4tg{%?RXcBL+yL2y_`c@)aVWiX7Z*R#N~q zg*5H#K(vCga(pnTk%!0?C|i|5vrUL8Oi=odhYXS##v3VEz=ld7_a{OMBS={cEulbH zth%@afd+~|n>gUP)i2Z+G$;&H3u)kj5=G=+A7A3V#0r}|KKIaq+#XgmA+IXi|JYE}+63TmL+)Lo%=JLmH-ZKu3=I{)Ge3}G7gPX2*G0J?ZpQ`PDrNvZ5e8y6XlfI2 zZWpAe120<#FVg{ajv)!m0@Q?8&_Ld63G2jxcOyYeg9aLCB`~No1#NZ#kM%AA}U*9N(SGccq0X4(6&P4(_x{CiqsU)HXG1HGdR70f*LyN1x;{BBJi<2up43V z0=nuG)Zc(id3ySJhJcndgJw2C2a@Hc<`$=xfX-Vk(ga_P0opE+p9UI)ODxjV)U;Lr zs{~!;2HGPFIyDJ$Se}BGrW)u97H|g!vVj&wZGLG99>w{kB`B&>i@uNiO@i)51@#I+MO}PKeko``w*+!AID`i|1lg@9H5Iy30^$_N3Np}wQh#3s z$fab^NjgtA&;nP`G9*pNGE+zJ@#&svo_SzF*w_&y+>kE;1MgDD5`ak8fnm(d!}Npl zxQ+sHG6!7+Sq#4v7M$pzW+UrCZ9RjIFbVYw4srB>oT&y)E}%VyAPW>UP;NX1wKPLO zcV`5Fmj!4l=tHlk)_^zlKvT_{n$S~*gHubOBNpJ=9L|j|fwh-|d{K5`fckF?uE7EE z0X~i)pq*Ku4DRP2;t}K@4jUH$7Xksn{_)N(poqYzv>~VCm_R4#K^-ed4uTx8;_B=S zDzYGH2Rg<9I;|gVni+D-V{U0q31|%hs51aMISc6~qzX`59U8o#y<3hxSSG6xgZG*Y z@o5G5#R!iF`yej`GX<^70j+W@N=?a3E{O*(Fa=F6fCj!{^AM>O1*yp;8em}^1<=tz z;Bp$e78o2|uyr|*DI~}eJka7zXfq@@9Cq3Sc-R$m9z$t`Uurq5y8%@OEgHtbcv=od&6|@x$Ls1&fzMg&{NkfKE z@Ohx1Go?z3vq9Ak=;EHD{2cJK8?^BXJ5dgFGmR-jd__rqF}UTFnOBmNT9%pv4Vr*p z&^{wi7sNP%xq+Lp8$*12d2$A(LBBOGY4NFMM|{w5b8J9A%#rXkrGm zw=u*35~QG}6nuil5WY?VId6lSUl1F>nFQP=0rf;6144*)Eo8t1G#~`Za0Z|%92AtG zMjzzNNBC7_paUhqXV1I3Adh(=jDoBi1T~StjUI5n3#GBBfc>NG?)M$*)oeagN$s!)}J^B7=n&e1NWRk{gII1cqhE9~?J!wQ@R82YR1ywq-NMTRJ6qVoDx?qw4*?j(8^G%gXz2j!4MR)Igb3 z2i#jn+Rh3d1oiOu_XeFj9}*lN?&;0$ON>(J_EW4Y-Pc1sB*F$aosq5^$D-tyG5f zNDbm$O;K)>0uBCxl0O4`0SXi|tZXW%*x)bWT9@C zBt)8m3_5~V=7H9D8^8hzbW&HaBPdURN@cLmK(#mYtRcwR2L5HKMdd}ACE$zAKVUl0P078a~XJy4tk^v z&LMJ)&LDKsK3+j19&sLxjsj%%UPl3Wd|eaXzVLPR1x>01`+~MGCFSSmD8xJE=jSlQ z$NLAlxCVhP{|NDMjfdR01*)Y$)2WatUvTRKwoU?6>;{02%!foXXcQPaTL={Z?TQ4g zVgWT&U~vjg_^`U%Js!N=5xPGI;)RmT+*I-d0HhmqJUfmMfKTuQM+SphMc~7EV51qJ zB{%`8c`2}sXP}K}&>e$D(255%s0^*HAawzFAu703f*juHm;-Csz{dZ;yIqh5Rt=pE z7~&!KSp@q#gHNP@1Q%jp5xmgGGs+b-cme*Hbpu?^5@*&4wfu|{8`=r3m zfeuB0PPPKo{qg>xA)ujMq_b+EVdv==0=u&Xw&5PKQWBI>Kr;i-Av+X7=vDUckxR%_ z5d7*)Sep-IbC7}wY+@Dt9uCk#03X+Q#{f{`M@;j9_k5uAh!LxZ5VH?U<4XsH3knY2KzXp)~$xHP)DRW=;;Tb>KHWoiniRv z1U#tZ3qHFFGx7}^pKNiE9F z%mZKd1YVE_In4vQ?GM6%4h@4Q!B8Uvd_Wes-v;Vqz!WQ(7+IQFnwc9}nubD?9JrK% z-7X2A0tOW<&^9DWc?@2v1X?=Zz&qLRQ}4-F7AQB%Rz7A6R~OAeF(AnG#nl0d_`5HEtp zhQZ}nFnmcLX!{Ci)rhl!LX84qK`3Z61<~Y$G$_F(yG6W-f~g4u_=E>gi#W(X7_|8z zz%|G-z#}+5IKVUB)z3L7G5|7O1m3Ix9eqcaV*mxTf(~+uf^L-YaSINLcMbyWlyMAl z2ah3`7+9J?juZtQYzJQIX6UMGY3c%NIf7H9C+PGD&@w;ppf_mD9nyGnboOust>**p ziUOMl2@q(X3$|a1!8ITlblR^aXtDylTn;oE8ef7mJ&v?A4&381i8qBbz#&7&pc>9G z$URsAbj=20^9X!xl>%(n3DQgxq>Bw1#DUFn8NlYiQ6|HXs(WK+18~X&uTXIDMLmqy z6t;Z_sl{)M(&7h?CxFJ>Kx6S>$0}%HT)7dHnp|2`oLQC%p5D`dHCZ9|Ye2*>?j%7R zc;Fiv;u-RgO0I-H{w9mVi5FpF<3k}2bf~kB;ZyJXgQr9-l?CAsQKpH6+F!(@5!oc++lnv?F`uJ!v#OIdgl)$QJ zM4f0BZxC+*8yG+cL&lIS;w>flihE-&K2DHCx559r_z@D*&Jga0wEB>)LR4jO`<%>lZn z05tLrPVb;8b?BZu&@2Y%Xqos>KhOv?Y=jQ143@${HC?bbsMP@Khl4UEB7Hap1o(J5 zgBLtO?k)n|)C*d33(kV6#U80SDd44BpqWib-x;)!15(04a)=SESqu>bHMOve0)fw* zgiPyzmuq5M;R?Nw1|pBVfE6W2f)9ZOZE}W=yo2YBAfx!8xhH5f3fqKPl$x4XqM#KI zo`M6-wOA{}7wOu?Lk9PYQ&Ur-4Pq5+72+W##0R^&y2Kk`Dl)`SWQeKA2t$z(iXu?v zLbVPw?SN(-SP_bKU`43bffb=x2Udh?U1CZKlFuAnTu>ZSl$e(ipO;zzn#wc;wHUxF zffYbYf#dxg{ro|rpuUbF;48{Nr_eyQBp{A)0N>S80UK>cstusKtKo$LxVeT@&4Z2v zFtLEljfXgTyFyQphL`Rd1r^}br>TIb72>8^- z)RI&NaI+4w!<->LJ|M`^-50b04RUYPJr^9jNd?x+0oN0tQ_vCP zb)fkn0|N%|3OUfmdhnt-BaL|2?g7Zo0N7pu1?ZwVXx;$_Ab2~bs}V|V4H~isl?%{` zPH-^=sz9OltwImh!ZFCkPzpW}H7GSVzbqBB>fbZUH9iEi+yZo(qGNCfsO*8=vICyY z2Md5t@CM(c=jq}c9uGP-5j>fq0UDkO@rg$ftWki9dOC-P!qvjl9cbGKxV!DzriIyBaqjL}Z7g!ov2M`iH`t`Xy+TMk0eKnf^1^W0Gc@mS9ajdn~5nYpaXM2lkfRCi6xmisS2ReHH?koOBA#;!JTM7aO^{t zHEDp=Yifel%~`-g4>X4n9}jJjfcAA5f{u{ROwKM2$p>{2p<#y90EKk6!QO=#0y;eh zTxa=WTE{S)#yJKBIY!2VN_NoXFZh0S=<#fj6Ujm#CtyKW3psg)7#hM%w*aqo z0nOHejvIl`mcXWkAa#}@q!KYQVTcb09c}@c3JwOX)BzzY%n2 z6P9^V@S;IYaGeP{mN3i_b`~RS+yF6t0Uk4hmM)-$QlR1me650OP!M?a6lBcV5)=in z^S=xXj10hCZ=^9LX#X2Y1hiTPcPkOvtAKb2DXzc^`utGi3hmq^BVtzF!ww3J2!Spo zfSjuB?BnSKzUv)v^SibJs0{=veZj*h5h3x8L9ULFg$2;G1lj^X_`GI_U%=G?XygD~ zAb=+NAPdZcp|fak`G6o#Bw46Uplh*F27^H}4&X~CKm`b>E&`urVX9zc2)h>;bPgV* zRRkOK3IXSCXyyew1GG{q*xv_wyS<~2r@LQhfQCT@Xs2^TNpOCSTTxVjymk0(@E>_-;P%U=;Y=T+o>epaq>iFb{zCF2KSb(hPtk zb65ojj~K8dR2NLr5L!gRd;O3;J!qg5G_V@#t6&OUEav0t90DFRb`1^zHD3IKKwU-9 zLT?SwDmrkpP(uNQvbO#Rw*l@p72>67i zpfJ~X@LEfQ3IhhvHu21~%3#pyR0dEB)y35fG!}-Lli(vo;H?yhSw`^SG`O?@&ut_Y zXG3OtKxy4GI0#gnK^7x}PH;gi(6$7PLlEE2GlZutk!~$nL@Z~Y6^;AmabiVd~r%<3TRFlw1BD@#83cBfzlEXAY)H|Klq3Mygq@P zkP14*8``P?tt<%z_eS6m?Cj|RDlI`r9h(|}<|?2KbkK>C;QX#&Pyrf%2A6n{)lHCr z9mfa-4KNE#fX2H)OQU>zz>A|mV?5v!aY5UwKr8%U#f1iJk&~u^Mm1s-3p9dN0J=H4 zB)7l_N*lwk^;3wChh3r*AFrXHR8(BVscHba+b<#{I3!3TAXrmDDJD-zK`A%CER$2! z2qA^A4x%8nqNFsFQ`JyM0b~H^PzirDuCG54DsN* z)u0Z6bPt@tZO(YmCQmca@OVmUVu}%F*^!qI*>eUhKhQ%8x+uj&!3cCxBDlZ$qs&g6(sOa>n#g>p6$Obot81=JM*m+O$V zWT3LT0CIN;s9J>j7Sz50FZ57y3kX$0UJ-+0IH;)7fSZi$u=pTX9|aRgIsnxTrNxl) zDX};k!iAsK25#zxga$eJgN~wvZ?;CRjvynLumS*nx*ezphbsg1mN7dLkmXWF;Cq?D z`zD}s9q@h5KK|j*H8yB6pi2dyAp{flbe$b>F>KhMQp8;*VgOV(`gYM|d z0NR^aTvC*oT%u5v3SltB$HRKFuyw@&;l9Yzb!Kj$b}+PjMH<5fSD?nA6|$g=3c8{a zT$O`d6#{L289;{#kV;&L8=vGbny)K^z(2H@(cl;G~?{#p9UTi^vKUiNiEVT zt$>9wY=9ng@f^eo(9%2K0AzQ=dft$}yCHZ%B4`W|GSLuRl2}v%IiIo!{RSHFOaycp zm2-Y>Zem^vcnK9)95fYxvZK*4CDL5J z5`YfC1J(DC-k*l9p@ESh_{bSUvv|aqE|kLnFLQ!j1LK{8Llj``N>DBY9kBpPd*I-P zgsBlR(`2wE;|1VzxP8GJQNhRKfZ8IU1D)fGbmBo%(O3@2ft-<}P-Cm05f8dF1(N;1 zdBMpQ-oQc{U{xN9f47w!(lt96KT9nOf#_-K-=7{ToK~*<+gb~yR zgY=Y15HBOH_sz{foKf)^@4{RLm69}gCW6yHAZvoh=< z0SPau)1le_x0g z)El5N7z^-_d8jX_c7?byB*-xWbmB#Pum@<=2DBCuHhK+?7-xS!zX%tjc$ZK|AD>`1 zA5YL~*nr^pfFOT&sGA`N;ep)`>tP_uGDD+yP{S9q#D*=wgDz`8t777P3_(}fDsLa0w;`^+@!%dNbh9Gp3{=QqKmmBH8^l-8)U_)p^Doa! zErL%%gTe@3HxV?D3vI%K4oE?{b_G0`3%&=_paPU84Gj%J+X+1VLIOg9z+F%1Vth!z zL+6V@%_XGkjXd34LHC9Q1^EYo*2aQ!CsKwmM#~URo*_oyK}AsS4OBB0r52}_fEp_v zsfj7z<|??)2|tSilGDN4z!VG_z{4M)-jE-7zcqN&D<0CI0?lqHfMy9nc@DhV87vFh zvl)+a{0#W;7EEDqZUi+9oE$-iK_nLED!_Uf3K|MZO5nCSa%&xybifl$uyvZ?)}U#; zA!G#wB;Y_@dH5kyh9(RZ(6%jj3L;OQS;=%ifLA54)(hRgb3RKQ} z7K2D=i##=jAr*E#7Su*?eHagFAi&0fF(lj|NfG7?LOR1}~{F#-akeCJnTS z12pdsIwS{bI`qh5=qdLG6{et-b)Z;=$|IT}259L5q5!q^11r7Y{mlx;9MJKPmEaBn z=+HWFD-d!cr=y<>lo?e z3aYfgtHr?6M)2ig&|65r#W1KK33BvB-^~qa*CMZZ2Q_J-rDK49a7cWxkE?3{s2p;3 z4F)Z)1Z`SHq-AFf_(&XVC=Ohnc{ut&E_;PcE`UzHb`1a@6@of)0pB48nFT;e;PEI2 zhC)_+fwBpf%S3`)!3zhVXNy`xT3=AXc(2f4@Bu2|5oWj&q%~hq?}FBVKvuK`yM}<5 z(1FVZcsmn3ND7}olN z0Jmu&?D!Ix0oeBS#fLiv`6(DO6qJGXx5+^`80WHpnsT6JU667MmKZ_f=#YaEK=ROH z9a4iCSwJ_K!F53R(2ZDdMSh{apfU()_Ydd@Jj5|RCB@nBQ%Hh>L9-fup}tP8K?+J? z7J5c{21?M{9y)a%3>w=7O~iWo`vt@L*Cr+gplkm?ljflQn2%$Ss|)r8f#9IBh_^tl z&OnWEAAitM(hwhj^EV`IAg!(j_isVxRf7kJVSOR+fE6gmg4X@PLjqi!fTtDw-Gae$ znBe*wx?svT7<^C*Y*;kDL_rgLWQ~G8)&u*Yp$-}|3i9-G2e~f3D76^8zzkdpfeRn} zYZAcfV37*Dv;|fKA-a{IJ|A?@6?CZ=XjU36XF^xvgW6M=WeUXq@QXK`LfsTVLviuJ zA>QCg1|#saC5Yz=n!AKA!~*j`OZPw(4AQbzP;mxI5Ri*dK?f`tf%e%JR6v$Df{#5w zS`i7lCN2oJ9#R9g_yw|02P6mX`63i3XedC`fQt<1XbRfhB9=ymW(EeJQ^Fv|z;9o5 zN=(iksLNNK9G$&E?PW+3MU(@OjR~Nebxc8P10b;hucDm&1A_cP6}5km32bD-MZp+0 zp^r#J;f|4@CK^OLcquYs5CBm^fF%&c1AJ)*IJJW=lMVvi-2qDW!Jsw7khX$Gg)4aD zb!v)dN=_=Mq=b(*I0t~oEwNmt>+J6v05Z(g1=QPucp7$ag|nldzaQk1SkNjYr64z5 z(6%ByVVJW>Z*hXRRb@M3Y4 z>i{9uB}5ipK!fiC1j|6yok7|}sMo!eCWB8X0EGiQcEKZ#pk-KKz2HUcuyKEIlNa7o zfX<+ScOANcMj8zmKy#I#k`q+ugU|ZWC`wJ&$;d3oFV@M)FE7Xk-G!oox=5!eHC@xr zP6H~fsipyHT54#3HEHU?#I+4IHFXWa<2s;2Mbi?COOP)ph41}A2|f78AgHSVEt|nz zcuvm{JeBGLRygN_X4Rpt2e-}x-*Ue>9TEj)fSMNid3mV4ogHI$_3|b z$D9&qvpXm?IW@B^6;!T4i~+UKK^tNrx*20` zL2V3h*%9gt>LEggpFpJ=sP7291lG?#-Z3=9KR(j>IX@CHuk z^@AypLJjRgQYTk;Pw*A;ke~#uRf3)L0~^kTSF)gL(A_mC-o-P_)5SI3DKb9FHOL>- z3W7KYI-UUU;~|Pe(A>X;0kpdr;sGwseEgk3%ico#gFq+dL#`Q%2kl)2wEz&23u+NV zk6T0@d<0Fig3X8KVOaAI+%ARBWP;0L0|Nsi3(zJB&_W?s&{{iR*ANeX&^Z;bhAub- zxwr+yCnhJS=0NR%3pzSGyZWFt#WX5{Q*#pwGV+U3VcSxmi3YTj8kAzdX$jUhDm+m0%BPuWGFfusHLK_tDb|<(w5fTp$VrUVBScr&HDf&CQ zfJbE@H?6^nE<_vD)dX!g4bqSda1DwN4Ti4CgC=VvP3CBt;^W-{z|FaMH(y6LP**#@ zs01{70b2Ls>FDDb1v1YMbYh;Xi$b-6UT$fHf-QJB6{HF>#}Ve}Qv(`W0*QcTr$L9- zDAXdQ^^nBuR79@=(xuR;03V10Y2iW&MvyYxJrMAW7F-XwM*dKQ$)gM%SuFm$pJ z(*6r@b@kRjzBdr*P(o1k2Rh6YWu-ABnZaT%-c=({ClmYG$WS?y^N}ICLDeYqI3IZX z0#?Ksnu7Wq;JZHJK?4`i;tD2>zI_zB`O(MK1?3CABCu1+lUO)Y=8zC+`I6b;29F@D1h&XF*Os293yAnlYd( zfB{E2Y;?oejUhiL#S?T~LQ!c!i4XV$D(Idk@LD(ph62b{udpFR2GFux_&tBftAU{r zjoDd3UMqy!Spv&|=f*(Ov(O_25p7Ozg8{ry6mp~;xDBdNPyw1A10Bp4pPZjpl9-v7 zT9lurQK3_;1F8qALE}WlC5Y)9*pzmByoQEGv4WPSfu^oquBL)kd_1T?)2Pq{tu=FT z4GeYk@pOv>DbZ2T0H45wFa&hmoPw4nNQu_n2>0}J z@ec>@qE|3CW+*5N0pD)rlb@WJ6I_yCl$f3xke>;P3D_DAShRtUfrT0eI_BBHz}O8Q zr=ZQk;5GG-2_6Mw1IQvt*d7K29PM*Z@=gOUJt~1l9L(wPI}3~~oDD1x4MuQI^Y!!# z2VKnrTIK=Ta0JPO;2aDdWP@%u0QWyY$Nu;SgVvpf_y@UyQY^U2)Br7~$uCMROUwc7 zqeEW^2s-o#7R9u;t3|X9KrJw{~jt5$OhrIT#7Q8wW zv=I%mj1bgBfw7>euuXQkj9XVk;afrVKZvr%n5B31c8pDFtCh= zp77!t;2dwRU}#|sTBnf)KM^#ws0h;NhSVhBCLMSM0qD3MM3n-bkbn*|IQxT6%=UAS zM_hV~xM&vKoQEtJ0xehrtd`4n1 z>=q-?G?xKn@fc|Cq_{LU6`TS=B_QNXCA14x4Jy*0Ak>GU!ml*fKMiy=QCd!Zc`@un zOZY93;I*|18emG-4sov}d!ka0vyu&br13n4FIKduyGoYg3!GvzqCN7w8AN~q&Or$IJHDmfgu<) z4Cff+Y6#jgS_)Z{m6@6Xxx+FPF{TA=HXFu=Ks!mGOaU*(4Pnc#KxZ06fI7P_=!Y7l zI)V?tWrzn|9+h8IlA40LG6%H!xh%6dGbuACv!pUUUPCD*H7&6;r$hEi>scRn7edyJ^O5sgOB26Akde8PsYU|AQT19WPTA(n9l z=sXnUTp4g41xW*v0b542|h+XMx>8X3G1(8U$BQa%LI6)j5y z?PmnDH8mj1KMP8V;!8B)4TQ`T1uabtkUC9hrR)f54w}G*Kb!*~t!#q|1C)LNWW)lg zX8`SjJG%Key2ralI68+whHOB$wj;X!kl7t@Ux~N_Eg;LZK-mVe7&AE333RiJqYvoh z!T5Lu13hqs20M%dsg3|m3u%D)A^DJ619bO$VsSQv0~(}2kp+!P80aV<2G110r@}xR z%%I#4ZN-}yfLFqrAX@Q|Axa}7NKj$f@d#c|2`!wl)P~>-Ou-ihf`?5&jYHRn0LLI- zlzZhgw7|>5HKBLQ`GQyCLvC(DUDF)l>SzQ@3x-DE+W(8_I4!%3kURIQbQZh^*f00HQTAJ8ELpfmeHhwFfbi$FWA5Mm0DRGkZ6BdGye zOb>1dgUyOh1RpJ}0aLAMtpKtXw5tVq{RiaOa!8d49)a@obC37;i$}x|Qu+orQy?;s z#)<~`#$i~5L3{K_lggkrk|C&X1wOJ1)`0Bl0tSPLCT{L{}9j+p(Es! z3us~J8~|4fno)(8d~l^8F{nyEL=mZAVgW5{JVBj&(4Zn{#sxCX4&I)eo9bU$!VsUC zmkc66*Fopy=jD~=H}-)yKz!&-jQB2Q3zX95x7Q??PCR0zDp5qQjFG z@@PM_Zvf861_o}>!VP||7i{R=$Pqe0ZEOS{dxKragED;v2{~9x0c0{HPa^dgAxc0) z46u#5#^8f(j1>$mVKL(747m>(S}CC(Y7H>}eCs;6><7t057ZpQQt%~L&?JNE{$VT& zT88MEmsygTn3GwY3R;K+8VrE-QbA{pg2&tp7<@g0ok7_m-cZ2^RR2MyqY-UC$c|jg zcvA&aQ|LV+pcz|8oI}UaK&u$TAZ>Bby^MLFqs>!O6d)8*o7EWUkTme3CCJc;V@^(f za$-rUZ$K!dU@v9>oy85l)f_Y};^+(7aNzIk7~-k`n)ZZLx}aVB;NyH9LtK#to?zSK zAZsK+YluLb`N4;#Vzvw+1HGW*eN92f`+`Pl!ks|lG@-um#x7{A z6}djziqf!E>ioCEF`LC@bdGl9+E zf$L=tSH}Qw+ECC?i_b_+EQn9dOHt5OfO3jKTV`PWdeHhV(9$W-kYELvDWD}Do-RJF z@z8Uw6O;0b;A2^!aRBgul&cxaCH0`*EvTMEL^Egr4ccD;^+n?$vo409p%_oU5O6aO zzAzZ+f<35L5t$M);tD=a4`hLXDP#}?(q0dO?jTD|(WuZtS)v7PQbQ;IAgVPKG&Cx} z%l|=zt#f`#s-_N1DA^CR*%8J?K3Ec=rYs;4blgKpYEdy<5V6h_B!ub&m}#gt0fN+l zodLVtR1>tW3S2gTlOt$hUx?wFc_ zxONiM1codx1kF|;?+yd62?mV=2L*)&gakttD1!!zVMA8%NXjTn;&#N&1O+C1Pq9uO@~-0Oyjb+XHn8&46b y6g!#9-W*5z}sR$ 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⪻zV&A`kBQtE@IzCjTUSp{ZhXkrSR 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

XuN=iQs6ZOsCIlpe_a{MbH!tN`V57Q%H6K7w^bR zpui0kSh)mmtHGOTE(#W)&OT@o6?6@vAt+Zv?E)2^jzO;O!4Qv{!6(N8K!*s1`kI#n;;F$lC>5fruoL7sjgZW?-edYTHLTW=womce|eufTC09N_2& z+T;i-0>O0yD87&;O~AKGR2YEn6mjwlF@+b@M$oZl7f=6q4}Z|XI>>jsm_sukXiFn3 ze&7{1(tr-6J_e0ZfvISd@x zL4qiu13I%CDRe+w@IW*yUxVguK-EV;h%0zD5G)BgT>+93!Feno*dJb=g0?*%4J1P{ z2ShDM3O1kx76*+XA(rQXhrGe#A#OpgprdFZx!mn+bHaLXoNu@W7)9==cJ~pj-yq1qK^NhVIP)AD|37X&EMmSSx^j(lU61Bltc$#|Y?_ zCo@A6(4JKszJZ)nj~Gz`yA}Cx8-G6^P_+cA5EbH`^7C_GQ3M}QaWz00?gpg=5QeIQ zG{?~{(#0`yZ4Md`hLz8trW+`7p|J|)Lhk8jRq7H@Jp$9n&08%S}#t6}(7PQ_J+v&WZ^`-`v z@$h|59-e+~NKJGTCr}eSK0eslIT+h^97tgcOM(XRt~fSDLN-kxPvD^5Y6Y6V0X1_$ zT?Ej2{7_%yOZC9xdxq#Ym_qHwKK2ApXwHyj07$hI>M?{6Q{cP$4Z&xpART*XXaZ>( zqa4*^2-`4b1iz^lb(^#a^t|98XV_W6@WwDw;Q?;?fR=KC+n%tM8J>QS`^|LW9W==9 z8$(EA1imK&QH=NnJHi|L@Pr6HPYiM=47{X-4nY_gg!=d>Xe(%FXu!vtKw|~qGx;@f zUM>S#r)mMZcN5a20Bv)MFNx1k0A)R6NP`2E`Ea(fLEA~eJ_V@&wOT+GKBUtK)(xB1 z0uP;lh9w|JFu?kF9^vtjvkW|4K>6Iz+1b?16?B6HI3U0+H&4HKjFubpMnH&bVHE_p zM1!omj5joM@`PL$;sn0l1DbT8NdhvJ4w@tcje|i4x2%1O&?*)K`9BkAMw%!k(9^lm#k`d66N<+v+B8Cj{PQfnl`4w2T z=;9pi2yul1{5*6>?+>)N)IZ1-rQ-#53?j^s`e$G!sNnYnEr*1;3%)1^x`G+he}T;1 zgOA|?B{Bm;1JFh?$Wk}RaytkcbjvnKJ<=k7=&(L`z`z9N1B~0YK$94t#xDrRE8v>V zL5g*FP6ORS0@|ej+Pn&`MxY@BS#AVwJV4VFII+hEyN2Kx$AQT}m4g!(bchG(tOt}7 zjeHanIM6{??0~OZHUy1LKraIaJ3_%8)}8>j*bw8PpmYZD7+3<)l7OFp&H%Nuprj}z zGc7G1KAw!I@KMK(AjUx_uE3pE1rr8eN9W*>AO$5=1EUHnTm)=~3&iuFtEb~#gFt8D zf+7f9cY-GO5Q{^gt9-!G2D*B!qzHV%qyi{;fK(z@ErNL9MJkX5i;&xkQwvHm^Yh|M z5|eUL!6TqSz9FEH34#^zCZLf9*s4}=ixjkv(a^-$1$N>as2Yxk)W6_(1>GYL>HQ++ zX(8iwJ33TocTo`F6&lqJFF1Xl5 z%7O4`gD!amjrf5Ez`2pTacfZnpaY+pH`HbT2zu> ztgokEQIeWhoEV>(S5l;x44sGs-7Xav>ggI1@8<|QKm%6Lf#y_6J&8ky&`}+u3UrLX zhnWnEfP&5EA!SW?GYr1h1kyh-GJwoFL;C=rY6{#EMOh3A*{iFG=uv|60q9anczFd8 z0j*pEXM4~Q9niKMq?ClVcOYUYML($Y12-%{c7qB!m{AJYcYuH!W+FX7Gpvs8a!+X$G%8@pbh@UVQ@F!GpS^3ep~hr3!G}0&1y%+fu%c5l}xuTO+}) zAs`9Jb_BG6a!8m%Vj6ad6hsV^iZOE#O5YZo7m(+HkoL8Lv_mri*gMe8%ix|1XxtxS z38D@Jt;7X)IYFCJ<6-xkq29fK z4=gGuElLHQXavyI0n4#`zygm$gL4%)TY{H{!q(Oy z?Nx^yqyidgW5BkDKR&)VH5t_41MM+EjwbN#6sR2RTq&d|11-&jx3WCK<6+s?F$8o< zYJL&u^wfONIx@)SLFfsq&^&|gJRPXPh#mIerQbRVxrtdYqZB~f3qiXG4M5#ISZ5hF zLJKw+p+NQI~X8Nh{b;1#W>UkI!Q2d&VBcEl08{vac>pt(PA zP5_NRIXn8HHvW+|UK?ROw+4RJ2)MTgSpW?l#)B6Ah`~Bgn;X0;6TX=cyu=DzASxiP zL=AVrc0(Gx%m!@_23It}0m#e#K@sdk*Y9oB8IK|0^LTcU)*f&03i#5L5u&eo%ILV0|PlQ9y*X<2p^txb46Z2 zVFH?jho&=6zYthu3yTtPWdrZRL$(fpGXYXV&MDr=zyP$Y&>VCgg)u{XaAYuOay2A4 z6ns%0D8+y-?t|qdl-yxxfoS$ZMqi*A5!_9Oh=9TdT)aRU1mN3JkjHjmmp{TBjoQFa z0B_<0>qkg{JK3XK0#SMm(exVXD5U8a5~tS)O|KD1 zuMu&2jnVWPgY+5`rxzB|F#no>^qLT-*A&fOQ;=R$;`ExK=`{oCH6u>1IhtN`kY01* z^je_lwE*e0AWp9(nqEtgUQ6Qif_mGqum&eAN04SiVpA4+(sBapCNgaqq9-nAux=t# zmmzxcaslfmGJP4sJPk`=u3+6nrZ7YFB<2RzjgrPtMxkH@5V$TjgRUijO)o>+CMX;I zU}qD=gE#9z&*ag-wTrLF#6kygeOO{%iiw4S7VMNl1<)0diA9>A>v~NrG<6i9+W^5$ ze#p5w8eo&*+hR~Qak=~WJAscCgOrTmvKBn21FA$_gTRexP)Q7HR+8IXX;6}It=3KfF%7OxD9Roc<4Rm4( zbdD6-y#*b73~t6jXRsZ8TCI2pwdG8SHJ)5CvqM2Xt}{=-^V&N!s!7Q)}WC zluYz2^h}kY#(P3%ui>Y|!#06}Z*GG(XFv^pq(LW0;{_7rAStwU3E)cC4Rzg>o1aiZCyvd?Fprj0qv>*_jw^{ z2-KZ30OeRv(gkgxglu3$zLgxJ5S+i=K+B|^J;4_~K=L)BKVgnzQzf`)GmnS#azTqc zK)Z2K7kPk>dPdyS03BqypqJsywsxn zG>r;t|_rN#LY!3O*#yJt86=bbkW0Vo@*zZOVZp4`KG|0*dWD$6O9y}-u>PmyFN7$+)=#o(IVW^0sr_4Z| zY{=|-Fxq8ruwET_pdO_ngGB^rZ5U`Je27mxe9;DUU<4^R!J!9Uyan2-45=ZZt91-P z$6G_=3*7$=@pJ|46o#Hl16uunvdRX0SPgi^1iaVm2)&pQJo*Iku)iB*U^OHjbnF!* z$f2tpK+*~(utR#l9a>On7XnE<3T6x;p3dIEphNBBLxZ6Q#6z1C(0dEfw^BoW4_=Gv z>=OiO+0`MaSU>Uw;@2&j-azsK+BjQ?gh7fKrsj&R)T`bq(?G2Q3;ifVK_M1`}b~J05h$Z+>1nwky_(D|0m!QY%VQ zi}Dm;HHQLdD~F~6_@=eu%3Rc89q{xQSPFC=moiAdChDo^nCT6?_6w5UK;vD`KHi}1 zI)SL?%0LF>Q40=Y7F9V$fKSB&2Nh_;B4kn=+A4(>IS?^umVqv^1vPoXK)b0BX90lM zB^p5%CPJp>U=_b_0LaCzKAyoL;Mxl58V=B81Z>s;v|JZsUsjl7kYkWLXfQS2J2$aH z0X%b-p9Z1hOEf{J2pGe1B66VyU3#uyPyrgX1+8IYh>v#+_65xVYb56-=B9$`&ZPSBwu z6~<|4rjU(yplvgt9WWT%WVGKGX6}0mnd`N1ZCisk0O$N|b0?;)$;L~L^ z;)`@(S8RhM!0kH?jrbx>9SseT0O(Xv5LZD>p-uyI<_sueG+?LBXlmAIXn=0!hTX?) zV}m3ITH^|t`GWL-!Dr&4r4+=Wx3EA!Dx8c_=7r&lufU}lI5a{)^$+yk8W&g424v9c zD^LLGS(+G_nVOlHT9_CbnV6Y^ZU8be@qye%04kiFHDGhFpo3;1O##%)gF!ZcrX4`B z44IAw&6I)1T z&e2FyvY@U8j5Gi(NKi0ffL_%MzO70D)ILs0O@obaR3kb| z&^96D0C3PEcLgJ3aK3{!Qi4L9eO*zT<{)`!!2+%eLVTP+SshZjfVxR$ux^qOtln=_YOxF&Z3l^h z2iZXr3qj#dsH+mq7;=(Q)1fs5=&}w^XISGY*wx3?8Qh)*hdHF>Y6Lw^9m{wK^gddM zAEDV1w4oRrtyq?=gIeVlxRwK2#G}-upp#OK;7t%%lNCPNf!a(1U7!cacJPY}(K20X zZfa3_YF=_BXi^;OR2HabYYvKJq!|;?AU-JcoqSwf6hQF-4i`UPPjH)2!JNU}H3ZZg z^8{Vz0zReC2!6YkPH{$NS_$ZO8&H7)R|S&Sw6oKI$ZD!-KyDX;#|PRuNzkzsg9^}D z7)C}$Zip>?sC!x=k${*>1$P<@VF}(5QuKi@A=d#dXxAwyN(J9cu9K&!02T({O&*;W zYYk1skh5?h;S4bx-0A~0xWIx?WzMh$u2ZNR=wt?P=Ehv@1Wpo=kuY%W1exdrR|Qam zF!g|~fmYzin!w`V`9njqc+dqP(78h>4-rD(T0cG@$R9rA1uJ48NgHR%MoHMoZRR>K_>-f6*I=KdcnhDT3NqARYK?AHn0jh!_9=2jX zGQc%HUIDT<8ot*9+=&Ed0+MXQtdqBI=UE)LiJOe{r<2_v`(*TDFAja<;B!XP(-nodw*kf1_tCa6J`m{Xou2|DUECo>Pr93zS}xcGwvHaL2~ zXNH4H6KGT3(FatGLKJxVg&4!iX3(x!aOr@w?E*RiWu#za1lp+wS}C5GoQpp%8d+7%uOte%}mT;BhjF71NamrDDXl+bxAz< zEJ(0_f+PK$AxFstxq?<-#s`Nx2E-eJR($%ohWmIrL00HEf_(|~b2#cbDyHyd7GM*7 zJ^esy^{_8@0dEe0pS1Q<01H?yfIzjh0g0cbpUNTq` zh03AaONLl&x?(gfd524W^c@3T(K0yzhM$2CYD_=;;#B*WH8 zK`JG9FBBZopqecp2(c3!QqV#I5|Sd}1ua+*+T4W={2&ciDj2~JG6JO*@FosO7aux) z0dB*A*JXe*c`!INfO9XT{DV%rW7h28wHBbUJx4zm6X?YbMhc)+v_{4zu%L(4$(ArH zL6s*6LrXr4!&1TJHf(GLd@&*{Wy0HA;Bhd}x+-v1gLRDIkS$Lpd<_~8K40L zUiSzRfbzkUdEoc~4GKdS34-}3GO*ENOc~gDdYCe>C5M}EU>M>K4I|v4VT3z0 zjBtmB5$@11!W|k$xI@DTcfv5j9U4ZsLj%5G7c-WPafb$U87X*QE}|0xI!Oo7hlK3< z4hjLa-hx~~oeB875~37`4n>1YPgoU+)Oa%nUu^-}5CSh8A&ou-0|s9wSCQ z4FH|&;p!6a?-w89;Tat78074spbIN#LFa}-CPF~l*&)>wsL}%6PU+?v1n!$E*eMu* zTYeB}=op75D10H;f`D3u5IJzA2kq^_x7^m$K(i=V7OEX4s|mjO2dW$8LTv>*Ti7rO zQbz=O-<$zxK@C!}fX>fD&SU}|F9F>L14=YE5vZ2(HczDvXTaONCq`K&c0EnLTKr5j0}~9|3@8 zT0=ANQ8Nx?IK+y|6p4T-9RPKR~j9`d|ZY%+< z8BnMOuU!J)gbQKT>L`GPYGLy)&{1_q7Zi)zY6mYtOSOisg2T` zGJ>C}4YdT+Q-bdnfhIxltW~il=oSgs-CXes8X772rAaxdnudDjmgZ)b#)ifw7G_4q zhNkAJ+QtSJKJa!cQj;G%Bm!FdZ)(bbbA$+%aKK$E%swVGwLt0@aCBg4!(uG#b8&S8 zof{9%biqELyRk!kLCXZe0SxaaVis9od1yFboos?6Y;Z9Ry|WU$yUr=pE!Z;(bRdTj z%J6i6r(1lGYhXOc&7cSd7cNlO27`L^pb=rn1>c}UBn=Eq;9Ef>5(V!H*$Q?Iml>wW_Hi4`JgHCQhN?XJd z3{%jE9@JpSX+}s33X#15k%UbqfMrlmu7l-%l*8-5A?FF5hXSVq$X%PD3I#R~h3s}v zX$U&J-V}6)Fle|6lqF&H2y}1+T=IZ=XW(cDWo}rz5~bGh^Yw)K3!ZY2Mq~|HlQMHMODf~zHIyK#ltA}nLDDzq1T4rTIC9c+ z^o58)0|PYc;pqap3e7D5c7z%m06 zV8Hnfy1NzWiYrL;fttghbx_cKIVeQj3a83rb*> zC}N!<>}W_61@Po5tT6~FtPF{|5d$_mfYb&9CrU_mGKx1;01ZgMWIV_CB1ZPUnc)Xi)h!1>_!Jxvx(7*&V%LmFB zpt(!D0H3G;uPK6r4`?tQd}uFdPat%4iJN0^hy}F1N4_Brw2c^cQV@9M88~6W z+M}R|fVM!uxf(nqYG7bs3aTSPp@7sT_78COcLC4iB9^J+8j*o5REM@cL5qZtk1Pc( z9C7hUQkjL zU!ti2>p4Lip_-tTtDxlz@kmGOg2snX3TsI8A@xb1X9gHS&H#Wlfxv^GVE2Kh1i`r& zn!!L#M0kCTJgEn+E?@(Lh;tLb;SVhs+(1_}L*f)#9D&<*poJo!-FBeWOL@ha`Jhq} z#7|32EGaEYWrzn?#la!2LEtnDzJ~&lCBQ9TP!k0-1q9l602(6&FSRi-0N)@4T`~Zk zK!tXFK%2CET)}ezpzYgP7g zk7~z%PCL{u(DTxvK?1KaVZ{&ZSPf$ZBT&KyRcPReE~G36Zq=E`gSXF`8-UAiXy)_u z18oNfcQ(LVP+`R?QbGVv5rNJR1Fw_-)yrtcgC_s6U48%^J_aRv@J9clRM3b7>bZ+B zG588VP_NJvbc-Kyrx5LaA6O#?Y60kmAH>E&P@Mu9WHmrv?FUV+&|HSpATUL05WqSJ z;Et;is6PYEgz!c;thfbrE5N5}fu=@4m;rLJ9Vj3TL2Ks&Knv(}jSb9UO?^;-1zK|n zE6PKC<3V+1kiRc1+>s&;>^sm&$KdJ=w&^@L1bp!{2@N%PO${0o0F`5qH4m^;Jz%~u zgq}1B+SCQ|i~%V3l_wVEAr=)DgO&~IFOa1*$HwI61RQAx23_A-6bPK`BN_3A{`lW=ug*YFTD}X|WP4tiUA=$}|fo zFN4~SVAp}JE{ji3%}XuHOa=`F6zP=cRHhc|`c5 zfELGt&X!6n$xO;gjW5uEEsX@5rKzJ(qN$?*GEX5dAB&41=h{K~+VGW3pw=jSzS$6b zuN?H?3ecUBV7?LD{h%FA;PeP>aDtjZo>8s};5h~~3E1XlNEwZkM8NqPv^xyEyam*3 z1JzZanGD$Fw%|4_sIZ6Bi{LUb9(*D?q_~AA4o@E+S9eFBcyNyea(<|S0eC3}s8U8+ zivi<83ny?f4x0Eh1~melz5G4>Ah%=3M<6($nRQUz1g(*vT9INH?b<(Z41?~xLiaJ` z<_7}>Lr?*3fEbE}djrx12PIvYr{PP~5R>r?u*L**ZH{MfFw&?Iw6TM;u?~@EhzGT% zoWUpK<3HCCbnXu5@Db3p?D3#gcaRW-t=I$I2L)^R;<$JO5*(ld16*~DEsR0)iRb|X zIeiHzhokn~T zXb2N*FlhOZX9(!Jjd;wvE5kkgT>Qi1L*2kT6_AcrH826i9k{wcx+nu>(Kxa=yxM@) ziio`7?C9t3=jrU|1G$qy$GK+jl-AwIw{$k8`gqad*;F&DHeUQ+?i1dly{%YAU; z3qBNRYQ_K>+XiPF@EwV+E((y5bZAOO^pBCeVhpO2KnyZQyYA_W3ydH^&?gx2GL zHijU}$)Mf>O*+F)OTo4v0g~B_K`{nuT7ruL?CV#IKn-l@s2F$@Od&o!CqF4MCq6S5 zd>T?gNfCJaQ*J?GQG8k+(lvchw?OMj*lq=b3iv4vuw_l4{)?xds|)NrS9qBK8mDx3 z4T^X14D)nxjdzNSk8%z2S1N#J?wL4-xPsQSfLCP&hq!Jb5RsQ3S~J8$(OgxaK>Y|A_Cog~tVLpCzyQu4 zp#d6sI%SDDpcR-JU|L&2BTrM;P*XuoL02OWR0M&?o{*Q?$HVqYAl=3RURbV?r>TY{ z243=_$xvKURFa$9okCEFUn0U0X3Epy5r+@6d-rO>nI@W21PC; z%n%KIBeaSOdh;wa`$3Kg0+&_LvIJ6QLfgBTE$8$oGfC~X3zO=B5cBRoUmgF~I2U4w%`8jrl2HXdRh ztT_%J$^o@{K?xOA8nHgq(a!}jua3Q233tY^=#^nQo{2_PF zE5L4q0vBem^aCk%A+;3D6Yz;Huq3P+arJY79CH=q3>{npHF#m^2WA~89i!fG4XYgt zAZPM>8U=%QR>B)^@WuTYD*%j4kyh8i7Js044tdf6nzcZk=wL^*Nnh~T7pNHo$b#utIASJ190 zO*=aU#Lg&iquDVy*fl6bqYQc!AZTN_qDGmfrb0FH&16cd#R{sW3Nd*~ItuaN6)d2P z79S63b7)#ClxKhz3Tqf@Dpc2kwu>X3>}SmoAMcZ&mkyp21NA3Mi&Bk1!waZY33!(~ zbe%R*n=9DEKM313V&DN8$oXHOLJVB7pd>Z$%nUSqkWw17Edy>Gfh$MIAe>RWse%P; zqy{>Y37W14?YKp1raJpL1|iz1(2R=Ia{y)0cyK}L?-mc6S_AJXhO|JDtVK-9fV#_I z_rv|<=!+PdfEP;0hkJvjjX|e-$H#-(;Fy645(S4PXz<(ul1jm4FElTJ3lP|`m!O6} zJPg6D4RE}Ia|Ebm1WCQnKmo-#NCs*UcvcrOXoq8)9B3IvJoas+(6~TU9H8+?Q!En? z(AK&scvJ&Yu)%k5oPsG(Z&H?aAGf)^o!w^*z8uSpopnDlze8B@)paun45IQyC2)<(- zvThnQ%Mj!m2$~)M%?W^tMW{r)f{l%Wp&97tX{ZQzm2!MMXuX#PNCS8iFhm7tRzMSJ zH4VH(hSmkfuxkNf%{Y)av@r|Y2##wK8QiS{9e-^EUG9Wg0YH)>*pHwHG;#EEF$DL| zAxq}sVZB#S7{jVxMDq=FfHKm0`U>boK3pN<@FVD$9;i(Mn>_+s>Kp1~Yy`Oz3AU&V zRAhk`Pe5BcU@qtiC#>V*p!o>!&P`C_1&y(Q(<^k61a$=n_`(O2_6)4a3+|_Z<{Cl_ z;z8@bJVDMhhAl?&bqWp&@eg+njt>rT3~@zUk(8TRoUCgXpPN)%RFYqwTpV9ql30?e z$q*j`E#qM$5QtF2b@dgfKL*-44q7e-I-D3hqY8>{aNvWQy`T+{@!-BWsGb4!mg5x+ zEiEk#41E|<^Gb>;89>)}IR^Pcj(RL8$}hYm!32 zRT6j%3>>(im1FVXEg#UUH9#jS7MB#2CYLD0$7duaXG8NTN(})|g9-)};K>nCj|Spc zu!}&2Uy!3u1Uy4S=iE^f2ei=!tv*&+a1)oBDep9Zo83_3*QgLV_7Ap>}uxU-9^ zTW~z$=nLr70l0+$FCU<}*adV+9k>#KwMW1~);_B-N z>h(f`7E~*NM#GSbR3sr#>J9aUx&pEm8n(6)H17)PZo-@7W(Euau0fsw9>MX!0iN-$ ze$GLW0g&sK96?8s!0H1uIjAc={X$?%+QIE(SbGh%v5q3;=j(}lzO1n!tg~c<5;)+> zH{LP82@zk2Rt01gE@Tb5QQZRrQ%FfU7<%_w9j>eo%mq zR>MOcJmd@CBaPDRHv|_EkagnVm9?-^6{Y$Bm2dEqlfe-UuE(+Y6m%~fw)tF8!E0y` zZv<}fgAM=&6`Wv)p~Nm|vk*93ARU)@@S1jL+@TIsqId&5Tn^4TVAnbOIQk;(GJUrr2xu@B(%ZqgVi9a)gsUT>NPrkn=ng1?h$w#KT;Uylu|W%ReaI5xgfBd@TWV z0ttBw9Y~3SEoj{e=+*&E#7sz`9H3L&rq!TB6C8*QQhKOf!G$QfMT zBc%>A(0nUr6A_`$U*Q8#>{hZl3W@PN=0J ztoIch;Aw#51QT#A0*-XVFfbz9fVXR)wpTzK6~WC7M07*yB+zVtG2&)cM5_~9Umsed zAYGjS6#=!kL9IM+p$sjqode84Jt);w1kT;A8 z-_(Ut=AqT>Xn_D3CpL};HKjmxE@-_GXq~79(j+3RN`y89L7srS84-=3V|E$h{qiA) znk&S|r=%vPz*~8UU^g_xk^8`F=1k(@XYqnAeROy9Me9GLC+6lR#)Br1(-U(+3k<;? zLiCPNZaV;V1#C4uguJJ*x zprgXTm;Wk&=5!!^4n)EQ)f(8Ag+(yS^_m370f^lw_wl+HFSk8(##WN$Pm<*34`_`AOrfKUWAXM zGqwv*3>m=D`;a6IYM>&Pp+PbmXhfg5%%%p-YoPIGci4R=pcRer;3=VC zPlO=Sln^-iLI#d}oZ?|!P{@uR1r3-0M1iZHLX84U$j87Fbmpt8AE+DzWhZE#7T%}w zb#?I!^@Y~_Xp$P><=NoU6OqOtbt0%TFb4Ij;m3i14w(hbZ21Slw~v6T^&s#i&Cn&D z5XE3&lu0H;8bRHx3#xe$i_pNC8}&9HNREcBp@GK_WXm120R~g!2ijtXyb=MHCNMG- zWaz*EF}e>uF&uj85xAvk2440b0Um0Boh=FOj)Vqi7@9%%h=OW&_~0&5Wv>aYMqEQY z;(Z-KqdOr%(BT;cW7u9Ph^vhtRfrKx6tpV8C)C6LoQQ_Vji1 zf!+#g2|wus)VhXeeMnTGMR+{uTHOlJ5(UV@7;v%!mjTYs{-J)L1I|FhHBKSutuPbN z;9NjR5NNH00<5|NpKOe!RRylzu@#fh>K#@qK!zzHHzfwcm&1c52*I6r@MXmC2?kIn z1hnEH0yMJ#b~iKxVRyjbOB_Zh1wS~QfoDs?0{lQ_zAN|=Sa9VC+r|W)X9;n12Th8D z=IP_XgXi%JiO(EC^#W0*ASEgA$1dqlnH340JOapNe((B2kF>==GP3tm*rxr zfUJx$QUJ|^frA3pV+M_6g*yhh!aE7jyBEPp6tp%Anl8YtT1<1nD=WceJ=kVQDI5?I z1P(&vjVa(0v>^Hsr4gvc#Wt1#t#LtZRX5NMS=V@9#}JQre?Ond_;`5J6p};?jd3;z zz}XKTGw4l7i+B@A6$a~aLQ@6w$THBJ7kE4zddeD@4NsonY~|+T83A6{i|#Ko94%n* z9GgizEQ=sImym5Fum&h>e+X!53|w3p7=U($K+jtT1&9WCe@nH3fevT@!_CvjRY6Nr zEk3?DEj}$VJ2k$zBqcKsw_JW{32w>Mq9X8CWbh7TFv~zkLCG03D-CMELboQvB%rGB zQs6a>@gR4@HvK}jIfKmr>x6B1h8qqRRj7qF1V9^0VHZw7N&@imDo}?EJnRl#u!Xu( z8JwfR``aOdC%7hsKuTa$7$RvxDoSGoLjz+2@Y-bfEmmmz9YIBEu#Yq9vI@vu>yRl^ z(0OO*%iKU>=nVvLlJfU)0UezKIkExbRj_!3t0OGcK$1Pq+d5!l3+QPQyyMIS%fv5u zlH52RHuL~G77nyMBLp-aVFcRehE}e@dX%8B0rexr7OHbrk3VDTT!3VFYkirM!jmt$jBI? z8|A(q=ol(I{TRS+4l^?;ibsolV^>FL>M_BSdQgo(i+*EQC#VsoL>f_yl6;I^ouT^8 zkn}@m=h507pu!70w+E_Y;45CuOihhp{Ut~qHzcO@1Ml`iGCWc(2d-_*K(!p`{6<** zhRtz-iamH68C=G|dKI7w7G@aIS!v)(*(e^mX&#cjA?`FXz*Pmq?)ru{(h1hZ$ z2N+b>fkqrcKs!J{2T;I9(jjpc?~l1-1wJ|lNh;vm$`!!d(?H{;&>3APe}5m81^=K9 zzB8nE5Ff8#sb`4_T#YSE5c_;U!ziF5ClEWgA$A!Pv#Z@0JjMLHq-Sq12BScsjlv0@9f!Aw+H zj1{lwX%y7L##ZUWGBakw$Iu8zAhWB` zL}V0z@V`eE$04?Y zdgw?OctR69sE7!NcLS~B2y%4}0o^*KfY|a29nZymCNlJN9>|yt=sY5583WC_@vze= zOd&@+fmf<0C+4M*xlSFV6|{I3#})}twF^Ei6}+0KOm`+Oe}RfNXt*?0tnU9fBq;^r{9lpk@S`%7T>i{%-M* zEkW_1Q?Q&oLqMzlp$Q(;a|a)t;R`=4)X)Ibng=_{IRJim2DtVJ@eeYB)-`BS&=7%@ zM&Qncf+1%0iltuxuU8?1RnXowtdRj(;)Yd9!vfxC2Q3-`jYNQoc2B<$Q27AaR0M7l zfVt@1C~!Un%{f3uEs@saV9GGWI|aKym!*ZE6+GZ`niLFSWfyb>9jtc)4HxiGKj@4W zSi=LcK^a{NJPQEw7-$?9w8so_{T{4rgY3ltl{S!a26U&E0YiLnhzrWOB;ZmEJi>*1 zTM>8~88puV8x4lugNZUd2s@l7*wxh~-T-tskFl{qDtJwUks;VpP*Vo9Spat0hBIgf zL@+47yMTgH!`Mh0vWE;jisTj=6%`rp9|YOdtf8TisA+3!r~s<%l0Yoj963b70DSNt zNWuUlVW40Ib*ryqq!W0r9jI;M<`^6T?;j&=ONQh>XsrM#I*mce9BJ%O!P3ac*x202 zz}U>f)WqD})WX0Vbms>o(Zf#cj}HomXHIZ-29LM6pxh1*jy>o|5X53=0ss#Jf(FYV zH7&UGhmOKQ#@ImZL1^lLp1TF=NW-ES;(SP(T>*3>2Dp62GBg3H$e?Rg!51I|1o_81 z2ZVyl77ftBeqdiA5`(Kb%GM#YrKg~}*95k(%Mf&Twtql~r!Qz;4ARC1&A6tfpzhp- z^%a~PoxMSeF@1deosmNiUVn!Afy2esMZuB*yco~T)iESA$Q3d*0~!DEbt1UD5@U5G zbkrR!*Fh%3(B@H~zM2d`#> zi-C&=@RDrM7H#MXX4n)y^w>LaY6LZ9A#(`uRuyP%f+1|NI{2D(f~7O4G6vN{zOKQb zvm%2*dwn5MY6vaq;3qyovny!o2%2c1m-B&A26%7*v~L-Fmbo){k%23C;yd2M(a*)l z)6X3gAKV^@xDuHz{Fe4Q- zeh76sbRrAneR$r1xeGSFkCDH@E(>#Y25*P}1rKO}2B;$pTA^nMZwrC;eL)izA|Zq3 zX0VL~fE{lcZwgIgXvg!xk{f7!6gauTswJI4&c@as5OD!kcM{bOd-b|nZj;VfmIXeH>$wI z5epSTD>5L%0xrIYt%e4W;tRA65H+(KgGxZCBVg0NkdBafype(_toa1#Sc6uBp{#fX zZEG+9FY|&nKSABQAkYnqptJxjTcO1=yyfU)81L`qhSIwOr({rx;27rU=@TCY(haIR zL9qlX@Z$aaLp*}~!(mIvK((O-tTr?B&g+(j*qLeGpI5E7huq_ z4$v}s|Da&_)^JGE9W>kl$r6af2I<^@E*=J#Q?SwzoPNPqC%S^}28J9b1DP^_j0r*~ zo{)v$^H0z)33d&E)Kswc1!501Bq2erbai%fSFiwQ3ve3`94henM}$Km16rVbX#|?{ zfS3U4sKUk}VZ)OkF+^hmv;+jys10!RgOcYnS=iIhKS)O*7qlJ}Vw3`? zVQZ*h1v+^d<=j36%;8;Q=!yi)>*e}T`?#)FQyg&bW5 zUt)Lqph*a1>G}Qlv-SxQxcyI?ywj_E~*5d9%TS8=b(!{zzzg;SRio*t4t8Z9H^}W zE9FrRI06rifEv8S97qZ=9a>t08)ax`dpi01hk(uibqxYlY><)xTor=alki~=GX>CA z3v^jXb~FN4<}R+_;ZRRMP+Y*zIRckQkO@27Z41ysN63lS;ETdQCo6$&y8_i+AWi6# z^q@EbuNVidPz?4D1#LKo@56`q)Ce|+2k}10B=EvZ_|Oz+bjt`@MM2j-LKowMQYiTR zqU0RV(PKra$)!cbnPsTQ-l5AO&M|^`7(U#Dyo47tE&#ux8eF#ehWZ$S79Yc1X#^V( zhE!(3KF*+VY{c>%L)a86(hVt~CZZ>(MG0=~fQmWLeJt@2AQE0BfT|PlDr!(y&k%Gl zF5-Av=+auTqRM4eh11gX-;TK{An=~D!z5cobDSd9j44?BX-LxEI=ph_0e%tDMf7=g~7G&EpHEh&yKD9X$$NrQ$Y z+`FLS2YLjtYfuo<0zXjq3_QyLYdnDFCF8+k`Yx_Mj*;+`1WFRHbYudGc4!)aL_CxO zk9ug+1k~?_cCVp{4@m-c5I?LB5893gI!p~5EAV@|!MpT8Lf9I*;AIO&@dgS;(9I~| zWQJ&iKq40!7{Sht@t{Ej=y(%ow={Hs1(5_HO#t$x5aW5&GZT*^@mn_(Wr^`DG(JHo z5~)!N%e$x@5Kt%7!~%AL3gqlIL>gSwK)V&70boz)owu-D4<2)b+ zguy3lk;GA##iM&0+F)>k@8$&cEg>^;@VpGE6>u)1hc2ar)D!T5SV%^PbVOi7v(T6T z*R;@Gu|EFc@d5tf;IrEW2r>(3Jp&5?Xt{?n?E*Sy5wt)XeB=t^ z#1)V*sObs5N)hGA71#yUPzS=xL2xjF&aVdF=VAnE>Vl?zAije1xZ>kcn(4@Xa|}Zq zVgw08Bj~sutUm`4H3T<%6hM6!*!pnLfdHYt;3*?4F=k>AZy2BeZZwqUfvzydJZS_X z4nAunKHkkI1T>ilY6t2Wnwy$fni!iJSQr@@S(uxq>Ka?P!I~CGD?y-x0w$0_0eEOb z+se>kMo?=WoJ2tjlM#ouf#%=wjj9KLo7$k#7JNz)BzZs*41^7;7{Fz-k7r1TkE^Sn z3+P@s$gGzcNFTK43>kC?cZ>w3TIi@3d~gBLPJ*m;1)b#yp4>GCFUAh_aP~x7fd?CT zfDMa*>JgA_U@yW?d4i`7a4iY$nSk%M08dLR7{O+OaSpViY)prCy--#%fQRyYoL%87 zsWDssCZKb!;LSKhZw~!T8$_iKxdQ^c)EC@C1iKqN1PLoc!NM2=ln_~H#sKa1LaF}Y zV=pNA53-pSbTw&wN@`kWUTO-cB@AwKfpZjiBFfbeW$pny@(0T5h_KWEwTO#Brw@Y| znMtK3sh}h6K%8P&(-WG5h}jST8v%!o>>;IfXuH4=(k_6t=n+munbd*x3&Hn$ftK4s z$|g|PC(P9u=?ofh2*-okG|;9Cs5=J^1c;;IT?>c-kn$7#q9DkAPMB{&y8%EaT0k~S zA=-AJ1}L;=2pTg29pr*kY(NtMVu%gA?iyO!qMsK4T?ya>iVA2*A!Q_JNP(KT;7q{~ z4>}4uzo-P;9lxj-Y^0>7C6?xtAl# zbmF)H?63gH?c*@-gF*(>G!KI9wTE0!56kJW$OIQi!O%u0Ob}YgLF@$eI3O&TG;}Bi zB8Vw%1U3_DB&IZU2|6y_pq&lD-Z*tbucO7K8(LT6l7=n>#w88vmf^7*I>L-gH*5+D zr#yjhGb9jju)%$t<`W1yLrB;`OEgf$;o~0;x{n+@9s$l-;7kgx$-`WoLxLO)LHo$! zkq5b8mlit)1vy57ha*8H93;^}4=)Lh3=VPi1+7AW^b#QF7h&0S4H^(c+Vce3HVi!< z4YZj7X@3}W=moSb0=~IBA|8G)zA#Wq(U)5xm+FEM1Z*vR;NQ+39yr{V0jt+)NCX0 z$$yY#0?=Rw52JtyPy|3yAK2T_maMbCUzn?(GpLY<1S`Vnpz}YlZGVE6NuY@+7guLk z(+9qG(bdw-1*vICWSH z1ciVm<>KQNpcl+R0u(6~!WI@P7=b6&7~=i>A+xvOu@p~d1-JloIv1MVky48(`dOk7 zOAxVUj$=_Hc*4&t9)27GXo3s5!vd4Qld-IQoUa z@7zYX6@EMuv_XotP6M0@!@(zU2RZsVdw>sEgTxaoeH)sft_XxyEHG&tYeK8aace$&iA?6fztJE}K04LSVPkf?N1_2KivF16QP= zfqCe;bLisGxJ6s51*^@$!r+EJWOWzR>xdc|tN=W!i%$V~3KO3Kq;0QI2Z3%7!9Non^JRUv}rh#>MtVRJL>K{sECep6(tYpglooXP1G~3~0m- zJm&&kIAP#qzyLZ0$Ti+S$P;uKn;~p&Fa-Umh@AZ7#2nCJ+VM%HX`mwmJwxK%96fzP zk+w6!k|Zd%#e+_|f^>616$&iUP;v%%)uIXLtP61W3YN?bEkW4;JiKqh09$CF5D#8Y z2P)pcy-;Xo0VhAiY8Y6h1NSUp^-&Ap=&KbMGz`Bbk#L8G%F9Dk<bA}9p zLmDukMWvut9@sL_(mrSf2%7y04)8RN$2iXpzUCDrxq#a-plgW0l{ciE#+Yz+bn*`a zZxp~f;p|Se31^7)!2ynbex82r@!^hQ*sG@TM&Mf`DR+F}lI1fIa@p)P+yzAQ~x<1*D+SK+pv~hTt*< zd}#gA>o(XK!EC6(IkdKe2pEEc&LPp;} z%?D7!3D!u4pJ)X;Asw`g2Qp9<9{_SR@;V-PD;AVx5gRtlQ3v_s9Z`n)b28KObP9@a zjP#?oq!U5PQ&Tj+w5Fz}H3PViH?e@+XbN65ooZ&50yzZ&bkJW2bXplD5Wq`pLF3Et z=`jW53m4Ij5=V?{;~CEenPw3Wx`72c6${}&3pvzVa^Nc%K@+j??YtJCICgc8cMWs& ziT8C4@$h#6mD*4fAj{8TB_n$NhfFRQgRjg2?<@c%6i+|!{(R7`d{D;+G&T)cNdoJW zAq|{Dk9&ifAMY0I>gpX2U4#t2=>*i(3<9kpiFXAhc*Mks8KkxXXL0aSaRpHB0T)3a z@0r7^X3&}@P-b&>bn|g^kN5Kj-Decy30jd0I$jC96cDTpQanKxY``uC12sgz!+a>$ zTZ1+pfh~res|Kzp;73q`GJsPE_@1kH@F}^VU;rIm2s#u7a!ad*uAzaEA*@6JmzhpZ zu7+muLEuxAV0jrFQm~5wz{iY1b1W?5t(79+} zVenBZAfps@(hh#@5L!uQWW%1Y=^5x6{uh`@r{5VgL5t`ov_jVXAskU<5g zxHmL3G=g=Vf*pe#Q5sz)7NE^O(0hTLT-`nW5G_!cLm}h3pex3WKw~nXU2>q*1ikzg zl&FxdE;rG$G%+wUH8U}_FflYTF*7wu)ipLU@d5P(Kv@x#L!mlBYy2U81n)8f508P) z83E@8aGG=rfY+MvI>X7)&l}YC0;O`$6bow0))3}8v||YoW;(jKfUa%@Z`Oef7NDO- z3ht1AHTXJ4g5BX76yz8Z>KhMg4tj@!4o-l$8!QPD1aBgNiiLxg=U^=D1Koe8W2C8| zXsciV+KYlku?FabSserL4bh-efDGb;9YKvH$CCWq%w&xaO$BIQrCK3G0e)p{e0*7A zjy3353Z&8z)~5y!ryIwk+_&iw4(c4lLt__q%7>F@h%sol4Se_vREn9wN_GSXS}sEh zD9O%*%Sbr6DofNnRg3gY^Tautf(2(J1G#SwDAkYPjpxGr*uq#(U!w=G- z3l0hL_eErO&@K>=PeE({A@eqnxP%1*yxsvzB8n_{#{i!2En&Coz_g;Da|sPdP- z^;^MF1a1YyJAtmOK<=d?Is>kTXyc7&&I46tplih-%~(hZ1Ff5al!2f%C7^N*`3@nF z7-AjmdQ9R*PBgRnLdK9~_))q-3NR{`4ghn|9i;Dg|XkjZm!a&d#+lIIu!Sx^CP3cR)i9-rY4A+)#9NQP4GIs3?gCT^^p9R|4I@0o`o_ z4I!j_YlgB+!5KQN#sE1P9n=;99q9)-VG=Y`1m3;~FAd=vM$Dl81@%Xc0IH+VZcu^swc$Nuh;Kpr zI+4#iHME4e*)`ZT1XkRG3J6H)WB@wm3L0L{j-Ue;K=&Oh7{ba$&_*59Z3NKOB2Yo- zvNktIU(gN>*8tGXm0*+Mqqo5!K_UL$@ji~hA>bio1@w_*@THR3@i~db@MCo0okL8r^}$IBW({ih1~$0@lSQw!Ax=chvB1=!^^&07RZMk8sMg_BXH29z?9*SE z_L>rD9{PFFxcrMYv4+zh*pF<%bRYK13^CQ=I4&HELSkdYkk}|OBsNZP%t>N#BU-FL z6FJhDIe2Ca8o0=Ntw6``LklsqeVMQ_7}SUW73tueZqPd#z_ls-XjMP|AYV{n3@T>z zObiT-EGWP`2$A>6jX4*MvjmRM+GBL zC_$YD2_Yy4x_cy|#I+(Bd}OR9187MzY}XukbX=n-HC-n+u{c{(K?Ag~IUXhpk^o;W36_L~ zEx7sxolyg>!%Yk=O^gj-jX%(W4%8!jpmhUu90GZDA!sL|IigbsR{`$Sf!6PUw^x`k zFt|HATPbKH7v&chm*nT?==!-UAUJvHx`uj2MtTOirpCJICT3}dW(H}xDVaqjm6{4B zdKP-73_J`B30T+E&79A~I!0yPGt2)}z^D)2c5Sq&DKfc=${npBz|p9VVC8EQ8~BomZW z^&srTq@<$MG8E~Y{A3h=C?7>5=#UBqs6E9cMGSh$`MJ5N zc_j>bkV$tvh(o|`ttbJ-6;yjgiC#fbegT7CdQpC90W`jmD3t8L@bN#A6azDZ8ZwuG znL!v0rNqb03pQ8V2$8_<*U*7wP<`$!GsWE24{3+J}6Tn^Ff&lnQxEa zfbD~2IEXMagENEyC7Bsqp)3f+%-{}TKuKl>PbdpQF*A5W7*LX#!57McP|OVe5C)WF zW(b6`AQUr0FoXdmnHfT%EC|KS5DsBLNoIyfC<{U{GekoeP?DJ;7RrK9%nb1m29#uG zNQAN=6f;9IgaIX)8B(Dv2*u2h4q-q^W`;~C3qmn7WJ4HGl9?eF%7ReL4EYcSlw@Wo zgt8zMGea?i0VSCkN}((W#mrC+VL(Y{hDrv0C>ugCGJuM72pdE)F{FVgIA&&;31@>C zEDWbX6dbcM{DreY3^oQ`jW>5#!YapY+n1>+( zh0n{-g~I1!*oDI9XLyCe7hsTL1{(w=1R1^T?93a zfkBMH1%)rpP>#ZvU|4~|mt=T^!k1!@W`!HZz`!8Q;ETeSVW>ml%Q9?0;ma}HL*dIK z8^*xQP>05^N8>l3@te^2D3Qa!3~qEFlrS@(1P%i;1B&Mum>EzU$H2_MhR_TyU)a(3 zpoRlNh?#*C!2zp>wxgh;%naO67KCC3H_jkz5XsEI3!>nd8QgG!a~YV?atAYm074RM zAE*I?5MpK!LU6$H!f1REG(M=Yg%Dz95JPal`o+=s5@>u$G`hKnv_BeS_~RcK1d-bG>p;s?r8itC?C{36k^a}D2MW4`rFX>v!HxX z%_0PIVsIN+0ro4(7-a;JSow{BsDQD(ZbTi(j2TlEj6*E zv?#S$F9X!VPfATSNK8#NNi?=Fw@5QJv@kPFHa9m-Nwc&_OEgYR1ZzpoFG|fUPSnfL zGd9vQFf_DCG_gobHZd_YNwY9cOEgYOPE0XQO*1q#x3n~a>c~sWOxMfMGqg0&voJJB zH8M&vG)+rMG&e{zF*CJDPBAr4GcY%^FikOm=!j3uE6xPD$ym=a%_1#1Ez!up(9+o4 z%s4GM&DhK&Ey>c*+`u&1(j*CNLvcw8#M_3(dM2qU#ujF2rpbnh76vKihNeWBVv=d1p{a#ol9^G8g>hP%kx5FDsflrNnkB@Bh2FA%I=BdfX zsb-euCT12!rb&k8DVCshSuh_!BHPqN4`i1~a*}D1nPr+~YNDy3k+GqfMXCiTMz-G|9}|C^5+*H7zyO)X*{&Yz-)5$xH?1BxAi~Q^Qm<3sZw6 zqr@Zw%f!?a!(>yVG;?z!qm(qWBm;;~Kvw8w=$TvUB_^ht8zq{in3$v)ru#ulcQ zW=4?IS6o?Kl9~&0l9`^lk%f_kg-LR%d7?#HvW1ChvT+(H5K@v%EKQT4B}hd{QE6UD zW^O9DUj?$t$U@J|!YtX`(9ps>(ab2#Br(a@$k@op)XdyG)xsn(%^VW%kbsU)&d&pP z-ZJz|4fPBY4N}bvQZ0>BEsQOV%`DPPQcWyUl1(gAGEB5IH!?6XF|hy@nb2S;NlD7j2PGRLOFhG6%T!R@SSF`h7@C--nOhiJB$}id znVMK8C#NPul1*`bGANIj=_Mu_B&QiCrx_R}TBaDJB^jp}CmNa>rI;ipnwT4#Lb5IB zM33T1aA=vC=q0CFni`uXB^o4}q^2dNrY0wun64fC4uswJbFU>$zz-XX8Ls8v`S>X#;BUFd{X( z87sij3}Ep}2pdE)Lc4BY@fwf_Wax#l48jJrq(q?23s4maVuRFz*xXR_L9HVZXp;k^ z6vhU%3Pji$7(l&SP>l~0S7u;f0I@;lfaG9okkdixL45&G9S>rI^l5|CvqOf4z;;2K zGaxHPL>Rz+QUs~tU|;~L1@$ID;vlskK8y`EpM!w`)SCsH&%wX|>S=;nDk$icLd*xL2eCm`gD@ks2?%N#F@gevfq?02@gOAipk6ObJON1@)H{WVgN9aMY*6xovHOwK7c(+2z{Km3*xg9%=}7Fw zNbL1U?A=K0<4Ei)NbLJa?B7UiStf)VG?Ca&NNisub})zyiVy|{hHxeZ23Xq2M-s0A zu|bKHfq|hJ#D<1vFNh6I8xui#q3k6faZtoEFfeRHVjn0w6Y2jXVSL zo(7B!PM=V}gYqg&9GpI(;-Dd8m^i2$fw9496{-f*#)pZ6Ms8qi&?pUz9S2HpQ1wYj z>>MOEIITj}fO@bnz0F8!CV|+{aGr+5o{Pj@h{Rrv#9oiY-iE~9g~UFB#6E$T^ckVuWKaFf5DJ(C5 z%Tj1~g3D4U8#H>z2(=d!@38U>oR&ZaGeF8{n3*7@u($vvSr{8^FGvzpS0MQdRL8-} zJ&-gbs8EEdfu?Ox4;5DCfYTdP99)J&yU(D$CQOYR$b4uwIsn85d5(dBAq>O@C29r+ zh8PeVR7o;0Fo4q-s3KxuV8{ZAg93nofuRJ%hS~)h6=4Kr0tN<#E+p~ENbK1lHpsCI z3=B&_Z0OJnI9-7Pl7WF?Ge{g%z%wu~fYTCa-i3jI0i2egcAW*O0aert3=G#nY^eAH z5E~Q;3=9m;Tp%_m@Idtyhz%X)mISe(L)^+B zHq;y)B(@2N4XVr;7#M6pY*0nYz`)=JV(UWO-~(cVDsWI43t~gfNkC#}fY_i)jDdk6 z55xvVAOizKIf!itF{c5<1{EX>3=C}`wlPE;R5Zil7hGOJ%?D91aZr@Q*r2F_u|Yuz zV}ra6V}qOmV}sfpFg9p}9mWQiS0GCm7{DXhFmcc*HH-}|$DnGE>sipqF-#3;R2aqv zjrhXYpwV0y8@bK}jpD<^!DSlM{7z8(LfOdm@>C>oa5{vl0he!3_HraOYmwOCGznF+ z6G?nO68k6;8#Mk4bK6BEapbgm7fJjv5*u9ZLG5~vB>okN{Tqo5PQy_3?4a}jW%DAj zg^}3c^bA!ak0h>&#MVY)8zQmIk=WpL4mHOaN!$~O?T^F`MPf%Iu@jNl=}7EcBsOxJ zsuD>Yxqa1&B#zwHnusKh-0qr-B#zt$TZtr&+#cJCB#zuR1C7nY;u^V~b{0wfWhC}Z zBsOyU?J1J@Yb5qZB=&bC_Fp76GpJnzjSEgBHa`+u6p1a3#8yONgXR%ne$hn|H%4Mx zBC+j}*se%yZzOgg5*yUEgqa_UB%X}K&O~B^+n-Q>l_H5(Be5Hi*zHJcaJv+$cQTUr zOeFSvB=%Ay_G%c zPbBt#BsMEjJC+-XEr`SxM`Ft&v6Ye7nn-MYB(^CM8@XNWh$QZg#P&sE2P3f~k=XG_ z>{KLnHWIrKiH+QDuSF7XMq+m&vHOwOQ<2!Sk=P57*vpaFYmwNSk=Q$t*!z*#N0Hd4 zk=PfJ*w>NRcahkSk=QSh*zb|pUy<0qk=TqZh<*?|5}Ox^EsVsLL}JS$u~m`S+DL3e zB(^yc+ZKuKjKuatV*4YpLy_3gNbE!;b~+L}7l~br#I8hQ*CVl8k=Wfx?1@P1=}7Fk zNbJQ(?3GCD^+@ckNbKE6?1M<`<4EkYNbJik~kV)G-hMUmJ;rL9PbJ1NmS+8&1VDMs7FkZ>4n4@1I%)b{WRq&Dh#B=$8V_FW|Q z6C^fr8~78FIB4w)tPKfTS^;CTBejM2kl4uWUKu2DWhAy1659}oZGpr_ZtJ=si6f7r zh9HSYBe9c^*vReM0wnQrBz7GVyA_GugTzK|)6PN?Ux>tBfy7>q#NLL)MsCL*K@vZW z#J+^YzKO(sfW$^_yS_sb|BA%^gT!V=YQu0Lv60)W5=i3Uab0NJSPe;B7m00x#71tT zIw6UBBC!LI*x^X*I3zZ5yEF$$ycmgHg~V<|Vs{|1k=vrvki_RAv6mpRS0k}O>#Jbt z9J&2@07=bpB=$KZ_EjYI9V9k#oAVWt_(vr64vrVqZaG-$r6TLSnx}Vt+tle@9~fLt?YCA=>slNNmu& z1guPuLK0U*VuRMD!PMv@iJKv@ZIRe6NNjH;b`TOf5{aFF#7;+I=OM96k=Qjz>}Di( z7ZQ6S5_<*`dp;6-84`Of5_=00dp8pM5EA<&68i!Y`#KW)9uoU068jAj`!f>z7ZMvZ zp92eX4t7M`@guRtkl3_tfIl}PLjNbK!M?0rb=qe$#CNbJi<>|03ehe+%fNbL7W z>~BcyzesEr4n%x$Be8{$*pf(W1thjQ5?c?6ZHmOUL1H^2vAvMkfk^BKBz8O!I}M4Q zi^MKLVpk)vn~>O@NbCtn?CD7Cc}VP~NbEI8?9E8*T}bSMNbD0x?DI(MYe?+7NbDy_ z?AJ)_Pe|;aNNmtjXINfi=S0LE9}-&>i7kV~Rz_lLA+ZgS*cM1^dnC3S65AJv9fHJ; zMq(!+u``j_1xW02Bz7GVyA_GugT$VU#GZx3UWmkAfy7>q#NLL)-iyROg2X zA4X!ILSkP;V&6bw-$!CULt?*0VuO~Oz{*3=E)EzQw2lSF1})=&u|Z2KU~J@hf6%f6 zm^f&+9gJ;~nH$6z7jX2@$2CLo33bR;%0VKvy|Hwwx9pk05k zG?0NL4%(du69+BZg|U&>Z?qt(??z&S*QY_pd}bnvFF;}=k5R8f65oo%-h;$GjKn^L z#717HaRW*GJ`x+erU>euw@BjPHEB?B

#HEB?BPNXqR0VFmt@eW#^1q(OOk|`J) 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%0DpdNlB(^^mk*u2^7btJ(9tV{YdUBxRQlA0TXg071 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 z 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

hCw0k34_Aa9SjOfJ|OT}9|ncHFBlZwYA`7L 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

!^GBWUZD00Rf8;77g>d^^YN#t`^@;O!t8 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°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�Jgr!PFc@62FARzK_Iy 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%0AY|i5DiL~AU4cA z&;e7Rb*&)tKaGF0zK;w#D~eDuV>r?T0h4QSyu>B z4zd?y9w;5c^nmmya4|4|@(G9y!Z10|JUomI68GX^U;wT42C+dHCWpSB@rxp29V*B^ zn7!!h8JF=uW{N;&fiTQG&v=`1_sc*1)y*S z^*cazf!qmNQwMSbDDQ*xtMD^0EFfY%;}H?!)-$q-61SewRunQM1aboigWLq7L8mBy z+zJbq9%bUzGrEd0Fo5<)fXo14n0e^y8D}U%)PceU-+IP}qQtFdJR-)xFoB5mj3E*X z3~eBXK{3pI`sSu)&|}uY6rr=$EiFt;zzP)zpS3Oms=$a`&q($<#z|~F!Ag_ZL5mR~ zD;9YsX>!$k0`WoV4cFR4Q2ha0n<#{|Ht`{-jS5#SJT{-OmhJo7jwHZDK8A zZQ^gxVnUp26ZbPQAl4>=&fH~&u1&lQT8;=?n+Up@g&DFo5!6{^hOA9A1g-pltxc3- zVqo9}t(umAu1#bC$zrZe+y+`=0$zj2!2>#r9kOPThi3;!Iar*SwTahptWEq1G9Am> z#6r;W73kW;m!L%!(6x!6B~P%miF-jVfUZphZOveXu1ypN>BYJ>5pr-iXgwn8+C*`X zNwBqv!l1P|IM*hAVger=4qC6q0}e6h+QjJ~k3iQZLJkgxtWCTFGL3|_i2=+E3`DL? z)L~*^AbM>gXnX>;HgOZkyQHj5+=sk2@g>Nou(gSxBLJW)5LrY(t7@Sf4v`fgk3&{1 z@`!+L@L@d~G81;Be4- zHWLv~P@;gXO;iGLU~3aWBNOnoiPu3cfUQjg#Wj3wBIuxfR>Er&cY^!_Tbl?P06|}y zm`TdoL~yJ@*Cv8vjm)))$3c++U7HA62@6}BcpDUw(6xz%pg#0KNqM9@YsR_NNqx=j|^63n*HE0(U8xtuzCaogk|Yl_9GRAuA3?R})%sTeEr! zgO)Lhi86u?PX;aF6K7=roro==2BsuI5+GqI_!2$Zt|mlZK&XVdfKVCk6z~EP098jbDN0w;1s+90citx_|*R zbi>536_naX7Y<@9E2QIze^@MrO!5 zK^9IX21ZWMybfc0N^yRCMq*w{PAWruaz<)$c6?@DW(oL&*LcukD~92_Dv-q0f5a`n z1E&Vq;vU#KLD*Wg+$1_J6$G6}i@GKf9HXeq_MpoELFpE>9Iv<}1-zIcxvXReE(b(j zlYxDW256yGejY=7B6zhTXyIT=W(p{=gVz#*LSQ&91H^wE?@(O-2U=Xi5MQ2B%m7N| z@#QIrl??Ie;DwJlW+sV{1*gTC>G5f$dC3g!exVA^3gETl3c9(VET5d1lT)mqo35bi zUkt%%dHK3YrI|S;poEhLUcCxhG@4nQ0$LK9lb@WJgILO%oRbe;evG!{C%y=@aymDu zB)>cvw)D5av>3XI2>IYiP&x#;nZe!J*-AkpxhTK5xFkP6N7v6?0l~>j*EQ5LGSV~9 zH8s{vH!({yG&4xkP01`Osnmpc2Rw=bnu!37IFfo6uLQL10HQ(qpInb1Fhx(sRy0P0x|i}x}fOhkP#9>VrkT}DLTiAyZ+6*5-$D+UjpMe>) z*#ORCU|?oI8o*}&@nN%25Jk)kpqUm38$>dLPksQgAefl}6n79dh-3z*84wGCnZaiz zL)aja8N3<`#DZXE22fl=*dP+LtpP;CFf#-6FjJ@iGXrS06UqU*7rF=xD#Xknj^YB) z`~_%T6jT~)J7^9TnGc$$1o1(s2DGjZeH|ZYjS@&6ghA%Pa~uUL_mHz|dTI%H%Lk~! z0M`~Ei$JY=O4j5-g9VhkKx@lDMuKuOXw4aDjutep3lay7l;c`^2b#wNsR50}gV?Zj zY@iqinFBH#H2)1_gJKe-9u!6(HaY9yj~3yjxfET_8EwczFuvC zIAZ-4NIys&sBMY9UJW#|4Qh*n%m87KIuH#?XCO9cs2jw8AXh5@pE3lzT~Igojv zbO$mYBnDCkI?xG3!!Sq=#71AQhD#kN4qSV3=L#>(%~9Ffecsv0m*SCj$fMMtO*7h<#q5xmlRmAh{LX3=E(>DIhio!{pG{ ztFb6BFo4bv1?72A_`>{wzFv)=$n|P#6o^}|rq9E`U=8ZtgB%Cy4?$`4^=cOs7#Kk3 zm4e&{>KDM=hrV7di;sb!8mYSr@-GOZpTGB1n7H+7Y9hp~SBn!NZoOKIB5~{0(nKKV zIzod3zK;)mz1jq%^B?i8S9>Kw+u*FbKv5ocgX z1Tml(6viMX?EJmFl(Yh3&fhaKFd+K;y$_&8(@5*pWEnuI0c0!j7~~(2Y8VY-6N^FN z08@)xHkdgwY-C_q%LG~9Ci}t6kpb;6J{~5}dN(}cJls2(b_(rOG74hblqBgC#JQzAvYu~|27@XC1C+mz0eVy+nS50S28*N~VKz|) zM+OF?Bs0%NP74^FlGu!r%#D&P6c#B!Y+sbbh{R@svsW6e5aRJZ%dGnT{|Y6Z*=Jdn zzWcwzh-dYo1x!!h{`X9RIMmD$SzVDaF2+4HeevXE1Sa*d z2VFgAy)x*WbaZi0nGG7TMHfE;yvvg&Cg$e5COYBLf4t{6rH6je8-Bv+yI%$xH(66I#p0z|aP*a6p?PK!M5xISZ2+ zG(g65%^YMM3wu9k$tV*$XeA^IBOB<>6&6Mg6BY&r7A95?5XHeN%E-XL!od#O|H%9e zw1kvf6*T-Q&BDOI%mX^Hm>G1aAd3L#k|GusR?um6%p9x?3@qv(5mragX`CsHAp6)@ zSiC?>rP-~S85mf6W-~A_u+ITGz!xOSzyWH0fv!X61QE;(EG+CRnHd_( zCQv=ZzyLLppJg+syTZ=`3LIY0_CXHTV$h8=+)f~ulz^BF+@KB z0z`&KWGN_gYQcI0L_oa))_TUrtPBhyB40p}+X$AC5P1MHx*5!o5m^t?)4~Wk+Yx?b zra1V>%#$FQ4n_^|k(r?VNUU98Jvt&AK$iA`IR+x2ol~rRV0%nNSU?GC0;3)W1A~Rg zLr@Bt$Y=sSGE)lVf=OUy4kDoA5m~1)x`L0)1jRM$Oh!-ydx-o289j>;6oWn@lR%+4 zm$4swWM&eGGY=dFPec}jOqP&PNZ1d1yT=}G81Gz?8r=zD`7`wg6wkO)(3g}VlwE+ zOm5HyPu5GtNJnOZ^m=f=1*y3KQXjw#Iyjm2W*q|qLkPDA$PEuT85tNNxLZJOcmyiZ zVz~W4;*UY0O{gq`Nqn?AU1)4fdS-oB;_C>aj0@o@d7py6eI{W4E!vfYz&aX8RTJbE@p!8 zn?Yx3LP|W=EReTk8E1oz%+zOt9GQ6pbYv#D)KF#wu^B|}f>MixnPb50|zLwK}7~QjzC9dfnL&wMS`-vU(l0=_1xoK`1epTbk;fqoIu(;snjdsDwe(`pohs5&?4X`2 z?^Ol{h7!gIRZa#5Zcw9)F%p!R7`Vki8*`$v2-3~K#3^D!`}Fh((f;s~6vKr-Nn5C>Vzz|R6QLUj{pgT59x4S);=wQm{c z{NQ9@Py-vT#Ryi+z`&pkT3`?hF%)uGsH!?huL)Q$tZmFV$Ak-}*95E=bRvf`XvnDq zS+6=MuwV^m#yKrq3=A5EpfTDY4I2;@tlt0=1I4E6tr|znGx0{V4QOl zq!KiA0yh()QUNsD$GQyGM_`;Yjfa6jv6zAJ0x0kpgLJtV85lqg($QmNU;s%nfvz`& zBrqM&Va*^hF(ffJs5&hqu|P%!22cX=28+co6@x?6L?0Btpp>c;1yzs(RZs#}V2Mxw zx?B-tLJvd%qY)@dtl;vxpp$<=p~0Ye9h5ptK*<-@!C{;e!wX3fB_L0Mj^Q^*D_~$O z2Pp#GIAoB=z*qrFAD}CQKq;gWl%New zUs(}HVA#*cz+eVe5yf15gMmT!3L^spNLCqCZ9~%-I9W4+ zJRQYc3`*B}pbM!OZ5d&GF~&JFco`UULEH1djsWdZzre@9pbR=d{SG*9M6)u3axw#h zUJxkqT^V8hHO4tNKze1F7#KiWbU@?wAT8&>u8L-524!LfT}>v4yBLhlfPBr%2uU3Myy+ zF@d7O)SR7xfgRke0;OO`F$F5H7|dpYI(>?Hd<+cYAcBFP1>_#H@2m_A%&MSZg9w{~ zE@t461hrd0SsBuR0Y#-aXqg9t`F<7#22K`6kUS_RAU1%d%sN0@3}rz<0x`-W4CHt= zX0XFR=liqo1R3-V?fte2^3)>y86MOsi(pyx7cn=nAU=?T`U19KF}$GV7vn)To&vZ_m>SgH?lyP@zz zCkX}y10=)585j(?pn)U^y88>U3j^dtV+7Y;5+q=PEC4zX!4z&KH)tOT3K zIa~-FWDr3MJqCM8L^y)XvjlBB0Yw+M{Q{b1WMl{eQEH%}AcoJ3LGwZ72?&FVA<&s~ zj0`~_3e=WnK~Vsz;X%VUj0`~_3Ut;Lssd1fzXw$KF$94q(AHyA1)w9SKo^)WG6aJP z_3vP{pw1r1euhp)1_sdG5R42FAX(7eJB$pVHYZpXw5$#?I|He=L4vSRE)W~E^NEQ8 zbnplx$$Lfy?D%HPy&cd4ooRhwbw++}s(xl!VxB%|jd)Q>ezAUWZb52psXo*J5Go$( zKqEaPJp-6jPG(Xv{Mc%Sv`p{>3;3{U__5MV@ZBTKNC!_N9X8DZK7$%|*mMqPMY3K7 zsC`siQk0pO4mpFmxFjVfGYP_mpGUo(k&#(|lbL~$`3(anF9RbpBZvdrVgf!SnwgW6 zfsvVw6LgR?F4>Q@U}-jxW@biC7O+7~NF>Mxux5w_%%J@xAj=SHm^it?J5V4hLE=oH zeJIRqoU9C>oi89#8hnm53)q%=uzDu2qai9$?FG4k3GDQn3{VGwj6RLzO=ecGZiu^Z zvDelkDFSc6VP@w9ZI)pMJEIm%LcGHc4g`pCu%O@p2Lgy>20NG=>?9U2$qx1o#PRRy zz?xaX#zCxM1S^6V#{{;L5lq&DLIf5?%%Bs$nPDQ3um{O8L&B#T9EKcVk_j9P^;Ggv?DKxNX8P7iYo3Sfwbg$d}KZahb+hdBm?<2g@#Q16q1?vDxw zMGfc#cp^4Qg+UZUPEJorEJ?(Fd^$7`@tmU$N^GThpdDKb@vu#1plw_XWS*&xylV=) z`3qz;WCtMPY}&N^(!3Om^VdO60jUNhBgE;qpdB>utO}MYfNax2K7l)AgA1evL;vvvg0v6FSVisB!+a9e`a1XLwqJE zERsu$ic<4RKv^ddv~w~yF()TKIUaNw0W1>Td>q{w;&T%#z&n+oTL_9%Q&SkQpVuDj z>+eF<)7s(DfXLg4DInWJee(0t8RFAZOHvX`QsY4f76*e}OXXWczzrYJ6$<$b@vs0( zPAo}H&o8QE0Hpz(ryhrUx`cQz1cL@jA!R4_?Oy3Q`ALa6@tL^=rA4XW4UX|xc7Ubj zfbMi4cOO_WqKJf5JcKubLYsKtG>C5(nXh9+yt7BVvyWqNFau-<8FG#U#SBPEaEN1w zD=00ZZ!Ux6gm_5ea`E@^aSVdyHc-MJ&<$pwfhtfx14P4?7=ie(6XijJKcM~zhz5ys zXdsS)28n~laX~#75Dn^l!PJ1dUEtYy1_lPucr8o~sQ(310~@ggnFBjo4`e>5M+RCV z3K9nmnSyAL`Jk>DOfPJN6eM>DB*?(P0MZK^83l=7LK26KgM!2#A&J9AJwf82tJOhL zAah`2oFH)~XuyEPK|`9LrLQ1yP*)hNo`Hb@#0DKx4RU8Tl6p|*5f%=hF+R`;D@YCK zlqHy65F4~?79_q3H0uUEiGMw~BMDjd20DZabksUX4X7Il(+gsQmI8ysK|NEjxCR3Q zY={r!PSCPjm^f_s4kQliXM#8QffRr`&!80sNNgw*yx|bEWEI2*r43Nr!PpdU4$KGF zxq3yZIf;5HsY#{j@o7bgxv31uBAIz<`3z9m#H6I6)G`$5ocv@IeqvE#UV3UVidar& zUMkFp;*uf;z2yAd+|;}h20ciBP!D1U*clZidO4XTQ0)~ZdId%KpcS1UFC#ECp1}g- zoc#}qP*BDK&66-OKz8MUG7gLn3UE+BgVqCq`x(xo5+JHt{&$l01O{x(Ji z@DVC7K4KIF-u+?#v!HF`;*u1V%;KU%6$4N!6WT!oG2xXtLwp)|BR8nY25qr{nBbNr zv_1tj?y}>dm3};;ISdgmO3g`4EJnG)A-=dMH4)UnDu&%%R1Cg}CqBLyY!?HfC5q@I z#v_`JSei3Xr-7Uf^##m9$U;!JfP~;4L{^6oL{kaUkyZe0hJjTfc@x&ahjt$k`(VL= zgdE;b73e$Sk()B$&IPhSChWcq*!>isbi@c6wFKS60GcG01*HfE2GHIGMo=xr09tm$ zz`!UE5eLnRFoL$EGcYiKDs@IsVZ{Jh^9^Hz$~YJsbT%!F4cgxUyZ-`oMlZ~q9FV=B z8jOK~p#q5wGMW*z-U8GZ0Et7FFM~=pM$m$5*f~I;1j+zeKhFrNIT;ujK;?XP$^po ziW?zFoPh3q0EvU53{-xB*q}H$4pjq+lj~46X#dS~C>s}4jLH;%`t-1gWL<6JOr^paR{oN zKx|MPg4o>9cm&l7Aibby0{H=?1|$z+b3@|@6f__;poS(W?m%ilaSmd0L*pHETPR2z z6vZGmH;BQ&zyR9g3lay-9)Q@~Ad46n7(jCYATvP?&{fcI0HqNS8>Sa@H@XNY;WIEW zoPw$W*$HC9+;$5p4oXKLHq1S*pyHr31!BY0|ALBx(ieygQ_l_xPtZjxp!?QAY$ixN zfR=26+z(2FAT~EN9h!jD2tm>#hz%2WfQp0CCWs9a_XCMDLCWuNBz7Va8x;2?? zV8{oFgJv=r7#J!+Y$gT;dhSg0VquE0A7L zIssvrUQj-V=>^3HNIl4&OsKseHYj{SdO_g{!Z5v{d=AqK3R93?P#88s^@7--`)ELV zdl(oPKp3VMw7d_d7qoW?q!-i)1TD9Lu|a#vKzf%jFff2HOfP7i7fkOOs9m6T*G44v z4iKB0fng5=1jF=#*51JMg7kpw0=3ajg48oHFo4*g^*11UL2M9)>Ae9e!=d#QX#E99 zFQ~)$5ULl%2DJ%6dO^3OgD^}lX#EY$UQnA4q!&d0gz5#cK{HDry`Xj@2*dPpfI5y) zdqJn8g7kvqL7h|>TY`~+0i;)kk%0k(VR{vi^s0c=fF`{d85lH?*ajdrHv*r2_V zjL>cgsCxrxMnhQtO9X28^g4zGc+K`XCdY*7CK#sZ3B8??L{#-0a?Q>c1SSq~Ej^%G$1Lr7}QA+c{Ev7aHaKOwO}tHfdEfXZ+f zTLQG;5o#~!P7Rp20g^cA?hKfCG?I8a61y0QU5~`>Mq=+qVjo9hUq)g-Lt+bqmO(+? zCXd86M`Al8u|a2D!`vB*B%X!D2Ca{RscAtHpNPbshs0iu#NL6#1|6CUGv_{%_!}hl zPb4;IwJc1%Flc!y)L)?UZeik}B~LK66_OfvBz6cAI}wSUhs3T%Vs{|1=OD2`n+sre zT}2WH?Y4o5|3ngJ1+9^Ux*2pjGfa&vlDH-k+Z2hNio^yT#17Nji6lN1iMiQNKPl?ip*1SIxcB=#yK_I4!pMI`n;B=&10_75aBE9ed*s9nlPYy%{=EfU)c zi5-r_&PHNaAhBDK*prah^O4wVkk~ts*vF9Amyy^Hkl1gL*uRk2;5(S0{>lNJoPG{RN2)zSjw=o)NSX8p`HHVoM^iZIRd>NbF!Fb}AA(8^ngTH}W|l?N3lW z+YS2$HxQhz(V*3SvXe)P$-BwLMLc#2rCwP-mHefx!dB zhU)bPv7vf{p?X1W(l{jXY!Dl&w+O_B>a7H^p?YhfdO>Z}4kYoZAU0I*91t6-cQJ?! z)w>+37t}`Gge1Nn#D?lU24X|?o&m9;dM`lrg4(Okki_33v6*=g;VF*9)<$CcAhC0i z*u6;X=^!@L4GTeRs2i5@K;j5Ad9wo~4vlNj-9L;__GKjT#~?P;oR=Ur)SP!n?C(fy z23~~wC6U-lNNjT?wgVD77Q}|yl>%Zz?aJVVxEa*OE=CfsL1MQeu_qz1XM)&JGZ%o^ zP&1c6%>=c**CUDVKw_UnVxLE1-vqItWk2$Qv*=XqO3$?FQ}lf$Rj$ zgTTaLeRhyIXb%ER9CRiLj13yYg|R_9cwlVMq%VvO?sr4u9khQNCJq`CgRwyy8DMPC zTnUT~+AIWP!}`=9_kjCrppF`JJ_J@)gT_E$>K}vJ^H6(1mj{8)^#SRHohJku?*vV3 zg2X}f0%$8Dhz*);0^Pd`VuSj5AoD?KTGK^<-dR0NvjTVuSAE4TGuyol69|$^;}1ijyR$ zIA~lBw1pES4(cz0w&;P_pz#&Z9j_oZXyUjEsvb0^3%c(WBn}$OYJ-Y{?(YL#r~?uQ zjh%vS&H=GOW4)j&3_xtqSnoWjdQd&J1j+{OcV7i%_c1UqfVSF#)Pu%2w?V~0b77$S zWI^H!85kH2LB&CP(?EAAfW$$2)Xzi3LH*IIP&TM8y8~r|#+V;L*`PY>1(XdMZ+-`5 zgX*I%P&R1n8Far5$b3*;13Fq2#0HH+voSL;fY_jVgcr&NjY)(0P#|$o9U%!72aS({ z`coirP#;$nDh?X+(1x->`!x)qY*619)aL@J2i-+%3l*1VWMBaGzd+)kn^`=e;;M`c z44_TGAaO%R28K|mxGf_CLo}2P8ruNvGX$vtZB9yuii7qcfp))x#6f-K5~w(6JQZ{U z2}m4N*EB%IL1U|+yL3U~pz-w{s5oeB6?97wNE|fQIs+;W8e<3b??B?9@m0`K10XhN zSL6n$8qkjfwq)L*{_WrN1@??Bn0vDrsZHfW6Y z1(Xfio&?$n2{Iov-V53s4r1?TWMKFORRiklGq6D7^eAXYB$R!Ek%0lUK^3GPG`=eY z6$g#)NNB1E^056934^zz_u$2i@(N0A+s%&AUR`KN%Sqa-nQ+{R?G- z#-1yoY|wafJ(LZqPg|jE(719Zlnoj`29Ij%P@)#_5Yzk^7^7tyKEP$y;9y1ZrG>>QE%M z42TU~!l8l0HbG*8(ho5hG!+J#`Uln5AoZa61W>$#*dPqGo&hwK24aKyOdxR!9R>za zxPZh#`ayD_bPAdd0r6qxfyUNBbuUN{2!qstXwWnfhz&FEh%V^ZAqKELpn4x92Qm-j z9*}t;F_6B;&~yi4gD^-AM1$&b(A*$Q9cbe-h!2tjVUT$s8ngo&qz7gUNF69IfaE|J zrVcbW0#XMO17R0t28IMA0hl^a`vAm-`6I`Wfgyw$;t!DhAUTjfK-=Asv@fbtk9enG?TAUTk|y-0dMW=s}`tOEhDK^SHi zs7(pd12eC{2{PvnG7sc!kQ~T7Ptsi03B%p zG7r?`2g!lV1GPs%=7GvXkP(hD3=E;5!vjGasCgiHP`U)sFm=C@tq-}y#c5L7#Kijw>2^_C^9hEax^F%P*74l2J#uVl0nmg z4vq&L3}H(DA;*WwegL0&kLzqNQ2zmT*41lhcr!4tFoOCRjG*%ZKn;43wIGEcnu(Du z4s;nRBL}Fd$;8B(1>!NWdxN$hL(Z>aVqphWH%y=-rWhEQIM_j*CngqF(EJ(`3p?mk zCKk|e1JgB74bH^EZV57ikpt8gWd&VM2U#2gvXODleg*~xHZ4%iA(aiXACzV@85pHO z98hP81610ATGb4kp!EqL%*DXX0-C$z;f2hafsEjN2g)EqASNGp-be)BR%AW~24?8) zV-5xe7U=F{@Sa#!_+CzK*f!H?PLiO#sBF;fq0nus?5I0UIS@NlIT@kbl(|4XXKv6o zWYDHh9#IB$Nd^X9gfaG#pk1MS@QtFdi@!h#9+aUN5%+e1gg|+Mks$~~fvP@ch9buK zAO<)f5lTT*@}R^5nZ$>LDM$%~#lQfHbtcFpHSv2hb2E#R8T6^JH50VBE>jOw2^bA(-GDL}sQdtpyuh*tNSxwj;X`dXIJ~_D z3Mq2dgM;+JFy{Jg&Opai%m>9eGGCkl9P3aaP!xfW*MA1LZ=j*%K*GLJK0y zyb4wWGKv8<7Yl0l!1~f4w=qJ!0BQq)?nVL0gZd~SHb^6=ZUFVoL2dxgW#^NrCWize@!)z6@Kt10FkoCdW!p^8v~RjX}cHfX}&x zig$z5fQk_Y$XTJFv0G4Bf(|i+sRys$0tGk&1L%lX21Y1*8L)oA-2wGPPQUgkRhoR!2^avV51&M>wAV@#8&%FnkNel+L1yovq z{0>qN>YpQ*KA><0iG%tdAU3SOW&k<@5_;A=NIyspqz`?(0Hhui-XJqT7^DtFgIcg4 zHb@@C58*(Z4G#)KkQ~T7kb6MpgTz4UKuur}4Z|Qg5F35G0GB%O+DVWGCP`e+> z1r2F}nV@k6kQ-p`1Fa7LwcJ6=ltJB3kQ~T;pm_k88$cRC>lxpJ7*Gt81I;6V^uWw} z!ok1*8n*(O2dWJ~av<}PKzRbH7eqBPGBALSdIGUQ7-k;&+4Z0`P{?I4OdV+bCdh1< zy$)Oq450B5ki8)LKyn}&oTot+KyfwbR8uG$M8V7hl>;C>F!L6Gjz)u~15hmmk^`9s z&L<#^P&}InayJ2#3$I^6;RVtIGw%o&0|RJW6XZTnISi5mnTLLMJ!m{0bhIY2c_24} z<}yGuY#iVt3-)nD=e>u@SEM(k9ICT-x*dY~COaM)RrcPM!?X9c{b}yMlsP8IQ9by2Qb_ z>GXwLAl`-zCC6ELH|$<;>Fk9IyC+C@Y}in;$&=yCY()l!1v3v!(3&j!L3*Zi$0iPj zu+_gdc{1p7$$t0`iCbLb3!uCN8(#o<6BM?f@dZ#^GJ+Oi!gjfW6oNd=#K;D!3z--> z+8G!an3!1AK!XEJ?4SyU89u%MDy9(Q3*d|m%5jVu>p^CKjz9#J9dkfDR?wbEgali0 zQ8ELg7HI5?F@ha*#U_LUDqPv~7#OudB@Ac;l7WL|D`+qX#AjmU01aMnuz)yRAObYM z#|02@O2+vhMm{KZ7$QLvyAWNVp<%Et z(D_mz4kJS}hyooI%gs>1FoluhzZ8do%zV%qWbk@phG?*Q=(a3Ks|%92K;j@%K{N>W zf)WsT;|mFAO@R+NN@XCgpAR{XNgvefMm~C}B0jw+zq9~!ViI_KBN@~&hTPc=AKp-B zWM%-Lg2Re9M+Z8z!O8$SO9^yLQaSkK9%ir#HZWNQCL!nE)PPUj0S|(Jbh1GVWMgIo zpR@xx4hM2F4?8CZ(wRu0Lvg@o|3J@Bf*hFxQ4cvi2y&DV*ks6E;qY^oKxZo@gWLeK zkqLBekUWx&V7Gy8O=3hFl!=c|%d7zHYD~;Yg$GbPDAS@0B;@780*~au8t_;Km_RWR z&H;~K#K(i919XlBoVSTyQ`LJ<~3ddUMj-U2ElKv@q&BkDE=_;?FQ9F%22H0TZlP>%#un!xmc z*q~ubkT|Fufr*3Ipk63Q98`|L#6fJ(CNhvXsDuC&M<6z+q=2abu|al%#6blQsA2`N zVMPVVEfkOK4Am|FC~XdM#&|#>4hm^d2s2{b3k>QdfMg+<8D&HTG$sR@{e#GXNX&bJ zLFoY`1HsG;ptysuK_oK+sMQ8yK``dMz{qJ3WFIIELDYgsV)pEV+J+#tAPn*=C?$f} zpwt5z^I<^Cen`a?YRQ7TxC0r-0PAyusxr`|0!R>)GDSem8&Llox^@sG586fu8p{FA zZ-V-KAT}tKgZAdY)Pr&tNE{S`Aa{eSYicl)KVFZeU_y0NGUyWrNHExmB1QGOYlz3&aM6Gzc?7lK^OP0ybs<%HgoF2hdCi zj1B64gVu9{%mcOSVSA%Mu?%B_`VlZTXgm&PCdPg!kO8oL(4atIU|;}^bHMb1?&*WE zLH>uaL2KY(Y|#1WFgB=B0%L>cy`g4;*0jOg0P07>`~uno$Oui|ptWc)HfX;sj13wW zftd-~OABM)2ep!*=7Z+uU}@tkk~k=gV0MAh1dI(Dl7g{8xdp}sjlICwp#Bq#jU4{S zYdAs8Vwf7xK57^nG$sIJgVq$n*r2rqFg9o(HH;k&O1q%Kfq?v=$j?tsReK;Z|PF9)$ft#;7a z7a%q$-+(5x`6=12IU=Q=slC5ya-z72NDORQvs+rs0j_a00txuiU-i%Mi3j6 zW5*QoA2d%pWb^JkW5C*vqM5C`$I>QAS9|HLU zHhrUiJnVEqBw8j?QJoI%+IlK%EptXUZZ~@iLF!RvYDScsKU`Ry@ zC=e5bLFF!p2IWh&Lk03cvID^V_Wb=z$3xaq_aK8MuxZM9FKm`f{HdS1_qgAOD51QnB`Ie z8yOe^Rvp-op|GH>*$otq2b2UJbO>BfQuxrJAZ@&enK7*D?}QG8P8I@doz);Kry3Ivs6u63#KgeBEC8B6U}9kfEe~d`1KqEn z4iaJW0o}Kk!U(Ft*;$yqK&?X#P_QxkOadJM1X^Lv>0L13tNd}$r2WIo|fEJ*$ zg4xi^_{u;hqJZu<0^PyK&B(ye2D&5&ZNpeaLEOAwob2XqM$s}+dN!voq%!fFj-3-Expq_En6*djc>pxd5oL2L;g(9&8~ zI}lrj=R8Q<9>i8)5CF}!axk)b*n`q#7|8veASQUt90RKth}|H#6XXgXkeeA81wlJ9 zSp7j97Dfh6(D?}dOwbsRXW#|h*4V=u+ygQW9AY6LCIgQN$cRvor7S$4b`xtDXr~JY z&oYpe;VYq+@qtX@1SJj-21lwq13$|O(4G>07Es{uz6D+3$69;^WIiYju$F+B3_PIz z5Nj#edjG&Fv z79zJm@ivihKRW}1jff#gW)fJLgGf3^W-8+a(EN-DCyn&gdVsh|+DhAf=#-J08ctCqHSa*Qfuq*P`gDy7Y0rhoQcY)MP z@UVg`+zW~(86Hrb!+H>usuXxYbujB;(5=)eJc%GRM^~{jFlg{pfWr91IaUS+9iEpU zub+Iu%D`a27hjshzkW|l03Ps_dN)D6u@IhMkQ*L=d>6q3zDMv8sFaD}0pEA{7^FUh zK@3EJ5{Wp-KjI*dh=aKxaRz>t5>^HVCPt24X3*78px^{+03{bB4PY)*!%|iT1__WZ zewIei6?vdpA&}RRl!JuCp~^Ra)PUHaAVH{M;AgqQ$^a=aK^_L@EhY$`j}4lA85r0= z+qYO{8Pz~n#IXl+*hJ2OI1Y@U)-#WYIEdrS2J()_|-`2B&uh5hV~Og%K37EFx{7tLsw193GJmAVbr@91)RN5GS1x zq+dqlHb_qf*lraO&}K2#Ot3Nyk#dj$SzwNVh&jlK*i3VSh2dYIRK{+3m0T*z>&NwFkbWa}m@-{_KIt59{fVQA9DuNO#XaGmH2(;rw5u}hYM6M{c zgn>~FWCmz4k6bR41DffU%ZGA)gG}LP0VyJ3mJc*J$H2gfyu_Fd$^qYY#EyL15eMQ1 zBL)WKWyGGs`rHf*+{m{b@gUTKZaW&x*Bs%Q>6AvD>6AfSY6QAqNEV4J!N4Ggy5t%Z z9}J*D7e1ZV^X)NEs9hyZPV1`Wg_UBCm=1hRk$tPNr+sBa5) zEvPdA>2!m-6JQ|*kP--sfk7G6#AS#DExadw6*%O$bt=z}(fW2Bsw`Rucdo#*x}aML zAd|ZBpn1Gvy$sN168L31NZ0Cs`Y;Tj${)1b0J?0QnUzx#JSPjfp$2l73Lkhrw;ntz z3=x6Mz*a&Y@+c*^N7{RtO1@}kTVQ23YR##g2$ z7BS?5s_l5twg(1K5QFj08=%8|$4qh4qsV(qbv4Q124f1Z%KrEfm)7L{;Jpp!vKDgWh zFVQc_jmLLqMtp7(#x)r6CAsmr1AgTNtQrT=u#rDdWe&R507Qd&BcKW&M1$l(Bjcb( z0B95u);a>I1BruL51<)Dka|!v1ttz+gH~LE)PqLdVdj8ZM<9J5aZq~)rXIuw?Z*I# zgI4o`%mb+dwOv5&0ExpI9UyUh>o0OLOHzvxa~L4ECzOEh$I%0qJ99iG9MJr$b8U9H8LMG6N}6j1Mjm1iGWgo5NN0e zkqe;>3CR2wXx#xQMS@Zbhz)9)gPQFyHfT*Qhz)86gXT0rds;x|f*Q&oanSNmP$~zp zK`9>OGY}h;nnB}cAT}rkgHkJq4N9G$5f2a>BnC1Iv|!tC85C zbKha=4tV(GO@Cg3daEiGM{BX9As> z3RT08#Fjx~Ya+4Dkl3I(OPHD9vtXg-fX{!0vcc!SLfPQ+U!iR9`L9qm=zJiUIpFhO zq2l24U!iR9`L9s+B_ub1&w_=DgU^D6vcYG;LfLGfb5)^i@L8}>wmOnH=u91$8$jpi zz}OW?YFd!k6Oh>8b6%llu0Rssg2X<6#0HJR!OZ`IBrXCvV-;$S0uoyXiEV+zc0pp7 zBeD5G=chu=kw#)`AhAJrlEd8Kgd`q=#Lh%wmm#s6k=PTE*z1tkyOG!@kl0s|*pHCd z-;mhMpmS28?iWB}%ObJ0kl3I*)nR^dK@tx{V#gt|!Dqoj%?F%U-Z z*m?P&FazyTgo%UZM__Ew=q`*6I#&Y52F)45*w>Kk1=VFRaoAb-AoD@{dp!3c_;-GdH=v*ie8ejDZ2<4^a67DjGp@ph+6gdPk6Xpfn2756X)m8iqk~AT}s1fr>&x>R{{4KzcwJ zwB87mhCyr)2H6XuL9=WiHq3o2;*j-YAoqd703-);A86ky%ncxYpt;&`kV8NmPt-37^kFlbE zG>}_i{s3*j1i2gJ4^UYQk^}M4*Q2cy#(q8-`g$}TMTk0(dC2S0Ks|6+ng_WrPlSO1 zbpHy74Z<+DgJ`7SXYdh)oOdP#y3i9m)djii6x1h1HZMnvfdRP}4>AX2uD-dY8Du>e zge0_n%*epl46?zM@cvc}P$L0p{TTW=S0MXAXCs2{)d8_V>+C@^vDnO!Ax)GmLK#%g zF{G(7M;J%BTytTNNp53gh;Vk_$}Mx)lBwp48+dz#60_)>APwaROzGbB^l_;R789x;iIufW*LZ zpsD(^tR2c-Q)en47Zq9|yqBeG)q$f2Aol38%6Jhhsf8IFMxJj5s?HA(izd`4ny(;sszIu-#Dtodvd#_q_#AmeOc zE}+@Q!(`yp>^aSlfkCFl!Ck;Xd9vm*MFs{VHA&5FiVO@zVQiYmblKP+b5DPcFasL? z5Ciuzon^kuqRIf?NDWzoifbP=DBZ)>EP~1yQ2Ganfr18I9F$k4f$}*hbMq-Mz|@N{ zGBAMJZRqMjdjLRd{2}57aP?D|7{IreLc|pq?0F%3dqDfQuYvlEhnW}{l%NGO=pbg0 zqnH@kKxd*dF>-*`wJYWMN=nQ3r{zF*7qTFu|5h zvUq_uZ*Y7AEv57Ut;pmM12KI;qL5WTpu-2aKm>T%BxpS;HwTM5sLtg9-O0iNT{hVa zvcL~?q6rHF3k!(j589T)0&3T?1cOEiSwK}2tC%8a^(PBEXu%*a=&)Z2R$b7!#yrPB zD`oUSOq6AlX&_OZ0NE{&}n%h4E!vhjUAkzm06%wVPJ-C`Z(9Ol zVqG=~x}68KY*L$rfk9*e$bQ(eNzfUotksO5rW}h1=#ob$heHH33JB%!h**I1z?Myd z`ZTQdjFsSJlc0mG;mamLBYW^=li+27EsUV`eeh+IYr)GVV?d^LFzy2{o4gG2Hf-6X zIcPZ^Y}sT5NTv^LkBJCqK#+9;;}LcS1`82IP`piKJjD)LHVHZwoplmenS;nNP)tu{ zybWG935o&MnT()d_YeW~P*`U%g2L5D1eCH_=Q66YF)-W^VFTGS4;%(hL>xd#Xg=d} z@Ulrz0l>NdY&2-u$Xb~SP%CgBFFy}Eb2zxPt4%7`}`~@-*bXq@aBqO*)7I^`RGuX08S5U-8gJn2G zR)M?}1J(jsHVINL3|ed(z?#4~mz{w@8+PAOeat))Yoi#IlHh<~>+b!5khD zbC98FV2+5$9#D=;2kVy+5e0Ez%O*i**MrvLGlEt}&wwnO1es|hf)`AJ7E)#gD?o;vXJBBE zzX{U03N&mB+E&TH&jRwJLK(=N%-|)iAVWc|F2*_joD2+#V2ha)4caro$j=B$JD>|MwAX+liyvHVE@x(7&`B#`U=#%# zd;-KxW?&QphyF8W1_s>=pmZt@jzh+9UGM~>1enJ(F+dNrzp99bf#Ek7D1u^`CI+Z7 zMnfH4#K53e$jHC|x>t#x8zc{oKs`{Oat#jygDF@nnzuxvh@qIlKvRQ}K}=YcF^c&! zV-SP-1V#pi<2(!udUF^V7|!!BFa(2@M=_V(U|>*R#K^$#3?vIWC?9mOQZ-mMhN*-> zl`)#p0F+pY85q<-l|3&n1A`uDcaR7#1H(+PI*2JM6POqnRC&QJV=e-f$^0xo*clkK zK(}+Shk^qH)|h9U14@ICkj(*ytRM>mgAzDobHE|X7_0;i*Bo%TGKQ#wnp|d}y@Q~Q zi=dRD$`}iFUkp<*$d%yKtbdG|fq{#S5tPQj1rE3pV=$-z9TFx9N;ROA02TxnIpD1U z37=?2wC~Z#UVPJrm3rhLoAT9%Bv9&=XGXn$X5>NsH z#RgargJBR00|OTe*n^!dwZu!W_hvU|>*&t}uskRXUp(83h>)g&7!ByP6mo zm?S1TNiZ;|LCpZ21TMkAppH2DTLWqwR7MkO9F(gCUkH!sE^Vkzkj>%@3_4JqP_8c2 zdmyd^1A`vSU5vsE4Eo5X+JKKLH-HO)gB2oZ2p0s~4iPkhA3n~i4nB?C7_JI@8ac=U z6Sx|%5CelLTmWhks7_{JU;qu&GBN~#C{VTnt&b0aFNp`K0gZSvG6aJt(Bu?ILGXMK z3$*);ks%mFfo7W^5+D}nOaexRU=Rf}G8n~3(BKCnLkNh1DF{JP02+~JWC#UOkU{Ow zjG^;EEYMIWBSR>Ng6Rx}>jVw0fSgH1*Mf`$O}8;Jgn%fJ@0b}l|IY_8Kn`F89|j2u zCI%1}G%L!;5Coz?2V{VP1QD2^1_k(f8HOMb1v*gzq5#AKohbo2vkf$L#t0hH0quMM zo6Eq!0MZFwWWx{)qJ*Fd5P=F(02)zeWC#UOAO(yJp)l>B`5%xzMqJuK3c&XPFc{1S z(I7Jz86rUxsJ+X`5Cd`|nyH|M31}xRBSR2~vV%Gb;a`vf@UkCX z6(d6shyrbSg@gu(RSQ~?!w>|bKo?FiGDLwWP<;qd1M?ZkkR-6$U=Rh;3Q`a}AH)Jp zZ89->@h@v)|7#Uq8J&1L6ib`mqif^hz3>hj0~WO zOt6(8`#@WY85u%A6v#Lxh9UtF%?>sz1Vn+%134pPK8OXHxnyJr0Z}>-lLbIDXtN|l z5r_q`Cj>;ne2K^rAX`Cmvy2R(APS}ck?@Nd85ml?_J@HekOHK=Dxl6vELb)OM1fQ= zF_bBQXwbe)CWa!=$dMn+~1@Mab8 z))Zz&=vEfcCKyKWRu;&yh0LHWD$L-GDv<3j%-o>E4nbR4KnEhSf{rI-g6f6b838(2 z5w__Cx`hU$5`2&$%p8zP$kB<$NOm!Cg2bQJfsJE>I*uK@lLllcBh)Fp42;a>oIDJS z%$%T;5>ZZ2WC!blIS91(2Xa~?6DL0dBQxaOMF`2r2{MNnd;%m)1Y!#)2-v{tYr&3# z1P6E*5c9rzun=V95JZ{<>af(599bp6% z3)t156DygZ?iB%F%mH#~9n`NN_cDR^6G1G1xD?_nh)50Ci7*k6dWagB<3J*HP>+Ga z3^X{w2tAXMg;Nw91EAg5Oe~C07cwxhFf%iN;tRwAor%eU!v~yT-5?)80u7eXK=!~y zAZkFafFuwWkZ)i~j182;7{T!YNsRTN1PFB<%rsD3Lc+2N94e4gKg+>vPA~}$ZtZ&*n1Gl0}FFf!uVj|JK-1KKN6l$e(S+O!j2oK^rjcQZRaF}bibvnZ7& zJGII)QuC5i87SSbm7AKIoKXZWdx}$2vr~&0khgH9l;-AELUsWWyO9gU=kZ0U$)!cb znPsVn8&F0!cqwG&m4HJWyalU>A->4Of+0UG4U~w$J1^p4RY80a19bOSVoFwNF+>-1 z=Nu^6K@T&9@3R6KjB`^M!M!?&`X?S`{}?EZ6jU;lXXcfFoCvCo7~;Wu3XB-yNEd>&}z z6r8s6^KzgiBZ=GEK#993H8BO8rU%6iH_*B|P~#s&gO+N5*dPqs;Ragc2I?@tXjqpX zwDt=$sRSAW0EvOvpw0zIFNhCfgVz6m#6e?&ppH059Mtg!$$`W{_hW-rD1g|Y^`)RL z35X5qiG$72U;y{ZK{Ep&H-Nh2FmX_i8MM9)Bo11t0CGFX{2tI9C=3kXBMLyn^Psg} zATvRIVbFS95F51C7;FycJTnH!8bXjb_&iY1aZn5l44^f|AhSW@plj}6ZU%LvVR}Jq zkewhkpw2Z|T!VoD)Nux_i3I7l0WD#Gx(C#QhN%Jd2|>I5Kx)FFYCvX1GBSW>ioos% z&5gst1auZ8j19hn7V1t=N7))`K4|SQ*n9>C1`r!GvIBD4aU}CWU0qNdfW$%Td|~QA zY*<+FfX0uZW`cUaFf|}HXz&=M7u30iiG$dnxB!XkgS*I(HGZIuF)V&TL+qeEWgs=6 zk#&&2L2OW87i^9O0|Th{3UUKT4%R6Jg$ceLj76ZEzlPs7Mo?c36f9uO!tfEalpV|l z5zL^&4?qkk#=2{e)sU&H{dccINcltwB1L<&#~0kpFo z-ju=Y{D9hv@n8#)s_l4?M%1PS$exTM255T)tP9$KLe>Ws$J1m)YLJ4$2)3plR7b(s zptB=kY*3jFV}rtu5wvj?w8js#z8X{zLCaW1Q04)hJO&bnvOz;`jG)142FUttM$kfF z*qPX%LXUxg0d!& zcM$=|I_M;jdI1LTy2pGd8x;1SQ{g~rK*0iP6M*!BCI&zl#0JF`7&Afc5C#PkNE}o? zf#x_sY*4!av{wqo2IXB48{}Wmx#BQ3=tdNfU7*kfvALn~3)&|EQUhu$fX=%Hu|eSj zS|S2c52|NDY;I^80PSl6sR6YiK>Hm)Y)~5lbT2lD4GK>XAI1jdRS+ALN54SNatE~) zK!rNUd~lt{$iTo2O-rERcaVBeTLE;wG)N7o{06aMYCy|vK;od}0b+B5BAkJN0aRXr z^n%(AAPi!I+6~drI0dy2KnD(i#6j$AkhlOO&4Sq6&~ytLf(EGpr2)`FE0A5FHVlZ( z4NcFWfoPB#P}>4@Hx@_@D2;>I+@J_$U|^UAH6IjLAT~EN&4VWDLFz$iAH?PcMJxjY z!)B0rCI$vjyW}F24YK1plnrWI+=a41?FrDih9Gl5U*EP&)>+X9>gx zwPQf}8^#9d2k8anGZ32_6qpPQ3|64@$;7|_YNLSe%m%3ku|Wrfg4BcR4iK9gnjagX z>Ot)o&?r1eJ&4@}5*L8vR}h;UnrA`l|3Kz|Rse$7+|c~H7^EJQDL@GnwC9ZzG;svU zKf;`lyaUP$uygxCN^3BNIj@M0NN`C zV}tw&(hF**fiO%j$lWl#pnd{KJ*e#fS~vw`gRZm&>5XAvU;ts5UeJ0fm|jr+1gQtL zGeGqxj1Ah01JVmx$O6JJy~umCK=y&ugX(C|ndUGysC)zI1?6QBhUrD#$2A2MwoH)r zCFtHbkX}&T3EGDQ+ouZ3Z;YTuEOb8yj14L>U~Ev9gZTxNtU>00;sO-@urt*`;SW;} z-g^Z#6I5Qo#6jySk#qwgwX06p8JG#P&yG#~`sYk=SKO>}DkP1SIx5B=%1v zHu$^%sN2Lr`~RVA&{^g%_s1iNXCtveXUW6VG$V=kg4m$J3~!46yy@ zh9EXnuLp8>(g!hz%8=3t~gX*C4TX zA+h&^*iiLnk=S=YY^ZzwAh89w5pimU#I{Fbhaj{cZ9EF|_O5F6^Ay&yK! z4F|a)VFGGLT?dIn{dEV#hN^#s#Qp(dL-m5f9+nQ}co-O9dB+rq9fHIzMq{fV!uaX^YJ3=6-8pJA+gPo*r1vP*4_j44`FQ3xHyar@-~bOY7@fPpp|DZ zHmFSwV}sh{Fg9qvJd6#xXBox@-9H3lgZjNNHfTu`j19UL0mcTk6=7`9>2NSMs9gj14+}3dRO4;)k(eZDvpyfcBBY#6kD2!`SPfZETPlP}>qF4!Q>!#s;-B zVQkP?1dI*Z(+y*T?tX%??;)89YKy|eLH%kN`!kZ7??`M=8x^JobRP|j4Qj8#*q}9g zFg9po0*np19T&#dMLH|Q5Qz=C?+K;`G_DV0gZ3-H*r3fapbaMdAoP$W>N0HcPkk}WH*q|F0V0!N% ziG#Kf!o*)9iGM_5gU%y^sR8XJfU!aS3mBW784)ksNNgb_wipsy4v7sq4Eo!JLsgT}x>?lEoe*+Bo3-?ZJ^?yabssF8+6u|CzK5u_X6Eu0#XmU-zgL-4yt28 z{dbT!Xsjy@Dh?WB29*OKanKn_puRka4O*lP+JgyVgU-eT_3J@w&{$V1R4=HF4Js2r z;-K*x(3~fT4cfdm1F8npex3(qgX&~ZnE+A)nnwc7g@V|i@h#9fgCI6&yB%obF^CNs z*8!b52x5coz&r#s2Q+RCI)4x(4w`Q|2Nee`5eMC30ul#}X@klN5PLTR1H%KT8c6gX#s1&4b2CK;odW z`bAK2(74wMC>u0ZzYfX<-SPxFu>qtWG}gWgDh}EOcL2%;ov{hpEe28ps{cV{2#5_D zYX_ar2x5cw#od6a2aVz1gR(*QB|U+%L2U$3c>+?uj*)@k15_Mz{upS(KS&(ZcK8Do z-wIk=zygVD(2{x%D0?>}0|OtFy&p7w4`m-@WMGhjvO#SPP}u@96Lh=-=!O^&8+5)B zXxlT04I0u1l z_6W+ZVq#!;0cC^kFZ&E-gXS)NLD`_W3(#6|klR4>7i_GMcm(z7c%W?1e1!m%4ce** zYKJj`3TF@lG#?6OgSvm9@*O0MJWm0d>VS!Z`a3W-XbuL(MxI}w=ha(P;)@%55mMjb8|2@=$t_q8+5iHj19`?Fg7R;!`OR}>^*_R2DS5HYC!oA z#s=j>7#o!LU~Cr9_%qaP0!VBbB(??;+XRUXnrnlZ1IimPb_9}|6eM;55*ySGhpF#C z5(lMSm^dgc5`#h0fS~nbptcA|J!pOmRQH3}APnm7gJ{q+D2NT3Cj;?Sv>6yc=>s%{ z3epdf1LXtI1!*8Y%skM3e^4C`(gVUEbs!pa)*pxsGmk@ufdN!*gUkc9kw9`F^FZza znFkUB>C=KSKpar|gwmif1kl_vOd6Lu@Z26$4~WuXW?%sI>p^S~2H6XuL1+De*f959 z(Pv-)r9Y7SK>l3qg8d=6M)0Fz9eGFo4Vh zotp-d1DOXJw?H4BM7;{=&c2l)fE<`EOkg!`T-z0 zka?grZLl;C()dA*fdO<@EQk%lF!zCIq-4Z!MV)~GbmliGU&Gu73U5$aL^e+av?vaw z8DtnzSm;|Anm|tPgOG&I@H4bDHGya#e1_i-&;m6AXZS&#gO>v3bx_>~>R;ehh$Ly| z$j}k&%f!Q^E};oIR85mhNttz#GN^Z;%XQ6)5hB{b)zblEb+W8w*~<*!fzM-0WN=Dk zfbe-ZI=MQWS1=1~R0ue#@PLB>Zh{3@PcuY~1(zk01|#^)zYgI^5^U|60v$VgcC2MG z*sQ?Ab7=w70}f=TP9BtTapz*} z372VcXXQFmhH++}FX+rZg+&UR7Dzz!A)VKEBtj_!?YzE8Dw6Ck`6h|5O@GO;=m_j^ zyq}Xo*n>jYESWroG+PWA7%G)4rx-FYWEyoiCNeNsF5zMBbZRi0Y`MiqQP?sFbWom( zq~;M_7WT*7)1M;Dk^R76*2qv<=;;_4n3)K1PKD!Mrb@<&z_ZMif)$CCiWP;GhR{>< zKzRz+nR!moz8wS78F-*H23n5;Inxet)*UF#f%?r5am1NFoG5XbifK$Xbxv$WCM)>Gcj_2hBBC#Sj|~L z*9^0R2DcDr=7H|HW#V83jUqE~urC8y4k``cXXedjWMF`vnFl&ti5YTc-g@LS^Kw8N zr~iUZu>+r($KnjS0Tz7KE*q%BigbJ)s668U9p2C413EUFV>0;oJdh~l_&iX*nF~aK zkIyS%W?%pvp9ebRisw1VeCY9c??G%oP{*Bxfh7{e@dq8H#R6J-%>p?-uNZU;k{GDX z$;84A8XDjQwY4NzbwS6g@PN**XVnKWQI5~M1Uh^PdVC(Jn*%#OPY-n35?CC1d>*K+ z2|7N{7o917n-zL|o+HSW&|8P+fLsPUJ`c274s?7TXe5URG>pXR31Y&I z&jYa=1l>Tc@Bz7*fl;uTk%58LAH;zjpO*?cJ`WTF@(jFFAjju{ZViTnSO|#8z_SwM z0O;{~pw%F(VW6$n96ULoleoh7Lyyk`nZ&t+iGcxx!C?bBK5rjrgoK|36ga%zEa2nw zUV#Ei803-?5EJY1d7xW*Kd=@tnt_hb1NF?{w+@4*09dOTvq5Q2WERK;5Dtfk1%ksP zvIOL2wBz$yz{lq;0R=Pc)?ttb;m7B#1L|ecolqno(RYVlfcRxM8ZHa zQyHIukIw_e0P9RfkgGgIKnI7j&SC_GtB(k%*Tg!P5p?3*4H3}tBG!4}FnA)82QqCw z<0tU(c^n|l0Nt+is{zFe^wwd}Z4Ic$=YhuI1$aOs zWw7J(K(~6Z?gd4Y3=e2j2zGp4I4Cj>PXr&I7YlOK(F5S)^S*;Z^28JH@p;=oUOx%C zNEdeNFvxt^@p&Luq8^_II>ny#A`2Vn*5PR&y_ZCgj?V+>_22=`3c+q22KC@z$LHCD z-0%Q&aAX8e4#*9UK&4C!k1I$V`S?6g@p+)+f}{b=g=zquhbIBj#m_PwbTl65#4(W9k(7gkz$Y0o@UwtUQUn_b3KE1G z27Z=Tu;cSU9tP(v=<#_fp!4ZK*_VNV4Rlr!t1P1pXdK&?4RU;5D(I{_aOtPa2x2pc zfDf*N9iImpb7EBmCnV7Ed7#wA&jK)lApJ5TpnI`dVaMlzZqa1T1S`{kTd6VXC+7{$owjh`3%zUKz>L82{NX_jY~lomx3@Z1yqoMi~}o&7zaM`4`f_6*f<5y z`Mr$WK*oXEprCdy};6jrVAQG=VlAX@RtzWPlnBDl7D18Vo>28GwvY1uY=~xs!oG6*L0| zVj6IN{*Y3E^J&;qU8dJnSe5hnu! zXevkREhhs5Xl;e|53uWX8A0otf^~SfAln=CKzpG;j<*A82k8QBRsib)GeEjJLC0`| zOa>Jq`Y;U!Ad?J0=BOTGU|;|{iNO%GwIhxP*Bha;POhpXVydZBPyB;*}26nwMXjLtH3=_DFfOfnX=j8Cg z68LdY0tc;*Faam<;l^7#Kc6-8<0%6eT6# zJW#~IVD8Guz#z`gz`zR59pIB9&BGWO7Yyzs_57efi-H{bXbf8H!X5<r~L6fU6tpb|J-{)57WF<1#4D*r*D0y_2bDI){J1bzkvbX>tYPi_PS21EvAp*Tn@ zgHWOxA%c$c6K7@c6lP$MPy>OUBlr|TK}I1q2Z`xU;1ddA$1s9UMigfN-7)|<1=3TP33?18_)tj5A&n}~ z!w^A=B^Ve~JDV68Ag3~_L70<4r!s<$VT2ymsDX4?qoy9Cp)iWwTC5C);KLua!3+uT zX^RjMT@#QL=!8XXMvxwm$Mqph1_lF=Bm;vX5$3`~kq$sa2*KSC zY7E>2+a3g>K;xN=44~ODu!lji;1iM=fzoCV08vLl!>0@-3Tz<81u&;bfeplfnThZQ$V||M9E=PhAPS}c5p|-B zp!3lg7+4v?C$miEkzj<}z{CyWhD~M(oy;b& z1f6il06lGw4|G-?Bj~6-X2=1F5Yij09%2G3*c`ALm@WZ?E>5uCFob%T8V-;eR;W1W z1U+0PKx|9`oyrGyGw1|D*eQZYXa5O<%mkYQb?qGnu=m)&nwdCd5XS_vLX;w%5eXK7 z9ma@$^dS?c0C7hj!o0@@F&}jBBP00eNZ28NprZ#Nr!Ye7LOQJydPF2d1R@Jj2|H{N zq!)IwBZ$okH5qikA;f%$UeGauj4+olgIoeTZV+_LApp4M3I)e5vgN|I} zr1k-XY01!IK)~mIFo4hHU?>J1CKq4A07?GP!#dJR^O8$4^YcJwz9p8VR%DhKFvOQ9 z7nS7aCdC(*B$lLtxW!<8F;pNYKQCPYOrV}gmy?tRvVwt1rxsFrMqxZS2SQI2!#rdJ z>;dpudbtHfsmaj8?ik`Ti{q0k5*gw_XRPKi#3$usgFOW~#-xM+bbLx$9s|L1_D~9% zGz5| zZisYBW=dvWW(fl*3gaP30+y>l-i?QO6cjU{V|H>fi%S^def*uh-a7r~6m%!eCP9AAQVoFT{_kYkWS5E5G;&!r@SPOU2jhh9AR#K!pC zByeU1xhTFEMTj9Dbf#&1UTOurXaG42ZZ}9vZW2<0%*;z>h|kPRL8Jw64G21>ls<xqU=>_#pVQN5~L(l*}NH3@-1QQ3b zL3>+3;-EbWAa{Y*c!KsQg4XVV%mM9Dgt0+;6hM6okT__aF^mnGjfUw3b=N@mg@e?9 z)^mdGVt}me1g(PuiGxN*LDN1UHfT^3WIu=v>KuX9YcMc?x;vnCIUqSuUk5A>BJ_$Y zb4wDF81#xuiXe0bj5T^*9|Hrn^ZG!0he1IHN>8Bk_dsjtLE|%!G{FqI4jFun1ZW}! zBo7+9MWh+fNDxRj1P{gY`at*ELtGCz{|I!ZB{CnhM+=k}K>LP4=iR}_T%hOUMZ*+B z`Jjm@m=I`9CurXlGQSSSfvN|s!G#Hd)PwGuL+0;?aiHo!V>Ph!4{{G=)d55iNIwHo z-L01lYNkPsGKM$7(_m#FqPmB*OhIh}(9yt1Mu52S#gK9u+7LlHLYVw>_aOBSW-AyX zj^(I5N*o1!IHOO2gQoe8&hf78XrGh-B>X^U9f=4)&IDWv6$kAD0PV2?iG#utG$aht3#*Sn;-GK^ zg&XXwJCKzyHK6hvqy|KG6krUtaP03;4F8^ng4jpqeA-wt}_ zABYW856XWaGeM)nApe5&g5nLthN%G!EyL7+MuS0WK*0`T!_>ge>I2oAogllI7#Kio z5C*9S#W{!#Qx6*31(^vN!Udf}08#@=3m`U34QON-rUo>M3sM70BOo?R4XB&}iG$J$ zhz%15oe>Pu3mS$6?Pmn30fiHY4O0Ue!-c5<4ZDKWfYKL;4O0Uey#$Ga(i(`(4e~ex zWJD9B7gWE4hCxAWQ2nkAN&`#`450d5AIb*R<3>nqdk|Xyaz-SG4Lc(cG`aG4Lko2G|CB518NUMLCpcBaS$7J{vYU`ACO+q9xV_XcIF>wo)shxO8X!- z?99J%kU2~Y44}3I=nMmp`5-oE-6cpp=$tqZ8+H~T=@+U0Z4uVv0>-){RD}FHVA++0|NsC=zKU(ng^93AT}r+f-q>D1*8NN^ssUX zl%7C~M?vDCb{C8dN(UglptuHMm|jr4!t{djCrCXgPC@&NVQf%d1?dHegD^}lsC@;~ z3yKerdQe*tv`+@c28Ag|FDR@)7^W8#7BIb_JOxq@Y7fB9)dR6X`(8kLK?^rP7^WAL zCt-R)_JQ<*>Q>MhaxgY2=jws#LC{_okX{fQv?XPvo~sAC)f{%74QOR3j18L4g0Y{0 zrih>ozRyT(&>_z-HK21!U~JI7W*8e(U%=R)asb8#l?yO7Xb&=s4LVyK#!d!J%s}nU zM`F)KVy{GEgZB2q^n&*7!q}j7Eim>?B=z8V3#j=Yk;MNZu|b#A!}NkK>w>XCXM4cd zpoQ!(wl!#PAJk0HQe&7nXkR{z4cZS2V}n*sz}TQOIAQE*Nah?vVqZdHgBNW;?E;;L z0n_^rNe$?%3z#_Q5=t0b6}0#as@DjK4O(dnQ{#gq4%&AP6Hh}DZ$M)ABC%&7u|a1` z!1RLlg~Qkfk<^?+V&6t$zd&Mx&WC{MWdbb*gt{Me!#GSFw0Q!?)u|a#CVQkPIWf)rsv=RyGW-TPP z84}wGiS38PjzVJhBC$btX2Z-k1g$cJns0~1_C{hyAhC;(*!4*49whcmB=#~S_7NoZ zMI`n;B=&10_75aB57Ieyl1OYdB(^aU+X0E~i^PsXVy7dqOOV)&NbEi&_G~0J^0|5} zNaxS-BeA8B*!D>56eM;(5_>Ze`v4OAEE4+`5*xH^0v3-vpk;;7c$7e5>m#wPk=X7? z>|i8z8WOt@iQR+5UWCNnhQvOB#D0v#W&$k;gt|=}iEV_$4n$(7A+ZZUY-pdW1bRjt zsNK>D5(hQZ85kJ)Ky0Y_vys?KL2Rg+tspkkoP9{_V@T}tNbDO(?9WK-?@%{@+Bj^W z^WLE5gYI_*o%sfGn;Me1F^CPd*BpAD9H{N@0uqPn^+jTbA+h6;*eM`3)SL_?bIOs# zn~>PuNbH43?Da_O%}{ed?W02=aj1JvBeAa_v0o#xKY-X!_k4kx1L|9V!T^Lp;lKqt ziw=a-=Yzzd z?pcAvK8D0T4Pryx1G;n@)ZPR2Y3_i;p?aSpu|ZdF!~FXlN&F9p4K;^>7ve9FIsBmW z_MqZYNNi;!wha>74aA0~?LZJ4sy7sBCa6uD1rmq4Eg!^&s;>mGq2hHQHdMR=#D#d?^xp6B2tnhz(VL1c`kK#D==<6B3(^4{>&*JQ7<2iEWF-c0*!EBe8Qq zY^c2zAU4#l8a_zag4*QmAaSUgi6A!AFVjG5sQ6+e_C^pJYR)bs_C*jIs{RoY`zI1x zf**0VqAn8K1Bo4g#7;+I=OeKjkk}KE*r5CaN_!w0)USiFah=5o8iIkT0gZvc*r0I_ z7#nnE1B?w?Sr21_mgBxXl`eGn8xuAY1G(16T&|qqi z&s^+6QUf}}8>R-dRv*SjK64SYbRQ-T8qKgSL3W*r2ujFgED?Zx|aiCjn!F`YbRu=uQI| z8??$B#s=ME0AnX2oizyB1ppHVjXA*Bps@xRyBA44XpaC)d;yX;XyHCg9CXGJjJ*p< z%|0YHs2>DV0~)h{u|Z45VeC6d>Om|1VdBW=BZ9^&VB(;@5{wPn3jkw-Xb=XaCD7IY z7#p-v7sdwd6o9co=bypYpp64CHt5VV7#p;@AI1iqH3VbhI{OfGz7R}JHPU&3O-O9e zhH97^&~^bBdk&Hs(7gvR@#RS38B%6m6_D7t&N2j@Lk2U)8%aH=-v<-VLJ|j^F$NO{ zow*KUgLYBC*d0jfL1&D?#3v((&qiX;M`DAvE5OumMiK{|D+Uwaha?Uj&jD?~fzExv z+8&@WG?;o&dWMOE(lF>uDNtGkoxufSgJ!5eeSZ)ev{N6Hwn1#r7&d4-G>8qVl0au| zf!H9k)j_+ZnILz$=|b6{u{UEV8#L~131x%E*zBQfQ2Wyr$_6cA2Bm+HnV|9MFsL|a z3=_1|5+n{9KTC#+gW8{<^bZmTjgx`S-2$;e?Lg3(S|B#4{05z)1!A`|Fff45{sgf> z_t5o1%>j)`gVH}pd=Uc!!+fYXXdHSelnrXjfzJB`sR4~wgVH~U4Qh{VhpGXMJ@19G zLA!enL)oDDC(xd1kb2Oa4OgM!pmFHiP&TMd^$5xajaP$qCxg_3+C`v^uOK$)jJ=;w zHJ~wP&>5c~anN`(XsiRo28}<1&h-SbLF3J!aSsq1H0A_4*Av7BjV-G{&x8YwOM}iH z0*Qm}sxg3ygT|6UyXrvVpiMfUGd@9V(72QnR1Iic*#pW3jU|KbA^@oYZQB8jnSj`! zG3o@Unkq&H22ef%iG#{}(7B!j}~eTDd#{Dh{eEVCVLM=43z{C_!o#GBPm0&g}zju!No42b!yao!bXmb_^Py0jUQa zQ31+dAU5cXJ=nQ@pfmPh=k|f>9MIWGAT^+Q9?*VY5F51Y7I2=W0~+T6nF$&%hn>|2y5|XYRv(Bh1U(-Pv|9<3heywQ zV_=}xd2gWbBnE@#tU&8EKxHpTJ!ozLv@Qk224PUU7es@mAVF+U`3K@(&|+W!R=O4`d#w-3wxaFvwmIjeaIs29alyfy$b>(0&WZ9GG38 zxfYPwu<*NMz`&5e137yOR5yX-K>h`_>tT98`fmy`Fo3qbf!H7nlS4m~Oihe|0d&U+ zNDTB>N^w+?ix+h&+=_Op1X)9Ap{DaiF;f zC=FT<0TPC}?}8Hp1E>rFr327B8b}W0KJ+umbmbTrUcnL>)I5-%(a$6kS0(ODvItek zd^pru@Uy|t&m^0mO5B-bE8K`XlWc}60|V%k5p;V&r}cpR4hxqpZV+{#Z~;v@g5*Hq zf_^619U{*pJD|?M0BQq)@-=A50?0g2c!Sa+EDwR)^gxq=0aVw6*dPoFV-TH_nG~O> z3tl;*m#?p&K=4d5BLkw(BwGXOFjL`7GLSpX5*a{;YY7}wfE-5^%XP+!4V*vMGC@Rq zxz?OI!MK-sEz_li+aN-=T-R7 zU;rJY1v)*;v&C|WAp?Wu77%fyJyl>WlfxE;Lkk!#Er42Wq#~)y!v2`gNQ7!b}v#^5>W?*Jw2c7)N%*b|>fq{XUkpol~F*C7(jyq@OVBHQ9vbS5?n=%8dK9?$_7Eb`0@49o(cRZz?>1_ovy(6wsppz}PLeL1ji4BS6JR{DV|9u@|cW)R08bec5F8PLA4U{K}8!@>fZKVlUFolL{b!VWqlmlt&V zp9HIJ0qDX+&< z1_96*3h3l2Q2&K{C&>MtASMH7Jd1(V3&d^^^aQ!W2jpf3M!_tQB7YEvg^_`SlaYY| z)UOA}fjk2*59H*k9wr6`Zg7Z&fS3&2dq9p11zF0%4Vuqo4FjD-&cO}pm$8O}BDjNr zp9N$R2k6Wt5QZAb&jLE*N{F8Y6ga$~J}C!lG3W?!ZqS@HYYB+S0AAX{S_(Fwfu9AG zGK4`*RnW;*pktmz#6VssV+1K+5CJvlS*saC!6#RNW_+O>4w0)M&p~8(M7D$6TnpAC zAOh;}vDPz!j@c0r0iPSy2$qo$0Uf!_+6?B%h=ArnSz8$AvobKiPp(=7KDp{5$g~c| z&ES)(K-1N%U0^*rBA|2OS$n}80};?6+pK+HdrU+?Jww(Bj61<6S9OBoZ6f1-@X1x6 zvu0T*ft5LkSb$`vGF||mTm^~&)|rf;VD}IK4I8q~Vg!Y&kBAn?b8{I%S9#qK;RkW% zfy3YloyRRgB#SRV%-k1nui;7L=)={5Sx!LJ}HfXbtfo;3vh$hc(CpQsh8l+043VJplFie z2CXq*JqSuw3f$nMeh!1q1ybR@3sQ4*73kzDZU#_Xo;U|Oxr%!R$m=Ixure^fPObu( z4?DREH$I8Iq!d(Ha3qh`kWCWMUBELY%IST5ewV;TN2Fq}WfKC`@jR9)`om>S{E(|)L3v_bTB+$uK zpkumNlfmhoL1Yyum!>d+B9=u2)Cpis1#@^rK#{_l2Ih!}=z(lVX9Ve&5vc=tAOmc- zipXk^Lo&h2G((YI6#pNDl))v z0y?=06atchRd~%fuC`P1$ z85tPZS{V&NEjk7U22cZmaSn(l4cctQSPx3GpbB3GG*rS^5Argo6D6YrT0sHkg4R0A zf(}|~0cit`Ov$D(Ft&nH9H==i2VV2g2I4Y?%7KbuMlgqIVt_oTDG8dc?&1I~HH=}J z7@)uy%~Zmmzz9B6MIJOgvXPU4VIEi>B4*0KzyP{>Z9iBnmYHiCBS=#*Op_w0E&Pg; zfk7U$IQTMu@CD=mak%kSr(2L9vWR z3ZMgdK<2|8r35Mkmn$}G>?FCCmS<3MKKC8s`3eQGxJIFfey(K5NBXuQeoicw&MmJl*SBY z@-Z;5h%vy91z})dg>qOyrQ$k!;2 zG7EGsfhdEzBm;vmSP}dv6%nW+=s_%^P@|z-BF<%jAI||k!~+yy@KZ&kS>f(v5@%ol z9npexY>F)EAtQ3Ahm6Q0A2OnVbYO}iLEKWwDhGJx*N16jcUDkeait{54DKoqEJh3Zn!>R-s97_|3= z)ByvT0J_18i2;0H0^@H!UIs=+&>6#^K?z0zJAcVMt)QYLHLo~PH?_FH(7-}BH789U zdVWDkVo|zoW?phmX-X<}PeXv1R#23mrH^5|ZkdTC=;#Ff^yFkrS$z{d3q4bPsH@2I zG1Pxp&S!v}%mCW>sFwlSZWdosS&&++mjRlxC@x7!Nlk+st5B4hnpXlB&dk@#09|qd z-i)f30g5Y_0?<4Z1L%}X1_tIPMn-1H(FshP;^4Cdco-O&nK&W)@j(Y1Ku!RF?fnPs z+-CxxW55U|!ACa0_V|NO8(`uDoi+eDlmS^6<{1JI5y-g&Owcm~K<2Y^3L;KO;DDSP z05X#Ud`tu6gaJlQULsBj0Pp2Bv4HGhhV1Qu?)hPePt8p&N>9y8u4KrE?k}R&hX457 zq@t4i@?_YS_3~uo;{!nZt&3BWAsfWuyY4|dyi-#Yk~0#E7zku3eaI+RG6V970O0MY z8Tq9}V85d7W@m_pY^McDK{myL5>q@hB#`#e!d(*&wgR;IiloB;$lS|MyDj{vyXYz0 zx=-C*`thJRz_vL*KCL)4H9NkD0kSO}yknRF9KG0f=|eZgff5z+?)>=pVzgcP;2329 zpJ@Qze-GI*jj;(I9%A5>7*E~(^zlS)oR3e=NlnZvEntYxO{^#f?dk>>T@3NXsi`Rp z@$t#|rFkU`@$qGekS*S+so4ziX$AS9a{=N(JM};*7joPM*c-X|DXEYk%+1VWz`0*O zJ}nPiv@*o!W)>&ML+y-*?=pmL3uK5-OaZwf)F(eLogqFwwIn66Bo(xYk<6kWqq>1r zcHqhYbnr$#4gB*Q=Z4I~_ojh#~pldon zdyGM?8xRefM*#6*``$tG8lYAYhz89;fadc+^BtgWDX7B;YH)$tOCUC=)dkWEQUhXx z<}g6wpw1s?uM~(4>hpoj0;cdK254>#%wd4+6$hn7WIiY@A@jAN98mfK z?bQa&T|YdeK$POp zW)HMP1#3qxPZ0{Cg)LMeR2#BVSVavfgQ3ci6hNz7Pz?d8OQ4=(ghnK&>|g|)j}6=Z zEeufrnnz^>1qw9WV0*zqLX4mSgn@wpymu2sFfcHHdT)%-z1rZi5SlPRy+_zyZO}eW z*j{bW{1$AlHmGc31T7S1fbL}n835XE48ly1J>H->dl8VM7#J8pYr{ZnklR7)!9Z+K znFrpl%mbNY1{JR$aZntB*swj*Ag_YXDbf_CZ;Rj;F_Wr{5WP{4|=}R^ORt7vd$iM(9n_%Lg zGcjQ7NYL5~s2Wgt1rrCYNr$mP-}Kj^O3|sQv@*a?MUK>k=W;v*te0`pgZqjdO_>uU~JH!1dI*3(;CJG-D3@7gVt`t z*hZjzrBJ_s?xBN;#~_J==H+1GB}n3+yXRrzpgW;qY|uOyj19W`8O8>!35Bsi>p)>_ z&~;caHWO%XDAYatNNgD-Ht6~)n0oL81ysE=l9~V{HfUWlOno_$IA|?1OdNEFI*dIJ zNe$@UbeQ-KB=Mt2Y|t7>n40@Y;%|`HKatp=RSq!qpwm`iY|tb>j2!}+X@UAH0f}9K z#BM=iPe5YNL1M2!VsAlWA3$P%Kw|$vVvB&*fk54$fW!vfUITL{Xv!JJc0p28j>P5% z?GuHXBaOrc-DU*SYl~%=&-AL>cNbIXf>_~~0P@IF^i2Ze!w;V(O6 zuN9~a7Xs}=1vLg37#PGsY^eJcL2RhF8i)-QHvqAr;-Jf37@=%$B=G&7QiJc8% zL*3Ag#Ga4D2Je@JsyT@yeh-Nax*i5rH~m2pR{-r*h3d5cv7v5o08rLO9F@u70(5+p?b@Z*u5Y&RLv$NHs}%&SXzCJB>owR%>~+r3e_uw#8yUP zdmynRk=UR(gVn{L_5_R#G7iQDElq>5LG?I{ja-j|+EOraP&*062DQgvY&)bqRjx>E zPb4;|4F*#mk0hRk#0Fil0#gH;0fw4L%?48gTKoe`hoJkX zL2K1P@$-xkayL0>`~h^68Au$|eg^G30kPE>7#KkJQiIr_@CKc~4Pt}lra=q4Ky1*o z6&G}`11RhTplndP7<3i|NDZhh47$4-#0Is!VS7+OZEQWLdQf``bdNPi4XABw1r-PN z4?y=Ug2X{HPi|20GSJykP&TOF5CmmcgQlXPY|!;~aZom>KLNV;8e|TrKam9$2eq|9 zcVL6Wdl(oPKzp!2Y*5=9v3 z50V3g2l_gCkRM>t6p9RwcGJ=VpxOMai8pPf0t;Em3Fc*tI z(AUwoXh6={1cfuG-wJadDBptI2g*+%_w5&CVAuog$Ab7EIS>Yw#UL7{u3DV9b@Y40 ziCahiMVx^Fl+HkQf-uM~5DglW0=X3)&YF-uFUTLDJ}yWO6waXKIWRpSeSgFu`3S@Y zVVE5HI(il@h&qsYpdk>Ld7!>DEX{-TFOeYbZto6B1_n_14$9XcGeG8n!W)zpkFC9*KHv2x-|!JCYq5}`}fb-83e zm@QFpi;2tpg|=gPrGL#NM#XB%?-vEf~I~U8~LtQV(0J4%&>!@(?5f zS*t!3bcr(BTJ?UAb&$2{d?2PTsK$dVv^>oKU1$kjt9}uAt@>$@q0qJJmqBdUTJ<;( z2eMXu6Y^Sh@O`1Mwd$Z1$h@G@1K3)17SM`B%(d#En;>Cp)j=BpA#5IQ(4j~WHZg0} zUokQ;z}BjRs&?2~bMud7!k}x_4}#dxwd$)u4u-B( zcLOcKgsxQ=1L=jWRR=9uhOboz4XChUS*s4(P{aybs}9;l!-{jQ`X?p^h91^n&`N1; zaEL+Is!sIvIcPa2bglY(5SxUx>Y%X**jn}7AP+*4BZOw$r@Q6$T>4B|P2d(sjuT}pA(gRzoE(_wo)~bW{ zlVV@1z6N9(Y^^%z*hBbQb?|C=*jjbaT3Yy8b?_>7*jjZ(P`ts`s)P0}!`G^x1_cCc ztvVY($cSz&9{K^uixVQbY-gS-G+s}5d?jJ8%ila#gUwxBqLu2o+E zavGMk>Y%nSY^}N<$ad&jb0pz%!D zT6NGxh^$!Fs)JVa!q%#T+DEL=wd$ZfjIg!ppgsMtwd$aa6(p`z2koQbXBm8J)x$xF z6uMS@D+|(Eb#PvWtyK>JMFwoGI%w1o`&xC-ya;@)I%tp&zE=Go$QsyMbsbO=fvr`q z0?FW9s}8!H3cgkyv`wECwpJa~w`7H_RR73oeN|?Y^^%z z&P7((TJ=?+jSaB1>JFfk23xCs5TpmTR^1ZBfvr^sZBA!}tyKs0%;9U*8$ih!wpJa~ zUWcz$2X#_uw^kjr*@R64v^1JG7PS37TBt3>4chk54qm+sY94^v6pVA$b1*PKmb^=Xf)^wq z16tHB36fw8mPyMkVPKR5Exl$8k(Db-En#4k1KGkDC6`#hz$mZD!N9;gaYMa4s5`0( zUOpZJUdax+JQup2oq?YPjhfz4jL8!8KeNd&=a+dMptJu(0X+?bWu6zj!Rk4Fa~H%Hj)^8O*R7q%8G3Gx@gR`*PtcZ(919pOSF-e zPpjZqJ`EbAVq^#cQJ{2)y7m|(5(SzuV+aCKptdxs0?-sDq=yM@ZbOe42jv_P22Ce1 zF`NTURE;i9##~DVUMEG9#mUf4Vlt?~4O-1e%JSsIqIAfrWt*hZ%$yS4%skKtF#~w9 z8)V@!{FXQwMrIb2yTU-LlELeLnVG?BkZZuVtFeGa#hLk_Y|uJlM(B!WF$P9vBsHLI zpNx$0DaHBm8Hsr*pqpbLS6YEC{sAu*E=!CrN=-*zB3zaj4_-AHPwX0Df@^r;ffo_#HwJ-Te;wg2E39seh4lIMp_6APV{7~ z0Un42zj&7LCM6c9GGM#V%H1zi!5OkLRzWuxlxvd{b8?Cmbkh}d{fi+uEiYdeT;_t7 zLg#@mMMKJ^pu~drRx41t%1fzWh|f(z-s4bU3cY&^ysQ_rG#gxC#+M|fGYse=U(kRD zsFeVsVS}6?K5UUMsQCeEU4UqiIOswv5F6B328n~(BVch5G4dASq68VkN6-=`P(Xn3 zNLYglnhOVc7L+7FYgD1v@_>ZEYiMC>ZejAE-XDk!NJt?TE47=9{G_L^@2QBpktuX{C2eG+9 zgAWW044^q;kT^&mh|LX}++bi}0IjV9iG$1lv0>^#`ax?CLFz&C3m`UVJ{yE#YY8Pl zt$I)%g04}8&2@wNoG>;hEI@ieYY;&grWZ8N0~$mJ*#inokb00>*g8ZI8#K2$x(<B~7+r@535U^jh>&m?>gy1HA+1Sd1FhYIR@UHk zh)}jXlDHNU+Z2iI0AfSyDHjgNnm$knMS{dZ6(0iw!(N^k(s$XGjkWv^Md0ifIeF_@3g{cA6r!Y3C zK83Nt^(KgbwnoP!W*m{x%al|?skbaOH zNFS&j3F5=d1F45~ML_0&)PZR9^;S#7A@|^c){}tNdw|q|%mcXxWFANiqz|;F3`D~) zNDjnCUvGs=9r}7JkUEeXL1ut3$X*Z)n!f?DVRCQ8iCb?4I!mqT(kLpcuvgBdhmf*b~uLtk%oMxKEI zv5#rWcO%x$+y;Xw(aqF#Sia^pmC`>>Y z7B1-Pt$Gw7>OkRwZ@tw+5#rWc9T8<<04+rTq z#0FuQ`(W#>N{iA{K?j!-T5n}&WMBbVa7Dy=D>Bb5HFIR>S=5nqCIfaPX(Ize`(zdi zp<^rzU?!`D5*rf(gw1GS)T9hPdsG;F_UPdV$fB#J$!vE#cxH4mDJe^`KZ;%i6F(-* zFvEE!Gf(G)83GM6mG8{lae1cj8t$gUF749nFbjE@G%vF;Gc+`a@Gz;*U{X?M)l^ne zmQ+w+x#QFXvPTeZp6myPnoqJHKxd$uIf9(@fP-N#6ZC{qNZP@*?hCYl2(rFQ0lw}F zBnIjd!^9tPBF-oUEi7SlWoBSV2gNc20|V$V9Z+O4F|vV99%W+W0I%L+Vg;Q7&&0&8 z23mv#Ilq*Ng&lMy1``J>XoWcw2YWIole4fogHI_1jS8^-VFIoE0<9}!eGSqm09w<| z#KHh^RV9gbj2|KT8TDXfBqWh1m;q+ad?(utsJd&@?*7OVCm+UyvvRC#VGg zx(S5~L@+Zjv9N>A;OFLGcK-@0Umk%LczJ>>XW#*yk;m*e59BHaR?tb8%>GwE)B2zb zM3{p?%kEh{K=b$Dbze*@?4V6wyr7feq3gbQq(QRC>%KtdvhbV*EmSZ7u{n4^8`N0A zY#yE;Amv~-mUUm8pd&s(r^|sI&cMJ6I_4d^?u!R}GM+ieL9}e`4QXbGGDr+g&dEO2agKK9kW4aBJ%Kj0(o~1hz&hgb1vxYN&%iKP5h^4tQj(V){%K{3S(x+pV)b@MK4r=fzv6nYvehzX6g?Vy-~#@Y@L8yahn z(@-I?whN>l8f$w&(Imt32IQ=Rp!BQ21G*8F_3%?x1_l)#(9R0hqath!3>rM2Kp}a; zf{lSeho=za^^-wtgik{S+2z0k+C{^95p<8F3r`?O@1+bj1_qSVPEKT5^<1!#6cbr2XjH< z4E!wjSQ!|Y7&+L%r=fy^6Rd%gje!A41DFfd0NPS00n)|K@)~r~DQKG!$m>YTK|Ch=A@PVO0euB+zN7pwz|B0y0w=G)fIxVa5(RbMy|# zWIIL>n?XbrlpF2A95xYW5XXTL)Cb@Z0qstOpN7f_5))^KI**A#7_|Nnw8AVBWFlyp zGkk>^cxh-9)Jbzd5er*k23~O)!wAv>KMmEKg@FOI!t4*o97T}*$>8+PAOc!c%_y-NCI@4pG*k@qcbRdflfG=1+_1A85kH&a4;~)fhr_MSCBT) zRXg&awrD4KaTxe8QwBxQ#;;jOXOtG-U|>)LWeU)-r=Oq)mx2YG7#J81aWXJ~hAp7$ z$>i5EFff1=f{r2uDPrJf@!?=#kh%==#%r)QKwbc~oEYbT_B?{!od9w-=;&}I&|>$S zpoL?g{S@I~+oG93=Z-3`1Et`_j5(YP3=*Ifc*^@g0!zRG$`zoJy<8WC}2JOM(vg zR6$;~W&=J1R2447sxAo;LOB-{>3C1jpaLU95QqZp(}OHO1F=9m!x$NYKon>pHber% z0$o$c$PfggK(aK_fYw48=TCm>g6b)aHY%0v$ww zBm}Yqv_}<52xc@W+k>1+MHhpd2-*?J$PfggK>Zq2FM*nmkWmL{*9WQh19I0hP~U}N z|L7V#dLIy403J9XYY86ggwW!Wl$^{Yv_*FZ85o(tXL!QS_GAJd$;rgbz{vw0hICRW^sPTnvoN_23nL zu(LxU&SGRkaSiy)P-aechyy@!9AG9hGXrQLAsaJTH_RTe>QYW221aHcko^!@W_GAO zkd=hoSWg>G&PYwpj?c`?EQtplVjhpWju3IeXncGzND%|{2+8u~BIFf)<;lfhelhgG zP|&&^1uy|$d<9;yhijoAsppGA)(6HzRuO>~{1Ceg5OUBJ=1Ev!w}PEW+Va4mwIr~t zBqucwvYZk%UgC>EM|H-hC1$5G#OEQckV91lUpfjp>oqYa9=!A_u{gOTGdC5&DM~Fa z%>f;3S)QE1P@b7r5?{gq4s&ehgo5m3h=-krR+1Z!>v&MG!{R|JYx6({rlrC8`K2Jc zN^;}LUmXZuIT&BW0QV_zs{{$Jj)fL$@$nFE<|Y-FfDYLNIT#$;p!H{9AqManzwvpg z6(u0CoYXvME{f00OJ<1A%u8X2PcAJgO3f<)1!W>=xi3ZMi&A?zVH&sy2QB)c(@CPR z&`3@!Nlni$s$_t;0Fu(M9Wjb$B_fu?M9Ex(2r7s0FFY(pq})SCkxYye_|8kI0LAU4c=(Bu)wEg&_ZMklD%3SzHE zvKO=gAJp~(iGwDVVCI0>FukCICShz)lM<{3dZ;O=YY379wJpKoAYybqB`6eNcqFW+ z1f2&7^Dk(g3^Wgi%m>Z;BlAILtAO~RY=}BH6f_CS0GXp^ghmFaNCK_-1lb8H z3P9&p8bH@@g2X|^0H|1liGzwHkT|G#0*xqv#6iUcD6BzjP>}-aw1U_mvq8lXj14M+ zKzc#LS0FZQ-6?1-3P=s87?cN{ugL^iHw#K1AaRg;Kx5e;HmDc`tqX;*L2C{`W`e>1 z#D<+e3hH@-)PRadPzM^s2DvjFWIhiAcn%Q6hMh$UI^zbU22@mn#;QPUkYCC{>X{fA zKt(I)3@VUaptY_bHtdX2(8vHtJ*a2}t&IS&K}98KHz|k>Dk_(Q%;5pekT5WS*f4uR zr#67h1g$9nvBBF;85kHqBjzHYfB{7e=-eq*$lN5zpP)6gASn=rt)T_E3AVNe6ppa9 zJ;>{YKye4s3z`uEVVGV}_`>v>fb3#|oJ|c1XOKCdJOo;sLhbdpAosx5uM%@6C^6@N zg5n!yW;Uow10^&D1_sdiR4{SS_%MtOx*rb4o{Xd(6h|;|&>$;}eE~_$T_iT>Xb+g0 zZ%E>xyHjA|qvwD^5;Hx|0p&nC7ZY@wA}lUIx3$687D#G9Q~ogVASCg4BsS>&b(oq; zB=I&R_GBdX0wnfYBsS=-beK6;ki%iFHd%&P+ULSOJ z4U`SKd=91tbj>D=9fqVP8Hrth#I8kRPefwxLt>voVn0G+ze8gGLSnNao!=>h#0Fg^ z3Uiwll6VvnI}M2qx?~ilz6(iw8WMXE5_=sI`ymp$66rk7RwVW$B=&qH_8KJiF(me7 zB=!R&_FE+OFC?}E(z;evB(@O}+a8JSgTziiV&@{UtB~03NbD&{?1f0|bx7>pNNmvA zX0WimiX;x&+7AyX%8NbK22Y~(XR47{)e&wgEuqgZ4DR#6jykU~JIDB#aH3t%R{b zZ7LWWbcQ614O*iKV}m9%VQkPGKa35UdV#S)^)ieNI%gfmo{i)-P`wNj2eq+aY|wfr z7#lPh31frK#e%Ux3y5IsYe;6^LSlo?;)AJqfh7JOi4D5I6Q%|<`w3%%&JcmI1sDXlds+s2Wh) z8?610ggXgkgZc=dMPwi~pf>zfs5mHnfzB5PiG$k15250qHv3a38#Lby ziW_RLO9zE7EDeCd5yl3EBa98|zrfg}o-+zM0~Dqg11kQhiG=x%8c4Z|Qg5F50v22^zrQis0Y9<&}0<|mLjAbUYHsJ{zh!{q+R z61UzSbaKx#PLK%@409i-pNwo?gB$}x4-w~^dT}!_{Dv6jO=l8$zUc}g&o^Bt4!S`Y+MUDLCftG2(Gs` zG%z<)00F}5?Vo@)GvPVk6zUWd3hP??DJ&kawf0k3J>YBYr!aaLHK~Bt+KYhK+8=?g zwTGOR3R!n=q#~)y#r~MjNQ7@c#$<&oRanNpu4$Qv8<0@1zK1KT^|o>&R|;~{~hFD==ykbkSn3<<0C99Wj4amEstdC!hygr@@q?^R`@y(#*K-47?Zg^J_+Oo^4G_6 z4$}4U9w2W)*T;h*FVY427+a2kjkTg{_Yd z0vRwQ*2g~vEi8v@%K^0@KurN>MB&1LIwi^!%MJS6j%dvl{|P!JKF(} zGhodp#yJ%rzknRy2oeXa{#5}xz7gbj#$Z)YN9h-60Y7L~5wv1n5q#7t$U@NAhZ=O< zd<$&dyxI{^>RG}F5>TrGrGTYiwmM|pJjgHL)$a`Ipl&#mB4{8{97Hhivw+%E8q%x` z3~bB5OZh>504oOXWDp0rh(R56cs7$N$Vm`wnxhNoJ%vF_^=W;ME7CG~S?IcVZcky* zv95B6_4M*cGN7&*Y~efugJM?`BLkDfL?;Ob2GA0EMnOhHVbFSd#1XETC%vk$GBCsJ zm0(~{?QCL%9{j2XwFtiSULC&9o*TB#UIQ+KbU3Ugj>BOgH?0JLC{Qj(U3U)3`{3a% zhF}l{QxJ@NwJZZ@ESr%b1Vn)pFfxFYf^>rK2nHF<$biFqP<{k05n*Hq0#Tq23#tP^ zW22DnKeSK7zyR;ofUHObFMJ1GkH9#3_$*xypDis()}v_MJN$szuMCXLOrV9~uodBu zMdhG%?PRWXM_FGEUhB@t$YiaRo2u9_;JR(+WyU!1s6~*6>1>(2=nE9I_1A$KTmIKFHNM zG$`0J%r!oQ)TQTxZ$&u~i{ZgVT|Bi{o)6S|bKI*RL8%0^d=e7X4N5HKoJkZ zpg9{*gB`>MVGtj5um^|@!XUmih{3?X07^}uwc4OLP^b`it+x-116?ZtS~ma_0_g{( zJY+s-EeS{rlo~cQtEL)mYU#Cbt$o1x;Mi{@bEn?91bF?04UEGQg6G^qUq zV}q=Ov60tfgJ!Q_;>4Wc44U48sR!+egt2`=?GvbfLDN+*anLLmj16ih!`PtxP%t*A z%>!eDCZu3&&>A}!y9dd9&>i(Kad4XiL_pipu=SjvW)n;e_;?to+d$_Ug4WG~!sjY< zeKIJ`+=sG3OXNT&S%TDn+LoW8;-EETu=Axs?NfH>I$Kb$QxM7qwNE9WY|y$+Whfie zrqzP7LF<-b>zP4weV{XSL3V+{%m%6kG>za6WrNz1pp*VUY9bjJ7+~v}L2b(@s2Wf@ zOn|aMVVMGDgJ$qR{u~NxfI;pg2E#@bpivH9e+v?W=>?^E5F4~k55$J8yR48xoSO{l z4};`DbFrX!0`Xzyfx;d(S^zQ!qz*)*ufM$^#lWBgU3UpeKOl7=^U&Adg3dAp>4#yE zT_864`deJ;Kz&b`9*{neI+&k8e2~2$8h!mOiwtq=Z$WFI*^xF!!|Vd3N08YtyE;JY zjfq%)E6vTo09vCDauW!{%mYm;!`LA4AYKNBMIZ(g!{pG{-|DC^Fo4!_gSteZ@CCUE zM1#r(m>!T3UwDaIe=DO(-1=J)J_ZKRfwv&DK^SHi`ubZ3RR#vo#5Tx%puRuMedz0N zYXuk>wtxy3kYRY%-x`V$ciwf87;)!auM#8fylWdZ$eG0;e}J}f!~6kWUk`ONh}tB^ zzyR7;3}S;YEL_mn-+HJ))Pc+cm7Os2KxHZ@zku|Du%9?_=Up2}5V!vJfg}UNRFJ_? z409jS`rG(Yy?lLw>u(K=%`8C6Zxslyzf}MYQV_ZRmeh5($V+T>xnw_(x|SA{e_?B8 zL3JW1SU_SRHcWgm(pl32pp`2tSQr>Uodu9$P=N@d5o>8d3tE_%SdBo-Vwu?aKucob zXH6dg9V?A~)->p3VkU0TauZh2WzS5IwY1+r8ewNmgR&6obss0*ko!GB$4)bV%31hX z)4U+Rz}C_VgB1CL4$Ed?WWYFU`Z3a4T5yO#*V2MlenQvMW`Rryo5aMxz`+Ar#lT9! zS<`OBuciIP$iP7KS<|3B@vP9ZrXPa5OUhc>Ey!zW?}LIGww6{JD+t4v{(p zhergw(irPnTF|NN@U^tlKn{bgrJV$_2kTneMIag2TG~F4J&;9hIwIhk*kNZ)gU`W+ zoizhDT&zc6u8kuWp=Yj$Wde$`fJZI=x(-%P@30+H@0LnIGuBCMV>BX{^ z7PLc)6?)dRHOLLnv!)|Jp#(i^IvwN&=vvx1kT_{)O+RA>9R&L1#@v7SF1Jw1K)i;Kj3`D|{RVau$UUHD z5aS#N*qT^vkRw1t7D`}eXoH-=7_98cz`y`H09qk{fq?;YO{~gtP^2$r1dacI&yrTz z4iZ=b7EnnC#pF^jTNSb<7UV?mGFJw*c2E#42RjF30az5W_!VR|gL)dspwYvk8EC!M zmBWhL8oIbu7HJ8pI0FOeYh97_OE54fBbKnLpf6!X92E^;!m5UC39CAeC9I&U>lqn> zKolr3qplzY#!daqE8FQw8NRb|lPQD*Qd#*Cl?jj6Ll6}li5vgDL~bjfKd z=zv`CIh({tSZI2S_izSCLY-Y z&}p;8o_Y*fj5z$(oerDzq(m*C1((FA34tLV61BvxGacylrSafYJKzgTLCdB<%?uC? z8`cH!sj;vWWF}}T57g=bnF(4z3Sxu$2cSj{sQCjH2N5G}0VzsgkHGb#pt*BUyn`@k zjt4Zi2x5aUhz~ly6vPH$5Fd0l8Hf!^K%n)W{vZw%gXBTyl0muP^`xM=T##B&VgsoM zo%4z;4_O}yE=c0ZT_K862|+J~K(F7>OR0FY#h?_e1qJ1>LAd4lyGS-8ERwUN*U5G~Ha1)XyNE3dwT>;kp685kITL(kU*)p7iw z^^MRqmLecF)IEwIHdHZ648x#g0K8qv+1L)jU&{`^xevlk!Z3ZYDL425bpnYkujw)Cmh+tq~ zKwrD)Bgw!3Izts?9w>fc=Ao}$1YLLzH3Ce5>;f^+*Dm5xhrV_Zqz>jMkU1cGK{O~I zfY>lO2`S>%E}mnd;-7rjM^Tf5jSO5EDT3ChH+ zUF;Txq${X5;Aga=uU(v@3{eLP7f{&-3l~tC2g)xn{rqCYtzG;e#=tOvk%0k}uR&&j z%maltDCr`b*B}A8+XZGmEL|biE*2AccBr|L36X0Tb3layzO{=A3=IG8|Njqj6FP0y z$gq~#D3KX*27$EB-9l-bVfcyHN@*g?lPa&xe_gYpOu=zb3t=n_f+ zkOh7#L7~IIGMkx!fyMtmh_ex7dobAHd7#xQVv3-Zpe*d5I-K_qBLjm3t8O(T0|SpE zNLC-jWZ;X>W?%&`k7VKb3|a{TW^?eY1}$mI%9Wc+ci-CcG)f}{-gMr5gWGQqBCFph>R!fjL2hSIf z>Ch#V0w5PygTw`Ru7Q?aK$lQjfz&{kP}YFdK$lR0&Uj;mEus7Y3Q|T^4=*ML2A+8! z_j`hvuqBirc7tFD$Q3>yH#0B_`hyhtgE*iil%OF%&~^^6N8}lJLFd)>um(>D83zur z5D=4r2Xr+HD|89vGLQ*jbHPg}-+|cSTbLLaIvDs_KqhgnWny3eVW^S(ESo`1D1H`D z;P8UF#2l=}_d(`A1_e|Jh{?bMy77;-6ch+74E!vhflXe}!Y2jR>7b)$!3SH;0ITGS zFJfSw30BA#U(Ucf3&iB$@c_94x`a|66mTd@D0eY2FbME~sv*{SAoUVFprKLL1yfl- zmr)6W?v(k!TEqzAil~7C3$}zZ9As=Y<0&=<1{M*}c4}4#heKo+LWW1=JSci#ODI9D zN!EJC$E*wtA|i?)8Q5{8cR@zOmQdaV$+R$vurV+wh{op@FtD~UigPe9sEE7-$#gJk za4;}vh=BGDvBH*6YJ!pnYzZZJ!EYbf9utwPAU{uF)Z<`aun+<5Gi05}Xu`q3U?Wlw z(lZIH%t0g;q--jqD+dFEiwG#LS!XhWBG^MD3#4ooBPa%aL?l3-o6FeG#=vkx1a!Lt z>pXB6JP~;SQZ}D4kb{BYg$U@L0@ej!qu(&_vw&iXcNye3(xa>l4B%MXf`~QD<4D1= z23)-xdUP59zV3m90>f?R3C7hhV$z(MBG94Cxg>FgUBI}>J&y$#IlI20TpGbU=EMSEs&vU zV2+507l@P22+}VjQU)>rwuBPYGGomIE7K4GRgJ7!V2*)EJt!$H7tHZs-~>fBsK@}v5jz7v3n&C6LFEQGJ{kB~WH~?!a4)cdNKkzx3Cj7f6yOb( zv;vb^>!!!ENQq!zSYl3f)#8kWplkt>kS%6lECeNV#$cJW0tUuHkQ(qB&9|UEBhb@M=@?=a4|5*6f-a`0(lfP-XaU~>LQR= z8H3d}GB7Z#;bLG=0^PcDlmq0h7^Y$dkaeK5QPtmr68K_987>9}3D89>>id5X~M?Ev^Xjo;b*M1`P#JqffDbi-AELL@@BPfLeW;GN5#z z4088WkQ68c#X$}f2XPtrSwLa0A#EJUx?Hjq=;m_e!;7zG(s`GmQd`K0*- z8HLyc#2FZvR2aCq?YNow7#NtLOb!MH7BTp7oD2-C{0!XO3=C{gF;-7u1_pLYNTV*x1cjP| z#B?V~kOeZVaK|!PDfO4;o>F3~oSsT1cHO zklmmr0TTmgER&Jsb*BYI`C0lHYc+MtOf2)OZD?o%R#0kX5I}B`GPXX?hu;UM*<#oL&Y4=ynd!s<~pl z4A2e;@EKDOW^qYMX1-nq11keVT3LBfW=X1E2B%OI1~6VQzj4_cGM~Um8)!!C9cd2oDdf15LO5aWFhz{RTR^} zBH+VSVde{gj#6dh6au@1hk=n9*Kw(oJ5d8nZ@zR6^RV-pj4K}5TBHj4e<#mS%QKtxvT{2ru?+D z;?xp`_}nB=(3B^`f(GQ}oYXv+kJIuX?n}!nW{3xQ4P+7Mkk}Hi72w;roifwG4oOeU z%}oR=N>9vXh%ZV_OaYO_r8y<>*FjVg<1i%W_?HpIivmn=`tU?|VbD**)@C;&m8PfRa1LcTB@WHm!(ei<~D z!5JFt+4#y-P!b?@4J{~D5xZhG9%HdA$RQv-3c!6lp6gX&l*BIQ;gG|$aMh{@(pe`NA z4A87SXj%_+)hkFnsD}eOEdj&^O`*XKaRv3!KxTu)K`lm*y`VL?pw=L0$Q>jHY6^nI zLB!}9Tu>-LFf*ui1!00oW>8xS%z_Zi46qqu7$0GnTxeUzk85W2zGXv-Z5(pbaGBb#y zxDaF;XlENp4unB`TxYm~5))`mEod$pq!xrh>Otpqg4iGo;)CuD2C+dH#0Q;E1!99R zh!48Q6vPH$5Fc~~6)bUr%m>}!3X%h1kUYFOOy-JRP;mvTe+eD!8jsv80M*O!m<1)Y z07GBW%fJYlkOWQOfHE>P+CZ5W)V&1x1(f+1q0s?atH3A*5(N#{GcYiMhHw}l=k73q zBpD#{(~Qu_0TmRCph-^#1_lrtw4N5E8`LcX4dR2Qra*-TNF3Cc1C7|j#6g7yNF3xA z&^Qc;4I0P-#RG^93S*EQhz)Whh|LXkrxfViR3?a>a!71Y;Q~?*aw>=oTkES0RReO1 zIg|~uAGGcS<{nUb0kJ^^7-)R~j15}L4KfqdD+RG(XTXBa{w$GkGB41Y*P1 z5`+4|AT^-E4|HcFj19U27-S}>paikGq2ak2Y7QtYL2Pbl*lq=hg8~5*xS(^==zLBr zC?CMqB!k$X(q<^ENe0~s4qJN$%I`3C87MD6i$GBP!NmKJ#3v)ML2(3A1G)zs#s=N} z4P)O%QV+Vn8z%k*Nt_Y177J=G=u``s8gV3X(EYnGaZMy~QzW(z5<3Ek4Z3R=rgsvO zIB32SCcX+ud>axQG=&ROa}G)T783gz68jSp8?-hIrk5M(oLJCVc`$JmByrIBcrbC$ z9p5lE=>BdP8+2zkj18Lqg0bt7%;`pA??z%DM`B+_VuL2VVde-kBhI#!M`D96q=cz) zMiLJ|V#gw}vyj;3NbD9Q_CzH1JS6sNB=!y@_E97@=%g8#d)^?4|3qT5u^{{+jKo$z zVuR+lVCGmMiG$`^VB(!TO_s@5<47;osGn^Vs6wMcAGID*0iM1$IMFgC~=F!oSi zFAX}s3l_GIp=+K&{spZ(0=3W6$dSu{0e1*q6u^_JxC3x_XIKn#0E9FK?fXx z*q|mHXjvAB4Qiu;>PHY8l*W`mi+7kH?QR_?8`KU2oy-MN1DaNKfQp0Kv7i-4AaT%I zUD%nipf)Y24h4yW&h7;rE(2nN+TpoSy`c5x6;L*)tqZD8L25wf%C#m2gL1}m^lnrXn?u4>Iv#X#m9ZYMyL3en7 z;tb?2kUwE;&{>!;Hb{;bjBOn_XwU_w7nFBEY*6za#0JG1h%Y0 z>Jx$D9>fQ=yFuze{Uz9735X9;2ckhsJwa@kd7v|0Gl)3DRt97^$N(sYaY1Pdl&(Q( z9wdcJ9jNaO(*sina|4JEaubLK4H|*iFu4!1h;_K25etwU$iJX7k&(@dVPs&~NyHhp zC2|Z5KZsZdF3Q8e06L2qccv9LPNMb>JHW85sV73N?^nP`f~8Zh*2u{d$npI&tFGfxj0gZXLL~1Z02_WHtzc z>;%!rpyL)Wf9%j8ZXLM31Oo%8>;ahp!Z7pD*MT3=fT#n7Giay-7A~M66IhxD>Ax;P z+&b_bk_-$7h*$?+AO6~{{|gA3SR%s z=Aq;UN}FH~qlXdNTJJlY_?LQJaov~ZN!>xkQk`mg@`LKBqOcqmIJl({a6ue zx`ZZqN!~X8dcqK`Vfe*K~JcS<~H&Sknz^Y*2Ac z_e>mXx`o#vBK7Li-2UXuIUZ}ExjXgO*g2WPSKifaI8Vsbc17!%r)Jh4Wg{j zHQjqb9>KDvdlJa&WUlF+05TKHnr=5xB7m;xjt8-!Yr3a_)MHuG4eEHX4!p_OX)^u}$I9S(oSAZOX zbxk*DBNgiatmy{zdD$@6bc1&6&|ppXInWAnNMQzQuYejkjC1;kSknzsqsYL(Aa@be z_JOSFjv~0GTc3e}0oR&te#pve@BzKxHQfrRYr2&{GkT_AMKS10w_z)_L3>6R7lBqh zgM0#Nt})Je2J#K&N^Ot_7=zV7TWq61E44uj;c>6j{=|v4QX3?oJ`aHUy==Si8zQ0U6QS}1e8@qS74KImhb2aY;J2-bxBWQ z8|X|hLlwBo9R#94Sps#1G$_l1`r?cXAs`B*0Br>}NFO5u4(%ZI;HgfAAP@!W^q`s# zn(GF2-C(<4LH2=EfoKr!0`*cxS74*A@E%=(4PA^4T3O9QXtgy16AMTkJF+@9W@e}n zjG&W<1rh75r8q(Btw&c>m*mEizM>kwQhRjebbLHLR!&0}k%HD~k+XgpypRj!OySWL z)%nSZIiMW{$vLTsd8Gvm@wtf=;KOyn+e{eZi&IlUI|!2VOF>&H;>!|qN>jn2*$nY% z1^LCG_3WudMS1xQ(Bu_E(9YbBBSp!Jd< zy`ba=(hurUAj?D6KSK)wr0o!(QWg0OW7xi?__W0ARM0Lh@O}x@Y#(35fW8zOdC4=X zV&uI@PzO|% z>p^OuYnDN5*c#+ckT}SZAkPoLT4PX}gRM0Nu|aDdM%NlMFpRD>h9t<*wZ@Qe7+q@& z35U_O#*lEhh_sG)bgeNYOh(#Tt3=9nOL2OXJfq{VmbpJDGeJ-dz-3Af| zH9!~`7>pe}1A zbUiOxe<^O3;cXkb2NO9VqSx>zZGX+lax~*7kyi24H$YX&b~wU)%db z3UYg*6nJ6>GP45eBcQMC1-0E_U44)_F!RvY_WDROFmMpDwimP)4P*`s!-g=>*Y@I4 z2kKYA^nlC&se`S@1o2_+Lton)B17ETUeGb0=|rsUy&=QEaDs@nz5U$8t?fO{OWfMt z1uDd??e!sYZEu1qacg^X_!t=apk*^CoMCZ*zP7hTm4N}YiV&2pK>dDDe1Osw`r6)K z0t^g~h*;ZuM~t|&y|P5E?F|(tZf)-pHR9Ix#)>mAAmG@0wUJ-7DzELfEFi!;tYgg?nA8YEl&m=@@!~gW@2V(Y+_-opkQijtN6n;;9s~In~@`f8wco^*}aTsnJ*oQfvVx+GZJC*VNy_5PzqrKt<;TWTvf;; zc1)Ckp+kkcqf_Nt2lI@S=^Bz9ER$FnCV4P)ux#RBP@B!v#>KFf3AEIbVG}FETBfrs z5Cf%G@o+3?Yi?*LVPj!H=#lQ|WN~9)I8z}VT0V8DF0<^1norQPo|{x84Gg}pV;lvI zw#qo{B}2n3g-Ic7lT;)dIu#(tNi&~iQDtB-0-q)Q803@bk2w|{iGVl-YCeRcpzy_) zt7lb{7F$>Z=tTGj93ZlNGK+->8!Lp#W}yOK<~*6v!elSgT9&iSstgREU}1oy>Hq)# z|7T`ktYP3`L^%mz9cXEzz_*dbxe@8%FLjK1k*Lp)^`>b_Pe09Q=nsLncNvcH&L)Kv8#iY z7&Eeg-NVSy06O)Vi4}D6C<_NG=um$a4t7x8&+Gy^u#j67l-lyZr&O1KnD!v`0-#Mm zEG(>|ASL#oL!{L~BCKJc)38$*L3XpTuy|c!U|?WR0a@p>9K?JDT7v8g5@p~3Reg^b z7#KJ~1TzB*3;P8o1_mw;7I!X21_o|TkfEL+%Ne*0L2SRxpzvd0-UhPYA9U<9b05gK zU{Je*hlRNxve? zAQKt5gF&WSfY>bDpxq6umLN6<_bZU;Rv`gfO`#SNs$eREy8UBQez8Z zOK^jB5wqHX*fQMHK;rfwwgQ8|Rp>d@VIZ49C#$l0f|!s4KUlp$>;}P7kSlyZZf0N< z)B$K6zY5%-gAG^@{{fv-&Ak-l!lT-tbE>&5K_PjP;A`a$)#2NTmzJd<@VC3)v zpHmGAPOt`0azWAn=0Y{7u`w`6fOPS*FoDjX2JK`7c^yePNJt#2+z_M�CWkLJb2y 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≻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�H<` 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≀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 ?Yc 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 YDBxjI0-h^|^40%Ye7&My05FekMlbV=U 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

7$bB`I~VaMyn7lRLghMN`-Jwz9}6$W}R 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 QObJ|Nqa-z*xh;!w5S18)P&XgVvsd)|4{v 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

SIIV*Op!lXR0|T~mLO|n-AhTii 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

-)U1E(~&{Lutw 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

    ViSW~D$ERmg$5 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 V;t<)q4mJjcM_?Tg0%Q(|1pxf~6bJwS literal 0 HcmV?d00001 diff --git a/tools/sdk/lib/libhal.a b/tools/sdk/lib/libhal.a new file mode 100644 index 0000000000000000000000000000000000000000..382f4e0ab2336d96e9216a63c885fda7cd3d45c1 GIT binary patch literal 462242 zcmY$iNi0gvu;bEKKm~>-<_3m_CdLM)3JL~bDP&SX!NSDc3@ogWz{SA8=*hrfv50i+ z{*Hkm>m36_aTfyD#xXFU<0(oE4D+%OcrzCR!ziX+7(D#MzyQMUq!<`L_^THK0~9lI zBr#yc%C8t0we=Vnjf^1JauEZg!!ia&_je48e%}}v!>kw>W9=9iQ`#69voA3)7TsfD ztbE46*l5MT*x|>(IB^pLFmA|VVBDU^z_@P{1LM(c42);~F)&{7 zVqm--#=!U}j)C#zDh9?6+ZY(X|6*YL_m6>z&5ePH*N=foWEumL^dkl)rFRTWn%@|h z49ysrEX){~?28zf-0~Qhe2+0Oh1`SS*mVp{Ae`pJz?AonfvG%-fvGBqfvGl&fvIH^ z15@`d2Bt~>7?@@;F)%F*V_;g5#lW=j90Sv?PYg_ltQeS1Ix#R^Xk%cy-o?Ol?;Hcu z(@P9YZ{--6zGyKp{mx@xW-4M}=G?`=EO3Z{S%QgyS)Pf3SuKcx*|>;-*{q6z*|Ld& z+2IxgvxgZ2vwsi+b66Gwb3zycbLJ-o=AwBF%+*W`%q`0pn5S?tFwdFCz`TDJ1M`_C z2Iebr49vIgLGZ&v49suWF))99#lZac83PN;G6ojzGzJzSH3XJ*V_*Sc^+OCShEfbH z_V*ZA-0m^31cx!OBuFu^q(5R{$$!MaQhtenrAdr|rSlpC%fw|2EHl&+INnDbs8T7>k=mh*7e&MShxLS zVBI6fzO)dsD{cQ|vW=affHs=`FoUItxJfAVJ1q3m$g`Z+z zi)UhBOZ~;bma~b0t#}y&TU8VTTO$(#TYDA*Tb~dE+mtE>w%JMyYzw;>*j5-Zu&tZL zz_!(ifo=CH2DU>%3~VQMF|eIaVqm*^ih=E}9Ru5wA_lhCSqyBSlo;54d}Cny-^IYr zwk@J0BQYmFB{?xUBQ-uJGcPqhCqFqmF)1gN0V0)&TMDWxvpBxID6=FrDKR-4stGDn zoLPlt43Y>`O?hHvF;o}SDkKr8n&Q-w^30Ty3{-V!qENLUKOorxH4{w~Ni7zGL5d;5 z72wb*PA!QqN=?tq&x=niDJjZKDlJK6fJi|CCpkYOwJ0?&IW<1Npd`Pv1S*-HS`wd} zoL`y;695^MoSdIqkXQsW0ICLA2&AewKdmG_sVFru8){ZjYHog6YCMuSBzp2nbK_GW z3K0UC$O0*;Nu}xW$@zI{ndzlPsVPtc!NRE($?++vX&HGbIYse#z8y zG%|+ra#M4Y3o4<}0J0kH8;Io@iDjuUFGEBsa&j}{k>Uf)FGx&DDT0~;7AQj!NJ%V7 zEK1Bp)&vtm)&~>A(3+2_H9t2VLu-C+JhIlzyy6lxTVX=TT47=sT2XBUD?_stCWfpP z6ojAvfQAK#3-uSeNPaGo2-v7Z3=z1Rl#-mJ_{5^Lc;u`E62roePs%KTXF!k|G<}&M zF(iF3KC-^t+|u~m%)I!5lGONu#Pn3;xC6^2R^XINPDD4UxCmXOC^Ih|n;6X9AUhI^ zGgIQTQ;YIabD$vw7e(?RIDwYrB*Aoo`QS_p%GpqjV8M!d z29-FunR)rJyn-&3n1v#hnTJysvJ|Q=m@D!Ub75sQlH1U1hbhiQH3L$(WTqIxJY5bg zZ!%L1ph8KdnK>!(rFof!rK$0mDNs>Rf``-{rDmljF;b3K&oX3XIC20?;}*J~1yPzBmiDD?vERIjj12x3qEjCC5AjC1WfEunKcSF+~YM7u& zV%LlrlwfTjVeA?pp^U{Qhy->`@Ic0*4=xAt2qAd_#$!lBvH{3stU-h!jmrQ~c%Zrs zsud)GOA{nSuxf)y;nD~X60CaRvLJ5}Rzc7b3Vy4nYXQ6&J^6 zAh&D4jzAGJgzAUrjmKK9VU>eh5sxGdNfVexLc}q&fIF_j~77BqTMa#k_CM*(S`LlY>xg#_+MfCWKq9!L)+9xV@o>;`8a zxI}zTeqK7%fjDFl4#lDX-YA00A>}j_F;rs^xfRKBgdnP7NN}JTj1UAVh73m}RhFb0 z#HZyKcJPAo1?%>@m8K|%>h1i43>Ux32|P-X-55WuxI)Kr*Q z5vbRIDhBGvpo$cv=B0qTiSRH3=`JfM%0yBI;)47GaUv)HGxJK4b5awFpo*YEkhTM= z7^0~QQUo#yNgl)nwQ<4yA9Qh0xPZ*F#w1~C<8u>>VWVnrv66g< zeQ;w-DhpuU;mo`e5D%gcq5#yP0mU>pR$*N+s36!uutWt48Z^&aE zIFJa$T~H5!^_1j;0tFnbP~qIv+|+{j%)G4Bgv>rlA^@;#GK4@m=6%5NF$iZ1@W0F@ooX3P;Vv|Ag2r{4_zMC8BZ>V z2X$y+Ne09%g^lAS7l8ZC$PR!CA=!@UNQekn38YNO%*!l^&rQvZPlok>;UZwQPJ*rGUO9$TF=&JUT|HP3q8Q>jP+m?h zK#65!AyAY+6e22dWRJkQiSeMIgY}1Dj!G^tfTj>65rl~dL0C%-Nd%iRBMj4wuqlI$ zjw4Jn#-_{!!!#3Y%1kkonPO9BhM~+1n=*3@W#-tFf#MuPB}focF(eH^;t1wruoyxq zIMNZ30pnsQfJFmTfgy$hSOh>7Aca0u1Qzr#E`|xPK!++o3UR0iEVyA@3=?1h4OM^? z%1{wl5W~0_CV;{b8n{q3AQ3cW;2=a+1r|V31e#1j%{QQ`0hW~z3XyUM)Hoy&kTM2+ z^o13WMH4tlQwvKIh-3m6WM~UA-j!IKtCz3O1#$+oc?=t_N(G67%i#FL;#^%_2oq(* ziLi?JymCT{@(3!xGz8Lyj0ctNh$05f9IR^a8U<<7;5G&#kJkuzM;^B+a3!F=K9S0Z zvlFK(P~i;fS7NsfCW})$qCbh<0E9eFBhb2**v&yxgx@ewgA|W3AZh#tKw=Y*5fBCV z4S`1{9&_Moa7Q@U=P2rkv=*l_Xl5pqJ1~?HG7uE5*!>DM3Z#ILA&`*8YYapQA%oyS zhSw~(D%=qObv%knqAka%5LBw-&UY|b+}bPilCgUX)HlG?2Fl2gQW`cQfTkN$0Ukp@ zJ#k$6L2}r&B0B6?^dclNH6xG9p=m{uGDMStn25h3z^Vq*0Z7Uqi4V6`5P6(NfPxuI zv_ma`$>P+GC{D4v03nal2yl6VGw(wkf~E++VW4b{-8o=mK+^aPfP@(yBOnTJ8UoFs zggk|zjF5pKmt%Jo)F_YwLWV%xj@KB75}XFX3IptBz+`c2$1EzKv5dW_$b`0z5NQeB zVhjbCcEd*{LG!j~`r&e*5lb{VkZG8?KLG+I+!tgDM{6cuCuOddjmhf;9} zgU3^mp%q=cmxhz1#AQrmpJNBEKXIRF1WL;(}VX#;w4fNH>!7N9cd2>~XI(+2b;0M&pc z{-H8hA|FWxhdtn^MN2YZU0?|;nvjOc(X}B-VQNGgBuCSSBm>pP1@3|9<-^C(;X4xz z6%wWK`u7=4R%T<`WQSU|=#~VCJ*pw&wN}wwGj*U|?WYWAGGaU|>;U;O4gD zX69pHU=RWM7UT&A7BC4TRKVhLAR8Ee^YJn;LZT7m1O`ZoNCqn{%`47K&r3~F$jpN+ z%ZBvCKhTzMG^%!{y}R%QKi6&i!<_zN))iz1=SB4MS^OB z+74=8B3q9n3^ozw2NcI)+1&-zhiL)W6u66$GZJB|!l6z=I6yzNIJKx)KQp~3KRYA8 zBs;%MKUF`qxWL#*KO->*grQD{>V)t0a`y{Wa8@wUv(PhD(9H#{O-fG8$thOQO;^zM zhpjh=|G?I(*i;GM0^K*3l+!YX!| z^a-{#;Bs{Gv^C%Y=VfrRV9{V;-~h827(i^0c_1!~4N7bvwirkdl#?VF7(i?$D4RjA zxH7jSF^NI1xTFX|XTVq`pdA2upuIy3dP&8_40=WR5Kd8QPNE)ouUC8~$gxm%Vp393 zY8itbl5}EGVqSV`F#}WuDDYtH;*uf;z2yAd+|;}h2E7Wf-}NBIfeolA(JLs*FMzrm ziGr3wU=bFEkN?38D8YVbj@6{!a!51}P-<0*nj{(nx%Gv4xW5K~ay$HxMbTSqdTr&7xQe z3aAXYSb(U78iOPPRfAcWAc;WLzzYFXvrspOLe+x&fMg5QUNli8wK&Q}h%f^iD9oVA z3zTgcp-D*)Bo1YR;|0o=1c^fv3%I_3ife(yK@q~hz+eVqL&dF;*zO=U$N&Zg1|JX` zswM)&21PCd149ak4HeHsVwZy0;-D1Dz)%HZL)El_*g_ETNgy^y&p~WZ)ylxY z0B$)z#eaarg&}VH3t~gXIYIR*KSZ1l#D7#JAjVU|J707-%LgY-CnI1CI7Ti6*G zW-u}^fRX|zctCQX@N`Ae15%pL$iM(PC)`tyoeD}CPBI2vJu1%hL(#k zdwn<|Wg*C3P&Em&HyzF1U5pG28XyCp7-nxVR2?W@K~j$x85pL)B%yL3ZXJ{jQ&+*v zz~Bhd0L36RAl%NtzyQtiV40oF3=9@v7K8w)0kLL6%>%JP_#-m|g9nHK#V~bK(EJ<0 z2~h{~FDN;~{0rj4(g4T^OBMzOP`ez&24R?aAR3kiK;m~;7#KD%GBAL$Im|pzwgnYK z$maF1F)*luG=nrDxxKiu7~B8^b*({N8$x{=Q*$H8q9BC?E<$~pKOno1`ZOF2tl)Z& zoaPis%^>8q3djw3Fs1DgJVt}12C}?BPRF49jx8Odr@I^m1_n?W0(Lx7Isqje4PkuTYu^RJk)wse*Dr`Wfedc+B5HTBbBY zC78jjf+@|63=9dNsPzLi2Eg1#5Z48)7$mzE1I%3k;%0ypuLc=)48#TbhY`$u&&a^Qn#lm+@G>zlu*`)kb!LJzQ5bwc zii$HB7|()C$OEYg0;xI&;?4(gy+GXaAntx91_pLe!N?H>61xJj9x`^rz`zOWW36Rm zVBmZPYK?&yplo#-!~l)xTm~_O7#SFLg2Ic7g%vac!OgpR zMjl)dWE5fp53uMl+Dk%)Skxswg+am&64RX|8HE`bm|5Y2FHGVL3@nJT7!a4$gn^j@ zGBg9?vT-wpii32qgBT1997w7q7#KJ^n;01c84ZOQ7`UKgHyjKM-24pO+zbpnP!T=` z23|%+PhpTTe2NU7!us3{4E&H09|1iEs6$yn4z-bFU=W16omE}Z2JB=ZR`BqUFtTEh zQcwb5umeR9LlB4pr92jf&x}FyL99TC1c(B)cOViV785AFG6aDr7DiB?x0G={hyhCQ zP*q@)Ap|IkF){>$D42ra`4A}x327UJfGAMP0GSXnAH)JFXJi14!9f%@-?zDm<7mUFq=RgRRX&s7({_m8#6wRFff2z15yX-KZ5#-P-P4!LFEWIr7@z9s1hC_)Q2?g7#I*O2=Mr8Mq-X$1}I1v z7+ArcV4lLr$jrdW%)rPj!O6tH$jk(0Gjg(k*=!7q%xs*J42;Y*oE!{{%q&n@h)Ny? zM&>F`Rt8394zPFy*aR*xyACYQ1ST25A}pLB(;(*8f<>6YB8*^?6{;6xODHEd10%B~ zSWPCF6bF-8U~w_9`XaDM1(<}`UIsRS7fhCc#TmhDHZaM^336>cm|Y2$6$P_P!KOi6 z$OU$723S@ROoCm=z{JAH#>@ax&c@8h$psIYef8i#;RFX3JDAh~lN?|}nLs)?nHU%t z8Nt1W@}d&hW-QRE2_KiRXUO?0SD9dIU(sB~hiy87#%RxFA@^ezabUb9h zCpj@5v=@ra6gMono#0HhPpg}Sa8&o)YLd8K-Mru$tqzr(JxPsWA zvJ9jiR1d)H0}D(k7Z;(CqEf#JX8s6q#x`6h!_?j z&|oPEGXOc6B~V*%P6vP@0TeJ`j5!|wst>_ZU;=Y|pA9}D59+!xqKwXf+ESn%C|E0) zAUysLYHom)f(gv=e(2yMSQcbHsD}*YfI1rt&_PS65HomW9?AjBLz5F!h#5SY1Lc6_ zp#!y0A!hK%J(L5MmjX{WfkZ&5ONfD)0W?kw;)5_K4E#Y1CE>2IXu}`vt~+0h){9hmxL8Tn1 zi3(zaN;Xj28N>#aY;GVknIPl&aY$^?v^z)*s1(WqiSt9oMnP4LQp3*x zUVQ*!b3?-))bj+X0r?#?EC6GFf~p7k8^q=YMFIl@1E_-v3PVsdf!N$21}J_R85ls~ zpm+n7sxb3GX;qjVk`_Sm4q}7M1Yt&K76%!@2r9Cn@h%KygT~rnY)~>{1Py+I>;kof zL4%?Uka2BBC>s=%FgB<*ftd*!HiDT0GLsQH6$q+XVCq5R$1wGv@gSF44Jci~ z=8F7~+yLr-z{F#b#6cZ7m^f(s4Q37~j$z`UIE9I~g7kuVbPNm(pj8ntaZvvNrXD;# z4fQX0jt8n9l(u2&L7f(udQduni62BV{}_l3HRl3|4K?Q~hz%9L4`M^bk>_|mg2bU} zeuLOhHK2UL2+BYV3=E+31apHpsPhF?uLxp8)vJNnP;mng8!B!JVnfZb01_l@#RQ|x&wn*ZjG7u&X8i9hb zL1`7n292}9*q|~C#sHjE7#h=Z{~=@Z88L9%xO5_=XBdma)SG=c}yyAeqo zw7dx>z6VJhRF=WSLFp6526ca7Y|wlpj13wCgt6ZtnFAUNgNcKdX~Ec_0Rb3Wlo1iO zDoAV%B(?<-+XjgZ8ghe~6M-ZSN{2AQ5nwUqoVGMPlDUVn0A)g9c7v=6psH|AoZ{w00202DRNlBikT0$RD6G3d9Ea12m=uVuN~|pf(VQ z4Qe-n)=7Zap!sgl@IHtQDpNuADTobn*Gj0ppf=umC>vD&Z-uf!YdLm9*`V?jRJVfk zf(A)J?J*ELjDdjxw5A8dj%HwBxC~VfY8&2!vO#4qsGbF>0ks!ELw6uHsBH)uK?Jcu zZ9`C<3u1%X4xmXC5F6As1eI?fHmIG;44N-yf{f*XW>!GrpfNpus5mGLKxG|B9Mq-& ztu+O)LBoikdKtuC$^e;92C+eH3SFpP(72y5lnomHvxKriTf>A5{Dak~yG$1WXNRtpJP-3OiVT5E?85DNtDh3Qkb@22uD&k91sJFVO%S;^+34Pf%_ZKkui`Fp!Nc& z90svL7-TPq29-ZBvqAhCv~@Hvb)fZUAU4b&R|FB^0xB;-av*w_<`6U43h)pBaj}L`w}D}>+V42fkv7@av=AC^A$)V z6dzz`U^oji1j+57ItQc&W*&zW1H%z$ID*<)JkFmEnx(&%4VE{eQ5w}#+_ST62341I)noWQiw$$6JaKU z*r4VW6L{DkW15fw5q!|WPw1SVIwL15XjY2A>R`R>Im*pfOfhUkNmx31fqN4I5Jhl?Sl#H&9s!V}r*?K@~Lv0|RIb3T7s# z{DheUG7~n|3LYbcst5JyVCq5j4NN`QUJ$_m8DEB}0l6QhMjuqZLrMh(b7d>LY@}3}zn8 zeW1AqkRF(M4lE1|pmq|-JWv>bjs@4HAH2P@fFB ztqoHL8si3;4YPL#3j=uX49H$k&H~AS>;?5zVR}GDg7yr6!Un_!VVGPYS{nhh_8Aoa zAoD=ur!ezC^Isr6ptJ|l584(98n*mUG-@+3Fo4EH zL2M8PxeZ1`vjd3BaEFP30o1nweG zV;@Z5mK>Ib1~@FB>&l>w3^UkTB0lg+8a~is82IWU(E1_BsvRayVfeZtE(|r0bvcj) zHq4v?;FUK_44`#A42+DRoCt|g(3k=wen5>cNX!Hivn~YG0&)yiFw!$J)iY#ZY+w{* z5MUEz6k=rNkmgY30M#QPb3t_k)Fu!Yj6pVm8At@IkpU{_KNSXt>y%CiEK;odh z2nv6YJShEv(i~_m7F2J5)iXf)VlZ(~y#dk(QUfasL1u#3py~u92b$9W(I7KH{b&#k zQV%O5KztAzM1#aZV{tIMKx|O@2Z_V{1yYBvVFYf%V64f2tUE*A00~(`0cquc^*{s& ztjj=cDdAo<0rCL^WA0Hv&c&d13k$ex0p)Rsj*tIA;fu_Nh(k!iYa~FK6rvVHVzzsb zYfF&*yx{p_kXlgKg4#8px)a0(i>bZse}4;Fg7SXg4m!m2*%Jc8BjU|iG$J|sP_V5gWLwfAT}r+fiQ>-N;@Dm zp!pz>-%LU65m4f0U;wYl0FC8=VggiWfY_i=1C67A*dV|ALe+!Z0xCg3;-D5IXlw+; z2E|W2R1L`esZch^ZJ_!Jqy`jbpn4C)2Dzmisz#TAfdMoo0ul$+U(HZ)kUu)1Y>@jw zbsR_yXw3o0eJJfdkRxGjF{r;lVFmLqSUrfqqDC019uzJx^`P<>#s<~PFg9qs1jYur z6~+dIGmH(&n=m$LtPREnk6A+P0*_fj*`W3dObvL<5-JWJvxKriV=XW>;JO(q4jx;9 zvccmbP&RnX63Pboix><_&mb+(U;?)#L4JYh1(iJ@HmJ=BV#DhE0v5<#22dIR=?BSy z!VeVpAU-Hvf%MgY2qX-W193s^GEnppQU_{tLYGf~v@w9p19hyy9HcrQy)6j}Bha2v zbam)$$qOtD44`lW`2!RNFn@sK5T==dfdMop56S~DA(%fvH62I~EL`TWLdK{-=7IbN zk^_YcI32(=GcYiK#^^z56($5T4>b1!V}s;Cd*eWH1Y(0Q$V?EOht`%n!wPAuf$Rn4 zSD3w^{eZ~kU0`Hj0F7sZ%m87S9H`9+(gX9y2UdtWka?gy50V4<1HDbRf{B3vlx9I@ zfiTQG5DlvHKw=dwUpI7{TjZKofzWMmi|q zKofExnhDfOWOM=TsRnUD<}%I!@t8r;%jg0sXh9Mz;1O*%kPKr4E0}TzZSV(Gh-{z| zoY4a$$iNPAHK^L=V2ok{ZCT=k9HGL+!VTHL!vh+EV=RX`mT}Gr1_lORuw~^S%NT>0 z!B&-nj006Q41Ayk8H|dcDMQHCA%2j>e4uKPQ3WB&=MBpDst5rA&}1T0H6uthXpTb= zL@)@k$bj}0F>-*;e!)JlN7kMn2?hqxo*(FOEZ{vqh&?_s+zbrtolT64kUc&eT}_M( zOcE2FKwEzhyL-4G`+c~fA{-11Jn%g{$b*ca4M4m|yN@Io82Au&K~92!?+b!?2D&c@ zq*oBK4M+%N9q70iQ2c^tdKejkKp7pB2td1Uf;j* zWB?DNV(y_h0`8Z9_E2zgaxyS7*MoaJkevPI7-l}mUJx5hg9>+03wekvw}*5UA*qOn({<>v zwjLC;FwBgxwjMbGK>a*Wj~u2N#0M33$b3-kgv2Ctz2S;)Y^09vyJo67*L(}L** z6-6*MsDBPq18#aj^@7K*p?(DQy>&IYh(E2f07=qRc!2Ax{c@0woTJr>B9|pD2 zpo#e;hz+$1w4MpJ4+69v45l8m1`M_j0yOpu69>&@!}e2v`ob`A(3vnWHYhAW?g7!D zbPi*Kf)d6CfNvLC~5u5F4~kXfJ47h6ysK0*YUdI4D1Y;upjQh1q$i8c<#a#WhGA)aM4RVFs~5 zc?Yys0>lRO^FVVYAU0?nH)uOFhz$yF&^iea8i}W>Z`i&DP<+GKpfG}kC&>RW zHpo9PHgY}!xeq1|8t;Iy!To+{UI6#mp=|Kj4RqKLJaz+RgU4>5Y><11!Jz&;sHOm= z6Oek)m=`GBg4iGoW229`Oo5&?1QG}72dM-38-1-8XnX{e??GmPFi0JU2E`$W4Ql#> z_@Fa8LE!*050u_Oav<|S?g5z(5(B9Nr6mvz!yq{j8-1-8E_L8?3OczD(g#|T39<*o z24RrBAR2wG*8-$j4q1L=X8cLTJRiUATXpt1)f2MQNZ7{T%o$c%+-3=A(p z3@C<~2cn_H3|OXz9g_Y)Z52=%4>Au_kASLEWb=4985lr=CtyuT=?~K3LJXD>n*X#g zgC0#p#8??(okTrnhKzvYp2*ifD z5>)Y2tjH< zW`HovJV*-6$V18!GmuQHfZqy zBQu1}3O?-v!iI=L2K^u;WXO&cJWPkI2Es-@8U-Q(F#*Dc$U@9vLDwx0ost6z zF4(eDQ1pXN<3WykYA$~O?;nR+2(k-|K^B4;NCare3B(0Wb%4~vXi$3zl!iflB~U*A zR%U?2LG=$v9Y`Fs&IY6pBo4~oFmX^D5GD?4OTxrK?Rl6uC|`oo6v!OV0b($5P+J=$ z4&uYy3^E^Iu?}9RfKj#&?zIh|aED=9tX+VWFQ70K0F{Q2@fvWNORY$bPf1M!XDiS( zx}bOltqlN$J*ce$V}r_e7#q}&gRwzvZ5SIg*9l{T>Ix7Wly*QE#0I4o5C*Y9X#|8p zY*4xYVGtXX7C;!p2Dt$=zYFTugTe=-1~k_XVuQ!Oz-Ns?_91}8L1_gvwgF;;(g{dE zhz;@+$nPLF$St6L8;A`WIs)AR0Ahps$DlqOhz;^LXvPY}2Dum14hOM8ePYo010Xi2 zP6YKSKx|MS60}bp#0G^Es15+JLH+}+tpl+^V_2Z}GKdZ86NAn^1+hVO8ffkw#0G^c zXipi44e~2!jvB-U^^bOe`pt|C3?P4l=JY}0puRF_J`cnO#RF)b8pH;LA83ylhz*Jp z(0ne44GNDtP;)D7-=ACm{1cc?F~&Gy@BwVHhL_ zVuR8VC_NKW2g)m;Y96EqghA$EYu~`yOCU8M3`#?wF&7XUgkkoA#$}NGaf5|{0dyA! z$RD6E0Lg*;0ZLaeJs|zd85tO`wUbXsiroHb|cZ69WS%4}#br43k4&3(>&_ zQ3o;)xnB-yQ^Dd4r2h?(YawcwA?MG5^n==7AoqdH2DK@X&C_9loDTys8-!u*%T3Kq z&M&A0w;@4m90;`|O^uA89X!JA$Q+QPklK-;dtA&M8Dg1jnRHp%*csNc?q%ljNys^H zmQ9s`AuBY?IKkzB8#8FFL@d)bmn4M*k+5lh9ZDPxHi(3s<}8~on!#KloXMJ@Tq#;% zoT+MbSfJ80=%|2s3NJ{a+c=Z8D3vkjD2I9qdj_+&aVD#GsDp#Z9Fq*@3RVUc2ZpqT z1qBlsOdJx*8!K7CYiPwpSZa<21Pf%aR){hvJ0zGlDl8CL5Okn})hmlZ$$??T!fkHc z9ij|I4ht4Hu4MHNWl(WgVBE-{=FreEk-^Ntprf&q6|@GILD|7zgUANs0~yR^(-kX( zJCqaB8#7sF7#CDDR*GggH*_|3f*d?yTH{QJn?>M?x*>|XLmM&_)KhpWguRWyn!Q7F z*(-!CSQFA4A+9$t0K49}(UMj611J@OQZOhcNm=3R%*?>R1U^>@v)v3!4XADA?+l=c zY0$(stnCVEGlNK8XuB80MwJDrhaA%fY2RYXLY53OgH3=;ltb9CwlT;A2pd8|+Su%1 z^{A#{+Kwy&F$W|9F#(%BkVVgGaEn0HLr9Q%h)*H5;MN6FiD@!K7lg#GmjxXD*wjE=f}Las>4Kc~ z2%5YBbvBTDXI_j942Ud5b@3!*`C zp!MV+HmKbS>O+CrqcCw08`OpasRy+MK=lV3BV>IqXr2)y4ywOF#X4v#5i|z~suMxx zfX-V0%@2Xtp!O|DEr{I%G90vzTZ4fC#0HrOk^`-;0B+1BDNS|M5R)-Wiz>YHNYQ z93s!e02-tL#RrTJp&=wQ{3ak6ACwXxY!HdLegfn=kPHN4-ZcbjB|_vtBtXeV~2`0}})2L~>A?1<@dR=&B}A4lJnDD=11$%dAMwPf3M}gW5TU zM#k|4iNz(Uc_l@a= z=EOjKJrEnzZv*8a5F3O(~KzcypAbC)~55xxf7j(`chz-hb zAPi!I@*4<)*r5CdYSV()p!^1!X9clA@ddgA3B(5F4G;#gL3sm&L2OXo0Iiva_0>S` z1oinqegU=PL2OXo1oas~Y*4okGzJ4=gZd1hc~lS^L17F!e+8rl6i3^j;-IxKptH0< z;-K(21QiFx18A`+NE{S4p!pvV8Bt1i2E`BP%s7x5(7dDrR2($M z0a~jL5(o8*Kxg=a*r2o*1XTk{gP=3KK;ob=@;InCXm3Uelnpv}2y}J_NDXMsJ?IQC z5F2y`Q5jSXsGkHnj{_tQI*+IcDh`^5?0~XC=^V5#5u^r`7N$VOL3sysofzJ5?nZKNYfdRDc9mEEmcXSPE7ii4`=s1FNbgUUHJCdj#fpnS~(Wy97>fYgBc$m?1HjE=RO^PvO(&OLD`^k^9+;?%5#^XY|vF6H=u0L*--bOY*|JIh9^)q zsN8)8WrOzLet@z;cSwALvO)I|{eiNzKxe`;L*iYBk%55&$_C|KJ}4VhhKoSiMvM#$ zQcyN1Pb)y#=8OysYEU*Pf9pWmwu}r6Mo=~=uY>kefc)yr$iQF+6$j;eCn(#45pszK zBeaSKmG!XoQlRo3R*!(%Z7?>dHizw>M^}TgUkWq`0z01++C%`g=V0c5%6AwW)aHY+ zL1UgUHmGccu|Z`ej13yQg|R_p8H^1YqlK|SlnqLkF!i8x24jQL4U7${n~A}&ITuj)gVck@ z9YHhw7lGtJ=7HAZ!SsOi2SLxN0I@+BCI_k)VQi3i1}o|rOrS6WiG%7@kl8SMWdtDO zlOTIR_JQO;G&n7TG(d3&D+2?lEP--C#U+>tI`0pp2WFmw07M3f!5Z64nkx^x`rBZWi|^t=6XA4$L$6v75b0tp}iLnHx4 zkY|jL1e8Dm#z+F5p!hLC64(e5FhvqL1oD6xlE5mEJIs*;Y(UmpAPHOm*B4lA=KZUPuBZAno2r z0_`9HA0z>PkT-mh1XMu+en>HJ59Ez7B!NVYs$cSjT53yQJnv1pWEXhaM!T?NH+43dBhNFWwT;4H|}I3$4sAQkaQ0-%loV*-+Z z11L_CkObC%0wftpKnUcz6eNK@kd{;=foC9V(~txrKxU*P3G{(fWFloI(85&4EF^)q zAVaf}wD7SrFfisI39JOUBNs^k)NoeT`)Zb!sL=pfu+?*uGLW z*ll&}u-odudzB$=3Q+3-R4YO-=$r^9@advhX0kx-2FL%>u`)g> zv!oa*2HMqFl$Z;>Cke96C?l~fHNM!`DA_O*Syg^+d;xfeB~(>;d~Rl5d|7Hyab|vA zd~RY^ei2l8MtOX0Vg*7fGY>9Rl$w*8Sey#d3Ks+0S5TCh0@V)M_XN7Xz9=ylDw3O9 z3epi@P?8#7keHqd+5ZS}M+(SSiA8B3pTT?uHW6l3ab+GX1d3A2;`8#MhQhoK@f3kA zm=L?b=H_PRdS^!TZpx{p|&P;(M9Mo;GNG4$D1A8O2B0067 zBr`t`7C9i(ia`EFN`_#SB{@kjH6RZs7Nw>a$LHjy8$taC_Dw#DZ*o&}^NT9u^NUha zVPTpHN)KqM9Bh0}etrSWe3%X=pOcyhk7cBcVF*)( za42$V0SfHom$4;J9LNJSf1DYl}tJTosP zzdRLIyn)glsCdLyn1Owoo0tp_ZICCx2E+3-SV=`r2~u=HJODDcxCoL*AtKOmufFg9on42%ux(8JV&W_@66(8wW-4H^-HsRxZB!q}jh z8yFijssvLHn(czIAq@%!29O&-CrrY`L8CG-zko(^Kn8J3BE-2N4BtiZZWMBcWDFv}X7{mw7^@3v*ysw{y0d)TnNDoL1BoCTrhvhU7 zA2eqO%WWV&Xniv*$AS2uIaye)1Mxxk7r}BKh!5HW1Iv9NKB%h$%Yh(1XfH1;7lQbp zIU`t31o1&*#s`fpgXT|Re9&3upbim?zX)_)J9LZ_WFKgZ8MYr3#0T961PU{l`diSu*wXJh4DdqlVPO^$UHqJ2JqSjn18&O7#P6w7tr{NVPaqa-SGm`54vv$ zG(QXDH!(r>e#7{am>3wqT{NhE(0mx^96gx)9wr6`P#nYfpm{FPye^FYkcoi-G*=Jf z|6+oS)x!9q%nS_Reg9DNb(t9$U?n2RKd#IS;4^k%{)uO10H3`E<5w|5?o)>Gr!qtK z;KKMDm>C#gr6kC_)69^yL@@b>%#bzHFg|FQ5>{e@)bq12Fu+Pp5MPOffdN)>g7~H^ z3=FW+6U6ssfz0`W`kWwsCJO@tXgCt)-wGB62GBe(jNi)wxwinu2aRKZ=7wSX?JNuo zp!EkZ{&5xt2GGbRjDL-VfdPE>0W|zTBYU7c1e51sh1?$vV-Q1x04i<(iRtAR6Na?wn6*8v-Q{T(VzyP|72F9Pu%D@1cuZHp0 zvobJ%_VUB{`&bzmVEb`F;dP#sfng_-`Hxu{7(jaxVCuiIGBAMd0fO;plEcK1wL)8c$WDa`A-fhPhM^VJR8pH)V4&MBPi@;m- zAQ7-pC~CkWa5dnjJbKR%+S7$K@4;%&dcNSsE}A~D7`Oopi5?gqxgif~hUaGHVI6S+ z%OzIeltb+jfK;P)OF$y%0{}2Fm|sAA%x(Z&6wlBBq^khG*BjzRupqWh6IcSh`-`Lp zrGtqiUW{eX2GP9*kAxrwX3%>@NWCg_DWnb)ND6s?4NVua6sj&*Hwd|#hj1Hmmldhc zi`-|z-gi&V&r8cpCp69lO3b)>-QeIx>TZJi`Pc`=kcS_^x?sLS8qNcYBMlsa`Dnui zc!ssW%E3{EJlIu%F-ikghcS!=7R521f*6|tc@Sgt1i6C`HU_0<3l>2d`~&k*2OUAC zB1Wsg3Xn&)zyj#wF(5ryhHcOXCol)pKrxCj76%uEmUAd0tFWj7hb1oK@DaG$UV+5aq!v)sCz(j`;4GQ zF9QPuXsstq4X7`{2x=TNK|*+}Bc zL2S@rR16FZYd~zM`W+xPC^IoIFzf}fq2eb&Y|!Df3=9mQJ4<2y1uuF4Eg)uKV7L!b z16BVT#0D+aVqjnZtuKVB2dyb&1WlBI@(O7F5UQRR#0G7Y0IhQdv7zE}AU0@$H3I{K zGKdWo*9WmdoqkYwg4j@TZzOg&hz;8K%)r2q2x3Fk?XsQ7CT8&u#iFfe=t zv7zFieaVcV0SyKQ25!*&FjQO|#0D)!XJBAZ1hJvwx*#^_a32N+2GCLzSlBv)#6g8C z=x%Kg8>&7M#0D*fWME)O2C<>y`5-oEBRME7f!I*-RuCJsK#GBZp&!JCiq8hIK?OMj z1H)1f8!8T7?f_j3w+%`B5Qq)h7|y`J0P17H+<6%!4l2|c7#KkNa$(|6K;obUc?=8; zFF|am`Cmb7&;Shs1H&&68!FBQnq3C1f&hgZhz%7N2eCnm=|LBnf!I)S4G4brS zK^Me^id%x%paCHU1_nD28!GMvVuR+R85kJAi%+29(I9cq>@oubLjs5m70&^&L4#Wi z3=D-JHdMS8#0CvOF)%PRf!I)S@Ekno*l7j^hRI0c^FeG-1<1g_umr@0s^0)&gBD6M zFfeQdv7zDzL2S@~7Xt&sF%TOnehI_|Z9-sRV7LxqL&ZV;Uq;XdZUzR17f9k?Ky1*V zfeZ``KS6A$dREZk`y&ly!tT@pjT6GypezJqgNhy)8x*xL zHpqGy8{{Pz8&vJV*q~}2#s-gbfi|2lK*o$<;-C?87#lP)4r7DHabRrlI$fw<@H$;6 z8#HzRQv+^0LB+xAbfIkUI$bCmyiOO&28~6+^n%yvLdC&t04N*0P8Z4st+9lu2i<=T zW4nOrJE)ofBsOS|JWNdnl6VOc8+11%Oid4xIOuF3m^dVs36r4W6Ew~OYBz#ZL$f)E z3C18f5Cc>NfY{I_f#ACwK;keAk^`|p$sIJ7Oh_H57y#)3jj4h3f$Rl^KZp&&ps^Sb z4a&A4Hngf|I3vfv07_?|ViP0|!k{z=s=`6$L5m#*(7nRYY8qq=`2H}EJgCYA(O^MP zzF}lwh=+L|R3}0uKxq?XHq729atsU+91IK~dqLR%BnPq=)J#M+uZo?40b1RIO@hgR z(=k{CLY!cS_yfWNFZ={ELHAdK%!b)(qYgPw4rDKArT`=dvKMq_C(LY+#s};S44|+F zu|XIn2RoMllm|iL>>LaXav%?YI8gtB)PnZOfM}RHRetQ}=YbaYA!%nwNH76%AFEzikSTA3n;CTq< zMxbL86o|PS0#ufO7UY7`J_CaW0|x^u*{5GI;MvEDF*Ap}a}^XwcrfPuO30xLn%_c> z6%Zd3!gvfslNzY<2UM;gr(;kYK$}ot7lP6eh=HE&K=~L{)_~+d7^V(HBZmwqU4yz> zAUiVVuJZ+SI`443Y=+Mp!^iTt;VzDJBIr6^@M1;e>oYusLBb9a z)14$iCyX;AU7#V(z`%mU1zqIks$~~fr1fP8q`&Sq(w-`gEWEEfM^f~rAsF8>26roN#>U7L02_E zPsmeZWEKP;u>m>afsd1&fst7ZA;Jmj5ip{xT7jGqR$P);l9?P|U{uC{B2Z>jzyM0# z$qe8*f&vEcDy9?&kC??}1ePU2CNjWe!NA@J0Sau;(h3j_i9-f(;s)_S2N!_i5hf0c zAW+^UsW1mGvw$p)Ao*tEocv^zwHT=P??DWu#)=C>`v&B7+ON3)2O`KSFveVS0qx*` zWkGcosMLUR7(jebO97b=D!GyQpjrW$F9g3G0u-H~JN-ayR9N(a_|O!Okr7Y?Kv@N9 zEa(nOQ0@iU3}S=IR}hA^??L9n&J_pcci7qQpmsWp4eFAD^n&U-5QgamweetjL3IE~ zJ;<$~dJV<~HHA>_!-EDH$mg*BCn(9n*q~t*n3d130YxdEge zG;{}31F9xqW7(iKHB20|R~^O%uVa9^4LptvDfk#bXYGO90P+`T|2RxNXm2>oOwgJD zm^f&EH;fH(2S_i72E_r44YCHt2Bi=f8&s*l*r1^`7#lQ%0AquOD`0GJ*n$YyS$I%4 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

    iTwkK&92VC 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

    C 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 J3^E5q0|590*qi_W literal 0 HcmV?d00001 diff --git a/tools/sdk/lib/liblog.a b/tools/sdk/lib/liblog.a new file mode 100644 index 0000000000000000000000000000000000000000..0ac537285ea23211789c87a8da18fa583f520632 GIT binary patch literal 211222 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

    gD8gT_&G;z1>d?s?F7f}S*}f2Yq6YU3Kr0gvU} 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 z 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 literal 0 HcmV?d00001 diff --git a/tools/sdk/lib/liblwip.a b/tools/sdk/lib/liblwip.a new file mode 100644 index 0000000000000000000000000000000000000000..66390e1c6db7c7f7e39a876e9840fdf15ad2ebad GIT binary patch literal 14550218 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�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 X}moU|@CH)5gTW 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

    h8I@cH4&;>PTksG@pKB&P9I?}nK1iXIB%p=~z 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

    ?InZ1Xq{ju{I0h=vAv@X>3@Sj& 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%0AfSU4+pWKbD+`E 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

    T?{^h9V#w>B#wNZtsIiL zDiT`}Di( z7ZMx!jM*7T;`5Q%%aGV>k=R?1*vRL~9zqg7iNwBu#0K554y(WJA&DcOCHn?R{4)~! z7ZMwEj|$8j4y5rh4UyOuNNjr~wi^=L z7l|E$#EwQ{Cn2#jk=O-D>~bV_9TK}0iQR+5o{Yqvg~VQn#9o2KUXR4yhQ!{B#6E(= zK8?h_gv7py#D0LpevZU`hs6Gh#QuZCW=1-DiVKM?h{TpaV#_13)sWb_NNf`%wlxyl z35o5A#124Wha<7$kl3k6>>MO^F%r89iQS0A?m%MqBeAC;vF9SOmmslMBe6Fjv3DY| z4 zv61iU;z1fW6Gmdwx(o+hDGKX{(%LTMyCXqYhr;XyUGoWJgRbF(u|Zd6!q}jzE@5os z`yvPP`V(TplhiZ)h%pn_{$EP;(qjMq=-y#S{W8?|4kNEqqV?UN8Ax?sJ`x-GuIE}L z@fIXD@_vm;Na8b**b9)@%aPdYkl3U3J|x|a*87lfphdkeh13R6L}F_ov61iPG(!@% zMPh^Rn1;4byphC%kl4s~af0udhN@3TQj>?oE=6M3AhD6}-|RvXpNPbsfyADV#9oHP zM!s`%3zGP5B=#XB_DLl61td1|J)8HC#GfLu-ypF+Be8!Wv61iANbI9X>@!Ggqy}`oJ*=$@x{4mg23;EuVpy-#VM|KJFVN^gV}AA zoYyf_*0>^{9gVzpakO6m$y3PZ?jrAHNJMIrBcH{GeAYDbTE|Kx^~h)NBJXQJ?js%g~WD5VtXL5{gK#V zNbFc7b_xk=T7m?5RlXIY?~ex@i@X_(ml54kY$|B=#{R_E{wM z6(sg;B=#dD_Ddx82PF1)B=$cfHY?Jc2oDll7>O-~#8yONYap@pk=SNPY+EF@3liHK zi5-N*jznT7AhFYt*m+3oQY3Z_61y3R-G#)Sh{T?O#Ga4DUWUY8i^Sf7#NLg>K7_e36Kw|SFvBi+svPf(dB(^pZ+X#tmiNtn5 zV!I=;{gBw9NbDFSb}|w>3yEEb#I8VM8K{07t~MC*eAz(l2OO?<>k!jU zKu$BG?LbI9PHH<4ISi58X~=mKSH2sH_f=8iUrNS{=y^9>Bholn2ND~3jn*_I@wrIs zB}nYmNNi%ljnp~!;d+lAF=2%(Pf?P_kk9EQ)eXdyx1`=}ipve8iW5^7;WCpLz0?Zx z;dDm{G2uy!8d|4w+CV z5lHNKBz77SI~R#vg2b*yVmBeNJCWEEkl53a*z=IsOOe=Xkl34%*t?L}2a(t(kl5#u z*w>KQcahjnkl3%0*q@NtKatqPv>|b|p9e!57}r?+SI~ZTkmo?jn3I74l>R_W(B5_s zo0)-ufeR|m50U`2&4i!~BsO>~8fp%>Ee&OZ$4jAX1CV+SgkEA;pnEhy;~6lupz$-1 z5up1%LG#!w3=E*7&Kc0vf%XK!)I~$pfYhR^1FesQsf)p*&WC}40j3Ug=PJl75JopI z1W8>S9`itU!OR2AsesG^VRZ9Ace=vVf!4o()POL$x*Q~X6Y*e*<61|ENa&H#p~%fzD&beBC$T^1g7dyxDAIx7?8HV{U4ALy(>n0cT$1gQaG zbakM!3t;L%XCs5ufH1l`&>gxkb)Yr7AT=P2t`5{cgQ?5M;}6i;#V~aRc+|Z?@-Jwu zB*;z>Mzz6@l zKp0&es9y$iD2~!6e7XhgOVRUsRNcMux4+p6MVRUt% zyOv?*f!4Ky)POL$I?$dlm^x5d2vP&W=;}acT*K6X&N2n50bz7?Q;^)(h9_J=Yja@c zf$r`GnFYe==7G-AgsB6~i-FXDFuFR>J+&}(pfe6YYCsrW9q5i|m^#oJe~=mwMpp;g z!wyr|jmICLv$$je z3R4G~I|iu%VRUsNNcMv68vv;RVRUt%dkbOaf%d_G)POL$I?!1MFm(%%{GkA9OEWMq zfaWkkZDY_G?jZdjHVDJmp!rJ>+W{oVz`&qVz{CJ*tApClpt(Dc9EcCzPmg3?0TWaM zlwyR^)=+yv{Q{5>E_I-JS&+L4sRQpxLbDgN4+>;92!q@QqTQf=hxx+*$seFOFpxTs zKR|7BkXwyFniv=uKxf&4)>}fk;JyM#9@Itw(J*fwU}j(d^#zdCf!MG%8O&ar0wxAf zTMQI_0Z=!A>;;vXAoD=f}Rt5%;UJx6E zVdjDFyZ{M6@iA5g2GIU9C>L}!1(>-N>UWsE3yPQ+K>a(Az2Q(fkUvhL+54Q8fdQ0u z!G<8of%dI{+zK=ALJ<=KsP70e541lGBnL9@9+DoA8SHEf3<4kq6vO-hI-eV)2WH-v zA|?hQax**u59ko`c*6 z>kncx?++gXgA&LfD8^;pjV2}rP@fuP9;`oz%{)1N28K_dMO6gM6KQ5*_#y)FFRVX^ z%{&2V;{3}ogNXrDKZD!{>kncxFGHGv0aVUIod-|P=kG<|5())*r-XUVt0}1L#Z{Lhd^-7vW!6e-N8_ljRr~Ky7zI z=IP91VmQJCi4RzR5Sw}W3JeUOGl~eA_hA7O186@rDEwgkL2Tw-QX($=7A!@CAFMx! z&Ab;%3=Enu$KgpYN0uV$K~Q?dm0kpu85lrw!Z0Ior5B!MObnp5G04BL{vbB@iK{R$ zfcm|J%oA9_#P9){KVbbqZ01c?VPF95zawNG!%8Lw31&$A!uo^Q%!^VZEj}Aejeh+u(|iHZ=wY&|VBe{!LiJ#E=8^FRVX^&3&~R*z0rj^7+hqM12nH z4`MT~SA&58bk-Ol_dQw9!~kkzfzk`CKZwn|b6N}xur>wAOkC+tU<(riXuJnx9;`oz z%{)GB1_sdC{~)tK7?*h+TbLL?cNBumgY^fonU}4{zyLZ!8Dtg+<1#O07ZXDOFC_iJ z`h(cadt}PM0J`HFWEKeHGH=UqCWZy95c6RDL2Ty9Su!wy#;`zUfiN!fLe4TVfbN0^ z`4`q7#AaTQ6$67LC&(lS#%11=^Gpm|_#y5CwXJcb=WJ&N2GAZEh-nNs+Xo)^nHWw$ z+kdeBAU5|&xG{k9IU(}|o-i>SfrcNfKZwmd15XA9P#=ttc~@Q{>LbuyI5_?5$-uB5 zW*DCG+2IwUU$GdeeGhLxL)*JrUJMMdz8AJFN zYef4L)YrjfUY!>M!*7rz$Z>f5tMG=2;ROdIy{yFJ-%5W522kG_Y8=k=!toX1U(gzJ zkQ1=Q?>c`52GDvVLgvMMMdT0Ac^SCOV+REEeXzbPw)of{ z%)kJeb0lQmoj*(rp!qqFdE4>$_jND>gC5K~3$*+Ll}EVDn-@V` zd&q&689sghy1NsXd0QeF7(n}X358z@D>DP=98^&F9mW%Wmm(P$Bw>c(iQf`-g!^D) zAK230>qrI$(ArCwk+|Y_20JqYXf6ljKG6D1T>f1h#lQe+e-Se84hJ*5y?YXmf6by9 z7&gER!{gsGoXiZMdq+X;1D#8P%YDzHiR-Vja5KaEt7q}JFExg^{C0<%8D1ZO?sUcF zzR58R44|<{n3r+IhXD^W18A%drUHUS|0C+I2kcvm(;G03`EZV|m!}hgU3d?Sl+nX88EkZ9MMF ziDh5_m1nRh!4187|dA^-9SF@wuVP<{j5 z!HCO!?gLvS`(Og zpfzMj%@78mASQ+&n4^%&U62s8D+9JFC76lf0w1J}1sj6^%{PFe2-!T7BqoNpykIS0 z0%Q(|kyD;o5TBBoRGO}rudkq>U}$1)YHng|Y;K{TU}|8fprBx6pa2p#FfcPQQBW|l zur#p%izIN>yZX2>GQvy(#a$fS-ypMBn6fZ1FvHrX8Vn(ffne33d32C2(EK-u291k@ zXwZB!hz89QgJ{tF4~PcM%Ytaod@6_rjgNz9(EKHc2F*KyXz;#!1_lPunko<AC{2WLgyf=k`f#CvFANc-O1_lPu8Yz%G z_`Y@q25>t9#J>eq2U;5i;=|^e!1uc{FfcrV%7fNKf#jb-`7fX}cy9{>0|O|XfaJmV zzcMg@+fg7sD1C!yP`U)s-=O+H?ROCW7nBd`mw@=7JP)Elkq)Anpm_{54+!Fe#z8?e z2UHwAH_yNTo;LyM(}RkG@;r!d1m%Oqe?WZjzBmR3aJvx1 z2hG!hXwcdv5Dng&!@$7c0M!R86F}`;kUZ$VdQd(9wVyz9kD&P}&|E5LogZi|7-+o^ zDD8sMBPfnQ?gY67G(Vca$iPs+$iOgxk%0lUrUkSfU! z^e{0nY+zylkH>?~?g!a9Q1}J3a01;~3UY%5av=l~K*OLjc+tZL6eb1C4B-AbnsTh% z6;L~1G*>}#lC5fiLSAY`35ZTkicc&`w^c3RVqj1$Rw$_~NVQc>QOGQ?RjuG+U|`6} zPfpBH$OKoDMX9;@C8-cjaejP$K}lwQUa_reg^of=elbW}NlA{aY6?hSaY$n&gz}l1ZO5#D*fNf-8fY_-}oSL4SnpaW`o`&QsP6eercv>s~JGejrISrKNfqjLd zF+aaJHC>@NH8(Xc9b{BdYFcS=YKlTiVo4$-B{MMSB7?-_lFYJHg@WXyVq{@ZhC$}* zCgqprrC=!2#ZXsL4yyJs6oS;DW-l((^p2U_!Rb^1k|iNY6Pg)AoSYfV92vwO$t`4H z*voWc(~U!o3=9uA7z`O0)-rEoU^v7iaDxdVgw9{cz_5u);}DbPB_=J1iiHdeJ08KA zo0x16Y$5qWLJ9~jlM@o#`4E%KB_`KLN}Nl70e!gSye(?KLIG-MYtFhB&2lvErU7}{7E*0StnKEZrL z_z^P?M8<+SZ1O)Ob*eLegMV08xzA?XzXfi z3RC(o3!1+)b7X+q-N?YONCWC#WWg025M!{3fee9|v6tzP5;sI4x#?*WlL5p4P-+vB zJR~HA;3|n6f+Y>8or(+$8cc0Wp!peyGMKL*?tzFw)xw<);)D7V|NsC0&&%qwAF>HWpPz$EC&z`(%7$Y%47 zk%8rD83O~85NP=m6C=kQ9YzKg2@ysHCQ;A=5+){AgK3NmEQj|qFffUMno}&PEQ}0H zQlQy;CJt86ASx3Fdj>BP0}~7D#C41eOf2l7M;IAcS(sSZSDP_1FfnpGTF=P9#sX@; zvx6rQZiF*1FpJoM{A%%uk%3thyku_XF-8Vv1@P{ZFb*aLW<^kAjpd3y0|T=zc19Y*nB}G6z>qY90ey zEr`v|?66njo!0rTIU+t5}#2~<72|Ck|6QqX23dCe!;07rL z-Au>>n)+jAVEMO@k%7be0wV(huK=gHG7|#>UuJC(w zVZfPO4`SbDWneJj{JMvcfotDUHU7G)<+h8>IyTvtHqojIr6gRxyW(}NipxUPc4UAanfix{}Bfx^y%Gx9wn1J_Lu z+lN!QlaYbz)_OJuh5*j=w~P#2w?XV6&MU%93|x0WYC<^Y8#6I*-3Q%P7r~WVT+G1r z5afm^&b&tq3|vn@YGODe_b@PUJq587xQY`QxSoNOr*IXQL78b>MJ4$RTrWVv8Jx$N z85y`Tt|{QWVaC9~^%2A_;=KQW zfr0A_NKFansuBhUuCE|=1?MI>yM{Ah8Uq8@caV4k=XXO!2Cg3N{0(AvaC&4hGI0F`vAZ~#wlFYo{RjE5hd&{ViGhom5ya`^KT*TTz{Sp($Iieo zfxqYvBLf!)m@|dH9u%ouV9pHwbK(pPT)d2+JT!-&i=T;sOOVloje%hS{}+A+1}&A1HaY=1_mxA zMvzyw@c)r!V&GB%b9V6Sb1*P)se(Cs_-`F!VBpeZ1cl-Oeo;`!X@fZj`JZ_*F>vXD zIfoe7Sb{-ou303Q7$Uf%ufh^GcPt`dL)egn%^eFe5R$MVY)Ha}uptSXI}v1z4md$_ zCxg@*fDfSV7N<4*g=U9w7`hF z43t4a7}!{JSQ!{tW{EN~aM?X$Wnf@qdBe)UAfV64zyJzGL69;*P{tAj2{Ewb6frPx zc?qzAREmLCyMly4fsdpT6fscc$8Iq&a7EaImAk@}gCYS*Imj0bEVT<68Msn1!7B4% zDnT)XP|3iek;}-yRnP}kG=+_UK?oGN5CtH2FtDs}WMtr~19^nyhbsdER}aW=mI_k_ z2CiOENC>ZvWMp9Bnjpf?z#zg7>S~MB$T2c7iUdb8FffTc@?v6O7TJHCk%2`-DujuF zRYWy}iGfYzCqDxNyGZL31_llh4<7~wP7yr;Mg}eh(UP?c3?e)-;DpH!D%yEu!E6Sx z0tOyAa1vz^0~O~y^58Vi!S5@@$iSlr=5Xu@1i?WK76W;dfsJJqI|BndDE>LNP6Ih@8OS)U z;-X{*p5$fOFqD1_qvWAhr+#8w=( zgCu()lB~?2W`Hzf6jLz+gA{1g7bLj~CJ7pDfk}d{+5<@*1WQJ-GK0op7^FfO7#Kjp zH(`bA#KVL^qgxD8pgYe%s>@))paCxiDUjFa{~mEoUIr%fZ6YOvRv- z!&Jh+AO*VT45VQnSSE^<88leNAhio>>kY6lvW63k3=AL*@4+%rtjwU5t_)J3y;dL_ zIJrSVfTTg@E7T}(s(=i^iQoFbz`zLFmdyZ4(~NV1xEUB^!Aai-l=MNFLI%{DR)Qol zCQu7q&Z>-wff2MnfdSNzXPk3_n}IzAyq(J*0K=Sio z^5DTYc^w7@2CzJ6{SQcfA50!RC?^k^k^spw$SFKyU|<9#dIpdq80XC5f#p(gMZ*{* z1)81!d7YgH;&o`Y1dZM?NP+f2fFxBQlBn4dv^WJM=?IfV&X%B=YLH|ESQ4HsK?|-y z!uc>^NR9%z5G33N69x?uGRVNPB{=XwYkC+M2oM0}Fbv*^u!?IkPB621d}{ zR;WUGUhE1Lua__~FlK@5Qw&LBU|_r1_oAs25xQ!1~w1{;vJXf(WD>G;zjI&B(yO#9%NVM1#s0Mh4Ki*PuEIj6oB9j0`~_3S7n@b}E3%9mq&L zXo3-}7`_Y|q!c6qDq%o0DD{JAP)-5SpyZECgV-Pps=+}tIr>=`z^(z$)G{+LGV}AZ z3i>lLF|aTT2(T(D>oPDfD+{u!f4U6nV+*k=cDjN@gjqSR*fTOPbBVAnWB%dK$iTwP zEy~K<6~n;5%r6EujD=Z1oRul@F9QQJiwFxds{~YZFQX)cg+Ve4NI}Gyg``=zbw4vQ zF!PGCF!RAg`DIwSyvrFGn0aJb*?y%kFfg+-K{T*1^U6V3V3OGxs)Ys2WnmVUXVpA& zn~{N8R|+O1qQJ^jlml|Om?A_Kgk)AxVwJwj!o+R7(h# zIm3$8d*Lkx2Ig>UR`*vFh1 zQDcWP)HxswWRh9OAB8K##j3csgOPz*J%Clwc`^e7vo<{SYX-6^{+bK2I|!_YSvQzf zF&dPd)j}WwTA^T?g;npAH6sJFK9tLB90n1`B$>6sA%e`>5fBE1WY&sgRW#&fVqn&c zV%1V@0F8EmN-JoHFbi`-)rs&x7_4FofQp8stPDK$Aa>Gy5ShRR60z6|VrQ!|F|aZiM1w>^LO`TN1W4o|nB5ov z66x^-iOg9DVqZTCBCC2qdS!w@WZ)qXd7BZW#@Y)cE7u1SIeQnxcINVU+rZUvG0njl#Ru@~1-PjXk+6-_g z#kYfGr8_|6JaAgN?*o!;t^tWmQvtE_v_Yg&1xVyk5{MmJ05WX~*!J=-AQAOwknAbY zpfSU}-yrssc_8r#;8ZsQoElHu0g2@3gUFx7AQOZXLF6WIyl`ZK#MhRB$X;-$hIxb7 zr!qlm&Myah2C`_*>@K~WCJ+WRXBrWL+U{4|1pEadV}+t<_r*9iW^&Ym zNVOyo*#dU$_Gcj3^J_u6m@GhS%LyPhFK7~iVK+FHK6D4EuK?%DV<8|lGJzm6*&3v> z4s1)!J`nrPe-N231X6G10wT{;fkYGwL2P#y5W7bZL_WR>G9eyZGBDbJWL=y}mEOH7)EQk+YXTWX3Fz$Xjuc>@KkH-hfj}3^+W0fyJvNKx%&Jg48H!F@efP23C&M z&WsGKe70#!46I5&KrYbmEM#P0HF_Gwz`$z8<;lRnYAL*gfq~VgpO1lo)qW)>BLk~P zD5&)GP7!BdVD)nc$p*TEa#vKj9cVoZ0|Tp=%|S*6R{0)QCI(i8a&txoR@HMV3=FI~ z9MF>!SQX@)85md%m101)iGgyo@h*@_CbNSW8CXq!7c(-jn(3csWMDN{+s4SiYQd2V za?AZdMg~@^Do{yf-6+k-z-nVXi-CdF_6#V$+l31-GO*g;ILN@j>Yx_~5hDX@P%S8Sg2NS<7+6D|gYs-BGbrA}PUkW( zu!gUQVq{>AI4#b|z#6&s4I=|<)MQZjNArPdjhIsp85me&-%ny-V2#rN`856@s3b{P zY{kI9n$#i1z`&Y(tbMF%|8yx`vsk#+)=pj7$XB~(Q!Wp2G(L@ ze+CBDl1xw`Dz`%Nl zvG)lB1M6W%cQ*zG)+3CsK?(R6<6|KP2G-+@te}eJ1Y>Rz0|VuQE-WoiJy^y^)lnenT!mqR~U~UWnf^v%J>mfv0Z0eA;HAJdV}#5C==ac)cwrB zze9YLu!@$7$ zgfV(80|V<*##Nx`c*ZCRiuZ4f7NBzHJL57?W%8486)4^QV%!2MDE~7)dBMQI+Q1YJ z@=-HWAu|&LYYUSLsIY8jO3!9uVC`Tk2W7KPrVG_f46I#Dmp}zfFVjI#-Q36YHGzSF zbpn&>bp{63$xM?#K{tzOHK?SV&GZJOat@Q;4@L&oxlA>u7#UdSF&QW`FtE;Nat2jb ziTZd%Rw>Cq-z92%+v!a)Q&J+m1JUIJ<7D( zj){Tw7}IP}eSDIs3RK9RV)6!+@TZv;F)%W)o?%i4wR+Am1%s-Rt4yVVObo2on2v#( z4A+?~^*}Mrv;@>>yUBFRh>?Ny7Sj|^MR1#Gr4u6q>m8=>3k(dbcbWEqO5poUlfN-A zus&w`3o3n|Fu8yVgr`h5n;02bpE3OcC5GorH6Z7{V5+EKVqksAw7!v%f%Od&!#oBC z*0)S+K&AUTrf;Q846N^&%0M;g2d1~62H8iZ9#G5f6O%+169em4rb19V<{Q(i#S9Fr z-b69dTaznLmQ`u;Gz*vZJi`j@E%RC@novIIH)Ka);1 zBLiy#vm_{6G&0Wx)%{J(JfM(oW>yE)1ue|WK#k^B=6j&FXB+cbP_wF?Srrs69n7U0 z85meQnU{Nj(i!uAX$A(?Zf3LNj0~(j%)Fo!*~=^oD*gMIpC>Reu=X?ag8Bs$nAJed zxQWaXSqu!UlbAbF7#Ub6Gp_}e+EbXfl`t}}PGz}7#LU=GE0D}%tg$`puDn}`4^~i zTf#hXJ}9*^CxMz=%a~I@{eb1nA)vU9HK-yO`{}5tiU|qw! z6;y()Wv*NXO3BPA>I@95>zU)PFfy=iV9xMhWMJLM{4x$yW-%WD^)ogz+dD8Zux?>a zUc<=1x|R8oA|nIqHs*bxsM^ka#(;r=bqDj(U5pH@JDER$s?J@^&7ksSFZ0%;j0~*% zn2SIq(SGLNpfEeYd?k;Gf%PD>5h!yVV)g}P%EQcppr+^%<^WJpa-7-Sk%@uz1oNFk zj0~(NnWu^{F|eLuzFH0{&zLv9VPIfA!>o9Qfr0fr^G8sp=q~f!sf-M)_n1Wz7#Uda zGvCt!l~T+RphomVW`0mWK4K0ACDX^uL7|{hiuo+a(@&X~PG(?Wea6gT%gDg`oOvCn zpYnoP57d=<$$S`8OTS{?Alfy~pknkZ^MBB+>Nn;@1||m9AIt|qmCaA) z9vcP*)?dt_pc?!)v*27t2G&2!IiO(u%NzoVzkkfzK^FaI&H?$TfyD(>Wi_(Q1~oOB zSiaw5U|?-#DFQVNT3DDs*{PL964cmlWBCILkaiY6P=mOGB@k4@cd|(7Ffy=qvB-d0 zGuJuLI{nHX4mS>A!VRedaMpuSW;%T`c*JAuU!RANqK;RhA5Ggxv!t&2G< zclUu3EsHv+%{z}p71Yg{&+-eD3Kp=`fjV0YS&Trfjzug7K+(ULqHP$|5M<#srzq-9w-ACy{INsh9O>Z%PaC!c^)D@*G&P-J9>Q!Wz&>von& zQA`Z1J6N2enHX4ivKXFcU|`+FVgO1SyIC?o4X-^c^FY0my)4r?85mgivD^cBdOwRA zsKa!C#Tpbj2U$2k4VObK=Rg_#FpC8!xgBANtOJ$MEX$M_7+8<7>;k3T<1ErVpp?w= z8B`{pWa)Xpz`%NnMG};KPqWz8f>JUIKdAk7mL;`~k%9FbODo9e^DN)f85vkFud!P2G(mV9-!Xfb(VBc1NlD77Eo{c z0ZTUvsGeq#0Qv6;O9rT$@RY?&43y?snm`HVIm_8i3=FIWT1i7*^H5awUIU5m5G71iS;a~k=f3A9Tf5%tcjq;awlulWoVyZAEP8F9Ufp@ z2&zI4F`73pFt8qFoLtYyzw| z59(D|g9;S$=cgGMSS@7TLA?sKe~b*Q4r-ughT~b#Scuc!entjXXHih|%(WO)1GxPL z)k5xDKqZ@}HE0CLrv}svN`247z`$Bx2CBH489#y2Ned(U4AA;B1_oB%5Rkomrl4LI ze-P;OB+z)&PR54Wj0~*17!QGJ_1%mq)}WRGV+E*4+{-8l>NM|T+y^S2_cQKvWMp7H z!1&4uRH8Bp`7?qViXTDEs>6&^K@Hj?j6Xod>`}&4PSIbb1yz1bR-j^U z0@E{4@jQ{q9MmY7#B{tHRQWOO1|_R0Oa-7e%v2`Z|Dg6a(@9WyFrDcqC^^nxTDOFe zfo&<%t=9|;Y`2)K?3ftXCNQr674lP=-x)J8u+3(k0Gb*F1&X>2$om=`pyEvHBB)E# z!59oOt&{N=sLR&Hs0kYJ>1Ip=b=rCujX{NWFQX_Z`1=@{KuY=N+5GRK^OfmNyuG{UC78iROc=z1PG|%Lh1uIB3=C`*&7g*-(;Qn!TEglr*85DK1sNIGo-vu`F<=i| zWKRm-1{K1hM?skg(uP*t>( zDIlGRfpr(tanKOoZl(>OifIp1?MDU%))P!7paTCSQ#z>Ac8W;{)J9s)tPu}NvdoI_ z7#LX3F<%6Ax2`d-1(o#onb&86+MLYR;*1QeFPLRPb@OLtCeRq!H|7ad44~RkON^0$ z^*=KUs4dXMl6D`|p<}rM>iW%QIjFeVc{(-;_7*RX_xN}jbWFF`G|bu8aO9lG@_OF^xT4J=Oo7#LVLvXp?vg*LHF0y%dx z%iHbXifQ2nP&0}p9^{tyto@)0<~u9X6$S>@4z>rNgx1TZ2CDBTv%QBN`OK=nIE;yb z)j%9HTxHk=>LHuF1vMJY4H`iO)p?NlRS-zRk091KwVe|*JeYZ09f_UE;gM%3vSidt~ z2K7OHFh&(IF|ht*dfXM^YeqX_44{F=5 zV_FRAFC1gq2pZD4$s_>^mitV;FF*}VCIwK=c+SMSAKd4$1(lAUnS??8jGs&sK%?RR znOZ=@-jkW@!Wlsg=|Yf_t<1MTDPRxtM9@(GUgpXUMh4cy%u(fx46H|(H-Y+s=a|1Y zFfy<{VQv9M>NDmupyACI%nhJs;7evdbw*Ij^am(BzcQZ&HK=|uYw0n7a>jj7oHwyt z1C7kKu`q)Iq=V%$Xs}^5OFw83XFW?MsJ*$F3kpGAPyYGJuK_zIz}e`LBYiUjZRd9u!;&8gdd+2X#_~!(TBnu!=;1Dge=P zScWm3RsYYssIWK`SW-P!%n``UV37tBeGwb1$2j&B(wi=M3t*%Fh9H zIu)`57#LU;7l7hRDIGM(rQE)ffq_+}1e9=8*Mricn(-$F23GY~piv%;bB`GqST(PK zGP;%`s2!?ZIfs#fRc9@z)YQEI@`auus2Q&R_A(;_tHF9u92)i=h7{wh@*kfwGO#La z0S(wIzdOgsz^W1lDwb5UK^-x*r*R;gW`f4OG?YL&R&xSqdPnOXsL;_42jy6u$%_~m zSPhgxB8D?SZC{hWf=mporjtOWv6&jkKjx1?CB4O6P$6UK1KL&ziUEyu&~UejsUrge zs}(PZbodAg1LxVG+~Kze7oa?{i;(Dza*KUPcDicE(qrF}yxT z2GD@ZRL1WcLE|oraiEsnX2#v1k;QF{#-L%alZ;P6t&}T_KS4u@PZ;Y##pMge-_IBs zSYI;E0aYsB8FzpN$^SFjfo8K>nA|}cI+;8{DY}p8A!u-O0aGNX$Y0H53hHtlWNH&( z1XVcuL50Y9ro*71y~e}@nsU3#v<1{cd&2Yz)JcBB)B);td}m?@l^#vZS3utBU|wRu z2

    s0}bp=VLkzxs+h&>0&3qaVLk-vRqtXh0ksQHG4H#?2Wtg{EKA^D66)ze0k2mz}n8@1Da;(V9^1Mf_AYaFoFgoSlmFxbT3QjG)4y2 zi7XQuplub!0#J#nG7*%WG#;r#MR`I%m8!rKP{k({1lqw0igK}P&>W%6J5cB=MS;c^ zG%^Yq7+CcVgIdZa`#@f?>bVGN|4sn)ZhYS4F*2}*y{TqkU`^--&8B3{2L;nwMm5mL z-a1BeP|{q_I2V*Qk22PPICOlmZ0rKn z*>@O2LH&-qjEbPas;7(+pn;xejGIAC`sa+vpj`ivF&5MV`^2aPnr{2dcnRd!MyA)G z+OCPI2IRYDCLYi*(`2TI-m;eDbqtxFY+^!GpNM=!ZZssfcb~X%m5Ut%#NTO+QsY-azr-1tkgD2+)w7dcobXXXnk;myy1N=u7qQ1-H%3M%KVPJ+g*t?z@TD{Kydx{$V$Kvk*TY0#j8 zy#&ZE2QJW{sN<%sj0~(!;-IqAnE{lHT~31R_1~+?z`z=?50u`b<3ZUf#tAgu7HbJA zljGi6F*2~GXtOafux3qJ!N9I5|~Mu5trMn;ilMh4a< z#(Gdm(#&WIsxw*`AAwrst&9br+}p-@3N$L*&R7VVDCuCF3hHooGQI)ze!3WMfbv!! z;}cM~vY*iwlv^h-ZUs#&PGq#p28|;!27?m!WXAcR@qsCfUZC1%Dx()@=yn?8WKc7D zI-?z^pD=^*9jF^SlkpCy{W6O&>N9AZn^6RmCFe741*N$KjM2*&8CVxG)`Lo}MT|8d z+m|!;gL-!>7^i{Czm<#!L9w@yF%0C+O^iLD39ikI*`U&J3*$^sir>n(zX3FE!l(o) zOm{PeUxrp&ey>24TyQ^Vwk2dcXdpOrA*iAV(~o6jU<kMf`*xsK?mHkrWk-m zInrHbL)#7-cMgE&>8}1|WMH-P0=2a4y+DPk!&*?G=y($p0#08+6|d`MP=)WN4I0SI zyADbq1?iws>>>xyY-x!*C=-<}1j0~&?nbv`l;UT6RP!V#NX$dHHjxfzA0F6m734`2p zjAP%XjQ{GrjMZM z@bgR)LF+FrFjazbz;&jtpt;E#Oa-6`@Hb4%pu+7vQ!c1m`GF}5)JyrubP&`A`NZS~ zYLb0sx(^znzQCMvhLM5wBC`#s-n`8G9@M6~&fM<`8suko0kz?7GP{DJ`WEx7^`L^5 zxeZjK-(fxsN)&gQZ9pUA_n4P}Mx*aDpE6}&V12|~02(WP%*+TX6P_{80(BdnGqZu3 zsxO(1K|{u`nCF*)Tb_lWvCTKkPM|j9TV^BBOy4`^iJ-Q{XXam^mcUnLXHdEMgLy8f zp8n0e2-MU1%ghdnw+5CjTLuQ!CYD{G=KXY*37|2<87z*Vw)9Mveo(D8i{(71{F}|< z0*Z$@EPFvCC39JlKq>Puiz~=UM_DvMt+?YXEg;)Zvb2I)v!_@pKz;PnEFVEFnlmh| zp#Jq)mfw58BW&!TdhR?+FUWxxShj-3Sue7@1htDUv&;fD>#ndY0=4L_vao~duWKwl zpqBg%mJ^_M?@bnYP%gQ}q752vyTh^rw8-EtO97~WzQ^)2m4SivK8qlz|NDSt6UfsK zS)@U(-phIflr*oieFHUIZm`*b78~4T%Ldi0x7Z{=a|E~9?t+TduX<7^FO`076wT{hepMj>-b$pl@SS?FH zEpe+Wpi0AUV`(126 z8P@eKXadmf9%wSkodLAu!y_3qTji++N~B(wK+8qE!$3U>pKeh7={r>mw0z(os66(6 z13;5j=62G*eIpzdYxM$i;oNF6B9Lid9TO* zTtNeN(RV>(;xT;nObo2CxuA+X?m1{YHhv0dN-m)h)I3cT05z(TR)Koh$@@UvtdtF) z)4PgE(N8k3@=del9>vsi?WnKi(#@=KqX0z6DafM_Jcw%ZxX0(%%7^x z#K2l`6x0MP3_c8+WS46G5HO zs#Bn;tLkV_y;{=+s-J5sL7m#VZcsSa+k)z}21YqhYHeiH01aa{F&2YX#WXX54hv^( zVN?YbU9F6Upy`J;Mp@9;(-Cb}~kS`bu4l%Rt@aZpH%8IC&2v6R7Iy zW&Gd=o_C)QDnA(4^NK#stu??_9>Ypuv}Uj5VOP z-h9TxpwWi~j3F)H8mzJvG=#&*0$RnenDLMv6KID17pM)jl+gjyvt7n$1sX(L&S(Rw z2Ujo(>4Ii)83RB)t5uA`pmyMD#;u@noi&VeK!xL4#(SXN-#W%XP|>xXaTlmrw}G(` zR5@;BbOBAxZ(@uDjec)tOau-4ZDCvsDwno0s)E`D+Zc^Oqj=jHqd|l2I~bpVTCY19 zPlA?7?P81s)zG^cbwOh-dl+BZGl8c2uY!VnA7crqUfj><0vhB#z^JJL8WLj+22~S> z7%eY@r~A)?#tn`zDu9aEql|8#F2*s&37{sru| z&DaZ?E)>s`hdpz)h~j7LG)=sx2$&;Z2)#;Kre^O#YW1vCN22-=Oq`jk-;)TVmI=niTo zKW8il4HUg#OaW!fmyD61BJUL=18B9tYsLUj)8h@}EKn!^Eu%ST-u4~i5>TP~p3%34 z2{a>c1yq!MWaI}`n4cIkK+{~G8QDQC$1jWxpv9kG8Bc*mA-^#OWP!(oUV&ol2csaU zO8&`s8I%-%F-`<2`OO$M12hlExEnO~@t5%@X!PJ8V+&}O`ak1mR?svv(*;n`(8zQE zG|tq-G!Zme-ON;Xff2NTVJ1jlE7Km3zBZ=MpvGG}(^}BXX$MmhXkeq0$sIK3(#50? za&9-%3{XR&hiNXTAnRq~0FB@DF`0rIw*5?TpsAh-OqQT7{6r>6&^XK_CKgaHc`{QQ zXwlUarXo;9JC$h%s8u|Ti4hc@)0sAb77)&0`U*;eGnrO^CO&2{Nvkn2u+C{_N; z(A>c~CM{43SVh3PV=Al%AS3NmFI zQ!!|saXV84$i5v+r8hxy&rJTH-rO#xcc6CWZl(pGdS?%lJE-K_%M=e9mfFX34Kx_A zpXoMe-NXT=X`qtfAX5QoH0Ti1SK}%~7F>VDF&PN$HgA(yc#%R!x&nd>6D;ODAPcsIC zR`;D@d;#iIo@IOuYTTY<+yz?4be>TK)D618$O$ULE;5FLhMg`k-UE$aU13xPbt11a z{spCxYm9NAM$UD{b)a(U2IEFhkKrbxK4?bi7UM5ak$anQKPY_fGF}A@SlwgX3hHa# zXY>Y*6g*)31gb?JG9CiW&OTz~1J#0$8QDP%mM4r7pti>|MoUmv@j2roP`tcgYy-9P zUNUal%gDg`icuNVpm@!A9pu|LjHaMaddpZ13e@+E7eLwT1EUeBhW^Mn3p6_OiE$@r zDe`AVb5LM?VQd2x++P_DA{ZH1zcFfqqU1MYBWPCO52GEZ750~L4XD}uk1+)_(9+1X z5!6*}VG;zT^LD16pvkdrrWv4Or-#W0l#O$QB+Eo3SN&A={V;s)i_#Z26whW!$z`5+}r zna+Yr&6_nZ5GJOR(X&uv4Pzz{1 z(;`quVk1)`xFg9_25Q!AW?BuZ8n!Sofs*1@riq{y(>A8s^$ZNG+nJt&CiQnP-34v+ z1mzvYC7`h-JI`2W{vTh8hIb_fP z8mcq&0yTq-GC*x2<5)ED)=9L|;fm$1mt3XwdiykPWyRHDaCqErDepcZ58MOLQ0Mt;Z=P?7X zKP&*X=cX{8_htYsJhTRt*wYznLDlI@M$r8ltg{%Wg8E={7`K6fU@jvMC~oI7hJaGt z0!CF(%V!bec2JsM%vcW^PFTtq1aitUMnlj5+Db+a(6HfZ#$}w)K^^~Dppqka0;r9a zpag2#C*A@TUfI5&;i8-b&}4k>K2Rqh&kNLO%D)b3$`pu$x>kihK`n|RKTzf`UJjbs zFS!M3DweJTCD^h}pta$ZQ$Q<&s&<2#F4a>&(UR{jyZ-Z7pF@}Nq({mYLg1XN07%zba zYvwcF<7Q%DUBD;+T0y>$u@%(HUc|TyG^Vha(HJy)y@at5wAO1mBNr&!tzrxVm2_(v ztwDXABaD%tb=uDudqI{U|?Ow90cmJEoVLi zssmOq{{}TRS2Cx7#@Saf?*TPqRx@*f7U`{FUJL4mtYu~gt&dyB{2!FH)-!Jajl67N zz5+_48<|x=MgAt{Z=gxM&CCvRe6xdD3e=n5 z$vhdf+-(=L5lC=1vm>Y)+{1hWl>YWI^MGP~AM;dD{l1^M3{<)tVCDpkvmRv50ZkSk zVm1S{mku+Ff~J>`Fnfc#fk&B7fC{c-%(p?4cE_2yKs~h+%vGRv-AU$Epr+9&W=l{m zJI%Zs)BridoDCX1ILrJ2lqt?JD}mDEdFDb;Z|?%L2dI;Ek@+L2=Y5Ge71W)&%p3`7 z&0Jv?01c;HWqt-K)UGirJ!fQKz0S-H%F#ENWk9o?xdMLM;BS9tWZRS0oft)+c zdq8>cE^`rR81o+UbwtV(l;UHP8@UC(CY7?(bqb3CfF8SzdrTd(&8^fZ}~Rixy}hg)EOibHsUBI zP0jTze?h&o4J;I= z64Yxv%~A(yo1S5D0d?8VvWS2N&(E=Z2iNB;4?$}KFR&a1h3-X`IMAxMODx|&%hoTm z{CU9uT6nY^w1wmv%XLusb)988D2{Hha?dU9H6Gj zGnOr&?&@srt#K?mz1&>%}E>)(%z46I$O>p=s` z-K_DT-b4@UJW!jlm-P#19H5W&1SmW8vr2=8(I&8_fEsBNS)YUYo0C{YL4);+S@(lh zZ!clx0CfkJvhJM*D(hHZf(C6?u-*hMY+T8D0#s+NVyyyA=B#Fom|9=Z)Wud^;);EZUJ@fwzA5AN~vwE z?4WVJ?X23Mao8QKhd{mgovdZCpk+<0??J`=ZdMLZTX+v^6{vLE%Nhq758lV>1u8D~ zvs!|Z;w9D{pz)*Itf`=ZmOHHfK#QpEv(D0HU|@Z~$_Hw5J!7>1@t(7C*D)}#zGk%o z4H~{-T?q=1kE|h};l)p^44@|44_0qbcjqVT8c@IZ59?IWfYV>rvmm3J*wR5`H5-huiL zXV@4(&7`wzb3tPzzuE49%xq>a0S!d9uvdXflvei1pdzS`JpeT2*3VuCN+A>2XM=Li zM0P6>wUaX))Ggb^DFRyKx0~}6D3tbbegv(K-OqU#RPi0)GzHbLhdEP0%ZiS0vVfL1 z9OZNcjWe9!^aC|iPI7Jl1Jz63D8qi{bOnt(f8o3dYHxn!)BvqB{mv;1 zYCrwqdnB%i3AACP@*QM}-aODqpne)??8;CJGzMrK4_cgK zvK7=&v1A3c{jIw}m^Vj9BK;cBZqATb;-j`K!r-AFldk_ ziUG7XG`b5EN^vzHbK>Pe1ww*7X#PJ*0n`{yW&pKy(td(UvUGV+{AC;l)kB%AAla7XFI%V+>p;u38Rvu6 zNq%Bf0TtJu8DE3eKz(7126ec;G8Ti<-Z#d-pxK}AjGsU?>kr1=p!D^V(FbJvFUCcn zts=h}yFu&T|1cVX2Alpe&H#;r|6@D^nm_o@xDYfk*1!}Binc~37SIxzCMF+H5!uXC z4=R#dnC5_%UAHoof(H59n0!Ek&h1QBL7BLN=>}*mPA3x^sLJVL$^#7^cQd(w`c^$m zo}kF-WpV+H$M-Qk0G*u;sa0~!lZD+h&$t^{bDPA^)Mk%3kJJE#?JkPeC` z!!4j*t5G?qJ!1SHRJoaa1Ql+kzA2#Hc{4!GKl4SPrm{r55^)gW2v?&7h ze{HQmOJ(dHf=U4UI8b-OAsjT`>&Of0n>)V%B}dompz$_0(3vHy?k_-#Iz6X=%73rl zpkmd>7}R#~T?q;;zvZB|y8m%db_&=7D&zyNfg(NV8>q<>tOuH33z-EPNR9{vW#ULv z&?I719ca)k+7jgEn0nA$Q|tmzLXB$#H8SEGL4#rmr$9~h#7CeuVUixGDU!Sl)bmcU z1P!32%7V(sG+$6?q@Mt_nKO2P##S;JKviJYHjv(IA5b31kpPXYBi=Qo&wdBt&H5D7E2qW2dH*xXVd_#x#(a# z2x^;lGiHFMTzVM)g95&nQ4my&_A%ZCwI})+)j-?TCNOq@)~ZZoYy;JelNdQcmFZ;0 zd7!#u3gc!o1_sutj8Y)MX^h7}seL-*E>H`824g&E{A?!UOHlPWi_r;GPtRsN4)XUL z#$b@Oa~ZcTWnf^P$5;w#Zp~-h20dNu!n8m?NE zpc+=&9<+;3=Qb!+ly3y>RIS_r8W5ewxOgjc{>ymRWCjK{+xvVB3~Y8Qt}!yO*-wvQ zWMFgn1Zpk%fQ|J13!0zu`v+>F`hyLd#<&YK?KhWE544_Y5n~%DO>JQO&%glM`SuJn zU9psj6;$yoV|oZ`{x4_R2 zU==e4jed*EfyVJAB0-BGBwIoGTq+RMik7|wDr;mGf$CIQIgq(>fuPwAc^8l_g;LOL zkzyQZc0y?@DA_5`05wWg0zn-`)nA}NNHs3dc(b|`XqH0bGpH2PTnU=-)tV1#ZfT2w z#!+;bK_!UpZ_s#x9v{fv`qM$BiNSf$V1gkh$el*%p#GHc2T=AgSqPduGT#fzW)>Sk zbFbE0LH@Lf0Y$0Z2~ZEikq=Y>xio>6|F|oHCilF~fx4Q$4WN=PpdGYcCipCh zP*=2zaUCebbu+qv>Z2aUlc4zSXZ#<^1lr@u0y?x}B4Z$^;+w?S3Tk&wX50%}1Tlrt z2ITIkjPF3Rs?!*6fvU*qjJH8+jAt-@0rj|NGUk_o7hC=Xh0$!rGSDd997a1(Gixs6 zi*4Z5B6V({U6G7jpv<#?Q5G~#w2<)tXgYimBQt2udNE@zC_^k^bO&{omNJ%tx?IZ` z<3W=O%NZj;)y)dV{h&Gdm5lp9Lo=%wjX~2Ss~O*eGU^&eIZ(;9mN5yGeAY1GA}l38+bXlF=G8n|F%w8)!SvX-0R@+|U_D zSx|v_mT@vD$DU)H0jkl@GwuN`rntb!4RY>9Mt#tlt4oY!p!KYm8Jj>e23Hu@feNdu zj18c1xoeE7pi!;sjDDcD+YQEGP|NWq<2=w1#4Sc8P}O{!aV}`(!W~92(453w##^9N zd5>{AXa@8?qa$eI?g8U*&?xIe#>Jq~lt+w?p!VcrMmEso+!Mw%pep<+V*)5xpD}WQ znsCnHTmc%L`p4)6nuPk#_yknSH!xL$ zT1bsd5ul{Fis>B4E326nfjYEnn4&;c_FAR`pe(bFDFW2@S|pT*wFx>|d_c=CZ?SZPhCObxaDi6d++$e@I!_VQ zDyv)#ssvgYpMt_{7UNdX#OrKEc~B#2E~7svT;?-|gNm3HjO#$9^(Myapp|Fa84W>g znFEaBplxag8Bc&lbq_NhP-FmY;Z6nFe3bDQD5oA{yb9`F9cK&z^`}lSUIaz>NyZ(Z z0lHI+yFjB9XBd4!BXegNML`+p93u@yr9u6$=ZxB*a_$AADyWh4lCc3iRKlnLO2Qu*N3CtgTW9YHFwof%2r< z8qn;7`bm)08vURyxaL1l!%^!Vs0z^b0%a$iM9^XgT_;e9tak;J74>;RQD{&G5;uGW z8b34o1nSxwzXuK0n(PHtWTp(Ds=@3ZXq?#m0%)w-q61W3Sk3}fXI4d^u9Nlp4$u)4 zQJ|Qy?E%f9*jaA>8`gxWv!d>e?|sY zcWzLB%;O@cx$M~w>Hv7%17%@v4p1fN13Gt=)mI$U%=J_CWMp9VPXwtChycZ9U=v7X zP(DZ`co`@hLUw^l$4~=Mr4jZV)V~SW0gcu~D1zFTk#9iiqk2J=cr*j3cO5ewG%gYA z3L1BgYXtRr<0C+wlLR49MV!b4Du9#pKuzl8Cm``ON6-XI`a#hAe8zFmC|hPM=t!F^ zFHlL5y${rx$*BT$=W;tielO?*&2bdo0CmQSTw|e)9vNxS$c$=RDKxbx<%6a?l|O?f z8`V8P0|OeoCm0!6H7!6*60OOg<$5};pgy+lCQ!wx?*j@g15eNj8$&HnArr0$>WD_~ z1i3fG4`fb;E@%?DjgbXZd2}$o05v!|8S_CIqMK0-Gy>VfxE54(O<}Bzgq9wO|3KR^ zl9WLWzT^)ezocB0VPIfQ%>`|&OIrrYM(IC6Ex)2OZBRXmA3#kFbxF{QUX3zPzR{Ec z4PR&lgQiEdvp^j|oy#szpI6TT)k6J@4WQCt0^>PQH)SH@&A;Fkp}C+cdotru(CGgZ z#;>5bn#!06T7)ul}W-;f#ZX8Xao6||Z7C*!#bj0|j3m|lWX&{U=vP;Y7) z({oT$Z#vT&P}gGy({a#b7%2Cq{Q~9hvS!fXr6B%##`T~U$!112&7S7&5dlJ zZM?@Br-Op{F{3A_%kiCY1E^U3&1ei7%xGiU0h-U7&GZM9m*+Db26bxIFsXp@>jowk z&}9qAEvG-o zd>-W7qs)ImiQpu25g!8s>sjViRp1q%e4rk|Rpxfk5XDXA1EAsCyUde8^E3~cUxD)X zQ)VAfss57r6=($KE%RegLG_Wj9#qzSWxfxpl72D^gE}jJnJ0l3OEj|hfXa(jmdBt; z@=lf@P&VmhNdb)?O=R&0jT%p7xd>_+%w+iu8hM+`q6QkDT*&eTRH`gxVF4}2SjqAZ zRGY75xe02lZe-B}HE*`E+yYgWJ6SA2Exf%f4xl0LgDlaY5$vNZ3ZP-ilPry(M)p~j zGEm`vktGq-)W6Dd3RHaGWZ4Z`t9F-#4K%O)kmWC^JN}gA>rMs+)|V{)pceC67B*1p z;Xg|SsP)&(>H$*O&gumkV((^c22Gjwvu*?}be+t~2})VhSs6jy-r1}-wu8?Y-W88szJB2{s1++cC$)?#$1lG#(`FLooB5CZNIwCDh`sn&&p>6 z+QP`%0kZEEs}X2;?=@>7s5E-R8USh)zh&J68jt+NdI8k0{Kq;KG{pX&^#Q1H)xfqE z)WC0KQvp@+O>8ot8m*a457g3bVG9LKd$+Q=fl^N!TM?*MYiA1tQ5|ewKojGgY;~Z4 z$}YB5prMRzwvWc3O?Ygwp!U}Uw&S4rxruBXpi*WM8xyEdoXqwa)Nr28_Glrr$YN>& zRh;Z~pgCZ^dyddTSk4rbo@~zU0(GH}feJr|@^nT9HjiY`YCq2fvJ4DtUh_e-W#03H znHbpoB0@lmHJw3sT!c%5`h3v|7a1AYVt0ZjTjO?%Gcd5FPX`s$8JGJR7}zrNK(k_5 z`pX#^*m9jgLkxxL0t^gnrQbnCMp?2hBLiFccF<^F#huj*3~bdOKxI~q<7oy4wgyIH z&=`3m;|Wy;2DT=~PS9{oGh;jl69Zct<10|#p`CG4CnEz}H{*8Dm`e}iCv!#ywq8aD zP$RdGQR+A&1KUJKRnV-|Bu4fL3=C}38KppBJ%h2phKYe~CSy0KIW>#X$(@OTZ7!n) zsK%PdXcY(zvrfiGptan+jE6ye=!uM$u<_?~ab^Yv);7j$&JZLiGzE34M4MQKN)2~tBISKYCt)lizx-P-eD5cDo}TN7Sj(nC^ng z$bC$`pnl;Urn8{T^_-~fP&j6XpuKkqWSf(DB2F@}ML4c{=X0~a=oXFz4gcg9LkvDC=q30iB? z#&j3dqHkw%0*#z?F!6u}q#rVgmV(xxGZlblm6kJK1+}o}@jmT?hOvh)D9dJ6gVbhC z0A_ySb6US!Gz zEks+&>;!6Q|6qOtDor=AN`gij*0F_vI;X81$9O;oG;k<^PFPsX84sEpdCS=jnp)Y& zeFxNh+r(WBs?|4h9|VnyZQ+gtt*gGp{eTIYV*(pN&B~x1paMAfE~xZxW}FM!Aik6F z1gIkW!&nVEW9BAPAE?%T!DIzGQe`>wThMISZ{}~HqM?(86Ev#(gyj{e5^iJN0E*+S ztkt0P<8N5cg8E&n*=#`t(@wVcsi3_GY%;=7>n&43^`lKNXga{Q8`SY~I1MU99Jhk@ ztvVkBRlzP?Q=lymtw2z-!b}ge8rs|jv~b2E5Hx&lbruwt)^|ZYM4MvJ;J2MJXc3S7 zcF+?NH7c`5A}sCklg3bX_x=ObwKY}q+b^RC(vw0yDN0i?H|@fB#KU^1f+ zNXHAtnV`9wmyA}RjQx>O9Mqor%E%JK1lngD1&YcBrW8Q=olV~Fpv{b; zJ)kQ|YlA=o9F2^tK_hIfj3uB}MF-<8(D+t2V=riIsE_dsXt-kn z<91N7G?DQ$s2@3rF$fe@Qy2|FiD)Y0X%IDykpt9No5$D+8caXLG6S@I^au+Zs4e=G z9t ziOet>RF0VJ0`{LFhFF5eaw6Bag7&FZ zNkVg*iyf#r=Hmt`+|%+v>)rbpSwUUL*^FhN#JQMp6Q~SZ%lHITqHSeV26Z3zGq!<7 z!LBlX07b=P#y-$+{Adzfm@fHtf%JpuK;uQFW&l|lEIGC%{J&zO!*Vq{=_$7By0nfb=l4C*}n zV|oW_4z)4Q0gVszF?)iVN>iE7fRgzf=5$a)Z4vWxP^*0%9tg}IbFrQe@gQg1pu!e!EtY)_L zptevC8y9F?Xfj&|$Px3|4ua-#*RWj%Rj1q8o`F{99A$eBT5@%ltre8(-m@8j644j7 z`=E&X!!{E{HM0AHrf)jgO+e|khg};~q4lz}gT|Wr*hN9D=-KQnp#2I9+0#HNd@Z{V zXee$A`+m@P%5L@ppnCEUyAUXkpJP7+nx(qR{uZ>2u8ZRZs0}uoV?L-XSi-Ro)UI61 z@dq>}v6bUJsNmSkaRj9DEXOC%eB6DG2+&a6OO8NLZ}KC@0?^X8KO9YQ@RsurD64(tj57tbrnurky@Z8amY^Ql3a)#gPV5%0r=UjWBd!Wia(m6S z88n9Qg=-e55B8hu3TW!2g*zYAqVMIF0VS|$+?Ak(4#&9Xfo5RNa_-^jB8)ST$%nF;FbP2ph!t;?Oy69Zand4Q)8v?S>qk0Yq?yUOztG=_MG=O?ID z`i7?+H2nO7M+;Ot_3#yfM!0(UL_q~-AD=U5nxdai05r!vfo}$AxO*bsaZsmp5+7>~ z0|V=1K3mYzqA7gMpf3AVzF@F(`Sd|SKAkTfRJ_jMa{)DrXYzdqWtmxg-$5JMX7h=I z2lx5rfktHJ@|^+&&uYGhpy}96eEUF?aXa}`LG{%Ez8p}P9p{?@npQc-Hy_lYTPLIq zss^_TnS!R~_6S`AwR{c>y#~#6oDzxv<+zJNJ3y7rGogi`!u_q#PEe=xi_k&P8ihYX zGeIHWFMI}+7^Vp?096okg_%HUaH%jeXw}jh;YLs=akFp$s4=!n_%z7cgTi}3L2yD? z2{e;+L3jzMD7h}Y71Z9oC!7SDhk7a;4w~kDBkT_fCVD)pef-MA}ydazd>X*sQa@+Bos6qcTmI*G&OZXWCq9& z=S9*$h1E3?4p5K!u;?Tk(Asy=D$qdUJ5eK0i>X;m7Str~5|aY)W{8~wHLvE2rGZxJ zEfc!|nw#7rCJk!x?G{@I>fv4xa|aF1+z{IiO3?SkOhMhMXJThT17BanctP#5-(v4U z!)#6BlR*XU1aU)9^iLPR0ZK$m#s7fTBd-x}2Gtvz#ce@7xdY;S>d?|(krkxJ#19l| zrct0F3bR_!yn*=&(Dng~9UvcA?f{K-T7`hLT1SIwC>t-(PHuai= z^HtCog3D7-JHpiwl-1qxK_ThB1=LXYu+3tG91CpZ2-*Q@F$ENoR*OMnC-E|%e2_F7 zH2s{S0IF!ymVzQQqY^aakkt%oPOW3y23lvZk1-?~YK~$EsQS^o3QC(=Dxf;SuopCD zZ?qP)8pU)Is6}pj1=Q4cb^tBs4ciN1hx>zS$%s>+1;~*vzcVthmYxA^t}nX`+LloM zACxDm?Lk-ffZ9olX`ps;grg^azR4U>x*IY1+*OBp|c)?+PaOa(2WTE)l=8l_ps7!9h7H!w~GEj`}M_!30z zWjqI(13Abz0~98Q8K;4w`UvAKP~Y|#;~r3?oMhw$mFZ^~zkv$nbBsGdn{6&It^~E2 zE-^NM#-ndAas@DfPJ8_iDjgp({s46YA2Aw$7GgbSyaEcwXN*yxvHs_b`k;#J1>-4D z!Ss^x6ezjAW;_K-TW=Vbfy&DFjMt_^Q>}IrXsK`HL{KVBdI##hWm^`Fy-o@=f6~Hu3A8%BjZqo2 zfV+qBA82XvOh#?cmZdq27NF&U3mMHpnQ$><7|5FCjD?^QYb9eVs5h~WaV2QjVgq9% zXkYCnMqbdA)fUF*!b}XT+ZfwGOEtDLT7Z`E>|jhi#=yY3lW_~ElHbLc2bvt&&8P<| z#`Z9#g9@j;j7p$tZy)1QP!nT6V-YB$9AKOeS_yxU@ib^S>=2_SXafE)V*scFeuPm5 z6hucE1wm_GjxoxC7ULgh+yyG|PB12ds=bqp?x69(Q;a2`#ffJb_kfOhxWwoVTE}*c zQ4F+i{x;(&(8%R|#*d)p?-RytpeDu(#tcwb?Jc7fXc5V0#?_$m-LQ~-5Fe=+8P8fm{7r9ff!hcN)u%KFRLEXT;e`j7D} zs9JAeIszKpY-BnMYDP3My#ftcHZ!dU6}~M@Z$KkhZA`785v)!oUQ0&M8NCUhQg}0BS1+8-jKhg;s#7uZWAFc2Tr1sPP_K z0~*qZ{{)(>Nqhy`IFlj_8qCj_4f1AYDQLVpy9>0UJl79229w{gh>?M{=qYG&yYwBX zbx`pf)E}%C0j+API{_LFX=L;Q&B3%VW`dRmwlhu#4Hb7W7J?Sa^)k)?Ei|3L=mi=< zpUkKLI^Jy><9g8XC^H$uK~1#TjK4tLmEVkMpjzY)V*yBe1Ji_4pdA)Wb)a$X9wrx% zGbS)i0M)~@nD`b!^OezNP+enU4ys&2R)J<}!ghmNsp0&fzGB3F(7N!*=b$7OB>)-=657c*TVY&rsb+sYQ!i+6Xe!gv8K9LC zOpicGWi?X_$QhfMia{H$HZ%Ey22Zvz{Rf59Zl+nFF2)oX-0<>)ACevcj z>Z)rNW^dnkEr1ILyevHkt7>=-9+5j0^5EFtAN!>;;WoOk=!v zfDtr6n)w{6UFk2V*Afs68fFM=1uYbxz_=cCOCiWEXD?8z($fvpi1nIj#l*nsy%*Gx z@eKj>hJtp3x;Vj{pf+5{>5WhWXERBI>YF)COrVkRxlG$Z4Ze9y8KCj9rA*wQT)B+N zAJp|+%d`YE2fmKU7c>L2mFX8~+-4h-G^jVfm+3vIY~05r1S-RiGI@fkt7A-uLGgN) zX)iki1M4}ac+iaDRVGbPcjy|EI;aVIm+2>{&bY^P6I9E;V9EkjK`)uYKr>9QnCw6$ z#%rb{pwXN+OcOyCAgUh1Cq^QqW}Hd}d})H+TWF z0jOKEoY@7Gm{&0G02R>dnKMBnI~$lCK_Rh?c{eC-4>4~8@eVWBgIZWem^(q0(^2LI z(7^gJ<|&|->~Ur(erRjVB^uOA_U!=WynyeZQLC_{pvFfOCn%f534;1WpbPmJSW~`$ zM$@k{MT5q)t}&efIqo~tHPGbs52k9+36MXT=7BQYFD4gI3-mWrEog|Sk=YxxKCYKJ z1vG6xg*o0Gd@i;JsHr-W*~);Cfpr$MG-zUf9`iZSHi`MnHlWgVHFJO~Xlnv<6{s#* z%Nz$Piq6;icdk^5))BSBf_EpG;m_|5L7q&d2_1jTxs{fQHsmCxKcMX)&Oo-t?oO znbAyb(CkN+G-&W3dk?7BpYsgV%gj9o+NP6N1?p<%vw$XJ3b;Vsz#?wYQiJk2pqAc5 zMg!2y)-=W}d1&#gwGWg$toMOjYr77#2*U0gC|2#af&Ahi0vb1VTm)Ju;q(hs12`W9 zHI`j^K}{CdUQk)#)�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

    @DyQBfM`KvbR7 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

    aJk^-+H)F?_# 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

    ILVU%x|9|) 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 E`tVdUh=0(AiU1 zlMg=A3~Ta1hB_R5FPoF;D;LMDrTfj`0$|*O~~{-sFw^mZW%N`59P(jBhULFUEB*_-GyZW40IA> zsE;P-)uBn z(9i%;YT({9(s>q0q6P+<3U+o17NC9!xVpn0v+x#nKyZAxzbokMV+GK*3h3A<;@04j zqQt!7%+$P+__UnFba=ohU<86etOCj;p@9KtKnPsL!R9`}nbXJECG%gU8R|g3yk>ldGSz zhp%IhH+c6pe{ho-axSI-^y0H%4kH{=e%&P=XDR6r_J_K?vuL46n=-8l?%;b{zlA_X7jnoQoGYNETc}Zqod}>8OYI2DNSXf8F z5X=1w;KN4Uf?NaREew1??M!gm08Kgs`^JNANAnK=->3#|_nANwD`+PgsQDBG>I)W^ zfQD2QG$8f4u3bDt0G4r}15cn)9nb&?#N)w^@j3u%~tO+b20h|_C|X0Ito zuPJeQ&Cv9kf%KXYr`H@!uQ^DsIdOU|(DYh>^jZ+7*Ah*yB}lI&ae58W6P6=Lvmvo5 z3q5H$fprs^whYk|mor#5k*UiNJ$bo+brYGs4AB#qD_A#?Da;T(iMfGwqogrt^$Hng zHnfEF*D#NbGPDHMjGCZT{RPm&ku)IFQn{(QFoE3E+=BRm{QR8aXpmg2t{te`rODvy z6z?1gTC5+T0G@hD%t?*UO^Q!0EsD=gtk3|pjX}LYP}>Yz9D=SF05_Kr9e&U<6>J+q z!OK)E;!R*3MbPO2@sM*-N{T>La6w6trmh|6yaEuJn3octms(Mx$pEg;<3o_z^1-g| zkn_GAot;6gU1-0=2(+mPbY~oNgc7n96tUl9Rg@7xPW%}dG5O9zcVLAs&flQJDcK#P$ehh6F@#6!5?QU1G( z&#M3p%qu7>S12eegC=vq10J5BX>D+4L%|TdiX|Adb=n2o4+C{SP|g|#Ukm`M;K6f` z&~7gS_>}JW5P!%j7mfHdop{j2HX5M2Yt%I2(=;`0Y~s^EmIiAw#Jl= zFz|pr`l-?i8fu^h9;msgscQ$h#X>K$zzo!JfsG@=)=ohdnuGQgTEJH_K(9Xy@dyf4 zFhW{C1YI-&UoQyZ!_U?NosSRMZVcU030s%|os9*jEKqM8G)Mv7=K|i@Vanj+^%_>xW9ld*>L?`X zC?xABr06K5g35b^bRC5Z(4lL=AucYiZlLwpkn{pBYYo5|2D}kQ!3^A;4+!@~y?)Qc z0J4D;oZLb{`eADrjGV#Oiy@ugX=V;O8xC|xK{#j+6L^V+0fV1Uykn3%D5V-3F}Oy! zxQ2m-#KEdSyPcezK#qV98o;*DKg?(3=o9Y(8ACP)kK98> z{y|{{S@s#M0bLaWD*2OA^O7@i6N|DDliWeB;5EY<2AbAb_Beq=kxzV$kB6MkhuUcZ z^_d{zkRB7bB7#C+ZerGYi;qQ1Crbpyjuq9f;rqy}-RDUympS zLo?7G4p2(~w9o*3izw)9QO6*61zkf^gVF> zqJU@hnvZ{YK#(USok5chbVv|w={nel0pY%=2cno5K|6F2A@RYUzMvY}AF=)d+>MX$ z34shFfUXw`RN!vdTfL8AwtlxJXI0o^_ukeZr} z*f;A`nwFMYq=S6;3SyBqcr7OMA{$Tuqn_Xb(F&RJMb-}zfgf**k!j504dTtPEJy|q zW|+mpcKji7H+-L?uVb(`!aD}YO)KyY9dN4(On};&@hC$kpe7A;xu*$e_qu^0Wa!h= z**Cx}-or=1$P`xbc!bBJ+%O4AG9KZuW>Gw7?gScf@U|N0o*3xjNXR*r#-OYYx#=@F z)XC332$bK!$Al;t=s_X`H)-gqYi4L-?Bc@!niq`+ojC&@3INxo3L2n!4lFnHfl6E~ zYuG^bEx2g`su^Kdt{6cF!JtcLAeA||9E69ku?2Kt5YjjYxcsd!0No=M;q2w_=?7Wh z8IQz)w7fxU(UA`;z$|v42N}f2YgA}zLg%N#{aoUMogKlal|h0Xkqp8eBjID3pv61! zo<2T)@u2BWPyy=(xjqt<1AHCbJ)J=H$f|p2oHE3NN{1*{#2S3?P#q-QAuS#N zrwb>ac$8H$8X772rAaxdnz)wFXfinh(VY08Nx2VaRj%kHIhNyKOIo# zPbaY$d`B*X&{P1+D1dm;d9l{uS{K|dLYh=?a|7S@91mIt3F|X~&Irv(ElbVORM4nK z+`tUE{tc9JigV-RK{r4^6McNVhJsR2ab}K!f`Y1nj)IZ`^a5$vE%llTN-=p#pxfkZ z6O|M+zy^UX@3T@+$_3x0proK_tx&7U5aj9{2AY!tH-4ZC+Y~?xus~aAz?1rrWq~qO zj#W^zRjAW2^Z~8#2Ho?cpsE0s0wpn5(AI!ZKk)h(1w%s%Sk(r)49N(oayJ7FyF;@j zxJq>fAI<`vM*zhKc!>tK^$DQ!FhJ*PfzlK5b_dXsO;B42W6y&|K?P`8oTdV-%@XPp z0NOSiF-Bi+>i+TRr57#s}V-xLxQ>I$CIMH><^G{AAsyenwUg>gJ=&K-PMP<)VU7_`3w ztGvMC&>%%bw=0gNFc|eT=n8I}8;8u|4dAor@tMU)Q*6*G3aRG@5<#9hf~8jQC03v- zWs&B_U`OzJ2EdQy1zl=&1fY5CJOH!LkTPBKPLX z5_6y(HQ3Z6Y|=j-Ss8MtPXVR^yk-EtY+q9cE@1>(On^4Lj$ zpveQ6-Qa`7t5S>dVM`OhlXRf)MVyFcpve%QSpXVqDZ){17=x#zL8t$DI0glPlPq{` za6D)R6@EvJ3GyX5(8PgQcm!EG4myF<2y`ACtWO7aI(WrQZ~&HL;lNP>&eCp9!7iRI zps5bj174g$-GV)%6yl*}GH7TC61lLd0(96dXbmcOLjfZ0VbY+;hok^#iw3L?nh8J- zBYKq C-473Yb~M$i+RUHu|F{T0j*Ar7kdq1zEm4B`zzXPugWRt>^8Xez|V!`boi zu$#6${ZJO!fXhH|T@PxNfzAm5^`8(|S%Qv310AXak_FGkLVXI32hi<%!GS@b>#QK2 z3Gokc^nqs$@a=-2`+=`WgzXpv`_08Q095&a3u$M6KWE1f4e$mJ&;bY_o*|ga0BZ1o zSGvW6x4DCuAgi1lUBJ7xp!YLEFN=WP6#;FQgVq9orbsK&5CRO4ivy6azYcPB_Y4jR ziUf~(Li$HK183#3sx?EY>F8oGw?%UE1MwHZ>S3-%afhaq@LSwLv82Pi2ShGHgU z$XJI(yoCaI8Kwn;tDkF#i+{MEf}tU-=j0q<4oY6ISxiU|%flro-Z9A812nP(j?-ZO z_+USmAm=d92$g@lpTA#lh@+niXgv|ARUP0PqLEmXUaYAABB2Qyb_fef7tk59Zvs+e zLC?j5a6sioJm~DO%)I2B(v(zCdIg#7>ddqY9oP8lX3*adLbi1glpL0-TKnPMgFm*C8fG@@K z4Tujg4MuOn6zJN;7nl}<#_ypC4%*C60C#B6$FpE3Ss~rH3_f53>9Rb}fH2T$c;F-f zy4f3)Iph68KwF)HK&2;WnjO+@1r3gX2SyB$m-Q6q=VT^lmZYYDPI^Qd{RY>GkfjdL z)jOb5-jLcDDCaw(Eo6Y|fUI)Bv0?|Z1PE>;REsg%>Xsm4h`wzcSqfI`J41)N zK`W^gj2Ms(Y6R8q@Z%XlN7#V`5EVYG$wZe+bl?pE#2)-0@D!a{Jm{)I(6SkDoVoai zI{CO_RJH~cpdl;+W6%ab@Fap~a4=%vEFPQ#!5t+6_h*9DK#K-=PD9#3V1%@T0J5Xd zEy&*&JRS);dDRep(+I5O3itGL@ehypcLT3@MA}IO${27@gOVk*Qa6PxyEZj|ALR?n zd^nD|fJvjz4}uo(1vo1hSulk7f;M+WC>X(pz~Flxpj92TTcw}@>U!s=DQKjn#Dn|t z3R((&PEL`ac|;%3arcl#CJOP8gCF8Ea|=p~QsWCsir_&O0@`G54jNzwT@4GKw#|+& zf?OMoW6vC>tQu_B9JGk^3$cK0M>RuSl?guD3+uTVo_-42pyf6tMTyC&;OoPK!#zWs zJzQPl{X;`QheQ@+R2C`J~AVuYG{ zX5w)qe(Q#!EHR#iCP?JM54J!&9(2GGta}Zbyw(6+;iyopV4wpU(E+a>*3wjqk1tM( zPfN^B1+A#c1l>Rr4_R4^E|*_gf?H#1QIQVFVDK%FU>0at$yrGUK2;7{#Rrpss=`Y_ zX2e16hR(7pR72H+?#cm~R*P;pSYDwP8YZA6kp}VLEeFsAUEtYe#FjVi- zX>7nZPQs=jMo?w?Rik10(=y zr-8VjVJ!_%&jBKdB5xIkL1@XJ&|1I)qUko$zeRU2e9D$Laf=>#j-s5(+f0aI%T4HPU=M!2P5=YL?) zWrAB5ECR6TGQ+LQ9Jdr~@jVs;Eph8I#1|ZR!ov_xfEeNl5kovdVu&Y94DketA)Ziy z?@7QCEQWZ(#RyNh7~u&QBRt_^geP2#@PrFIvtsds5uR`{!V@k=c#?||o^Ub76E4Qk zaDf(FpeZbv3yc}c;A=o2YoAb#lqm!E!J!fakCIW)WPlxS3vJ~oC>iM)=@}?N$^+0Y zk9hELDM9|BA+Dg+43L|>q4S8KW4yq_TcD9EH`gF=8x1_@0cxy)?o5WO0PV{I9TpL) zsmb8%=;LDmT5|=O+6sw>ELz7n$_RW%1lV*P1@I<8&?O5*;8`qKX98uo7e2rb z-lr9SbdMjT(5=u^sDK48w5tW#a0u!Wf-m!d91dsznpj9RGfM$&pn`5A03EiEwIimJ znHCSalY*wF?PKqt;W(9B14%Vf=S-nSK?CAeO{C-aL3?_GBmI0GBZ5LA6hOCmfJVxo z%Qaw~2I$TTQ1u2HH33&>1_sbcAJ~R==;#n=f(blYRi0Rs7hjZ`mRgjWmz-J*zQiN9 z7_vhhG|i=h6pP84gr=$S7z(dm-HXWv+q?cHnoLQw1qokye zTb!<-6r-esB3)3FT9%n#TC4=#k_Ap5@ooyiQ6cf54VTbufAJ9^5Ee8AAW{x!+8s0> z5(2s?26_x0_+SOdA^4ziX7COVq%(6tiya{K9w;4wXO{vT-CcvD;(h$xjUX*{iS=$i{^8*KiZ)>bITgSdydM`dv}OXG zV+V&KY~UJ_5Gp|OpsQ4118sRKDK+PA>YWR!{?tP`d^NX(}k%Du6b1z!%1WGJRrBPEmeoNovtxzGK5E)CW0JgGT%yx2l5o zZWZ8!{f0bMvA=IR4l4hO1iLxY@M zL5EMpgToSh-3fR{6=-#NymLUjb8vic2;QCtc-<#xCc(|g)z}!c=^UJSKrIURDOyI5 zRV3iC2-w}u@c}{pA^sX=u*-{4&g0Nj0B`GpOTw-$L_I(Q8dH#77iwb;l*Yg=gOAyQ zhGwAMFVKP>Pa|hgAqif{2@ePp&{a^N={oRfjLDh`$&e`t$SMPkf-=XHl%mw)Vx7{= z;LIw}Bm|_H2cA1|a&k2U?*eu448tr#pr;*yk_&tU7Toc4^o8|C4JwS?+`vahL2LyF z7kHKk)U*L#yQKkM59XX-npXl^A^{0$j6Hs!WjqK$aOAs&c*H}NmWIH6Yit2po9^r! z4;^_1EldQR)&MREL2I%>Tg^kk3%|ewq;=z&fluWi z^V}GSUSbZ8K^iUvuLXi{+Dis+c?PWz0ng1q?)3hh{ICy0zwERM>V1QIsrtxN=iU!(d0XYLSDH9(IYTNp` zD;P4A6lcSihy?|M20y{e3KU>#!$9L}&i)?Yo;s*_0X2loU;~(l${cw%7CM@NemWfd z2=CHupBKVnUNC#KJrjQhnrof>&7+fttY6$272#`fnh719Y;Dj5Y06sYk zlG~v99h{jJj9|5lYfzA5NT_eTiKRIx_kl+#K{wC`#Jj~q*Z7Axx+`Eg?E?~Jp!Nm$ z)FIem8?dP54Y z;^T{p(o;*|>J;KZbGBCCJDxQ)v|!2$w6!%g89)Oz6t6_9fvrOWEmJiDt(t~yC}sfP zO9ono+zBsWgH6=bXuOu}uF)1fi0V0=~S5h3GpO%I-5r7)?L1C^g z;DifHk%(42>;e~K@I_e$2C&;iU_~Ny+XHADEx0QHT8E(Gbm;9` zMhc+iSKviH@yWRb;Ik?XbwKliMxZeV&j9f93s5-+kpj2j(M65GXJCRaOoSc95Dz(B z5@e7eSQg&q2iXEGZOx!&f|fqT8^vc9KmSs@kBxdn(z<{$>bHJE@+Fwz7q5CpYi zzyr$Q1G$h#n85<^@t`vZK}Ym}=Z_%+*5HdPz)bkEchKpOAlF0J{DOLlut-5FCct&C zNxXpq_*Nar@&V+nY%uG=s|{iG0IckXbiqK|(A}Wbaj=gwYHe%?T4dnj>I^#j&=Y*< zfvc{ug|UkZ)C^ecqi-QJs4#bOb9DkOs|FoK22N9;WP!Bn1YC2YEdDeCCoPySk&+&G zB|T`R26$JB1tIJDJrDftT3prQnpY+%dL zKm`Fj#b9bzfF~g6vO7)CEorGa#i=0Upob(OufT&^3)2TbKMAA{aoj1SvV|VojI!|# zI?#oRn~){Gh#-a@^$lOu1@|=KSdHT3{DM^YA^`;r9J}!h z(01c#!jd~Uc_UxW0%<9NI`+Ylpf&Q~t`TIX5O`Q7$TK7o+O$I4Yy{ba07{PFF0ZAY zB`R<=wlIOGPWbvT@EC=m5vYxaHpBsL{DC(>C@2{kDuJtRP?HaoSP@g<&}Iz!XhlFk zfPXM-0gggIKmd#l%^mP@3~-Ca*E2X6)Z>FhFSzFtY;5Fgh&WCx0JL_%$H&tTvN9jy z4$yK$#HD4(D|n!LevDxwF)00HLuUg9XVB5!jzO;Rh6+X|hMP^K>Ac zdQF7_43!|IplV%5K?AA*w3I(5H4j8VwSl_5;HUu?3!o9}cu1NwRxpMQJ2^UeLg&Xp zdwO9b7syL!@LiLNbYci}g$wD+XrKp)fL79}sbQ|mfvmE@d8!WNI1!{#TSy`^0NtDl zIyNU5)H8R7R11)1IHXCM#$uEhNc8cb9<2?G;QIT*0kC7tlF}h9*V~ z4DQa(Rtg%)Mft_WCHeU|x_<5o2u@zQuA!chk)DCBsj+UliCLPVnL(OvN@h_>rKW<3 zo`s$%0}lfOg8~Bs10w?iLqthxUU6c)XI@%91E>?{=oIYl6B^%g~K=y*zptuIP*9;_x!%R?^ zg4_(FL3%|Q7#KkQ2kBKs(hFk4#6j^6k^-p*u|e?xQtt^8gxUpSvqIhGha?VV!uA7R+M0u0iVvypjQG`05Kq`xEQJyB#P;EWKp=k z^Few+p=hXQf<-rS7$ECM3IJqbgzu3>k-d&A4ze1Hok*TWRt@zrI2Ix8>a?Q7+*GIm z5Rpt!;jaf_CnhBorIw*cBjOXPq$n{jJrx#e5HT!5xrxa|`KShE=A|+~?I|uPV$e&@ z&&^HED`C)s+-ai+aR}J06(yk52-RLuqE}FqU%;T3UX)*207}lN7?jCiA}kCa|HIfI znwcRDM8PpLLpq!dVlXpgfG9X-X2^uIK@4VwY!C&<%nZ43Hi*H@kO!jRn3)09fy@j= za5)fznV|$k!7(#K8JrDbFf&wuC^%+jsDiUW3}%KJ5CzA~40Uieh{4Rz0HWZSnV}KR z1~Hf!nn4sCGc&Zp*&qfpLpz9qV`c_@7|aY|APSC|86x0p5QCW^ z3Piy%GeZoV4Pr1e#DOR{W@bo$vq21Ih9nRL$IJ{Va5jj+%+Lv<;Fy`A8_otXm>GIO z6dW@%^uyU81~bD%5CzA~43pt(5QCXvDu{w(W`^l-Hi*H@FcU<^kqgBZ*VD?t<-Gc&A)vq21IhP5CH zj+q(O!`UDPGs8v@1;@+`o8fE_gPCC~h=OBghV5`Rh{4RT6GXu=GsA8;8^mB{*bAcI zn3-WeoDE_yGaLj_aLmkb7|sSUm>G_OC^%+jI1Xon7|aYOK@=P_Gn|IAK@4VwvmgqN znHkQ**&qfp!$lAU$IJ|u;cO6tnc*skf@5Ze>u@%R!OUnd znc+U14Pr1eJOoj2%*^l@&IU1<8J>bDIA&&e4rhZH%nUC<6dW@%yoR$u3}%M6APSC| z8Q#O$AO5L?40}-cTnt}O_}mOipcXFN4jzVJ6h1FQD+-^FVJixspW!JA zUw}cB8EzN@1A`!g8wy{Dp%R5J%&-Q9FT!vig)hp$2WqLqjTB>WK;ers6r%7Y7#5)L zB^l16@TC|yKs^GudD0AKD0~@)d=$Pc!x9v}9K$6PzB~gXs5byNPl3S*g|Envio#c7 zn2*9&X1IaES78ujha1Mgz@W24>Jm3EW6K z24fVyJwp---+^Hg3g408APV1!;Ufy)nL!TJBZr&s!r+U-cV(zW;kz-cM&Y|N+(hAf zFmUj}4P#(n@MJJU;d?P;qVT;L=AiI>7|x;aeHs3v@ckI{_>s-`XGlch2Qc)b@BEzq zHv=;RO6Fu>Wyb$lYyB5CGZ)T8BhX` zff+pXf~+4j#DmNS4HY5tLBl4I;;_@H4Ugb*_WXvhkg z4;l_b=1U_uVDn_q__Anx(9je@h?zki!2#Coi9I!lSm<3mS2p`y$TprIuw2drKT!2$EN(fFVtQ-lyR18g`7BF4<1 z2Vp=-W(IvI3qmn77(f_Mk{PYF!OUO;m4Q&q48{-!lw@WA4SPa4VE2KB=aBiZ;XsHO zGlMyV0VSCkU_+%40cHl!@Fau{BAFSiKolG^Gg!mfAO6FqpnOnCCIlMqfegUvB{P)gn&=tm zC7GI=CL0-Xk7#b!fnIsz|8d#X7BqkXefR*K?mgi(9>1F6y=p`i^q?jiq zC#9JuTN)-B8dxTqCncJgq$Z{%T3DJ`nuFD+r6!h?7Nr*JWq_uOl2TI*5>r!65{)g) zEz(R4EzAs)&CN|y(kv~~5{*+6!CI2@i&8U-6ZJCmjE(dR3=J(3O)L_VO-u|;(kzVA z5{;9R6H|;+(+o|`EiKKUIw1G5=owlX=vf#Vq#79|8Jec0B$^u}nwXhdB&V2~rx}== zS(v7nKy<`|?vwzz$ym=a%_1#1Ez!up(9+o4%s4GM&DhK&Ey>c*+`u&1(j*CNLvcw8 z#M_3(dM2qU#ujF2rpbnh76vKihNKP}RrC6jU8krlLnI|VETAC-C zCZ?Dfm>HUyr<$6lK->hn4kocQrz9S9+!-iyn9bv_Zfc=tl$L5~ zoMLRAW|nGZmYim8kZfv@lxAdUnPg~SXkZG7@S@bzyb@4Qnd>DQ8Yf#MCYdH0npzkp znHi;67^kHfnWQ9{niwaiSwd_`PDxDz`Pal;&&(*z)Yv4|GR@e?)Y8x>#nQmQJUPw6 z)F>&@ASulN60+cda!`7*&`U{6Hb^!%FitixPfa#XHM2A~F|#l-O)@l3u>@@$g82Xv z*`_9XAiGSGlT4G$EYmDg6HN_`j1A2!QY}C^A~7-51fn4&8?yRAFGJ5<&p6F6Ims|7 zE!EP}z|7Rr#2_uzz|_pt#5m13$=JZc7_0?!oe=0oZBQyV)H5|TN=Z((v`95dOG-9L zGe}G{HL$cuNwi2!HZ?Ozg9KAfd1gU=K?&IB26{$@sRkw{sip=7X^9p_MwVvArYYu@ zNv0O&#)&CLX=z|v5{r^EKsFfb85*UT7#pQpn3|a;TN))L8yXo|q?)E#nwg|nS{S6I zf|Y|-m=%{6fTF@k&)CG!&^*yRImI+3Eh#lM(a^{!$v7q1%q+#gG|?gjQfd^Jq-28Q z&d5kF%_Py-*gVLn(onj0mWrkI$d8K;^gCZ!ss7^Rq| zS)>^zo2D6CK=M*?WpPPrF35Z{J#!-qBMS>qSS4DdC0m%7CL5=Le3X)8VriNTEzm*c zgU;9kX))0=w@6JgPfG=@NJuhEGP6ugwJ=PyOg1z%wlK9cGlIlxTJ7Uqd&MrkIANybLTMnli)rpBg8i3W)#scDI+smV#^rpacOhQ{WpM&{;;kQl{C z)P_cedZ3cj*eu1uA`w&rB_^3C8GvfZBv4cvn59CpLqSn~7PPE1H`FsUH#SL5F*Y?Y zOf@h!Fg7zVwKPjfu`n@DO0rC`Focv##RaL!MXBka9BQd&VQ6e(kd$O$n3Q6Wl5Co2 zl5Cu4X<}w#Y?fk}W}E_X9z1qIDFbvgJt(yrS?HM>7@8TFo24ciq^6}NCncMiSeTj_ zn;9jWnOYhfKzNH$NiG)yrtHa9aeO-`{)F-SEuGfy=&O-zI&SSG($rRla#cSVRW|?H1nwVl? zVvuN>W?`9_W@Mb4WMp7yoMLW}3@H>rnn25RLCM0vNH5LE)W|$F$+d& zEY;jN+1%2|(9*&f8W6BZ2I(<3)dM9;3$ql%l(a;Pv{Vx#Q&72XX_9JbWM-L|m;@;t zb24)?!PSA0o}rORvZ;w>T54jVvAK!4g;9!0s&T4Ol7XRRikVT8DL8Gz)f*e=B^xCr znj0ls7+V;oq*)rKrJ5NVgAM^VO*1kuH->ryuEEgQT+bvq*~ADGvPs5?78a()sYb?W zY33fK=qWNF~m*DpzLpAq?c@-oNSn8YL=X2V3KBTX_RQ3oNSVsXkuZWVs2oR3@OV& z^(DCa12q$pEewo|3=B*xQqs)LElo{QjV)3VQ4Aw?%jV=CFg+|bm_$S~0& z%{V#H#KhFX(9kH^&=~B6q*RD=ic3-wi$M9;*hJ4b5mY4^nk5?~8(A7B8K)SfCK{!J zlDDCWg(0+%fVCctjP(psEKMxUEXG9}g6IK?6* z%@EQkf(59Vsh)9~acZhzTB@mqkx81lK}rfJb(*ClnwuG?m?j!R@(eh(%q;biEzA;4 zl2a^ zEX)mzO-&4w6CwEvyhs7mj4;tlu{1U`FbDM}5|ho%lhaaDQ%o!kjg3-GQ%%xL(jX;g zegUY}Yi6NmW?*ats+~=Z%#2da%#17z(k#;q4O3GLjgpho5+O-5wFs1ujg9rvQVk4} zOwtUK&687&Oik00Oq0@5O+d}X{9CVBisDv}sGf6Ws zFiSPDumriw&?L#&Jk{7JG1bsC$;8ys%ovh{a>0!&6EnR;b8|~0<5VLPGeh$f1H(iU z6HCJsGYcaN!&GBqQ$tAJ0$Wf}lvxHUvJCVRjX{kR6H`OeGz()>0}FFQ6ASY+1B)b3 zr`*U8k}g1c^fL6!%=Ju6lZ{MLj7&k@A2Va~Bv6^2oRVZ_WNd6@h zwGt@3#e-KKfeEN2xaY+H*@nmfRss=$N+T-;El+|9L)IjLl_w{bz^n$ZNP?=!11+tB zvLS1aK!YHl#inwQac|IQHlqTB4U%G1g0R8jNK>7R>>ybN2Cz7E$`drr15*#0qF_{m z=mn`Hq@EZxc+G^m2kZu@d%)_UY|s!6qZY(Hpb=|ETz)||2g=4U2WlqR94H%?`*Deb zW)Vc7L*F3tL2OW1g4o>9@CS{&i?Bi#z=B4ZL2S@yFIX=d1A`oN;iCu}0|RJm3N(!+ z0v$dFvALmf2eJkv4l*Ca=7#zm6jmb8;dRg~g$M@&1ISOH83vFzNIi(n4fP|)4v-p< zy&!WyYCvXy*f6`m?v!Ex&q{#U+|V=tayLjXXtWqKLm~nl#s~X_6S4plWEMyqWG{#f zvlko=oD2*gr-IxEQUj6)v0?Ut`Ov8VuwS?!VFGf$hzum1g4i%KL2ee|f-JNKn=8Wr zo{0gmVP=9x?m>D%aROq)`~n(L2k8ZkcY^%_opJ!pjEKlW>;n6X8#H?jF&88baw7=C z+yI(s5#ff!BRFhjA>jsM!_Q1Tio$fM!}m z=;pwlm4H}FE-53&~|jvnveIO1hs0Hq_4mqd6O zz_TM@KSHN%z~=Bl+y*vB0pec}8|DU39u($>h=alr#0I$&gc+gJVIaF0K?XB0Fo2Sg zFq93N4T7;jGc_Q+ptKCaFukA|6xbX-D18fq5+Hcyn1KPt2F)^n^nzv!Kp3VMH2Tj7 zax4P_cqCsK$_9y!UjT{oGca6XfMA&38z8;Vsn9zhHBdHaHJ31y4T?5KP^M&nYK1_G}@ zVPJr5u1Z7Q^$kdD&?-up8qoS67#pi5hlI~NgNcm zFmX_r!q}iyaWM8PB=w-xXE1Tl4i*?2w8{&{7Gp$&ry>#?G&2uVV}&H{fW&q~V*4Pm zgOS*2NbDRWb`cW00*PIZ#O^|3PeWoaLSnB&Vjn|dUqWL4L1J?-A^amsqO zkl3zB>_8-T9uj*75_<^}djk@CFB1C%68jYr`x_FQn;GF|K_s>~5?dCDt&GIhL}KeB zu}zWK)<|qeB(^&e+ZTx)jKq#aV#gz~Q<2!&NbEu+b_Ei<1&KWoi9H*{hL->HnHd;h z<^Ogh@#7#iG;f{-u|b6g0|UcFka{TlC6f3jBsMb(B5Zjp-@_XM$_ZB%~{8!8@w#4ZN0p?WJpY-k-(3$hE!o{A*C48(?-xdz0B zs@Vo&L(Mq=VngeTBOr62?3*BQsGIMB*iiK^Ky0Y^TM!#6{tLv0>g8r-V1V@z1VL=5 zxD*oG1jL5wwF0rBb&VY>0|TrM@&t)P)r29jlR<2#`VtTu>c=V&8!FxnVnf9zg4j^; zSxD^FAU4$etspkE&e{ob1C)IZBo6iOWe^*x{w;_NRr3$ThT6r##=yV`6&D4uq2kgY zHdI^##Dvw z1KI%r69?^ffU$Fs%mLTYQ1#_V;?+oOa2*X*1KQO9GiL^pnmI`9Wk~E*NNiBs38ojc z`X9yyt-Ob&E6^%?82b`PFEm|ULt;NbVn0D*gI1`+^nzBS!`PseC< z=5rvig^<|bHULx&XvH;5FStDb6$h=1hKYlAxxm<<6?-r?xSar14{i@Y(|G{ME+{)3 zi5-o^PDNs8BC!jQ*d<8pIwW=z61x+L-HXHqRRfHm4hM9DBdmV`YBIv=6mY)-q!8Bc zfU-f|8(6vprDs^Z08Y=)G8xndfwl9&eGq6`0{20nY|t7SMoq>B*g|b1}64oaIMGuS(3J#dR zK;ZymgTn#pFHrvr)~^AF1Jo~|aDb(4a5zBy1quh4AHm@OvXFrRyfO{uM{qbm{RLVv z#t3DD!vX3qP&mN+28e3CN=i4B(w_jG#_70|R&$8zaaP1_tmBHAYZ}o`C_p+l&zu z7z_*yZJ<00wQCZH4P8nIE<>Q=pxsF@dqF#m7(pEr1_tmhAx7xZLeLH%Mo^$KFo1XS zFoG6BF)%Qk0htLJY+ztu0GAt3Gr@fU=(0l4?iQH&pFrwCfx*B4-h;ph-N?WM$|F#{ zTp%`diJ<_94P9O+31UOVK|3%QL5Z4yfdRC80%ksFryC<^@PUDW0bCA1&2$Fog|fXt zY|z3l1_p*e5F6A9V_;y20x=rYFLAU3FCXJBAB2x5Z@GX@5RQy_LIB+M^>*wAf~H$iMr<y$hHgvmfI*1K*Lje*S+&_YD!L0*{L$}{{fY?y=6F_XxfCK{r!%Pr63u68v5F5H3 zcLj(IY7j9nFsuWyq1$r7eJJRb-2EW&e2Cs-AU4$eb09WU{04{(6@Q4teg$HK8d(es z3?D%3LWnuvKy2ui-v1zWF+`jl)YpK9Kd6d=l_8)i1jYsp{lM5DD`9NpavoGn!^A}x8%z)%Y+hoNlH?qZl4&`w+!8??(7#s=-6g|U&xi$FVHVd9`&tuQvY9)X$< z+Kmbm2kkV4u|c~?VQkP2Q5YNCE`{m^?d*h!gLZAg*msfK587=B6GyIV!0l3~ImlyB zpxuoy^`M=LFg9pcB8&~%aR_6Bb`!$b;5rCuCb$lQvO&Y&Fg4&dDpVX?A3@pXpmG?> zwnbti*G-;C;{HhNP$V|Ey$Ura5lK89iH%%m6(fmPBC(OjxLT3K!F3tbd~jU`Wlu*^ zGZ%@y7>T_SiM<|)y%mYQ8;N}oiG3W2eHMv*8Hs%piH%(MJw+0Kjl}+l#Qu)N{)@zB z29?iHKXM|m`H|S7NNi~&Hu89#I+8f@*qt$wxFr%BxvoSW)AL4BgFL<$jwBw7#7;(H zXCkrlk=Uh3>}n)7xITsYy&Xxs7l}O?i9HjEJs*j^6p6hWiM3xox;l1>qz2vk=T!s*x>P1 zsG0AP#J?i3enpPxsHxhdy5_>uldoB`tF%o+v z5_>%odn*!qHxm0G68kt3`z#XsG7=j+o(y&WeI)UxNbJ{0?2kz7??~*wNNi@%xGU65 zP9!!z5?d6BJyhC?l(>@;y`$}6NdIEAJq!tl(e^MT97t^spFnD(o=0L|Lt@`WVn0D* zBe#J+A&LJ)VuQA^!|GOcq_z-vEC^a2BDZ^Gkko+3f}m=&ki-p<*cM1^Qkl#BM}lBabg3w?(HRshNw!UV_A4 zjl|xB#71s^9zYUDp1TK+H9`Gy6-mtKMv#71s6?m-eijKn^L#J-5czJbI>ZYw@R5=UNp@C8ZyHxio( zsqKf{J`_L_7e`{tA+c4F*g8mTV>?y~ zB@(*yPL}KqiV(&*{A46iFMPgq;V&6t$KSE-^L}GtH zVt+?sgV#|&!;=+h?Ew!G8?*)!mTskx#1)a);Pn+ybM%qK&5+o(NNg7*wl@+x2#Fnu z#7;nBrz5fRkl3Y2>>4C?GZMQCi9HdCJp+jiIv)z=U+|g@sK3@Cso8?W-i^dQgv36H z#J+&UzK+Dchs1u0#D0Us{*1)_g~SG}_kp>S18E%yKN4FEi7ku7RzYHGBe9K;*p^6a z2PC#T659`n9g4(`L1HH(v9plapmVff?yo=+uSa6HA+dXr*i(?$vys?~kk~7c*c*`8 z+mYD&kl06&*k_Q~myy`Fkk}8A*e{US?~&Nwkl25b*eo1~wLRQOY#}7JBobQziLH*r z))!y`!Ir;*r~kk~ho*bk7{&ym>gkl0_5*ng1N%v^}L z<3eH!BC#cq*z!nhH6*q!659lcZH>fsLSlO&u|a3*!TcVMBp!#vPDNtpAhC;)*i}gE zMkICz61yLXJq?LH7m2+DiM<+$y$OlE6N!BQiG3W2eGZ9z6^VTZiTxOf{R)Zw5sCc+ ziTxjm&Bl$0J6s;dD-wGT68kU``xFxUA`<%s68k<9 z`xz4ZEfO2F%ns%r&{8lM8@whB+Fk-}QGNb27rvA-a(k=JG*uL%U55Dl{zye1H8CNc32UPlU5 z587%7GY7PE62=BCXN0jq%L-v^NO^m-lUV^EoWIYl+?LrPuV%9zp<2HKcYhv7kD_%fLcwzAcT2>2V zgO)JD*q|k+Fg9q3Cyb4}HVm}<5he~=o(N-uma@Uvpk;qBHfSjxjE%e=47}eHEVd`%osR!-N zgo(dE5=UO^^$kfJyaxelCU_45l#RUi5WEKgDvrFq3$*1PW*6whb{Ja^X%58{iEV?# zMqbn9g(MDMZw$370!cg`iH*Eh5qTXKc;5k3Z#9y7@V*16IC$Rylsy4S4f5J8O49J? z+%BX|f?RJRuXWsll=eWkXu#6UAtZ6+{j;FG$uKp@>l^POsR!L20aNn^NgQ;`15ErE zk~s33M(|!6XnFwMngCM|-fIID2k*6kvQ?1M4D!4!=mc$;UP~l3$op{Jk;MIw*vM-a zW01s?k=R*C>_Q|qu06SJNNT|QYoP9*f+Rj0i49(R4^@M_MsWj@n(avJeMs!1NbEC6 zY~*!`w~)jiBC%f}vEL)H!E5rN?m=FQ$bvM-$Bo1mLSjoIu@#Wm$m#K72~tt>D$@_q-< zHV>G1B~qP;d=3WawltWUJ|s2BdmNDW$AND1f~g1Zu>}<*3=H5~w_xI+^GRTAspj)h9Y~*t@K(|f7#2+EK2YD~U2PARO?M*QC|B%E%w=BWLd64QF|b0q>`SstH082i+kAGcy569C@EY9+G$|61xV8 zjl9ne`793Py$Lgr)Xzs^FGFIlMPh^Z+(F%pydU8Zk{V+21+~0ZMdA|=W);HqHkGRA~_xC~40CL?oy1x$+ zCdBOT8|@cE!fH76iwCN#7$|#*8HY!nmn3x$@@ShJl1E0{=|dx6D})PT>&05#qj7#LKL#I=#wMo4Vr{l5-K z;_gUnKO}Z25*zv44CFn(Sx9OMk=PYT?0O`28xk9NpYIeT@!3f1MM&(GNNnV@1d;dl z?n6>@6p4KXiG3M~eG7?=yr1_4lK6WhHu9N-f04vlkk;EH@8K0f5|>0`gU{B0#+^En zxE>N4`FuhfByndXwigmR5Q!au#2&6?JMw(u==l}yDDkLfXRxKJOPA<`PKa@5) zhr|Y-X$&>T2T42_i5-Q+PDEm7AhGk2*kwp;@L9)D^IMR_yOG$Fkl5fekfG`qAc-$W zVy{DDZ$)D7L1G_9VxK}{UqoUfpQU^sN&FcS8~KdoFG%9Qk=V#*FLNU8+Y&%xizBh+ zkl3n7Y#k)FF%sJfiS3BQMn2EkA4xn6i5-i?PC;U4Be9E+*h9TP1v+vOmPbIxAi~(- z`#7NK3Vbd!l--0h&r8gD_<2a`kwl6G?a~e9|Us$h!1H@MihxHgTw}1Sp@S7=n5Pd8~MyV3ncaS zNNnUgBYcs>Ly*|W=j?&cgN3>od@eMU4L%nd$}UIJ3qBVbDvo@%UJsI*$w+MEb7B`F ziLXFnBcC6#4M`k)W-QdMBS_+>k=V%hP#~Y7_W(%^`21L?Iq#6fzap{0=f^_TAfKDZ zg)|N$h{TpaV#_13)sWc8XXTk7iCZJFosihb=gI~ki6ftn7l$OCip0)AVuR0^h5Drm zNgVl1ybdJsek3;dj9IAOxk%#3cWoe_g9kou7OH+HlKKNk?Bhu6b4YCDv+wR8i6fsq zi+pFtM7>-6|yYjY#YcBz8X% z8~NTScsQd3Ai9beSzd~XopOO0mN&G(& z8~LnwUZna3`R*#@b8(fB)Mz5H4UpL8NNhVKHu71xK1kxhNbD#ib|Mlx1Bs1%{%skO zcr6mU1&Q5_#GZu2Mn3Zve4acsY?mXcS%<{lip1W7#6~{n7JRlm)SQb*YHlF0?<29F zA+eFqw*7)6{u_zSgj5%EBC!RK*x+;Kp>B{v5?4iH>mad>k=Ry9Z19=$P;)$x#Ql-j zVMuK7ne$NfDM;eT_j45?iB}@A8<5!TNbEi&Hu71ubCARrBe7Q@u{R>IcObEm&!h z+YE_~eDe!S|Fw-2=MA2Ua(6AdQb9 zpC2oRBrc1@RzYHGBe9K;*p^6a2PC#T659`n9g4(`L1KgNJA=A83rV~XiCuxju18|G zA+dXr*i(?$vys?~kk~7c*c*`8+mYD&kl06&*k_Q~$oHn*LK1(7#D0OqevicdhQ$7h z#0KB91`QK#q_Hv~B(@|HTLFo!j>OhOVw)ndZIIZ`NNg`8b|4Zv0*M`u#7;wE=OVF7 zkl58o>?S03ClY%C5_>uldma*dDH3}P5_>ZedlwS>AQBt-4!HA3;@6Pacahjnkl3%0 z*q@NtKatoBNMnHPNNheNwkQ%?28peV#MVM$8zQkSkl6M}Y&RsfFA_Thi5-o^PC{a5 zBC!jQ*yTv061xY9JsF8T3yHlDiM;}ey&j3Z4T-%MiG2i#eHw{<35k6ZiTwbH z{Tzw?4vGC0iTwwO&5U&R6c-X(5Q!~;#Fj^5t0A#ip17IVk6)4 zWrZZ}h{X0lV*4Yp!;sj>cYA^F$AtDzvys#kA+f>tV?xz5Ac-U2=hcTKJ{5^Q2Z_BH ziH&?$Ch{F#JCM}uM`9mCVxL7~UqNCc-`n*FN&F=e`vVgDI}-aJ5*zuhE*_+DGhrk) zt;=xG^|7!qA6name0L=1npl{XPVy{DDkJkH;xEQVXA>lxadS42u4WNj`)<9zGBeBhp*tSS) z7bLbf5<3Wq9f`zFKw=}`qn(E&UW&x7L1H7{zuAQ(J`ssM1BpE!iMSuMq>X$Vk6(J$$>O?#*f4nLt@J!u~m@R$oFX) zA&FZeu^o`u?nrDuBsTILnlVV?$w=%hBz7SZy8?-gd~aqOl6Wr?dkPYJHWGUg5*zuh z%neB5+mYD&kl06&*k_Q~$oFI3LK1(7#D0OqevicdhQy}DIl9PgCmy7=K*C6DDI~Tc z5?cd_jeM6na@*S$NsS8<+Z%};gv3TZyC4Bc9CW=stnCN7iXO%;MN(6P#6}+P?Lrct zh{T?O#Ga4DUWUXTJv$Uq7vMTO6gmBHBZb>wIJajoyN#0bI)=&`SLCy!k=HJc_6s0+ z3i;e!-uK~G_fP5|=^10K<>mC;)nM2GtA@Ui0 z$Y+QluYtssA90BfhB5?KKBZROL~Fm(!hB>iN81dLygb<249IbWTrbn24N1uzI-_^2 zK++E-cdUpbmDO@cY~*<^9VBsMB(@b2+YyQFfyDMlVuvBIW0BY?NbGDRb`cUAxt?l3 z5^qOh_aU*TBC+Qnv61VhRY>9+k=Q$s*!z*#$B@`(k=R#|*te0`kC50ek=P%Q*x!-Z z|B%?MNOK}QNNiywwiFUu5s9sV#MVb*n<24nk=QOsY;PoX5E45QiJgGNPDf(rA+bx5 z*fmJ(W+ZkO5_=*Ndj=AFJ`#Hw5_>HYdkYeKHxm0068j_)`vMaCIuiRH68k9<`wbHN zGZOn35}OfeY=i@e&5y(uLt@J!u~m@R+DL38B(^0I+X0E~j>PsuVuvEJW02U%NbD>m zb|DhG0*Q^QE=N(RW>k!jUKu$BG?LbI9PHH<4ISi58X~=mK zSH45O7h|a0S4D|`DJf^@c{f}mQkl?!#717DH4RC8E)shQ5_>fgo0xDTbKqNNgb_wj>f;0g0`S#MVP%n=GhE z4KBaqa*rmGnaF#HaJd25{0E@3tw0JH7#NJW7#J8qlc)>~42d8%2c*2+0%CJQ*e^kB zE(qI?n}LB5wBUk)fnh3$4O+kglHy@tVB`fc7#Ms(Y(5D46(<7&s6PzieSor=85kJ8 zLD`_N`2%H(FfcGMaY59B#`1ZgY|uU`5hz=ofq_8^$_B;10+bDk6E!FsbgqCFlnq*A zYYSpS{pbv3gWTW=WrKpkAIb)KGZe}eU|?W~gtEmL7#MOuY-sqDL)jo>>!56qR11_1 z@=F(#4f4wbC>xZPr$N~u_s@Z{^%xi!7D3qt3=9k_plr}ugEde#Xn)v#5E~jVr=V<* zUoJw~AirFPvO(^@3uS}c^AO4gh36L#8{}CA28RDoHpnk*+zbptTnr2#zwkiWAioPi z*&w|VP__aC1A`ot4RXHzvobAz%y zLE#T#L(^LdlnwH4Hk1wWZyA&gO5?RqHfSGSGn5Sq^G+xmwD+zT$_9o10uURThF3$` zAoDjt*&y@xLfN7W3=Bu0Y*7F2Jd_P8ldeJ8p!9hM$_AywM^HA%?=PTi(B8gxP_`=r z1H%_68|2>~P__>P0|Pe?1A`DWPl-Xr*wFl&3}u7t&4RK)_U1v^pfm=`+l-(@&Hza_jFKP` z1_qEEBgiof3=AM?M$keG1_lO@I~YL@V_;wa#Rns(kYiwA0Hqs7P-HPMFo4Tdd5Ad< zpt2663BqN7*#(L=m|bA=p>~1%2D1xnCe$wQcm>oh@R|pxT_GUzp>~1yr$Ft>0f~b= z%fP@;fy8b>VoyL~gXhYj>cRbAD0>S?4JdOlFff4U;Gk^qS$0tN4J0+-yJn!`A3)-u z%*epN06udb%H{ygVL{p8c{C_n0ZAOZb{#4XzApyKc0p1DJ~tj(p2UE}p=|J67?fRt zBo1DG4iyLA`2uCn0I7kNC*ZT+q3jJv;@~rppyDTx#KCLGq2l0sTcB+4eUwl(`22Qg zIluy1dkkfR&ozRwWst%gJn;Ja6#Z1CO0P&W7sc2FW>U|@&<>4mbvXA?o$1xVuH zwcJo~@ck)JHu!#FC>wl^I+VQzNiX<(A*lEfBysS1Y-k<_-+=;UgYO82vcYGeL)i?V z^~q2+_>3SZTLMWOyrvo|4!*|($_C%_3(eQy^UR^_5RhId8@%5i%FaO&hh{y3)IlZ& z22eQ+QwS>mLCMaNk%0kp2NVkf1L#^q26T0xya`hW+MA3^9cV8!OkEk&ERb4s^FZY% zOdY7t0a63P=;}auAEpkJ$3bd97+qZqv}^OgWZb)fS*L25u4T^*?Gf~f=D%>hya!szNi_jAD1)#LHU6eRyP z;86!E8)4>w);xgh1YvZ0LF+hS>Ogmcfz*I7x;oH(Uodr`J?kJfAdIdKRQAHuf&30q z1H$O)_8|EKbWaIL4G5#F1KleEGp`Mge?etCOkF!3bytw=1+94n*$Kkv_JY=8z{~@k zUkFkI!szNibq7oxX#YM)4G5#FdxKOgH9m^#oI7a%ntjIM49 zlD!M?_ye>L4`v?dUL%lMAdGGvsOee9HyBLqXTaeU&%2tqBAdGGv zsBH$b7j&;8NDT<1s{`G`2U7>yvjI{A!szPGAlVBVlLM&%VRUt%wjazqP@5T~287Yo zf$sZ(sRQj70;vIEbahXV>|KQ?TtID0n0cW60wA+M7~MS3Ih!zbpgISn287Yof$k54 zsRNBWg4BR8x;jwX6{c<-9`}LvJ;Kz1?z;k+1;Xg&f$k}SsoQ|ZJW$&hrfwr1bt+7V z@)@*_5M(C^quUEQ9~5RDXlxav287Yof!f|Mb)dQ!qy~i1)!87~yA_Z7K>Iae=7H}1 z0+|KE=;ndi_AqtZ@t7BaWbY0<>SB=8fyR$Pc7iavy`a7W%wEvlqaZaPjIIuJUn5N2 zZansuAlVCQqkzl;VRZ9AeG`~@pnK3jYCsrW9q3*tn7Vy(s) zVCI4PwjebijIIu}mJX&4bPp>?4G5#F1Kl$TQ+EiD`#^mwn7YGw)PeTL!qkDdnt7mo!XR;w z86XT&2ckiDOoG@j^A0>_VgQZLfXoBU@q*+)`ao?}WdDNh_r&HtSlb+C-V-GEf%<4L z^FVbXvU#9=$)GVJkefglqz**G+5j-~M4m7)fX0SE?u&zl1;~A%yn<|=0yAVx3uFce z!_0$~4KVX!kjw*(ErHa5%ma`2AjO9TGo;)FnFYcibs+jO)D1B6mOMeEmn5hh$UN{p z#7O3W_DN$)FK?lGVCL;XG7r>u1=$NS4?MnvWFBa|0OTGR289KP4ZhEqfdMou0pc>? zQU`0NgT@g-3UR3epTmG=FDNg7^nftPeIOciMmdNL^T(AZObnng1W>$XLj4Hx2dMoG zaw{xfwlG7+A311Y`yXgUkTYpmQ)lY?yfhFA(J^ zYS0QU@{*d{;F{0~CYq zql#jOa-d~5hzDwCg7m=Lm+^{;p@E%&0c0L*dDsQK;1MFn3A3MGlRVTV(U*d}U$) zmDwQkV0944Jn$JHAdOHQA;iES0@4WO!^}%U^KZ#FCWbq#kZ^{L522XH1Ti2-jDbN4 zI*$Mn!DU{+A0`GJE{J)s@gZ#HwMjEDfa-COSs;wdyc#xU22g(twXNH&0u<;>m<}t`HFnofJ&*O7n0y{Iq7ZHemVdF#C%=@HHoPR@PnBnCRYdhp?IVOoM>|x!k~Io`4)PyxjyFAHrtd9}NZu zQJ5h}`5Zm{naD9SfcoAb_rb=8u$d>Q#lQd>{{{IKgkeUbo5!KR49_31@gZ#HP0(Us z0IkmenFYeQ%zL1~%m5lA2e}V6K7`G@Q(6oRpmR_`W`Qs+^L!MU!SMz%4>mr8%{&=x z;^O0lA|gIu<3rfYGty>Y0L^cM+y=t9+{dGY@Goq92%CAO+6)Y!Iuv9U2;(xZLW!9H z)K>xd7t|I86-n646Vzp30NsxPG7E%pnP;QQ%m6ye7i1o6dFfQ|AbeI`HbGab%VB(Vahd0%%gg|p^8=X& z8y~`Eo{cea@sVPHh!5EK5H|CIh%~PQ$voKj5H|BNj2Rd}=YWCy3c|SjyT*W-0W=>8 z@-J+B2%CBFrjT_9AhSRimw6H<%G0fAoUTf z4~WgY4dx6Cu(lRH^I|NR;r#&E_z*VpKA1BwfbN|JnFYeQ+;_!-8Q$K2jSpcn&)1rP z0d#*S$Se@XW!?rmW`+P>h<{<@L)gqa;>5rJns)}71;V(@WAI^SSO9Gg!N!NMnaAM9 zzyRvgfy@G7T;?qZWM%-h9YN^@Ha>*SJQH^Y21)1|27Kl{2xey3!VmE;YiafiN!fdh(bVKx<7v@o^T9`*^|` z7>qy$K`}1#?&LGW`?crsm}eJGT>I3Z0MR}LowJO~zX{sB-OLPna18AKX)Hrzm2)%t3Qi<>{XpcU~3E0e=5W~O#+UripycLy*`~kXS2A6q{ zV~J~Dy{JaCuWsUr57RgX2GHCPA@{Y^Ff&YGhJ@d3JmxVb5Le!dG$6`*(0C0l{|Y8B zFo5Ra3As9W3zVMk<8j~21O^7s7%d_5G#Z(~{aTQD5Am3HHi3ZwwAPZ4c^!?2 z^a47&0hfP&ConL8&TSxM-knBf2GHCj$bC=oxbJf!aq-d6jEIltc+6u?VqmC+4I1L< z&&+6MX7~av|6bxTuOXGV_E1kJqCNB)k9pHl85lrgmW0A@Lnku>XssG3{9t3S*z)g| zGzJFf@=36fxXQl+-3a%+$K$@UX^=ICV8if)-;-`;2GH69ko!Pqdf-Ygz3B`Lpz#1g z=4tdI+Pk0exKAR3fdMpcNyt2jK4u2c8b*-&zTz?OLa^V~Cu%WoPJ z5c%yV9`i~w89+@Kn0IlO_cark89?imK>q!W$GqK{44@$sg61(yWQNb<{KaG5^-SXG zBZG+u|ANkX!IfTkvWP1WS|%dO14if=C${_{L!^0gkj!JoW1dbHaqWXG6A|qLRy^kU zWic>-+SjlM!IghMOhmMY*zuUholRVMH)IX^8mX$K$@EISdS-c`ZWzjhMy^UYiZ_uOJ@t zG;0p!!38=V3%Xkumw(lZ85ltG6olLtvyd4+o(&q`!)4ywVg~Ry2qE(v z79q+P&^hS1%zIi)T=*SXga|*_+#I(2>si9U09rFe$bBt~nHfNH)S&nPoehP{eRoS4 z7(jC!gv?7=#>_AW+Mblf6Tk1u85lr!_7F1f&q`(n&{_|W`#^Uj<8q&AC2`}O32PAj zEk!);%daG^JUz1pQJyN}F|WRofx#Z;S$ypSB=>>N$H(R0eU%Ihp#3c{BXN~~0c#Qd zRmbDL-<1pupuIMP%-gdTQNDoA48!F0m)4&gpsB=aiK z=G9`V7#NB{83*cNSond~0fGDk8#_u_$IK7_9Y280U4yi>Ld^s1djT17zKwz5z9F>p z4~<`tnG?{|t=qxG06ISdqz8mSYCw1<69WU%v?0U$9ZcZ8IUqG43{nH4S3}JMu|ZgU zCuH6f#0FuQI?y@x$o|-}36Ty!<2oQYkUzltB|sXXIDaP-1L$maC>P#t+Ke`@rm&eA ztPYefL1#9?%meL7KnlKkp^3Svxrwo{xrKs)sez$_f`X9&NXpQ_ zz|6!%LBYt}($K&HB$B{Y@9N{m2x<(03p8Z@s0qCxW^AR07}0ir?k4Os?hB$p+x)cyt0pmr;W2DLXqG^m{jqCxFD z5DjXVfoM>B3Pgk2K_D8`egV;-b_a+CwHH7%sGbMWp!yj^gX&cf4XO`8G^ic}(V+SV zM1$%L5DhBtK{TkG2GOAM6-0x|MGy@t&p_#$RQwO*aRvs)dIpqig4Y}OgK(rcmas^w}rrP98YQ%4D=(b}cv zXn>1A&=H01mQKgDOnW(abRfZ7%%q`!+**diFz z(u>lj<-3J5sHw55P2=RzX=7yI;c;VN;E@5vA;jnf3rfPcM2-nEtWl|8VNaJ!nA+Z@YmOk`ll*tSRvnhtWg#AfmEaGz*|IH~EFLT6(W zqd;1QUI%06vJSz{Z5@i8$2tr}P} z(|9zR+!SRv&=n|KiuI&es9365m{^+4DOz;QW@Xx5rh?8viO7?@&f)k)PR$6cd#6AgOp8&Bz;$T^*x>FFj(;$igR4@Pk|NlQT17i&X z4f!ExDDnvd96mjqxd@SPPpfL!rxB`m$pP;r8SUiA1n;Wu5h=GBHu>f?| zz_-_o3=cLlf+y}^7K3P}4?zqJOxHm5ATtZQ|5Qc>W+wIrEQ|~+EUcM%B@9dl-ZL;T z3xd|cF*C9)zr@JElvu*Rz$}yoTDi!`F;$+Cfyse`k%3thw8o2>iFHmRBLmZe?F#b#EU}a%uVK>%fWME?ft%YW0 zCS`pF1{Ph=dRZnNSw;p{9ncmnra4Ls46M4K8inb!KLZ1+ z9v34615?>6Mg~@WP_f8VEzQWlY5*$2nFK2t7+8%#wJP_|Qw$6&Y79i$^GIYBZC091L(pe9&;-O z25v`?3I?9AAB+s#PW7O6Fwag8Mh0$Y&>c@qJZ0Az8Ms|Q`!ra13jZ=NaJzxdli^_C zz8cENAj9o#%*?>R^MZ+yf!haSP(>>P1Gg{4pkwxo4BUPYgU;_^VBq!#1p*6?kOLC~ zcL2yg96Y+Zj11g?AaMx>Zrk}F*M+8l3=KQN$iN*2F_h^5BLjCh#LyT1Obpx+ASFx; z;1pTH42?uy2JUmhAXi221sULdkCA~p24cX`g^Uc`u@D28KrV>`DPiK_2C?JMGBYr+ z@HloeFmNY=*a8rPK}>LfGeT0!U6@5o3{2rG7#O%SK+fh?WoKXz;fXM0VPN1{%FW2Y z6A9Wn!N3#9%gDeJ1rlcAS@DyBfhPuZ9SH}IgDe9BPb`Sd!=qfu$iNc^QX{~?#sbpE zt-gp;;Epe3U{GMR$OlOrh-GA8 zv;;9B`JB-Tl=nDzI1CsV7_C9xl40PeXJudjVQ7r8v4GSFZ%<=nV2rAPE@TFkeT;KJ zJP}JD1_s6`P-7ZY28*T^6)`ZzfbtV)eU})hG+~SdnZPvBL5x+9iGeZU1v3K!E2wa1 z5W8*0#K4#cvKT55;>*Cmm;_P}6?m7&z`&RcaxzpPNRNSmF{OzOW`;PZyJf}2z+lJ5 zz#zdG!)PSI7|k@%L4q-gsfd9=98_9IaWOE&L8O_=7!dL$3=EQ>YZpMrxJWR@Fmo|5 zf+UL=K$=1O&)HZ&js@qA$!rV^QlRphfssMDR)dLwaVaRRfIJNnWt=k`lzhRVu@n>< zAakXQQcD;Zmx96xl-s3~O4Aq^mx8?O$;iMUVp+hzz_<*wuBn`nfk7rm1;hmz!x$!V z$%K)CaoIw41_scX3Xou30Seabj0_C284Qdom$Nf4Fowt_*E2FOt^%2Pijjdq?inb& zR)fs^#>l`R=32|hz_8xF@Oye z1Vs!ClA!4aQ20qO#xRwG!wxxkKwe{G0h!On0!n-G>E(WLA5xMfl-X{4JQM`du9d(^+lj0D-L#(8Vdu1 zx{x>nD3O2yxDLbzhqojnh<^dZ2bC_2QegG6tdN6E7~XL(FsOqnHAY`XP%)a$%D^BA z>K22-U4k(h3{I>RIgqQiuNv61lyCj-MQkPgr-#^^f4-53}cKt~0oae|FvDrR612Q@IB zaWOD7g2j;CBo5lu4N5js!BXI4qX6o~F>r(O7b63MC^rMcKComAB)hZjyR3-)nt<#K542%w-Gyy39 zIOMq)7(f_YK7mSmRW1ewc2J3{ofg5!z~^WR;`4JcFz7ITWMtsi0!KZ_3A&*4qYEnA zbV1R;pr?G6fdMqU0LuTmAciieRi+Ed&kXuLMhpxBDxi!7^1CjG0Wkm+*9`jQK1>V( ziXb*9@q%R-3~KBd8HA!h;SDy9LEl7+kwGvAR1|~4TNlJ&(BJ9Dz#!xY@)9V(AzJlQ z%$XQC=7I!4!3q`xJC#A-)Rc)qC>7*9P&n&?tYk3c7lJq)Y>zHT8^qb5gs;jc%+1Uv z%@-;z$S5E_(@C6xfk}*kna_&bn%h&Dfq_|tft%Zoo0*S+fd$IsU|?Y7XW-^$U|<7L zAXV&Y3?PbwkZFGaolM$ViYR4=>z&3vLDmUU5c* z93L+OGY3c^$T)t4LIwr_gbYZRAPbT%Aq@s*J{evH24Ou$dr64n)g?WJ1sR3d93-YY zNrJ2uVTD`EB+kGfY67=)x^laBr(xRf`LI2Cc(fU z1@1A{axicvC17D+HL$Rb%J!N4GgWRW-ngFLc}QQWK0*~G{IasmT`B3uzGhPRZU zwy}B&gZ!b4#Fb!RP=PuPBrCzdpbB*hh%3&(payjdh%3RsppL{9XJF9aW(*Yvg`6fg zBgkbSrWRBQx2LeZB$EUKgEq2&jU)qu4ys#iz+tb;3Qiw-5IK+^Oe7&P`Vb*dl!JsJ zf(FQf5FtZ|5J(M3E2zw8U|<04jbvm90#S;f?jgfx#-RBiRseYLGYCY1+8-=n38*Fp z&`DpQoWaNd+D`}*WdNOd!^jW>qCn?%LG*xFpdyx$AqYf)S_lvc5DQc`GBN~#D9}zL zhy;iQ+Be0>5Coz?-9v~3hy_|G#K;f?qCh1FL;~&t1_lOxu)~8v6v%3jg5dce7HA0% zBSSEV0$B}_0I@)O4;dMPK@`Yphy;iQ+HA$h5DcO~RzoB}ERfBN450hg;WmQ;ijg4% zM1l5wGBcFa&Id6-N1JjqQGlCn$G`v{8)9S#2O9?^Ky3m> zh9D3H3OYuHC{R-YG-SYtSnLmy1)Uy+}o zfLP$8s2GAk6li4{D1d_IgIMPwIzZG#xDF5tv~hxwAqYg>fJ=Z_;2V$`f>or6IM7@PefLP!glo>#S4-BBg2_Vh|u|UhH85x2= z6sQ3OkpKk=41*FCG;Kk)27hJ@o)2PyqKuIt7({_W3Zyf5K8OYKEF(iOh=Lgz439j} zaT1^yWn_o~IT++Nq+|dZ7)agJ{r^C5#N9 zjniOEX>04teU$HGBPmhGQosI6j+(8BS8)qQ-r93kjyGdtkMUbGcqvCDnmpd zB(o|iS5JjiQO}=|fmsb83KT z78Yg=O;)8Q7e)qV6)jfximMC^%sxyk%t_j;?mkY849uR$HZo`FuqsVdW@2F0(1qw{ z*3@HFoqwN^fmur*Dq?H^WtbR37!Z^#p)e3|Ys<dfl#YCZ!4v!4rC z19LN@E0_UO5a5QwRda`Mnbkd5-CrGHU|{xjhbo0gfJtU&PYA67O+u_{&P+@U%<5iX zVHRcsZ!m+|m5GJf%?Heen!;@Fi_Ar4Gph(g6+uLqRhU?q)i_x-17#Q)m~{l9qPiTc ziYZSR7?{=Apd#w*5C$^Itj^7<>`=hKz^uu{!mPuEEC*pTYx=P&&gcgvN_cwL;seVu zYx#p|7FIpwD+~{vnp2UK<&^DU{(C>$H>5}83>Vvkjy$k5C()~ z)(wU-^aa2SW)b%%FY7=mh30|C^z|SS-zE_GXeCI5Z#RgY=?h{nO8~L=gMHWZA0*PJ4iaJB2O>S+ zgGg3z2#A5zFMkRWd0`783&FCf4?w!YeL#MkAO{j>0-Khq2NKDe4iY)?A4EEEgG5?V zKx_tZ80PST*k3<_Oknv7V#h~<*f+F6?B!rzhw^}QE%O11p91^HLk=YJa0^IH-+mBz z*$zZ*0lRA7G7!7}42ayX1yUIt1kyXx03`Ax7{p$D4@AmWfXJEv5UCytk~J~`sTW}d zu~WdIdc7FLc98^;I}1T1=%{Q~hS|43?C(cFK_XB5LF^CyAk!v-ZU1r@BtAP5L>eyzkzYT6$d{cU zl{Vm1cM%+trw)Nc7?nY!XfVhGZ59w|3yzn!p&)UYBoMjP8YEt61!8x3g4l73KxR$` zhvBQeAogjnFBXGy!KR5Ik*kUz^?5%*>@X3KuD0_aksYNVa{p|QxJ?d-%t-}_>;}hU zwFgM0J2)>St^mnCFb0W)gHzpYE0D;{ERg#7pz&db{Cbec4{)rdfyK?hX;1egNX?no zAhL}YWWt1Qkjh6QAX3l=M1H#tA{D`T&1wpW9S0h1XGm2Au_f3*x+a0$zhfszL>O#> zA~+9zxd<}3cQc4|RRfWdM?hq*Fi2%-6^K1a55&#}r`}DQLG1gHATwvgfXF)zAaVxS zwTgE@vN}P90=?MGXt@wvVzE1aK5`^2r|t{79^YQ0Ae391+k+HL25v? zGb_XW6CiQRHjqg3FA&M84-)Cx2x2pW!*c>y+<^xq5@`dH7377ixMJm)WXj0E%BSMS z#K5XFALIfJ=~zYvR-;HzN;QjjXJBBpOrFocz-q(D$H2g99}6nWJOnQ=FtB=Ci8C;; z`b`JP1|A0GuBaT)?Vg~tCZ@59k%3h{{skigtHOUxMg~^ZUCIm$tU7B!=aYa`C`3Cl zFt8eidxC6}1LbIAu>}katR|Zs7#Ubi6A~C1Sk2hCGcvH6^DkgzV6}LY2yzQENY-lW zeMSaW>nwgo238xMsSFIPwu?de-L8>^k%85|3Y01w8r&EeSRHSHa;4KGQ2Fl+n!jUp zc`})Sfz`E*iHU*LjdLRd1FO5YC=&y#$JaTG46L54tV|57UJM+d3WSf7k%85(KbDDs z)&I?J1_suEy`bC|C=t)dz#8-m6g$BM%uEcdAumCBHgq;9-ouV$Gcd4*zjtS3V2$YE zW@KQEtg>ccV2z3dg@5!cP^}T;1xn$u3H=NVtZ{B2)8aEhB}qc11p@VslGYjX@E18cU@M+OGg9Pdm< z2G(4CP_2>I*UrGenx70R0}IxHaz|m&dPWA;qI_Ql2G-&LP#!6%2BqP0jT;OMtQ9M# zGBU7MY8x>zuvYPad{pfQN@+E9dl(s5Yrlia)w<1~TwmV-VmB~e>|tPFZDfoD#cUJf z7F7lY)@DX2kgr-8RX_=)mC*=PQnfR3&0%0*?OlPGUI_+3=FJO z7$1XtIhC>UG9v@)G)8fG1_svYjHf_V^bE$`6Brp-XENU9XJBBR#i-KBz`#12u>q8L z7BPl`>|4yJ2}k3BQYm5x6D;eh;WMp7n&6ofx ziq?+z`C39pD_ai>mJ5; zcNiI1_cAhpYMyk-Ci zP!c-E_+F5Kf%Q1!W>Cd)f-w-33r;eg0y*~-qdcgFJk6NK&cMKWiE$4zBLnMY#)MWz z2G%Q#+x9RpuwG>hIm*DmdY#eiHzNb<4aP-D3=FKd7$3f1U|_w?SOThA?=rH2YW91K zpKBNxSno4x_%SlDK49$q&cML>kntGEn~xa9gculDA2Z(PW?*1_!q~N(fr0fYV-_en zo-ulW;{6+AET~ld&gccIOnx$+0;StujJ==*75^CH1rg(>qG z0|RS2(?2gJ2G$NHc2G9!WXg|bVqooJngc3edYLS^K#76re>?*N>jb8qAm>hIG6EHj zvzWGkO3K+x+dwMkFv)<@>s%(EO^ghz^O#CO3n}I^b%Cm@MNCto7#Ua>Gv$LSzI;3<>q=OGf*M6foVq| z0|VF)*;6VQK)idd@LLgOcJ^rUFo__QB_nF*5et*mq2`YV`FiC(4 zgr`ged5jFK&zSf?VfLKq87QN_VEPfx#K8KJDJGYZf%OfO$_xeu*0)UBQ49>M@0eDB zit6`F-#|6#2d3?y2H8iZ9iW!oC#D;q#>rQvG*CO{8;4yduv&zyDzl=zr6K+U*`%wZV}46Kuw*9I~& zuuf(U1(n)Un57dL8Ca(>pN(f?V4cR?d5MvMbvm;%DC5m${sC$L%wevNWnf^P%d83t zrFqQKpjO#@=1IpH7+4oDpLJqjU|q<}0;)0>G0(lrz`(kgnF~|^E@5T@6>>|NbwEw7 zWz1XVGBU6(XD+t}6;I6W2SI6nW z6>_JUeIJ2RIrFze3=FL2na>?yWMI9^?Agf3zkl7K` z4|>Er3zSSBGaH70N-1V@Q1|C4^Dj_+^o;qh9wP(mb7o#pKjj581E?$Yl9>xsK)hm3 z{K3e;`kFbxm4Siv4f8rset6651S(YDG0z7zvfnd50u|IBn1eyt=_B)H21W+fPt5V4 z^!b@N8PrPu!aM_1jDBTa&d9*P`i=P$sIm8hIS|yR`pIk$Y9Rk&{`i1_f%P}@q7Fs| z)<4V(LBaZ$*%lOk|CmpMEc(yf4DwL}%M4JJ)yOgn)RS#uIatidz}n0b0BRVtup9zq zr&g9{ptx;g5dxLh?JSC*25|?A5-25ivZ%{5GO%{B7z;Bouy(VU*Dx}$_ONJy`Xjw8 zvY^ttk3}BTm+EJc2GzF{SlU1(=0ujopdxk#%K=d9Vh+pkZJr$2|P(UtY*?F6Rfps}c zBB&N!$>IPiQC6``a|P9@EdRO~8Cch_+y~jPmgOv{c3Q`>0~A&3SwcX(4J`SmK&h2Q zZ!f5ZWpM+A{ALzk2~a7_k_lQzvX$kHIw-ZW@cJ?_ux@8j0hM(-SZqKA#7>qCplrB{ zr5uzrcC&DT8eV%?7J_;wdszfH85mgiu~eRAU|`+Pq5|qL9bh>FikyQi<)A!$h~+yd zqaS7o0wuR2EH6Qo)KL~GP+%QnSq4hG$60o~V`N}G!QujHR-9zot~?ASMRZ>n!!4Ch&ch#h~8w1D2v+pn94m9^}6#EZv}P z!c!JuF$M5%fr0fk%LGs>=ncz%kPUBH3_;QVj-?S)aK2~h zjs~S`7EMs&_&3WkP@(gOQ%e}dCGVvsDWn^4@x4Y-NK+=#d*-!iTQa@>0*%wsDR%*YCg z$|H>2psatCF$|QRjxnwS6+_1v4}-dmCm3&l>baAQYeBi^0;8ud69d~@Mq$ukL>Cii zM31$b>B=Hd>A)l>#Kgeb%hV5QX!J2X6Jugv?Pt0UD)uHYEd&+M6PccXD*j1Ki_1Zk zAJaKdvYNuQ6x4>9%5?4#sQt}!2vimj^#YLhHH<;!yVhb*m!^X;6Vx8-WK;)5WEW!)XvC+R z@y`YZ2G$LV&&1{EXfC7?Eh_OofA1-a><(_}$9nYM#EFp>$N z@d2r>1_lOJ^%5sW23C!kpk9P#S~vp(tJVRKqqP-4;yQ{Ypk=;-pphlLsi5|*{!UOa zVbH=3P0?na3m6#KEW$tyPbVMH+GQ3T-eSGaqzPJs_>4&}hXH%wB70KsB&ZM;oem0J zw|^O+&Z!q@Xe&bj)b3ir_ym-^wlS>$)!W;dZh%VO9ZW|-RnbnSB6lVR)?G|@K|_4I znbw0Uraescb)d43i49cXpJdtsYO|bT$^x~KmNWa>fs!n9(qje&)^p5-pzhW+W?xWM zbf5WcI;cOv{0G#&f59xI&&a^~nYsQtBdF#Ks$c-sjz2*C;{VJGK%L$umZGDK46HL) zuJSQ4u+C=r%Fo2WI*%m-RD#TB*$m1)3s}<2z%|l6P~Km}G6&?N#VilkGJtBNn>Rt- zJC+ybObo2cSo%QK#&VX0pbpOpmH<#2ekF?(sE%F55)7)TSF^~1($g9i7JViL*0n4d z&Y)%#%Sq5M=6aTupw`9)mY^@74gpJs83P0BCYE53S2nXWgW`D$3-@eLGm1qO)Gd6^ zss*ZGzOya_rREN{DWHVb%T@;}B`33GLk~=4)n8-A#K3C60~)R}Ot1tEg?x`=U|==x ztz%$dwU_`h-|8)BXwv#As7qlJ4jSgLy$NbuIb?teXUE5&_N&vQ>kJI6UOz$AwC^5J zFFfEW$mHO_B1Q(*s5v0hq7U{nGO(sgf(B4BctC@{IWr>|7+7=fgYsrx9H{&++zaZl zlw@3HU|_9Y4$9p%{a&DffQg_&tC2AeH1gNM*v|$kJs8D6UHV?ei=v>$GUI2^X!c}A zA&}e@#vdT-r!vNY%Ao0tUqPdgGZ=F~jkH;e&p=TzhmjjJ^t6_77pNt?j!^{Ev|P`4 z95kl0f$=G*3%Zf93}pFcMm|vGv4znb)b`!Vmf$GW0 z%>1C1%@*blpaOI&^GZ+(*u(q{G}OPBISe$@aG3c)GN`}D>;~!!o?~8;!^pt;gqa8A z>SxT`K*O6an5To9fiIaaNr79YEi#M@tY4YCK@F;3%!RrP46Of|=Yit9iRA)lWVVgv z^#KM3)()1$yWn<88Ug4v)UC!umsheY@pXpBKb6x3=LO_yb0U==$IDtyH+ zfSR-tUZAeIHa$ff+PxrzkHD z8Uob}V_;xa{bsi`!sy%-WD%KzIfr|A+P+6jx1Ip-HqM&xDHW#SL zsB-{RYUQB;=)g}lZtP%LPy&Hlw)Yo z`hxlT6VNyavka(w`o!D>a^QF7MWFWDA7))pCDzDt4`gN&OA#mpn^_)dGcmBXu-pX= zf3~v3f%^OHEMFrSLHTzcsNvMbk^~xk>tRU)71O;e2SHumi7W~U(Ds31C8$JIu>oZ# z4GwOoD9P8%6 ztOt!f9cNq&YD%7GWCRUFUSMnhHC-<g+p=`V34Atall=DKUbE5CuU4 zJKQy{Is=NGCrqZGF~_G&iJ%(x zGgB%kNq%8c^=4vV{lnx5>T9e~L8H@(a-a!FrQe_ipYpmaQ0b=y8t7Ne0`)G{zJY2Qbwkj^r^ac}^r0pL zsB^7#7Brr#y&BY_(2)Uk2n}pNtr5e`GZ`3Ijd(y=z*rVEp<=QJxGvj7b$*q4Fqa(Du&Kpk(*XJlY? zdJhUQ=M|tL$Hf(7um1)W&?L=nP1 zL}~U$P^=bA=wM)AEi?o5U2Bp+ouCHBR#17=$aoDj2-?K>?>2a1BN9|+v@re#waQx= zWkD5f8>261?xUU26f{xN!RP?$aCb7sfip4VTu?F5$M_D^t?Xxf;mpXuI)U*dXku|9 z0pP?ns}I0cmE7BCi1WMp7n$haL;axG$v2HC!xF$6S5wSsXbs5oEAxE~aI z8yOiv?%c$f44UBD%vc1P=GemM3aXd4GA4tDt#>k(gN6lnGa7@=djwTme$}8{8T=nK z+Y(|P!NkBC+77BH!cx2#8Q8*QK(35h37T(A23^a%kD5K&b>Xh^9#9+V_&R6w>gF?NCGM_L(mKr_Q_jCP=0xSwh5KSl=D z1575Msr!RW4WMLrh-sk)0|V<}CVx;_dW5Mn4>Tsh#0GNHF{VGD#^P}%R#5Ue!E_fi z_RuCq*upsME_(|J(G;ylwa&;aBGrXQdl)^(``NT94G+O(aX)&n9dV$$+3nK&T zMP|@GTGq?Vd7w7cb>=kCfXfYLeNY?jCbJ4Cs&6ry&jJ;+%#%Si`W@!WphR((`P47) zuqhA7qWjD;CJYR$kCe4xVSHFGa$ zZ1WAXKB(vOmRSRo+TStPgW49KnLmSC0$-V#K>_lEc^;^q{>`iln#20bd>+)iZ(y+k zO?@`8B!HUt(^Q#WEXI{>^5o)L>v>ox^ehG*U8`#S)Y< z53_KCTF*yWB0#OU<17Ur+fTCef?BhuSVBSL$fsFOfLb(XSfoL{^s_8Z%NRi;Y=xkD z?mSBy$blDFwt~i4FS0a(+Ig2*{6NjRD=eTjmaJD<{(;iOH5OCQjKK|-hoE-vO%_>D zF1f|x4jON}!y*EzK<~2Hf{L4aEE_@N`S)4gfU@HQmdzkfKV?{`<8Cch|uLcb~Z(!#Dm46%AkAcP-H?iA*E=C7sPG#OtppC(%K$`Mq`S_^_A z-)0$TV$Zf3G?QTG4{9sgGk^vg9kNpy7+4+GgGxT9Qy|j$JgDq~;V& z8Rf1HTJqtM2b!(&ya;M3dff-jb$Dlj+O}naRk&8h#HHa1nB#OdEL=RF+3=0EKpR4u~By z57dx}bqBRH;%0%yW8)d@85vj;Oh9!-q5-H;mDB+0VJBY&b+b|oqL>(1Q&T|`ZfS== zjiYoQP^!w92U;eSc?C3{oV79qG|B!CG{2a07?gQ)Ge8T*@?=4yVELE1m>5_Keu0L< z3hhCQLyB@hekuL{8qF%H1}$$WT?(p8%Njt74a&EInhq8Epr%wMCus1eYBp#YL-ilf zAZCpasFhl~1JtRlGXPDi*3SghX$_2`pw?C+<7Lo{RukhE(5jebMq5zP-ohvbD!N)3 zLFbvUwlVGlRqpMKCZPJIgRu!TG}y`L3F<3#F)j)L%?dCogC^j57zIEbu3pAWP^Ro- zd;}^*`x%)*&GQM2A)sdcL`Hs4`+pLn9cbWrGUFsrk8uj41ZXCDDx)x{FE)+w=^gOA zyDTWB&0stQO06>)O+fyh#i#|!+OrvNfTo@1Fzy8n+RSB?0a5c9c|q%+<}=;{)%^moaVwjiD`P)B~l76^z^p;EDQa zpuWW_#vSiLePG6N(74VT#%fUExRy}>)Z1CdXb&p7)-z^;nr9mr%|MmoMn)yj)chvK zC{W9HGvg~zKYj~iC8%85%IE-U7i?pE4yu~BGd6 zv<8i}>|ta9O{DE*JPZo*eT-W{orC?1a-c!(1B}9;af5@5ouF#s5TiG!oH)!_1+wo5 zBQL0kJ<50!)WtZ)xC7M0InH<Mmo>95!5QYz&HWaExyS36*RPPi7^Y*>b=aE3<}6Aj0T`?*;U3a zP>Q?8C=Qx(yUutM)DOJDr~?|VxXG9e(szq70Mv-O&3G1+FYhoquVDZ+;5UE@_D4UT;(0TzcKoPy5Qd#Z-Qd%2O}S-$M=(w1C$hhG2R0W zRQ_gs-3*$CV_XUv`}oUf0BUppW2^+tQvYXM09x?Vz!U%~8XB16%rpTsh`)rX8I&oPGA#!sw`EMHKzU_3 zQzfWuTEX-H)J9v$^cyqNhFoo;~%{?>m zgL-qjn0A5MnY)>ML5|qNWC1Gq_A*s~hNbo~Jpc^`>}PreS~qckX$q)hILPD;8Vx$c zbOe;n4l_*$^?8mkodh-SPB3YKrZY}56@oegXPERsLuO~0l=B%FSkE!70QC^hGpT_3 zwHKJKfffi}VyXi5{6W>O!Di6Ri)9(8@!;tUT6q*1Ys19AS~wXrkW$1M#>l{0tOP0# zN)jxY7+6bLKm#{rvp^wPegHJWT;U2DUaGVQ4OLd@f(Fd1gFvGZHMO9I#d^kHpe4u~ z825v!=#7lqK+Tg)j0vDJb2FnkxJ%0@3Tip;WQ+k1&ofqmhLUzO9t1Uf_b?`c{JWoV zEof=&Ax3sk;e3=)%$R|J^(3P_D65}h1l>2pdYbVlXkPpb<6Tgv@+{*$P~-L-qX1|f z(|N{cpl;9w#>b#K{UYNeP$TXV<2=y#)fL9QpzhjL#)T_DGn9;nL5-a2jHf{5)D1=_ zP>1v(W(EE*Ub+BUiNZJ&)a?GpxCk`R(#Yfs@_P%@K~V3tooNCnl)9Ow zf{L9UCRb3p>t*5rtzGD2ssVN7`k9V^B47ejKWLJ0B9kDfhdzm^3KZXynJ$3FH>NO& zfhziGOc|i;Je>)2P$26Jrpusq)J&#jph2NoO#YyO*4a!Epa_`5G#fPFI+tlHs4+61 zsS`Adynx9cG(5JDsRT3wyNGEAD4Q&1@&UE&mM|RxDOt+&6;vuOW6A)fycJC6Kz+uQ zOctQLx{663loeJpy$1Cz*Dy7LGTU0Fm7pQebxf(CzSMfATu@+bWa0r8LYtU6LCw0& zO#47p!xkn1P*U8=^dHn>+Q#GtD(1E`-2qMN?_lyyh4u#(RY7A*%HbfZR3bptmFi?r zZ$`}qw3bRU9yC*?#Ru|-b_&SFIv+sgvhFKTv(sQPXsFKcBB()c6!@PJbPx_`0fLD* zsJ&vk6Eyi^b`#WhFqha4nmpNXf{}sM(izlru*w0oovkZCwWf_Fs2H-%2F)uw)PVAX zqaUdE>#`4&(Opl1nw|Ne!x>l${(@G_)x84^_ttlVx@nUc!$Ix2DU1_9bNka6w}DFR z>5Ouq_0uyMLATPe&SINmlz_<;RI~Fm11+^R(GwOi+ zwUjXe2@;^*P~tXF;gwwms=9Js zfQEu|H-kC>c_yGnQ@#tR;wbO|ReFVwKrM=*ji4H=xEeIGU(y7cIxSrdO0Z@1pjny9 ziJ&H0)mwJZl+Pki%BXh)HIN$^r+~(38yR^(`kELGLBZe57_^CjfwhJ42gvwV#z0UG zYh#=f3LYh90!?{!F`8Wj_39WsLH+5ujJH5N#d(Z=pyu6t#%jm`hbKx@60GwuU**;X-Tf=arzjFzCj&Jjj_MDms=k&jr;1E12^^E1Op`Uk8QsD&`hY zGiEjORM66xHO%IqZpd0@PSE}Tx9+a>Um#cz5wb@U1nYgYRz0><^&C=TxEU&D%7qq zXMmd7*O~1=Ir;|kZcr=sCi7cR!F7vSA5^m5W>yCc`fy#!b%niF38Cc&kTY&l&@0fkH zKx;ynw}T42kIcHDBJ~S%0B9}nSLTx-$Nymd2x>0>WS$QijrqgO3Yu8^%iIK-742kc z0V(NXnFPvB_1878ZHj6)K9BU5C zoEAm~*10U5piDoHWf^E`;R2Ro(0ZVSEK@;q#*0`oK-Je`mfxVYk4sptfl|mamMx&Q zLd#i-L8I6!Shj-(zE-j%fueC0iz_(sv9N+N*IE`Qkjix|&p<7Y^(_6M{IG%LQ9gL} zQ!XfzZelS9O+##ExddtzY+F`zEn zSr&0n<#LXt3tXSG#DI#b3oM+V*{O>x??6*+mss9|maSiAnQ@PSf%OW@D$o{^Yb?(} z<=1tVOi&KE!J+|LYI~EV5i~n?i)A&ain`4b3u?gJVc7&4^1RE^1e)5o$1)F;TJN(g z1o`LzOE4&`AF`YWb>|+jTm=o%K4y6c8i#noA_S__p0YH7ikxRGdqL&ibCx@xLhS{M zE~xBz$&w9P0R4)^1=MMJ&0-E3k9fm!!V5I%!V&~B>>bNuP&~Y62?RAGKCs*Xjl_Rs zu>s93d}8SW%_eJp}5SEM^S`t<_t?x*0SGvXr$O)SO(# zDhQhOSi!0Q%5f`M_k!xoRjh8H$(+@!KWaeDb5;#d8M&7A7%0Zpu{wg9r0ZE*Ky8@~ ztdl{7_(oP)P`$BAsJPhAssl=jmsmwXO}*Q!%Aj%F zJFFi;i>U6iegtLo2ds-gZLVjm{UF|R*3H$R)oZNFKvQ9FSeJnUuyk! z?FVZjsJru%)eF=w{=;elYBc?2?FJd$#8wX)8*gUY1nL5JvRQ(XR2N$bXjpjyTP>)# zpUBn)8atZGb|17xYysQRWKi9~wg*(CuVGsY8r59S_VGDru`AnDP)zS<(*sS89$@1G zEdV*l#s*rUa)?bC)Q~>R_5@T;9AV1^_5Y5t6{IsVu%2Pt4QlG0Wn%}mT7R=e+y+f6 zuxo%?7A@=tK_yBn`y@~i)W?1b)T8ZZUj#}a6WCoq>kKBcKL%x>otzIrCDAUgekM34=aInRTl_zLH7P~m@_GaOW~+~5oX z)wee}WkCJnPn;h>8TK=05NPE23ul`Fs3FZ64%(dXowE`&ocV`yDyaGRmvcX8PP=he39n_;r{tYS~)6zi2M*0Jg$r(W2cgO=3hID>|Ra{WPLo)x*E zgk4z&3goIt&{%6DV<4z{Xkyd>`J%4v{0zzm>lk-|Mq1W0YJyhwY+$ScH9j{o#(?@P zn;6%FQvPWJQCd<_~%yv0}! z+P83ru@Mx6cNrByBV|t*4}p3VPZm)xh?gn);J~OTXt%3T& z_ygqluZ$s}wD*niKWO&nJEJEk|NLOA2c@r{jAo#z;9rcJK}vozo(I)*e;BWT2Alpe za)VY?{bQUDnm_o@xE0i_YhXGCs(>1qeuA23O-$cGf!xd_1S;cNn7TpBu3MQ_f(H59 zn7)JN@!FZ}L7BLNi4!zD+sU*ORONIr^??SDyP0x8eXAa(@1P*>WfEHt9_Q%+ox=sH zv6Xy5o>Kh{%7AJjpxmfy3mT`>dkz{z)2|2RL4&iPcrug*Rdz;CLG2OajiAcSWGyIC zO<6&OlUW?7mNmZsYARdAfJz_B98gVUJqJ{<*c=D-e{D~KhG*?kK?&5}4YUfuK^inw z={OJM24_vs$fc_>Xy=F9PLSK&e}gJ2&sfl4jaMXSWXi`3)OPS~1BI4fFQ~2V-wMi3 z0ezrCK5!o>(t~z`#z%sGfc8R#2!jTaBjQ1sIPx%P5;1BsXdW#3Bd8#b@dBlsSSC<< zjk^pQUXR}b8Wc-N1Feit{0(XoCcOn^v*b)r&pTxkr~pm92r4|%*g=(3dJ3q`oG}+P zwvt%|+6t5v1k#(W4H~b_u>iIF^X7vF67vl~g?+(H&?rx#7pO;9BnE1Ul&%65H)S@U zBB1;vsPR;B9<-FGvIgY$s#4GdZS8(gldkSEsA{fn0fkiqV*;q@(8zcKv<9Gw@hqsD z+RPXQit!f46i`js%BT-oO4r8d3aXvj87)97UOE^{LEXr1#(khEmmbCm9gLuDZakn2 z-^Vx))Sl>PybtQ_PGIB%Rap}mIYAAqNsM-&%5*ZL2B_|s!gvuhb2pXIA0#-9Q5KZi zr!!iCS_v~4D?#IDGa2uIs?S-B44`^?Hlr>m1@ z>t4io1C)jrGb)3ob(S!`0j2Myi~*qOk!6flpuk?vr~vA0tzcXLDy3F39tVZQD#m%B z1hAU%EvUV_hA|%$NNXAAgT}emF&2Qzw)KoUph9Z{<1NtO%|=FPkl-dp3y?*d8E1k9 z=C?5Z1$76uGA=TPjtIzkmXDqpfY;} z(+*HScqNlHsNuef={bm6&2$>%v^7kuAa|~1N(MC?HZa`>h0#VPBT%z!6H_2)_4sBc zUr@Eam5I$1>impgP=3xn3Cias*Fg(qn;3tAhGN-`{1oK_jm(G{fJVQ?zk$kWiBiyPw&V;@ zT9-&RJufZqKV1nT{(8!w6cTg@hz6Q!ZCM!XcN9Hd;+03F2H1}%#0_0Dd7ocvgT?eS_ zb6f%%NpM*P8c1`u1T`hS6hM`;Zw9EO3*ZHXXRsBhQVfd(ZA^;v0@a~0b3hX=@n1oc zXi2=F#m1>Npq!I&7F5D!tAc8fJT*`!yigC6SW28gAy6(4n*ONT0@_Ph>j=t>4UD~@ zsA^$c4@xPmj6EPj+8Ehw%tj04RdOk{iq8r_@3=m=^|OlJH5S_CnLQ595DPGvj+8iAe0Xa}kyr!%^O zhPh@iegyTnXEL4*WdiMSH2{^Svl;zCCCMB{b5Q=7%eWRa1vZb757cv>&sYx1JPR0w zK;uLU8B0K8D~lLKPk?rvF^biLHt;aYf;vk}8CQe4T+0|$L6Zv08M8s74J#P?K;vpF z8UKTdrB#elpuWgz#-pI7@ES%JkUQ5hih+{PI>wuzuFQJI^`NNTz*qoker{wu4_f8F ziIE8unwuF7KvmTi#!aB{jIE5Spap!}7)|s*`*;|`L9O~7jQ2q;+ntP^ps~fhj9Q?E z*gi%fP`R?7Q559&1B@P^X5>LeHc%iRVq6X?Mh-K2fOfQgKCBojG%KQSx+)v0Ifwk#rOy`mvNdg95gp{hOrVbGBEv;s|wUS;$GwTQ1VZU?oOt}}*%>WmwV z9iYT{lQA7M1aXUTBdBV=&1ei-xp0SZCuo-ZF5_iT{H02TF3Q%SKm~kd(=;8_ETTqMgDdQASus&n_3F^r{XM6{W)EA5gL9Nr5jOq6n z7+7C1UIk64yk2mGH=8C1$QF!_R7NR3Q9AXl$qdJpo-YNjAi zhjtBy~;W-_hmh+%NrQ0mIpan7aSoZruHC3|CV_;xyWxNRrvssLjKqE=B z8B0KosJV=rLE$o=kqfkbUp0^QP=D$KV;yJ`>LjBjs3<(exCJyyafWdYXk_jz<4I6i zaE|dOD2rZXEC)sZ9mYwZ^+$IZ`#{^RA2DWty5Wx*BS5vy6UJgtlj$jAGHCqr8KVZM zANHKF9<<2d1>-7E@%xgo7(7(MxDK?U;v?e(&=S3`jI%)l1iu)QK;`ZqMm12FG%&@B zGcm9>GI@ZyTun@$L8I)=Obwt-9j#2iKyB1Ern~%1puO8Mpi!+ZCKpiSa{^O1XvBCT z6Pp^eSLS{jRD=g4fQIja3PFv);5twx6>1HdkO(UQt?&qM2MuFKoC9^NqdP&BWlTOO z)?#BpK1%cjbsp1Kf-aW8DnPwDbxV-d8dadZ6Pn9GL8)~N zR0U`kfU=Vg=y)JjU1?B>toIO<74?sT8lwi{pvum0I;aU~#0_eq7^j0=X>t@)k(nL> zHB-zAL91rWb3tR(7Hyy|uw^S~n!+j?)OE7%0To;}t3WYhdjvFxVt0oPbWBDfsHNi| z3!1ibd<;rFPCB5a4bG=PHNVStQ2)m@2UOO&9RW>?xl4oAka|>uGMuNlCL;r@*J)6x z=`8>XL7xbaJAF5UMzj6CfrjY)1wmb)fM=k%42%S+43Y=j4FQI}aObo1H zpySb5!%u;FG7$lwMZl3aLF%LYL6vy)Gf-6OgTR^B+`Fs@|Lg&45Y;peaw~m7qa5_06CXU84##jG?&_uykYBu)a2J0;x%b-t6Ifc%njP=Yg@ewGlrZU!m7NJaIOb4ZgS&X$H z?=NSZ51L|G!I%zerLAH-4(c1PWjqX;{Jg}t8q^58%xDAh#1+P)ptVR>8Jj=}^e*E= z&;;%SMpMv;*h9uEpzhRj#!OI$`30jAX!hnMqdTZI@QU#RXuR-tO4FE*fI5rQnLdGfJTsUMG(r8HrU0s) z%I+IO`Rf_&K`oNaj9Wnq4Yo5b0SyEkVw~v11lka~1=Om3%yYV_}AdJQVF4>B2p zMy*aTZ36AxIL8zOTJ&&*$qQ67-C{Zp8nL_2^ba(J{e-C>ltx}L1%T$RKQlFgrp13V ztptq=H8Vd2P3m?t%Y%mFrZV?|26<*O`+<0KnWI7N!-dSXpggmbITq9>UCDeIG`+c& zxe2t^a3k|~kYQVy{Xm7xPG(b3b7L>_6;OqLka;_(Epe1t6SQRXB=Zx{SmIe`6Hrs@ zBJ*`nkKihEA!rxRO=crd+w(5-KhQkQL*`P@2+mXHy`WP4CG%U*2+mvPWuSuUBeOZk z?_ZgNK~>UE=F^}&^_O`yXt6{i%O21ycPon%=v1AOAjUP>9kp_(#Pi08~ zwKHb2oB)ly&1LxwS`4y~r5LoGVkyfJ(1xUyEDu1n`C68KPzv72@)y)O+RD-dsw{W1 z909p(FH0b33-dvi5KxLb$|4RLraZ~AAJl6;%Tfm_{4cWffSUSOS$aW@tD7vVL2K3S zvMdBGQGCd<4>ZvGlw~uh@@` z4d8y(xuAuvlUen8K}RyM{sYaT%x0at5VWq0bt`D?;&Rq#kkPAIT|v2GGpi10l6*U> z2x#f&Zq}=yv6ADgIiMEMc~)JJZ?CiVf*NJ_S)YS4<6~AvPS@0%~cu zuqlD2y<6F?fz~s%vBiRFwRSdB5Y@r97Bp1Q$+i_VP}#+{2{h!=%@zWhf9zp91!_`E zVB-aCFq+7A9^}nQY_~v#;$*gupoa5wHuhd;{R^s83#<7V7}!d$fQpPV z&^0A&(PCs^>t&n?%IJNJlh-pcuuWvl0?kTIVypzYXFB6^ zP`aMMI8T;|fo&$E7pOTki&0#IiGgh{<26vypT}4Yy0Z;bWpy$pf>wU^GM)zYp(iqi z!p5J|cZ0_3+ZdxkF*b$K4OAOVWjqKPR+z^41yoBh$(RG0o1DdX z2h>iO&A0$mqRe6Z0m@Z#8B0J-l)H@YLB4&)*aI4pe9t%=l$L%n27p!*H!)>`azGc; z4bWWnB&Ii@Hsma(7oaS&n5hd?udZOa1X}a3kLfk2UwDV<2PpA9XPOSmhVPjkgS_#L z>BT%~Vu=0^nv;#u1*Q7f37}4UTo9;UPbdWW1f5e6N6t1kPKa(b%_~DWKyMHgf+0HQzRIvx9cVZsvXn8W-Eb9R^xgeT&=9 z2kPFyC{VL9$Qe}31v7x$)y!xGIz(kBV=(AEia(6upeoJ?X#!0L*cO92UJesMg@~gIXz`9SJ7}uj<@yAuW3>*078RK70u@2# z#{WTUz*9lP=T@2^)2+3Zf(}%Z1I-WG8G;t^*hhoG&zbd2bV%g-B3Q$d(dbBZxJZr@J#?U6Zu_1 zjX!~Vp!1SJP72r#8bu2C2F*A|6oCdS<6eMbFG(EarL>!%25uHVs1=nn3$)(3tQ<6+ zSFHh^)Y2TGBU9BGns%!ZKp780(A~&GVKQq zP`0ydeF5{H7O1ny+bGS*z$*Gt1sYe5xgfq%B&bK?{2G+%T+V{}b#9EHxi0r3pzQ5o z02=G{lmaz}yox}L2Jd|lpra{VKw|{Hb3kK|embDk=>H4U1`TEet)C3L3+iEomxBiX zlNN$D^d!fETCORdL2byipP;fOvk0_YqOcWIbeB7W+HJKLKoi@IjO#$Hx>iOVP^+SY z@iSdWdBrXaUR-mUz%y=2MoJkZJWQPn_mf#RArK(?BCrtRF$~wv^QiR7EUf zT?KOda#kr&(`GlTEGT8{VSND_4m`x#37Qo+%31*$)H};syo!N=^&G1TXf)v>DF#*4l>sJUoz4m5)9cMY^uAmkcoJULP*6sk|>2WS{p zHv&|}>fHwA8~uHt5n_X{pz6=i0#uHeOa%4A%mP7dOEpmM!CD^FII(5dW@KQsUk{oc z^mzj6bA(iZ#&ROvK~2Gw2uWx9>U`1JvH`VbTB% zqE2DD4QWij1(lL3nS?=OO`DklL78X|lP72o(h;U#phaa@nR;B97+CKyxqt>bpE2cu z-13fTCun5m8-!^11*k{Wz*+~2jZW5gpl0Gk zR(H_+%N*8)pmyF;)_PD3ZeqO#T0XRswHh>>cz`t+)TBGk8U-4@yv+It)Iqw%dI~fM z^NF<_G)MY})d^H(HM3QL`bj-(n?McU$!u{TN6cpn0L|sDVfzoNPPemN0}Xf`WxEAh za&?!@5|r!Sv&{!3qAzUepnm@!HboHC$i5jgZPm&Cc_rwu6Lw=zh1Sbn0vc=TW9I|4 zqGz+ag7zycWLE;E@U`s8prN=e?5jcJDZAPCg6hdb?7^TsevbVSXqM_K`y|k|j4qCS zpf=cS4ku7qu!LhRDCw`|Xar3iZsoWK>agzR$ONf8%fSsA9=gxL0UC;X$)N`7O@8F~ z2r3i)aL9oc^8V#81yypLoP1iK^VB$1LA!$Ia8}+19k;=018NSf0_u+3;fVmXO5gCrDud3O;Q0rtoqG6|flBILzI&hzPpQ}`Bwy6jW=j6wNf8lMMf3UoT3IH-7?!RG@C$eDZ> zKy}M3zV9IIv-zHbrrqc8IVCVLu+HVv2Nevf`8I>5V>j`A1Wm^6r`7McMX96crE1j=z2g_uEJc_wrkRJgwt zT6lngf%S{fOVE_%A0ZD=$oC8H1@%U!344JO!(8EVP;I$XINltz!btcyXb;O~VNp=l z-X%O8WbHxWIiOHFA03Uh;&!n_eK2bDyhg;#@y zOMeT$1}&s&7BK`>7+oU9psj!tMGk_3V5Z0fP^GXy9~U;HK4)a6Cw>DKb#lg2NhP=M3#cuVuwZBL8CaQMHhhv65oj)1a+I5#g2fQp?3N%8r2+_LtuQb+)QaKsU~T?T`hvG$Z$b2F;^`L4AqXX`rPb z@nWEQE!7<~&Xo2R)ND$x1vTL_{6T~GnOi|E&unkdTvpCLQ0bVf3>rAds{%D<^V30N zjfLMpQBt%GG~!*X2CA(}IzUOe>5NN26H~JpyFod8F5_`fPF={@0m^ZU8H+(JfX1oAe!@HL;1k_A9$k+`Elf#TBL38&<7%zZ&hsPLo zLEEBEG9Cnt)ShAN0~KrM7*~MClrAtzf(A`4F`9u!bZ;{>J+_TYyxHNmyC*_wLY&Imw;N~Zx~BKrOkUr<|)ux zUppQ&J08glYHTI_19gBhr}&^T{y3uqiR&k$6-KFzx|0KDRM$1r7deXM7Ec z#vP2wpbC5^<6}@Yxr^~1Xz$i;#t)#m);)}yL4C@-jB7!|eES&PK$Y}<#vPzcdw}r@ zXf63c#=W2cr9+HLpegLbjO##M*dvS&L8GQe8I?hu&|{2lpylkx8S_9z#tFt4P{nbQ zQ4kdRrx+VRt&g*eDxiZBE-_vQjc8wEya~!@w;4M?t&jVRHJ}FM6UH7;CH;c23)I

    9V92F)-3W1I-87#o;!Ye5I)F}(#<#7#`%peSo*@&OfJEliU@ zV?b?8J3(VWolG*IX5nO}d7yG@9@7latu3HTs&@)By{z8=YC{<)fOao9%mUR{j*CHq zMb5IIQ?^{VL94Xf*g#!B_e-E-V>|>wYj`~UK(oSLwxF>dpG%-@;>!p!GvFpDxdirr z8gjuOKs)n8!$1{4#9~m(B3cgAMUI^T8Wf0s51Q^sYzIwFr!a$t!!!6m2_=&UwCg4N zEvWv@)dr1Xhl`c22i30?CZIl8buY-xbsnJEz(z(dP~fyM{)z$}0n8W( zTA0^FZv_gP^<{w-r>s#TS9xl5h!BG$h%9W|oqtfM(26;y~j| zsXstwrj>#$%=iw&y!Ia2^HIDFY9g8}1FbqSbp#EJoAH1e_U2bXEkTR5pnB7C0ceKJ>LRGZvSt9y zjo5quC1eM=51?J*oS*>_Cr!}6q;m&o@X+NGsQ2o+1SH~S4~i@I4AAh9hf+AyR#y>F zYc9V6)IylgxCXTHWdY-TP&h1POaYBDEn}<#Ek0Pzcn4HXtY8!djft&e)B{D}dPXzQ zT+;@|C7?$9Mn+jsL9~f+i6iLv7sg7E+!jV}P=s$~Tmzb6-o|(e)c)GeSPu%q9gH%d z>T@S!Bxr187vo`2alV^zHYk|(Firt2nb^zd51NSG$M^>{s=uGH4pe}hWt;(W?ghpt zpr-Og#t)z+RhJn%K_%XG#;>4!cY{$MREOPUTmwotw;7*-iqAWYcR<~XyNrpT(7MOy z4|4Sb#_6C%uMZh-gB4n57K3Ije=#b6W;A{?Hi72a|1kD|l6x~#Cn$JY zn0A1w+9^ztpn7*IQxj+oV;a+4(1`I|CJ#{AIFD&EXi#b!(<{(O%629%P_Ed)bPUvw z*~!EYniSr})Cig!+|9%f>LTr7`Uk2kjx$MtIxr`g3PBa{Nv2PrUg9aH^PmBw(@fr= zj?Wn;2~fBHER#5>&^gDX2WnrQXA%dEY+PXK0abDLm{LJ~ocm0BKxNkhrfZ-A?jchF zs1kg{R00Z~r%Vq)W#4nATa65$Gpc`sCScw&9RRh^KQPS)b;7=iK=HSdn-#{g3X23DtkpgxfE z3{XAck_2ikxdnkbYVHd`OJ&cz@&A%y(F`z6ko6&12)PqVZKszEdpMvg72E{Eu zFDNAnh=Rtw1)D)b^WrgU7#Y|mGrj~JAv%T8{4xUr+f+tA&^X>S#((Av3~bXGFW-R~ z_W=}M0SzEO1ge6P{{%++dr(Q|eozm~Qw>z^dr5#6UV6KNI`zKKK_de}CZNO-d%J)Z^@8dJ1Z6^)XEbrTc!SD$pdtRHm7r zgK6h8-2oL0tC`M$mLhCo`VC5Ho0&90rRX-MF3Prcc*mI* zf_5jIVY&}$K3rrv16rkbnaK{+S-;M-4K$8?lj#a*5!GF$S)h{&?lY|e-IobUzRD*+ z{b$oMP`k^571a5%Yy&kPt(Jh&y>%|AnzrNI1dUXVXi&R=A3Rhq03NDe$IHOL!~nWw znUV1~A1?zV=p20p2GBi=`k}?CMaBAQnaQao`T8!Y#n~nK1^TYR0mep9GPSrsH!~$o zx1cmBCo@?;IX|}`KQA?}q*yeTx~atl#zwlSIcfSinMwNT z$;tW{5+-^UdZzlBdC57YDXB!5jN5s6spTMBphoHECMIWO=26o~id+W{Jeb?SoPzwK z68*%Y!=sc2ep zelitJgA{4{C7HyOH4w!l7mT`TnH8xi3=DaxB`HaI$)KXVxFjVdHBB!Abl+-xN@`kS zX--LeNo7H5v0erPGXq0$NlIp3iCzW+3j;%PvR(!QD+5Djfk}K~N=lJl1_K+2XNJN< z=H#VkeQmAnpObuO?+ZrF~~R;klmni9-#n8kOpoBhT@cLxI=gt7*bM`NL?dfDL)_NEG7nq;(Sm_6kuQ|D9X=*1~V@M1E?NIOv(W{ffp2h1x2aJ zi6yBipmd#?mstXJI8zNrj1sE8anK+pk7?~M4IT#q3SvXn1Y+*3T3ML^UAeD@qY+w%f5yHinsv6Xbh{iy$N;SR|g4kAaa{4QwG3$YhWMK%vM42}O`2SwL!F;%wl6 zW@2Ul8P3Mc2-3sM0pc)&^)uIkMVO$m2GS3+kC%awnGK{8W)|2EMvzLF2s7MtA&C84 zU;%KvBIHCta;#wY!+Z_$9V^(^>+8W1CmFzg;)TW*C=tTq7^D_#D>DnoHO!F23=V!~ z7zv7RHgF1n#VE)p5M7L%AX!$h$*{BniU%eX5r}$jaGC?f2E-g>HI4NkuQRiNNnWsJ z++a2*n9T}i^K*iX5CpTiz~VZf0EVOsPiNnNco$cvPXRV_;^sg zVQ3a#0x1epQxpstBAh)Oed3)1jN^kHt%lm#zRNGV@9pTs)iu;$8e*gX0~80^*%LT%ElYG&CSC@Nf>$R8Uh> zfN&jy0yH%lB0}PWL%ieNf_#Ic6f_)tJl*|512haO3=MP?pmKh$5g|sJ3fc+=6-EXi z9j<=Cj`1Gh&Ymv8&K|D5uJJ*R@kRy)=JDnVhK2?P3=zQ~--HA?2Ka^g_{2LqI(xV} zhJ*ygJ4FUK1_y)8F#-cO24AOmA6LJ4U&jcAcm$ilGa%mGH6%VHGQd?MvjEh-(NxfY zv2^V~B`n+_!Qo-9LBXE>e(@oO21W+)h6*6c02Zj8eo%ArG!^0@;fy2%4QAJf5Kq4l zBNK4g8yhghI|aMM2ZRKWmv zfYjH1p}z4U9zm{-F7ZD8&W=9u!6E)Zj_$7U0sfwTA+ABe3eNt1Zl3P(Zb7cDpmqR$ z)eOF_zE~3wC@4LhLPK0N5=%;oiZvDD<3Wtfq|%bq_;>}VC_`pmYKd8VUP*qU1|$G8 z3(P%8deqM2jLS_M^!5CknrKtu{r^(>s85|Ptp}^qh zfCQwUa{x?)AtD5vEKp*@6cQVz1_p*8-vq?_hq(s1`S^!J6Q%(uqMdylgM*#p{enF_ z-9i*B7<@pvCB)O$HO$c`J|M_5%rV4O!H@x*ZQ|1si%ZN*Q1T8~eXxIgkaL(*s2eCV zp}WM#)7jN8*frkI(brW$$GK#3tf-o?o$-q+I)6k-}F`K3uYshUQ5MnD_I-`CR_Y;U}Rk)esXiG{J5i8;8*2yeD|=9Ty) zmZat-S88Y~KE>w?ALbSis$jt2>gMF>u3%&i)#e%G z=xY!k01803BZET_f(*XF?(r`Eej(wGo*|%;6_(^Z;f1ebu%`=h>B|t}91!pCAM6?k z_J&hrh-SlcMNg?xh}vp$XCIT0lhE?aP;$Z1|@jEkoX{1 zCx8DC1w#hU0JC^-6gWEuhr|av`vNecC(w`-7}t51BGt8<8d5Y)2< z6(*oc!q~uoAwI~})h{I8HvnAtfHJs7K}iv)Pz6!CcJa9dx_0rPaf6)9;u3gz2N&|7 z#EVqK8<{b<1~|tXD;S!Cl901=d~j$$fPYX(aD13!kfV#Ib9_WZgn}W1Z&18}g0T@p ze0+IwMq*KXNqoElL%64(i+{M2W3a1&xe-G~esM`^UI{p1M7jFA#fLk4I0nUs#K$Wb zK|KaZK!)HHq+nzSN}j=>7&lfhGK7`!9^v3<06Emt-%r8F%)r3F7^*)YI6lbJ&pjSe zyqGaKd4?DngJRjh0u(p~3=tvz!SUX%t^xjj(Bc+Sxf&Y4t1?f&5OA6{f`u=*41_2% zFffLt7f=P@;~yRnw6FvRFRTuA0@a}w@g|TuG(I@Q z#mV2_2UHGw27sIx5aj9{?;PYA;^`dk>Kve8P>~3$YJ(hoYgN`iQ>UrZPrJwY*^Z- z^0=p;XNX2#Vs0uZ|3j=qsa#A9;*Asx4NMFSj2Pk}g$>N5@va(qI+;50%Vp@va~;6GVU&G6V$2hx$U(i794%7UUdnWMBxY(ZC7EkRd5EFGZtR2joOB zk&~LIsQ?=9hzH5U7op2Rg8*D!`8&JB`ve;sxwr(OCK7NshdV|h(hhPAIt95pdV}Ig z0hFyg{X)!4z$rgo!P3ac*x202z}U>f)WqD})WX2r#|N6P!1;+GKHl9g)Y-?=+cn-P z)YB)#(=R^E(GgS>C>Vl9p_23S^5WA|OX7=ClgpAy(~2{zQbDbRJWweClGN0-14+e0 z9V0+8 z;A9i5U}(lrQk0mS8sZr24Js7p}&@hBijm{e6WqX!4{-%$8_;N3d`VGe zu10QZt_~;+H5EWiO-KVM*wGK<4@kS*fT1D~G_nw!nwJui?^cwbSK?NbpX(VMqydr8 zDJb(SNzDz(2P@MlsPM>4&qytT`5F`s;rZF1WCv02o|>0hl$i`N4`z^ph5|%RK~qOT zLjlD=s1PnwLDJxnk6>3nm-rC>c()*bzYqm@<$%bIX7QkG0WH)J!jNu(X*{f$h8E=p z@t_`#p)q={)yN~1V?p^D)UHC*h#?_93Z@K*BxPs@X-35>fI35-0ib4$Ymld}t6zwt zk47RWDQlD(8^xDsf;egl1{G=0R2u4|sbFi1DgcdTq!jKK66EO`9Pi`rZlqugNuhzE zuA#2+L9WiOo?)&U1(49zRA7h)XLM)hcuzkMPbbficprcN08lXccseTdaXhPVbf`hZF*P?-&i)p)lc zNB8&ua624cgn}yyP~99KMgz{$QZQ1`RxpGYT7Dtm zHg5opD8z%B zg0AuLn%1=nV$zn)D-F9bugpc#90;?ND%++sQM;KLFgK0VfhrLj;tR6(B3s0RaJ^z7o`87igjC=pOF^t&^d3JVL?^A_3JA5FGCx?gSB1 zuwa1qY%_~Llji6LI) liX6z|B!mwNRW|0#gQRz(V}t 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

    w@2eU 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

    0Y!4m8wbC<*F{8S#L!fN>}&7ES6vUN)T! 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

    g?m`?HcbC>gf~W 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

    L`E~K*1KDfd;=^{o+A2m5;wW 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

    {EUxRFf%kUg)J%tr+ZKez_KzM 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

    Sl185Xzp8 zq-HJ>dodDwB@%l*5_>BWdp8pMAQJmH68kI?`!W*yCK4OD4fzyF{52B$BNF>N68kR_ zn;F#3f%=gXiOrA17DZx9Be4~c*y>1ZT_m9vF9VPmm;xOBe6Fkv9}|!_ad}Di( zClb3Ki9HpGJsXL=5Q)7UiM+%ip0ift3$&9+*XIO=OU?JjKp4v#9oiY z-ipNDjl@2P#6FJ1K8wV@jKsc)#J-Qj2Dj~@ZhMU+{t=1&9f|!HiA`#of2gz-DRCzy zdPm#C;I1dbXnPnE4x{a1NH~z%9tO{wK+ClANbS{YNbI{vZ19{2R6TMV_!E+vpGa)* zdtBfy7>q#NLL)MsCL*K@vZW#J+^Y29Lo) z!{h;yIC9(d9g_H0B=#R9HZxLth6{;}++LMH5|>9}t0A#EH;4xdMy-Se9S0k}EA+eF$p9he{ zk0Y_qA+fI_vF{+Uk=vZeW4RxZ)cinV|3_l8A+JizBh+kl3n7Y#k&v z@;I;+lDH!h+XIR1kHii`V#gw}Q;^u%NbDjcb|n(K0g2s?#O_04Peo$SL1HgPVy{AC zZ$x76Kw|GlVjn|dpG9I{L1N!VVn0G+zeHkxKw^JKV*f*8vm%Z6@*uH=k=Rm5Y(*rt z1`=BziEW0&wnbvQAhErX*g;6_NF;Uw5<4A_Q}V1roa+iQR_8?nPox zL1NEFVlP5suS8;RKw@u4V(&v@A4OuHL1JGg$A!ceL}E)IvE`B2YDjEdB(@0>+Zu`Ogv9nlVh13x!;#o=NbFQ3b`BD| z7>Qkl#BM}lcObF*k=WCa*mIHCOOV*Bk=UD%*gKKf2awpuk=W;u*jJI*caYeRk=U=0 z*dLMDKakk}k=Sh9h`8fLVv8WLrIFZ5NNi0cwgD2`9Eoj*#CAnu`yjD{k=Rj4>_jAX z1`<0TiCu=ou0>+EAhElV*prahGm+Q}kl4$S*z1tkTanm%kl2Tj*r$-#7m?UEkl6Q; z*w2vIZ;{yGJyX!WBrnn&H)zQ?tW5%1_6=hzA*n&0_eWkc30i^-Qx96^3uA+p(!$ut z>nD-t`bWoLA>(GqYZAa~{-JR+9Vz^Y39G>tzfnl;Pefva*UCcun2#i0hQvl*zX9GW z0af3Pqz1fh7AigyNgTBN7nb&r$EZQeUSZ;(Wu`DTXjvzW4O)T;V}q7F!q~{`G(gJ- zVd9{relRv@DISasS}F%)gO;hm*vM-$Kufh?;+#n1mf*FuP=65<@8EqjQ1zf~7%(%D z*Exf>K)}R7+YexD_SeOOTS^+;-v*WULciG%l8LDeI# z0Rt`fhq(c?1Rur*Es=+@LCe!&Y|wIW7#n%r7ig(8OdPb78O8=JJBG1AON3!;&=Ou4 z8+ol4Xn8A49JI_7#s=?cg1Vm@sXP%vVk58b0`FIXs#ix+qld&cMPh^ZB0<$7uj%qa zQUhMM4^;!+X9Q)(BdJM4Vk58P0`DP$s;@>;(}cwCL}G*Y2SL>%uic^~4Uf+4LfRzA z^(OLKN6;1ySb76(jexO1+ZbSM(6#{>8??k9#ztP>2wE-=69+AGhp|D+&|z%Q5^xwB zv=kf0Mqbkh-n$1)1N=y7Lkx*6i^K-+%Y&*%p0_nZQe%n42Jg9ps&_{c_d{YMuU!Q1 zr-Q0bMpBc7#4bc)gZIio)g!N0Y(rAhi^K-+gM+G{jU*1U9XxWIrY#b`Y|xfV z7#n$C1855(OdPcR55@*<&x5f+TaRFD(6%=i8+k7SXxkV}9JFN%#s+Pjg0WeV>KD-Y zCopm3{R>h^Y7~*!;63=z@X<#SH$!40?^yuvuZOA!?@NWUgOJomBC)}H=b>tl_bKEd zsVPNbgZITl)g$j$?Ltz6yf*>7=N+nkK9ZVcNbI#pZ1CPysCwl62#1i=5R)&cr3P2s zM2k9QwEqaHr$+makZ>Ti|2PjRk1R!EBkv90j3mAbiH*G9hZgG_apgx`;-mZfAZY-( z?n55i8QtFp2_Ibh`$qf4knkB!{o;WtD+bD5V#eW-=OszqgFMowR{R@fBh&1j5KKBV~KJs2*F(ftMb7r7wz-Kx^ z+1f~IjF8yK`+vdbH9^(8BdPI2VuvEJkO9whO}NbFfiY~-`lRv?KZpUJQdNgVlHwIfL4r;*s;bJd`3Mm~q(0g{^M zNNn&KYf$xHk;MNXv60VS;6mEBC5Xh9Kw`@yvDJ{+$Y-pXAcb!6B2tT68iuW`#2K&91{B~ z68jDk`!N#x6%zX+68i@d`#%z!4QbyNFA`e>i7k!9RzhNHBC!pS*yc!VJ0!L%659uf z9gM_|LSiQ(u``g^`AFKMv#NLX;-h;$GjKn^L z#J-5czJbKPkHmh4#D0s!{({8*jl^a`+N;Hh#1=qeizBh+kl3n7Y#k)FF%sJfiS3BQ z_CR9$BeBDf*s)0L6eM;w61xbAJ=FVCX-Maf35iY2diZ%r>XFY$ z1|5G4n-@l2j{!Q~7bXrmeiz0D9hD1XgN~+!u|dbk!q~`X@qvzKg^7cXPld5TN0-9b zprb`$Y|!zYFg9}kh!1H@Mihw+K2IJRKFUbqT1aft5fX`irvQHzaxrD?^`yG<{uSjh0Im}Qs$miy9A&tWbBC)|| zp+nWnBZ;dav60Wp1D|saRd0=?#tDgyd_Hpkk~s4DcyUPLsYvV`BsTc0W~g0NNaDz6 z;&mX2_am{vXEj6h&P5Vmg2YBX2M>I1GgSRfBsB++*vFCB=aAUQXW!jH5=TD6`4y7* zMjl$miX$A+?`*k=PM%CwxN{gA`K(>gQQ$Cf&~e)^Hu$atP$pwwU=T#A zU%+?AK*f>I*HuGOql?4_-wOj(Z;d4Ggv3TZQx|;a3sikLlA1Uqb}AAZbWaw{&B*8I zRw1crL}G*QYJr;Hk0d?~iH&@AF8Cf6sQT4NYBnLUcOtRDcdS6wBcGRh4oMC8o&~5H z@ck)J_G2V9uaMZtXXJwKMuDpTkE90q&IMki`UQON2~<7uxwuM5YBZ79;5$vA>dleF z?U2~WXW{xFi3cOGqmbB%NbC$GHuCwmWk}++NbD9Qb~h4x5)vEv%vu?kk}iM*gKHe$mi1@LlQrW#J+;WzKz6wgv3TZllB9W_;)1sKO{CQ z()bt;5*zs(S}7!PMI^Qc5?ddM4ZZ^c8a~Kp&$=L~@kU|?A+aNo*a=8%X$VuS9rgVhlnNaJJ3cSeXIiOV9fRgl=)NNgh{_UJtkka?EDa8HB+(s-IW z5?c?6ZHmOUL1H^2vAvMkfk^BKBz8O!I}M4Qi^MKLVpk)vn~>O@NbCtn?CD7Cc}VP~ zNbEI8?9E8*T}bSMNbD0x?DI(MYe?+7NbDy_?AJ)_Pe|;aNNfhAF+g@CHXjmO6p1Z^ z#8yUPYay`>k=PbUYLY4#QuuJ{)5D3Mml?n3yCd= z#Fju}%OkPXkl4CNY!f85H4@tiiS3ER4nSguBeCO<*r`bD93*xz61xhC-H62QKw|eJ zv8N%i=OVF}AhA~?u{R;HcOtP5AhC}lvCko~uOhMUAh91Kv0ovvKO(VzAhG`=vDuK$ zp5jGfiy*N_TAv;H43@!mhtB9(3XnDftz%zI%*&-#X>0aDNU9xcZp;f6fVIC>Wt zButR^(juP~gFIG=Yp)RUyyWOzV36zKFyI-wh2_k9_~vGbA-{ zk=WpSpP}l1BZ)I1jg=wa`31hy8LA$9pDdIuhooK=i4DF_7ODpMo-ZpTHI7JZ4`>UeHzUFgEClbQl|SB{_@@zKhkm|mCBsTKB@U=+dEl6zS{Th>y#AhP07a*~h zBeB;Zv61fp9j*5v@iJQPL&AYt^}ZBR8$c0>t%1ZwzL(PsN!%8R?SjPiMq&pcv61iM zOh6JxzK=c+NxT$^4ZfQmS}!BtzuASPW+D=M1`>Nd5*vI^J=7fJJ2$r=so9OhK7__IxDvG9>os*`bi~AJ^HT$mxe0DclCbxjlo~ZIqnXF;v#LBA*?NymoQ4UjWHd z$mi}N?`23tYLg?M#fN;>H1b-%g~WD5VtXL5{gK#VNbFc7b_xk=T7m?5RlXIY?~ex@i@X_(ml54kY$|B=#{R_E{wM6(sg;B=#dD_Ddx8 z2PF1)B=$cfHY?Jc2oDll7>O-~#8yONYap@pk=SNPY+EF@3liHKi5-N*jznT7AhFYt z*m+3oQY3Z_61y3R-G#)Sh{T?O#Ga4DUWUY8i^Sf7#NLg>K7_e36Kw|SFvBi+svPf(dB(^pZ+X#tmiNtn5V!I=;{gBw9NbDFS zb}|w>3yEEb#I8VM!8QLflIKu{>)krUv=fli%xF6hQje3`4nz(^iCfrD!b04nv=n)fE zxbhSwX$<+CUQ*paOnFP{-KMzQK&m(~Wf3kjiP1}~Fdt5Lln@i1#HgWlI!C_ua4@fX z8NDwC(mtW}eKEwONn+ICO1G5grB*pZNt!3d{X?-Hr$w7*6H@zUCldPr68kt3`y3Mc zDiZq+5*vBF*()URk4WqvNbLVeY&N8^9bP212ohTwiLHdh)?kBQ@|@A=S~5skH@b!#5)Q+44f*I=GD!T6t|fzn!{}NvNH`F)mh3Omx-u4| zvn;rg*g{BbNhG!c5?dXKt%t-mMPl0^v7M3FUP$afBz6Q6J06LhhQ!WAVwWJXtC84E zNbF7|_5>vMbR_mXB=%Ay_8KJiW+e75B=$ih_6a2Rc_j8VB=%h-_7f!bYb5q3B=%1v zHZg5TTZX7E*i95Q%Mp#KvV8E^%CLkV7(46^X5b#5P7^TOqNDu?soB6QiDz zJVlH3grobsAayJ9{^c7;Y2ZE*`xz4ZEfRaUjyKXeJ&)uwB`677O7sqfxx&FP=80>r zZ8(K(4pJFajKr=&Vh`puenTZLM(5oibtonE;82NcQs;3-+iZ}uu>h&eL7s0~ha|og ziM z!)y@S0U}p^T#ret7XFwkRQU<7UKU|?YI1+hV!$ru?mV3=IAtwhu(j1rQsQxfvK30u2}#82upPmq2WP2s_x2fq^jq!oC7xgARmdU|rp%A^1CJYRWVG#Bc5IY>g-ps|o z09v~V;_Za8nHd-u_CwjABz+Xh29*t`p={9Eeixx^(D=tyC>u2Y_5#EPX=Gqvcn4*J z%=`jngUX>_P&OyXVr~WoAr1xxP&Q$MvIQ6z7!L?cqkj>&QvHH`DiN#PhC>gATvO!V21kcRz6qTnzY>>kk7#OZX*&x5%hq6J@@f6Ai6+5q?Y*6v?70Lz`9si+h(0PrlJPZs% zJPZt=Y|aT~gR-^^hz;^M0|SE+lnt^=1Ih+T=|S0`FfoC$K}Cl>lnvVJ>;`2|U|?YI zfwDn&;f6!mpuSWbl)Va6MnT!2yKu9h?2QZz3U zlpVpyz+eGogYMCFhO$9-@AyI4g^Uagkx(}1Y`GLDyMmE{Aq&a|-Kkp&W!Eq=Fw{WV zptGo(q3ljZ28J#udov>g!vrWBbXMGKC>wM(&mt%rbYJdDDElZQ1H%R=`#mEA!!{@z zbpP!^C>wNN#0e-HH0OC9%4TF@V7LZlgU;Q#17))_F)%!bvO)Jqe1x(EnHU&;K-r*s zasNZvpu2F{_#k0!$i%?F17(BmjsV322%9o7Fvvp1-Iy2{RG@4>CI$v=C_93Qfx!sM z2Hh870cFQCF)%no*`RxIy`bz&CI*H;C>wO|eFT(U!NkB22W3|=F)(C8*`V`y3ZU#p zCI*HwC>wM~ZY`7zx)-+v$_Aam(*W#3|AV7LlpKVV{DxC3Q_&gOXxWrOaQ zcm-v@V`5=#E@>C_9jufx!>Tj%Q|I2!XOe z^P&VP;^s0A*ifW?;AmW#46HV7LQigU+0O1Z9Kn(R~4Be`IE0cn4+w zWM*La0%e2Foc;x63$ZXTFbF{6RE~v#fep&mVqsw5fwC=F7#M`0Y|y>95>U1$3j>23 zlnvVVqXK0|u`n=bLD{)13=D=)Ht5bwO<@hK>~h=GCO0+bC}n|2M#2GzNDplnc``v}Sgoo)OA%AO5svq9OQvqru^ z*`R**FDQE{sLdwGz#t^VzyPY3xuI;(9$Xd zWrNO7ErPN^cg0sg+3}1F40TX;CL;qw3zQA2*E*o=Iz|SD*&sHwkG2rX2DN#XL)oA< z&sr!O)aKa?WrNyO`=D%4dN=}QgW5vpplnb(@CK9(>cTvRvO(RDmrypS%kTxt26YGi zLD`@tJ*yA{gOCUVLmLAF12>cnI$KB($_9;vh(p;M7#J92p=?mQNEylo%`Iy}*`T$z z`cU>s1_lOWC>wMxuN#OB?VtKU*`RO;g0ey95=B7SpmV{KplndrH3!NDbw$gdY)~7% z0m=r2Nf(q2YG+P>vO(R(X;3yOtmZ)3pzhCdC>zusUI%3-GB7Y~fwDp8AMb~2HYmTSLD``F=!Q@>XwJ|a$_DL6cZ9M* zbA~=pHmEHc24#cxohLxqpf+R{lr6!?z)%8ZgZ7};LD``5AUmLJMMegOJ}6s-k%3_f zl&!(Yz%UES2Au)90LljKL0<-CdonUGtb(#Z?aaL(HmIY)z`$@A$_AyGlTbFOpLHI} z26e}-LfN1)_BNCa>JL7IvO&r3Ig}0R8@`3Il^7TpK111{e&|mq8&vlGhq6I^8CDSn z1|dlX22ekd8_EWC?FFH1P#0bt$_C{-X($_%*YrSaP-13aU@(EQL4L7s1eErl{4*7 zHfU(27s>{eCzGLU&~V30C>vC^%!jf;eqRM;gX))!P<9Lh1H)D*8??9J1c(i);20Pf z&OzBAH(!CWL1WUlplnco^8u6%DifYT*`TuV4U`Rv$4^i;s1E%BWrO1MACwJ>Qx;JM z1|fL{29O`Qplnc|S^&xhl@(%8HpuTXP&O!>m7r`;pIQUT29*_hP&TM;HG#50=QLYE z*~ttH3=U9s1_J|w8mbFfcI0LD`^tWmBN+R?rv`lnuI% zu>i^jl{sZl_7nyNh8idvbPi1ul)aFFfuRG+29@oTq3kuFek+s>D%%%8*`P9K8I%nw z!`DFBpfY?rlzoALfngt%4cb?61j+`LGpC^JhoJEUC>yj+;SQAjf`NhI5tRLnfq~%# zlnpu$;~kX!i-CdR3zYqjfq~%{lnpu?gFy@ur+kbI3~W#~sIC`;vO#5z1eC4D$iN^2 zWrNPf&A)z$_5RU#6j7hJe2}vgX*Jv zC>s>-Wl%Qg9*G(#8x+4yP&Viui4G_m6u*5?HYk3lK-tq77#QY5*`W5-GAJ7qr)!{W zP@HapvO)6_JD_Y(U3?hIKEc4ia0ja^)TvM+?YR-oVJfa2m?q#K^#K70L#UW88tV_kzZDpzITj3=A)!Y|!19 zAE4~3j0_ClpzQ063=Dsu?3;`X4D1q+czMOhz#s@^gYL$ZfU-g73d=#+pfL?qD4UCk zfk6k#7G+{!Fov=vnHU(XpllT;1_oCs8+4YiKa{P_#J~^+WrM~sVxVjXCI*HiC>wN^ za0ZkOx(_oC$_AY)Tnc4JF)=XIK-r-4gPWji(D}igP&R0cVgi)i!NkBY4a)9iVqlm9 zW%q-|9H4B_`N1oo>?uqP4C|om=}Zg^TcB*vn8to6dkqrXHu|A59Hplk+a1_m}sNPL0rx8#Ac z*_jy_grRIsW(Ec+C>wM(i2{@@!_2^-4rR+RGcf2u*`Rx_OrUH-W(EdpDBGBsfx!vN zwqRyp@PM+dK;sWkwhc1_LnM^#$jrcy3}u7P63&9MLE{xAP&R11q8`cyjZt(#*`WKc zrb5{z%nS^3pzH=_28P8@b_+8D!zw7dlbL~G1C%|1nSo&&ls%Q1fnhI{JqI+N0A+*5 zC{97y3qj)vQ1(*LcmkBY5j36vW$$EWV0Z*&A7o}=cmZXD?!tNpW#0mgCqUWHm>C#; zLD`=`m4OsAjzHrHP_`Hg0|PIVt;xc`AP8lH#uijSY*6Qgfq_8_$_5#u2W5lm9Y+uw zG)ck0z~BmHgVaQT*r0|eXkHA;28ri`*q})P1_p*wC>tbR4P}GcQH@YGXb7SQ$`)l{ zV3-VLgPM^up={6`>3k>~)Ye@JWrO-qtD$Vr6xc>68`KWm4rPO;mi9u~ptjHnC_4qz z-h;C9LH#2r8?@f%5tI$82j4>3O$-bS-=SKk4$_9RAIb)`VN9WH&=|fol>HPm2MT3_#_HXnY*1gx z7s>|JmBCOpXv`rJ$_BMh;-PF%eU}AggX+5iC|jA4fuRb@)&q?jK-r-4y1Jok(D`{2 zp={83U2~vpP~Eo-%JyPpU|0)fgT~A^L)oBuXD5`sh>?L|Ka{u0Ru1Ulmlgh(nA@PeTad9p%Kak^`qON?DGr^482hH6;OVGvO)dp znNT+9e$n|*_Cp2+hQ&}e=Ti3adjezg|b2OdcUD;P#=d; zj)6hQkb&Vf0|Ns)lnp8?c%f`iTUrpx2K9YZKx|N93#u2OY*08GK-r*hwuZ7n;p_-y zgXYtHplndshC$h&G!p}5gQ719$_DjwGoWlx8J-7agTl5F$_Ax}dMF#zXYYivvq0$| z$_B09oCjrt#)_9f*`V@#6_j1az`(Ep$_Cw!w++e$<=H(@HmKiv0LliH?UzAp(BL)$ z1H(-y8&sa$hq6KA70;k-&@jSVC>xZPK111{F`1uGHYi`P$TKhq88a||{L2qzgT}@s zp=^-f<)LiQ{J1KV4H~P_hO$9x>kOf6P+evYWoI%lFxW!bxu7*6P&OzXdP3O^pfwv% zb}wk%1(Xfyn@2<0pzslnol|yA5S)Gcqtdgt9^BP(FvUL3hHug|ZzO85ll8+0Kj%3_qc4 z(AfKbC>u2P&Z+>3Q_wvy{7^RN?lMUz8`Rg6hq7}R85mTdY*4>X8_EXV6=MixmxB73 zP&R0+-WJMkV`N}(hO$BTz<5I0pgYR^p=?n77z$;B?tY1evO)K~BtqGs`(Dza>^qDM z3`J1(JLB_fuR}77Gq*y=!CLCcd+zB*%qL=R4Ch-iGg7@lnv@PErhaTm>3wA zL)oBt-nCG6J`)4OW+=OoiGg7sl-*`WE{>rnP`CI*JP zQ1&V&28PE__Btj8hL=$GMkWS^_fR&dfAkf~KEcGm@Egho&D%06LgMiXXzm-z2F>9L zL)mwk7#Jj>Y|x!5@=*2{CI$vIDElXGXsMchz%+L85kG> zplnbX8v-4N@}!$_ACyv!QHIS-l9# z2F+!xg|b0q@^&a2WZga}8&nS-fwDn$@p&j4RQ6tlvP&2k816&apt-qMP&TN%{Q_l! z>b`$aHmL07P-0*ZGGkx>jV}p7+3leDH7FZ2)+7gIgUTosC>wN#fEJVux*xy*$_Aaq zVg_Y{+SoQwHmDADg0ew%r7x5Xsw+dFY|wl}6qNmhfq@|v$_CY&*-$ps9ta*`PCS zk3iX=a^n<~4Js=xK-r)>(yv3=pnIk6LD`_P;suo5!N|by3CaeI3;l(%r!g`xuqZ>~ zVg@4v10R$Px(iVP$_BN`m7r|UIFBxreSwjI!34^_#K^#41!aTAc^sf@P}$-JW#4CH zVDN#mA2Kp91VP!LyQE^F>>rE_49QS7GZOge}SHmL9U70L$Xo!?M)B?AKkn+gMikU0YbD8C3m z*`T>>DJXj}0|SF1lnrVhszceJbgK(xgW7w>P&TNaXbEM5+I99&HX|bggDaHH&d9*v z4P}GUWEhk!37Tt$vO)9F=}c@#tHfa6TbSS%ok%3_mlnq*2wF1fp-Ho;h%AUl?z_16(p2En$a2U!4^(#+7 z*`R*qMJRg>XxtLY290gL0I@-hG0=JdC>vBxeu1(<<>W6Y8&pm*sxmMLSuikw);+RA z*`VT@56TAh1tg(t(EN)$lnrX5YC+japgA=t8#K>i2W5lC96X_HPu1kkOgIf=44BuY|whbYA74jk7$CjLG$AsP&Q}{Ll2Y<>Tk{mu|Wkp0|UcS zC>s6rpTTTU{N>p2WbwUXmJYz!y70YH2(Gp$_CBn{)MtZ zeHIpV1_mJ;1_n@Eb3xgl_!WS%LCHo8$_9By2FeDFjVM9cpgBqnC>zwr(Sx!QI4B!5FPRBtgU0KMq3jk0 z28Jpq8&s~gLfN47(*tFL`s0(JY*7B10cC^wKJ%b#P?}i+W$$BPU|0oZgVM|fC>zvI z-v(ua#%K0G*`Tue5R?rXlQ|1zgW4EZpls0m<1Hu~)F*lXWrO-e&!B8jpXd#gEexvD zp={7R;}0ks)UNmkWrN1(STrDU3L2y1g0eyD83dqg(0T@OC>zw5k%h7o7#SFpq3l#f z1_n(i8`KUlfU-ezRc25&s0??6vO#lI-cWWmsIG^yL2Z&)C>zu!NrAFK<#`sA4Qi7V zK-mi!85qi-Y)~Jk2FeDtNt&Q+&^p@=C>u0R*au~U*49pevO#NW=R?_`e$X-~`#fk~ z49W(zVKzb8H$d$%C>zv<*#~8V`b0;d?AM^R&`|bQ&{}9H`zL5EG?dN3#K7ObiSnP&Vj(ODQP3fQf-Y z0m?1{^+%v=(7IV2C>t~P&o-@ zgUYTP5F0c&#=yW(1Z9K7%b;vfxzq__g9-!&28Mnp8>D73lnqj|48#Ui9H4dSP&P=- zCMX+JFYkb|LF)HG*`Re4N1$v_+w2sS4JxlLK-r)s-!&*3RCe8gvO#6nBPbi>ycbY5 zsJwayWrN0KzChWaJqy2}Y*78qs>Q${NvO(>H zwNN&w9@z|KgX)o;P&R12(0(Wz6kkW7Y)~AXhO$9%aS_S}h4~#Q8`Q>r1Z9Kjh&NC+ zXzc47lnp-TMw@{_$dQ2o)Yf8$vO()uc%f|2c%U$p4XPL9plndzQx(bvjR9&y*`T#6 zhEO&r%*~-}(7l(|P&Vk!IzJE_v>1tjfguFS28C@Dlnn~o1SlI6wrNl{XpA%m$_9mP z5tI!Ip9&}&l%DILY|z%N7APCEMXL+S25rll0A+*f)@e{SXe@CKlpV{!z_19)2Gyr4 zplr~(pmk6-XdHD5lnq)7vP<{x)}*r16{(E39t8`Oq82W5lCg>FFEAZ3rCY|t3aTPPc}j`TZ}4ay^ox(p0L zE({EyHWfFN4T@7yC>yj!R0hfhrFkVN8`OSQgR*yl=4C)^P(o#3U~qx5L2=;^WrNax zB$N#*_EVs2P+HA{vO#5O1(XfS%S})=sNd8BWrOnaG$s=R%z6wALT-?7Y|y&mn@~0={O?2ApzwbTWrM>18;A`mtQZ&={y^Cvw=sa`X1y2~KyDKTu|boA zpgp-zHb{*;lnsh6RVW+OSJH;EL474dC>zvQGKaE3`P~-E2AS^+WrON9cPJawSBe6$ zL4_x13=ql&*;@c*gY;HG*`RQ1g|b26)(>Ta!fhs$4GOo#P&O#s)s=RN1$v_xSfEqLE&~A#0D++WME);24#cX_7Tbkx$QTU4a!q&1`G^Bz6=Z??+8HI zpgBq@C>u0KsRCt#+^Gj;gW4(p4Q zgWOgGWrN&S17(B4tsTk+h1*0Z8x(G{p=^+QmO|N}a9a;$gTiemlnn~E15h?7+>Sxn zpl~|{WrM=)E{F|kNPyOJLfIg&;Za+^1l4RTu?hz+ucfq@|t$_BZu1j+`vtq#ft zxvdk*25FfLWrN%{7s>{?Z8?+;a@$5I8|1d#P&UYIhoEeb+fG2)Ah(@?vO#XU4`PEF zT?`Biub^y@+rC2CAh-R8vO#X+GGbs53WS842$T(Sn;eu4a+?N}4RV_ilnrv54U`RX zn=_ORa+@cV4RV_=lnruQ0*DP7G+u04 zIv>ggxo0Jm4Jyw!L)oD5*u79TXf4MPC>u0Ba0wXx4Z*`PM|Ll7G@2+Y91@CM2T zx$QfY4RRZ!F$058Fl7Fh2g(MyO$^EgxlIAe2DwcO$_Ba31j+`v%?`>2^$}d5Y>?Z$ zp=^-b{Gn`++mb+RkVOm(47pG?C{8P&Y*3swLD`@(q!-EtrMKx&HYiRPLfN1=T@7V} z+_@FX2F2-qC>s=~$DnLboSuQQL2-Hk$_B;hV-OoOhzc5;g|b0z`w3-(+{SFez#tUL zzyL~bd{8#XZ4yv6$ZbkcHpp!{P&UYIW>7ZBZ4OX2$ZhUWHpp$hP&UYIflxNcZ7Co& zs8Pqjz>p7RgWOgHWrN(-0%e2JTOX7S(lQgu2DP^rL)oDA^I9ky)PCL$W!Ez>FdT%k zL2bO#P&TNqaS6%>mAyBhY|yyV9Vi>LUg$lD4ca&lT9*!GgWSn#%D^BL4yjxDp=?n6 zNvBq1Vh=NIwBIv2Dvj9$_CXDpbzB44~!_BPh~A^Qs_mP-B~cfdSNpV+1wc7#J8p@xcgMD8c|4 zcV+}-F3`Svka|$(oq>S?H15m@YMg`GQ6O=U$3bJfAU3Fx%)r0^8c$>dDFmGX0ul#B zE&~GtC?7I{5*q^p189t%5fss&^(P=Tpv4#r3=E+5A0uecl7WE%6qk&kOwGW+02)JN z1SJO0`X7*b(1H!n8buHrG?B`{!0-UX1~oE4^%{r`8cbkdU;vF3GJ-l03=9mQeG81B z306=5f$qu#btpjL4`PElXrS;1u|b^+Q22w`pw1d7{6TC`A_Rp$hz;tvfx;ie26d1@ z;SXYiCTBt64`PE711S7KY|un4DEvWeP#}TAAH)VV6hYw+VuLauDEvX}$sk8EFcg5; zpiVa^{6TC`!3zq15F1p`fx;ie25mq9g+GW5N_e2~2eCneB%tsIu|W-QQ22w`pa~RE z_=DJ>%nk~F5F0e`3krV_8`QxEg+GWrAL1Sm2}`%2J|ryNg8GfHbPL+H!3a&apfzxe z&~ytLc88@~aGHdsTTl_q2u-)(bO=qiAZb{-1tlp)Xu1VOCoJ89f)bW)LEeC+TW}hK zrdv?C4@5bPG;D&~yu$=Z2+Q(0&O7sApl zXpRt;ZgoK622HmXAT~7Jg2tU0q3ISh&&>!;x1c#fMrgVP-`NWCC<6lnXdD@qZb9?e zjL>x312PkuZb5U^jL>uoT0hDNO}C(Z3yjco3t9)m2u-)3d22>!x&^I$VT7hz(0DE* zG~K=dnGa33pm}IUP+&7KFt9K&Ffc;XEoknU5t?pgK;qDJ3z}nQgr-{)kT^8mg7y_K zLenj1+?ElVZb9cGFhbL93P?RP-Gat&8KLPGG*-(9O}C)&Sw>KVgU${DsfVW91t2yw z-GcT5FhbMq4v;vg;laSba0H1BUgH84zk?+H0*MV;%K|$C3bgJY#^wQ?Z4R0|0+kg= zY!xIn_}q1<8qgYjMkw0@Nlge6I|0N7ZIEPOU;v#906Sx<0!bXS{vIX{T5}I$gVx!@ z*ej6KgYN?cWmZtW28l!2p#A)eQ1%TZ@h3>^4@m4kAU0^=4pe4>?u&%7MUdDENNgP> zHfU`<>|87tB=Grkk}4LY#$^x_>N1cIVniu1xV}~Bz6Z9dkPYJ0TO!+ z5_<;{`v?;I0uuWU68i-b`wJ4AfemrK84nU$0*S4H#5O=;+aR$$kk}ze>;xos4idWp ziQR(4o`A%jgT!8e#NL9$K7hnNgT%gp#D0Rr{(!{(gT&@wM}&h25?cX@t%Jn2Kw`Tf zu>+9UF-YtTBz6fBy8(&agT$VJ#9o5L-hjm3gTy|8#J+;Wet^V&gT(%U#Ae|@_+0>r zErZ0?Kw_I9u^o`uK1l2cBz6iCy8ww@gT(GYVoyP0FF<0iL1OPfVjn?bUqE8tL1Mo^ zVt+wmGjJmO&V$63Kw_&Pu?>*eHb`s_Bz6cAI{}HEgT$^tVz(f%Cm^xsAhA~XCXq%D-k5N0uoyXiEV+zc0pnXAhBbR*cnLd5+rs5 z61xY9Jp+lo1c|)?iMURMowhR(m1Bq>d#CAYp z`yjC+kk~0m>;fcq4HCNpi9H30y#R^528j(iM-Ep19zhbnfW*E7VuL#Gpgt55`wNH- z8mIv^{&^5*TJj*VC6L%ENNfWnwha>71Bo4i#7;nB=OD2wkk~Cq>;p*bGf3u(L+@Ac=#{OoNGEK@xv}#D0Us2Az!t zQ_sSOIKNZ?i7kV~)<9yLAh8{g*gi;X(D`OC^HY$-L1&u5#A}emJCN8@kk|`AY|w@# z(Ao(k_6{WW5hV5nBsS;fcq4H6r4ZWSZct|>_33y|1rkk~tr*r4;NV0teg ziQhqDzd&Mx&ZL5=2W=RIv3Wq}7(?A4fy7opVjCc_ZIIX=NbC?Kb^;O`be0s%t_mda z79=+4{3w_j(3w#%_6j65pmU;N;s=n#L1#n3#BU&pKS5%DKw^W=fP$$9o%;l1gU)(_ zu|elM!Pq*Wvz?*gV}ZnWL1G6Wv15?f8Axohry#Klkk~ay z><%RM6eRWnB=#C4_6{WW5hV5nB=#L7_6sET7bG@=C<6n`{X9r)2_&`(659ZYZG*)2 zKw^g=u@jKkIY{gZBz6lDdjb-B4ib9>5_=00`v4OA3=;bW68i}f`vVgD4-%UL>FjY4 zB(?$)TL+14fy8z}Vh13xW02SxNbC|Mb^{W-2Z=ociM<4gy#a~62Z?tCs&>1x_y(&oJ21slhB(?_< zI|PZHfW*#0VpkxsTR?2kBp7JE1BnefLk4yRKIq&S7#nm}42*pMq#k;9#~CE{4J7sx z5F51k4K#m*#QuZC=8$Ay0Id%Lwf#hp*q}3BVB$JR;uc737bJE75<3Qooq@y#o!J62 zvjIuG2Z=ociM<4g4LX|zrgsmL_z5KT6(sfpB=#F5_75aB3(`FT0!VBbB(?^K4O%n^ z+V6wJc0gkLAhAJbr@-zb0N+yp)mwn1rUr@KfyADI#9n~JUW3Hmfy6$7#J+&UzJtVm zfyDj-VuL2KK#>i)Hv!7#L1IfFu~m@R21slhB(?_m4w!n-c^xn|=!_1~S{6_;0pFtmJtx6LmVp5#?tsMhL1ITB zu~U%P1xV}~BsS>G4Valzki-`tvDYB6cObEkAh9nXvF{+UUm&r+AhAK4|6um=Al(Tf zfy4%#l>t)&Iv)eZwn0+kfy53$VkaQ6bCB2-NbD9Q_5>vM93=J%B=#00Hs~x1n0wA3 ziQhnCKS5%DKw|$vVspqN;#35Qt$@VVL1J4Vv0aeZ0Z8l^Bz6Xf4cc4@n*T*&Hz2Wl zKy1)rc+gxw5*u`O1S3>@14taSNSlFyVGk1f1QPoS68ixX`wbHN2NIh_fq{V$YNh}Z zTLy`(fy6dJVmlzQeUR7@NbD3Ob^#K*28rE)#GZo0UVy}2gT&r}#6E(=zJSEOgT#J; z#QuWBW>4C?2NHV<5_dkqqM z2Z#;YpaEL{fW*Fl#J+>X2JP90-P801NgQ-QFHD>VbgvWCObH~m3KH7@iEV?#_CR8X zAh8pW*f~h-3M6(55_=Gn)0}{Iji9G{}y#$H90g1f_iG2czeFcgA0K^6@s0OW9M`Hg#VzYqmn}ezmKw`@v zu{Ds`CP-`tB(@I{I|7NFg2XOBV%H$CJCN8@kk|{5*lUp3p#8$IyYN7Jgkg8#f%XN% z*r2_@Fg9raFN_V^^9y4$fbQ3W?knU$VoM;gRgl;QNNmu4UYI!^NaCP9yfAUlzFinQ z2T4r@hz;6+21@@(>;p*bGf3<>unKS*p2(A|Pi_lSVl z(EWW1NNgP>wgnQ~1&JMi#EwB?XCSdlkk}1K>>ecc3?%jvB=!an8@j)54-)$X68j1g z`vDUB4HEkY5}O5deH9Z)s_ z659lc?SRDg0kNTb@gk7eDM)P4UQ0%(ni?eW4kY#zB=!O%_8KJi4kR{cPbJJu@cpDv z^Y0+3c>!XBHWPvNrz5c$K=+nH#d(m}5=d;&K1$eqrUppjHb`s_Bz6cAI{}HEgT$^t zVz+?U(7kvQkl1sO*ej6OTaehGJ(7%2y=RcbZy>RsAhACnvHu{kLHiRf zAU1R_o(>Y*0*UQ{#124W#~`sYkl3L8kFa}S8<50%kk~Vj*h`Su8<5z0Ky2t*eHb`s_Bz6cAI{}HEgTw~yNrc(ef+Rix#0G7wV_;yIgT!8e#NL9$K7hmq z?LCCu7Yx2f7;4TFBsCw9*ng1N943gnhDDIr3P^0wenUp+{yPhhIF#*z#124W#~`sY zkk};@!u4-$I@5_<^}djk@C4-)$Xhz;5R$H2gF1;hp&q5|4S24aH_)&{lzL2S?k zNuU9JBJnOh$i70Da?lViXv>EU69WV2{CUt7hailu4%Cf@sRP~10#XCQ=;}aCPMA8- z`I;a#AdIdKR5ioYfzCDrsR3bhb)YNOgzDVCuL*XKsSlRWUFypsNFI;ex3H-JJ_E3xv_tfwp47)Pc@G2B`sI zbakLDRWNm+Gf6>eKp0&eXloQq9X}rTfwnlo)Pc@51(^lH=;nd8D#6r&&SeIv0bz7? zpz|Ol9ofz*I7x;oH)QkXi>xo03XAdIdKwD%3B4zy1Vqy~i1)q(D;gQ*k6<6qFd z3@~+|GuA+6fiSvxpuKf4b>eu;1Dy#6QwKVy4P+JwqnighFAk;-bS5WA4G5#F1MS^| zsRP}Y3{nHa=<42p_Ar6gWHK=@fbPcwsR3bhb)fS?VdjDErUa=0VRUt%y@4=wvUvOp zDg$8ZKxcA;%mQI_^FV1GrcNG@d7wCjsRQjj1epcG=;ndk4pRrZ_Yb57gwfT3&IX66 z1KlwVQUk*1>OgxNVd_BlWPsFwFuFPuMg|6$I*{2QH6V#XQ6}40%3IXKzlP`_JZyw1E~RFbakNfTw&@!cVvOofH1l` z(3ycSb)a+CL25u4T^(reCrlkE%t2~E7+oFcj98dDT|E8;-OUYC2fEV)WEKdcn+Muk z3R9<#$2`zEg)nuXdr?4UfiSvxbCAN>5RZAFy{jec! zy`Z!RG7E&!%>(U?g_#Gs&kUpngwfROf~M!qkDz8wRNXVRUs*kn9DW+YeF$!szNidwXH#S>p*m(EaK#b)Y;7 zG7E&!%>&)N4pRrZgC3*?gwfT3_720;fzRT^QSbAB&U%EF&-QrSCxWC7bT_!be1zn4G5#F(?PNqbPobZ4G5#F1MPi=nFlJnKx#l3 zT^*=>2vY~TXBDIdgwfT3?qY+fbHfuZpuN>Fb?$i7g&_F@bVnb^P7p@77j$O<%skLp zsUS5VjIIu}cN?Y-bng*J4G5#F%R#aiblxgR4G5#FD?w5RD$_w~Kp0&eXm2>oUeKM; zAT=P2uC4{iJka^vAT=P2uC513oj;!N1Kmppvlq0NA7mB?qnkGe$-F>3<}E=|7lcP0 zXm2~r-e5fHwjh}Ys_Q^*17URcf$o5SnFqSd1EdCo(ba+W&coD&;j#A&lD(iabU|i; zFuHl5dnI7zMc^?Hv^O874s?Gc$Se>>H}46Oy`Z}SKx#l3T^;DI3YdA(cSFPj$HI(g55?h82Rd5-W*+E{Opu)*jBc+8l6j!>i9u>W7+oFc z&Ow-Yp!4TJYCsrW9q8-=n7Sl9?$bfCHyMvQ6C`z@wh_oq5JtBbbT$IaUeMXfAT=P2 zuFeI?JkWXhAT=P2uFeNZ9q8T}kQxvMoi7Ty0u^+RF{qCYI(q>m4q}5aj1AiE1!6;| zI2k7FW?=vwl>jQIL1zMizJ3qYDdXSy&mFo5KsTsRxFEC(bGGj9%(d7z_z zKyo1SKu4t@yDtWZc`!G?%v*tE9_Z*5n0cV1Gmy;#oi72h2i<+3<2gWjVCHSv%>r8L z!2t3v=%^u(97x}0H2;Fmr~r*|pqmFe;|Qb&X5Nk6EDWGA4v=}Eqh3IAAoD=?`60V+ z0W$*w=)8S&^DaW$2{7|S_OO74qQUM19c=_N4|FdHvUwYr85lr!O{1F!>i>cCz|3>m z!@>X>3jw(gbR-f;4&**ipB~vf(3u&avu@DMgN4o;g?;!08^{JXqd?ndh??kzPPY=fKPZomY=T1Q-ChS9$SD+(>Kzcytg`$}^fdzYc6@X^m93=BVM`*#!t3xwy3Jc_n zO{gOc(8IqV=d z%)FlcEDWGAMUZ)*qmMvxAoDh$nFl(%1-i`}WDMMWtI_=XV?Uz20v(wIGw&ptc@nIU z^Vq4CY=_F}V9qj~?1DOZ9 zw;0)dGgz^w7g1`nt7nJZ?J_Qs2&CBf%*5uAr|nN zbs+OVM^}O5K<3q>nP%2*cP% z(acLgGH)R?AA$S}svnWv*TKdBuBSm}fiTRx`)KCn9AN>U{Rav^(499Rbs+Qpp}Fr4 z4*&i{GcV>S!oN$A+$Re<7YZpoKfqz01hkxmrI!pO^FVh?!rW(rW*+D)B5dWKIhuJT zM-lN0Iy)X_UKE;npmU3`nHP#?-UB4_K=;bQ%&R~%4|K*6w)RUgnt49Q5aku$<)LG>B3`|jW{PZ(Nm!{WmQ$vn_Ks4({#fzA#? z&L24ZtBYn{zzIb7f$n&NndgsY9uEh0|9YXBcLm9PpgRy@=4GLo2RhFRBnOUMXt;pb zsc7asKr(MXR2?Y2w4s?N!ht>gHKLjK2FbsmdmTV-0GYQK%{ zF#md^nFl%-44Z%5(9G*VG7oeII?TLmH1kSuxGxROJf5=%_rdzwp!C;+X5IoE=Cz}l zHv!2!(EZ#n_pL=U4|E0@w*D6A{63H#SbT__L-Yqh_m+a>K<+z%W*!3<_V_rA=DrQ* z5dOW66u%GA%mbZa#()GsWh03D9I6gqAQS5nPb-)j?)}Fi0JU=7yH#ibwnkac{UeV7(nM$g6e%xe-xwztpy3QMZ#SBG9M@SG zKy#uX^Fa6E!OR2I^C0ao^D+b(7(nF;$P5q$sRPlM(ac+O1JUn!1+^FCzAtF*vk+on z0L`O-%m87SdGFE8TXB*iaMueHS9%>#ez1$IHU;y2(1#%MzgVcfORcPj| zxQ`fT1)ZM`QU`M1Wi;~`#26T?K$0Lspy2{yo$O$0xL_ud&BBhrSDeV3g;DnS7u=MxjDZ;;?yR2d6S)!RY zLyCa`biWSBk01BsRQM2 z@HwMM;S4(K0Ce9nNDT;s)Pd;5X!f3Y!NLHVF9q2PTb~HBcQ4dlSUQ!F!(PwqKr>I~ z6(SwL)+d6@yNqTY=o|r1ItIB3gkkPGhi2Z9S1b&mGu1)vgN^Nj%zKSyUV%L1&I6EH zAPh6_8Jc-9ZxH1gY<(igJSNb&qDbM#puoVu3TrGt^9RV>zi8%Zyk%hkjm?AH2V0*A zGEW-KJPu_B2Iz5!AY(9BEt$ie_R>m1}?*!o0}d9i5b<)|_+fX=)}HxJbQ0mTh0pMUtm z!T>rG9%LSDeIm#_@L97+@d3Ke7j#z)x_S9%?pyJlg#k1_3^EV4J`rSICz|^}ciV#2 zJffS|f@U7ePei>6Tb~FrZvmQlD>N8DN0PyegU9b|H1lr!Lc}j@eIm%bZD{5l&|m-^ zae!goMl|z2AejeSp9nJVESh;wG#D7B!U}by_ywK6iyR*uzgZYSXUBuW54JuLWZr!= z^J=si7(n-(!5j!O1H=ZkA3^02tlR+I2?@IU4I~G`Fm<2N{Gst55iYRxi6DDLKxf_} zr328Nk=V@R=SIy(4oK#~=I}t~f!d?U?gQN^3A*nD!_y{90vKp1A88=83)46JbTVCxe>=B1&TC!)*10P07B%mQJUd5LJ| z&0u6@0IgdCxevBJ5o8|ttYW0_d!Wm}09sQGG7E%Z=9QzFcY%o&KJN!xp9nH<5}NyR z^cWaGYnDM~fiTRxUNrM^m|5ZZ61F}OWZr5t^FaHxKx?HzW`Quwyk%(SonS$j2V0*A zGVc(Yd7!;i*xa`l%{&!0gn6*_i6HatqM0|t0DC!p1I@e!c2@YjE^K`w$UN{F&PeeA z+7pGXUU-jY-V7x3K=BL;7m#_}ptF#X%)4N~z<@3M*mzL$#|CzUe_`trLFTEVnb%^7 zy-(7 z;6dgUpqW=<#J~W$XA6|}Ko}IxAUYe(yct{w^I+=}LFRR$nFrc~ge^WmXJ>=VhSh^# zxDn>T)+d6@TYzRBXnznk^Jb&DFMtg zY<(igJT}nT*+}_gjTv_H73 zH1kBKF)(aL>d(N;(?nBuW+nr}G3Yrd$o8tB*}I~Yl_4SIVCxe>=J}$T*K~`40kkFtWCjSsjP^it-;`&p z44}JeK<2^LNP)~tKr`>s9R>z@SYs8*ebH#<@w{ba0Np17G7oeo7|87?=0Owm$43kd zQqX&>kllxFp20U(2GH0t$h<71@dLQ~pyqMEfZPuVG7E%Z{zW%0hJg(}-U-^%g3Eo$ zFHpx{aGA%#$i@I$CzyxFeXTDT7(O8lz~C~^fsu^?bbd3)zo5JHaJjGi3vvE65n}`2 zaR@T62#@>De_;T(V?kjD!noXbM2w9A)NTfu2iog{%YE5j89+m9Afvz-mw6w=*}&^d zK<1ULDZww5eb#R2tdm+ij0J>`rghJEM#UzYaX+`Tt>HK%Otd<-QNfZ18ot zU3ko^_`|>e+FuRwD+uE<&q9R_d>@*aE0Fl3pNJO9Y-MZ7T__@lb?|RvP^c-(hM zhLK?{5$UBQmW=^)S0%{26?n|6muCd$bBOC0KvPX%CVKqZB(X7o?tcWCw+fGW)0G$* zpvPE(&B5hgh73e~1lp5}EBr1gF*1PGNr4T+lb&-j*x>U*>+ra5qB0``Y;Fo=;c;I_F(QBLz++y979&yZ zs}rS&_SG&t=IzpAWB~1SbnKw;`kpX($ zGT4c@;)AD(4ZhACG#`u0JULxP2IO^6xXk0IW`nN_KZGazf^-=f^uR8I5V*|Cs79n0 z(B5`j?rYFx1mB+yF%5V5vZtC2zFy@R9`{w~5f>i`wTSot-C2#xeI0s?47EhmZxyv{ z44^grp!{|UkNa4S7>Vj{1gl0Ad(4E>K_npJzK1*Xp zlzClT@w=cE;l2xa%nLGR1n*xUbHqz z#FYmr-H7tw5gzv~B+|SZB=bOLXW$CIjb_BP52kb@+6T|@xbLzVBLiq1I-&e=p&QX2 zdV$Bh3FgF=R|>s|^57L7^Ol)2GJwYO2)WOtmkqvt4RodmuJ9AGB+h*|`VsDXhsS*y zmc+%!pMFGqfX0JyxzEdzkpXme86p2#Oke|-lc4hN6CU@ivt(rWN5pvSj|prHp!<+P z=7G*y!R5X+_Qbi*W;Vio-|)Ckz=4qg)ZZrL-#@e27(iz)fZX>3k9kWR85snL=+E4k z$Hp)RIv(*0k9k|285uz5mJo7Z$s#re(3vA3_kqr!!4-agTo@V3V20so@7`F#2H%(Z z50CqbTp7XRwlE`cm8W}_vN3?pfC0IW0lLQ&TlqK7jgg_6i1y2e<%sqR6CU#`iu#OGBFBP=6 z8khSdy%`xm=Ts3gZ_Ro(2GChRp!ndz<30}`;_9Ol8xi#p=*%Kq?u+nYWPn~30Cpm- z_;|1p5q^Al+&7g-_xWr>xDV8>#O1!FK8y^|D+utqFJ%+LeL{HL_r!;h0eYn|Uh^(& zLbNwPXF1_=AEPgE{Ue6Wi2jin9`~90GBSYXgTRi%ll~GmvoRDv*Jn%MF>k3KBLiq3 z6Cv|1Y-NM5N0P#0UXDL;^_$LiMEwRz*SNy3&z})xeGablm$4n;J~=$@a|&Q&xCQep zp71-egAG2vuYkuqnLtLO=A#03u`z(!8KC^DgvUI?AV!7)BHU-Q2hqLMsPo#ka;!x5c8`Vc+9&VOkDd)Wj~^Q1zLBD z%fD}fiR*uO>__xJKxd-iGS4`KIRBp6kMOS^9{)}bAKr*igZ9aZw2qQxh z(f}JQesj_0<7XUTV~B8p%%>P3nO6rj4|+8u19ulA!=rVG1`)_S5bi`%_tt`i0eVFW zI4OYCfbb+f)OD_UmMkdyk3ecb8kRuK1F=Ck&60%y)XxX8K^UfPKAJy1u&~3|Kbs@@ zV&upj0qh@8x&oaG1R8=zHm_hI3xli_#4HdAG6zJLBo|~B=;iAxK!Kr& zxv9B{v9YfkpW1`(7?dV#6&^C$kNEz%mO5mz*X<+V5n!T0jmb>8wcqE?e_-JpncjP8nnL}M1%H4gJ{rxW)KbP|AA=G zxHyOg?XLjQp#8ca8nn+AM1$%T5Di+73!*{$Q9(3lzZZxG?f(SPpnaPl8noXMM1%H8 zf@skGMi6}yT29}F(s!ZseJK49N|=&be=7U2Ax9-qCw}! zf@sjWuOJ$Bh7;(VRS+N4?gY`Gb4@`sXx|rz2Av}cqCw|>f@sjWogf-?-X@3!os$Wo zLFZe7XwbQoAR2U@B#4Hc?F8xvf%u?v7eO@WyhIQU+MfraLFW^KXwbQWAR08T528Wm z_=edDs&^c@%8gzadh|Yw@3+#-j zTqr*uN*96@filQY!O*>Agq&;U$e^%Dp^<^%0SANZ2L=YSM9>xq4JNTB215phMam2h zm_P!C3=C_T_A)}$bufx?{GY+`E%LR&%mp(z7jQCoNUYF!z{246?Z1aa2g_QP2OJEG zTsS-!Jw#TBK=ib||Gz?_r)q~rkF|%z0~UrAP_x=z{)cLYiLgC|iL^cX&j8vt3z{pA zW?*0doizqJp9#awjtqee3=ynip)4S}bde|n#L`%Hk%#zsjD0ZXCcN(=tWeo$KQ3ltV$HV+es$zbLP3IOIN=A$xA>KwcW z8K71yP$-f8fXV}@b#N#FIfYehD%eS>$WGeDV*zne&y|G?40~B2ZUxzc#9gqUWKPvu zs2tcK3=Cjrf!QF%;J5-?vWAt1HIh+N&{AL;qg?kAUzl{tG9UN;q zAl9xF=8@=Rv=r0?g$`Wr3Sk~@h&;$9u)PcnAb)}MW-O9`dcJ2Dj|apnx?Hj!7(i;V z#0^Lf#~coj=a?Xdf&&feAJ84JnIR0|IxW5=u{b+EBPFMzqC&w+LA63hp`a);-%2$_ zr?@0BIonD#g$wSE2OJ<*C}n_>rzO)u28K-w1R%yMGB7M;VA#mOz{7KwNk$JMxR+}o z1A~mtU8oa4k!t1$Qn#0hhXMW2y!Hz{22aRp~|Ns9#GXrA{0}mt0o>fq_4?6#n zflmQNydShL2vn)_8K8*cQlAJ{k7^F+T6b*br{Pc!y1p8s9@SpZm6q7VLFeW`#8K_V z1V|zle~yEHFButFSXeXjN*I{te`R1`76hG@#mva|;vORdQ%E@j1G5k)w3rz=eAO5k zm}c-XGBAr)fZA|OtP_Yr_M-oc49qO7 zua|%*cD0?146H27EbMFa85!7E4lpn(+Sv>YY&jrdrr9=(4D1nL=6x$h1`dBvHO-U~#K^#@2ih^hbk3BC zfm0vMtmtB3;4}d3+v4^pU}WIoG@8lCz`#>x&cwiJ4ARHIGpUk+fzt%M^qpsWDkB4@ zDd?C44hE*+0!9W-Gte3mHWpA1kZGebBLkNXNR~-OnSp^z7t}6ex)s2{z@-P;>dhqj zi;;m#AJnR1Qj}p};4%O;gqYk{FfefIZ)Id)U^;Pzfq^F$bd3gg{v`$m7G6Ej5Drhg z7$XC(K4^A}fq{wHmw|!T3A8kd+a;cfL4eN^G~5VQ!)FCzGBEIhl!6Y9=351dNd~5p z8H@~k-qK7A4EzH8=6OsE3<8-2W(@omAVmV11ttvqmLQuLxc!`%7)1EZK&S2T968L$ zz;ERbYNhj7+b}ZlTZ0ym2rw|c(_>)Zw*eW$En&;RAR>^%#mvCKQ+U21VsW1&x<#V3<6c4B+DU~lbXjMPzz#nfz1?X0GY|dqa4P-AkYkA^9mNFrZEU~ zfzWZ)HcxXZx6C*0}6$iOdLJCTt=K)7%>BZD9V_Z${R1}4F(c_42-^JHKUtN}TX zfq{)>2{Qu&cmESchATpQKZDNB1cidoevnEA9;OyD_V&%hvb6=eDp9U|7S`xRHTD=WCbUkBW5K>{ZVPjy}F9M26AvLhf zQ4u#^1_mJwMjti?hGU|6rMV13T40$IBIiFbFbG*OE@x$6I3u#Mg^@wXf$<_M1H%Od zrW7$o2BBuqNmpzvpz|BW9x^g8fV|8FN?csvuw_cMVqg&JQ)UH4f+i~i16Yw0D+2>q z9-||gN$tnVEZxAd_&1DeD1qrhVrWO@3h!lci zkAs1Y1=OvPaBu^a{bj${7#M_kK^L|NzuOAR!fqUl3{1i^uP`t$3$L65s`Df{L|Uam zr^A6wZ%YT8o?D#GAkq#>+AIu`JR)6g>qHpp?PD1ImaZJ)i`_!c!H<$RN@S z$~7Dek{lxa>2R|qK+H-msbCP92r-MFN2FyoI|GA2VnHT@NC(JyQu{m^8ALikeiq2g zD_{`m1Gz>ZIf+4J63AKxZja@R3<4reprc;Eg_%h6d4wZpf$U>pkbbv`fq_vIRERQw z+6|0zzOpkg$Rrk}gG51=GX}|m8c~9L3=DFNQA|Y)3=HzWKQS^ef^Vw=wUrp>Oyyu; zPyp)zS8SlFUl9}(j4>b?rilScptC}liWrnZZ5Aay1_n5Ogn>a7WQ_|S1A|fq0|Nt734-c1r%1& z0cRN)7sW3=DyskU%H}g)H=x1zFHdSs>ql!Uc4)vif{(CI-g8Fn53&m5g(CLEZ5epGwm%_z(WN`|0&dSpN;kx`ft9B9G1v(%VC`aoHnF+>mSM^Q$QCqZW`tAY++1bY%R zcsY}gfx(Om)04`eBTPXd5R64q7IYmVatLUjPGDqUEQY%j)J|rc^NovvK|d`IBmr{h zentic-N%khAU?#QGN7!^Sj-5@>x?0wgCoEzD%HR)u3!Wu5vGX&%5n@03?O&jgE|GA zB4LrC!N9<<9-JtmnZU6GN?r^M+Mv>fu>PH5nw7(1tj4#0!gZe0pb3}L< z7<3M-28)6!ilrd0fXkhiP_GzkP?C0%7=U{D1O&|U!rC+MX8+k6ZRM|r^M zkD0!03`}%P;f!~VNxW?$iV0V(he1H)L~*^bOm)SAOgHk zc^Mc$7+ev9nzpY&+d)C?TGNL~j0~cVzd`(~ybKIxOve})7#%@91&CgA4-ZBLu_#a( z59tP(KXPYc5Rb9oV_@I{6Lz3P#Kr=$j*SK63iIYbMh2c~pu(36lvx=pzKAn22%G|y zFrah@ZY(iaTyte&5K9GV0Hqc#@a`H5&u~Ttp5vg924xk91t291=7KGZ3_OQHc?3z+ zVv#x%1J4{#2LzPIz}9hrcnp@a+8G%*y+QU{oj%FPAn9Z=O_zy*XCKIHP}+c)0_x2% zSe*FJ$iVXxl*T}*fD6?Aaf&jkOEL;GFmSPg`P{;c%zWJ3AR|GdJiKu8Ew~vNco`Wzg+bzc ziVU8@`rHf*{NjuV)dIW>%p4%CAd>|V9FSHa79@qj8Vt;QGQ127B2e>LJ%vGvM4@`1 zTrrU2AQp-XGcfbnNHQ=;u%I|lQW(itDX3}S(2&++1P2YPx}+eZ5SxR#pyn+jLlB4pHB4C;J~IY^P6G!^ zf(RS%)J_nH0<|(A3P3E-xDz8o5QqXbI3W@s7HI5;ks$~~#e&Aqz(#^t@erdx6sT85x2>6vzgUg5dce7DzcG1N4Gp1_sd8E+An>hER}&5Lu)x?~nti85x2= z&2VwBtx+Hfw44QGXwZBROBEskqCibVhy=_jAR2Vz3nN1ihypcNAPPV%ke^BOdIH$4 zAP|)V4-*gzv|^EwAqYf)nv)PaK$e3rsG$Y&AR|L4DEvSQ7#UFf32GWKG6aDr(3!Ik z?I4yu#6l1SYWzVYKxV=)XzL9lLlB4pHLf8FKrE1VF?M1fjS5CcK#VHlL=7#V^<6sXAyQ2=7eL);3YK#d-V1WXr*7J?`MQ6NRE zkojm36V%8-RS$ALXxlL(LllSt?Z{HAR3e~K{P0NfoMm7SI|<=*k9W21aIeDOUAM7Z@0rb){JqC%ZB*Fe{6(a^zbw zGB9(=ur6b^cV}c^Vdj=)7drFVT}WMG!nf`~v! zW>r+Ko;IuE<_JaxW@XUn`V0)r+FY#4=MtG1m{nO=xpsMg9Ip$}3L%-*^uP>ePJJ-V z!osY<$*Lsg$H>5}V!-O|b%%k0*@uaRImwXK{ed?l1G6Wxjm%j_tV-*RnHZQgj3N4& zHBDGmlixBjFl(7YMT|iw`!X=FFq@b|L?9%ymIaidW67#!X$y)fUGr3e`APR%aJbaQHg0 z@_R6YgaVyerN!PbFfhxxK=sMHLKsLSbGaLY$6Sf*eTe&*Yu#BOEEZ-}Hdc>gix?P~ z{Xo|dFfcGTGkQXFLP+KSF9-udGOMve8R{IY?g6J67?^$8p=LoOz$CM?1cX+BCLvZe zaRDX1y2TvYYKt+%$oeHiYBi?4Pt+=01LAkFO;Fq z2Vp=+W*yM^(jcw60j!E&KxtJqkX7-{Bv4|7=L0oSuxe(lATZ6ss;7FJfq_{c%4Ied zgotC3tPVWi;0cFWCzw@HTbF@>S(Ax{Sr2rh1IT9mP*z2In5cFbrXkD*k`O^=!*Eu` z2~$9+IRYx89SLDTNM_?GR+WhX3=GVA(GU>`$!eAF&cwiK-7CVxz-p6H$iTpA+a}G# zzyd10Ss8A7GBB_*Shj#jv&$e-_d19?B+kgd%3xj(A}`+tiJW2tu`PFj*dZk#_RByJ zxzHO#7JD)=urlcRfY>M8LFAM#AW~=sh!n{N$tv`M^d1fbk<9x+r1WQytcnweJOY;G zSOXH*{RI*UH3qR`l|bw%=RqXHArL9)0TQ3u31V+w2_n_DfJ78qLFDnRAd&C`Aa)tp z4Z4XSwlLUtGk8HR;no0&Og{`F&A)<3MQ{jg3a{!S6VA)r1LE=YZL3+2! zfy6=UkXRYc*nvdu&H{<-VFjsil>&( zL1dIPNR|z3d;ThrY?>ZOgc%&#AC7?3d<47al0ArBvK}-GOc|tW z&25l~Km&-}Iu9hCkqaWt3qT@jDIjthXo8qwCpa&}fm835b09VM5 z3=&Cc0+EH_SX%}b4+5t>(8?-ShVb7YGylqfbV>DrRQ?nJk#fEulJ`D{Yy;=Dxzj=H zL!e1PhS#bfwi_smGrR-4|HM9!h%6h(w4&)CQvM!@Jii}AGUVu zy(>6Z)`x)991Z}HUM3(lmr_9NzRe&u|3?rR&H_^Z4;*5%3PB=2!0F_TEr|V_8$@or z1k$AlE*UseuxdO=XJlYCiUOrnvs0il$kKih0|Tqg zK~N62Z~DZ@!0KTSDm}e3#2FY^{fa@df!jd2E2;#vfDV+_#CW$cGO)_`d}m}}Rj4pv zWMEZwS7Bga)!79a#0RNR&~Rp8U^ToO1hQ?T0Rsc8@h6Z;CZ(Q?46LT@*^CUVX6}a> z8CcC%uV!RmwWv*EU|_X8>cPmsYSj-asjR<>GBU8*cUJ6tX>g(j0~*4nf#0ltbS#AObo34D?#-_fDkD61u|zbGOz~OgJLH*Tabx?HKZGq zXG2$k;yvs`4g&*gcswYlL_8N{WMGYqxy#7F8nqr2{?VbJS|i5k9s>hwY{w)92G%%3 zkZJM%KqX1SE-MBG)+Er0;H=44Uo$YUrp(*I$iSMa;KRVcnilecfq^yssSYCpYety> z0|RR&Gbr}6DnK!oJp)vpB`U@EuSSxRX%D^g?-wX__)e4}LR+D*xk%6_AIh=uk zwXOnGuGUWhm9Y(s44@!uWPGN~z`)wXXr;!$z}n2{1oBl2qbDe#v@)iGN~(57hWQK( ztR0Lcpj^_)sAJ8*z}m%_2`cxy8J$4ILl2|N1O^7yUdDwXj0~)OjNio=8Cd%nC$3;* zV4c7i2+AQ788?A4`Xt71StbV7$&7BGqG}3b49J&L8K2%~WMG}f=q1mB;YK4UxwDwe-7{+`6h!1|pr8dRD5WZVNv zx4#%`K-I>7M$e}V46F@Ijvya3GyMX!S6Y~iTp1Zy+nKUsm>5_)nBIX3-%h6R93}?V zE~fLK0;ZQ~vH&PCFa?7unF&lnR~Q&rCo{Eyf^HU*6b~Z<>ujc%AeD2NSY9$Ru+C+g zv5%2~bsp1SB?bo8`AmO6nQ#%)c~A|un28NkDKBA~YXXXCCQncUZ3UA%s2*9#^yd=; z1M4cL!+Z=3tgD%Bff^X=n4WVmF|e*@3I-Ko8<;+U;&vmG45;a_h3Olp?Y5O^X(cGa znNETd-*%>Dpg`WiR1eDIyP2LBFfp+1Vd?;--MvgtK-p~{lj|Ku2G;#dp`e^|h$$hM zk%9FvQxT|8JHqsni;02tDAOK&CI;4HOgBKS(vwVephET(lO(8wKh5+26dh-ngg~vH zb4=Ets^luuX-6go)@w|eppm4Tb zvkVNZcbQIrO5poUB_O{)W-?t2id!ZFP=WB2iKCK{f%O^Fl>zBvl$pz-!iQQmG1ADUV)10_e`%rHR%T?iDpIy){jh)pmOdL6GJo; z1M63&DWG=DHzplWG5?)u!8Aq&)*nplrVI?MKbh8oT2H^27(ssj&Gca>0|VYg#1*!{Ln16#B&8^JO zKyA-9W@8CZI%6&Yg-Zvs&3Xm~)=p+0OHevvR+nL5VC`m}1}YbOnAJfktCx8$FDTV9 zw+1mWu=X?8f%*j#m`{O<_=(K^nG6i9lbBsV4bjQWuRx{t6lSL!Mh4cY%v(SaK8^Vl zs0lKic^)W5&SsthYG%w~j*eqsV4cgH3JRrp%%DBEtn-;Kftv3Nm_fT#SQj$C1U2aw zF|T<7DwmjxK?UFv<~eggsg>Cn)Z|*m90}?NEN2Ft>%h8#`RZ{72G*6#7eI~uRm`!V z8h15w1<3Jhn7cqF*jnb3OBfhf*D<@OGcd5OXI_4sk%4ss^C1UD2G)(t>q9|h7IO=z zj^E52V#vh6x`nxI5hDZZR_5i>j0~*Xm>ED(wVgQ~R6Xxt*4)6zz`B!}4OHdrVg{`f zX5GtNx{Hy4bsuvLs3h9YJQEaV2bfpKGcm9pWM23eRID*)f->b{=3k%&^$}(lP)qDM zbD$9u1M3Oqwc8mPSWhzFVP#@qJ;m$-D&$Tx%f4h_U_Ha!a*~08^*r;;GmH$ZcbS`d z7#UdaG2a4pAMP`|g3`+a=B3|2r4(})C?Fp(zX3HRA2Tb4f>JW`T9BuoGTTiCl~T;C zW}uYJ{D6mnf%OIReo)c;lDVOlk%9FU^HVk^2G-Zir$FWI8|HPJ7#UdKGJ^(KSl=L)qP?X0j1B+%r`-;^e@cZp#1Qac{d{i1M4^DDWJyQ z59Vv2%H}8YA{zz<)?dsApEEG9{${>BnUR6@4>LO`SpPDogW~TW^LLO%|Cx7!eAK{_ z1FEtbS@JR&8CaWGGC*mtnWa;Tfq}J!(`%ll{s2G$;yvIHgu)?Sv2pl($k%L-5u?q?|g)wdH^_&{~|M3z6G z8es-Y5~y`ChvoZjP@-kYYy%alEWczK8Cd7D#Dh}70+wZI3=FIbS+;;$9gA2NgQ9;i zi`yPX2G%7kI;R*JSeLT2g9?^qESn!OFt9FXkp|VGD_M?$N|aSB4E~@xmBk)Z2&`e* z2C`u-OD3pxTE}w0l#zjTJ48!!OH~{b1M7B{-QG+LtUFkme3%$mce3Pz>c3qqCqYSLHwz=EK-$By7t}l1 z%fiUXz`(kX53^B#1)xwm%yM0sk%9FH%LPzd@F+_r zsCqfZ(hW+x$64h5F*2~8VBrA8^hp-Ey9^Ahr&tO=ZPU{%Rkfg$%(BOufr0fbOJ5Bm z1M4{!X;7Q!JWGBYBLnLNmJCo2?IKGHs2g{QWu+wp1M6j$&!9AMg+=T?BLnMImWGFn z46N5!jwUlPuwG|z1T~QFv&e&bPY+nW{s-j%mW?3)Jz*&VbrYVlc#DD3JWEzI69emW z7MTs8G|vLMV1@NHi&zf>1M3?WQ9dRH*0(Hepy+?c@&wejdCwxB#>l|>iRCXp69emS zmc^h#=MT#bW>6{2GI1RP1M5E)D^O?mKMO}Xs77aX(Pv~}ZDch!V`5-!Vs!=$gS4}X zgHmz_>rIgVI$8HZ4;NzH$2bL)4i7L^6oZNdMwpf!&Ll`a<7Koy6j^?ODJR)>~& z1_oBg`=GH9r~jayqO&)sdFJ{Al>6LvgK8o7ZcxeQ*#R02@(BkugHl2FQM1;UgDS3O z#z;`H)WTQ|y{MR#cO%GNzP0j946OXKK*vCW`aU}uUmj#+VBN(Cy6c2>H{%^0P)mWa z2~;HRW%K}bn)flbfQsk+j5eTJ?*QXHV^E3880p3cYA9|5HLDIYc7qzUM;OyVS^p^G zdC-8!F-ApDF?5`<6Vz=y!MGDt&z)ra4NCVH7`MeSF|fU5TnO@d7ZYgQoVA-Ne;p$O zYY)>>MNsL$)B|d0^fCQa166)Zv7lma0+TSPfSkybRl&%>I*Ew|G}(-=Vgg@2|D3~cilzy4r=`4gYLtP7Z(;-IOBvk#Q>gd;({7je+s z6|1xW3#bo!6J(w8Bv3J;eiPJ&(9QwXk@}xNoBu$u$;1!pz(~fKGcd49Eo)|AU{&V; zbw4yNg0hNcQ3L}6tCl6m6zwgbbfY6u&cMK`y9hM0q*s{3#K5ZW2P!5E=K4b2Vy3#7 zfq~7U8PxD}nhaY0$AZIKtoNCcco-Sjo-sw`GGGr}WKRk3$dr;`Qd4al$k*`2K zi3~f?K->z(O`znpjfn-6ptdue29>-!m}Y{iqMb}p5ljrMyO_3shWK_fHG?XqJxps(%)x(mI3Nd zFo%Qs$1j+rKy~wH=1or+K{e;IDp2E(SspY3@SnK=)ah+vQM|~=z&eA)M~;bsbvBD7 zC_l|(5df7S^I6t_vd;n*Sx{SiA&ZGHBLnLqmR%qpEoN!i!~m+1E7TEmhJDtXqje0BjfqgX0It%mh1 ze?hH{4J^-pGBB`iWSI#X7uv+K4%AiI%<=~`M!SXO#4=DbilrLlmiMeRpbF+Y>myKV z?qE9#N@%@oX`oVaGFx0ZH2v$(1dU)D90Cnj87>6%kWIWn1(LaGBLf4g#cPoHRzjfe zt+h!KXp}o0G|XWe4QgCD6o3k6$G^c046IJ?L3!Ql2dJ9%As*!D&yA|1_ss~DbRpV?gCKW%rgQFjuid}^;k->Zh-~@JVCj;Mif+8 z)Pfd5vNke)1$D|g7*Bw@VLgoQpplDSMov)0Gl8)RG@3n`(HkT;g;C6diGg)0qc5li zpUx;gm4ShE24fMZkv5C*J}4^YFrEYrL#<_W1&1?Z7^q{po-qS7rn7<37}V$4$oL0T z&TM962UQ+h7>|P5zFQenK)i2^3%tO6&(t&~2G$>phM;=#Cu1q7qWi^o6ExEHoAD5+ zApFC45aflKOevt&*#f2sa~K#{S1{cJwe8n2tp@cMjxiktwQp}SX@P>}J`>X|P^KQm>3`WZi&c7sO4|1*h#>dDE>i~Sfu4QY0DCQw8A8z=?r zVQvI<7xyynr~~!)n49xJtqJBtP+#yIvlgg3^@KSZ6sgacH9$tcU_J|K2EJrgR%8UV zOgTZ#kFU&YKn<#2%-=zy1^=0sf#ST0P}h~^DyY4= znI-QlBdB3i3>rDz&Ef`Xuk2?z2I`_6W(ffG_l~m|f|`2!S+9e-4F^~aK|yekRS{IM z9b)YPZD$3QbR0`t85r1jGeK=I0k&z-glo3Vm4SiP?ii@9wikB?)uFARm~(Xl<;z)& z*J>fB^RTk3fr5rZ>KFq9E9Y*|@HE#OQ3eK9ZYfYA;AsY>I^L_GRKoWHWF$W~sP++1 z1LZ-%a?p^IP%x-NBFqB{IFWWx1t8iZ%fP@Yb{|yuid%y!2#Kqpu$J5p8nlv923670 ztFJOJu*#UuWn^HLJr3$*%l!palJdTwRxs>~tGcd5KSeP;~ zu&T;{T7_yN??A=+4p6sLBMnrRXg&pHbgjdn1f;D1YR~J)fJ#l>Cm>(wtw>~KVAVGT z^|uUKKyhfO4%$-%3Pky3H$j7<9iT?MG8?Ers4^2&EU89h8`%# zYF+^4VJ$OIp3puG%CS0E7cele8q5O~Lxu}LjU1Dw%uEcdrp2Jr*laz>Kjz(_lHP*b zkBNcRaueu&3Xt6zm$x%8u$mZwd~c=a$iTqrum}_e&VE)*46J@3AfJUwX)`jg#<+n7 z2hx2(zR%qYs>rIRvxEB4jN3tDczujJUx50&j2s|`&Sks_YT0dOj0Cm5wlUrUjjfzy zTncKXTw$CG%3V(woqsVfu)bidxWUN4`jYXZ7!zo;Xg+9={6Av=s72PoBmvUU$rKDq z(S1zEL4%tMm@a}w`&KiVfx27=nHGUYW=}B91QjCZnPz~3_8QYPP)@(gR03+DJz+Wn z>LkBmVg!xde`h)kvbKr&9>_Z#%-x2dVMS)=$BYcDQ?ZRc&^YNm<~yqy8CV~K_CbRBlFLB@wQrdhfy$>( z%(p-e{LXv;)L#3;ECCwaZDh#-HMp8sv^W?USesd*ZJ0paI3ZA$Yh}p=_4nIZrhul) zI#`Z^8ctm-n?a**JuGuU#dI$VS1%(2>qHjzLTLLy(FRmis9f*`jo0%^K}C7GL6xe& zQ&7bx#07O&^ zf^z*wM!6}VUI-(92Ll7^XT}pCzcw<>1=V&Gf9C;>@Q4{Km(Y6 zm@X@UVwHI-D2H}2H-Q|{%^VG?L;IQQKsHQf-Vf?Q&tQ%OjovM0{tapvu4VoM8U^3P zd>Pau*vZTY8jIbvGh9c8`<8o)fpoC_-HE;7e}s*Ov`1)!8pi2Kevp?u$H&9Mzk_Ckcn*-=13J{;O6;$K#Z3hi;$VP&O?Bs<&rLMwy&@h$a zA<*=O(mPOtPx(qVsPuaeszFpihq<$={R7oB>h7S4PmKal#A$v5b+)u3LF2jF!Jrm} z&JNIcfWeKuj0~)XzMw%XqpzUujPVZ8)TxOd$jheBXEHFbnkj)Ai{`eV($Yc`l)WrZ zgSuH(rJ!+Z>qyXag$)y^ab&w4RA1Q1g9a7snLu_q=z#`B9m_!Z&q*INP3}AoROGlk z1lj9v1{#SDkN^#DMc)8r|ClIH`5LPUDwE@`7&9`krs)1)WMIvjw2Xm)HCqQ1s|8}9 zUQ}T_Xo95XI;a!Wz?cOpj~W@BL4%-8j6XmF7|o3DL8WF3;}cM;yp=HvRMECER)CsZ z?Tq}OiINV+T2P0(ld%eFy0J4E7lC?(vlyR)3b1*MCqY?q zKBGLS-MxS@Wey_)>q5pyM?no>#_ym&TF%G`8lzglxByiCtz=9A#ok6nJCHj!G42CR zaBXJ%0h;F6!gw2$;5H7X)f)*>i!0 z4js%vg@xk;&`_b%Ur@#C`W#f@yY+w?k9kW$38Y{Fs5e?91{(P-kpX3*vhONP46Kzw zpaG*QHPFC*wL55vsYVlIOB16Os8`d7$<`D!R=e2Asd7Bn@;Vh);Fp3dR} zTA(q5r32KKp2^|@s?}z(TmY4Svsu1@0&5Nn52%Mdmt_hlWgccp1Ucy_3lFFjcbw%f zXpHhC3m>R8dx|9oG>&|lB^ES+e}-ixsDFKy#T_(udyb_6RHvS2i2^zB0!sjBob@70 zIcR$JGD{q&S$Bn{8PuY?%Ax_Pzpk-71hwREu-pN)dvCHFQfFjfy~VNu)Q`Bsk_B4C zbC;zFR6yTj@l6HIlChivWyc3BS|Cq9WSI=A+xD`~1SQSuYegFqOF-S(+iYQ=`P1d>pFr)273_SVl4T{k8z@bzVvh&SUaw|v1lhNS{Whq6Ud!$Q znmk_5o}mL8x@XSf$>S3srjJ5Vpx=sT$8VSEe} zWG1IUnR%s>%RtI)a8SnT9RPs5Azh-1$buI^${VoBZ4C}fLwD7>K05pB7X?O18XujX!ttC476}7buXxHN&7hy)H8kvYA0u0 z0?qYhE(HxFXT{_*GO%VlfJ%}abx_MBcQGjR@*>xRCfThdnHX3L8bD3JLKV>BkfPh5 z5zOLl(BOQD0%$(5RD*$$fwgQRXt6LzzH&IFB<_b@I1wIg~N%|V&6kMR_!6zym1 z1NEmSFnWTT^%EHzK<)oYj0~WG=gEw#Kt0AOjPny2K)reu(0uPS#xJ1ib~>XiD5cF{ zYzL**nT*Fl8E+Qja!}Tu&6o(9|Cz&>3L3PT%XkD-M$Tij1-13&Gu{T({R0U^(|I0 zT7cSts~NdL<49{5#X+_3TE;J+-rqXLpP@IsD|Fnm;hSw zu!r%V0TXDt-xn0*`xsk6_2PcU38jn-tOpodL7n@9jC!DI;t-=eXgugJV*<#&Ba9nB zMeI?=d!R1HF~$&3k$#-fDg`vRz^DN#@=h|!fePbOjK4u$+tZAbxtJJO&oByrrqRzb z9smtApJQ|atwuV}I0G~faDj0RC>k#^hJgyQON{ZLR_|rTS)hQt!gvW(h+kz?0j0QW zjL$*CY}XlsKx5B07*GEM6hmj1xeOsN0NBLHY6y;|b8P?_I`ipaT9L;~h{o zy3hC=G~n}qkr7lFKW1DB>M%TE1l?-J`jl}SDE^)?dV`wD&l&4L14S-q57Wj3TUA81EU>i%H|{Ed{Bk? ziBS?1@1Ggx^)oWCeqo#nTDSL=F&(7u8{-L3A@-dy6f{lpgOL?93iOk)6_gZzF>-;F z{APUH2bzatyb9`w{bigDYIFZ%Tn?J0{?8Z-Y7sXug@KBOMy7VqI8zhTDbU)1W~Q^C z@~eeuDM(){QyfTN8`CUM3TbC*0?nLuFol5zHaeL$f}GpMv>)W$Zl(@UL!yUi5~y|A z%XD)s0|RRxlRT(l+s{-78kL#ABn9fiPh@%r8i$$0qyrjyoy@chG!Q+7NdVMAnaXq* z)GD6F^b*vDo6h6`T0l61=^7{v&SW|w#K^!pi|GKUgEE^*4>Z>{hv^h(+I}w6U(i(6 zJSH|!mYL5~0*a~yOzS}Np$nPPK&AO2rrDrT-Nj6s_kcRYObwt+xs++OIcQA`Q$465 zxtvJ=)Pr8Zl&siP#a|}(*n@w%{nGWPzqVk zbQTov8jr0_yV|VbTOO?@lnyZ3In0GrdV-WMDnR^dB^2c9!V^sE>S(=?!Q) z;5^d@&`QV)OlLuBR4y@XfF3`}YG4MMe6w8N#mKr zkbn0xPCW{qa8m~r&PN&FfD-XZMh4K3&nd?D^B5UePcycHR`;D@Yy(vWXBnkI&98He zVxVj!;g%8pwXF6jP;Y&IS#%G%{&}{NBRk4oc_kOd6n2>ShuE zC8Hjuzo3$-m+3kv+4eEngL-@YOj|(_FoEeOXf$^s(|=G}p2Rc>6yKAX9)QL-rZ9}kdOqk90oDR7(2BV_(6(aM`YoVt+GNICpv*soaT#cCe;T8J0wZYQ zVF#!>oyn-n0A6v(DaOdaI)||x6a;e_yFk65`HWJaRJVZfIVg85VvGT`92YZIf*RFJ z8UKP>jmsF-K*Itn8S6kpk*gV}{f73z{hL5FWAJWJDUz@N)U;0&2hGK1zXw%8IfKv_3vZFuE7 z(9lU0FDRK-Yk&q->!U&Q5DkoRpmEwp#uuQDSQFzeP!eipWCAskTNq10J?K`(E1(?K z#&{wgJW3o5n)2#mw79_l3V>yx{`6eNU7#lFJjPd`=G}b8hkqFvSQjwnfrdvGG9CrB zvKKMNg2ogUGpd7Tua_|L6)`ffE@!+2>awk3JPIo5)-ozHGJ%#yCWF>#KVx(Q^$I$e z-h!Is6Pb>J7Pw7j`VMMOOkBQBV(tPp zV^%Xi1TBqO!yEuAXV)@c2ldL=F~0?6t@X_ApswBq=6j$tx{-M@XxwTO^KH;1-e%^N zprpKo*%lP4Tbb8i1FZ&RRs)T0Y-er;CD6wrwU-VvyMm^dk1%(Ex`9WT z6G5f?F=j8&1ms1b&)v=G|za6d3h^nEh)1es5Nti`7Wp(vCe=aaEu-;_$0wtYW%)X$K^)~a7+cVC(NK#u>xTmWh=|76wzjU)eI?k)o@Tw!hj4bgS7n1GaY zvCIPH#i=Z+phm_tmTb`C%;_vbpoNq(SmuKo&of!9Kn2$<7JX1Qo6S-N8poQ$ast%E znajch>cq`s$p-bZ7O+Ht)&nhM`2iZfTf~wJs=gMp-7737KwC(zu{eUtuj?#& zpd4_6B@DFG_9lxQC~j}D*nsMT+bmI_F4P^Co1h`jyDYy!{fB!j1)$V=pG6bo_XjMi zK^^OdEY+ay+#{A~&>-z&mK@L)kS8qOpgQd-%OcPU=4ULcK;_13S(8gT7m%>+#zcC(%ab+39@%|LC&URG()7ii()dbBYu4hdGwPiN29s>2_ zHnOUM>WxjThd|>!n^~8GdaYYn6+k_Pt*pU;Obo2sSm%SByPdThG!DCi^(Ck`zmwGv zG`qfwwG%X?yPMSv)E3^ustPJ;_p*Kg<)eM9S{E4@SogEGf`(Quv2uZ$dbe5kgO>W; zVf_zUM0KBakv0PZ>jT!kpf=YtRtFI8Ijct<0|V=8*7u-Qpl?|Bg979ut2bzP@e`{m zsLA$&^$%#U7a7r2wNPe|96ya4`}523|ls+nRJ#-4Ag4<%@zb2 z!)j&^1r0>Du(yFqlveg)P!ZI}{*ei^oQd56ltL!3e*op2iR}F#YA2^Ks6D-lQxmk* zVmD_csDR(cISmvp`#Gh0nqBVFPv{d?ai;8+@N))-#O3k2QBB}JOnB({&Fq=4Qj99 z>H>|=ujP^kh4nfvF;G`zBi9sAm9>ZKFlg1wUakyKV&BJ=JRh`Rp6e&bD_6L9K+Tk= zTpFOh)=#eYp!n)&h zZJX1ezKrcHkh7inKsms5C#Vn(y$&j-!#0At#i$3G51GUG5md&_ zWt;^H+~th#LF;u^FxG>{s#Y@cfoi%{jDn!WN2?j5L0ePSF)jcNfUakJ1uE4xFx~?7 zc{egX0(GM{G0p&`{OybnK&g8N;|x$SxRbFSG=;K@@jIvqyPNR}D8C+JtO3<7hZ!G( z#te@zJ^;-a9A&%&T6=Vi@i=HA?gV2hsI_{M(E-$szQ(v4=^bAx1H8QD#mdG?Qod?ZaH#3QY%D5J$ zBT@_utgTFML4*8lOx>VC=XNGPP$uqRS_>?PSsfRXJTuM`waoC^9_+jd=Ai?Epni zFVj`fczhpIA``R~uVe@Elxh}eyhzOl6e7A@pm93A98kYd{|BfQZ=eh6BpCLADm$YM zp!SIIWKhJLh;oA#dMpGLYGzHK^2dBJsHtqheUXuY)$%vKoR8d71YId+z)bt^G{H6bma#P`n&amGLpMFXmrnWo)rTFtJhOdvFhUn zYCHJO1%;NM2x!dL-x$>H4+sMl@_{}eGlLvKjeuY!(EM7+Lr~8uVlyZcM}7rOB1Rd2 z`XAA~$qWpvF&3bd6KexX9C7TR=16=YXizM{3^eSL_zl!1ObP}SM#)b>J@1sopaL}Y zAE@w1%LVl?(oH~Z=8OnXM$J42+OUzO1k#)B3(5mITA;DDyf)B4V!j%vurGKAs*?&G zK|Q*nJWxxdR2kGrDO(3B0?PeCji-uW(6+D29iU3OY9eTYwpJEYv(yQL=5Fejg2JkS zQ5n>UZ)9WvHJ6(hEgyi^axkt2#dr&&JZL#|E2AuE?Qk1o9H@3`XFLlUpYLF_0(B$1 z8J~itTzVJ}g1UXZj47ZD-^aKG)Sl>PEC#I?oxm9Ln}LCKBI7PlF*b?u2&kNy%vb`d zJEkzsGXoE|Uj+$HV>|~+?b8`8K%)gS82^HXPi8W{0#%>07}tTKXEtLmD5uY1OahI2 z&t?1sYWdG&JOOHM&1Vz?O?)q6ybMaiiy8NWhE|p^8i2ZtOBvfi(<93m_ksd@IU^US zv$cY8JE)Xe$@l^k5~~<}KsKyq`~+(6u3=mcYQL;yYygdOtz&csm5A#Zw}J|-4UDOv z*`|$*ET95!6XO+-MVlFQK?Cz!7)3y4Ze`2>U9td5dopRD)~yEUu1Ho*Z%{Kc|<}o^f?(YC;H7=gaz`$k;I%bc}&fz2@1DkyiXj59oA$Yi2BqG$OwT}l!3|7L zKw-3zsSDIB+r%_Co(Z%VhnF4053=FKIQJ^M= zm^x_mTigs3Q4*e@#SoHLKxtj-E2tGMy#Q3!$fSbmRM{P%a!~FEsBDtA0O?X-2hA2K z{sna)mG**?opKszPF|%MG)AcU3p5C+wjR_WQC|$&*Qc=nRElZxg8G(Ps-V$x?P;J~ zsv`^9La18{N~(IhK(~T@Tch^jZe$YWjWyl}Z5{KY3qoRhI0RKjMnfohOEc~B?3a5<=?DA@rT&MXfF zO@CC`faZv5`9PVmfw2t~RV|DbptRn~I16M*8{+{`qoSR00jMY2!B_!mDt0m!g1Vwz zjKZMaRX1Y~s6OgpWCD#U_cI;^^+hHy&H*iaoXEHuRPjw>%m+0lCNp|~iis(Vhe7V1 z%4h{DvZgWq0acOH8JR%CTr(J7fO_0B84rP?X%^#KP#Dc-Yyy=ea~Qcn&8)eM$)G8) zd5mqKp5A=MdQj$Bz<3ZeCbp2V1vIv@i18(;Ik=ed5UBEA!srd^EG=aW0L@b^W2^?H z!R3tqKwb0|jJH8^@+%p=K|?dE80Ui8xvLq4K*P>!7_&gF`n8Olpp{MQ7=1upne~jT zK~cMb(G}GE+{m~Bv?^#5qXj55H#2I1s;VuFe?a3ITNzV8yMeYb&IYZ2+0J+n)UnyY zr~z6gu#=GwG`6^xF$XkWzK`)Zs6g4zXbkfE0mi+cfxv@|6`GbPtN^9TdyI># zL5sT>B|sB*4;a^jMp+*+?gNczK4Q!URpyTw?}COdo-pnORpCz=vp~W6jIk8dgnQ1& z1q$*Pj88yi@k>SnP^x>y*acb<{+clX6pe2fEkPaAw~QY^3$xxaN`MS|&v*|s*Y<%? z05n_vk?}QXJ>@6HRiITOpBY;~z1%O1^FWFHE2AoC*ybDKBhc!z?~G!NpuL=o{h&e2 zpNu-7-1m#|8mLF}n~@i^R_G6-257zSUq&BLU*sR-bx;rZKcgY2ly6|-0j;HNWRd|T z#Z^o|lunwFx>|ia;g*EtbomL8aR)QlK%udn{3)D|bMeD&K-C zfmX&ppfH=o_!m?|&Su;Snnak(r~;Y*pU?Oe)Pq>T$OP&dZemOTEzsD`cmq_v9ANwa z8g@O%7zfgDn6X(AyoI|QWb;u*MNm#X#&`|XyE@J|57eJJ!FU=p33ZY&1ymHCV%!QE zr8vWQ0c87G#yz0&_Z;I~keL@5Pk^HT4x>3}0OT&C2xvU<5n~mo8~&JaAE>r@!Z;Ju zGkMBb0~)`4#@GbvhdpQ91IlqP82^Ea-L0wFr zL0#VoOm{(Z2@{!=%%BTW-PePP@PK^K@LkY5(4wZ`6i_7!C}{WhaAL)+&=hO%2ucAhudEC{EP(gRIuj z1i3@g7L+@+LO|=Yw7-C=8=c>v#Spqopprn(8Ptu^PXtxC2B4#nSPf-CO+ceBpsu~~ zd5|kjl0nn$reUC}!OR!bTQENW8mqR@26cfgnL*POR!*R z3bM=oFQ}#Cuo0Bz9Ya8g$7um*aLG9V)S-7t05#KH>p|0oZfT%tG4~Eo2ghR~D8qS9 z0CfPoj)StW_hL}b)dzH>6{~LzXf)fe9@H%HpAPE31r&keGB60FGH5ACBzO)e96}a= zO2^Rcph_d`BdC89egxE$iFgWH1RQx4q&_MdREbB6fvVaVCeUh~*cwok7xx3y>y1|f zCBOs?P&+npIcR7hX(^~lo!ku)PYVL2=X7<@zUmB7P_sMJ7j&deRxPNc$UX<^%;fZg zx^ua4Aio#rf#x_0mx0n@(H-dB@vJfvK!ZN25^2!XqVyaz<*6JAn$}V`0}TvlB!Y&^ zG*5z>Bw87u<$5}Dp!o#d*Pw=yJ`X6g3|K&eK8CfRDeiDfP)9U64^&~K6oRJXGB$#y zTH6?dLA{y|#!yh%+{x$x8aV4_6a$Sw_Ap)mwK1nKCI>*9R*7pt<4#Edpz+>h&`o}< zDL+BG#8X>At+q6I(C}sYH&BzW=xYsBkD?^VMd~*}^`6FNP`=R=01c>Vy#a`y)X!)L8upmL=nSfiCNkE6dJB^ntw2@wWX4~hkF?`7=4I1=##pnPUf_cX{ z4b*4*%$Nq6W&Of<3sTnifM!g7GCCe%WMG@Zv>h}`I+dvsl$EA2-3E0Qr!#4S<_Tsn zO=*SZ-ZWLv>Y1`dpfjaG;jo^u6{Kx5<0jCE)^11dk-m>NO;n$46A%FFYa#6a^xYnZA)`E>&mD`Lo5B|)vKnasaHyt&LPKr;{vnYV%R%u?nu zP@8%s^DfZT(OTv;p#Jej=6#?J_*Ulgpw{wE=6Rsz#$IL*&~o~N%qpN=JV%*Nf)c?= z<|Uv>`LoOopdR2w=GUMy@+$LV&=AE<=19mP?hwPIejm9Qe-h`u|y+_6R5msWf29P>(R;b3Y1NHS@waJ z*iB?v3K}(@%CZ8~G?>Zq3N-RImxT>9KDm(PAE;DW%5opHA!#K`HE2o6S{4;h@v@QS z7pQZzm8Al-*ls7wK9I}yvRnskVLr$*3Dk)@%3=f>raZ~A1Jr9i%aR51*hQ8fpo!nB zES#Vs^(M;&&|0;-EK;^i46F}XzSx3J9AQZW^$%XM+y!kfddu2p1X}1inYA9YF?l*`C1|R1Hft~_`z>aT1+86N&bkO>^lH{S zpkbuVtk$4O^6jjppoZ6O*7cxe-N#ucf>w5&XN>~+_B!i3(5k5Wth+&(@iFTQkbSRM zH9*6AuUV&qn(c2`cY)Hj{GlHgG5FK)_<&tApiYmRR=Y$8rU{~hEE#V_JXST zCN@J*jn>TO1!`%xu(^Pyy<6FSgVr;(vGIUvwRX1GplPKJHb>AVVdO9{@Eeqc4L>gxGpedo6CiI0FM)dN`<{&dBL!U|`EE1&u6a`OIZxV9QMg z4KWn@^D{88mA(cQ8D%2sj0|k$>p@w*V*g482Da*8P;0Gb`w0dHwgyIjP>ZsW(NUFw zfvt%#U_JP}A=h7w3~X(T4WPb5JLCI$Mh3QSMgvgY*TeYPfRTZ%mr)zk$n9gS+Rezo zHj(iYXr65n;{uR-rZaMa!g>Z{iY^la+f2p{pyt#pMkNa-2DZ735}-n09%JMRXaUyA zxDd2#yO;4gs1H4n@pKBb?n=K58n16-YyidB6h>=MZ8Vi}C8$L?jj;h#OHXGM0d)^& zFun(MZe}um0(A&yF;;+PSY|V3gG!V+jLo1`SHTFo%XnEpq)7hX&|2*Wn2a7*PUn7 z1kDQGW!wvD{M}>h11&~)!?+e)*f4&758i?)1S*yqnP!5rQ5(}jQzp<6Kb4?Kw+Xa^Cu z1ZWg$3wJGOUG**Q^PsCvL6umbBdA#!WD6?hf@MJNYGynD+91A@@c`&Nia(5tr9l(q zOf{h1{tKp>g`m?gnDaqRqTkG6prWCZg&#C!^@Qa*s1j~t6$aJQTUpP7itjh9=Rp0g z)oi7p{^(A&pJAZA2y85@(3EG%1L~mKn1QAPY(dvOu{t~l6(WvVpv61RcAzTQ2tMFI33jvrS$prgRnb<)~ zj(Hb>>Ipt}(2{%p4WN-_fem+{P6}`Yb?3rkK{JjKouGlmI4@A_C5eH&lx7HO;ASO& zT2VQjpmCP6-=OAQwGe2jcKsXBa+ZEZPEh1cW-JGFlV30{2F=~PWV{W^*dH0Ufx10k z8C^izlD;!?fQD8Zm|Q{iK@*b|sNvSkBniscElg)X!(y#WQTG`b*!q|%y%-tT`k8it zI{s6bK7%@kGnsaP1}NKEB0(Dn!QNX5>TL3IfaYFB%R%RqgG3$offhD79R&4AoP|IO z>s$&!J3HKVgHnlmF(`X`90gT~p5H(PvR5oTCOR6pf+UM9#GkmsRUXsQ8*h^beDU8+HJKF zpq_Xm<5kc&b}QovP^+SY(Gyfwbu$`+23z_Vc|hSafzb%G3~M4|C#WAeiO~TRRZ|!r zfg0*l8B;)MX&Pf3sIfMWu?;kseuzaFG(~oVWg2KM^C?R_XuPe7wI0;ooW$A;8ogM+ zY69}b64p}CIP6l^?Vu`R8LKkL@yl5=K~0<8teZd`h&`;=K*NEDSR+BR0!LY+K!bW` zS*t-?*v_%mfc$Wgbs?yIb&2(tFfVfK5wH>j92c?lXp_d5ex zDiGoc>H|b}!1^pYFF8O*Im`tOPwK4%&8zF@gJ$&%9)PMp!$MFwV&VvDt(bLz*p{0? zy11)pf!+aRj3qQ=91G4rs^99gSn0w6ELDR8s znB_n{@n6gmpeSr)*#X)$-^FqOSIdvYOd4K>eg1wiTd;?_{>aAVxs*n+_<~y=PkjN|x&m>MZoKuLF%W^|4!lTG6xFOF`Y3h3w*>6uy={3^WwCh1~*_!gjM?1J#p<*p)$f z{2aR^Xin!UyFX}KMi<9_P#bJEM-`|nSi%tlO8RR#SU}axR*vhS4(nbHHIT})9BiQB zq5B+KprN>z95X<@u8$n-pfLNx@eY)~{&Fk=RdSu2??I#HU7XuM-IzI?#h_u`rJRYN z2FW_kRL}_0Aa(pcZ{E zw<&0@YZ`YvXk_~s_b$*3%vo+pP^;q#_aRVsXZCkN`IOyKJW4R=rETL7AZn#30k+VL})?+R!PbqXKzQP9jD-!ias`J6#h zpwsy_gFH5a&kYoiGx@kdb;~TiNuUs%&1Vc+f;)##6tq-zE?*d^U|7vp4eC#9;xh!b z4|nn%0o7Lr_#8oDcASqJG^TTo?<=T7w@&CFsHMDBNE$RXw?`-!6cUGp1VJ74K@FXWBD|m=m?kj=Rtjof%@^|lrMhKeQ$VeOEn>Gp6P3Hg>_Hj*g4kwIv*L!B zC@4YS7kdu!$}_P=pnVd{O zt;9eF(pndTYABn>pq<_P&>jk6Vz#R>jq7sxmTEi zj=-G@x>p`#tCAL|m{ZRH-9`f9D;@?-cm>S^Wr^@~kn9c{c5;RnI zi_sS}!Fi8S6%>Xq8FN5GMQ<5@fmQ^}W{LvYy_D%NsOPheDI3&UImGk^RLP%angyEQ zyu$PcRFK|f3fls0)+zFWs&rL-O=yj*xE3_YrsnHvF1KMVXb!+g1~kHE`UEsy zVtW_V&2aVtEe{Sm24aVw0F{Xmai9gwk&8g{ET!*3QC?;Q+DTvj8PxTxzHt?1#|}`t zJF*Wng%CXjG&&zE0djeKG^mzOT?6WFq}m;|$Pn)91MGWU}45-9n4DBe$=nO-8fMvnR`6vX1jTGlBxuw-_W@{^ zZ{D>Pj0~*#dZ01r0;M)a2G(M3(0qJ_CukD7&Jnags)bPpG?d=P_#8CK*~54lwA6Vf z<3G@lozK$@~fb!x|Mn_PW{21dS z&`j-d#@V0(^aNx1Tt)`glZ@7&&_Bi42WpF*W$Xea_DhWWKht%zqgF-ppmA}j0ZsbCB85=g4)Jk8TW$v;@=oAf^7fJ7!Mjy z`@#4PG*a=CF$vVQ{l%ySTAK5lF$WZ8e;DV3+P8lhgF%CI{}>xU<5dkzlAvO^kx2#A zENNnD2QPPHx&&I*)xy*YD!SU3W`Rb;I+?zJDuKyNtP)J1bA4YIl0}0%aVJ7Em$j$;}Ts<2w*E^5xS8 z$|k-iL76e&GAOwOz6CXFgWW*G8KM55255vg=v2h$2G9oG*q@*wlK2~-$)7|Q&{Tbj zHE41m;}yu8nUg^6&+H1&3iaG?pcQlZ*FhtXMd_f)^3tQA)<%Ufs7G2I4Js4sY(aCQ zjf{^#Gbt^Mo}iWV?TnJ3WoliFfuMzVy^IS%!}Jpv4L~FElNpzT#%88525EuMwN3;z z`DQcj1$BRZGpd0GBK|Ob0u_!8Olv^pdLz?3(1ch)Pn0Slnzt5Pwj zUtshEG_PeL2&(a{zJu~({3B2wFewbQbSfnqlx@@IfU56|7EnQuwE@(5UdI>;DysG| z@`A5e2OTNn0h+rplmPXVEN6mR@;2W<0b(xH(<_l_K2MB@2>jI~Nde##dzk%*C2AS>r0MrEXj0d&2ygWct zgx>o=t#04Dpc*|0bTcMva2_Z)LMFkc9%nP{1vzC7Q#QzixlHpw33DFP1km8lQYKbV zlrLjS1oe~FGWCEaY}YZdfTjz!GMxquGHhdV0`*(=GO>UX);^}~ph1J9Ob0<_;W4IC zP~~x!DI7G@b&hEUXfo+4(@juhU1Qn@3WvK)W}t!DdrUV$RmcmbYEb$1lIcAt<-cO$ z10~1TOy5B(Y2Gk3g66fpGoA4V&B-(E0WFyL$uu2Qx%^`K4q7_?n`t6wiv15$9jJC| zWmW=hk!xdK1seBhXVwMv;X9a@gO+*pGw%ZR7$-1Sf<^5XjQJ&~$#9%`4kt8+yBLAiZu(k+mS_ab0fkmrIH+YEwFb0WBW?w#*_vny zS{|R$1&Yn9O!=Tj@-?P2Ajf@YdI*|n{lSz0IvC+669>rOznC0B&86Q=FF@lNjm*KI z#azA2VxT$ZDa<=TZP%&Hdq91inap=VJG^HxJAh`P=P}O*t?8f7ybv@rw3_)Gr~+TZ zEDS2B)-rDbwS3kwyM%!btz~`!TG6nBInNlH4ow|FEX3A_)ox)6<}m+j2Un zwP$tiJ5-%w188)`NE4LXO?W^}&=5sXc^}3OYIKD^QD9_Xjo1ttypH4ml^s!hpc#tj z|J=}V5X+aK!CWhDP;0^ZB50z?W-h2}Y`X>&4UT(2X~Ow1s0HPg0crtxwt-d^`{{s& z+JX;*_GE@MgNE9|{(xpv!l!_W-iUb6v_Rx`P+32Xu^P0eV>+W3C_ZK|#()f;$v7L- zKAXk(9Tc-)8T~-*uV0KiKqEaZOtV0t(#li<+IiN+^axbQ_c0ZLS||NXb)cc#sZ4)B zP2u@WT%Z}F)l9jduH+`BJW!I`%rp%&)VYo68mL{mo9PRv#NNmB8nmGIFp~?Yfp(nf z5@?P18Ky$eB*8_dCQzs4GLtH(%XFPd5VRZWCQ|`uGVw0c9MFF8`%H~o(8#r$37TfL z=L9ts9S(tt8W%p$>KfMuPzT+O5!CFN%(w@XE%!4zf|i6IU_1-jVttU27vz$=jLe`4 z<{qOAXk_y~BNM2X|A=v>6*M{&_krA`wI5Vu=$ryI2KDBG`sYTnpvIP|BWT%-`61B! zujPGEZm~KHY7$#-1~v8V_>V$esTcz4#+j@HHIgjkK|^d-=Ab6LPabI0&37Is)cr(3 zE8YChfO1RxNl;iPYy+*5OAG`}#3$_pHCd7$g63dTVn7KxH67GiO3MTdjinbDrm4J`z2@-V9oQpkgF2yK)sYCS5WUS`73D5J*5Lw$fm}EI{6KZ#h_ZMk+Bn0{x&h*1r>eM z7&$-_OVb&pLA~u6j6t9=keQ6PKpnGLj76XfGn=s!w02_-V}?BFWNb!vQ2jlh@gS&5 zSiqPBYLqNwtOZTVY-N-Hsoc%@?lm-v8Zv?6)JPK4!ZU6Htspa53tHW5`Uupwv{(gd zn>b{HhVWhEK*MI<)}Ud%px>ZIL3$@B_A?qm0|uGFpkcclYf!*-Grk7}NI#<~sKYgp zQ5e*#p3Jx!w6k(5V=`!I(QL*r(3I_b#$BN0;tLtgLEc%+I1dypOBwfqRy8hX{0f@2 zSO-7;8XN zKyMhAfwl{MV0;K_m49Ir1fA{rgYg(>g~)HlSD->-DbrhJXmqQ*02Ktrzd?g}p?;vU zD*qg4#Z7@aXhg2?8mL`SlnHWj@o!Kgx}*X$8c-?#sv*lVL1k9?c~G!cOaiT!sGJ7c zmsKSLnuo4d1hs{0rh`Uu>kC1nQw@wdppocC#%R#+OADhLXs)Q0aRz9sVi#i$s7)|| z(H7MIox|7!q82g=M?$lb`DxJ9g1-=`#0XRc4Pk_~f?7wBYM{C^<~V3?Ol%~mBbCVp z8V)GEF2cybz{SVFz{IeLi-CcW@i!kY10y3N=;m%l1_nm`(BjmhV*RwtnW{WPJYry!{mVF8k-`cwI4KhxDSQkJ z6(vQbd7v28O)E;w1&1~t14C*_aXcio@q+^`DL)_NEG7nq;(So56kuQ|D9X=*1}rNB z11O~@Cgp&fzzPbnf}+&q#FEq$P!0hl45-6dK^De?;!-bzK@h}&+79t^aY1TwQ7R~` zxsl{_LF#pjOA<>!#`8feOG?d4&d5zH0>v>a14C{>X?%H6VnG2UWwJ6bs$_4TgG$VoB0g3}io`NI`P(Fz-E=hsp zt;B-N_}pTU!5j<>nd!Np2x4boNGt#)cy@5!gJ;W3sAOh=3B;((0y79BwIn042qY^E zijIubqP$d)yFnMDGk_KvF)%Q%WMO1xHGJ|Xdxrq@RPGDy%clP%S4)Jvi_Es>cFn|Jvocz3W1u&7BSHj@p;T#a};_n(9?-&#i z@9g2~?5&`o0dawcbAYCTnwkQH>lhTEsmTx#5+5Am9q$(88yuye;ppS(?iU)MVNhXc zprZhl^K*>|G164fRxqeAGSFm*kN5NoiT81J3=T0iiVuklaE*^g*dGxL@<~XLV}M_% zk59a_qqB#rV@OC)yi;U=V{kCY3?ndbWAJr~_i^=$_jQa=h)1v);^SSMeBwPEgX053 zJzYcM{T%(`;}r}UJOkq0T|>YYYGf9G+A5j~8Zefw9jLekdB@c+*fBmhJj^vH*wf!H zKE%+#$ROTO0Yn+V0vhB2ki#|dG!^0@VUHvP4SLsz5Kq4lBNK3Z7#lFeI|aMM2ZRK< zc)Gd8hr}x|1cwBLI)}tNxw?D$DS)g`NljBIE-5NaE>WmvfYiW#p}z4U9zm{-F7ZD8 z&W=9u!6E)Zj_$7U0sfwTA+ABe3eNt1Zl3P(Zb7cDpqd@OYH%|xxwNP#HLoPTxF{Li zF4NFd(8w%^H;T_JFws!UEQn7@EJ@UZsmd(KNGSrT)zoD0b@j!XBta46=@c5`s*zYy zQdF#|5FZa>WG0oCq{hc9Kt&mRJcC2xJro%HoSY&REI<(w5ab`?A0OfzpkRgwwID}O zDh~FHa#etYt)FuMOa$bFfO!8f*C00^|8QvfGyoap?Bf_5>>TeG?BVGaqF})Q&L;6` ziNz&mCMbC&K0YrsH3gK3Kw)0Y-~-BC!T#|<&S6fWZVHCb1mx=pN;VoADfy*IIjNdP zdPYX32Ij^VrWU3K=0*mFCaJo{1{OXzlZ*i*$$;JF=;9I-AK>g14@*_Pjv>w-8U@Ko zI`EX}84&Lo9Pj8C2~MH$VU9i^d0jhDi!diXvp`d!rbfXtARfC}@vae$&LJQjItoxD zHQ^!Z?CcmC>>BUv9}wj4>>3>GA7mcy;u-Adcme3)80H%9;pygS5+CLk5UOCn z;Oge&>8@a84%OxvtgxU+*p5P}TB{%-L>uA#xMU?m0>1}349Gy{vwAlEQY zP+6g15DGIBUg|mqd%7SOy9^=D0rCF+!LET|A38;bxCSd2V0bP(F|!2ZGtYo{H~*k; z#~>Gw!vkD{d=(5C&~to%qo1d9d_WK=xPx4s{QX0~rJY$kIF_6pgG1tjo&5t`<9$5+ zydlL1s2GL1)!Q}5&($YB%+)!>KL{EQ1{Eft+QHbsfFVA})zvQ~-ZubT!hmwHMnOpt zsN@7ux_0ro1-f?epi!}$%;FMwZtw_q_H+RSP<)VMype%{dAzxTkr{()fOEXDf}y!3 zLwvlmb9``UK!ATxNN{|ZW00eZr*nKnM1+DNgKtp0fr7CSLwtOBazjP9kTfje z2L#6ldHT7>L&_a91}D!DBV%y=Y5@vE1BQqY|KNCUSJwc4KWO0zseBC$3=9|`)t#qb z2sob@!J+}=Ij|WZBaAJeJ_A(-KK|hWL7tFo77VZXJwXZ1F~|*+^g-zH9p7*6b}~hCJKgzpm+@qadGnZ_W_m15Jv<#`o@Pr(>TcMAgiGkgPS3cLd4VA zKh!S-l!X~%Ll$ubplMv32k7tMo0W|}C9V0-EMR39hRxmVUC@D%zP6dZh zK#-?@kY`9FD8*|ORD>iJXX}(!_@$Ny6lLZYWtLQGDloYFg(^5JfTt=HbaO#XTu^mW zte~5248i{C3cAH5DYof(rIwZox@l>pdC4W2`FXm4QD!p8JeWZW8c;a}O&tXd1r!6JLbyx?NrMLp zgI)bx;zRu7-Gco6LKNV|J|gj(#e)()W}X1o2Bz__%m6K{4dOwa7DHq7e5sK~C{KcN zEVN4jNKf`AALQ!n>KW#$Q2+^cP&*2o5}cjm zJ^eg9ojgP0ef<3cKw;+N>EsM5S z)zn1kEe_3i#c~NFbD%Qk-B?)K{ihBbc1#tX=TG-)1o*}NFxCM8~z`hA_1@-A% zok2BVypLyyYmlQ4s1^bh!JsIN2Uo5E;C3{ug7ox*Hm5*-R4_5LG%+?XfmVE=YS_~m zUhBE~xH^LxFD^mxL9XucZm#j*`re?zI4#WtR3|a``nZ@u3q2Rl-~b=TNKi8gGnu)9 zie965P$L{1zYL+l9zh}C!bStm(o!%|&{i;nms)-y;1+KPC@q4zCuWewb_gi(gm{Lz zg6bs;hWH>yKNk~=_+VF8mv|!uP+!-`*aT(>IGEggJR^)1pw&}=k7J0Ne~@pyV{ou* zPzWfNQ}Pw63yL!HN0~f(TIgjvLgGMgQ6ih83 z$s5|70(EX&Kz#%M08nOxjv>G#gPcKm58M+Aa*jt*2Q4E(EuVmZ0Dn*~CB!wz&C%I4 zSOK2s0s;a+y(_4PJpDop4IvFA1!Jg~3$#3TbdPs|R@l%607AkIA_3JA5FGCx?gSB1 zuwZ~qXvAk0=a%M_WF{vTm&B*%NOXk-?c!A29{Y+XB$P_#j;f|^1=K)gqYzn_nW zK}A}c1-QHk_0a^EHYidCsi33^l7hMc)F1^_$(hAaJu3)X1~|rACkjP-_n2 z8E~{gJmlo#@9YhUH@MS_Q%f{bQj1G;ii?sp6;kr6!8}cbQ*9MAz*4rh3ZTIk1$zYp z1uKXcT#>Z`iY~)g1;V-vW6^XO5u?ipU6(O2x{PD3YvDNs5-gs6A)vvUc+kLCd_a)D zo2QSbpF1r0EI_SraBIWI(Kp^R*x$!71f0_iLA?wYS7&3Rc-MenPal8Kcz~g+u9=G) zs80cD4m$@JAa$jUpv4-r(F*BP1%q2_FzXD>Ef{KubRl1yCQ*(Ip;S9mEH@hJ*(BfeRZ*6$=~7Gc*I2u8^i2 zcytdU0&2{GM<*dwy^#et9uzbTL4JZn5M0JD)E6{9=mQ$S1C76ci(}9LgoduMfjPJ= za1QZ_cX1AnclHT_8szKh3l$7Sh}M8g2dJ8tCu#7iQ05{TM>FW}M_)DHva z6L6awlxU41X#ynS@8$*)F$je=Kad-hkY>*yYn?hdI(sW zL%dtCtE)G-SMTc?695%aC@xCYQGho6U~}s6CE$T}aF-s@ z!ZtLBH;6Y=z|r*th^F z#0)^gLY@I8padEe?-bysORMB67Lr32X1SE8hM}+3DUp-H8R1C2ousB;GXw+&DHg1f{Kjc+dz0Xw zK}tqwKRhTkIW@B^71R#{ci=q|^HOqB<4Y7YK|M3Ld7yqas0jw@pCilyi58@|Ir;>H zx@F*QEHv0b6HTx-uMtCLK|DD7VKn$a^9P{OE>NoH-h%hs7 zdr-4l0i_KIohvc}o1h7rZvf97K^0po)Ph1AqzAGhC?4bts2&qEJthzftQBezjW$qs z#mC>z9n`!4_0-|X1Jct44Lj+824xCLiok;@I*A3D;B=s=ke6Bll8y(fj4wzmD#@t? zClwt9m=18+s-pnYqXTZ~!rKMl0aH+?1UhVO5pMySDS(c+`#QP0g!lx<2M7Cr+B%?d zeNbf!uF(z6j4ezUf+2;yr=Nm`E|l#Up`Z)uV}ggST*E+v>Fz=Pp#h+QD^TYu7&L|g zYIp`|RJfL<=9Rb?<(C%dlvX%pmK2BN2d9>3DlmY?)2OHt4SK?YDS9n`(_j(7EQb_@s( z^#NCY@g6>|ehLQA@)|T27#{{|6MOo&D!@ukL?skrXkZE%Ry73=tAd8>AalEjk(lC) z{Gt+2Y%;{hhawM98d{i`n3NI8(5l}8k!lJhWhw0RDd#$e`!fbWkIR}lpSBf zfIO*~3tlP(niqgnSFS-pjv=AG@g}CAes@YnazT75C@?_{8;A;U$rKzMU}zQ}1{%0< z@>DPY^`neTK-D&^@&m_`bC9cJh-*B!o{D#K^z?Cc0aZW{b9|f~<3XXK02!hLbs8XT zL3il5ajng+r- zprKg}4X_w^2mn;fYbw|)D1jJCp#C%>0s%X5Alf)_5%&`y83}i70~1# zxYdqmY9c1Sj11uGNx-JKxCMY(ES>?Nh7))|!p+eavH->fY?v8nQ72@y+0{27BobWo zJ0%vUg33v76T(126Vgl#bqN5C&MFu{r+DH6f?R`K12u9JvvhJZ^FaQEbSvZILEUge zGtlxJsEDtppMOw%JgAwe0nz{-V}Pj80O{3afHk&2(|?`;VJ7jO0byneMi8q(9mS9! zM`zF&iitreLtaUKMlq9$<3U5=o_@~Ikv2m!22Vd{pHLUq_)_qs zj(ciJa7kivHfWk7Jh3FT$TzVlTfq=K>=_&anhOIpW)w;@^GZO8!PUjp(Z$DG!NimS zl9<3%F@y=Ji9stikWvh&VGRylP`}N{fFVAuG!N8v0~HAxY2Xq8M1jf#a9dMNAwE7h zI3x&^D?y`U@$n$l@kOaQsfop@poy~5qGC`B52_0!i<(-XW05YAe(~Xsk)V;)_;~P$ z2V#^7wAjSJ#Kg?N#L~#rz}V2(Fjd#k%m-R0g9;>P|9H@(w5OjdXyP9<6Xxj}te~M_ z1RAdgdk>zbf&+sKG6!H$BA^jJcAqnJZLmY@L(P0)A= zC{iKG%Amr+%*7=XE(jV12Bj?v3p0~Y=sY24F-x#7s1F|>;27i!og#*H1VLRFOUQ^7 zq|Sy72)aguxCZ$_x>exuYw-AtqhF*MyfbSCS`Y}P;7V#yThM=Yim<1XWK#Fy6 zcPYfsz}Nt^w8sdvBGfs+C_dOx!4bL|6yiRJU_4k5yfzdvWT~JHZ8t->;Nd9PpaZxJ zbB%EJg(?B_BU~L}5 z4zWqRp&4x5se*<^DR|Ha*4QwC$!J0cn}a=lJ^i800QgX(GpM#g4Aw!4RSQUJ#Vl4W zK$#AfXM$WogY&NO;A$Q|L5A8^3JCHH^Yn3bcLlB4f^^#AQD@gn^NKUm^HNhF-8#Sg zqSTVoqCAE8_>|Pd6eCc-$`Cq11sYH@VDNPf4vKdT3IdJm!Sa(4Xc!U_RDL0bu%&~h zP=AL8y9T*NAm)ZaV@8lUN01Dxl?n=TNZf%YEgS!U z;!PEdKs|3$_>ffzq+#b85*iR6;_L)k+2ia48XGIi&jbxz6jX#bJ2Aw^ySO@o*E#ux z#JhO9gVuMOA-C*vGV`**3umG2b)78gCBN-Hh&@rsyyu{p89T1_Z z02WsOv8|yA(9+SolH=2IG!^XZ6pRc& z1JR&qXISnB4Of6?h+$m{NJ<8cA6npPB7ssW$Xdwy4p@`JHNqLZveF0?i%^$>i)hIF zr>hGnZ^3E`P&ENsP!Cy$2x=V|f#M!Iz2xT_;^`Le7~lzNDuO#dj!vH7zJUR>vF{ri z5g!Ix00&;*jnuP3U1$nwnt+<|@!`-})%bYOx?CsE5CeFMG=Q$W@q})0hzAda1-ZJ# zLl!r>`3J>^M1Y0^z@-Ru-G)*DDD|g-7AhDj=_qJ`1`3K&A$(1SfFOS_7gsm%d@f|g z9%!lqJUZa#AL8le=?orSL-bDJ%VJ!eok6Wu&yYw3P&w%v04lBHLCstrqmTel`QQp& z@L&jEHV2tnMOrrp5r~fmWhD5@{o?pCGsxn8vv`3_=-T`xHPGW;}e?0;uN!TAK&$(>i;)z?yt+pa~Qc(0Uv2as*hU!{Y|N6w=HL zl#V>&1AJWlz)4mCoPLYp>9+thhyf|2u++J(K|!EYprC68>e)Iw!e)U}w;BqF@CRhWL0VPj`3M;1EbN1T={RDLWwP4>Y0ynU?kN^b3KsjC3+G z^FTweAe%jdEkTY!S3`{V{85Hi|R22kr z6u2se%npGCv8zK~52MLYkOEFs9{&E`@y`A(t_q+ve;)by*>2F)i|{cKNVC8kSF-@z zQPE@o`M}vH*hN9t5Vl+fly$)EAk>yRq^G2j2Wy^zld!+90l3WuU)crr2&m@u1eK5; zSO$$DMSyv{p@KQ69Ruq=ftT6&disTX2D!R`+H9b{F}!>-hS&}oX^9U8tyKW6#5XWN zEXDBgcXR=7k8y>}Ou7aI`3ET&!rBu-{=V^!VUC_Y@J5s=$Z}943REcvyLkG?d-w;3 zfHEAsLNN=+RN@E#(#U{PwirkX~bh6dCKO&c2xh<;5?%^D32&_r8lDya6r zRG&ff9hCF9_oLpq?*T}=frTLChrQ=$M8Q?OMqutsUw zfifv{IXx&1n^>aA!b(K&3PjU*Ge{@cH6U2Q(9(zjJU`^*83J4K0Y1Vd9u$f`uAtV0 zvv+*Br<*6V&U5h(b@FjlfNVix0JU}f-Qr=ZNnC;yj6mC*TwI+E!K-Q_K#N`D;}y&d zO-x}6X~B64lz6Z#aEHl(7PMnu;0{Tepqdz7qr-QEggXa?`1^uZt2l!xPpm zMW5mYjX1`Knfd$qM3OMSi>eE0au-s{I6KA%g-3u^bh;TR)PM#Ape2MRL%gq}vj=Fj zEgn9078&3QuI(Xu{d_$^tzV@52}aJauu{;72d$zn0-X?`0Ur#6l+K_v2EpD~mP3K} zufR%Lc;5svkOOYP#lv^qDHuVQn)*8W`1m`=L-Sv}tDg&~mPB9T4{H0zI|jK!*7#?p z#pjon6qJ^LrpjPTV__*8G4KN!w>E}sYBNUUNpPtf5ajOxTH@^L0!osQ00B1yeI1<* z!96TUg8*TiMZ7`00hYBZpmqXiH5PcEl(VCcb0}yzUc9RtXlsj~OT2F|sAvV3GN393 zRCj?27H}^TY$IsRU67+8xETpWyn zf~Elot3*iA2~Mt{8U{2j=^7mD8ms`?j|Ad@HVT5q4nUm_P1sTj@USa`D`-UqXa$*q zp`jT=L1~tRDk4P(i)`hdO9<6}~P6v{Vo@!yOzF6yon4@8cL8g1u-cE-5O>&yLSY z1nn6E#iFBAP>6!AA*?L`Pw?PE3cQgGwB69qoS`78G>rk=GK4q@%mg)9Agk@*`*6T3 z;Ud8MO(6*qIvx|^=pGMU>Z@SD0ME^kJ+|N(1yDH)PCuX_M$o9EdnjlFo+$%#=V*Cm z9w>mIqwxVjuJOS>uC4)~kOb|n^z?HF59z{2bmEiq3o60u9w6(zK+AiIOEmRB{ZUXY z1zL3h=0Il@13;7fpoLH1?vF+VtXUV5ACQ`tqEk>7kO(>!qa?M+P^UBp&N0#{0xuPS zE_Mrc@%42^TI^;98U{dP~$)+H?cTdQvpj0K|xJH11zb@09w=ys-QwZ zEgx`y3B1(C$Hxi0_{*Tezyi805}ay5OSHgY2+nCJ-C+~Z#t`r}EJIi^gOCpbcO*>X zjlt`j4U8cLFKEm=INl>3x<1v-)87x=obmDW3ytsvwSi&lHeo{%NF%q#AfJOK!dzTo z3mG)P9q+P4@IFQmTT>%G9@K{~C@BJM4S{X$Q2>uRXlZJIl)}nla4`egQ3@JDgY;L? zJP9dIEI^(Bb#V$N=!7z;8v~!+feek1xMm$Rd;?l+3~Ew=_YHgc zL7O2Ox`sxkut0MGFFbXIw9mn8aPm_yr~t4IRhxp%}nCK`>`Rz zuTUPeM0O4Ubwt3sd_Cep+e=~7@Fn@hn(%4(lKf&&`2rFHH3JZxWzZmOyrUnuj};#h z6zUr0=mQ$60hj0CP+POO1a|g9W8Ym+oEesw zQ<@4UbSi?tqw%0UXz>9Wp!yt?EFd&A1$p{~nBp1l19$$xtIoh_1+?BN-ZRA27nD$4 z-Ge+sA~gysKr7C`TWvx0B(!#gPsMq7x_dyEL7_=$SZIO=dEuM+13){WKntv(d(Fe0 z33n`z`xTJ11X-|*G-Cjn5ki)P#tmcu01^eDYE8iqoZ;Zh)*xeEpgf2y6d%tJ9}jBa z`3Ho6>Y{iB2FUtXa6iBeoS8s}CxA}gOe~5|%R@SJ0-8cV(^X-R)^1}}7VbcqDl&Y%s5A)pa+=nDVb z;&kw7WYB0wOnbzGXX~KCSW0K;N*ZWu!o$er4XyZiFbloAV+c78#n6%gw1~(P9BSYmd}a!w;L1z^m0Ou9n&4glc(fUQI)!V5 zXGnZ-s57Xg1!`b`%Pd4=9kkgv$Tip%wBi90^#MWt?m>>eI1&c(ToO3JfCf-Ol>oSx zT9sOq4?YzIQdfYMA%oVnLe~R;mMeo)fXWHb;VJM*Jxy!SvRY8D8`N-tPUz_iFIt(nes0dVW1wax`cz~l3c=d>ahHEfX3>1r?WC&Ta3JF2b`(GA`4}-zmKt27S**_r64C#aoSZ@H-qYH9%4)b;LkAU=?3_)jC1cOF%EG-z^`~#rp z4jIAPo#0y2#WT#<2sA+H;_4Ra7a!*D=>k2EATKdDRU_Wd-!aHN7!-rSAui6KfoBHL zP7el9Lm)W7(=gt}*AZ00!iOJCjlek|+|MOGG{6P4CKZ&~f<63wTp&}?zMg&>8lWRZ z!u?zn^c74%8@fSUP&Zji0kpfz)ydJtO~Df4T}asiZa2h(jx~XA-T*B;3j?nf1NEdp zqtc+Wnb6x}KF|OKce%iIRXnsq2rVtZv%D_8uCT>iD48jvBtH+S8OeLmqUAC0zDCp>W(LY(m`l-7Ooh+36KyIu-y#;PLvjdo=>n*l z)F=j3iQrNRR^NlCMUe-FEMTbyY55yy&#?(;-rUFxl=8vp-T*qRp`e z@(&7DFoc-^PIr*~7V(bYqhug1^7Rdk2cJCysTScSC8UTk##O`^Lt0$0C3t0^sRiep z)Wp2df}qsm{L-T2)MAiXu<;AT3{VKDM+ch!0rj*%r%FJV9LC3MF44a zfd~l17!!C?mLZmbEpQ{*2z2fNcu$P8kEau~GzBr^AzS~TLki&S+(Dr1?h&P+fpNl@ zM-*t0A1n%BLrAdECD4L=149O|JA<)}OZk8YsXUxPeIQ6;0Vg6*kJd=R0MhbA-lqUr z+>E?AK~sUj)z9BI*j>Tc6jHE&PmKc&F8GB6#0Lj~ijn}(+Dzzlx2vCv0t2XO0_|;# zcZPQ3VZ)RzuFgJ=L9XDUQYWtzazutsN@{VkCUiRk^iZ^1(1EcaaZuN;ARat!otT@d zU<=#&1aIww3vKXO3YrSF){wKnKtp9nN9I8$X?-z{RZ-9Y9dQ6&SqfSk25zp|frdRz z6zm}<+JQU->?A59{tV`_YA0Oc8?iw8L3)%_nqM&OEn-l=e z06^yiK;1CVp(V(@dBoxdl6vvU;DJlf_Hxh^HhizKK}A|Bqz?{~f-b-VFB97d(Mxfg$sB z;8lsH@KFfRs3v$tlm@8y&jFp#hqB_-C>Ff5!O#peIR#qUkd_8psSi%`@sJhLKCXW5 zAs&c=5>R0kNbd$cm)f{5sSW#5kVo~A_QDlK+0u9186%1k}n~3ahR(Q%K2%A;KNd2sR-Qd z^>k5C0w3iaUuGO{Vi{jhl%E3M=7=bqK!fhs$|lgDJLsGu2GF4!pj-@Do)TZA6Av0| z(Etg9#@jUFi@;&85uc`@tQ;S#35o)Z_%u!E)Hi57crd85?+V(22OhKy@Ntdz4-E+p zarAQmZMrvt7IB`zL7@JMGvp{Ea2|pd)8L45^fd%$VfdsnWaXEmj}LgWEo3Xe}&sSvhC|TLZMFRn1t_#s;ar1&sf+jpuN3_5Ktcv-Kn5iWCeo?H#e|T-N0?Xpm3*< zc+dnAbO$VGR+(wKqVF(4!9r`*(fKEFE2QFyj6?BXZXdMga^g|bo zL`@{WLn?XjkwA%_a=M73BL7{%&st~eb#udCMBh*zxQ=y_HBQXaw+ZCS-UMQ;p4P#g}1zsqp zU>XVyB+p>b4ghE98K2;pYj9*j;v35`pl~J7tiVMZ@)Q~<(2xq~!!{r64AK5ChtVprr_q zrA>&H%nGm_%;4q^q)iQGg7QAJRShX`!J??`BhcFXVg^@V&}lKCtu2tDLQtCsgyR)( z?XQEJ;ih0@3_h*S&>Ym@G%x_ARs&cSyU#$r)>0R6q z`&2+HDcxN`dqqGky}U%7+{COT&_0tS(3om&VpgK2f*oikAu9=dilqivDR`I_#7crJ zfXU6w1F5rB0PQkK0u7Ktav0b;w}5!?J_bVuSI{C27yocS1w%t~24`n~-vGxTSMb(t zBbe)hBZEPMRghK;c(n|8Vh2*B7#Wy=;u?GiC}?mOF_#HXA>hJ6!GHm}sRXuy2sEH? zVh)?MK$NSH@qW;fHgf|*(3yddwgqSb7<}v#vYQaR>m4(VK)0V8D_9tVy8uSu7=iQw zV5b*=D>v}YQIs+POL9(rajHg6esZ=ZbRh&pL=7T_n8(jcE!QYPY`V=$EsrnHEXe@X zJ|+3_iFqmT(>*mxbQBC=TWvu_2z=}he26WmK@K}b1vCx_Inxm`3=*Dl5ZqViq$Zl}ZN`9;-uT>yz7yv24w%i}m ztOB3f7Y`nm@drgK_&$hu_=z5%N&>u?#Ra^o36!8f%Usja(jW)EfL6Y^dHQ+AgO4AB zkN!i7Q$tAAfmzBKLP|MEK?4~b1uw$|)eX2x8;HX|jabk@ub=_Rywq~=*fOXh@cg&6(ykV54hC?J@6Xba5DgncxC3H4tQmP)~ccR zlpxvF98_e0rstrYY|yAwIB4kvIAcIIW&4MCxCTMCc}IXo6rt-Y5EBX-(3Y8tV~Ars zWSPH$4QO|$J&3SUz?251xA-7e$6!#qKLWaz4Bnjw4Yk1+`Wjj?#5?*0dxH8$;K|Rl zqWpr?JdODHxQ>EGW?qSchL)y=rlx_8f<{_FesMgq z0FpGsQJ}p_pq@Y|Lp=D5Gtf97N-YaNRtr)vgQ_U-L;=*7(6j?hBaj*#G~^9F9}HX- zgIXb=Y6K%jz!N&)rMsZ{L|B#U9AF*~J=Fs?-T@T?#{fLhx`0pX1*Zat%Rtcq7XzIR z=nFb#7TWCujV^!=y#Qqi*qk-Ea1B<_Q1tT$4eEn-e`-LPYHA8lQBb26q7b@>9=s3( z+#po|9e9o!R>ZXAA-M_ZxQ2MhAQ#dw8ImMK6m&uic+oCs6In=5C}_nZXgbgtbV4v} z7#BRW3$F7Nz||dOn9dP2K4XNuEe>3KK*u4Vs}DhIIS{+zKnFj7b_5icCgr7;#Al`; z_0w?o&p@YEf#Moe;)H@WT*4w8HiHLQO=PG5n>&LnbVF)l!)DJQS5AP7HBij}>WKw~ z_~RVbfHalB{WDMp0MgiIh>v#+_64ow(@4$(9}gQJ9}ye^I<*(HG7C#PS5pD3kRjeR z0yL28=MP@#0~w%zR14tM`3hjRLOfI+)bs}Jy@RwKkk6rk?YVIbiT4kRcXIXd4+k}T z@{2%?qIOQmM8Ocgve=lssq$hZE!w4fq*f#s;8f8F-8^406OmJh*We;_2k+16m!Am?Dh_4Y-0feL_w! zH-;W80c!PvW?W$R34mrF6yS3apaVg{XE8%H#zT)%hBrZi6~NMlo?es-O!#W!xAvfC=#{c+wEojR(&J!q$J97=Sm|g31$=ed_Su0;uKS?5F@83IzoY zJR}qh7{I5CK_(=@hl_x_BhWEbP;;gnGF=-S0$Pn60xAMsBSL~4;U}}BtAIYF#vSS z2IN#4&j83NG$x?Q1n5>Tq;*Bc7Dk}KHN*_PnF+We!C$yY_RGuaZh6bSP*Wz=N@+;!gQcIFEG(b$9+~Rb|LQc@lU>LFr zxy9)^3ZQNeXm{m!QyrSmz;Oy`Q!zk} z7EmyR4Qzn!S1^R0lL!kx@PWWkK?cz3@Z$KC%;JKa#L9Tk7(eK6Y@N)!6r`0xU>m?` z6*TInV1Tj$6lFb`feHA=22Vc^SJ3&zE(#i;nNIix4mBVi=rn#uAI~sXNJawhg$9pV zffvWcXJT%T25s8`4Hkf^SBP?G!^{M-O9-^w3oMU0e-iHK83Nw20h$0oo<@P6@dVl( z?v`H!+AW@&nqOMtpA4=}K`SC4D-bn7+rUwz7{KFT@vya=;Epb68;GWYhL(l~eElM5 zO(SUDLqSUuG|3$52M$6P@W4A*k0$6GS_KW5I?zhT98JWiih+U=C=Y`6Z-6GIgF^#A zi>e^e2%9bgRSpmlNHJh&L`>5cI$j1@od8W;A->>+mI}y%AQ2t#I7DI&Xxl01sCgaO zO0D?#l3WEX*m;QxAfG3K`|jX)gelk5fp-`|{VUj702BCPWlwiM(1sJxz7!)9@Rf+5 zoaPeh;~E5N+kq;#pb%FV%=1BUg8>vM_ zkU1al%2x#q1zk`L3CX3Pz6P1zncq8Re=8*~&Tk=3h^q@=(gO4INu*MKK0v#KUMI3ybIMOsYI5!v= z7>4?2A|D|R?lhn+VFjIj25bC*!x6OD1-vy2bkGbWCBwRq7NGVm(OqeHti$HZASWe& z&W`|(RbrWa053T)#Yht~#)rR6t86!Dr)Yz=~bizH^0Y1*nj&9jXxuwxBUh@C7U=2ZMt9 z#KHccGb`O)gTNofzIbDF+{yK5i;rP8|)6cfC{|E-5Fek zYbwAdNx*$O4e0t4$VfK00S&6~LHE{q27nJ7aSZU(0S^g*M&_X1eowy;_(DD-(6Kn+ zRqTjaBhY}9f|8*jsqw>VuRR}-``628I|WRQzX5NwUAPNsoQrlC%zkxr&D)Id;Q9yFqfv78k} zEy~hXP;Wp(3)ag-Tj2^`e}}lW0yJFd>loqa?y6u68UqFwJMcyj(xHHcpkV~iUTPNw zW6;P>a(-Sh^juSDcLP#cLB{3%Ku1V}&N^3sPX2=W%aA?%;IkUdU^C6g%_rFCVthQj zr3_<$jtBrR1pzHH1C5nJ`d^4>gUlY7#T!62ufwkJ0=Ji3U69&t;86$2C^+gO0gwb_ z$_|#vL1zU(j^$B+tn`LS1UZAoXut^{>AV1FFu+$zpe$*DuFHX5tp;klhIl%|n}3kY zh)`R5&^6ux;l4;qyiGxE7N|v_@pb5W3`p4q9bbotF_aW%d%F0*52A|%x0BIEl|n&H za7a)h=EfmQ){GTEXE}h5b_7kXgJzNtxBmHn##E8-;egnWXgh&dP%rw3 zXt)zR_6RBkLCgH$qKE?1F~E}nwBQ?B2!h51K?C&hp?*%GZt=k(L9UMA1NlJ9p+Q|o z(BV{|xHW`dya??r!p?Po#;hOcYFLaVPtbL#&>8B)cJYZNsTG+eh@&pSn;pSrG-Sn5Z~)|lOHfY>DOrR1 zjlQn&LC_UdMv#$Uh}V$nU&sOs@Sp&w1qSXqfF>lIL(rECf$JaedLcJALqkJ122j*O z3J=iQ?+Tqt(2O-`zp0IaMkV;HSP;hw%ziw>Jc@Ap+Ik9-tvo@BuuoE}p^8pgoEfX2zimphO0`KF=R?8z*=J4>Z8Q z#Ubb%6!7vd1%nD>H|W|8aLEno=74IYP(M%5immuye;-e0&k#_Mf|FZ(h%cJ!QHL*J z3r>)B$$}S*fOgP>?<)Ww8w9%P!P7ZB6n@zWVqg(03_9pklL0iGU}#{%0No7|Uj#}m zpetoSp#|PC0@0i9P!}gf<_wP^@2L_WuO!pU!-ZPp#fen zsHRW{UL#nep%GsOI%fpFdJr@&4G96zYJ_;-0MKXxv^4^4a>auWO;FH^F9K}|0&T;! zR){ZxT{~KoT3nh_5}yq|qXR=+!4^rVz!bC@G9HwDkWB#9grE^mkXncwbYMXN)RG4^ zi4e_aSt9&{2PI{gLN&I{g30$(D6{YFYyK!g~>mcPRKw~&3V&Tj4s7O+f!Xoy+jxM2{S zHw-~5?Lnu@7=Q*WK+_1I+#3%)rWdl32|TKp4Htvg5^(o`=lV=xV{Wj_4bIx2VNr-W z&>9qQQy%>mU(ii#;FV25pi}lh>)TVyL1W#Z>q#LC#6V#Tz3>w{!xIUr4#3SAqz*ZF z@;BZw1Ttj|%3Tnfktc$|SA*Gt*3NJY&U8OPTl0@*-KR9i}n>5h6!ZFwx6yEVpp>AlUZDMgUe5e>YMuOho_c2s3r~n-; z3R)xy&C1}RDtLbxq=ErF!G+j<0!y>t7B8%60G=c^j|Uw!g3>w&^7n<#h`?q@9YY)u zg2;o_?vCgcMtWjyZel#>NY3=cT+rMYY_A=pcm?fM1=atciVd_U#Ld&s)djSi7jw7) z*?FKP$_AieN9cyf%wo&|8V!sE`UbHIpb`pn0U0>r(1vdy$pLg^03@xTNkh^APH9NQ zV;{8vRVVS_6C5D3CR(7roU6Mh=-OpxpI`+BSMZt#1w&)#B6QFKP0(H&AJ^dEcu*Gx zv7-k$${QY08I*jDh^Oz8gk^aA!0lWcHAqD%?$?FHa8&W zU{HDk)$~X+wT1>JCh(Q}PM#s)dKk3wRts|;NJ|r1C2PbdfrHD%$p`6nJCxh*u^d3I z312)KKI!%>|z?-~{P`c>216`<$S)lZdnM!Cg*pSqg3XnGiEC1>Ix|33K@H1Y{n? zGYWLiE2NC%NiW&|uPbyx)Ko6<{N`X!{u`qUVfhA=n|6pkgf^awK{@4m%gwB_7n~S73nd+k*@p zI)YNZC+HFf(21eGPClRmJt3BX#@rD%sK6E+K+>fV&fSx!+1J(A5NVLc z3{o9|2XH|>4CesQ*@2)1*1n+;@xG4ko=Ep9K$0}5y%`T4s)nprg>OIr_4*tm;8&)B z8y(=)NYLsItkKiQ#}CvSH868wNCz!BNGytn+?SA=qM@k(5<>8cOHx4VZ^5fxAn6M{ zR_g}2PzULvWa$2IP$xj48r(z&FBgX}YjqUBLbaeH^aG$%YM?cp;E@8yV9?3YAiu{e z7=y2Ag9JDzw$abL2k(Rdr9d}W*%IpGqo55s8yLPw44jKVgeK0z^EGX3Oe{c!XMlgO zXM|CFkZZh4C};&{go2T&DQIV;i))yIp(VJi1dZJKg3gSK4|es{$b}3n!v!^RK?})1 zlPaJ!X~Djr#tFD@U;%2ef=<>lgLSvz<71FRUyY$-Wr!vQY{(EYsAdY)g8&|CK?b6seXpt&w+ng(TKPd`@|1<*0fkRv-4j6hQa z;N%C6BKIKAumD%k&ZuBV(3lyd%yo8z3>tz)vEqZm;Y<4>LgJnLK}XBM*55*!8LlA) z@vi15jUmurJgDS?dKzq3NRVR$yu0Y;85A564?1)wAjlKi&cU^KRohUL0kU?xLQ?^J zD-Vpv5FcM!oSK4qh`a{qY_#Ikl=yf}@OFLBlo#^37(Sr=49|NTq6wb1|YZbTuMq zJycK#Xcb}*>LL6lphFYU=IX$6tfsi;SWV(Vrw)Qr7UU2XS3eg|&{^7`!9t`Bz>sD{ zJZK9rBwZk-T@$pl3$5}4oc%(O>U&er;gFyk8&?M=zb8#AUD{pLl8GWg3Hhpnr0w^ICgeG&*K7z9B9ib@(d?zb_JX?!2?F| zULlU4Ge#js!utXipz#!><-G==MULPc1aS)368I_^h;eQK@h+aALj@padHRKbOJeB3 zVFnczCZK(H@ID1tQ$Ucbi>Gslt4q97kfWco2h!mfptc)$dx(>xpEqdv8thOQ(5;Q& z^I;%YMQMU6^AJ!QUBM8vI32Wn6|x^KM1cWuTbY6e{NgeNEd?V;qrx!M$43)!SrBCE z0CKk%*s}q_@t})M!1bRIG+ToP2O)E63NVibhk%CwK#cXfHs73;ciwgY!52zF&Ts)8!U9?#30l*EtX~0sh70JdOQZ`!!5VZFK*lP7%!O>I z&;i}!nVAM!aRoX71e-~adqd$S!LJp?VG?W(05q`$n)U;CVL)?);M?NjA%o2EiN(dK zMJ12{anQk!ng*Jv2WEm+>KVaL%!Hq}jpg7>J3H8E+G-lm12iK-;^AxPKuc-jK`Xx9 zf_#Ic6topUY*6zl!Wp{cP8+-s40JaRXb=-z0fFZ1JU~}=fx3&Jy^5gd&_tZ}SAulr zbxBDM%+KK12j49R-ard#SjI#4wIUsc0Ub_=hgS69@l2(ha?b!Ii8R;R4V>3!w9RA*0ENv0Z0JKY!3{i4SDy8+?@ns9-2m`ytC0KyDN(@J-+)$2`+#aHNZAB#rh&W}3?A|Z3o?Kgx`hU4 zScQI_yAKBM*LlGg9e|WcQ_~* zAif1lf&{?>Yfv%pJvT_}y1*-uG(d;-=oo=lJ{o{FyJ1nR0Xj%V#{kh>1P2*t6cJMJ zfKFC`UgCu*16@_;;_B=P8U=t{(P9a?NXg$d7#ypRMZXG$&`A`?S%=`8S2ZB}A~JJR zi!`A(_dpgFdipWM$0Kjjj|bln4j#sUcmZ?~xTg!~tVg#1#5MILzNw&XFObWY6~Luj za4L!*sI3bQWTYk-j%AsUIdEuB0WbRimCg$ABh(=BUHv~0mQ zZr7qOpi!u00AF*P2tCOrK0c{5Gp8goFCJMKv`i@8AKd+ma#aBBkn;@=h7A|{I{CQz zffs?`IHNr`DJL}#c0xO-W_Jn!Zy1jE1TCh7HB3PTrwiyjOGqe#xsc&$hIq*Gs)CZD zl+3iW_>%Yx1<;wTnQ7n!^%?oaC7=;P=u$6GUmIF&z}JBxFS>;(2bKMx={Q&+=IjVt zQVVWAgAR-aB|87m5CvV>`ZjR#cXSH&_X!PgjR#$S8RX~#I;}Xf0CeqSB5awG0%VUR ziWozD2>g;0(5Q|-^tc+(OoFE~Xonv}Kmjy?lbH-}f;obhH0YUInwwb~8ycHfm>C%x znwqC-8yi@_PD_JdClwE>dO)>4^kQFFw-?lqk9Q1lf)2hrt$#e=#WKK|~S42U6WXo(IQU4V^fR0 z2CDbb6FX?R8ho`Hd|m>!VHC0q5_~Q+thEF#vmuLL!K0CW&{OBYbD#mvPT)-rpnF^t zFpp3`8AJnjtRVaHVb`-mcsd1TPNivSso6pRc(!&~v7841vFM4)5~KDH2g1TdTpjXX%j2EQ{6k}E-#Be-1*?fAhJ z`Gxv|8V}%N0Aw;Kn?nXZ!C?fRTGNEg<-sx>I3>Ua(Lg(kBb*^Y4Nk+5_7ix30i}O9DAS0CMkCd^}>OW^zVi5d&iVH;SJj zW1^sI2A~BG=mbSbsRP4A_zV_ zy8?0(4$_&Fy5``uD#0H9K_Q@f?m)BX44|_#K;sGVzK+hIvvNYfD^Wq~y&$yS(5{6j#q{R)=wgTMkDgF-w*K%@8}paqd2 z`&>bd76m2H-S(L!nfZCe@x_^W={c#11qFJ^#bvPe8h8&OX!AU{O#|&t_Cl6cT_6Y3@bQ18bvCo?@SKMfRm;7jG890o{z2O84^ZIJ{OIN*fl=?puK z#VyFyH3)P{HE59-sMrny?L!9@a-iENq2ox13L+W2-V@aFhfMouX+p~t6Ad-kDq>wb z==Lj6^8~gbqarvpH?bfizbMr`wFG?7v`2nUN@@}4s8QDl&)^URLvu)D1Je5ma&>kE zol@-v?Et~9dPj^*gHQVcFa7fI@dd5j0qre?A1LJM7ee@2S-3wki<64-6H}5Ci%Y;6 z&Jfmr!loj=)Yu4h!X4HrV#rO+g>Q$47n7ju1xhB6(}qmq4Z$P#pzB$|c@vzQK_h*j zK|?23(3EI!hzsZ-K1>t9t2oT!O+a_L85kf|Vi|5 z(4Jh#bbwoER8(ZVe~?C^4rpdnLnBes*47Zz^3_NJu|U06(0U1ogaNn#4U#YbNr0|- zh8P3hI}94K2Y22;_ox^ufXbizG>wQ7*NS8}(8Ua}A~e`Fz(}E1ry4Otk2oz8vWOUT zdl2|mNJth0`xRxZ(9a+2574wUczGPCdT{gccMS3LbB_lPxWfkkLE9`1ASYWxb316l z20Y3E-pvd;5600i5;8Imy3`m_yC>#Vg3pJBdkS1|pzQ+!i-DpaT$q4&0)aZLVE=1^ zXBdJ(XAQW-gOUf@IpL62K4_tMsH*}4ypbFp5DY3MoV^vm=Tkt|!+@sEf2e3r2L{14NzkPaROn8t6zv?2&gD91uaxeVL+55jyWYEiP@dwM9X&9O!MLcA^wlnCi=ghoxjnWF= z#0oG^r?kQ|FS8^wF$c_r-Rg|09$piH=h5MMK{2eMfNB8byamVr2zpb=2z+A!xFeMh zKG|BMAUR1VzW{X08;Gf?Yge2f50NScUDg7Uf-K+!FG>szb`6e4Eigcfv>^cv4oJv$ zcN{A(ASn)VULfcYOK0%iYoPl^AhRE!(1Q#Hz(yglh$G^}5Yp0vEdyfH^K&-GNBh++ADYln0ds5${`QX5*swV8k(SPB!DGJh@t}GUG7JKr zUI527bXgeW_+(=Rc$E#^as@ik0(9YBUTO*G78KBt^T;=$=)gFdpfOf(dkM6j8ufM* z9R;{5l)4DiXaKdzO$_3VKwE8)0uyuungaYv&b-u$k_^zH1VR2G{tD)X(6bvswGp=d zHuw~9A7@tuaPt|ozzSS|#e>!qgN{xPfuxyu&@?Y%!7Q{O!LJBZUP3YqxLp$v3`&CF zybkUB89=L}5Tv>Yyigf>L<(qvTc-kiO$Mk))=)s5_pSiRgJnU>jTImY!4^WJ7QIF8 z92y(~x>zzGAl}K-54sK>+)4zkhk+z5NI%TT3{vF4YiDd59gNIC69S;h7&My%+G%NM z2)(HRlzL$i9G{q12}^nkpapm!3FvxD1zQE^MFWn0k(vytMMd!?4A8YZ3WjC|458pk z0Zf37*wX;BzyyekHh}@%HWm-+PlM76sFCUG7~<>^?;7Fg90DqYbRgp?kcj}$k#3;z zP7Sq!&{9QEPY`^)4QN{d=uGEOAL!MQpwVG)lLOpf z1}%IA4a+NNX=-SIj);J)_0xn(YAe8%`-18(&@iw9Xze+u!3cJRD8tFH0cFUDGN@4tYiL+0 z6r_X%g}N$$q5_->zy#RA3OLqlgWICu0R+%t9I&>80%Ye0#<9215hKY6>!Vh%SvZHUXMnPgxVlHSXO;Z8R1a(Ql<8JVyEMcb>YLw_CBSzrh(%{Mo+ew$n znhc*0Z)xZn8<=at zFAnt!0hijKqy{O*JpDpIxf60zC@7CZ?E?pLh>sI!S_piht1)QFJviTn20(|RK#Syq zp(79A{sSb#f#$cs5e4Cby$HSF1~h1(QBdZXl2VjfT&z=?8Jt-KS~;It5MKn^GX!n* zfD0f{t4Bct#6)Wl*(%g&fFxm|jMU^YMVoL3wG4v;JVE_Qq;0#fv+|q+OhEk~P}=}D zY72`o&~$bP?5GYw zpgyh_^}9}+z&r+8nlcrBN22-IEbYIUB?GW1;GK1exP%a zL8}NrqY3flsfnOH6ltkNsd>q%8pV~lI*B=%iN&A`9}u zK}DlN6IRtC-*g8V9WgcppY01iZ5g@%k)a?3H0uk#Pz$A_Y*1mE2!WwK4Drx42cUu$ zvi=AX72u5L@9Yxq;u!=z#ufW@*q}o{6pTRaPXA!&y#ka6hT%u!h|70u;h;1*oBNzfd=!zqaWY}qTv2Y zaA+{-_Dc=e=BeP);)2w?6io#N&_PE59>MX!0iN-$e$GLW0g!buphfly(8V(7a?tV# zDbpLFWqSC?A!z&-vQx{gC_mRTI7q>eAtfWZAU?G$HLnDEmlmuth|eufhj|N;i(xHz z(A27dF{XSFd`~Di@{Pdtf~N~w#Q?hW3exQYE$9daZ=sF%5AXopHd0|=U|@u?TpR6# zX|$E%CZLtukmLesh8kKxa|A>X)Jy@lpP>acToHKA0J?R?7qq51IMfH@F4qEGJ5Xs{ zno|O5vLZ(Np`9AgvD^lR#__Oiu#k1i;N$1r;-Ty8Kx=Un%)q0XpuKpYo3|5lKpDl* z5>g9-Lkk*}9^s%(|8Ab{o-PIo1{KamPR?#_Zmyu(%+)y_bd6!WuWN{hKWJ}@5d&n` zJ$ND(RE0t=8Gs&L3|d5hSUV3NMgXs$hwPd0bqXRlby|cpcUqEM02-4n$OIpw1a&Yp zIKfBaf{#Q4H=U3+$HGn`KrWP^p$C~Q0dG42RZhMEq4A!m*F%|^GeB0sfop2y85EE| zz{M5f)Bw=paBZ-b^!C_KA~`KyLgV7Nh0VpFld7zIK(k11T?w<-6Re^v^>5jHMz8?II|4Pf#yhZ z@U4HKI@ZS@G`a;kWgaw~39jSd8x2q{J8^Vz0WZJ=Cu`7l0;k9T$KYVdWW%?`l< zo~W058iN{ip!GLqCP*7vU`Ks`CQ(2oD`+AGu@^71I58)uD8IBMwWv6r*vnsRZ509n z;yptA{d_b)x1>Oh_Yd^}-PxfA?lYPpbsD2-vn$I8WS=Gjc+SkrAG{IE$1xH#c*N{~AL1LNpkZoYpr8*{6XFXU9|&^^bAjSwm z%}G%C2{|6t1T?h@-ZTX|U=dOo8yZ7qfN{tzzab@ zLk`G;?4S!(K=b9ULC`wa2y|8oq*{V+v;m)20-E80rFPgjks+vXhu!%CTH<764sBdI zDj1rWK=#~$FK&ShGsZjn`-4`V$HR?|S5Pw1v(PhD0-d4)%SUJ(OgCsv1#V1&PHYHr z^Z^~e2II*$R|Dg-T2gx$CUO*!aC6c~c9%rF3t?t_a-M_T?gQ;s0Z+BV`g_nJG;r|22OFW@Mr0Vs#2)DCZ}3$h zh76!%kAhqSLqVet@cYh@)Pr*pXu8!5RA|7aTfwmbUdm?xoyh@Rq6NBMHZi9>v9dTm zGcPAIFBR00Dk&+-Oe!r&jgJQ{)JKs9uh@sQ^PnAAM;}jjKTri5AM6+q04kRZ4Ga*C z0>n{^IjLnxhsc)Zfkrw~lS?!};^2)c^9N5KYG{Bbc)?2>!7M}2ke7y`E_h1O3OWM; zoy~;}rg(+=I{AagQp`b9{NR=vz6*#D$=?k!JqEg&7B)MEG&6=F3=1dF5U&UL*ecNC z?07$a&`JYPoIo$(gRD{raCP;D*Grg76d)l4OPrw62BpsmpAdHjEujwvts-#&4N_NqlihQCe<(UVJ=cwj3HW;3VlA>SJgIx<3@Q`3|%X4YUFk zxjY1kA<9GOO^q090-z2DZAt)7LV-_mii-E~cL#56Q!ugwm4A@!6W}E{@$m}am2sd& zBan7bd@1HZy}EX3If?0@$uRHE$*+h|hIP=_wr0S!DE8bMC7vp{J$LR-*?`?$dokBoe zvXCHuAJA#JpkpksUwdeXG%5o*ts9yPvCad+I-X8JA^zdcpp^n4IM=ThmE@Nv!&k6E zZ@_Sg5BGHQ1P>uYFPeiaG>8Ye*4Z({Py>8)QUz#4vl84?2df7y>O$Vt0xSH%i67Qu zjr0Qzej!CFbbA-5?t*OZ0u2&@9SxeFa@MHO$9w!}Pr##+i0LfoP99KO0d&tjOcnT86p*SC&@riy;hb>K5N8ipmv~Pk}94zd6;ksTke09kgR0A8@@8sHpns$ggVUuS{HlWsna!5(fwu7L_l z76!RWp#BKt=pJyd2fQ^v0kokV)G>?)A5@9bJ%m>n;h=s1XbKK8HeduA(g2MKK{pye z3Omp(@$q41;Du74$tqAK8xL|Je7^_!omOr|`FSN8khLs21!bT)(2#ua`W4WT=D{Z&YJ!&USCoL~?m?#rfOh43 zI{J7`U{80@PHsr~4Y`pQOP3N73IRd>Zk|4%Q7h174fy(S1w&Bp9DIy8 zX#FSXc2;oKKsyZ+(z%7!$FSA(pnHd4l{2hM zl@GA%4K*180^G++aY6rAT|SN$PhBF4qo#Ky)4Pt2zs;xs0kG61CBVbSOqAR zgQ5}2LmP<9%TGxyj?YX3FYQ3CwBc-|bGp$7Aq_z#9cWMxyuub;2Ws z$jwhljgJT2eirNr8YO@=&Y^9)P&X6Mv^MfCZO}C!key!O_6c$)1iCx}RIWfLtiZE! z;ANMF3?P5SLl2Zl%Y*s~(wQLU=vU|wIPj(b=vX(-7WCk59 za|UfTFf%~9<^nW1l9yTn+LsH}4h>}RV!L?A05K%%BT2YGB%nnmkQTcEuWpuN?gd<@z2SzrQQ=?_^A1)Gbh&P;+WhtvMXoVrT$aI0;`UV+_HZ(9Yfo;xmf=uXwPESosGX)hC z(8vMzz1%`UZMAsEFi_z8HEiLnd2|;tdrn%^BdE8AHIE`9Yx& zpIHoA>|d6c19P#0h6XHHKn*pRFldwnDQIAtkazdN!UipH(3OHV?7)>G?fUi)2!RyB zpygwpPN40Yp1uL0L9QTYgO4Qy_hTU$+6a2e1Ln12M&P3&U_}??ka9?G6qf#y?K8M{UH7BtWJZcS^4ly(X zH=RMf?~MGS5(U)Bd&uE;p&@SZhGw8i69(|Lg&^xd?Jm&aIPgXs(#jW5M;|sp0$m9K zs#4JId<56b;OTwPzFW{u#wpf&H_A4&oh^q^)1 z#)&5>`3luIZ|ejlG{}UTrZu>O3O{We9`&#*CcqnkAa_(i4t#d@4KRa_+_`uLqh4m| z>l+H{*~ABgxW0w|9ef;S==fL0kJAHbRn+GY*jJPn!_RRCR% z1LA4wfeLu=k-Q2TAQ>3nS^=^V8^Q-QuaV^qV^QTnN3SBw8==XA&R#{9H;%PNv?m}% zE~LmdhlD;fAAtISn6o$LpymQ->^&Z`f*IWO08dYa25140u60?ok%J0dL-1z$%6 zQVAX|@(Tz756eL2*+X2M<3ZWp*a)2MFff!yG+*;=@3m26-0LE&@3TT&jWg)4Ih61cPR+z!}#7zI_Ci zxxv$wNN4GRBLaFh7Q|xE{w@d$rU$yv0wRbh4Vs<__J&3-rZn_4OI*55z%Ih68(J3O z(hWVmAD6T_e#1d`P~dSnbnP`R!wm@q8-Z{$BoJ_h1VYY`K+r+Uamcy==uP#Yi3opx z*hv&vo9&=UWzeO|KAzsL@u0;BA)bDqmVI!DqhCloXp{}!`~{6eA)NpXDs(_?YiJV> z((PA3>heSPp@41>26cTjp-n(gUk;qp!38L|mH`<9WnkII5eiz_3%({5(c;%N3`H^z zbY=o%H7?rai=Y6AS5Q_4jri+8GoiC%yr++ktGlC*f+4I{g$&6->srvI9^m>3)T}at z7G^M&h~=c9Iv^M}W9jJ!stMq0*q~Jcc+?su2)!}`w1C7v2z(42XhmBXAhX$cK56Fh?fS{Md7M$}oOL?>5M0kVRjL_td-7d*Tg5aj6>;-;aer>Cia zv|$#+2k*fIjmAQzioo@YMjq(Wal=p_P@N9qz*^DB?K4n$11?q!L5KN)`t*=tWmxqN zT2=&NKBFILv;uTGKRD(QS0g}=;(-*~j((8}CT5`w(5)|^O`3@F zQ4};4Ku35(XG1ZUXBj|`Z3h?8xI6lwV{+ZxAeXkl*BK-32@Fmxamp-#tu_YV-~nxS zc=~}4{eT7>w22hzhH-8l_~J%zXrZ~$*dQLXrxt1excdxQIuj5ATGtFI-(ZEk8QS%9 z1{H2@Zf;I)Zf>Af9eCqpe5gwR=;#DbzYtI(73@0j@+TM%oB}}u{Gjn?aD;%`|A_H@ z&<&Gdha#dCvQEZ4-bewwP6pHrE+{D~OUx-v1r5U zIDes*b)ZlT3PJWfqxjV;JDFlemCIUW*Z3RtEpog715;{8KBTtS!5`Y0G0ni|2+RRnbd zBSA}CK`j)BMc|c&;Km6gS;1Eyg2a$6s8uim-Q@;Z)(c-w9`B95vKO(SJU$z89*bu% zXmN~!F1$>JT#OO#69Kw{4YZ;Pw0OhO*9mD|nK46gYHqMAY`hmTLF5TK|JcVBG>d`O zCjy^tjx?2oel7^ov=U_87}Smc9sC43?l~TMdAE;&C+OlUS3gjx2|d#c`L0mNjqkAa zJMasS@OAZ(7Z^c87gPp=?ke#03KmWXatHIzmRyyR%>IF^>qF|E}+x5Aj@|k zfdMWYLF?=o3Q~N7<3s%8L2dhBjSA554xV|w#gI+H8VV>^3ur*D;|9qqXewxdD&w@w zbdb*YAjc5bc#kLrO$B`gG+m&ky8?J;6KH(J47wZ`9Oj_93fxSCl?t%1ffSP#pwn1D z*MGu-7~BQ{9pwtU)fv2!5|Sf9^UO$6;00Bhut7!m!Ksik5p;%wzpnz+DUeDcKG@L> zG<6J_y8zYwfPRlv5+f|fmimSG3``TGaNgN~*1 z@N@&spg`gRJSPa5AvZ#qA%`a&$k{>8KHyQMKm`rhu!5bP31l6Js~c!fI`RS@6Icp> zPQnGdhCtTDz(={k%jG~zjNrE#Kqdf;K{I^C1*Ij)@kNQ{@kJW(p#8==@$tzz@$m(k z3L3h)AR$d%yZCYi8wCT<<}bCu?fzC?E+c z+A65WB4o6+6|5BE7)QO42vPF0Wv}ZWC>i22Es&8 zO$Lzzt3ya=YlBYNj&Kfk408n~J3}LejB-#*9~#M!IDikNz`B-TVesZj$OH_ua6xnr z!3qpP?E-uXz?&uTDL}f$4m73+s|Vrp69K{T{^3sG6^#-|oy1A0Ol#?CAnJLJ4-kS$sxfayF#X2B|MVSASu)n6Rv(b&EGL zFf@hV?~BMk@MF*o8RDISUEuo%p-~7f^q>3e{; zXJP4kSj2==n_X zVU9kqc?j_F%J5?o)S!KB&?qXjcMV?22|nrp8vdSsp5VhQK@kNyKPfjg7jz~FmJs=omy0cPz^hz1w4tDs$i?2 z1$gN^XjBZ`9RQsx3_G^M12mfi77g%m3;``=i3hhGpIk^$X7TQ(vf*DM5w2LyQ{ zEs_B@u>ykpJv^N}LtI@Hj6lUgP^cfMECr24f<5Nv8Uku~2Dv(idHT8egU)Jn^a*lx zbcs|j1YZIe91gw(7kX6;xF3eTO~WYORKW;T&6+|Nhrky&!Y5Zi-5$uTD@Zqhf)2up zFDa^whu*o0a<3k;IDCU0W@d7QlwxM!;=sTFc8)x_i34s8I0k#V#DiDMfo5?)nIBSQ zAZ1AK2704-6UYX7SiVOd<%MVk?VtsXXt*(ex6qqdfX=^E&;ZYTBx%AIHM_(^N@DQV zQ3dEwPHee3HUpic0NV5hSw)`+T4s|3O#leb z;aUtB5F8)s3mMG>yAHJV7k=Ocd@u)cU>dkn5$_1PMG1EB5U8*PjVQZ-7b7}?PCp9< zEo+68rI0QZ_)uub+DW)DtlbF~hOX-fcJz(+4EFbN3~>eZZH$eO7X-nlJL3~max?S5 zITpUG2Xxvmfu+1@X%=aq7y+*d!q~G2N|K;SBUoh$o%`|(hIIBogNmT^0B-m~SIUFt z+CkMT#7n`BpbMZhiggTijC2fj40RMBD^UtcigXlApva)Yz}VGXN1?Px$H>@FN5R-g z#{dL1VT~AsAs}%>9fic?9YZq(A`QsML^Hq;Vt~1Vj)Dcq zdL07{2Y{?M0Qn*b)%ivSCSc7b3OWjgW`r~sgH|0S7Nr`ZI>5jgY=)r`J|DnckZXXd z+X&)+VzysI2y5Z$JP>^9Uf&{0S;GbxHk zi+p2OM`-FX!4vr)2Ox|f_y;tOL}XQ+NNB>fC&DWHWz3g9Cii{l|Y zhTIZo&^lp9ch~q3*Wi$NU&kPC*C5aeeMqK3%%8#!_eJf~W6aaWLl0;)$jQu3)kw=N zNi0g&Ny{uME-6baN-RnTT`7^CTM(a{m>i#$nNyNl1eyB>Rb)Z&t`PyAL9Q;KQy-v5 zzC+vrKfn^aegk<7AwE9X$IJw@R|{0@W7H|&+gc2;w3xwljZr*kINJ<7cHkNm@95(i z6as2-g}TQ3`nV_cQ`vfo&nnLN-F@l4%)lcfHYin6e@HS(h5LR zyYTraU&jy+j7h0r1*Cz+cu#N#9@4o3uMq)F<(NUn`QsIe!AnFyEB+vHfH?C3G&zB~ zb|f#gBpGz-dO>Pxkw&skCa8A^6H8Am0d;~Q!a4>ZM?x;qfG?auT3-cHX$YFqf-u0d z??^3nNMqeK!VNa{1KM1f51I3U+#pzlype{VoNYhC!snAqF6^$>?EXjyZ z0yW7r(sUG(ODc2};G3?XJz(fuH!OQWZqb2GYr>it1_lhU?IfVn5TK)Q3dmxf0bwTb zpat8|<_x5R1zxEMFEPM}BSYuYK*v--_ZB7=r9;aHPy#?~Jp^xFMW_L-O@$OApmlZ7 z4322ELiWjnh73(XLx$kV2=FB!pwU0@$gH7>xrv3bnTa{*WD!uolarI5tN}{zkkfi{ z!8a&?PLV5!2c2tE91W6-)wKh4jx-sZJVU_e^njWspp)J*3lL{6gEJ;_A3Dr4#5Kst z6W$U5%OUoD!^IIDbXOyk+r7Ze98gK-=tY1kgM?^xgYMtP zR>*=I;|B4dLJBfz%(<4k_*6i2-TA0J@*p3^Ft4<^l>LjXY5PgyQ=@fxC#12^mjk|4_dWXnAFTxThl+ywwqWDl+c9 zj>Scw&5p&e-HzZ%3&>m!wzJX#T!Y-eH#xxXZ-zJ5No%8nJPlsG1wO|S^;{9K9H{xu zfMa<$^gJ`jG4Y@!E8vBJo_?S^;+(;OpK8)zj0 zq~L;YqyS$m7Y`c)2PHVrbgZ8{XhEZL1+;KNyMDtXTmf{|LU2%gkh3c^7GP&7IJtx8 zNR-NftPoKi!xtVU+_2;WMIw+-a`*^ zgR)ek&?X9T+&2i}y%Y`TL6h(VLJ@gbnqD4w8; z;b9AhL1Whju)%BiQW;2XPt1jZ(Dm7fy|nQPhI)qPrY4pq#-;`qMn*;!=BBB-#ujd{ z3w1!J1h}|@?v4g8;)Aa|N>42TZ@n62!r}8X6#F zP(El;k_Kq~CRhv90iaD5koBY*29ODCUsqqyByD^==sIoCvRG(Ba}F>>94YB)ea4Kj=&L~s+rJlTNL7(+|{L1~&%4^_~G}NETcUfGers z09WTwAMkJ+XdE^;$k{^yG&2qA&%_6Sj!gz07NSne!zwiqM7Rhy4wzX@+YV<5+4AmU!h9_f&)B_k?Sv0P&7d{Bf!cc zbJ$7}P+0)ohX9&ifld^IL_wpR&??%`6}0pgwD=1Y43Js?v6mfQN+VY9hvt=J=D-V0 z=y9;1+o)arLZJJHK&yN};p^rY4C*_A6A$!SdvIS3(upfdEh#O^D~>NI&rHU0{tb#W zXlENkJhZ`BQ4*h=Uz8f};p*t(8iaKG7HrHDGO!O?fnx*;A0udM8#MRg2CBx5AkA%1 zzYg60RRguHH8t(*K(vCgay+Q(4?1n$!w2n9$Flg090kxic*NPH(By)2mMUl|3v_TE zb}%XIU|1ss3((mgpwj_B1qgf}KkSMI(A^(~&@Doc`V(5-Lj^%2(V$f_u($>_0YEKY zm|93b5HvsyIo#JT)EAb+Lp_{5kuS?KaRw!w+|=BH_>|P*WLW8g=oLUh5wr~n)JOs? zNCvM|32<~#(9kf3ujK~&-^brSAXv)~RnXVb+0abONI_cxbRwHUyrYw+7WnQ(W2DWo zpp~egON+tF+aYZg4KN#8HiPD+K-B}dz3KM|lgOG^$U{61HAJ=%$8WT|7gA{t;$t+N!k4LU4 zpcMh6ayK#nB@qQ9&~#9kBWOrnAwE7muQWNnED?Mu9aJ@FsKp4nJ{Fc3!7=OPy29duFw-m3szq77Z@f+nS5 zp$R@J1UxVZDqvxLhGi@RjK!3o;t_pheA~3o=1PKe&1V1vGeTA*7kAfPAi`r(b|~2x4*( zR0Kn}*0?Abn}QD5bptizgF+M-0s;c!p{E{!Oawvqj2%AL*?dAhr;{8ki*P_ky&8jxS5NS@-JmlNA&naa@U&WdW`Q-5 zSW#+jen~1=5Ok200^%YVYXz`CNq#YmRg$9sF%vZ383ei$5uSlT+1mvy>U&PW9xN0eHUoS}eAA|BKd0jFqaD+P4G z1)^aF8S;*g2M?lwua$EKo!aXc5@Zw~>>nEB>P_GZ%W3 zsUZV&n=TWMi*ps?<6$Q-YA7iv zDOiD_Qf_K)eo>_odbtOx0W?4atkeUS~`c)32f>Pkr|f=nb}9iRhEB7j;mnxLEOP}PI(`_RyW>(az}WDe-) zK1h=ToFyG0cQ%0YC@9!KWjwS}26G|%ry0PPI)JbIbWs4cLt!U2LINK;)C4{&Q>i2~ zLs6qpq9*^#DN03e*KaWG*C;_;^_8 zgI2miR)_?-DHyyWQhW(kX3;2V7bZ_G)MsLi^BFgfW{f1D_}g`K>IvBgF&;{WdZp` zC62|#sYNB8X`XptL56rwe?KQTQ1V4y=I9vg49d^oGseNE#X@ExQ5HHT7AJ#(4s_Bu z#!^R^eo#i&0o?)tUudUm7muRR0KPmDSr0riz^MwLn$V_aaB2y(bp}4!4bBC% z&;sH;T!KKGloUXv3#`Zt@6v3TQ|Qv>S`4`-&jVcgXd0uFlSg$OYYO zVqyWl2L)||Ns)<#t{wRNLC{bks80;KRLC{L8FnRi1*pdgO$DGcq8xp|iKCzdv|kQv z7-*ejW_n&?4k$%vg3r!{4A&q{_rOM+z~_7T`TNC#XDUEF2GCL=Soj9}I3v|arl8gA z44{=1sVSMsCGp^$ZlGCs&_pS09zV6B0CWm3SQxa*7+MrUH+F)OA#D6R)CJs#genMz z9{~ZLA_JYr46iIfClrHwGz!LuLKNI60-ZMl+FuSGWCiuJL8GvsLIz0~+LZ>CF`(hu zQez{~3UcWEtl$ORh!v1#45=j-5QFaf#a!BJ1l?vH9}gOW18;G44E9wphK~D}6jdfC=H!4*bASdE ztS1NFQ3%>tg)(3c+E?h~6Ax;3B8J+)eHKH|0H`qoCnv=xkCz5?eWUr#?!{Rit}g8FO0j^JDEK+D@0T>V@_z&mUd42?iH zyMWR%tc~L5>!|?St{M;wTHE630-k;V_d(1J+>G5AKs^iC*lJ!uX-PbMnhAW@IB4_@ zt>uGq<0yFM5j3J4;tCl|237FzEmxp15YT!S(3x~029Vx8sG$o_2!!N0SBFbgunoswjov>Z(Z@GvF#HnNiB__Q2Q4u+19!M6Bnlxc#G{V=l7 zRHy;9r=SOWlq5sN4Zz}QIiP_wc$)Tg1RuKK=?ulzqkSplaC1V4If}+g4k~CmsippYpq+`3#w)n_3chbB#6K7u>4>{MOY)0h#SUoi6llUX#0M195KBNq zw4fT$4cg35uu}jFXpp8Wr*qO=i&mSRj2UW7wch4D28mNXI4`ancJx&4#g>Xqpknz!21IgrOO6MhrpC#<7~n z=f{8tFfcBU1fSsoyKTbF&B(~m(9jLKFda0==@X)no0yfTlbe~BsFRzRl>}lXfm$da zVNC@a1(19axWlXgVkUy81VF4LNOA+|gs98RO9B;R7>!oQ2311^@XcO^43M!Q&=hiJ zUP)1EVhVJ$2r80VR8(3}!T`H6$QOLxH=O4f0bVW&9w72Gat2MVgEz&&YerMpq5*LB ziEwoUUB&_3;{k3?I(v8rhx&ptwh_{~l;HVR4}X7eP<;vRrh)Z)y14p3bAPf>><#2V?6knS{GLz$4JmX81^&+ z8GZq;*D?YDH^itndw?9Fa{DKajcJgsmFan+NWC;sxq_PIQj1IIh2egmd0M?uX-E0)>2r9bZ z5e;hmgGXNspgleRvecsTqRf(1=;;#B`3AI;y$dQlGSf3sivo%=^NTV|DnVoR;rZFA zd1&(zpfkQ<27#_$2KOEz7n!3R6%G}`WhzLzur#$a6*Mpc&eaNPISds|Znvnx?1-LN;mIBFX>e?0PD8LjbfK-4^SB6|wk%Md5c|6kX7RXCX!AGCM z@43)XfUGsuQ9xd^4jMuO*VLej6tsdQ7<}e5WMB(A>IG`OE5O@55GjxtXx*ZZlN%_P zf;yC-MM$7S=)nb9yo>;`I@`Ukmyt|jse3Gs0S9lGZU znLq@s#6#*V!OjB$H46eF6+kQJd;=hd@PJ1h!2Nabs5;uAJ{9mf88kT!UEv1t9;n>{ zo;Lz{5SH*!iW$T`SD+d;9(*AQXbgt@Xa?zykH;C$@M0l2G8i=L3_3a84>l$a+LI8F znwJ8*5zIL;2egvG$uqN6?_(5#IhzLSW`fV} zK$`S51Rd%EDed5+o8XoIo>8u#xf9Tkm#bfhYfwDwym`n)GvI|5u6ZS?Mb1T;pt}`v zz~azOEwot#E;Wo8;{E)gQvfKr1AH!UUOwbvA@Irx(0~y93`XcxoC=2E!%09bQSf<0 z8o8PZTDeerJpDpo!{LZ-D`=4uC_F$54xm#%h!fv5@<3@3bl5a}iV%Dw2IyoBXw?xP z>=7CgALJ4qq@aN&q)-E2mJU`F9t3K%A@_vA4QvGy*n&Cq+uNb@>Dpc1x(5-bKa z3^b{21gh}CtMJX? ztq20|oCaSC2Ab$J1~-F(eVkF7K!&iy16zG&5FhRs2}=H;raYuU1!ln-Q;_P`5!8{-8ybO(0__Bd2d&)&xf`_4#00#E4qQrrrd?r%D3};onpm2d8(Er$ zGPwGIPiO@7S3v;{y*vUEFmS;d=p7*7d<_!ybb~eTz(SyZ8a|-=5>rdiSGGXLH+5ha4}$uI3e^gk zX|VB71w~u%7(HlXKSZsjt{rGv6lrgrf~^8fzqLYbE&RxD*mz4yYEo%BWXB$8)LjG2 z*MTgdKv)PHg#nFb!AdBQt?*7PSQ~~h3RusHwpOTBNClnTR*e{@A)p`S@Msi&fIAnU z_6B66`(Xb5!LEVv zzK#*#vIF5g&>Swf0t{9#1}h8!jqHGOuB)44s80xJ+yj>UK}Uvw)|WdQDAXYBv;-Am z;6V^@>IW6$@sLg+=tv?{6NXUGfy^MQ6*Pk3Of3b_>OJ`0GsFfA@EkJe2qxHU3)EBK zyazpy#K$cd)VKkkND}Yj>I_=z3f@3u=&EaJ>f**wkXV_MpO^w2^Til2fbM{Ru3*KG zhL^+)t^vWIi>WP5;0J?4?*stliOdvG<^nJ5MkH8NdAI_|mKke5D44=x6lqNkWQ;f-+UEt0h9j+XKv}JX)D$&#hF@W99Pi?bdh@g? z&Kuw$XC{~!Sek(kp$B_TL5raxI5ju1AS1sh)ww7&u_QGJb}zGUX-R5@2CUBsk%WjT zfV+!e-+>om#G~JI4&HqNsubfv$A1RLhXh5&J9)ahy9R*;;Mp9UynH=D$C883tpc4o z4_Yzc=2$Ulfj2OTZ*6=nKXrVHAg)C?! zAJWOo1zkCmo0=OB76S3$rhvNcpuIHiAsz}wre=tQ0BU9hL5?c{jdeg=3-1-UnxbqW z1TDM=MJzN&IR}`6+TExNtifdlXdEWBs3sh|O-bnQUb<$(71f=;Ri-*Ez2 z?h_9RDM*V7Tn0ebt-yxCQEEU~m>HoKn4rdvfw8NxxtkmEh*glIvunJYqqCsY7$Gr>H;A`@jS3@#Auh9sw}7;+U@MY9C&huv zeq&gx6rlsOkrCTEUsxp%F$i>ut8*BrJO!O24W06J1s{e9QQ+d_4qBlV?4e*#VQ3Hv znr-li4*=gG?-~LcTGA;1_Ygo#(7|9Jo`NlSO>(gYh@*)(SOckUM5~^$R=)*_MJ2^h zg$l6B8rD=$ut&^Hfg9(D1u|9&2B6ce3P5vOnmE-P!A&GiJ)%QHoO<}eO9kT8o08}r z_$(2T=9`mfz6G*+*in0KKK_m&ph?jHe^6h=5xhUx)z3dTNWl!YD+@8~5CXcF2wXVD zgGwjxofx3=guzR%OyYwb6~Hq~p#ji!IiNAWU`NP64D_gUV~{Fs=)4Scwiwj!231Vp zsyWmTw4ebt6A39!pyvUCnx#maS_}-3@~LA$fRCp$cuz|_cm^-T(H(k70;FsPH$T9o zL_DO}!Eh_MECPD~>Q=Ci5N-u=!NWoFrwfmRH}he4*?6%bh*bX5do`8v2e z13t&a#)BH!Bh0Gb-*a+SeSs;lY#w)=;peb#e*7Rpv6w0LKAk} zBg9{jHXrB~SjZA4@Htp;sV;tenrp;!l2glZkw zBoynwicqafOi59&Re-t2(ZvPDo}$FOl=!^V3ee$YhM;CPxPt_~{sFX&!XGpr>+2X2 z0=l;pRMdl)I)GC?Xk<4CR9SiYdAJ67hJa2iadz@g1GiT^@^eyBi*!mWJo7SAL8I>} zu#t7p=_dtX8{;!l6H`))KnF=`faa(mNfC7Du$HCynae3_XBXiyilysx+f zyrLVl$IUDrrUYV?2I%ZZG&Lp|YCy-8WEP+a$Cu=n#OI{uX@DlZAZK)dYcp_16+9bM z0c%Ub)?^#NH(Mj^JB066a*8)HFaVv(YhnT08sqI6?;9H88i8oLX%tj|gG*C^0em<& zq#}i#c?~ZS!8U@T*3-i?1au;TtD~ErKXj->!4Q5-7`Scc2D;li4740AJ|M`^-4}FT z6XXPG@Nk=>FX%i|aIXFmI_{T4r*bVnJ5@CfEu4Z{?3j*;B_UC739J3E|GqYzMh~? z6WE*ZC0)?wU_fwuxW6mtQbo`xnooRkX))+JO9e~t@;lHCnBcW7pq>xnc1*aih8kE9 z>F{50fd?M6gKX&XnWl{m>=X(G=&m^icz*!0C=q@K zF}M;0)q(NQX*|d_MU0LdL>9aqC&V`hw93LY2z1*hcqksa`YHspv>h~_=@=XWs^TIb zgD@yV&7e&UphIarU7W+?K{ro=dr2Cg36Bt;coe}J1*oW}b9g9REy@x=XnPP+_JfZ= z0S6VRb_CB=!dl4SaevVAGEfZ-D(XRPcLQS!h6rP$csB*53MFXFf$kGBjE7VlFjK)- z3PA-KV7J#hLI>Rp%t9GJN0~tNgT?^hM`Q+r4+DnnJq1-A{=S}3uJNFn#M99SbS{IV zPdw4Dy4nbcBuLdisTcPss$2 z&_Ti%=9duAgeti26%RWmSR0ERbQuNcf@f^f;9fnXs{}a+7_@X1)bY_wv ztOx*G?-?BG5&$~3Poo4>Dr=Nzsu@(c8G}~}z;ZfN1*}9w>Rm%dpTT~B$E1M?1GvrQ z>*cJ#2E>E6 z;yQzhBn8+_44@_j#$t2@GX~Hle_$6w#t%Sk7JoN4NSg*+f(H9|27n8;_;ApzACLw{ zFlc-Ylyt$Z6ljwZRN{aaAVOjZ(ljxGo*{%~0Va4SA$X=YGc6w4yfT9{#z42CBX)8_ z)`FFQm+3>~K_i<5kfTeYGh;!u6vR$MdkH)>2EBm;%H7E$Y!v-?#ZV5Wi z2X>lUAcc2?rz^ya_1G=D720$7WY{3_Spp1UH`uY1fdn=g0R-S?56|(mVy!FZtH6_B& z&4q4AQ5Ccb7pjRjEb!@EtM?&~-lG zm;{aEKu0z$<4qMzO+mvj;3Ke26^sl)`)xs;IPfkMa76+-ox%uqNC4=bHb{R3Ha`X_ z)u4qI*e{?>G{OEp@oquB!BOxI5@?`6MHs*^McAt$Z?mD z0uE8efQE8FDc9dE9x{jrzEcKy#~$cPaRnnYEl{Nhnx})F#NikLI&%-~2McID0Zv7* zehOsGGbBo2HI^BQBzWQublV4VA!}+1t4v*-!yS>5p)u%u8t8y6WRWh&*`VtUz~vdJ z)Pfc<2B1+Zu%tO?rx9o#D#+2r6EqVA>kJ`szpDYt5E#@fr1M`O`<~$$h2Yp3xF!QN z#XuTC6&)l9P{IbaDu(QwhldSV5*nhgfP-Bd1zvj%b|X0OK-(-qEvQgm@E$qP0)^s& z)MWU+MT9AaMuZa=H2Avq8HFQfnZl( zjojjNP|XUWbnWsBz()?|q?V+Dj;GAk1YK3^;^OKC3UbiA4%l^|!GF-;F8rcjSiuX* ztKi9G_-H!#yaw0`Dd?I~=!`KW2B9;%;2{X`fmo2r2DGCpw*Y*LwxJHFyfD&%4Eckn zUp<54!^|L(;FW@~2{Evc5%>mK(0WYR&V+cVY4CN&AOj6GbwFEoK{v{pK=tV;fbBqP zO@od$M{LE0w8_C+VnAgU^xk)H(;OrSxw#(10&mfPN^7WTfP_GcZZLug+$}SYH&ieJ z9RUqJ5+0OD;zQy=drb>Ui?AG|0TKnT0)doij=u38o+04IxdQ5*H<&Q!v?5nm(8*?? zW&>mk6}Wu^9$$tGPGqJ*hnqpO(TZRRUAy@B;*`u3(6VdLPM2a3Ljf#>+BXNyvjqjC zO+y%hr}$u(b0FQ)0a`%s>gpQrgS@~AHkS{sMnJoi+(LbP;)7g4)BT?QehLN*!G>m_ z=64FL`3-6ufUmfLT(@Zm%2lBKb)bb+WuOf}pxGW!_d5@iyg@Rsop(v4;AS9ec;zhLCr1d><4UWVVA z3)1v30|_9AU;TVN zVbvN~7^(-ts5b%*wsKv&y(g7&nnc$0J5lxfK z;?lg#!qQamUVeBh1hnRd&=J|Gpm@Z7{9ZCb3S6szPA~IB%_C-J48b8mq0S-DGb58h zy+a*Py45KtN`*E`!Ge&sCPRF@Z!q`}*kVv~7hJPIx;W5q1}$GQ18pi#Nli>ayIdZ0 zw|rhc483d3_fVd40N@KF(@~Idj*h2KDa;wopzB5Z7^r*fO(*-1#VO$bqFAv zZlW_|L7P?}s-X8wxOg}R#5;zD__xjgNz`lbl-+U!0$lnVeaYnv$2F zk_t=1I>mY5>J$`BFfrs^3`iG3g8HeTYo(!ySxrp=H0lXyszavH!CMz>L3>QFNrDD` zQH+Bme*?o%A5Cx_jbR*UKZ31-2KFN>L0g(&j)z)r4DM&Tg7)-z`h^C&Dj0(9wE~x} zu#yD6H4s#X!pl9-*bP#N1)U~^Y#lICFfe35t%(dl3vD4)E40A^-jfvK>;bx_8oI(9 zO-926RGS1x27_;~f}Dm5O*|o>$y89&2{hjj6y_Qa-pX%K0bAMzD$zg-aiP;gU@qu( z2}fVhsVm@-1Q+Pt&CnfQiJ;@{3@X5f^CR8dTmdbNK&SFE#K#w<7MB!dCYLC{7@!Tp zo&m0)jyUw}v4C)2BcyGvW^SO42($)7%)vsAjWPybTnLI(*c2JaKOxXE+5kEZhE%yh zigD;BqYy{;csJ0wYazk$pxX$s?>w{sPtqW5lmHJkgU=Dbn11mLhzIRE4~YzLMOp@> zlUV>NL!pa(V3U7(ATdzs0hP5@K&-q1RpgMJU67kgG%9p5bt*L#K)p;zRSH=egM8PA zC4;Lk=q@$|W7senIJbgVqk;xyAc+kr1YJNEX&A;EK`z07SCQa08^{~5d#_ym{6S|D zg3@(}e=zJOY|uzIN{1UH2l6~D*=rb@LQ7civOMq+8_-pDAOYCCr>8%7jyWD|tqVNH z%t4U~ih20ZG-%BO{IqC~aL@pPo2R>{3#jz+1dS9b7&3r1F@x$>uq$DgabuZ}aq$es zJ0;^^l$oBHmzaYzBLhh}kRS~}_P7B$f6#E1YW4& z?+X=Vh>r(fRq5#m?PP1{8X6cGYJye*8k)r;rdXgH26)j8TE*oY9HId0$$)Yx=zLfO zLk93(2ylrHJMRh9O$8?_c)bA~;2~x`uMu=TFU*4_pqd!edIc>4L2u6HBo>!|#5Eaw zL8om&;sZ8e6Xfa+N?V|*1&#P3op{jJD=iJ!xi0W?;k7iuN9KV}T#ioy^->VkkCQ8? zu?OZO zTf2}91|A-QmgbP9CGd->z`+l04xyfij~RH#1ibB6690-&9zevVGi!-p-9 z=Gwt?W#IAP2*gRo@$qmr^af$@K6cpFjNlL##~^o5i2x2mmmq&%L+}6`w5$jF5GDq> z;t{-$476u66tvCH4F7sfFBG+65CI>;W3z1MOQvDU?7f zb|YMj;$1==eSCu5d^|y$*5c!fQ|Y-a-@@Ih!J>99W<%{4lGb9 zYGwj+DQLzL(q0Cwhl>vmfsF9P!#ahK;tG7S4D8k-C)io)u;WYPD@yWD$+veXpN z0ho{z{S+WFnRz9}@%ecS;4>Lazz2SKf{#B1wcp|)6DHs(PSD^8=%T8E{NfTwN6FPU z-pLVkTny+WDtLLNp`e6*5S0Sz8d#K~z%fB9bp@SV-97yj7(gz_FD*fLLVjrpw5kWyGLSiQ(AXT*cIcuZ=ymi4 z6{euQ9H0~c9<%^y0T+r09jJ{sSV;>Xp@@JCx>P_6(5R?L(4s?)L>*8Kq@j_hX=`hsP*bCzkpyCaR#Jcl>mU+_py4O5gds@6P{9h? z;P!QlbaDkXvcY=|z{CCU%?6+o=}n<|7gSUQIr@T11L&DV;Bo*`_kfS&K@w(&k9YNP z3=V;2N>D&S#y$f4gG1tjeOz4wKxLn^YcOb~Iw&!~CMO|T3Dmj*mC>M)R!=|Z72L_1 z3dx`o@<1DP!Nmch?nIsx1DzmZ1lnB++7#vJi?sF{br27J0uE#a7U%@Ic-Rgz)T;_1 z19_l*Xi2Gg$r-tcMcMHAWzdzspp|UUTMexhB0!DEAXiA^)+-cJFM{Vo;7X9zxFc1B zkdP?(}unuuln;0xKIdy_yzx&F?esvoq(8q|dWoezrXI_RK|DdhBQQ|JMium)>< zNIY}{yaITR6?B7O1!%Arl+7R_O6lcTF;|&T1O*Ht0`Z~D=DJX?m=o#r5C_&2r z=wNCvsHY9OWDa>W)x-p}b{=tWHfS3!sDuEYu@4^Lby0xKtAN`0p!4tooSndD`?&fk zSb)}a#3L?QPyik8gBV3asemlvEg%&TY~c~)_*nPU67V7`$eJ`z`x+A69^t5yCr0rG z3gF2T*f;^C;0|*IA4CiZI9QGVPjdOY1w%&MJ)OPd16+eV{axaHgB3tWcEJYW<4Y7Y z!FM?-=z|U~!MGS38fl=BO3-x_pan?~i@^CB(htXRJx*o;^j-{&0??ruI-oT`lf_CA#xCDW^m?U240X8hiF&wlUA9SuTsK4&!=>ytw z3|^oHO3Lw|d<$xnVkzFhm65X}boG`~sGEWr^kALh)V!2<(71SRG3Z>K_}~z4@ZqgS z;57vx9(b7n{4{Vd4>li+)Chwm;SfUuBgjEbMxcY5AayEq8z5*4Ab9;A_?U|jPbcsu z0|i5*eJJjkWr$rU8n8u)(EO8GmI}^5@NFuf6b@0Npb5IfJt!#N(@jCw&v(I-paJ!EugonX3`@>)Rntbq3$fqF@NQfd+i{ z7OeFOJATvI(a+z{6ST$=v^hpWDacLN$iUE4&sYi45d*F60S(DPdSb=~46cyofPa93 zxd~{T1$@jG=-@2y;Va-i6kG_rzZ`nrw3!Du1$uynFhJWfbU@33GY~TZU@mA(56r+g zQZ>{Cba`*QpDTF3OmK*cr#~q3#rrxsdmt?*g`Nfv+PaE)uP&%_gnW~8n3;lEC{jx( zAjs9#HvqKsPQeh;dxzA-o>8s}hM<`#@L&^Y(Uyy+JLqBw_y!l0kqhu#Ie2&#wDSyf zfE}a_@bPl!)H$@* z3@%bZcQ$}(Cs4f%8k!2$C`wJ&$;d3oFV@M)FE7Y12K9bHN7I8VF_1El3QapZ4X89| zQ-Gn3jfMtTlcp|AT-#6+JoEs)>tevfqDtF z7{CmCvN?+9G7B3t7|#=|8~+>7dK* z;*;}1CljQ?Zg)z_uLd0p4jSYQ0c9u9t>Yla>VQN+K?oAnP%AD<23-=KnWh0-0RbKh z2MdF?^TOtbK!zi4{skGOsi}jqAsDO)bVm+oGcZWA2{>dRE`w6#JHdN5G$H#rLmWfEy?VinK7k#k5#m;2cF&lAMwB!`LFS^M z1HZ@xJeTO6S^_Th6N|H<-3|i=SI`a9pwX5f*FXhBBglFT%q`c@5w`$GU&vB6=rEUo zlK}&Govf2*h(dfkj2Ryf&Oo3AG_X}QAU1T34k+t_*U}iG&N70EiFK0a?=nxtSU~;Q;A4K^uIaL;>E&84&_%EQdG;fVXgCoSY3w zfZ&7+J{%w1l7py*+UV%x8RiN)n-g?PjlY{4bRHZOpcyGepgoECX=%l&C9ord9dk+o zQd6@L=SMk}rlqA8=~RH)`o$sn;fa|gu${Y(IVJFmERs_*%TmEDCU6Y^I{HaNp`Z++ z8^S|20whw95)u^ZiZ<2;YU#y8nt2AG(|zNEgFq)Xf-X^j9UtoK;R-q;IY0xn#Yq8r za4%R8B%-4bpIe}#0NWFlTTqmmte~Z%09yT!pQfOt0a66=cW!|u{D5ZAYWR3xh>5V~ zJE)-xuDe3P`!*n>!l0TKR1-Nnf(O+7{K3l(;=`Rl?I_T(UeJYb;3xsDf$?;MOca0{ z((xb>P&*YG%}4_{xNi3YZ6F4nSDT-#0HGk2uaAFte1LzrYf!wWi;rtOcx(?8%a8;C zTF?hO0ktSYZTO81nsAG@eK2HagBG1jE`~+@(1-u zVfh8z$A*uVAgXoH*$5V}eT2~T2idm*8Vv&7J?-M^;|e-G))97l3#<(S>QO^)E`oOE z!E+d(HA!IeVF3p1Qh__Bp!Nu2a1gY;-2${c7PNrWHO$c`-q$t6!yj}As{we+NRVrQ z5BLN*us6UF_0U`>%8yeJ<0M$E?sX(3hTulXRw?so{18wn1swvcI#OG>) zkC)W|O)G*n4&{QUiu{8@oLv2!JwW%CgWB5_KINGOpw%sqS_zsw;At3~LO}rx8i5TB z2vI;fm>?JmD}cuT5G(IM9W>aqG{QcAM;A~UcZCf2!d5aM z^^Z)@rc%Jeq@b%3+~Ps25@B^Z=uF38Py;nSG#I*)8|pVCv&_-VijQ{-0QYs`-FzKE zx4(ksc)`;j#Yi(Dh`}e&6nlWPlY$9DPG(**(bl4IT?}Pt2p)R_kN1O5 z{&WQ$;z@;*KW!B>a-m0mg7=Pq=4*WvAVn*rUlZW!>a9@#@hSTCETA?E=!!3t?K+T> z7ZywLt{QndnbQ-Lh~ijN0f-3nWh3Oc{8 z6f{8!ua2N)1=x83E)gc6(IVKA#UNK7#|Y5z*9cd_mf1pF2|Dc-HVp-ey?9WKz{YWr)fK=7XHf;=my^1=BCk6$0ZlhTg9IF%;E`sO zxiU{b(6Tj9m(nRD-pL6xoCfbvqShJUhACvp8fXaJ(u@IRg)C@p0@4PAu0#eGTHqQb z6hwmVmVq`^A$#l?K)rU*aZKRhYv>V1AU=5G9O#JDWKi!K$@CWZM23_@`pkZjDpbfsvIl$2c+?v&70Bz^Ne(x6~rD6^ZK^j~T zS=6B+unhQa496g6576{xh^upmMowy(rb13?nS!kXs9H)aO3sJ}joX9nw9sS#-HQb( zErMO0{rz0P(;@MmA+Ellh;Rj8kp zLmhoQ-6BCsbQC~~p^yzp&PXg$(9#5H(N#cd9~J8;c9Y0Sc8vX0Nt1j>f+>rZ{$>fP_QfuZR{JzLp^3>;cQ?5+6fCu ze&Ax%*V8ZDGsx8iG@J_>VsQlxAA?5a{r%h(EMeUXjNA`uv4R^Q{=u*rY*3N|w;MG; z3tRJxQp*x^ApV4(@)RFml3M^uH%KZ#2`I5RH$EQeZnOA!4F#q0;v!B}104k=g@};g zkRXkKU`+)j1#5+(;>x__m^{du6Qx8Y1r4yVppp%C5t;%@_&^(I;N}yk6avjp201Gj zz}9aejSwLx1JI}_(xwP_TNP=x!5Gw-1tm2X&~=c|DPEKTNYLS(29}^xHbHG<&{^W< z3WgTO@PkZIN^x+Z3~xZddo^HT=%In25)0p{MKDc<@rHzt@PR2dB1N$=DT+v#go^_zP5Z>j6v`-8wK;@Nzk%a+xgfqxF zEFN@>GH78Z(o7+AJ2iaX5V~;?dbJU#FKPfTdq86?kQ3fDkT!HFXu@~7r=^AZAQD|> zG3ZQ~%;d!45^%5A5Y%jdvLIbz1vLfa_5YB(09wEf?kginr6Nf|%N@wTsUi5X2+%Pk z&}!S&*EPu9)z3K+yipChsSR|7T5f7ldTL&BC9HG@mrLP}po8haqrSx@MJ4$uX`msg zlKeE#VieFMIB333Lqj7^Q_Wb@#wH**9wZ1Upfw>8=o$vvTIU|*9|~EL4l1)WDqPD_ z^Ge){@=FVJN-LZ)ONvACgHua16&QlS^PWMjh6;v8&`}1%_z>tY5U6m2Cs#vDs82x$ z4@H2+I9)J~fCRUJp&?-kDS$C|`Wu?Y`-S>~T7;<;pyffSDGC^iKFczTGm|oNGD|As z<2960QqvMkb4rvzoq9-}hSEPMBtFc?5wvm7 z6||{M!5Fmg27GQ)yn+d&Q3aU^LAsmE2UKq7CFUxC4&Ve;5TFrwP(*+hbt!;Xo-!1a zmVhdHP?`iWH7Y=3h$-M@aiHcQ(n4g=Dp_a%g0+Ie0CZX(WP})8e1eK;&?u&;W8_pyqTCXhaLPu`m?8%?Pw!O9Rf*QZNejQP5TZZEsVnp0QF{J({7Me{NO1==)@c9bQ^e)KUi85 zF))HS1}8TuzXCEY4`P9~-)5#@?6QSTSc8%g$}}}vDhUZPfG<}!0T*(Spd01m!3ha` zL7_r?T2Vy_XsK&yL40v}W=V2}h9+WRJNN(=R~Pu=SzlLQ|Dect@FD)twTqDbMXr7> zo{oNq6zL!C1fBp@FoCVGLOFaLI&k0|fLJ0B>DoN-A{Ezy8&VF_~dg)jR9UoZw*vWcZZ z1nDUofktg11HZ5%8$hD~;h@V^K%H_IP;VwU1TumOo~6(Lvo$s1<4ZI1N(xGf;!8B) z{fx{M1uaeRw1g(K&F%;)6irMKi4?qu8Itpz10cn*L4|=Kq@sX~SV6|tk;be*oAJSQ zh(@wbs!ook0%$9CvaTIy9sxAu18Q|>Xdw$|BL}!ZnxD|=JLp7*YlNe72&8{& zWMII6dc*)^stdG+7j(xmc%;We0ck)H`Gi;4+!3-E#;LE6JrSUK1#%j2aHx}?e~>R| zOdotMuz?=9)`lGq44$d<%P+}Hs|2m^(E#&9@*yIc3ScgT1D>D)4I9H`LGw@sItrs#G1&lqj^x44clwa>OAhRfCQ>1Zjp{Km|(L2r&gn=7V%DH9$s# zyZvCZ;uFEQ#%jP+Yg#LStOcDz0Bvf6PYDDKU6f>iZhit!)~2VHK+9Xu)-cqGD{w^& z+I$0UC_{26IJQ8IaDTseL{dP?tKbc85E)3jU8A7FFSQ&zmkK^h5MG_bPJaMJJ7h<+ zCS-CO!U2T<4tNDQF=RXbKym37q0QJl#A4g8V_< zZ*aQ^$pX-VS!n$PHy))ML)2^vCKk|Dx}Kmbia`^Kpfx^_CAuK} z;3`f5v_y{~K0Yr$FRwHw2h`fbXt6@&VB3^HjWB=5koa)_AQwpO3-0TK>tWQhCgS5^ ztyt(aUr2jk!5b!^Wh(r72-uPcBS%5Y5I0imVAU?AI zx~m7gYzB0u09Xb5NMG3SX>n>!YH~?@aeir0aw@n|O)Z9Az^bDF(QBmux&l}eeB8CM zf}tgNc|B~ITmWd19H@T<+940Br$EaF6tor0V5NwgGxWSvNQH=cxh^EygIxolEf$b0 z~pd$gG?JgRf_>GbnF?N)HoLNC^iiwIC;d zqLy7H$pxT=e$YF2k;P$7ZuM=eXjbn%_s8I9|1`Qj6P9Fz#D!`3P zjm*4~oYb;Z&{e6`3aBH0per0oatn;0v@y=1zanfyf1n{hrQH0oOiooJ#Hb*`Iwi1z z)QXbQOioop9R<+Xp@EKq30OEOrv$7GBw?5a7Ah*v%t0AoL^sON3Z%|TLCF>|$f%>B zWUB_}f-Vn0<{N_sA*~dUhatgZlb|tf&{0SEd3m7j3iu=(=wUaYMr@uA=;C>(0H~+{ zZ7W7Q6bCYDnp_4`1qyy}orLH*LblqP#v4O+lt9PSP`9IKHk&EUN)^M*RJK zG{6gF6_k}hmAj4tNRa}#qF2y{tAm`J4Xy>iQu%2b&{hTb;C@K!AU-2Cry#XR6SRm? z32L|sFF}OP2| zWR_&+=N0QE7ni{f_Ch2r$6)Z86QHd$pv67$;Dar&-DwJG(!dsSA!;fGbMS}`XcPp# zbt6~-y7?cZ92zF@RP7gH4BIIPo4SK;<_47o;KNlx<42%jF3_ATxGDnGNr*99Gf+xk z9yE~)Y71nhAg!oJBqY$xWjuIc6?id1Ja~dd0e(0qs2d93tZRhW&j$?(L^%eTw+G+C z1G3e?6mn7$WDp_pM^o%2&tHFaP@ z$$p8s2ySU{a7kivwo7V3Nd`hqSwJG_*w2#GqGGsUX$Ab05*-B%R42d8^~D-=Acc~;35?~rVrbM2_4BchHSzFZRB(d!d7;G zCPaKgBS0G`VC5$`?HRa%FCYeY(1SyQK-&O8QvmS8eZgfQsE=$6UcKW6TAS<&S_|M2 z@9*am86OW?#p@d46bg+W*lK*x=p3vc4>ltpBp}|`H&g+(A{SDNfE&_|!QS8u1)kxD z4lR^0lm+A$mADn9raI7rl8_5uC3;d(REQV*%jM z%q%WR%_~VP0j;|S3qX#D6DjQt9z{iy}G!;Na59*b{umc@58C*SsK}Yu}7{br8hIR=+XO2LR76C7L zhIK}ur{F6X8k>RUY`{q^vl!IZ08Jvm)@Ujqou3O?^$9*L7qk%@QwQ22Aq6YMg?lI_ zgViB&DQNYD2dHR{4+sHWH)>(wW*!P}6h?-4`1>g+6;zgFA z3Yy3bceL99VMiH(3oXcAGceQBF9g(aRe+uh0lHTWyh-^mrck3<3F zH7w&fpli{K}H*k|!!N}Mg-k)%Wo?fT{KfVxh zej(D54$x@0K?P*K+5i;vP&ayngN~eYbqscmcMJioDbFv`$<55mFVX~UOb2b=04+Cn z4b*@R0HWXXssm|iAq#u@`3Hf{dCr0vr2ra%1)VcvpveF_)DLu$MhMEOcA&OHAgKNa z2R3A&0(MUWXl)a0S{pP<3m&X{hHxbU@bMeg-j10khtsy(k6^uYb29N>_eh;n!=muN^WAJ=WNTh<1DdHY# z(6(nthZN%+Ea;FhWG2_h$jA+rt08R`jGnKdnE`x(Jh<=#AHd@h;1&RC?m+wnUWNl& z+YLTa1~g0nUGIo?8kGeki5o*JZm>y6NBO{0BI2}9M85*Gb^+TaK=9fH%Xm}d+Pa`9 zH7&KM2vq#1q!dABYj989fVVma1-ZIFSC@kFUXZJ!vj=GQ43g&{!zS_Z#h~>n@kJW( zpgX2?;^UKb;^PZIN3B3563gL|3LsepkTgSlJb2}JPHJLtiLnuK?+X%qpjN&qxMdF= zx`)klqg-(i54yqybbgv4sQ*v~zu^bcS8~eCODw9?KwJb0nwQg1K=2hb6>JqCl{tDR zOCi)Lu{ag9lN?-v8R{q$r{*HoutDa^z)OXFT>acbJajN-k)1sK9D^d`;d(%;Dl^kS z1tW?Bptmb4K->npm`gzu$%)_@Wzc38xZgmVS-|sy4DsOm#=y0VL4|o51TcV4QUa~9 z3k?EYLInvX=Xr>5Mh?E*5?sC)s%?pF7WAHv%&>iEDV^dHnZ0PoEkba0>v|1Q+ zqau94eQ zKtst8hOS*&PGWkof|>%n0qW!E9`EPx2f6;))6X3|@nryBJP#gW1GzshKe4nVA2c|f zngTHhG*1SS*2HNdWJ70=t8{0n!N)1y58n8I3^8HLT%eOu!KV;A`uKq7agh!Vgcq1bP{06M zyoM-lkk)HM)&VG_VwTTaau9{SX-#wd~S)8nE2b$4LNi0bPpEe3lRzV@o&VC_2NRvAzpq)F= zAuP~X6J(U#4YVpG1bpWv^8IQh;3+52nKQmYpap`EEC{_I6Eca7IMzQswFETLnpByW zn41czE+JV2mNHQkfa_t`Q0!XP2JXL~jYJ*l*NZl;ZXdGx631Wi72vl4`CpaLj zJIL8j9-e-n;cm|W=#ZqZV}zr-D<~m=t69i^haq%9Jm!)ULt{`~2HxulU2+S#{S3;9 zk7sa-3~_}_VkkOn4_nUMg{2TO;~HmG0ZjI$;s8wEIueWFbL#A zw6({eTM`vCV1l4)@BG1~qOO7w(%1la6$EHmHzc(YTC-vl3p(H%zGekWFGir% zW1#i=(6PQ?A7{|46H;z61-I8Bhtz-)2e?xekC^TR70jTmIiSJmc+X()%!j9=k7ux} zi$+0(Pi8Ub(liAP1qfR~Q`ZhG=$e}%m2-M!kmJ7jQ1UeT7d<>c~gR6_buY$2LY_TM$(*y2o zfTA5za)5HBva$l?6gsdRa?WsZ^$Ye4i3BxBAu;ENau*b6&8mVC19YMZ+eo2nh`+zD zqhDl@t6Q*wp^+tIg38a|F*w*2>Fhn^@ft)Y5qvTXuC|;Zs2vU-X!Q>WQ7|;Hge_1B z3UT&zMLnb))SQIRPl4(W(BWMrnYpR?r6u6XQwPccRm;#i6r>~`Dh!(8g)%jvtrzfm zAYUIB=$0rD7k17Bq=BeW3TgcLq~@iUWPmPGElJG<--w01Rfwuwp%k3hK!QP<;9agg}N-L1WsWq8F6gJpOrKkjt7{PG1WoYN8ff+wl(StzeO!Y;WnNH7yjO^$ zJM=_F(6BKi4?`~~Lrk22CYPXxB)KRU!wSHFV9;rxzL3?ypoOZ?9#MQesBL0~beL|i zvwwgqc=|Oc%+&?dz)wSL?E{6Me<)}YCa>#(ZNP$&?#Ba(YB!eGbkWD z15D6{)S-FQ*%5O74CvgAct3wfA0K~b1(>;>ej%{K(+y#6LUivy)8FQ}roYYO%^ASE z_^}^$inK)xdU7!+Pr=q`An!55v=_999$U8(JThb$51T;*b%>44KzX3;QVI}$T54iRX;CTzXx64UBfki7lQ_-&ziKGTN*JL?fETXxrYwQvlFLjE|!)q{H9>PxYWXUW~xS4|p$v26Rd%GBY(N z1+?`bzBoO#BpE(h02(Jyh=&QH4kHw3LbDenXF_%YDHy>gypazP4}cwRqhL@0UtAA5 zg$BG)7<6J;Sz?h6cvS`XrcAgLXht9&RDFRq66fcn#6wnQSu4O*V3RCMEK<<6RVYi$ zK~fm%hfOJTi7#k39kiy0x*L)$KsU64vrBNKpL0BTF+z|l=op6h;BdzP&^g=CzAp4& zSnwI$SPphKGBPwYbi>T&hKBK=4MLdH)o!4BJxt?`FttE7Ab{2!8H3gwf%}}`MgH-S zjbh=BpmWPWc^=%_#=2h&bcT}~Xsi?3&;VaT4Lh0$QVBrD8$fsZYA8Z_zp(fQhX?fN z1NbRKpsq2vhXR%j@N|n02QASHMqa^W1X?T%K3&BxBskv3)5*mt9(1o1JjwWl1iOa7 zc0LDtLx)~rJ!4QS88p}w0@`K4fOP5^sF?=dM~5T^o)LkZz2+MntYBzjX21~d3f_iW zrm3J@25J_CfR-jlDpEjCD zbE0!c<|_QC^)Ra4N$QD_)tGcn<6yG)kQ%UHZu%5Vg&239#|7Y0eFtr7rYxAHVa&# zQ-Hem0DShZh61W6XeiGXypR|?@C}+G22CeJi~>3`od?ZnZ2NRLr`B7GAf9=*AR3X66ic!&j8e=7T_T%(83B$hT_y*^igl+kWhe2kFz^UEWF@nJdz5zELa`_*O58vMea*PqwYsTOK9u9UBhruXww<2Kf7d4)}+zS+M}` zGb~Qc1uyP~ZZHCEf7K`k9kv3RX+V?IPy{-#ZgJn_hrSCf6QB_cz8mZw8T1SQGNg%05YY~IAAvNoQ{oRm* zzQV{L6tZCf-1Ua@N^0CMV#ynTMT3gYEu$@v=`|9E%1r48lc;^%CMie2imC< zU!)0|U(<*$11+&h%So+BEGklnHi(7h2b4VT=j#cb>IAI}249#5nt4*tg(Y&0N?5fUhxHuQxnkAFGP6++g%IVk%ed*L+36aQ^6rYjsc)fAf&4TZaYKdA>}M+ z+7mQ>=;!L`?&0Jg6z}K~<{A{@8SLuo>KCG5%m7-Q2pSmypR|BcH$s**nJAbu1be!} z4#EPB7Q};&1_qT)t`PwmAllb40yI_#n)-M0bcYOzgGTfaty)mQVdM&KWq}0|GkUn! zwnDbAf;<43+p~lfZP0KufQ$&68krbbfbMz$onrvL=?i?=cCaht*i!873+e|*+|ickU8a<1>lMl zGRlv1Is&Aw0XY)Bq9|Aae3O|kBqf9DE>Lv|8uQTrkMn?*qG^LpdIPVVcJ+1giG=O6 z0G)fJt)O9~1y%@ZrGnZEU=HMlR+vI?6$;&+;o=vppbfgRGXQo}l9rhkxNrs~x`2Ry z_yA`okU0?RK?8{j_6iz?aI*r!%pg-HC?dW-E}-_NfhK4Y0z5i|D1|kk%SOPf+QH*k zp+2w_5a8$wz03eI!%zXbCmrks(DDrM05E8b3$bDYBIM}f!{8VY5D!|Q4=S-W3^f@b zSHgJuDa6OanDOxp@$sNWOneDw;0@wU*AN#chIq)-OniV#0CZj^K3>7t#L$QVJiHDX zSyuoJzJnO?B@C`Xj((uoA<#i((5+0c5(VEjCOq4g@b4%>-AbfjrGR6r5F}@#W_lM_ zH^)$)5a=pMEV&+BqJhTfK-Y=JgGy(Y_;AnxST6qV;0Yz{^Gk-BptJpqEENnYz+?WP zWeAX#2DkzQ*Q5&IVQ^5EQ!qp72N{8@U$nj#%IXG;@&x&YEfdhduycq{yeDWI19U#u zf&p@H0knh#TaQ$c`+=GYps@vr6JfDsj8^^|R2W&fxjKPPG(a)|%=GjFt!fMQ2K$!* z<#aJv!veIp7d9KJQ3e~x)+s< z*oLJ-O>nyhG7SVumEfr$5Cbv;1iC)KF$lE54%D^*cTS-P3i$cQgST-w`ao(O(9(49 zEQXm0Qf~+O@($2>qi#j{xuCN%5DPeT3MxD@(=$?wU@PcBHFm$l_|} zc+gG|NLv^*5CmIE0?O@>QI2>}!3)`~1X^?m>af5U3OeCfD2TK!P{Gz#0W`x4(g#^6 z7#!dk4?4@l#WM_akV<@BYHCV6sHFnyDuOx$284?c@CpuZ*C0PvAEX;LK>bE&SqPB> z4KRQXv<69l2M|IG;z2usJV6zSF{r44)Wwh-53Z=)9GzXkWeIw>2t2Ha?MNLr(6FLO zJgf`^mym9twFb_fpx!L#Tw8EjfkY)FdWq@Ifp-dPBCXj29l#e58Sm!f80_H-no?6r z$;^jtO+-|o!LDJhL9U?u4<8x#ms8px&{<9HLuP78>mkeBCyPn?7$1!EHfluPd! z;^Up2VXcYac+i>GpiPgUvn@coTR@o*s3jx_T18OUSmKK6WX^M~vE(TC@D;~5Y3l=I)A+YH*#6{hp>*{?RgM%GGhde5P zS|X722RrE=e&iUWnP_Cn;0iv{K>>dGC^!nkT%Ex?c?`kzfsav00LVukFwcX}pahFT z572^4TS2>l;IahT5d_~44Qc{ImxN<1fPk!k&;}2;g4RE1LW&j8*s-S@WaJoh<0Z5v zLR*54Q9L>(7nWugAs3I3otE*Aev#me1zvXm-Dg>iy2BE@*AleJQlS>L0|@Gl)WZ5` zh@k?|lp403tl%j%qj=aYkEo3nc$);8Rq-}kAn6lUUV%y}NM#RO?Sa%^@Cym@bPWcd zD69ZFOA*pzg3Un1XBL1K$$+NhK;35w&e?P>`!LcqReV>4sPi z*;ecB2wyA~>gNd>5&;jhJG;2LL52Y#MZ5vL5el8r2Oos1U}Ruo0ZH+&ektgh5Xkkj z!Tvs;&YqwyDP;9oW?n&d2`n9gi#5nt0kjM@P%tzEb)q2)0v+Q)3v@sy@qv3HX=!N+ zY6^8I#RF{q1yU*-nuDh}KwTgk8))?mmjPGDprN%8cSCR`0$PHCGL>s)!T?z~06sPz zx_SWh&Ps3}7hJpq1bMo^uImML)L@YTT~CL9O2-H`y>849?^u$bo0+T;q6s<*u{60v zp;{pXK5GIxJ{2@$SIYoePKD^KgAaVt&_xvl4bAsT;moQZLrsn1s zRYJCRDj;*>OBkGj6igrq5q@H*i>ISI=r|kDj7dRJW?o5}LWMQbKp3d$7wqTa;~(xA z0%dip`S)4q-o8X6i<1@TUyZkqa_lOZ&W6tomTqQ1ewpuV>uXwxZ(AMED>R;2)r z0Z8_Ogr92&^l*F7VN99|@mS?h4!(!1&xruvo(^gsffmDn8a43q4dJ7#E(#W~dJ(iG zG9Gjai3a#^HISEKNh%(Es*{3Nd=Y3p5=h!w0d%%gJaoA!_%P1wc+ds+3bqR1+>WXs zHz_AI53)L64|K|OX&z|y$N-4+5J;p#CHDRWwmcUk1Ly{u21OOjm2FZ<}rD4zm zAHkDb!LI(G^<4%AMh4*H*quXzftkZ^&u zZor$&K?Lfc4ARARyi^#NWdQR6fJc9k9%ST)`mdtM4{}= z0Cl3^CT13=q=IhGN-QCA&ytI4K#;4mV+d%|5_o5fiA8*{tE)@AA*f}On3SBN37%I7 z4R%$~wE*>HLO}IcW&t>+^9xEc^Yb(cl9P1u3qb3OK}=0uyW;$Kh*Yscjje(PNDefd z3tdAS%Up*hrrOd=d|Qpe-n=fmU5;C}>q6mS%vK z;}xVpHa1%+z%O6}RqEk>E}%ON}u% zAs9ig6GR?7g?cFnG*Jecn1%G{Jp*trIR#xzYYb_-g#8jEb!o!JN?qB-adIKJRsilLr~fuWJ5g^8Jov5|>| zp}AqIu8FA|csLKdQ4V>LgOMd-wKn9uBv6=v_DcB&f%?|aVNLKzT9B)oXM}=MMM-L2 zaiVT&ae=XsZfZ`NE~qep&e1{V$lz0!pxKTfM_+?@S7&F?NIPhQ0%)MBC^0WR6?VBB z_?RD^)I3mGiFC0EXmO2>0$3R3!V`!%Sd%8?7y{6Up+aU}iA6l@JXGk&5opgX=(=L? z*?ZuwBtimwZ7r-S0!KJ><2N{4LpD9Yu0GI#9M77Wp9k4K=MTOXIXE74k}hIbfr)~e z8YCZq%178No*!rrQa}J`5u+|_5C)t80)jz@kAg}caDie1TY(5VWi8k-9<@WOz>rp+ zUyz!o0qP9oXJ@AB#K))QX)2_Z=AjBJfacs3G_*7|G&K!CM+Bzj=_qKV733Gkmmq|Z z6~V#)Qlc7yy5Ygz*t+!KEy|!deCT|#r(Zl|K3PN8(gY-)nO71Ix|bMbBd;O+0x8gu zVDTZIuAn2qARR7G&_0M@5C2dfmw516V9?qlSKk20R63{(fh2R#5`J*H1P$>yfi9SU z)t#UXui)AXd{VuWXNVcRK7$7+IJCi~9B37fYY=!nxq=}>G5B~H1@M+d(Cvx}@lN^q zIVkmuu_3Mj4rA~p0L0`J=u&HF0~OQ^#Wo`aI!m{rL_w1w6*M~(T#{Il>YiGn0Oq-; zmVgC7M=N{8d-w032cz{mb(8&ND0|`2XL)R`oBflUgGZ)mW1f7JcsgaQbi$CXp zcyRRuYEOa#0qPTQ9`yHxPV$==TACQcFMkIIO>i*e$PbKFyx^8Hc=!-;tOvH6ADnYi z6N@wzkdJminIti=U&~yRce-;T1MQ{kJff^5xc|Gu) z9%#bPH7`X$Q&ZOt5}dkr1!ex_d8tJTusuD&sd*_O`A&(+*|5nrNSj!vpbQiJg<6s7XHeiEwgAVKltt~||5GsUg9uOoAJ|P2CX2gg1$AgnGXlByY*&B33 zqPweKJm^|?*tiy~BVZ1ilL4)`g47+LEj(ea&i-z}pgIwDI+kmQ2WV~wv>C?GAQaN3 zfEhvGoiFmrjnLDT(-S&kzq! zKWL=sK;jA%Ea3Q4K-oQyh)j?IP=pqgIm0f{0?mEFCV&+{njuDkCOJWu^Fm5*#Lz7y zfkEcGVLMS!23OsE{GA+q6bu=l3k|{bA807j$I&??9&;?xl)=^6(a+h{$JIr_5L9+R zI){j{d*~+X_<$f+5C0HQRS0baU?>TIM?gGidczTP`LP0Mqz<#88SEM23OSKe!JqYYxF{L65YGf6 z4_9vjvJG@W3wUuJ1E{s?8W8|G<1EP4O#^gok*0zcgoX{sfscHHcKIMXrTnCT^bA>9ryGLfz8%}Q#APCX)p`4Bpy871XYP516w2lR*52Gj8l&ZP8rzB zdrZ^JaOyF~DPw_C2DU2<(;h=SfdJbZjYSvkU@*iT4u-e`!Vq^zfNoZe3~8NV@PN) zLCgN2%_jvz21qjk)E+?GOAo5ZU@Z#do8@84evldwpxO^&1gI^5we^5(0!R_I z1_PvA@$>Zrk0L6VgBJ6E7NHt3VATh3NflK@M;ZgtJuLa zg{JY4#pWRG@j;-|G<<`>=evOg0$hVU{axaHgP|=>k8n`?z|GU$(*<iYs$L zM`?m?^wKD<%+<-vEy&R+OD)Pw0UbXCz71~92H=Vl)SLp3o!BcF zC|D_g#UM&Fp_jq9`nhO8FZDpW8&RVG(!~Wg4&p(#!@@iBkb|#Ldh+lM3*hO}D9{0+ z5ukG?5Hp{kK-b@(Xr^#|G%u zyl~Knwk!Ird7vQ$aBmsBO2^X$xibiEf4D}3fYx(?24X-9^UNSsLVUaeXzl_+z^@zt zoxuTFF^z2u5!C2|CCT{2oSeM;l+@yQEGKEClb?Z6ZYoQm{c=tBBPt;L|%w5{t8OtRw}UpMqTqTH?dz-62Q!K}vK`@`CRqa0>PG z3Gwuc4|5E13~~pJkh=y1gVxl6s|D~GaOI$ZnD~J640UA;1Cy3TN-(z1Z3hL zTt`ASrGgsT@tD(M;KjkvUZ8@ef)QxD8OSW~Y7H|J@Va2o(hd|c#E@`&Jb?|^CZIeC zUit&+xrO>U1_yh(`?=N>Vh6Hw9-u zhIk*)UPsr!co!#-22k>Y49LcNx`F%&+2jgdk00b25*ZII=s?vOyzoPu^#N*w7+6Bi zCj~9m0>w}Yve+G0Gnz7t=S89bORr% zrlFCmscQ$Sz;zVB%+#VHO>6Kq>&2kWe3|Kai8+uZKA=uK$jD$&av zAV7Qsc*PiaSTn@Y+cn-dG{iLmG@ue16zm!1in#jDx3nY`v^N;iV1u4{1)UCn)DfU# zEa0b=fGbqg*-}t>8xLD5Y^-2u$>0OJ)EIfd2UHuxgDy2THf8|rv~&*f0jZ0R4{`=w z1OYjh2h`$)o;nXYek3^?sn-EI<~%>IWI#F}ZbANjAquD|LnBuwO(zwaGQcsPRth<; zNWoSi&00Yt6}0aUlBE(0GINX5HF80BIwGnnaMU0VNg_s^u?|VX2AZL_lY}6h6$Wa$ zFvP=>I=IYCEh>W43!r1dG4s0tD8CmaCZ|Fa1-QC;BZj%r7mWt{`TGaN`#6F2tAcjh zz%~+Tzyu%)T>TVk6ktL=u#?MSBlO@2Hqh0(h$bXxS*ZbNdczE~3*0>(JQZXCKdqJ_ zKHkqY+{e=?K3>6y0dz%uT2X4M0*FAV(ZR_NGWuko0NWi7+5=|@X~{UcxWxN9I>)U!fp#JVxFJUVEX^1^!Q-i}exTjz3YKP|$wsg@L7R%4eS#pfAaxqhGugpcrhw)d zG(pXK(7_K1X6DdCNI-X(f+t+#!$4&vc!v-un?ijF&IRDUIH+Yr+!1_+s7LSx1S=RJ zZ$Ack9@N%>``-W*s^DgQIOs}pkjFv8=8zl)zHA^Ka+`g8MrIypSxEt?Cj}na)F~;+ z(J9FqU?A~?oZY9wDJ-#64p&ru>shdD2XBxyq4jhe#EQr+FfcH3Mm-M$R1C!< z7MhvCZiPkNX6G3kSD-^?SfuK0v2xg@<@3Xej6!DrkbwT?F-8!51Ne zh9w{z(D*}qa8Nk7C^a+yudaf0W#aQv%aLxv1|232o6;s_4=b`hA~vvs4rax%D;6}X z3mWzVFDf;OhaQgySyu`g^nWqj~hrXQ~lEN{~Ga=GE^b7BCnP*0%d1wU- zPXAgEX&(0DOECS5qrAhS(2z)*4T+5sLt^8^kl08uM2i(z@r-EC8KAW1Af+AXHjUr_ za68B)9@789Jsw~R>%PD@!+`rSq2Rqq@ougm&K}V9g0MmoJmTXCI?EfhUmARI9_W-R z@HiT%=Leo|r%Y^()T zRKVGg*$vQ^1T_Vukzb^HSTq%EZIPuwBL|=W0o{`Wn!xaNf^0#sFhDLWQ%k_Z10MM~ zDXB#$w@5%{^W0GtfYu11T++Y*TI%fS13IS~y5b5UkVW^!T^K*w5vw}=OO`g(%SL~wBlQZT3hH^)KiR$)g8A{Lb(>SxgHBL-NGrv)#F zHIIj!^y%i~?--(xmXn`Y!hm!`ssgw!Gc=2L292*lcF{q3uogRbI2&>hBxIos_$Ee2 zch`7NKNr^s&>C9M{b1lr0zrY}=IICSbHbWA@KhTd;OZO-IwaBGPXTrS4rD+Ta$r5^ zlF<10fEH&LC#Hcf zM*y9Ds)=-hA!wQqbSx?!wIC}MU4w!^3&q_WLmYje4$!p&ZGVH@xBwa)1-VocA*f)h zkXlp(8ps4KY673pia0$Lk9D<(F-2=wV-h^n464{c2b7tB4m*S&=?pH*Kw~n91}wD0 z7atE<=?vbhA0O}P;|6AxrWAlXu#oBxv}(r~(!*1LWn9Q83TPC_KPVD9YX)i^g0{57 z4!Z)6K|_m8Gtd%j@YP1<3Py&e;O$S4gSkO-;NV>94j$$P_r5_>L7}d&;~zi?APBU$ z6J=T!>NfCUSKt%~+G2&YB^0)$*9q^2UnkIc0Gdcep<_-7s0oOr3h(zQnzkU<;9$@KKhX4?GxX2{$Ra``6R0uZAO)oe@bDFEy)3*Kfwa}&eSZZL z2GGPAs1S#oj~*22=LcHs4O;GjF~0yglL*UADzNcHoC?4R2DD}rI!BS2S5OLD?H=j} zE}C3jz(u2Lyhpf#AwxzrfK- zFukPGwD`25{9I7oq5(Q=Q$Yhv>DqxrG(qVVa-0xo(i=J^;-X+|fw=hv`3}4MqIB^5 z6TGIT_+ABYD;!*FgGZ3TNr>>^K6r`_c9=vwB$tAYq=l`kK)Im^(gOjlvDVVmP=n39 zLfRObn$d=_ph_H+ql4k6bb&euMi!W54&-Q5vv^YlBNK*DLo?8&dnxeip#4Hj0FCN_dWp~^pp#hu+JFL`^~g*^++~GSpQ0Zai8ON$)o!g&i@2x==M602!COR2 zD+s)N*D&5#0h|HA`;0&KEb~1iDo`9&-2)eD#(BgDa@ORxmSSh>wR)^n;oy z;GO|wmd?lm)b9p0vO&#AP)$bnT$4d^8yxgWSQ}ZdX7JU5O!AArkpWFc(eo`>B zFflPRH!(3VH#Rr0G&MCeGc*nL@quh=aq|IfX3Ftz~ z48TW^KzF-=HdlgU1sYJ`)l1+C7`)^HJ$ryx%9+KRDS)@>nL+ze&>=T?jSXKm05Sty zs(FH2P>}IFNLYefg`j2?SP*JEv_%iDYZYLv1#sMfHhG#j`nebyAQkGbh zSdc2s&+3BR(FiH9lTP0jg60Su1Gm40=5YY4L(C z)dF7_1zV!*83b>t!V*Yu2wV)bDr zDxlI8G-3k1&=q{yL_Fy3KTwSdA9F*hufd0LgZVnp)ryFNAHc%#;3I$H3lfV;iZ#F@ zprwk?GZMgkJVQiVS`%H)2#=gG9y!pQ0MtDgW}4#B2Rfkwmp*em`Ye#-z%9)nS4S5G z@HNC3nHF3nfkGa9*CMQ92X&i3$L)oJCVvn!FgQBb(Ck8+o^@tHJgDIes-oiq99{h4 z9erGbLcpu7{QbafIM{(x3gF|WpoI)#eAyUfd>LHxf|`1evAlTj8cTd#7KnN9-Zgjv z4t}l#Xh<%#sK^<-LDV9~23j8H)$+KTb}}$-!JZ0NR-h zk^z@?;PE+<0!YV!ZkO|BKka<+2coPNiVRk0)`M3D=a`1IenQ5T007%Cdnk+!)xu_w| zyH76%)lA?v6S&<2-Bcaq32*kmBN96025I>lyTQT}(V2nt`%EGIKFDn)0pY&jL239h zRue<;Ni9yHZVI|a&;|#t(+|N%XMje2jbQg2f!!Gp1YUCwI@Akg-WHPXkdL5&H1%N3 z7EgE3Xdm>R4Nxb`4}3q7hXMnr69dXJp!G{28Wd=tA=Tm%1!$iObGX15G+Y374>;VM zoLv3DXSjp!=>QL1`+`oa1Z{5zr5}?}22eM|-!0x1a?~#9m%d(i&^hJs-URY3Uv37dJ2MeyrD55Z2|5`K)VPFf%mndZ zhp6c&fKEKgPgBr>?7h^riw8-g?aqW74my?xx_kzc=|c}gu1xKqwL%Vg(x`8q1PdSR)9PDfKI3bZ9LUf zz~W`l0R)LTptgk$_!I)rK2)eOsBTbf>wvaDV+J&+UkwUiNUt2acwPZK7>Rn~DR|-s zyjcs2I5bniTJi8rF0fWSWc90~Z@hb`V~~pi_#h3iTRSXOUq2x%Rm|oGlX?_U=3Vwh5=m* z0TY0^6?JkJbb=P_pg-u^6u1IVS)`E%T7d=LXaG758+;)PXxCU~UTO+>)kpxS7zG{h z5AE$jTl+3%kgIFJL%QH*6KKzoCf59^paF_6NUn|da0yb-M$4`qE6S86kH0T1kbOW?x2Fi<%2OW#%5#sL`3>sY2 zfDAaQfrmK2hjD>N#gRn~3^Wz&>=Z0OH6eJ)6nk)iHhF=47Z4mD?(Yh|W6lUMKAu~e z1DcgBE{QKGO3W+HOa&dCl9QN@JVs97>R|%|(10EIm~hy1AULo17#o3B_{PVBP6l!f z2=?^x_XE{sdWM!p29`z^mZqi#<`#xVrm4E-ZlIeh!MpZRw~4?u`s;vqcfecwDfys@ zIcg;kchDbt%U`vMKv2N1iqlF1hg6)zD)sABfA9o`x-)5UqVG3 zLmUx;&_Nw1S3hSDU&kPCP&h+c-H4R$X&T6roug zrNjVtEKEU{KZ35Vf1H$U5G^7K%#-=1QFFv)RAT_x}11zkgV2JD3dAA_fz<3J-Ur+-XTyKJA%YuDD z{i}HY0PsD};6;cg&~y#jstp=d4+8bUi%UQwZ3-HYHi52PJVZbfys|H`C^;h@w85r4 zF%vcs2pypW4gY~g(jZ|N>=+;9>aJ0&W1wT8W2j@GqmY(dq@!R0MFtfH#;z7R3Z+Fl zM#e@u3dTlYg$A0?bqrXv7o%&pglab?pdDniLYe{8W(5-+kl&3#F48ejAWE+xnqEU4 zg)|*Q;`AD!=`{lBH6l*0F`8aukX~cr^uj_K=3f(#UK8TkGOf;J9CD8xf%p;F^>lj4(0i{f(=D>OjuU{HMvYKK7!JkSMF;HEL6CI_u8 z!*(VDcx{f;Rp_7c4?fIzX&gMDL9lVqdWdYaF62c4Yu>j{y^q z>1i+%On{oGx(bFqKAH^iAp1dG3Xp?A_aA}+7QB`lKFk8@5ro1QwSk%e$)!a_pw?tY zY9eU8A}BB*Lpspe5s;dUlp-xn(AM*m#F9ikm=3TESeGW`T*ZJOSMVCqc*q5X@t{-D zq4NQ-TMBgwD!})42c+huWag!VrcEH7U{BEL3yvY6m5Gq^&2<#wAzbiv8akjksC=l~UHC65t!&>J>r2nq`Dwov#mA}F=QLwX{<-~k`d_+J2MEh(rIgq#{oEI_LQ zVAJ6!$ssW%1=JTr+EHEss@WBkl`9mKl|gG1zzug#(8>&OPe#EIye2CcbXe@jrOVi6NFave! zAiW82V;ht*<6+~brV19O(C~G3j0X>Rg?I#oDi|THkb|DP4PXBY;lqz51zpwzIcx)Z zG5~B14s{@YXo+jxbXOA17CL1p`F)5j?koWwr%+=(J9%PMS`-P6qUb zWpGd54K^X8p`@y$5CK_+WJNuujzXf2LXwU`vW`NEjzTJ^5>ZIkQOE!VDL6lYOL+ru z&ItnTno}?X4;lo7`=Z`ZZDPOxKKuZj?!YIwfCst3%PByUYXLrvks6@0Z(&P!jGV#O z^CF$~Ze|Xef&h=!fQD{Coh%Q~a+TotaL{H@@Jb~E20x#8#~^o5$~HD)aE)+r4FkAovewS2Gh_ff?ILctq9azR`X(kq+TkxQLPDE7)-_VjgxUtMhuo;ra{y@0|Ba+X7| z26ROgXn|o;YF=_iZeme3V$DX7D|j1$hJmIvmd%zRQRuQ?@D&5#m=AJ}cX17K_3;k? z&CY;|yZCs>Vak|uLlANB%n;jaR;{>K<694OCcZs@PHss$aEDnbwNi=(Kft*eH#$&i+Vbmi4nA~ z8W9p7?CA??efWbeD2EsY9)gPS2|?VX3tEaB0Euq}BhV^aa6cGU@}XYx4J}{6BZ7`W zZt>tV7z`L-M>v6xIdygf9dl}7;b;;H3nuUxD2TOtW}qYqt2g2e6^sllL1)#wC>R-= zf>R%8sUPUTC&*eS3sB01ohD&mU|<0~b0Hu#H5+l*f>UW)T56FF@)2!lhrB_rcm%}) zWM>Fuy+J`4L@R`ctREx-Km9(xI6fEDZiX#w2h~j)$vT-j1)2&lvGmjugs_ews11$Q zU^a_4h&RKs83R0AWEKzG=8Py#;G4aD9l_Umf)W@ALyn6Dm)Y^oL9U=9-`pHMeO$q3 zhJhQZU;_@D+9q)0-lLtP>VwumdV)t!K*0{a;##9DKPRyyGbdF6bfOUGq-zB&P0%e@ zSQewgt3FV@54*t-HjfEimIi66fD2{NxF6VU#-K&Spw1D}U=g@7s4xIs#v0-5PORn0s_nNG@b$RzM$P< zpgm)u@clfXOapB>gZhi`1McGEK|3x$dYL94&x<3We| z<(DSqq-x??GN;J^IV%Np_97^Sf{SyFqSSPq+{EH+O$BiK6p?;GGMYLH8mOtdC^cPE zO`}c&tOb-7AW3_0KcQaqY4fcKq%8bqKoszH}-8^Z3mbOiTsG?GC}qIE#Cv^t5! zppDqz-Pk&LnhIbU@G`vUyjW{c3_>@=fKwfK?#RuJAs&>0Knty5-DS}E^f{?zsi1?; zs}l1R z$kjOvG-(TNeL~m2Du5PUf;J+8cN;(!3%dvThXz19#>i*YfUYS-Fa02ANE$gQm_ln# zPzw**e}xpP;I1|7@O#jyqoAdYzQOJa;HED~0I?jzF~AeHngX1lpmT`u^%S7_0N4f} zXS^GHoFN;0AdwEPbHSY|_`Y{T21p?dZh9*iFu1wIJNpD_DTtRmXhWddQohcX^T7b5#dAh}e zVjrH)oI`?qAe+IVZEx@TdqKh!aZ1@w9)~z-~s8jHBE+s zlmN%zVDOI8kf2ak@B#s}hJc|#Jm{Qn%w{~eCN_=-%_)Pb81Mms@jktQ0tSnN z;>OwE4|IMm=r9Lx1qH2t5y{0B#|khEtIgvv(_ z&3A=j7!1JeyYgXZ=a zz~_^O8G=eZ$4Jmo%D%3?POd?qBTE%DK$Fq>U=_$Gm})Y_Lzj|)(h}^t0?>(3@uA=Y zNldUFO$o^%h6;w@w!dQ#^hOYHwgS!G!}su@+_4EwT8Ov%33U={y0ZpYr2T!4AvN?si1$#y*#6v3z(7_v!6a%ZjU@IrU z+o%u;3MLIoQF$N&MIE@|11@Xf!yKU61l;Zdxt8cPY!J6V#~g6pU}6Nl!Nk=s!qZ>D z3{gyh$|%HnT85z0>`g$6hT$9X72@OJ?D%*F$k4d2ryueKAfDh77~CoW6&s+_@<7Fn zvmNC>1igJ|3Mfv9P@!|JQh5BeRK&}#lbnC!-YCx?<&)|@tNbo>8q{pgLkPP1b09xk{ zPkXRb3*O=Zx`_ldYinR&U}yoksu8r~1iaY<5_~u>a{<*?6`+kLpiL)W2KXu$J=jGq z;F=YDm4yOmd>%CU0Ud^c?ZiMHiGidGcsCGqps|?=1Lzh>4P8S`SPF0fUx|Yl8UTk7 zX%=n4&v;iq=b*@d5Tqi-)Ctu1gsjns_YH^-Fbzg;!xiY- z#TS?sgO^GM#DiM@&Y{5}{=V^`sVmSjp!j%bN{2STV1pQ_1E;XlEnVWn9YdTwT>RZZ zO-5&Lq#MCK1HwSZ5kpEK4`_f$oe599pHotIg}f!18yT! zi*YP+I}dCJSQBXPH>ik1GAu0(EMowc(gZhcAPd_-cg%p+rh(3Q)Kmbqy1?R)Q}dx& z2sWVuTAT4x%Y7D&b3^_O%lHFYV zL!EqFF`5eo6`*lZ17pxpW#DNt&){IhFfC+83p}Z+09gl$ccncv;NUqGX$zDQsQCh# z$aGOKhHMXa3-b2`kA#D+9yE-H9>i$`S@rJ}67S>`588VU6^E6r;hugj{^9ZdZs1kP zNEHt#zrn)-l&Ybv6;sIm3{%kl3`j`8@-&VUnqboCv-6;(vH{KtMivYqzThmRU<4aE zh41BpR^srTzVV)Z&Y-OA0$NAP0PXN9Xn+Pq^3xPF(o*8Vqbv$q3Vu#bk)X+aAJ7F= zka9yI9&)fzd}eMzX;Er?K}iujfI~p*&&@&eLkdQqt=6D5aPdW{pjFJN@kOc0rA5V= zWvLnlsm= zehS*4^>2^>cLCq_2;NEoT|Wk$i#7o5E^-NCD9ETRPE09MfYR_uiC||(@XR{28w#2q zaf$@@av=tTkLLo<9FQ-Cm~f$@&3A(;A9Z2q9PrT!SSHw zxL_7&T+mrb2fiEySpupGFNL|Vr5dUpbkQcrv|4n-!SV{V&@ch5ZHDFpgBQP-l9sbM!+9UyL*CBP|AWLsR65yt)2B=G? zqoDy305xDiTm?0SIt@^-4m@%R@9JsRXntGlNj%b8 zdskgUQx_LV<3GU1F$8pAFL=fzINUJ+X)+}Q;y0utBVp4-NF@|3Bn%;np-Bf^Ai|`K za7)2Xr@~^O32t4mK*yrX47V}vy z^*t486f_`i)kL~z3UtguaHOBFV?_PmCsf`(dVK|I=;+>Df> zc#s-cTtN4efoeZU%N^XQgH9}>4eWs?F~I|k<%vak@kOa=sYR)I$*INQYw~i7A!n2n z=f=ltDCrfaCYNO9=PBr==auS#)Mw_U>nSOKuE^7bPq}I+=_M8?XI3f1C@CrA7N;vH z#V9GENEZ~PmSyIb7At`VJHV+Z-c2DmDkL7X2Rt|=2-H1_hiyHErV~W^0xd@Y&7*}V z7$712NZ4= zCPuJfSxEm1dIp;zY?1&+-%!Dz!VL--KnG}GjMuw*`UJZMDj0$mae$qL@SH1-GsQ!F z;~@uxDi}d;d%X9#tHPJMv7m!P0SJ^dVX;}K}?95f+{x{A^mHrEWER0Z7_ z02wQa2i<_==Hnj@E+Nn+4IyXD7=uqa0ObG^==NZ6jKJn9Ac?91BoDgy5SsEpgIbQD z%SHSgLqI1wItF-RvjI944mu72bSnd-%77l+2wGAc4;tbHjU9mEKOh)%A(W*#Xi+$5 zupY8h-qR0!O%Q115%^d<*yKE@+mKpRlwSn8!cYS=^N;lm)u15w8LFTK@1WrvaIuq^ zlLH$3q+(2VNW>5CYz10lFc^(8S!t!r08j9D2w(cp<$7cr-RXUIDb- zJT(Qp(;ReU8Dy0LWRS(x1ypH(c8M~;`XB|#pp$#tQ%gV;Xg)vza!rkIs85I|=&*wL zU}ygT&?&qju0d{&&WLNQ4H@#&(uz|{^3yax=~xFcO9)zGpH!Ne1KKInLGXT3(2Bo!=YV+U z;P~JW_!(r_dPLx*qFFy~wl`=Cg9dvRe?NX3qIOt#n1<(OF;1i^r~xVtL5&+T*l0DP5d&Rk3Mon<2@*8qjw}pnm4d6oV;gNJ9&{u?BPm7r2qCsiOe8_zLs#Qjjd@z%R%UQ)GZ^JmlU| z`1XJ3fl(+Yv?8tUV1TUw_wjK7EgZ41aCU|@;K2J^AO{jd?lFTd$uwjLa0Dmy2nFz= zpAc_D^F26IE5Hw-a19D_3<>p(H?cGaY@85j`3-Dkmx2*!*(_*ZPl$^roP^F7LFpEtCXvPy( zr737CsDTY3ZSWSqtlLF|l4_rp++7*<6 zN0F@+YQftiiCRag04mo&tAO0xKobFx@FlkK6(#w_@yR)H#kh*K9qwm^$uGpIah{b0ONd}aYe0Aw8GVnIl$ zom&9f_Y0CYLDv8gFwz8#X@gob-~oB?3FOEl^k4zdu{pt@rkFeAekyR$hIEM+Xcre~ zM*!%II*{w38v;NbXIP{l6%*h{F^M-&0N+UnS-1jOvkO_V0<#|6oq-6!X9y5wbG#e0 zjt=&5My;X^K`Xu>WAvbf9`Oo>uDZq+#x5?VRIi17F+-4-dr2OvTCh1*z~ADIfz&^7Ak^G8>?6 zWYz>7r42fE5Hbyhlq(=jO;DpbI1;qk#s{=G9kTxsaVRw;m|P=ZtB)YNnP7*)Dp=}S zq5@ZA3ln%s4uLI`1P{^}8i5*#XdVZ*9>F`Q6qF1NVFx2Yvl03bOh7<@e{g(oXaJ~f ztPl_o0As_ulc3f~acW))bU7KM(+Im`M%NA`6%UnzjbOsNJK*7AU(euR#4QEjPExS3 zk+UJ(LSG=-s~3Wm-G49?E}z5$LwuJMKnMkb&Eh0MH?c+fJ75;GH|8-WZ#eg~a44{j!d zmUL$(=75f!*8z>(7L*j}Mhuj zQ_#g*ko8`m1zD&kO+lqWqv$Btae+!w(6Um{3NCmig48dNok)vz3BIa#4P9aY=rDj;^1(0)ms5u4|}gWTa=H zYig{UZeo^ZXl9V6o03^nQmLt6qGzFJ%D}_Gz@Wguz`)4Bzz|WAnpd0{@0pjD&j9MF zIywdW`-FzL#`}1NxCS};1lt;LIXZdT8gMay0SlOf=m#-jd7PLMRr%^)_iILI!T8jw9OHnKR#9WZfZH6VLn;>czq zi-X(-Q-dsy%m%wj14J?~@G&qjFfl-AkO)W}hz4O6s2UNd8W7FKz`&ryz`!8Iz`!5_ zWt)K%GcYiK^n%!+;0KxMfFurLOGC|xMiK|Hd7)PUGRP&KVc;vhE6 zu6`tOD3bx^eh?qVCdR*kP`f}hNH54=AT}%1ZDCM(kaz?G0|QJv7Ni&&4j?utjzD3R zh$IeW!rdkdH48+8P+Ws(kQ~SjAU4QMkhmd85Nalr3D;`^bw7v($$|8O*f6~y zzre&nGzi1uQ68!nM1#^hNG~YQ!Q89@QjEi1P}qXp2BJaAKzczm2*b<=rEicL7!6Vb zO79@Ifx=c1q!@?!Zcw*@Xpl0HUJwn!F!M#BYCtqdoLn^^y)ZMevh|89b4wDF81#xu ziXe0bj8&AHlc<-IS&~|mn4_1Qnj4>1l$r`!I+>Wmpoby}xl5u1e3uHE6u4#wYXmKH z$EGbauOPbwO&7#K$n9O&^niA=fHuCxmuHq_#Dhoav6=vGSS1!@#^)BNV^si>0~v-@ z5+nh#CAT;oe4Z3Omw?oyfY(D{HL9ej5@s4!`OLgb^e{k#91flEC_%`Vq*jzL=z$tc z40=h$#Zaq2qSzx4ECUH_l-MiE2brOVMFy+`;WR{~f+ZjtkYf~8xD@6|Bw?8AG2;?R z5tfKVl0}O}BpI0Dpy&Zz?+l4T912k44@nJb(Thd z$jOU=nV}So4{8e`v@kQIAUNRgg|&|$!psbyb}WPqBAFSoKolG^GvvV8AO@$oDE_yGn@xeaLmkb5zYoNm>DjE zC^%+jxC&>37|aaUK@=P_Gu(u;K@4Vw+aL;#nHlcF*&qfp!+j71$IJ{5;cO6tnc*>r zf@5Zer*Jli!OZX+M8PpL!%H|D#9(H44Wi(fnc*#*4Pr1eya!Qm%*^l+&IU1<89sw3 zIA&(}3TJ~D%naW_6dW@%{DiYX3}%MkAPSC|8UDiAAOx9@tx85u4sIBG`=Sq-y4nZi^lgy z;|HSggVFe*X#8+Aek2+{8jT-|#*atiC!+C_(fFxo{B$&aCK^8*jh~Cg&qw1IGRA;1 zCLA-OwP2VqYJ_KSwIBuyg9M6+tPEZ#d^UzE6h1q{Y7{;P!(9|UCj%d->kTp*jJX)x zQ25*oB`ACzhNUQcUWV%^d_D$tX0Sm}f}g=0g)hL6j=~pYn1R985BXo3~=+L7@|=4(hMCad>Mv=D12Fl zZzy~@1{Kh-9o#&5hF}!F0z(T5Uy)%u3SWugBMM)cL5m%37y|=?3PUmqUzK4h3SW)k zFbZFt;TsBHgTVlK_=7={AsL0Q#V{3xug!1?g|EZF25ZoRou$iQg~HckC_>@uGb~5p z8!+5P;TtmWgN7BsW`PJJ2745~F+%|g--KZi3g49B5(?jpfsq?z4h)+!7^3hk7?M!< zmJCx-_*M*uQ25pipHTQV3@V@@W0>&_whW;td^?6#6uv#f78Je%!xI#~BZDw#NEU9M z6N57f-JABFGAa2|#4#_$(~@6MnN>UhD;_h5)Y;d?T4q42#JcA@aS8D609 zeHf(q;f66VF!(a~q450}8c_KD4C_(&0StFh_<;;Opka5okwFahDEwfCVibM|!y*)Z zD8pqGei#F@Alxtp28M733lx3?LplmSl3@l4KZ@ZP3O}0R2MRxiK^-(a4!0tfAryrl z$Iy(zk7w9`!cSm$jKYVFS3?YBW++1`otYWR(fAc;eALpO89a9bF$+X8gXbGSEC^<1 zKq*Wan8Celh#ZJy29K|USP;z2fKnJSFf*VOCJfBrc?gJF5XlVh?Spur{xM4CWMBr* zIY8t29#uG5QnlL6f=DE0>+nwFrXwecTE7%nZ69 z3XYi>^x$j|gPB1eM8PpLg8`fkVlXqn=0HF^Q2H~1FrXwegE5o^p_my!b082lh-79k z1yOL!%mA8WgL4^}8O#wJaC}&x@nQ2Q5MgEpD+mKhGBa31SrCdDKDq_t+d>#nl9|B{ z%7ReL4E7KPlw@WA&GkV!VE4dA#~@SV^bR7x z%-|1UKuKnX04NJWF*AVX4k2t1$;=Q0qTraBAsEgEF_;-bKolG^Glas~AOL?>uzB%l`~)<9 zB7+E05eF(ACDHhXXnY4Wz84xl6v_uRn*|vbGvq?~pqfjFp_8E!$_F_FWM2ase7&f5r=P@vV=RWk38Q}97Ir+(nIS}D^`0NEbA3U1@p6dYXkB3e{ zA*M_~vrFZXNv7te$wo#d7AdCYiKfXWhK7krCdmeg1{S6%iAjbA3?OBBspUDD zNqQN27J5m^1}WxA$w_JE$(DwRh6a|&=1GYrCaH;Oi58Y7mgZpfX{m`NrA4X5dKsWq zCP}HO28pSuCW*!t<`!wDh8AXq$>!#!DQT7#X^F3oZEs|4A&C?9b%`8k)OdvYqL027u++?h0nP!oeoR(;0U}$M$W(V?C496k`jsG}C0mL<@rybHh|~BSUi|3k%Z}OB1uyG$WXX zl+-l63_U{&Q#}i#R09L^#6&}L6GKZAbHhYKW79O_G&93w%Op$7#1vE=#+G`@2wHrY3qR#wo@oiN;ChX~xOPM#cuoDTbz&Nr`C&Mn*{{Nd^{R z4aFrXP@kJx=ozJ@S{kPqo2Qwjnwcf1nHwaV8YHC|Sz0C;8W7KurwiH4>YhDl~dDHg_QX+|a~Nv0;o$!V4l8*isRpKIrY6Q|#!1Eo7RF#Lpi5^#w6Nt!`oqN#zUMM|PYYO<-BNg5=Wa>_Fc@(W79J~z-aGE6lvF-bKw zFi1;G@XbkZHOu40=VQO-Ud6J=l38-jE zG)PP`GfYV|NHa@LN-;??NQPuXl|06mTYdBmYil}o@QWb zXr5$l4$0h*xzw`MqT}T!(`JmV+%-LDy}RpNzDbBZ>DE%WMO1s0Sc=`i?n156Vqhl zG?0%{l1wa3lc5DV$b8U2+aN6_dgd0XN#<#(poNS{W=Uq2si_u*iI&NRrp6YgmS#qf zIIk!vD$N5ey#>#UgTl+mLeI>?EZN-9(84^?%qYzyG0E7-*vQD#%-lTH!Xz=x9FlV( z0S&sH89dRSp=WBSXP9V^YG#mXX`E_dY-wy}k!F%=Vv&+;Vv(F`0jf*D=@Ow4e66#d zp@E5>rGbS(N}{=;rE#*QadMiWk!5n4XS+co_nW32_SYvTXN>YA4C@~mW>KP_m zrh-D;GC9@4(8M&&+``x*(Im~t)WkA5IW-xQ7>e_gK^ewOFEP;|In6jZ&A=$pGQ}V* z$vDM0(a_W=#UwG&#N5~vQk6>5rpYOmDF&&A zX6C7;riqD=Bn#To0bco_m!W5Au9s$LX_=B{nP{1sVw`G{W?^8OoMvcfVUm)TlAMy9 z25E+X^uRCk0oi4&XJlevVV0a?m~5V8YG!C|YG7_+Y-DMcmYQZ^X=ITINe&==FuM$m zjP;C7(=3yWQxj7xObilD(=03#(~OLhlZ*@ujZ@4Gk|Bj6NE2wA5GYv~80n=MnHrg= zCRrL9o0=Jz8X6>-o28l?C!1Ru8CqHxLjwX9$sj%Erh1@6X{eo9me*Cz}|7 zLN>`b(Za&iIMv8FEzLZ|$k@m-G0DOLlHx!|*n_-aV611BXlRsVo@AM5o@i)nmTa7y zoM@1mYHDm|ZVGZLBrc&r{)%96oG1f zLp>97GfPV|Lqnr9^W-$6loSIK)0Cu?6l3#5OG9I`BuLa1R~E-ZD@{{#J(E;pQwt-r zG&2KG>&7(2FfBRN*x1O(0#r{K8bjQa49fl{MtaHS$;pOkre?`W1}16dmPU!j$;l?E zi6$22Ddq-7$&j)fR9}LtKTtCv*}}lc$iTqFA|=h-+|tw})z~5>F*VsZDaq2z98z?m zG^Ua*%neP=j0_Vk(u|W6O-xKJ3=NHv4UNHGNJ@n`r??~~u?UoZjZO576G2syp;@v) zvXP~6l5vVrYNAmpD0v&2SQtVJ30UjV$XL%H#nQym%)%@Q)Wl9PG&3?ZF*8arNlP?L zv#>BpgJcP~dc9Q3P9#u=0jAu-K+n|7 z+`!z-%)rvjD9Oms($dhVrDam8v4w@Xfw8HHVR9lQe}UI&ftnE}dMTF1h6d)K-b7-uxp{J0YHEs! zrJ=D=s%ff8nn@a@rUNq(@+EtY>a$Vrh|NnrLZhYLJ#{YG#^Zk!WdVU~HUfZe(I<1c@Zr)-H$zhKUwQ zmS!o5mdTa|mX;|gCMhOKCPs$FmPW}&CMJfEf(N#13KaatdMU}E_HJ5QQmVPJVOnCM zfvJIITB5mGN=kC7g@pm6P5_^y| z^b*a@Escy*K}MOU7#Jp+m{=O7m{}NE7^WHBjLlPxjS^E0 zO_NMaEzOJ}$r-GrpeVBp;s=W~!$i}RBm<*V!{lVkG~*OYGmB)SoH%&7zN=q|N zG`C1gG&4?3F*P(WPO&sHOagTpAr$~DA(>g|8KtCw+e)S;#zuxliH7DWX%zGP6iFH%WyKT4bg} zg4RsWIMLGB!qC9n(840cG#Ok4ni+z6n`vf7Y02i0S|cyDB&ihCcQ-cHOR+FDOfgGL zO-nLKwlp+LG)^)wHBU24OiE5NHcU!}G*c4`GW9a_OwIKy6OB@m4NQzIjLcF}%neOU z%q&fe(@c_5EG>=FOpPGMgI3b!7K4gtGb6nuOEb^_iiu$o=)%J!6EkxQlO$6UP`lLJ zBpKRB2aWE4;>=jj$kNy_(bT{q&BDyk#2`7vG|j})A`#@&cElmwg%+pNMQcaVMjg2i0 z5|berAhjeTwJ0wYRLU8Ha)EJ*sfA&(g`sh>k-3R+Vu~@SzDP4m1XZ)C&{D1>Be4i% zhpDL^sOg<*oRn&rVrgJ#VgafB%nehL(u^TBDrn6+_*@%MX@`Ds~!GVYsR!AIcLmVTOTH56D1>zrou9z)I3nVJbkf z$V=)Wh9iqY7hyvrkXK$qL_o=n0W{hG9##Zf1ok;-aW}|WkTFE?a(&1_D2TuX-+=+L z92Cmn;6{jmMn)MJ7?GCZFhZxbKx4>^&?zs_vI0ivbQow#oDoDocZxB_L8duDL!*q) zB|M;Y!Z0&IM!?u0+ZYod>cMQNnP9u1%YDFhB|+4HtYJ)nutDS1jL;=NV7rjroCZ+? zHV3*42y6~?$q?8aC>yW6P`kkDvmj>TwHMj_Q1xJYb0B&#?8<|PgVjLQgY80A4-E&f zU!d**n}h6MWP71u0#-vz+(D;B!Tw?g>0)32#}`x_9AD6-zo4B%j3p2^gT~+)p-X^4 z>%JM0roS1XQ^8<2BQ3jPgs!(i76;8zi+~JZU;xipb3^?Fn(Y>WPDz56ae&w$eW17o zu|Z)5aw3Qg3Nz5`n+Q8(#~o;92gU}i5{9vx7#J8}>>eaG$SjaJ$ZR=~xF%%RBZ$on zP0yg&RFE3bPAAZO2aFAxr2@GDq!+~IhNgMYY!FBdXq7W)z6Hhxt#Ssb2Zb?+4f8K( zwJ}H>6y6{)i`5(pxxf#X=`5(qcjz@6VLZ@*-Y;I^?1BWfh6VRQ6BH9cL zAhSWy0Ahpe1kJ&K*dTjAScIPeJVOVXvH^*M>;$p7p=lD71VL&*VGo-51*rkK1;plt zrb*BYEJzI~Y(R4|AT^+H1F>QL1+5Ygfle)hk}rr2avR7#5dj7UkQiuX07x9L4Fs3PEUj8ia>0TnV_HnvElxOssX1rK?d*)A!ro=NDas?5F6%S zP}&d?WB||lfx}IZfdLd|pjmE^dXO7HY;I`22F(V8#6e*KV#C4&G%E`-2ef(~G{Xu~ z0}2xm8x|(u_yPqa0|R(fgb0)ka+8P<0|O|yK4YL=t3lAg?QVU{pL(3Mh znIH#3cd3d%*&ubGc}URgI%ow5NE~D)h|LWxuRvi75(lXTv0-+B!&9FDyfOsDMzISz z-470114w!Uv0>o}TKyp+0@;NOjxW$8A+|CBx-0v0>lQzBRKCHL&^kj8a9TMk>D^ihS&>Y zb3@BXP#FQz3o;MH=7yG;pdbc`gUU`2n;Tkwg3<#>9F&egY;I^-3Nlj!6cG#z3}FA7 zK>P(_b3@Bjuo~#n2avdkDW)1w`WBXlh=bA}hz;^12s1*LrGU~5tb7KQLBi0o8Z?&* zV}slW(hEv&APmzBidtCt19Gk~w7df42N)Z)+5w~&v}yr_VR}KU5McEMXhi{RO&w@8 z0E`VPQ$Tt_GwvV^(+iqGX9Pti0|R)si7=F%$-uw>V}r_nkY3Pk5DAPmzx0kqQ|lwcVc7^Z;KK-r)jLBdcrXm=0DUeGQb z5Qgam?aE;U6VJQ0rNL-$Q;SB=>!}NXt=><)CGcYiG z0jYtqK|30Rp={9dHIRQ<7#SEq7^atlk%55`RB$pdFz_%kFbG50pxp#8HfUWmNUsbd z0|N-d^eTY#f)XZZ^(;s)lnq+RFAQZHfW+k)7)%%;7^c?(q!+rR%Lb$d%63Fzdw|&T z3=BSu5De2B0MZM}xC{&oAs{tSHfROAFq91{qZmP%1LQAI_&}Fefuf%g$_51uj197$ z5tQ*67#Kj>7(s;!0|R)~79(`&7O2dGsRxxaFgB=6fU!ZVa$s!GiWV3foG+mEg3>=s z9JFf+#;!(kX9E%&v~v!oW(Jb@d?Yq#cNt6#Xr~yAy$wkXC{4n|LFo_12JPg5v0ovn z2kn@FiG$J)j15i$P``k7alpilK=A?<2kn-CiG$)1#s=+5fU!YMHy9gKT*BC(Vi(44 zL^87%i9HL64O)i}Q@;&K{2&th3=;b~68jMn`z;dt2NIiwiGcxTz914?28peK#CAnu z=OeMJk=X4>>?ug>`AF>5NbK!M?88Xx+eqx^NNh=Fgq!7&*s4fuZ6vlK5*xIy0Ons? zByndXwkHzXABi1`#EwQ{CnB*y`xId2=OT$0Be5%y*!4*4HYD~WB=%Ay_C_T3UL^KO zB=%J#_8TPj4_13sbvA@KMo8>fBz6W8yBLW*6N$YP ziG2ZyeFusC2#NgyiTw_V{RN55%#LuI9unIMiS3WXu0~?dL1M2!Vjo0ep8&C;ZLl-! z3=FU~*i$5N(EbouI{yO_hqk*wOS@t1E>R8!21ZcBpMilv1H^`^0qrG$wb{Io#DkF7 zNl5H$Bz7?py9SBfg2e7cV$T7wq2=~s5F0u^u$+SdzK7xzlK5>98>;>(hz)Jmy#%R; zvj2d@q5k6LMEFqv#D?ls2eF}QbUXkxb8-mzSznFvAP&IxaHdH(W#DYhFj8>)U4hz)J8u7j!v^*;_FiQfdVq4wSfv7zd}gV<1Wn7A1j7@_T0Hf{z6VJKS~ zBo4J#0mO!?*8{PkYK)-jLG}hAiAN)`i$H9s8!A9-sNPNx8){}B5_=|y4Q&t41(^?J zuKDeZVnfwD0kNTKUW3@61|S0i!+Vf9P&Nk-0|O(JEeT>n)r0mX!P?0h zJcxF(9Y_t-E@u!M+I|iLv7!Eo1+k&#q=4Aaws8i?94NaOBo0+m2Vz6boCsn=#pi(7 zQ1OKzHdOB_B=!Li8*1+{5F4uIIfxA{TRwo;pusr?28M4SHdGBCF9QQ3R9qCqhT5wD zVuKpUpmshl1A{P>Z2=O8y2lp8hKh%R*w8X02E>M%lMZ4-+vnLJbD->ckT}$w77!aM zJ_p2xma&ULY^XWwL2S@K69WUo77!aMegMP9czgiL29FOw*`Qq&us%DuUjr3)1@#M{Y|u^w zm>STke;6Cw-+`(Dt*(cOgT~HaY|yC@FgB>~4`Y`jnGfyz{J7*AgK5%Br`#$JHXU{PI7>;!F?jA`V&a%L8l|Y#vec@A;8#=Kx&}%2x$K> zO#Cg9IOrq-m^kPZ0T>%}VgQWI2I^lx&EY~~gZoy{@*mv4hO)u^EGQeaGoBI32JLEx zu|Yf7VQdGGnNT$@NNhhOb`TO9)OUvI1r71T*r4ed7#p-B8^$g|(hC|6gNZjFiMJrJ zyOG%aNbH43?4?NTHAw6YNbLO}Hng5PjKn^L#6E|_zJbKPgT#J}#D0#%{t043>!80# zY;YeCD$W7wXF=IQNNh1Awk#4`5s7UKVngdAb0oGM659!h?S;hlLt=*_u_KY#*&sHw z4g&W*q3kjw@hT*C3lh5niQSLHo{Yo>?NMih))y;5;!ySmB=#00_HGaxT2}7|v7ze0 zeOM^_Dw6n3B=!R&_7f!bXAm1&*L+7}|3hLkf%aq!p? zXmA)dX9}%@K+y(k=YyOMD`P=b4y-*7(gqtZ1q~;`#z;Y9v#>G;RQAHgKfz@$v>X7B z%|h9r-EXiw1v;k*Hf{+Tr-iixLF2Trb|8417Mdo(L$9 z4qSgh!xLP8LD``3eOP#c#`IxqP;kJ)6XbLl8yx=7avK!>u&@P(KS&d(t%6i0gTo(M z9)iLj7PjEgph-mr1_sbcE{vc=#K6E11yT>) zx(RBYGC~hs1D%Ef(+jSDp=LIN)I-_eIv47;i6C+47Ek1{(?uY0P$C7*cYxSXy<0$R z&?FBioIz~R#^S3zv(7SH=2Hq;z&-5LgoyAL37P$Lo4 z?*Oqu35tP%;SY!n-QLLtD#M|ALFcD1LbrK}gT$d*Ji&DAU1S6XfB8i%9IQY48rGIm zXJBAB2oeWP8i2+nKy1*$1O^6%3m|qjL_N6P1QiSn3=EG!;!rc+fY`YZHJ?Ci(1Zgh zorBo<5OL7a1&pAA9CQ*as2(hYi1UNkP;;q&cMK61Y(y$ z^jd@1We~O_hz)AsGcYi?gV>!nFoNdw zKy1*06b1%{Lm)QvI7HAHI*ct4yO76_?}5}n&3q1GLyt@R0Ahm*JW!Z}*wAAV|AW|2 z_3WUrS*SR8oEbE+$-uxM1`>xJqX-^z?t<8>1QG{L3W3TQ5F2WaK8OvP2xVYkumrK8 z;;tYzs3XO|z~B#JL&c*(>^_K@i6A!g2*z{}8#IZ^z`#%dVuLzf3=9laAU0HQ6Nn8e zycrl6x-1`r#nW*ZWF4-)$j5*yT9 zfTag;pBJhZRJFszK|>fYHgequS~CC>2Q6KKu|aeFFg9qa9>xY$V=y+Tnt`!F*&D_N z70oaB34Wpg62`H|S7 zNNi~&HnK+YiWdyWU7@0+HC^NbFc7b}|w>6NwG(r$g;6 zMG{AzF9x?UplXokj(d^RgZt@FH8YXKk>`}b{dcGurkdo2WH7iTxgl{S}G*8;Q+`)CK^zm!S6YB8dwlu_ck%@s!$|xaQh1CPH_7Q$_BTupzK^E^~Ff+N+fnY61x?N4Q_Wq%>lQ&pzP^L zYUU!b!EG?88gLs7%3hD8W-AhVHxm0G68kt3`z#XsG7=kk9m0Ji@ux`a*GTM-NbK)O z?7v8CW~8+ToJeebB(^9Ld#JP(DRCzydPm#CkUq$0dl(W9qwQfxIFQ;NK7rI;J&(k` zhQtP)4GgPao*;=Mw}C$)iG$~%pye~@s7aV!cBHltczg`12D#mfye<(uJ_c2zg{0RI ziEV+zMsDkZ&MSu5>x-l&1c@Du#7;tDBe!o0ki^T8*mX$kRwQ;05*xWqI}1sCArgB9 z5_>%odm9oPxgC21N&GYt`w|ixJe~#(H}E_Zl#SeWeTSs}D-!z;5}O&R4a0@RMsBZy z=cJ(KgXg56Y&9hHx=3sjBsOvz)d@))d3|O8k~nyr4QhTIk~ng^GzUo>c}->&l6WH$ zy90@h+!mdNBt933y#$H98i~CLiH+R;Jb)yA9Ep7niH$rKcLzxvxy|_sN&F)c8+pwq z^0*uuQriQ$ohgDOE{((nkIO;BRuf6w0Evy=q<8avO3IlK4y{_5vjKawPUTBsOxp5qazmbVfL=3^|3Q{vs0l1`->& zt%$sS^(~SbTcdleFUBNBTD5_>-q`xp}YEE4+) z68kn1`w04*4-#7#i7kc1RzzZJAhGq4*k(vz7ZMvZKM%{-9H6z$(6Wmki7kf2mPKN#AhETP*hWZf zOC+`f65Ab#?T5q;MPkPwu|a40!`zvLBwmQbu0UefBeC0%*u6;XDM;+uNbE&O?3GCD z4M^O@NbCtn z?CD7Cc}VP~NbEI8?9E8*T}bSMNbD0x?DI(MYe?+7NbDy_?AJ)_Pe|;aNNmv2@38d1 zj`#Fjx~DiO(eDf65AY!ZHL5mMPmCP zv4fG=QAq4WBz6W8J0FQ%hQzK#Vz(f%yOG$Fkl5gT7EpgJKoVb$#9oKQ-ipNDgTy|J z#6E?@zKF!WfyBO##D0dvev8Bgug`?K4YbVw7Dvcy-ayO!Vd9{z1u!=9yg%~#H_&o7 zm>SS>G#DGSEDXj5Ey;qhk>~nH$6z7jX2@$2K+8v9VFkLG6UHVctOi^Bf|j7c+z(p* z1!IGjXTjK@rBpCBXxS5tjl6yXv}_0_4qCngV}q8_z}TQO3Sex|83iyl@)-3xq%{?w zTPXFxJfX^I&<|FXhNGKb;uK~&i?`wdvL1zoV%tT(B!Gtt! z3A)7)rbYlsoS1kAEr*5a1s!_vQZctw5$`x zMqUpFS}q9_2Q6WQu|dlUVQkRyJ{TLc{0_!OUIPZYu^1)}x@{Q7-hfm-fNsTwiSI)a zM_%^@USAE(cc5ElVd`%osRx}~0uu+FTLNPvul4$dq#ks;DohRdd=jYnpj%L3;zCH} z3G(_b@IEQ1dhk9eC|eInJ$RoKR2+2P2+U06HC>?l9%16(HP}$~5lH5Mjt_&W0Ucup zV<6&NNEpr(=#l-4k3wy z&h3GTgU;=Nv60s|-a}Fky5Sh626RRbj19Vp7{>mEq#k)qBlsL1XnF(P>jz zq~;+K`vnsFJresH5*v9fB6vR_)IHot^L^m`fKYKsByj~KHuCyIJtT2cB(@C_+Zl-s z-VX>hA9>AT1d^I~Bz77S8@!hRsuy(kEG)i|*BLe;sqaK$gZDB(^-f0;pNGUIro19X z4KejHCFYEljrhyPp|TEqq@{tu;9tlHfWm)jE%g<0eR2hVx+niy!RhkUV+Z;gXsmG-3MbM?`t@Q zr1vZm8~L0x@HqfbGr{KoK-tK98Ng@pLB+o#nez{c&5Bf~fX>{5xd(awf)tV(MI^Qc z5?ddMZHB}~-m?JS`ww*wc#k2J4c_|?WrO$rL)oAsXkqR_-lqUMS`;RZd_G$ZlD)`# z54(`Wk@qIdKoXyi#9oHPUW>#A??Z&T4S7GpAtW`#?R~O@;ML4=UGihQZo;U zjeHNn8YFS#vmJIJi62B_pFm=tM`B+?Vk4jD@B~TxH4^(168k3-8+3^oYz!Is3 zJzSzlZ19;^(0X4PNn8twjeKr{1(LWu659=l?Tf??L1H7H)sTcFo{7W;pM?c=PdSn} z@_h}+=QH#mshNz#o`u9-h{Rrj#6~`o0r_04y+~?~AhAy)u`eO9kS101`VKi5-W;PDNtp zAhC;)*i}gEMkICz61yLXJq?LH7m2+DiM<+$y$OlE6N!BQiG3W2eGZ9z6^VTZiTxOf z{R)Zw5sCc+iTxjm&4#pZix-J4g2a|aVk;rBHIdi`NNjT?wjC1N6^ZSG#12McM~19XBqTQSJtGT{#Frzn*CDaDBC+=%u@57$Pa&}{BC&5E zvF{_XpCPf|BC(P0EBTEi&V;mAixY`0fW#I@V#^`1Rgu^_NNi&yHu4=Pj!5DjNNnW0 zQNobKW0BY?NbGDRb`cVLsQ0Hp$8^H#EYLBUFgEDOOBfq;R3(fJIx-T*CT2bSJfwMH zjhAM3LCwbL^q!C?kn$A+eFq+ymbS2UTy6q{a=2?Tf?)-TMY}8}d1O;4^Ze z<{;lGR)D0p9En|r#6~__uLntdG7=m4>|F5K^-#N3AgMti*%uSjh0nYvIl$miy9A&tWz-(@C&BrcD{RzqSVpOt5VByNqw z2A^FIwHNuU-2fyt$miq5A&I9Vv2&2v;B$AOW`fVIhq95+!~>sQ4;2TWT@Pi0&)tQx z=OUT81c{A&4j%XnUa0z=NNNrsv5zCM&mpmq&%V2ZB#wL@?<*wnk4WqvNNnWu?%0sp z&%8)%@R{~dcS<9PDwk?4V3)~$sFV}a*^*R{g0#u z`TTrdq&h_eiH&?Nt`d^CCKB5Ki4DG|2I?O0JvC4^@>#e(Na}-;*ilIAL?m_w5*zva zTkt(KQ1fe%)PV1)fr@t{iBCdeBcFM@07-l~5_=sIdn*!q4-y;soZC}K;un$FH;~x( zk=W0W*vMzwenArdjl>4uQv>xECsG|PfW$^V&sGje9QiI+9VBsMB(@b28~F@d4>NaF2C>^>wm@>#WWki-`wvBBr_L*0OUuj>vZ zHOS}F9zzm8i^RTy#J-KheuTtEK9d%FZa>uC??`I?A+cGJ#>aS&*vRM5N+F3WBC(P0 zjRl|E54Fn-Ne%MZvo1*D-bm~qBz7bcI{}G}eBNvxl6WZ+y9SBfjKuCjVk4h1i+nHb zd?Yo?kl1UH*jtd;$mhx;pY4AVNzDZ$_H`uoJtQ{rS+Z}C#6Kgke<86Mk;cS0kl4uQ z$BH3|%ObH=kl5NtY$GJLB@){KiS3TWM!s)16iGY=iJgqZ&O%}rBC#uw*!4*4HY9d0 z5_<{~do~h#5fXbP5_vMbR_mXBsTKB$!n0rHzTokA+Zl4u}>he&m*y~A+hfwv7aEZUn8+UA+diV zu^EuY0NIh)d`N6jB(@9^TN#P1g~T>QVp|}w?UC4SNNisub_fzX8i}2R#Lh%w7a+0A zk=S)e>{cXp4-$Ja5_=XBdm$1V`CjSuNaEX&*n5%KN08X3k=U1z*f){b50Kc;k=XB$ z*k6&@;QOhebr3Vs*;8CdY(XTp1QJ^wiLHjj)wB~ugM=IMJmctHV306D-b;&oRt)l3C9b_f$n%n;cY#5|a}UxOBlzBJ zX!{C$?>3Zu5lIdB-fgHj^8H`Wkkq_IVt+wm|3+dnA&r$G-}xngBo4kC6l#|olDH}o z8+zCRTC4zC?ZYQXnyL+w3=Bz_i&eFce)d~eqyB=MI>><>t6@EzPx z^TBs;L)pl8b@3pLn+YSaX%!Qe zt8ig#~%wQSPjMn>*aG+MbFNM?w zP()&DAhD6}}5!7Vk6(PiG2U~QzSKSkl3G**uRk2$aiaU zAkCNYBeB7Ekwe`hizKds#74eP(+Ei%`7Uw?Byo2nwjUB3`3}t(B=KYO-~#8yONYap?a?@~u@d)p$ZaY15xBe8>!*vMxWBp`{W zBeC<4*riD98YDLIcyAYyIOs}ySbKX0lK6Zi_A(^)=-Hu=@*mgPp~&fn8!6ld!?`_! z*=>}Z*D+MqxFVk&jl6bov|j+pQ^@D;BJX8LL~4^GpT&oK)->{3$4Vsi$Y<~(?`uHr zBOss4hkWid^18>xNM<6R$BVqj0lB|`d`2Jg8Dhw5AaUhKT;hYF48fI8sZ}@8+V8Y5 zAKA>&HUlIt54JV~avUMo%d}`iQgVmR=p8GN^h3!VE8<9HwHy)~d7euLN!%ETZH2^k zL}Gg&vHg+QVMy#)Bz6iCI~$2zgv3U!ry7vN+mYCPNbIRd>^Vqm_6{WW zekArWB=%V(_7x=dZ6x+1B=$=r_6H>PcO>>dBsMG3TnP^nTNsHgg~V1wVrw9=^^w?S zNNigqwhI#58;Ko+#EwK_Cm^xYk=S`i>{29l4HCN%u zg2dj9#6EfW*Fz#J-2beu~6?gT(%f#QufEW<(kr;Xq>ZBeBJh*s@4$6(qJc z659xgZHdHoKw`TivHg(Pp-Ai)Bz7_qI}3?jh{UcyV&kd{klRfNTe+(4>0F=Y`hGl|hl ztuP->ca#tlp2Vo3bvj4B_i!+;dl|hi2GTyE^?fnKq)B4b;7YfY=%rRULrIz^#{EOF z9;Zc{XA@HUXD1T-022E+68jty`zjLq4iX!Az1b@y@sCLCA4u%~NNhHwu^nC{wg?hi z8i}oh#MVS&8z8Zf*O}WPiMt}PeUR9}NbD#iHu9X&=vp#JSvR_d91;%0bq)FGS~5ud zj;|_G={eCnWYyBsMW^NL=mb!O#XK=IlOPe#9k?JkBsw+RwQBf=e9P zkApdWhr0WTNuRX7OJ($&KuBFS*v<(YDrtLkT@57tjIOJJgu_T!S2I-dCh{H!IXVnf=8pAbzO)d9mA;r5P659fajms`v;<(zY za!6*XBC&Ol*v3d~Di7OoD{TMHAf>Tl zBz6@NdoZuf7%FiwI-Uk;lT*^J9x8E7>iA3%QeLY>VmBbM+mYCPNbIRdY+P#;=^1YO zxfmEg_a%U0`x=PN4q`Dd6ml~#F!Dm!9UwM8g#8)B7J#s2co-NML7jdE28Lb`TL>b4 z1;hp&D8j(NpvcR>z$gL{PXe(;A?!*JTMWWp1Y(0a@eB+M*FkJai1-%}8*~^60|Ub; zE(QkB{4_}B9F)z>z`*bj#D=>0Ig||&e+y-U_E>y|vO&)H31x%E0RBVSAS+n885o4v z85lr&EV!X;P+ckrWrO-j;!rl|j1yTX+kt_BK^e;SVPIg;gt9^B{Fy-6ptgoJlnomH zbA+;!85kJcq3jF>1_oa!yMTd#AsEUAmGO~KHmHn`hq6KUPo_fIp!=yZp={9oR5c(r zH0~OpY*3g?2C<>>I1|bSiO+|!L1DEN$_A}HUkzo0`WzdfY|wcy+o5bw|6?zd4I0-u z3}u7Pi8%>nTQV>(oQJYO=ObQ)vO!^W8_EWqkN6PE28G*mC_9#cf#Efj4GOn^AT~7Z zvG6c32njHNt{-6Fg0ewg6M(WoZWe*ELGh>#VnfraE|d)#%Q1$s`4|`&ETL@Bc$Gbr zt-!#*;0k4f(uOybt;WE>5C~<1{2LBsgW9UGP&TODmkect!XXpN_GDmS$cM5)elLZx zL4L1>vO#`tgtC(u7#Lci>=XtDh8Z9>G_TErvO)2<1j^=OU|?7UWrO^+0m=pi-8Lv2 zq!LL6Hqp2eC`aC4QkKc2eF~~`YDtRviCKV4YKzmlnpZfJCqH|=6|7V zP&Q}gWnd5zW?%s2J5DGY6rTK0wgCeJgD8{@+Or}FWrN1abU??VAu?0gY@o%vN;(T81_Tip!9qc z$_9D)G?Wc;=Xod_6ef>AY>=lI7#Lna*&s9DK-r*p{|{n=0-S+?ft8PeK}d>$0i=c# z$_A+cm931R1i-++zyYeKKpBUDfdM4P2uj!t3=ANrGirlWGBAML!3atu3=9k)ZH&4Q zaZvm*>Ot7x@nlfqVPIeYm6ePjNd^W6@ZJs3z%v5_LjcGwBZzuX9$*9w1~V`)fY00j zB>)Bn22lCP2+B|pWehNPg7+ap-3fLZ)SaNb3UepON|-yr=e0uJ33db2o#4J9)SX~^ zL7EsC7{Kjqs5>i=+}Q$RL)|$6#D=;PT&F|b3GR=8Dsu(~hAkj9P&RlyGn5U!7XVs+ zfyX?dZ1BCkQ1%CqUML%Ue;<_10a_0XWrNowL)i*Q;^1=tpyJ@WccE+-BsJhW_@Lr3 zNaEmi#Zd7QBysRweyBM3{#;NbfXXG18fd)(zDEzr-hdwkSE|mQSNe%ceJg7JeXdgF}4L&0p%9cSA2k)r|C0+&w2Jk($P__d|4U`SO&ko9t zKoSR^^9(9X7#J7|K;lp~cwan}4Ze#O%ASIx27D(SRD2DRIQXn)sQ3{iaq!-Ds5tmO zSt$DjNDZhUWnf?c-zx`YgEB57lnp*_8OoLb?E#0f!TZxe1t0?h1Ncr@DBA|42FeEC z4F_e1Ac=#|P6QP=p!5$ChqA$Y%%SWSB=HGIZ1DYV&@yucNF2%ruUUn%4}ip><>whB z_6;QV6C^hHjy9SjXC0;xqe57Y*OsRP|#3Q_~Y=;}aaBTU_F zJm$rK;)H>L0pt%*IS4Wfgwf3dwP9f9f%d|J)POL$I#AgQQwO>~9i#??(ba+OXosl- zo$Ciu1H$O)K<5R*)Gff{4^Y_-QwO@s6=W6&qnih6Ys1um&IJIe0bz7?Q;@=CF&=wC zVFoh~v@aNB76_x82aOgnP!_glg^H$>VFR1Q=sau6d-4!HzL3^Y@c7iavy`X(RF!Mlu2dM#J zbakM*6{Zff<^iMzgwfT#L9%xp9`}L9NMPoH?)U|n1;Xg&f$DCUx(#^DV_}4}zd-qD zBOY};Na{d)r$BasFuJ{Rk9i?T_U^`` z4%BvnnFq=%AUi=A-CoeyNicPwyPrX7Kp0&e=&oa!x_x-;1+~p!>OkvrKxTn3x_LE7 z{s6T>L25u4T^;DGahQ3aIVg}C5Jp!AYWu;|9m3OgCdKx#l3UELZadqMZFgVca9y1Fe$>OlJoL25u4T^*?H3bXeF9)BD`GVdfF zb!U*&ox-CI)Ha6M3p!U5NJ3$!TUeFm^Fm<3cXCO5ojIIuJCpJvo zWjywR`VKI4pgIR+76_x8r^19NpF#UhL25u4T^;By8kl+4@YoCLo50k8?o9xh1;Xg& z*&x{q>MMfOfH1l`(Ai)x^FVjSgVca9x;jwb2d3^89`}VH*?Sw0x)>yNpt=}jCkUh4 z3+h|J>;>Ho0a63P=<0Hi%)5uj-V!8rptV9Evp^W#JW$^aX72+$=7H`YhpBsrM_mt+ zy^rvy1N9AI=7IJjgWLwf=L4{BjIIvU_lMd036H%ZNalUUqfQ1%9jHwUvJ-^S?FEf3!0i2s$2`zo^)Pkc z@TfCEviCcZI`H@+0|NtSoF3Fs28~^S+yi2RFpLfAqJ!9=@kNk$iyJcoXh;gweg=)5 zgXBPb(7X*Jl6jyr`9OAn^nfr(9f$^vS%TOw^Cq}4gU2F4=7IXIAUTkE;IT?1^FZS! zAUTj3APi%J&J+f*Vdi~6avx~@5l9YX9;hFS?7kFc$apKrED#2%1JU`=FoK!)$Bh|0 zo(ggwXq*(J4rCs9-Vw=tpgS(0LtP+az~c-c2IyWvkRF(MF7C_>py5xDd09}qK<0t^ ze8}$W!Qnnw9~Wj`i95o5pgujwE|7VkHUP4DOPCqJ@dk1e2!qstXjq#EX5JomX7D^6 z$bF!@0YK_N=7I7GvUwYrA!FAdGe8)m4n)Js2AFvdko*gpdjqKhna2kjdqfI9(6|*S zJ%h{uVURiy&B+KEvw@i>;K2+YCkMF?G*=8#2QtqH&Ab!L5PcvsKp3PBMC+oNr{RG} z&!98{QU@|G63sl&SQ<9>f%-2XJuvr~Ai1v$DSpA{wIccV3Nr%(ba)@+EO>eW^*4~s z^YLJ20F8}<{0pK%av=AC?OeH;{#g(k zW*(0xGXrQ20Tgeb`!hgtAoIjPo-X5EO&d zfta9nFo+FvUxpVm189s5Z(d{mC+z7$pl22eQnK2GfG|iMh(3>I-VGl_Ju?|7I>&0kk$1tO)8~5F6AELAE!>ml-@?2nuJ|xID<-Xf*S9 z*clk0Qz{^1!1jU|VbFR7<_`fsM12WL{~)_S=2fDZr-H-05;XHnkj#UP%Y)1V-H!z- zk74DX4LhWK0J#Z-LH2^^+0gbLA$6cRBVx=0-J3;>y4O(ug4_VYAonGJA_~MoijQY# z{*CZsW&q8Pf#L%+_73s~$iIKl%$vi(z+ecShXff3Gx`Ubd20fh8E)`E=1E}V@*wj# zL32qUjZl16oPhy!rx}#X05eYpO`V!F1A{3nFhO(0Pz~ZNkno44gO)gE22fc9@&{~O z9%L_gjtr^?L`BOnFo4c61+hUGX0JM$c`uTg89-y6AoF13@*wlTcYlF2Lh)lc25|cT z%7y#G8qGYHRAvUyTr|i$*tk5%ykIo{M$0oWoB%}v)IgZ~KkXJ!Dk zsX_jQjmu**Z>lB(186-8$Se@XWnM%DqP&8Q%VRTdyCws}C(vRqkYPya1ta__m>Ir^ zK>Q0Em&az_N>k$e+tJI+09q>n@-J*$9-DcLW(?qZ8tOcFdO>%eL?1H)XpRA79&B75 zn|X817#N__$6zCIg`Z15qMU?{%VRTdvl#<}D9jK%;g`|R%m8XTg4_oim&az_33CR9 zda%nN1k7l3|JqDsW&n-*fy{%A%VRUo-GYGuw1*O68UxPo6Pbjl&tc>8*vxCRU|;~< z*+$5`hDnI_6>MA{n|YTlh>H)I$%y!Xjmu**@1+F;188j_A@?~2(?mbma!n2iWO z*tk44^BQd#7@$k2z)r-K{#<4w`th)Fd2HsbvSnZZot+3a3{U>(na#`q8tVu77d9@B z&AbhE3=E)t8zJ*1%w=W(jjMsogN@5$Gf&5!fdO<+6(RE)<}ovX*3^K^gN@5$Gw-tl zaq%%@AtF9tygf+f!N%pWnJ4eazyP|lgphw9EM#WLVTP3VuyJ{8=7~9@ zj;r8GFFs2V?Qz(+JT~*xoEaD#p>;9HjkwH9S<1`+YO8?a12!&?&AfD1$XY{?Ss;wd zya_82;})=Sd2Hq_cV%FR#nQe)FP}M9F*Dp@g@hk$TppWwES?Mu<$ekE zn8EEtko#cc^4QGVn7{ze=Y-6gaFdzg2sHdaV~wD;CN}d6E>g@FOoejsGtf%}N|Gi+QQn|X&*7#LuESCE;w;#c4yV*CI$E|1N;uPMZ}Pg5Qu z+NVFE{Viem%Yui@3@E$;b^MtY(7@$jX!6xGJZ^tWyfB)h! z&pnHQ0dy`e*f2cqyYmW>KS1XSgS>>zzq7K5YhTH{MYOLNp<|}l%zKl~zyMlXK*)VN z-ZC?Q)^39G2Qwb?cH|OQ-g|sRl=rN7%sY{by?=>bo+f-`W&o|30=bVJk9h%k3=E(( zl!W{n^9eDJ0~@o)7Je;xsN*@f(#xJti1fmZ$9 z<4P~9@`;O&Eng7v!H>s%yYd+rYKf@d&U|5J_yR5e1o4<>UQAs3<-jjQdq^0MdA`LA z44`}N2!-F1U(5`kwcw!e1NF~vg~=LOBonI>kSE+=kuSL0klT| zGgw#{Kx>0Q=?`>AC$9K#sUpsOI_wDdnc{I@ zR26aY5x|a!574~@xZGD$#lQes7eUCsJ?t#tauVcUOFZs-P{qLTkBISD9}X4<7wCAb zH6HWsH83!M=D7*EZ-NjD18Ch9$bGhW%nNBGF29usBl4R)9`jNfv5$|Vw}*O!Sr|a; zIzjFO-Q9{SKJF0dz6cS7`<(H(?@c3d@mnB*h+kJc<^?n{Fo4zs6N(Q5Q5FW!nl6xk z-SL?Bq?v&MG#5?CJRS)a2GIT_ka?bX%=_BPzyPw3ka;VlSr|ZT8A0ZG<1x>soq@p* zW*DCGibswGK0fY?$Gom~1_sbtCYX`9>Z3VwEb#eS(4D@x(#!F7;?gsRJR-dW;&I>g zb_NE}c|3&Nry!4TAE-Zt%Y9-U3=GiiR$wD>`L{dxg3=3U?G7&gUhiaJ0F8HpJ&VV@9wip|{9800_s#1fu08ZZ z8POgB-Sv#ieNVa|`+W(yFGqz1zAh~ukNbGKi5sumqQU~6M+Ai*=>8jA?(^wpU;x$k zgxsg2%EACz^9?dD8ISv_dmwv}37O}i&H|s$OT}Z}?H=OdtGx^ip!MK{%)6k;!T{O>0t!FS9pJd)V|^cS^JOvGEDWGM2O#ru@wo3u zKLa?N3AxWhmj&LR$;V?}&IID-%Nq0$Fz_KQaDo*L325`(Z}eCg zc%bvs#YpBALd^rM!36nn%RB}K*FwYqImkQ^u0d1xlb@LZbS@r94+w+QfN(1dmQ!y%-FZXk0&PA$$WDbUN;SAYRS6LV8@6Juj@O9cf} z149J`1tSBHoS}h%nTd&lf{~@6nXws2B!R2m)yItyG*|~R2<+!L_;@u)Xo?vN_#g(z z_>~4j3u7Z#HE6#a$bQg1HxLclp9Z2q`^rExXg?T;2CWwZ(V+cTAR4r93PgkUJAr7> zJ|z$h+Ft~sLG4En4cgBGqG4-rLHlPwe9*oZ5DnU|0-{0l%^(_79)M`jz77x#+K&OE zLHj5`G-&?=hz7NvK{RN;0f+|e69Cbm_5C0kwDuN6gVxi7XwZBehz6}+2hpH)=O7xi zUK~V&#?3(VFL2l~fX4$t{C`kBC@?{MCg@sD(B4T9A2k06qCx8$K{OXs9<*l?#D}fz z6@ZEhL21xlNszo4lrI6LrJyuuk0eMQG#&+_!DlTnFff4ceq&%@0PT$giK{`?Yd~o& zC=FV#0Fu{(^1*k*fzC34@D-YCy%o_a-nf zfXA0W@@`OZ4=C*gr9pchLGpf3K4`rSh#v&ygVqXz_+e0f1e6BfJ;%TRZf}6(oWzZfK+2jzp>O(1>|ln+{44C0r82v7zAonKH2 zWniIpa5FG8yaS!ighdjM5J(>$X%s0^)WS59qX(uJ7j5PUTDG`IiD4rH!=VKXjSLJA zI2byZK4=I|WMELYWLMw8(#XJ|$szlJfx*m?VUZG437DVAu#ka)hZ~{^iPz@W6?uN$Z=2GI-*JVI+hPJF<@@TSRoAw;zz1A`J1 zLl_f_BY0J&C(}X(kOz5qAkrYmH!0U#ahCv1V>_`h+)2^pNR!~=;eyK}F+u)b%f!Qd zXn_GlTF0Wvi9z-QNSueuhI_#&sIzUk_HeC`f~aX^U|7Mim-#Hyr3KXxk+sYa8r>=A zd@s5&);T$I(CN~ZS z1|FtkYz*K)=3#PU0fp)@CI%i39-$eG6Er3(D3tUBDJ}Te#sE@zrfDrB#1`2P=&m<& zWaw#zc~$lUaxj9ztC4}BgCneibXE)&$y z;WI!{4>}VIoBA-gdQ|g4Z4Zcg2NZKab14vURP~@W@7TmaXMJH42et38iG!9Zk|GW| zyAzvw(403maa`d58uN##m*9h}rDb4XVN?X2Z`jSp#IS2OQY{57wV7Dh*QYZvFfp+^ zb1*V6v#@67l`ydU{>Z?e={;Lv9R{e2T|-# zHZwA?vM{l*`|B_=u(5y^fHE<1v@Za0K&?Y|kO&(KXki%#%gJyC24)dEP((kt&&a?m z3Oa*}MPVBw1G55n%UsnrMh0d@@NOd(0|o|WUC;tWHWtt{Cnu4Taw3=Ax9d>9zmoIvdl?zRXf1_5@EP!oXn(vWbB^ z&YFoqgu@K9b)9GCentikE6^!b3_S7{j0_ysARh`au(;|oFmTv_jA8k|l!1X$UlG(B z+3}5mfy)sz!7a$bZ4cU%E#v`O#wN632O|TcP`o54Vwas}WMCHJm=8)dETWPO4BW1w zObiTyEZpuHObiS{Z$Ss&2)%j0z`!UJy%D6tz8=&OVA;yg$iN-#&cwjLZD_;5Ai|w< zpNWBiNAeH@19u*X$-vX4$;iN62#Np}o{X1_4BS?mCOakuzBqpt1_m~kP>|LvkXBH!3ef-UMhDSM! zfq}6Tk>^4<0|R3>h|R>@d`*#t|T*;f$=J6j9ng7(QW||Y%Cxt5sfK~42+=BdCpD1LlEaG*|(g$1i~W%^0E#I=d2NCkq$ITaefQr6{Ddr_NKtz`!UB z>fVC)cQVeY<6>Y?2Bn7mybKI>P@Nol49cM6QLpeaFhqgHAn^nVBnD;Bb|p{(%LU7U zBMvm1{vMV@s~H&7`^M4Fj6)12)liw1c6InrV3`)x2 z6j00{$r#07#9*jW#GqshTC4$HmY}6+%f!IAm1RqpKHnFfuT11_vl8RvG7j4wQyi zuo-MYBO?QYBG?a`nLyPWV=#l(Lw*JZ#zSB($Yr3M%{WJ&2j=-hV2z7FX-?bc9s>j8 zJWyajqFK8jor!^QA;@VE0bWpzn#cn$xU@Y@7#J8=g3gqNDA2YxXJBC50jiWB0y-y> z7#KM0K+OrA03SvMj;|o5F4J~K2CiUG6~+Zp%f-b6ZH_SLg+63t;Lit%f>H@snn8Eb zH3kN*Fi<&;tdw^@0|WO3P%Q;2g1A5h8>CGG65;|840;np7#X-vf&2t2KEY}j^v?=0 zFo3E>P{{_-0jg`cKn-#Rz4j_b2Hsv!1qLdlu(pr%ENU1SxDS9V1eGFOp!PJ_J}yu@ znL*E7g^__T1!Tk=UIqp(P|oE7vp^?!f-PiVV*#ZV{e<%nmw@sfSb_^Qi3)Xzcn<>u zZyhN3LD`TC%b3WLP?6d62)^|=`s_{A9!ss(r%m^naNLBw6Bb0y) z6wzY@yOUL2Qjk%I%|T+i6WBGPtPqn}J%yRX85qR489~w@o5f8aE&|C&Ffd4THZd{^ zG8zgqFi3VaF)}boOmvc9V32~E%Z+BPG%G|mx2G_Z1OtN%)G%-`$s#y1+zbqICJ-lp z<>Wh?7#SeeC?Gjaf`LI1Y9iDE)Ot~djOGR%1(r>j79LM>NCQYyi~pa!)bs#9H$ z(Owd3*l6f6AY?p+K>-5}HwFexB)5n&FlZqgfus=R7Hz0)P`BtHxb~7Zk_-&GaJ}5> zk~ZKt(L)yU6ov@uLj=_&J%vr6>I@)4pmYGz3M#^&yW$xcfNmg%5e;!J}>9T z`5;CiXyk*zU_OWjZ9isa;QTlr!~k`b85x2=CW3|+7!jKhK~*j2^dBaMVx)OM$caHv zKY?_CT!iqGI%rx2Jbe@engs<7$}lnnfewTPwJDHH2L%A=j9f;BAP@zr>rhPsDF9V3 zj10jb3Z@_!?njUUaHR>p&jGyY0%QU<1wkNnpsEO@0O44K319`FDhE{o=x|wZH3r}Q z59x4$G=e$|AQ}|-AR1&mhz2!kK{P0AKr|>SKs0E;4n%{>9}o>{Du8H^(~xP9M?rj0 z)eNFx=7L-Y;=?c~J%QK*=?)giF(%;cR?G~H%mxCiiiQUn7?_m>Sry-G05ODE)oV_J z#<+x86<51}L_}CQ%uE>>n7Kq*mobYvGcvF+bBnR^Zj51IVCEMGo5jK`Ai>JC;0pr- zGm9t-Gpi(2bT6Y6goQye3rIu6n1y6mx&J+2WMJkMV`1iliSo;`a@k}tGBESVv9g(` zFfcH)GeI=4F!RboSYVRb8LEW^%w=H~R$$eXJ;lhttSb!@5>aGjS{x5@xR??|6@+9~ zQD&9i_KA^!Sr&BM0|Nt0gDNUlPnA`%FocnTSy>INky)FCRe53*69cml03&`>6 zU>TSJYM^c*0|PUsCPbKpSwo9eX|5+D1G9=Yt9!?F1_ovyX%^-r9ai^rcSZ(gPh=aJ zvvgUNPUtc*Fl*>R^fPPfv#Nf4$;iO0WdId1HiR-vj35jM$*g4zW$2i&ss-7AqS6#9 zqHhLaAd}4b=BxtSL1{qP0wT^VY6)Q=lgz1B5H53uHLG{!B?boOa2rqEKB#=#JAOp;kE zgjMleKPU-?LS&h>!ypV~lG&6G!ezDyhcc`pzzk+VXfQJ`W{hNEVYZHf2=l{)g`!!R zc#{}mxscU4jERYX)&Ida1_suEqG$#N*1%aQObo1H9Kj3>tl?)aF)*-3Jl)E`z#4gP zJ|hEb)cj~h2G*Dj_ZS#hzGKgGzvnsiExiGej)_a!3(Ysy7aMh4bYEe{3; z*0j`0Mh4c5*8xlnteJ~(crV9jxu&d9);E3=n@fi=%2oPmM0U{MPr18bp$ zEfWK4@ua5=46G$H6c`y;ON+!97+5Q`8$cuYbB;1Hux?`1bz@>+-NsnFn2~|?7}FW> zu`etP46F>%o*>e+2}By71CgvCA27&@Ffy<*R9AyY*6SegYkxtc@iq`C>I5Pe`GRCM z+(G0lCng3~hOJ_~xZ+DQmU@J&``VtW7v;iby)(j$BH-JPI?g6nkfZbr0 z2x1F>eb>zaa_44skjVc1Ao9RR5Ge}|frKEC-nthc5g&UHc@r!m*T- zuC0L}asQXFSq>681NPBm6OhWyClQW7Z&B z8o_>_c?_g$BRG^&T0yc_Z6NXkI4vnTfMn~cK_XkEK?-W`R?q2iUbgR6ye0u^PaBkV6e%pzd-EUvLIdiZ9pbO z)PTs$IUw<4xghd=Hb{g&0YuIV0;wzl=LL?HAlWmZ9LexJ0mM$y1IcbI0I3uO=Qv+b zzGOH9jpaX)a{yLl0$CgwYcyaOs57}R?}CM*yIk?g)8GT|18Tno-?H>ZNwF`$_q zhI&;HyMiBN*GjPaS-|-#hzVrc-AN$Q^)`r1-wh&5G(qG(aQJJBfb_OEfJBP*LF^AH zAoBBO5P2sVWagSjhBK#K^#E6ETf}fz>w8j){TQ?lL=oisps*7+nTwY&I%Qj}{VHxmP^Tj53q23Gfac_s!{52s!R23F4>yi5$N zULM?x46MG+Jd6yiexYm(46Oc@pn4&I5tRD^lTsNOSc9&DVkg)els7}tL3uWGIw;=5 z{6KjpTndy^BDV4|GO$KA-2&B+wV?2i)&|uYF|%$mFtEl>oxs4r8aDxCTKpbRNs_>B z#lXOtHt%)r2!9u7*?8FqpU46K=EpxDo{2gO)+ z6sSDO*^v*bKifbxcAicL0|RURPf*@3$O6?+g&Nx!8CZ+_{1_Nmi?u*`q~yLG0|RUM zBv6j4_&l4DfwfZNE2u`z2i4xyzf2ezSZl(LFfy>#s)K6dx@n+XU%vxX#x^kWf`Y7( zaS|wIn;6f5vS%}+Kgd@tj4Ysp(#p66R8qAwZUGf59gLlzT++!{3G!waV=}0g?Pd%I z6%Rd(fqe`Nti6oU0gMc+eT-$GTBV;+2vn6%U=#u6kco`XK^c7#qpLU*1M6hQU$Yq) zSf?;Hf_yoZk^3$q1M4)#m!PtHI^$DN6+MHI2h^IF$yh1Cz`#0-@lYoN1M6(YBcLi{ z5o2^e0|V<~#;u^hTf*4V!oa|~lyMz169elq#t>;n2G$jfNA5E+u&!kMf0B`bbv5IE zP{LWmXbKAdwTvF$85mgCG45t#Vqo0>8u|e>K%|2hKn)Pi2aF7?yBT+aQvV)CsppIg zta}-+NHQ?6?qi&y%E-XFpYiz_1_ssxj4hxbKgejR%fP^Th_Mh<6&+?Qc4c5-J;FH2 z2h@yVTr0%Dz&CAV0;a#it_ z>lMb1eGCk&R~fmFGcd4TXFLol18y*?Co?dx-eUawih+UkHseN6)q0n)6jZa{W3&M^ z!0t2F1T!+QK44t(gMoqdAtNKmn~xZ;fE@9daRLtm1M3sUj1>$FtWOzjm>C&ZpD`wZ z;{6+=Lmwjp>vzUJP{sR`u?m!Ke=$05VPs(a&-nEL0|RRV(*sbJY-V!($jHFj!o&$G zEZdnDhB7g*b}(6{GcmAsGEGWlVqooJng=RidYK$}L5YDW22{yRVEP7f?qnuSP~kX> ziH(zyfps?14v@+@Ozh7X8Cd5sDePioV4cUbM2Ufcbw1NpP$pc&v;$OwEoQnA!pOk7 zgz1(ED5ja5K@GGOOiZA9WF?dDdj`%KC27#LU|Gra(nzE7BHKn226 zrbi{9xMd0ih1qi^C6IGpFnvvAVqksAlwHio!1{)1%1j0Z*0)Rnpwj&v(|%A<{hsMF zs3!fuq*>3%!1|GC9;jvaiODR4iGlSiQ!1!z{l@eJRFQsX`Z|%3f%ONIu_*%s>rbXF zpw`nbCN7ZQe=~K1^!;IySjEV|`j_bls22Liw8$KkmY7)b7#Ua_m>+`*z((fFpdz7( z*#s2w&CD*Kx}b%5JE+mz%6tXX_H1K54{BDmGtUHtO9%6_)eH=*oy^L{pmfG8EyKXT z+RdB_Di?d0FM&EYz0AE_pj5}~?9If$+Rwb<8Uq9C1m@TNObo0OnHw`17+5DU{|{qi zV4cjo0#s^GVQx!jWMG}jYy*n$Y0Mu$O_1r#zd$X@+03<|M)DlyPjL(ktaF*IK%q2` zSq#)Fo6qbE>gFt9EUTFAT{RAnw=wg%;u#mtXDmD>{L08k;fl=&_w$1P*F1oZ=! zGf%e%6;I4+hZz`HS27<4HTG9AOK${~Qp_13$FE_&3@X9aGS@5urDW!{Y77jl>zOwk zW@KR9z#Ix{?`>p`12x1qF+TzIGd44OYBMpgZejMC%gDgGmHEFoBLnL;=JlYOe>*b^ zsCwSPd=(TOJDHz>s?J@^E}-&dFSE;5Mh4b>%*#L}(SGI`pfEeY%m-@u9%PRB2`bi@ zckcwHa^@V6r;jkd22D5|XU@`LVqiVNoV|&Wf%PQwYDOjo)>F(c%NQ6~Pct8S!oa|K zhIz{o1_svi%ub-<_b#(t2O|UPJ?2hO=jA@L3n;xjV4m{{R7x>l0ri6(G5-WLB_A_K zg@Q^cW*boV=P9%ILf||}RnN2|j#4F}^pw8}V=0Biv z_YJcYs4RHP>;)=R-!bn4^(o&o>&#(fVEw@S0MuOi$h;Jk>OL`_26X~HGv5TY(!Vfs zfbzpvX3*^?tlyaZ-+_`ha~G(k@{{?4H3I|dFXl8*4gQ;1pr4U}^$+tz0|o}xzszo+ z`1{AK=g!2y`k#3N$VUwEkSZ;u#qmyM0sM*uSBEZMQz}n3c)WpcZ+QVWAij`iL-=J<)A4@u@FV)YY z1*&f+uxtgDm=jqZfQr}|ELxzrqj&SMDzb#vykh^}U2U|qn{pT@wz zx{##|)aqEoauyW*i&+AmQkF7M!Lp1+9n^?k&T<44jVoEEgG!WDEHk}8 zsg-34s1R7gq6>21T9zPC?X-?X4ir`ES#E+Fd>dG@E;BN)Ze*zhckx-0LG7*0ELNb( zbPEe;h>mqD%M~q9YGv62YV&SqdE~;xz`BEFu`3e;>rR$JQ2n=y}H9)$-uz6 zhov6WJK4)3!3C<4S+<>LU|`+P@*I?)53pE)BIh8>BT$|`#G(%hrNb;sijyp5Hy9XLPqDleWMp7H&0+^?uAX5j1GV4I zvLsc2ifxv7P@CvHi)s`j1M3BrpP+1UkwqGmr!TRHSu!xNUS@d)N)uODF8^X=V7>eWn>ot~JF-#1s*I7hC4dnYQ&q2NE2P`*!gK_}NK9K*Ou+%z&YG#&qps|r>EDJyh z%pKCKRur{)~889)hHnC0tH8R^- z{Xki!gS8*zzfRUkhd_%JK>^Kp1k@}&z?cK7LJu*11hqGgGF~cV1hsDjKpntmjF0)5 z7}(x0YQ!=yuzp|^0I6(ZS_rDk+L#`K1bdl`Kq@CQMqB^(u-$1+956sC2Qo4yrgTdEPKGusZO7ni-DP zpbY3#21@hJGN9&}t2$_8$jutmhj4!v!NkDo$q#B?`ZR(HQ2Z>1y?11rCwD`=f70|V<$#`0c92G(7S0iY3x-HgA~KrIEv*`OkE zFXLiRr+FWvF{pUn&!_~d^$sw8*JWa0J;(@Jl*)RDu>sVqI?T8j)Sx}Ws07OTM;ZG- z10u&5dwfq#MVM>rD$+grwqAg^~ZNr6hZZYKMcpwfY9 zfix2XYcJDNP(!1S>A3=^@?%m26?+qy{(y?-iA<89M!_T|QP611WTxYwWHp896Q~C_ zl}Q`axt+$u2AR`Kio#@=OeD zvzcdyLjy%U9^`$ET2T3}r4MSAcQ6)!+GCxJ6G1KSF2=41Mh4by#uQMet%uPQRA~1y zeqv+*^%pixVPIhGXXG?vU|^fa*#CtA=1+X~vMyk535TX4&fgXc46MRwpx%o(Xo(c7 zG(Q6)1FQUIkafzdK*fmqKTsP&+W=HY>PvxERe^f4Oe&xbjHDl^StFIv$iTp=-VaJ2 z8d9J-SaZ7yBLk}zC#cP+T1QEa|NQwRiP-Y8V(;4X%K8sDMl~yRm?Q zfz6`vGpO&n26U7?XsISPZ?WEI3gTpBV0*>{IvfjY;39icPzThl6IBLrxC_yuzXsKEcseD5J61M4^DC6x@I+A$e40`Q+%6x0@IVv#$?$iO;-MN@)_fps>E zDJVb9V>t>cLFTiZ0%e~CEQdfnq=hUz0*nl-i&zeWe6*P5pc%MEGP(n5^s|(J#*~(^ zfCk!Gm$SU8Wnf@k!LkU{hF{6j1R9ZE#o`LeH>+91K%V|)_vzCS11=NgUnFne$ ztY@hJHQP3@RD(Lo8(A_z>1Gp4GN`MvnMDqiTDGtVFJxq3-O3USa?5+xbWjEJopl8$ zHFvNXfr|KEwz;5Eax$A5=tK}ur0YL(U}9i3*a#Y~GJFT>A)8!|XJBA8_pE1NV6|8P zGT&-HsC#Su2GpgnaRLo<*gghTI}TEy!rAc;sQv2X1j_4P>p<1C?>0~`Jiy73iGekE z8>se)iU64wEi{dhfi?XOsFKQP1`Yn^Y>Z@JV9j*}g<+m5sD)QJ9n@nfSppi&uVw+| z?wa$U?n-S8sL*O;{0Ay6I~aFxf=Um@EnrVEt^rj%6Bs=}quG-gtwC~A7(+qUPh~s} zs==o-z5|Uy&R|>vYNX9#{Kn3}z&eMq4Aib#%NPr439naC zm3ciV1?*wo3L5I)%lx1U+!FTA0<|WX+d+N7bIhBI7#UcfFbjiR{fwDKfQfT#PJS41YX?g&Xs}^5 zi=+(`1M7O0Do}fKGs_N8;j^7(DL)ef>uwfiP@`f$%S=!g?J&z6P=D_@i#DjKx1Uu( zhLM5w0IMJ<2oAEEfeN-mtYy$cR9HE7H8U`<@vZ^Q0SMfMUX{RVb`F#~?B;_;N$ow| z7#LU`nL*=}t|_2=Ig9ZS=sp)v3TI#I$;iOUaRM~Z&-oZMJk8Y)N-x}JK|^djW!y{* zti0x+qJ)nD)D-7G52}6z8bNtba5iYjNvH-ivLdVw3OJDopb9|LQkH>%Rcs@u@D=|B zYOG0cg1Y9CYe0imQof)nTDtiH0|To};0#6vR@v=wj0~)D*Flw}yd0>NtnlBTfq_*~ zL6M1pRjCLx$faztl!1X&B^WeBt6H#+fq_-c5Hw(-z7LdNGZ_ zz^ZZpR4l1>gF0err$HS>b#2hNmxeqj$7!9ND1>=dUj0~(V85avOfkum*3_*Q* zMm|uBtcB?sXjr|IsSh;Q(8u%(G`P8dX%c9(Z#7dksLOSbX%c8;_5@SGWKh?TX%Q%B zuQBZd<@CEuUqIsoPngz#I>~RC8bRHT?@aNaDan!HypdS7bW>!#dZWpr@sBv_P`P)H8Q0G$*ltMMAYB+VVRDwp|dRTr;Wn^IOWmyI4`c7o&&xE#B6gPva z3YBnBcG3_9T`LJnSUh_(7#LUu-hnDUp}Ek5w^+pjK*>bL4HOJYNuaR>ji&_+46J(L zpk!hqxg0c}e&qnD{refzyYWc_^#Q^dKqDIov7n)htUhK22G+HV-$5neI>wWr7+=pg z3zRmGGUkCgD#sW%fX1GVGxC9&lIIzfK?9K&7#b~rWK&s znWsz}LA}V&OctOd`Gx5UXaMsM(>WPXtTKy&a%dN`Eyxkw%%4Hyk^RhnKsHQf76@1_st$%+o+k-J{H1pz(=g%w?dG?jo}a zsM@&1d=NC1c#qiwG&X;q`4T7>zhiz1a?*Qdeb8N`pv1s53FL3K0?;`OAU>x9sK(<< z0kLKO=ztowM?s~o!a~r%sp2_M&7$-T)ZkM#$^n&r44{F2)eE5BrP>NmO{0DY)B)1) z1Vxj!8&S34clqR?5G1}c;EKtnx-??Kh75g#ZE82K(&C z`Ok?3RCYSIgNhs%bCA9Mr&K`86;^}NTXZ@oTgB*u#@k|LKxJ}VIcP#I#pMel18Y{z zOhyLQY*A3G7U+R`QH7sC(}y*eK%JllMh#GT)W|4X%E-Xl#8?3;Ntzi?f=bO6##5jH z?p8)mP(|Cu*bi!QwKKj1MMekXW>AN_lW`I_6Ehlv@>Ujc1&&UkQtrHj@f+iLx zG9JtVjUzHn0A=LKjDJDn15+47LAB3R#+~L&ps5Takdo<)nxKBd3`QSNH+CjtAgEV3 zi%}cYRG!E96qF_BGuDIB+ycfa(-|397cy=Km0XJ$uY&?5 z85vm1R6%ogmDZpEqpBaEA*Jfypd?wN2ePG!F%~pG(#m)gv=*a{Q3BMG-Osd*or!_< z0MklPIe(Ce{Wv27>mjCN8Vn4qhnccKv2%n;6jU@GWm*cV>W(pSg97_F(;3ik$O)z- zP`z@J$v7W0z{B(dRHUC~$^|8!GfW3T4cD_w&p=AfF-d^>CFhx5g9ackFx7!_z;&iV zP}y;VN$?VQ@LUO0xV>jO4C+>XU^FRYGH<%khZMd7v3qVnQi`jkwsGw!$0M+Psm}h_z#a-rb&;Z9h z=EI=T==;oHK%?!CnE!*)_haVwphD^yb2n%r<~j2((4fgnW;4)`@hj#Dnc$Wua~u-` z>lgnIiZJ?gkUuJ$#yfv`Q zvSDCgZDKhMYTi$0VF!(x&tQoIwWVjWJOR~evsg}n%D>qx^FZ-1hs6-o!=B5M2TGZT zSu8=V=c6oUpjO;*mX#pePqLJPTC=BEgh4a7W8nwY zbLUy|K@PmY@)k7CdXc3TG(CHnr4rPvyTVcgYSCR~VF%S;*H~gfGX^(U)`Hr-H(5HB zL6asdt7DiLSnseb11&PR%OV9TpzpDmrGmNzEU}>M_<)5SRH;2==?C>k_p*KjCC%$> z{Gfi`4K`uWVuPD(n?ZH!Ew&e+?(A*05>T91hVy$c$_XZHi8iB;?=pxNuy z?0Z4>tzmx#s-M@g=Yb}V*R#(6&Esrfp9JbaY-HC2jVf2d?>WP?pfm&e}v(1jeuzQ~i;k;P9L^^ka%6^v(pccBTAt;#L z8bFg#?hT-xgU51E&&@Lllt{gvon&BO^}YrgbMUDFRaU+gTA<|vPeJ9ee>iBNLO>2^ zpe^vPEdv8<&pMpY6YXhc4l2{e425&>G;mdXm6 za7zmT$)@*$+Q}JHK+A+OkGV22ux5#X7Q2FkObo0A z$3QK?!bhNC;iBoF!JA?i(BOQ@X3+deDfb@+2G+7Ipn|Ks9n^HF@CP-eDq}!Rt*Yms z!OChWNFfHAQmeHGm0@+tpyeF(TA(_ufl&^WS{oVJLBp6$jGI7XZOx1tprXBnaS^Co zYGni+D8$;v*bM4dw=?E}>X#12ZJ?pSPDW`^U#W{x2h>gOW;_5IC+}gb0##kTjG#U2 ztbL4ibHU?i?fjrgFUBO$+MGuhJ&iZX^hRF z>UKI~2q>k^VB8K$tuq;OK>nV^=nu-;vl(B3rk&<6N`aEhT*g#T899%!8r0UC&zKHc zZnA(eunb&-m6d~ra2WSDgW7Y9QJ^|`38NKgy~R?-N1*hzjL{D?h`5}Q7gP_fVC+%? zPt?nTdRD6#zk)irs~Jy%#&y;(eg_qfYZ;$`7VE5ITm&k*)-z534ft+gTnMThH!^+! z%_eMOybNmjZf5)l>c?+kTmdSVwle+!wF|Z}s(>16+Zp>n`CtcQ5vaMllhFrM^6g@b z0oBmE8KvJdGO+Gp{H(*LH)oRjGUlC;wEDYXh`A~V=AZ-b(_%;6z_K!ZPtP&j~PFJ z#&7O1YJ#%Sea5Yz0g4BVYeCuOF(YV86zdbl>5QPs2*!<|_D0;!@ z2g;T&8BN(38CYL2UI49+dd=t$YI?k3Yy}Ogyk*n}&D*|Xya*~(-!t-q7H5563OUbSD>oyGb1->#lsgyC(z*7SH?r2QOIwM^FUqj?~JmbMP@%3({g1H%G)w)TQ5V!AZeXea6%CC{>p|m8O-$cF zYX_Q{6hI?vEll%4`dXP}LHgR5o`4!}?M$~oGp8L)e?dK(PNowe=XNoPg5tKDsT$Of z=wS)~)xNz<&8t8o*G&6B4cmSuYfz${z+?{U!cSx}2aUr_V)_EghLf3If(D|eFf9h9 z!KqATpjPoTCV5bJPG_16T0l61=`$z|&SaVds>5e7`GI;nvzeZQN}oAQmq63@bD8#l zMn~o`X@UB_^O+Pt_2vSmi=Z*Kg-ouX1qF+k3_#u0#Y{Uuqg+dvq(KexrA#@7pfxc} z+MwCrWi3+*XzpMgQy*w3 zb3Kz3h}ytp16f5O4jL5R#Pkj{Te+D@3sjJ8VLAsY2)8o*0+qwtm==TV+s^a{WZw>^ z&!E=YPNr(m-0Uu9MDu969=e+e2M7;=l}pvwQC>=>K<8Uw=puXdK$`uRzoiX4Y(9OxXr-8S`-Xg zEmkZDnpiIp0Ts5T%Ry^G>?Dc1r`YE&?R23RWZf?APPWuO7`>ORnDM9o%EYid2? zU(hhg2F4Ij6}^$M3Di8<#CRW6W^QIo0gY;HVblS&oOd$TgNNrC*_=URe2fvG>A*dV zRv`cGXN(4oxE*4&0~O9k86`k%z>|#ELCwokjLe{RIPk4^ahn-7a5;`*0x?^`~w=ly26+V>aJa7+yY7?*BJFclcv`hLqO%! z4aNYz>Fi$3ff^LA8T&!L zeZ$BJ${24Mr-1zTo^cZ>dwpP>2AZt;$hcgWiGlSKqaJ9k=`-UkP>T7&H~~~}e`Wj( z%3j|XEkRN8n{f?jR^Sh#FsK#wm$4hv?Ec4i7BtY($n+SrvaW@R8%-{Y+;-5io)22WT>RB2x*dhdznv2q?ZMGs%EjeN&j0 zgVtb9V-f=u1Jjv68>CogF!6v!gJv@A1yQq@)`13EXESXBMZg@U2+)A*TqbW&pK(6Z zN>GKpfXM?iJhqT&A*c>o#FP!nCX1Q)Kn?pPOpicHmNKP+hAWmav4MupRxq6d^%++( z9Rp?3RZI<_tgxC%A5^ukVG0FhwzW*3K~7r7WDn{~t!Fv|N<cJgJrf;BT-Dalk zpi+4YlRGFWZe?l$wV1Xs{Q%7(Z)b7>&GGDDItM+Vl~u6}G`6I?0%VnnBB;7jeFADI zs$B=IrP8bd&6H`egZ!c00&=m=V^F!QD+Vg43=V@P%MCR_%^;&FP@BkjB4`1Ei92Y5 z*>omo^2O{vsPAAN04mBXVn7XJOBT?exYY*GP=vLNBWUgDI#8`=yBsvH>~Ipa&%kjd zs0woV0IFxJeWFg}-P%C>8 zqZ_EFznIYkG^)LXQ3ABqYdPafP?v2LV*{w9Tg%u1>gya~%mb~{e#Te?>J@Y_3AHmY zuuf!}4O-wfnQ1F%_2D!ovquaJtjn1DL2Iy=GnazufECR1K~2q-%wC{z_EpSBK+Txd z%u7H^W7aTpgSsJWnLmJfYfdqFmKLU-A?_quk zN`HHqjX|-#kNKk)69emh=KG-1 za~`OaKgRqXG--F7nGw`eJHh-5)UG?ptOF{5PBDvva@lF-g`ft=8D>UM&3u;mD=1T( zV>Sk*$Mek0pvbwvd{sihsUu6yeRi@XN--9}j z*O}8mY2pU+Ay6y!Ci7iT59Jnf8mMHw&72Dw$hpHj0W@K9m-z{381o);5vWacpZPH; zu|8lf1%>rP<|NQu^dn{uP#OG~xgFFXc*3j-Dg&M}M;>BiV13Jc4b<6t$9xl1ynkRW z0Tp;3nIk|&>KEoIpyu6I=J_DU|6q;;HJ5)fJAuZL|1gVyCf5Ek&jtAYCO+m`2-qgoyGDPl$B?*>;lzkb674iF)^^t zWqA+E^z&FeKnr#kuxtd4I4@)o1dVbmVkrexUyE6KSAeISOF$`P8OvkPTA}4EM?pg$ zD_FunNn<6811K6-v9y8{A4>yhU~(->AxPyqmRq2f$9k4HP=46Jq6z8|ZDiR8%A}iE z-hw7bHnUs>wFTDF6SMLvPLY-d@RK!fM! zSj0*|vnDM6LDM-GSRR2w_aaLdX!P$AOC@O8`ehd0hYSp?S6G&TdP~<>_Jhi=>nvYE zadd;l1+>)mCQAmWw!Os?391inv*?2wFn3slV=PO$+OHP$AdK+63xo zwz0Z`M!wovY6NOop6qUfprP%InW@;Qq~&Kf`w(Qk)ToHJevYu56)Q;Q0Isw#= z+sNtwsy8;Vt_F?iZ)R-<^;);Eo&k04wz77CN~vwEpFqyt&e|gfT5QMK1?tW3WPJ^q z1KY)V5j3Q`n>82I7T&|U2UNQ4Wwii}2k&G304gr_v$}(tmX}yBf(8R_vmOVvi0-g* zfLdVpS!=Z!7+4>$J_gP5K4X;z@t(83tYKhaea+er8Z>;vx*9Zo|B*EXl<_{X?gKU1 zez0x@b$5QU9tHJ_|FBL14LJQ}6#xwpH?b`Mjg2?6tp|01JK4U2);D&stpLr@PhiUg zEr*`Sb_FzcG?nc>s8z9m%?ng%EMpS~rTH~%Y@mU<^=v$#L7jbU&p|Q0pRF4-Gj)KC zAG84EAls(1pz&n3U7!V~huOS9gFQ#sN3W~p-oDHDf?k>(VpsDlS zoby2~(|w#lpm5pGIT=*(9pK!t1GLV7(-{tzR6R<})uY%@XPH^Uc8Y(9_*MfrQ z6lXbTdB<7K1W-Ht9Oo@i3*tPd2B?vBiBleA!)4BUpeVk=X$&g-uX7fI3YHt3A3#H3 zH#xOI{e@4QNuUh-ne#Yk_1hOtODoWFZ%$LtI@9l*+@SW;AI|%r;^Hr7xiJ$1>l&`T zps}sBTz#OhUdQzoB)E|)6;x&I;hGIvHoBK<3n;PgF{6QU}6K$hs)ftHBq`++*mhMJ%;K;sZl+?Z?zHB>AQg4(gxHK1{An|+|Z zjO}ZXvz=Fia)4_Ls1OdF2I?b+#ejBRgfoCf>LPVO={4#gsFaK51%*=FKTsbc{vvop zQ32E-OgaFvH~BXxsiZZ5ij8zWQ2b>)1=T~DIiU2P6$wgmIoFxs+Eo~N`fk` zql{6Y(a>Xzb3hYuCm5%KTB|1+?|~BQHO5v@)p(uJ9W;7#gRv0Q5xvQn1FCs$F;3D1 zZ9`y`1eK|G86!c1lTR2of-?V8#-*Uxd&Zav8s>e@I1RK;@)M&IsJQ;jc$Jrtf%OZc z6R5-WmC+6~Ci9Ik1Job=&iDdUv;JT-2PLJSjKUz>e=%Buwu<~_yaQT?@rRKQG}!c) zu?{p2{*N&hG=K1)@g!*Uw1Md_r~+zaisT2C=uBHdMPxHm7O0GCVTuJUyKZHA2^!>Y zV-fk2R%E)G9U^VsyMZ5_Y zC{j(kK!uvwK~VW)z6P{l&4S|`BLk~tBB&;^<^r{sY+^zEUt2CvA!-)_>aE$cfTpY* z&V#b7BMYc+?)(BYI_Y`{G~VWB3u?-`e*slgo+_a7->VcfGUcNPYCHJ4fI`bp7BuGT ze-xCR0_K4V`M?@bqz9>i`z1P{`L&Skj*JYf5!RqqePk(U5;5uqXdW!O4CLmR0?=Gj zY$_LFF*xg9v`R|m#+sZ>g zv+N&e>qq%NP~)j01~ko3nFR8CRWE3Qw$=<(v(&u+Rn7IUK=IYU*bQnrG%`wo<|UgL z<3an)ni<(ZG2X(+0oo|t%D4=)5TT9n8ffsQoiP!#;-!Nz0+eyP87o0;lpe-^pn&gX z3;|{MK1K&nd!nE57pS*8fiVd*Uow#~22`9(Vw?`D7$!5;f$EMaj4RC;7+9w=t^f&6 zW84Eu?b8`ggIe%27^j0~F=jG;2CYG!#TW&ur)M+TfKt#L#yZfdr@4#*pj0xCu@BVT zn$P$j)azcvSOywCS%M8FfL9 zU&VM2lmJ#U{sOgk*D$t#0%2j2k90FtFKP0N z{OUn1RDZBx(-{3hMgLqzG0=LdMT}cxK-*&&?=XN?)H6DQ*5xl{0^Rt|x{OI2ltPv> zO#zkJE12Rz{pXcTD?oL|DyFNT+IBS)6KL3D4bw?b>RrpU57Zaj!1M+bMjM%`K+UpE zObnoI=4Ph7pp^t$neLfEmp*6Q0OgHr6Hq=cxeHn-+r&5()WmFKJO^4K+sSwfl=iw9 z#X#3CfIKW)2C8Nhr9k~8B}33emvSDcoHvMpUZ}$=;0@}tiROcv9AXZj(Qk2XP((@C zfEGhYP6VZOsr8^%w6s5H7)*u*G=3?29#js>Ie|u++fdkpve`P_A?T3TjGvIe;o>Uo}uk7f=D}#|7tsMx4VAffn~fih@SFV;Vsd zF7fL?E=h_9EjCUK2IZWLOi&4%eHYXM%L@c`!V8%|iKXNWXgIUH7c?zd#SEGws+9y~ z#s5U7fr z&gcso=9h>8D2!$^c7RHfIgARRX4YIrXV5~Fd5o(-J-zviyFi8e z0>*uyF|mb=^Fd=Pix_1E}6^v6r z<7z7zLqS6`s~8(V?cCLjfuI$PYZ!Gv?p(_l3`#!h7|lRkne~hdK~cMb(F)Z3+{k!P zhY7S(wg42Gn;APnEsrgX4xn;*E91_IjG*na-#}xT+Zm%kt@<5|CqOORos3POvBkZN z&q2!|_c5}51+@wpeL$lP2N>-@&B%j{d7$7q#25=IMh-JB2MvxKVLSkehog+oKsC-W z#;u^f`EkZ0pqk+X;~G$d^CaVa(4v@AjIE%#jMI$zpt+$lj2xhu@Ux6(LHj+aY{KO1M7Xp3(-uV zy|_<7qpS}Z%R!?lj~L59mHA`F1)!meCyWiCD*P#9GbmV}G1`KfaL*YfK|%h4u@=-i zeaUzkl-ed#u!kW;1}a3 zP><#}qbO*t&>zN9(0bp$j2fW6$UnvxpdRpl#=W3YzJX~8DB>EK%t1+U71KwMS5`B5 zgF3WpnC^p;##$yp(BR!VrWjD)XFbyzP$Pa5lM*PgZ)Um#>cwwiDzb-eH0ogT0hJD2 zOcOzai5)D`p!v2=mb0MDe2ZlTXxQU6iwbCr?;eXV^uj;Z%E_Qgpp|hdD9mOtJ_9Wc zo6YzcG)Oy_F$EMZ^BM1fdJroZUxP~PO^n%~1sdBKFM-OJ1B^dF!>$Jz=YTXEW>iuH zZ{aot*?g2S2b5EfF;;@6vW_!u2KA>-Fs=ekLY-vn0u_a)82^JtDb6rvf^0v_$Og(l z=NOlQ%)H3>4;1}(7{x&YAa@y8fVNvdV%!MohCgPM0o9667{6zOr&`THV`|SB8$tcB z=Zw2SIqn7HZ%`xYC1WpmsDv>RG?o03@eHVE`IT`NXn^1s;}lTq=nvyv&?2D*rUcOV zb|X_AsLR#Fqz)RYY-U;w+Og5fHv7{1!ZAx2T&#G zlK^t3uLh`@>&F4AZ2U7o>H~^FYr6syK`MjFKqA3gKv58K59F87hoE+6SS`rS;o^5d z2R5w*Edq`_4N@Of530nYUxTXJ7;(^Qo!E7tDlhH{s0xlx22E5ZxPfF7lR*V=k}jx8 zoqQD}o;Dejp3@J5=I1kRf=1agSwYh;Sr(v@B6|U-Gn3N->dxgZmttgKE!YE^<0xza zrNg53SZG|z%mnT4R27&B&9zD^K&@uw51?r@^_8F!T_XpyCQ0)F$oE=rK-Hs;9%w#6 zcQL5q)b9axE(|t<8ZU;epegQfK2S$Any(Xd*pxTOoQzn|Byt<00I2flV2lHm&7F*{ zpn0><4X8V%wE#4%rd2d&jjNYKiXd>fwP~|X*F&9*2Pi71UZ2*|Ucm)(!QyDEl8!M+V&IhH2S&R&z+34kr zcg}-0uP|1E>i<=YA3%NMwTy+J$amelm(3U}RvM!juV0K~tGDKvO!?n3_PH#pz6ypm~BBOe>qAF`lLi8fPtAYYOGB zXS@w+k!)ss1R7S`&iDj05O9dm0W{cooKX=J#E%(ML0$jvj5k0r_?uA$ROPlYJp&aT zvzeknd3iq59Z;uc4U+{ZziwdS1FaC>!sHKHH?@a}7u4wA%Txdw%{$0+5j1Lbg2@+D z<(^|Y2pZvvmM9}Gno@Wyt&L1K{F5wnFB%1o2AU6pf>eN=A)pgqqWQ>po!a! z%rih8@U6^0K>g>P%)FrH#$IMi&~o~N%_wdQgolQK0gomE|*NlDv~84iw0}EPFsr(1|R`pi$$gEZLxT#!Qxj zpb5gcEO$W@{R>&dKPmSqR1zq^rT38-_ll_e3h*ls6_EU1OI zm*oX$3-dvid!Xv-D9Z=XaL`GXSD;?=S(Y?V;eU}u4%F1Y%JLP|@4v}X3tFpom!%Z6 z$nGHvFDN{pvM_+Uwl7&SLEDSovTOm3AN^+u2bC4gtlL2<+gU3?L+stG$3YF?epUz2 zp$L;%FM#sTbXI>*w|6${Ur=*+F>4{H!?2unH>jt-nsps$7-=)>J5aN4J8K1K#nf)r z6wpaa$60+qE4$9KdV&Tfud^-#HOlU@`hhC9$E@2y_Pt{L0NNz^n)NoQG2i(4jHP{qj(y04d&k5Ly|Wy^(v2J&tGt^#$T zSAYsXhXs+03~U|`K}Dx$k}LxQo7WrAY?=3bV+IB`KUq-O5Oh@ov<5sE)TE4F0V)w< zb3pC2xMB$g2DbF;pn^K1vX_B@E%Op+RxB%H1|tJot^#O?p-^0afq|`b5~#>1yRF2? zz*hbdl;ta4E@NO|tJVOu)@q&~W?*1zV3Y*4C>t5CsxUCHH8K7I?Mi57Z2rc`z}Cii z71VcVXEd*2WMJ!N^aIs>J&e+&)InZHx?T6B%cMW~C-Et_8VgI^zRS zx}L#UrOw2_Hj|MLls;!M{xoD_V4KT$7nJnpF}{IbO3vEJ_#CvByO(i0s1H4n@ic7w zIh_qO-rL5g3yQHRjLx9iXey&Ws6{!Au@O{DPiK?`bq{ASdV$u;&Sb0x%}vf?Oa#ra z%w`k;l_+x69;I$ z!z89)P|BLcveUrYb)f#;KBgC-e&HRaE>Pxr&ZGxwcfV(91eJr|m~uha z5rJx?Xme1}8#57<>SH&9tdA=M)$0j)AfFs%%mMZ5&NJqNW(Dsu?gTad?lC%oh7I2^ z&H)!TjGI8qd%iQugNmg_CLhpRlQyP3pcZ{Q(?d|(v4cq!G@MYAV?vR_^*Xk0Eo6x1Xs*aezDEzATpor<_Y z)nIYnI?!es#(q%N{?B*=)PTFlRHX^(#xhHTvc(VPN1)Pl1M3e^mAZ~C64W_u<+uhq z(dZ1veNgZ$=Bx$HjlAWw2X%ipa@T=YU2Wo)j|A;)<2C|~LT%wb2wEa{i(3$M!6zu_ z0tG-F%%C}-0yy{{XysBfV+&}5_)bP9P~Y(n<8;vQ@lB>SP_6xfNgH&O$8zR-pxLnB z%sQZ=p_4@bG-dUK$IzT$%VdCN zSj#}rkep2dXga`lA*k)?upd;2IPL~*4RP)RRlzP7CPHgmt;e861!mr$xeId}(83vu zJ)q4KRy#m(X?-8mL$tXA8vM4)0F7qZ&jHz+C_m`p(RK@-yz zP?x=#sRT4?(ZaM0G%VK2wDuMQ16v;xs~aN&TR&4TXw-HJlOZUr&ty_L#>l|d&axA> zjF4#(sI$p?4YZk2lv@?*CC3vWzEc3GN8%g?TFvj`1X}LuRsm|Nxfg)4w?`qULiCIV zHHW-XL905vr9llBA2-k#f$w+F7^GhrC^h+z4t_bTEd2MmD+` z9YBLEeT>ea@R`6E4JwuA+M{nq!;ImtF?@?t-uD5$r4m2oyGDjqXl1dZCfW@G?0UA{2pfYNUZlQ*bA*~26S8bqDKqzoEr zoX=DU8eCk-BncX8+RVfP%0zpZ)IfWXjxg1LdfZo;j)6vI?lElx4Rk(Z+5vLQJ0@q) z$jmpU2vFzgAJYy&1_stPW?@h(rH{E2)Kr?v{1=qW=P+LbHPjX{Gk{ietz-@cwNf@P zTY{E3?P0zS>IocXo&xGPpJqM{S_*TIxe3(le#5*K)D!>390Q8NMixgQObYdV*r3lXVHG**1~&1}J^c zVRZtv^OmwYfMReHYb7Y_?__-d8kIW0Iv3QWJI<;C8cey&ssoxMxW)PeGzjyF6*Mlv z`iJ!?sLE<)TL5Yc^{`C@mEx1xUV$7jpKTUsE_V%^G-!5eJKGx2>YSr&m7pb8ciGB7 zx$ZsNZqQi%7q(_lzyA-LEr@DlKLnb#>SSLE8Y}E!e+L>`?`2;B8f)rfp8;y6%x13x zjYThH-w1O2T6P`KP}~;wC!q0^-Ry@ziS`h?5GaqIV=n>C>0D*62W`vf;_v~j@|?|a z8dMf6;fMq!{k0rrpmKaGM;9o}_Hu-QRG#Iy4w{d<&%p?a@RuCvpx)$1jwVo;{o$DW zn1O-yFUJ#5Z>^K_7--(Li?a*VjhVxF3DoFc%ErMH|0AXk6ooD3?x+PL&Vb9oE7I6*0Y1(!Lf6T5}$8>o@_ zh-*10xxME42Gah8>lmmH_M58;v|77`yB^e{@8vcHbql9)mw^^K9OGUEnt?gX{T0-E zy27mv8gu`}eG252MxI5W=0rEo0Z_p=g(nQOE_Xgp4`@#F0M8MS%5yyXK!x8`o(NFd zy~AS&YL&j>nF1Pq{=t(3s-1fHPJ>G7UcT+14Jv(nR-kE$e!fGXs&)e3aZvwdBHwpV zr*smZBxs@gWWL#;G1Mu1s-Q0WRK6UrbNQ4(K|Y;t4ybsY!M79?kTdzxKy}M3K7CLK z&gR<=lC{* zI&|xVbU@YMR-s7H)Z8AS$)JweVWAw*;OHqKGf%$}=HZP~rYos1VdC{UT%t z3c)`@CqN9U7^Vq70M)~Dg{43duvGX1Xhvs^umxxeWwUT8s4=!n_&&(mgTik> zL2yFY1eBRC2Zx!jXqxwp@B&b`{YB(4Pyu*Y^et$J;k2j_XmJ0Xs0FCS)GX!+YLa(}F@Sh8#Lj}6SM$a4 zKnot0iERbVO>Ple1u9#2i)nx|`UNpLQ0MZ7*j!M8zAttGJOnHD8Z_|rMNA6RF8eL^ z4YY`*N&Gt~<4q8E1x5dKaRE>wS}J}Nw3lyBoZ;5=O7xA4Q$fXI2jgc@ zZl1vS9MpcA$`}S3ADzSai49u8DE|=pbmxi0KMYv)T47 zs6Fl+3R-g;b`8W1j{#L>5pAGV!jb1dlNY5dphXa6X`sCW<+DKjx#|a(pjD}&KBzGp zc^5P;AH54SwJmv%L0zi+Goazj!r!1+FFFbuR4=XuRfr{Wpxjc%2%4)YF9kJVEAl{rSosPR z&sD*oQo4o%H&FBsWD!(A^K*Mid2YsR&p zhW;DIYoG${J!3BHY%*(G}1+{dYiptjr8h?Ut1YS{9f65)`vJ(?LVYxo1IJ zXY;m!YS4Uh(7Z8nZgY$PJn$Kg_rq)T24V=mQF(qm06!MLowD z4}qpXk27|GN~IHwlR*n9PBOZJLjM$_9mvmT8E=Ck_7bBTXtCKf#`~aLdYkbCXn65H zqc-Tk_9u)IpdC3c7}tXOQ*RmhJQx{RKQnrQRDNOf1m(7`j1{23|HilhR7QPgGzE=P z{b0Nfn&A1#CbnCd|zkc~|B zpt`<^=@DpLv6*QasDx}`>II$b(8ja^G|be=G#%9PoXj*CR5Z?G3V{s?={*DuQRrU* zHPZ}MfM#kOK7gu3$2p+!DCZ5Jkz$wGpt8oT7F0UA_kuExhX`nykmo;8k>OPY+EU>2 z5|pHT%R%K=zzI-t3H%3YD+Y^$#t1^aKy^%neiCTLCkwReHI^@yiGel#J!nQH@!34k z=)FE@#66=C#h@cex){Yleb!#ai=eUZ35?00VeZL{k3a(+(-^JQz-iSS zlz?Y5#(?@1zZt)Riuyl{J|OK4OeUaer;%wLs5tLo;s!Zm0@EAN0{>Y|-$2(xfxN7f z1giIR89-wn4ig-pC7_ZdC~v9%hfRMdW`ZgMlZ&8*9j41crG=R z=ZXVOVp&ZA)d|)Gpst6_YfwZwM1l$u$D}(946IISCJYR$&Mctf$|W6CCb%vGiMR=a z-0D6VaCq-`T_FK6{cOFao4*{ zu^Sjb7f&;=Dsh4O*hZ^CYe+2;K^f8N0jP|Mj|4TZk_14F-IPdBQI>WE)K18-02Pi| zJ3*5$>ligb#rHnOW1x$2K_RU87Sx$il~9HHN^cTqFO=aKkRHo_pw5*IBS?jPIH+xu zu@clj>S5#uZM2%g*a~VF%x2U8T@wZ}OzARct+b{<7SyTyHK1Lg0`{O?3WBRZlL_Mg zH!(7>O=dg@I$UrHWAar72DYh;6`&seG{!lW3=C}384K@2wJY_5+V%mipn<}`6wq?& z35>H~1BlMvpthH1JgBMXr4QPS;hm@hI%@s}sJ|Fw1L{o%%Ys@uAvU1C1;~A~nQA~z znZqOrno*j|zMX~+E`neIzhVywlTGV zI!t?+PP_&k)XU@zDnySm%>&gJ$C!43mbRT`$^%WYons0B&8uByY6P|Zt}$tY8hUq` zu7e8gdrS{NY5oP%A5cU6C6ha79_AI3Iw;G&W_k!(!t;hH8&rRPXNm!p2S1pkKm*P{ znesv75xJG3!R01Y^`GpB$C4?39ZLF-HUnTtSO z)d|d9pkavV%+jFJVg|D>sJ@xctOV*TE?`~X3c3CMBZnVLaUyg!)E zf<|e6GQ9@P1pH!}4{B-tX4(K6NNHr&1Fa(KWex&OZckzM0WI~P%6uQx$(qT0479a; z7V|vN^!GewZ&0^mK65yzcw5b!2yR|8OM}XQwaj}#IdvWLXV5yo^~|xLmf#L%787VX zR7?al-c2roYH<#;*WWbNCyA*7(KG1GTIZwu071B_07y zsU&>?olTi+4jNfaSpXXLOsxb(SQ-PUZcmp7m7$s8pmkMQ2B0o>_6^Y1uN)yzip+Ha zwQ=$kKpnFD8z83@h=V#yMgE`(`SLfQI&mUn9;mH4jnS7II-H{Q5R^QuCxcvTn+-~S zcHy8A1bZWpUmRRPb8C*XLCXo8R)H2uI9Gs%8C-6G+6=DGK$W)JZjh@I7lLZiq|cy^ zRq|iZVKw_zcu26w&>s^nY_f(G_n=Yb;B?G|W_!vaPd zP(i$qkpr|YbtR(*sE@dYF%`5Nc`c(qDDc-Y@_}Y7)-!Gc4KZ$IoM#O+S=kHJy)>N& zNH;Q(EyYyb}}vnrLkR%cR|hb-Hb_~k%B#pi$QhRUdA<`Em!*(zks4)KjR6I z{|+#+gPMzn7-d288HX8pKm!y<8QVZ@{bP)>pwWkuj9j3VW~Ue*fV_N~aSEstb%s#_ z)cZNhxC+!tJ;!(pl-ABO&H#-vUSPZd8nnE~I0Mwty3FVe8Z^Di$N?Jhyur8#v~A)h zqbaC_xy`5#T7`Ru@g!($=RV^JP`ly*qZDXR=OJSg$SaQ+=YY!m$Bbt{ZPq7@y&yk4 zWqbl^Dn4V>0*&y!WLyTCGkeW=5L7;YVEhRxB|kD&gUZ@Zj59zzxzCLIKn;U0jAo!g ztFMg3pyA_hj2fU>$nT7wK+``z7~4VfCO;WdK^?e8Zl>3u4pk462WU}AFH;(*R_SMo z+rh}dI)UjvsDhltqz`IMOlDdJ8d#jlqykD7)0pZ(D}-k-y$9_Cn8~yp6s)tDctL}Q zvzhjQ)?v(Hss#CHF4IZS#MuI-xu68MkZA>I=xY%Z2dELSnCXE9w5aCL2X(9Y!80iW zu$dHA4qZ^Q6ncO(TvXH(WQIgKXbq>N8)!bEo$(oHM&kx!8K|hg$*2!%5Z`5d07{|{ z7z07=kY|j?L2ZZEjQ+xm3=EQd3=B*R8@U)57#V-_@iH(nGJ>v(W@KPs)DJCAEh^Se z%S=u!$=7#DEzT~`|E8z?_2oq7wbY zqT~#U%tiBcab+<@#(`ai;!KbTm5roMe1jYYk8Lmq6rvP4HMO|F*a&WBMM-L2aiV^5 zeqLH;IuYhV)a!x`(M`=s(+4HT^yFlH3<(oG3q4bqJw%v{JO6+!Bf%s{4%E%bOe)q* zD$UGE(T9-GD5uCRX+^22MJ4&gFz4vQ1Sm2U#fQ+Kq@saE`MFdytvElKil#x*jebcc zF{KzpG0CY18mmfp}&pJS0wP z5mZe{W^QT`$Z$3WhJvKhG>FdJ)Z79Ht2715NXdh$N=bz(0=qPWfgR%J`22zrkP3DN zhWrAM3)vVLK;D81b1*Ozm!#xmCPCbunVOoK1~Qq6fgwIIuQ(GT3@Mx;Y)CPpm%+fw zz>t=jSW;R94g^*PhUEOBRNc(tM7<0KPOz~MCvh<_6s4wuLx+`t0Um0|Y$gVVoc!c$ zh@r_Tsc9e=vx3clIE{&cAu%T>KN(~;GXq0vaY1}ZVlhYqHv>a)N;ce4JPZsesY#{j zkWd2EN)T3jW?o5gDadE63=FA7MS1xU-@uq4%PNcGp&D2i7~G0dQ-ebMgY_~Pco95j za2W~_gCx{=xYfK23>k?zdKnCSkf4AB14NZ>S!z*nW4OmstXJI8(QYNr4SOp|0K$1;fYDp$6 zTa_e&gPo0mAr~A&5Jo|KaY>3^27@qIxF8->T0pp&ptuERcN2(VnFVGLMoLC9RIa$B zC^HY_6tJ_PY*tWu$OZX<8O{P_8qOp81EPAt6%^XatZNqiVt=TF^CTf@QZi$_X`g3bqw}aFsLwq0tOck=YV+s zfDliAzj$BAhg=tc zp#gEAhjW0Yf|{BFgzFd-psC3a5fUF9;vMf6FyUApkYv9XrQA2mGg6r z2r<%B&<6V(q{G!O*fHKC+}YD5*xAF?*EK%KG2Y0)z&zeu!O+mafFU9nYqc&Eq!$KYU)IYwaM#^CD&@&(9S3h@XwgJ(dzyK6{%NMwMkMrHx1 zjijld0b}Xff!a`ThXjX*xdsJ;0w=`Kz{nupPys|4z{1?q4{A=Hrb0X<8jysbvEUjJ z;^`M+WCD&FV*`eGr(l=(fRG>;PdB&tkaz`#;E&C@;JEy&ds z)QG^Z8r(cgE-flb%`1s7E=mTs2Q@SmG%^d~jp8#4Of=Lo3*u7}OA_^9sxk{QQi?!o zH8mN0U45~pPEbU6I)#R~Y9yAF6cuYK#K(genMtK3sqyg&P*F%a3ifmKb&dCT3sx{O zVes(`4vF_rfW~f+qi=kGql-(BfFnwk>>3XW4h1DcLp=i}hWL0FC!csLX?!YZXvN2a+nySlnjpV}0ysXv z*(n~D#C;t@oINxOl9P1c*}^j*-ZMDf(JvC5UE;$WeL(WMcA$1~PJCv8rb11Pf@eTH zcC+GLBOIMWKst03phjxKW6asvF*MjU-q}AO$luvDIM_ePJl@4K*wM+y)kVSBk|8+6 zF(f$N)6ZF>LQ{buKHkkI1eBHI4GrR5BLd>%6^tzyTqB^SfJ-{xP@fP_56=(H|#|pbQG;Ye3QoBzu~Ha;GLke0;E{d%R4ID*Fob|=0{>vwK(NQ1 zB12q*6$~)^9G;k20`jnDK)joOP`G1|3&_m@u0g&Eh79OsP=KSKr*nKj5Gc%pT%G*= zLlg`dg8f1Q;)7g6f+FKVVdWnh0*X)tLk7 z4)vI~YmlF-PkflGbBKQsG;9niOh6@tv4H_Ye2}ZFUr4-f0Jty&6)hSCB}Je@9z^Nd z#pf32+QoxLSaLFpOW@fDTO^4Z-PI!N?GlMS?+T%viz55ER62 zL5}Y6sCf&LtUSWO@eT?APk%oJBT&I>433i^|IiTEpm;|g*Psw+TLDy%fmr7?cVPEI`p=zz`AQ9~|%P>Kfqh2dy$7tq(&3cxCSC7Xr?ZMz9zK zc@As_$OvN#sLw!EppSoeK#(USKL?{GYR4cqP|gCSS!fvxj!;-D!U@!hu!uK-v?Ahz zLtLEv{e4jDoG@q>0(l)|HPm8oI}B1>3j9s*$IYsS{tGkyxS$ zEhb@d3d+g~c_1R*6+~u&2(UtifZ+I0UueW*sn>#>Ux=9rIGx5TSQ;4_8=D&$7@Jv`nwXoLS{Ru7 z_<&3BC|7WnV2F=*_X~CQ@$`0$cMA3N3Gwuc4|8+`6$s$c#v?u?#783|1za?MC|$ew zl9C))6@_q+t9g6?tO2cHP~i$n8=&M1D%RW_gF`GpE>ZxyE*{R0k7tMo0ku^@&1zT@ z4^}WVV<;&~Oim4P4E6?!)Y4KxH!ZC+FBvp`qFbB_ri&GH z(?BgbWIkvRAh|@hEI%i)Br_*fHz~6uEi*MIr5Kv-z_H{BZd}KQxCVzP7=T6~;!BD$ zb2V~Pb9IU{t5P);KumCB5Y*E01Nj5eCoo{B2m}p@1gGYugyg#w<>!^S73Jr81_xq6a%3`xJ(5}gNJN_UHx3*L;U02g8cnLVC6S>^eHhXvnn;dD7COOwYUTtCeV`A zARg4kGBifdL>hU7G7uxM1=X6K&hSdg)yLHt)Sht(iVt#ik9Tv82UpJq6~<|4CZH;Wp(r)E z4ALk_Pc4Bo2S5chX7L>43Mwm&;z2ETa2zv)273gBfQuCkI7>^xNI_e{5MDm{g@D__ zA)xdK>KK_pn&Ba!1Qg;K<_fAvEEwX09Q|BOEaHP*U0vdh6hPf?BV!YoA>g2L^YM%@ zR)E$g0X~i)ZvH{O@s7d4u0bK7m`=%8s4ghV%qsy!wzUGNMFbkPj!!HuPAw|Yh>v&k z^l^=k*HMTEwbxwZ<29{o70NR*b5b=7G#LV1K{a!Te*nlRaC%M<0#c(h5xl(9kdzacBaMaCL-rSm13Qh$lk9{d6bK5dQ#hBLF;50P0GD608Db z+yKN40P(>M8_?i`M?7e(#Z1A}0+dDaigPnd;z7gP#U+Wk1q`7s0pPKjU{Fih&(%4^ z)ddu)CZUinC8$Xf5D?%G>ZgRb2Dv#py9O)36Ieh%0H}Wjb-1Trh@l~*<)UB=6?1`> zu#WEWF3_43S~DXg+#nKA9Rb1d{^3p#Aq5MD%mT=~PJCu@ZfQCA1`1XXF}NaY1r%L|u?mEB8OEaNG9pHo5xOp8VsshDTGzre z0wiiZ{X#%PPw}9UxcGn|e>YDb(8vI^S!V%i6@!}%K90Wep27Y;jv?TTYzS)gySO?V z8^yZ@1bh1UgT@97U3JY|+(2!7Nb}S=zyPTaZ3Hd1pp8gKcPSXsScO_=Xl}va8xR^F z9^@Dh;2IPRY7c{2HNKvH4Dduy0j`QbxffgsrD-bI*eDp8Xe!hwXlNjW4Gh2%7MS7& z2A~?t&Q1ZV99-7OL{pOioNC-%L;M3m6d;w3hf7dAsA~vnoP*p4>SepcgG+o+H!?KH z4_uZ&YEi$Ccpq2C;1EMIaN!B5ZIMJktuk=O1yY+ES%Bj~LBkN_CrAXrW&A>YK_db_ zu(23$X$u;8(9ktDFb6k$oI`x#U7W+?oqd9!2Kl=BLIpz+qBWpG0V?bW7l!vd5raYC zMzeusynzC^(F_~Nbq+9tj1L(w6qY8YD1eCg5@_^-$~4H}C%h}{2+Fab7Amr9AYC*I zNdMd4%?;G>4+(Pg3-ct6*0A5SMxFA3B=cXV-a4pJ~gZcqC4zz{U>=IrkWs)>T*eLS69oIo`$s4oN#dr-0I=@jJZ=&fJ`Dl_79 z!85H25DF6Ope_+Oi-7w@phDLeA>r@l1`;s{g*Gmb8-|cJ!ys#6IypLfD`-MI07}o0 zQGX8w2593U)Wg}+0IB_83L4B{h<6Kib@c{!xqUsO96>D^c%L`I$Jf&!9@b+uc5?$q zIW!93<6>csKAtY1U<3yjNQto<19;59*D*pN6vkrk1P`|wfkxvZ!6hoBR1OBEp8%+c zLUB>Djsmo)2U}hcUjiQIM;p^LG>A8dH&cN2!;z9VxSeAfZw5O$9q!gxR1mYH$wK)KsX32*VqYE}o9= z8Zb9ngWZS42_B9yUA$$W^LlqPrCh@Kj;MT68A*B5U8X^Ft8voD` zXvzmyA8z2LAgH(jw*g_DZxeXa-7^YYr-Jf>fw2W*s5w3~*wqD8qcKzjr{*RWWaJm6 zh9qXEY9P2e6;7a`-H=SsKntX-f%Z;=Qj=3N%Thu87I3%LBQY-}CpErAK@-$hg_{TJ z&49)WLA_RlSs>AZ6gNkoU{E&(-0g$<2sC#DYd0D(WERAOT5zDTNTht4l3xuPg$I}D zplK~|y9y)%pXdU$q%=WspaB`u4>JQdt~9F^P#R>==^rz&*_xnHd+>A+RI#-}ZE8+& zDo77xaS_-VP(3DSdQ2b|SS!>bT0o$ty^p`2JE*P(^=uhjz_kEqs6E&lQh`DnCI-fC zh-~8Q=>qAKfu{m3;w?bK84?T{5&$*7f;1{z%Tn`7+>7!{ z3v@~=oH9#_L-K=DOEeW2K!eAi@C6Mb_&Nr8y9Q|#RQP~KltKAW0mK3ga>SP?Bf^&u0ZQ@yr6nPi1*r;9c6pf&qBY*aTEV!HRZpyf_EBg67V^rFFcUqong+r-ps_^_4X_xv#|tWvH5Kd?lt2t6P(Kq{m;_h-2C!y-s7nB76jH$e+Kq}22yzW_4b;d@%+krt z%maBEGG7rN59*5=nt@iuKt+5#{rrRC<3TMi4Uh(KM;oF-1Ed$)vjFv(LV_HfL5&*| zgHVRNlKhNfP;&;f`WBQ9!8~Ym1_Z~0hIT#uoS~yhhGq<&e$GCjF0S#V;He1r)RN$m z#N=$y;Cy&uNotXAVo|n&A$SNcIK&Y;hNn=PnO6dec~=)#M;9M&1rt*SNXh}%xDY0! z!UZi=KuR8f0mO7lQ%D^NM0kp?aXKoqDT$Vp5uR!~!jj}HzG2?AwB z&`?l(JVH^84CJpF#n@gl$Jb01`6c^y`Jz_`&w93N3 z#Kg?N#L~#rz}V2(Fjd#k%m=9ya`ul0&4_yXxx(geJY9noG!%?LJKnQIKH`OGqmVbG*Y6)I$f2NPwoSKwD$Im9`j-U?)~8>rvsr(k9g%HSH}0b0!l8r%mB<3g63z?$Nq#u`R; zMp+~RZBK!waKLL7z~(3zfM!R-{aqCTg5$&eUBQ9Q5Dy8hfFM^l*AQoqc<`ubum(8m z=V{s)*c(`Bu5t3$C<_(Du5;&KFaD=Yegt!kP7!MW%ui%6X^(kmWTgMPCc%TN>Z3h>Ht`W|@P$gh~gsUTLY#M3s z5;k@NAH0NG3R>X_>X?Olx`cSdgT}2O63{di>>2`=fsT(jxkJjI_+Zx{PybMG(Pac) zssSE4fecZADoW6DT8Kf=)>A`6ftW)D4a7iZ=0GyAMlUED;B5#J&;@~^e&AH<>Y`u?Ehr$WT^)mAp#+J1q)|F>D+}DM2eqX^y~}vd5Le%L|8PHe z-yYPX*D0v*FV9N_EgJ!?JOFp$LE@nPd_fsl3e?(GD9g`Gf%f{LI>3E=(4b?8yFt8< zqjN~StBboUsDBP0eKa#fv8v^Yq8bW6$QQKWf@r342m)E zY8{=#;=IJ%R2>kZsQ?yN0I{th`76jZFch@T2R1Y9=@$YYZ8d=?aYib~j6iKUkN6O0 za3@niLj%;+$k71vbnW8H;!Bd_({eNw?Ccbb3_yd?pgCq(VFenj0k;%jeJDsy1Pydr z;AvKZvI@vr$ifX+JIgh~8N9yH2$U8Wia@J0lTlVNL1sT)T|i|7tj+^fc%YsiqG@CV zN=eWeCP?+^7~lzA{^}bV5g!Ixat~f44qDO(ZiOMO6#=J5P%8}7i-`}1&Y;G}D;R`= zN=*ZJYBqo_r16AqpNIz!_yxJT#XEx+7P|Qd#fL^0#pTq+fzsa@$sNc2;VDE9A9Pz z*-l^<4-?EtO-xBG($G{;giPpbGQc)LKnz6Ufo5r8afP%K#0@k{Vggzv1KtUOqyiM7 z@!-i*@QOn-Gf+bDh!5~_^#i9#1#ki_h9}Sh&=?J96}%aAQ7SmNVa)>9pde6$E9jcR z29F&hKz&chK(b>*d_1TR@9Yd)C=Tx9f|fXd7aYTvrGN%Zd_9AmLCb@J6-*f7JnB!p{DFe$d6okVQtt3QY(ooEBCfCDwoK@CoDE(O^Pn!fk|5t=qO8W8=Onwm8l8X90DL1i_j0tN7%A4p@*)z8rhR-S>fAvouN);#(9 z`#{>@pb2i!%p7PxPe?py8xE+Mr(p)jsRyv@LFi_-X0y$fPtn0n5_UAFDg+0i7D7B z7+Ay7A-E`qtrUmNQA4`Rt^vUchL%PQ;JokT83LQR2A|Oq4+;z)S5QUn>>VHO=?2

    !Kr{vM9{$_RcG65;+HXrDato^??MAqLPq7|33H7<9fS zsJ#SQj|z%MM%aJ_6KItaX!jyBh+t=6VPOZI!N$r0x+Rbev}BrvkppyU19$?2(FL?9 z3$oyb4LnASTIn$|dJ2Qihh|n}@D$ePW?(>CtI7&H*_jQpjFlaIc`H2@v%>4Gyu{qp zVnSP(o(Xh!{NPyH3NH^q>6`xbC#?1Z z*$!G83mqVZa2c2xKqVuT!vKgP=6B21XI|~7lPRU+R!8j+UE~TN@$4{WB}|= zA8=g@DvV)!K0t?RfQ&45|jSR}Xfc5BMAys5p4v0;q66oAU(Q3$hTzAQFSx z@u2b$rVUh=A!`N6f%vpq`wE(C1(^@B7gFwlc#!d2klmm<6-2}Os-Q7kQ20YsLDYfR z-~tfo{2LkQnoQ7d1_sa>v>@|9 zB`in|l%ha-LGA;o0b$SuiLmoML424TsIG^xLE@mZL$S?$g61?qX2b05K=KDDiGbul z_JWQTK{ij6k%0l*+$X3H3Q`BEJwWz??%@F00b+wNNDhS2&%Zg2qfSS^+mr*xxi+9H z6+q^K>;PfV9(|CzL2M9)$)VqEIt9tUpgB*Nf6?0rK1{^jZ3;do5V{Wslx0BXfy@Qv zW#l#oXkHUre1Nk!xKEo`nmY*kwDF^TTIhWQ$p!IwrMaVhTI2%>KsgH)!}1wOl>T)x zwBiF<4z6=SB^Zvp%wTSYvC+qLiCz0M+NXt#pM&aCQ2h@J*TL7PH8#Y$hZ0Ah*3g3Z zwLcl4$`fe}7PR&UBm_!ZxG?N|2T*?&6lRQ|1P5YZ>Cb}NzR(Sptf00QqdBM*MrJ1# zz0(Tq%+jOpN?`OBKGX}^h)GV*71rG-N=+{w-Hw@5njTN~c1(DCACx4AV*LnmHw=UN zu(0|P)JMWvUm_(MaQy}?%s_2(SiJ{oYs1*cdq_a}6DAItdV#S)eKHsueC|GIE(X>& z1z7@hAgoUe;<*VKysjX2lWS$ z%>(sKvGpa<_hou8GBAL|KyCnGkQpG1K0mq}M_&@XF8zaJd>DOx)PxDL-x6de2!red z(dhG|F-ZOeB}tfnLHb#q2yjy?#3#|iY3;eAtZF$=2P2e5+*jd$?z zK!b1smcUA1NP8RV2ZoVTH$xH)sM;iDz3*t<3`r@VG9JVlt(zGbK&OO)!UBXrbr1-n z*Uh_#tebxmSvMO~xo!rXuTJf{8Pu)>g$W3Q!URO?n;4rxRwse0W(9(4mndBO3reS; zHZ+Ka_l-fB7~~kpo*6atq27_YXJ+)=p;QLwq3C3HbYbZnl)Q#hT?)!SSo*mrNru$A zbo9(21_t!{6V%6tEkyyPAy|4s@7s>9{e`q!(fhW;eeJKliLnKAF)z3RrFH!Yn$O0l zKjFtEfGSc(xGB% z*f1yzp~)MxB?HVHtv?wUh&f{+o5=p>8Y26jPl!Bg2ozDEv2V~=FerI~;t!pxE3S+i&(14D!H zf)3`cruI!7Je)I`yp`IGe#m}+jIsa!|NlQT17i&X4ITxv z2r&V)5}cW#h-E&A0h*#@R@m;CGnuU+L8+x5>rx&Qi}<$S0B)2=a8%lSvm{r z#(`oKJWs&D08VkB@CBtC(Cn}h1LB$;5F3^PKvRhLt``6ww49S!l3J9Q16`<&aWfoP z4dh7W!EiHfPG$+zrMNDaLkTbj^z)mMYYxyFbI|NAC}<&=8QhYBut6l|d0CtwVK~OT z0~eIZ;nEDC`F;csWFIIGBSb)V-XeG)d1Tjv_@LFy2o=mIB|JzTlmw9F#o>FdL82hr zU}LGEL?Hy)@B+&um^lnHw}1=*)q$W&7`k3S1nNalNQy8)5+2AN7#mb@f!HvYfi5%z zC1{Wu5F2zy9SFnPlc0HV*xj+9(oGnYvZ0j>jEylq1YMR0au#g;J;*+oIUqN{^vZ(V z4_(#>${aBDpwo3=>Os9xn0n9{3QP^?Y$@oLR0i;xesGS0-0un#2UT}4b_>WZsM|p6 zuwmwa&Si$NK|u<$3luIeHb@(c4O#~cV}sW9!`PsEJz;EQH-q}xFmX_A3}d6;B@7b} z1l^Ym4QJ5(>@acAy|pkl$X_rv=pH8+8ypuP0($-xEDS+$3R45B=3(MJ3=9mQ`-4IL z2CZQSu|a7E)B*spK}Lb@wFj|5X=DjhJt*aa)}DjJLGcOF&j?L>$ZU`h%r4}#1iD`V zCJqW87#nooFN_T`hZqc6TLQ|NAh&|l!^YG=Y!C*;BZvm&H4q!Nj${uTq>Tn@PlEJ= z)PZQwMlui^X5I-l$o+yK^FUz;k^`9sau3KnkQhiG z=$IS#-G{zz<^u=h+<1_ApgaSz z3*^3~Q1^k-JID+*W(EdO{sXZ=800<>28BI{hN;`cjQxCsoeT^Npm+r71>w)k*w1A@ z4Ye1f286X)An6Rm24Rq0Ao>_udU4@I`L=0Pm84ViqI;l?O#UxJw3NfND9UE*Yr70!c8CU;~*A zG7m(9FzA9lDqS7}yS{oIBO@~_xHAR5_>;K~%!YKV>Nr_pohbrKoMGJ{5;|2VtD@1G zir}&CL9&nvx{nhSEudHgHQ7MzK2Xeo#6WCV6oKRjc8~^pmk7rd+psbSlne>aCxg;F zNF@Yg-W!VEPXZM_5VatZ8Ku_&>X$$p+#pHtJ|a*|KsjJOs1`)#gGyCoJ}9pt^FcRl zAoGRcHiF_3e2*!tUxPhqg4KiiC7^TwG9AQ*xeC-T0cBv2D?n_J8W0|8eUt!D=?qTP z3=E+5JGp%hP7=^GPBuFiY1?u;Kq8Jn|AU-a2pi?JcdO+$xd!Dhi;X&s>gWLdXt7fo5 z+E5_(fpR@a4&**iyB^s*(4Zo0Xc%NZOb)aj9;63m-Ue0%hB*w7^F2VN21pKM9%wB- zOb+|8iC|M_LhV42*?5` zUW#_NAIx5m-#~g`<{e>!wBbSKfy@EPfoRbE=P*4WBabpNFo5pi2C+dHCfA16R(-(+ zX~Toe1C@p_^QJ@H2Wy+#Ghv1c$V||hI}i<1x0wlh8-6uf8~zK9{os3{_JZ6D!aC4< zgF$Q%2H6FoL1&wS+zJa98+OS3!XSTu`s^S%P`H5dAuNr8^kpzJFo4?sAT|iY%mdM& zdKn}J!UiA%7$N6>g2q8WTu|A8-sU!7Wne(=GlR?l>DMG0#3WNzJF~`6`wGUVdOptSD1Xv@K0F9A@@-~PIatW5Tf*8pL zROgbi_8v4&0^9!vu4h37?&x|42GCeHDBM99mZm`M7*IUG%J<=PMm3Y@ zh(9Y7Jl=#fcEtm3&4X;kjX`Y+kUK%{Bjuucn2F%YQ<6&h)SN^;*uh!h`T( zOD;iTAbHR{7KjbPAbui<0mUFb@_tbeA2j9-l?Iy+YM&zWQ8&~Tr52au7p2Ch*WCS%-p@9Os4<5=TNP+r?pg4uaG^qSV)&!CR@j>%|AU3S_ z#-$E4WDD{SA$6dBAILmdiUgSlN>d=aKo}H0AR5$^1+iiE0jOL7o&5moQ-S0_VFp@H z2kPH}^nfs^e+L>D0I@+BWEY4A?OTSiL445s1V}%K4Z<)v(A*`+Y?!^EJIO)nK=y*{ z0m*^*==}`PydubMkXaxMGY>?={0b6(10on17(nx`F!Mn14Qh+P!VaY54UV}beG^jy ztalOMI>*C^`1N2iAP0<=j||M9^$MU!fMU#XNm#CdD8N=eg7POs7E&I9(mgUCl+KX( z(J&5lej7A52onOO5A^bI7EBVVemxo=d-<4GjsH1frPmoahTs0Y6%9Ql;Dkjpu>l3xq-C z9%$_mhz-IZJ}BLT*dPqzgT{S9Y!C+V!PC1S4zyfEZ)c*HtMyQ|APS@(wcIRDEJJEk zf_aD*C6o(mPC~h`wj`7bYe+)5uvR3L3u{6`xv=&llnZM-j+TL-*df0RtQnv(@D6m( z`#_X|eUKmnlSpNtIq0?xNV!IMFTrTv8XSBm#K`Mgg9{_%h9g)YxxfI_M1%CUp(034 zMyLo!A;WpwOkOPp~h@g9l%oG_E9x%&(0JV!j@dPTT zNf~1V?W1F20G|%W_?wTHfsv6BWCSAv10&%%GU(=+_{8E|yIG77=cY{=b z+pl1ukN-jANyvP#Fq8m|S3sFy3UeJ5XaxpX3QS!S3M z6LWHks~Gfh@{^0Jpu-F4sU`8r1*v(7Nja$u;4Nn06wAQC5DQv=5Ap;914A;D4azd0 zbr?d7kiEvBQ5Tf?H;`q}c0SA;@OUZI9I$#2fklllR1L@jFukCB2xEiCT9MR%)Dgni z##EtB1Z#zb8v2+jXzdbM0hEAQi$11`OC4ye6x7FtYG(kc!!`yAzBdA<2)gbCbpHTM z2xc#6Yyjj|*chk@Gi3cgXt)`aGC*>mumX+g!}Ng60NqWFZ4C-&tq@2L%)AsN^FZzf z$$`uRje#MX2U>FjicgT)APkcO&8NZGAn^jUwKT9W2i?&JG8<;^6lTa;8jwFgZE}zt z$lfMU8vlwFOGTgzF*NR9jfL&Vn3-6rErutlk32fzk+w21$U^ z_AsiqKz@Q@TGUIRJO(l!6n+AroDAu)AXh}7ehkjK2sC~Ks((PqA5@jV*5-opC(0UA zs70Xi3RZ`J)q@HJXr6|NgVfNg{sH+LMz4Qx zsY9=SKUKcM^OVE({Y|8x*p|5OlJ|A5ZOAg2DYU}9hZ?a>0& zIWYHu*y!~SXuKP=&j}nDsP&H-N%ap2XC;EpYzCzRP@k58L4yI>e=>N$%p<}e2!PvmyfiU?UD$t}b4eF%V%&-m>BY4*gBPSCBBQuN*I-mfV4eom3uDw8;QU|Q| zg6z8n)knzvE|8O8X#qyV>MxKSNIi%K$ql#q3sh!-@(9Rp3=9L;?*fG{?tWKhURh#J zW=dj7YJ745&bkh{-vw$rgX%p{9R|9O8^i|19eBS3bo~P8*cFgCXjvm@?=^@GYWsrD zxC604^&F_&0kJ{l1<0(S)_((qDArUpcV(gcV`uRn3AL$5zU>WHa7 zL2CjgfGmPyn7!!rC+LnI(4GWB^(W}AIAZ#5Pl&8P`-!YSR}fi$im*WXWgvgR>L*Y; z0KNZqg2?*Q0?9m(Ik0vGC=J8fMxdYtjTeH_F^CPquy6*^pt21l2Er9g3=G8d-#no8 zHb@T$gUkWZ`X*+UB<&$EhjsS|k3WL$Jw&fRu~nYrcj!PnO=wVgHn1S7N(!n?(7f^h zR-0J+eIPf1;vE^o>P?UwC~bjgkUXgD#kXe^W4q`eAFl-Y35IFe?*oM&xL$#@Pow@sC)#m(d$1@ z{|Y1y!?5xUz5c_c4!!;ZsUxQT1C{$-FiVm8A?Wp=1v3K!Xq*#NZ-9aydeFz%*39|#8J$|+04W>nTdNb6VGNQ-os3MmznqX~h8QW8#>$10A0;U{xV#T`Z_xL$szD7(fn!r3Dxbs|P`HAoU;`BsbjZ zK~UNs4E;w?_=4+6tn+rr+bKw!w*&110oQw=i5^(J2aZI@x@cJ43#uPsY_NI|F@WQy zpzr{tHxLGuiy#`k-b3EA0+I*CC5T3^_i(90ulGReh^hBLd#ge98OSaWhS`f=?}7S# zpnck)@*Q8jCr)I&2bu$dnFoqaP`H5V3-o!riA2_W#P<8nAk|aU==Xu{*@M-iAos)k zfnM*?qTdHP2L=>pAPkE)eG_vNlJ>lr!LFns-0uUm8PMxJ@+&>^dxtcd?mG&u^zc@9 zpxN*NtM0J&`#>%N#XmBJ)psB{P<;oYLGs|Da&*2A6ch}^tV4n2DNy(!&G#WyV4z+f z?m7%M-v>Ig5L5*XwfR1fzrle8U8?|Mqt{!=Yv4ihurNcfw{WRLueU(zh^ek%u3KI~9g$w$8AF=(l9wO^4V*6_wkj%qZZ_%Q^ zhCB`c3m1J8bJ*rWaEFaxf6dH<==G8(Km)L7>rKoQ8OZN-(WnCIV1mx=;hwPrCE)?9 zfUxzqKn?<>Z)6Ose?W4e`UgaVnc#A zdff^tuX{I`p~h-nirBR&p!2GTsjG-x zn-V}|T}AD+DGf+<3%))UsE!2r7Ze8|42uu+wUMAPQjj`O-xFV5MatR~V&>L3m>C$b z_pvMtNLrg>YC-hc$PQ2jM60XF?9R>0e4AXLM3>1b~`$*u8T&R5{&=?PB9t-3ya9sl}yg_+;D9mGl{0eeA z2;-`2KxbEipfVK{ z{2)0{_@mEbog;D`BxoHuG2?k2M2_br5IK+KKxAFhK;%3YXg>ilbVg|iIz8(Wq)(xe8kr4xG{e--B zW3*ocI`a)uDuL<{2n#}j;u*w3ud6`nh^eba`$dquLqKa!U||Ug&mr6|G9_v5X}I-^ zu8j7JhDsd;%4aY3PGj#h!mL?;8zG&`f zzi6~y1SuYgTIUU$t0J~v1Uffnv|j`bV5GgW=yesSzk^W40I&Pe>ne~sV(O~Vei8P% zY6$m>%trKl(WB9R(P+Pj$bJ#{X!Fs25v;$1Ue|#7JH*sAAa%slHKY9^>~+l$?iX2( z^!cJCqy3`Mei5{gBxe6Bsr@3;(RFmt(1lRA>MBrw2ciN(!qkoSix?O{cUM3{g#mJ} z0s{jB=*%q8Y$j~&`mo<$WNKhEqUVcVj`oX2`$a_di@+B=jrNORb;xMHh=GBaa~DSU z7eQ)SeNzL|kv?CvdbD3O+Ao4+2b#bx7=PqEcYjB>sU}|VE(&vjdjrNO1`$drA zgC_kV^U?VtXy`&HTy@pxd=VskKx;B!VFVH(_O8U?KVM`ByS$0Gy|BaW+=cI>{i4x+ z5t02ObIdclN6%dVg&n9wWnch}RYF)05?0=#uT21{8(l|-xi(?gpGRkEXhza}k%cLA zDFfmAC2~NEJdn;l6=L9LFjHjsvzh!$CXW68PyR9AG`d{rCnMr=C3}3AE4eT*Fbv#D zs@U)61-S`QG9XCUS*lLp(`FeMKr~1ebe1ZJ4chAo!Z5ucaeVg=7NzDS>J6ex2$|tK zS3tf3m6f1FdLe8O$;`k4RsmZtNBHhua0r03f-&Y=JkY7AU@0)c%)kw%VFWV+Xr~g4 z2XYTD{A>qM7!z~0Ls4ov=!zileOV%mkT?VR3dY7YUxj?HZ#n}51Lz!AP#l9?JP`Ns zg3juM-Sq@Ie-y?>gbscdXuTPzjsv+Lq!P5Z3lxSRHVA`?BoHkPy#oWb25k!T-Z@a5 zgY<*cfzD4=gU)Y(!V;tpbXP8jhGCFe5F1pVf>Hq?b)Ylbp+~WUv@w9p!&dJ)L+u4C zVu0Mej_qD2J2Zc+fu0c#@&_mkVEza}GfxJ`{TQJ0VnKRf;c^GbJdpoDa-eVlokYEypc%QEY(f4EMfEEX?6HtBwrC*R32*dP(#D`mbiyR)z@Rh<4QEJqu zpzs8l1`0#0=Tv|yP)Ju2T%LgHO;Ff_^uXA->QLC3vLN-KyfP5?LeZk$1cepI{~!!1 zQb06%y_rB{y;%m*jD%tFfnIOoQion|g47XHZ?0otV8C{-6nec`0X=sdREC4%5aeG_ zxsG0Mg3>}27Js1Eo3Q&3LFR$-E6hCfdb5wndK1@ui0Jhu>^?-0z4+?Q6GYaVp!*O( z^()9ceDx*^k@e;j==tfOdJ}ZQ87N#pW~0}eF3b!Jl32o7-_(e-we(cE2lzSY9$*1s z3nc?VVGAPz7GVn~10G?EAOi(qizEX@VT&RIC1Hyu17%^0Nd~VzTP!ko{n=uZ!JE&6 zuCscT0nu5t!B=@Y4qRsy+r3mE=O85qFcVg9g5*H;BZvk`fbtu@`f(6-MHw*rq9C7u zd;!7CP!*s&0ulN6ACy;+`4DjkNsF^@VRnJSmvCP+wW6dbkpWj-iLJj0YVUx`+=1wC zLPCu&399!%br#5-Al0CLB`7>VY!C*OV<1`)+RuXZ14}`INEl=Wh>O0iAD22%{fOLO z1gXPT?}6$wnAsrn*D^rvwFj|57$ygrdjz=^)K&qBgZd|+em0?dLnLwZ7rmf;DVTY% zdJkkC$lV~jK=mkSOdjS2kiC;})O(=%3|SqndJlaM8LZv|*$b;zK=y+Afym~8>OD|f z3FHP4hRLDdQ3a~^K;;((!Z7#gn;MxKfM)|C1mXJ> zDZU4o>`HIY^%Wn0D?Pl`9Vq_{R9_KWeFt(6DE^T#tiA)ufocg54U!*j^&QAhFiea3 z43?)r;fJL!2(G|DT|r!R7_7esY8Qj*gMsMp!NP|Sjji4S`5UGWRIY*8==D|+NDv9b z!VJCM!le$q-U6v3rruhGqrZk;ZxMSBumF+u7P0pLcM(}{jl_F^LHCcrk_;@p=$jf@ zkTkz&ZUn972+uDHfD$j#IHw>3A83BD!S1mo(*(Q6mO{)Mu~*hxM5V&mDqV$)HexU}gqT?+(HSk(hIXpw=x& z27*Czl@Jz$WM)8|3l9ok-2JuU#In@*rw>p**UVQjE^5W#?{Mi>-W5T`T1)Pv20ii64&m^f4!K?+-)2MP4t9!tzI;?da z$VJd30H1k+P#c>B`3Z(;*;fOFA5vcp zR(XNCX*kCkVf{2KSe*qbG#Mc0;0=X)i9vpbg)OK|1F_NTtOAfA5{8vQ=yet@b?9{# zNF6bC)(Rr~X(mWzGbs2${s5KH=yet!k#$xCk#!d63|&wg1Qs-~a6unmB(|Rhy2qWE zI_m(D_Y#BF>A=hbg$FEL(Ce%xMBYnW0G(F@wL4*TDu@kgO@gWnSU4y!GcX9lIMA_b z5Le&S*cjUJBC^ghfmU&Z>#QRn2cXqiW{M2t_qJ%Xq~tFHBQp~xGrn0dP!b-n$_Lvx zA;>|X_(R69x(6f&s(U~*NPf80J)k@dO5-5E4P-wH6ut!eS%$d#S+IHvlubb0q@gws z2J$~74j33f??B=(42nAt8@-;wr4GHG0;waWo+9>)c?}}#sp||34A|Cx zpwEN(5Lr)A`^=CUB!9r_0Z{#d-nRnPkD&So6bB#-ix2d9umwowfy@ELFNj93r`8Zz zPgy|MO@i_*$Q+P)AU1kE1v)bXN8ifS7+ga^2!eepQwwOdM!2480cAk6dW!rWQVe+Y zyep`VW&F*@%fQG89>-v0U|=L%gD@}@mn4>?#wQl%>IH)rqcgCAigE_#LyU}^ObiT+ zjGz@zU?Bz;SmZH)_=FADM>dh@|9fU#U28c$lXF&VdK;keA%NpqQ3@&x(^$bWIG4%|nUjbU%hi)&Z zo&vcQwm#wu69WTiOcOL#1qyzU94P$J`$Ol5tY>(LtY@fwUWg4+y@0QtA@+QE&^l63 zeFO>@P2HP1nU{I;nyE(VI1ubG3ccv4wb#w zpt26smV%T)1Gi2PRIU;14;hX2ham9;Awh8mVxiYlp!x$O4#O~Y==Bsx9WnLPXnzPY z{yTj7Lna2$4cWxiQ^T!4baJ#mG*s#*SQ!SQ>E9nR8to5(#v(w0&%l7OrUBH?fl7fX zT=fh{9WnLHXnzQMJu`IsLncPh4amgRGsCby)IHiC8a+P|Tsnfz=m3p+KsgK`K4`=O znU7e9M^t~vc(gx+2tCBz!lV5m;_g2o_Uy#rKR;wb+WjZPtv_^Ov_CZ39|F}!JdkNa z@GK-~-8CZvLq$nOVop4C?VRywe`vHn1g~;O=Z8RfgaN$!0<;VO7BINyhfGMjyJQ&l zhbE2oherED(2Rn4MiYhoA(PSm5Hx7P6l^?hv_CZ39|Fzs62D%~)Bw5wj<|8V;np9z zKH47|?GF*tA2J#34~_PRz;!K%80`;{+8;7Cf^K3ZuAUi&{h^to{h`tR5UB6~&j(R? ze#msRKLib0Fg4mA0tW-b=>8$>^%U;?L#8Gqt?M3c{h@oK{h`tR5HbBB)6xFWXnzP& z$uKZ5jP{4H*E6{1hfK{)!95`eF%tI=Eg0<&jrND2B?#5$hs;L%L(rfFQ=|PMa4?Ma zhoEOHk}yAHNz%IR;np8|I@%u^?GF*tA2J*54~_PRAeGE$e+Yce6Sj2-xcft9M$iM} zz#XEI*dJOx+8-M24?#;1s`rP?NBcw2paoN-{ULBLjP{2}?hl!nn1gF52tlx(8gBie zH>3Tb(f$xI{UP(w{?KTD2vW(6_J_#n51Es6j;VzSbeN9tIi?w)trtk=m0!Z5ucaeVjO7NzDS>J6d`B{1*0Mc!!#s&iPtdsac?3Lt+I zKGPc<0uZHG*W7_lIfY9zFf)K|#75?WPG&&n^D@Bf28A)fGweWj#xpQ5fbJFo-3tzi zBan|^Y+UyTV!Kxfq!;AcfjIjcbnYhjY+?om2GCuwFg7A&@Us-4^&rUoAeErIaY5k+ zVuLWKI0Dh2dznCN*jcC(h`c+#0;CxU!}@lhGw?tu02JmRXcJonIIZ;MiaRM1aM)*i^ zTAe`7fc1VRkei@M0Zzf{T2R>ys#8HUD4l@v1}Hy(#6TFP7bHI1>RNbUfa^}M58*0FZtd2B`(H z(d$fH>d@;r7Buz;@pTdYuWo%MfH9C?&(p zL$5RYh^#Yl-DQYgXTt6>1lfzP&IH{%52_16aR9=w_yCfD zgx=p<0J^`|K!Dj&$UuhuPA}K!MpZ$Uu?VGRZ)R*|Nw$nc1>wf!$-v zNgM1QTP`|a_tFX zyXOPc5(Ke9^+Fm00|ST+YU_Z?+=1w8g4{|B2Gx6@G6>{Oka|#`5)>XFHVA`?4iJrg z|3@iE5DA0K0CCaJ&A_D&R6m05!UgF8VURj(^&Y4`gP9Fdx0Zo{AsfViVwfE0Ty~IK zVdXohZvtvBfbO{fjXr?nK=n7MK7;8286knAuZVun)EsDE5o8|7-7xb&cfBB+Hwj0* z2ddAI)#0l5G8rIud%^s123miE?1j}UAb)`BGi38X^&Y6L1o9II!{pHKnfica9>^S+ zKS1>sDD8sug76z6@BgTP_7y?-7-k-bjb870Ff%ZK(h$gO5Qe!=-_)G6d#23HpvPtqdJtc|)kS2z zMeIGkJxKn*S8ow}kM9N~^I-K1h(@osXmO9PC@6tIF)Y34o0?k~LYA(8NrLNF%q)nW zR|M733~2S1nIZ!Zv%&*m@;hFj76=mq)n^BHurM++gL_^~oJLZXGs6GPGAj#oYAA!;`sI3O_8{s)XQ0W0t2_l)nCwPKb5X{T~Dy<-F z5Q#ai2`iC7vYrN-c>`E=bKwOv*{cz4j7$t`F3P2KB!{F3N@W#XxZf zuG6620F@n#AVKK5HP{#<=q_^@8>}8gU{NCs3OtBc7+~tbWOYX3APln?y-ow&VF+qdfch|? zI05+s6jtbcu@^+%#aKaPUo45pI;{f7yd5YVf!qq~i-G1JL47QcKS1#Uk^}hzy)QO{ z$h+y0`*t96VCJFMX?uw5i+K>)7n5LSU{D4{7!*p3 z2EF2vA_$!UV-2;jM3A3gn3jDjQ22rCD(D&SNR<<~cZEDY7z?d?K<WHb6Kx;B`u-J=UCxOl_ zg7u5=)k*h>tdl_fHkf&!@BxJjs7yy6AB-fjPAVX>PRc;)7vZauCJK@!8Q4g-~upu7R{+d%fmK;a9nit{lrFf>BhpfaZw$_Dkz zK>CN;TpB1WA@K>B*8#E7>q^jE6G$9}LFoX*Mz1SzsY9M>k zfQ~i5%mbAN=yjz7GXn$mb(a=q(1n!5_20}5p;sCct}8)nR?+)!7!@V?eYpnORFt=w z5z9izsv?C4aJdLLS7Mt(133yTiA2EaNRS+;js(#lX;3*koYsth`~<_a?B{{P4`~h! zsnP>?^Kj0g!TNci`6kf#5vYCxm6^oUd-c$|4pi@f>pGA|2FU%kj35DM*#H|?1l5T! zHb|Ng)SktnhF)WppfH2Q4b&;%Ie$>S0tye1oI8j>!XP;i7rm~-r4GHW1F0jXt^p*)ii0K#B5?R-Q#ul;dF#x4C zkXvD6l?RCI7w#akU-$&cJWzOm>;loCv-=BDN*#>VF63JL~bDP&SX!O+kQBA}4K#lXOz%fP^LX3$~g z@G}f}aI#mhzhAt2YKd!6QGQWCNf84?#4|6m#3MgHyBNxMNzF+uNriF(5{rsc!!t`V z{0mB83czA8`J&9c5@dF0URr)pZemGEY6`NjQ)yaSY7tz_J+;KKs3@^AII{|76HLgn zBsCYR(>=AsKPf9UxdchfF(n1W3&{uThbn{%LX=|{bq+=q4@w2OC@(n`t6500D2BSE zmLw);fSlk~l%I?22uQeLmqFHpW*jK6VVY2+JoAcEi@;v@%tN*(D77FbF*y~a2ag1b zQO-rFi6yCir8zm!Ab<#j6qUk4A0ptEm{W`@;*_6{s>iQ1Hz^gCbRfEdONuh{(osxC zb}vK`7Wa7OK@tIqPPd%=L@dHC`K3uYshGw>>_!%MDJ{s!OiqNSVBgHV%(O~~9ib(e zImPjAnRzJz`I&hosYReTgt#muA6bceY6(;YvZ!N9Njb1 zaw@@EQlXg#qS`$*FSRJKBo&L4Z)#CGL>$>5mEw_N~=L>4JfSzrFEdR9+WnK(ne6)1WKDh zX$vTA1*L7Ev>lXofYMG-+679xL1_;t?FFTMptK*94nPhZaF{SKFsS_h&!F-DKPW^% zBup5S{$LLg`>-EE!$=he7>iVzgMooTfK*L`OuYmH1H=FS|LY;n+F--LaNz&{|Mwjs z{09eR7#J8_J|BAW@7t{lz8~9Q2a-=cd)85dfq_8>#Gx`aV1T518!DSi zs&TM5289EudU2_D!6h*&PI3sCIWnBNWT13_hl58_p>uMBLW%5$Gl$zm7{n}CrInyLcxuJ;Vs7`W`}oh9)M4NhdB$m{7tqYq}L%(}@dh>WgG5fcF*7VWIUg)g2@+U&V1{556Vsv-Fpcc9Iv^G5 zR|cL-VAe4wP?Ymb0(08z8MGHQGB7;gV5sGaZraGeuxk~M|8#5nNla|%l1#_+85S|IPg+nqU5e?L4nsH8sNGG93=9fd z4U-oCSKrChrp7R#Tp*!baKb8q1?37LsqzM;1@+~d1eBKlFW}o=`Z9)tT3~ENgX--bu#swQf7Oihsuv%e}Gebd{ zBQXLC85p#*l$aO_iWG{R8D@d=$s|xWK7~5JGI7M;2P z5jo3smwPSKUS{y|=!w^}|O2wUqNi2*>$1Wr! zl=!lzZ(Z5O$pG`YVx%D(8xrRj69ckb6FbAC6SH|ld028;CZskuo!H&r+U($_Am+jn z)eds|*6=B8+U-1|Zp;iiSHbL>ub_k~TFb%1!ZVAFnZdzj!3P&X>GGsw7qVQE*cqCR zU1(@1Y2WpXjgf%?Wbz8f9f4<=3@$4`0uAJafF(^3&I!dEh7cAgWEV0pY=nh9hz|-K zh^z+V%A}n|5cbL-9wQG%O%q*qQ2ghCx>^hj3~AsF6$3*FsHerizyNAnsHQM5sOlM{ zf%3j;Dg%RR8Uurp5(9%$3w8 z?xGwBnGjDS>BSKD+j0eQF~nSPpUNt&1#%Na)R$|elGrXbgT>H@+RL>T>Mw}AF4rHc zW5Up^Vap}f#j=vcDT{H@Ax4P&Uaqy!d;#I>a;=%=%k0L$pmWrSi6LD0Xv`J&$;{G9 zvL8VClNsbxbj$#bhahGKrv=q0j!!{2-WTL}qXo6*Q<*`ohuCEcb~~@b5`^1P+#+Vh zqv5RC%)_MV?8L=jvq)V86f!HpHJ9`%h#Bba_vH%fVrx@ofTc)XF0m+%Mac|CS&WO0 zApFb((G4NRs@N=?ESoBwjJO!mg|XU!qTZKl&n#P}Hbzh&@vz%0Q(|EV7wQN3ZW61s z3Mg(A85lgl&O{F@7#|X5zD#19ST&f$npitjtX5cvELUdj0yR(I(FHCL3l%FRNcnH(2sduduf0r% z7HB|x&BM{zJi}ONA%lXZf~Ik&a3`}aGeieCJ{1;0V@28vT3pVDTqzxa#*4euoW7DXIWtGY-C{AumjDV+G|-r z4UMfR!q>bQ!KK$(mVm2JQ`kfqz=5NnDzKJCVH2u1ycivpD4+>0lM=x&gN1>C0V)V{ z6DStV5*aKReVKUJc%)=r^6>D8_p-&DKE}8HOYxV+QloBhe^qm0pzkUCN>Yoo-1ovHZ6db4IpzA z!BxVd1rmMdXlA6!rJ~MxG7jLg5ntF`jw1q%%BE}1@odK z%;2`K2cy^$K4}vjl?X;BR|Xz&nQuIzZ2Ann?CxfaJRFOT+~eU~Fm-Y}Ctu8ob`ef# zB_~h|?wA^b^x~K!Ahy#XCI+=NUOb168}af?QkTh4o8y(%li$Y0prfQNBN1~*U51_K zlKPxjHUWm1LrTt!+Qzyp$HW+PlwfRO1_q@CNl>1f0E5zkG$@CSmqBSk9+Y#86Qr&P z%5!65P+Cv|<*+d$YVK@fT^1)MhOi@_K{hb(Fey1RYA`~|15geIVQ{&y!U-0npa2Gy zV+$E91#4M6lz5nrF)&CQd$5GH{14mAHm9|xT|>}&6R1VOz`$d@7Mg#Kv4E4Y22)SC zg`oFhP`ktm6pgp+q^*<|R4aKg%z3VD#j{Asi;;&VLy$X+XIdL5nv$FuoQ^OW9cBzy z`K+{{R>>LSNU$r!L`5xBEfssrd6Yrs2?s1y*mM|LE{b(oN_!M;#rpD z#mK{!n90#UPy~ zy-Ho}Ylf;;TBhoX=DkoK!F;w-wa1-D4V1Qc#MZLzWorcYR>ZiBY*sXRG4zN#c`N~zL24vJaE&DUVTB_q@;fP>oC`AZLhej5HQbV_rrXnak@RWEe z@~}n*>auzWTDy2AS~l7;RWiCsF+6Y<)Nu4FTG0jzTV1Y|?9#>^hF%_P*>)73V1xzQ zN|s3r7!{^A^N1{PZFc9>f`pSV*IH;vvTBJ2V~>$Wq8kH)E~}On$Wz)d%Y`%pGuXn^ zep)nEFnR=@xdQQr;sYjzm5Ij~7~Qp|Si#<7 zRl)XvoneNdm*)zW9xD&l2P_QIN}#SFQz8RHEStH~Wkm)CBPE7Kil7QpgJ}gUe3TYc zdn78kFvPM*yYz%>yYehja%JRUQgUJ7VdYNF4Af=uWwmUyD6C{;Q)h@^Jad(eg@I=p zs5}gn26r=A%~jt$2ocP1j7rN?tYBNq4)Jp?*IK5%>}R2=ElWwd$Yw>86GH}LPndQQ z&x|G~Mh(NLptbBfps95QlwP$wBhX!pQ(8;sSQ0o*>2iVe@GJvasl>yUB=;Y*m>uKo9As$f)PV6b39@#~r6$54J>S92vwu35hM`YGUHqR>5@44b=OZ(6OL{ zV*v*P!&+7zXnn2ACALanBLf3Z3?wXMKdfct$%e3Xxx`-af#h-^e6SospB67j4xx_; zk>X@OtVQQBBkFKafdgvXqlz#v1Tpb^D=lwiU}y+k5W%{Dm0=;G4J!Kqm4_;|mWc=2 zmVlUz%G=9)mW78G;s=O4x(IT}F)&y$FffEMFfhn5FfbG`FfcSQFfjBnFfc4&U|_h+ zz`*c;fq~&D0|Uc51_p*d3=9lhj0_B*`3SQ{h6*JfHc%O!R>213Vb$AlRe z)-vs7Lxdx&v|6cZ!L;Ucj|-17xD*p!%PPGY;(xJKlG0s8UJN}c+Fg?tC`|HVgqD6* z7M7|SOktOPt!0I^CdIVGV=gJdi!}>DD+fI9??ie4aGH!*jN|>j25h5?y<4}6(i6R#*u*`LNHzF2}H9XwBU`|WWlK9 z%n-{gZ47EQG4e2RheaxS8ny|8lm|F1s9=GW6|r1vnfJ28d>a*Pp{On_Ep4iEqREwE zhG9>pwrSG>g(g=}s5&!%0^gPuT;{I;RRPjU=}PMmR>yz_>9DpFK-|np0jwwa^kYmg~$e7#r-9IY%J+V!4#K z7SSv9)ku`&!H7f2AiRd4ZHOZ6j)}C3@eo86rYK* z1a(K(a`bpLX)%OF{D(FDplaqkS<%vyHIac~2Im7#2G~Ht%9gcEd!b!Kh+S(!I!va& z;07sf1ocuuebkl?6Qe~81{MmICMe25@q|2@0ZJ|pI2gcV`|y#1v!FT;+8=EHa3`VXfX4@g!!y%xf|9@p5FCpjfRCpkMazTnama(J<2mAW(r#%$+>5F8_rFh-t+3r4wOLYWU-L26!DY*yV+Ao_Jf9qCn*1b;|b>P z6LM}`Pk z`5(b5_LO0fDvJN+xS~Wb8?3Dd3LN+tLyr}YMpG6uD0w1_NnjD!2I9pYE1n1pJFR#! zU}E4r2g+}PJZ!#fJmRrz3&JM{1e8QFwsC_7BNajxz}ij_17o?)q+|%LR09pqu4RLF z_oZEOS!3DFRTz0#I~c<|j%x^loXKE@+k7{i=7)gHZ)0M>VmwpO0tO<@2lW9N6hbzv zVBH}KcRJW;H;~b=mJgc4&q5rI$K7Ca8IZyS79yaw!df;Q=AMI^>&PJXhy&&vu_}%Z zBd2x$9Xtd)tvrG}qdJmi6m@3JtXknTCkmoyrR$kpuqFa1b1|%Fn&SnPYCW?GS!&N^ z3nd;F9wE?}Is>S;rOLp7s-h=lC5xvNsES*uYQgNw6;}LLmlaZmgUkl8A?0f>6VF_p z%R2vb)Inux%z2$9ZQ2ZJCs?GF+B6xi&j8Wt4CY{3l_3pGD>FQwp)iSw@%cwzbPHSRf2wU-mhe^qe0hAOEJoxYf)bax*Y6b=#$U1}n z%nXb*3_OesA`oFPS;D};z{1SHz`&<~BCd`@`~wd0Ka4PQ3{cDw!=auNhd8KBi_Ja% z;O0A^n12d~IXiKP8^X;&^=}3a^+q_v^>B!T)@fjK{{kHLsxe^?H$fcchp@oZ2cU!l zXx$Gsd;Q?%qlO!35hphF#yITt#UY-GLmZUGu$d1U;v_{}6>dIix)O$qqsAj>UI3f< zxYCsp4s&p&e_ZhnTFZmYUMU>r``{4A6+R{;s&~hs9+$nKJ|#BykqivXEUch4#Vnw;f6UiFOC*?B*sT*87?_yYcY81}Ffp>->IG38 z%IY9N*7jBg1||;H_An5|KG~3gfr*9nuoQ@5uV-XnU}a%qVQ(s7U|?gJzyQ{0r3d27 zWnf@n2aB+ErBxnc!r z$^hzXF@S`5%t4{Z#sX5!3zFk$gb3t=)Pam*vN2_3VBq6nEZ+e#F~x>~fw3H9Hv`wB zVh|hTJ{GS3DKIt%1IrmuWR-U_GBEH5&tqUFbJwJFfd3nFffQRF)#?l$5${gYJv3Rfm92EmPCSbg%PUcMzCZQ0|Nsa z0|SFUTv8jP^Cd`9H~}gNF%m4n0SX!h_HYIU2L1pC1_s7bm{UOo8RML(Ag5M9h1Efd z`9sSY7#KG?flOpzU;x$YjB`$dlogj0F)(ffc`1XDfk7yPfpIfP7043|{9aQT7#I(L zBtaTMwLasV$;=E4B1gJF5+J4~GbmUi)0dmRHY9C1LHJ! z5P(!M&H<@|1i>_L5d7d^U{C}H0YqgAXu1wmY%<}8H1G?G{2ZuQF$04FsKWzN#~=Z! zLP4x9m@FfMf*H&>H>h#TVUi3C5}+~*WZZ73SP27z0;t{t8NwiC=*qyr$ixIodZ30h zFL5z2D1kl80+vtWW?)bTm3p1*FwcsCCAM=jFeuD|xo#cQ zb*}87Fppv?VPufl0gcf}s8|sLgTg+jI)!^shQtd71_qEHKxr407C@>%|uf=b&Ps5QYVbLKW0Bi594(UyxLR3OBH&^0PA-7#J%-d{8+6 z>S!>|spnu|5GY_^tOPL_c^DW(LJdHwK>5s+hk-%#DJug5V>L)q9EdA39mEC6PUc}? zPyn@B^OzVI#6VevsfZz$0}@Wf3=ArumK;+Ng90cv7l9HM8w;q$lTy!PU|^gB4s4J+ zKph*#Igde!6P#ZmGMji97*vZ=(_ktYgB3u<9Vi7#f}#y%pg1G6SYj#yXR2aQr4ww+ zz`$q-axchmP%D{nP9`U;A}|D{nm0TQ3~J!A-569`Gls~`mSbRGGy!R143+@(Quiw} zFj#Uz{8GfgAO^CMshGhBDpbP2APH(P!dy|pAkG+#?214w1_s71P%wd90m=Z3b5?*{ zQNY011qy04UIqpsa0S-`vbK_!fk6ROAb~7qke?~cz`!^eBmvS6>asD;`Njn+TqlDH zv^l(xh?@*D?Hb&)sUS@yd<+aiDGZF$KqW03KLdjV$g!X-BE$vqQ#7LyC`lGGFo=Qj zAyW~93Rpaf(TG7}1p@;ENU1GYD4Nj~rWBO!nTi?w!QxSjt_%`q7#J9?C^InRfQ6!2 znL!l>RJp_*s5xyANhS^lsEpVfNKG>nED^=T;lQBqkAZ>Vy)pxX1ZX=5$jJR*$!Jz) zP}o5=N^~$n?7IV#1Z_NkN=nXwN`lL1P;!JyFz|o%XJBCb0}2>WXo5PrjB|o`U`gT+ zC`st?LqhWpC^R?o!x{?zKyo4iu!h1vkQrS9u!aJddqt3eK?t0f{(+*~L5P7tG%SgM zff3C82jWhj2I7L6M0Uaq3=*Ik0TjUVxxsP4RKg5(sTgPujj5Pn6IddOsf3w9q65?z zRbgN_0~Uj&u~G&Gi8avheF~9bGzOVc!oVN~T0P5D#PA&~9>r+PAn^z^N2kKTAjku; z5mE=0GcZVib_0Rjq79WnxCOM&hpCvs4lDt7izE{hB>2H04B3+*wOW;dfzgx^6fmH` z1&tOk&Y8&rD~wIS6^NAx1A}@2NF6A68G|KxLFFqX5}81`R$~gN<*UX7GX^xcz&IyL z0A`FDxU`5CVPH`F9m&AJsKx{eYZp-l2I;ii5*S}kjDbPA0K@}XQzXW~pfnNGTGC(w znRFDy-{;N1zzE@Uh%+!~f*X9AV0*(rd~ov+!WWldV9+c|En#4U@c&6NFld5vEQBv3 z#lWBmj(AP5Ypg*0Opt1j+n$1WSuox&X;|%}1@?)u35-6VAT{ z;_r-OU|`f?0u@mvvJ4CoAY(ysb&(eoi&0FVL;#v;1&O@|i$yaPGlEh9NCq_b3X);v z1F1$%I82NT44}e95-I~y4Vsw+m6Ez(F^Ji)wBZgGi)JbV7qTGLj*JWp2?7iZxnP-C zrcwq_QCyB%2ugT@T4v+XmDtkF+u#D0TzS$n`PpLdNy&!Xy%DNY@om|V_;C|VPaqa zmE;oBpo~_qjwmKjU2+EE-dPYKmWey+*%(y5f&|MMRG63<7??^J#AHEqF~dHHBCwOh zR6t@y43{BdP=7QqL#%oZ5oH49YEah(R5h^+Ks*nMxo9R({D55`v4NR^fklOZK^iO{ z1=6Fi18R=SOOP$)3@RT$bQyyfCkq1uQ!#@FL@n4QS^^+3aHR`z1p^xkDCD!3jt-}5=KxK7LbQ!(K4`^ zq4Eq25}-04l(6rD9Td%I3JP>ksss&UfPDQQED-~eKx)r}THK)4I!LR8AShg-8O>l? zL7g{{Rx7YX3`ioHl^NF12WbU$bwOH#!77k!Enr|^0BJ1+OTcV}^#DLxYZw?9Ky`mV zSOq90fvg3|fWiz^5v|0KnZv-q01CJBU>RsigCt_49t5~`%EQ3$6|X8#H}o+F0|So` z$k$PjE)D~@eg+9E!-PTJWsm^%>_Ng-Fkz5a7$kl`JrN8RMsx%vK+~WgKjffGNH9XY zFcB;f3(9-YY>4oIB&hQXsx8DBu`6JZst1*do50Zzs$f9F$c%HWL}5v46F5m7Qh?PA zo4`rRT@h9@K=?O7`~n8XP2gk|16tw_t{Jv4f@+3oO0ZQG|5FcCE z4n|N}pQZ+?m!XyWAz@IQMMEn0QU(Ul2o|WYy8;#mSMD)TrEkGP(Ts+m)CI~9O$?CI zN>~JB25K4tl?afs0F(wnCBHgY6}a4$SOPWD5iEvWt6YG}L_uUA?MRTjzJl6x zgO&k^1{ZK(w=!sJgZfUYpynVb6@n%$80YBR01Y*P8$zJj3dT7lq6`co@&ODCj5Z+V zL{O`njirH+fkC$*kb!|Q5TqA0fx$TEpeO@_Kr#bkAgC>WT8)806g05O7!2ZmQDb0G z0JVFoL>UjM|JA)2XqDGZFRV6{=|3=FEt42*7IGa19+y(|gPI1#Ad=pY6OK2U)L zDtkel+7PH%83Tg^XhHzw&pwUz{Ua!Lj4?&H-f=dg1iCh z_%O~n3-?Aa*lDfm3=EQ>(gze);*2q%5(JWdK-DONz8q+TGz^?$L56@PEEwmAi^EEW zFtG8D)XZ3zYj#YRg82F9u2CMc%{B;p}F#t2XW z1<|7gie-JJe$bE-SSiR5Q2(8AP7&OYX>j?0v=5PS<()*1T=I4avvznKtTiPi-HTc&7i7&DcDd@ zS^>=vGR^^Yq#)@QBJ&cIu zkY->|1cwDg#zzyDkXJxM1C*^+fbD66IuxRkF+@TZnyeSXZDjz*EyyLHkOB3opplRY zD!x}Dd5KSkfk75*@k+3h7=s}BXC>5Hu$MsoW|6_^CBq}2Y_tY!DrlCLaZb4mtc+L# zHg%~c1A`(ssMdhJa17+VN@WHHMuwHO#=!4^T}Ar?W{j#>;13SJBh4B&V%IWRTEeU;tB)``|i2bN7sMZpt$-C>}5b%YfLoK#5lgo$D62wb{@hY_$7{K8L3KRv;T-2pot8|If{y~a6G^SVu$I# z+;{-VjSzOZ4kR2QW=sR|3K$q6ysaQ!B8>MH#f_i>3LK80Xdrz?l92855_rbm0&F~h|DEj1_s4Ftqcr|N5Bp%&|_dw z0+*=Az&huE_$A>C42%%|E)f437o2|<#McGQ{XpbZ^cfi7nNPtGS`13qLd)S)B~Td& z?)NExig-}Yl!$;zHX$S>K*J@VK%4^>gAGf9+O?obEKrdS%Fv|@3=D=1poysa;F2A* zh=p;^6ObRZf*BYX?}JBdo%9(Plun8WQgF4`qCj$eE97vg*3IhW|J%f!*0|Nt#G)M+) z0N6ha42*(|s(ixS%zV;(q2hv!0^&2B#2FZvR2aCq?YNow7#NtLOb!MH7BL29J}Yi( zZckwb23CFsZf*t!HV_5kv#T+HC=O6p-dn8HLy!B&It_f|LocGB9(1O!pLK5@%o#C7#Rf_Cp$@i%nFnCK+Iz#svUF$B9- z62@U*kb=666~k@PP`9x{+$Mui2y!Fb3$joLfs{!wFvuY}NP>Yu9;%BQVf-|R*A+UO z7#Rc^4TTvP6p@S&XJAl*8UZp#bJs6vAWq(*{)K@G~~_7rB4 zU|>*3a=HWqg9g+QNPdJmLKCVFWQ;figBB!Qz&2>>G1yCDi8clX9X&>b3`$t&V#+`* z(u0`Hz@QITg5(-#YA}E(0{PVtSs98QMwl{CJB*RSO@e{J1X-b{FvJk3Qd34oNV+vs zWbhQ$=Vo9qhic~b6t0t`k0(p#?p@?xlh_Q+RbW&px(|izPEri27AH)Dn#<78-Lz#I#hz**MWn>5f zQBObJ?H5c?HGl4(AO0h&aINHWa_u|ezRAbe)HV?m3V zK=IGSU;s`Bpv1$-5CNhf!EG=fM1wrZ$PfXdz{>#`4CaGqP*anUAp%sLM}vJF5y!y5 z018n?hKPLVmQO~82$0uX!3rWl6llhpks$&^O@oMnsF`491c+J=W=4Xjyfhf?*8b*c)5CsZCMus2|1qw8f_dql#j2IarKolrM7#Si# z6ewUA8Q|#-6p8E*yFe6Z;UE*kM9>5fNCu2SNt2Nw7({{6066|Z3{dleks%mFr9h&h zem;l+G6R&6g5d!VG8uF>7b8Ouhyt0!%uviYAH)Ey!(?O#0Z|}B85zPr6v$9Uh9D3H z?o}{^fJ_E;Y#14WK-5{Vnyu!Y5p^Fa*Ipie0wY5(h&l{2AH)D1493V145E&L zJygs%AH;YL_658M0`(a{&SzwZ0#P8(F)>UG0MQUnf(i<7bb=xS6!4&A0-`~|&Bzc6 zqCmk75(d%nVE=}K&MS=v%_cCI%m>jM!PW+WD3FsF86pu@go4dyU|;~HPhGIWaFG7( z5GG6(wC2+oEEENzEI|vQ8HyTqATlaQC3sGOAqYf)2I0`kVo<-AkpVQ(#sFGt$;2=b z<-}5uE=Go65CvLZ!pIN~qCj!S$PfmiK&yEf8NxvnxG~KT0-~b9t_lZHjbLU3hyq!_ z$N*{;gWSac3O~>|J{QA0P}Kq!1MxwH0vkirWR~d3ETB0~kTozqhz)AmBI^P1K>@|a z5Hy)3crwc;&>SZtXn8S&51Q@&29hxBmlZQXX9KAk6=;A5_L2xcR)!4**wsCJ%l<21`r=KU&X{Q(E~K23CdLgj@w z1%(kP=s<}HM7MxLGo+7^fngqm38EH()0M$|5DiL2NI4N?0BDIg6NBM=5M2gN`kepg zgBakMF9yT;Ad^AnFfxRKD3CEA^&lGLAVvmwf&@7VG(y725Coz?K?5qGg64x*;IT`F zAP@yA=OGdxmLE6^1c4|}1Vbc1EKm+(WC#LLpb8fv0b)&o=m1fmQXV1!Vu4C`Mus2| zwGv*#fmpjCIzSYt*oWu z%@D)3GB7ZJ_8%}Z1c4}!a~Q#`ACNP^J2rB`3PV6tKbRQ|qCizFBSQ$tDv%M33?U#2 zq8(m(f+h|@iWwP#K~|#4f^6Uin-~P5K%?l8kN~m3vla|NAPN+e5D5?qR30!g1c4|} zi3gDYu|U-kBSR2~k_GL80JnBPEO~I&2m(={RlE=#Aj@GG)EZ-C2nJE0@}7|)1Vn+F zgp3SPAgU5vb5zyO?_q#sVn&7#P+q5eQHo&8qd=4B}1 zAf$C~dH4 z5Xew{2ovT(&^ixHlT;ZQ7(ja?7#V^<6vzlhhA0q)+a!>QpyHnqQiXuBDkG#30cr;` zG6aDr@S0yl^$*emnj2+g04-|)oh-%xtxh2d;mHLQ+2AQ|h9D3H8i8PBhypd$LDdW+ zLlB4pS;@oziWQK#3=E*AC8#;h$Pf&opwf{2M-UZI8-qYonjkA62>`?br6)#)AP@x_ z`h-Y8HGwHm!OqAK1foD=@(=|e7AUhr^E}8Phy+**lmIpMp>2LpLl~j}!~#!mF$94q zP?-sl0I@)2CL==-hywLgAQDj17(m8>N**?bDuyBkrTHK>Xx0cRuY#0$D3GH-!XO&tBu0i{5Cw7)NEk$e90V-~cYzjKz4v+ zKs3w(MErnyxFC}m8G=9*sMXKN5CZZdsH4Kj5CZZPXyr8{Lnw#>EevI32w`PpU@!+4 zQ=uTL7|aX;QEXuEgn%eMFf#~dF;df`oPmJ>R4g+x1cNA0OOTNv6hwh+1~>mf#)4YG zAg6=q1h5ssASxZ)?kQ%R4`Sp%#6c9Oy~D^51)`QhlrYT)F;+p8fGAKCotdGSX+DSn zX@UoXsQobYAjT1hdJuI6CJtg;gouNvn=o+@<32BgGh(V<)DEJr|f(5Cuy$j0{n*WC99ZkePB2`#=;Zx*D0c9)@ z4QU*NfGCi?%nT*<;LHKC4x|P|gT^Qr8NxsmXw@JiLkNfhRkMr?VIb-Yxbz4CQQyGK zFc1YwYK#maAPSV!K&F9c9&pHofGEh_7GWR?a=k|Bp^VI39u0$MWCXEiJ_DMM1xc_G6aJ*GlCi?AYo8O1XbQ3 zHmFTr4Q|U9F@WgBV0KA8hz6xZMur#=wH_)AqCp9fks$^|?S%@1Xiz$2WQYM#pq@Ht ztPDh-f+_*gpd`u25CfvFLxn*!C`B?d#DJ)$P+<@aN|1~UF(3-G){Tjwq#i_r(<4I+ zm;x@M_5k)i1E`h9$N+Baf!YJ00wxGlMnGgiy9dAl3a$b{!}kycAQq_Hht|WO z{scq<#DcUDffx^qCgo8A^~Fk1t)+Y5XAw?GvMMC#L@vL;2;oX z0+#@>EFcmf$_8{C0ayo!Wd~Xmzz_tY0^kxLRuDu2M1l4gKrDy*l7RtSoij27gKBk< z3z-=vZm9<`ra&AAqGmBNFtCHf*_0XQgE*iXhLIr%M1lMPmjiJ$z&U*4mUnFo;o83n?i>iY#aF&oSW(VxMlM1d$! zcri0f+*1!T1eDcbrXaPoKt_PN)*xvR4Jv&Z8Nh`wC@F!)O+Yjk*vC;I3S=@!7-TTW zNg$md$AB=%G*BB9BnF~E37e523Pgcc%z%VJG|0z{3{fEJ8r1n98WjJG3_&3395~Y% z%m>jIA$EhPt59JO%??^`&oI#gMDs9%8Wdq5N&_kkqTL|EAPVGK&;SL92BmmLhA0q) z?g7v`8PEVOBSRF3g4QM=su0{QDrTGyVt}d_MuuPz1)9GESJEH`$VcER3Dlj1bbg{h z6sY&k$PfY=fCY`VGBQMgC{TlpnW2htK8OM84KXrAfi{sSL!uExf!2G2m4Fza{tz=m z71Mmsu8>@aA`n#yW=4RhaxgOrL{);B5g-b*qL!JVf^j~G(GC#@?H^eKW=4Ui&EQJ8 zig7-O0a`rB$PfjhK#>7C43Qo&iEh;crMF$p3LqIQ9q;UMZD zm>C74PJ)?1AnG)j83m%wgPB1f>Ke>A5Q7ntOF@(B}1WWWVL3FCYaLlYtnqCk7G znHfqL=Ytrabjr+7!ZaTg&!Ci#les2(D)4#gZX?A4H}DKWC#Y`Ck5#Nhk?#A=mZCC7%2F_Yoi&==YwcaDa^g}ipF+g@gtqui;#l#)pTnzFDNCSulm3)j0!JtCU2kieakPjiL z*&JRIft(6TyP$jrqCx4Eks$<>O1q(52oMcwv@kM&2SY%6teF@}IY2bXbBqkZAPQt6 zNEk$eQVTP~#2xh@#x}4wgF)0Ta0;5ZqkbPFWcev0Logx*P25or3JZ{DL9PMOd%)ou z{FI4-0hEV9BT}IA2p}oJiJ5@`}}5d8-%432#Tu!n=xSQr>UkQ=7HEY&BSR2~0<|bXbz0DT5DPRa0v#LyO_D(*K&(1&AOwLZ z(AIf~1c(J1#$sd$0#TrYR3Q=|7HDXZks$~~fy!ct1c(Lc3Iu_uEpS(XSfCy>bm|Or z7Ar&thz06SGcp8$C{O_okpQt?LtF)-Ks(hT5+K$uhy;iN9p(j*0I@&~WJZP{5Cz&n z2$2A>Ah*v2fhZaHkRONz+VlY$o?&EQ0G%oW(E(x^fKyu#hyrzBAQB)Jqz4cLqCj`d zK_oyd$W3!WAPTh63?c!FC>RC}n=&$lf+&y;AO)fGK`fB5j0~Y53SlEDgVdD; z4RC;>8@*^fEF8 zfhbV)f`madC~~3mrJ%?K34>@*)G{&zfhbVaf`madC}J5IfYLJ3pup=PV4Y-vAvYMHptR6fs54nOd7({_?S!8A? zuAdKLfVymK3=@6W3}xnn*dS*?Oarl;!0reJQ6Oi5O#?ANjzTK_K&}GK%`h^AfGC)Y zLclJX0M0ZaAZj5rn}y5=v6ew3K-5mS1c-GNA_1a6-4G^*i9R42sh+Y9!5)7h1!2=Qo(V)ILBSSEV0(loC45C3k1epT!A879# zBvnL#_RN9iT%fZ&kXBR#B2z|zG9}1?;MOOo!w(uRVq^#gQNO{i2nA7~(~TGzf*ZB3ojTMfW{%y19|%AO#DL9`~sn+VT`fjkd#G{_ks8WOyS79q&> zASZ!L0MQ^TL48FK4H}|iWC#LLAUi?AAbL00?jR6#9$bn~^Z;3i&18_9KqiBx>p^Lk zks%bDQcyU8Mp2+sEue)Lpt2zdyaooToCnP(K_oyrU>H=bLYq{eId(>d5D*0#&PR%7 z&=fC77-<+2q#smFg6bFs1_n?W4lx|WLNXK-lMo3I3v{*-BSR2~0!@rUBtS-iFesyd zDu0llK{QAMBLjHM1Ed%v3{nQep!Gh`Wj`SIp_&C!1eqKP0#TspR5BERrb8JSfa|Zi82tI&u0#Oj-L5+QoyTJp-AbpGsQ6LH=i@u(anyv>$D^iNW;d)Tl8_N>nP~d`SkP5W02ML3uK{Mcx5*Q`yVbUNPR2P6c z;0z25piu)xhAajK_CjW)RmDT2tpX(m!8eFAQgfowx8o&h!8K_Z}* z6o>{*w}NQU+E)+_Dv?1nXiyGBgDPSW4O%A%qCqR^Ks0FO7l;N8^@3>7uqucKC1wx} zO7|cdl+8f&0??7Iplw#*eOU|)pb7;f4jM26(V!6&5DjWMf@n}}2%6lH#h4tX8Bam+5D_LP|3ZFybu;L z$;{2i%3YPfz`)GQ!NSbP43T5z=V#?g>1SYI<`H0JThqY6z|1ZPkz!%y6@sw9B(pPA z3k#Ub!ptMgs(E!50|T=zGgJsH!7K<>$Gn(PgoTA!niV3f0u^Red(6wgz^pC`7G_~K z5Cb!qU71;!-NeCcsBz5p5-405Hdf}^Fa`!@Hg1>-SxHuod0wCpf(kJUK&@dGkz!?X z(glT!m^6wpaxxGuv%D;r!Q9L!2WG$wRbYp3nH8BJ3>MHK>Z}ZJlNcCS8F~dlq(>r% zG*kzXCwV~R=@byTst!aNse(wpY!E5a4k8ORK;*hY5Xk}Bz{!v@55$&Y1(8?5A{GH4 z_S;DyGDjXn{sqgP(+068bb`pK3Lvsu7ewA;1Cd)IK_uv08CC}QA`qJcv=@`XogKsu zjscNe$sn><21F);#p{bf?CW6n`^JLUm%%P)P5`m9OF`r%IS}bs10s)sb!BmZ*pihX zast?1bFj(bo*`9LIRI*2@*10r)wKxE)t5c#nQM4l7^ zkz8Qg?|?;S%m;}?gTpxo9P&rNW=e;H#OIoV$O3S>G6sj+elUB#EJz&GFk)rMcL1?_ zv_NFj3=mlXHuH=Wh#dt^w>!Y;vlATGZ1EuR+%OQS3=a9PV3GH6AdwU$5E%hZjg{c= zzX}%F8VnLw)(4TB!Ft)izS{^+Cr{i#;uR_&atb)ym=}Q9D;q&1KRDb3!8u|dm@SnC z5}yvv9p}JlrVN}OG{NS?fn9sp7Nq7RI5#PSW6c5_N;kl1qX`@@zrpHP8G=-92d8S# zFc2$)A=quZTR`IHz~MFnoYxu)Kq5;lLF7pZ5P3fXM4I-4NG>lBc> zIAr|6q>v*>oCh3wpy5ka1}<<3V-HT}hTz=y0h}^_b%9iBfK$kBu=<}2AQ3Zj5Ghs< zBBy~}r5^!e*I0naAXgB%4_t=o3u@|iOmj_7X z6gb{*gT`_}VZqT0GLdgFC}fq4tr-|tHFg*=Ft8edPDx=k+X8Zdr7oxxvoQgsSNq!_ z|9A*CGcd4v&jpG2eFx>Y!0n)rin0TBL_p?>?bKmlV3mId3Q>gvp!BF30*WP_-=GOJ zkP3x|pg1+;1;vh$HYmRsgBo_MCXJw6X?hEk)6G;tac$lM@`XhQ$Slhxpmbu@U(LY4 zY8?X-u~`Nx)osf_VPdBON`dyDK_#by5J-*VQ;=_*TDch*Se?Z{;o#y3Dq&n7gK~je zG$@z3SAo*7hc+m8d**_|-|H91f4&)@l<6l8I$Xei7Rb#3@}P7T=&i}Xz#25OjDdkQ zm@%4xfi+|csN4?y2r5g%UY0X3u!gIGTorK^q$V;I{E#FLsp=_I+omw|ybMIMwxQ@`gjFtDc01jT9kLN^8m){GONGBz_6 zWPa8^P`qWkgUB2eP;Sk21jSfh5Xj#AjUamq4uf)BVF4(_iY|dl*J2}(%S&WHB}{p3 zAOizyML8%YD?j)#FtApYfZSO<7v%Sv>!8$C`v??&b&o-*w0;vPuQf290VR({#>Ev3 z46IFzLLlcgGkSyUYhnBX3cOZERZuLnGp+|Yw1aUrD9$?>LqJw^F`6u7U|{WLdb!}J`XHkxF`fdYt;vi(K*iz|#$O<} zPh|vc<6)h~c+rJ{fpt2gDX3_f!T1i8?`ASy17+!1jE6uuZ#E<7;zrg*jG>@XY%$}5 zZUzR{C5$GZl6)znEy!cb7&m}&)e6QRpai~>u@F>#t!BIgN>*za*Yh(lu&!lX0t(!9 zjF&++Y+wYfQe@r4Xa@51HpUK+?YkLQgUsB+_y&~4_A-ir^4~s2E>K~zpV1GLs}C^x zf|>~j8F@fCBaDAQrW|AB1qI!4#*3iPJ;68+r0*o-J`M&3)>Dk_ zpxkqs@d2n1yTm8~^2%k#4WOiPg)t6P7F}g@2PL5Ej2}Sd*$u`gARpag+zYBxZ!>-Y z8GV=W6DV!mW4vX+z`%N+kpYxC9x!eIRd5d(H9$Gx5o0Y#;{s5Ec*^)5 zR0=+0Oa+D6H^$Q-Z+>SC043_5j8j21(J#hokdpt5yXG)3ur@H=1XMEB$zCR2P(tZrk_QFy1g0)fT{)TQHmIR6i>U|X zh}leCpa7Y}^c|Fl<}&>QHNoaFC4h41e5UE3Ce9)z(9$l}#Y|zKOtFONFvz(}nHGVn zuN6!Qpg3B|lmn`CS22ADmAk8%GC&p3I;O3la%Vl01<3Imn9hR)H!?|q3WzOC&p^3z zD^ouxX>4Ok2j&0mOvRweX9v?aP%XBbNep>1Y!^D=#z`%Nr zsS8x0UuCKW*>{cUBgjYBnKVG9+zqBUP|~=`^bX{RTTJz!khslMI)#CO^$ycTQ0U%e zngFUV?lWbB9Qc^&Y$gK(>k}q+P-E;V(>zeC=oyngD6v0h5(A~{7fd3c^!bu$7pQE0 z!*nx?fr0fclRAic$J7LBSiNWR1l8{!m=Zxz^^s{MC<%XJ$^j*YuT0FK(&rnK94Hlh zXZi%P?*|hnC{O=niUcLvUrdidUir<$4r-zPVcG^N2>&vvf+FA_lPjnx^Pg!tsFZDB z22C@tHZoU(;-QJT66DTi=1;~946H58<)A9CmAM*J_OvnY1|^MlW?N8rb}*ZPvSBCl z9Z<^ZVrBs~YP*@2f`Yt<`31R2=0%`HJBj%v zC?F>@zXmyQ3iBn91E(_Y1C`9vn5TmpxYL>UgEIPT=DDEsGKYBvsNFD^`7aRxxXU(&uVs(A`L^YnUU0K&2G37%0fsF_(kt_w~$@pz3Y|GcTyT z-pG6eRP=9Rb^+Bno0%7YG;Cq^oXx<%x|P`<6m;8|*ML&bcINk>02G)Jd`k?xBKeIB(n+KRLf_ei7nRj(CFt8qC_5wx!VP+OkxEx{D z02L6&nRkHF*$HNTaRvs~lg#BH!Bfn4Kwde`Y%0LOz+^_u9wW2pj7aR`9CQ2yk_16$_Q_mcY~^sx6GG7(f^KFFrR^e^*ysJC|o`; z+k#5rkIc=W{QimgB&hKC%)AEV+b_%>pxFG%4B9Zy`i(gZ6d*sC7lN$)$-E5|X1|zs zfLaB=nVUiN(I4jPpw#o1nHv<4|Cl#{BK1FW1t@_vuza&;U|?-z*$;}bCKex1HQ3CO z1d?lEF$TG%mBke#*Tw?cIL+G5vJg~2bg(=H`LC1ZHK>g2V$lHQj&7FipuE|`q6rG? zUX~jm$M>;tf)ZFiizBE>Gl2!Pc9C@=OA{#mX0ZGR)zfoWsz6HSvZR8_ta&Wapyt7R zmH<$GU%>JMRQxVv2?ZtZMJ$&=1=(Vj7EmF+gv9}r!P)mL# z%SDjKRscB=p}T=a6;u*!WJw2=^P5;#4U zQ5Hi`UOC3X2#VC>ENviE%}byrxFKneOPOERcwca3Et$hp^9 zTtQ{leU@HO?s&lB3ySxLEc&1(z!R3Kpj`EoB@)!0e#SBn_SY;^ zK_$u?mYtv??=4F|C{o|CIDwjt?^#}e%AQXwXF&e@&GHcxbbnYlL5c4#OE}1#|5%(r zk@KJB9w<*YuJj(b4RDc|3{0{Q}GsYMp1_rh_j7LC8?gL{6D6KUy)qyf*8`B98)yvcZ zYPd~i3I#PrK<0{n1tlAuxuE2tdj{l6y&0gUn$cX4es{|*!l&5XjJCT0s`9calQ$ZhHqL8XtzYf$@LYa%G^b}&|g(pe{?KPVM+ zF-n3`K{q2as0`_06a$5PFQX5r0PJI&0t$tG#zh$n3~cilPl59EPR3x66}uRhfGW)0 zj0PZg?qLKS(aO4)(HxYS_c11cVr)O7C8(A;z-SA~D+d`*g4}$pd8|hq787ZFwGE(^gsHLH<4H`PpRtJ^p z`t7jJC{qY1NlLB*bq%F%f%1a7A*dM8Cx{tZyj8$2@w&*U+%n%!|_U|_S@0BTx0Rf49tSm2Qe4MwQ9Sno3l%wS+(d&Z<3 zM1&^=*MTyb=xb0R=k^|yr6X_Hf_j7tK+aylcn_3hw=v~|W_Uiw3BY zUc%xCin66FH$WMD8A~{*o?Fgh2{L5`3meEsD_J-}8FdwlCdi`IEWV(+Yz>PSsE%06 z;tndT*RgQhD?qf)dzw)*Mi->tH(uN(8-Zy`ZR=%$5mSH2{*=PXNV)!B3F44TV8t5hm@RKsJ{F zm6jG3AQ7u@P(rbe2L+-{1jroQZ6ISDQb1Lqqc|uQor*wN&+8SaF!%KZm1_aFL3t#2 z0Vs<^?FS|2=n9Z)(=$MYLdJ4XnVxeVR9xf+fJ8v20x_@_8iN9)gawq>tAB!O>Y9Hb z8*2}Of~}EJ3Y4xp7!pV%Fd!tyVFwO@RGgBFVf=aXL zjBKFznZf7>(lCqhILNVc7$VnR*e}OX7M#d&k`LdZ& z9OTn2jGsWI)K-~uK|P++fMk_46Y>zMX~S{KKdE`ds-n@pCVhVFf)H!chetPhy3g97O} zlL4q;c*`UOGWs(UH^}y%Os$|~@tw>dtNf{1=SL-nMFX2 zldsIFpibH^=2TF^`_DWP)a-3y`2k9QZ7hNyQ#x1*LG8iSEQz3ySkF=cYH@C6Q2=S! z&T<(PYEH$9Kewf7oR0RJT_vfhv>wt)NauKcfw(sG7{U3RE$@V0;ED)Lt_BgKYcA zxE&NrUl~DX(y@ML3)Xc!Z*2h$Az`(%P z&$JVi3a2pHftnaInfPNF7}(lb{(z>Nz}|ZdDm{4bf{YVYgn7xa9+c#rI6)cL`5h?N zxts!}Mz_tNX#w}wpn}e$2_){h3{(z#iGmsc-UmT(=(81+0(@VCvajD!P$KmA24&IU ztDpu<*n3b83kTf<$C@M#8k|dh1sbAFQ2^zVG&YdQnU4K*a+&i&12*SCGD=RATyg-`#^bp66i) zF0$SM1?nZ%N1$aCAb%)pgYv6pIH&~C-2uu(h87^Vm_~ux;+EW?gg1@R1Egy@6+k84E%6)k8)rkjkfwM?iVy1>+Y`3HXwc3sgG3Wjp|C zi+o@N9f!pFnXwYouK&i!1FA`XGTMS-@h_trD3aGRod6Z&jVzs@RNu<-9hB1-uvCH) z%tDqYpvL7QmS9jaSU~m%mKCem$LYRe6*G&9F#ZKv-}06stqhtK{;?Ei#@0c z+QhO9)M(nwasm`5TUf4x3ZJbkE}*W)HkLV{;%z%i8>r0N!SW2$INix20O~vMV%Y_1 zo9||s5Awr7mKUI)Kg7}iYLFae2?v$;M_4*Q)$&o6pP=k_jHMb>qa0^p042;5Eb*X> zeUjxkD2HBU`3^Gk8jA-gx^J;CfU2k4EE*sm-C@}TYERx}nF3m80Rj_gfz2Zylmk5LK)K254yc;(zT?Kgz~)z6%)r3ruf@c`z!snb z3ZXy`P+AU(1_fxacmV?gTa*CE7ty!-7#P@M6hPq}>k2x;E{+uxS@Cfo+0^uU1_rjY z{S6EZZ0Q!D>L`N`)VRo8461>%6nPmK*z$IPn%(&cJ`4H&w(pn}-r zCP>_~71U<-Dg_m4-k@_x*!-A4*)}L)E&~HwcrPefMH|m&U|@^&2PMt8Bv6#3F9Q{0 z86QDinoKiL36*t4m4SgRHylACU|?%w%mo!A?TqTR3=C}DjH^Jr9>#Yw85r1l8Dl|J zeIFy}Xco4KjDnzwZ4%=R0R{%P>5OkcnP�F(|TTGO~agv$GgC$uTgn&1F0ZDl6wP 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±2rIQbAq86>WXQF3mVqj)!W@2h# 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�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ξ&pJ=R99P5`T%r{*S~)KHFIzbZ#@$Ob;Y>91^<~iMAU0HQ8&of-4c-qDhw7aPVng-L1F@m%*CVmdfY?y=cahjH zk=S36*sOerc#%P3TO+Zfk=Qv%>-XiN_#4!XYz#s;;AVQg9fz{faPl0g~QwBz83t8#FcuQx7^I0>%byMTW7bAgM<_Cmb{`4^y)eNe%M(;h_DJ zFg2i=Z5SJLrYejLI!6`828~6+*r4_{j1AgZ31frKae}dt&j|;uMu&+bpA*iCbRIQ7 z5*xII9Ht&LUIb&yA*lh45y8YkZFLwMG)4+zgT{|wY-=RF_DF2dI1x+@==@U{8~OZj z&=?U+95faLV<#b*13L2*CJx#}4P%40>ciL-Na{g*P+{WTNaCQr156zGEOF3%G%)dn zNa|N0vDYB6L1Vr!^`I^GFgEDkC>R^m?|`vE<5n;>=o~^A`!ZTo<+L1z`h*r2mVVQkRYGK>ux%Z9N*<61Db8PYk}E=X+9 z`J^y4{z&4%NNmuqUznO)ByrH0q_BAn(A`xqHMK};T0s38(DXV30|V%MQkWX#bHYLA zoWaZi?I4D!0gau(*r3xsU~JI6S1>l{tWp>oG;RoEA3<`%2_*IfBsOTQ4W=G+)-;R_ z+64_`gU*$Ku|Z?$F!nDbb3o^l!o*pT&dmnxXoiUkf%-wvZ~$$8g^8;msRxbG!^HKG z#6de#Vd73m;>c%%`yz>hwwc1zCnJf2`hYNT(7DqvHfW3v#s>8VVeD=sz5PgRP~Q-y z26Wamj14-p2gY8Dq#isD1D$dPjX}ZcchDFVOg(50111jYcZ1G%1=la2)f`NqIbj9{ z8z>tTjG%MxL25vAMxZ$q5F0cP06IVg#0HrSI%ovM2F(j3K=p#|0R!Fr1QOQ=-I)Rv z2i0Ss^X)<6ps}k8sJJx)0|V$zD3Ca4&I**CL2S@C7UmAd3{nG{ z3j^IJ2x5cgBS2{w#0Je-fX?0pu|acWpmAdm8#Gr28czVRL312$pk{*RFFrxpYZw?9 zen8ovI~76c8Kiz2XtfXYtZ&f4HlQ>N5(mw3$Uw#SF)%QI&bJ4NgXTLxXWE0Wo$R4-`G+6&5NVq{!3t zOpF;&HfY`tl+HnFK=U9=pyHsie-)Gs8gl}jHUUxtn%4l&?K3ejfaW{)K-GZeL5@S& z?-&^vK;z6H^`NpJG#(9NgXRojXQzYabU@?IAaPJV06RM!lutlo&>(S9CI$xB+3BEp z9N5|Epv{1=v(rI!0tfV*ZBU)S2W5lu7VPYF(ENrxR2($E1-hRLWIpIbCu68MXs!d) zJ_d<{>IBd@42TVy`|yLR0gZ=&jwb?%gXT&=D|$d|P@Mo8j|QsiXkKgslnpBTVP~6z_8`K}HV4hO zf)2a`=>^T9oPnwb<(o@THYk7GfU-ezF882p&>YGWC>vDXzk;$s_d>wVGY8GTz|J!V z&8vcz-hk`^mF1vwXr2W$ zHU%;V)HlqAitlD-U?_vKLH)r7C>wMSKo^t^O21Q}Y*6}zomCD>zbl~Pp!B;5$_Axh z(D)U|E>Qa24;2T^pMXvu0*Ql;Z#WGV2lW##LfN44LfBd5pt+R0P;t?sN!a;K`LQr-P3j>1;lnt6&QG>EUhmsjU*`RqA zb0|BTg@FNd(iO-qP#SlHih~Yf0M%Qtdnb|Epzb29jsr~t!`PsH7L1KNp8}dMhlzvd z6rlZ3&>T5T9C;oDRA<1%L3IO+4LY9~#s>9?U~KSw0o2UVv&TU(1v&c`7Cyu7>~UyZ zgWKCsHuAkKYd~#vs5q!>g@psC?Ezzh+RrdH=q_Uz8#Ff!V}r^~7#lQC4P%4KN*Eh7 zXANV6+Q2Zj0jQk}bpvQE3QXJsNgT8;1tt!9L>L=%CMApwD*Iq;P}v7#gUUM?8&t-@*r0kD#s<~JFgB?Eg|WeNA5i~- z?kItYgN}5Au|ao{z}TSsM__Ewog*+dX#N+*2Hhw&4XQ(7Y|xz`FgEBO5EvVD_Xmvq1~gX!^$R375hg+FazLv=L45>}YS0`qsC^7# zgD`0P3PgjJE`ZpexnvN3ixC3@=&k~gI7mN84phFPpKlLZy8{XXkRA{QsRPlVJ^_dg zGw*>h0|V%uN|1S=)wCcvka-~YfXoMpf%JjuYY+{?AUO~lG#3o&ix5(We!e}(Jdj-= zGe8(*9teX@0RYh;F%XtvWnch}g@M>04ATQzw+dpz{1IZ!zyP}Q0pt&mdq8p^f24xu zeL)(b71_n^RhZ+Z8 zuMDnxV1f(`429wh4Ete$gk%P2ej8*q%w7+7$a(J|e}I+@g5*HNa-;!fDYk+8V64=Aa^1cAw2pF3=K>S z44^ezpk=lo^FU(=py7FB^Lh*!7(naa(9P2~v^0mDFAqLsUV-3w^v34KMqs6c&!g`N z2OsqUKaXCK0kTjRlzc#O2687TOhIk}xgX?q&{`7E2{oYd2Q>a*%D}(?8e;&Bmpg+L z4g+lF$PnYKzM08wF@qrkgMrZk3+4sP3_Myq+>kS{ZMn`^xq%v=IMt9pWQE8nX=%uQ0G%@afP+CvOC5==hQzj%{Qy(02{IhU z(Soa4uxNpjmIOj>!J-8ktKhm0eP?5WS#sz;NRA6Gr)7m;TEop#(y~Ef+aj^;5X!X? z_8oimAL1y`!Vaia$DTsPG^F7AHMC&bHLMW2Eu@r~8N?Q`L5y(X(t@3<3VZo}guH44|?A zG)JSx$iM))SI&-+fdRDUHw<)V93Bk1Zxt7=XJlX?1%u{KNWq{(RhKa`Fl=IEU;xdB zoML2P0Ihuoon!uuk%0kp#~Nsy3bghRG$+x=#K16Cr?D_FFfp-%I!w$gte_3> zOf2l6YwMUeSV1>#F>$bWff@#&*-_?epguY)s1t6%BsrClfq^Z7je&tl8pLE^3j%FX zlmW3>*gzLeG0B419Bc`oZK`r0HV+%9(qNJYu?5&bm((#SfY>5zPeIO51hFO9Ku2;j zDS_BBY@kKcOv)g(0vqTeI3^VkTZIiY;m4#3iaHIpdXQc<5L=TCG|0`Q4q|Ju>9aC0 zFlm6;+HBWA+Y&WFY#p|8kUO6Wq1GH2? z6(I-chCLP*HPBJ@oS>0=2F_Se-+~i#`xX=DHPCzjXE#VWC+IFRR!-0=U^Y(B8K3N& z9iUT!IYDD$oSdN5#9W-9os-<0pw+}YoS=2Yyqpqj3=Djn3ZOHKIYB2&3vhzQcmz2u zK%+RE4r~kz!knPn=R`O`<4B^Mpb;c7PG=Sd260YL76t|hPS7E^lANGh0i`%W<3iG$ zpb;S%&O#Oj23bzfiOq7HpgCK4PS9zY3Y?(%0!2>H?0^y{X#7T*6SSIDg%i}*QRV#3 z!oZ-$2^!m1=LFprs=*1`f1t?;T3M#Wsm98{pv?)IY1H9z4RU1AWLb0US?rnFy?&6%)ns63A)$Ol(UqTfx(P3fQ^B{oHLw}fx&{a zjFExCk`pw0e1!pY_77;zmx+ZPw0xVJg^7jTkcokTodtBuDGw;FSkE&sF#KWFl3-zA z;LXj?V_?+=F&WrE_dK%dfY=6XpfNpGT@4lnh6FYr&@t3{Aa)HKXqHsYQtltmYv03pUVrAgcw4{f5m2bjGzMi2Z>LwAPQ+3dH`x2AY#+wFa?& zFz|sWkTdx~qY&H>KFAqhJ{yGZ!NR}*<})&|g3ev%VN(OGu?FXFHg%8*ko?W20b)b) zH=8Di&B4G5nt`@qR|5^!f-^fiR0AlpvqLq2GCMm&130s@Yk@TLfHOP0Hi#_%&g|?u zAhrlNv$N}h*b?B(&aMYy%YZXGJ2<2jz?q#L9MUS_%+3xDX$^2@XEy?=hh%nka7Y_~ zGdsHpNZbUR+1bG%ZNb25$I8GUz@Y}Z(UJ``T)_eL0I0;|fO?>bm4Sf+>VX2#?G+FY zFbIIgI#?_jLFE!iJ*cE*oa4vIz#s?;bjEF<^Q=JB|!y6x~S$d{mLAP|E=0yHr5kCTDHgB|P}MgvL4C`Ka&3DD{65?l-nF%WSk4m}15 zHwFdLG!&7c($O?0{NuA4LVI{{&M3>L-KD0Im0zWQ3Uk>RrK9++ko~069U91MDGI zW>B{aBw573AOY%%f+VeBlAuHZk_6cfnvVoYg4TzEod)Wt!6bzk85jb&7#K=nI$_3w z!X9+9W;PcCgA{0}3d{iAsR?F)3MViFw8IL_09~aCW`OR|1T#R3V8D!4Mg|5j1GN1K z%m9@tUOMw=qfEl2hb!$NG0WCuTGeGN3dO;$fi*UgV(CwID z254##%ur)uU;w2XDNs8IWDbKIXbO^35wwW`l(ghQr3Ql>D;om?R~KmJ3zSUdK@542 z5(b4M3=9lhQJ^#n7G;nFUB%7`ZuNk23%JPxH3W3IFsBqK?}DsEl2HU*Mab@cmJ?Jl zfr?)_P{!kw0mT$3$%6HR2?oV1P$R?q2UscS$Z9zbP)o)PWGX1_%7gSkl*)lFy5$77 z(Ll)uEC`lnkONIuaw>zAg5nn<1M(=uPjaBt$Eg7_5)>o|X$Hj=pt>obj0@yY(A=Nm zOjZU4Hp6zX0H`ie+ze`?n9KkRfGP%jr%&@SFfgkyaC6&nGjlL7u!zBr6J}sw6=r1S z)APPOxnH#hrQVenMvN%*3=p1Nq1_lYpq0W%g zo+Xh^dzM0+$Se(0!@wZJ%@`^Ua=$FpEl^|R;J)BimxLXgEYAuK0tI9_$brg=dawhP zp~^wE7HE+JcrYvowCD9Hs4Df2TAP@!W9zrBQEKuW&ks$~~f%=RP2@nf(BRL~O5QqYGBq0(Y7U=46Mus2|1?pWw zBtWcqh~*#(v?LEA0b=DrBtR6XuL+R=v1%a_APUscgh+r`9S{i+1?o{UGZb;o2Qfg~ zG#MF!KoqF9gJ=M;K>IZr8G=9*s7ncv0I@)Q8b*d75C!UILL@*e&`J$Ph9D3H>U=^Z zK&;~syFnDFM+%Vuu|Ri_Gcp8$C{XthA^~E7F0Nu^2m(={{wqWR!~)&=&Bzc0qCg#4 zhy;iQn%ZS#2m(={-YrA|!~(Uu85x2=6sXG!kpQtk3oRHKf-h0wY5ZhytzbVP+^{oDX7vmYFg#1c4~f2@zm% z5aT{16@n;G+GAq?wICSggV>-12s0X#{6HfRFg`2|BBeT{bcU3&kkS$(Ll7+WFfs(e z(hDO)5G;i-G6aEE;ecWsDYlW~7b!*=8G>MOh!kr`@q`pJNO6G_`iu-gpr8k>#e(?? z#0G^rG{ix}5ujtqnHU%rgJw7xfE5KxyMVrMXDN)@D;ks$;`f%Gvl1cNAuc2J~(;~um<6*MZy z$PnDiz`$@C9EZW6=mftWfmYaon%|5Ja7ThVV<6)}2Wf+7h$q25 z1I-tMgh4dKO1LgiLlnH#jUfs|fo_gxW~i=%pR5gP8$yQpK@E1WI~YKr17R^RfbM() z*#rwfm^jEa*u-HjgEo<8U>#iEk@V*TRWg4Ennm}eTx<-0NdIm75oXn(T z{mi`NoYIt32K|Df{49N_vee=NLjw!l)SNWkG80SvoXjNs^yFkrS$*&+d2llr@^a#H z67$kC^V0Gmhe|`7sh7dP1U@r5B{dCltTbE|Sf(U1Hx;Z>F9YQ5oV?Q9)S}E}C@(iZ zFSR7Gs1n9aEiO(>Pc4RUi(#imLoCS2OoCVjKQ?+BBO@~p_~_>o4B%sFA&1jK&L)PO zO3Vm7ZI^=qbV@ShEMCy@woIT?cNv&i7(u7&GC@w)g`8OoI-?hMUNT5MBPTcb>|W6M z#mwMiZyCYIEHi;m`Gt@W8^PxQGc$wF{bl2Xoqt;m(gU)IxgKm1@-WM&1$ z4m0QgU`A%hdCM@fAnt&;7!)s%bG{*A!4LNHhdNMzGc$pXaAtnN0Hz?J!2~|P8FGrU z637jlpyHS@FF&=Spojr-Vr6n=d~s!NQhpADYmj5SOT3$J2t#p6QF3kp_$bx*5)iMr zq==y)KDjs^bXaa`N@_8Kqm!?{U%VldHiFW|P}&4an=<4i=jW9{dFD{s0!mv#j-dq| zN{M!|Ea-Gm_=%dZECV{N2vkfI=cMK_fC>nP@|i zWHM+F8G2eV_=HukyA2q?lp%yNVu<(ii4XDgb&Yp%3~>dA0q8*5w4%ghn1PA8@dddM zV?idS7A3}~#Fu~_;OHA491_If9OUO531Wb>f&v#7uzC5Q@NhhCHyI_=5c6JceY@al@dv zN-TkfsG$)^bx8)|P+5>$Ar=&;7Q`o2#upbPCZ~c_#iyhuXXYm6#24g)6cv{gfx;D% z2tvR?0Jjt~hEftsQo(+QB$$$n{La43M#=Nn}?EYbCTns<#BunLvd;e zxS%Gt=E106Q0gM6(FI5m20BX`d^WL*V`RJ`1Bf&Nlg41u1WcNONi#5M&JX}eTj29{ z5jg@{Yrt|uGAQOyJsRZb;u+!W;TXga=^E@B5fH=xJ~P(QCnVm*)7>*9m?5vAq=+Fm zB|g6>CAA2-vSX-BEe015nI);Y43LBl%4gsl1I{o;VA2>&njq2|ID5IoLm~pC+8nIH z0!&(h%8@)!v4Whdz-r?ieFJDIk!OtJ$Gf?51o1a&b!GKz@Ft|HATPbKH7v&chm*nT?==!-UAUJvH zx`uj2MtTOirpCJICT3}dW(H}xDVaqjm70)ai@`T>g9b-ID^()EEx&lrytI6V&|uei zN2g$apU@E3cpuLY*C0oqU|Rz&M<-8P1JKeb&>#Rv6O@KB!7WwT8NQ$~YEZKnM1v$i zE4V;x(CQhGxH<#k{7}&NC}XuzY(<42E_i3WG|=>2|9!hBrXA(*aPhnfp&yIJ4``# zfhHh9{sXxIG_nB`Hw1TsHk^Bo9&wz>VMG^-MXTZcyB8h`WGhpJN0SuV=AT~@KwCe=qE|9-K zV;P*#cmmDN!_ure zsM63&&d<$F%`0KhgS0>NKpj-5j*1e!oXipgr=Tbwc?~Nlgg_XSV?i_sQ{!w~*!oUT zj4(2=F@W~BL(FDi0P#U=7$*JfTcky^;N^cH+hC@F_9=qORb)Qs{A^@C=)@^xK4>l< znU5SAAoD;Ig~;+S-$2Be8K8%HLbwdf3^EMLP&O!~g3fjY%~U{zz-P^Z_BSH)VQV)* zVxW=^w2lSD24N5%v}Yg024N5%wCoYY24N5%w2}eD24N6C8N`5M5FfO!5y}PI4_Z5n z%m?jNLFP|_aTplD>er+3&!X```|4prAp4M8k9x`Aeu;{av7sRYs0{*Q86c}bYIlR$ z=@~_!RtmUf2uA1a8qmLIAdp8l3h)MI5x`go%S{I2aogRxmbbzbt6(6l4l0#lgfu z19glb!x$jztYPBdJxfsYL93r&;-E7EVQkP$HjE8kM-NpG8sLVBgZDT=#X;#1W*2CZ z9(JZJC_Tc?v<0o8VT5J@(7AfBb7?^%kFYasL4%yIGi^a>lM!^N1p@;EXuuS9mM&=B z4eTsk&d0}ku z8E{ZD!RykYY|v~vObuu+FN_U3OBcol&Dg@u^99YV!`Np)euNe<;1(s6eFaJU1`-=I z>&^&DEDQ_`puNA~3z8Wa7(lD%VC)wl^-wi$Kx}9@gC^x+@%RNK4vohjAU4!5puG;T zGyodkgrxycD?vn%0erGJ$Y@Y21=LCar9F^1D2;>Gdw|%WG!810Kx|O-fm+QVHb@_6 zFExk_O5>{;7#KioP#OoFsRv?%(l{u5Kx|Nc0=29`Y*2a!&BlQ21+}C>Eo+cC$bJwX z#0Iq>K&@#I8&L1&c;Le8}m1+k&)C_yu9Aag)7YM>c>5F2#61!xi<#0E{>gXZx; zY>;?7^qf$Te?ezAfW$!q;~+lBE>Ly`wTwV)P*_l;2@& z(4KpcdXQQW8+PU?XrDbu4ai?*P&b3h4-lIhn)X0>9HbXyHi*p)>UJ?OFieK32iXH+ zb3@ZGXyFUUOi;Q2oizi}3o36wY?vQG`4^-H6epXY=78J`V#Cyc@+?RVD6S4c)qu(; z5F4iE8dMxqR)N?sH-PdWNH3@r3p#@sR-- zvIVIDrC-phMvxj%7=YN^pp3)7zyMkf15*Q<#R91Tm4zTSH#E&EK4k|lAY?wHxM+g!Jm7^dwOdQlB1c`&nR1g~` z4(btt#6jgNhz%15^$0=Ypt2UkhKYlEgdlNHyn)y-aZryCBn~QrL2Q^fs7DAA2bISl zHcTAUBLst%9wA5^RDOflFmX_i5F`#N z%Ry||`Lm!NAxIolZh_b^aZryCBn~R$L2THWv!EU!NE}q&gV-=}P>&EK4l4UWY?wGG z{z2lPdH}?RiGzBCAaPK71hKh61uO&P{B@8zP`(3A{DIVf>Ix8>8?;%5fq?-uO9>JO z)f*r-OxyulMuGH#W-dYIfO?poAaOwk22kAsV#DkTgNlRd84w$mwn0ncKzczvz&wx| zCI$vjFSG!}7GwbLRRXbLWd-Pb5RiJ1y`b|9KyCxoQ6M&~tN`^^LE@nL3dDxR3+TKL zkT|IB0O2@5RL{ZKpt=pl29@nFHmJ^k zu|ahMj18&-U~EuX4`YMMcNiN~cEi}9G8)DPmCG% zfw4hl4U7#cUtnxdnF3>j$`KeFRCd7Fpz;F729*&oHmF>Hu|Z`4j19{FFg7U9!`PsF z4r7DzHjE9*&oDM9-@@3Syb5E3@*#{3%6l+2sNR9GLHP&92IUzT81 z*qNK4b}dXjs9g&>HwL5+RQ1Bxpye#E^Q^&T1;{Yix!6!PXq18x$_90}U}l1vK`?Vb zW->yDKfvV!R6S_C0j3wU2cL@#6$jnZ z026OSQV(h)!o)%CE*N_$lA4W3?7c{A&|U5fPe|fFkl3K}#b9bc`}1II&@Fo~wg71J12n9}kl3KJ^I&S!k;K90hCtOjAc;pH zu~U%Ppfi?W=74YCgX#tC9)pQbK~fJ|NCp!J?KXq4L1!kx*hi4mUqE8NKw^JEVuK2D zm|oDiM=&;MhZ&3=3flJubsPAsb0`~h<`7Ix6_T1ZB=#gEHs~xZn0nCpSui%}%q$oi zv{wwqK8K|D783gz68jSp`yUdU3$#H8>P|5vwh|H>bfy)|E^8!lcO-T&5*u`06-+(o zj4Bwr0!d9Xhz+eb+gTy!0)y(lNg#2kd**=Hph}N{fnhZg8+0xe?A+vINaCQgs9<)1 z&YyyfPu>BkftvXO#0FK$3=9l!L2Rh_cMuzD*B=lYD$WGjj|6omI})24wC|9KfdRBh zNdzPgRWA=>L(NeEv7vfFyA@&eGU)s%7~2a;O*DuN8oXg(U`PkCp?WJoZ0J-*4~Pvl zeo$3w+8gT$e3+XrGp)f@(~q2`0m#(=r!8It%fBsL4^>~*MmUL>|0 z5?dXKZHUD7L}JGxv5P@$sDJB0Y^eDYKy0Y^91t5Sz6r#Jithulq2gCSY^XT+?0Bg7 zHzaW;&^hc-abXY}s$L$%hKd`2*idmB5F0A)3t~gXBSCDacov8a6)yv^q2l#O><%RM zL?resB=%w?_8KJiRwVX5B=&J6_5~#NO(gasBsTawdZ^pJAc_A)VzYtHe}}38pG^;C zOCX6WBC)lQ*x)nkq3Ugr#9fit{vb9q9i||$>yX&}NbHqJ?88XxD@g2jNbLVeY)Q}= z?ohjok=Q{<>>MO^EfTvAi47``VC`p6kpW|a##Lc#P?H+Q2DQCmY~;2#sBaDv2erLn zY+9eq4eC?F>;m9bn>$NaET^Y|us_m>M%AanK!a zFmX^H6UGMhF=1@bu0t3*7)fs|5*xId2BrqIClSU5-313@gZ7cb*i}e+K}Qq7#6i0k zVQkQ`05JAsB=xh9*r5IkObw}Lb{|AC=O_{z)R%#o3ECG4V}s6cg|R_>85kRMhAWKy z63HCUeR44I??~dHyMLFc)`*vMym zgZeBmanLRl7<(d;nNyM2ptD_J^S`*x`v%Qd!PFq1_q`R#9B}^y>POHnXPCX9GhbnB z&|P{kHt6g^82dVsIml;!gEpqZ)PVXmF!oy{^&gSgpneTZ%^xIj&>68XanN0xFg733 zx!9odlwsnMNaCPlFJR)JQwd;f&^?_nHuCx4#z=ZWCpN&;fX-Zov0ahWAfFo!I&&GO z26V0>j2(@n9&|P>Ogs%q9Qi!)LL~80BsQpT1=9;Uiy6jlM^b})&N%2SW>~y~?iPiq zpN*s*`OI<9c^)t|$Y+jkL{bmxqrudG&Si$NLHAd|*e8+HgZgeT@heE;cahi+k=Wq= z9W))jMH2sr#0K^CU}mzgAo?btGc91^{7B+rNNmt~w=gw|NaCtUY|z<}Ff|59;@}e# zpzSEo`6VzlUPx*{=QzW}LH$h_8+4{Kj19Vb6~<0M(hEBE1SX!3Bn~=w0VdvrB;JX{ z?nPoxL1Kf>riAGQ9n1h@uSQa{35gBr!@|^n&Q^f2L1%uz*cXx1gYNo*iGz+@fU#d7 zsri7!2A%Z`Q}Y{19CQW=Oq?C5zsZfn2A$jhQv*8R8OBycQUkg(3?>d9n*}X{gsy#p z^`Ssxyf8Jm+K`|*Aeb6Zmkh=RjS0ip$Ya8wxgMA}a(faqrvnoQ&FR3{pgA2F8#Jc_ zV}r*kp=k_sw;yQ7EXa-7j0_AQHfVJ*XxtLS2CeEWhl+#N27tyeLE@ls;%2Bg$R5ym zCP*CA7Y4N%Ky1)@4bXmj5F0cX1e#+7u|fMALG!90Hfa6_bpI=e4LWllbnZKd4VvfQ z2{j)y{{uSf9V8B#^9QvPKy1(&kke2#pgEt5P&VjLkLyr2Xp9+j<_$62>fonq9piQx$_5er?Xs+85 zDh?Wx2Aw|v5(ll}0kr`@Y|uQmH&hL1PB{?D2F+=QL)oD5Y0&+VAoZZO9_Sts5F2#% zOeRzfXihsH$_8z12i^M%QUi)NP`wXggVwY(L)C!dtrN-yjZcH_6alFLwe_Y##X;+j zKy^Jx928gcq2i#p0+lI@NXu(sY*1MTDb^~aB2U_O$AhBm4u|fG3rXF-J zH;fHBN)E;bpWOsC2Xw+2OdPbc0mgoVWG3j|4463R4sRG6)VG4ML3s(r2IU_Z8`N)t zu|exbU~JH-axgaNUJDpI1=NRvx($?PVB$4M;-LHh69*lS17m~IJ&X-X-!S&*x$2-? z%)o$gt~zKii~({-H*Aa@bebJ(O)^9mVG`7)0j;11wWC0)LG2e%JqlujFw`0b(D}q5 zHfTKxNPL490|V%MdeE{xkbaOHs9ZrmPaKqgKfM=m>j5% z0O^65SKjuy3xr|jfz|K0LVPh+7OT&$UN|xAf)ro z)1?_0@?e<{>UNNsptaB-8dML1?76Cl{k(I~Iw8=>h#)l}ET)A0ymQbvE66;M8W8qV zg6t{;u|XIn2fAYlOBh(ofKqsDp z$}v!131l8<+5xmv581pOnhXq}dm}-5Kp12Wh|bAOici$dD@x2uF|p9g*C%w|xuu~I z^muf_=bd|iJPA5g6l4*D27?TIXB7j3nIpqmroGU^l$C@Tjf9yL6deVO1+A1ohcJWW zA!jS^Wm08e(B%RNg2D;c*}b5-4$#^F20jJw8h((KpfCZS0S^iYJ_UwVp!3i`5)3Si z$3gSYpiU%ckpf5zG!X)#nIPx(GPAIQx@XKx?4Z^%Gb0;lkq;>uvvV+dkW%dDOMRrhMf!P-%%D@3SR_-(d0|O_BU}j)uVF$H*xj2~J zKQk~eaD%EqW>4_iS8h%g1_ow7NP)ouT9d%+e+g6yf`-hQgF%xpJS;2~pfl&hKr;x; zEbQ`33=F)h85tNPSam^LU%91@(ToK~pWP<{;AU2v{o+n}-|JtY@_bu?4t6%U4)!Kx`3i&=3%-Er>0_4eCm; z+JV?I+I0L`T_uzG>m4T7KxoLGH8Zf0N< z1noa&^#^fS7#TP~^Dv+@F~M;l&%k?$iGiVqH5jz)1`=W+ASMI%S!M3v97-}Rx3+PBGA$}H6;P8U(pW|RH1}&-K z2Hmf~S^{D+aD(yzYbn@#27VS$$`A%E6Zybe#0WZXRRlDi$65y2EhAzHI@GqBF_evg zfkgy#TO2Ed!yy7%>ILQSh@1eqxfZNPKm=6KvDP!@u`)1-h=5NgYy`_lh=7J5SewBd z84=LkbgV6m^H~`f6hz~53m9127#FcKFsO(;0-4sqxS5@SK|=&Iq{7+-)}tc=n#W-6 z1#=8UB0z5I1KVRF0y;sMbpj*ka&`+5(5cU?6B+ljGceeQfcmAZlfcRxMD~JWbSmQo zb_NC)5l{@U&SV4yyN3wqsz%mXjG%D!5dqDUvCd_bVq;*qAp+Wt&N>eq22VslE2vrL zGu~lmV0a+{n(AO(05FyIAsAv0Jv2e2|Q@WmG}ux)~ov1_l-GxuElmkFEl>khldw-aT=Sm4QKrTO5=TPJ&jC z81TiHCNZ#{0hw>Y7hhVyzkW|l0B+FH;;c78v#}xEpnEG>AAn{gBe<7?V)GHGoQdHE z&DXF#2B}YB5Cc)5L?RCIk2uI9;$SXFoPnPObf7IWBM0b6Ya(!u&=L_l{Vv1WknRuQQLCE!f3G7S+>OO`bY%rOuF4Fj-d zgEg&YhFvY>9^cXo(rpstI8EDHkzy9h`Q z>``%$76wI7J;BPx40aQvAfqauFgG)wG#}{1Q~_}Y1}4P0uCOCs`OuGeg`W4y3ObpU zO`H*N+ABNav{wcO4%i{BoUlV$xrC9_awF7&j&$XLocGF$dVDM&>bbA{AVnZs1;EN! zVW-RrBAErcR8f>cU6O%87_5lfirbnMbk?c}R1vEu_zYQ5sL@cam?$IY$W@R+amazI z5|E>3B|#D(VJYMTSUrV70R}%}R+<%lJ}r|t1A`3eiLYdlf0P8;`gSMOGY6klADSdz*RU!GhH<`+W+z-O<436#Up;&YPH zAkN86Dk{k@PlhUwFHc4`Exsf-zBn}*a&8^i6wm=%pkwD!Qxw4Gb;Xw^m8LPoCnXlA zGQ@+FXXKX_F~r9gr!mCm=f#8k6Q5X=Ud#}moS&ba2~t#?o>Q6%F%o22d@krzK!*6V zoJ5ea%;NauibRI^;*yliJcjtBoNS0YL9rTN!jO_*ngj~V+ zE>DK}J3coFbRZqfTWNU^N2KKygW@4Q4`g3{a&~+P*rwE?B8GUU%yh7O(i3xY6T!!> zr6=Yx#22L|rhv%e(wvg`Y_KO$y%rBT2@N%LV)pFvNq7@yN+6E@6oG@ptx) z4{~)54GQ)QbBzx{J31~NDY(E93375J=ybLC_+oJA#JhR=xH5p!3MjLH;y%6@MF^5R za+Bx`}(p9{(axurQJ z3{Y1UmlT!cXUFFxfqjq<DVZsmd6}T(VrG&ENm|93>G5f$dC4Rn9v7bn3Gb5J_{`!IkW0a# zg-EB#Ir*RhBR2`T>?trU24}DMTyUg83%U3rh5ll4q#2|hG|CE943-CvB*6uk!6V0TE(0?IbVCGGh#7oZ5tIYg z4~jEnKCOp6JfcLk93U~HMn7OuAn(Lka|$KfX=>xu|cVU5#$L5$eaLdPb_Hc9>xa60E`Xl z6~N2{g+Is~kXJzNVT8_Af%m>bBMCGd4buzW`wA5Y?|X-`!TVsLZ16ry*F7Rm#KC*5q2iLDd3q>Y4v7sKQ-i5@L=p$@cZI44uOWl7K|{GP^`JH4F!p>T zy`a%;nD}-i@xw^$^GIya6*w^U&ymDI>$zd#po7$5Y+leDKh!;vNNmvhY?vDGo>Hh9 z@E%bp8@w+R$_DQRg|fl>KcQ^!o=+%y1CsgRHO)}*6G-Bqbx1IK!FR1g)qF)#!vxw} z2o>i?V#^@0L2HI!=9nRgJ0r0{Yl2~FKx=$q>~bVE;5*f!c1=VQpNGU=jl>46!G)Ov zT6YU$gT|a;?E6USK~obj@t;WI;H$l$_6mbWc%W=`Bz6cA8?>o&M zlM7-)%`XD6q3WxV*gYUNRQ)0(HmDu~nF*pn^)8GJQVL^()+xZ)pgIf22918g*q}NT z#s<})Fg9rT6UGLe$pvHkg6eUoJ3;GnVdCJr6-3}!#|$o?p?YsZ*TsU|e;>*QwdO$k za6oGTLBqG8b(bJEsGS2k`wYYewV*)za6oKOTL?5G24aKiYS68UAT}tRK_}UQ*r4_Z zsB8zZL4&v;`(XQik=dYT4Xmz5Zif)FrVwNfF&N}7P>T>6OyGOOq0tZ44vI$*1AVQM zgct(@$W2n9x*FOh1GyLEA7t}D>l|Ud1&}!~^FVDv5F56J!9a|G0i+gW9w^K~av<|S z?Iw_UATf}B&{}B_4Z|Qg5F3515-xS%b`MAc6oaM?U~T{jf$Rm*pfyb(HcT!@404_# z$bF#Z8b}W0KF~x9%ncxYpf=4qqyU7;fzl;N56rv|VhjwR{mCHnKrMcd9LPM-dU2Q@ zka=;O3=E)kiy$@#!{or{kAMWAn2(!*0r|{Rm^zUEKxV`2-6IQGlLN9BWFJTlM1$tQ zV0u7C7IH&+d>}Rm!{k6`4}tW+%=3|htQi8C2kMD{ z%mkfB1kwXDuRsnF&Y(O7k^`9sZZ{&W@mb8vz~BaLqk{|rxetUv;SZugII7=A&S}M?9P>>#&d7wpnpjlv$d7#sJL2{sQ0reALc>`qRCSe8!&>Ss@4Z<+@ zfoNzk2NGtOBErA`T5k)=*B~=M=7GW+lopZAdm;)s3lgjeDJ&pse4wMDM6B^KwlFYI z00Y8nd@4Zw7%Xdi%p4i^GM#1S;pLHntmA=GmE9k^|W)^nPb^;a_W)^lQ&{QT1=q_b8W=0OsYG`&)mB+%w3YypC0Bu2F-~cUv zWaI#CXJumG1f2-QyaH4gf}8?!65|}u3M;O(JO)N5Hc%vjR^}uYr86)(WrMsB%ma!& zP!EWgF_zJQmobK^n1PounyH9^mobXbkb!{@q>UeBCO=3A11k&2L;*d}G3>lxVK4#e z$bl7r2?l((L2@8&g9J?#g68NL7+66RXsV74G8xB?df_7n?7~M*JhN(CsIzL^NL&d9 z1|Gz$8ZXkU8Xs)Fjvq3OhqxIM^^!zTEzQUf1foCzOL!IxqzV)bAPmahObm-bAx@`R zFf6lF3=FXR2A&gw%&fq!$pTHdL1u{H(>zDPw<a9rxC!G)h3S~itslg_JJRBcil$xGdT#{M@p7tpy%7;!I z!9xO~Dzzj&KMyo9!~mMcfKMdFr@`hY0MXt3P5AJpkfs2eaMJ2H2>%&!wM+|YKB5>XhDJ?Hf-z`#0QP1f>I`^O#)(rhHpU_Hnu7ODvCkLk^yqTIjqkIs$gMkP@iTf zjIDzAF@OR9bUqTuUr;uv?GEeTgVqJX*v&|4`jOaEk=USpp)mEJbDm*r^m995VFf;i z6P&df7(mS#Sih4OX`B)qFVHXt#SKg^$hj~!a{nG2{vZNR{~O$1hnfjml?>_=gX}p7 zI>#A&4Jre}Q79YK(gDel+gAqZB?e>b6NCH<(+gvR+Rh+0td0JM9nt0om82j!P#Yb+ zPYl{y49Z97=ArkAIXDn~Y)}&xW*&N<7&QI?GYdq6>;}>3ePUed(EG%o^KLjppZEnQaed;=ObiUCV1^-u3wocJhYR68PBK3*oz`F+-89@6?L2h`$$iTn>N}LJ| z4FB){2ThNGgsFnf92wF?*&>WVOJy0-RGA~3qg<}FFvuiZGSz%>Q()*Y)^Jwep`pYq zHA9#|NqLzNUj(O;Fi%&jQUn9&{sx8!P9__*+Bg^(l$by=&Jti5Cx!@P4dqBCHzo!P zs=CALaH zVUfb71u_tUTCO{@Ago2lB8tM;AZ!TP_ThgAi<&4?8w10K4#Cdw8R0fRrdzQ2aDa}e zWoTqzn7)ItGn|KWCd-a+g+&UJ5%auuK!OHWt|ko(8j{!hra$6X zbSwg*zvh!t7&{M><}^hHhRQb0Wr_?8n%h9cF+~Ojr7$)nHOXb79EJ=G21*KUj0|9g zfKr;IlA0ttk}m zVSFAYkVZ2{h7RKl;jY#Uwrd#-GMg=#*i;y11W&h6oG^33go%#Q9TO^w_p+^JIt%q| zE|=IZHVxsGOqIbWj60l<@8IcL#>3rk<^aT3D~$KDtXg)K6~Y6htghBh#f#43xK5fyNas7(!`L3`XHK%+U}5`%@&05pFF+GrLB9^_(RkN`OXbd?^cmBu6pDxaAd z*+566Gc$64P9kDvV*Lu*n8w5o+F#BB-|`j=YQ=G|f-d@C=3oci49Ns4JejY7wga<* z&Zl5@XLMy?U|?fm0_|*K;Rc<(&vcxbfq{hww4{J(J!n&f0H_tq%)%N98n;>x+CHET z5@8Z%V_;x42Wes52C_bd5o9hq3#%8%Mh?(fz^p#|85kHiKwBDFeL4Z)}F3JyoEMZ(gANZlJy2pv_NUhchtng0_;Vu$h96ndSkF`?7(9 zf`R8I$aD*cO`tuWY?dH42hSol1_m}O5Sxc*GBX1Mn>C0nz@rUf+kn_2JU>A$um!Ot zc>aUL?Lcf9o-~kNdk|ZJK|mf<;V`m!M$XQT8mN9}9Fo=MLY}u+A zo4_02(m^hOa5zLj^LbDi9`I%#wpy?r0TEA7(ynKm4O(0z0@~)x)(Do75CLt#VQU6+ zWJExRUa_?>o`G+CV{2nP58n6&I?{@*gAsHBtcHjz$kHyb9vuY9N`ZjDOid8{a@Nz&4W+ z6zm@0{WWZ}7(wCcBLX@so^39pJ9y(8Xu~PnJa8C15lI6jkNKdh-WgtqfX*afTL3m1 zwDApena1`2 zz?eQy9cR6ey91gZv{7@`yN?3leAGXIaR~z`)GNafJo6 zbqN%lU=5(;f}{b=g=)A2+V}?2#m}-1w5e?+0|Nud>qyE$LgG;6cR^}EY*3IO)G+X~ zFoHIafiecj!{EHd1SvqR*%%nWdm>WQ{$T z!zN-2DqS4Fbq9}#F-XRl5wtH%fPoWKpWK2ukBLDzlaYZzfGvzs2DD-A2`Je_GJ;EF z5zqoEwkW8RKs)W&qQNp8B6~sZiveo^ZF~bM7Y1!&3t&rN1Z^S}0gXkmC4E!Zh+&H zfuH3ncvl-J>GQLIY7t3L&WEJ{W)4u&`UF;@#LmFLw1A0$fqe%k2{VC~0LBcFNa-gMEK}R_l7&!O}@{1W5A^XYsQuEUo7(+mN%LVvy6Dt@P zLqTj29?;Q_jFIM`!4V$taY<3CAZIY}vw-poKMP0|6Ubu5XppmHI6+OBX`r+YYTJMs zW{h(@I2jmZL3OBSqhB96T2GFU}YK+m0K2QmD&@mSic^Mc~LF+1K@`CC` zurB7Z8w?EUpoY-~kSyrrHjsWzF0d?95d(udXooLYD`*NCq}3fF3DF8VqYbPTwE1@j zF9SmsST>re9PX%Tj0_Ctc^Me$!7@=`eHx%M?H=%gZ2=1~DEcB3?F$J7=A*m2Kh%r zjER8(iA z$jrdNxd@zOU_A%MIrcoTK&%A^q9HQ_gD%+lwcvEf7z{~;wa`?k0cvUafs<7%6X$=B zlS;r=6vLgQ_lSjof$IpUaRjOkK|K`4Im_Vow1Mpjg4@%^2$F-@(+0EW6%zvk)E-7d zY}W9ztlv1A`u@YsYmM!08mtV!pz#tAH82DL09V0_6Rt5%c9Y*7uphhhlBPc^bbb}HkgAwRPdlp4dj)Lei z+5s{~6_lhP0tRuQ{s}wSYEW82XolFYe~yuXfmae_8Yo>s8YQ4i0hI<_uEGlz1$i3G z5C>g00FgH709A=>%%IGIbvXfaTQN6i)d2F|W5kYRR;Uul&STID0|o|mcHz4yM)Pgo359Xc6Y77hv($M|NV6VyOF*5Ukc0YsmETim1 zmPJ}5A6Tz%(1KdU?J3M8!N8!+%@`^UGDru$ zPz2L?x==kJ2S_k5=)skOmwcf3L?2boMiOMU0bCGlHbl@+kHKCN96YS*lA!I^MsQW! zAOVm@W4I7l4M@lYS(~RYNF%5@!2n*R$q)phKy41x^(G({pyi>A48b4@G;j-25Ii5m z0<9QgWC#XPkg0{wjKT9kEYM{Hj10jb3T9+5e5W_aNN_>L5CWoL3PMm6fM)m@8A3r6 zXf-Ry&d~WF7Pz!#2nA6vouP1@prId-GpXoWkddHqc1DH}5C!r!GXv*;u>V00U}OL_ zdq93-05zUKNB1%^1c9iBjG(m&pBaPT&I2g`9s0w_5DcO~(}f_916c>2}TA6(1{m}48b4@W+WmoLCrc)bA*urw7?VW4A8BD5Fz;8^Po0~1ZeXELlB4p z-3JCTAK@}kTSEY>APQ^-XtJ7#fguDe6a=C`cV0pCfLKQ$5+DjRa1N0`)(Ps_GBN~% zDA3t9AO*qmK`fANMuuPz1=ES}4X6zRI+&J`Ap}H$6oGVx%m=YR%8^1FbZ!&Kc+zbF z9S00L;)RhR3}G%j_&@_ypfMXphDZM6jQreG{min&Jblnc>!OnUV*TRWg4Enn*hvzQ#dYye2O8-a=^4PJz?-(AhfFXq zq^3cRU&w)+)xg5Q09ir@ zJ%|B%J_9QQ156()_ymVc@UabS5O%&^255t5IcR+ygbChcjJC)RthgvMFCC%;zTj^b zBO@~l(qRsaCJtq^G z4I=BnCbNKb)o~)523leWQ3*RN0%Rr&C&)~Q2&ODEk}Skk%wW52GjOsoz`Vi4DF}8D z#4?C;dBF}906Pn$65=d~5lmpc?3|onT_8s@f<+j?j)nvW6EsjjdYQmhLV|;l6J#b6 z*khmpO;BKgOh7ds6etignK?l&fp`yMFDp2JU}k~>r4}s02)2aY$ip6<)Acm?2@yz{J7~3KdW|=73{b6m04Thy!58g3>KJiba?rpvY$f z8v)bB3tM7~d_W4g04ax;AfSUfs!|yWKs{~H86cqJ5n#t9#22R(fX}svPfRW>%`8eq zK2N1QGbNRw7^VfXfYbnVGz$1+6xfLlM4ptAo0VrBZMz z3&`IEl?>o&3zT?3RUjxZAk`))Fu>=uB!hy#0F;O^&uPKCR68?YA2qB&M+cxD>{6Uq z20ogkIIVyIGh)EU_#hwkf_yj#Bs^dz%Yd2;IL>APpW6~&gjf>~s-_tR=!}+JcrL(s zS_|l;lp;{Og8_6z3+M!uWGn}_#6!<%fgWar8qf^!SWj;OD?$`&;Jk?AKo{6)Mp(~v zL6mt#sX3|O1DBAGdVv*2$S1zgXxBkzKIBlLc&I~=iXKRj1kTtj7wCF{nodqhZ4qpv9)386?m+2WX@g#0HHZfb@dYfY_jOqCw)IMXMk)K;n)J3=E(J z${=yjdOFZS86Y-jfD>dtNDXM51+=&vBn~=c6=o)g4Uz|mF91!uF)%QI*r34*uo?{p z@JI#7O(6UBfDTrMssW8dfYmTS7Bhnu0E6`Y1qp(drZ6xtfY>neK^HZGq(FQS8?+b^ zq#ks%GRSO@IB2UFhz5y+ww5_V?MeoD1ZpOT4O+YiQUlsy1~U`H)`F@B&BVaM0W?4Y zQv+hd!T~hw0a^?RG6ytP0#>8JzyKQm04~?` z4z2*LHwUo~fh>WB1BeZBKS&5P+yORIgMk4w>HsnmBn}#KfQf?!8(`v~kp`GJXp8|C zzo6j+m^g?H69N^Faj+G9Q$%k@=t%!pMA>YawFH@Kt^=J~V$qxD3n;pbP=!fX{0JogjeB2d!*I z=1VeoA-LeZH=v>nCIoT~e5?_=?*epR1+qM7{|GW4bl)v9e;$kj)xQmm4?3#{CIqtY zCX54B4;m?j34!E6XZXOf8ffnj=zcL+76b7?yH{aZ3&fX33L=nx(4AtiEC!Ot9F;*- zw1}<^s7(qwk*$aUcY7UlrX%=}J6MMT(H?>K!9Z=NGKeM`X#FQ>Z9b^1 zgBFXhJwBim4r7Dz79%tXf{I~AXz~M1V=#j10|wBfDFXu|Xg&aT-W8}0fbK7VsR!>- zfvN{pcQEy!GaeYB>OuPg7(rz>0|Nti4+_X~2FRWgMp;M-0?jru%0bwmbPiJwnjL_N zM}YhVs_z*X7-B$dki!`m7{L3gKn`bMU;y12%?M?KstwS+XP}%4vIfKkttADy4a5d* z2?yQ12V#T7K?^=$>_edQ!I&5rKvg1Wi3CU-bdMJ3P7V+obQhK|BLf474LW}cR87Oq z8v`we0EvUtgBB!#*!heM44|cAAT^*W3Us#|hz)Wh=zJ*<8x%jFGax{0P<{a2T?Jx; zsvOY4ydZNxcLsv0Y>+r8*g^NSfy6;oA817?h`pSNfdRBI5XJ^op&&MB{s)9XY>=5? z%mg|A0Tg5)aZuQUnh78_s2K$+V?blD#O8*kH_)UDNDU}#L3=_#YCus5Vsk^&A*gHtsR1>Y9)aRQ5VF?> z#O4NhoPmMi9aJ2&hY7^yhNe}}Iv0?cpz~!wY;I^e1Z|c8nF(rY@j>Gb6mOt%2qX?_ zUV-i}1L+0TEg&|`J)k?UL25uvEzq6UAT^-04`RdI16sHX5(ni25F6$m(Bc`8I4IqL z*f94*f!rVnxnBsx=7#1GkR2eqK+U%nkQyci22k^@3yD1e#1@3)ClH$(6vzw=44``_ zL3%-H1azk)hz$y7(ESl0H-OHT0I|728G?a<0d&V1NDZi22Rf4sqz051L2Pblegw^K zfz*JSd!Sh^kQz`r0kL6j22Bcq)PS0JpnD-fY|tc%J7`V1AOm=o55$I<3A$+kqz063 zL1&nO*q|n18dNzvP0NtesQUhXx?oR}n2`WE8Y;I5{05#D;>OpJ6Kxc$%C;$VGYs? z3R@6{=>>%gOfSg)AoZa380cI;7#p<54x|^f0ttj+dO>>uVR}JjEJ!`5Z2(%&0%Lc8 z&U4~qU;wSH2Vt0A&;>Ryy`VjEAoZYj1n8_87#mdXfb3nuz`y{)FukC#fawM8fd#1t zwK+C|>|$bI0I_#~*qjUupz;cYVR}L3HB2vPVJ1i~s6BELq#iU830f!$ic@IQ5ma6? zf(mK|1_n^q4aNqw^k8gIkpwdnl;uEXf|3j<-WfrCR0akHP`ehU9&|+jj1Ah?31frG zVi+47r%-!A^R6&)(4|2zHYmPeY*2i`*x)#V>TLq~1Osr$VQf%W7sdwNS^;B&jxB+)LG61O+YPi*5Nf_R z5<47;4O&|XQ(uK74qCPi6W@X)egKJm28n$Gi4Dp#Fufm;#Qz|%LCX$dYCvTSj19VD z6~+eLp9^DKfhNMCesM!$2O+WJk=URspI~}Hbv=wd6-f=K?1PD~MH0V@#D0my1}#j4 zspkMqt3%x*io{kzVuS8}g{cSKlL2Fc?s>Ehzr%3EiNNmvF7MM9apvAvXKT0C8K{vU;)PR~19X3?%ka zB=#mGwg3kM1I*3RNNhDEb}$k<9*Lce#4bl-FGpf;Mq-~qVqZsMKLoL%{l2G2XG#77 ziGwOD1_p-zAT~5SIXM{^U}r2yAhBgZY^WM_5F4u31c_}4Vnfw9gV<0t{vb9~JPO2y zx(9T=9jNXD)z2j$aj5zhBz7l=4b?jxiM<}ghN|C-#6ARKL(RX2#D0&&{(;2i?Hv7zcKKy2u6SR;rHRnrY(L)A+9Up!O>$FN0{% zSO$y@Y8J!Tpr$R14QlJc*r5GHFgB=<17m~wI50M--3w!bHU`4jpv_(|HfXmcj1Afd z3}b^<8p7D1v&>;^(Agp|HmD5@V}trBFg9p<2*w7Dox<3laUmER)&~Lk9oz?j#uum$ z0#maN+Ft;v*@VOfoka;#vlmGmG#&yI2kj_>v2P)%0qyRAiGw!uz}Rn))POEygNcK# zErhW_+n8Z&(AWoz4H}Pyu|a!>VQeKvNLmHCA2cQl69;WbhR3c4Z6A!#s=O04r7Db?J#x`k~yHO;$Y&nNaCQg+hO9M!x&-gNl0oy<0dfi z1xVtc`{H5Zpz${tdp(jG(8ep6IA}Zt#s+P{g0Vq;1Q;8%K?%kNogWNie?l@7bT2DR z9MoTcu|Z=iFg9q%5sVF5rVC@MF(Kkb3yBT7YaXV?0!bWnDJe`GbQ3L%4cfv4V@D#X z2W^~(iG%K=hq3dJ)PT;~fr(cliG%tkFmceHC>R@bmJWT2yNlhXW z8?@gErUrCgK8#(5q^1dp4cf>AQ!@ie9CT?ZOnfntIB1F$cGm=``hm5DKx11l^`J5W z#zw9SK;zmlaZptUW4D6(p3pLL0_YqID0>=|4H~PS17(Bk2VHOrIx7q`ZVgH&AU4P? zpqp4hY>-<(w;6-jprPYkP`#j`)B{j9Xs8gBWATR{7WLE@nd3=E)cYalkLo&mKFKy1($`8TNgcm@WBKTtMkyd1Pf9i%1= zG#A4RIU5-?9>WJ^gN|wiZ6X7y0i9(n1r-OKaisudgT~v{plndRqyuGx&aEu2Q5e{X8+UKD3267K*3qGj-4q}7G$ugm8 zK;u36P&R0sAGA>yqy}_TG-&4=hz%O22W?0Mu|f4!J5>E^1_lPu<*6WX(3m~wYzhz? zG)_Mgss=Px1WJ=2anP9kQm8nn?gHKO01^j{A%VsRKx{!q28QiWHK6f)(1vc1IA~tx zFjO2gwto`JRsn5Fg|bZ;85piY*`OmUZbR9iov)zNPC({>&i8!|6?bK1V0a5u1N z0NT6{G9OfbMnc6w^<+GhJ)4n%0kl~Wqy{u+l?@eN#K^!<2xWun&vGamG?!HiWrONc z(0)LWUeH|DB&axOE^9874XR5)_g#S0fOZ~&PI&>bLG|i3s2b3m#U3ad)NeWjWrOP2 z6HqqjK9$Q*HfSE>9+VB5%Xk81gXS(?LD``C7IcRO$SzQQ3%b`B#0KpO23__IVuSin z%%H1AnHU&AbuTBBt;oc{zz=0BGchoLPCNmr2i?&k4HXB?fha=Rp!!)I$_CAe=t9|` z%_YWAHfXDiC6o=?D`O93gXTtDp={7tpf{8ax^NnFlmN(H(A-KmR2(!$7z<^C=1`KM zY|uX8Oeh<4z(+omUB|@0Pzq&(=1)L3M}y34XJTLg-JJ|#gXUA(p=vTS?L93Z`*lSMW|#X<8gJE81-ObiVBp={8+&oL+)w8;jvml~uO)CUBe zXaQn_&KbD@RRh|Vd=JV7_3xfQ*`T`p6_gDsn?FF=ptAWJlnt8O`2%Hx>UJhJNPYy> z?Ho`xXl{oG$_ACkpn8oFG^h_^fX1<*Y*1YWs|S(ibU;%_FmX^{2F3=>`N7!WaeHWe z2cFl4vXSRmazJ)L#X)@&nBEp7apd`tIY{E5vKyuze2f9q98h@;6F-Bb9yH$y6Mupv z{sD;%y7wNY1~lglV~c>sy`koV%2t>-XwDSI29>8UwhNMaP+18R2etoUY|zEeFgB>{ zgRwzn8I0Y7WX=pEHmE#;sR5NcFgB>%fw4hb0AXxUSp#E(4{(6`dZEdiAO&heftKrl+GHTbpm|8pa!wE%gh6dT5DjW~f!Lt= zNDx0o4|HKPbB1}I!W-Ui8m%ma<5!1RFh zFP4Oyg$rVXFiZ|K4-C=+Gw*^MOkg!=CWbtfvQ8KWW;b)lYs%$h6kAi!Z7nd zG_+_12{WA0VqgG`Gl1s8LCb+a=7Hi5l(v!0)6r#M0Ij(JYl4O?hz-4uq#!k~NH1Ss zL4nZOtA-YqM&P4Y6$qcb3TiWg+6SPr1ho21fPt3*)F%VE5pYhq^PcnMnP$;1kpPG{y|1^I@VgB{dKVrF3ljn6T&u!Gjj zGPAIQdbiAs9H2op z0=l69eD?v$^#-)qaRJ$uf_zy*aYlYoi2{nn5FwDGsB|9$+;s599k5S9rh|4%fHvha z;NFA;b}x7nQjuOV(j^gaGX`!W1)fFbC7?^6^}si8>m?PVuJq2#OUq}_OG!;CO^;7Z zN-9b%LsOkQD3KBx<3_;-nG8l?M<`qHN zAPQs`hz89Kfl>jiUXx&9U;y=FU~LDG94M|p_cX!ufb@a(4uIBEf!H7nlLM_+gt0;5 zpn4e8e*>{W7$yfA`vaK`v-bw*&?W{3@a@Z>dK)AMvKJgLAdOHA>OX<%G$5 zb|5wggY1OS$hpyn84}K*`8$w5LH@;7KZDlMK$A4c7`T5S^>aaLQBgj)f+kcyTUwY{ z5L-Wg03}AGv(aT4pbLA!F2GKhB{K9Z>PR}10Xxom&gLd&2C)prO-jrLixnW}KQClp z*kJ@=?qFKW#3OSTdV+UP7F^tjXB9++><6SXqE#6fWItFbK-yfm&WHx}^+96|419>Q zph04waD|8~Fr-7*kAm76prdFRL7heyQ0PM!wS&BeXm6YZok7gR4q8pd%*X~>n8(b> z0U9G_W@5Dh9gobx3hGfYbFhOt9xR~K?wPnjbFVC*!3`!J&{9E`@1PT#1?oVp6c*O6 zpoSmlR$OLvkO(ViaGoWF5tI+vSeU&)r$MuKfi(Dlh9B6kfgIoq5@p~3jh%zeP38m< z;6s){BkWup%(CMZqVQXgw4af z1f(3S27Jsit6>>vH zH)xob)dIw3;XVNpw*;{{xb0XO7+9@9Y#wgVwaKj3AhrNEXxNL@2E-QO2AxLBY71gZ zaD#^8S?xe<8E!6+UV9K*fkEIpXnuf^)dMtV$DIzkP|g#?gxtZ->IGsq2#SLI;sbIs z1EU~l_LkKj#9?7%-~csCLF0yCkH|Cdg61rGSc5^sc#sea0Wlf4r-IJd4h31t!VMaC zW(@TjfrGUeH08z(nj2s( z0Wlf4L1hMODcF1leil&55Z=Sg!0>^!h*1G_%ra;kowbY+q<}#LG>F7n%?Mg&#v%e5 z@r80YM4CY%0FmJlnE-NgEm)6$2q??5)-&dTk68vC5yaXEmXQzvUEj*u4Ccs)%mV3Y zVVn;?W|_5(aS`~KG1|p!rE7m@+JtiW8 zObiUH6Bu`bk68u{{jyF3AMI)*QVNop1XkuCau^gpQyDLSk68xA0P9RfP_TQ5=z`MB zEJjec`iOw8BV?V+CLs{AHUzzrJrXFUuWC060y3UbuZ zRjdpQ8r-1c2w6{@10A!>tpZBSCqW|y2H<0sST=RkHjaD(=m zv0eln{_Mid0@8cwA1mybW!9@8y&l}4eHpAbKmyJ(6T>|hB>otrK7~OHM1c~CILJTZAdiTHxgc={ewGr*G0X3mK}Sr2f)lI( zlw6QBfVof&OF_phgLLt;fX2whKwUkM*O8Qigv6oBH-L^=2C+dwf>6W2&vFHHt}ZBJ zfIJM&TTGB5ln-?NGN=e;U|N(5h77&7dX-t0JR6=#*q|>8A{4Gl+l|1hA@r z6D*5}2}p}7I3aknn1xG$p|iyMOJ_^ZWPo> zpveu^Xs`^22&krGjR9)`9kUElE-c5wz!1Qiz&HtXTr&qKi6(>7JA+6w$o>>YP{gu` zfC82^70lrg(FUcKG%!a*WG6^ZI#|Dqh&hOp0k&I3BogG1Ot3Ny5m4)jH4Dr!5CKiw zv1Wrg79ya%q^vn$j)Mqjfe~vinB&2~0g7x;kpYe)&@s!P5Re3w8{qh4;AdF@K0`U0 z4U~pJwTL7r=fhIKHL&DSFbP`G%CZ4;9JL83Mx;Qa#%!ST{vjJ<80V}9ovU0>QpCXM z4oa_#LDIzxjP9WH#~3UFnk#1X2Blt5BS03kHI2~+l(v{A2FQULdM`N`7<@Pw7~~;G z0n35pK#M*Tpkl=g4051`B}fdkz*L?wiWSm0lmo4=lHz1wmXOnUvpH0e*PzySnlm~Lu>0myhRF4sHSSBdA93-YYfzQ^I zhMvs{JS{ed>Mky_gz1u9ISGygz`N@5JB;T}UO zE=i&BnSV4mOK-qV4}_f2r;mCbAG8ArK8FvqpBi%d9{ij=X7DL`kdydW7#P5Vc928) zz+n$LiLbZ>dUPK6W*b&;G&7%MfSx(W06mF~33OT-_-Hf~5y(kzU~y*H5q6Ms<3K0F zaX?QYV`c!IU&g@5h}#awS82d~s%8W(foI;$5$k%z9`ANkLkl}6=EnudHdj3AQCn#R zr6tMWfQrX|q!vhFG2~zb@QGUB(I19*AAe`>_#jv3(4b(?FxU7H#QXzzSUw&pFd(5_ zk{e%{k_bwL#bE!%L!6nLR9uo+k_w9B_+k_xNG^-d0}X%2=O*Q(=D|+L%gjq=h|kPR zVTezLMp{mOa$-&@Lp;t?w2D)~2aDl5It%+DS-Ch)#EQpy6c+NiSD*+<0eKCSaA`69 z0xk~m9bFYqg>$MPiIX8d4-#o5x$&9BDa9q=bG8z55GfRVxW*tprV6yi0aWROXxR8D zhz~oa3e?mF)gmAov@IR9{TtM*28|24p{IWiqlnXa)(H51Rc( z=1ag`2ueGk^KXz%0Hq($96U@1h!09<$b8WJ6EYt(w*oQ?q!whJHB6ELa!vsQB;$f= z6$lGdMM2vr&>|hF$_9xfL$x5EKLaroHva@_MuXblAW={ZFhV^63T+r0<6*Aq0s|U2T}vdr=Spr zu|fG4q#oo(5Stt15C#SY&~a%XagcjKY?wIcOb?Ja$n79DH`M*0J_X23P~LX}okzmU z0G^u%v0-{a=PrQsg8T*qkNET-e$!kXf*`_Mqt!7#n=H1RDbbXgnW;VR}K~0@DjhFCg`xGy^+Z0>lQ* z5yIv>LE!@1GYSe@7#kEEFgAF86jazTFff4T#6V_(yaI9$?0$0488a~TpfMO28$6!} zvII2V0P3qj*`Rqjm>SSn1dI*3unNWo?e~JQL2K+`Y|wr$7#no{1dQE=Wd1}XHu%f~ zsJ$DI#6jm_!Svon5`T`w2CadCsR6BBhp|DU^)R+1XpJG%e9#(on79^_xFZr9w2um= z1~jY%V}sUj!`PsKY#1A~W*f!^t;dG3L1X+d_F*LR&m*yKBe6kitzqgxYpr2y(Ah9B zHt0S?7+Vswt`O=k(7I@tIOys%7&`z-4d~n#n0N+~IOu#An0Nz{IA{P3CJvflfw4hr zhGA^bBn*uG0!c4uuMbQdv?l|`<_Db<0Clqr5?d3AZHB~lMq&pbv9plapuIRS^IMR_ zCnB-uA+bSw8er;oAc-GEVqZdHgJ$Vq>fa!VgZ3Z5#MwaS2SEKLjKo$)VuQ~!fT~GA z60bmFgVrg+%$$HEJ_m^nTFVbpvjs`~01_Lt?jEM*50bbD=u85r8x)Y(I!J5_B(@6@ zyBvwl4>~^pY7Xe~Mwne1NaChQY$qgk3=%sNiCu=oZbo8HKw_^$V(&&`pFmA#9n~J-T-1l z?cD}qL)Gtso_PSOvo0Ws-$Y`+0S&l6@VPQjcY@B}0_|@AnfHhhvKIl=u6YS%gM#7B5F6A!0qti2u|eSj+QR~3gW4S+cQ8WR zSIBHoaDeOsi6OT!sI}JtWG*on)*l0fGe|wCodOaAu|XIV7a$t6rU}Fb`5VOFAr3hk z5F`$2orB~+egd_VL425bpzwh8%Ru@->OeI5+H(mB1_sc62#|T8_yVZ|nFn$Y$UKl3 zNFQj;Fo=d>kQ|7OzV;lKI?$SOkRH(fM36p^I+)oYK1dFPL3D zyJko-FmSLlFo4Vh^|C;6AoB{*%uDBDVE73$1W69$79?SY1km{lAPb=wCI?#k1Tq_D z?*awLT5*uQpyUgZ1KA5&D-P2GGNPCV`xFWm2dEDP^9Q)y3p0#?fuTi&fdRCC2_^)y3$zy$qz4wxEs79zAoD=w3P=tV&Y&VFDZc>fq$90alL40irqmieXNO~#*!kdDOcT1dvo23qXE%*X-StIW*A3flh8%)tse z8H1UF9lY?~laYY|x^4}$=^46iO&YXr47P3!bWJ(ScaR8V-5O{$0{Xf&&?YKo$htL9 zUCQi>Yuy^?bV&HRHPH57*t)fsAPZpY)=EGe$htL9R|~#w%^kG<0Jd%oG;_!c+KC2R zw`2DH!tygrSCdnRbj0+`Liy$7Tm%qC{t8mLJDTek)(URcdRjRFR4&~{_k zx;5~!Bj~!d2+$%5=(@H4pt*7Ay0vv6Hgw(EL68fe>()R^^(*jH0RmgM2HI^5 zU$>?PigVbywRDiBuyt#$w{{wN-5NMA!`7{VHoL>ut$|jYvl3pn20EAl zzHUtflwe`&)|@~b*t#|FT2Y+q)<7qW!q=^VhM8Dl>(_ z2GGJv2JnH_5H<_94J!i!I|Hct;b33^tsmw9uX$qujqO41_j6}I7Lvm%$*a&k6|i?i83gqgDl?!av#WEP+Nv^4oIss*fK+q zWuSp-sC6bFg;48EVb;lkRthkhft<-0tPC2`F9I!%1Fb3onIsRkG>WO1fk6>8_6&1G z5!ex+HLNP2E-33VkOX8AoGR#iERGA{AjyHRas#tK4iX0i8v{QJDB#t=%U?&=vN4E4 zFV1H56b7xO6BA_wU78J=d=h760Nph%p$4WTK@uQgDfmJ$@NLj2>&lQ$e=E6 zlLd8CLiLl?Zs!#3Fla*m)hTIQY54s5!Z4n&k_Dk5EuAqf)_0XFzLDzdiuIS_ii$E?2 ztp(rp3K6db4V*HAFG)o+6Ljk=UNbpC{YZRE>f*~1+W!_wgWE;q}3uif=l_p2@bUA0(G@re0+LdX)-8XK@u=1Mc`j{2fn5f zqIh(vT^?v-e=!4i31fT_Aso<-Vg}I2GMvl64BkPH%mV#C(Y zf#yp<;vhRgY}nd0(3~R3Oi*S6t;d3~L361f^&l%iY?%3=;e3!d$c-R2%zTi4gjtd9 zP6F-gg}M#4rV!Nmg3UvN;tVvu4blhdro-5vxC5C3TH6M~FukC;Gnih`fB;B6D9&K( z+dyp4JTN140uAJD*cvs^d=!igN?kBEXzm?mCdT?U&;%$00|R({8z>S$0~4S*Jt!Nz zz75I-pD_kygV(n~*`V-**#%zT1{DXdZ-cVI>)W7g&=>)W7g@cK3=8@#>^$_B4*gR(*6)W8>;Pq`#Hh6s-lnq|r24#cSw?WyUab1`> z;Pq`#aq#*!C>y-K4ax?uZ-cVI>)W7g(4-5@9Ps)!s5p3i8)W7g@cK3= z8@#>^$_B4*gR;Tv+n{Xl`Zg#VyuJ;}2Cr{}vcc=ypltB^HYgjsz75I-uWy60!Ryy-K4ax?uZ-cVI>)W7g@cK3=8@#>^$_B4*gR;Tv+n{Xl`Zg#VyuJ;}2Cr{} zvcc=ypltB^HYgjsz75I-uWy60!Ryy-K4ax?uZ-cVI>)W7g@cK3=8@#>^ z$_B4*gR;Tv+n{Xl`Zg#VyuJ;}2Cr{}vcc=ypltB^HYgjsz75I-uWy60!Ry|dbu zZBRBFXiXTDEri6DM`CLsu}zWK4j?wD1qxcb3|)%`s;44B;-CtYfq|hN#D=Pwjl|vr zVnglS17btf9Dtews;91k#G&RegN9e2YIu;?3P@~o5F2Wy2NJs&i4Afes7?gYpt>K% z25Ez_LG1?^8@bK}4UNOZL3J*S4XSftY;fHQBJiw@y9HWv4D}1>tY^@=G?05?5aIy7n-Kw$`K zTf+2$(h`UbTH^y^gWAv_evAYI1IQhq_yXw%$$|UOxdNCOmu%!By} zBm}Y-M1$7uf!HuP2k2Tmko!PQOpqMNeV{2jm>WR)K#R!gk-AhcIncRqAU!bijz}^v z{9$7NpL_*U4w3_z2Rdc}rUztRJr@H5C~tt+APkd3KM%H%hk*gKR|TX7gkkDHyR|@O z!|Xkv09i{3@(0L1kQ|5x&BMd=fb<{6vDOa#JXi%q$XYv)d9X9xK<1&J2m6?ZfuS6l zW;kRv1Gxd_J{LvML?0wvKz$659LPLyTNi1qT@*h9LjjhxcHnj}lDbnk*4lyY z@Bzgm$SoiY+6M$GGeB$*hPm%FsLc-&fMRD+>}&0gp{=z`QG%?s1BDBy&jIrX_^fWI zSs=<=6cQgGHVDJ)1>GM6(gO>Z0wst#ka@`G!GiiWurv?Szgm=m;US0t#W3?gG*a+0 z^oTJqfX?Fv<0!0h$0Is*l}_j85quTt!0J?%YINTwo*_n=3)S0@CXR5wRQfWcn1X-p8~@r4oLqO zboN^)Xzl~F5VsW+vJ4CiAcY`@GcmHAWnf@nV&niV&|zX?1-0gxnAlxFOX*lxLDLLO zEbO2vlZk^Bv~rY*gB?^Mv9Pd0R?&fu9AX7sQ^Ldp+F-`|6r@oAlrNcBSV61kSPz2M zwW)(d*g#hVu%s}8N?~>uW-rj1JdO&G2A@fw>2uIYS%@1-J7l>eHU}9kh z-Mhlg!R!t?QjQ1I_-FP6SxyoL^BE(^~zkgx%W&A~Gjv`PZZ=Hbx+Evx{uv8^IO7M^>zB=r}=V?SM`e1A9cCffsbA4Rj41B*Y+V=y*W=Hr7y(r7S$4^|H{j z-*`ZGSfQT%#tB-t0m4utQO|xeK%D)?0~#BEuA$=rxtFyRY(4`&3n*O(gSvt6v)@1m z0kW1cf)p@_psb+--Pi$LP{$zxI?5l);SnhUMQtru58Bypp!3jJ8^JOXBA{zNSewBd z8Ic;09;|EVdO$L;HFTgWfLXi1dUQl2KoQsr<`_WEj)JYB1GNC*Yv^8s;tjTjE*Yc; zwua6dBm-MR2Z{ms8ahxjnTR!XpqqN!zwv+$a%9~FQZK<{4zdukhK>iah7Odf6nH@6DA2RtctEEE zLf6po>;{D-WDOn9FOb)XT0;l2%Yg@UW;t{X9S`U}C|1lhbUctXbRhKsJc*zzaTC;X z3E}Amx$^<2wG_bvy1$6^5vY`j;h6{$e+*Ke!XO5sK<7n)*Vc%GJOVlU4I~ad`;Cc_ z;{xLBH;@E)oegM74@3i)3leAGXF)&vt(}2^0de*l*nE(XI8-_K>^Be_arPTX4fO0c zaDfRr`wg78m>>lx=u|K;pMinR92B(BHFVaFIXoiVAVbr@ z91#)F^+v3)HFTi6oLMu#cB_bhP7`I#1S``J0ktSuv%nk!kxWoh$_8^RL_mEG)*LX$ zK?F1~%bE-3crb9n&VB=XnuN38K(Wri&w_sT8|xC#8E4>ia8jU^UX0qHDjig{GtQX| zTK86*na;qd4bsgRBvZ`5s0~VfAT_d}Mixkk9H>`2pM!w`w4)AsJewS-jNQV)zz_pI zy$!U?O`b6ta>SU;#m2-05(RvX1s#K52cYN3JjgLQ$LNg!RI1!{^j zLCFiU$V>?|md@S>%1|J+kW{V&y4;;@9mvJ!IT#qk!341oQK;RI0fV*vGS7#V^= z6eziZR*nVF2g@)(F3W&)4xo)yr1mOE4QSAYi2-ztCMhe&GSl-Ca~Q~5NQJpP3%azb zB(W%67rIDGfA}At2JK&wwRS8sAF@IW>-lNAjLeLj%nXbuYq}UYLF>VoI8_-KIprCM zJ`OFhB();5gzRI`@GP_eCn5a;cqrgp##Nq7&gw1bIx2>Ex~<)UdIfyo*yy?~a0n1S z{0wp)6=?Mv*+-y(PKhIM_}S^Jby zg48&cjLJ0#_<%}Ci2`vhzC+H6ONwAhbCW>pDq+hi3rwM&%>{XOK-XM>hVVhPG>C=` z&w==`HCLeKF{pNj(V+IB0R!arBhXqaPDsCxev}!gLkbEDFvh(91~kwI zmI4#Z3`hge;I&e)Sr4!@12Y5i2s3Ey6F7(=l3?}FMJ7-YX7ETOlmnIr&5R-QK{I&B zd{CzXnUB7<3OPA|>_?v20r5d2)5!WkyTXzA67bbvphN;%JB4fmXuKG-Ko6z^#0SmI zA@doaHJ)BFjD@^N3X#2FRWV2}sGkC&L5)!u8x(S|HBq4PDcD(KAUjdcAcHy()bNF= z0rj|GYCvqzSzRFWK|LuD8)OeCW0kL6c zgn{m?0f~d$1!9Bd6+m`@%ms;qVgSU3nFH#TgTz7Z1+ih~fcAxf#6j)_v0>(b%o3); zIbxucO6{}2KyeS7-vqCl0tF6i-4v7!>Yl^YfY(Yv#ldT(pltA3DJUCsMg>eg_zoVZ zIA{wDOdNEVHjE9rKO4pdUHk!KgYF50u{VL{bfD&d?t+AggSNB5*q}S#VC-*5>OuGZ zz{J68rJ&}3*GfUz;I&dvHfa0~rXIXj3Mvj>D+OhP*GfUz?VveyC>y+13d#nrm4dRt zYo(xU@LDM-8#KlTvkSad3Mvj>D+OhP*GfUz;I&dvHh8TRlnq`h1!aTRNq)PUDYLB+vqrJ!u^S}7y8<&GyjBV-4qht-WrNpBLD}H7QcyN{trV0E8gqx4170fy z6$h`Cg0ew_y+13d#nrm4dRtYo(xU@LDM-8@yHu$_B5M zg0jJDrJ!u^S}7y+1 z3d#nrm4dRtYo(xU@LDM-8@yHu$_B5Mg0jJDrJ!u^S}7y+13d#nrm4dRtYo(xU@LDM-8@yHu$_B5Mg0jJD zrJ!u^S}76l&VnfxWA+f8F*x+?jQ1w$l;!yX1&jo|Bw<3vy>pQ5Kpn4j%9tl(z!`Pr! z5sVG4*PzWVP#p|g4+E-qVQN5k)x*R=b7r9RIUsu;L)RvO+5(^nSdci#sUM)?AUk2_ zd4cM1kREEEw*@kj7z}IdgZv9p4_YS!5(BY87!+0@8Z^HTVuRW`Aij(kWE}xW9Mn1l z$$^3$)Hwk0VdjC>5`o%$AUz-qQU{{Z*X`7ZLGGCYnFk6tkUEfgAoqaG1Brq3fzDI{ z(J%~>1F=DE9#GqgkUG$M9FQK^Sy~|TK=y#l0AY|E2&12+1zHaRYL|f2fH25?AR0WS zj&zomjW`1XXqFu050HC6>Okg$rtm@Lg7kneX#K`DkOB|~)GmP1pmqvK4=kKp#3A<( zgUkc9@w8R$&4^v!Qv)if zkkP z)dVvWyB}z&4I|rDP-mWzg9o&1hKW@HL~*c!dL+yo?1`XNG{K1Tv3`Me=|k>yd=8S9ZU=i=;vdB&dh?Ij|HmVaG#HLgo%Lxem)lH8hP0HSbIShz|O~V z0&yVcV=V=p_XWGxQ5v*P0Cql>783&l?>5BR9&XT8Y^=y@dqC?ZSh&F#`GL>D;@}2# zW?=U^f*PO@HkP$L9I&-L;JdpR7#R4DX(tSulm^n9$TAn!oW$I=2#Swru2{0@#F-52#H5 zU)#e7(g9oBBM4H2^IpemObiUrwLOp!gRJf0t_C>(dOp@HkO|Q9u|VgGqOR@1f3G9x z7CG4YSjRyNvT)z)xCr@ttji$#VfQ+MIcn=iJu=BA5KpfclSPdXOSl9M|PyT_e?b!#i2X?Qc63779y^hHs8Q9t$8;}g_ zUPmU-;sV&(o?MU&Y;DhaQ2fBw_JCplzP1N6FA87V^9dAQu=BCN2Svf|b=(Is4Ysx? z5yU}T+v7{h`B>ofIna9@yFgCEay}Ml?KJFONAPh=khMMBuRv~uo{t4O(gV7-hkGr^ zQPA_TKz&Wvy^eyQKp|>v4=B4ja32Jj553p%Bgk!-YkRo8Kv4iaA1fQghMtcFJ_ieW zJ{I@_MCiSaQ$cPc?R>0Th_yW+cYzirKo$dm&MSgkF$WUIvbG1bpc%2Y2do?<1inm; zfu9Auwg;pYv9<@K2D-Kfd=)NeZ4bEI!E&#oH7NN)*Y?auUfTmM{a|Z*+(90O-Rmd? z(n5G`&q|Oo*u9P~KpfcG9x+ffz|O~t1IfVF_F&xW$jr#V06!nA3gimd`Bs z?0l>iP=bM-j|JN82*1~{7$gHb9}BcF1%5sjXfp=w&c^~>i^~RC+XG4%Y%9U1IDzVQ zPy>N+4(Mh^Y4C|r{-EV$APJdd21b97V#Z+b0-wzs3=E*1L~@X$tK>nuN{?_bFvu}R zGZiyHMHv*L85tPZj)C;Sni-69Kw71f85pBL!XOJ3*MqkI#e%G23|0bNJPSJWS{AhF z0;F~h*jVu4RPvyX3(T4#ur;8yKgyssGV3ys1USzysDN(SWLpOI))UZTACTGL3?UBU zLKpm~g0EkNEE&SL_y=@kmkI+nw;eY#9|Oba9g7SM6r4+idJe;6yPUG zaf8msLOFv<5%rcvCB$kXy!R}EkI#Y}Nrmm6MNkR{EyZVK2m(={Lq zmg++nM?t7~=;A3OJtI8>m=t){8@g_afdOP){Hq&OqTxBq}d2qS>+{JS(O^c|#u>GN1!2 zl5(;k*I0s<&%~F&Vt#Z15@>NE=4&O?ma|bdjwi<14>Asaa)jj(3}>s zdRXNLsuw{SH6yVIx$yuJiZ6mGLSCi>H3W7(6R0f zCa7x&+8qXCgSL!-%mKLz#DO81rK6_GBb<~3V)DZ(5@B`hUo?MM`3zF^MfGup!kBF;RIrX<{wATaAIH> zJ;Moy*k3CaeqOMyn^s@VX=@ z8@w(F$_B4Xg0jKulAvtxx+EwYyey*k3CaeqOMyn^s@VX=@8@w(F$_B4Xg0jKulAvtxx+EwYyeRy*Cj#4!RwNsZ1B1yC>y*k3CaeqOMyn^s@VX=@8@w(F$_B4X zg0ex=LNI&5>yn`2;B`q*Hh5hUlnq{&1Z9KQB|+KXbxBY*cwG{d4PKW7WrNoxLD}GS zNl-R;T@sWHUY7)AgV!ZN+2D0aP&Rm75|j;Imjq>l*Cj#O;B`q*Hh5hUlnq{&1Z9KQ zB|+KXbxBY*cwG{d4PKW7WrNoxLD}GSNl-R;T@sWHUY7)AgV!ZN+2D0aP&Rm75|j;I zmjq>l*Cj#O;B`q*Hh5hUlnq{&1Z9KQB|+KXbxBY*cwG{d4PKW7WrNoxLD`^t31M}_ zU!-+O;4_>+l`R7UgA!t%4N?kYgVs^N*vR!JXyg|r4yrd{ zY*4)kV}t8Q5P|0$Ch$f*s9!+$6@u0=f!qVSTnNMlwMXtj*EE5aSisI|0<}+I>z+U( z*RXX@pm6&JRS#-+fZ_*a4yfG$niT}G4H+01U}rUf+94n@5C#oRgY1T_g+yk9+9e>f zKw`-43Xpv;agg6(Y>>GyHppBU8?;sl#s-;13_kh%aX!P|{0-$w543P6~K=A@n2Qm-TJ_4Bs5(DW2t=|FB zFbt9dvC-F0;Zlcw?h!~GY)uZx9FV;r8nn&|#D>X%?p_3~MFRO3)OH2Qf!v3F?h)wx zkMGcY1u_TbKJ;^sY$O;M4iItf(P>TwhQBaFz(dR+QyCaQrw1SjGo0Wi?%bn4a*%az zAb)_|5Az3TP7v8VE*|XbqClsqfb_t^B}N{yE(&BGzH^VXco-POp?MMH1DIW)@JBYU zL7ssDG>rx_57hPs$${L7e(sSY9|HsEt|O3HAPh1OghA`vKr|@7fW*s$v9F6lKlf-m zj&)J!=N`Ssu`UYz+#>-6$hs(yKR~-nVEzEDn*+HIZSs*&qyapT3cS zkuhYU6PP4)?vaJ1fdN>d0^vIbQ$QVB9P6UY92s^fAunhG)qSwFPkWhE85lsToFHM3 zYn>C=zo0UH5n%vzut9-=Sm$&Av@VE= z9dsHWGb7t($U3JRpmj@3tP-H*LmaH26wC}g!$=*m&gmFpozqs3de}OrAE0$k;AKdV zbxt8z);WQfRYC3n1g(9*z0PR@@;ayGAoqBJDp>|@(A+9BY@L%8NCL9XsSxBJ*g7X( z(0ny)ofD`6$OX`KPTxGhY!KlIe|kAy3VN>WCV1bQyRzw=sG9x z!Xgsx0R&wq30voM6trdq_c|xg3N-i`Mxg!<{2oAYkOLsAnOH=wAUGV56G$L3JR*4@ zH)CDrvrLc8QpvyJk_WtK z8Ag1dc!RBTvIMyRw$5oQD5hcSoIo)EU*`l$Iq-E(pgUPvVe6bg3tZv%0Cs^)gROJY z1#!^UIk}Ru&WQu$1?W1b8j#bltaAdbvxcp60`>D*q3fJpfZ`Oo&Ix?2CiEV_N|2+V z>zuZOLK1R@5w|QTP)Jzk1X@oFJ;R9mFUW0J);WRpbFo6#Ihlj}0$t|>z9130&Iz>e z3w946cwrc6>zqKhhYrSj0F6OG3ti_l5qX^xI4{H2Ie|JS@OuECfntX6I;VvolVR(e zK+C*XVe6bYK+ynO=M)A~hI5@0Xg3~wos%2LV%Rz-@DfwlIwvDgqJXV)0*&UNuXFmt z%)k)9n!q@Toq<8*8OTc5I;TVs2e!@$e2pJ$os$a4P}n-B)gU*+);WoSIIwk20iXl} zTjvBi5f;AA$sQyFTjvDoKfu>Hfi_9fZk-co$P2p8X*vr71KSGlf*?@64r(AU&M^WV zWCUL4yeO_5n(x)2$X&pKtmpk3_&0Yl*mw534u}#xX;fJ1foE# zOjHG+i3Ug?3fd55V1TzpLB_uZH7glFi_k}x5z+N#JIMBs_);n@Bsv6NB*X~5T@JEr zh#7QF5i@v^5Gl)pXtWjxG)oAYI4sQrtqMs^A^YYyx}7-`KYB+Tt?q~e-%`c^T3`jb zwG48c40Z2%BXX%1I13hMSBPW*{a&Ph$g zxhyDtq%8bkvq||G{&kR*m@sO!xVPj z5NMtRw7v#pCx{JOcLN%~28n~zg4nRLen5-sML-?`X<%Sr0Ii(?sR8*1#0L2XgkkGw zkmt%kO=D2^8>AH!7BDs`Yj8kjgT}f+dO>W^9MoY6Hnu(@vV*+8HPYz77f(AXSI zd~^*CDAzGCjIP0fgv00>97s5fv^6-!Nb6thKx|Mmje&u|3A*kERHuZ3#6e9y1_p*G z5F4r{8Hrs2VnfTBsYq;4sDkPy5DlsqVQi367#lRQ1Y;xDgP^fQm^dYCYQSf!LEQ{G zKM1t81>_#kY!QeJnm)Y+T_Xc(qdb7JL4JP*WrOPcS5P)+5EP`J+UsIKW)g$3t$%?= z4_G@WoIwoG`6eJXtQ~bhlz{=%{s7JIgIez(InX)<(D*fo4{AGr^nupuz*_1cK1dyi zMqmH(LKLx{1{8)Mbs+Q5*S~=7#RBPvVUS%QHv0M(Tf#kbN+F(bvCN;y4!wef`S}S>o2eL~=7QyoWg+X&n#x`j+PyIMfmRQIw8Pf5cnHbXxnsF8u8eF}?*&@mR!NkHvWSUr?LmkNP}89j`eR3zD7@HL6B zO@G0$=tu?w#1yKk%j#DUy52HH3dy>HAJH0KIltHZ>?t`0hr=qO^X4iEU~4CJ*sAWyOIoB&Pk zg6|dM-~lf@0ke5{9)S!4v$3qz!MJbi4Pvbh5BR7Z=zU}CAXA|Cje(AkWwiv^%E7Y) zG;s{QZ|pZ{X44uZF2HjT#D?BC_8g=adf!+C$d%Ch#ymlKVfT%(GBPm0*6Q#q1jPho ztqv$%!OtYp1epX|s}lrL1Y4_vao-pyT|w9CKtc?%R)+_CBnkAsG0?&!*nMLkL8hUs z)xm$?SQ65GW8k$XkhMBI&Y(3ODEE!=f|j!=uugYjW?VDP*pc8jw z7=%H$M}bxafw&^SK|u|>*(?fVY&GM4&}qvepf#MV5DtgPUW5#f$P$nq*v)33>YlZp z@dhgcgNO*|yf668W}83`gWYVl4y30AblnDnf@pkh0Rw9rBM%1ygNn#LkW2@oEC&OF zh6reJ8~kQ7c~J6z-E39_azP*19utvjP@1iPX^GvkhYBMptU#GLCWmFYz7elP?oU=bJ#@eKpfc3X5jn(V5@?_ zH=BvGL!HOOAnXD?{U{P-BIry!_|0bEQ`BHLoArSr7Pcx#4rFl*BS;Gm13yavBLjo5 z5%lzsI6bdYM;&1Rq`CH!Wy29Tk!o6W!{$fYxa^vj5VFBXK|Yz8{o z8-BCdDp1)3yV(r1#FQ0wvl;j*P1wz5l^|vCo6SIx4JtCgaRR#83={&ApmGBopA7sg zpe-}}EJxWuX$W*brX(om!%_g~j&pt%eGZUhJUaseD`*ien+YgJq(HZ`u`L7N!3JtX zfSMwVa|AdU7$Bz~#e&i-NCLFJCl-_dL5HqNrxh?T#)4FV)XU6eWnf@T0!cCk$%5K3 zpaYCR7oW?4%4Wu7kQqlnmr#Hjp%Xblm;QpUGGkD5Wnf@f#L2(_I_*e-F^ak51_Og) z4FdziPEH1fe;go{F-#>44Dz5Z*G-5{up$P27SIt*N=rd^v>gRm4Qntl&dC6|KAC|r z2P6zy?x_rNZVt$~jKL}!85kH|aWXK-?_gkH0PP%7U;4`$OmA>;Fu8yxrjmS2nz!PlPbtb5N#UZ1*UAwpiskiCe!GJY!Ye=psVI2 zMH$s4LHn;sIg<(X5G7e|M$j2cAVcJkWW*U5kPl@-I;%+$wqy#V1?@UEkVy^_)1AO> zQf6gf=CIn2 zW&quV2Nh$*BF2U+#>ULZ$pjH#gXjc_@FPSx!Ay|(GGG=nNM04pWQ6Nr;^b#wWM=1N zVPItD1}}PJ;^bvu#9Z`7Aen*Be*#T!CugK4XUAveWtPN)*7L@L7Ais3`IuNR#3LQ0 z6<-We#1Nm7Sds`@&{l+en_hWxF_>Qrz55DuoQ(pQD9r<1j+L4MS#y+=lm@XNH>n8u zsx0#E<|E_qEYP~7?D)jw!qUv5)cB&*OTfhD-#qfU_27n|AFHj?0d)=V4%5ZD3<{=j|G}SLgs_!he3Q$ zdIGHn1f6#U;)5_qJ?Pw85F3O+d{Act#0FsyKL^BsVh|rR7Ys{}AoDt*av%yM4_;pg zYI`9UBB0g8>I8z=AbUXTDPe3-83i&290}z`V8V;bjP>>o>c?CL#9K;5dX`nG^5F1qPf$k&(=>^#jVsk^o zZ4%U8Q290ki4D5I0;C=kq#!moh{3?Xuo|R>2Xc1{h|LWRXV5hwA|S&-0X+cgL_z5u z6jq@1G$1x;tp~N&iGtDwY<(eUEia4>I=>Fa25paou|e?yV}tLI1SJFp1_tmQl2A72 zZYG!-@Ewv+aZnt=#6ja7FgExONvIm|9g#Y#BM`kPex)dKw_^&V(&s?UqNC&L}G*Pn1Hzx zG-C;4gEmgX*q}YgFgED;4j5Y>bfyQ??>0zmPb7925<3}*U4X={MPh?ChQrL?ha`Rq zi4B@khpBmoB>oGD%?6q?fVxcxi7ki3)|;pm%Sh}8NbI*r>|aQ13DDh)&~Q*iVjCf`?UC3%NbCe8 zb}kaT3W?p0#GZo0UWmkAhs55E#6E$P|U~DDOL^U*Q z)sWcWwi$@Pb50=WaxGZ;KM7rz3`#%9YnqYI348%n18RqVg0ewP+&@q@sJ#tZYX@2n z4eG;#R(pZipmYRUKLcWe)(L~|@dB|y?Ql&d1_lrtl%`CeY*3rr4$21I)9DFigWA}j zI`70pyR0akH(3vYBHmHrA4pk3oqk``L0*Qm#(S=ZP&@3;=pWyX!AO@&k z1L{ODK+eyCg$bxR4r7Dz1&j@HH;fHh=L}UaF9Bf8$kL%ZUWJuz95JVlk<@!Ze2KNt?hSC zkO>eBb027-7_xa6WEmKG*dhJ}DF?}c!VgqN!t{VlaOY-V&_Ie)m>l}L@O)kd1`C)Z zC{2JgGcYiK%2trsFn`3TGBAMhDX5DHvJWH&qCw>=l6HpWe8ioLn4?bIy71$C3=Cyh z`~fPnL2iJ#Z-P1l!yoARn4ms6NDkya^mXC3f(#6xb{y23;BhjL`_b2hzZN6zTtppl z;?{+yh(pFVk?jSs(a%Nf(SVdKpm4^wE<8t^f#C_r04N6e0mKB=H6Xvk!exdAL>wqTS{H6< zZec>~xrjGF8+r(=3paCQ=ulb91X{ZNMW;27%sfMiF zc4KCM%1FG@V2T5D^db`zE9lThCMI@Hlr`S#LCd*0SV6JJ1U-+D zg;fkB2wCF|Igt^xJ_)=Sj2X7Z8+4^HE9g9N=o)Wl$cc=g+K!!t*=sLoB+(XR6J(9| z9?%hrz93P^LPF4Wtl&jz%nVE{?4SkW@HO6`^`gwsHQu15lFYC*-h7BP-k?j2p=-QB zePCAD8t?XvGfnJVqW+8-*3R#v7CmSW(t^3+Ex>gx(3RH#Ag5tjc?~&_ z5u{au2h_fYp2x@oz77|<^11`$d&qf=JfJ%jSRv;z@^phj5^^3R&s~uDM4iV7vde*I z9ms8vduMs}g7jjZ$H>DAvKPAY8r0`ug|58z0tF0o<+UQn4bYX>pnD)#kyl>lu`)1# zuf&9`yasbY)-&+4lt5NqgNEmz=P`mL5ckf4#`_`n&Vt0T+&c?eW{tRa7OWg31YX?< zyLT3(6>;w@NDcJfSx(RvRnWb&-~to6@|q86nEVp0$X{V z4dTGgV|)qH16z3wK6NpZ@hfOPTLgL@BZy-lq6cy!Y~?km-@*!8c?}xmV1=)|1|^Y2 zu;u2UmDivUklf4;O;Zf~EGyVS%c`RhE3YqrBtfyxz|V3GEO``6er01|U`+ z3p&-5Z8^Bu0afjw1_I+8bNG3Tp2+7hg6mDjU>VRtW>1hB#t>PMt0#lHJ^U=70XeC9 z$jOQzn_&$L#yKDbprza3(jL^b0vizuHX>LSG(iHoUse`0I|5?Jfwq2v^vHu3MKdrc zfbPzKu3iQyfaD~Q9pWG}7!)Hw5l{HI#?i&flq^<8T|+F3SVJraTZYWQAdj>Ps1c4|>kMc8P5O@(Vcua#K2tB-6Zm}{@V7Y*veZg|1}}7lu5*naG7Dcv#sXL9 z;e&|PgvmIUycU5L>_HYY<6iJe!8+IY`1I5gaB^qBvBVX$1_yqO7-&^bZf0>ZO;3s( zUD66V*b=moio604vsgtg5}`|4(=tKlUV?AH1+5z{2d(vtPtPe$Wr!afCp{9gH2_?q z#}}9uGa#)c19>MGMy1T9Ae)g~YsBoAuqf~J>1L*}3< zC(t!iAoU<|5F5184I~a~#el^%7#Kk97f`boWDcmC3l?W!U;wc})1@HwphgW$9K;re zE>Q(969Ns%FhGX?VdldcDKw1|>SsxGqQ@wDu5L9=v80nkh?5l2NJ+_+n3#3I%<2Cj$evb0|TH5q2geX#5SP z1~iumTC-@uz`y|NF@o5j`7O{~6Nn9JqvwLwATlv9fEx0k4j@Pzw2l$9h5*C{WiHTC zL=YR40YMoG#s=|0>l#6R1hHY~U;0AL1a${MVF6MP%3Po!XAm2d0YMm~7t{{`v0-Oq zg4BV;L4E?UVd7OFGkG9$D{38|+@tTo|}j3OUCLHlGUWfxza} zL4JX;LGB0X1r5xAFz65kklDy{z@W3LK|z1Px*> z(dapvkT4m&%N7z2qj%Xt!eOM{Wvhp@))0JlCa49%Bo10b39DZcK;ocEkb!}r z5X1(xVi_11s*u>tNNmuJJFvBq$oJQRLK|czhz8Y>FgD0~7#mdA!`R4mBB(tB69?6a zFgB=8gt0;EZ(wXYq;+qgwOufA(8(__HmU0c!F4N$z_Y#$bU7iceg{ngg4Th7{Cg3) zUJW#h4!aW<)Fc4S^MTZW_Lw||ssV)u=sq@(I4C@RK*d1~f6$?6AaPI|0W{SPVuRXI z{Lpn~pf&*LW<-#!5+m0jUGg z=xfdjplfeH=7G`%NFB&LQ2P#K9!LzN4|GQ&h=yU19Ec4{^PsFrNFB&MFg+lBcNiEL zV15GeLH2@ZP+9`9VR9i7kWMGaeV{Z7k^{L9{VrY^Mg|7ZnrDz1APln$ea+bo2?mBa zMBK%Dhsd)?`?whxKzp}9c7ia>UQl}-5#rXI@hC$2MIe9RTXV)Q0*MchTR|8WZ|G~zBora) zK<43Fb9SD{yLdN<5_c9UgE#{Ns15LL6(( zkk0aiEGL6py^D9P7dZSu1p}V~gEP{auC+`I42+<~o5fIHffRx~$;86W3p#X@iQOKw z7z%n)CnMVv(CIUb98*9P6Dz3NWa3~2)i6vP>>ofYvwT5kM{$G37+B0ei@SJ0>kC*w zd+C_LckD8;u=;@1fu^0AA$RP8ZpLLv0bjt!#=`8in}LCW9kd{u8FI(&UC`n#UyvvR z2WU$0Gy?+zCx`&A=mM>1=Hg&>|IEO^zzsS$kJ%GsIRiJSn1kQ3`xoR1$Q`?&^K+PC zckG6OChB2py3R8*F!1uRfX;&huj%4$0?phbujvAr%)$*mX3hY_=HOlrG62lx;Rau+ z3T9(j)5XEf$iM(P2Mz3W1_s_K%nS@Ftfv1N85p=5K~vV|AQKt5LC2o5T7cLr+@P~d zSuH_q4(?B&r72b*HV-#=eStNIEx;`Ya)AwqEy4}Hpw$+{mf!{-NoogT%Wyk_%(n-z z6&M6Sm+!*P?c`Pf$w1b0anA#pjkCg01P|;ACWA0G-tc_J}+K zuL2_j19VLnB*Y+Vx*%5$hk`6+;RdbUho0NX{T8&)0cA}W2WVLs2t$qJXITMilkl^E z0*4oLk3Dov7dPk(Pw1L1ZqPY#tfgS{8TeU1DMR=b3j+h_G)>S#1(7h2J!Om_1q>pW zL4Jd*++q=t0Lef&93r44^w0%fJR+cdWvsPeJpv-2=|lLMu05c%&lLagKFO7w8ap zR@j;@Pz=CN(*$k*fZwqz1#&fPO;;!=PUkU(vN13`5dkmdf!(nS+FHtrwx&yvm4P9H zb#nl=(=+zzZcrA7uIb{A1?h#X>Eg}?d4s4mT_C$0xT`_xA#1w04M5?Jxu%P|1Z4gVkoo}b z`Jh0D-mwc_LQflRKoocp7bw|@gR+M>mYYq~%U6U3S>uyT-)I8^xt(21KMHeyW|NDXvN7r4j-t?2^iEhb12 z3R=?z<})y``h$W5x~2=X)E#u1CTJa(2)Oivt?BXrsZs$aSQgMgCIc(hJ9e$XrKc_9 zT+nfxrl3HDt?9A`#R6TWF>4gmNvlA1!Pa!$068{>@jV-;0RlZu^EmW0P4FGN8X(oMHC=q5_=erF z3%;cscE>JwRVeI^T~N1^6}F};7Gy&P*lraO@NzZS9lHh~-()d@sv`ptCXh1N9lM~T zO5u0xg6^uP{El5vtYcZzB?Vfc&9(t7%fP?@s?!&eM1yIL_Z6nAu$XY9ic1A%)RX$;EWqOy95!)AZf?*?grH*}*m;qZaWFD^3WG#B6&XB* z^|=`sxP+0^awF7Qa5FIQ@H238GcfQ9Gcxlb4CLd5pK}OO#1B#gvQ+@Aj1^|DAd*?E z3=Be|4C;~$48mYVAjh$SoFM{L#Of&wGD{R{G?Xg_I_?qTUU63N0g$+tR&lFKdJ2OA z41OM?G}2lsaRvq%#9AuQvMNT%b+>XzYpLWhPg_JRuL7G7I=c}R!3>~@Lq-PB>HOeS zKzP{`D6N2XGB7ZJ1}B&pwvxQ;DJL^&^r%4!j~WE^DUw0kh)7-cl#`i+w(v=sk(m*^ z?un6;556)9d=6WDT25kmu@TyZn+2sMsd;6fMI(qc1^H=d;7dEplQX~v)`8YJ#K)H< zf|njZ?)XGn0Fs!J!VnKRlqx|DEh@^(X8^6vNr9~f0pEq1 zo0&)L906V_S6q?;%50!uf?Vzy4?09GC$qQ&c9>#XUNJ*_eqMZPMP^BSVo`cA zK2Rt^);N)TM`?U{az+vZDD9-CD1c1^dkjp#Z2`L&yetY;D83l7pawb6Ksf~YP)SHy zN7VRHbqik013ecqz9bi95z^t6 z<(YXUpdialDnhyuH@-L}GbJ-Gvjl#IBo?0`F2_Y&tP9E6AUnXZ4>GwZH8F)D-YGL3 z5*&#YUmG)MxZ zZp1D30ac11&x7$uUhe}+1)%jjptd_WFraf$prJ!#K4^Upq*{gLe?-v=I?EDL*+X=| z*64u7oI&kgkSJ)_5VZCM#)hqN0nJT;#6fC7Y;IwY3J33TTTBY@QM{a0p`)bG{eoOc9v+OwianC@>fxa}h9c(7A0e zb{mqKiAZel_&!uGcnlxPK8K{{HWC}OF&1X#7bNljNbJ$`y&&lkven;1@K*C|DuU~l!I=c(h#9?4y_{a`9;|k<6Hqe?9aB~NAM;ikJY+Z#2NF1tO z6~u<-YeOV9NI$H80o6$`Hb^Oq4O&|PV}t7*5CN@E;dUXdBRK>b6oJ}%2D&B#WX~li z8&qdrgR)`uGr8+3K;{yIv8`i(1{qj8$nPKqXgCkVhRrum5rM2l18hG6RG`>OeI5I)*hOh;lkpU1J~0a z4Nwd^^9ZyS2Fe9(2?I0H*D>4?VPF8A9s%+%zI6S`Z|UjX+$`K!WZNw5Dl6e zfawA0Z{;HH?3_8$#I0jk%EiC{I*$`%HVDJ)LSM&l0Lguzb|B1s;C2oJ#O)yc4Ll4C zl0>Xym?=oy**Uiai90(-NQk&~3?HOH(+H5WkwEDm<`3}sRv-^Rv6K+PPaq*!xS+3N z_=6NK_|`Fa2@!X8j*c(`g98y~=j4bmFd*NF40E5pk%0+xVFGx00>QI$Oo(5{Pys5G zaI9khg%JpwIfAb>g{)=pWwPbs5n6N0<~D?Xmg|g`8!H0?4@Z+1!(FDeEPI)y&p@Pf zxj;M!8+6AhDDC4q>&6Xq_B5z4;!|J{MY^{%3)DV~W@KQ<0L3Z;0|Q7Q$Wcs?6%WiT z?4WBwnVHx@EjDIGHqgX0Gb0D64ap2y|G><_3R>OA%)!0|w5~xMy#4_+S;QiOZT$l? z3oB?tDvKg$RRd)GLpd`814{~cHVoVPhlL=O*w;TWv#_JAe*i6OV)g`Cj<)^*G=t9! zS^r=KG7h%>K^`;_244Tb%)&k&wEp1+Gh+P%cw!oP{R7Bk7VZb2DJ}yLn}hoV$N(^# zhZ}rTD40#m`iB&x^$(yU_E^n9CNgk?XBsU)Y!>by(4?Uyh|R$bItG!|3dH8&2G1;7 zgV+MxFF>xb0kK864}#{~Y(Z=ZZeEbf>_BW8?q48rdk|ZJK>)N&1-|~_CP)Ul{$V%B zBTmJwKG3fdSACLn=L6)*`gUWr_`iEs8E6H5{U<7g^ zmQg|k=8$$fb1y)FRNh?c>{6`WXS`I$UD%CCxnBx{=prjtQM?C zKm=4M!`DB6?>uY-%SecT&zfllb7Vw5gY;ls|F99{TG;vrP#1=^3#>;+1boC!FPLK> z0$Pv)U;h9)wVD;S{sDC4AS-PB!$XjNU}xHZ4w;6pe*nb*eEq|Akmq2xiGuoKtg!VD zpavfNOdIHJqIcLqw~2yJ@<3bvV2Nk_131w6;>#IWw}F@(+_ONILf1cl&TeMKvi>0+ z6i&N9>Ls{mgZ#1=v|d1l8+@h-bp696P>4a-KY(u^g`8=_tq#%)UH(5WP#V9fDign0Vh~| z>mOK=*FXFRMJ8XzL$9Q|de-|3F0zeEkDR40-)SEb{sXT~IQBooNGI{{Zqi ziwOACF4+2qi6Fbs);~NzUjOh3ZT$nNi^IMVEDNpE8RvkGXO=bq z)%QxEWCyC`Wx&fJlt5`$j)8$ewt#_A4a8v#mg58svVb|D?t>g3NS`{$K+q|$^1RUF zo@2oGfkrbGGbk{E?+=v+9cFx-gMpz8D#Kw5k|}0jkOysde8|DTFbymd%T&Ywy5JL{ zvxI>`5!9Vw1>YwMGY_0iX!c3qQ9jFUDWKH1fQb6}_;=0`vH2kiBwCV$Xzb69&+U=e;k|4Fp$QN^BTL1!T z+9KU;3CaMVp$SHYU=Rh81uYLjT#X63y96=@5Cx(@M{qMT#DFMs1_lOZhMIcNN;!}* z44^JMDE%@rfHu~Gg+QbFkO2~C%Nm*y!IGdwNuU+P44~8X7)iRu5;WgUMJb@;bQr;GW{`T&CMHJ4 z_<>lOGI$o8fEI9o*4{u*m!ZPKllbD2qLk8t_#y@(7vRJffo_m0&P*Q!Yf6gB5_3T3 zgy3FSQk0sS2fbi44YWW7w5ox)B_^btsO2fY`A0Goa-%AT^*Q51I!6sR6Z>L2TGs z8c? zi4D4I0+wckLH9O5)quv4Vd5c3;t5FX3M6(55_bkl2rq*lZNsO$QnZ22B-#ViMF0g|R{FTwrWnq_sex0b-aq=nOs>8+5lb zj19U+48{&c(hIsL7A6iFS%$GeC&RQLJYE& z1GGj6q#x9V0=2I|1EC;3%sh}^LG4qRTR`eSY*1POv0-b3B*YPCr-0%DBnL7NeN9vs zNHY=!*#+W)!WWcXKzc!ZTjB*}0AfHf$X*Z=lx9I}nEU346SpP`bS{Y` zXxAvn5TrFs=xd^$h%+!8AYx6_SxyE9P}+qW2k-NM<{**%F_)Wx0W?XAt`2=o)Dk(w z86lwX1^E#~gQgIX&66VXY?l;y;?_i2fz~iV^B>5KFuTy#M0LnBFo5pY1Enian;hmo z^fghzd<+bZM68LLLgd*lSBX5^g_p>)T_hBUTN5QJ!T`Q=4-_UK3=0?ZHBl-G5Ott% z0rh`i;Q}g?U}+wtKa-S0+k2S_bxPvPe2p ztgr~G%0j70S(5z)Uz0G~^cNh94o5&VPZDNpWMF7msXSqZz=R23?r=7ADNIt9YzhVo zcM3EmORi6`ER1ZgL3S~6fYutZFtOHy7Fuzzf-XyC;b6}I&0;lzt_$M^Rcp*%pfh54z@nBQ zg#w^CY8DpOAdnJm76t|ub&v?_A<)cK3M0rqHWn5y&{ccvp#BJp&uq}iHR_;MV7?$x z1`g2CCD%a5)qn_Q1{M}}(1qVz94zjj=~r&hE!iy4t#BJ|4`5F4qEug$M&b3+QkX4$#ePpmhYCAg41h@Pba8Q(-j) zRsP&pK&xG#%eCx5mO__nF@sEpF4qFxa1C3oB@0?009~&2AGF#5x?GDFlrIq85l%F^gzK0TdrjWG61$*>lsLe-t1A~HSd~N{)Ya8QQb_NC&5zwg- ztR0N|*cli!M4o`+61H3md~ytIxmG7grVnh7i3s>cxe1I%*clisM2bN1Hj(iZI|GA_ z$O4e1lfcRxMAShtQyFiwGcdS_fMS4kCL<`=Jw!k)5!P9Zpm6mOF#;Jqmr<3Cf#HS- z_@1qK;4pY10=klqbw1;B@N%swAfp$6jef(x&+-(M5jI1vAd7|{R|5`pzW5>r)~%rI z4Lz;~#N^;k0@<@2bb1vJHxtNdJ3wqczWAgx2G*Usm>3uYxIx!uu|k(?fwl&*?gd4Y z3^(|&or9oMrNI3eWX|C>Rt5$Y?jImW9o@>xz@Wjc3X01UH(41NbhtrFm{?DKW@TV7 z;EOL!VqiT3GT($RzO;aW^(@GhHhl4=MGUOxKyGv3249bM@h2+-g9~>e$ZeN6*%%ny z`Qmeu7+9}@^m=etfb4}X*8*iy)|+(<3=ARMCqZs_09wrv!3|!`_y|*mAAiAT=PZpddl0Vc=)E&&mKPGC>{&=Pf1(Uy_Z10nBG$U|k4G zzOsylEDQ|7;-H1Wtcr|Lpwni+d083EW)P_Yc^I}_s}iI|6`YVb82DL0sf(WlWTr4^ z7D9s6mT?8h0De%U*@4*%A|4=)J($BLQU>BUFoFhGc|?wYOmk*T1oeIxI6z`MV9sM= z5C*L!1|3)P3uGdw&|r;Z1eeGnKS6O81zs}6A~FpWvC&`|4iN{Ci7|{IEj$eTEFk5= zS5L%# zG9t|&55SgdtpYhD6Rb=_1iV@@3(PSPnF*4~26HS#K;13Y95Ba01ayZwYc81M!N38E zY*3K_juX%oWS|g`1eF`$_+;Q`0bNJN&yohdf((>EB|$kKmI5AvFCPP4O2*H^z|O$H z{0Ov?$pjQ5yhY3m3>@qdvK$Ny-0wllm?S|=25!*xi0o3JB94WDpGBF2fkBFQ7Bd3_ z54%h#NNqi+>XijC8Mr|Wes(!f5@X>8)n)ARAbp^y|H00{ApIO<+bVEGfLalt<_O~) zCr$-(X-+sAOPZxXQ`EU;q}3VVW4A$Ou{|1~RCK zfkA010|Ub^uv`>a0|N)huOOSjk;KTr&jQ+8r3_lv#&#U!4Oo+laSq5)AkVggJPSI- zUIn!Dl$(ozK?!tkeKgo@(M(04u^mvg$Ds)FJILAMARP>9pr#P(GLV}g@vmkDYBDLF z=VV|I2N4YXETCqUss|`Sl|hz&0ZD-ZS{&p=aS)e*p9K_#YM?XRm{mcxL-eX&2jyip zW{_$^OVp6prLiE^tBuq{hd><-Y2;;LXeSTJU@lC9EnAadU;r&l;{ctK1X;x*Sh>oha$`wNvzrk;hV}jo=$IQS0zh4gNPB|6^2JjV3ko9h9W#vVgC8>HD z42&Rg#G*L(Lb&tbb#KfJjLfW@oD7W2OyJdT_29K}j9@l0iM%$h4nr2K7k1$s69Xd~ zGb1N2c>Np`_|7>-(4}>35OIElh#*8n2&_^BAr4k4%gN8c$jlCP56GR2oZRrkp^%pG zlxF6~XXckB=YbDns!9c)<^*2TlbDwRIt2#lAeH!H$e}clvy%)M;?d4rK|jC=d}^K;_%hodULB~dcA~YUtISlIAGN99HK<5pC?E@2_6K_E0%D~PDiifNk zOG+$GWdNVr1U{809(R~|8BYr>*ElMrUOaU!WgB%(JUVxUETv(b}lp0@@np|2` zoLQENbVL&Ls2}jbTkzw1U`N-$56A%^LlpGpkS!27(>h1U~c$+t3w~x7$p2W*jY5eh=sGx%jSv49zK^br#SC zjo_e1HKz!aj>x?(uebzsG!oKjL!cwdVCN=*!Vwe(kWL)A1(gD@ zQ{NzmJi!k6f}DH?^$h5wwah%&Nnv@Z6`;Zc`5-Cy8DXHXg`M97J~b{LdW2MZY6<)Z zH5#qd%gkqp2PKgBqSTz!#A4+98V^3UD;|Cp7Wjm;cxV<8-I zfF?yiG-&t>G@I(lz`&pkz0MA_cNH{K1`-E#U_fd?Y*1SaWDbW00|Tg;1sWL!$-!Dr zpqVg=7X;>mN*ul7k|IMrLk7K~)SN`Ul+>is^!T)*#N1RAk<7fbdT{H6X}65^xuTQV(doAZWe^q!xrhY)}dWu|XKb2d%9Gu|XKb z2lZk>Y!C+V;VpgeNDl)8=(cHCY6O`N8UX^S1!0hS(E37fI|Nj1#1}EZY9?5-2wc`+ zwhcfH3`lztR7-*tVHQXrBhhc&gRS8M#RRAm26G2&JtAmsg%LD)&j2~!gAp2JpneG> zG%&#POncDw3dROSGmH)L25g-KXle{(4#+DY z_rTVEf!43U)PvR*z}Su;e}ODvfUF0AiTfjogYSERssSD34O5eXqy~Hr8dMEv8zW2& zXqXPh2CYqivBBq{LDkPeG6#GP8dMx~0|ZR{O(ZqXkl3J05@2dT1tN^i1?pu(%@Idp zt01v8k=Uk4Y#$_c1QI(1i9HF4Jr9Wu8f%5QVH=V-`1~NKdq79|!_~19XZY1_` zB=%(__A?~*XCyYLYJ#~9bjJvc4Z5oU##RTdWrVuf1c~j4#P&mCM|tj1 zBZ<#JVy{GEZ$n}qMq*z;V&6q#zd~YvM`E*p){`5+CVTiXwdxaM z^)NQ*FaQ`Ew8jy}#&tg-Xrc+G26SIBjGczm#z0;_3Yx`%sR2z5!`Ps8a4Ls z>OtWKau0|N!k|0?qCs&4V#C&zrbt27^?}4e`ayCa|Dms=1-0*Cy?c;3Aax)bG&%rc z!_3dj;l-@vcAoD=(0htdH1L*@@yaJ+O7$gT`gW?#}lqRGOv?>Lp2b5Mo z`atGEgAc?7jr)T!XxRuz9as>&)(rbyilFu1Ah*K&aYh=l9vI{gkb6LKAb)`F<3u*k z1+=^isp}1s1H~su56rv(83u+D(Bw7)1GuLSk^`An2#R-@;}{qiVz?O?1d%)fGY@np zI*bicp34jAAA#5)43h)3-$7=>>^-8)!0>^AfdS+XP*MiTf$RmXdxhx%>F3}BFK+}f z!5Ah7>W_i+z|7mC0$FbhG7nU~g5*Hvfo9lXdO!wf@G&sV#NrQ7-wmV(X5I}I%sc)- z=7H8RgUkcvBanFq1sE9CU|Daw9~yozb-7~L&maUHP6jPLLB=tx6T^N6A?WT-kiB3< z3=9m<#321@7#}8g6_l2c?&Z`_gRHj&g$t;=3-Tk#AK){fVVW5j7~Y97FjOG%VdgzT zGtWc~q7GypsEmP`2P&Uoc>`ojnm8nWL2M9)nFpegf}bHmf`MTHBc%Te>N(*2F6KyCS>ObiSbpb!UTaHuBO+E^BL(3yBF zpapzP?u?*fjhTsE8gv98BO9o|WoG06^}CpvSV1cWnK@WNy>Dg?c2Fmu6|{JU8N4`_ zl>@vu7Sye0-3MCWDgfGnz|6w>6STtdGHAJ~I!J^CbhsW9>?}hTuj8O)IiSk|S$seS zvxEA&EWRL71`c1)6+@uKvDZNhaT%Cd*n6267(k0-K|Ocwy&yxOi(`+1*nXfwfQ5k- zbpADq|2>e!MWB_i!Jq*K9u`(*&>|->CD76n7WVIq3=F)@pwg37w+6I07QDDoAH+mi z91B`$3tJqU16uwBUJ%Q}y%1y=mv;|!pTMJt10$m)t4CDgn;#lyJ za?r)Gppjfw*y7lW43NdK-k{Z{@gVnmf|#(yu^@JXAScKqACQ|F7zG7Diu^$w(BfE8 zMg|7ZH~`oq@(jGInZS!oeNzYn+`G|Y#w-V?0OJ8d@B3#u7G91aoC(m7TLhexCZqzAS*7PQ2kwVtsG zyf_xLT$dHLI2Ls6HY;p#Y#&HZ3*&0!#j)$ai(}`3WI7o4gBQnkgDizDj(rc}z!t}X zFBt3t+hZaEI?#r70^?Ee;#lx?l@l3HgBQnw4&h{-1XkuCasU)RQyD==5xR(gVt{of zBPiHCL_ouItg{$F;p!vu5fol?89`m@8zN^woOxhxKM`pMC7bz-FTjgq!K;NAfQ<$% zjs=av@PdX%GFUgqz!%4YLmkKBSkUrO*6pCyBM&!doPl)*hz(mD3mW+m;LZhE4_zD! zIvb63FDRO1xWT749t5Q-1@2j(a5>x#UL0Ena^cZ!;Ki|LK_PkK7I<;26lj&=$uCHY zV?pM_7RQ2IiMlv;8_3>^zrc%Qe}RJS5*O0qSdd;1Zh4Ts(8aM9AofjAt0jaRv|gU| z0ca#Jf;$=HhDV@sCWaey6D`VFhM+_u4)TvU$RpxlE~o>+z|Yda%D}+P$ngk#mLVuO z!HZ)-$puLRmq8t)L)5sA1q|c>r1* z3(6QE4}#3=AxuAaBVsf<~5vH?S};fX*_E1`Sz*^RhA{h|M4Z8W?AV zEsoUyX;B3yB+v>;Q0n4m0huWbs>eZ#V^@L<*bY)=#|UCGh@nvHGAy z5e=5%5cv*L7Q+bA0$LmkQZ6h6T^u_Pv^e$;$jW4JdS?&;9i_{f!U&3377h=^ng&{~x&>5wf~s~<1A%dl6X-5S@M_guP&x%k$do5DFy?|z zk7Nv%1vR@sLo;%qVsA4C1A{zxv8X)ckU|EjNh}NuY>Pl|(NC^IrMFtE)5sYg;qX!R#z!6)p1Lhvn< zu+^X7(+WqgoCHl3qF*_Qv<_5)fdO>wBm?x?NyK7Kd89R-3YaS~6_M9#dJ02UY@!@g z2oXYC6AC}55Hvf-$PfggKxrIxDJ3YCf`(xj8G=9*XeJg_0Z1F9KLTwBBQ=FVxdT*3 zk#m*h=vvFvR0?mhEC($LB4fQJL|+D|xeH%b`5wHO5wu*fo|6O4X5{2yU}WatWMg1t zWeqL%h=*nBzv4NTSpyfm0$YL0@s}I5JQNefU4(PH&P-_5G zse@?P03wJFTXqO)KY$toAQ~hNT1E&`3)&6?5(l+iL4&BErG}uU1XvA-&?~OYElEsb z0Idpy&>5inPeCH!g?TxdC8&pm2p? zX2_@%gaaP(1C4~jxeUzU6==wO&;ZWtRhhl{cf5UL*3W`?Z^ z1dY*y&JYCI17gF@Cbhpb;wu1_qEHVR}LHLNL9c zPBKV6D1E@z?}6B$Ia5$i9^@8KSisicf#zCZY|#8Sj18KdfSC!J=LVSx(hG7ABXlkh z`TRtXy)eB_p!q7$A_WEp2GATfOgsQd9JH4gCXRe}DR}M?su#4D0Hy|f77tV$H0KQy z??p0m5)ykZ5_=;O8#LYv(+i#lgPIAR!-BFww~N5kfF@XBY;MrnIj9=Y@GneU6-itR ziEW0&#&v#TDw3MXNbLDY?A1u@?MQ6!x%E)@oJSG|-HQfu+jAsw&_Mw(@&8ETpfwLL zaY@h`IjEVcNNhtSwjB~1bO#koFERI+_8{p6omT?Wi+qpi6(lvFebO*BUy#H>V>2*u z(6J0Kwlrw{8`S-vQAL=zDUvv7{2wOnk0cJ--VGBkLlSRBVoyL~&qZRdLSlo4DPiV- zHtNIJ7m?K5Lt?*1V*fy5gYI#G=>?58!q}kuvS4h`fgLb5^7)B5pgB2cI8f{S#4|`{ z{y}1c&TxUbK>@S|4{EOt659fa?SjMxUBv^_+l(YG4O$lmHAfwZZGyyhL}L3Pu``g^ zrAX{1Bz8X%dkzwN7ZUq868j1g`ymqh9TJ-fv_=lsSs#g9H;^Xt)B<6p=xxH*x<7fq5kqk z5)Xu~(*xBnsUUHvIawe!)SO}@b`27{6^Y%4#6~`2aRo>mYVQ^#_GKjY6C^gMeuC9g zpt=^u1{nckgVuAv*r2)$#s&@k!q}j?6~+eDtuQvY4h0bm4B)e$Vf7=Z9*3y`uc?Om z{VeqCLXf*IL)oBq4d}Wz(E2NoyY559LF?0=LfN44^4Cx{C~QAM*`RjdA1E8t-T|G4 z1TqKIt^v*Rf!Lt-2rqQ47icgXWH)S$B{Cb_27tN~x$Oa3PX+TA$nP*VsI3WOBd_lQ znMn)=`2*Bah6W$_3`CF^OfM+DKy1)j5D**G-U9KTh%qpL))|4q1f(A%2XZ^e&mca` zJkabQtQ!T=2T}*3(bsOdh%+$UV1V4C35pAlI*@tb_6xW_0Mf<409x}8VL?ccT_6^y zeF#eCAiW?yE_I-NJ1{*kbud4H_#k^hG-!4T#D>YqNI=$Pf&2?v%L9@Fxev4y0@*y! zdZ%9?hky(LwQry_`Wc7|Bp4W;5OD_LD^3Q68%P$wnBaC7)NBxSh?{`{)V>3;K^UeE zv^NaoR+v9pA6wOVnX& zvOxFZ!tR&-2r?bIChI+Df*-mjD+;tg0D8YH=mI@f=$b6h;wDz;nyj6mbpy~fS)i^A zD|Ahk8b~i}O%~{6F3^F6pv70*pk-sMSk`2L4rOPBt;sS5c@pQEEKonJhcy_qB8VFt zV$d~Npo0ckp=+{0eO6ZJnk-Pila+)uSw2W>vcT(iaIeYQg}f%~DJUReYqG!>LPAzv zv50_LLC|Gb93q=Ro`cBnh=A8uVO^62I_wL+CQB5w=mWMUYX-<3tZTBsi}zq_vOryO z`2Dh=LpWJsYqEktE`Y7cas(L-TayJkT9g&GCaVY}16z}I85Gm7HCdn-z`iC6v=*He zwk8X_78155Yd^>|*qSWRRsvSEHCd^U0}DZmi1^|Q7+AM}Ry#4^Sd*m#@&a^C);f^W z2&~C+1KAE;lf?tl3tf|S3B-o3$pS6XV}-8Cx(*6s=$b4CP+}%wP1a*jCW5ZX0`);z zv8>5*0@({)lLa~=j}^Km3v>n&Y)w`!$PLgnS+hazM?SC+ya)@llmzFREYMX5{4Aj0 z99(O%ftY07wY)zI1D2c$< zWP!$0SaGh&0*#=-*JOdVd$PjTWP#eG@HJVXphN*%lLcA~%!;-qO9pvO78}TZ*qW?H zkjr3evNnMd3v5l6JIGMjnyix`J+L)d;0wNCYqCl}i3heO3$((Y6}BcT86-0RYqGjP zm$GgJEl&b9m_U;U$ZN7xLFp7E0bY}(3R+G@#F{M7l^SdZKxTqEXW&jBVojC-$PiGQ ziNZBmi$Tc@x+d!`Xc5>dkcGsp$vOvGh_)M~esoQir?3S#1A{0p$c#N)unl$#Z0LwpcP4j z`U7j^q&Wgjx5TvftibqQi@kI>uJ2(!K z_6GdKI8f6T)G`LquyIBZe{|^<_=q|1Dl;OFe*-O#00kWwvrzr~x52-53p8&B@;s>f z1zL**nxg~pK^U~w2Q*IwVuLV<4?5cll z=(;J;IU=yNCZHS9Ky1*uAkg`lAU0@y7wqm^P&*NHmL^CXw6+I!_bsR`2s&32Bo1mj z{zY2f1-tJS)P@Az>IPB+THgiQM+#yOhxJ_s;)r!ZpuQNW-3e-Ag8U5Ple)fZ!XRJY zl|kk8U2g_xeb)slukSKYfSkDn${V1(0!s%ok=C|>N(#{WF4$U25FeCAKs5ULt`H*E zcbW4sFr*N%zH2s->$~m{xxPz;$UAPI5V^ifhR8c^KM=XTtANP$T_HrS?>ZvJz>p1! zC@6--8~l#j@?`KOw}jSrSy-4rmxB>LbISnKDaWzC%gm8sEtA29FK1a0XJUcQ(^~Ll zFEc^}a^4xPbFx5vUf6k9AU4QrAR4r_2_}9X>6|Rknh8eGK`)@289|Cci+DjaVolag z&{4va&$N!PaDPfhO8vYqCIx7x99QO_G3~lLcBg#)`Qn3v_rgWbG9PH|XGN z2%Cqy6=WEAeHJlmvKBEiFu>Mib%Ry{K+nlK2U;QkU6Zv7Bo1AZB>`F>09}&>Iz|e% zCTkLC8XLMMs|(};=$b5fkU7vbSx-RXur*nr6?E`5S>d2n16bB%fseI;t;ym5DZ;rX zYcJ9{S>OzXXk+CTW3Ebu{Fur*nrGqzc=uE}ZznFd>v z1v-EYz9tL2E)BLO3v{#`D{M^`XmvaMoUHetc!RCUG6F?3Y)#e@kPK{17AOYbYqCIF z2;k>rf!DCX)?^(4r6$;#tT`alU~96}KpeC+S)et2M4yudy5bvlPF6k0X;{`|f%eqF zE|CSTvxJ?K^$_GN=$b6h5kRcaHCdoD)?sV1wtzwsx+d!%$b1skWUT|44_%XW52P2% znk>*6aIDZZS>R*Kplh-~X9dF6WP$F)W`(ZF0-Zue;yGC-2kALk2B4sYuF0B$d`=cP zFT>Vkfi~yC&&lEkX(7BO3w%r*Y)uw;RUK?i7HCTu{G2TCqA;9mvVMVfxv++T54{qx z2c=WknyeY1j0-y_3pCit3R{x}Ub2d|ChI3N149670{EOOk;fnpz}95NfjF==S)hv( z;pb$rf{I+&nygu%qyt-%1=!8K};~anZIaw+wYqC^8%c&THWkA=ns(_B5VhoW54XMxNU|^7A zjA1HakYkKyD`w#O|6fWDc4!u8?;qPjkOd&aK`jl&IUo(-L$lxuw7_N>fXxh+1)VUk z2W%$ju2wn5D7GT7nG6i_poQL$6R|)Fz{g%8Evr&^0a|P|dH@#aI#THBDmpK=VuT)m zg>>qbJnHH#$az)@=z^fs$H2e-tuiGa6zF$94qP-7HT0camOWT*qw z8-o}LQUzf#Fo4E0m>4#JMnp!}PSJbq6t$O4L9X-Uu)5ROxx3NI%6_T8`df2?}BuW@Z@tYnWgzgd_=OaH|pKeo%)5)DDEmfm)Qz44@7LvOHvs z5~yqj7X+ZP7gCVIj+0`5aAA62Ylc9rO4vP-pd*DqXD5NwfY`7zmB4oMFo3oxf$vU) z-Q5UM2kLr)%mBF�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 #$b9R_XB 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�uJp$sz~p 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 x|0H0eSp)NlT!eAs~l)36q*wtxdWU) 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

HZ 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ℑ$Y*Wn>5fQJ{K=3kT7H<9VQCCh#RjjKo&7F1c4|} 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